Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "ck",
"description": "Code Katz personas and workflows for Claude Code: the product-definition pipeline (/ck:opportunity, market-research, brief, prd, team, roadmap, architecture, brand-guide, design), /ck:panel (three lenses on three models), /ck:plan and /ck:start (a staged plan, then one named session per stage), /ck:do (one small task, quick and in the chat), /ck:next, /ck:claude-md (a project CLAUDE.md from ck's template), the memory gate (a proposal and your approval before any memory is saved), and the full persona roster, a complete cross-domain team, as ck:<name> subagents and /ck:<name> switch commands.",
"version": "0.1.18",
"description": "Code Katz personas and workflows for Claude Code: the product-definition pipeline (/ck:opportunity, market-research, brief, prd, team, roadmap, architecture, brand-guide, design), /ck:panel (three lenses on three models), /ck:plan and /ck:start (a staged plan, then one named session per stage), /ck:do (one small task, quick and in the chat), /ck:next, /ck:claude-md (a project CLAUDE.md from ck's template), /ck:cost (what a session cost, by lane and kind of token, also posted to its pull request at merge), the memory gate (a proposal and your approval before any memory is saved), and the full persona roster, a complete cross-domain team, as ck:<name> subagents and /ck:<name> switch commands.",
"version": "0.1.19",
"author": { "name": "Code Katz" }
}
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ Phase one, first release in progress. What runs today:
| `/ck:start [stage]` | Opens the plan's sessions and keeps its board. For a stage it offers a card that starts a session for that one job, named from the row, such as `[A31-P2-S1] [Akira Fable] Make the creature tables`; with nothing after it, it updates the State column from the sessions and their pull requests and offers every row that could start now. With `fix <stage> <what is wrong>` it offers a card for a session that fixes one fault in a stage that is done, named such as `[A31-P1-S5 fix] [Akira Fable] Mend the scan's natural 1`; the stage stays done. Every new session checks its own model before it works. You click each card | Built; not yet run on a real project |
| `/ck:do <task>` | The quick path, all in the chat: a plan of a few lines (who does what), you say go, the right personas work in the background on their own tiers, a mockup comes back as a link when you ask for one first, and a build waits on its own branch until you say merge. No documents and no review pages | Built; tried in d20mob on 2026-10-27 |
| `/ck:claude-md` | Writes or updates the "How we work" section of this project's `CLAUDE.md` from ck's template (`templates/how-we-work/`), tailored to the project: its lanes, main folder, records and secrets filled in, a rule that does not fit changed or left out. It sorts the project's memory into keep, retire, or move. You review the section on a page you can comment on; it is written on a branch with a draft pull request only when you approve. The rest of `CLAUDE.md` is left as it is, and nothing runs unless you type the command | Built; not yet run on a real project |
| `/ck:cost [history \| <session id>]` | What this session has cost so far: a table with a row per lane (the main session, each persona, Claude Code's own background calls) and a column per kind of token (input, output, cache write, cache read), each cell in tokens and dollars, priced from Anthropic's pricing page and checked against Claude Code's own figure. Once the session has a pull request, a line after each answer shows the cost so far; at merge, a hook posts the table to the pull request and logs it, and `history` lists the logged merges | Built; tried on d20mob sessions |
| The memory gate | Not a command: it runs on its own. Before a session saves anything to memory, it shows you the text, whether it belongs in memory or in the project's `CLAUDE.md` and why, and any memory or `CLAUDE.md` line that already says it or says the opposite. You pick save to memory, add to `CLAUDE.md` (written at once on a branch with a draft pull request), or don't save. A hook makes Claude Code ask you before every write to a memory folder, in auto mode too | Built; not yet run on a real project |
| `/ck:panel <question>` | River, Toni, and Kai argue one question on three different models; a memo shows where they disagree | Built |
| `/ck:prd [--panel]` | River drafts `docs/PRD.md` from the brief, a checker validates, River adds a premortem; with `--panel`, three specialists on three models challenge it first and River rewrites; you review on a page you can comment on | Built; drilled 2026-10-05 on a real project |
Expand Down
21 changes: 18 additions & 3 deletions ROADMAP.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# ck: Product Roadmap

> Maintained by [claude-roadmap-skill](https://github.com/code-katz/claude-roadmap-skill). Last updated: 2026-10-27.
> Maintained by [claude-roadmap-skill](https://github.com/code-katz/claude-roadmap-skill). Last updated: 2026-10-28.

---

Expand Down Expand Up @@ -47,6 +47,7 @@
| 0.1.16 | 2026-10-27 | A shorter `/ck:start`; a bar in a code span stays in its table cell | Tag `v0.1.16` |
| 0.1.17 | 2026-10-27 | `/ck:start` puts up chips again | Tag `v0.1.17`; stable and ck-next |
| 0.1.18 | 2026-10-27 | A shorter `/ck:do` with no cost guess; its git steps in `scripts/do.sh` | Tag `v0.1.18`; ck-next |
| 0.1.19 | 2026-10-28 | `/ck:cost`: a session's tokens and dollars by lane and kind, a cost line once there is a pull request, the table posted at merge | Tag `v0.1.19`; ck-next |

---

Expand Down Expand Up @@ -86,7 +87,7 @@ Dropped with ck2: its 0.2.0 release plan, which would have replaced ck in the `c
|---|---|---|---|
| 1 | **Try the memory gate in d20mob** | It is released and on stable, but not yet tried by hand | A save shows the proposal ending "Reply 1, 2 or 3", then the approval prompt |
| 2 | **0.1.18: `/ck:do`** | It read 2,746 words, plus the 598-word roster, every time it was typed; Will chose to shorten it, not remove it (2026-10-27) | The decision made, and the release on ck-next |
| 3 | **0.1.19: a small cost script** | Shows what work costs by session, persona and model, so a release's saving can be measured | `/ck:cost` prints d20mob's last 7 days |
| 3 | **0.1.19: a small cost script** | Shows what work costs by session, persona and model, so a release's saving can be measured | Built in 0.1.19; done when a few merged pull requests carry the table and `/ck:cost history` compares them |
| 4 | **Lanes: the model follows the task, not the persona** | A stage runs on its owner's tier, so Akira writes on Fable whether the job is a design call or a small edit, and each d20mob plan row needs a ruling to say otherwise. The V2 proposal (2026-10-13) designed lanes and ck2 built them (ck2 features, row 4); they are rebuilt from scratch | A plan's Who column names no model; in d20mob a stage runs its scout, builder and checker on the models one config file gives each lane, and its author on a model chosen for the job, with no per-row ruling |

### Tier 2: High Value, Plan for Next Sprint
Expand All @@ -108,7 +109,7 @@ Dropped with ck2: its 0.2.0 release plan, which would have replaced ck in the `c

```
Now: try the memory gate in d20mob
Next: 0.1.18 (/ck:do) -> 0.1.19 (cost script) -> ck-next -> test -> stable
Next: 0.1.19 (cost script) on ck-next -> a few merges with the table -> stable
Then: lanes -> ck-next -> a d20mob phase -> stable
Later: the lean review's recommendations
```
Expand Down Expand Up @@ -136,6 +137,20 @@ Later: the lean review's recommendations

## Revision History

## [2026-10-28] 0.1.19: a small cost script

**Change Type:** `add`
**Triggered by:** `planning-session`
**Items Affected:** Releases, Tier 1 item 3, Recommended Sequencing

### What Changed
0.1.19 is added to Releases. `scripts/cost.py` (standard library) reads one session's transcripts, its subagents' and workflow agents' included, and prints "<session name> cost summary": a row per lane (the main session, each subagent by its type, and background, which is what Claude Code's own cost record counts beyond the transcripts) and a column per kind of token, each cell in tokens and dollars. Prices are fetched from Anthropic's pricing page at most once a day and saved in `~/.cache/ck/pricing.md`; a model the page does not list is priced as ?, never $0. Each request is priced on its own, with 5-minute and 1-hour cache writes at their own rates. The total is checked against Claude Code's own figure, and a line says when the two disagree. `/ck:cost` shows the table. Two hooks run the script with no model involved: after each answer, once the session has a pull request, one line with the cost so far; after `gh pr merge`, the table as a comment on the pull request and a line in `~/.claude/ck-cost.jsonl`, which `/ck:cost history` lists. On seven real sessions ck's total was within a few cents of Claude Code's, or the gap was explained.

### Why
To tell whether a release such as the shorter `/ck:start` saved anything, and where the next saving is. Will chose live prices over a typed-in table, since a table goes stale: the pricing page already prices Sonnet 5.5 cache reads at $0.10 per million where Claude Code bills $0.20. He chose the table on the pull request at merge plus a line after each answer, since a session's end has no moment where the chat can show anything, and a table kept in the repository would make parallel sessions conflict.

---

## [2026-10-27] 0.1.18: a shorter /ck:do

**Change Type:** `add`
Expand Down
17 changes: 16 additions & 1 deletion hooks/hooks.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"description": "ck: persona usage log, a check that the old team tool is gone, and the memory gate",
"description": "ck: persona usage log, a check that the old team tool is gone, the memory gate, and the session cost (a line after each answer once there is a pull request, and the table on the pull request at merge)",
"hooks": {
"SubagentStart": [
{
Expand All @@ -24,6 +24,21 @@
{ "type": "command", "command": "python3 \"${CLAUDE_PLUGIN_ROOT}/scripts/memory-gate.py\" check" }
]
}
],
"PostToolUse": [
{
"matcher": "^Bash$",
"hooks": [
{ "type": "command", "command": "python3 \"${CLAUDE_PLUGIN_ROOT}/scripts/cost.py\" merge", "timeout": 60 }
]
}
],
"Stop": [
{
"hooks": [
{ "type": "command", "command": "python3 \"${CLAUDE_PLUGIN_ROOT}/scripts/cost.py\" stop", "timeout": 20 }
]
}
]
}
}
Loading