Use when reviewing UI for accessibility — WCAG 2.2 AA, keyboard nav, focus, ARIA, contrast, screen-reader semantics — even on 'is this a11y-OK?' or 'mach das barrierefrei'.
The English summary is being prepared. Showing the original description.
Use when creating or editing a slash command in src/agent-src/commands/ — frontmatter, numbered steps, safety gates — even when the user just says 'add a /command for X'.
The English summary is being prepared. Showing the original description.
See how to installReview the instructions the agent will receive before you install.
src/agent-src/commands/{name}.mdDo NOT use this skill when:
rule-writingguideline-writingskill-writing| Intent | Artifact |
|---|---|
"User types /foo to explicitly run this" | Command |
| "Agent picks this up from description match" | Skill |
A command is user-invoked and carries disable-model-invocation: true.
A skill is model-invoked via description routing. If both audiences apply,
author as a skill and add a thin command that delegates to it.
A command must EARN a top-level slot. Only three justifications qualify:
flow-entry, state-query, or product-surface — everything else is a
skill. Check before authoring: command-clusters § Command justification
(ADR-048).
Categorize at creation (checklist). When you author a NEW top-level command,
declare its justification as a category: in the frontmatter — the schema enum
is flow-entry | state-query | product-surface:
work, git-commit, review-changes).agent-status, project-health, profile).council, research, roadmap).category: and note why — category: is
OPTIONAL (validate-when-present); deferring is intentional, not forgotten.Sub-commands (council:debate) inherit the parent cluster's category — leave
category: off them. Why optional + not yet a blocking lint, and what triggers
the upgrade: command-category-governance.
Every command in src/agent-src/commands/{name}.md is projected
into .claude/skills/{slug}/SKILL.md by scripts/condense.ts
(generate_claude_commands). Nested commands flatten with -
(council/default.md → council-default). Skills and commands share the
same .claude/skills/ namespace — Claude does not distinguish them.
Consequences for authoring:
description is the routing surface Claude reads.
Polite or generic phrasing causes undertriggering even with
disable-model-invocation: true set, because the in-host command
suggester, fuzzy search, and any tooling that scans .claude/skills/
rank by description match.disable-model-invocation: true blocks automatic invocation. It
does NOT remove the command from discovery surfaces. A weak description
means the command is invisible to the suggester even when the user's
intent matches.... even when the user just says ... tail, ≤ 200 chars. See
skill-writing § 1b for the canonical before/after.suggestion.trigger_description and suggestion.trigger_context
blocks are separate from the frontmatter description — they
drive the in-host suggester (command-suggestion-policy), not Claude's
skill router. Both matter, both must be precise.Bottom line: write the command's description as if a skill router will
read it — because one will.
Creating or materially rewriting a command must go through Understand →
Research → Draft from the
artifact-drafting-protocol rule.
/{name} solve in one
session? What are the inputs, outputs, side effects?src/agent-src/templates/command.md,
grep commands/ for overlap, and analyze 1–2 peer commands
(e.g. create-pr, commit).name, description) first, then the
step skeleton. Only fill bodies after both are confirmed.Canonical source: src/agent-src/templates/command.md.
Minimum frontmatter:
---
name: {command-name} # must match filename without .md
description: "Short human-readable summary of what /{name} does"
disable-model-invocation: true
skills: [optional-skill-1] # optional — skills this command delegates to
suggestion: # required (road-to-context-aware-command-suggestion Phase 2)
eligible: true # default; set false to opt out of auto-surfacing
trigger_description: "natural-language pattern, comma-separated examples"
trigger_context: "concrete signal — branch name, file pattern, recent tool output"
---
Or, when opting out:
suggestion:
eligible: false
rationale: "one-line reason this command must be invoked deliberately"
Suggestion-block rules (linter-enforced):
eligible is required and must be true or false.eligible: true → both trigger_description and trigger_context must be
non-empty (≥ 10 chars each); the linter rejects empty or overly generic
patterns. The suggestion layer never auto-executes; the user always picks.eligible: false → rationale must be non-empty. Use the opt-out for
intentional-only invocations (settings mutations, destructive actions,
package-internal tools, niche maintenance).confidence_floor (0.0–1.0) and cooldown (e.g. 10m)
override the global settings per command.Eligibility decisions are tracked in
agents/settings/contexts/command-suggestion-eligibility.md.
Add or revise entries there before changing a command's suggestion block.
When iterating on the description, delegate to the
description-assist skill — approval-gated,
no silent edits, max two rounds.
Required sections in this order:
# /{name} heading + one-line summarysrc/, never on
generated directories## Steps — numbered sub-headings ### 1., ### 2., ...user-interaction rule)## Rules — short, command-specific constraintssrc/ only.Body links to guidelines / contracts use the verbatim relative form
(../../docs/guidelines/..., ../../docs/contracts/...); the
condense-time rewriter handles depth. Do not pre-rewrite in source. Do
not write src/ in any markdown link target — the
file ships into .augment/commands/ and the prefix breaks consumer
resolution. The only legitimate src/ strings in a
command file are prose mentions and step instructions about where to
edit (per § 2 above). Canonical reference: rule-writing § 3b.
Normative source: size-enforcement +
docs/guidelines/agent-infra/size-and-scope.md.
| Category | Target |
|---|---|
| Ideal | ≤ 120 lines |
| Acceptable | ≤ 200 lines |
| Split signal | > 250 lines |
Commands orchestrate, they do not implement detail. If a step needs a multi-paragraph explanation, extract it into a skill and call it.
./scripts-run src/scripts/skill_linter src/agent-src/commands/{name}.md
→ 0 FAIL.bash scripts/condense.sh --sync → regenerates dist/agent-src/commands/{name}.md../scripts-run src/scripts/condense --generate-tools → creates the Claude symlink at
.claude/skills/{name}/SKILL.md.Taskfile.yml in this repo for
the script list) — must exit 0 except for tolerated warnings.Advisory, reviewer-checked — no CI gate. When the same PR adds a
new check to scripts/skill_linter.ts (or strengthens an existing
one) such that previously-clean commands now warn, the PR body MUST
record the pre-existing violations on main in a Markdown table:
### Pre-existing baseline (informational)
| Code | Count on main | Bucket |
|---|---:|---|
| {new_code} | N | (a) genuine fix · (b) accept · (c) check too aggressive |
Forward-only: the new check applies to the file under review and
to future edits. The baseline table is informational so reviewers
can spot intent (fix-now vs. backlog) without diffing the full lint
output. See agents/evidence/analysis/lint-warning-triage.md for the
3-bucket reference.
src/agent-src/commands/{name}.mddisable-model-invocation: true presentdisable-model-invocation: true — the model will auto-invoke
the command as if it were a skill..augment/ paths for editing — source of truth is
src/.skills:.Apply the Frugality Charter to every command you author.
Examples in this artifact:
Pre-save self-check:
{{var}}) accompanied by setup prose
instead of action prose?disable-model-invocation: falsedist/agent-src/, .augment/, or .claude/ projectionsOn cloud surfaces (Claude.ai Web, Skills API) the package's
scripts/skill_linter.ts, scripts/condense.ts, and the task
runner are not available. This skill still applies — but with
prose-only validation:
name,
description, disable-model-invocation: true MUST all be
present.src/agent-src/commands/{name}.md and run
task sync && task lint-skills locally before committing.Good description (trigger-shaped, outcome-focused):
"Create a GitHub PR with structured description from Jira ticket and code changes"
Bad description (vague, no outcome):
"PR command"
## Examples section on a user-facing commandStated once, here — never repeated per command.
A command whose visibility is visible or advanced carries an
## Examples section: 1-3 filled invocations in a fence, then exactly
one Why line. Filled means a real path, a real ticket key, a real flag — a
placeholder teaches nothing about what to type.
The Why line uses one of two literals, **Why it works:** or a
### Why it works heading, and cites exactly one pattern id from
prompt-patterns.yml:
outcome-not-steps · self-check-loop · measurable-target ·
give-the-artifact · point-at-reference · say-the-format. One id, because
the Why line's job is the part that transfers to a command the reader has not
seen, and a line naming three patterns names none of them.
## Examples
```
/work fix the failing login test under tests/feature/auth
```
**Why it works:** measurable-target — it names the file instead of the symptom.
Enforced by check_command_examples, forward-only: the 23 in-scope commands as
of 2026-08-24 are grandfathered in a frozen set inside the gate, and a command
added or promoted into visible/advanced after that must comply. Two
things the gate checks that are easy to miss — an invocation must resolve to
the command's own name: (a rename otherwise leaves stale examples behind), and
a flag used in an example must be documented in the body outside the
section.
Workflow sequencing, preconditions, ID/output provenance ("copy ids verbatim,
never from memory"), a mandatory "why" intent field, and turn-end contracts
belong INSIDE this artifact's description/frontmatter — where they fire at the
decision point — not in always-on prose. See
tool-description-as-policy.
No reviews yet. Tell others what you thought.
No login needed. Share how it worked for you, ask a question, or note where it did not run.
No comments yet. Be the first to write one.
Use when reviewing UI for accessibility — WCAG 2.2 AA, keyboard nav, focus, ARIA, contrast, screen-reader semantics — even on 'is this a11y-OK?' or 'mach das barrierefrei'.
The English summary is being prepared. Showing the original description.
Use when defining or auditing the activation event — aha-moment selection, retention correlation, falsifiable definition. Triggers on 'what is our aha moment', 'redefine activation'.
The English summary is being prepared. Showing the original description.
Use when capturing an architectural decision — file naming, next ADR number, Status / Context / Decision / Consequences, index regen; fires even without saying 'ADR'.
The English summary is being prepared. Showing the original description.
Adversarial critique — devil's advocate, stress-test, honest teardown ('poke holes', 'be brutal', 'was hältst du davon'); explicit request only. Routine code or design review → code-review.
The English summary is being prepared. Showing the original description.
Use when reading, creating, or updating agent documentation, module docs, roadmaps, or AGENTS.md. Understands the full .augment/, agents/, and copilot-instructions structure.
The English summary is being prepared. Showing the original description.
Use for an adversarial red-team / blue-team / auditor review of an AI agent's CONFIG + behaviour (rules, skills, MCP, hooks, permissions) — attack-chain → defensive-gap list, not a code audit.
The English summary is being prepared. Showing the original description.