From Skill Kit
Interview the author and write a goal.md sidecar that anchors a new skill from manual practice through harness-clean SKILL.md
How this command is triggered — by the user, by Claude, or both
Slash command
/skill-kit:goal-new-skillThe summary Claude sees in its command listing — used to decide when to auto-load this command
# Purpose The user invoked `/goal-new-skill $ARGUMENTS`. They want to anchor a not-yet-written skill with a measurable `/goal` condition so the work toward "skill exists and passes the harness" is driven by a verifiable end state, not vibes. This command **does not write SKILL.md or tests.md**. Those come from manual practice runs — the skill-kit workflow codifies skills from real, hand-executed runs, never from imagination. This command writes a single artifact — `.claude/skills/<name>/goal.md` — and prints the `/goal` line for the user to invoke separately. ## Steps 1. **Parse the arg...
The user invoked /goal-new-skill $ARGUMENTS. They want to anchor a not-yet-written skill with a measurable /goal condition so the work toward "skill exists and passes the harness" is driven by a verifiable end state, not vibes.
This command does not write SKILL.md or tests.md. Those come from manual practice runs — the skill-kit workflow codifies skills from real, hand-executed runs, never from imagination. This command writes a single artifact — .claude/skills/<name>/goal.md — and prints the /goal line for the user to invoke separately.
Parse the argument.
$ARGUMENTS should be a kebab-case skill name in gerund form (e.g. summarizing-prs, triaging-issues).processing-pdfs.)"^[a-z0-9-]+$, push back and ask for a fix.-ing, point that out (gerund-form names are the skill-kit convention; the check-skill harness warns otherwise) but accept the user's call.<name> to the validated value for the rest of this run.Check for existing artifacts.
.claude/skills/<name>/goal.md already exists, read it and ask whether to overwrite, edit, or abort..claude/skills/<name>/SKILL.md already exists, the skill is already authored — point that out and suggest /skill-kit:goal-improve-skill instead.Interview, one question per turn, in plain chat. Wait for each answer before asking the next. Do NOT use AskUserQuestion — the answers are open-ended.
Synthesize the /goal condition. Build one string ≤4000 chars with the four parts the official /goal docs reward — end state, stated check, constraints, turn bound. Use this exact template, substituting answers:
I have performed <task> manually on three distinct inputs: <input-1>, <input-2>, <input-3>. Each run is captured in .claude/skills/<name>/tests.md as a separate scenario with the actual input, the actual output, and a `Last verified: <today>` line at the top. .claude/skills/<name>/SKILL.md exists with frontmatter that has a third-person `description` covering both what the skill does and when to use it, and the body documents the workflow I just exercised. `check-skill .claude/skills/<name>` exits 0 with zero FAILs. The skill must NOT <anti-goals from Q4>. Or stop after 30 turns.
Today's date comes from the currentDate system reminder.
Write .claude/skills/<name>/goal.md with the structure below. Create .claude/skills/<name>/ if it doesn't exist (mkdir -p).
Print the launch instructions to the user — see Output section.
# Goal — <name>
**Created:** <today's date>
**Workflow:** new-skill
**Target:** .claude/skills/<name>/
## End state
<one-sentence restatement of Q1 + Q2 — what "done" looks like>
## How Claude proves it
- `check-skill .claude/skills/<name>` exits 0
- `.claude/skills/<name>/tests.md` has ≥3 scenarios with a `Last verified` date, each capturing one practice run
- `.claude/skills/<name>/SKILL.md` has a third-person `description` field that includes both *what* and *when*
## Constraints
- Every kept iteration of SKILL.md must pass the harness with zero FAILs
- Practice runs must use the three inputs below, not invented ones
- tests.md scenarios must include actual outputs from real runs (no fabricated examples)
## Practice inputs
1. <input-1>
2. <input-2>
3. <input-3>
## Out of scope
- <anti-goal 1>
- <anti-goal 2>
## Synthesized /goal condition
/goal
## Interview transcript
- **Task:** <Q1 answer>
- **Verifiable success:** <Q2 answer>
- **Practice inputs:** <Q3 answer>
- **Out of scope:** <Q4 answer>
After writing the file, print verbatim:
Goal drafted: .claude/skills/<name>/goal.md
Run this in chat to start working toward it:
/goal <synthesized condition>
The first practice run begins as soon as you invoke /goal. Edit goal.md and re-run /goal-new-skill if you want to refine first.
/goal yourself — slash commands cannot call other slash commands. Print the line so the user runs it./goal is not part of this plugin or stock Claude Code — it comes from the user's own environment. If their environment has no /goal command, say so in the printed output and tell them the written goal.md serves as the acceptance checklist to work against manually.npx claudepluginhub mjenkinsx9/mjenkins-toolbox --plugin skill-kit