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
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ Phase one, first release in progress. What runs today:
| `/ck:brief <idea>` | Toni runs a short market pass, River writes `docs/brief.md` (from your sentence, or from `docs/opportunity.md`), a checker validates it; you review on a page you can comment on | Built; drilled 2026-10-04 on a real project |
| `/ck:plan [work]` | Quinn lays the work out as a staged plan: phases, then stages, one job and one owner per row, each with its state. With nothing after it, the whole release from the roadmap (`docs/build-plan.md`); with a piece of work after it, that one item (`docs/plan/`). You review it on a page you can comment on | Built; not yet run on a real project |
| `/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 and the rough cost), 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; not yet run on a real task. Its cost line is an estimate |
| `/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 |
| 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 |
Expand Down
4 changes: 2 additions & 2 deletions ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
| 0.1.15 | 2026-10-26 | Current models: Opus 5.5, Sonnet 5.5, Haiku 5.5 | Tag `v0.1.15` |
| 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`; its git steps in `scripts/do.sh` | Tag `v0.1.18`; 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 |

---

Expand Down Expand Up @@ -143,7 +143,7 @@ Later: the lean review's recommendations
**Items Affected:** Releases, Tier 1 item 2

### What Changed
0.1.18 is added to Releases. `/ck:do` reads 1,082 words on every run instead of 3,344: `SKILL.md` drops from 2,746 words to 946, and the 598-word roster file gives way to one line per persona printed by the script. Its rare branches (a task for another command, a mockup, a write or check step, a build in place, a change to a returned step, and a failed or stopped step) move to their own files under `skills/do/`, each read only when its case comes up. The builder's rules move to `skills/do/build.md`, which the builder reads. A new `scripts/do.sh` runs the git steps (look, start, the look back with a ready verdict, merge, pull request, discard), and the tests run it in place of checking the skill's wording. Tier 1 item 2 records the choice to shorten rather than remove.
0.1.18 is added to Releases. `/ck:do` reads 1,055 words on every run instead of 3,344: `SKILL.md` drops from 2,746 words to 919, and the 598-word roster file gives way to one line per persona printed by the script. Its rare branches (a task for another command, a mockup, a write or check step, a build in place, a change to a returned step, and a failed or stopped step) move to their own files under `skills/do/`, each read only when its case comes up. The builder's rules move to `skills/do/build.md`, which the builder reads. A new `scripts/do.sh` runs the git steps (look, start, the look back with a ready verdict, merge, pull request, discard), and the tests run it in place of checking the skill's wording. Tier 1 item 2 records the choice to shorten rather than remove. The plan no longer prints a rough cost: the guess came from a fixed price table nobody had checked, and Claude Code turned its `$2` and `$6` into words of the task ("a build typo to in") when it was tried in d20mob. What work costs is the cost script's job (Tier 1 item 3). The first 0.1.18 tag, with the cost line, was replaced by this one the same day.

### Why
All of `/ck:do` was read every time it was typed. Removing it would have saved almost no tokens, since a typed-only command costs nothing until it is typed. Rules a script can check, such as whether a build is ready to merge and what to do on a merge conflict, now live in tested code instead of the prompt.
Expand Down
3 changes: 1 addition & 2 deletions skills/do/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,10 @@ Name each step with a verb, the work item's id if given, at most six words, and
```
1. Kai draws one mockup. You get a private link and OK it here.
2. Sasha builds it on its own branch. You say merge.
Rough cost: about $4 to $10.
Go?
```

Cost: a mockup or text $2 to $4, a build $2 to $6, a check $1, doubled for a `fable` owner. With a build and `uncommitted` above 0, add "You have uncommitted changes. The build starts from your last commit and will not include them." above "Go?".
With a build and `uncommitted` above 0, add "You have uncommitted changes. The build starts from your last commit and will not include them." above "Go?".

No agent runs before "go". "no" ends it, with nothing more. For a change, show the new plan and stop.

Expand Down
5 changes: 4 additions & 1 deletion tests/run.sh
Original file line number Diff line number Diff line change
Expand Up @@ -581,10 +581,13 @@ for n in sorted(set(re.findall(r'`(?:\$\{CLAUDE_PLUGIN_ROOT\}/skills/do/)?([a-z-
script = pathlib.Path('scripts/do.sh').read_text()
for c in sorted(set(re.findall(r'`<do> ([a-z]+)', text))):
if not re.search(rf'^{c}\)', script, re.M): problems.append(f'runs do.sh {c}, which the script does not have')
# Claude Code replaces $0, $1, ... in a typed skill with the words typed after the command.
for p in files:
for m in re.finditer(r'\$[0-9]', p.read_text()): problems.append(f'{p} has {m.group()}, which Claude Code replaces with a word of the task')
for p in problems: print(p)
raise SystemExit(1 if problems else 0)
EOF
then ok "skills/do: typed only; every command, file, and do.sh command it names exists"
then ok "skills/do: typed only; every command, file, and do.sh command it names exists; no dollar sign before a digit"
else while IFS= read -r l; do fail "skills/do: $l"; done < "$TMP/do/static.out"; fi
if grep -q '^| `/ck:do <task>`' README.md; then ok "README.md has a row for /ck:do"; else fail "README.md has no row for /ck:do"; fi

Expand Down