亚马逊卖家专用的 skill 创建器(中文)。当用户想把一个亚马逊运营/自媒体/日常工作流程变成可复用的 skill 时使用。触发场景包括但不限于:用户说"我想做一个 skill""把这个流程变成 skill""帮我写个自动化""优化我已有的 skill""给这个工作流做个自动化",即使用户没用"skill"这个词,只要在描述"以后每次都这样做"的重复性工作时也应触发。本 skill 的核心差异:强制用户先回答 6 个业务问题(业务目标/过去做法/具体步骤/方法论/调用方式/期望输出)再进入创建流程,防止产出空洞 skill。Create new skills, improve existing skills, run evals and benchmarks — tailored for Amazon sellers with a Chinese-first workflow.
npx skills add https://github.com/zach22-1999/amazon-skills --skill zach-seller-skill-creator
这是一个中文版的 skill 创建器,基于 Anthropic 官方 skill-creator 重构,针对亚马逊卖家(AI 基础较弱但有丰富业务经验的用户)优化。
官方 skill-creator 上来就问"这个 skill 要做什么"。卖家用户经常给出空洞的答案(比如"帮我做关键词分析"),导致产出的 skill 只是一份说明书、没有业务深度。
本 skill 在官方流程前插入 6 个强制问题。这 6 个问题是硬门禁——任何一个为空或答得敷衍,不得进入写 SKILL.md 的阶段。
【阶段 0】6 问硬门禁 ← 卖家版新增
↓
【阶段 1】意图澄清(基于阶段 0 已收集结果)
↓
【阶段 2】调研补齐
↓
【阶段 3】写 SKILL.md 初稿
↓
【阶段 4】写测试用例(2-3 个)
↓
【阶段 5】并行跑 with-skill + 基线
↓
【阶段 6】评分 + HTML 可视化
↓
【阶段 7】根据反馈迭代改进
↓
(可选)描述优化 + 打包
你的工作是根据用户当前所处的阶段,引导他们推进。如果用户直接说"我不想搞这么多测试,随便写个 skill 就行",可以跳过阶段 4-7,但阶段 0 的 6 问门禁不能跳过。
用户群体:亚马逊卖家。可能对代码、JSON、断言(assertion)、基准(benchmark)等术语不熟悉。
沟通规则:
禁用词(继承工作区规则):赋能、抓手、综上所述、一言以蔽之、多维度赋能。
阶段 0 的正式执行脚本在 references/6问引导式流程.md。先读它,再开始问。不要把 references/6问模板.md 当成用户填写入口发出去。
Q1 → Q6,一个主题走完再进入下一个阶段 0 收集完后,把结果对应到 SKILL.md 的这些段落:
| 阶段 0 维度 | 映射到 SKILL.md 的哪里 |
|------------|------------------------|
| Q1 业务目标 | ## 业务背景 段(解释 why) |
| Q2 现有做法 | ## 当前工作流(人工版) 段(基线对照) |
| Q3 具体步骤 | ## Skill 工作流(自动版) 段(主干指令,转成编号步骤) |
| Q4 方法论 | ## 核心原则 / 踩坑规避 段(对应官方的 principles 概念) |
| Q5 调用方式 | YAML description 字段 + ## 触发场景 段 |
| Q6 期望输出 | ## 输出规范 段 |
采用“逐题门禁 + 阶段末总门禁”:
追问方式:引用用户的原话,指出哪里还不够具体,再给一个你想看到的粒度示例。
例外:用户明确说“我就想快速试试,先不管那么多”时,可以降级为只走 Q1 + Q3 + Q6 三个核心主题,但要明确告诉他:这样产出的 skill 更容易空、后面如果结果不满意需要回来补齐。
当 6 个维度(或快速试试路径中的 3 个核心维度)都有可执行答案时,向用户复述一次(用 bullet list),让他确认。确认后才进入阶段 1。
进入这一阶段的前提:阶段 0 的 6 维答案已经按引导式流程采集到位。
官方 skill-creator 的标准 4 问,在这里作为补充:
经常发生的情况:用户进入本 skill 之前,已经在聊天里演示过一遍手动流程(比如"上周你帮我分析了 BCG 的关键词,就按那个流程做")。这时优先从对话历史抽答案:用过的工具、步骤顺序、用户的修正、观察到的输入输出格式。抽完后复述给用户确认,别让他从头再讲一遍。
在阶段 0-1 的基础上,主动问这些事情:
如果环境里有可用的 MCP(比如 Sorftime、领星、SIF),并且对本 skill 的调研有帮助(找类似 skill、查文档、看最佳实践),可以派子 agent 并行调研。目的是带着信息回到用户,降低他的负担。
这一步的目标:把"写 SKILL.md 所需的事实"都收齐。等到真正动笔写 SKILL.md 时不用再反复问。
详细的写作规则见 references/skill写作指南.md。这里只讲关键动作。
keyword-rank-report)反例(太保守):
> 一个用来做关键词自然排名分析的 skill
正例(有推力):
> 生成关键词自然排名分析报告。当用户提到"关键词排名""自然位排名""Sorftime 反查""查 ASIN 曝光"时调用,即使没明说"分析"也要主动触发。
# [Skill 名称]
## 业务背景 ← 映射问 1:业务目标
## 当前工作流(人工版) ← 映射问 2:过去怎么做
## Skill 工作流(自动版) ← 映射问 3:具体步骤
## 核心原则 / 踩坑规避 ← 映射问 4:方法论
## 触发场景 ← 映射问 5:调用方式
## 输出规范 ← 映射问 6:期望输出
## 引用文件 ← 如果有 references/、scripts/、assets/
scripts/xxx.py 处理"## 报告结构 + 完整模板示范references/xxx.md,正文只留"何时读"的指引skill-name/
├── SKILL.md (必需)
│ ├── YAML frontmatter
│ └── Markdown 正文
└── 可选资源
├── scripts/ - 固定/重复任务的可执行代码
├── references/ - 按需加载的文档
└── assets/ - 输出使用的素材(模板、图标、字体)
所以"常用的指令放 SKILL.md,罕用的细节放 references"。
当一个 skill 支持多套方案(比如 SP/SB/SD 广告),按变体拆:
ads-report/
├── SKILL.md (主干流程 + 选择逻辑)
└── references/
├── sp.md
├── sb.md
└── sd.md
Claude 只读需要的那份 reference。
写完 SKILL.md 初稿后,想 2-3 个真实用户会说的测试提示词——不是抽象的"格式化数据",而是"我 BCG 的这个 ASIN 最近广告占比掉得厉害,你按我们之前那个报告模板帮我看下"。
把测试保存到 evals/evals.json。这一步先只写 prompt,不写断言——断言在阶段 6 跑测试的同时补。
{
"skill_name": "example-skill",
"evals": [
{
"id": 1,
"prompt": "用户的任务 prompt",
"expected_output": "期望结果的描述",
"files": []
}
]
}
完整 schema 见 references/schemas.md。
把测试用例发给用户看:
> 我想用这几个测试 case 跑一下,你看合适吗?要不要加/减?
这一段是连贯动作,不要中间停。不要用 /skill-test 或任何其他的测试 skill,就按下面的流程做。
结果存放位置:<skill-name>-workspace/ 作为 skill 目录的同级目录。里面按迭代组织(iteration-1/、iteration-2/),每个测试 case 一个子目录(eval-0/、eval-1/)。不要一次建全,边做边建。
对每个测试 case 派两个 subagent——一个带 skill,一个不带。关键:这两个要在同一轮里同时派出,不要先跑 with-skill,等结果出来再跑 baseline。原因是让它们在差不多的时间完成,减少系统状态差异。
With-skill run:
执行以下任务:
- Skill 路径:<skill 路径>
- 任务:<eval prompt>
- 输入文件:<eval 附带的文件;没有就写 none>
- 输出保存到:<workspace>/iteration-<N>/eval-<ID>/with_skill/outputs/
- 要保存的输出:<用户真正在意的文件,比如 "the .docx file" 或 "the final CSV">
Baseline run(prompt 相同,但基线根据场景不同):
without_skill/outputs/。cp -r <skill 路径> <workspace>/skill-snapshot/),让 baseline subagent 指向快照,保存到 old_skill/outputs/。同时给每个 eval 写 eval_metadata.json(assertions 先留空)。给每个 eval 起有描述性的名字(基于测试内容,不要叫 "eval-0"),目录名也用这个名字。如果这次迭代用到新的或修改过的 prompt,需要为每个新 eval 目录都重建这些文件——不要以为会自动继承上一次迭代的。
{
"eval_id": 0,
"eval_name": "descriptive-name-here",
"prompt": "用户的任务 prompt",
"assertions": []
}
别干等。利用这段时间给每个测试 case 写量化断言并给用户解释。如果 evals/evals.json 里已有断言,也要 review 一遍再给用户解释。
好的断言特征:
写完后更新 eval_metadata.json 和 evals/evals.json。顺便告诉用户查看器里他会看到什么——两种东西:定性输出 + 定量 benchmark。
每个 subagent 完成时,你会收到一个通知,里面有 total_tokens 和 duration_ms。立刻保存到该 run 目录下的 timing.json:
{
"total_tokens": 84852,
"duration_ms": 23332,
"total_duration_seconds": 23.3
}
这是唯一能抓到这个数据的机会——过了通知就没了。一个一个处理,别想着攒一批再处理。
所有 run 跑完后做 4 件事:
派一个 grader subagent(或者你自己 inline 做)读 agents/grader.md 的指令,对每个 assertion 用 outputs 做判断。结果写到每个 run 目录的 grading.json 里。字段名必须是 text、passed、evidence(不是 name/met/details 等变体),因为 HTML 查看器依赖这三个精确字段名。
能脚本化验证的 assertion,写脚本跑而不是肉眼看——脚本更快、更可靠、跨迭代可复用。
在 zach-seller-skill-creator 目录下运行:
python -m scripts.aggregate_benchmark <workspace>/iteration-N --skill-name <name>
产出 benchmark.json 和 benchmark.md,包含每个配置的 pass_rate、用时、token 数(mean ± stddev 和 delta)。如果要手动生成 benchmark.json,schema 见 references/schemas.md。
摆放顺序:每个 with_skill 版本排在对应 baseline 前面,方便用户比对。
读 benchmark 数据,看有没有被均值掩盖的 pattern。参考 agents/analyzer.md 的"Analyzing Benchmark Results"部分,关注:
定性输出 + 定量数据一起看:
nohup python ~/.claude/skills/zach-seller-skill-creator/eval-viewer/generate_review.py \
<workspace>/iteration-N \
--skill-name "my-skill" \
--benchmark <workspace>/iteration-N/benchmark.json \
> /dev/null 2>&1 &
VIEWER_PID=$!
第 2 次及以后的迭代,加 --previous-workspace <workspace>/iteration-<N-1> 做对比。
无显示环境(Cowork / 远程):用 --static <输出路径> 生成独立 HTML 文件,用户点 "Submit All Reviews" 时会下载 feedback.json。下载后把它放回 workspace 目录供下次迭代读取。
别自己造轮子写 HTML——用 generate_review.py 就好。
告诉用户类似这样的话:
> 我已经在你浏览器里打开了结果。有两个 tab:
> - Outputs — 每个 test case 点进去看输出,底下有文本框留反馈
> - Benchmark — 看定量对比
>
> 看完后来这边说一声就行。
Outputs tab(每次一个 test case):
Benchmark tab:pass rate、时间、token 的统计概览,带 per-eval 细分和分析师观察。
导航用 prev/next 按钮或方向键。完成后点 "Submit All Reviews" 保存所有反馈到 feedback.json。
用户说完事了之后,读 feedback.json:
{
"reviews": [
{"run_id": "eval-0-with_skill", "feedback": "图表缺坐标轴标签", "timestamp": "..."},
{"run_id": "eval-1-with_skill", "feedback": "", "timestamp": "..."},
{"run_id": "eval-2-with_skill", "feedback": "完美,继续这样", "timestamp": "..."}
],
"status": "complete"
}
空反馈 = 用户觉得 OK。把改进精力集中在有具体吐槽的 test case 上。
最后别忘了杀查看器:
kill $VIEWER_PID 2>/dev/null
这是整个循环的心脏。测试跑了,用户审过了,现在要根据反馈把 skill 改好。
create_docx.py 或 build_chart.py,那就是强信号:把这个脚本内置到 skill(写一次放 scripts/,指令里告诉 skill 用它)。省下每次调用的重复造轮子。这一步挺重要的(我们在这儿创造价值哩),你的思考时间不是瓶颈——慢一点、想透。建议写一份 draft,然后换个视角重看、改进。真正站进用户的位置,理解他要什么。
改完之后:
iteration-<N+1>/,包括基线。without_skill(不加载 skill),跨迭代不变--previous-workspace <上一迭代目录>何时停:
当你需要对两个版本的 skill 做更严谨的对比(例如用户问"新版本真的比旧版好吗?"),有一套盲比对机制。详见 agents/comparator.md 和 agents/analyzer.md。
核心思想:把两个输出扔给一个独立 agent,不告诉它谁是谁,让它判质量;然后解盲再分析赢家为什么赢。
这是可选的、需要 subagent,多数用户用不到。人工审阅循环通常已经够用。
SKILL.md frontmatter 的 description 是决定 Claude 是否调用这个 skill 的主要机制。创建或改进 skill 后,可以主动问用户要不要做 description 优化。
做 20 个 eval queries——混合 should-trigger 和 should-not-trigger。存成 JSON:
[
{"query": "用户的 prompt", "should_trigger": true},
{"query": "另一个 prompt", "should_trigger": false}
]
查询必须真实具体,是 Claude Code 或 Claude.ai 用户会真的输入的东西。不要抽象请求,要有细节:文件路径、用户的背景、列名和数值、公司名、URL、一点背景故事。有的可以小写、有的可以有缩写或错别字、有的像日常口语。长度混合,关注边缘情况而不是显而易见的。
反例:"格式化一下这份数据"、"从 PDF 提取文字"、"做个图表"
正例:"我老板刚扔给我一个 xlsx 文件(在我下载目录里,叫 'Q4 sales final FINAL v2.xlsx' 之类的),她想让我加一列显示利润率百分比。我记得收入在 C 列、成本在 D 列"
要避免:不要让 should-not-trigger 显而易见地无关。"写个 fibonacci 函数"作为 PDF skill 的反例——太简单了,测不出任何东西。反例要真的棘手。
用 HTML 模板给用户看 eval set:
assets/eval_review.html__EVAL_DATA_PLACEHOLDER__ → eval items 的 JSON 数组(不要加引号——它是 JS 变量赋值)__SKILL_NAME_PLACEHOLDER__ → skill 名__SKILL_DESCRIPTION_PLACEHOLDER__ → skill 当前 description/tmp/eval_review_<skill-name>.html)并打开:open /tmp/eval_review_<skill-name>.html~/Downloads/eval_set.json——如果有重名(eval_set (1).json),取最新的这一步很关键——bad eval queries 会导致 bad description。
告诉用户:"这个要跑一会儿——我在后台跑,过一会儿来看进度。"
把 eval set 存到 workspace,然后后台跑:
python -m scripts.run_loop \
--eval-set <path-to-trigger-eval.json> \
--skill-path <path-to-skill> \
--model <当前会话的 model id> \
--max-iterations 5 \
--verbose
--model 用当前会话的 model id(你的 system prompt 里有),这样触发测试匹配用户真实体验。
跑的同时,周期性 tail 一下输出,告诉用户跑到第几轮、分数如何。
这个脚本会自动做完整优化循环:把 eval set 分成 60% train + 40% held-out test,对当前 description 跑 3 遍(稳定性),用 extended thinking 让 Claude 基于失败案例提改进,每个新 description 在 train 和 test 上重评,最多 5 轮。结束时在浏览器打开 HTML 报告,返回 JSON(含 best_description——用 test 分数选而不是 train 分数,防过拟合)。
理解触发机制有助于写好 eval queries。Skills 在 Claude 的 available_skills 列表里展示 name + description,Claude 根据 description 决定要不要用。关键:Claude 只在自己不容易搞定的任务时才咨询 skill——像 "读这份 PDF" 这种简单一步就能办完的查询,即使 description 完全匹配也可能不触发,因为 Claude 用基础工具自己就能做。复杂、多步、专业的查询才会可靠触发。
所以你的 eval queries 应该有足够的实质内容让 Claude 觉得需要咨询 skill。过简的 query("读文件 X")是差的 test case——不管 description 多好都不会触发。
把 JSON 输出里的 best_description 更新到 skill 的 SKILL.md frontmatter。给用户看 before/after 和分数。
只在有 present_files 工具时跑。没有就跳过。有的话,把 skill 打包并把 .skill 文件交给用户:
python -m scripts.package_skill <path/to/skill-folder>
打包完,告诉用户生成的 .skill 文件路径,他可以安装到自己的环境。
核心流程相同(draft → test → review → improve → 循环),但因为没 subagent,机制要调整:
claude -p(只 Claude Code 有),跳过。package_skill.py 只要 Python 和文件系统就能跑,能用。--static <输出路径> 写独立 HTML,给用户一个链接点开。generate_review.py 生成 eval viewer 给人看。你要的是让人尽快看到例子!feedback.json,你读这个文件(可能要先申请访问)。run_loop.py / run_eval.py)在 Cowork 里能跑(它用 subprocess 调 claude -p,不用浏览器),但等 skill 稳定了、用户说 OK 了再做。agents/ 目录是给专业子 agent 的英文指令(Claude 派子 agent 时直接读,英文更稳):
agents/grader.md — 如何用 outputs 评估 assertionsagents/comparator.md — 如何做盲 A/B 对比agents/analyzer.md — 如何分析一个版本为什么赢references/ 目录:
references/schemas.md — evals.json、grading.json 等的 JSON 结构(中文)references/6问引导式流程.md — 阶段 0 的唯一执行脚本(逐题引导 + 门禁校验)references/6问模板.md — 阶段 0 结果如何映射到 SKILL.md 的内部参考references/skill写作指南.md — SKILL.md 写作的完整规则与示例最后再重复一次核心循环:
遇到时记得把这些步骤加入 TodoList,避免漏掉。
祝创建顺利!
Create new skills, modify and improve existing skills, and measure skill performance. Use when users want to create a skill from scratch, edit, or optimize an existing skill, run evals to test a skill, benchmark skill performance with variance analysis, or optimize a skill's description for better triggering accuracy.
This skill should be used when working with reinforcement learning tasks including high-performance RL training, custom environment development, vectorized parallel simulation, multi-agent systems, or integration with existing RL environments (Gymnasium, PettingZoo, Atari, Procgen, etc.). Use this skill for implementing PPO training, creating PufferEnv environments, optimizing RL performance, or developing policies with CNNs/LSTMs.
Run evaluations for one, multiple, or all skills using the agent orchestration framework. Make sure to use this skill whenever the user asks to run evals, test a skill's performance, run benchmarks, or compare baseline versus with-skill execution.
You are an expert prompt engineer specializing in crafting effective prompts for LLMs through advanced techniques including constitutional AI, chain-of-thought reasoning, and model-specific optimizati
Implements the NOWAIT technique for efficient reasoning in R1-style LLMs. Use when optimizing inference of reasoning models (QwQ, DeepSeek-R1, Phi4-Reasoning, Qwen3, Kimi-VL, QvQ), reducing chain-of-thought token usage by 27-51% while preserving accuracy. Triggers on "optimize reasoning", "reduce thinking tokens", "efficient inference", "suppress reflection tokens", or when working with verbose CoT outputs.
Provides guidance for automatically evolving and optimizing AI agents across any domain using LLM-driven evolution algorithms. Use when building self-improving agents, optimizing agent prompts and skills against benchmarks, or implementing automated agent evaluation loops.
Elite AI context engineering specialist mastering dynamic context management, vector databases, knowledge graphs, and intelligent memory systems.
Create new skills, modify and improve existing skills, and measure skill performance. Use when users want to create a skill from scratch, update or optimize an existing skill, run evals to test a skill, benchmark skill performance with variance analysis, or optimize a skill's description for better triggering accuracy.
Take zach22-1999/zach-seller-skill-creator from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.