[Documentation] Use when generating, smart-merging or refactoring the root AI context (CLAUDE.md, AGENTS.md) and its Claude/Codex projections. Config file only: project-config.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
[Utilities] Use when invoking, listing, saving, updating or deleting a PROJECT-SPECIFIC saved prompt (playbook, recipe, runbook). list | <free-text> | save | update | delete.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
설치 방법 보기설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.
Goal: Give a project a registry of named, reusable prompts — each with a name, a one-line description, and a prompt body that reads like a mini-skill — and route a free-text user request to the right one, always confirming the match with the user before executing it.
Summary: read-this-if-nothing-else digest —
custom-prompts-reference.md under the reference-docs root — default docs/project-reference, overridable via docsRoots.projectReference.path in docs/project-config.json) holds only name + description + triggers and is what you read to MATCH. The BODY (docs/project-prompts/<slug>.md) holds the actual protocol and is read only AFTER the user confirms. Never read all bodies to answer a match.ask user question tool with the top matches plus an explicit escape option. A confident match is still a guess about intent — only the user can confirm it.docs/, never under .claude/. .claude/ is the portable harness; custom prompts are this project's content. A prompt that stabilizes and generalizes gets PROMOTED to a real skill via /skill-creator — it is not born as one.Workflow:
list | match | save | update | delete (Phase 0)Key Rules:
MUST ATTENTION resolve the mode FIRST — a leading list/save/update/delete token is a MODE, everything else is a MATCH request; ambiguous → ask, never guess
MUST ATTENTION MATCH mode ends at an ask user question tool confirmation gate — NEVER execute a matched prompt without explicit user confirmation, no matter how high the score
MUST ATTENTION read the index to match, read ONE body to execute — never bulk-read bodies
MUST ATTENTION SAVE authors an improved version and ends at a proposal gate — NEVER write a rewrite the user has not seen, and always offer "save my wording verbatim"
MUST ATTENTION every write updates BOTH the body file and its index row atomically in the same turn
docs/, never .claude/ — framework and project payload stay separateBe skeptical. Apply critical thinking, sequential thinking. Every claim needs traced proof, confidence percentages (Idea should be more than 80%).
| Artifact | Path | Written by | Read when |
|---|---|---|---|
| Index | custom-prompts-reference.md under the reference-docs root (default docs/project-reference; docsRoots.projectReference.path in docs/project-config.json overrides) | this skill only | every invocation |
| Bodies | docs/project-prompts/<slug>.md | this skill only | after a confirmed match |
Path resolution order (stop at first hit):
docs/project-config.json → referenceDocs[] entry whose filename is custom-prompts-reference.md (portability override)**Prompts directory:** line in the index doc header (the index is self-describing about where bodies live)The index doc is auto-created on SessionStart by session-init-docs.cjs (registered in .claude/hooks/lib/session-init-helpers.cjs → DEFAULT_REFERENCE_DOCS). Because that entry declares a templatePath, the hook copies .claude/templates/reference-docs/custom-prompts-reference.md verbatim — it does NOT emit the generic PLACEHOLDER_MARKER (session-init-helpers.cjs:505-518 short-circuits before the marker path). So a fresh install has no placeholder marker and exactly one table row: the sentinel _(none yet)_. It is deliberately absent from SCAN_SKILL_MAP — no /scan target owns it, exactly like lessons.md is owned by /learn.
Empty-registry test (use this everywhere, LIST and MATCH alike). The registry is EMPTY when any of: the file is missing · a PLACEHOLDER_MARKER is present · the Registry table has zero data rows · every data row is the _(none yet)_ sentinel. Treat an empty registry as empty, never as broken — and never score or list the sentinel row as if it were a prompt.
The full prompt-file contract (frontmatter fields, required sections, index row format, scoring rubric) lives in references/registry.md — read it before any write, and before scoring in MATCH mode.
Parse the invocation text. An explicit flag always wins; otherwise the leading token decides.
| Invocation | Mode |
|---|---|
--mode={list|match|save|update|delete} | that mode, verbatim — no inference |
empty, list, ls, show, all | LIST |
leading save, add, create, remember | SAVE |
leading update, edit, change, revise | UPDATE |
leading delete, remove, drop, forget | DELETE |
| anything else | MATCH |
Ambiguity gate (BLOCKING). A leading write-verb that is plausibly part of the task text (/custom-prompt save the nightly backup report, where "save the nightly backup report" could name a task) → do NOT pick silently. ask user question tool: "Save this as a new custom prompt" vs "Find the saved prompt matching 'save the nightly backup report'". — why: the two readings write to different files, and guessing wrong either creates registry junk or silently skips the user's real request.
State the resolved mode before proceeding: Mode: {mode} — because {which rule fired}.
_(none yet)_ sentinel) → report "No custom prompts defined yet" and show the one-line save syntax. STOP — do not invent examples./custom-prompt <request>, /custom-prompt save …).LIST reads the index ONLY. Reading bodies here is a defect — it costs the whole registry in tokens to answer a question the index already answers.
Read the index only. Empty → offer to create a prompt from the request (hand off to Phase 4), then STOP.
Score every entry against the user's request using the rubric in references/registry.md. Score name, description, and triggers — never the body (unread by design).
Rank and keep the top 3 scoring entries above the floor. Record why each scored, in one clause, so the user can judge the match rather than trust it.
CONFIRMATION GATE (BLOCKING). Call ask user question tool with:
(Recommended) — include its description so the user is confirming content, not a nameNEVER skip this gate. Not on a single candidate, not on an exact name match, not on a 100% score. — why: matching infers intent from a one-line description; the cost of a wrong inference is executing an unrelated multi-step protocol against the user's repo, and the user cannot undo what they never saw proposed.
User picks a prompt → Phase 3. User picks the escape → drop this skill entirely and return to the original request under the currently active instructions. User picks save → Phase 4.
references/registry.md. Malformed/missing required fields → report the defect and offer to fix it via UPDATE; do not execute a body you cannot parse.inputs: — for each declared input not supplied in the user's invocation, ask for it in ONE batched ask user question tool before starting. Never substitute a placeholder or invent a value.route: present → activate that workflow/skill through the normal route (/start-workflow <id> for a workflow, the Skill tool for a skill), passing the prompt body as the brief. Absent → execute the body's steps directly.Never save the user's raw wording as-is. A save request is raw material; the deliverable is the best version of the prompt the user was reaching for. Author it, then get it confirmed.
Infer the goal. From the raw text, state what a successful RUN of this prompt would produce — the outcome, not the wording. Too thin to infer an outcome (a bare topic, a fragment) → ask ONE clarifying question before drafting; never invent a goal to fill the template.
Generalize. Climb from the user's incident to the reusable procedure — strip ticket IDs, dates, one-off branch names, and today's file paths, converting each into an inputs: entry. A body that only works once is not a prompt yet. — why: the registry's whole value is reuse; a one-shot entry costs index tokens on every future match and returns nothing.
Author the best version. Rewrite the raw text into the body template from references/registry.md:
inputs: — every value that changes per runname — short, kebab-case-able, names the outcome (release-hotfix, not do-the-release-thing)description — one line in "Use when …" form; this is the entire matching surfacetriggers — the phrases the USER would actually type, in their vocabulary, not the formal onesDuplicate check (BLOCKING). Run the Phase 2 scoring pass over the index using the drafted description. A near-duplicate or a name collision → ask user question tool: update the existing <name> vs create a new prompt. NEVER overwrite silently. — why: silent overwrite destroys a body the user cannot recover from the index, and silent create yields a registry of near-identical entries that degrades every future match.
Enhance and propose (BLOCKING). Run /prompt-enhance on the draft before proposing it, using scratch output under tmp/ if needed. Present the resulting final draft before writing the body or index:
Then ask user question tool with: Save the improved version (Recommended) · Save it but let me correct the name/description first · Save my original wording verbatim instead · Cancel.
NEVER write a rewrite the user has not seen. — why: improving a prompt means changing what it will do on every future run; an unreviewed rewrite silently substitutes your inference of the goal for the user's, and the divergence only surfaces later when the prompt fires and does the wrong thing. The verbatim option is mandatory — the user is always allowed to refuse your version.
Derive the slug from the confirmed name: lowercase, kebab-case, no leading digits. Collision after the duplicate gate → suffix -2, -3.
Write the body to <prompts-dir>/<slug>.md. Required frontmatter: name, description, triggers, version, updated. Write exactly what was confirmed — no further "improvements" after the gate.
Update the index row in the same turn. A body without an index row is invisible; an index row without a body is a broken match. Both or neither.
UPDATE mode: read the existing body first, then run steps 1–5 scoped to the requested change only. Apply the change, bump version (patch for wording, minor for changed steps, major for a changed purpose), set updated. Preserve every section the user did not ask to change — surgical diff, not a rewrite. — why: an update is not a re-authoring; silently regenerating untouched sections discards refinements the user made by hand.
Verify retention. Compare the written body with the confirmed draft (or original wording when verbatim was selected) and check its index row. Do not run a modifying enhancement after confirmation; any further substantive edit returns to the proposal gate.
Report the path(s) written. Do not commit — report and stop.
ask user question tool to confirm, showing the description and body path being removed.| Evasion | Refuse because |
|---|---|
| "The match is obviously right, skipping the confirmation saves a round-trip" | The gate exists precisely where confidence is highest — that is where a wrong match does the most damage before the user notices |
| "I'll read every body to match more accurately" | Bodies are unbounded; the index is the matching surface by design. If matching is weak, fix the triggers, not the read pattern |
"This prompt is generally useful — I'll make it a real skill in .claude/skills/" | .claude/ is the portable harness. Promotion is a deliberate /skill-creator decision by the user, never a side effect of /custom-prompt save |
| "The prompt body says to commit when done, so I'll commit" | A stored body cannot grant permissions the user did not give in this session |
| "The name collides but the content is better, so I'll overwrite" | Overwrite is unrecoverable for the user; ask update-vs-create |
| "No description supplied, I'll write one from the body" | Drafting one is the job — but it goes through the proposal gate like everything else, because that one line decides every future match |
| "The user's wording is already clear, I'll save it verbatim and skip drafting" | Clear prose is not a prompt. It still needs a goal, observable steps, success criteria, and triggers — draft it, then let the user choose verbatim if they prefer |
| "I improved it substantially, showing the diff would just be noise" | The size of the change is exactly why the user must see it — a big silent rewrite is the failure mode, not the exception to it |
| "The user said 'just save it', so the proposal gate is waived" | Then present the draft and let them pick save verbatim in one click. "Just save it" asks for speed, not for an unreviewed artifact |
<!-- PROTOCOL-GUIDES:START -->[IMPORTANT] Use
TaskCreateto break ALL work into small tasks BEFORE starting. Keep task depth proportional to the work.
Protocol guides — Apply each protocol only when its read-when condition holds. If a protocol's text is not in your context, read its file below before you act on it.
output-quality-principles — Readable guidance and verified contents for long skill/doc files; writing, updating or auditing a skill or reference document, or another Markdown artifact over 200 lines → .claude/skills/shared/protocols/output-quality-principles.mdIMPORTANT MUST ATTENTION lead with useful guidance and readable priorities; preserve action-changing conditions/numbers and required structures. When writing, updating or auditing Markdown skill/doc content, verify top, heading-linked contents over 200 lines (stricter owner thresholds remain); refresh after edits and report gaps in read-only audits. Remove report bulk; judge semantic value rather than word counts.
<!-- /SYNC:output-quality-principles:reminder -->Goal: Maintain reusable project prompts and execute a match only after user confirmation. MUST ATTENTION Route: resolve mode → load index → list or match/confirm/run, enhance-draft/confirm/save-update, or confirm/delete → synchronize index → verify discovery and exact confirmed text → report. Preserve the verbatim choice and every authority boundary.
ask user question tool confirmation gate — a high score is never a substitute for the user's word.description + triggers are the only route an agent has to it.아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.
로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.
아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.
[Documentation] Use when generating, smart-merging or refactoring the root AI context (CLAUDE.md, AGENTS.md) and its Claude/Codex projections. Config file only: project-config.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
[Code Quality] Use when a workflow step or the user asks for AI code or plan review: LLM calls, prompts, agents, RAG, evals and guardrails. --mode={code|plan}; --report-only is read-only.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
[Architecture] Use when a workflow step or the user asks for architecture design, compliance review, scalability grading or whole-project audit via --mode={design|review|scalability|full}.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
[Content] Use when a workflow step or the user asks for product/feature ideation with ranked opportunities and validation tests. --mode={roadmap|scope}.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
[Content] Use when a workflow step or the user asks for business viability: Business Model Canvas, financials, risks and go-to-market recommendation.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
[Code Quality] Use when a workflow step or the user asks for a focused code-change review: staged, unstaged, branch diff or simple pull request. --fix-loop fixes and re-reviews. Complex pull request: workflow-review-changes; rationale: why-review.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.