Use when the user wants the current session reviewed for recurring friction, repeated steps, and hard-won gotchas, and high-bar skill proposals drafted into the report for the user to decide.
Install
npx skillscat add platypeeps/sd-ai-command-pack/sd-propose-skills Install via the SkillsCat registry.
sd-propose-skills
Turn what the current session actually taught into reviewable skill proposals, so
a lesson learned the hard way is not lost when the session ends. Do the judgement
and the drafting; the user decides each proposal by reading the report. Nothing is
filed automatically, and nothing is written to a vault at all -- item A's
criterion 28 removed that, because a proposal in somebody's vault is a record
with no reader and no expiry. What survives review becomes a row instead:sd suggest add "<the proposal>" --item <work item> writes one, andsd suggest publish --belongs-to <checkout> --note <id> files it as an sd item
where it can be argued with.
A proposal is expensive to read and cheap to skip, so the bar is high on purpose:
most sessions should yield zero or one, not a list.
When to use
Use at the end of a working session, or when the user asks to capture what a
session taught as reusable skills — phrasings like "review this session for
skills", "propose skills from what we learned", or "what should we build from
this". Use it only for the session in context; it does not read past sessions or
external transcripts.
Do not use it to improve an existing skill (that is editing, not proposing), or
to file tasks. It writes no file anywhere; the report is the whole output.
Arguments
Arguments arrive as free text. Unknown argument names are an error — stop and
identify them before reviewing the session or writing anything.
target=— retired. It named a vault this skill no longer writes to. Passing
it is an error rather than a no-op, so a caller learns the output moved
instead of watching for a file that never appears.profile=— retired withtarget=, and an error for the same reason. It
resolved a destination, and there is no longer one to resolve.context=— the workspace or project label named in the report. Defaults to
the current project or repository name; the user may adjust it.
There is no destination to resolve. The skill drafts its proposals into its
report, always, and the report is where the user reads them.
Workflow
- Review the current session for candidate skills — a step repeated across
turns, the same friction hit more than once, a defect class that recurred, a
workaround discovered mid-task, a precondition or ordering that bit and had to
be re-derived. - Hold every candidate to the strict bar. A candidate qualifies only when all
three hold: it recurred at least twice (or is a clearly recurring pattern); its
repeatable core is mechanical (an enumeration, a check, a comparison, a fixed
procedure) while the judgement is written once in the skill header; and there
is a real cost of getting it wrong, where under-reporting fails silently. Drop
everything else. Zero survivors is a valid, expected result — never invent a
proposal to have something to show. - Give each survivor a kebab-case, filesystem-safe
<skill-name>. Deduplicate
first: skip, and report, any name that is already an installed skill or
already sits incontrib/. - Render each survivor into the report using the sections below. There is no
status field, because there is no note to carry one: the user's decision is
made in the conversation the report is part of. - Report every survivor in full, what was skipped and why, and — when nothing
cleared the bar — say so plainly. Zero is the common answer. - For a survivor the user accepts, write the row:
sd suggest add "<one line>" --item <work-item directory>. That is what makes it outlive the session.
The report section per survivor:
# <skill-name>
**What recurred.** <The specific thing, twice or more, with what it cost.>
**The mechanical core.** <The enumeration, check, comparison or fixed procedure
a skill would carry.>
**The judgement, written once.** <What the skill's header would settle so the
body does not have to re-decide it.>
**Cost of getting it wrong.** <Over-reporting: cheap and visible.
Under-reporting: invisible and the real failure. Name the silent-failure case.>The # <skill-name> is the proposed skill's name, not this skill's.
Safety rules
- Write no file. Not to a vault, not to
contrib/, not todocs/. The
report is the output, andsd suggest addis how the user makes one durable. - Never advance a proposal's state and never file a task. The decision is the
user's, made in the conversation. - Never copy raw session output, secrets, credentials, or file contents into a
proposal. Evidence describes the pattern. - Prefer zero proposals over a weak one. Do not manufacture recurrence, evidence,
or cost to clear the bar. - If the session was shortened or summarized, work from the context that remains
and do not fabricate instances that cannot be cited.
Final report
- Proposals — each
<skill-name>rendered in full, in the shape above; - Skipped candidates — each with its reason (already installed, already in
contrib/, or below the strict bar); - How to keep one — the
sd suggest addline for each proposal, ready to
run; and - Nothing-to-propose — an explicit statement when no candidate cleared the
bar, rather than a padded list.