Commands Reference
ai-core-kit ships two kinds of slash command, split along the META vs CHILD boundary:
- META commands live in the kit’s own
.claude/commands/and operate on the kit itself or on a fork during setup. There are exactly two:/ack-build(build the kit) and/ack-init(initialize a fork). - CHILD commands live under
templates/commands/and are rendered into a fork by/ack-init. These are the day-to-day delivery commands a child project’s developers invoke: the RPI trio plus the product-planning pair.
User-invocable skills (skill-creator, skill-validator, mcp-builder, cost-telemetry) are model- or human-invoked rather than slash commands; they are listed at the end for completeness and detailed in the Skills Catalog.
Slash commands are not the only surface, though — the create-ack CLI is the spine. Anything you can do from Claude Code or the site you can also do from one binary, in any terminal or CI runner.
The create-ack CLI — the spine
The kit’s guiding principle is that everything is reachable from the CLI, not only from Claude Code slash commands or this site. create-ack is a single binary (the @arthurghz/create-ack npm package) that you run with npx @arthurghz/create-ack@latest …, or install once with npm i -g @arthurghz/create-ack@latest.
It groups its work into subcommands. Scaffolding is the original command; the telemetry subcommands are thin wrappers over the stdlib-Python tools in telemetry/ — the same code documented in Observability, surfaced under one CLI so you never have to remember a python3 telemetry/<script>.py invocation.
| Subcommand | What it does | Wraps |
|---|---|---|
create-ack new <name> (alias scaffold) | Scaffold a child project — the archetype-first interview → frozen project.manifest.yaml → deterministic render. The fork-free entry point. | the render engine (lib/, templates/) |
create-ack cost [--by feature|model|agent|session|day] | Offline USD spend from local transcripts × pricing.json, attributed across axes. Honors --since/--until, budgets, and the manifest’s telemetry block. | telemetry/aggregate.py |
create-ack dora [--deploy-mode tag|merge] | The four DORA keys computed exactly from local git history (deploy frequency, lead time, change-fail rate, MTTR). | telemetry/dora.py |
create-ack report [--format md|html] | One self-contained Tier-0 file combining offline cost/tokens and DORA — a view, no new math. | telemetry/report.py |
create-ack dashboard [--serve] [--watch N] | A self-contained interactive HTML cost dashboard; --serve runs it on localhost, recomputing offline each request. | telemetry/dashboard.py |
create-ack watch [--by feature] | A live in-terminal token/cost monitor, refreshed in place, with an optional advisory --budget bar. | telemetry/watch.py |
create-ack monitor [BUDGET_USD] | Local budget alert: exits non-zero (and fires a desktop notification) when offline spend crosses the cap — schedule it on your machine. | telemetry/monitor.sh |
create-ack feature <name> | Open/close a sidecar attribution window so cost is attributed per-feature (per contract), not just per git branch. See below. | telemetry/aggregate.py sidecar map |
create-ack migrate | Bump an existing child to the current manifest schema / template revision via the idempotent managed-block merge. | the render engine |
create-ack update | Self-check npm for a newer release; suggests npm i -g @arthurghz/create-ack@latest. | npm registry |
Status, honestly. Scaffolding (
new/scaffold) ships today (@arthurghz/create-ack@0.1.0). The telemetry engines undertelemetry/are real and run today viapython3 telemetry/<script>.py …— the table shows the unifiedcreate-ack <verb>surface that wraps them so the CLI is the single spine. Until a subcommand is wired in your installed version, call the underlying tool directly; the flags and behavior are identical. Track parity in the roadmap.
Why the CLI, not just slash commands
Slash commands need a Claude Code session; the site is read-only. The CLI needs neither. A CI job, a cron entry, a teammate without Claude Code, or a quick create-ack cost --by feature between turns all reach the same capabilities. Cost stays offline everywhere — it is derived from local transcripts × a versioned pricing map, never a live API (there is no live cost API in hooks; issue #11008). DORA stays exact everywhere — it reads git history.
Per-feature vs per-branch cost attribution
create-ack cost (and aggregate.py) can attribute spend to a feature two ways, and the choice is yours:
branch_prefix(the default, zero setup). A turn’s feature is inferred from the git branch it ran on: with--branch-prefix feat/, work onfeat/order-intakebuckets toorder-intake. Nothing to maintain — but it is only as granular as your branches, and turns onmain(or any non-prefixed branch) fall into the--default-bucket(e.g.unattributed).sidecar_map(precise, opt-in viacreate-ack feature).create-ack feature <contract-id>writes a sidecar entry{from: <now>, to: null, bucket: <contract-id>}; running it again (or with the feature finished) closes the open window.aggregate.py --sidecar-map <file>then attributes each turn by timestamp → contract, independent of branch. This is the only thing a session hook can record honestly — a timestamp→contract mapping, never a cost — so it pairs naturally with the contract gate’sC-NNNIDs.
Pick branch_prefix when your branches already track features; reach for create-ack feature when you want spend pinned to specific contracts regardless of how you branch. The two are mutually exclusive per run — a provided --sidecar-map overrides --branch-prefix.
META commands
/ack-build — META build orchestrator
Orchestrates the kit’s own self-build from bootstrap/ack.bootstrap.yaml. Reads the data-driven build config, validates it against its JSON-Schema, then drives the build phase-by-phase with a multi-agent team per phase (ground-truth -> author -> adversarial QA), surfacing per-phase status and cumulative offline cost, and stopping at every gate for approval.
Runs only inside the ai-core-kit META repo. It refuses unless both META sentinels are present (
bootstrap/ack.bootstrap.yamlanddocs/BOOTSTRAP.md). It is the inverse of/ack-init.
Arguments (all optional):
| Flag | Effect |
|---|---|
--phase <Pn> | Run exactly one phase (still honors its depends_on; aborts if a dependency is not done). |
--from <Pn> | Start the sweep at phase Pn; skip already-done earlier phases but still run their acceptance tests as a regression gate. |
--dry-run | Print the resolved plan (phase order, per-phase team, model/budget resolution, gates) and stop. Authors nothing. |
--no-stop | Do not pause at gate: true phases (CI sweeps). Default is to stop at every gate and ask for approval. |
--rebuild | Re-author a phase even if it is done: true; still runs acceptance tests after. |
Guarantees and invariants:
- Cost is always offline. There is no live token/cost API in hooks (issue #11008). Cumulative spend is computed by
telemetry/aggregate.pyover~/.claude/projects/**/*.jsonltimes a versionedpricing.json. If the aggregator does not yet exist, it reportscost: unavailable (P6 pending)and proceeds — it never fabricates a number. - Ground-truth is mandatory per phase. Each authoring phase clones
meta.reference_reposfor exact extraction and verifies primitives againstcode.claude.com/docsbefore writing. - Layer discipline.
/ack-buildwrites only META artifacts. If a worker would write a concreteproject.manifest.yaml, a contract instance, or a contract-gate entry at the META root, that is a layer violation and is refused. done:is operator-managed. Authoring a phase does not flip itsdoneflag — that is a human decision after reviewing QA.
See Building the Kit: /ack-build for the full walkthrough.
/ack-init — CHILD project initializer
Initializes a forked CHILD project. Asks the archetype first, runs an archetype-scoped deterministic interview, writes project.manifest.yaml (the single source of truth), renders the archetype template set, and wires opt-in hooks / MCP / telemetry / discovery. It is re-entrant and idempotent via managed-block merge.
This is
/ack-init, not/init— the built-ininitskill owns/init. Run it in a forked CHILD repo, never in the ai-core-kit META repo. It refuses (fail-closed, no override flag) if either META sentinel is present: atemplates/archetypes/directory or adocs/BOOTSTRAP.mdfile.
Arguments (all optional):
| Flag | Effect |
|---|---|
--non-interactive | QA / CI mode. No AskUserQuestion calls. Requires --answers. |
--answers <path> | Answers file (YAML) that fully specifies the interview. |
--archetype <name> | Pre-select the branch axis, skipping the first question. |
--force | Re-render conflict policy: overwrite ack-owned regions even if hand-edited inside the managed block (never touches unmanaged files/regions). |
--skip | Re-render conflict policy: keep existing on any conflict (CI-safe default). |
Step sequence:
- META-repo guard — fail-closed if running inside ai-core-kit itself.
- Detect mode & re-entrancy — interactive vs QA; probe whether a manifest already exists (re-run -> merge territory).
- Freeze the contract, ask archetype first — cross-check that every interview question’s
writes_toresolves to a real schema property (invariant I1); archetype is the branch axis (invariant I3). - Run the interview, write the manifest — the interview is the only writer;
managed:is regenerated wholesale,user:is seeded once and preserved; validate against the schema before any irreversible write (fail-closed, invariant I6); computemanifest_hashlast. - Render via the render engine against
managed:. - Wire integrations per opt-in toggles using delimited managed-block merge (never blind-overwrite).
- Emit a minimal child
CLAUDE.mdpointer and update therendered_files[]ledger.
Archetype menu: backend-api and fullstack render deep (full question subset + template set); monorepo, library-sdk, infra-iac are schema-known and render a minimal core in v1 (a warning is printed when one is selected).
A user-invoked slash command cannot be invoked by name under
claude -p. QA / non-interactive mode is reached by inlining the task and piping an answers file on stdin. The same META-repo guard, schema validation, and idempotent merge apply unchanged.
The producer/consumer model behind the manifest is covered in Manifest & Interview; the getting-started walkthrough is in Quickstart.
CHILD commands (rendered into a fork)
These ship under templates/commands/ and are rendered into a child project by /ack-init. They are the project team’s everyday delivery commands.
RPI: Research -> Plan -> Implement
The kit’s default delivery loop for non-trivial work. Each step has an approval gate (Research -> Plan -> Implement).
| Command | Step | What it does | Argument hint |
|---|---|---|---|
/rpi/research | 1 | Research a feature’s viability and produce a GO / NO-GO recommendation before any planning. | <feature-slug> |
/rpi/plan | 2 | Turn an approved research report into product, UX, engineering, and phased-roadmap planning docs. | <feature-slug> |
/rpi/implement | 3 | Execute a feature’s phased plan with per-phase code discovery, review, and a user validation gate. | <feature-slug> [--phase N] [--validate-only] [--skip-validation] |
The RPI commands were re-authored for ai-core-kit from
shanraisshan/claude-code-best-practice(MIT). See the License Ledger.
Product planning
| Command | What it does | Argument hint |
|---|---|---|
/prd | Generate a concise product requirements document for a feature, initiative, or problem statement. | <feature-or-problem> |
/rice | Prioritize features with RICE scoring (Reach, Impact, Confidence, Effort), optionally under an effort-capacity limit. | <features.csv | inline list> [--capacity N] |
/prd and /rice are original to ai-core-kit.
User-invocable skills
These are skills, not slash commands — the model invokes them when their description trigger matches, and a human can invoke them by name. The four that ship in the kit’s own .claude/skills/ (META build-tooling) are the most likely to be run directly:
| Skill | Layer | Purpose |
|---|---|---|
skill-creator | META | Author, edit, and benchmark a kit skill (drafts SKILL.md, runs evals, optimizes the description). |
skill-validator | META | Validate skills / agents / commands against the kit’s frontmatter rules by running scripts/lint-frontmatter.py. |
mcp-builder | META | Build a high-quality MCP server (research, implementation, evaluation). |
cost-telemetry | META + CHILD | Run the offline cost aggregator and interpret its output. |
CHILD payload skills (coding-standards, production-audit, language packs, and so on) are loaded by agents during delivery rather than invoked as commands. The full catalog with provenance and wiring triggers is in the Skills Catalog.
Command frontmatter
Every command file is markdown with YAML frontmatter. Only description is required; the linter warns on unrecognized keys and errors on the SKILL-forbidden keys. See Contributing for the full frontmatter conventions and the linter.
---
description: One-line, third-person summary of what the command does. # REQUIRED
argument-hint: "[--flag] [<arg>]" # OPTIONAL
allowed-tools: Read, Write, Bash(git status:*) # OPTIONAL
disable-model-invocation: true # OPTIONAL (human-only)
---