/skill-creator
Create/edit/audit/eval golem skills. Triggers: create skill, skill eval, live eval, JSONL mining.
$ golems-cli skills install skill-creatorUpdated 5 days ago
Take skills from "drafted" to "proven" through rigorous multi-layer evaluation.
Installation
bash ~/Gits/golems/skills/golem-powers/skill-creator/scripts/install.shThe installer is idempotent — safe to re-run. It:
- Symlinks the skill into
~/.claude/commands/skill-creator(golem-powers convention) - Ensures
$SKILL_CREATOR_REPO/.claude/agents/,$SKILL_CREATOR_REPO/.codex/agents/, and$SKILL_CREATOR_REPO/scripts/exist as the project-scope home - Symlinks the
session-mineragent definition into the project-scope agents dir (gates the sub-agent so only skillCreator-family sessions can spawn it) - Symlinks the parser into the project-scope scripts dir
Run bash scripts/install.sh --dry-run to preview without changes. bash scripts/install.sh --help for usage.
Core Loop: DRAFT → EVAL → RED → GREEN → SMOKE → SHIP
Every skill change goes through this pipeline. No exceptions.
1. DRAFT — Understand the Skill
- Read the SKILL.md or MCP tool definition completely
brain_searchfor: prior evals, user complaints, known issues, related skills- Identify: what does this skill claim to do? What's the baseline without it?
- Document intent, inputs, outputs, edge cases
- Classify: capability uplift (may become obsolete) vs encoded preference (durable)
2. EVAL DESIGN — Create Structured Test Cases
Design eval cases as structured JSON in evals/evals.json:
{
"id": 1,
"name": "descriptive-kebab-name",
"category": "compliance|structure|quality",
"description": "What this eval tests",
"prompt": "The input scenario given to the agent",
"assertions": [
{
"type": "tool_usage|content|negative",
"name": "assertion-name",
"description": "What correct behavior looks like"
}
]
}Cover: happy path, edge cases, failure modes, interaction with other skills. See references/scoring-rubric.md for scoring methodology.
3. RED — Baseline Measurement (without skill)
- Run each eval WITHOUT the skill loaded
- Score baseline performance across all eval cases
- Document baseline scores
- Gate: If baseline >70%, the skill may not be adding value — flag it
4. GREEN — With-Skill Measurement
- Run each eval WITH the skill loaded
- Score delta between with_skill and without_skill
- Gate: Delta <10% = marginal, consider retiring. Delta >30% = clearly valuable.
- Maximum 3 iterations before flagging for human review
5. SMOKE — Live Agent Testing
Two tiers based on skill importance:
Tier A: Static Smoke (all skills)
- Review evals.json assertions manually
- Verify no contradictions between skill instructions and assertions
- Check that strongest discriminators are tested
Tier B: Live Agent Smoke (flagship skills only)
- Run
live-eval-runner.shfor top 3 discriminator evals - Agent routing: Claude skills → Sonnet, code skills → Codex, audit skills → Cursor
- Compare captured output against assertions
- Gate: Live delta must be within 15% of static delta
- Results stored in
evals/results/live-{date}.jsonandbrain_store'd
See workflows/live-eval.md for the full live eval workflow.
6. SHIP — Package and Document
- Ensure every skill ships with its evals (no eval = no ship)
brain_storeeval results, delta scores, issues found- Update skill metadata (version, last-eval-date, compliance-score)
- Follow workflows/create-skill.md and workflows/audit-skill.md for SKILL.md structure compliance before shipping structural changes.
- REGISTER a NEW skill — committed ≠ installed. A new golem-powers skill is
invisible to every agent until it's symlinked into
~/.claude/skills/<name>+~/.claude/commands/<name>(rungolem-install, which auto-discovers + links everygolem-powers/*/dir; or symlink the one new skill). Then VERIFY it appears in the available-skills list — committing/merging does NOT register it. (2026-05-30:/weavewas committed + merged but unusable by any agent until the symlinks existed. See workflows/create-skill.md "Final Step: REGISTER".)
Declaring Required Environment Variables
Add optional requires: frontmatter only when a skill cannot do its job at all
without an environment variable:
requires:
- FILE_HOST_TOKENList variable names (^[A-Z][A-Z0-9_]*$), never secret values. The declaration
and runtime behavior are two halves of one contract: lint proves the metadata is
well-formed, but the skill body must fail loud when a requirement is missing.
Carry this one-line instruction in the body:
If
FILE_HOST_TOKENis unset, tell the user and stop. Do not guess, improvise a fallback, or report partial success.
Eval Methodology
with_skill vs without_skill comparison is MANDATORY. No exceptions.
Eval Result Provenance — Validity Gate
No provenance = no eval. Every static or live eval result MUST record one provenance entry per agent or eval arm with:
| Field | Required value |
|---|---|
model_requested | Alias or model ID requested by the caller |
model_effective | Model ID observed at runtime |
effort_effective | Effort observed at runtime |
model_observation_source | CLI status line, session JSONL model field, or API response metadata |
effort_observation_source | CLI status line, session JSONL effort field, or API response metadata |
model_effective must be the concrete runtime ID, not a floating alias or
friendly display label, and uses an ID token with no whitespace. Observation
sources begin with the exact case-sensitive labels shown above; append details
after :, -, —, or ( when useful.
JSON records use
eval-result-provenance.schema.json.
Markdown records use an ## Eval Provenance table with these fields plus an
agent_or_arm column. Examples inside fenced code blocks are not evidence.
When runtime observation was impossible, the corresponding value and source
MUST say NOT DETERMINED; omission, inference, and silent fallback are invalid.
This is valid honesty but the checker marks the result NON_COMPARABLE; it
cannot support a cross-arm/model delta claim. A NON_COMPARABLE record that
contains any score, delta, or positive comparability claim is mechanically
INVALID, not merely discouraged by prose. Pre-contract historical results may
use provenance: alias-only and are also non-comparable; an alias-only record
that carries a score, delta, or positive comparability claim is likewise
INVALID. New results may not use that historical escape.
Before publishing or citing a score/delta, run the checker with
--require-comparable. Exit 0 means comparable evidence, exit 3 means honest
retained history that cannot carry the claim, and exit 1 means invalid input.
Run the mechanical provenance check in
workflows/audit-skill.md before scoring. An invalid
result is not evidence and receives no score, delta, or verdict.
The requested alias is insufficient: cmuxlayer spawn_agent.model has a
confirmed defect that silently drops non-alias models while reporting them
honored. A requested model records intent, not runtime outcome—the same false
surface class as delivered:true or exit 0 without live verification.
Behavioral Compliance Scoring
| Weight | Dimension | What it measures |
|---|---|---|
| 70% | Compliance | Does the agent follow the skill's instructions? |
| 20% | Structure | Does the output match expected format? |
| 10% | Quality | Is the output actually good/useful? |
Scoring Thresholds
| Condition | Action |
|---|---|
| Baseline >70% | Skill may not add value — flag and explain |
| Delta <10% | Marginal — consider if complexity is worth it |
| Delta >30% | Clearly valuable — ship with confidence |
| Compliance <50% with skill | Instructions unclear — rewrite before shipping |
Agent Routing for Live Evals
| Skill type | Test with | Why |
|---|---|---|
| Claude behavior skills | Sonnet (default) | Tests actual Claude compliance |
| Code implementation skills | Codex (default, no model flag) | Tests code quality |
| Audit/review skills | Cursor (default) | Tests review thoroughness |
Full SKILL.md source — includes LLM directives, anti-patterns, and technical instructions stripped from the Overview tab.
Take skills from "drafted" to "proven" through rigorous multi-layer evaluation.
Installation
bash ~/Gits/golems/skills/golem-powers/skill-creator/scripts/install.shThe installer is idempotent — safe to re-run. It:
- Symlinks the skill into
~/.claude/commands/skill-creator(golem-powers convention) - Ensures
$SKILL_CREATOR_REPO/.claude/agents/,$SKILL_CREATOR_REPO/.codex/agents/, and$SKILL_CREATOR_REPO/scripts/exist as the project-scope home - Symlinks the
session-mineragent definition into the project-scope agents dir (gates the sub-agent so only skillCreator-family sessions can spawn it) - Symlinks the parser into the project-scope scripts dir
Run bash scripts/install.sh --dry-run to preview without changes. bash scripts/install.sh --help for usage.
Core Loop: DRAFT → EVAL → RED → GREEN → SMOKE → SHIP
Every skill change goes through this pipeline. No exceptions.
1. DRAFT — Understand the Skill
- Read the SKILL.md or MCP tool definition completely
brain_searchfor: prior evals, user complaints, known issues, related skills- Identify: what does this skill claim to do? What's the baseline without it?
- Document intent, inputs, outputs, edge cases
- Classify: capability uplift (may become obsolete) vs encoded preference (durable)
2. EVAL DESIGN — Create Structured Test Cases
Design eval cases as structured JSON in evals/evals.json:
{
"id": 1,
"name": "descriptive-kebab-name",
"category": "compliance|structure|quality",
"description": "What this eval tests",
"prompt": "The input scenario given to the agent",
"assertions": [
{
"type": "tool_usage|content|negative",
"name": "assertion-name",
"description": "What correct behavior looks like"
}
]
}Cover: happy path, edge cases, failure modes, interaction with other skills. See references/scoring-rubric.md for scoring methodology.
3. RED — Baseline Measurement (without skill)
- Run each eval WITHOUT the skill loaded
- Score baseline performance across all eval cases
- Document baseline scores
- Gate: If baseline >70%, the skill may not be adding value — flag it
4. GREEN — With-Skill Measurement
- Run each eval WITH the skill loaded
- Score delta between with_skill and without_skill
- Gate: Delta <10% = marginal, consider retiring. Delta >30% = clearly valuable.
- Maximum 3 iterations before flagging for human review
5. SMOKE — Live Agent Testing
Two tiers based on skill importance:
Tier A: Static Smoke (all skills)
- Review evals.json assertions manually
- Verify no contradictions between skill instructions and assertions
- Check that strongest discriminators are tested
Tier B: Live Agent Smoke (flagship skills only)
- Run
live-eval-runner.shfor top 3 discriminator evals - Agent routing: Claude skills → Sonnet, code skills → Codex, audit skills → Cursor
- Compare captured output against assertions
- Gate: Live delta must be within 15% of static delta
- Results stored in
evals/results/live-{date}.jsonandbrain_store'd
See workflows/live-eval.md for the full live eval workflow.
6. SHIP — Package and Document
- Ensure every skill ships with its evals (no eval = no ship)
brain_storeeval results, delta scores, issues found- Update skill metadata (version, last-eval-date, compliance-score)
- Follow workflows/create-skill.md and workflows/audit-skill.md for SKILL.md structure compliance before shipping structural changes.
- REGISTER a NEW skill — committed ≠ installed. A new golem-powers skill is
invisible to every agent until it's symlinked into
~/.claude/skills/<name>+~/.claude/commands/<name>(rungolem-install, which auto-discovers + links everygolem-powers/*/dir; or symlink the one new skill). Then VERIFY it appears in the available-skills list — committing/merging does NOT register it. (2026-05-30:/weavewas committed + merged but unusable by any agent until the symlinks existed. See workflows/create-skill.md "Final Step: REGISTER".)
Declaring Required Environment Variables
Add optional requires: frontmatter only when a skill cannot do its job at all
without an environment variable:
requires:
- FILE_HOST_TOKENList variable names (^[A-Z][A-Z0-9_]*$), never secret values. The declaration
and runtime behavior are two halves of one contract: lint proves the metadata is
well-formed, but the skill body must fail loud when a requirement is missing.
Carry this one-line instruction in the body:
If
FILE_HOST_TOKENis unset, tell the user and stop. Do not guess, improvise a fallback, or report partial success.
Eval Methodology
with_skill vs without_skill comparison is MANDATORY. No exceptions.
Eval Result Provenance — Validity Gate
No provenance = no eval. Every static or live eval result MUST record one provenance entry per agent or eval arm with:
| Field | Required value |
|---|---|
model_requested | Alias or model ID requested by the caller |
model_effective | Model ID observed at runtime |
effort_effective | Effort observed at runtime |
model_observation_source | CLI status line, session JSONL model field, or API response metadata |
effort_observation_source | CLI status line, session JSONL effort field, or API response metadata |
model_effective must be the concrete runtime ID, not a floating alias or
friendly display label, and uses an ID token with no whitespace. Observation
sources begin with the exact case-sensitive labels shown above; append details
after :, -, —, or ( when useful.
JSON records use
eval-result-provenance.schema.json.
Markdown records use an ## Eval Provenance table with these fields plus an
agent_or_arm column. Examples inside fenced code blocks are not evidence.
When runtime observation was impossible, the corresponding value and source
MUST say NOT DETERMINED; omission, inference, and silent fallback are invalid.
This is valid honesty but the checker marks the result NON_COMPARABLE; it
cannot support a cross-arm/model delta claim. A NON_COMPARABLE record that
contains any score, delta, or positive comparability claim is mechanically
INVALID, not merely discouraged by prose. Pre-contract historical results may
use provenance: alias-only and are also non-comparable; an alias-only record
that carries a score, delta, or positive comparability claim is likewise
INVALID. New results may not use that historical escape.
Before publishing or citing a score/delta, run the checker with
--require-comparable. Exit 0 means comparable evidence, exit 3 means honest
retained history that cannot carry the claim, and exit 1 means invalid input.
Run the mechanical provenance check in
workflows/audit-skill.md before scoring. An invalid
result is not evidence and receives no score, delta, or verdict.
The requested alias is insufficient: cmuxlayer spawn_agent.model has a
confirmed defect that silently drops non-alias models while reporting them
honored. A requested model records intent, not runtime outcome—the same false
surface class as delivered:true or exit 0 without live verification.
Behavioral Compliance Scoring
| Weight | Dimension | What it measures |
|---|---|---|
| 70% | Compliance | Does the agent follow the skill's instructions? |
| 20% | Structure | Does the output match expected format? |
| 10% | Quality | Is the output actually good/useful? |
Scoring Thresholds
| Condition | Action |
|---|---|
| Baseline >70% | Skill may not add value — flag and explain |
| Delta <10% | Marginal — consider if complexity is worth it |
| Delta >30% | Clearly valuable — ship with confidence |
| Compliance <50% with skill | Instructions unclear — rewrite before shipping |
Agent Routing for Live Evals
| Skill type | Test with | Why |
|---|---|---|
| Claude behavior skills | Sonnet (default) | Tests actual Claude compliance |
| Code implementation skills | Codex (default, no model flag) | Tests code quality |
| Audit/review skills | Cursor (default) | Tests review thoroughness |
Workflows
| Workflow | When to use |
|---|---|
| create-skill.md | Creating a new skill from scratch |
| audit-skill.md | Auditing existing skill structure, scripts, workflows, and registration before deploy |
| live-eval.md | Running live A/B tests with real agents |
| ab-compare.md | Comparing skill versions or platforms |
| mine-session.md | Mining a Claude Code session JSONL into a 10-section markdown digest (handoff docs, EOD waves, claim verification) |
References
| Reference | Content |
|---|---|
| scoring-rubric.md | Full scoring methodology and rubric |
| subagent-vs-skill.md | Classification reference — READ BEFORE SCAFFOLDING any new capability. Distinguishes skill (slash-triggered, parent-context) from sub-agent (name-spawned, isolated-context). Documents the misroute pattern (GitHub openai/codex#18823) that even Codex itself routinely makes. |
Integration with Other Skills
/cmux-agents— spawning live eval agents in cmux panes/never-fabricate— Read() every file before reporting results/pr-loop— shipping skill changes through the full PR lifecycle
Packaged Sub-Agents (skill-creator family only)
These sub-agents ship in BOTH Claude and Codex formats. They are invokable only from sessions with cwd inside $SKILL_CREATOR_REPO/ (i.e., skillcreatorClaude, skillcreatorCodex, or a repoGolem session rooted there). Sessions in other repos cannot spawn them directly — they must dispatch a skillCreator first.
Canonical source-of-truth lives in this skill's agents/ dir. scripts/install.sh symlinks them into the project repo's project-scope dirs (.claude/agents/ for Claude, .codex/agents/ for Codex). The dual-format packaging means the same sub-agent is available regardless of whether the parent is Claude Code or Codex CLI.
| Sub-agent | Claude format | Codex format | Workflow |
|---|---|---|---|
session-miner | agents/session-miner.md (model: inherit) | agents/session-miner.toml (model: gpt-5.3-codex-spark) | mine-session.md |
Both formats invoke the same deterministic parser at scripts/session-miner.py. The Claude format uses subagent_type="session-miner" via the Agent tool; the Codex format is referenced by name in natural-language prompts (session_miner, mine X to Y).
For when to choose sub-agent vs skill: see references/subagent-vs-skill.md.
Critical Rules
- Never claim "tests pass" without running them. Read actual output.
- Every skill ships with evals. No eval = no ship.
- brain_search BEFORE starting work — someone may have already evaluated it.
- brain_store AFTER completing work — results, delta scores, decisions.
- Max 3 iterations per skill before flagging for human review.
- Read() every file you cite. No citing from compacted summaries.
- Sequential skill compounding — build skills one at a time, each learning from the last.
Best Pass Rate
91%
Sonnet 4.6
Assertions
64
3 models tested
Avg Cost / Run
$0.2382
across models
Fastest (p50)
2.0s
Sonnet 4.6
Behavior Evals
Phase 2 baseline — skill quality on ClaudeBehavior Baseline
| Assertion | Opus 4.6 | Sonnet 4.6 | Haiku 4.5 | Consensus |
|---|---|---|---|---|
| searches-brainlayer-first | 3/3 | |||
| checks-for-overlap | 1/3 | |||
| no-immediate-writing | 3/3 | |||
| designs-evals-first | 2/3 | |||
| minimum-5-evals | 3/3 | |||
| includes-assertions | 3/3 | |||
| no-content-first | 1/3 | |||
| measures-baseline | 2/3 | |||
| reports-delta | 1/3 | |||
| uses-scoring-rubric | 3/3 | |||
| no-skip-baseline | 3/3 | |||
| recognizes-high-baseline | 3/3 | |||
| questions-value | 3/3 | |||
| recommends-action | 3/3 | |||
| identifies-flagship | 2/3 | |||
| plans-live-eval | 2/3 | |||
| selects-discriminators | 3/3 | |||
| specifies-agent-routing | 3/3 | |||
| no-static-only | 3/3 | |||
| recognizes-iteration-limit | 3/3 | |||
| flags-for-human | 2/3 | |||
| suggests-alternatives | 3/3 | |||
| no-infinite-loop | 3/3 | |||
| calls-brain-store | 3/3 | |||
| includes-scores-in-store | 3/3 | |||
| appropriate-tags | 1/3 | |||
| updates-metadata | 3/3 | |||
| proposes-sequential | 3/3 | |||
| mentions-compounding | 3/3 | |||
| prioritizes-order | 2/3 | |||
| no-parallel-batch | 2/3 | |||
| greps-source-for-claim | 2/3 | |||
| honesty-disclaimer-present | 3/3 | |||
| gap-report-table | 3/3 | |||
| no-fabrication | 2/3 | |||
| invokes-parser | 2/3 | |||
| task-create-count-correct | 2/3 | |||
| correction-count-correct | 3/3 | |||
| event-indices-cited | 2/3 | |||
| line-count-under-cap | 3/3 | |||
| lines-per-kb-under-1.5 | 3/3 | |||
| no-inline-jsonl-quoting | 2/3 | |||
| no-loop-counter-flood | 3/3 | |||
| recognizes-scope-gate | 2/3 | |||
| dispatches-skillcreator-first | 3/3 | |||
| no-circumvention-via-copy | 3/3 | |||
| no-direct-python-fallback-only | 3/3 | |||
| follows-skill-anatomy | 2/3 | |||
| includes-not-for-routing | 2/3 | |||
| checks-for-duplicates | 1/3 | |||
| no-arbitrary-markdown | 3/3 | |||
| reads-current-skill | 2/3 | |||
| identifies-specific-issues | 2/3 | |||
| preserves-existing-structure | 2/3 | |||
| audits-all-sections | 2/3 | |||
| checks-reference-drift | 3/3 | |||
| provides-actionable-fixes | 1/3 | |||
| no-registration-claim-without-check | 3/3 | |||
| runs-provenance-checker | 3/3 | |||
| requires-fields-per-arm | 2/3 | |||
| requires-runtime-observation-sources | 3/3 | |||
| allows-explicit-not-determined | 2/3 | |||
| requires-comparable-before-publishing | 3/3 | |||
| no-provenance-no-eval | 2/3 |
Token Usage
Cost per Run
| Model | Input Tokens | Output Tokens | Cost / Run | Cost / 1K Runs |
|---|---|---|---|---|
| Opus 4.6 | 9,414 | 6,701 | $0.6438 | $643.80 |
| Sonnet 4.6 | 4,152 | 3,671 | $0.0675 | $67.50 |
| Haiku 4.5 | 2,549 | 2,081 | $0.0032 | $3.20 |
Response Time (p50)
Response Time (p95)
| Model | p50 | p95 | Overhead |
|---|---|---|---|
| Opus 4.6 | 4.2s | 8.0s | +91% |
| Sonnet 4.6 | 2.0s | 3.1s | +59% |
| Haiku 4.5 | 3.1s | 5.7s | +82% |
Last evaluated: 2026-03-12 · Data is generated from skill assertions (real cross-model benchmarks coming soon)
Changelog entries are derived from eval runs and skill version updates. Full cascading changelog (Phase 4D) coming soon.
Best Pass Rate
91%
Assertions
64
Models Tested
3
Evals Run
16
- +Initial release to Golems skill library
- +64 assertions across 16 eval scenarios
- +6 workflows included: ab-compare, audit-skill, cleaner, create-skill, live-eval, mine-session
- +Eval fixtures included