Skill Creator
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.
- Skill ID
- bytedance/deer-flow/skill-creator
- Publisher
- bytedance
- Repository
- deer-flow
- Installs
- 0
- Files
- 20
- Synced
- Sep 23, 2026
Open any RiverX project, open the Skills panel in the chat, and search for this identifier. The files are fetched from the source repository at install time.
bytedance/deer-flow/skill-creatorInstalls these files- LICENSE.txt
- SKILL.md
- agents/analyzer.md
- agents/comparator.md
- agents/grader.md
- assets/eval_review.html
- eval-viewer/generate_review.py
- eval-viewer/viewer.html
- references/output-patterns.md
- references/schemas.md
- references/workflows.md
- scripts/aggregate_benchmark.py
- scripts/generate_report.py
- scripts/improve_description.py
- scripts/init_skill.py
- scripts/package_skill.py
- scripts/quick_validate.py
- scripts/run_eval.py
- scripts/run_loop.py
- scripts/utils.py
What this skill tells the agent
Skill Creator
A skill for creating new skills and iteratively improving them.
At a high level, the process of creating a skill goes like this:
- Decide what you want the skill to do and roughly how it should do it
- Write a draft of the skill
- Create a few test prompts and run claude-with-access-to-the-skill on them
- Help the user evaluate the results both qualitatively and quantitatively
- While the runs happen in the background, draft some quantitative evals if there aren't any (if there are some, you can either use as is or modify if you feel something needs to change about them). Then explain them to the user (or if they already existed, explain the ones that already exist)
- Use the
eval-viewer/generate_review.pyscript to show the user the results for them to look at, and also let them look at the quantitative metrics - Rewrite the skill based on feedback from the user's evaluation of the results (and also if there are any glaring flaws that become apparent from the quantitative benchmarks)
- Repeat until you're satisfied
- Expand the test set and try again at larger scale
Your job when using this skill is to figure out where the user is in this process and then jump in and help them progress through these stages. So for instance, maybe they're like "I want to make a skill for X". You can help narrow down what they mean, write a draft, write the test cases, figure out how they want to evaluate, run all the prompts, and repeat.
On the other hand, maybe they already have a draft of the skill. In this case you can go straight to the eval/iterate part of the loop.
Of course, you should always be flexible and if the user is like "I don't need to run a bunch of evaluations, just vibe with me", you can do that instead.
Then after the skill is done (but again, the order is flexible), you can also run the skill description improver, which we have a whole separate script for, to optimize the triggering of the skill.
Cool? Cool.
DeerFlow Environment (⚠️ READ THIS FIRST)
If you are running inside a DeerFlow sandboxed agent environment (you have access to the skill_manage tool), you MUST follow these rules for all skill file operations. These override the generic file-writing and packaging instructions below.
Why this matters
In DeerFlow, the sandbox filesystem is isolated. Files written with write_file land in /mnt/user-data/outputs/, which is a per-thread output directory — new chats cannot see files there. Skills must be persisted through the dedicated skill_manage tool so they are stored in the per-user skill directory and immediately visible to all future chats.
Use skill_manage for all skill file operations
| Operation | skill_manage action | Example |
|---|---|---|
| Create a new skill | action="create" | skill_manage(action="create", name="my-skill", content="---\nname: my-skill\n---\n...") |
| Replace entire SKILL.md | action="edit" | skill_manage(action="edit", name="my-skill", content="updated SKILL.md") |
| Partial edit (find & replace) | action="patch" | skill_manage(action="patch", name="my-skill", find="old text", replace="new text") |
| Delete a skill | action="delete" | skill_manage(action="delete", name="my-skill") |
| Add a supporting file | action="write_file" | skill_manage(action="write_file", name="my-skill", path="scripts/helper.py", content="...") |
| Remove a supporting file | action="remove_file" | skill_manage(action="remove_file", name="my-skill", path="scripts/helper.py") |
Key rules
- NEVER use sandbox `write_file` to create or modify skill files (SKILL.md, scripts/, references/, assets/). These would land in
/mnt/user-data/outputs/and be invisible to future chats. Always useskill_manageinstead.
- Skip the `package_skill.py` step. In DeerFlow,
skill_managealready persists the skill to the correct per-user directory. No.skillpackaging or manual install is needed. The skill is immediately available in all new chats.
- Skip the `present_files` step for skills. Skills are NOT deliverables — they are persisted via
skill_manageand auto-loaded by the skill system. Only usepresent_filesfor non-skill outputs (eval reports, benchmarks, etc.).
- Eval workspace files are OK in sandbox. Test prompts, benchmark data, eval viewer HTML, grading results, etc. are NOT skill files — you can write these to
/mnt/user-data/outputs/or/mnt/user-data/workspace/using sandboxwrite_fileas usual.
- To read an existing skill's SKILL.md, use
read_file("/mnt/skills/custom/<name>/SKILL.md")in the sandbox (it maps to the per-user skill directory).
- Updating an existing skill: use
skill_manage(action="edit")orskill_manage(action="patch"). Do NOT copy to/tmp/first —skill_managehandles the per-user storage directly.
Workflow in DeerFlow
The core loop is the same, but the persistence mechanism changes:
- Capture intent → interview → draft SKILL.md content
- Call `skill_manage(action="create", name=<name>, content=<SKILL.md>)` to persist the skill
- Run test cases (eval workspace files use sandbox
write_file) - Evaluate results, gather feedback
- Call `skill_manage(action="edit")` or `skill_manage(action="patch")` to improve the skill
- Repeat until satisfied
- Done — no packaging needed. The skill is already persisted and visible to all future chats.
Communicating with the user
The skill creator is liable to be used by people across a wide range of familiarity with coding jargon. If you haven't heard (and how could you, it's only very recently that it started), there's a trend now where the power of Claude is inspiring plumbers to open up their terminals, parents and grandparents to google "how to install npm". On the other hand, the bulk of users are probably fairly computer-literate.
So please pay attention to context cues to understand how to phrase your communication! In the default case, just to give you some idea:
- "evaluation" and "benchmark" are borderline, but OK
- for "JSON" and "assertion" you want to see serious cues from the user that they know what those things are before using them without explaining them
It's OK to briefly explain terms if you're in doubt, and feel free to clarify terms with a short definition if you're unsure if the user will get it.
Creating a skill
Capture Intent
Start by understanding the user's intent. The current conversation might already contain a workflow the user wants to capture (e.g., they say "turn this into a skill"). If so, extract answers from the conversation history first — the tools used, the sequence of steps, corrections the user made, input/output formats observed. The user may need to fill the gaps, and should confirm before proceeding to the next step.
- What should this skill enable Claude to do?
- When should this skill trigger? (what user phrases/contexts)
- What's the expected output format?
- Should we set up test cases to verify the skill works? Skills with objectively verifiable outputs (file transforms, data extraction, code generation, fixed workflow steps) benefit from test cases. Skills with subjective outputs (writing style, art) often don't need them. Suggest the appropriate default based on the skill type, but let the user decide.
Interview and Research
Proactively ask questions about edge cases, input/output formats, example files, success criteria, and dependencies. Wait to write test prompts until you've got this part ironed out.
Check available MCPs - if useful for research (searching docs, finding similar skills, looking up best practices), research in parallel via subagents if available, otherwise inline. Come prepared with context to reduce burden on the user.
Write the SKILL.md
Based on the user interview, fill in these components:
- name: Skill identifier
More from bytedance
Use this skill in a project
Open any RiverX project, search the Skills panel for bytedance/deer-flow/skill-creator, and install it in one click.
