Choose the destination — candidate by default, live only on an explicit
request. First resolve your KiroCrew skills directory — the SAME directory
that holds the auto/ group you inspected in step 2 (honor $KIROCREW_HOME
if set; do not assume a literal ~/.kirocrew, since migrated installs
live elsewhere).
(a) Candidate — the default. For "crystallize", "create a skill",
"save this as a skill", "make this reusable" and every other phrasing, stage
to the pending queue so a human approves before anything loads. Create
<skills-dir>/auto/.pending/<slug>/ (<slug> kebab-case, 3–60 chars) with
SKILL.md:
---
name: auto/<slug>
description: <=150 chars, starts with a verb
triggers: <3-8 comma-separated keywords/phrases>
source: auto
session_key: <this session>
created_at: <ISO-8601 UTC>
---
# <slug> (auto-generated)
## When to use
...
## Steps
...
## Gotchas
...
Always add a .meta.json next to SKILL.md — the pending list/detail API
reads the candidate's description, triggers, name, and source from it
(there is no SKILL.md-frontmatter fallback), so without it the candidate
shows blank in Skills → Pending review and dedup loses its match data:
{"slug": "<slug>", "name": "auto/<slug>", "source": "crystallize", "created_at": "<ISO>", "description": "...", "triggers": "...", "has_scripts": <bool>, "scripts": [...]}.
Only scripts/ is conditional: if you generated a script, put it under
scripts/<name>.py in that folder, set "has_scripts": true, and list it in
scripts; for a prose-only candidate use "has_scripts": false, "scripts": [].
(b) Live — ONLY on an explicit "create a live skill" / "create an active
skill". The user must actually say "live" or "active" (or confirm it when
asked) — never take this path by inference. Write directly to a top-level
live directory <skills-dir>/<slug>/SKILL.md — no auto/ prefix, no
.meta.json, no pending stage — using this frontmatter:
---
name: <slug>
description: <=150 chars, starts with a verb
triggers: <3-8 comma-separated keywords/phrases>
source: crystallize
---
# <slug>
## When to use
...
## Steps
...
## Gotchas
...
Do not overwrite an existing skill: if <skills-dir>/<slug>/ already
exists (a live or builtin skill), pick a different slug or ask the user —
the live path has no collision guard, so writing blindly clobbers it. Put
any script under scripts/<name>.py and, since no approval step runs for
you, mark it executable yourself — on POSIX, chmod +x; skip that on
Windows, where the executable bit is a no-op.
In BOTH cases: do not include absolute paths, credentials, tokens, or
user PII in the body or the script.