Pastiche write knowledge
Skill retz8/pastiche/dist/claude-code/skills/pastiche-write-knowledge
drawing UI consistently with agents, at the top of Design System + Component Library
npx -y skills add retz8/pastiche --skill pastiche-write-knowledgeAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 4 stars4 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Use when adding or revising a scenario → atom mapping in KNOWLEDGE.md — including when triaging a `knowledge-gap` follow-up from the pastiche skill.
SKILL.md
4.3 KB, as published. Nobody here has run it
Pastiche — write KNOWLEDGE
Inserts one scenario → atom(s) mapping into pastiche/KNOWLEDGE.md per invocation. See KNOWLEDGE.md's header for the scenario format (prose framing line(s), then one or more → <atom expression> lines; atom names backticked, prop expressions bare).
Multi-→ scenarios are allowed within a single invocation; multiple scenarios are not — re-invoke for each.
Workflow
-
Get the scenario. If a scenario is already on the table (free-form discussion, or a
knowledge-gapfollow-up carrying scenario text + optionally file/line/would-be atom), use it. Otherwise ask the user for one or two lines of scenario phrasing. Readpastiche/FACT.mdin full. -
Identify the section. List the candidate sections:
grep -n '^## ' pastiche/KNOWLEDGE.md | grep -v '## Brand Identity'.-
Brand Identity is out of scope. If the user names
## Brand Identity(or the scenario is brand-prose rather than a scenario→atom mapping), stop and report:Brand Identity is prose, not a scenario mapping. Edit
pastiche/KNOWLEDGE.md's Brand Identity section directly, or run/pastiche-setup --section brand-identityto rewrite it. -
If the user named a section, verify spelling against the list (case-insensitive / near-match; surface the closest match for confirmation if no exact hit). If no plausible match, stop and report the misspelling.
-
If the user did not name a section, propose the best-fit section from the list based on the scenario text and confirm with the user. The user may override.
-
-
Show existing neighbors. Read the chosen section by line range (from
## <Section>to the next##) and display it to the user so they can self-detect duplication or refinement opportunities. If the section's only content is_(empty — run /pastiche-setup --section <name>)_, show that line and note there are no neighbors yet. -
Draft and confirm. Compose the scenario as it will appear in the file: one or more prose framing lines, followed by one or more
→lines. Atom names backticked — FACT entries verbatim; never derived utility forms or untracked utility classes (those belong as WISDOM[GENERAL]rules). Prop expressions bare.If the available context is missing either the framing or the atom expression(s), ask only for the missing piece. Surface candidate atoms from FACT when helpful.
Verify each backticked identifier against FACT before showing the draft. For each identifier
X:- Component lookup:
grep -nE '^X:' pastiche/FACT.md(inside the## ComponentsYAML block; top-level keys only). - Token lookup:
grep -nFx 'X' pastiche/FACT.md(flat lines under## Tokens).
If neither matches: retry case-insensitively and surface the closest match for confirmation. If still no match, stop and report:
Identifier
<X>is not in FACT.md. Either it's misspelled, FACT is stale (run/pastiche-sync), or the atom doesn't exist — in which case rephrase the scenario around an atom that does, or treat it as a knowledge-gap to surface to the DS owner.Show the exact lines as they will appear in the file and ask:
yes / edit. Loop on edits until confirmed. - Component lookup:
-
Insert. Find the chosen section's end (the line before the next
##heading, or end-of-file if it's the last section).- If that range's sole content is
_(empty — run /pastiche-setup --section <name>)_, replace that marker line with the new scenario (preserve a single blank line above and below as the surrounding sections have). - Otherwise append the new scenario at the end of the section (insert before the next
##heading; preserve a single blank line of separation from the prior scenario).
- If that range's sole content is
-
Lint. Shell:
pastiche-lint(on PATH via pluginbin/— do not search), cwd = repo root. Forward stdout; on non-zero exit, also forward stderr. Don't revert; don't abort. Then close with:- exit 0: "Inserted at KNOWLEDGE.md:
<line>. Lint passed. Re-invoke for additional scenarios." - exit non-zero: "Inserted at KNOWLEDGE.md:
<line>. Lint output above — review and remediate. Re-invoke for additional scenarios."
- exit 0: "Inserted at KNOWLEDGE.md: