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/6a5670b7881a676c0da90d2afb950298087c4ccb/src/skills/command-writing/SKILL.md at commit 6a5670b7881a676c0da90d2afb950298087c4ccb. 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 | 9 | 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"
## 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.
Frequently asked questions
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 source record exposes this install command: npx skills add https://github.com/event4u-app/agent-config --skill "src/skills/command-writing". Inspect the command and pinned source before running it.
Static rules flagged exec-script, write-files in the source; the page lists the matching lines and excerpts.
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
garrytan/gbrain
End-to-end discipline for turning any large data source (audio libraries, email takeouts, document corpora, chat exports, API dumps) into brain pages at scale. The lifecycle spine: SCHEMA → ACCESS → TRIAL → EVALUATE → IMPROVE → CODIFY → TEST → SKILLIFY → BULK → MONITOR. State is tracked in a durable JSON manifest (see MANIFEST-PATTERN.md) so any crash, session boundary, or subagent fan-out resumes from ground truth instead of memory.
alirezarezvani/claude-skills
App Store Optimization (ASO) toolkit for researching keywords, analyzing competitor rankings, generating metadata suggestions, and improving app visibility on Apple App Store and Google Play Store. Use when the user asks about ASO, app store rankings, app metadata, app titles and descriptions, app store listings, app visibility, or mobile app marketing on iOS or Android. Supports keyword research and scoring, competitor keyword analysis, metadata optimization, A/B test planning, launch checklist
dotnet/skills
Migrates .NET test projects from VSTest to Microsoft.Testing.Platform (MTP). Use when user asks to "migrate to MTP", "switch from VSTest", "enable Microsoft.Testing.Platform", "use MTP runner", set OutputType=Exe only for test projects in Directory.Build.props, or mentions EnableMSTestRunner, EnableNUnitRunner, or UseMicrosoftTestingPlatformRunner. USE FOR: MTP behavioral differences vs VSTest (exit code 8, zero tests discovered, --ignore-exit-code, TESTINGPLATFORM_EXITCODE_IGNORE); centralizing