Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Scaffold vexjoy-agent operator .md files: frontmatter, routing block, operator context, reference loading table, phase/gate workflow.
.claude/skills/notque-agent-creator/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-11 | ✗→✓ | ▲ Improved | 34% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 70% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 34% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 77% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 68% | 0% |
Scaffold correctly-formed vexjoy-agent operator .md files. An agent file is a system-prompt contract: it sets identity, constraints, expertise, and routing — not application code.
Phases: DISCOVER → DESIGN → SCAFFOLD → REGISTER → VALIDATE
Check for domain overlap before creating anything.
bashgrep -i "<domain-keyword>" agents/*.md | grep "^agents/" | cut -d: -f1 | sort -u ls agents/ | grep "<domain-prefix>"
Gate 1: If an existing agent covers the domain, add a references/ file to that agent instead of creating a new one. Proceed only when no existing agent covers the domain, or the user confirms after seeing the overlap.
Read docs/PHILOSOPHY.md before proceeding — the philosophy governs operator context structure, progressive disclosure, positive framing, and tool restrictions. Components that violate it will fail CI.
Decide the agent's identity and routing contract before writing a single line.
| Decision | Question to answer | |----------|--------------------| | Role type | Reviewer/auditor, code modifier/engineer, or orchestrator? | | Allowed tools | Matches role: reviewers→Read/Glob/Grep; engineers→+Edit/Write/Bash; orchestrators→Read/Agent/Bash | | Complexity | Low (single-file, read-only), Medium (multi-file, routing), High (full sweeps, orchestration) | | Triggers | 3–6 specific phrases a user would naturally say — not generic verbs | | pairs_with | 2–3 agents commonly co-dispatched; verify each exists on disk before listing | | Reference files | Domains needing depth — each goes in agents/{name}/references/ loaded on demand | | Description craft | Intent verb + domain object, 2–3 adjacent terms, one false-positive boundary clause with redirect | | Activation cases | 3 should-trigger / 2 should-not-trigger / 2 near-miss phrases drafted now, saved at scaffold time |
Load references/agent-design-patterns.md for operator context structure, hook design, routing design, authority/trust framing, and smells-to-rewrite guidance.
Load references/agent-eval-design.md when drafting the description and activation cases — the case classes and worked example live there.
Gate 2: All eight decisions answered before writing agent file content.
Write the agent file using the annotated template.
Load references/agent-frontmatter-template.md for the complete template with all required fields and valid values.
File layout:
agents/
├── {agent-name}.md # operator file — the system prompt contract
└── {agent-name}/
├── references/
│ └── *.md # deep context, loaded on demand
├── SPEC.md # optional: contract for complex/high-impact agents
└── EVAL.md # optional: repeatable eval casesWriting the operator context (body after frontmatter):
| Signal | Load These Files | Why | — required when a references/ directory existsPositive framing (CI gate): Every instruction tells the reader what to do. Run the check after writing:
bashpython3 scripts/validate_positive_instruction_docs.py
Exit code 1 means violations. Rewrite flagged instructions in action form before proceeding.
Progressive disclosure: Main agent file stays navigable. Deep reference material goes in {agent-name}/references/ loaded on demand. If the file exceeds 600 lines, extract content to references/ first.
Gate 3: Agent file written, YAML frontmatter parses cleanly:
bashpython3 -c "import yaml; yaml.safe_load(open('agents/{agent-name}.md').read().split('---')[1]); print('OK')"
Add the agent to the routing index.
bashpython3 scripts/generate-agent-index.py
Verify the count increased by exactly one:
bashpython3 -c " import json d = json.load(open('agents/INDEX.json')) agents = d.get('agents', []) print(f'Registered agents: {len(agents)}')"
Gate 4: agents/INDEX.json contains the new agent entry. The router cannot discover unregistered agents.
Run all validation checks before declaring the agent shippable.
bash# Structural checks: filenames, frontmatter, line counts, loading tables python3 scripts/validate-references.py --agent {agent-name} # Positive framing gate (scans all tracked .md files) python3 scripts/validate_positive_instruction_docs.py # YAML parse python3 -c "import yaml; yaml.safe_load(open('agents/{agent-name}.md').read().split('---')[1]); print('YAML OK')" # Verify pairs_with entries exist on disk python3 -c " import yaml, os txt = open('agents/{agent-name}.md').read() fm = yaml.safe_load(txt.split('---')[1]) for p in fm.get('routing', {}).get('pairs_with', []): exists = os.path.exists(f'agents/{p}.md') or os.path.exists(f'skills/{p}/SKILL.md') print(f' {p}: {\"OK\" if exists else \"MISSING\"}')"
Gate 5: All scripts exit 0. No phantom pairs_with entries. No positive-framing violations.
Manual review (the scripts cannot check these):
references/agent-frontmatter-template.md Description Craft.agents/{name}/references/activation-cases.md (or equivalent notes section) lists 3 should-trigger / 2 should-not-trigger / 2 near-miss phrases. Mental-pass each phrase against the description. See references/agent-eval-design.md.Cause: Unquoted colon in description, or bad indentation in routing block. Solution: Wrap description in double quotes. Run the YAML parse command above — the traceback pinpoints the line.
Cause: Two agents claim the same trigger phrase. Solution: Run the duplicate detection script in agents/toolkit-governance-engineer/references/routing-table-patterns.md. Make this agent's trigger more specific.
Cause: Agent file path not matching the expected pattern, or frontmatter missing routing.triggers. Solution: Confirm file is at agents/{name}.md. Confirm routing.triggers is a non-empty list.
Cause: Agent body has no | Signal | Load These Files | Why | table. Solution: Add a reference loading table with at least one row. See references/agent-design-patterns.md for the required format.
Set allowed-tools to match what the agent actually does — reviewers read only, engineers write, orchestrators dispatch. This ensures agents stay within their domain and cannot make out-of-scope changes.
Write triggers as phrases a first-time user would naturally say, not internal system identifiers. "fix a bug in Go" routes better than "golang-debugging-invocation".
Every agent that has a references/ directory includes a loading table mapping signals to files. Agents without this table load references eagerly, violating the progressive disclosure principle from docs/PHILOSOPHY.md.
List concrete capabilities the agent has: version-specific idiom tables, failure mode catalogs, concrete commands. Skip "you are an expert in X" — it adds no information the model will act on.
| Signal | Load These Files | Why | |--------|-----------------|-----| | operator context structure, reference loading table format, phase/gate pattern, hook design, routing design, authority/trust framing, smells to rewrite | references/agent-design-patterns.md | Vexjoy-specific architecture patterns, instruction hierarchy, and rewrite catalog for vague framing | | frontmatter fields, YAML template, complexity tiers, INDEX.json registration, description craft | references/agent-frontmatter-template.md | Complete annotated template with all required fields, valid values, and description-writing guide | | activation eval, output eval, should-trigger / should-not-trigger / near-miss, routing failure, description tuning | references/agent-eval-design.md | How to design activation and output evals at scaffold time so the right agent gets picked and produces correct work |
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-11 | fail→pass | 15,282 | 6,361 | -58% | 1 | 1 | 0% | 2,599 | 3,476 | +34% | 0 | 0 | — |
case-20 | pass→pass | 14,770 | 12,154 | -18% | 1 | 1 | 0% | 2,429 | 4,263 | +76% | 0 | 0 | — |
case-01 | fail→fail | 18,303 | 32,725 | +79% | 1 | 1 | 0% | 3,175 | 8,385 | +164% | 0 | 0 | — |
case-02 | fail→fail | 17,867 | 3,484 | -81% | 1 | 1 | 0% | 3,177 | 2,615 | -18% | 0 | 0 | — |
case-03 | fail→fail | 26,858 | 3,391 | -87% | 1 | 1 | 0% | 4,816 | 2,505 | -48% | 0 | 0 | — |
case-04 | fail→fail | 13,627 | 4,147 | -70% | 1 | 1 | 0% | 2,164 | 2,869 | +33% | 0 | 0 | — |
case-10 | fail→pass | 12,256 | 6,524 | -47% | 1 | 1 | 0% | 2,016 | 3,418 | +70% | 0 | 0 | — |
case-05 | pass→pass | 12,307 | 5,446 | -56% | 1 | 1 | 0% | 1,825 | 3,038 | +66% | 0 | 0 | — |
case-06 | fail→pass | 13,615 | 5,987 | -56% | 1 | 1 | 0% | 2,302 | 3,095 | +34% | 0 | 0 | — |
case-07 | fail→pass | 12,700 | 7,078 | -44% | 1 | 1 | 0% | 1,862 | 3,290 | +77% | 0 | 0 | — |
case-08 | fail→fail | 11,712 | 2,188 | -81% | 1 | 1 | 0% | 1,938 | 2,559 | +32% | 0 | 0 | — |
case-09 | pass→pass | 7,147 | 2,245 | -69% | 1 | 1 | 0% | 1,277 | 2,590 | +103% | 0 | 0 | — |
case-12 | fail→pass | 10,558 | 3,893 | -63% | 1 | 1 | 0% | 1,667 | 2,807 | +68% | 0 | 0 | — |
case-13 | fail→fail | 10,003 | 3,398 | -66% | 1 | 1 | 0% | 1,684 | 2,777 | +65% | 0 | 0 | — |
case-14 | fail→pass | 11,929 | 4,282 | -64% | 1 | 1 | 0% | 1,899 | 2,960 | +56% | 0 | 0 | — |
case-15 | pass→pass | 5,503 | 2,417 | -56% | 1 | 1 | 0% | 950 | 2,575 | +171% | 0 | 0 | — |
case-16 | pass→pass | 11,096 | 6,276 | -43% | 1 | 1 | 0% | 1,742 | 3,236 | +86% | 0 | 0 | — |
case-17 | pass→pass | 12,716 | 5,551 | -56% | 1 | 1 | 0% | 2,005 | 3,043 | +52% | 0 | 0 | — |
case-18 | fail→pass | 16,617 | 7,134 | -57% | 1 | 1 | 0% | 2,977 | 3,332 | +12% | 0 | 0 | — |
case-19 | fail→pass | 14,440 | 6,400 | -56% | 1 | 1 | 0% | 2,302 | 3,221 | +40% | 0 | 0 | — |
case-21 | pass→pass | 4,319 | 2,824 | -35% | 1 | 1 | 0% | 678 | 2,668 | +294% | 0 | 0 | — |
case-22 | pass→pass | 12,620 | 11,350 | -10% | 1 | 1 | 0% | 2,345 | 4,189 | +79% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +36 percentage points is the difference between those two pass rates over the 22 comparable cases. 2 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.