Bring the declarative half of ~/.claude into modules/claude-code and apply
it when the Module is enabled: the global agent instructions (context =
./CLAUDE.md), the skills tree (skills = ./skills), the attention-bell hook,
and settings.json (model = opus plus the Stop/Notification/SessionStart
hook wiring).
Runtime state (projects, plugins, cache, history, sessions) and the
.credentials.json secret are left out, so login survives rebuilds and no
secret enters the repo. Verified against the built home-files that
~/.claude/{CLAUDE.md,settings.json,skills,hooks/attention-bell.sh} are
generated, the hook executable.
5.6 KiB
name, description, disable-model-invocation
| name | description | disable-model-invocation |
|---|---|---|
| craft-skill | Draft a new skill, or audit and rewrite an existing one, judged against the vocabulary in GLOSSARY.md. | true |
Draft a new skill from scratch, or audit and rewrite an existing one — both judged against one bar: predictability, the agent taking the same process every run. Bold terms are defined in GLOSSARY.md; look them up there for the full meaning.
This skill does not judge general prose quality (clarity, jargon, sentence structure) — only skill-specific structure. A dedicated technical-writing-guide skill will cover the former once it exists; until then, use your own judgment for sentence-level prose.
Which branch
If the request describes a new workflow, capability, or repeated manual process with no existing skill named — Draft a new skill. If it names an existing skill (by name or path) to review, fix, or improve — Audit an existing skill. Both end at Verify and ship.
Draft a new skill
-
Capture intent. If the conversation already contains the workflow (e.g. "turn this into a skill"), extract answers from it first; only ask about what's missing. Ask one question at a time — several at once is bewildering:
- What should this make the agent do — is it a procedure (ordered steps), knowledge it consults (reference), or both? This decides the shape from the start.
- When would you actually reach for it: do you type its name, or should the agent reach for it unprompted? Walk the context load vs cognitive load tradeoff explicitly rather than defaulting — see
Invocationin GLOSSARY.md. - Does it have distinct branches — cases that take different paths? Name each. A linear checklist's items aren't branches by themselves — look for actual alternate paths, not the steps that always all run.
- Is this workflow already documented somewhere in the project (a README, CLAUDE.md, CONTRIBUTING)? If so the draft should point there rather than restate it — see
External ReferenceandSingle Source of Truthin GLOSSARY.md. - For each step, what does done look like — a completion criterion you could check without ambiguity?
- Is there already a word — in your prompts, docs, or codebase — that names this behavior? Reach for that leading word before coining one. Done when every axis above has an answer, or the user says to just draft something and iterate.
-
Write the draft. First decide where it lives: project-local
.claude/skills/if the workflow is tied to this one repo,~/.claude/skills/if it's general-purpose across projects. Then follow the information hierarchy: steps for what the agent does in order, in-file reference for facts every branch needs, and disclose the rest behind a pointer — to a sibling file, or to the existing project docs identified in step 1 rather than restating them. Done when every branch from step 1 has somewhere to live, and no sentence fails the no-op test in isolation (seeNo-Opin GLOSSARY.md).
Audit an existing skill
-
Locate it. Check the current project's
.claude/skills/, then~/.claude/skills/, then~/.claude/skills/library/, in that order; ask if the name is ambiguous across locations. If it's tracked in a project'sskills-lock.yaml, mention that editing it here will make it read as locally-customized toupdate-skills— confirm that's actually intended rather than editing the library source. -
Apply the checklist. Read the skill and its disclosed files, then check each against GLOSSARY.md, quoting the offending line for anything that fails:
- Premature completion — is each completion criterion checkable, and does it demand what the step actually needs?
- Duplication — does any meaning appear in more than one place?
- Sediment — any line that no longer bears on what the skill does?
- Sprawl — could in-file reference be disclosed instead, or a run of steps split by branch?
- No-op — any sentence the model would already do by default? Test sentence by sentence, not line by line — a line can carry one load-bearing sentence and one no-op sentence together.
- Is the invocation choice (model- vs user-invoked) still the right one for how this skill actually gets used? Is there a restated concept that should collapse into a leading word?
-
Rewrite based on the findings. Done when every finding from step 2 is either addressed or explicitly noted as intentionally kept.
Verify and ship
- Propose one realistic test prompt — reflecting the trigger phrasing gathered (draft) or the skill's existing purpose (audit) — and get it confirmed or adjusted before spending a run on it.
- Spawn one subagent: give it the skill's path and the confirmed prompt, have it attempt the task using the skill, and report back what happened — including anywhere it hesitated, misread the skill, or did something unexpected.
- Re-read the draft/rewrite against GLOSSARY.md's failure modes in light of that run, and fix whatever either pass turned up. If the fix is substantial, repeat from step 1; otherwise it's done.
- Stage the specific changed or created paths — one path per file, never a wildcard — with the host project's own staging convention: plain
git add <path>normally, or e.g.dot add <path>in this dotfiles setup (wrap asfish -c "dot add <path>"if the invoking shell isn't fish —dotis a fish function, not a binary on$PATH). Do not commit; that's left to the user.
Done when the subagent's run succeeded without confusion on the confirmed prompt, the checklist raised nothing outstanding, and every changed path is staged.