arbiterforge/codearbiter-skill-author
The authoring gate for new skills. Routed to when the user invokes /new-skill "<gap>". Five gated phases — gap evidence, scope, authoring, self-review against the v2 house style, routing integration. A new skill is not written until an existing one is proven not to cover the gap, and not shipped until it carries gated phases, hard rules, and a routing entry. Every authored skill matches the v2 format (frontmatter name+description, # name, Pre-flight, Phase N · gate, Hard rules).
npx skills add https://github.com/arbiterForge/codeArbiter --skill skill-author
Author a new skill, the right way. Routed to when the user invokes /new-skill "<gap>".
Read these, or STOP and surface the gap — never author on assumption:
<gap> argument. Absent → STOP and ask: "Describe the gap this skill would fill. What situation does no existing skill cover today?"${CLAUDE_PLUGIN_ROOT}/routines/INDEX.md — the surface scan of every existing skill. This is the gap-overlap check in Phase 1 and the integration target in Phase 5. Never bulk-read the skill bodies.${CLAUDE_PLUGIN_ROOT}/routines/commit-gate/SKILL.md and ${CLAUDE_PLUGIN_ROOT}/routines/tdd/SKILL.md — the canonical v2 format the authored skill must mirror. Read them before Phase 3.<project-root>/.codearbiter/CONTEXT.md — project context, only if the gap is project-specific. A generic skill needs no project state.A new skill is permanent surface area. It is not written until the gap is proven real and proven uncovered.
Restate the gap in one sentence. Then scan INDEX.md for overlap: if an existing skill's "Owns" column already covers this, STOP and name it — "The <name> skill already owns this; review it before requesting a new one."
If no skill covers it, demand evidence — one of:
Hypothetical cases do not count. Fewer than three (Option A) or no traceable evidence (Option B) → STOP and decline: "Insufficient evidence of a real, recurring gap. A skill adds permanent maintenance cost. Return with evidence and I'll author it."
Gate: the gap is restated, proven uncovered against INDEX.md, and backed by Option-A or Option-B evidence. Speculation does not pass.
Settle scope with the user before any prose is written. Ask, and wait for an explicit answer:
${CLAUDE_PLUGIN_ROOT}/routines/<name>/SKILL.md). An *agent* is dispatched by a skill (a reviewer/author, lives at ${CLAUDE_PLUGIN_ROOT}/agents/<name>.md). If the gap is really a reviewer, this is the wrong skill — redirect to agent authoring./<name> to reach it, or does another skill route to it mid-workflow? A command needs a routing-table entry; an internal skill needs a named parent that routes to it.Confirm back: "I will write a [command-invoked / internal] skill at ${CLAUDE_PLUGIN_ROOT}/routines/<name>/SKILL.md, owning <one responsibility>. [A /<name> command will be added to the routing table. / The <parent> skill will route to it.]"
Gate: explicit user agreement on routed-vs-dispatched, command-vs-internal, and a one-sentence single responsibility. Assumed answers do not pass.
Write SKILL.md to the v2 house style — mirror commit-gate and tdd exactly. Start from ${CLAUDE_PLUGIN_ROOT}/routines/skill-author/references/skill-template.md. Required shape:
name: and description: only. Description is terse: what routes to it, the phase count, the gate. No cut doc refs, no trigger disclaimer.# <name> H1, then a one-line intro naming what routes to it (/<command> or the parent skill).## Pre-flight — the docs to read or STOP on. Project state cites <project-root>/.codearbiter/<doc>; other skills cite ${CLAUDE_PLUGIN_ROOT}/routines/<name>; agents cite ${CLAUDE_PLUGIN_ROOT}/agents/<name>.md. Never guess a command — read it or STOP.## Phase N — <title> · gate: BLOCK|STOP — sequential, each ending in a one-line Gate:. A phase with output that could be wrong has a gate; only a purely declarative phase may omit one.## Hard rules — MUST NOT lines, one per rule, no duplication.Authoring rules:
CONTEXT.md, tech-stack.md, coding-standards.md, specs/, plans/, security-controls.md, decisions/, overrides.log. Do not reference cut docs or cut skills.[NEEDS-TRIAGE] marker.Re-read the authored skill against the v2 quality bar. Each line below is a checkable defect, not a vibe:
Gate: line stating a checkable condition. "Looks good" / "seems right" is not a gate; rewrite it.commit-gate/tdd. Strip hedging and filler.name+description only; H1 matches name; phases are numbered with · gate:; paths use ${CLAUDE_PLUGIN_ROOT} / <project-root> correctly; no cut docs/skills, no legacy ${FRAMEWORK_ROOT}/${PROJECT_ROOT}/.agents/ paths.## Trigger disclaimer block.Compile the findings, fix each, and re-read once. Present the corrected skill and the findings list to the user.
Gate: zero open self-review defects, and the user has seen the corrected skill. An unaddressed defect blocks Phase 5.
A skill no one routes to is dead code. Wire it in.
${CLAUDE_PLUGIN_ROOT}/routines/INDEX.md: skill name (linked), "Routed to by", and "Owns" (the one-sentence responsibility from Phase 2)./<command> or condition), the primary route, any dispatched agents, the hard gate. For a command-invoked skill, also register the /<command> in the command reference.Verify no broken references: every path the skill cites resolves, and the INDEX.md row matches the file.
Hand off to commit-gate — never git commit directly. The skill change ships only through the commit gate.
Gate: INDEX.md and the routing table updated, no broken references, and the change handed to commit-gate.
INDEX.md and backed by Option-A or Option-B evidence.Gate: lines, or whose Hard rules duplicate phase rules.## Trigger disclaimer — a skill is routed to, an agent dispatched..agents/ / ${FRAMEWORK_ROOT} / ${PROJECT_ROOT} path in an authored skill.INDEX.md row and a routing entry.commit-gate.Take arbiterforge/codearbiter-skill-author 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.