Best for
- Creating a new slash command in src/agent-src/commands/{name}.md
- Rewriting an existing command (not a typo fix)
- Deciding whether a request should be a command at all
event4u-app/agent-config/src/skills/command-writing/SKILL.md
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'.
Decision brief
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'.
Compatibility matrix
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/event4u-app/agent-config --skill "src/skills/command-writing"Inspect the Agent Skill "command-writing" from https://github.com/event4u-app/agent-config/blob/0adf49a8ae84b0ff6e2de8759eea43257e020eff/src/skills/command-writing/SKILL.md at commit 0adf49a8ae84b0ff6e2de8759eea43257e020eff. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
Creating or materially rewriting a command must go through Understand → Research → Draft from the artifact-drafting-protocol rule.
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 t…
Creating a new slash command in src/agent-src/commands/{name}.md Rewriting an existing command (not a typo fix) Deciding whether a request should be a command at all Splitting an oversized command into smaller ones
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.
Every command in src/agent-src/commands/{name}.md is projected into .claude/skills/{slug}/SKILL.md by scripts/condense.ts (generateclaudecommands). Nested commands flatten with - (council/default.md → council-default). Skills and commands share the same .claude/skills/ namespace…
Permission review
The documentation asks the agent to run terminal commands or scripts.
| "User types `/foo` to explicitly run this" | **Command** |The documentation asks the agent to create, modify, or delete local files.
Tell the user to save the file underEvidence record
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 91/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 7 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
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"
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.
Alternatives
coreyhaines31/marketingskills
When the user wants to plan, design, or implement an A/B test or experiment, or build a growth experimentation program. Also use when the user mentions "A/B test," "split test," "experiment," "test this change," "variant copy," "multivariate test," "hypothesis," "should I test this," "which version is better," "test two versions," "statistical significance," "how long should I run this test," "growth experiments," "experiment velocity," "experiment backlog," "ICE score," "experimentation program
event4u-app/agent-config
Use BEFORE writing/changing tests, adding mocks, or test-only methods on production classes — vs mocking-the-mock, production pollution, partial mocks, and overfit/tautological assertions
event4u-app/agent-config
Use when the user says "review the design", "check the UI", or wants a comprehensive UI/UX review. Uses a 7-phase methodology covering interaction, responsiveness, accessibility, and more.
event4u-app/agent-config
Use when writing, generating, or improving Pest tests for Laravel — clear intent, good coverage, maintainable structure, and alignment with project testing conventions.