Repository navigation
Releases: jparkerweb/plan2code
Release list
v2.5.1
What's New 🎉
v2.5.1
✨ Added
- web-console: six new starter templates, each slotted into every role's order. Refactor (Plan, Quick Task) asks what behaviour must not change. Performance problem (Plan, Quick Task) asks for today's number and the target. Dependency upgrade (Quick Task) asks for the known breaking changes. Spike (Pathfinder) is a time-boxed question with an "answered when". Integration (Pathfinder, Plan) covers the other side's auth and limits and what happens when it fails. Data migration (Plan) asks for a rollback plan. Pathfinder now offers 8 templates, Plan 10 and Quick Task 10, 19 in all.
🔧 Changed
- web-console: the starter templates on the fresh-idea card (Pathfinder, Plan, Quick Task) are now Markdown sections. Each one is a
## headingwith its answer on the lines under it, instead ofLabel: [blank]lines run together. You get room to write, and the agent gets clear sections. Brackets mark only the parts you fill in, so the lines already written for you (who reads it, what it should pin down) read as defaults. Bug investigation splits Expected and Actual into their own sections and numbers its steps. Add a test lists its cases. Picking a template now selects its first[blank], so you type straight over it instead of starting at the end of the box. Ids, labels and which skills see the existing templates are unchanged. A new test inscripts/test-web-console.mjspins the shape. - web-console: template content, revised against design-doc, PRD, ADR (MADR) and bug-report guidance. Engineering spec gains Out of scope and asks for the simpler options turned down. Product requirements gains Not doing and asks for evidence and a measure of success. Test strategy leads with what costs most if it breaks. Scoping and rollout asks who sees it first and how it rolls back. Bug investigation gains How often and Error or logs. Small change gains Leave alone, and its Done when asks for a command or check. Add a test names the failure case. Record a decision's Why asks what forced the choice.
🐛 Fixed
- web-console: a "working alone" report no longer hides helpers reported after it (or beside it). A real helper report now removes the marker (
applyPatchinlib.mjs,helperRows()insubagents.js), the standing instruction andconsole.mdsay to postaloneonly when the agent's tools cannot start helpers at all, and Help's Helpers (subagents) topic says the note goes away once a helper shows.
v2.5.0
What's New 🎉
v2.5.0
✨ Added
- web-console: a Subagents switch for the skills that can hand work to helpers (Implement, Implement + review, Quick task, Review, Pathfinder). An icon button after Write a brief, lit while helpers are on, opens a Subagents dialog: Use helpers or Work alone, an editable instruction with Reset to default, and an advisory "at most N at once" (1 to 20). It is off by default and saved per project folder and skill in
~/.plan2code/console/subagents.json(POST /subagents, on Cleanup's keep-list). The button shows only when the skill opts in (public/subagents.js) and the agent's console copy reported support (caps: ["subagents"]on itsopenevent), so an older skill copy never shows a switch it cannot serve. - web-console: the switch reaches the agent as a standing instruction, and only when it changes.
waitexit 0,chatandopencarry asubagentsfield andSubagents: on (revision N)lines last inreply. A higher revision replaces a lower one, "off" goes only to an agent that was told "on", and a resume or dashboard launch with the switch on states it once. The per-session cursor moves only after the print, so a killedwaitrepeats a change rather than losing it. Contract:console.md→ Standing instructions;building.mdpoints at it. - web-console: a Subagents tab before Ask, from the first helper the agent reports through
post(helpers: [{ id, title, ask, state, result? }], merged byid, or one{ id: "alone", alone: true }entry when it has no way to start helpers). One row per helper with its ask, a Running / Done / Failed pill and a one-line result. It clears on a dashboard hop, and helper reports add no session meter points.validate()refuses malformed entries with exit 3 (house rule 8). Help gains a 17th topic, Helpers (subagents).
🔧 Changed
- review: run on its own with nothing named (no argument, no conversation work, not from a build's review button),
plan2code-reviewno longer assumes the branch diff. It does a quick scan (branch changes, uncommitted changes, specs) and asks what to review, each option with its size; on the web console that is the first scope question, achoice. A build's review keeps its already-decided scope. - web-console:
postandopen --filerefuse a patch that sends a doc a lowerversionthan the page already holds (exit 3, naming the doc and both versions; house rule 9). A version going back is almost always a stale or copied payload, which the page would otherwise show quietly under the new run's name.building.mdnow says a later phase in the same session continuesphase,phasefile,reportandreviewfrom the version the page holds instead of restarting at 1. - web-console: the project name in the footer's
<project> · <branch>label now shows in your highlight color, and the browser tab title starts with it (<project> · <title> · #<sid> · Plan2Code), so consoles for different projects are easy to tell apart.
v2.4.2
What's New 🎉
v2.4.2
✨ Added
- web-console: the Questions and Ask tabs show a small spinner left of their name while Plan2Code is on it. Questions (Dashboard on the dashboard) spins from Send until the answers are picked up, the same wait as Sent. Waiting for Plan2Code.; Ask spins while a question the agent picked up has no answer yet, exactly when the conversation's own ring does. Neither turns once the agent goes quiet or offline, so a dead session never reads as a slow one.
- web-console: User Preferences → Cleanup, above Models. Find files to clean up lists, with sizes, what
~/.plan2codedoes not need: sessions untouched for 30 days (never the one serving the page), anything at the top of~/.plan2code/console/butsessions/,looks.json,workspaces.json,console-dirandupdate-check.json, and anything at the top of~/.plan2code/butconsole/,bin/,launcher.jsonandmodels.json. A stray is listed only after an hour untouched (STRAY_GRACE_MS), so a held lock or a temp file mid-rename never is. Delete these removes exactly that list and reports what went and the space freed. The server builds the list (POST /cleanup,cleanupFindings()inlib.mjs), sends no paths to the page, and on delete re-scans and removes only ids still found (removeCleanup()), unlinking symlinks without following them. A console running fromPLAN2CODE_CONSOLE_HOMEnever looks outside that home. Help's User Preferences topic describes it. - web-console: the dashboard shows an UPDATE AVAILABLE · v banner when a newer release is out. The console server finds the newest
vX.Y.Ztag withgit ls-remote --tagswhen it starts (no shell, prompts off, a 10 s limit, never waited on), caches the answer for an hour in~/.plan2code/console/update-check.json, and addsupdateto the state frame only when that release is newer. The banner opens a dialog with both versions, a Releases link and the update command with Copy; × hides it for that session.GET /versionalso returnslatest, and the version in Help links to the Releases page. - launcher:
plan2codeopens with a colored Planny banner and a plain-English intro, then the agent menu with cyan numbers, a(last used)marker on the remembered pick and a green default. With one CLI installed, or a--clipick, it printsOpening with <CLI>…instead. The model menu, the folder prompt and everyplan2code:error get the same styling. Color is used only on a terminal withNO_COLORunset, so piped runs print plain text and no banner. - maintainer: a repo-local
/plan2code-model-updateskill (.claude/skills/, never installed) refreshessrc/launcher/models.jsonfromdevin models listand Claude Code's documented model aliases. It shows a diff, applies only the changes the maintainer approves, checks the file against the launcher's rules, runsnpm testand never commits. - tests:
scripts/test-web-console.mjscovers Cleanup, the update check and the note thread;scripts/test-launcher.mjscovers the banner and color handling.
🔧 Changed
- document:
overview.mdputs the Phase Checklist and Parallel Execution Groups directly under the Summary, ahead of the Tech Stack, Architecture, Risks and Success Criteria, so the phases are found without scrolling. Every script finds these sections by heading, so specs written in the old order keep working. - web-console: while a build runs, the waiting screen's pointer to the tasks list is now clickable. Task and the tab's own name (say Phase 6 tasks) show bold in the highlight color, and either one opens that phase's tasks tab.
- web-console: the session meter counts a build while it runs instead of only once the phase is approved.
console.mjswrites aprogressledger entry whenever an Implement or Implement + Review post raisesheadline.cleared, and the build's row (Implement + Review: 9 tasks built so far) scores one point per 3 tasks done. The phase's finalruntakes that row over in place, so nothing counts twice and the meter never drops. A second phase in the same run starts its own count once its headline is back atcleared: 0. - web-console: the UPDATE AVAILABLE banner and Send to Plan2Code (while enabled) carry a soft glow in the picked highlight color; with reduced motion Send's pulse stops and the glow stays.
- web-console: a request body over the size cap now gets
413 too largefrom every JSON route instead of a connection reset or a400.
🐛 Fixed
- web-console: Implement + Review's built-in review no longer scores twice on the session meter. Its
reviewrun now scores the phase's 1-point review bonus as the review starts (not a standalone Review's 2), and the phase's finalrunleaves that point out. A 17-task phase now ends at 7 points, not 9. The breakdown also stops repeating the unit in "Code review run: review". - web-console: Send no longer stays disabled when an agent posts a question mid-build while still marked
working(seen on Implement + Review, where the question said "I'm carrying on while you decide"). Once an open question has an answer or a note staged, Send unlocks at once with "Still working · it reads this next", instead of waiting out the agent'squietMinutes(up to an hour); the server holds the send until the agent next looks.building.mdnow says a question stops the build: setwaitingin the same post as the question and wait, never keep working with a question open. - web-console: Notes on this showed the agent's replies as empty "Plan2Code" bubbles and dropped the person's own notes once they were picked up. The server now writes every note into the item's
threadas it arrives,postliftsfrom/roleandmd/body/contentinto{ who, text }(and drops an echoed copy of the person's note), and an entry with no text is rejected with exit 3. Older{ from, md }entries still render.console.mdgains a Replying to a note section. - web-console: dropped the
commentslist on docs, whichpostappended and time-stamped but nothing ever displayed. - web-console: a dashboard launch could strand the hand-off when the agent called a skill-invocation tool on the picked skill instead of reading its
SKILL.md(every skill below the dashboard shipsdisable-model-invocation: true).plan2code.mdandconsole.mdnow say to open the next skill's file with a file-read tool. - web-console: the waiting pane pointed Document and other skills with no task list at a tasks tab that never exists there. The pointer now appears only when a build's
phaseor a quick task'staskstab is posted. The nav tab spinner also gets its 7px gap back from the tab's name. - web-console: skipping a question dropped a note already typed for it; the note now goes with the skip as
skip; <note>. Ticking a checklist step after a skip now ends the skip instead of still sendingskip. - web-console: reconnecting cleared every banner, including a warning that arrived while offline; it now clears only the Lost contact banner. An open Overview tab now refreshes during a build.
- web-console: a
409on Home, Stop or Write the brief now marks the page busy the way Send does, and the brief dialog says why it could not go. - web-console: arrowing through a menu question kept dropping keyboard focus to the page body; menu radios now carry stable ids, a
valueand anaria-label.@mentions typed with a capital letter now match, and the attachment-limit banner usesMAX_ATTACHMENTS/CHAT_MAX_ATTACHMENTSinstead of a hard-coded 5.
📚 Documentation
- web console guide: new When an update is out section, Cleanup under the session cleanup notes, and a pointer to
/plan2code-model-updatefor the curated model list.
v2.2.0
What's New 🎉
v2.2.0
✨ Added
-
Committed Agent Skills build — each workflow under
src/now builds toskills/<skill-name>/SKILL.md, with companion references nested underreferences/.npm run build:skillsregenerates the artifact, andnpm testverifies that committed skills have not drifted from their source prompts. -
Project-scoped skill installation — Custom →
Lnow installs Plan2Code directly into the current project through the skills CLI instead of printing manual copy instructions.
🔧 Changed
-
Installation now delegates to the skills CLI — Plan2Code ships one canonical Agent Skill format instead of maintaining separate command, prompt, workflow, and skill outputs for individual tools. The installer builds
skills/, checksnpx --yes skills, removes stale Plan2Code skills, and runsskills addwith an explicit workflow list. Installation now requires Node.js 18+ and network access; installed skills can be updated withnpx skills update -g. -
Legacy installation cleanup is automatic — install and uninstall sweep files written by earlier per-tool installers so old commands cannot shadow the canonical skills. This includes the Gemini CLI files retained exclusively for uninstall compatibility.
-
Default installation is skills-only — main-menu option
Ino longer installsplan2code-loop. The loop remains part ofAand is still available separately through Custom →O. -
One frontmatter contract serves every agent — generated
SKILL.mdfiles always includename,description, anddisable-model-invocation: true. Reference files remain nested under their owning skill, eliminating the old flat-file path rewrite and its column-position constraint.
v2.1.0
What's New 🎉
v2.1.0
✨ Added
-
GitHub Issues backend for Pathfinder —
/plan2code-0-pathfinderno longer assumes local files. Chart Step 1 now asks, HITL and never self-picked, where the map should live: local (the default — files under gitignoredspecs/<idea>/pathfinder/, private and solo) or github (apathfinder:mapissue whose decision questions are its sub-issues, driven by theghCLI). The pick is recorded as the first## Ground rulesbullet, never re-asked and never switched mid-map, and Auto-Discovery resolves either backend — an issue URL or number as the argument routes straight togithub.On
github, the local model maps onto the tracker's own primitives rather than being simulated in issue bodies: a question is a sub-issue (sub_issuesendpoint), blocking is GitHub's native issue dependencies (dependencies/blocked_by, so the frontier renders in GitHub's UI without opening the map), the claim is the assignee,Type:becomes a singlepathfinder:<type>-<mode>label so type and mode cannot drift,Locked: yesbecomespathfinder:locked, and resolution is an## Answercomment followed by a close —completedfor a decision,not plannedfor a question ruled out of scope. Both wiring calls key on the issue's database id, not its#number. The map body therefore carries no question checklist at all: the frontier is a live query, which removes the single largest source of drift in the local backend.Three things stay on local disk whatever the backend: runnable sketches (
specs/<idea>/pathfinder/sketch-NN/), anything secret, and thePLAN-DRAFT-<date>.md—/plan2code-1-plandiscovers its input withls specs/and has no notion of a tracker, so a draft that existed only as an issue would be invisible to the rest of the pipeline.Guardrails carried over from the local backend's assumptions:
githubis only offered after a five-check preflight (ghpresent, authenticated, GitHub remote, issues enabled, push access), and the offer must name the repo's visibility in the same breath, because a map on a public tracker publishes the destination, the rejected alternatives, and the codebase recon. The Step 3 recon is held in-session and published at Step 6, so the Step 4 no-fog off-ramp leaves no litter on a shared tracker. Aghfailure mid-session stops the session rather than falling back to local files, which would fork the map.Depth lives in a seventh reference file,
src/plan2code-0-pathfinder-references/github-issues.md— preflight, label set, the local↔GitHub equivalence table, create-then-wire charting, the frontier query, resolve and out-of-scope flows, reconcile, the trail footer, handoff, and a failure-mode table. Adapted from the GitHub tracker doc behind Matt Pocock'swayfinderskill (MIT).
🔧 Changed
src/plan2code-0-pathfinder.mdrecompressed to absorb the new## Backendsection within the 11,000-character workflow-file limit — duplication between the orchestrator and its reference files was removed (the local layout and marker legend now live only inquestions.md; Form A/B footer detail only intrail.md), and step text tightened. No behaviour was dropped.
v2.0.0
What's New 🎉
v2.0.0
Ports upstream v1.17.0 and v2.0.0 into Plan2Code.
💥 Breaking
-
Gemini CLI is no longer an install target. The
.gemini/commands/*.tomlsurface is removed, along with the build-time machinery it required:generateTomlContent(),writeTomlToDestination(),inlineReferenceContent(), and thedest.type === 'toml'branch insyncPrompts(). Every remaining target resolvesRead references/*.mddirectives at runtime, so reference content no longer needs inlining at build time.Uninstall still cleans up Gemini files. The
.gemini/commandsentry is deliberately retained in the uninstall target list (labelledGemini CLI (legacy — uninstall only)) behind a newuninstallOnlyflag, so.tomlfiles written by v1.x installs can still be removed. Do not add it back toLOCAL_DESTINATIONS/GLOBAL_DESTINATIONS.All other platforms are unaffected — Claude Code (skills and commands), Cursor, Windsurf, Continue, Codeium, GitHub Copilot, VS Code Copilot, Pi, Crush, Amp, Devin, OpenCode, and Zed all install exactly as before.
✨ Added
-
Pathfinder workflow — new
/plan2code-0-pathfindercommand, an optional Step 0 for an idea too big and unclear to plan yet: where you can feel the shape of the work but can't write it down as requirements. Adapted from Matt Pocock'swayfinderskill (MIT), reworked for Plan2Code's localspecs/workflow.Pathfinder names a destination, then charts the way to it as a map of decision questions under
specs/<idea>/pathfinder/—map.mdas the index plus onequestions/NN-<slug>.mdfile per decision. It resolves one question per session (research excepted), and each resolution clears the fog ahead of it, graduating whatever became specifiable into fresh questions. When nothing is left to decide, it writesspecs/<idea>/PLAN-DRAFT-<date>.mdcarrying the status string/plan2code-1-planalready recognizes, so planning resumes at Phase 4 in the same folder with Requirements, System Context, and Scope pre-answered.Grilling is batched — up to three independent probes per turn instead of one probe per round trip, delivered either through the environment's structured question tool or as numbered prose Q blocks, chosen per batch by a detail test. Probes are written in plain English, and any probe you skip is re-asked rather than quietly dropped. It plans, it never builds: four question types —
grill(HITL, the default),research(AFK, resolved by background subagents in parallel),sketch(HITL), andlegwork.Map state uses the house checkbox vocabulary —
[ ]open (the frontier),[/]claimed,[x]resolved,[!]blocked,[-]out of scope.questions/is ground truth andmap.mdis a rebuildable index: every Work session reconciles the two before choosing, which self-heals drift and recovers claims left by a crashed session. Every response ends with a Trail Footer — a one-line path fromSTARTto the⚑destination, a numbered legend, a plain-English confidence line, and exactly one closer chosen by turn type (a turn that asks you something never emits a resume command).Depth lives in six new reference files under
src/plan2code-0-pathfinder-references/(chart,grilling,questions,resolve,handoff,trail), so the orchestrator stays a dispatcher and the skill has no external skill dependencies. -
Community feedback submission —
/plan2code-4-finalizegains STEP 6.5: after archival, assembles a METRICS_JSON payload from the completed run and submits it as acommunity-feedback-labeled GitHub issue onjparkerweb/plan2code, with a tiered fallback (ghCLI issue create → browser-opened prefilled issue → printed URL) for environments withoutgh. Payload schema and submission tiers live in the newplan2code-4-finalize-references/community-feedback-submission.md. Step 5 now asks for explicit submission consent and skips straight to Step 6 when declined. -
Community submission ingestion in plan2code-metrics — new "Fetch community submissions" CLI flow (
community.ts) lists open feedback issues viagh, validates and parses eachMETRICS_JSONpayload (type-only validation; malformed submissions are skipped and logged, not fixed up), imports them into the local run store deduped byrun_id, re-aggregates, and closes each imported issue. Matches an open issue by thecommunity-feedbacklabel OR the[Feedback]title prefix OR theMETRICS_JSONmarker, so browser/print-tier submissions from outside contributors are still picked up; paginates fully (--limit 1000); and closes issues idempotently even on the duplicate path. -
Community runs cohort by Plan2Code version — ingested community runs are keyed into cohorts by their
plan2code_versionrather than by a prompt-file fingerprint, since community submissions carry the installed, platform-transformed prompts and an LLM-generated payload. Runs now carry asource(local/community) tag, andcurrent_cohort_keyprefers local cohorts so ingested feedback never displaces the maintainer's current prompt generation. -
Devin CLI as an AI backend for both
plan2code-metrics(invoke-llm.ts) andplan2code-loop(agents/devin-cli.ts) —devin --print --prompt-file <file> --permission-mode dangerous. Unlike upstream, which replaced GitHub Copilot CLI with Devin, Plan2Code keeps both: Claude Code, GitHub Copilot CLI, and Devin CLI are all selectable. Existing Copilot CLI selections keep working.
🔧 Changed
- README rebuilt around a shorter, task-first structure, with the deep material split into a new
.readme/folder:walkthrough.md,autonomous-loop.md,status-line.md,metrics.md,test-bot.md. - Docs site and README redesigned around an "airmail" postcard theme — a fixed four-sided airmail-chevron page frame, sticky header, and the workflow presented as six posted letters, with Pathfinder and the optional Review step both surfaced. Adds a postage-stamp favicon set (
favicon.svg/.ico/.png/apple-touch-icon.png) and a new README banner; removes three orphaned images (desk.jpg,install-script.jpg,plan2code.jpg). /plan2code-4-finalizearchivespathfinder/with the spec — STEP 6 now namespathfinder/in the move list and no longer describes the cleanup target as "research or scratch files," wording that pointed an agent straight atpathfinder/questions/. The map is the rationale record behind the plan, in the same class asPLAN-CONVERSATION-*.md./plan2code-1b-revise-planno longer deletespathfinder/— its Step 6 cleanup had the same "research or scratch files" wording./plan2code-quick-taskis no longer labelled "Step 0" — pathfinder now owns step 0, and quick-task was never a pipeline step. It registers as a utility (likeinit,review, andhandoff), so its generated description readsPlan2Code Quick Task: Quick Task Mode. Filename, skill name, and command path are unchanged./plan2code-handoffasks where to save — the OS temp directory is now the default, with./handoffs/or any other path available on request. Adds a spec-awareness section: when the session worked insidespecs/<feature>/, the handoff cites the in-progressphase-X.mdand its actual checkbox state rather than relying on conversation memory./plan2code-init-updateStep 7 offloaded to a reference file — the AI Agent File Sync detail moves toplan2code-init-update-references/ai-agent-file-sync.mdwith an inline fallback. TheCLAUDE.mdMANDATORY-FIRST-STEP template is unchanged./plan2code-reviewSession End offloaded to a reference file — next-step routing moves toplan2code-review-references/session-end.mdwith an inline fallback.- Status line: context-bar token count suppressed on token-usage accounts — the bar's
(84k)reads the samecontext_window.total_input_tokensthein/outusage segment already shows on Enterprise/Bedrock/Vertex/PAYG accounts. It now renders only on Pro/Max/Teams (rate-limit) accounts, where no other segment carries an absolute token count. Theitems.contextTokensflag still turns it off entirely. aggregator.tsrefactor — extractedwriteRunFile()(dedup-by-run_idwrite) out ofimportRun()so the community ingestion path can reuse it without a source file path;collector.tsnow exportsextractMetricsJson()for the same reason..agents-docs/AGENTS-code-style.mddocuments a metrics gotcha: when aPLAN-DRAFT-*.mdcarries noMETRICS_JSONcomment,collector.tsscrapes it by regex, and the four confidence-breakdown patterns match a bare dimension word plus a number without requiring a%— so even a table row like| Requirements | 11 |gets ingested as a planning confidence score..agents-docs/AGENTS-architecture.mddocuments the column-0 requirement forRead references/*.mddirectives —install.jsanchors its flat-file path-rewrite regex at^, so an indentedReadline is silently skipped.
🐛 Fixed
- Broken review-command row and column alignment in
QUICK-REFERENCE.md. plan2code-loopbanner misspelled the mascot as "Plany".
v1.16.1
What's New 🎉
v1.16.1
✨ Added
- Status line: git worktree awareness — a session running in a linked git worktree now renders the project segment as
repo ⑂ worktree(e.g.plan2code ⑂ spike) instead of only the worktree's directory name, which previously made the session look like an unrelated project- Repo identity resolved from
git rev-parse --git-common-dir, so it is correct regardless of how the worktree directory was named (bare<name>.gitmain repos included) - A leading repo prefix is stripped from the worktree name (
plan2code-user-auth→user-auth), and the name collapses to a bare⑂when it merely restates the branch already on screen — matched across/ _ . -separators and type prefixes likefeature/, and only when the branch is actually displayed - Toggleable via the new
items.worktreeconfig flag (default on); one extra timeout-boundedgitcall, skipped outside git repos
- Repo identity resolved from
v1.16.0
What's New 🎉
v1.16.0
✨ Added
/plan2code-handoffskill — compacts the current conversation into a self-contained handoff document (written to gitignored./handoffs/<timestamp>-handoff.md) so a fresh session or another agent can resume the work- Always captures a confirmed Next task: infers a candidate from context and requires the user to confirm or fill it in before the file is written
- References plan specs, logs, and files by path rather than copying them; strips secrets; suggests follow-on skills and verification steps
- Repo-safe: checks
git check-ignoreand warns (without silently editing.gitignore) whenhandoffs/isn't ignored in an arbitrary repo
- Repo-local release publisher skill — new
/plan2code-publishmaintainer skill in.claude/skills/cuts a GitHub Release from the topCHANGELOG.mdentry onceCHANGELOG.md,version.json, andpackage.jsonagree and the version is ahead of the latest published release. Dev tooling only — deliberately excluded frominstall.js, never installed to~/.claude/skills/.
🐛 Fixed
- Review workflow next-step suggestion made context-aware —
/plan2code-reviewSession End now reconciles three signals: session context (what preceded the review in the conversation), the user's review intent, and on-disk spec state gathered shell-agnostically — a file-search tool's empty result is never treated as proof that no specs exist. Suggestions render only at actual session end, cite their evidence and its source, and conflicting signals ask one targeted question instead of guessing.
v1.15.4
What's New 🎉
v1.15.4
✨ Added
- Status line: reasoning effort + context token count — model segment now appends the current reasoning effort level (e.g.
Sonnet 5 | High, hidden when the model doesn't support an effort parameter); context bar now shows raw input tokens used alongside the percentage (e.g.42% (84k)), independently toggleable via newitems.effort/items.contextTokensconfig flags
v1.8.1
What's New 🎉
v1.8.1
✨ Added
- User feedback collection — Optional 1-10 rating with reason, what went well, and what went poorly
- Finalize prompt (Step 5) asks for optional feedback before archival, writes structured table to
overview.md - Collector parses
## User Feedbacktable fromoverview.mdintoRunMetrics.user_feedback - Aggregator computes
avg_user_ratingandfeedback_countper cohort - CLI offers interactive feedback collection if none found during metrics collection
- Analysis and improvement prompts reference
avg_user_ratingmetric target (≥ 7.0) UserFeedbacktype exported from public API
- Finalize prompt (Step 5) asks for optional feedback before archival, writes structured table to
- Pipe-safe feedback parsing — User text containing
|characters is escaped on write and correctly unescaped on parse using negative lookbehind regex
🐛 Fixed
- Duplicate run files — Interactive feedback no longer creates a second run JSON; the original is deleted before re-collecting
- Finalize step ordering — Feedback collection moved to Step 5 (before archival at Step 6), ensuring
overview.mdis written while still in the active spec directory
v1.8.0
✨ Added
- plan2code-metrics — New recursive self-improvement toolchain for plan2code contributors (
plan2code-metrics/)- Fully interactive menu-driven CLI — no flags, all inputs collected via prompts
- Collect metrics from completed project specs (plan, document, implement, finalize steps)
- Import run data from other projects for cross-project aggregation
- View metrics status with health indicators and generation-over-generation deltas
- Analyze weak steps via AI-powered diagnosis (Claude Code or GitHub Copilot CLI)
- Generate surgical improvement proposals with automatic validation (char count limits, edit verification)
- Review and apply proposals with interactive diff review
- Cohort-based aggregation groups runs by prompt generation (SHA fingerprint of prompt files)
- Supports both Claude Code and GitHub Copilot CLI as AI backends
- Standalone TypeScript package with tsup build (ESM), installed via
npm link
🔧 Changed
- plan2code-4--finalize.md — Added "Metrics Capture (Contributors)" note in Step 6 directing contributors to run
plan2code-metricsafter finalization - plan2code-loop index.ts — Added dim hint "run plan2code-metrics" after session summary