Commands
A command is a user-facing entry point: the thing you type to kick off specialized work. Commands contain no agent logic of their own — each command names exactly one target, either a workflow or an agent, and delegates to it. That indirection is what keeps prompts from being duplicated across commands.
On-disk layout
kits/<kit>/commands/<name>/
├── command.yaml machine-readable metadata (validated by Zod)
└── prompt.md the command's prompt templatecommand.yaml reference
name: create-feature # required, kebab-case
description: Implement a new feature via the feature-development workflow # required, <= 500 chars
version: 1 # required, positive integer
tags: # optional, defaults to []
- feature
workflow: feature-development # EXACTLY ONE of workflow: / agent:The target rule is strict: exactly one of workflow: or agent:,
never both and never neither. Set both and validation fails with
must not set both "workflow" and "agent". Because the target is
machine-readable, doctor and validate catch dangling references
(command names a workflow that does not exist) before a runtime sees
them.
prompt.md structure
Required sections (enforced by agentkrew validate, minimum body 400
chars):
## Purpose
## Inputs
## Workflow
## Expected output
## Failure behaviorThe ## Workflow section tells the runtime which target to invoke and
in what order; for workflow targets it embeds the deterministic step
plan (including parallel groups) so the session can drive the whole
team without any runtime-specific machinery.
Argument templating is runtime-provided, not authored per runtime:
Claude Code and OpenCode substitute $ARGUMENTS / $1..$n in the
command body; Codex skills take the request as-is.
How you invoke them
| Runtime | Form | Example |
|---|---|---|
| Claude Code | slash command from .claude/commands/<name>.md |
/create-feature "Add checkout" |
| OpenCode | slash command from .opencode/commands/<name>.md |
/fix-bug "empty CSV rows" |
| Codex | cmd- skill: $cmd-<name>, /skills picker, or description match |
$cmd-ship |
Codex has no custom-command facility, so commands render as skills with
a cmd- prefix — same content, different typing.
Workflows additionally render as workflow-<name> entries (commands or
skills depending on runtime), so a workflow is invocable even without a
command, and a command and workflow of the same name (for example
review) never collide.
Shipped commands
Engineer Kit (7):
| Command | Target | Invokes |
|---|---|---|
/create-feature |
workflow feature-development |
Plan → parallel build → test → audit → review → ship |
/fix-bug |
workflow bug-fix |
Reproduce → root-cause → fix → regression test → review |
/review |
workflow review |
Multi-agent review with aggregated findings |
/multi-agent-review |
workflow review |
Same workflow, explicit multi-agent framing |
/security-audit |
agent security-auditor |
Focused security pass |
/test |
agent test-automator |
Focused test-suite work |
/ship |
agent shipper |
Release gate: tests, lint, build, diff, security |
Marketing Kit (6): /campaign-brief and /launch-plan
(growth-strategist), /blog-post (content-marketer),
/email-sequence and /landing-page (copywriter), /seo-audit
(seo-specialist).
agentkrew list commands --installed is the live source of truth.
Inspecting commands
agentkrew list commands --installed
agentkrew info create-feature --installed
agentkrew info create-feature --installed --jsonCreating a custom command
Two supported paths:
- Source checkout (contributor): add
kits/<kit>/commands/<name>/{command.yaml,prompt.md}with exactly one target and the five required sections, thenagentkrew validate --kit <kit>. The target must resolve to a real workflow or agent — the loader rejects dangling references. - Installed project: add a runtime-native command file
(
.claude/commands/<name>.md,.opencode/commands/<name>.md, or a.agents/skills/cmd-<name>/SKILL.mdfor Codex).agentkrew updateonly rewrites files it rendered, so yours survives updates; verify withagentkrew validate --installed.
See customization for the full authoring workflow.