Install
$ agentstack add skill-avibebuilder-claude-prime-skill-creator ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
Skill Creator
Default operating mode: autonomous — create or update the skill, run evals, improve it, optimize the description, and return with a final report. Only pause for human review if the user explicitly requests it or you hit an ambiguity that can't be resolved from the evidence alone.
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
- 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)
- Use the
eval-viewer/generate_review.pyscript to show the results if the user wants to review - Rewrite the skill based on eval results, benchmark data, and user feedback (if review was requested)
- Repeat until quality thresholds are met or the user is satisfied
- Optimize the description for triggering accuracy parallel
Figure out where the user is in this process and then jump in and help them progress through these stages. Route based on what they need. 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.
Workspace convention: All eval artifacts go in tmp/-workspace/ under the project root (the directory containing .claude/). This directory is gitignored. Within the workspace, organize by iteration (iteration-1/, iteration-2/, etc.).
Nested invocation: When invoked as a subagent with an explicit outputs directory, use that outputs/ directory as the root for all inner workspaces — not tmp/-workspace/.
Track your progress with tasks/todos — without them, description optimization and the judge step are commonly skipped.
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. Skip if in autonomous mode: 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?
- What evaluation strategy fits? Objectively verifiable outputs (file transforms, code generation) → expectations and baselines. Subjective outputs (writing style, art) → qualitative analysis.
Skip if in autonomous mode: If a gap is genuinely irresolvable from context and would materially change the skill's correctness, pause and ask. Otherwise infer, state it, and proceed.
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. SKIP this interview in autonomous mode, let make decisions yourself
Research existing skills — MUST read references/available-skill-resources.md for curated skill repositories, then fetch the README or index of relevant repos to check whether skills for this domain already exist. Don't deep-dive into repos with nothing relevant — a quick scan of the index is enough to know if there's something worth borrowing.
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
- description: When to trigger, what it does. This is the primary triggering mechanism - include both what the skill does AND specific contexts for when to use it. All "when to use" info goes here, not in the body. Note: currently Claude has a tendency to "undertrigger" skills -- to not use them when they'd be useful. To combat this, please make the skill descriptions a little bit "pushy". So for instance, instead of "How to build a simple fast dashboard to display internal Anthropic data.", you might write "How to build a simple fast dashboard to display internal Anthropic data. Make sure to use this skill whenever the user mentions dashboards, data visualization, internal metrics, or wants to display any kind of company data, even if they don't explicitly ask for a 'dashboard.'" Length: hard limit is 1024 characters (the optimizer enforces this); aim for under ~650 characters in practice — past that, every extra clause competes for attention with the other skills' descriptions and tends to dilute rather than sharpen triggering.
- compatibility: Required tools, dependencies (optional, rarely needed)
- the rest of the skill :)
Skill Writing Guide
Anatomy of a Skill
skill-name/
├── SKILL.md (required)
│ ├── YAML frontmatter (name, description required)
│ └── Markdown instructions
└── Bundled Resources (optional)
├── scripts/ - Executable code for deterministic/repetitive tasks
├── references/ - Docs loaded into context as needed
└── assets/ - Files used in output (templates, icons, fonts)
Progressive Disclosure
Skills use a three-level loading system:
- Metadata (name + description) - Always in context (~100 words)
- SKILL.md body - In context whenever skill triggers (300 lines), include a table of contents
- Routing lives at the parent. "When to use" conditions go in the SKILL.md reference table — not inside the spoke file. By the time the agent reads a "## When to Use" section, it's already paid the load cost. Reference files cover HOW; parent covers WHEN.
Domain organization: When a skill supports multiple domains/frameworks, organize by variant:
cloud-deploy/
├── SKILL.md (workflow + selection)
└── references/
├── aws.md
├── gcp.md
└── azure.md
Claude reads only the relevant reference file.
Principle of Lack of Surprise
This goes without saying, but skills must not contain malware, exploit code, or any content that could compromise system security. A skill's contents should not surprise the user in their intent if described. Don't go along with requests to create misleading skills or skills designed to facilitate unauthorized access, data exfiltration, or other malicious activities. Things like a "roleplay as an XYZ" are OK though.
Writing Patterns
Prefer using the imperative form in instructions.
Defining output formats - You can do it like this:
## Report structure
ALWAYS use this exact template:
# [Title]
## Executive summary
## Key findings
## Recommendations
Examples pattern - It's useful to include examples. You can format them like this (but if "Input" and "Output" are in the examples you might want to deviate a little):
## Commit message format
**Example 1:**
Input: Added user authentication with JWT tokens
Output: feat(auth): implement JWT-based authentication
Writing Style
Try to explain to the model why things are important in lieu of heavy-handed musty MUSTs. Use theory of mind and try to make the skill general and not super-narrow to specific examples. Start by writing a draft and then look at it with fresh eyes and improve it.
Test Cases
After writing the skill draft, come up with 2-3 realistic test prompts — the kind of thing a real user would actually say. Share them with the user if they want to review: "Here are a few test cases I'd like to try. Do these look right, or do you want to add more?" In autonomous mode, proceed directly.
Save test cases to /evals.json. Don't write expectations yet — just the prompts. You'll draft expectations in Step 2 while the runs are in progress.
{
"skill_name": "example-skill",
"evals": [
{
"id": 1,
"prompt": "User's task prompt",
"expected_output": "Description of expected result",
"files": []
}
]
}
See references/schemas.md for the full schema (including the expectations field).
Good test cases are realistic (messy, specific — what a real user would type), substantive (complex enough that the skill makes a difference), diverse (different use cases, not three variations of the same prompt), and discriminating (test skill-specific behaviors, not generic task completion — ask "would bare Claude pass this?" and if yes, make it harder).
Also prepare 20 trigger eval queries for description optimization and save to /trigger-eval.json. See the Description Optimization section below for the format. Doing this now means description optimization can launch immediately.
Running and evaluating test cases
This section is one continuous sequence — don't stop partway through. Do NOT use /skill-test or any other testing skill.
Within the workspace, organize results by iteration (iteration-1/, iteration-2/, etc.) and within that, each test case gets a descriptive directory name (e.g., handle-multi-page-pdf/). Don't create all of this upfront — just create directories as you go.
Step 0: Launch description optimization in the background
Description optimization only depends on the frontmatter description and trigger eval queries — it's independent of the skill body. Run it in parallel with the eval loop:
cd && python -m scripts.run_loop \
--eval-set /trigger-eval.json \
--skill-path \
--model \
--max-iterations 5 --report none --verbose \
--output /run-loop-results.json \
> /run-loop.log 2>&1 &
echo "run_loop PID: $!"
Save the PID — you'll need it later to check completion. Continue immediately to Step 1.
Step 1: Spawn eval runs
Every eval must use a real subagent that actually executes the task. Reading a skill and imagining it would work is not evaluation — it's guesswork. Spawn all test cases in parallel, each as a separate subagent:
Execute this task with the following skill loaded.
Read the skill at [skill SKILL.md path] first — it contains your instructions.
Task: [eval prompt]
Input files: [eval files if any, or "none"]
Save outputs to: [workspace path]/iteration-[N]/[eval-name]/with_skill/outputs/
Outputs to save: [what the user cares about — e.g., "the .docx file", "the final CSV"]
Also required: write `outputs/transcript.md` — one line per tool call, in order, as you go: `- | | `. Graders use this to verify process assertions. No transcript = failed process assertions.
Do NOT revert or clean up the project after completing the task. The orchestrator handles cleanup after grading.
Project cleanup timing: Executors must not revert changes — doing so destroys evidence before graders can inspect it (new files, diffs, task artifacts). The orchestrator is responsible for restoring the project state after all graders have finished. This sequence matters: grade first, clean second.
Baseline runs (new skills only) — When creating a new skill, the first iteration MUST include baseline runs alongside with-skill runs. Run the same prompts without the skill loaded and save outputs to without_skill/outputs/. This measures whether the skill actually adds value over bare Claude. For subsequent iterations, baseline from iteration 1 still applies — no need to rerun.
Baseline runs for existing skills — When improving an existing skill, baseline runs are optional. Only run them when the user explicitly requests comparison. Existing skills have already proven their value.
Write an eval_metadata.json for each test case (expectations can be empty for now). Give each eval a descriptive name based on what it's testing — not just "eval-0". Use this name for the directory too. If this iteration uses new or modified eval prompts, create these files for each new eval directory — don't assume they carry over from previous iterations.
{
"eval_id": 0,
"eval_name": "descriptive-name-here",
"prompt": "The user's task prompt",
"expectations": []
}
Step 2: While runs are in progress, draft expectations
Don't just wait for the runs to finish — you can use this time productively. Draft quantitative expectations for each test case. Good expectations are objectively verifiable and have descriptive names — they should read clearly in the benchmark viewer so someone glancing at the results immediately understands what each one checks. Subjective skills (writing style, design quality) are better evaluated qualitatively — don't force expectations onto things that need human judgment.
Write expectations that test what the skill specifically teaches, not just structural presence. Before writing each one, ask: "Would bare Claude likely get this right without the skill?" If yes, the expectation isn't discriminating — make it harder. Target project-specific conventions, ordering/sequencing the skill introduces, and exact implementation details (column names, error codes, ID formats) rather than topic mentions.
Update the eval_metadata.json files and evals.json with the expectations once drafted.
Step 3: As runs complete, capture timing data
When each subagent task completes, you receive a notification containing total_tokens and duration_ms. Save this data immediately to timing.json in the run directory:
{
"total_tokens": 84852,
"duration_ms": 23332,
"total_duration_seconds": 23.3
}
This is the only opportunity to capture this data — it comes through the task notification and isn't persisted elsewhere. Process each notification as it arrives rather than trying to batch them.
Step 4: Grade, aggregate, and analyze
Once all runs are done:
- Grade each run — spawn grader subagents in parallel (one per eval case), or grade inline for simple expectations. Each reads
agents/grader.mdand evaluates expectations against the outputs. When spawning, pass these inputs explicitly:
``` Read agents/grader.md at /agents/grader.md — it contains your role.
transcriptpath: /outputs/transcript.md outputsdir: /outputs/ expectations: [...] ```
Save results to grading.json in each run directory. The grading.json expectations array must use the fields text, passed, and evidence — the viewer depends on these exact field names. For expectations that can be checked programmatically, write and run a script rather than eyeballing it.
- Aggregate into benchmark — run the aggregation script from the skill-creator directory:
``bash python -m scripts.aggregate_benchmark /iteration-N --skill-name ` This produces benchmark.json and benchmark.md` with pass_rate, time, and tokens for each configuration. If generating benchmark.j
…
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: avibebuilder
- Source: avibebuilder/claude-prime
- License: MIT
- Homepage: https://claudeprime.avibebuilder.com
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.