From projects
Refine a thin Kanban card into a full, context-grounded task note in the project's tasks/ folder. Equal parts plan-it and task-it but corpus-agnostic -- it reads the project's MISSION, decisions, and corpus to ground the task, whatever the project is about. Use when the user says "refine task", "refine this card", "flesh out this card", "turn this card into a note", or wants a board card worked up into something executable.
How this skill is triggered — by the user, by Claude, or both
Slash command
/projects:refine-task [project slug and/or card text; omit to be asked][project slug and/or card text; omit to be asked]The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Take a one-line Kanban card and work it up into a full task note in `tasks/` -- the card is the
Take a one-line Kanban card and work it up into a full task note in tasks/ -- the card is the
handle on the board, the note is where the detail lives. This is project-level backlog refinement:
plan-it's context-gathering and decomposition, task-it's observable acceptance criteria, written
for a cold picker-upper in the spirit of update-handoff. Corpus-agnostic -- the MISSION tells
you whether this is code, research, writing, or anything else; never assume a codebase.
The note is the durable state. Read the workspace format contracts before touching anything: NOTE-FORMAT.md, BOARD-FORMAT.md.
CLAUDE.md (scan the vault root for *projects;
never hardcode).$ARGUMENTS, else the only project with recent activity, else
ask. Confirm the workspace directory exists (<projects-dir>/<slug>/).<slug>.kanban.md). Identify the target card:
$ARGUMENTS -> match it.- [ ] Some task) -- no note yet; you'll create one and link it.- [ ] [[Some task]]) -- a stub note exists in tasks/; you'll refine it
in place (update-handoff style: preserve structure, fold in detail).status (Backlog/This Week -> todo,
Doing -> doing, Done -> done).Done when: you have one target card, its column, and its entry state.
Ground the task in the project, not in assumptions. Read what bounds it:
/look-up: code paths, vault notes, URLs, tracker tickets, docs.
Corpus-agnostic -- follow the references that exist, don't invent code where there is none.Done when: you can state, grounded in the workspace, why this task exists and what doing it involves.
Not every card needs a full note. A card is trivial when its outcome is self-evident, it's a single obvious action, and there's nothing to decompose or decide. If so, say:
This card is self-explanatory -- a full note would be busywork. Want a light note (context + done-criteria only), or leave it as a board card?
Otherwise it warrants full refinement -- continue.
Done when: you and the user agree on light vs full refinement (or the card is plainly substantial).
Compose the note per NOTE-FORMAT.md:
Set frontmatter from the template: status from the card's column, project: "[[<slug>.kanban]]".
The note's filename must equal the card title exactly -- the board links to it by name.
If refining an existing stub note, edit in place: preserve its structure and any content already there, fold in the detail, update stale claims. Don't replace it wholesale.
Done when: the note is drafted (in memory) against the format contract.
Present, tersely:
Card:
<card text>(<column>,<entry state>) Note:tasks/<Card Title>.md(create/update in place) Board change:- [ ] <text>->- [ ] [[<Card Title>]](only if not already linked){the drafted note body}
Wait for approval. The user may adjust scope, criteria, or the title. Nothing is written before they OK it -- this is the hard gate.
Done when: the user has approved the note and any board change.
On approval:
<projects-dir>/<slug>/tasks/<Card Title>.md (matching the board's
new-note-folder). Create from _template.md if new; edit in place if it exists.- [ ] <text> -> - [ ] [[<Card Title>]], replicating obsidian-kanban's "New note from card".
Leave every other line, the column structure, and the %% kanban:settings %% block byte-for-byte
intact. This is the one board write this skill makes; if the card is already linked, skip it.Done when: the note exists in tasks/ and the card links to it.
Report:
Refined
<Card Title>->tasks/<Card Title>.md({created | updated}) Card linked on the board. {one-line recap of the criteria count / scope}
Done when: the user has seen what was written and where.
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub xxkeefer/skills --plugin projects