Author, scope, and decompose kitsoki proposals using the templates under docs/proposals/templates/. Use when the user wants to write a new proposal, pick the right template for a change, split a large/raw proposal into focused reviewable pieces, or keep a proposal's Status line / lifecycle honest. Covers the four focused kinds (story, runtime, tui, tracing), the epic-decomposition flow, the shared spine, and the trim-on-ship / delete-when-done lifecycle.
Proposals live in docs/proposals/ and are a small, current queue of
what's being worked toward — not an archive. The templates in
docs/proposals/templates/ give every draft
a consistent, skim-in-two-minutes shape. This skill picks the right one,
fills it well, and splits big changes into reviewable slices.
Read these first — they're the contract, not background:
docs/proposals/README.md — the lifecycle
(Status line, trim-on-ship, delete-when-done) and the current queue.docs/proposals/templates/README.md
— the shared spine, the which-template table, and the decomposition flow.Every focused proposal is: a Status / Kind / Epic header, then
Why / What changes / Impact, then kind-specific design sections, then
Tasks / Open questions / Non-goals. Why/What/Impact is the OpenSpec
core; the rest is existing kitsoki convention. Keep prose tight and
link to code (file:line), existing docs, and the gold-standard
stories instead of restating them.
| The change is mainly about… | Template |
|---|---|
| A new/reworked operator story (rooms, world, prompts, flows) | story.md |
| Engine/runtime behavior (gates, deciders, effects, host calls, world semantics, load invariants) | runtime.md |
| TUI layout, typed-view rendering, slash commands, input | tui.md |
| Tracing events, cassette fidelity, run-status surfaces | tracing.md |
| Something that spans several of the above | epic.md → decompose |
Tie-breaker: choose the template whose design sections you'll actually fill in, and note spillover under Impact. If two kinds each carry real design weight, it's an epic.
This skill covers authoring a proposal by hand (below). kitsoki also
ships the same discipline as a process story you can drive
interactively — the design pipeline in stories/dev-story/ (reachable
from the dogfood instance). Enter it ad-hoc via idea, or as the back half
of the PRD → Design walk (type prd, author a PRD, then continue from
the prd_published room to carry it into the design intake — see the
dev-story README):
kitsoki run .kitsoki/stories/kitsoki-dev/app.yaml # land in main; type `idea` (or `prd`)Naming: the in-story pipeline is the design pipeline (rooms
design/design_search/design_refine/design_draft/ …); the templates (docs/proposals/templates/), thedocs/proposals/output directory, and thisproposal-authoringskill keep their names — the pipeline emits proposal-shaped design docs intodocs/proposals/.
It walks the proposal process from docs/proposals/proposals.md:
001-brief.md (the shared
spine — Why / What changes / Impact + kind) into a per-session
workspace at docs/proposals/.workspace/<slug>/; you edit it in VS
Code, then an oracle.decide judge sanity-checks it (continue /
clarify)..workspace/) and accepted (docs/proposals/*.md) proposals + feature
docs, and steers you to amend an existing one rather than create a
duplicate (proposals.md's core rule).004-references.json).oracle.task that classifies the kind, copies the
matching templates/<kind>.md, and writes 005-proposal.md.docs/proposals/<slug>.md; the
numbered checks stay in the (gitignored) workspace as the record.The interactive flow applies the same spine + template selection this
skill describes — use whichever fits. The design discipline behind it
(deterministic vs. decide vs. task, the validation sandwich, the
working-folder ergonomics) is docs/proposals/process-design.md §§1–5;
the room-by-room mechanics are in stories/dev-story/rooms/design*.yaml,
modelled on the gold-standard stories/prd/.
docs/proposals/{slug}.md. Use a descriptive
kebab-case slug; no need for a -proposal suffix (the folder says so).Why / What changes / Impact. If you can't
write a crisp Why, the proposal isn't ready; ask the user, don't
pad it.{placeholder} and <!-- guidance --> comment as
you go; a finished proposal has neither.stories/bugfix/rooms/…:line. Mimic the closest existing
proposal of the same kind (see the queue in proposals/README.md).Draft v1. Nothing implemented yet.Kind-specific reminders the templates already encode, worth holding:
runtime slice — split it. Lean on
the kitsoki-story-authoring skill for YAML shape.rendering-tests
skill).When a change spans kinds (a story and an engine seam and a TUI surface), it's an epic. Two entry points:
A. Greenfield epic — the user describes something big from scratch:
docs/proposals/{epic-slug}.md from epic.md. Fill the
big-picture Why / What changes / Impact.**Epic:** ../{epic-slug}.md. Push all detail into the child;
the epic keeps only the seams between slices.B. Refactor an existing oversized proposal — a single file already tries to do too much:
Keep the epic's slice table current as children ship — it's the source of truth for "where is this epic."
Per proposals/README.md:
docs/
(docs/stories/, docs/tui/, docs/tracing/, docs/architecture/),
trim the proposal to what's still in design, and update the Status
line to point at where the shipped pieces went.proposals/README.md's "Current proposals" list to match.The standing instruction in CLAUDE.md: complete the implementation,
move content to narrative docs, delete the proposal — don't leave
unfinished work unless told to, and if so, trim the proposal to the
remaining work.
Codex discovers project skills under .agents/skills/ directly. Expose new
skills to Claude Code through the project-local symlinks:
make setupIf you add a new template kind, also: add a row to the which-template
tables in templates/README.md and in this skill, and add a
**Kind:** value to the spine.
1f4abf0
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.