Command Creator.
Author a new slash command for the catalog
$ npx archtmpl@latest --skill command-creator --global─ paste in terminal · restart claude code
Command Creator
Write one file into commands/. The catalog reads that folder, so the file is
the entry. There is no database, no sync, and no second place to register it.
What a command file is
One markdown file at commands/<slug>.md. Frontmatter, then the body Claude
Code executes when someone types /<slug>.
---
title: Create Meeting Minutes
summary: Turn raw notes into formal meeting minutes
discipline: practice-contracts
tags: ["Construction Admin", "Project Management"]
description: Create AEC meeting minutes from raw notes
argument-hint: <project-name>
---
# Create Meeting Minutes
...
Six keys are required by web/tests/test-catalog-frontmatter.mjs: title,
summary, description, discipline, tags, and the body. argument-hint is
optional and recommended. There is no name key on a command; the filename is
the name.
Read commands/create-meeting-minutes.md before drafting. It is the pattern the
rest of the folder follows.
Workflow
Step 1. Interview
Ask, in one message:
- What document does this command produce, and who receives it?
- What does the user have in hand when they type the command? That becomes the
argument-hintand the first section of the body.- What must appear in the output every time, and what is optional?
- What output format: markdown, or something that needs rendering?
- Which discipline does it belong to?
Step 2. Pick the slug
The slug is the filename without .md, and it is what the user types. Rules:
- Lowercase, digits, hyphens only.
- Start with a verb the folder already uses. Read the folder and match it rather than inventing a new verb for the same kind of action.
- Check for a collision by listing
commands/. A near-miss is worse than a collision, because both files render and nobody can tell which one they ran.
Step 3. Check the discipline
The value must be one of the slugs in web/lib/disciplines.ts. Read that file;
do not work from a remembered list. A value outside it fails the test, and
before the test existed it made the entry disappear from the sidebar without a
404 or an empty slot.
Step 4. Write the frontmatter
summary: 80 characters or fewer. It is the card text, and the test enforces the length. It must not begin with "This command" or "Use when", and must not contain "Trigger on". Those belong indescription.description: what it does and when to use it. This is what Claude Code reads to decide whether to load the command, so it carries the terms someone would actually type.tags: a JSON array. Match tags already in use before adding a new one.
Quote any value containing : , a leading #, or a leading YAML indicator
character. An unquoted description with a colon in it terminates the YAML
block early, and the entry then fails to register while the page still renders
normally.
Step 5. Write the body
Structure that the existing commands follow:
- Title and one line on what it produces.
- Input you need, as a list. Name what to ask the user for if it is missing, and say never to invent a value.
- The output structure, as a template.
- Rules and edge cases.
Keep the body focused on producing the document. If the command needs to check something against a code or a contract, the value comes from the user, and the command says so. Do not write a threshold, a duration, or a code number into a command file.
Step 6. Verify before handing back
cd web && npm test
Then report: the file path written, the slug, the discipline, and whether the test passed. Say plainly that the entry is live once committed and deployed, and that nothing else needs registering.
Rules
- One file, one command. No second registration step exists.
- Read
web/lib/disciplines.tsfor the allowed values rather than recalling them. - Read the folder before picking a verb or a slug.
- Quote frontmatter values that need it. A colon in an unquoted description is the failure that broke five skills before the test caught it.
- No code values in a command body. Thresholds, review durations, and clause numbers come from the user at run time.
- Run
npm testand report the result rather than asserting the entry works.
Anti-patterns
- Adding a
namekey to a command. Commands take their name from the filename, and the extra key breaks the shape check. - Writing the trigger phrasing into
summary. It is the card line, and the test rejects it. - Inventing a new verb prefix for an action the folder already covers.
- Claiming the command is published. It is a file until it is deployed.
- Referring to a sync process, a Notion database, or a slug round-trip. None of those exist; the catalog is the folder.
Resources
None. This skill is one file. Read commands/ and
web/lib/disciplines.ts directly.
What this does. Interviews you for what the command should produce, picks a
slug, writes commands/<slug>.md with the frontmatter the catalog test checks,
drafts the body, and verifies the result against the folder and against
web/lib/disciplines.ts before handing back.
What this does not do.
- It does not publish anything. The command is live when the file is committed and the site is deployed. This skill writes the file and says so.
- It does not decide document content standards for you. What a transmittal or an RFI must contain is your office's call; the command records your answer.
- It does not write skills or agents. Those have different frontmatter and
different homes. Use
skill-creatororagent-creator. - It does not run the test suite for you. It tells you the one command to run.
What you need before starting. What document the command produces, who receives it, and what inputs the user will have to hand when they invoke it.
─ read before running it
.claude/skills/command-creator/1 file · 6.7 KBSKILL.md6.7 KB
─ what the install lands on your disk