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'.
日本語の概要は準備中です。原文の説明を表示しています。
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'.
インストール方法を見るインストールする前に、エージェントに与えられる指示の中身を確認できます。
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.
まだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
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'.
日本語の概要は準備中です。原文の説明を表示しています。
Use when defining or auditing the activation event — aha-moment selection, retention correlation, falsifiable definition. Triggers on 'what is our aha moment', 'redefine activation'.
日本語の概要は準備中です。原文の説明を表示しています。
Use when capturing an architectural decision — file naming, next ADR number, Status / Context / Decision / Consequences, index regen; fires even without saying 'ADR'.
日本語の概要は準備中です。原文の説明を表示しています。
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.
日本語の概要は準備中です。原文の説明を表示しています。
Use when reading, creating, or updating agent documentation, module docs, roadmaps, or AGENTS.md. Understands the full .augment/, agents/, and copilot-instructions structure.
日本語の概要は準備中です。原文の説明を表示しています。
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.
日本語の概要は準備中です。原文の説明を表示しています。