news 2026/9/18 14:57:18

编程Agent 装 emilkowalski/skills,TaoToken 接住 Claude Code 请求

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
编程Agent 装 emilkowalski/skills,TaoToken 接住 Claude Code 请求

1. 给 Claude Code 装 emilkowalski/skills 前,先用 TaoToken 接住请求

给 Claude Code 装完 emilkowalski/skills,我让它把 Toast 入场改成 ease-out,它仍然返回transition-timing-function: ease-in,阴影部分还是写了border: 1px solid #e5e7eb。这不是提示词不够细,而是请求链路和 SKILL 执行没有接好。我的处理顺序是:先到 TaoToken 官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content=skill_first_key 拿 Key,再把 Claude Code 的 Base URL 指向https://taotoken.net/api,让 Claude Code 在触发 emil-design-eng、review-animations 这类 SKILL 时消耗 Token。这样 SKILL 规则、模型请求、返回代码都在同一条可观察链路里,排障时不用猜是提示词问题还是配置问题。

emilkowalski/skills 解决的是“编程 Agent 缺少设计规则”这件事。它把作者在 Vercel、Linear 等团队积累的动效与界面经验,整理成 Claude Code 可以读取的 SKILL。作者也是 sonner、vaul 等前端组件的维护者,核心判断很直接:Agent 缺的不是生产力,而是设计品味。它分不清入场该用 ease-out 还是 ease-in,也说不清为什么实线边框会显得廉价。装上 SKILL 后,Claude Code 在处理 UI 任务时能参考这些规则,从“能跑”往“看着舒服”靠拢。

下面按可复现顺序写:TaoToken 拿 Key、Claude Code settings.json 配置、emilkowalski/skills 安装、SKILL 触发模板、ease-out/阴影/边框/hover/弹窗的 before-after 对照,以及 401、SKILL 不生效、CC Switch 三件套错位时的排查方式。

2. 在 TaoToken 创建 Key,并把 Claude Code 的 Base URL 指向 https://taotoken.net/api

Claude Code 默认请求 Anthropic 官方地址。要让 TaoToken 接住请求,需要改两个核心变量:ANTHROPIC_BASE_URLANTHROPIC_AUTH_TOKEN。Base URL 固定写https://taotoken.net/api,不要在后面拼/v1,也不要加 UTM。UTM 只用于官网入口追踪,不用于工具配置。

第一步,打开 TaoToken 官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content=claude_code_base_url ,注册或登录。进入控制台后找到 API Keys,创建一个 Key。Key 只显示一次,复制后放到本地密码管理器或临时环境变量,不要写进 Git 仓库。

第二步,配置 Claude Code。Claude Code 支持settings.json,也支持 shell 环境变量。推荐用用户级~/.claude/settings.json,这样所有项目都能生效,同时不会把 Key 暴露在项目仓库里。

{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_AUTH_TOKEN": "YOUR_API_KEY", "ANTHROPIC_MODEL": "claude-sonnet-4-5", "ANTHROPIC_SMALL_FAST_MODEL": "claude-3-5-haiku-latest" } }

如果你的 Claude Code 版本读取的是ANTHROPIC_API_KEY,也可以只保留一个:

{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_API_KEY": "YOUR_API_KEY", "ANTHROPIC_MODEL": "claude-sonnet-4-5" } }

模型 ID 以 TaoToken 控制台或 Claude Code 文档展示为准。不同账号可见的模型可能不同,不要盲抄模型名。如果模型名不匹配,常见表现是 404 或“model not found”,而不是 SKILL 不生效。

第三步,用 shell 环境变量做快速验证。临时终端会话可以这样写:

export ANTHROPIC_BASE_URL="https://taotoken.net/api" export ANTHROPIC_AUTH_TOKEN="YOUR_API_KEY" export ANTHROPIC_MODEL="claude-sonnet-4-5"

然后启动 Claude Code:

claude --version claude

进入 Claude Code 后,先让它做一次最小请求,确认请求确实走到 TaoToken:

只输出当前会话是否已配置自定义 Base URL,不要输出任何 Key,不要编造模型名称。

接着检查环境变量是否被正确读取:

echo "$ANTHROPIC_BASE_URL" # 期望输出:https://taotoken.net/api test -n "$ANTHROPIC_AUTH_TOKEN" && echo "token exists" # 期望输出:token exists

不要用echo $ANTHROPIC_AUTH_TOKEN打印完整 Key。如果必须确认,只看前后几位。

如果你用 CC Switch 管理多套配置,记住三件套:Base URL、API Key、Model。Base URL 填https://taotoken.net/api,API Key 填YOUR_API_KEY,Model 填你在 TaoToken 选定的 Claude 模型。切换配置后重启 Claude Code,避免旧环境变量残留。

Codex 用户不要复用ANTHROPIC_*。Codex 用config.toml,凭证变量另起名字。下面是最小示例,具体字段按你的 Codex 版本调整:

# ~/.codex/config.toml model_provider = "taotoken" [model_providers.taotoken] name = "TaoToken" base_url = "https://taotoken.net/api" env_key = "TAOTOKEN_API_KEY"

再设置:

export TAOTOKEN_API_KEY="YOUR_API_KEY"

再次强调:Claude Code 用ANTHROPIC_*,Codex 用config.toml+TAOTOKEN_API_KEY。把ANTHROPIC_BASE_URL写进 Codex 配置里,通常不会生效,还会让排障方向跑偏。

3. 安装 emilkowalski/skills:用户级、项目级、手动复制三种方式

SKILL 安装的本质,是把包含SKILL.md的目录放到 Claude Code 能读取的位置。常见位置有两个:

  • 用户级:~/.claude/skills
  • 项目级:项目根目录下的.claude/skills

用户级适合个人常用技能,项目级适合团队共享。如果项目要提交到 Git,只提交 SKILL 文件,不要提交 Key。

最直接的方式是克隆仓库后复制。先拉取到临时目录:

rm -rf /tmp/emil-skills git clone --depth 1 https://github.com/emilkowalski/skills.git /tmp/emil-skills

查看仓库里有哪些 SKILL:

find /tmp/emil-skills -maxdepth 4 -name "SKILL.md" -print

你应该能看到类似以下目录:

/tmp/emil-skills/skills/emil-design-eng/SKILL.md /tmp/emil-skills/skills/review-animations/SKILL.md /tmp/emil-skills/skills/improve-animations/SKILL.md /tmp/emil-skills/skills/find-animation-opportunities/SKILL.md /tmp/emil-skills/skills/animation-vocabulary/SKILL.md /tmp/emil-skills/skills/apple-design/SKILL.md /tmp/emil-skills/skills/pick-ui-library/SKILL.md

以实际仓库结构为准。如果有skills/目录,就复制skills/下的每个技能目录到用户级:

mkdir -p ~/.claude/skills cp -R /tmp/emil-skills/skills/* ~/.claude/skills/

如果仓库结构不同,可以用循环只复制包含SKILL.md的目录:

mkdir -p ~/.claude/skills cd /tmp/emil-skills for skill_md in $(find . -maxdepth 4 -name "SKILL.md"); do skill_dir="$(dirname "$skill_md")" skill_name="$(basename "$skill_dir")" cp -R "$skill_dir" "$HOME/.claude/skills/$skill_name" done

复制完成后验证:

ls ~/.claude/skills

期望看到:

emil-design-eng review-animations improve-animations find-animation-opportunities animation-vocabulary apple-design pick-ui-library

如果是项目级安装:

mkdir -p .claude/skills cp -R /tmp/emil-skills/skills/* .claude/skills/

项目级适合把 SKILL 和代码一起管理。建议在.gitignore里排除.claude/settings.local.json这类可能包含本地凭证的文件。

安装完成后,重启 Claude Code。Claude Code 通常会在启动时扫描 SKILL 目录。可以用一个最小提示确认它能看到技能:

列出你当前可用的 SKILL 名称,只列与动画、设计、UI 库相关的。

如果它列不出emil-design-engreview-animations,先不要继续调 UI,先回去检查~/.claude/skills下是否存在SKILL.md

4. 触发 SKILL 的正确方式:别只装不问,把 SKILL 名写进任务

SKILL 装好之后,Claude Code 不会自动对所有 UI 任务都应用。你需要在提示里明确任务边界、SKILL 名称、目标文件和期望输出。否则它可能仍然按通用代码生成习惯写transition: all .3s ease-in

错误提问通常是这样:

帮我优化一下这个按钮,让它看起来高级一点。

这种提问没有指定 SKILL,也没有限定文件、动效类型和禁止项。Claude Code 可能只改颜色,或者加一个scale(1.1)

更可复现的提问模板:

使用 emil-design-eng SKILL,检查 src/components/Button.tsx 的入场动画和阴影。 要求: 1. 入场使用 ease-out,禁止 ease-in; 2. 阴影优先于 1px 实线边框; 3. hover 使用位移或阴影变化,不要放大按钮; 4. 只改动画和阴影,不改业务逻辑; 5. 输出修改后的完整代码块和原因。

review-animations适合审查已有代码:

使用 review-animations SKILL,审查 src/components/Toast.tsx 中所有 transition 和 animation。 按严重程度列出问题,每条给出可直接替换的 CSS/TSX 代码块。 重点检查:缓动曲线、时长、transform、opacity、阴影、边框。

improve-animations适合扫描目录:

使用 improve-animations SKILL,扫描 src/ 下所有 CSS 和 TSX 文件。 找出可以改进的动画,按优先级排序,输出 diff。 不要扫描 node_modules、dist、coverage。 每次最多输出 10 条,避免一次性消耗过多 Token。

find-animation-opportunities适合做动效取舍:

使用 find-animation-opportunities SKILL,分析当前页面的交互。 列出 3 个值得加动效的地方和 3 个不该加动效的地方。 对每个地方说明用户目的、触发条件、建议时长和缓动曲线。

animation-vocabulary适合把模糊需求翻译成专业描述:

使用 animation-vocabulary SKILL,把我的需求“让弹窗出来得更自然”改写成专业动效描述。 必须包含 duration、easing、transform、opacity、transform-origin。

apple-design适合做流畅度校准:

使用 apple-design SKILL,按苹果界面动效原则检查这个 Web 弹窗。 输出:进入动画、退出动画、遮罩层动画、手势跟随逻辑。

pick-ui-library适合选型:

使用 pick-ui-library SKILL,为 React 项目选一个 Toast 库。 要求可维护、动效完整、有活跃社区,避免手搓 toast 和安装无人维护的包。

每次执行 SKILL 都会把 SKILL 规则、代码上下文和你的要求发给模型,因此会消耗 Token。扫描范围越大,消耗越高。建议先review-animations看单文件,再improve-animations看目录,最后find-animation-opportunities做页面级取舍。

5. 界面细节对照:ease-out、阴影、边框、hover、弹窗的 before/after

SKILL 的价值不在代码量,而在背后的判断规则。下面用常见前端组件做对照。左列是未加载 SKILL 时编程 Agent 容易生成的写法,右列是加载 SKILL 后更接近设计工程标准的写法。

场景未加载 SKILL 常见输出加载 SKILL 后期望输出原因
入场动画transition: all .3s ease-in;transition: transform .2s ease-out, opacity .2s ease-out;入场应快速响应、缓慢停下,ease-out 更自然
阴影border: 1px solid #e5e7eb;box-shadow: 0 1px 2px rgba(0,0,0,.06), 0 8px 24px rgba(0,0,0,.12);半透明阴影有层次,实线边框容易显得硬
hovertransform: scale(1.2);transform: translateY(-2px);+ 阴影变化位移比放大更克制,适合按钮
loading大图标无限旋转短时长 skeleton 或 opacity 过渡动效为反馈服务,不应抢占注意力
列表进出display: none直接切换opacity+translateY过渡避免布局跳动和生硬闪现
弹窗animation: pop .5s ease-in-out;opacity .2s ease-out, transform .2s cubic-bezier(.2,0,0,1);弹窗需要即时反馈和方向感
遮罩无过渡opacity .2s ease-out;遮罩淡入能建立层级
错误提示红色边框 + 抖动淡入 + 轻微位移 + 可访问性提示动效不应只靠颜色和抖动传达错误

再给一组可复制的 CSS 对照。

未加载 SKILL 时,编程 Agent 可能生成:

.button { transition: all .3s ease-in; border: 1px solid #e5e7eb; } .modal { animation: pop .5s ease-in-out; } @keyframes pop { from { transform: scale(.8); opacity: 0; } to { transform: scale(1); opacity: 1; } }

加载emil-design-eng后,更合理的版本:

.button { border: 0; transition: transform .2s cubic-bezier(.2, 0, 0, 1), box-shadow .2s ease-out, background-color .15s ease-out; box-shadow: 0 1px 2px rgba(0, 0, 0, .06), 0 8px 24px rgba(0, 0, 0, .12); } .button:hover { transform: translateY(-2px); box-shadow: 0 1px 2px rgba(0, 0, 0, .06), 0 12px 32px rgba(0, 0, 0, .16); } .button:active { transform: translateY(0); transition-duration: .08s; } .modal { transition: opacity .2s ease-out, transform .2s cubic-bezier(.2, 0, 0, 1); } .modal[data-state="closed"] { opacity: 0; transform: translateY(8px) scale(.98); }

注意点:

  1. 不要用transition: all。它会让不必要的属性也产生动画,导致性能问题和不可预测的视觉结果。
  2. 入场用 ease-out,离开可以用 ease-in 或更短时长。很多 Agent 会把两者写反。
  3. 阴影比边框更适合做层级。边框适合分隔,不适合表达悬浮。
  4. hover 的幅度要小。translateY(-2px)通常比scale(1.2)更稳。
  5. 弹窗需要方向感。从触发源附近出现,比从屏幕中心突然放大更自然。

让 Claude Code 按这些规则修改时,可以直接把上表贴进提示,要求它只输出 diff:

使用 emil-design-eng 和 review-animations 两个 SKILL,按下面规则修改 Button.tsx 和 Modal.tsx: - 入场 ease-out,禁止 ease-in; - 移除 1px 实线边框,改用两层半透明阴影; - hover 使用 translateY(-2px),不要 scale; - 弹窗使用 opacity + translateY + scale(.98) 组合; - 输出 unified diff,不要输出完整文件。

6. 排障:SKILL 不生效、401、模型名不匹配、CC Switch 三件套错位

问题一:SKILL 不生效。先检查目录:

find ~/.claude/skills -maxdepth 2 -name "SKILL.md" -print

如果没有输出,说明安装位置不对。确认~/.claude/skills/emil-design-eng/SKILL.md是否存在。然后重启 Claude Code。如果仍然不生效,在提示里显式写 SKILL 名称,例如“使用 review-animations SKILL”。

问题二:401 或 403。通常是 Key 错误、Key 被删除、或者环境变量没被读取。检查:

echo "$ANTHROPIC_BASE_URL" test -n "$ANTHROPIC_AUTH_TOKEN" && echo "token exists"

Base URL 应为https://taotoken.net/api。如果写成https://taotoken.net/api/v1,Claude Code 可能拼接出错误路径。Key 去 TaoToken 控制台重新创建:https://taotoken.net/console/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=create_key 。创建后更新settings.json或 CC Switch。

问题三:404 或 model not found。检查ANTHROPIC_MODEL是否在 TaoToken 模型列表中。不同账号、不同套餐可见模型不同。可以去模型对话页面确认模型 ID:https://taotoken.net/models/detail/chat?utm_source=taotoken_aicg_blog_end&utm_content=model_chat 。

问题四:CC Switch 三件套错位。CC Switch 里通常有三项:Base URL、API Key、Model。Base URL 用https://taotoken.net/api,API Key 用YOUR_API_KEY,Model 用你在 TaoToken 选定的模型。切换配置后重启 Claude Code。不要在不同工具之间复制ANTHROPIC_*到 Codex 的config.toml

问题五:请求能通但 SKILL 规则没进上下文。Claude Code 执行 SKILL 时消耗 Token,但前提是 SKILL 被正确加载并触发。可以要求它先复述规则:

在使用 emil-design-eng SKILL 之前,先用一句话说明这个 SKILL 对入场缓动曲线的要求。

如果它答不出,说明 SKILL 没有进入上下文,先回到安装目录检查。

问题六:调试日志。可以用 debug 模式启动:

claude --debug

观察请求地址、模型名、错误码。不要在日志里泄露完整 Key。如果要贴日志,先把 Key 替换成YOUR_API_KEY

问题七:Codex 配置混用。Codex 用config.toml,不要写ANTHROPIC_BASE_URL。如果你同时用 Claude Code 和 Codex,建议用 CC Switch 分开管理,或者用不同终端会话,避免环境变量互相污染。

7. Token 消耗与 Coding Plan:SKILL 扫描不要全仓库无差别进行

emilkowalski/skills 里的improve-animationsfind-animation-opportunities会扫描代码库。扫描范围越大,发给模型的上下文越多,Token 消耗越高。控制方式:

  1. 限定目录。只扫描src/componentssrc/pages,不要扫描node_modulesdistcoverage
  2. 先单文件审查,再目录扫描。先review-animations看一个组件,确认规则生效,再improve-animations看目录。
  3. 要求输出 diff,不要输出完整文件。完整文件会重复带入大量无关代码。
  4. 限制每次输出条数。例如“最多列 10 条,按优先级排序”。
  5. 把重复出现的规则写进项目级提示,而不是每次让模型重新推导。

如果你高频用 Claude Code 执行 SKILL,可以关注 Coding Plan:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding_plan 。它适合需要连续对话、多轮修改、扫描代码库的编程场景。如果只是偶尔验证一个组件,直接用 API Keys 创建 Key 即可。

TaoToken 在这里的角色是接住 Claude Code 请求。Claude Code 执行 SKILL 时消耗 Token,SKILL 本身不产生网络请求,请求由 Claude Code 发往https://taotoken.net/api。所以配置正确后,你可以在 TaoToken 控制台观察请求量、模型调用和消耗。如果发现 SKILL 触发一次就消耗异常高,先检查是不是把整个仓库塞进了上下文。

建议的 Token 控制提示模板:

使用 improve-animations SKILL,只扫描 src/components 下的 .tsx 文件。 排除 node_modules、dist、coverage、*.test.tsx。 每条改进只输出代码 diff 和一句话原因。 最多输出 8 条,按影响范围排序。

8. 从模型对话到 Claude Code 文档:按顺序完成接入

如果你还没有 Key,先走一遍高转化路径。顺序不要乱:先试模型对话,再选 Coding Plan,然后创建 Key,最后对照 Claude Code 文档写配置。

  1. 模型对话:https://taotoken.net/models/detail/chat?utm_source=taotoken_aicg_blog_end&utm_content=model_chat
    先用对话验证模型是否可用,贴一段 Button.tsx,让它按 ease-out + 阴影规则输出 diff。确认返回质量后,再接入 Claude Code。

  2. Coding Plan:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding_plan
    如果你要连续用 Claude Code 执行 SKILL、扫描组件、多轮修改,选适合编程场景的套餐。

  3. 创建 Key:https://taotoken.net/console/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=create_key
    创建后复制 Key,填入settings.jsonANTHROPIC_AUTH_TOKENANTHROPIC_API_KEY。不要把 Key 提交到 Git。

  4. Claude Code 文档:https://taotoken.net/doc/ClaudeCodeAnthropic?utm_source=taotoken_aicg_blog_end&utm_content=claude_code_doc
    对照文档确认 Base URL、模型 ID、环境变量名。Base URL 用https://taotoken.net/api,不要加 UTM。

如果你还想回到官网入口,可以从这里进:https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content=final_cta 。

完整流程复述一遍:

# 1. 拿 Key 后,配置 Claude Code export ANTHROPIC_BASE_URL="https://taotoken.net/api" export ANTHROPIC_AUTH_TOKEN="YOUR_API_KEY" export ANTHROPIC_MODEL="claude-sonnet-4-5" # 2. 安装 emilkowalski/skills rm -rf /tmp/emil-skills git clone --depth 1 https://github.com/emilkowalski/skills.git /tmp/emil-skills mkdir -p ~/.claude/skills cp -R /tmp/emil-skills/skills/* ~/.claude/skills/ # 3. 验证 SKILL 目录 find ~/.claude/skills -maxdepth 2 -name "SKILL.md" -print # 4. 启动 Claude Code claude

然后在 Claude Code 里用这条提示触发:

使用 emil-design-eng 和 review-animations SKILL,检查 src/components/Button.tsx。 要求:入场 ease-out,禁止 ease-in;移除 1px 实线边框,改用半透明阴影;hover 用 translateY(-2px),不要 scale;只输出 diff。

这套组合把“请求链路”和“设计规则”分开管:TaoToken 负责接住 Claude Code 请求,https://taotoken.net/api是 Base URL,YOUR_API_KEY是凭证,emilkowalski/skills 负责让 Claude Code 在生成 UI 时按 ease-out、阴影层级、克制 hover、弹窗方向感这些规则执行。配置一次后,后续每个前端任务都能复用。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/18 14:54:10

YOLO+SAM自动图像标注:从检测框到像素级掩码的工程实践

1. 自动图像标注的底层逻辑与方案选型做过目标检测项目的人都有一个共识:模型训练本身花的时间,往往远不如标注数据花的时间多。一个中等规模的数据集,几千张图,纯手工拉框,一个人干一周是常态,标注质量还参…

作者头像 李华
网站建设 2026/9/18 14:53:14

Unity3D ACT游戏设计与实现:状态机、输入缓冲与战斗判定源码

简介:这份基于Unity3D的ACT游戏设计与实现毕业设计资料,面向计算机、软件工程等专业需要完成游戏方向毕业设计的学生,内容围绕一款以战斗为核心的2D动作游戏展开,覆盖绪论、开发工具及相关技术、游戏设计、测试与优化等完整论文结…

作者头像 李华
网站建设 2026/9/18 14:52:18

单链表从原理到实现:数据结构核心操作与调试实战

链表这个东西,但凡你翻开任何一本数据结构教材,它基本都排在顺序表后面出场。我刚开始学的时候也没把它当回事,觉得数组用得好好的,凭空搞出一个"指针指来指去"的结构图啥。直到有一次写一个需要频繁在中间插入元素的程…

作者头像 李华
网站建设 2026/9/18 14:49:40

Excel函数公式大全整理:SUMIFS、查找引用与PDF导出实战

简介:Excel函数公式大全及举例整理版PDF文档,面向需要系统掌握Excel常用函数的办公人员、数据分析初学者及软件开发者。文档覆盖数学、逻辑、文本、判断四大类函数,包含SUM、SUMIF、COUNTIF、AVERAGE、ROUND、RANK、IF、IFERROR、LEFT、RIGHT…

作者头像 李华
网站建设 2026/9/18 14:46:01

Redis 6.0+ ACL 权限拆分实战:从共用密码到最小权限

凌晨两点半被电话叫醒,说测试环境那台 Redis 里几个业务的数据全没了。登上去一看,dbsize归零,INFO里total_connections_received里有个陌生的客户端地址。查到最后原因很朴素:某位同学本地调试时脚本里写死了一句FLUSHALL&#x…

作者头像 李华
网站建设 2026/9/18 14:42:02

system_prompts_leaks:系统提示词归档、对比与防泄露实践

1. 先搞清楚 system_prompts_leaks 这类项目到底在做什么第一次看到system_prompts_leaks这个名字,很多人的第一反应是"这东西合规吗"。我当初也是这个反应。但把仓库拉下来翻了两天之后,我的判断变了:它本质上是一份公开的提示词工…

作者头像 李华