agent-kit-startup/agent-kit
Mission Kit core skills: HITL gates, plan backlog and onboarding, QA, external plan review. The full kit (slash commands, plans, HANDOFF, staging-then-prod git flow) installs with npx @dadado/agent-kit-cli@latest install.
Changelog - Mission Kit
All notable changes to this project are documented in this file.
The format follows Keep a Changelog, and this project adheres to Semantic Versioning. PATCH is for bug fixes and post-tag republish-class fixes. A hold (same SemVer, no new tag) is allowed when the existing npm tarball does not need to change. Shipping only x.y.0 is not a second cadence.
Public vs private: the private factory tree may keep a full developer log. Public surfaces (public GitHub CHANGELOG.md, GitHub Release notes, landing product notes) publish only consumer and contributor product notes. Fence factory-only bullets (CI/CD internals, landing staging/promote, Hostinger/deploy plumbing, internal ADR chatter, dogfood-only mechanics) in <!-- changelog-private --> ... <!-- /changelog-private --> blocks, or under a ### Internal heading. Public-sync strips those fences. Preview: node scripts/public-changelog.mjs. Landing stamp: node scripts/public-changelog.mjs --version X.Y.Z --blurb then pnpm landing:update-release -- --version X.Y.Z --notes "<blurb>". Never pass CHANGELOG.md as --notes-file.
Unreleased
[6.10.1] - 2026-10-24
Fixed
- Shell guard:
pr-merge-protected-basenow fails closed on agh pr merge/glab mr mergeit cannot resolve to a literal target. A merge inside afor/whileloop body, afterthen,elseor!, behindxargs, or insidebash -c/sh -cused to produce no target and was allowed, so it could merge intomain; it is now denied whatever the base, with a message asking for a literalgh pr merge <n>at the head of its own segment. A literal merge into an unprotected base (the/git-stagingpath) still works, andALLOW_MAIN_PUSH=1keeps the/git-prodescape. Text that only mentions the command (grep 'gh pr merge') is denied too; a script file that runs a merge stays out of reach of the guard. - Mission Control: with
Plan: none, the terminal Flight Log no longer printsAll clearover open HANDOFF Gaps. The Gaps stay the NOW residual, as in the web dashboard, and thePlan: noneflight boundary still resets Earlier.
[6.10.0] - 2026-10-24
Added
- Mission Control snapshot 1.9.0: a read-only
outcomeLedgerfield, the verified-outcome ledger a game panel (Colony first) renders. Each refresh folds what the kit already records into.cursor/context/outcome-ledger.json(gitignored): completed to-dos and passing test runs earn Logic, passing CI runs (not scheduled ones) andv*tags earn Compute, and a plan closed with every to-do completed and no open review gaps, a clean plan-termination review and a published release are rare finds. Entries are keyed by identity (plan and to-do, run id, tag, review head, testHEAD), so replaying history adds nothing and nothing earned is taken back. Lines of code, commits, tokens and time are never rewarded. The field also carries a flow streak from the mission timers. Thegh run listrows now include the run id. Contract:docs/mission-control-embedding.md. - Mission Control: a Colony section (More menu,
#colony), a single-player game over the outcome ledger. A hex map turns from grey to green as outcomes accrue, and you spend Logic, Compute and Rare on buildings (Sapling Nursery, Atmospheric Purifier, IDE-Core Uplink and more) that finish after a real-time build. What you build stays in the browser (localStorage). Timers are evaluated when the panel refreshes, so nothing runs in the background. A streak of closed to-dos makes builds 25% faster. Ships four small images; the panel also works without them. agent-kit outcome-ledgerprints the ledger totals (--jsonfor the summary), andagent-kit outcome-ledger testruns the repository profile'sstack.testCommandsand records whether they passed in.cursor/context/test-results.json. It never guesses a test command: with none in.cursor/agent-kit.config.jsonit records nothing.agent-kit installadds both files to.gitignore.- Engine artifact: each release now also publishes
engine.json(the engine manifest, the same file as inside the tarball) besideagent-kit-engine-<version>.tar.gz, and lists it inSHA256SUMS. An IDE host such as Colony can read a release's driver protocol before downloading the tarball, to pick the newest engine inside the range it supports.
Changed
- README and
install.mdnow show the Claude Code plugin install line,/plugin install agent-kit --marketplace agent-kit-startup/agent-kit(Claude Code 2.1.275+, with the two-step form for older versions). The plugin carries the core skills only;agent-kit installstill writes the slash commands and project files. - The public repository is now also an Agent Plugins 1.0 package: a root
plugin.jsonand askills/folder with the core skills, so GitHub Copilot (VS Code, Copilot CLI, the Copilot app), Codex and Antigravity can install Mission Kit's skills from the same tree. The Claude Code, Cursor and Codex plugin manifests are unchanged. The package has no hooks, so the HITL guard hooks still come fromagent-kit installor the Cursor and Claude plugins. - Engine artifact signature: once the engine signing key is configured, each release also publishes
SHA256SUMS.minisig, a minisign signature ofSHA256SUMS(verify withminisign -Vm SHA256SUMS -P <public key>). Colony checks it before it installs an engine.
Fixed
agent-kit guard shell(the Cursor and Claude Code shell guard) now also denies a forge API merge,gh apiorglab apiagainst a pull request or merge request merge endpoint, the branch merge endpoint, or a GraphQL merge or auto-merge mutation, whatever the base branch. Before, onlygh pr merge/glab mr mergeintomain,masterorprodwere checked, so the API was a way around the rule.ALLOW_MAIN_PUSH=1still lets an authorized/git-prodthrough.- Mission Control Git e CI/CD: a red or yellow Ship lane row is now marked by its border color instead of a colored bar on its left edge, in line with the no-left-bar rule for Mission Control lists.
[6.9.0] - 2026-10-24
Added
- Mission Control snapshot 1.8.0: a read-only
shipLanefield for the Git e CI/CD section. It lists the release ship lane as rows (release close, staging to main, tag, tag CI jobs, staging sync, npm, and in the factory checkout the public sync PR and public Release Latest), each green, red, pending or unknown with a copy-only next command, plus the open PRs with their base, stacking, mergeable state and failing checks (includingsignature-scan). The forge half is onegh api graphqlcall and one npm registry read, run alongsidegh run listinside the existing snapshot budget and reused for two minutes; withoutgh, auth or network the rows read unknown and the snapshot still renders. Contract:docs/mission-control-embedding.md("Ship lane").
Changed
- Mission Control: the Git and DevOps tabs are now one section, Git e CI/CD, laid out as a bento grid: Ship lane, Promotion flow, Open pull requests, CI/CD pipeline, Deploy activity, Branch graph and Changed files. The Ship lane tile lists the release rows (release close, staging to main, tag, tag CI, staging sync, npm, public sync, public Release Latest) with one copy-only next command each, and needs an engine whose snapshot carries
shipLane(1.8.0); older engines show an empty state.#devopsand#git-cicdstill open the section. The new copy buttons use one delegated listener instead of inline handlers.
Fixed
- Mission Control Flight Log: HANDOFF text in the cards no longer shows raw
**and backticks.**bold**and`code`now render as bold and code, after HTML escaping, and screen readers get the plain text. agent-kit run-plan-all --events ndjsonno longer reports a phantom empty queue (queue_statewithtotal: 0) when the agent rewrites HANDOFF while the driver is reading it. A blank HANDOFF is skipped and a queue change is reported only once two consecutive reads agree, so drivers such as Colony no longer see the queue flicker to empty mid-run.
[6.8.0] - 2026-10-23
Added
agent-kit run-plan-all --events ndjson: the queue runner gets the driver modeagent-kit run-planalready has, so a desktop app such as Colony can run the queue and answer its gates without a terminal. stdout carries only NDJSON events (run_startwithcommand: "run-plan-all",agent_event/agent_text,hitl_gate,log, andrun_endwith the session's gate replies and stop), and answers arrive as JSON lines on stdin, including a gate the agent opens after a background task finishes. EOF,{"type":"stop"}, a line that is not JSON or a reply for another gate stop the run with exit 4; there is never a default answer. Driver protocol 1.2.0, additive: seedocs/driver-events-protocol.md("Queue runner").- Queue runner driver mode: a new
queue_stateevent (cursor,total,current,status) reports the HANDOFF Run queue, Queue cursor and Queue status fields at run start, whenever the agent changes them, and once more beforerun_end, so an app can follow the queue (includingheld) without parsing HANDOFF. It is read-only: the CLI never advances the cursor.run_start.protocolandagent-kit engine-infonow announce driver protocol 1.2.0.
[6.7.2] - 2026-10-22
Changed
- Docs:
agent-kit commandsis now in the getting-started subcommand table and the consumer-configuration CLI table, anddocs/mission-control-embedding.mdhas a "Commands catalog" section for IDE hosts: the catalog's fields, whyheadlessis a hint and never permission to run, the run-or-copy rule, and what a host should show when the engine predates the catalog.
[6.7.1] - 2026-10-22
Changed
- The
/run-plantick contract now tells the agent not to hand-poll background tasks (sleep/untilloops,pgrep -f,gh pr checksloops) and to wait for the completion notification instead. It names the trap behind a stalled headless tick:pgrep -f <pattern>matches the waiting shell itself, so the loop never exits until the tool timeout.
[6.7.0] - 2026-10-22
Added
- New
agent-kit commandslists the workspace's slash commands with their descriptions;agent-kit commands --jsonprints a versioned catalog (catalogVersion1.0.0, schema indocs/contracts/commands-catalog.schema.json) that IDE hosts such as Colony read for a command palette instead of keeping their own list. Each row says whether the command ships with the kit, is maintainer-only, or was added by the project, and whether the kit can run it headless. That flag is a hint for display only: a host still runs a command only if its own allowlist permits it.
Fixed
- Mission Control no longer shows a running
/run-plan-allqueue as finished or queued. The plan named in the HANDOFFPlan:field now wins over a leftover row for it under Backlog or Parked plans. WhenPlan:still names a finished plan (for example a/hotfixmini plan) and the queue cursor plan has open to-dos, the queue cursor plan is shown as the current mission./hotfixnow handsPlan:back to the parked or queued plan when it finishes.
[6.6.0] - 2026-10-22
Added
- New
--backend openrouterruns the plan loop through Ori (ori claude), OpenRouter's harness launcher, so a run can use OpenRouter models and billing instead of a first-party Anthropic account. Ori owns the credential (ori login); the kit passes it through and never stores it. Likecodexandcursor-acp, the backend is explicit-only:--backend autonever picks it, and iforiis missing the run stops instead of falling back to plainclaude— a silent fallback would spend Anthropic credit while the operator believes they are on OpenRouter.--modeltakes an OpenRouter model id (e.g.deepseek/deepseek-v4.1-flash).
[6.5.1] - 2026-10-21
Changed
- Mission Control opens in the Bare Metal skin by default (the neutral dark skin formerly called Cursor), with a neutral logo and favicon. Legacy stays available under More > Skins. A browser that had picked the old Cursor skin lands on Bare Metal and keeps it; a browser on Legacy stays on Legacy.
- New
docs/contracts/mission-control-skins.json: the token sets of the Bare Metal and Legacy skins (shared tokens plus each skin's 9 surface colors, default skin, storage key), versioned, so another app can match Mission Control's look without copying the dashboard. A test keeps it equal todashboard/dashboard.html.
[6.5.0] - 2026-10-21
Fixed
- Headless runs (
run-plan,run-plan-all,runwith theclaudebackend): a turn that ends with no gate while a background task is still running (for example the/run-plan-allre-synthesis PO worker) no longer closes the agent's input. The gate that the next turn opens now waits for the operator's answer instead of ending the run withstopped: unanswered gate (child exited), exit 4. - Headless
clauderuns no longer lose a background worker after 10 minutes.claude -pstops background tasks still running 10 minutes after the last turn (Background tasks still running 10m after the last turn ...; stopping them), which ended a/run-plan-allqueue in the middle of a plan worker. The kit now starts theclaudechild withCLAUDE_CODE_PRINT_BG_WAIT_CEILING_MS=0(no ceiling) unless that variable is already set.
Changed
/git-prodand the git prod routine (autogit/gitupdate.mdstep 9.5): before pushing the firstv*tag, run the project's release preflight when it defines one; a red preflight stops the release before the tag instead of leaving tag CI to fail after it.- npm publish checklist and repository boundaries: a
v*tag run withoutNPM_TOKENnow fails the publish job instead of passing green with no upload; the checklist records that npm trusted publishing (OIDC) does not run on self-hosted runners and that a private source repository gets no provenance. - Mission Control opens in the Bare Metal skin by default (the neutral dark skin formerly called Cursor), with a neutral logo and favicon. Legacy stays available under More > Skins. A browser that had picked the old Cursor skin lands on Bare Metal and keeps it; a browser on Legacy stays on Legacy.
- New
docs/contracts/mission-control-skins.json: the token sets of the Bare Metal and Legacy skins (shared tokens plus each skin's 9 surface colors, default skin, storage key), versioned, so another app can match Mission Control's look without copying the dashboard. A test keeps it equal todashboard/dashboard.html. - Docs name the two Mission Control skins, Bare Metal (default) and Legacy, across the contributing guide, persona and skin docs, configuration reference and design system, and link the skin token contract. The contributing guide's Skins section now covers Interface Skins instead of repeating the Agent Persona text.
- Repository boundaries: the public sync can run on a GitHub App installation token instead of a fine-grained PAT, with the setup order (App permissions, install, ruleset bypass, variable and key, then delete the PAT after one green sync); the PAT row now lists the
Administration: writepermission the sync already needed.
[6.4.0] - 2026-10-20
Added
agent-kit engine-info [--json]prints the engine manifest: the CLI name and version, the supported Node range (engines.node), the driver events protocol version and the Mission Control snapshot schema version (dashboardDataVersion). A host that runs the CLI as a managed component reads it to decide whether it supports that build.- Each release also publishes a platform-neutral engine tarball on its GitHub Release:
agent-kit-engine-<version>.tar.gzwithSHA256SUMS. It holds the same files as the npm package plus the runtime dependencies and anengine.jsonmanifest (theengine-info --jsonoutput), sonode dist/index.jsruns from the extracted folder with nothing installed. npm stays a channel.pnpm engine:artifactbuilds it locally afterpnpm build. agent-kit sessions [--json] [--cwd <dir>]lists the folder's saved agent chats, newest first: title, age, short id and theclaude --resume <id>command that reopens each one. The title is the name you set, else the generated title, else the first prompt you typed. Mission Control has a matching Chats section whose rows copycd <workspace> && claude --resume <id>(a web page cannot open a terminal). Claude Code sessions are read from~/.claude/projects/; Codex and Cursor say "not supported yet". The snapshot gains achatsfield (dashboardDataVersion1.7.0, additive; same object assessions --json). Chat titles are private: a broadcast Mission Control leaves them out.- The repository has a
.github/FUNDING.yml, so GitHub shows a Sponsor button that opens the GitHub Sponsors checkout foragent-kit-startup. The Sponsor Mission Kit link on missionkit.io goes to the same checkout. - Inside Colony, the session-start context now says that a Colony host is available: when
COLONY_HOST_CLIis set, an agent that may not merge a PR, rerun failed checks or push a branch itself files"$COLONY_HOST_CLI" request merge-pr <N> | rerun-checks ... | push-branchand waits for the operator's click./git-staginguses it for an operator-owed merge instead of stopping; a denial is final for the run.
Changed
- Claude Code:
agent-kit install --claudeandagent-kit update --claudealso addgh pr mergeandglab mr mergetopermissions.allowin.claude/settings.json, so the/git-stagingmerge step runs in auto mode instead of being refused by the auto-mode classifier as a merge without review.agent-kit guard shell(Claude and Cursor) now looks up the PR or MR base and denies a merge intomain,masterorprod, or into a base it cannot resolve;ALLOW_MAIN_PUSH=1lifts it as it does for the main push. The rows follow the deny rows' rules: written only by the--claudecommands, recorded in.cursor/agent-kit.claude-settings.json, and a row you delete stays deleted. Plainagent-kit updateprints the rows it would add. - The security policy moved from
.github/SECURITY.mdtoSECURITY.mdat the repository root, where GitHub and plugin registries both look for it. It is the only copy. The README, contributing guide, docs index, Code of Conduct, support page, PR template and issue-template links now point at the root file; old.github/SECURITY.mdlinks no longer resolve.
Fixed
- Mission Control: muted text (
--text-muted) now meets WCAG AA contrast (at least 4.5:1) on every--bg-*surface of both skins (primary, secondary, card and card hover). The Staging hygiene banner's path list, which sits on the yellow tint, moves to--text-secondary. Thelegacyskin moves from#6d8094to#7f93a8(the landing's value) and thecursorskin from#6e6e6eto#8b8b8b. Colony uses the same values.
[6.3.0] - 2026-10-18
Added
/git-stagingand/git-prodnow stop when a commit's author or committer is a coding agent, the way they already stop on an agent trailer.sh git-hooks/prepare-commit-msg --check-authors <base> [head]reads the author and committer of every commit in the range and exits 1 listing each commit whose address is an agent identity (noreply@anthropic.com,cursoragent@cursor.com, the Copilot bot and the other agent mail domains of the trailer rule), with the fix: set your own identity, thengit commit --amend --no-edit --reset-author. It matches the address only, so GitHub merge commits, Dependabot and people named Claude pass. It never sets an identity or rewrites history.--list-authorsprints the patterns. The getting-started guide has a new section on setting your own commit identity in cloud agent sessions (environment variables, signing, the PR-body footer).
Fixed
agent-kit installnow refuses to run when the CLI is older than the registry, asupdatealready did. Before, it applied the newer registry content but stamped the older CLI version into.cursor/agent-kit.json, so a refusedupdate --claudecould be bypassed withinstall --claudeand leave the manifest version wrong.--allow-stale-clistill skips the check (factory/dev only).- The stale-CLI refusal from
installandupdatenow repeats the flags you passed (--claude,-y,--cwd,--ref, ...) in its re-run line. It also offers a one-offnpx -y @dadado/agent-kit-cli@<version>form. Before, following the hint ran plainagent-kit updateand silently skipped the Claude Code command adapters.
[6.2.0] - 2026-10-16
Added
agent-kit countdown: a one-shot launcher for a cron line, a systemd timer or a CI schedule (never a daemon). Each fire fetches, then refuses to start while a gate exit from an earlier run is pending (it recordsskipped <UTC stamp>in.cursor/context/gate-exit.jsonand exits 2), on a dirty working tree (exit 3), or while an unmergedgate-exit/*branch has no marker entry (exit 2). Otherwise it runs one headless job with--no-hitl --land-on-gate: onerun-plantick by default (--max-ticks), oragent-kit run <slash>with--job dispatch --slash <name>.--window-min(default 120) and--stall-min(default 20, minutes with no output) stop a runaway job and end the fire as Circuit's Dead (exit 3), with the cause written to.cursor/loop-logs/countdown-<stamp>.logand landed as a gate-exit note. Exit codes: 0 completed, 2 gate exit pending or gate reached, 3 Circuit's Dead.git-prodandkit-prodare refused. Example cron and systemd units are in the consumer configuration guide.agent-kit countdown --job review(andagent-kit run review-pack): a review-only pass over the branches not merged into the base. The CLI builds a diff pack (commits and diff against the merge base, newest branch first) that leaves out the base, the remote default branch,gate-exit/*branches and.cursor/gate-exit/, branches whose changes are already in the base (including squash and rebase merges), and branches whose tip has not changed since the last completed review (recorded in the gitignored.cursor/context/review-ledger.json;--include-reviewedreviews them again). The pack is capped at--max-pack-bytes(default 98304) without ever cutting a branch: a branch that does not fit is listed asnot reviewed (too large: N bytes)and smaller branches still go in; a branch whose full diff cannot be read is listed asnot reviewed (diff not readable). Known tokens are redacted before the pack is measured. One headless session onclaude(no tools) orcursor-agent(--mode ask, sandbox on) reviews it from an empty temporary directory outside your repository, with the pack marked as untrusted data, using the new review-only prompt.cursor/commands/review-pack.md. A reply that starts withREVIEW: cleanand lists no findings lands nothing and the fire exits 0; findings (or any other reply) land as a gate-exit note with a PR/MR (exit 2 until you triage it withagent-kit ground-control). The reviewed branches are never edited or committed to. Nothing left to review, or nothing that fits the ceiling, means no session and exit 0.--max-pack-bytesand--include-reviewedapply toreview-packonly:agent-kit runrejects them for any other slash, andagent-kit countdownfor any other job.agent-kit ground-control: morning triage for gate exits.statuslists each pending operator ticket (Ask id and labels, the note's headline, thegate-exit/<stamp>branch and whether it is merged, the PR/MR URL) plus the runs Countdown skipped while it waited (--jsonfor scripts).accept <stamp>clears a ticket only once its branch is merged into the base (a merge, fast-forward or squash merge counts), then deletes that branch; while it is unmerged it exits 2 and changes nothing.discard <stamp>closes the PR/MR whenghorglabis authenticated, deletes the branch and clears the ticket. It never merges and never promotes./start-project,/backlog-add,/continue-plan,/run-planand/run-plan-allnow Ask about a pending ticket first (ask idticket:Read the ticket/Accept/Discard/Later); unattended runs list the pending stamps instead of asking.- Mission Control's Flight Log lists pending operator tickets at the top of the card (read-only): the note's headline, its Ask id, the
gate-exit/<stamp>branch and whether it is merged, the PR/MR URL and theagent-kit ground-controlcommand that closes it. A pending ticket never shows as "All clear". The dashboard reads the marker and the branches already fetched, so a refresh never touches the network; runagent-kit ground-control statusto fetch. The snapshot (dashboard/dashboard-data.mjs,dashboardDataVersion1.6.0) adds agateExitfield with the same rows, published indocs/contracts/mission-control-snapshot.schema.json.
Changed
- The README shows the HOL Registry trust badge instead of the HOL guard badge. The guard badge measures HOL Guard adoption and read "Unprotected"; the trust badge shows the registry trust score.
Fixed
-
Run logs no longer show up as untracked files in your repository. The installer now adds
.cursor/loop-logs/to.gitignore, and the runner drops a.gitignoreof*inside that directory under every state root (before only underAGENT_KIT_STATE_ROOT=.agent-kit). Without it, the log of oneagent-kit countdownfire made the next fire refuse a dirty working tree (exit 3) on every later run. -
The plan index (
.cursor/context/plan-index.json, rewritten at every session start) no longer shows up as an untracked file in your repository, which made everyagent-kit countdownfire stop on a dirty tree (Circuit's Dead, exit 3). The installer now adds it to.gitignore, and while your.gitignoredoes not list it yet, the CLI adds it to the clone-local.git/info/exclude(never committed) before writing it. The gate-exit marker (.cursor/context/gate-exit.json) gets the same fallback, so it no longer stays behind as an untracked file after triage.
Security
- Forge tokens (
GH_TOKEN,GITHUB_TOKEN,GITLAB_TOKEN,GLAB_TOKEN) are now redacted in every tick and run log (.cursor/loop-logs/tick-*.log,run-*.log) on every backend, with the same encoded forms (JSON-escaped, URL-encoded, base64) as the vendor keys. Before, only gate-exit notes, PR/MR bodies and thecountdown:/review:lines elided them, so a session that printedgh auth tokenor its environment wrote the token to the log.agent-kit countdownnow redacts the job's output line by line, so a token split across two output chunks is still elided, andagent-kit ground-controlredacts its error lines too.
[6.1.1] - 2026-10-15
Fixed
--no-hitl(agent-kit run,run-plan,run-plan-all) and--no-open(agent-kit dashboard,dashboard broadcast) now take effect. The argument parser reads--no-<name>as the negation of<name>, so the commands never saw either flag: an unattended run prompted at a gate instead of stopping with exit 4, and the dashboard opened a browser anyway.
[6.1.0] - 2026-10-15
Added
--land-on-gateforagent-kit run-plan,agent-kit runandagent-kit run-plan-all(off by default): when an unattended run stops at an unanswered gate (--no-hitl, exit 4), is stopped by the operator, or fails, the CLI writes a note (markedagent-inferred, with the gate's Ask id and labels, the stop reason, a run summary and the log path) on a newgate-exit/<UTC stamp>branch. The branch is created fromorigin/staging(or the remote's default branch when there is nostaging) in a temporary worktree outside your repository, pushed without force, and opened as a PR (gh) or MR (glab) when that CLI is installed and signed in; otherwise the CLI prints the branch and the command to open the review yourself. Your working tree is never written or committed: a dirty tree is reported, not cleaned. The gitignored marker.cursor/context/gate-exit.jsonrecords the pending gate exit. The landing never answers the gate. Tokens and the gateway address are redacted from the note, the PR/MR body and every printed line.
Fixed
- The four Mission Control screenshots in the README now show on GitHub. They used markdown image syntax inside an HTML table, which GitHub printed as plain text.
[6.0.0] - 2026-10-13
Changed
- Breaking: The minimum Node.js version is now 22.12, because Node 20 has reached end of life. The CLI's
enginesfield,agent-kit doctorand the Ubuntu bare-metal install helper all check for 22.12, and an older Node showsTOO OLDindoctor. CI runs on Node 22. - Mission Kit is now open source under the Apache License 2.0 (
LICENSE,NOTICE): free for any use, including commercial. This replaces PolyForm Noncommercial 1.0.0. Releases up to 5.18.0 keep the license they shipped with. The npm package,package.jsonand the Cursor, Claude Code and Codex plugin manifests readApache-2.0. - Contributions are taken under the Developer Certificate of Origin: sign off each commit with
git commit -s. There is no CLA. Seedocs/CONTRIBUTING.md. TRADEMARKS.mdsays how the Mission Kit and Agent Kit names and the helmet logo may be used. A published modified version uses its own name and logo.- The
sales@missionkit.iocontact is removed from the README, TERMS and PRIVACY.
[5.18.0] - 2026-10-09
Added
- Plugin installs now list five more core skills:
agent-kit-onboard,backlog-add,field-report-resolve,plan-external-reviewandplan-review-triageeach ship aSKILL.mdthat points to its existingprocedure.mdand command. The skills load only through their slash commands, andagent-kit installis unchanged. agent-kit run-plan --events ndjson(driver mode): apps, scripts and CI jobs can drive the headless plan runner over pipes with no terminal. stdout carries only NDJSON events (run_start,tick_start,agent_event,hitl_gate,tick_end,log,run_end) that wrap the runner's existingTICK_PROMPT,HITL_GATE,HITL_REPLYandLOOP_TICK_RESULTlines, and HITL answers come back as JSON lines on stdin ({"type":"hitl_reply","askId":"...","reply":1}). A gate no longer stops a piped run with "no TTY" in this mode; EOF,{"type":"stop"}or a malformed or mismatched answer still stop it with exit 4 and no default answer. Versioned contract:docs/driver-events-protocol.md(protocol 1.0.0). No new dependencies.agent-kit run-plan --on-limit <backend>: when a tick stops on a vendor usage limit, the next fresh tick continues the same plan on the backend you name (once per run, only when it is installed). Without the flag a usage limit now stops the run with a namedusage-limitreason instead of a generic tick failure; driver events (protocol 1.1.0) carry it astick_end.limitplusbackendon every tick.--backend codexforagent-kit run-planandagent-kit run: runs your installed, unmodified Codex CLI (codex exec --json) on an OpenAI API key (OPENAI_API_KEYorCODEX_API_KEY); your own ChatGPT sign-in only withAGENT_KIT_CODEX_CHATGPT_LOGIN=1. HITL gates are answered in the terminal or in driver mode and delivered by resuming the same Codex session.--backend autonever picks Codex.--backend cursor-acp(opt-in): runs your installed Cursor Agent CLI in its documentedagent acpmode so HITL gates on Cursor are answered (terminal or driver mode) instead of ending the tick; Cursor's own multiple-choice questions are offered as gates too. Sign in withcursor-agent login; the kit never handles Cursor credentials. The defaultcursor-agentbackend is unchanged.- Mission Control can be embedded: a host page may define
window.__MISSION_CONTROL_ACTIONS__ = { perform(action) }to receive each panel action as a typed{ kind: "copy", ... }record instead of the clipboard copy. The web dashboard keeps its copy-only default. Contract and content-security-policy readiness:docs/mission-control-embedding.md. - Mission Control snapshot 1.5.0: the snapshot shape is now a published, versioned contract (
docs/contracts/mission-control-snapshot.schema.json), and a newrunLogsfield lists your recent headlessagent-kit run/run-planlogs (agent text, tick result, HITL gates and replies) without reading~/.cursor. AGENT_KIT_STATE_ROOT=.agent-kitkeeps the headless runner's own files (loop-logs/,loop.stop) in.agent-kit/instead of.cursor/(the logs folder ignores itself in git). Plans, HANDOFF and the other kit files stay in.cursor/; the default is unchanged.
Changed
- Headless runs now redact
CLAUDE_CODE_OAUTH_TOKEN,CURSOR_API_KEY,CURSOR_AUTH_TOKEN,OPENAI_API_KEY,CODEX_API_KEYandCODEX_ACCESS_TOKEN(and their encoded forms) from the terminal, tick logs, driver events and errors, alongside theANTHROPIC_*keys. - Agent CLIs are found on PATH without shelling out to
which(works on Windows, including.cmdshims). Aclaudenewer than the last version the kit checked prints a warning; older than 2.1.259 still refuses.
[5.17.0] - 2026-10-08
Added
agent-kit update --claudenow also generates the.claude/commands/*pointer adapters, so Claude Code slash commands (/run-plan,/handoff,/continue-plan, ...) can be adopted after install without reapplying L0. It writes only.claude/commands/*, the Claude settings files and the shared managed-hash ledger, is safe on a dirty working tree, preserves hand-edited adapters and refuses symlinked targets. Plainupdatestill never writes them.agent-kit doctorandagent-kit statusrun in a workspace folder (no kit of its own, but kit projects in its direct subfolders) now say "No Agent Kit here" and name the projects to run from, instead of readiness counts and a next step to install the kit.doctorwrites nothing into that folder, and--jsongains an additiveworkspaceParentfield. Previously, opening Claude Code one level above your projects looked like an update had wiped the slash commands.agent-kit doctorandagent-kit install(without--claude) now say when.claude/exists but the kit command adapters are missing, namingagent-kit update --claude. Previously Claude Code showed only/agent-kitwith no hint why.- Claude Code plugin marketplace:
/plugin marketplace add agent-kit-startup/agent-kitthen/plugin install agent-kit@agent-kitinstalls Mission Kit's core skills. The repo now ships.claude-plugin/plugin.json,.claude-plugin/marketplace.jsonand.codex-plugin/plugin.json(name, links, icon, screenshots), so plugin registries show Mission Kit instead of a bareagent-kit. Commands still come fromagent-kit install.
Changed
/git-prodnow says what to do when its agent-signature gate is red on a commit that is already merged on a protectedstaging, where no PR can reword it: stop, name the operator-owned options (an operator-run history rewrite, or an exception by SHA the operator records in an Accepted ADR) and wait. An agent may continue only when every red commit is a SHA the operator accepted, checked commit by commit; the scan commands and the hard stop are unchanged, and a PR body or an unmerged commit never gets an exception./git-stagingandautogit/gitupdate.mdcarry the same wording.
[5.16.0] - 2026-09-30
Added
agent-kit remote-issues: read-only JSON list of remote dogfood issues (provenance label or[Dogfood]title prefix) on your own origin, GitHub viaghor GitLab viaglab. Broad Intake reads it as part of the dogfood bucket; a missing CLI, missing auth or an offline host degrades to a note and never blocks intake.agent-kit dogfood addandagent-kit dogfood file-issue: file findings without an editor.addwrites the dated note and appends the Unprocessed index for your lane.file-issue --visibility privateopens an issue on your own origin (GitLab: confidential);--visibility publicis factory-only, needs--approve-publicand a clean hygiene strip. Every issue carries the[Dogfood]marker.
Security
- Shell guard closes several bypasses. Newlines and a bare background
&now split segments. Wrappers (sudo,env,command,exec,nohup,time), subshells and git global options (-C,-c,--git-dir,--no-pager, ...) are stripped before matching. An authorized main push accepts only benign flags,git cleanflags are tokenized, and@counts asHEAD. - Claude Code permission backstops. Headless
claudeticks pass--disallowedToolsfor main/master pushes (including trailing flags,+main,refs/heads/mainand any git global option beforepush),--force/ leading-f/+refspec force pushes,--no-verifypushes and the promote skills. These glob rows are a best-effort backstop, not a refspec parser. Install merges matchingpermissions.denyrules into.claude/settings.json(union, never removing yours; attended/git-prodstill works). Promote and destructive command adapters renderdisable-model-invocation: true. - Secret shapes. The secrets scan and the shipped pre-commit check now catch
gh[pousr]_,github_pat_, PEM private keys and Slack tokens. The pre-commit scans only staged additions and no longer passes a large diff after a match. - Path and host checks. Contribute normalizes paths before the gate, so
rules/../../.envis blocked. Mission Control rejects an unexpectedHostheader with 421. External review output and errors are redacted. - Visible fail-open. When the CLI cannot be resolved, the Cursor shell hook still allows but tells the agent the guard is inactive.
- Hooks resolve the right CLI. Cursor hook adapters run the CLI with quoted arguments, so a repo path with spaces no longer turns the shell guard silently off, they prefer the project's own CLI over a global one (same order as
doctor), and they still fail open with a message when the CLI needs anodethat is not on the IDE's PATH. - No writes through symlinks. Install and update refuse to read or write registry files through a symlink, including a symlinked parent directory that points outside the project. When that skips files, the command names them, exits 1 and does not record the new version.
- Mission Control process list shows only this workspace's processes, with secrets in arguments redacted, before anything reaches a LAN viewer.
- CI hardening. The workflow token defaults to read-only, and the landing dispatch input is validated instead of interpolated into a script.
- Pre-commit secret check scans staged changes. The shipped
check-secrets.shreads only lines added in the staged diff (all paths, including ones with spaces), matches the same token shapes as the secrets scan, ignores diff drivers, and cannot be passed by a large diff. - Registry source is visible. When
.cursor/agent-kit.jsonsets the registry URL, install, update, add, diff and contribute print it, and warn when it is not the default registry. - Claude Code shell guard. Claude Code sessions run the shell guard through a
PreToolUse(Bash)hook (agent-kit guard shell --format claude) that answers with a deny decision. It fails open when the CLI cannot be resolved, and thepermissions.denyglobs stay as a backstop. Enforcement in headlessclaude -pruns is not claimed yet.
Fixed
- Plan state reads HANDOFF first. The loop resolves the active plan from HANDOFF (or the run queue) before any alphabetical pick, pending to-dos use the shared frontmatter parser, and CRLF plan files parse.
- Completed plans leave the Backlog.
plan-indexcollapses exhausted plans into one retire line, and the run-plan contracts unlist a completed plan fromBacklog plans. agent-kit handoffkeeps the queue. Regenerating HANDOFF preserves Run queue, cursor, status, outcomes, Backlog and Parked fields.- Tick sentinel. The loop reads
LOOP_TICK_RESULTfrom assistant events only, so an echoed prompt can no longer fake progress. archive-planships in L0,initsets an exit code instead of exiting mid-hint, and personalization protects only customized targets.- HANDOFF excerpt. Oversized inline JSON becomes an entry-count marker and machine lines are capped, so the SessionStart excerpt stays within budget.
- Scanner. A large repo no longer overflows the git buffer; unknown tracked files report as manual, and
.env.example-style templates are not flagged. - Registry cache. A cache left half-cloned by an interrupted run is cleared and re-cloned, and a refresh keeps a pinned ref instead of moving to the default branch.
- Mission Control start still recognizes a server started by the previous version, so an update no longer starts a second one.
- Welcome colors. An explicit color request wins over
CI, andCI=falseno longer disables color. - Manifest forward-compat. An unknown top-level field in
.cursor/agent-kit.jsonis a warning instead of an error and is kept when the CLI rewrites the manifest, so an older CLI reads a newer manifest without deleting its fields. doctorreports the right CLI version for localnode_modules/.bininstalls without reading the whole bundle.- Customized skill companions are detected. Personalization now checks every file of a pack skill, not only
SKILL.md, and diff/contribute share one list of managed targets with install. - Claude settings and adapters refuse symlinks.
install --claudeno longer reads or writes.claude/settings.jsonor.claude/commands/through a symlink (including a symlinked parent directory); it names the skipped path and exits 1. - Consumer installs ship the signature gate file.
git-hooks/prepare-commit-msgis now part of the consumer L0 install and refreshed byupdate, so the--check -scan that/git-stagingand/git-prodrun as a hard stop no longer fails with a missing-file error on a fresh checkout. Installing the git hook itself stays optional.doctorwarns when a kit checkout has nogit-hooks/prepare-commit-msg. Fixes #89.
Changed
agent-kit remote-issuesmatches the genericdogfoodlabel by default; add labels withAGENT_KIT_REMOTE_ISSUE_LABELS(comma list).- Faster hot paths. CLI subcommands load lazily,
guard shellskips git spawns for non-git commands, SessionStart runs its three network checks in parallel under a 6 s deadline, and Mission Control uses argv git calls with three fewer spawns. - Smaller always-on rules. Always-apply rules drop from 35,817 B to 27,131 B (about 24% less context on every request), each now under 4 KiB and gated in tests. Memory entry formats moved to a template loaded only when writing an entry.
- Less repeated work. Stream sinks share one capped line splitter (no quadratic re-scan of long lines), the loop reads each tick's outcome from the watched stream instead of re-parsing the log, sync loads the managed-hash ledger once, readiness fixes run two scans instead of three, and Mission Control caches CI runs for 60 s and probes listeners with a cheap identity endpoint.
updatereports new Claude deny rows and hooks. By default it only prints what is missing from.claude/settings.json;agent-kit update --claudeapplies it. Applied rows are recorded in.cursor/agent-kit.claude-settings.json(commit it), so a row or hook you delete stays deleted./run-plan-allno longer freezes the queue on an operator-only step. A plan that waits on a step only you can do (account checkout, host panel, credential) is recorded asdeferred-operatorwith its gate, the queue moves on to the next independent plan, and the final status lists the open gates. Real dependencies, failing checks, risk stops and API limits still stop the queue; deferred plans are never shipped.
Removed
- Unreachable legacy
generateFromProfilepath (and its hook generator). Install and init output is unchanged.
[5.15.1] - 2026-09-27
Fixed
- Public build passes the ship-lane tests. A release converge test now skips when its factory-only helper is absent, so the public repository build no longer fails on a missing module.
[5.15.0] - 2026-09-27
Added
- Privacy and terms.
PRIVACY.mdandTERMS.mdstate that Mission Kit collects no telemetry and ships under PolyForm Noncommercial 1.0.0. Commercial use needs a separate license (sales@missionkit.io).
Changed
/run-plan-allwaits out a lagging check. After a green publish, an eventually-consistent row polls with bounded backoff. The queue asks at confirm, at a context checkpoint, and when a new failure shows up or the wait expires.- Plugin display name is Mission Kit. The manifest
namestaysagent-kit. It links https://missionkit.io/ plus the privacy and terms pages. - HOL Registry badge. The README shows the verified guard badge and a link to the public listing.
- Landing release chip. The hero shows a static
vX.Y.Zlink to the public releases page. The HOL Guard badge sits with the install links. There is no live GitHub release badge.
[5.14.2] - 2026-09-25
Changed
- Forge vs local memory is documented. Comms channel map and capability inventory state that GitHub Issues/PRs are contributor visibility, not HANDOFF or session memory (ADR Accepted).
[5.14.1] - 2026-09-24
Changed
/git-staging,/git-prod, and/run-plan-allare generic again. Release steps that only apply to the kit's own maintainers are gone from the installed commands. Done after a promote means main pushed, tag pushed, and tag CI green, plus your project's own post-release check when it defines one./run-plan-allskips the release for a plan with no public changelog notes. The queue moves on instead of cutting an empty release.
[5.14.0] - 2026-09-24
Changed
- Maintenance release. Maintainer-side tooling only. Nothing changes for people who install the kit.
[5.13.4] - 2026-09-24
Changed
- The install overlay hash ledger matches the current kit files.
[5.13.3] - 2026-09-24
Changed
- CI actions are pinned to commit SHAs. Dependabot covers GitHub Actions and npm.
[5.13.2] - 2026-09-24
Changed
- Decision records have an active catalog. New decisions still carry a Status. The active list lives in the decisions index. Fully superseded records can move to an archive and leave that list. The files stay in git history.
[5.13.1] - 2026-09-24
Changed
- Beacon-class memory collectors stay out of Mission Kit. Session capture into a second database, and an MCP store of that database, are not part of the kit. Reviewed errors and decisions still land through the memory loop.
[5.13.0] - 2026-09-23
Changed
- Session starter keeps the run queue in view. The SessionStart HANDOFF excerpt prefers machine fields (run queue, cursor, status, outcomes) when they sit past the first window. Two always-on kit rules are smaller, and the layers spec names which starter text is kit-owned versus parent-workspace or operator MCP.
[5.12.4] - 2026-09-23
Changed
- Mission Kit account memory is specified, not shipped. Shared decisions and errors can be an account-level source of truth later. Each checkout still owns its plans and HANDOFF. The claim matrix, capability inventory, and basic-vs-advanced notes describe that split. This release does not add a store.
[5.12.3] - 2026-09-23
Fixed
- Public CI skips factory-only kit-command pins. The docs contract still checks consumer L0 on every tree. Assertions that read
kit-staging.md,kit-prod.md, orpublic-sync.manifestrun only when those files are present.
[5.12.2] - 2026-09-23
Fixed
- Factory
/kit-stagingand/kit-prodno longer reach consumer installs. Marketplace sync excludes both command files.agent-kit runno longer listskit-staging. Use/git-stagingand/git-prod.
[5.12.1] - 2026-09-23
Changed
- Public release sync squash-merges after the public build is green. A failed public build is not merged. The job fails if the public repository did not update.
[5.12.0] - 2026-09-23
Changed
- Mission Control Field Report read cap shares SoT with the surface cap.
dashboard-data.mjssetsMAX_REPORT_FILESfromMAX_EXTERNAL_REPORTSso the filesystem scan and Field Report list cannot drift. - Plan-loop promote gates and cursor-agent argv share one SoT each.
RUN_PROMOTE_BLOCKEDaliasesRESERVED_GATE_IDS;cursorAgentDispatchArgsaliasescursorAgentHeadlessArgs(parity with the existing claude headless argv helper). - Kit and Cursor update-check prefs share config load and interval helpers.
loadContextConfig/intervalElapsedlive inlifecycle/context-config.ts; install/init/update shareNON_INTERACTIVE_ROOT_ARGSfor--yes/--force-root. - Evidence ledger generators share frozen lane SHAs and cutoff.
scripts/lib/evidence-frozen.mjsis the SoT for file/history/artifact/authority/knowledge generators (hash helpers included). - Scanner context config and repository profile paths share one SoT each. Safe-fixes uses
lifecycle/context-configfor.cursor/context/config.json; confirmed-lane readers sharescanner/paths.tsREPOSITORY_PROFILE_REL. - Registry index, repository profile reader, and resolve-agent-kit hook paths share one SoT each.
REGISTRY_INDEX_RELcovers client/resolve/install; personalization usesREPOSITORY_PROFILE_REL; hooks-health usesRESOLVE_AGENT_KIT_REL. - HANDOFF path, sessionStart prefs, and root-guard manifest share one SoT each.
HANDOFF_RELcovers plan-index / session-start / default protected; sessionStart usesloadContextConfigplus readiness and manifest relative paths. - Capability inventory skills counts match on-disk
SKILL.mdand L0 overlay. Inventory and layers-spec listhitl-gates,dashboard-broadcast,llm-security-ops, and L0 procedure pages; pin test fails on undercount. /git-prodClaude lane operator Ask for main push method. When the permission classifier blocks the agent push, Ask:I pushed main/Open staging→main PR instead/Cancel. Other lanes run the authorized push directly.- A finished
/run-plan-allplan with no product diff does not stop the queue. That plan skips its release and the cursor advances. The queue still stops when a real diff is not ready to stage, staging CI stays red, or the release is not done.
[5.11.0] - 2026-09-22
Changed
/run-plan-allships one release per completed plan. Confirming the queue withRun as proposed(or the other run labels) is the production yes. Each finished plan gets one version: minor when the staged commits includefeat, otherwise patch. The next plan waits until that release is done.Run plans onlydoes not promote.
[5.10.3] - 2026-09-22
Changed
- One production confirm ships one version.
/git-prodand/kit-prodProceed with production deploycovers one SemVer close, one annotated tag, and one promote. The next patch needs its own confirm. Hold (no new tag) stays available when the current npm package does not need to change. A pushedv*tag is still never force-moved.
[5.10.2] - 2026-09-22
Fixed
- Public CI adapter size pins no longer list
.claude/commandswhile the test file loads.describe.skipIfstill runs its callback, so v5.10.1 still threwENOENTon public CI. The listing now runs only when that directory exists.
[5.10.1] - 2026-09-22
Fixed
- Public CI size pins skip factory-only Claude adapters. The
.claude/commandssize-budget suite no longer reads that directory when it is absent. Public-sync does not ship those adapters. Private checkouts still pin them.
[5.10.0] - 2026-09-21
Added
- Mission Control live view on the run lane.
agent-kit run,run-planandrun-plan-allin a terminal now show the run as Mission Control instead of status lines: a Mission panel with progress bars (to-dos of the current plan; plans of therun-plan-allqueue, read from HANDOFF without touching the cursor), a scrolling Flight Log of the same status lines, a Checklist of the queue or the plan's to-dos, and a Crew Monitor with the backend, pid, elapsed time, cost, turns and the tool in flight. A HITL gate is rendered inside the Mission panel with an input line: number or label replies, anything else is sent asother, an empty line,skip,cancelor Ctrl-C stops;qoutside a gate stops the run with astopped-by-operatorrecord. The terminal is restored on every exit and the reply stamps and run summary print beneath the last frame. New--plainkeeps the status lines; non-TTY,NO_COLORandCIare always plain. No new dependency;.cursor/loop-logs/keeps the complete NDJSON. - Headless HITL relay: answer the numbered list from the terminal.
agent-kit run,run-planandrun-plan-allon theclaudebackend keep onestream-jsonsession per run with stdin open: the prompt goes in as the firstuserevent, a gate pauses the run, the terminal shows the ask-id and the options, and the operator's number or label is delivered as oneHITL_REPLY: <ask-id> | operator reply <n> | <label>event that the child echoes into.cursor/loop-logs/(provenance) and the exit summary repeats. Empty line, EOF,skip,cancelor Ctrl-C write nothing and stop the run with astopped-by-operatorrecord; a non-TTY stdin stops the same way, never a default answer. New opt-in--no-hitl(CI) ends the run at a gate with exit code 4. Adapters and thehitl-gatesskill now print aHITL_GATE: <ask-id> | <labels>line before every numbered list, with an id per gate; pre-sentinel lists are still detected from their wording and marked as a fallback.cursor-agenthas no input channel: a gate there stops the run and says so. /qaL0 slash. Operators can test a release, reproduce a bug, or verify CHANGELOG feat/fix/chore claims against the install journey, tests, and hygiene. Playbook:.cursor/skills/core/qa/. No new L0 agent (test-suitesstays packquality). Reports pass/fail; residuals go through/backlog-add. ADR2026-09-16_qa-l0-slash-no-new-agent.md. Never/git-prod.- Cursor awareness feature-keyword digest.
agent-kit cursor-awareness --checkcompares changelog headings and slash commands todocs/cursor-native-audit.mdanddocs/cursor-3-features.md. A named surface missing from both files is an advisory gap. Check still never rewrites the inventory (applyRecommendedstays false). - HITL gates core skill (
.cursor/skills/core/hitl-gates/). Kit-wide Ask questions contract, exact labels, and numbered-list fallback as path 1. Consumer L0 overlay shipsSKILL.mdplusprocedures.md(tick, intake, queue SoT). ADR2026-07-29_consumer-l0-overlay-agents-optional.mdunchanged. - Hosted harness paper (Proposed). Factory extract, ACP client architecture, community incentive extension, basic vs advanced line, license-options research, and an implementation gate that is not satisfied. ADR
2026-09-17_hosted-harness-stateless-control-plane.mdstays Proposed and does not auto-supersede2026-09-03. Local ACP two-agent handshake recorded as FAIL (adapters not on PATH). No hosted service code. - Scanner recognizes Dart/Flutter and package-per-subdirectory monorepos.
pubspec.yamljoins the project markers, with a dart/flutter language branch (flutter test/dart test,dart analyze --fatal-infos,dart format --output=none --set-exit-if-changed .). When the repository root has no manifest at all, the scanner now scans one level of subdirectories for any known marker (skippingnode_modules,.git,build,.dart_tool) and reportsworkspaces: truewith each member path as evidence, sopurposestops defaulting todocumentationfor a repo whose packages live undercore/+app/-style subdirectories..cursor/agent-kit.config.json#stackalso gains an operator-confirmed override, parity withpurposeandgit.provider: once set with a language and at least one command, it is the source of truth on every later scan.quality.validationreadiness now also accepts a repeatable command parsed from GitHub Actionsrun:steps (regex-only, no new dependency) as evidence when the scanner's own stack detection found none.
Changed
- Cross-repo memory inventory. A research note inventories existing ADRs, processed dogfood, and adjacent boards. Public five-layer matrix and capability inventory now name the per-checkout memory bound and reject a fleet HANDOFF board (ADR 2026-09-15). Hosted-harness stays adjacent-not-owner. No AgentStore product, hosted team-context store, or L1 memory-consolidation unlock. Leftover remote after merged PR #886 deleted.
- Mission Kit landing hero copy refresh (zip 7 v2). Centered H1 "Plan, build, review, and ship anything to the real world.", expanded lead (orchestration / memory / context / commands / rules / hooks / skills), Install Mission Kit and Watch Demo, video below CTAs. Public release pill remains Mission Kit 5.9.0.
- SessionStart HANDOFF excerpt has a byte cap. The context the
agent-kit hook session-startadapter injects (CursorsessionStartand Claude CodeSessionStart, both formats) keeps the first 60 lines of.cursor/HANDOFF.mdbut now within 12 KB: the machine fields Mission Control reads (Plan,Last updated,Mode,In progress,Next*,Backlog plans,Parked plans,Run queue,Queue cursor,Queue status, with their indented sub-bullets) are always whole, prose bullets share the rest and end in a visible…[truncated N chars]marker, and a closing line says how many were truncated. A HANDOFF that already fits is injected unchanged. On a 60-line HANDOFF with multi-thousand-character bullets the excerpt drops from about 61 KB (factory) or 38 KB (a consumer run) to under 12 KB, so every headless turn re-reads a smaller cached prefix. - Headless runs print status lines, not raw NDJSON.
agent-kit run,run-planandrun-plan-allon both backends (thecursor-agenttool events follow its publishedtool_callshape) now render the agent stream in the terminal as readable lines: assistant text, tool calls with a one-line argument summary, tool results (ok/error), hooks collapsed to one line, rate-limit warnings and the final result with status, cost and duration; thinking, init and catalog events stay silent. Non-TTY,NO_COLORandCIprint the same lines without color. The.cursor/loop-logs/file keeps the complete NDJSON, redaction unchanged. - Headless HITL transport decided (ADR
2026-09-19_headless-hitl-transport-and-live-tui.md, Accepted).agent-kit run/run-plan/run-plan-allon theclaudebackend will keep onestream-jsonchild per run with stdin open and relay operator answers asuserevents; the numbered-list fallback gains aHITL_GATE:sentinel line and replies are stampedHITL_REPLY:. Point 7 of ADR2026-08-27is amended so the live Mission Control loop also covers the headless run lane (dependency lock unchanged). Decision only; the renderer, relay and TUI live mode ship in later phases. - Cursor native-audit keep-up (2026-09-16).
docs/cursor-native-audit.mdanddocs/cursor-3-features.mdrestamped for classified post-Projects surfaces (Custom modes,/goal,/loop, Origin, self-hosted machines, and related ignore rows). Projects ADR2026-09-12and Plan Mode ADR2026-09-15unchanged. - Kit plans stay SoT over host Plan Mode. If Cursor already has a native plan, copy it into
.cursor/plans/then run Gate A. Host Plan Mode does not replace Gate A/B. ADR2026-09-15_kit-plans-sot-over-host-plan-mode.md. Native-audit inventory and.cursor/project-context.mdrestamped to live 5.9.0 manifests (dated snapshot). /run-planL0 procedure is under 80 lines (was 381)./run-plan-alland/start-projectkeep Goal, five hard stops, Ask labels, and a link to the skill.hitl-ask-questions.mdcstays the short always-applied rule.- Default-path HITL is one Ask at command entry. Inbox, owed-close, and landing Asks are opt-in or post-default. Numbered-list fallback is path 1 (mandatory when Ask questions is missing). Ask questions matrix records a 2026-09-15 Grok 4.6 main-Agent re-probe (present); Auto and Sonnet were not re-probed this pass.
- Session hard-rules Gate A now matches
/start-project: no-active-plan options includeWrite plan and add to backlog(write / write+backlog / modify / cancel). - Consumer L0 drops
/kit-stagingand/kit-prod. Factory keeps the files. Native/git-staging//git-prodstay git-only with one pointer bullet./start-projectcritical path is Broad Intake + Gate A (product-context extract only when the payload mixes personal and product; autonomous scheduled mode is not intake). Mission Control TUI stays a third-surface viewer (ADR2026-08-27_cli-native-mission-control-tui-thin-deps-third-surface.md); no new CLI deps. - Agent Persona chrome runs after the command Ask. Default chat chrome has no cockpit emoji. Personas stay chat tone only (
2026-07-26_agent-persona-vs-interface-skin.mdunchanged). /git-stagingstays on the routine afterghHTTP 401. After a successful SSH push, auth failure prints the compare URL and waits. It does not invent dotenv, L0, CHANGELOG, or overlay-hash product. Troubleshooting no longer treatsgh auth loginas the first move in that case. ADR2026-09-16_git-staging-stay-on-routine-no-invented-product.md.- Consumer docs cover the headless TUI,
--plain,--no-hitland the HITL relay transport.docs/consumer-configuration.md's CLI table anddocs/getting-started.mdnow document the Mission Control live view onrun/run-plan/run-plan-all, the--plainand--no-hitlflags, and the sentinel-based relay (HITL_GATE:/HITL_REPLY:) that answers a gate from the terminal and resumes the same session, with the same-model stop conditions and thegit-prod/kit-prodrefusal restated. Thehitl-gatesskill gained a matching "interactive terminal" paragraph distinguishing this from the unattended-CI, one-tick-per-agent runner it already documented..cursor/commands/dashboard.mdstep 4 now names the browser MCP per IDE lane and gets a Troubleshooting row for an extension error page while the server answers 200 (site-permission gap, not a dead server; do not retry navigate). /agent-kit-onboardessential-deferral rule narrowed to match the code, and the code narrowed to match the intent. An essential readiness check can be completed by an explicit deferral only when the scanner has zero recovery actions for it (e.g.stack.detectedon an unrecognized language); an essential check with a listed action always resolves through that action.agent-kit doctornow printsDeferred essential: <check-id> — <reason>(anddeferredEssentialsin--json) whenever this path is used. ADRdecisions/2026-07-28_onboarding-completion-nonessential-deferral.md, Amend 2026-09-20.docs/repository-readiness-onboarding.mddocuments whichdoctorflag writes which file (--jsonvs--fix-safevs--refresh-profile), anddocs/consumer-configuration.md's "Repo profile" section corrects its blanket read-only claim for the three operator-confirmable subkeys.hitl-gatesskill split into one procedure page per command. The 988-line, 104 KBprocedures.mdthat/run-plan,/run-plan-all,/continue-planand/start-projectall shared is now four one-hop pages:run-plan-tick-contract.md,start-project-intake.md,run-plan-all-queue.md, and/continue-plan's own 11-line resume procedure folded straight into.cursor/commands/continue-plan.md(it already restated most of the same steps).procedures.mdstays as a short redirect so an existing consumer overlay copy lands somewhere useful on its nextagent-kit update.SKILL.mdgainsdisable-model-invocation: true(it listed nearly every command in its trigger description, which made it effectively always-on despite being nominally model-invoked; the siblingcore/qa/SKILL.mdalready had this). Reading cost per command drops 48-87% (each command's own page plusSKILL.md, instead of the shared 104 KB file every command paid for); total on-disk bytes for the skill plus its four command stubs are flat-to-down versus before the split, not relocated the way #901 was (ADRdecisions/2026-09-20_contract-read-budget-and-laziness.md).- Size pins on every consumer-L0 command, skill page, and generated
.claudeadapter. Newpackages/cli/src/docs/size-budgets.test.tspins bytes, lines, and longest line per class (150 lines / 8,192 B / 700 chars for a command; a matching table for skill pages and adapters), proven against a synthetic over-budget fixture so a regression fails CI the way#901's silent regrowth did not.plan-review-triage.md,plan-external-review.md,agent-kit-onboard.md,field-report-resolve.md,backlog-add.md, anddashboard-broadcast.mdmoved their procedural detail into six new one-hop skill pages to fit;dashboard.md,git-staging.md, andgit-prod.mdneeded a small rewrap. All 25 consumer-L0 commands now comply. cursor-plan-handoff.mdcandcontext-guardian.mdcno longer restate the session hard rules and the/run-plantick contract in full. Both arealwaysApplyrules loaded on every Cursor session alongside the SessionStart-injected hard rules; an audit found five near-verbatim paragraphs (manual-mode hard stop,/start-projectgates, backlog CRUD, HANDOFF machine-field format, and the quota-stop recovery mechanics) each said twice. Folded to short pointers, keeping any sentence the other side didn't already say — no change of meaning, one line each rewrapped to fix a longest-line overage as a side effect. CombinedalwaysApplyrule bytes: 38,968 B -> 36,880 B.- HANDOFF growth contract:
agent-kit handoff --pruneand avalidate handoffsize warning..cursor/HANDOFF.mdgrows without bound because every tick appends a dated entry and nothing removes one. New limit: 200 lines, no line over 2,000 chars (bytes/lines/longest-line, never tokens; replaceshandoff.md's old "~500 tokens when possible" phrasing).agent-kit handoff --prune [--keep N](default 5, explicit flag only, never automatic) keeps the N most recent narrative entries and archives the rest to.cursor/context/archive/(now gitignored, same class as HANDOFF.md itself), preserving every Mission-Control-parsed machine field byte-identical wherever it sits.agent-kit validate handoffwarns when either limit is crossed. Proven live on this factory's own HANDOFF (108,272 B / 137 lines -> 52,818 B / 104 lines): adashboard-data.mjssnapshot taken immediately before and after the prune has byte-identicalplans,runQueue, andchecklistNotes. - Docs closeout for the contract read budget work.
docs/layers-spec.mdgains a "Read budgets and laziness" section naming which files are always-on, load on command, or load on glob, and the numeric budgets each class is pinned to.docs/capability-inventory.mdrecords the delta.docs/consumer-configuration.md'sagent-kit run-plantable cell (was one 6,809-char line) is now a short cell plus a wrapped prose subsection underneath — same content, longest line 1,439 chars..cursor/memory/_index.md(≈237 KiB) andCHANGELOG.md(≈286 KiB) are flagged, not fixed, as the same unbounded-growth symptom for a separate future plan.
Fixed
agent-kit validate planaccepts the canonical plan template's indentation. The frontmatter- id:check was column-0-only;.cursor/context/templates/plan.mdindentstodos:items by two spaces, so a plan written exactly by the template failed withempty-todos. The regex is now indent-tolerant, matchingplan-index's existing behavior.
[5.9.0] - 2026-09-15
Fixed
npx install/updateno longer send you to a stale PATHagent-kit. A global or pnpm shim at an older version (the binary that printsagent-kit v5.7.0afternpx @latest install) used to be treated as "on PATH, run it directly".init/updatefrom that binary then re-stamped the overlay. Install, init and update now compare PATH'spackage.jsonto this CLI, print the pinnednpx -y @dadado/agent-kit-cli@<this-version>form, and on an interactive TTY with a writable npm prefix runnpm i -gat that pin.setup-globalno longer exits "nothing to fix" when the prefix is writable but PATH is missing or old.statusnames overlay/PATH drift and the same pin.agent-kit run-plan-allis a terminal command. Welcome and docs treated the queue as chat-only.agent-kit run-plan-all,agent-kit run run-plan-all, andagent-kit /run-plan-alldispatch.cursor/commands/run-plan-all.md(numbered-list HITL; not therun-plantick loop). Typing/run-plan-allin zsh is a filesystem path./git-prodand/kit-prodstay operator-gated.
[5.8.0] - 2026-09-14
Added
- Pending-only plan index.
agent-kit plan-index(and sessionStart) writes.cursor/context/plan-index.jsonfrom HANDOFF-named plans./continue-plan,/run-plan-all, and Broad Intake read index + HANDOFF; they do not glob.cursor/plans/*.plan.md. - Agent signature guard in
git-hooks/prepare-commit-msg. The hook was Cursor-only (it removed oneCo-authored-by: Cursortrailer). It now strips any known coding-agent signature or session link from the commit message before it is recorded: Claude CodeCo-Authored-By: Claude ... <noreply@anthropic.com>andClaude-Session: https://claude.ai/code/...trailers, Cursor, Copilot, Codex, Gemini, Devin, Aider and peer co-author trailers, the🤖 Generated with Claude Codefooter andMade with Cursorlines, and agent session URLs. HumanCo-authored-by:trailers are kept (matching is on agent names, agent mail domains and session hosts, never on the trailer key). The pattern list is embedded in the hook (--list), so the documented single-file copy install stays self-contained, and a new--check [file|-]mode scans a message or PR body and exits 1 with the offending lines (the/git-stagingand/git-prodroutines run it as a hard stop, see the next bullet). POSIX sh, BSD and GNU grep.node --test scripts/git-hooks-prepare-commit-msg.test.mjs(inpnpm test:root-node). Scope, honestly: the hook strips on the machine where it is installed and does not rewrite history; the private factory branches already carry such trailers on past commits, while the public mirror's sync commits are written byscripts/sync-public.mjswith their own message and were found clean. Install:git-hooks/README.md. - Public repo is humans-only, technically now, not just by policy.
git-hooks/pre-pushandagent-kit guard shellboth refuse a direct write to the public mirror repo (agent-kit-startup/agent-kit, never this private repo) —pre-pushblocks any push whose remote URL resolves there regardless of branch, and the shell guard's newpublic-repo-direct-writerule blocksgit push(by URL,-R/--repo, or a named remote resolved viagit remote -v) andgh pr create/gh pr mergenaming that repo directly, sameALLOW_PUBLIC_PUSH=1escape shape as the existingALLOW_MAIN_PUSHgate on both layers (independent of it — the public repo'smainbranch still needs both).gh issue *andgh apiagainst the public repo are named, not-covered gaps (not silently enforced). Agents ship product changes to the public repo only throughscripts/sync-public.mjsvia CI, as before; this closes the "an agent shell could otherwise push/PR there directly" gap. Local guard only — it is not a substitute for GitHub branch protection or CODEOWNERS on the public repo itself, which stay an operator decision. - Agent signature gate in
/git-stagingand/git-prod(/kit-stagingand/kit-prodinherit it). Both routines now rungit-hooks/prepare-commit-msg --checkas a hard stop, in the same shape as the Evidence-checks merge gate:/git-stagingscans the outgoing commit messages (git log origin/staging..HEAD --format=%B) beforegit pushand the PR body (gh pr view <N> --json body) beforegh pr merge;/git-prodscans the whole promotion delta (git log origin/main..origin/staging --format=%B) and, on the PR lane, the staging→main PR body before the merge tomain. Exit 1 lists the offending lines and the routine stops until the message is reworded; exit 2 (missing hook) counts as red. This closes the "uninstalled hook" gap: aCo-Authored-By: Claude .../Claude-Session:trailer, aGenerated with <agent>line or an agent session URL that reached a branch commit (no hook,--no-verify, a commit made elsewhere) is caught before it can land onstagingormain, where a squash merge would otherwise copy it into the branch history. Scope, honestly: the gate runs on the machine executing the routine; there is no server-side check on the private repo yet. SoT:.cursor/commands/git-staging.mdstep 5,git-prod.mdstep 5,autogit/gitupdate.mdPrompt git staging §8–9 and Prompt git prod §5 and §7;git-hooks/README.md. - Install on a fresh Ubuntu 24.04 server (
docs/install-ubuntu24-bare-metal.md): a consumer recipe for a bare-metal or VM box with no Node.js and no terminal attached (cloud-init, Ansible,bash -cover SSH). NodeSource Node 20+ unattended,git initto clear the project-root guard without a prompt,npm_config_cache=... npx -y @dadado/agent-kit-cli@latest install --yeswith a cache directory owned by the install,statusto verify, and a recovery table for theEPERMcache-ownership and exit255signatures. Same CLI-first path as Getting Started, Port B stays the fallback, L0 only (no Ubuntu pack). Validated end-to-end on a clean Ubuntu 24.04 host on 2026-09-12: install,status, and the no-terminal (bash -c ... </dev/null) case all completed cleanly, noEPERMor exit255. Pointers frominstall.md, Getting Started and the docs index. agent-kit run <slash>starts one headless session whose prompt is the L0 command file under.cursor/commands/.--backend autoselects the first installed agent CLI (cursor-agent, thenclaude). Cursor Ask questions stays Cursor-only; headless confirmations are a numbered list./git-prodis omitted from the catalog and is never auto-promoted.agent-kit run-planstays the existing one-tick loop.--backend claudefor headless plan-loop ticks.agent-kit run-plan --backend claude(and theagent-kit run run-planalias) runs each tick as headlessclaude -punder the same one-tick contract ascursor-agent: one to-do per tick,LOOP_TICK_RESULTsentinel,/git-stagingon a diff, never/git-prod.--backend autono longer fails on a machine where onlyclaudeis installed.ANTHROPIC_BASE_URL/ANTHROPIC_AUTH_TOKENpass through to the tick for gateway routing and are redacted in every tick log, tip and error on every backend,cursor-agentincluded (chunk-boundary safe; the gateway host and common encoded forms — JSON-escaped, URL-encoded, base64 at value start — are elided too, not only the exact value);agent-kit run <slash>on theclaudebackend gets the same env passthrough, log redaction and headless permission flags (--dangerously-skip-permissions --permission-prompts none), so a dispatchedgit-stagingcan actually commit. The claude child env drops the four nested-session markers theclaudeCLI itself strips (CLAUDECODE,CLAUDE_CODE_SESSION_ID,CLAUDE_CODE_CHILD_SESSION,CLAUDE_CODE_BRIDGE_SESSION_ID). Pre-spawn checks:claude >= 2.1.259and the.claude/commands/run-plan.mdadapter (agent-kit install --claude), each refused with a named cause. Opt-in capsAGENT_KIT_CLAUDE_MAX_TURNS/AGENT_KIT_CLAUDE_MAX_BUDGET_USD(no default). A tick whose stream-json result carriesis_errorstops the loop with the result subtype on the console. Console tips print workspace-relative paths and collapse the home directory to~. Reverses theNot --backend claude plan-loop ticksnon-goal at every documented site under the reservation in ADR2026-08-13_claude-cli-ultracode-orchestration-thin-adapter.md; the audits reviewer keyexternalPlanReview.backend: "claude"is a different field and is untouched. MINOR.
Changed
- Cursor Projects (beta, shipped 2026-09-10) studied and decided: no structural change. Primary-source study and ADR
2026-09-12_cursor-projects-thin-adapter.mdconclude Mission Kit's continuity model (HANDOFF/plans), plan-loopBackendId(cursor-agent/claudeonly), Mission Control's local-only/copy-only posture, and thin hook adapters all stay as-is — Projects is a Cursor-native surface the operator may use directly.docs/cursor-3-features.md(retitled from "Cursor 3.0 Features," same filename) gains a Projects row;docs/cursor-native-audit.mdgains a Projects inventory row, a refreshed last-refreshed date, and records thatagent-kit cursor-awareness --checkdoes not detect Projects (no feature-keyword diff, only open action items and a version-number baseline). - Mission Control TUI paints field labels with the muted visual-kit token and status / lifecycle values with dashboard
--green/--yellow/--red/--cyan.NO_COLOR,CI, and non-TTY frames stay uncolored.
Fixed
agent-kit updateno longer silently overwrites a customized hook or script. The consumer overlay that preserves edited kit files now covers.cursor/hooks/and.cursor/scripts/in addition to agents, skills and commands. A consumer that widened.cursor/hooks/pre-commit/check-secrets.sh(a security control) lost that edit to a no-version-change apply that printed only+ path; the file now stays as the consumer left it, is reported underPreserved customized overlaywith its path, and the output says where the change belongs (agent-kit diff,agent-kit contribute, or a single-pathprotectedpin). Unedited hooks and scripts still refresh, including copies shipped at v5.3.0–v5.7.0. The manifestpersonalization.generatorVersionis also restamped with the applying CLI version on every apply so it no longer disagrees withversionafter an update (the personalization result file itself is not regenerated).installanddoctorwarn when the running CLI is behind npmlatest, honoring the existingupdateCheckopt-in and interval (no network on every invoke by default). Recovery and post-install npx copy pin@latest. Mission Control TUI quit is exactq/Q/ Ctrl-C, not a substring.- Mission Control TUI live view:
qquits, refresh no longer stacks collectors, a non-git cwd stays quiet, and the CLI pack gate pinsdashboard/libdata deps (semantic-model,terminal-snapshot,triage-heading,live-refresh). agent-kit updateno longer reports success after an apply it could not deliver. The apply path stamps.cursor/agent-kit.jsonwith the version of the CLI executing it (KIT_VERSION), so an update run by a CLI older than the registry silently re-wrote the installed version and still printedUpdate complete— an operator chasing a new release would re-run/updateindefinitely with no signal. The apply now compares the CLI against the registry checkout's version and refuses when it is behind, printing the pinned remedy (npm i -g @dadado/agent-kit-cli@<version>) and exiting 1.--yesdoes not lift the guard (non-interactive and hook paths are where a capped write hurts most);--allow-stale-cliis the factory/dev escape hatch. A registry checkout with no readable version warns and proceeds. A release can be mid-publish when the new content is already public but npm does not yet serve the matching version; the refusal says so and tells the operator to retry shortly rather than presenting an unfollowablenpm i -g.update --checknames the binary upgrade when the running CLI is itself behind the latest public tag. It previously said onlyRun /update (Ask confirm) to apply, which cannot reach the reported version from a stale CLI.- Apply output states the version actually written (
v5.6.0 → v5.7.0, orunchanged at v5.7.0), so a capped or no-op run is visible instead of reading identically to a successful bump. /updatecontract gains a required "upgrade the CLI binary first" step ahead of the apply, never applies through an unpinnednpx(which can resolve a cached older build and reintroduce the same capping), and asks the operator to report the version transition.- Consumer install and update copy-paste now uses
npx @dadado/agent-kit-cli@latestso a stale npx cache cannot silently run an older CLI after a new publish. Pin@x.y.zwhen you need a reproducible install. The remaininginstall --pack,install --claudeandupdate --checkfences (docs/bootstrap.md,docs/domain-packs.md,docs/getting-started.md,install.md,packages/cli/README.md) now carry@latesttoo.
[5.7.0] - 2026-08-27
Changed
- Consumer install copy is Cursor-first: root
package.json, README eyebrow, and getting-started no longer list VS Code or Windsurf as peer IDEs. Partial generators still ship; Action A7 (generator parity) stays a non-goal. - Mission Kit landing shows the current public release version (New release pill plus a link to the public GitHub Release) and short product notes in the existing changelog field, matching the original pill-and-frame visual. Release version and product notes are static page fields, not a third-party feed or a factory-changelog dump. Operators stamp those two fields with
pnpm landing:update-release(does not deploy). - Consumer documentation rewritten with usage-first Fable copy. README hero section, getting-started guide, and CONTRIBUTING page now focus on concrete install steps, surfaces, and day-to-day workflow. Retired five-layer claim matrix from consumer storefront; factory evidence files preserved for CI.
Added
- Public changelog filter: public GitHub
CHANGELOG.md, GitHub Release notes, and the landing product-notes field publish only consumer and contributor product notes. Factory-only bullets stay behind<!-- changelog-private -->fences. Preview withnode scripts/public-changelog.mjs; landing stamp uses--version X.Y.Z --blurb(never passCHANGELOG.mdas--notes-file). /kit-stagingand/kit-prodwrap native/git-stagingand/git-prod(those stay git-only: branch/MR for staging,staging→mainplus tag and npm for prod). When a product changelog or release actually changed, the kit bundles add a surgical public-landing field update and, after an explicit Ask, deploy the landing to staging or promote it to production.docs(memory)monitor commits do not trigger a landing deploy. Repo-only shipping stays the native git commands.- CLI-native Mission Control TUI (
agent-kit mission-control): browser-free ASCII view of Mission, Flight Log, Checklist, and Crew Monitor. Reusesdashboard/dashboard-data.mjs/semantic-model.mjswithout starting the HTTP server; live refresh uses the existingPERIODIC_REFRESH_MSpoll. Visual-kit tokens (HELMET_*/LABEL_MUTED) and TTY /NO_COLOR/CI/AGENT_KIT_REDUCED_MOTIONgates stay as in ADR2026-08-13_cli-visual-kit-space-chrome.md. ADR2026-08-27_cli-native-mission-control-tui-thin-deps-third-surface.mdrecords stay-inside-thin-deps (@clack/prompts/citty/koloristonly; no Ink/ora/chalk/figlet) and that the TUI is a third surface, not a Path C replacement. Claude Code/agent-kitrendersmission-control --once(one-shot; not a live loop). Plancli-native-mission-control-tui. - Mission Control Git tab visual tree + new DevOps tab. The Git tab's existing markdown
git log --graphblock stays as-is; a new state-colored vertical tree renders next to it, reusing the.now-stepper/.now-step-markertimeline primitive built for the Current Mission panel (parsesSNAPSHOT.git.graph's commit lines, flattened to one row per commit — HEAD/promoted-to-origin/main-or-origin/stagingstate-colored, degrading to a compact empty-state on an unparseable graph). New DevOps tab (#devops, nav dot, hash-deep-linkable) is scoped to CI/CD + deploy signal, distinct from the existing local-process-only Processes tab: a pipeline card from a newdashboard-data.mjsgh run listcollector (budget-guarded, fails soft to an honest empty-state whenghis unavailable/unauthenticated or the run itself would blow the snapshot's soft time budget), and a best-effort "what shipped recently" deploy-activity card fromv*git tags + the latest non-UnreleasedCHANGELOG.mdentry — deliberately not a live infra/hosting poll, and says so.dashboardDataVersion1.3.0 -> 1.4.0. Planmc-git-tab-visual-tree-and-devops-panel. - Per-agent/subagent context-usage cap, docs + enforcement: ADR
2026-08-24_agent-context-usage-cap-window-pressure.mdsets a<=50%-of-window target using the existingcontext_usage_percentsignal from the CursorpreCompacthook — the only real local window-pressure signal, reused exactly as-is (no new token/cost telemetry, no violation of the standing2026-08-14_mc-idle-session-token-cost-no-go.mdno-go). Documents the operator's "190k tokens" framing as a window-size-class ratio (200K-class ~95%, 1M-class ~19% — hence the enforceable cap is a percentage, not a literal token count), and the coverage gap thatpreCompactis Cursor-only (no signal exists for Claude Code sessions today).packages/cli/src/hooks/pre-compact.tsgainedCONTEXT_USAGE_CAP_PERCENT = 50and threshold logic inbuildPreCompactUserMessage: apreCompactfiring at/above the cap (or with no reported percentage — auto-compaction implies high pressure) escalates the emitteduser_messageto name the cap and force a HANDOFF checkpoint before continuing; below-cap firings keep the original gentle wording..cursor/commands/run-plan.md's tick-close contract gained step 3a treating an observed escalated firing as a mandatory (not optional) HANDOFF checkpoint. Newpackages/cli/src/hooks/pre-compact.test.ts(5 tests). Also surveyed 5 real third-party token-reduction/context-compression tools (Headroom, Caveman, Graphify,atlassian-labs/mcp-compressor, Tokalator) for scam/legitimacy risk — all ratedevaluate-further(no confirmed malicious signal in any, but three show anomalous star-velocity worth independent scrutiny before reliance); none installed or adopted. Planagent-context-cap-and-token-tool-research.
Fixed
- DevOps tab pipeline card:
collectPipelineRuns()'sgh run listtimeout (GH_RUN_LIST_TIMEOUT_MS) had no real headroom over this repo's observed latency — 3500ms against live-measured samples spanning 2.1-9.9s across sessions (8 fresh samples this pass: 3476-6584ms, one 7674ms outlier). Fixed in dependency order: (1) the collector now runs last among the snapshot's budget-guarded collectors (after processes, detached-audit-sessions, agentPrompts, externalReports, subagentRuns), not ahead of them, so a slowghnetwork call can no longer starve the local-only collectors sharingSNAPSHOT_BUDGET_MS; call cost trimmed too (--limit10 -> 5, unuseddatabaseId/url--jsonfields dropped — neither is read by the card). (2)GH_RUN_LIST_TIMEOUT_MSraised 3500ms -> 12000ms with real margin over the measured range;SNAPSHOT_BUDGET_MSdefault raised by the same delta (12000ms -> 20500ms) so the larger reserve the collector needs is actually available. (3) The pipeline card's empty-state copy no longer unconditionally blames "gh is unavailable or not authenticated" — the collector now returns areason("budget"when the shared snapshot budget ran out beforeghwas even attempted,"call-failed"whenghwas attempted and failed/timed out) and the card copy follows it. Live 5-run + 1-diagnostic-budget verification (this sandboxed dev environment) found the dominant real failure mode is in fact"budget": a separate, out-of-scope collector (SNAPSHOT.git, ~10 unguardedexecSynccalls with no budget check) is consuming the entire default budget on its own here, before the snapshot even reaches the now-last-placed pipeline collector — confirmed via a diagnostic run withAGENT_KIT_DASHBOARD_DATA_BUDGET_MS=60000, which returnsavailable: truewith real runs. That collector is unguarded/unbudgeted and outside this fix's scope; noted as a residual. Planclose-mc-git-tab-devops-pipeline-timeout-residuals.
[5.6.0] - 2026-08-24
Added
registry/registry.json's L0 section is now generated from code (packages/cli/src/lifecycle/l0.ts'sL0_ARTIFACTS) on everyscripts/build-registry.mjsrun, instead of hand-curated — reviving the abandonedarchive/l0-generate-from-codetag against the current pipeline. Newscripts/derive-l0-artifacts.ts+scripts/emit-l0-artifacts.mjs(viapnpm --filter @dadado/agent-kit-cli exec tsx, sincetsxisn't hoisted to the repo root). Verified idempotent (two consecutive rebuilds produce zero diff) and non-regressive on hand-curated L2 entries (readCuratedArtifactsnarrowed tolayer === "L2"only — L0 no longer needs preserving-by-hand). Closed two real drift gaps surfaced along the way:dashboard-broadcast/updatecommands added toL0_ARTIFACTS(existed on disk, were never declared), andinstall.md's Port B table reconciled to match.l0.test.tsdeliberately keeps its portable "legacyonboardabsent" assert rather than a strictregistryL0Paths === canonicalSourcesequality — private-repo parity is already enforced by CI's repo-gated "Registry catalog parity" step, and the public mirror independently ownsregistry/**, so a second unconditional test-level assert would reintroduce the public-CI breakerrors/2026-07-24_public-sync-ci-test-portability.mdalready paid down twice. Planl0-generate-from-code-revival.- Public storefront README gets the visual identity it never had: a shields badge row (npm version, PolyForm NC license, Node >=20, public Release Latest — no CI badge, the public mirror pipeline skips factory tests), a helmet hero (
dashboard/logo.svg, visual-kit palette) plus the CLI's 9-lineHELMET_ASCIIas a monochrome fenced block, a curated 2×2 Mission Control screenshot gallery (assets/production/*.png, newly synced), and a GitHub social preview asset (dashboard/social-preview.svg/.png, 1280×640, helmet on the#0b0e14plate per the marketplace logo spec) with an apply checklist indocs/github-about.md.packages/cli/README.md(the actual npm storefront) gets minimal badge/hero parity. Planreadme-public-hero-badges.
Fixed
- Audits
monitor_wants_advisor()(.cursor/scripts/plan-external-review.sh:1734) used an unanchoredgrep -qFsubstring match on the<!-- audits-advisor-escalate -->sentinel, so any prose mention of it — including a negation like "no<!-- audits-advisor-escalate -->needed" — false-positived and re-spawned a costly Opus advisor pass on every future audit run touching that monitor. Now anchored to a standalone HTML-comment line (grep -qE '^[[:space:]]*<!-- audits-advisor-escalate -->[[:space:]]*$'), matching the prompt template's own "exactly one HTML comment line" contract. Verified against both known false positives (plan-monitor-audits-atomic-wait-reviewer-fallback.md,plan-monitor-deepseek-harness-modernization-study.md:79), which no longer match; a genuine standalone sentinel line still triggers escalation. Regression test added (plan-external-review-model-routing.test.mjs). Found by an Opus advisor pass during the 2026-08-22deepseek-harness-modernization-studyaudit; done-marker suppression (Phase 2) considered and skipped as unsafe — see plan body. Planaudits-advisor-escalate-sentinel-anchor-fix. check-public-deny-links.mjsfailed closed only on an explicit manifest!exclude; a README/docs link into a path the manifest never mentions at all (neither included nor excluded) passed silently and 404'd on the public mirror. Now checksisPublicSyncedPathdirectly, so "absent from the manifest" fails too. Also fixes two by-products of the stricter check rather than suppressing them: template{placeholder}interpolations (isPlaceholderTarget, matching the existingcheck-markdown-links.mjsconvention) and a real folder link in a.mdcrule file whose trailing-slash target needs restoring before it matches thegit-hooks/**glob. Broad Intake 2026-08-16 error finding, planreadme-public-hero-badges.sync-public.mjs's content-denylist scan read every synced file viareadFileSync(path, "utf8")and relied on a try/catch to skip binaries — but that read never throws on binary bytes in Node, so the intended binary exemption never actually applied. Latent since the manifest never included a binary file before; surfaced as a false positive (a private-client-name denylist term coincidentally present in a screenshot's compressed PNG bytes) the momentassets/production/*.pngwas added. Fixed with a real binary check (NUL byte in the first 8000 bytes, the same heuristicgit/grep -Iuse) ahead of the UTF-8 decode + regex scan.
[5.5.0] - 2026-08-22
Added
- Kit-repo domain skill
.cursor/skills/domain/llm-security-ops/(SKILL.md +owasp-llm-map.md,local-lab-ops.md,mitigation-patterns.md): OWASP Top 10 for LLM Applications 2025 detect/mitigate/review checklists plus local LLM lab ops (Docker Compose + Ollama), distilled from the external Urutau-LLM-Lab curriculum. Project-owned and one-way: not a registry member, not a pack member, no L0 command, not consumer-installable — it layers on thesecurity-revieweragent andcybersecpack without replacing classic AppSec checklists. Educational/defensive only (no exploit payloads or flags in-tree); the lab itself stays external and unvendored. ADR2026-08-17_urutau-llm-lab-external-curriculum-domain-skill.md; first member of the.cursor/skills/domain/scaffold (ADR 2026-08-02). - Consumer install docs name
--force-rootand the start-from-zero path for the first time:docs/getting-started.mdgains Project root guard (which shapes are refused, warn-vs-refuse by interactivity) and Starting from an empty folder (git initrecommended,--force-root, or the interactiveProceed anyway?yes).install.mdmirrors both. Installing without Git stays supported -/agent-kit-onboardstill owns the Git pillar and the CLI never runsgit initfor you. - Audit wait-state garbage collection: liveness of
.cursor/context/audit-wait/<slug>.jsonisdeadlinevs wall clock, notstatus: "armed". Any arm or poll expires that slug's own dead file on contact (status->timeout,remainingBudgetSeconds->0, witharmEpoch,deadline,backend,implementerModel,reviewerModel, and anycloudAgentId/cloudRunIdpreserved), so a stale arm is never resumed as live leftover budget. New opt-in sweep--gc-wait-state(orAGENT_KIT_AUDIT_GC_WAIT_STATE=1) walks every wait-state file, expires each dead armed one, skips live and already-terminal files with one line per decision, and with no plan argument sweeps and exits0without starting an audit;--dry-runpreviews. No new status outside the ADR enum (armed|ready|timeout|soft-fail). Tests.cursor/scripts/plan-external-review-atomic-wait.test.mjs. - Field Report owed can now close honestly in the Claude CLI lane. When a slug's wait-state is terminal-and-dead (
status: "timeout"/"soft-fail", or"armed"pastdeadline) and a genuine post-hocplan-monitor-<slug>.mdexists on disk,/run-planand/run-plan-alloffer an owed-close HITL:Adopt existing monitor(routes into/plan-review-triage <path>; the durable triage heading records reviewed-by-adoption) orAck owed without review(closes as acked, recorded unreviewed). The earlier exit3stays3, the wait-statestatusis never rewritten toready, and a duplicate re-arm against already-merged work is no longer the only sanctioned route.Not nowleaves the row owed. - Audits pre-flight (
externalPlanReview.preflight) also refuses or warns on unsatisfiable config:enabled: truewithbackendpinned"claude"in the Claude CLI lane can only end owed (audits are a non-goal there, and a pinned Claude reviewer against a Claude implementer is an honest same-model skip), andmidBatchAudits: truemultiplies it across a queue.warnsurfaces the combination once with the outs (backend: "auto","cursor","cloud");blockdoes not start the run or the queue./run-plan-allchecks before the confirm Ask. A growing owed pile is no longer the only signal. - Audit sessions gain a host-global ceiling, a bounded lifetime, and a visibility surface alongside the per-workspace cap. The 2026-08-14 incident piled 26 detached
agent-kit-audit-*sessions across four workspace tokens (13/10/2/1) on one 16 GB host while every token stayed underAGENT_KIT_AUDIT_SESSION_CAP=20— the cap is per token, the exhausted resource is the host. Ceiling: the launcher now also counts detached sessions across the wholeagent-kit-audit-namespace (foreign tokens and legacy unscoped names included) and refuses to spawn atAGENT_KIT_AUDIT_SESSION_HOST_CAP(default 24: at or above the per-token cap so it cannot shadow it, below the observed 26-session collapse;0disables). The refusal reuses the existing soft-fail shape (no new exit codes) and prints a per-token breakdown stating that the workspace-scoped dispose command only reaps this workspace's share. Attribution is unchanged: reap and dispose stay owned-token-only, and the--dry-runaudit-sessions:owned line is byte-identical, with a newaudit-sessions-host:line beside it. Lifetime: the detached tmux/screen spawn is now self-terminating at spawn — wrapped withtimeout/gtimeoutwhen available, else a watchdog subshell signaling only the session's own process group — afterAGENT_KIT_AUDIT_SESSION_MAX_AGEseconds (default 3600;0disables), so a forgotten session never depends on a later launcher run to die (the opt-inAGENT_KIT_AUDIT_REAPsweep stays a separate mechanism). Attached and foreign-token sessions are never killed; emulator/Terminal channels stay advisory; the 60s progress gate remains a launch honesty check, not a lifetime. Visibility: the sessionStart hook emits one fail-open section with the host-wide detached count and oldest age (only when count >= 1; silent on zero/missing tool/error, 2s timeouts), and Mission Control exposessystem.detachedAuditSessions({count, oldestAgeSeconds}|null) with a conditional note in the Processes section. Dogfoodcursor_audit_session_cap_host_scope_2026_08_14.md; ADR2026-07-30_audits-pty-progress-gate-zombie-policy.mdamended 2026-08-17. guard promptdetects hyphenated vendorsk-keys (sk-ant-api03-…,sk-proj-…) via a newsk-hyphenated-vendorpattern.openai-skis/\bsk-[A-Za-z0-9]{20,}\b/and its body class excludes-, so those keys returnedhits: []— indistinguishable from a clean prompt, with the fail-open prompt hook as the only net.maskSecretExcerptlearned the hyphen in the same change, so the new detection cannot put raw key material intoSecretHit.excerpt. Fail-open posture is unchanged. Memoryerrors/2026-08-14_guard-secrets-scope-vs-claims.md.- Claude Code consumer adapters, opt-in via
install --claude(default install output unchanged without the flag):.claude/commands/<name>.mdthin pointer adapters for every installed.cursor/commands/*.md(no command prose copied, overlay-tracked so hand edits survive a re-run), and a SessionStart hook merged idempotently into.claude/settings.jsonso the same session context Cursor gets fromsessionStartnow auto-loads in Claude Code too.agent-kit hook session-startgained--format claude(plain stdout, live-docs-verified as the shape Claude Code's SessionStart hooks actually consume — no JSON wrapper, nonode -eunwrapper needed in consumer settings);--format cursorstays the byte-identical default. An existing.claude/settings.jsonthat fails to parse is never touched —installprints the hook entry to paste in by hand instead. ADR2026-08-13_claude-cli-kit-load-bootstrap.mdamended 2026-08-21 (reverses its own discarded SessionStart-hook alternative; the mechanism was always sanctioned by2026-07-29_cli-invariants-thin-hook-adapters.md, only the Claude Code surface was closed). Dogfoodcursor_claude_code_consumer_adapters_prototype_2026_08_16.md. agent-kit doctorreports an environment pillar (bin-on-PATH, npm global prefix writability, Node version, shell profile) via a newenvfield in--jsonoutput (env.binOnPath,env.npmPrefixWritable+env.npmPrefixdetail,env.nodeVersionOk+env.nodeVersion,env.shellProfile+env.shell) and a human "environment:" summary section. Read-only diagnostics, no writes.agent-kit setup-global: self-heals a root-owned npm global prefix (relocates to~/.npm-global, fixesPATHvia the detected shell profile with an idempotent marker comment, reinstalls globally, then verifies), with per-step confirmation,--dry-run, and a safe non-interactive fallback (prints manual copy-paste steps, mutates nothing). Neversudo/chown. Invoke vianpx @dadado/agent-kit-cli setup-global(works before a global install) or bareagent-kit setup-globalafter one.
Changed
install/init's post-install "what now" line is now environment-aware:printInstallEpilogue()prints a 3-option guided block (keep using npx / runsetup-global/ manual steps) when a bareagent-kitisn't onPATHyet, instead of the old static npx-ephemeral hint. When the bin is already onPATH, it prints one short positive line instead.classifyInstallError(packages/cli/src/utils/terminal.ts) distinguishes a root-owned npm global-prefixEACCES(newnpm-global-eacceskind) from the genericepermkind, pointing recovery atnpx @dadado/agent-kit-cli setup-globalplus the manual one-liner instead of the generic npm-cache-ownership hint.
Fixed
validateProjectRootno longer treats any directory with.gitas a project root. A root that has.gitand two or more immediate child directories that are themselves repositories is a parent-of-repos: refused in non-interactive mode, warned with a default-noProceed anyway?prompt interactively. Previouslynpx @dadado/agent-kit-cli installone level above the intended project wrote L0 into the wrong grain, silently under--yes/CI. The scan is one level deep, skips dot-directories andnode_modules, stops at the threshold, and is capped at 200 entries. Threshold is 2 because a single nested repo is the normal vendored/submodule shape; a child-directory count alone would false-positive on monorepos. A root that already has.cursor/agent-kit.jsonis never re-flagged.--force-rootstill bypasses, andupdategets the same behaviour.agent-kit initruns the project-root guard. It is a compat wrapper overperformInstall, which writes L0, but it never calledconfirmProjectRoot- soinitin a blank no-git folder or a parent-of-repos root wrote the tree with no confirmation, bypassing the guard entirely. It now confirms the same wayinstalldoes and accepts--yes/--force-root.- Root refusals print what to do instead. Validation returns a
recoveryblock next to the shortreason, andinstall/update/initprint it on a hard refusal:git inithere (recommended),--force-root, or yes at the interactive prompt. The empty-folder refusal used to name only--force-root, which no consumer doc mentioned. - Post-install copy stops implying a bare
agent-kitis onPATH.npx @dadado/agent-kit-cli installis ephemeral and never linksbin.agent-kit, sodocs/getting-started.mdnow leads with the two honest invocation forms (npx @dadado/agent-kit-cli <subcommand>, ornpm i -g @dadado/agent-kit-clithen bareagent-kit) and its command table lists subcommands rather than a PATH binary;install.mdand the README Mission Control fences follow.installandinitshare onenextStepAfterInstall/ONGOING_CLI_INVOCATIONpair, pinned by tests.npxstays ephemeral - only the copy changed. - Guard and secrets prose no longer advertises coverage the invariants do not cast.
guard shell --helpand theshell-guard.tsheader call it a git-workflow / protected-branch deny-list instead of "the destructive deny-list":SHELL_DENY_RULESis five git-scoped rules andrm -rf /,chmod -R 777 /,dd …are allowed by design (ADR2026-07-29_cli-invariants-thin-hook-adapters.md) — the claim was renamed, no rule was added andALLOW_MAIN_PUSHis untouched.SECRET_PATTERNSstates its relation to pre-commitcheck-secretsas one-way (the prompt scan is a strict superset; the hook greps the singlejson-secret-kvexpression under*.json|*.js|*.ts|*.env, so.md/.yaml/.sh/ dotfiles are scanned by neither lane) instead of claiming alignment. Each sentence is now pinned by a test against the rule set, the pattern ids, and the hook file, so prose cannot drift.
[5.4.0] - 2026-08-15
Changed
- CI no longer runs the entire build twice per pull-request push.
push: branches ["**"]overlappedpull_requestcompletely; pushes now trigger onmain,stagingandv*tags, where there is no PR to cover them. Superseded PR runs are cancelled by a concurrency group;main,stagingand tag runs always finish. Both properties are pinned by tests. - CI builds before its guard steps.
test:root-nodeincludes the session-start hook diagnostic, which asserts the hook resolves the CLI throughpackages/cli/distinstead of reporting degraded mode; withBuildordered last, that suite could only pass on a machine that had already built. A pin test now holds the order. - Ten root test suites that no command ran are now in
test:root-node, which CI executes: the plan-external-review atomic-wait / backend-cascade / model-routing suites,comms-draft,check-guidance-stale-claims,validate-memory-index,hook-session-start-diagnostic,orchestration-defects-regression,sync-landingandsync-public-guards. 46 root tests become 87. The two guards that had tests but no runner -check:guidance-claimsandcheck:memory-index- are npm scripts now and run inside CI's Evidence checks. docs/DEVELOPMENT.mdgains a repository-layout table for the root artifacts that read as leftovers but are not:cursor-handoff, the install contracts, the registry authoring docs,skills-registry.json,HANDOFF.md.example,autogit/,_legacy/,dogfood/. Each is path-stable for a reason (public-sync manifest entries, raw-URL install links, inbound references), which is why they stay at the root.dashboard/README.mddocuments the Mission Control runtime layout and, explicitly, why its tests live inpackages/cli/src/dashboard/- the CLI package owns the workspace's only test runner and imports the.mjsfiles directly, so there is one implementation under test rather than a copy.docs/evidence/README.mdstates, per artifact, which generator produces it, whether it reproduces off the generating machine, and whether CI enforces it.evidence:file-ledger:checkis documented as a local replay tool rather than a gate - its census covers the working tree, stashes and ignored-operational files, so it cannot pass on another checkout - and its failure message now says so instead of reading like a stale artifact.- New
check:markdown-linksguard (scripts/check-markdown-links.mjs, wired intotest:root-node, so CI's Evidence checks enforce it): every relative markdown link in the tracked surface must resolve, with template placeholders ({plan-slug}) explicitly excluded. 234 files scanned. pnpm lintnow covers the half of the repository Biome never saw:dashboard/**,scripts/**and.cursor/scripts/**are checked beforeturbo run lintfans out to the workspace packages. Previously the onlylinttask in the graph waspackages/cli'sbiome check src, so 56 root-level files - including the Mission Control runtime and the evidence generators - were exempt from the same gate that CI and/git-stagingpresent as repo-wide.
Fixed
landing:vendorreports the real failure. The React/ReactDOM download had no status check and no timeout, so a CDN 404 or 500 was hashed as if it were the library and surfaced as a confusing "SRI mismatch"; a hung connection had no bound at all. It now fails with the HTTP status and aborts after 30s.sync-publicno longer shells out tosleep(1)between poll attempts - a POSIX-only dependency in the publication path. The synchronous wait usesAtomics.waiton a zeroed buffer instead.- De-flake the dashboard auth-exemption test. Its readiness loop slept only when
fetchthrew, so a non-ready status spun the event loop the spawnedserve.mjsneeded to finish booting, and an accepted-but-unanswered connection could consume the entire budget because no attempt was bounded. Each attempt now carries a 2sAbortSignal.timeout, every iteration is spaced, an early child exit fails immediately with its stderr instead of waiting for the test timeout, and the budget is 20s inside a 60s test. agent-kit contributecarries a skill's companion files upstream.buildRegistryPathMapmapped onlySKILL.md, and the path guess accepted only paths ending in/SKILL.md, so a consumer that added a checklist or areferences/file to a skill contributed the entry point and silently dropped the rest. Both now treat a skill as the directory it is; the legacy flat layout still maps tocommunity.- Skill companion files reach the consumer.
agent-kit add, pack install, L0 sync andagent-kit diffenumeratedSKILL.mdand nothing else, so a skill that ships a checklist or areferences/folder arrived with dead links in every installed tree. Install and diff now share oneskillFileTargets()enumerator (recursive,SKILL.mdfirst, hidden files skipped, and a missing directory still yields the old single pair), so the whole skill lands. - Derived guidance no longer pins a superseded release.
.cursor/project-context.mdrecorded product version 5.2.1 and lane SHAs frozen at 2026-07-31 while the tree shipped 5.3.0; comms surfaces (docs/comms*.md, themission-kit-commsskill and agent),docs/cursor-update-awareness.mdandinstall.mdrestated 5.0.0 / 5.2.x as the current release. Where the number was load-bearing it is now dated and paired with the surface to read it from (CHANGELOG.md, npmdist-tags,.cursor-plugin/plugin.json);docs/npm-publish-checklist.mddrops its 5.0.0-era "today" snapshots for the commands that answer the question at run time. - Dead relative links across the tracked markdown surface:
.cursor/agents/**pointed at.cursor/rules/*.mdc,autogit/gitupdate.mdandREADME.mdas if it were reading from the repository root,docs/capability-inventory.mdprefixed its own siblings withdocs/, andautogit/plan-routine.mddid the same. References to private trees (.cursor/memory/**) are now inline paths rather than links, since those paths never reach the public sync..cursor/skills/community/n8n-workflows/regained thechecklist-n8n.mditsSKILL.mdlinks to. - Clear the 16 Biome violations that scope gap had been hiding: formatting in
dashboard/lib/triage-heading.mjs,scripts/validate-memory-index*.mjs,scripts/git-hooks-pre-commit-composed.test.mjs,.cursor/scripts/comms-draft.mjsand.cursor/scripts/plan-external-review-progress-gate.test.mjs;resolveSnapshotRepoRootno longer declares a defaulted parameter before a required one (theundefinedenv still falls back toprocess.env, matchingguards.d.mts);indexLinkTargetsusesmatchAllinstead of an assignment-in-condition loop; the session-start hook diagnostic builds its env by destructuring instead ofdelete.
[5.3.0] - 2026-08-15
Added
- Optional Cursor Cloud Agents audits backend:
externalPlanReview.backend: "cloud"runs the post-hoc plan review on Cursor Cloud Agents over REST (https://api.cursor.com) and writes the sameplan-monitor-*.mdfindings contract. It is a pin only —"auto"still cascades Claude → Cursor Agent CLI and never reaches it. Because Cloud Agents clone the repo, it reviews the pushed branch and a preflight soft-fails on unpushedHEADinstead of auditing state the reviewer cannot see (backend: "cursor"remains the working-tree reviewer). The launcher writes the monitor from the terminal run result, so freshness, exits0|3|4,autoRemediate: false, implementer≠reviewer, and/plan-review-triageare unchanged;autoCreatePRandworkOnCurrentBranchare hard-off and not configurable.ERROR/CANCELLED/EXPIRED/ empty results write no monitor and fabricate nothing; agent and run ids persist in wait-state for exit-3 resume.--batchis refused rather than partially covered. New config:externalPlanReview.cloudAgent(repoUrl,startingRef,model). Requirescurl,node, andCURSOR_API_KEY— no new runtime dependency, and@cursor/sdkis deliberately not vendored (it needs Node 22.13+ against the kit'sengines >=20). ADR2026-08-14_cursor-cloud-agents-sdk-audits-backend.md; tests.cursor/scripts/plan-external-review-cloud-backend.test.mjs. - Spec Kit SDD research: Accepted ADR maps GitHub Spec Kit commands onto existing Agent Kit surfaces (adapt vocabulary, ignore runtime / CLI /
.specify/). Getting-started pointer and plan-template Goal what/why cue. ADR2026-08-14_spec-kit-sdd-adapt-ignore.md. - Multi-instance Mission Control broadcast:
agent-kit dashboard-broadcast/npm run dashboard:broadcastbinds the same per-workspace port allocation as/dashboard(hash of the snapshot root in3333-3588) instead of a hardcoded3333, so a broadcast starts beside an already-running instance. NewclassifyBroadcastListener/resolveBroadcastPort/describeBroadcastListenerindashboard/lib/guards.mjswalk the candidate ports and reuse only this workspace's own broadcast — reuse requires LAN reachability, not just a matchingsystem.repoRoot, because a loopback panel answers?token=with 200 without any token. Everything else (our loopback panel, another workspace, a token-gated instance this token cannot identify, an unknown process) is skipped and left running. Export a stableMISSION_CONTROL_TOKENto reuse an existing broadcast instead of starting another. The broadcast log is now per workspace (/tmp/mission-control-broadcast-<rootId>.log).
Fixed
- HANDOFF HITL claims (parked, approved, deferred, confirmed, stopped-by-operator) must record Ask id, operator reply, or
agent-inferred. A refused command is terminal in the worker contract (same class as never/git-prod). Queue and audit start preflight the detachedagent-kit-audit-*session pile (warn or offer reap; cap surfaces in the orchestrator Ask, not only launcher stderr). /backlog-add(and the reused Broad Intake worker) never Asks on non-essentialconfirm-provider/collaboration.provider. One-line advisory or silence, then Broad Intake → write Ask.- Audit wait-slice exit 3 with leftover
waitTimeoutSecondsresumes in the same/run-plan//run-plan-allsession (re-arm--wait-monitor) before advancing the queue or skipping triage. Exit 3 is still timeout-only and is never narrated as reviewed. - Broadcast preflight no longer answers a busy port with
kill "$(lsof -nP -iTCP:3333 -sTCP:LISTEN -t)". It names who holds each port it walked past (this workspace's loopback panel, another workspace by root, a token-gated instance, an unidentified process), leaves them running, and offers akillline only for a listener proven to be this workspace's own. ExplicitPORTstill refuses rather than silently moving. The starter also stampsPORTandMISSION_CONTROL_REPO_ROOTonto the detachedserve.mjsenv on both spawn paths, so the server binds the allocated port instead of falling back to3333. The token gate for non-loopback bind is unchanged.
Changed
- Operator submitted the Core Pack plugin to Cursor Marketplace (pending review).
- Daily dogfood and audit path stays on
/run-plan,/run-plan-all,/continue-plan, and/backlog-add. When Unprocessed is non-empty, those commands may AskAnalyze inbox now/Enqueue Fix now/Not now(never auto-analyze)./dogfoodstays file-only. Notes become plans/memory after HITL, neverplan-monitor-*.md. When audits are enabled, arm/wait/rearm/triage continuation is the/run-plan//run-plan-alldefault;/plan-external-reviewand/plan-review-triagestay specialist SoT. ADR2026-08-14_main-command-dogfood-audit-routing.md.
[5.2.1] - 2026-08-14
Changed
- Marketplace SoT no longer claims the public plugin manifest is 4.8.9 / metadata-only. Public
.cursor-plugin/plugin.jsonis 5.2.0 with explicit component paths; live Cursor Marketplace submission stays publisher HITL and unchecked (docs/marketplace.md,docs/cursor-update-awareness.md,docs/comms-channel-map.md,docs/cursor-native-audit.md). - Marketplace / plugin logotype is
dashboard/logo-marketplace.svg: 512×512 (1:1) SVG, transparent square canvas, rounded#0b0e14plate, Cursor-skin stroke mark centered. Mission Control chrome still uses unplateddashboard/logo.svg(legacy) anddashboard/logo-cursor.svg(Cursor skin). - Production also versions the Mission Control logo marks (helmet, cursor-skin, marketplace plate) under
assets/production/(private; not public-synced).
Fixed
/plan-review-triageno longer tells agents to suggest Field Report Review all or/field-report-reviewwhen every monitor is already triaged. Next step is/plan-external-reviewif a new review is owed, or a Flight Log Copy triage command paste. There is no/field-report-reviewslash command and no Mission Control Review all button.
[5.2.0] - 2026-08-14
Added
- Factory CI Evidence checks run the root
node --testsuites (plan-external-review-progress-gate.test.mjs,check-public-deny-links.test.mjs,verify-cli-dashboard-pack.test.mjs,git-hooks-pre-commit-composed.test.mjs) viapnpm test:root-node. Scan scripts themselves already ran in CI. - Dashboard
guards.d.mtsnow declares everyexport functionandexport constfromdashboard/lib/guards.mjs(49/49), pinned bypackages/cli/src/dashboard/guards-dts-parity.test.ts. - Overlay known-hashes refresh helper:
pnpm overlay:hashes(root) /npm run overlay:hashes(packages/cli,src/lifecycle/refresh-known-hashes.ts) appends missing consumer-overlay content hashes toKNOWN_SHIPPED_OVERLAY_HASHESafter L0 command/agent/skill body edits, enumerating the same sources as the overlay coverage tests (L0 overlay artifacts + registry skills core/community). Append-only (existing entries and inline comments are never removed or reordered), idempotent, withoverlay:hashes:checkexiting non-zero listing missing hashes without writing; replaces the manual hand-append step previously documented indocs/marketplace.md. - Knowledge-classification dirty-tree guard: the generator warns on in-scope working-tree drift and refuses regeneration with
--require-clean-tree(now default inpnpm evidence:knowledge-classification) when tracked in-scope paths carry unstaged edits, closing the regen-poison class behind three stale-ledger incidents (ADR2026-08-13_ledger-regen-clean-tree-guard.md).
Changed
/plan-review-triageStep 2b names.cursor/plans/,.cursor/plans/archive/, and HANDOFF Backlog ascloseout_depthsources; Hard stop 5 points at the depth-capped override (Ask Other) instead of a dead-end Write residuals redirect.- R15 Closed-by append on
plan-monitor-harden-cursor-awareness-inventory-cwd.mdfor R2–R4 (factory composed pre-commit,inventoryRootJSON, stamp at resolved root). - R15 Closed-by appends on the owning monitors for live Relevant skills rows, root
node --testCI wiring, landing SoR ADR supersession, and triage-guidelines caveat (personalization-context-and-ci-root-tests). - Landing SoR ADR
2026-08-05_landing-external-design-source-of-recordrecords a dated supersession: rollback is not a self-contained single-file zip; live procedure isdocs/agentkit-landing.md. docs/external-plan-review.mdTriage guidelines caveat Write residuals when closeout is depth-capped or Still open is process-only (ADR2026-08-11_plan-audit-residuals-termination).- Audits Claude reviewer default is
sonnet(classifier-capable) so--permission-mode autocan run.advisorModelstaysopus(escalate only). ExplicitreviewerModel: "haiku"remains valid and cannot run auto (ADR2026-08-14_audits-haiku-auto-permission-amend.md). - Cursor hook resolution boundary decided and surfaced:
.cursor/hooks/agent/session-start.shnow emits a degraded-modeadditional_contextdiagnostic (still exit 0, stateless per session) whenresolve_agent_kitfails, instead of a silent{}; the other four adapters (guard-shell,after-edit-schema,secrets-prompt,pre-compact) stay fail-open silent by accepted design. Boundary documented indocs/marketplace.md("Hook resolution boundary"), smoke checklist section 4 aligned, and both branches pinned bynode --test scripts/hook-session-start-diagnostic.test.mjs.
Fixed
- Generator
renderProjectContextfills the Relevant skills table from installed skill/component rows (generated empty-state when none) instead of a hardcoded(none yet)singleton that ignored livecomponentResults. - Preferred-browser
openBrowserno longer short-circuits to detachedspawnwhenspawnFnis injected withoutspawnSyncFn.runPreferredalways usesspawnSync/which(then detach on linux). Hermetic tests injectspawnSyncFn. pnpm landing:syncfails closed whileUPSTREAM-DESIGN-FIX-PROMPT.mdstill has unchecked tasks. Apply the prompt in Claude Design first, or waive with--waive-upstream-prompt/LANDING_SYNC_WAIVE_UPSTREAM_PROMPT=1.- Dogfood Unprocessed parser skips the markdown table row immediately before a separator (so headers like
Notaare not items) and ends the section on a Processed heading even without the word Files. - Dashboard starters
start.mjsandstart-broadcast.mjspassrealpathSyncintoresolveContextConfigPath(parity withserve.mjsand the CLI), so symlink-escape checks are not skipped. - Cursor-awareness inventory walk-up stops at the nearest
.git(file or directory) when that directory has nodocs/cursor-native-audit.md, so a nested consumer checkout does not inherit a parent kit's Open actions. - Public sync: missing or unreadable
scripts/public-sync.denylistfails closed (exit 1) instead of loading zero extra patterns. A present comments-only extra-pattern file still dry-runs. - Public Path C CI: skip factory-only CLI tests when repo-root
CLAUDE.md/.claude/commands/agent-kit.mdorregistry/personas/coreare absent (those paths are not in the public-sync allowlist;registry/**is public-owned). Recurrence oferrors/2026-07-24_public-sync-ci-test-portability.md. - Mission Control Plans tab / Checklist progress fill now matches to-do truth: the numerator counts terminal to-dos (completed + cancelled, mirroring
TERMINAL_TODO_STATUSES/todoStatsindashboard/lib/semantic-model.mjs), so the bar reaches 100% whenever the lifecycle pill reads COMPLETED (previously a plan with any cancelled to-do could never fill past its completed-only count).progressLabelkeeps the honest completed count and appends· N cancelledwhen present;mergePlansForUi's fallback lifecycle mirrorstodoStats.open === 0;enrichPlans.progressexposescancelled/terminalcounters as the single counter SoT. Vitest pins inplugin-ux-validation.test.ts+semantic-model.test.tslock the math, label, fallback, and the completed-pill ⇒ 100% invariant. - Mission Control progress bars render a readable track and non-error colors: track upgraded from the 4px
var(--border)hairline (invisible at 0%) to 6pxvar(--border-active)with 3px rounded ends, andprogressColorreturns green at 100% / neutral blue otherwise — low progress no longer renders red like an error state. Shimmer stays keyed to lifecycleexecutingonly (never queueRole). - Cache lock hardening (multi-workspace install isolation residuals A–D):
acquireCacheLock's ENOENT retry now backs off with the jitteredLOCK_RETRY_MSdelay, re-creates the vanished parent directory, and reports a distinct timeout cause (was a ~3.4k syscalls/sec hot loop with a misleading "Another install may be stuck");releaseCacheLockclaims the owner file atomically (rename + verify + restore-on-mismatch) instead of check-then-rm -rf, so a stale-reclaim + successor republish can no longer lose the successor's lock;writeLockOwneradds a per-write tmp nonce and refreshes are serialized with an in-flight guard; a corrupt/missing owner file is healed on refresh so the fail-closed release cannot strand the lock until stale reclaim. New regression tests cover the ENOENT compensator, successor restore, and refresh heal/no-touch paths. - Install command generic failure path (residual E) now sets
process.exitCode = 1and returns instead ofprocess.exit(1), so the recovery hint cannot be truncated on piped stderr; stale-reclaim mtime semantics documented and pinned by test (residual F: the lock dir mtime tracks the last owner refresh, so reclaim measures liveness, not acquisition age); unusedrmdirimport dropped (residual G). - HealthCenter fallback token pin hardened (health R1): new positive shape anchor for the
return HEALTH_SEVERITY_CHROME[sev] || { … }form fails loudly if the fallback is refactored (??, extraction), and the negative token pin is whitespace-tolerant (\s*) so a line-wrapped return or double space can no longer skip it silently; regex stays bounded to the fallback object. Mutation-verified: H1/H2/H4 fire the pin, H3 fails the anchor. - Factory tracked
git-hooks/pre-commitruns the main/master abort first, then.cursor/hooks/pre-commit/JSON validation and secrets scan when that directory exists (ADR2026-08-14_factory-pre-commit-composed-chain.md). Consumer clones without that directory still get the main-guard. Install/reinstall remains HITL. Pin:scripts/git-hooks-pre-commit-composed.test.mjs(inpnpm test:root-node). agent-kit cursor-awareness --check --jsonincludesinventoryRoot(absolute resolved inventory directory, ornullwhen walk-up fails). RelativeinventoryPath/featuresPathare unchanged.- Cursor-awareness prefs and
--stampread/write.cursor/context/config.jsonunder the resolvedinventoryRoot, not the caller cwd. When walk-up returns null,--stampdoes not create a.cursor/tree at the caller cwd.
[5.1.0] - 2026-08-13
Added
- CLI visual kit: in-process ANSI spinner frames, space marks, and rotating Mission Kit tips on welcome, grouped help, long-running commands, run-plan ticks, and audits wait heartbeats. Motion off under
NO_COLOR,CI, non-TTY, andAGENT_KIT_REDUCED_MOTION=1. Runtime deps stay@clack/prompts,citty,kolorist. See.cursor/memory/decisions/2026-08-13_cli-visual-kit-space-chrome.md. - Mission Kit adoption comms loop (community skill
mission-kit-comms, agent.cursor/agents/mission-kit-comms.md, channel map/calendar/templates, fail-closed local draft script). Drafts only; HITL Ask before any public post. Not Core Pack; not auto-posting; Cursor Marketplace submit stays parked. - Audits atomic wait: launcher persists arm epoch / deadline / remaining budget in
.cursor/context/audit-wait/<slug>.json(not HANDOFF). Chat AwaitShell useswaitSliceSeconds(default 90); CI/headless may use the full remainingwaitTimeoutSeconds(default 900). Early-ready and freshness0|3|4stay. See.cursor/memory/decisions/2026-08-13_audits-atomic-wait-reviewer-fallback.md. - Audits reviewer cascade:
backend: "auto"uses Claude when usable, else Cursor Agent writing the sameplan-monitor-*.mdcontract. Pinnedbackend: "claude"keeps tip+no-op when Claude is missing. Claude quota empty (AGENT_KIT_AUDIT_CLAUDE_QUOTA_EMPTY) is not the Cursor tick API/usage-limit hard-stop. - Audits model routing: Claude review spawn uses
reviewerModel(defaulthaiku);advisorModel(defaultopus) runs only when the monitor marks<!-- audits-advisor-escalate -->. Implementer model is stamped at arm (--implementer-model/AGENT_KIT_AUDIT_IMPLEMENTER_MODEL, defaultauto). Same-family reviewer is refused (including Auto/Auto). The reviewer prompt is a findings-contract against the git delta plus the plan, not a second implement pass. - ADR: Claude Code dynamic workflows and ultracode stay Claude-native. Agent Kit records a docs-only thin adapter (no ultracode runner, no
--backend claudeticks, distinct from kit-load and audits). See.cursor/memory/decisions/2026-08-13_claude-cli-ultracode-orchestration-thin-adapter.md. - Claude CLI kit-load: pack contract (
docs/claude-cli-kit-load.md), generator snippets, factoryCLAUDE.md+/agent-kit, and getting-started / audits / A7 boundary. Install emits rootCLAUDE.mdand.claude/commands/agent-kit.md(skip if present). Distinct from audits,--backend claudeticks, and Action A7 (ADR2026-08-13_claude-cli-kit-load-bootstrap.md).
Changed
- Mission Control Config audits backend is no longer Claude-only:
auto/claude/cursor, plus writablereviewerModel,advisorModel,waitSliceSeconds, andwaitTimeoutSeconds. L0/run-plan,/run-plan-all, and/plan-external-reviewdocument the wait-slice and reviewer cascade. Dogfoodcursor_audit_cursor_auto_fallback_20260813.mdis Processed with a Fix-now pointer to the atomic-wait ADR. /git-proddocuments the authorized post-Ask push formALLOW_MAIN_PUSH=1 git push origin main(inline prefix, not a session export). Baregit push origin mainstays denied. CLI guard already shipped; this closes the L0 gap for agent-kit-startup/agent-kit#38.- Factory dogfood bridge for git-staging dirty-tree spine drift (public issue #41). Acceptance is against factory
stagingwording; public tree updates on the next promote. /handoffand the git-workflow rule now point at the same/git-staginginventory → theme-bucket SoT (autogit/gitupdate.md). Loop/orchestrated aliases already follow/run-plancloseout. Factory has no/recupera-stagingcommand file./run-plantick closeout no longer skips "trivial" HANDOFF/memory diffs. Those paths ship as adocs(memory):/chore(kit):bucket via/git-staging; broadgit addof unrelated monitor WIP into a product commit stays forbidden./git-staginginventories the dirty tree and ships every safe theme-bucket (product vsdocs(memory):/chore(kit):) instead of stop-and-quiz when soft kit paths look "out of the current flow." Warn/add-by-name still forbids sweeping monitor WIP into a product commit. Ask HITL stays on/git-prod. Public issue #41.- Naming glossary tighten (ADR
2026-08-06): Mission Kit / MissionKit = product; Agent Kit = CLI, npm, slash commands, install manifest, and pack only; Mission Control = dashboard shell and tabs. Residual product-voice Agent Kit openers updated (CHANGELOG H1, bootstrap, capability-inventory, cursor-3-features, getting-started, docs index, DEVELOPMENT naming table). npm/CLI/slash/manifest identifiers and marketplacedisplayNameunchanged. - Post-publish D2 dogfood closed: blank-folder
npx @dadado/agent-kit-cli@5.0 installagainst npmlatest5.0.0 passed five assertions + Path C dashboard HTTP 200; checklist After-publish rows and ship-5.0 npm/npx monitor R15 Closed-by updated (no retag). - Forward note (do not rewrite
[5.0.0]): the released evidence-gate "green again" line overstates a staging-red. CI at the predecessor SHA already had Evidence checks success; the red was a local worktree with untracked monitors. docs/evidence/npm-pack-5.0.0-2026-08-11/is a pre-tag proxy (18 packed files) and is superseded by published npm5.0.0(dist.fileCount23, shasum203db8ec…). See that directory README. The JSON is left as history, not rewritten.
Fixed
agent-kit update --checkhonors--registry(local checkout): compare against that source's version and L0 drift instead of the public latest tag; JSONregistryUrl/registryRefreport the resolved source (agent-kit-startup/agent-kit#37).agent-kit dashboard-broadcastwindow and process title used the CLI package foldercliwhen snapshot env was missing. Spawn now setsMISSION_CONTROL_REPO_ROOTand titles from the workspace basename.
[5.0.0] - 2026-08-12
Fixed
-
agent-kit cursor-awareness --check: walk up from--cwdto finddocs/cursor-native-audit.md(fixes false Missing inventory when the shell is underpackages/clior another nested path); consumer/missing-docs path returns an actionable--cwdhint. Native-audit Action table: A5 Done (rootAGENTS.mdpresent), A4 Partial with dual-lane next step, A7 Open with scoped multi-IDE next step; A6 unchanged. -
Pre-v5.0.0 evidence gate: R14-pair mid-batch monitors
plan-monitor-fix-staging-ci-and-queue-end-product-residuals.mdandplan-monitor-close-ship-5.0-npm-npx-install-residuals.mdwith_index.mdAudits rows and regeneratedocs/evidence/knowledge-classification.jsonsopnpm evidence:knowledge-classification:checkis green again (Still open A from ship-5.0 clean pre-git-prod gate). -
Pre-v5.0.0 tag gate: re-verify lint/typecheck/tests/deny-links/evidence/landing/Path-C-pack on staging
71dbbae; persist matrix atdocs/evidence/runtime/ship-5.0-pre-tag-green-gate-2026-08-12.md; R15 Closed-by A/B onplan-monitor-ship-5.0-clean-pre-git-prod-gate.md. No tag; no/git-prod. -
Landing closeout: factory CI runs
pnpm landing:build+landing:build:check; Align Closed-by pointer notes public LICENSE still pending/git-prod; R15 Closed-by appends on the five queue-end monitors (Design SoR re-absorb + clipboard success-path evidence still owed before next sync). -
Mission Control broadcast: live
missionkit.io/mc/open.htmlmatches repo harden (R1 verified by sha256);start-broadcastdegrades to LAN/token print when share encode rejects non-RFC1918 primary LAN (Tailscale 100.64/10); HTTP-level serve auth matrix covers/open+/open.htmlwithout token vs token-gated data. -
Mission Control preferred-browser residuals: CLI uses
resolveContextConfigPath; OS-default and fallback opens detect failure before claiming success; reject win32/cmdmetacharacters" % ^ ' = , +; expand hermetic which/win32 spawnSync tests; ADR trust-boundary + failure-honesty updated. -
Dogfood L0 nits:
/run-plan-allper-plan worker template states orchestrator already skimmed Unprocessed; drop inert PO dogfoodread_scopepaths; promote/continue-plandogfood preflight to its own hard stop (runs regardless ofexternalPlanReview.preflight); overlay hash set +2. -
Dogfood Unprocessed parser: accept markdown table rows and numbered list items; terminate the Unprocessed section on any
Processed Filesheading (stops mixed H2/H3 leaks). -
Knowledge-classification CLI: default to the handoff fixture and refuse baking live
.cursor/HANDOFF.mdinto the tracked ledger unless--allow-live-handoff(prevents repeated Evidence-check red after barenode …mjsregenerations). -
Staging Evidence checks: regenerate
docs/evidence/knowledge-classification.jsonviapnpm evidence:knowledge-classification(handoff fixture) and R14-pair five queue-end plan monitors plus_index.mdAudits rows soevidence:knowledge-classification:checkis green again. -
missionkit.io install / prompt copy CTAs: await clipboard writes, show honest failure UI (not optimistic ✓), and fall back to
execCommandwhen the Clipboard API rejects; decorative "Copy plan path" / "Copy /git-staging" mock buttons marked disabled. Built vialanding:build, deployed to Hostinger; Design SoR re-absorb notes inUPSTREAM-DESIGN-FIX-PROMPT.md. -
Mission Control preferred-browser residuals (A–H): validate
preferredBrowseras an app/binary name (reject path separators and shell metacharacters); attach spawnerrorhandlers and fall back once to the OS default opener with honest starter messages; alignstart-broadcast.mjspreference root withresolveSnapshotRepoRoot; sharenormalizePreferredBrowser/OS_DEFAULT_TOKENSwith the CLI; document per-platform values and factory/CLI-only/dashboard-broadcastslash; expand hermetic tests (win32,spawn-failed,invalid-url, fallback). Pack-gate hygiene I remains on broadcast F8. ADR2026-08-11_mission-control-preferred-browser.md -
Dogfood Broad Intake / sessionStart now accept consumer
## Unprocessed Filesas well as factory###(parser ends on same-or-higher heading);/dogfoodpins H3 on new consumer writes; ADR decision 2 append-only correction; bucket-count prose uses table-as-SoT (no hardcoded numeral);/run-plan-allorchestrator owns Unprocessed preflight (workers skip re-recite);docs/external-plan-review.mdBroad Intake row names the dogfood bucket -
Cache lock release fail-closes when owner metadata is missing, unreadable, or mismatched (no longer deletes a successor's lock during the mkdir → owner publish window); owner.json is published via temp file + rename; install
RootRefusedErrormatches update (process.exitCode = 1+ return) so cleanup/finally stay reachable -
Crew Monitor structural pin (residuals E/F from
close-crew-glyph-avatar-still-open):expectBadgeIsRowSiblingBeforeActornow whole-template-counts${chipHtml}/ chip classes to zero and requires exactly one${badgeHtml}, closing the half-locked sibling gap left by the retired feed-label helper; empty-template assertion names thecrewMonitorRowRenderTemplatemarker for clearer diagnostics -
npm pack --dry-run --jsonnow receives clean JSON on stdout because the CLI dashboard prepack sync message is written to stderr. -
Close multi-workspace install isolation residuals D2/L1/L2/L4/P2/P3: mode-independent root guard for
--yes/$HOME///no-git+no-manifest with--force-rootescape hatch; cache lock ownership token (PID/UUID) with mtime refresh and ownership check before stale reclaim/release; hold cache lock across install/update/add/diff/contribute registry copy; refusedupdateexits non-zero;dashboard-broadcast.mdderivesMC_PORTfrom repo root;install.mdPort B notes chat-install Ask as theconfirmProjectRootequivalent. D3/L3/P1 were already fixed at HEAD (see.cursor/memory/plan-monitor-multi-workspace-install-isolation.mdClosed-by section). -
Close vscode-first-install dashboard onboard residuals C/E/K/J-vscode: skip-if-exists guard for
.vscode/settings.json,.github/copilot-instructions.md, and.vscode/security-review.agent.md; generated artifacts registered inprotectedPathsandPersonalizationResult.items;generator/vscode.test.tspins the guard;docs/getting-started.mdsplitsnpx -y(suppressesnpx's own confirmation) from CLI--yes/AGENT_KIT_YES=1(skips project-root prompt);terminal.test.tspinsisNonInteractivefor CI,AGENT_KIT_YES, andstdin.isTTY. A/B fixed at HEAD; D2 owned by multi-workspace plan; F/G/H/I out of scope. -
Close BIGFIX PTY monitor still-open residuals R1–R7:
buildjob checkout now usesfetch-depth: 0; risk-hotspot scorer no longer depends on a shallow-unresolvable git range; knowledge-classification--checkignores commit provenance fields; ledger census scopes to tracked paths; HANDOFF Gaps updated to honest red-build voice; behavioral tests added forwait_for_pty_progressbanner-baseline and deadline logic; liveness probe for cap/warn concurrent-arm refusal documented as backlog -
Config persona Inherit default sends null to clear a stored mode override (guards merge delete path)
-
Overlay update: end-to-end ledger-absent evidence that known-shipped files refresh while customized peers stay preserved (
docs/evidence/overlay-update-preserve-refresh.md) -
SECURITY.md: private vulnerability reporting preferred first when enabled; public no-detail issue is fallback; PVR enable remains repo-admin HITL
-
CLI welcome helmet outline uses
HELMET_OUTLINEvia trueColor; test asserts rendered ANSI -
CLI welcome grouped help: await citty
Resolvable<CommandMeta>inhelp-groups.tsand accept genericCommandDef<T extends ArgsDef>sopnpm typecheckandpackages/cliDTS build pass after the bare-invoke welcome work -
Regenerated
docs/evidence/knowledge-classification.jsonand tracked three queue-end plan monitors with paired_index.mdAudits rows soevidence:knowledge-classification:checkis green -
Ship
packages/cli/LICENSEin the published packagefileslist so npm tarballs include PolyForm Noncommercial text -
Landing Mission Control demo (
landing-missionkit/remote/mc): refresh#mc-mock-dataCurrent Mission agent toTech Leadand feed labels to design-v2 wire tokens (Eng/SQ). The tracked snapshot does not ship productCREW_ACTOR_MASK/crewActorRole, so the iframe still renders wire tokens verbatim (not long display masks). Correcting the earlier false claim that fixtures were display-masked; demo lexicon restoration waits on product-snapshot regen or Design export →landing:sync(do not hand-editremote/as SoT). Seedocs/agentkit-landing.md -
Evidence anti-overwrite:
generate-codebase-findings.mjs --writepreserves on-disk reviewed coverage batches; non-mutating findings/hotspots checks ignore HEAD-volatilegeneratedAt/ working-tree digest fields -
Backfilled 11 registry skill hashes into
KNOWN_SHIPPED_OVERLAY_HASHESand pin registry SKILL.md coverage in Vitest -
Capability inventory: regenerate launch-announcement anchors, restore SHA-verified counts, document factory-only
/public-issue-triagecounting policy -
Capability inventory: re-verify README positioning anchors against HEAD (Anchor L# column) and point verified-against SHA at
7fdb03c -
Config tab: persona mode "Inherit default" skips empty mode overrides; document
/api/configtoken exemption in write verification matrix -
SECURITY.md: list working private maintainer channel first while public PVR remains disabled
-
CLI welcome nits:
guardmeta(shell, prompt), column-aligned hints, broader CI env detect,hasCliSubcommandtests, helmet outline uses light text color -
KNOWN_SHIPPED_OVERLAY_HASHESwas missing.cursor/skills/core/docs-repo/SKILL.md, so an unedited consumer copy of that skill was misread as customized and never refreshed byagent-kit update. Ledger refreshed to 75 entries (prior hashes retained) -
Overlay anti-overwrite: backfilled current hash for
.cursor/commands/dogfood.mdinKNOWN_SHIPPED_OVERLAY_HASHESand added a Vitest pin that every L0 overlay artifact body is present in the ledger (closes residual L3 drift that permanently stalled unedited consumer refreshes) -
Evidence anti-overwrite (AUDIT-001 follow-through):
generate-codebase-findings.mjsandscore-codebase-risk-surface.mjsrefuse to rewrite reviewed JSON unless--write/--fix; package.json generators pass--write; pin test asserts everyevidence:*:checkscript stays non-mutating -
Risk-hotspot scorer additionally excludes
.cursor/plans/from the product corpus so the manifest is independent of gitignored local backlog files;docs/evidence/codebase-risk-hotspots.jsonregenerated -
Closed staging-evidence R14 still-open residuals A–G: verified R1 allowlist pin reconciliation, corrected
close-staging-evidence-checks-r14-index.mdClosed-by B/C honesty, added HANDOFF Gaps voice / merge-gate ownership / R15 provenance notes toclose-staging-evidence-checks-r14-a-d-residuals.md, and qualified the_index.mdevidence-checks-greentag toevidence-checks-green-at-98e0cba -
Closed MC health healthcenter R1–R3 still-open residuals: removed the fallback-specific negative pin at
packages/cli/src/dashboard/plugin-ux-validation.test.ts(then believed covered by the broader scan), bounded the remainingHEALTH_SEVERITY_CHROMEpin to the object literal scope so unrelatedtoken:strings below the literal do not fail the severity-chrome test, and noted R14 batch monitor hygiene (later corrected as already closed bya9498ca) -
Closed landing Mission Control session production-shot residuals B-H: documented the canonical
missionkit.iocutover and five-asset legacy rollback bundle, differentiated Mission Control tab copy, refreshed inventory wording, aligned the 20x20 logo spec, and exposed row/image labels without a framerole="img"subtree trap -
Landing legacy rollback truth (R1–R5): removed the false self-contained claim for blob
d0e43278cda5; documented that no production-shot single-file artifact exists (CSS-mockup blob11197c8db22f@611c232is the last pre-shot self-contained file); switched both legacy HTML files to root-relative/dashboard/+/assets/production/paths; dropped the stale worktree byte-identity assertion; refreshed source-monitor Audits tags -
Mission Control Healthcenter residuals R1–R3 (post-PR #632): drop unread
tokenfrom allHEALTH_SEVERITY_CHROMEseverities and fallback; correct false comment that tiedtokento[data-sev]CSS; remove redundant E3 pin and assert no chrometokenfield; document SoTdashboard/dashboard.html(never gitignoredpackages/cli/dashboard/mirror) in plan template and plan-routine -
Staging-evidence R14 residuals A/C (post-PR #626/#627): R15 Closed-by cites on public-ci-skip (R1/R4) and landing-v1-v6 (B) monitors for
743de13/ PR #626; R14-pairplan-monitor-close-staging-evidence-checks-r14-index.mdwith its_index.mdAudits row and regenerate knowledge-classification ledger (B/D note-only; merge-gate enforcement deferred to public-ci-skip R8) -
Crew Monitor residuals R1–R4 (post-PR #631): replace inert whole-file avatar↔chip proximity regex with render-block structural pin (
feedSegSpans[0] + chipHtml+ no${chipHtml}between avatar and feed-label); regeneratedocs/evidence/knowledge-classification.jsonand R14-pair the close monitor with its_index.mdAudits row (PR #637/#638) -
Landing v1–v6 monitor residuals C/D/E: split runtime-captured counts from source-of-record values in
docs/evidence/runtime/landing-a11y-a-e-2026-08-01/(newsot-counts.txtwith "not served" header;live-counts.txtreduced to runtime capture); qualify README follow-on as source-of-record not yet served and mark pinned WP URL deprecated; reword wpautop guard comment in landing SoT files to avoid literal<br>(grep-clean); refresh.cursor/project-context.mdproduct version and npm CLI lane4.8.4→4.8.9. A delegated to deploy residuals plan; B to R14 companion. -
Mission Control Healthcenter residuals (E1–E3): widen git Autofix to
git init && git commit --allow-empty(zero-commit repos); unify memory path CTA toCopy pathwith README; drop unusedtokenon aggregateHEALTH_SEVERITY_CHROME.error -
Mission Control Healthcenter residuals (C/E/F/G/I): prune unreachable per-check
errorchrome; remap Autofix forhandoff/git/memory; drop deadhealthCheckKeydown/showHealthInfo/.health-message; scope seven-check test toHEALTH_CHECK_META -
Landing static SoT: lighten
--text-mutedto#7f93a8(WCAG AA on card/gradient); document footer CTA cluster; rewritelive-counts.txtas real newlines; note deadbrguard and unused purple contrast trap
Added
-
Mission Control broadcast Share URL mask:
dashboard:broadcast/agent-kit dashboard-broadcastprint a cosmetic Mission Kit (or BYO) share link (https://missionkit.io/mc/open.html#v1.…by default). The Share URL embeds the live token (same secret handling as the raw token); soft TTL is advisory. Fragment stays client-side; not a WAN relay. Resolver rejects non-private targets; BYO base must be HTTPS (loopback http allowed for local preview). Env:MISSION_CONTROL_SHARE_BASE,MISSION_CONTROL_SHARE_TTL_SEC(0= never),MISSION_CONTROL_SHARE_SHOW_LAN. ADR2026-08-11_mission-control-broadcast-url-mask.md -
Mission Control broadcast share residuals: default share base uses live
…/mc/open.html; pack gate assertsdashboard/lib/**+open.html;--no-openhelp matches Share-primary print; auth-gate tests cover/open+/open.htmlexemption matrix. -
Mission Control preferred browser: shared
dashboard/lib/open-browser.mjsopens at most one OS browser (configmissionControl.preferredBrowser, envMISSION_CONTROL_PREFERRED_BROWSER, CLI--browser);--no-open/MISSION_CONTROL_NO_OPENstill skip. Slash/dashboardstays IDE MCP only;/dashboard-broadcastis one surface (OS preferred or IDE verify). ADR2026-08-11_mission-control-preferred-browser.md -
Broad Intake Unprocessed dogfood bucket (factory
dogfood/README.mdor consumer.cursor/dogfood/README.md##or### Unprocessed Files) on/start-project,/backlog-add, and Write residuals; advisory preflight on/continue-plan,/run-plan, and/run-plan-all. Same triage labels; never auto-analyze. ADR2026-08-11_dogfood-unprocessed-broad-intake-bucket.md -
Community health C–F residuals:
scripts/check-public-deny-links.mjsnow scans.github/**/*.{yml,yaml}(issue-template forms, CI) in addition to markdown, with three new tests (9/9 pass). ADR2026-08-05_community-health-files-live-under-github-dirpoint 5 corrected to "adapted in Enforcement section only".docs/CONTRIBUTING.mdStandards bullet names both repos explicitly (mainfor public,stagingfor factory)..cursor/memory/_index.mdtrailing newline added. -
Design system pointer doc (
docs/design-system.md): Claude Design project id (4451a0e9-5258-45cd-91f7-a837bdcbde81), upstream/downstream surface map, code-wins-on-divergence rule,--text-mutedtoken divergence note. Crosslink added todocs/agentkit-landing.md. Comment added indashboard/dashboard.htmlbeside--text-muted: #6d8094citing the landing AA exception (#7f93a8). Closes residuals A+D from transport monitorplan-monitor-design-system-transport-claude-design.md; B/C/E/F noted as operator-decision or superseded -
CLI bare-invoke welcome: branded Mission Kit helmet ASCII,
agent-kit/@dadado/agent-kit-cliversion line, print-and-exit utility hints (--help,doctor,status,dashboard,init);NO_COLOR/ CI / non-TTY plain fallback; grouped root--help(SETUP / MISSION / DASHBOARD / INTEGRITY). Does not reuse run-plan persona banners. Dual-name ADR2026-08-06_mission-kit-vs-agent-kit-naming -
Factory-only
/public-issue-triageslash command for maintainers: list, classify, comment, label, and close incoming issues onagent-kit-startup/agent-kitwith HITL gates; omitted from L0 install and excluded from public-sync; bridges optionally to dogfood, memory WRITE, or/backlog-add. ADR2026-08-05_factory-only-public-issue-triage-command -
Dogfood inbox notes (2026-08-05): external design source-of-record gaps when a deploy artifact moves off-repo;
/run-plan-allqueue orchestration pitfalls (inferred park written to HANDOFF, refused-command retry, stale audit-session pile) -
Plan monitors (post-hoc):
design-system-transport-claude-design,github-community-health-profile(paired_index.mdAudits rows) -
Crew Monitor real-time rows for two activity classes the operator previously could not see at all.
subagentrows track Task worker lifecycle (running/done/failed) read from the worker transcript's terminal record under~/.cursor/projects/<slug>/agent-transcripts/<parent>/subagents/, labelled with the dispatched worker type and the to-do id lifted from the dispatch prompt.plan_reviewrows point at each recentplan-monitor-*.mdand say whether it is still awaiting triage. Both kinds are additive toMONITOR_ACTIVITY_KINDS; both are bounded by the same recency / size / count discipline as the existing prompt and report collectors, and both degrade to an empty list rather than an error state. Flight Log and the attention inbox keep sole ownership of triage - aplan_reviewrow is a pointer and never marks anything reviewed -
Crew Monitor row density toggle (compact / comfortable) in the card header, stored under the namespaced
agent-kit:monitor-densitykey and restored before first paint. With no stored preference the mode is auto-picked from viewport width (comfortable at >=900px). Comfortable rows wrap the label to at most two lines instead of hard-truncating a token mid-word; thelabelFulltitle tooltip stays required in both modes, because the display label is still capped upstream -
GitHub community health profile:
.github/CODE_OF_CONDUCT.md(Contributor Covenant 2.1),.github/SECURITY.md(private disclosure via GitHub private vulnerability reporting, supported versions, documented Mission Control loopback / sandbox-disabled posture as out-of-scope-by-design),.github/SUPPORT.md(question routing,doctor --jsonfirst),.github/ISSUE_TEMPLATE/(bug + feature forms,config.ymlwith blank issues disabled and contact links), and.github/PULL_REQUEST_TEMPLATE.mdmirroring thedocs/CONTRIBUTING.mdquality gate. All files sit under.github/soscripts/public-sync.manifestcovers them via the existing.github/**include - no allowlist delta.docs/CONTRIBUTING.mdstays the CONTRIBUTING source of truth (GitHub discoversdocs/), and README Contribute plus the docs index carry thin cross-links -
Cursor Marketplace packaging:
.cursor-plugin/plugin.jsonnow declares explicit component paths (rules,skills,agents,commands,hooks) pluslogo,homepage, and an object-shapedauthor. Without those entries the plugin would have listed with zero components, since Cursor's default discovery readsrules//skills//agents//commands/at the repo root and Agent Kit keeps everything under.cursor/.skillspoints at.cursor/skills/core— one level deeper than the obvious path, because discovery only matches direct children holding aSKILL.md— which also keeps stack skills onagent-kit add -
name+descriptionfrontmatter on all 27 files in.cursor/commands/, required by the Marketplace submission checklist.namematches the existing filename slug, so no slash command was renamed -
Landing build pipeline for missionkit.io:
landing:sync(Claude Design zip export →.cursor/context/landing-missionkit/remote/, React vendored and SRI-verified against the hashes the design runtime declares),landing:build/landing:build:check(derives the asset list from the canvas; drops unreferenced stylesheets; self-hosts React; injects a static<title>/OG head for crawlers), andlanding:serve(loopback stage with Range support andno-store, for hands-on testing before deploy). Self-containment is proven by an offline headless render, not asserted: DOM byte-identical with all external DNS blocked, zero unresolved bindings -
Landing deployed to
missionkit.iovia the design-runtime bundle: favicon (assets/logo.svg), Open Graph image (assets/hero-astronaut.png), full Twitter Card withsummary_large_image, andbuild-landing.mjscrawler<head>inject extended to mirror icon,og:image,twitter:image/title/descriptionwith absolutized URLs. P1-1 (YouTube-on-load before modal open) fixed upstream: the demo modal iframe now uses a lazydemoSrcbinding (empty at rest, set only inopenDemo, cleared incloseDemo), so first-paint issues zero external requests.docs/agentkit-landing.mdrewritten for the new pipeline;check:landing-body-equalityguard retired; legacy.cursor/context/landing-agentkit/files kept for rollback reference only -
Public-sync compatibility evidence for the README and public maintainer guides:
docs/evidence/runtime/public-sync-readme-residuals-2026-08-11.mdrecords the allowlist dry-run, guard tests, and deny-link scan -
Multi-workspace install isolation: CLI root-confirm guard (
confirmProjectRoot) on bothinstallandupdatecommands; directory-lock (acquireCacheLock) serializes concurrent~/.cache/agent-kit/registry/refreshes; ADR surfaces matrix (L0 per-project, cache shared, MC per-workspace port);/dashboard-broadcastkill guidance aligned with never-kill-foreign-workspace -
IDE-agnostic CLI install resilience:
--yesflag and non-interactive terminal detection (isNonInteractive) for CI, VS Code output panels, and piped stdin; actionable error classification for EPERM, exit 255, registry 403, and network failures with recovery steps -
Dashboard first-failure UX: structured recovery message when
dashboard/start.mjsis absent in L0-only consumer trees, naming four resolution paths (upgrade CLI, env var, sibling, direct script) -
VS Code onboard path:
generateVSCodeArtifactswired into personalization flow (.vscode/settings.json,.github/copilot-instructions.md, optional.vscode/security-review.agent.md); IDE-agnostic readiness docs with CLI equivalents table and slash-less onboard checklist -
Registry clone error messaging: auth/access vs network vs generic failures with actionable recovery in
resolve.ts -
Dogfood bridge: consumer install-fallback and dashboard-runtime-block notes (2026-08-02); memory errors for npm-cache EPERM/exit-255 and dashboard-host-missing/registry-403
-
Mission Control landing production shots: four PNGs under
assets/production/(Current mission, Checklist, Crew Monitor, Flight Log); design sources stay local under gitignoredassets/design/ -
Mid-batch plan monitors (6) for residual closeouts (crew-monitor R1–R3, docs-indicative A–L, mc-chrome-icon A–F, mc-health R1–R3, public-ci-skip R7–R10, staging-evidence R14 A–D) with
_index.mdAudits rows; knowledge-classification ledger regenerated -
Dogfood note:
/git-prodshould prove tag CI green on the close-release commit before creating or pushing an annotatedv*tag -
CI Registry catalog parity:
node scripts/build-registry.mjs && git diff --exit-code registry/registry.jsonso SKILL frontmatter ↔registry/registry.jsondrift fails the build -
docs/DEVELOPMENT.md: factory topology, local CLI loops, and public-sync awareness for maintainers (root README stays consumer storefront) -
Onboard domain-skills scaffold: after essentials are ready,
/agent-kit-onboardoffers a HITLScaffold domain skills/Defer/Skipgate before finish-setup //start-projectCTAs, reusing install-time personalization/doctor evidence and recording the outcome inonboarding.domainSkills(shipped as squashd00fb50; publicagent-kit-startup/agent-kit#36closed later via residuals with cross-repo evidence comment) -
Queue-end plan monitors (7) under
.cursor/memory/with triage headings;_index.mdAudits rows R14-paired (including crew-monitor + docs-indicative); knowledge-classification ledger regenerated -
Evidence checks merge-gate policy: ADR
2026-08-01_evidence-checks-merge-gate(no silent continue-through-red; HANDOFF Gaps honesty) -
Docs indicative; delivery truth: always-apply read-time section in
docs-professional-standard, ADR2026-08-01_docs-indicative-delivery-truth, tightened external-review prompt/monitor templates (evidence-backed findings; no filler) -
CI private-origin allowlist pin: Vitest asserts
github.repository == 'agent-kit-startup/agent-kit-dev'remains in.github/workflows/ci.yml(Path C remirror guard) -
Static landing deploy artifact
.cursor/context/landing-agentkit/index.html(full document wrapper over redesign SoT) -
Landing Product proof: four alternating MC rows (L/R/L/R) with MC product header chrome (logo + Mission Control + workspace) replacing browser-chrome mockup; production PNGs from
assets/production/; a11y labels per row -
Landing workflow copy: seven narrative sections in
COPY.md(onboarding, orchestration, HITL/triage, DevOps, settings/update, dogfood, MC tabs) integrated fromCOPY-WORKFLOW-DRAFT.mdafter HITL rewrite (version 4.8.9 pin, no autonomous pitch) -
Landing DESIGN-SYSTEM: mockup chrome rewritten from browser window (traffic lights + URL pill) to MC product header; framing invariant updated
Changed
-
Public root
README.mdstorefront rewrite: Mission Kit product voice for strangers on GitHub (PolyForm Noncommercial / source-available /sales@missionkit.io); install and CLI keep real Agent Kit identifiers without ADR paths, private memory links, or dual-name legal essays. Maintainer naming table moved todocs/DEVELOPMENT.md. -
missionkit.io license copy cutover: Claude Design export synced (
landing:sync/landing:build), Hostinger deploy ofdist/, and as-served HTML verified with PolyForm Noncommercial / source-available /sales@missionkit.io(zero unqualified open-source claims).docs/agentkit-landing.mdSEO section flipped from as-served-vs-target to live PolyForm wording. Public-sync allowlist/denylist unchanged (deny-link + dry-run guards pass). Public GitHub license label remains advisory until/git-prodHITL. -
Align Mission Kit public-compliance residuals (A–F): document that PR #698 already staged
783ca90; flip the Crew-lexicon as-served table indocs/agentkit-landing.mdto Design-export labels (Engineering Manager/Squad ·); disclose that the same Design sync refreshedremote/mc/*lexicon incidental to license copy (product SoT / display-mask ownership unchanged); record deployedsha256evidence; add an unqualified open-source wording assertion tolanding:build:check. Public mirrorLICENSEpromote stays operator/git-prodHITL. -
Onboard domain-skills scaffold residuals A–J: closed public
agent-kit-startup/agent-kit#36with evidence citingd00fb50(cross-repoClosesform documented in PR template +docs/CONTRIBUTING.md); documented instruction-only scaffold +.cursor/skills/domain/one-way category; added## Relevant skillsto project-context generator and factory.cursor/project-context.md; HITL fallback free-text + gates table; moved domain-skills command pin tolifecycle/l0.test.ts; dogfood Processed provenance honesty; allowlist pin verified at 6 (CI green on staging). Squash honesty: original 4-phase plan landed as single squashd00fb50(plan file gitignored), so per-tick verdicts are reconstructed from that commit rather than per-phase SHAs. -
Landing v1–v6 CDE still-open residuals (R1–R7): regenerated evidence ledger for green Knowledge checks; corrected stale "not yet live" SoT/README prose against WP-deprecated +
agent.startupkit.com.br301→missionkit.io delivery truth; documentedindex.htmldrift / retired byte-identity (no redeploy); R14/R7 process notes; append-only Closed-by onplan-monitor-close-landing-v1-v6-monitor-residuals-cde.md -
Ship-5.0 npm/npx honesty residuals: go/no-go record restated as NO-GO until CI-green-at-tagged-SHA + gate sign-off; Release Latest / storefront rows marked POST-PUBLISH; cite drift fixed;
docs/npm-publish-checklist.mddistinguishes tree 5.0.0 from registry 4.8.9; pack evidence atdocs/evidence/npm-pack-5.0.0-2026-08-11/npm-pack-5.0.0.json(stdout JSON parseable after prepack stderr fix). Blank-foldernpx @5.0dogfood remains blocked until publish -
Plan audit residuals termination:
/plan-review-triageand continuous/run-plan//run-plan-allpaths prefer Ack and stop or Fix nits only when Still open is nits/process-only or closeout depth is already capped (max depth 1 per theme family); Write residuals must not mint unboundedclose-*conveyors (ADR2026-08-11_plan-audit-residuals-termination.md). Throughput operator knobs documented under external plan review. Unprocessed dogfood Broad Intake visibility is ADR2026-08-11_dogfood-unprocessed-broad-intake-bucket.md(not this process policy). -
Public vs dev README R2–R10 still-open residuals: restamp public-sync evidence
Source SHAto green staging84dbaa3(342 allowlisted files); runsync-public --dry-runcontent denylist in the normal private CI deny-link step (pin count unchanged at 6); document private-filename content invariant beside the paid-spec path exclusion in the sync manifest; append-only A/D/F closeout corrections and a single S1 owner pointer (close-public-ci-skip-r7-r10-still-open.plan.md); CHANGELOG names theDEVELOPMENT.mdprivate paid-spec filename generalization that unblocked denylist sync sincec41efde(8705144); optional capability-inventory line-number assertion deferred (pattern scan only). Shared R14 ledger ownership unchanged. -
Deploy-agent startupkit post-merge residuals S5-S8: append-only R4 shared-owner basename correction (
plan-monitor-prefix), historical S1-S4 honesty vs mergedfcf1de0, allowlist counter-maintenance warnings onsync-publicandpublish-npm(count pin unchanged at 6), removed orphanscripts/check-landing-body-equality.mjs, and aligned DESIGN-SYSTEM deprecated Target line with the Current 301. Shared R14 Evidence ownership unchanged. -
Closed MC health healthcenter N2/N3 still-open residuals: restored a bounded
token:pin on thehealthSeverityChromefallback return object and a positiveconst HEALTH_SEVERITY_CHROME = { … };shape anchor inplugin-ux-validation.test.ts(literal-scoped pin kept; unbounded regex not restored); append-only R15 corrections on the source monitor for the lost fallback coverage claim and the stale R14 hygiene note (a9498capredecessor); acceptance language asserts suite success and exit 0 rather than a hard-coded test count. N1 batch ledger ownership unchanged. -
VS Code first-install residuals closeout metadata (N2/N3): source monitor heading normalized to
## Closed by residuals plan (C, E, K, J-vscode); acceptance wording aligned to shipped skip-if-exists (no merge path). N1 ledger ownership unchanged. -
R14 queue-end still-open monitors: durable triage / Residuals headings plus N1 Closed-by appends staged add-by-name with regenerated
docs/evidence/knowledge-classification.json(pnpm evidence:knowledge-classification:checkgreen locally). Unblocks Evidence gate for sibling residual lanes; does not close product Still open on those themes. -
Mission Control chrome citation R3/R4/R5 still-open closeout: append-only re-cite of parent
271d4d2/PR #504 for mixed-surface lint evidence; Evidence-gate Validation and ledger-regen policy corrections; R15 bottom-up supersession readability ADR; knowledge-classification regenerated for edited monitors -
Mission Control chrome citation residuals R1-R5 closed through append-only monitor corrections: lint evidence reclassified as already recorded, assertion-message pins stabilized, shared ledger and HANDOFF Gaps ownership documented, and the supersession pointer aligned.
-
Public sync slug resolution:
scripts/sync-public.mjswarns on stderr wheneverPUBLIC_REPO_SLUGdiverges from a slug derivable from--url, the configuredpublicremote, orPUBLIC_REPO_URL(not only when the URL env var wins); invalidowner/reposhape exits 1;--self-test-slugcovers precedence. Docs updated indocs/public-launch.mdanddocs/repository-boundaries.md -
docs/design-system.md: drop markdown links into.cursor/memory/(public-deny-link guard) and remove a denylisted private client path from the upstream surface table so CI / public-sync stay green -
seedManagedHashLedgerdocuments that the walk includes user-added non-kit basenames under overlay prefixes (harmless while those names stay outside the L0/pack/skill apply set) -
Docs/copy alignment to missionkit.io Mission Kit 5 positioning under dual-name contract (ADR
2026-08-06_mission-kit-vs-agent-kit-naming): README hero/tagline, consumer docs index/getting-started/CONTRIBUTING/claim matrix/github-about Website,install.mdintro, public launch announcement,project-context.mdversion lane5.0.0, capability-inventory positioning rows; legacyagent.startupkit.com.br/landing-agentkitqualified as redirect/rollback-only. Landing canvas underlanding-missionkit/remote/untouched. -
Consumer and maintainer documentation alignment: the README Mission Control pointer promises production constraints only; getting-started restores copy-only paste destinations, removes the duplicated maintainer three-way loop in favor of a pointer to
docs/DEVELOPMENT.md, and keeps the consumer guide consumer-focused.docs/DEVELOPMENT.mddescribes private exclusions generically (no denylist-triggering private paid-spec filename) so private→public sync dry-run stays green afterc41efde. -
Crew role mask SoT sync (plan
crew-role-mask-sot-sync): glossary ADR display-mask contract updated to wire-short / display-long (CREW_ACTOR_MASK+crewActorEngRole); Eng collision withdrawn at display; team-member framework core-slot lexicon aligned (Tech Lead / DevOps / Project Manager / Developer / Product Owner); landing Mission Control fixture JSON uses wire tokens (Eng/SQ) and Current Mission agentTech Lead. Landing iframe#mc-mock-datalexicon refreshed in residuals Phase 3 (was still Engineering Manager / Squad). Product masks unchanged (already shipped PR #662) -
Crew Monitor row redesign via Claude Design brief (plan
crew-monitor-design-brief-claude-design): tinted initials badge returns as the kind + identity cue; separate kind glyph removed; compaction hides whole fields at breakpoints instead of mid-token ellipsis;Engdisplay split fromkind(delivery → DevOps); plan chip has no max-width cap. Three porting deltas vs the mirrored design recorded in.cursor/context/mission-control-design/remote/v1/ACCEPTANCE.md. Glossary ADR amended; Mission Control visual SoR stays the repo (one-off brief ADR2026-08-05_mission-control-design-one-off-brief) -
Crew Monitor rows are compact and glyph-first. The kind glyph moved to the start of the row (it was mid-label, between actor and verb) and the avatar/initials box was removed entirely. The avatar shipped in #631 and #637-#639 and its removal is deliberate: initials were a lossier copy of the actor string two segments later, and the 18px box pushed the kind glyph off the left edge an operator scans down. Long profession display masks were replaced with the operator's short lexicon (
Engineering Manager->Eng,Squad->SQ,Scrum Master - awaiting gate->PM - awaiting gate, and so on), which retires the previously accepted actor-mask-vs-noshrink tradeoff instead of re-deciding it. (Interim compact-labels pass; design-v2 above restored long display masks while keeping short wire tokens.) Kind ids,#hero-activity, and the.monitor-row*class prefix are unchanged. ADR:2026-07-27_crew-monitor-vs-plan-monitor-glossary -
Delivery rows read
merged, notshipped. The row is derived from a merge/squash entry that already carries its PR number and SHA, andshippedimplied a production promote that/git-stagingnever performed.shippedis retired from the row wording contract's verb list;failedjoins it for subagent runs that end in error -
Crew Monitor column stability: actor and verb segments carry a min-width floor so the metadata column starts at the same x on every short-mask row (long kit agent ids still grow past the floor rather than truncate), and the plan filename now gives up width before the mid segments
-
Domain migration: canonical URLs updated to new domains (missionkit.io, dadado.dev, startupkit.rocks, agentkit.works → GitHub). Legacy domains redirect via 301 to preserve links.
-
Landing source of record moved to the external design project; the design mirror is versioned so the deploy is reproducible from git alone, and the now-duplicate
assets/production/*.mp4/*.webmmasters are gitignored (ADR2026-08-05_landing-external-design-source-of-record) -
Residual closeout plans: composite squash commits trade per-tick observability for batch efficiency; post-hoc verification against the merged state is the documented delivery-truth pattern (ADR
2026-08-08_ledger-regen-policy) -
Deploy-agent startupkit residuals R1-R8: corrected the DESIGN-SYSTEM current URL and its append-only monitor claim, documented shared ledger and HITL evidence paths, aligned the retired equality-guard wording, and added the CI allowlist counter coupling comment
-
docs/cursor-native-audit.mdinventory refreshed: plugin3.0.0→5.0.0, rules 23 → 25, commands 10 → 27, skills 7 → 9, hooks 2 events → 5. Also corrected a stale claim that CLIinitwritesplugin.jsoninto target projects — no generator does -
/plan-review-triage: paced Write residuals for multi-path walks (wave size 2 Tasks; write-confirm collapse when operator authorizes remaining set; per-monitor plans when themes diverge) -
Relocate Mission Control icon/vector sources off repo root into local
assets/design/(removed tracked root.aifiles) -
Memory cite hygiene: mc-chrome-icon Closed-by C/G narrowed (circle/ellipsis intro →
ec64be5/PR #584;>= 1+chip/door →6acb2d7/PR #592; ADR/git-staging§3 amended in place; ellipsis/chip/door pins and thresholds re-derived at HEAD) -
Docs-indicative A–L residuals (D–G, I, K): restore R15 Still open rows on source monitor; prompt template R14 same-commit pairing + single-pipe Audits sample; name
audits-wait-freshsentinel in/plan-external-review; HANDOFF mid-batch monitor pointer; CI registry catalog parity step -
Public CI skip R7–R10 residuals: merge-gate ADR closeout contract (
gh pr checks/ Evidence green before Gaps-none);knowledge-classification.jsonregenerated by05f6713sobuildis green at6d32c57;PUBLIC_REPO_SLUGhonored whenPUBLIC_REPO_URLunset (warn when both set); denylist pin uses tolerant regex; allowlist exact-count pin updated to 6 (landing body equality step) -
Public vs dev README separation: root
README.mdis consumer storefront only; maintainer dual-repo table moved todocs/DEVELOPMENT.md;docs/CONTRIBUTING.mdpoints at Development for monorepo loops; public-sync.manifest comments document the boundary (ADR2026-08-02_public-vs-dev-readme-separation) -
Crew Monitor feed hygiene (residuals C/E/F + D note): drop unreachable empty-segment branch; prune inert chip wrapper CSS; harden avatar↔chip sibling pin in
plugin-ux-validation; document latent flat-label glyph-at-end in glossary ADR -
Public sync slug SoT:
sync-publicderivesgh --repoowner/repo fromPUBLIC_REPO_URL(removed hardcodedPUBLIC_REPO_SLUGfrom CI); docs/ADR note push + gh redirect; allowlist pin exact count 5 + denylist quote variants + skip whenci.ymlabsent -
/plan-external-reviewcommand doc: §What Claude should produce aligned with prompt template (delivery truth first, finding priority, evidence mandate, forbidden filler) -
docs-reposkill version0.1.0→0.1.1(registry.json+ skill frontmatter mirrors) after delivery-truth content wire -
Memory cite hygiene:
plan-monitor-mc-chrome-icon-style-consistencyClosed-by F/C/G/E corrected (exact pins retained; C→6acb2d7/PR #592; G→52a1fc3+ADR; E deferred); close-monitor R15 Closed-by for A–D -
Public CI skip guards: flip denylist (
!=public slug) to allowlist (== agent-kit-startup/agent-kit-dev) on sync-public, publish-npm, and private-only build steps; ADR + public-launch / repository-boundaries / gitupdate docs; verify checklist notes Path C one-release lag -
Crew Monitor feed row: order is avatar → actor → kind glyph → verb → metadata → time; kind chip is glyph-only (no solid fill); avatar carries the kind
*-bgtint -
Landing docs: live URL truth for
https://agent.startupkit.com.br(Hostinger ALIAS + static subdomain); WP/agentkitnow 301 redirects to the subdomain via theagentkit-redirectWordPress plugin -
Landing SEO/a11y: hero promoted to
<h1>,twitter:carddowngraded tosummaryuntil an OG asset ships, andINVENTORY.md/docs/agentkit-landing.mdcurrent URL corrected toagent.startupkit.com.br -
Landing SoT guard:
scripts/check-landing-body-equality.mjs+pnpm check:landing-body-equality+ CI step pinindex.html<body>topage-content.htmlfragment
[4.8.9] - 2026-08-01
Fixed
- Public storefront CI: skip private-only evidence steps (
authority-graph,public-deny-links, findings/hotspots/knowledge checks) whengithub.repositoryisagent-kit-startup/agent-kitso Path C mirrors ofci.ymldo not fail on missing private scripts (v4.8.5–v4.8.8 tags retained)
[4.8.8] - 2026-08-01
Fixed
- Regenerate
docs/evidence/knowledge-classification.json(summary.totalObjectCount682→715) so tag CIevidence:knowledge-classification:checkpasses (v4.8.5–v4.8.7 tags retained)
[4.8.7] - 2026-08-01
Fixed
- Public docs index: drop relative link from
docs/README.mdto denieddocs/evidence/config-tab-write-verification.mdsopnpm check:public-deny-linkspasses on tag CI (v4.8.5/v4.8.6 tags retained)
[4.8.6] - 2026-08-01
Fixed
- Biome import order in
session-start.test.tsso tag CI lint passes after the 4.8.5 typecheck unblock (v4.8.5 tag retained; do not force-move)
[4.8.5] - 2026-08-01
Added
-
Landing page redesign & consumer copy rewrite (plan
agentkit-landing-redesign-copy): STK design system identity, Mission Control mockup tokens, consumer feature copy, and deployment config foragent.startupkit.com.br(.cursor/context/landing-agentkit/,docs/agentkit-landing.md) -
Public Agent Kit landing page note (
docs/agentkit-landing.md) pointing at livehttps://startupkit.com.br/agentkit(WP page id 3001); design inventory and HTML source under.cursor/context/landing-agentkit/(planagentkit-landing-startupkit) -
Crew / Team Member framework (plan
crew-monitor-profession-masking): ADRs for Team Member composition (2026-08-01_crew-team-member-framework), core vs specialist gap inventory (2026-08-01_crew-core-specialist-gap-inventory), and Crew-tab composition contract (2026-08-01_crew-tab-composition-contract); glossary ADR amended with default software lexicon display-mask contract (kind ids unchanged); Crew Monitor chip glosses and actor fallbacks use profession masks (Tech Lead / Scrum Master / Full-Stack Developer / Product Owner / DevOps Engineer; Squad / Engineering Manager / Platform Engineer);crewTeamconfig shape documented as contract-only indocs/consumer-configuration.md(not wired; heavy UI follow-up) -
Cursor update awareness (plan
cursor-update-awareness-auto-dogfood): ADR for changelog-primary detection (2026-08-01_cursor-update-detection-source); CLIagent-kit cursor-awareness --check(opt-incursorUpdateCheck.*, never apply / never Field Reports); L0 slash/cursor-update-awarenessroutes confirmed gaps via Ask →/backlog-addor/dogfood; sessionStart nudge when enabled; docsdocs/cursor-update-awareness.md -
Consumer configuration inventory (
docs/consumer-configuration.md): every consumer-configurable knob in one doc (session config keys, dashboard skin, install-time choices, repo profile, CLI flags and env vars) with where-defined / read-by evidence, a writable-via-tab column, and a copy-paste snippet per knob; pointer added from getting-started (planconsumer-config-inventory-copy-crud) -
Mission Control Config tab copy-CRUD fallback: per-fieldset Copy config.json snippet buttons (Session, Update check, Audits, Agent Personas) that build the fragment from current form values via a shared
collectMissionConfigPayloadand copy to clipboard only (no new write surface); dead-control hints (backend is claude-only;updateApply.autonever writable); actions bar names the manual paste path for server-down / non-loopback / read-only deploys -
Mission Control responsive grid (plan
mc-grid-responsive-ui-design-tokens, Phase 1): mid-width 2-column overview grid (701-1023px) with row-major IA collapse, very-thin sidebar mode (max 339px) with tighter ladder values, and a fullscreen zen toggle (header enter button, floating exit, Escape restore); grid extends the locked Current mission → Flight Log → Checklist → Crew monitor IA without reopening it (ADR2026-07-29_mc-main-tabs-order) -
Crew Monitor row wording contract (plan
crew-monitor-wording-readability): natural-voice verbs (running/awaiting/done/parked/shipped) replace robotic· tick ·/· step ·/· handoff ·separators; todo id / gate / progress count leads the label and the plan filename moves last; actor fallback is a short humancrewlabel instead of the full plan filename;.feed-labelrenders structured spans so the low-signal plan filename ellipsises first, with the full label on atitletooltip (ADR2026-07-27_crew-monitor-vs-plan-monitor-glossaryamend,2026-07-27_mc-flight-log-paneldecision 17 amend) -
Mission Control icon design-system sweep (Phase 2): 16px / stroke-1.5 / currentColor / round caps-joins contract enforced across
spaceIconSvgat all render sizes; four sub-stroke glyphs (radar, gear, rocket window, chip) redrawn above the legibility floor,more-sectionsdots respaced to positive clearance, header home icon door widened; legibility floor documented and pinned by a new UX test suite -
Mission Control card and empty-state unification (Phase 3): card surfaces on the overview / health / config families consolidated onto the
--mc-card-padding/--mc-radius-*/--mc-space-*density ladder (new documented--mc-card-padding-densetoken); denser list rows (terminals/memory) and pill badges may keep tighter radii off the 4/8/12 ladder; healthcenter severity chrome unified into one{tone, label, token}mapping with presence-pulse halo and fallback-hex hygiene (presentation only, check semantics unchanged); empty states scale with card density across every viewport mode; both skins verified skin-neutral -
Mission Control "busy outside the plan" live state (Phase 4): text-only busy chip on Current mission and Flight Log headers when terminals show fresh run-loop activity while the mission is not executing; derivation shares the Crew feed run-loop evidence with a 10-minute freshness window (
BUSY_OUTSIDE_PLAN_FRESH_MS), rides the existing advice-family blue tokens on both skins, and leaves Flight Log kinds, Gaps voice, and locked labels untouched -
Mission Control UX overhaul (plan
mc-flight-log-dynamic-action-command): dot semantics table (colored dots signal good / important / attention / neutral-idle, always paired with a label or icon) applied across all tabs, URL-hash deep-linkable tabs, and a uniform copy-only CTA pattern -
Flight Log one-command contract: every entry kind (Gaps NOW/Earlier, operator Warnings, quiet open-triage) renders one dynamically-labeled action button (
Copy fix prompt/Copy recovery prompt/Copy follow-up prompt/Copy triage command); Gaps/Warnings compose prompt + path, quiet open-triage copies/plan-review-triage <path>only (ADR2026-07-27_mc-flight-log-paneldecisions 11/13) -
Mission Control tab redesigns: Config grid form with Save pinned on top; Memory live recent-errors panel with green/red icon panels and error-o-meter KPIs from
.cursor/memory/errors/; Git promotion flow lanes + readable commit graph + staging-hygiene hints; Health vitals diagnosis dashboard with per-problem Copy fix prompt CTAs; Commands / Skills / Agents card grids with copy-only CRUD CTAs and registry-driven lock badges; Crew Monitor timestamped feed with agent initials + action; Plans v2 actionable rows with live progress bar from frontmatter to-do counts; Processes live narrated list via deterministicdescribeProcessheuristics (no LLM; accepted design for local dashboard) -
Design evidence: nine catalogued UX prints under
.cursor/context/mc-ux-prints/with per-print analysis and per-tab issue inventory -
/dogfoodslash command ships as an L0 artifact (packages/cli/src/lifecycle/l0.ts+ Port B install table), closing the packaging gap that left consumers without the command file (EXT-201) -
.cursor/context/config.example.jsondocuments the advisorydogfood.factoryRootkey referenced by the/dogfoodcross-repo bridge (EXT-208) -
/dogfoodslash command for filing private dogfood notes into factorydogfood/or consumer.cursor/dogfood/, with optional public-issue HITL path (never auto-creates issues or Field Reports) -
Factory self-consumer local apply loop:
agent-kit update --seed-overlayseeds the managed-hash ledger on first update; docs indocs/CONTRIBUTING.md,docs/bootstrap.md, anddocs/getting-started.md -
ADRs for dogfood factory/consumer lanes, ingest contract, and factory-as-pseudo-consumer local apply loop
Fixed
- Landing G/H closeout (
close-queue-end-t-r-landing-residuals): annotate curated PNG byte-identical copies in INVENTORY; reconcile COPY.md CTA hierarchy to shipped GitHub-primary buttons; R15 Closed-by on T/R + landing monitors - Landing A–E (
close-queue-end-t-r-landing-residuals): publish page 3001 as Custom HTML (wpautop brs cleared); WCAG AA contrast tokens (--blue-cta/--blue-pill/ secondary muted);:focus-visibleon.ak-btn; demote landing hero toh2; document page excerpt vs theme meta description - U4 terminal snapshot (
close-queue-end-t-r-landing-residuals): trim partial first body line on windowed over-cap path; document 4KB head-meta contract (U5 note) - U2/U3 test hygiene (
close-queue-end-t-r-landing-residuals): ENOENT fallback spawn test emitscloseaftererrorso the settled guard is exercised; remove tautological actor-mask length pins fromplugin-ux-validation.test.ts - U1 / T6 honesty (
close-queue-end-t-r-landing-residuals): liveagent-kit cursor-awareness --check --jsonrecorded underdocs/evidence/runtime/cursor-awareness-u1-2026-08-01/; append-only T6 Closed-by correction onplan-monitor-close-two-monitor-still-open-residuals.md; R14 stage of mid-batch T/R + landing plan monitors with_index.md - Residuals T1–T8 + R1/R2/R4/R5/R7 (
close-queue-end-two-monitor-t-r-residuals): Positioning inventory counts 25/89; cursor-awareness stamp-guard reachability test + one-shot advise/stamp docs; sessionStart changelog-ahead / single-fallback hook tests; terminal snapshot head+tail window viaTERMINAL_HEAD_META_BYTES; Crew actor-mask noshrink acceptance + Squad outside core slots; composition ADRregistry/schemas/deferral; R14 monitor+_index same-commit staging;update.test.tstimeout 15s under parallel load - Residuals A–E + R1–R8 (
close-two-monitor-still-open-residuals): Biome format onplugin-ux-validation.test.ts; terminal head-meta + tail-body (dashboard/lib/terminal-snapshot.mjs) so over-cap files keep pid/cwd/exit; restoreupdateApply.autosilent L0 overwrite risk copy; dogfood monitor Closed-by count 660→682; glossary ADR plan-segment wording; Cursor changelog extract anchors to release labels + plausibility bound (stops49.511stamp poison); sessionStart nudge gated onchangelog-ahead; spawn timeout above fetch + double-fallback guard; capability-inventory 27/18 counts; conveyor reverse pointers; staging R14 reinforce; network closeout expectation doc - Knowledge ledger CHANGELOG object count matches
summary.totalObjectCount(682) indocs/evidence/knowledge-classification.json(EXT-210; refreshed after queue-end monitor land) DOGFOOD_INBOX_HINTresolution documented: hint stays unconditional because/dogfoodships as L0 (EXT-201); no lane-conditional guard required (EXT-212)- Crew Monitor tooltips use pre-truncation
labelFull(plan filename restored onhandoff/agent_steptitles); plan segment marked fromrefs.plan; feed separators include spaces for readable row copy; quiet open-triage copy drops the duplicated path line; Activity tab stays on plain.activity-label(residuals plan Phase 1) - Mission Control grid residuals: fullscreen exit clears top-tabs; layered Escape dismisses menus before exiting zen; header transport consumes
healthSeverityChrome(degraded stays orange); terminal lastOutput tail-slices capped files; very-thin sidebar lets Crew feed actor/verb ellipsis; legibility-floor pins raised (residuals plan Phase 2) - Consumer configuration inventory adds an
implemented?column; Config tab gains copy-only snippets for never-writableupdateApply.auto/dogfood.factoryRoot(allowlist unchanged); clipboard-failure toast truncates long snippets; durable write-path matrix atdocs/evidence/config-tab-write-verification.md(residuals plan Phase 3) - Knowledge classification fixture lane: generate and check both use
--handoff-fixture; artifact stamps fixture path;update.test.tsfixture importsKIT_VERSION; npm publish checklist requiressync-cli-dashboard.mjsbefore Path C promote; five queue-end monitors carry## Closed by residuals plan(residuals plan Phase 4) - Risk-hotspot scorer is a pure function of committed ledgers: churn derives from
delivery-reconciliation.jsonrows only (no livegit diffon frozen SHAs), sodocs/evidence/codebase-risk-hotspots.jsonreproduces in shallow CI clones (EXT-203) - Knowledge classification corpus is git-index (tracked) files only; gitignored
.cursor/plans/**no longer leaks intodocs/evidence/knowledge-classification.json; HANDOFF-listed gitignored plans are reported asmissingPlans; the--checkstaleness comparison normalizes commit provenance so the artifact is no longer stale-by-construction after any commit (EXT-203) agent-kit updatepreservesinstalledAtwhen no version change occurs andupdate.test.tsasserts the preserved value (ADR factory-pseudo-consumer decision 4, EXT-205)- CHANGELOG hotspot counts match the committed artifact tally (90 pending:audit-risk-hotspots, deferred:census 1820, 91 reviewed) (EXT-204)
dogfood-command-pseudo-consumer.plan.mdmarksphase3-fix-personalization-preservecompleted, matching the shipped personalization preserve fix (EXT-206)agent-kit updatepreservesmanifest.personalizationandoverridesinstead of dropping them during no-op L0 syncssessionStartdogfood inbox hint now recognizes both factorydogfood/and consumer.cursor/dogfood/unprocessed files and mentions/dogfood- Public storefront: add sync-allowed
docs/five-layer-claim-matrix.mdandpnpm check:public-deny-linksto prevent README→denied-path regressions - Capability inventory: positioning table row count 87→89; CHANGELOG no longer claims every cell is verbatim
- Authority graph: registry publicationRoute is public-PR Phase B SoT, not private sync-public (AUDIT-004)
- Public sync: replace remaining
forEachwithfor...ofsobiome check scripts/sync-public.mjsis clean (AUDIT-006) - Knowledge classification focused tests: assert current HANDOFF active/parked counts and archive storefront path (AUDIT-003)
- Evidence ledgers:
batchIdis the fullcontentHash(no scheme-prefix truncation); disposition rows de-duped; hotspot/findings coverage counts sum to unique batches - Evidence scripts:
evidence:codebase-findings:checkandevidence:risk-hotspots:checkno longer regenerate ledgers (prevents wiping consolidated hotspot reviews; AUDIT-001) - Install/docs Path C honesty: consumer guidance names the published floor (
4.8.2onward) instead of relative "until that publish" hedges; Port B registry fetch prefers Port A and requires Ask before alternate URLs (RC-001, INSTALL_MD_MISSING_VALIDATION) - Drift/capability inventories: replace stale ahead-count and closed surface-census claims with lane-qualified freshness metadata (RC-003, RC-006)
- Public sync: exclude
docs/evidence/**from the allowlist and hard-prohibit it so generated ledgers no longer trip the denylist (closes SYNC_DENYLIST_EVIDENCE) - Public sync: reject path traversal / escaping symlinks, allowlist GitHub remotes only, and redact tokens in sync errors (closes SYNC_PUBLIC_* / PUBLIC_SYNC_MANIFEST_* hotspot findings)
- CLI:
agent-kit --versionreports package version via cittymeta.version(closes CLI_VERSION_FLAG) - Mission Control: soft wall-clock budget skips optional collectors so
dashboard-data.mjsfails soft under load (closes MC_DASHBOARD_DATA_SLOW) - Git pre-push: refuse unsafe remote ref names and warn that
--no-verifyskips tag immutability (closes GIT_HOOKS_*) - Authority graph: CLI dashboard copy is a generated output (not a writable mirror); CI runs
evidence:authority-graph:checkand refuses a trackedpackages/cli/dashboard/ - npm storefront README:
packages/cli/README.mdships in the packed tarball;scripts/verify-cli-dashboard-pack.mjsasserts non-emptypackage/README.md(closes PLUGIN_README_ABSENT for the CLI package) - Queue consolidate helper:
--rewrite-queuevalidates/normalizes--outcomes(including multiline) before any HANDOFF write and applies Plan/Mode/queue/cursor/status/outcomes as one atomic temp+replace rewrite (closes QUEUE_REWRITE_NONATOMIC) - Audit launcher sessions: names are
agent-kit-audit-<ws8>-<pid>with an 8-hex workspace token; cap/warn/reap only count or dispose strict workspace-owned sessions (closes AUDIT_SESSION_UNSCOPED); macOS Terminal spawn writes a temp runner instead of embedding shell_cmd in AppleScript
Added
- Five-layer README claim matrix:
docs/evidence/five-layer-claim-matrix.mdclassifies prompt/HITL, context/memory, safeguards, iterative review, and workflow coordination as shipped core, optional pack, planned, or unsupported with lane-qualified evidence - Independent final audit matrix:
docs/evidence/independent-final-audit.jsonplus operatordocs/evidence/release-gate-checklist.md(BIGFIX Phase 10) - Cross-repo parity matrix:
docs/evidence/cross-repo-parity.jsonrecords private/public/npm/release/registry/Marketplace lane verdicts and clean-room evidence (BIGFIX Phase 9) - Guidance claim matrix and stale-claim gate:
docs/evidence/guidance-claim-matrix.mdplusscripts/check-guidance-stale-claims.mjs(blocks revived Path C / drift hedges) - Memory index gate:
scripts/validate-memory-index.mjsrequires everydecisions/anderrors/file to be linked from_index.md; supersession Status applied for BIGFIX proposal links (docs/evidence/memory-adr-reconciliation.md) - Plan review audit
plan-review-repo-wide-evidence-functionality-bigfix: Phase 5 consolidation verified against the committed artifact (90 pending:audit-risk-hotspots, deferred:census 1820, zero-unassigned partition, ownership map intact) - Finding-to-remediation ownership map: all 64 ledger findings (6 inherited + 58 hotspot) carry
ownerRemediationPhase 6 owners (fix-confirmed-orchestration-defects,fix-package-storefront,remediate-code-findings, docs rebuilds, ornone-required);CLI_VERSION_FLAGrestored into inheritedFindings from runtime evidence - Hotspot audit evidence (tick 5 / complete): 90 risk hotspots pending:audit-risk-hotspots; coverage 91 reviewed batches (58 newFindings preserved); deferred:census 1820
- Hotspot audit evidence (tick 4): findings ledger to 58 newFindings / 81 reviewed batches; hotspot set 80 reviewed + 10 pending (deferred:census 1820)
- Hotspot audit evidence (tick 3): expands findings ledger to 46 newFindings / 56 reviewed batches; hotspot set now 55 reviewed + 35 pending (deferred:census 1820); dispositions reconciled by contentHash
- Hotspot audit evidence (tick 2): expands
docs/evidence/codebase-findings.jsonwith nine additional findings (AppleScript/tmux session issues in plan-external-review, git-hooks bypass/injection, sync-public path traversal and command exec, manifest inclusion bypass); coverage 31 reviewed batches; hotspot dispositions reconciled by contentHash (60 pending, deferred:census 1820) - Hotspot audit evidence (tick 1):
docs/evidence/codebase-findings.jsonadds seven findings from the top risk batches (high: plan-external-review background launch sanitization; medium: audit session lifecycle, install.md registry validation, shell-guardALLOW_MAIN_PUSHbypass breadth; plus positives for resolve.ts and the risk scorer);docs/evidence/codebase-risk-hotspots.jsonmarks five hotspot batches reviewed (85 remain pending) - Deterministic codebase risk-hotspot scorer:
scripts/score-codebase-risk-surface.mjsranks unique content batches from authority criticality, missing tests, publication route, inherited findings, security path globs, and delivery churn; emitsdocs/evidence/codebase-risk-hotspots.json(top-15 per domain + global top; non-hotspotsdeferred:census);pnpm evidence:risk-hotspots/:check; ADR2026-07-30_bigfix-phase5-risk-hotspots-not-census - ADR
2026-07-30_evidence-policy-lane-qualified-hierarchy: lane-qualified evidence classes, conflict hierarchies, anti-circularity and supersession rules validated against the three BIGFIX ledger fixtures - Authority graph generator:
docs/evidence/authority-graph.jsonmaps 15 artifact families from authority through generators, mirrors, consumers, and publication routes; validates zero cycles, zero undeclared multiple authorities; generatorscripts/generate-authority-graph.mjswithpnpm evidence:authority-graphand focused tests - Runtime evidence for Phase 3 CLI/install packaging audit:
docs/evidence/runtime/audit-cli-install-packaging-2026-07-30/(matrix, command logs, three code-confirmed findings: broken--version, public-sync denylist hits in evidence ledgers, missing plugin README) - Runtime evidence for Phase 3 orchestration audit:
docs/evidence/runtime/audit-orchestration-runtime-2026-07-30/(behavior matrix, failure injection, 59 + 233 focused tests, and findings for non-atomic multiline queue rewrite, unscoped audit sessions, and slow Mission Control data generation) - Delivery reconciliation artifact:
docs/evidence/delivery-reconciliation.jsonclassifies eight cross-lane states, eight contradicted claims, and eight remediation items against frozen file, history, artifact, authority, and runtime evidence - Deterministic knowledge classification ledger:
docs/evidence/knowledge-classification.jsoncovers 682 plans, memory, ADR, monitor, context, project-context, and index-row objects with zero unclassified; generate and check share the--handoff-fixturelane and stamp the real handoff input path (EXT-211); the census corpus is git-index (tracked) files only, so the artifact is reproducible in a clean clone; separates epistemic labels from HANDOFF active/backlog/parked state and records reproducible working-tree freshness identities - Audit launcher post-spawn progress gate: after an autonomous background spawn,
plan-external-review.shsamples PTY scrollback (tmuxcapture-pane, screenhardcopywith an explicit window target) for a grace window (AGENT_KIT_AUDIT_PROGRESS_TIMEOUT, default 60s,0disables) before entering the monitor wait; a silent PTY is reported as a failed launch, disposes only the session it spawned, prints the paste fallback, and soft-fails instead of burning the full--wait-timeout; channels without a scrollback API degrade to advisory - Audit session cap and dispose policy: the launcher counts detached
agent-kit-audit-*sessions before spawning, warns atAGENT_KIT_AUDIT_SESSION_WARN(default 5) and refuses to spawn atAGENT_KIT_AUDIT_SESSION_CAP(default 20); reaping is opt-in (--reap-audit-sessions/AGENT_KIT_AUDIT_REAP), covers detached kit-owned sessions pastAGENT_KIT_AUDIT_REAP_MIN_AGE(default 3600s) only, never touches attached sessions, and previews under--dry-run - ADR
2026-07-30_audits-pty-progress-gate-zombie-policy: PTY progress gate, zombie session lifecycle, and exit 3 as timeout-only; follow-on to wait-freshness and headless-terminal honesty docs/capability-inventory.md: per-capability catalog of every shipped surface (25 slash commands, 25 rules, 13 named subagents, 9 skills, 5 Cursor-native hooks, 3 Git hooks, 17 CLI commands plus 5 subsystems, 12 Mission Control sections, 7 registry packs, 3 personas, root and kit scripts, templates), with counts verified against the filesystem; inventory only, no positioning prose- README: demo YouTube link at the top (after H1) for the public storefront and private factory README
- Docs-contract test pinning staging lint-evidence clause across git-staging / run-plan / gitupdate; ADR for dashboard-CSS
none applicable+ plugin-ux-validation coverage agent-kit doctor/ hooks-health: soft advisory when versionedgit-hooks/*differs from or is missing under.git/hooks/*(install remains operatorcp; seegit-hooks/README.md); does not flip hooks status alone- Consumer L0 overlay: managed-content hash ledger (
.cursor/agent-kit.managed-hashes.json) preserves customized agents/skills/commands on update while unedited kit files still refresh; ADR2026-07-29_consumer-l0-overlay-agents-optional - Shell-guard R3: documentation and
agent-kit doctorwarning whenALLOW_MAIN_PUSH=1is session-exported (disables main-push protection for all agent Shell commands until unset)
Changed
- README / CLI storefront: five-layer production-agent positioning with explicit non-claims (no autonomous self-improvement, no general graph runtime, no hosted control plane); Mission Control called out as a local workspace cockpit;
packages/cli/README.mdclarifies HITL operating-layer install scope - Audits exit-code honesty in L0 and docs:
/run-plan,/run-plan-all,/plan-external-review, anddocs/external-plan-review.mdstate that exit3is timeout-only, that a monitor appearing later (or from a different arm or queue position) never upgrades it to success, and that exit4now also covers a silent-PTY early abort and a session-cap refusal docs/capability-inventory.md: positioning-surface table recording every identity-bearing string with its real line number, current text (quoted literally where short; elided or paraphrased for long blocks), and publication route (allowlist-synced,public-repo-PR-only, orprivate), each route citing the decidingscripts/public-sync.manifestrule; confirms_legacy/**is allowlist-synced, so its stale descriptions ship today, whileregistry/**is excluded and routes through a public-repo PRdocs/capability-inventory.md: themed delta section narrating what shipped since the 4.4.0 anchor across 11 themes (Mission Control, multi-plan queue orchestration, autonomous external review, backlog CRUD, agent personas, quota hard-stop contract,/hotfix, consumer autoupdate check, Path C packaging, repository readiness, consumer overlay protection)- CHANGELOG
[4.8.0]: re-file entries that were Added in substance (Flight Log panel, opt-in LAN broadcast, audit launcher wait/freshness flags, related ADRs) out of### Fixedinto### Added; entries moved verbatim - Staging-ready lint gate:
/run-plandocuments dashboard-CSSnone applicable+ plugin-ux-validation clause (parity with/git-staging);autogit/gitupdate.mdno longer listsdashboard/as Biome/ESLint scope (dashboard.htmlis outside Biome) - Handoff template + plan-handoff rule: Flight Log Gaps-voice writer guidance Live → NOW (matches shipped UI); quiet Flight Log placeholder NOW +
aria-label="No Gaps now"pinned in plugin-ux-validation; ADR2026-07-27_mc-flight-log-panelEarlier:hovermuted /:focus-visiblefull kind token - Docs:
agent-kit-manifestlists three.cursor/kit files (addsagent-kit.managed-hashes.jsonwith commit recommendation);layers-specscopes the golden rule to agents/skills/commands overlay trees (rules still clobber);migrate-consumernotes committing the ledger - Mission Control Healthcenter: agents check
autofix: null(No Autofix mapped) becauseokis constant-true; failDetail marked intentionally unreachable - Dogfood / local
agent-kit(PATH link topackages/cli/dist): after the guard-shellALLOW_MAIN_PUSHfix, runpnpm --filter @dadado/agent-kit-cli buildso the resolved binary honors the env gate;packages/cli/distis gitignored, so the rebuilt bin ships to other machines only on the next npm publish / promote - Mission Control Doctor Agents check: L0-optional (empty
.cursor/agents/is not a hard fail; check idagentsretained) - Mission Control Flight Log: current Gaps card label Live → NOW (Earlier / All clear unchanged; header SSE
#statusLabelLive unchanged); ADR amend2026-07-27_mc-flight-log-panel.md - Mission Control Flight Log: Earlier
:hoverstays mutedcolor-mix;:focus-visibleuses full kind token for keyboard contrast; base ring uses--border-active - Mission Control Flight Log UX pins: NOW hover
border-colorper kind, Earlier hovercolor-mix, whitespace-tolerant--accentanti-regression - Mission Control Flight Log: behavioural
new Functiontests for quiet-gate helpers (isFlightLogQuiet/resolveFlightLogCurrentand siblings) - Close triage batch residuals: Closed-by appends on flight-log hover, close-audit, and git-prod-promote monitors (R14/R15); plan
close-triage-batch-residualsexhausted - Docs: layers-spec / agent-kit-manifest / migrate-consumer / bootstrap describe overlay protect without blanket
agents/**globs
Fixed
- Consumer overlay tests: pack-installed agent (clean-code →
cleancode-refactor) customize then reinstall assertspreserved-customized; L0 user-agent check restated as non-membership evidence - Consumer overlay: ledger-absent first
updateno longer clobbers customized kit-owned agents/skills/commands; compare local content to known shipped hashes (Option A) so unedited kit files still refresh and seed the managed-hash ledger - Docs-contract staging lint-evidence ADR pin:
existsSyncskip when.cursor/memory/**is absent so public mirror CI does not ENOENT afterv*sync - Guard shell tests:
afterEachusesdelete process.env.ALLOW_MAIN_PUSH(not= undefined); explicit deny asserts for unset andALLOW_MAIN_PUSH=0; thin-adapter ADR amend documents authorized/git-prodenv exception - Guard shell: narrow
ALLOW_MAIN_PUSH=1to documented/git-prodforms (git push <remote> main/HEAD:main); still deny--force/-f/--force-with-lease/--no-verify/prod/master/--all/--tags(and force refspecs) even when the env is set; bare push without env stays denied - Guard shell: honor
ALLOW_MAIN_PUSH=1(inline before env strip, or process env) so authorized/git-prodgit push origin mainis allowed; bare pushes stay denied (parity withgit-hooks/pre-push) - Guard shell: strip all quote characters in push refspec normalization so prefixed/embedded forms (
+'main',ma'in', …) deny like surrounding quotes; non-regression allows for staging/mainline hold - Guard shell: strip backslashes in push refspec normalization so shell-collapse forms (
\main,ma\in,mai\n) deny like quotes; staging/mainline-like branches still allow git-hooks/pre-push: block force-update/delete ofrefs/tags/v*unlessALLOW_TAG_FORCE=1(new tag creates still allowed; aligns with gitupdate §9.5)- Close queue-end five-monitor residuals batch: queue-end triage Write residuals closed remaining items from five mid-batch monitors (PRs #519–#529) without emptying Still open tables per R15 hygiene; ready for promote
- Close queue-end BIGFIX five-layer residuals: nine to-dos shipped as five direct commits on
stagingrather than through PR-per-phase; PR-per-phase remains the intended delivery contract and this deviation is documented for the parent plan
[4.8.4] - 2026-07-29
Fixed
- Public storefront tag CI: skip
sync-publicandpublish-npmwhengithub.repositoryisagent-kit-startup/agent-kitso mirrored workflows do not fail on missing private-only secrets - Mission Control Flight Log: hover/focus border+outline follow typed kind palette tokens (ok green, advice/prompt blue, residual yellow, warning orange); Earlier stays muted; remove unset
--accentyellow double ring
Changed
- Mission Control Health (More → Health): Healthcenter UI for the same seven checks with live severity, expand/detail, and copy-only Autofix CTAs on both Interface Skins; snapshot error distinct from per-check fail
- Mission Control chrome icons: align
spaceIconSvgshell to refresh/nowMetaIconSvg(stroke 1.5); redraw Home house as one coherent glyph; add Skins palette affordance on More menu group label; leave logo assets untouched - Mission Control: main nav, mobile stack, and desktop 2x2 grid order is Current mission → Flight Log → Checklist → Crew Monitor (first nav label matches Current mission)
- Docs: public-launch + repository-boundaries state mirror skip and private-only
PUBLIC_REPO_TOKEN; verify checklist for next publicv*tag
[4.8.3] - 2026-07-29
Fixed
- Guard shell: strip surrounding quotes in push refspec normalize so
git push origin 'main'and"+main"deny - Biome format: compact quiet-cap / classifier parity asserts in
plugin-ux-validation.test.tsafter PR #496 - Flight Log quiet-cap: drop hardcoded fallback
5; use SoT field only (missing → 0) and widen UX assertion (residual E) - Flight Log classifier parity: scope shared-literal asserts to
classifyFlightLogMessageKind/flightLogMessageKindbodies sonormalizeHandoffGapscopies cannot satisfy them (residual F) - Secrets scan: mask
json-secret-kv("apiKey": "…") values in excerpts the same way as env assignments - Guard shell: normalize push refspecs (
+/refs/heads/) before protected-branch deny sogit push origin +mainandrefs/heads/mainare blocked - Flight Log: shared
isFlightLogQuiet(d)/resolveFlightLogCurrent(d)so fingerprint and renderer agree when Plan is none and Gaps come from handoff fallback - Biome format: split two statements on one line in
plugin-ux-validation.test.ts(unblockspnpm lint/ tag CI) - Session-start hook: tests for readiness parsing + HANDOFF excerpt assembly (
buildSessionStartAdditionalContext) /git-prodpre-tag gate requirespnpm typecheck+pnpm test; §12.5 documents post-tagmainexception, scoped Path C smoke, and npm-publish-checklist gains durable cross-lens matrix + partial-row convention- Doctor hooks health: adapters must exist, be executable, and CLI must resolve; guard shell covers
HEAD --/checkout ./ bare push on protected branch; secrets scan masks excerpts (hook omits raw spans); hand-install chmod +x in install.md + bootstrap - Broad Intake Write-residuals invariant pinned in external-reports doc contract; Flight Log classifier parity covers all shared regex groups; classify pre-truncation (F4)
- Flight Log quiet open-triages: gate
flightLogFingerprinton quiet Gaps+Warnings; derive cap/kind from SoT; build quiet lane from external reports (not starved attention) TRIAGE_HEADING_RE/isReportTriaged: match only durable headings (Triage note/Follow-up plan/Residuals plan); stop treating tick headings that nametriage-*to-do ids as triaged (shared SoT indashboard/lib/triage-heading.mjs+ CLI parity)- Path C Mission Control on macOS: escape
@/$in Perl detach-start paths sonode_modules/@dadado/agent-kit-cli/dashboard/serve.mjsis not stripped by array interpolation (escapePerlDoubleQuoted) - Public sync content guard: avoid denylist/secret-pattern false positives in CLI test fixtures (
field-report-promptspath; split GitHub PAT sample) sosync-publiccan advance the storefront after npm 4.8.2 - Public sync push protection: split Stripe live-key sample in
secrets-scan.test.tsso GitHub secret scanning does not reject the sync PR branch
Changed
- Close audit residuals A–E (
close-audit-residuals-ae): staging lint-evidence process (#499); quoted push deny (#498); C deferred (quiet helpers still indashboard.html); D–E accepted on monitor Closed-by; monitor +_indexstaged add-by-name (R14) /git-staging+autogit/gitupdate.md: staging-ready requires recorded lint command + result (not the contract string alone); GitHub PRs must use--base staging- Memory Audits index: document curated (not exhaustive) policy for
_index.mdplan-monitor rows (ADR R14/R15 §3); stage five-monitor audit with index row (R14)
[4.8.2] - 2026-07-29
Fixed
- CLI typecheck: narrow citty
argsto string forguard/hook/validatesubcommands; loosenreadStdinJsongeneric soSessionStartPayloadtypechecks (unblocks tag CI after hooks CLI adapters landed onv4.8.1)
[4.8.1] - 2026-07-29
Added
- CLI invariants + thin Cursor hooks:
agent-kit hook session-start|pre-compact,guard shell|prompt,monitors --untriaged --json,validate handoff|plan|after-edit;doctorreportshooks: active|degraded; deny-list for destructive git / push-main (ADR2026-07-29_cli-invariants-thin-hook-adapters.md)
Changed
- Path C publish harden: allowlist
scripts/sync-cli-dashboard.mjs+scripts/verify-cli-dashboard-pack.mjsfor public sync; turboglobalDependenciesincludesdashboard/**; tag CI +prepublishOnlyrun pack verify; CLI package.json script refs guarded in public-sync manifest test /git-prodroutine: four-manifest SemVer bump at close-release; immutablev*tag retry (no force-move); Step 12.5 requires public sync PR merged (not CI-green alone)- Native hooks: Node thin adapters under
.cursor/hooks/agent/*.sh(nopython3for session/preCompact); drop unwiredpre-edit/post-editscripts; docs honesty on VS Code/Windsurf parity - Mission Control Flight Log: when Gaps and Warnings are empty, surface bounded untriaged external-review rows (per-row Copy triage / path only); keep All clear when truly clear; no Review all / Resolve all on the card (ADR
2026-07-27_mc-flight-log-panel.md) /plan-review-triageWrite residuals: required Broad Intake (same buckets/labels as/backlog-add) before propose + write-confirm; batch uniform path uses one intake + one combined backlog plan (ADR2026-07-28_triage-write-residuals-via-backlog.md)- Mission Control Flight Log: typed notification chrome (kind → palette tokens); broaden
normalizeHandoffGapssonone./ empty OK placeholders do not render as yellow Live Gaps; writer guidance + ADR amend2026-07-27_mc-flight-log-panel.md - Flight Log OK normalize: case-insensitive
none./N/Aprefixes; widen OK separators(;/); muted Earlierok/warningCSS; parity + CSS-rule pins (ADR amend) - Plan-monitor staging hygiene: intentional monitors add-by-name (prefer separate docs commit); residuals executors append Closed-by only (ADR
2026-07-29_plan-monitor-staging-hygiene-r14-r15.md)
Fixed
- Path C broadcast hermetic test: assert exact injected
start-broadcast.mjspath (parity withstart.mjssibling) - CLI lint: Biome format on
packages/cli/src/dashboard/guards.test.ts(unblocks CI Lint inherited from multi-workspace isolation) - Path C discovery tests: hermetic
moduleUrl/tmpdir fixtures so CI Test before Build does not depend on gitignoredpackages/cli/dashboard/; restored missing-asset null cases - Mission Control
/dashboardfrom a consumer workspace: snapshotMISSION_CONTROL_REPO_ROOT(plans/HANDOFF/git) while serving UI from the kit host; CLI discovers kit via env, sibling../agent-kit, or bundled package assets (Path C)
Changed
turbo.jsonbuild outputs includedashboard/**so cache hits restore the Path C sync copy- Docs: CONTRIBUTING / repository-boundaries / npm-publish-checklist note that the CLI pack includes
dashboard/**after Path C publish (not claimed for current npm4.8.0); pack verify scriptscripts/verify-cli-dashboard-pack.mjs(version bump remains/git-prod) - Public positioning: README / getting-started / install.md / L0
/dashboardtell the truth that L0 does not copydashboard/into the app; Path C ships the panel with the CLI after the next publish (not claimed for npm4.8.0) - Personal-local-only success criteria amended for Path C; snapshot-root ADR notes CLI package as allowed kit host
/dashboard/agent-kit dashboard: verifysystem.repoRootbefore reuse; do not assume:3333; document kit discovery (MISSION_CONTROL_KIT_ROOT/AGENT_KIT_HOME/ sibling / bundled); L0 command rewritten as start.mjs-first quick path (no cross-workspace kill)
Added
- Mission Control Path C packaging:
@dadado/agent-kit-clipublishesdashboard/**(build/prepacksync from repo-root SoT);agent-kit dashboard/dashboard-broadcastresolve bundledstart.mjswhen cwd/env/sibling lack a kit host (ADR2026-07-28_mission-control-ship-dashboard-with-cli.md) - Mission Control multi-workspace isolation: stable listen port per
MISSION_CONTROL_REPO_ROOT(hash in3333–3588); concurrent instances; never kill another workspace's listener;system.port+ header workspace basename scripts/verify-cli-dashboard-pack.mjs: blank-folder /npm packacceptance for Path C dashboard assets (no live npm tag required)
[4.8.0] - 2026-07-28
Fixed
- CLI lint: Biome format on
external-review.tsheadless args and non-null assertion in cadence batch test (unblocks tag CIpublish-npm/sync-public) - Version parity: bump
.cursor/agent-kit.jsonand.cursor-plugin/plugin.jsonto 4.8.0 (L0 inventory test)
Changed
- Mission Control Current mission: operator-friendly Mode labels (
auto mode,run all (batch auto mode),human-in-the-loop (manual); STOPPED cues preserved) and looping Mode meta icon while executing (display-only; HANDOFF Mode tokens unchanged) - Mission Control Flight Log: wipe
.cursor/context/flight-log.jsonEarlier history on flight boundary (new plan / queue start / Plan none); keep within-flight cap 15; Gaps natural-voice guidance (handoff template + L0); softer idle/support/warning chrome (Quota pause / Heads up); ADR amend2026-07-27_mc-flight-log-panel.md - Mission Control Checklist: display order is role-priority (
executing→next_up→queued→completed_in_queue→ others), not approved-queue index; ADR amend2026-07-26_cockpit-run-plan-all-queue-awareness.md - Mission Control Crew Monitor:
MONITOR_FEED_CAPsingle source of truth insemantic-model.mjs, exposed asmissionControl.monitorFeedCap(dashboard.html no longer duplicates the literal) - CLI: NodeNext sibling type shim
dashboard/lib/semantic-model.d.mtssotsc --noEmit -p packages/cliaccepts the orchestrator test.mjsimport - Plan audits launcher: remove dead
launch_visible_terminal()alias (launch_background_terminalremains) - Plan audits autonomous arm: prefer inspectable background/headless PTY (tmux/screen, then macOS Terminal without
activate) instead of OS Terminal focus;--focus-terminal/AGENT_KIT_AUDIT_FOCUS_TERMINAL=1rollback; honesty ban on silent agent-shellclaude -punchanged (2026-07-28_audits-headless-terminal-honesty.md) /plan-review-triageWrite residuals plan: enqueue via/backlog-addcontract in-session (write-confirm Ask → plan file + HANDOFF Backlog; no Gate B / clipboard/start-projecthappy path); batch uniform Write residuals may enqueue one combined plan (2026-07-28_triage-write-residuals-via-backlog.md)- Mission Control Flight Log: clipboard icon (replaces PTT radio); operator labels Live / Earlier (not Current/Past Gaps); operator Warnings lane (API/usage limit, orchestrator heads-up; no cadence/Review CTAs); ADR amend (
2026-07-27_mc-flight-log-panel.md) - Mission Control Crew Monitor: denser
agent_stepfeed for active-plan completed/running to-dos (kindsrun_plan/handoff/delivery/agent_step; display cap 20); glossary amend (2026-07-27_crew-monitor-vs-plan-monitor-glossary.md) - README Cockpit + getting-started / external-plan-review: Flight Log Live/Earlier + Warnings; Crew Monitor denser step feed
Added
- Mission Control Flight Log (ex-Field Report card): HANDOFF Gaps only as current (large) + past (smaller) clickable cards; gitignored
.cursor/context/flight-log.jsonhistory ledger (cap 15); ADR2026-07-27_mc-flight-log-panel.md - Opt-in Mission Control LAN broadcast:
/dashboard-broadcast,agent-kit dashboard-broadcast,npm run dashboard:broadcast; non-loopback bind requiresMISSION_CONTROL_TOKEN; static/snapshot/SSE gated; config writes stay loopback-only (2026-07-27_mission-control-opt-in-lan-broadcast.md) - ADR: Mission Control opt-in personal LAN broadcast (
/dashboard-broadcast+ token gate); narrowly supersedes personal-local-only for trusted LAN only;/dashboardstays loopback-first (2026-07-27_mission-control-opt-in-lan-broadcast.md) - ADR:
/plan-review-triagebatch HITL when multi-path outcomes are uniform (one Ask; durable heading on every target; sequential fallback when mixed); Field Report Review all paste target unchanged (2026-07-27_plan-review-triage-batch-uniform-hitl.md) - Plan audits launcher:
--wait-monitorfreshness (mtime >= arm-epochor<!-- audits-wait-fresh: created|updated -->); dry-run prints arm-epoch and stale/missing; exit3on stale timeout - ADR: mandatory chat
--wait-monitorwith freshness gate and same-session triage Ask; ban Final HANDOFF "after monitor lands" as happy-path continue (2026-07-27_audits-wait-freshness-enforce.md) - Plan audits launcher: optional
--wait-monitor/--wait-timeout(default 900s) to poll forplan-monitor-<slug>.mdafter visible arm or standalone; exit0created/ok,3timeout,4soft-fail while waiting; dry-run prints wait path/timeout (ADR2026-07-27_audits-post-spawn-monitor-watch-continue.md) - ADR: post-spawn monitor watch then continue to
/plan-review-triageAsk after visible autonomous audit arm (honesty until monitor file exists; triage and/git-prodHITL intact) (2026-07-27_audits-post-spawn-monitor-watch-continue.md) externalPlanReviewconfig keys for autonomous audits:mode(paste|autonomous),midBatchAudits,preflight(off|warn|block); Mission Control Config allowlist + UI; example + docs + guards tests- L0 audits pre-flight on
/continue-plan,/run-plan,/run-plan-all,/hotfix(preflightoff/warn/block); exhaustion and/run-plan-allmid-batch arming prefer visible autonomous launch whenmode: autonomous
Fixed
- Mission Control: delete orphaned Field Report attention-stack render helpers + CSS from
dashboard.html(Flight Log Gaps-only); retarget pinning tests; rewrite/field-report-resolveand getting-started so they no longer describe Resolve all / Review all MC UI - Dogfood memory: wait-monitor false-ready on pre-existing
plan-monitor-*.md(existence-only poll); freshness gate + mandatory chat--wait-monitor(errors/2026-07-27_audits-wait-monitor-stale-preexisting.md; ADR2026-07-27_audits-wait-freshness-enforce.md) - Dogfood memory: cadence WARNING already-clear claim-check is a no-op close (empty ledger + dismissed window id =
subject_resolved; cancel triage/product-fix when owed set empty) (decisions/2026-07-27_cadence-warning-already-clear-claim-check.md) - Dogfood memory: autonomous launch then manual
donecontinuation dual-fence (errors/2026-07-27_audits-autonomous-launch-manual-done-continuation.md); docs Troubleshooting row for wait-then-triage - Dogfood memory: paste dual-fence, invisible agent-shell
claude -p, and bare/plan-review-triagefootguns (errors/2026-07-27_audits-*); prefer-autonomous decision note - Audits ADR: autonomous plan review contract (visible auto-launch, mid-batch + queue-end audits, audits pre-flight on plan-run commands; paste-only demoted to fallback) (
2026-07-27_audits-autonomous-plan-review-contract.md) - Plan audits launcher: visible auto-launch (
--autonomous/ configmode: "autonomous") via macOS Terminal.app or Linux emulator;--paste-onlyfallback;--dry-run; mid-batch--batcharms; soft-fail ifclaudemissing; headless CLI always passes--print - Glossary ADR: Crew Monitor (Mission Control live-activity UI) vs
plan-monitor-*.md/ Field Report external-review evidence; file/DOM/CSS conventions unchanged (2026-07-27_crew-monitor-vs-plan-monitor-glossary.md) /hotfix: L0 command for narrow urgent work (confirm → mini plan ≤4 to-dos →/run-plantick contract); ADR2026-07-27_hotfix-command-mini-plan.md- Mission Control product posture ADR: personal local-only (loopback-first); remote/shared multi-user auth/CSRF rejected as product goal (
2026-07-27_mission-control-personal-local-only-posture.md)
Changed
- Mission Control: Field Report card/nav renamed Flight Log; Gaps move off Current mission into Flight Log; attention-stack Review all / Resolve all / cadence rows leave that panel (autonomous audits remain the review path) (
2026-07-27_mc-flight-log-panel.md) - Mission Control Checklist: plan Actions Start → Run (manual) (
/continue-plan) + Run (auto) (/run-plan); header Add all → Run all (still copies/run-plan-all); copy-only paste unchanged (data-focus-key="checklist-add-all"stable). ADR2026-07-27_mc-checklist-run-manual-auto-labels.md - L0
/plan-review-triageStep 6 + HITL table: multi-path uniform batch Ask (durable heading per file); mixed sequential fallback; external-review / Review all / queue-end copy prefer one paste + one Ask when uniform (does not reopen wait-freshness or cadence-clear owners) - L0 chat audits: always
--force --autonomous --wait-monitoron autonomous arm; AwaitShell until exit0|3|4; mid-batch one arm+wait (or one--batch+ wait_all); queue-end triage with explicit path list (/run-plan,/run-plan-all,/plan-external-review, HITL gate table; ADR2026-07-27_audits-wait-freshness-enforce.md) - L0 audits post-arm: after visible autonomous (or paste-then-running) audit arm, wait for
plan-monitor-<slug>.mdthen continue into/plan-review-triageAsk (/run-plan,/plan-external-review,/run-plan-allqueue-end); mid-batch waits for file only (no mid-queue triage Ask); never claim finished without the file;/git-prodstays separate (ADR2026-07-27_audits-post-spawn-monitor-watch-continue.md) - Mission Control Current Mission card (
#now-execution-panel): Spotlight stack — Gaps alert above the stepper when present; Current step remains the sole full body; Previous/Next compact muted one-liners; meta + copy actions as a quiet footer (CSS/markup order only; ADR2026-07-27_mc-current-mission-spotlight-stack.md) /run-planAuto no-regression hygiene: never co-pack Task with staging AwaitShell / parallel heavies; first-tick Auto cooldown recommend (15000) wheninterTickCooldownMsis0without changing the global default; plan authoring splits docs-only vs product ticks for more inline-first (ADR2026-07-27_auto-run-no-regression-invariants.md)- Mission Control: Per-plan queue-role Checklist pills (NEXT UP / QUEUED / executing / queue done) use transparent backgrounds (color + mark cue only); lifecycle and attention pills stay solid fills
- Mission Control: operator-facing Cockpit nav/card label is Crew Monitor (README Cockpit table + plugin-ux assertions); distinguishes live-activity UI from Field Report
plan-monitor-*.mdevidence (DOM#hero-activity, CSS.monitor-row*, icon kindmonitorunchanged) - Docs honesty: consumer
npx/install.mdinstalls kit L0 only; Mission Controldashboard/runs from an agent-kit tree that shipsdashboard/start.mjs(README, getting-started, install.md prerequisites Node 20+) - Getting started: short After install checklist (personal path);
/agent-kit-onboardnotes Mission Control as optional post-essentials (not a blocking readiness check) - Mission Control Monitor delivery subtype chip glyphs (BMP): feat✦ fix⚙ docs✎ chore⚒ pr⑂ ship✈ (colors unchanged; PR no longer shares plan_progress ⚑)
- Mission Control Monitor: solid resting chips only (no inset kind ring) with distinct delivery subtypes by Conventional Commit / PR shape (
feat/fix/docs/chore/prviarefs.commitType; cyan ✔ fallback); live-actions-only allowlist unchanged (run_plan/handoff/delivery)
Fixed
- Mission Control Field Report cadence WARNING: hairline separator on
.attention-actions-per-planso bulk CTAs and the per-plan Copy review list read as two visual tiers (copy-only behavior and button order unchanged) - Mission Control Field Report cadence: bulk CTAs (Copy batch external review + Copy resolve) sit apart from the per-plan Copy review list; long
--batchshell targets copy viadata-copy-*(not onclick JS literals) with paste-only toast/title honesty - Mission Control: primary scroll regions (
.content,.panel-scroll-body,.live-activity-feed) use--mc-scroll-gutterso inner cards clear the 6px scrollbar thumb; panel scroll-offset preserve unchanged /run-planinline_first: clarify ignore-unless-lightweight (not force-inline); failed worker_type / productread_scope/ findings checks ignore the flag and stay Task; no silent inline after Task API-limit abort (context-guardian+ stop table); ADR2026-07-27_run-plan-inline-first-qualification-gap.md/plan-review-triagebare (no paths): select untriaged monitors (git-fresh → HANDOFF-aligned → scan), never "newest mtime wins" alone; external-review launcher + prompt print explicit/plan-review-triagepath lists after review so batch monitors are not missed behind bulk-touched older files- Port B
install.md: include.cursor/scripts/field-report-cadence-bump.shso the drag-install table matchesL0_ARTIFACTS/ registry (canonical-inventory test) - Mission Control Field Report:
listUnreviewedReviewTargetsrecords every External-report slug before the triage gate so terminal plans with an already-triaged monitor are not counted as owed (cadence ADR §4) - Mission Control header: inset Home / Refresh / More hitboxes (
--mc-header-control-size: 24px) so hover fill no longer flushes the 32px header borders; tighter trailing pad (--mc-header-pad-x-end) so More sits closer to the IDE ellipsis; HANDOFF health treats present idle Plan (none/ null) as ok (missing/unparsable HANDOFF still warns)
Added
- Mission Control Current mission: mode-aware copy-only Copy
/continue-planplus a short new-chat hint when HANDOFF Mode is manual / continue-plan (idle Quiet cockpit still Copy/start-projectonly; continuous/queue keep plan path + staging CTAs). ADR2026-07-27_mc-manual-mode-next-step-ctas.md - Mission Control: harness regression for
#navMoreBtn/.nav-more-menuoverflow escape (position: fixed+positionNavMore/ trigger-rect / resize); locks the 2026-07-25 clip fix so header chrome edits cannot silently regress (mirrors Checklist Actions overflow test) - Mission Control Checklist: Copy path in plan Actions menu (clipboard path / filePicker; Start/Edit/Cancel stay chat paste)
- Mission Control: surface HANDOFF
- **Gaps:**in the Current mission panel (parseHandoffMarkdown+now.gaps; hide when absent/none); closes deferred residual R-06 - Field Report activity review cadence: warning after N
/run-planticks (default 3) or/run-plan-allqueue complete when unreviewed work remains; gitignored cadence ledger +fieldReportReviewCadenceconfig; batch--batchpaste-only launcher + per-plan CTAs;/field-report-resolveacceptsattention:cadence:<windowId>(ADR2026-07-27_field-report-activity-review-cadence.md)
Changed
- Docs: denser manual plan-mode operator playbook in
docs/getting-started.md(Ask before unit, one phase per chat, suggest/git-staging, new chat →/continue-plan) plus an all-modes which-command-next chooser; cross-links fromautogit/plan-routine.md§5 and README (no Gate A/B or tick-contract rewrite) - Plan template +
autogit/plan-routine.md: authoring notes forinline_first(opt-in only; ignore-unless-lightweight; good/bad YAML; ADR/docs ticks usedocs-repo+ allowlistedread_scope) so false opt-in does not burn Task quota (ADR2026-07-27_run-plan-inline-first-qualification-gap.md) - Docs: Mission Control production-ship constraints (loopback-first, warn-only
HOST, no remote hosting without a separate auth plan, resource vs Agent-quota boundary) indocs/getting-started.md; README Dashboard links to the section - Mission Control: painted-clip for open
#navMoreMenustays an explicit manual dogfood gate (DevTools rect / screenshot vs overflow ancestors); CI keeps the PR #403 string/regex lock only (ADR2026-07-26_mission-control-plugin-ux-validation-depth— no JSDOM/Playwright). Operator steps live on theescapes nav More menu…harness comment. /run-plantick-close, worker Rules,autogit/gitupdate.mdstaging Prompt, and command-worker template: reinforce add-by-name staging for.cursor/memory/plan-monitor-*.md(no broadgit addof memory WIP)- Mission Control Field Report: Copy chat id
title/aria-labeluses a documented HTML mirror ofPROMPT_RESUME_GUIDANCE(ESM cannot load in the inline script); tests lock the two strings together - Plan-monitor consumer awareness: Broad Intake (
/start-project,/backlog-add),/continue-plan, memory-loop CHECK,/git-staginghygiene, and named agent prompts consult theme-matched.cursor/memory/plan-monitor-*.md(andplan-review-*audits); Field Report detection and external-review arming unchanged (ADR2026-07-27_plan-monitor-consumer-awareness.md) - Mission Control Field Report: header Triage all renamed Review all; bulk copy is gap-filtered (open residuals / Still open / standing findings only);
/plan-review-triagemulti-path skips already-triaged and no-open-residual paths; per-row Copy triage unchanged - Mission Control: live refresh preserves
.panel-scroll-bodyscroll offsets (and re-opens Checklist Actions when the plan key still exists); still yields to in-flightpendingAnchorScroll - Mission Control Field Report: resume guidance for unanswered prompts is tooltip/aria-only on Copy chat id (no repeated
.attention-guidancecard body); toast unchanged; copy-only past-chat picker contract preserved /run-plan+ external plan review: enforceexternalPlanReview.autoRemediate(default false) as a findings-only remediation gate (fix-agent Task vs residuals backlog plan); review workers must not auto-fix product code; launcher injectsautoRemediateinto the Claude prompt;/run-plan-allsubagent template carries the rule (ADR2026-07-27_review-workers-findings-only-autoremediate.md)/field-report-resolve: prompt claim-check returnsansweredandsubject_resolved(path/plan evidence basenames only); dismiss when either is true. DashboardisPromptClearedByPlanLifecyclestays exact-*.plan.md-refs-only (intentional divergence). ADRs2026-07-25_mission-control-field-report-source-contract/…-dismissalsamended 2026-07-27./run-plan-all: external plan review Ask/paste runs once at queue end only; mid-queue advances without review pause (non-stop after confirm); Field Report owed covers skipped monitors; supersedes per-plan pause ADR (2026-07-27_run-plan-all-external-review-queue-end.md)- Mission Control: press/scale click animation (
:active→scale(0.98)) applies only to interactive controls (.health-item,.empty-state-btn); removed from static.cardpanels and dead.plan-card:active;prefers-reduced-motionoverrides stay in sync - API limit enforcement audit (Phase 4c): HANDOFF template and plan-handoff rule add
- **Gaps:**machine field and single-plan- **Mode:**vocabulary; quota-stop Mode pattern (— STOPPED: API/usage limit);/continue-planAPI-limit pre-flight mirrors/run-plan; Ask-questions numbered-list fallback cross-link after Auto→Grok
Added
-
Mission Control: primary Home return outside the More menu (clickable header brand +
#headerHomeBtnbeside refresh, section-title Home back on secondary views); overflow Home kept as secondary -
API limit enforcement (audit Phase 2):
/run-plan//run-plan-allpre-flight refuse after an API/usage-limit HANDOFF stop until operator confirms recovery; Auto continuous runs recommendinterTickCooldownMs15000 (default stays0); Mission Control Config hint; ADR amend + decision2026-07-27_api-limit-enforcement-levers.md; getting-started model/quota tip; no Mission Control SSE/poll throttle as Agent quota fix -
API limit enforcement audit (Phase 3 close-out): durable plan-review audit Phases 0–3; dogfood checklist verified (limit hit → clean stop → HANDOFF → operator recovery on 2026-07-27, including consecutive Task aborts)
-
/run-plan-allconsolidation apply helper:.cursor/scripts/run-plan-all-consolidate.shregistered as L0 (install /l0.ts/ registry; dry-run default,--apply --approved, drop/archive, HANDOFF queue rewrite, merge checklist; backlog CRUD must not rewrite in-flight queue); also alignsrun-plan-all.mdand backlog CRUD commands intol0.ts/ Port B with the registry -
CLI plan-loop harness:
run-plan-all-orchestratordecision helpers + vitest guards (confirm Ask blocks dispatch, malformed summary does not advance cursor, HANDOFF queue field round-trip, in-window implement forbid for transcript 606a14a5) -
docs/getting-started.md:/run-plan-alloperator path (when to use, six-way confirm Ask table, resume mid-queue, named-model tip, Checklist Add all); cross-link fromautogit/plan-routine.mdReferences -
Consumer autoupdate check (opt-in, notify-only):
agent-kit update --check [--json] [--respect-prefs] [--stamp]; config prefsupdateCheck.enabled/intervalDays(default off) andupdateApply.auto(defaultfalse); sessionStart advisory viasession-plan-guard.py; Mission Control Config toggles check prefs only; factory/dev registry skip; apply remains/updateAsk HITL (never silent L0 write) -
Mission Control Checklist: Add all header button (empty and populated) copies
/run-plan-allfor chat paste (chatInput); copy-only, no Run queue / HANDOFF writes -
/updateslash command: consumer-mode Agent Kit layer update from the public registry (version compare, diff, Ask confirm, protected paths respected; distinct from public sync) -
Cursor theme: replace filled astronaut-helmet SVG with stroke helmet mark (matching
agent-kit-cursor-theme.svg). Normalized viewBox for 16px chrome,currentColorstroke. Remove root staging file. -
Cursor theme: redraw spaceIconSvg kinds (current-mission, monitor, field-report, checklist, more-sections) in the thin stroke language (0.5px, matching logo-cursor). Update stroke-width assertion in plugin-ux-validation test.
-
Cursor theme: extend spaceIconSvg with section icons for More menu (overview, plans, activity, agents, skills, commands, health, git, memory, terminals, processes, config). Replace decorative colored dots in #navMoreMenu with section icons. Keep live status dots (health, git, terminals, processes) intact.
-
Mission Control Field Report: restore unanswered agent-prompt rows (transcript scan →
buildAgentPromptItems) with copy-only Copy chat id (pastChatPicker) and Copy resolve (/field-report-resolve attention:prompt:<chatId>); Resolve all includes visible prompt ids with report ids -
Mission Control design tokens:
--mc-radius-pill(999px) for slash-command-style status capsules -
Backlog CRUD slash commands (already released via #358; not re-authored here):
/backlog-add,/backlog-edit,/backlog-delete,/backlog-cancel -
Mission Control Config tab: More-menu Config section edits allowlisted
.cursor/context/config.jsonprefs (autoHandoff,interTickCooldownMs,externalPlanReview.*,agentPersona) via loopbackPUT/PATCH /api/config(merge-safe; ADR2026-07-26_mission-control-config-write-allowlist.md) -
Agent Personas: chat/CLI character packs under
registry/personas/(persona.json, schemapersona-pack.json) with config keyagentPersona; bounded compatibility reads for legacyworkspaceSkin -
Mission Control Cursor Interface Skin: compact astronaut-helmet mark (
dashboard/logo-cursor.svg) for header and favicon whendata-dashboard-skin="cursor"; Legacy keepsdashboard/logo.svg -
Mission Control Current mission execution timers: discreet total and per-stage (to-do) elapsed in
now-meta, gitignored local observation ledger (.cursor/context/mission-timing.json), freeze on completed, omit on idle; live text tick while executing (ADR2026-07-26_mission-control-execution-timers.md) -
Cursor Auto API hit-limit remediation: ADR-lite with symptom matrix (7 rows), hard-stop decision tree, and operator playbook (Phase 0-1)
-
/run-planand/run-plan-allstop tables: API / usage hit limit stop condition, revert to-do topending, HANDOFF with stop reason, recommended model switch (Phase 1) -
Context-guardian: quota-blocked session section — hard stop with HANDOFF, not "keep coding"; operator message to switch off Auto or wait for quota reset (Phase 1)
-
Optional inter-tick cooldown (
interTickCooldownMs) in.cursor/context/config.jsonfor long/run-planLoop and/run-plan-allqueues (Phase 2) -
Model guidance for long runs: prefer named model (Claude Opus, Sonnet 4.6, Composer 2.5 Fast) over Auto; parallel heavy Tasks discouraged (Phase 2)
-
Field Report owed unreviewed plans:
buildOwedReviewItemsdetects terminal-lifecycle plans (completed/parked/archived) with no matchingplan-monitor-<slug>.md; emitsoweditems (capped at 8) with copy-only external review command (pasteDestination: terminal); dismissable via ID-only dismissals store; source-contract ADR amended -
Field Report dashboard renders boxed Unreviewed plans group with plan name + copy external review command (
pasteDestination: terminal); empty states distinguish "no monitors", "no unreviewed plans", and "both clear"; existing Blocking/Debt monitor rows unchanged -
Mission Control cockpit understands the
/run-plan-allqueue:parseHandoffMarkdownparsesRun queue,Queue cursor,Queue status, andQueue outcomes(false-negative policy on backtick noise); the semantic model exposesmissionControl.runQueue,now.nextUpPlan, and per-planqueueRole/queueIndex; a completed Current mission names the next-up plan on the Next row instead ofNone: mission completewhen the queue has more work; Checklist sorts by approved queue order with additive Next up / Queued / Executing role pills (lifecycle pills and executing-only shimmer unchanged; copy-only, no dashboard queue writes; ADR2026-07-26_cockpit-run-plan-all-queue-awareness.md) -
Checklist plan lifecycle: HANDOFF Backlog parser accepts both
Backlog plans(canonical) andBacklog(short alias) field labels -
Checklist plan lifecycle: never-started plans (
completed: 0, inProgress: 0) classify as Backlog instead of Incomplete — fixes0 of Nfalse positives for Gate-A queued plans -
/start-projectGate A: single composite question merges active-plan disposition and write confirmation — four options with active plan (backlog+write, park+write, modify, cancel), four without (write, write+backlog, modify, cancel); Gate B always offersAdd to backlog(Mode STOPPED) distinct fromStop here(plan stays active); fallback rule: one numbered list per message -
/updateregistered as L0 inregistry/registry.jsonand listed indocs/coherence-inventory.mdso consumer installs receive the slash command -
Mission Control More menu: Home item at the top returns to Overview (
showSection('overview')) while keeping keyboard roving and Skins radios
Fixed
- Mission Control Cursor skin:
dashboard/logo-cursor.svgheader/favicon strokes use hardcoded#e4e4e4(Cursor--text-primary) instead ofcurrentColor, which resolves to black under the<img>tag (same class of bug as the Legacy logo fill fix)
Changed
-
/run-planinline-first: lightweight docs-only to-dos (CHANGELOG, memory index, L0 markdown close-out) implement in-session during orchestrated runs whenread_scopeis docs-only and there is no findings contract;inline_first/force_taskplan frontmatter; ADR2026-07-27_run-plan-inline-first-lightweight-todos.md(quota mitigation after delegation enforcement) -
/run-plan-allexternal plan review: queue-end only (non-stop mid-queue); mid-queue skips stay Field Report owed; ADR2026-07-27_run-plan-all-external-review-queue-end.md(supersedes per-plan pause) -
/run-plan-allPO synthesis: mandatory Task(explore) viacommand-worker-prompt.md(main window reviews report + confirm Ask only; inline fallback if Task unavailable);autogit/plan-routine.mddelegation table row -
Mission Control Checklist pills (lifecycle + queue-role) and Current Mission badge: character mark + UPPERCASE label (CSS
text-transform: uppercase; JS maps stay Title Case) replaces colored.dot; queue-role pill joins the stroke-free solid-fill family (border: none,--mc-radius-pill, solid*-bgsurface); next-up mark uses inline SVG monochrome fallback (⏩︎ never renders as colorful emoji); non-color cue tests updated for the frozen mark table; ADRs2026-07-27_mc-queue-role-pill-stroke-free-marks,2026-07-27_mc-pills-uppercase-labels -
Mission Control Field Report section icon: redraw
paths['field-report']inspaceIconSvg()as a handheld radio with antenna, speaker grille, and side PTT paddle so the glyph reads as radio PTT (not a person) in Cockpit nav, card title, and empty-state hero; remains distinct from More-menuagents -
Mission Control live refresh: watch
~/.cursor/projects/<slug>/agent-transcripts/so Field Report prompt Action rows refresh after transcript flush withinWATCH_DEBOUNCE_MS(400ms), not only on the 15s periodic; periodic remains fallback when watch is unavailable (source-contract ADR amended) -
Mission Control Monitor section icon: redraw
paths.monitorinspaceIconSvg()as concentric rings + sweep wedge so the glyph reads as radar (not a gauge) in Cockpit nav, card title, and empty-state hero -
Mission Control Legacy skin:
dashboard/logo.svgoutline fills use#e2e8f0(header text color) instead of near-black#3C3C3Bso the astronaut mark stays visible on the dark header; highlight layers and blue-cyan gradient unchanged. Cursor skin still useslogo-cursor.svg -
Mission Control Checklist: recent-plan cards replace whole-card Copy path with an Actions dropdown that copies chat commands (
/continue-plan,/backlog-edit,/archive-plan) for Start / Edit / Cancel; copy-only tochatInput; Plans accordion and Field Report path copy unchanged -
Mission Control More menu: inject the 12 section icons via
injectCockpitNavIcons()+spaceIconSvg()and remove duplicated inline SVG markup from#navMoreMenu; live status dots and item aria/onclick attributes unchanged; a11y name-loop covers all 12 section kinds -
Mission Control Field Report: drop portfolio plan-state NOTE kinds (
backlog/parked/incomplete) from the attention stack; Checklist plan cards remain the portfolio surface; empty-state copy covers readiness, unanswered prompts, and External reviews only (source + dismissals ADRs amended; supersedesfield-report-attention-not-portfolio) -
/field-report-resolveandFIELD_REPORT_ATTENTION_ID_REacceptattention:prompt:<chatId>besideattention:report:<slug> -
Mission Control chrome icons: header refresh joins the 16px / stroke-1.5 workbench shell with
spaceIconSvgandnowMetaIconSvg; empty-state heroes scale via--mc-chrome-icon-sizemultiples (no hard-coded 32/28px) -
Mission Control lifecycle, attention-severity, and queue-role pills: use
--mc-radius-pillcapsule geometry (Cursor slash-command style) instead of--mc-radius-smchrome squares; idle monitor chips remain at 999px -
Mission Control Cursor Interface Skin:
dashboard/logo-cursor.svgswaps stroke line-art for the filled astronaut helmet path (header + favicon at 16px); Legacylogo.svgunchanged -
Mission Control dashboard: remove dead
.attention-group-labelCSS (and two dependent selectors) left after Checklist notes UI removal; no markup emitters remained -
Mission Control empty states: Cockpit section empties (Quiet cockpit, Listening, All clear, Empty board / Empty hangar) show the matching
spaceIconSvgfineline tab icon centered above the headline via optionaliconKindonrenderEmptyStateCta(decorative; secondary panels unchanged) -
Mission Control Cursor Interface Skin: replace robot-outline mark with compact astronaut-helmet line art (
dashboard/logo-cursor.svg, path unchanged); global chrome density via--mc-header-height: 32px, header logo on--mc-chrome-icon-size, and shared--mc-status-dot-size: 7pxfor.dot/#statusDot(Legacylogo.svgunchanged) -
Monitor return-brief hierarchy: icon-only status chips (kind gloss on hover/aria), colors aligned with Current mission / lifecycle solid tokens (
run_planuses executing green), row order chip → structured action line → trailing time, and producer labels as{actor} · action · …for tick/handoff/plan/delivery -
Mission Control serve: raise
dashboard-data.mjsexecFiletimeout from 15s to 60s (override viaAGENT_KIT_DASHBOARD_DATA_TIMEOUT_MS) so cold snapshots on large dogfood repos no longer flip the badge to Degraded with empty cockpit panels; timeout errors now name the limit explicitly -
Mission Control empty states: shared
renderEmptyStateCta(headline + support + optional copy-only CTA); cockpit and secondary panels use kit-voice copy; Field Report empty reflects the unified attention inbox (plan-state + readiness + External reviews); CTAs name paste destinations only (no Open) -
Rename chat/CLI character packs from workspace skins to Agent Personas (
agentPersona,registry/personas/, docspersonas-contract.md/creating-personas.md); Mission Control Interface Skins (legacy/cursor) unchanged -
Field Report unifies plan-state and readiness cards with External reviews in one attention stack (kind + severity pills; severity-first sort); Checklist drops the "Plan states and readiness needing a decision" notes group and keeps plan cards only
-
Monitor hero identity: prefer kit agent, else
orchestratorfor delivery rows without an agent, else plan name fromrefs.plan, else System; missing timestamps leave the time column empty (no kind-tag duplicate) -
Monitor classification chips show icon and kind tag at rest (no hover/focus width or opacity expand)
-
Monitor feed layout polish: calmer row spacing, clearer chip icons/tags, and stronger identity vs label hierarchy (resting-chip and single-roll contracts unchanged)
-
Monitor delivery labels include a brief ship subject (squash title or first absorbed commit) plus PR # and sha, instead of count-only Shipped/Merged strings
-
/plan-review-triageWrite residuals plan copies a ready-to-paste/start-project with this goal: …prompt to the clipboard (pbcopy/xclip/clip) -
Mission Control Checklist cards and Plans rows now show ratio progress bars; executing plans shimmer when motion is allowed, while other lifecycle states remain static
-
/run-plan-allis now a pure orchestrator: after queue confirmation it dispatches one Task subagent per plan (command, L0 mirrors, ADR) instead of implementing plan to-dos in the orchestrator window -
Checklist plan lifecycle:
classifyPlanfall-through checkscompleted > 0 || inProgress > 0before returningincomplete;0 of 0plans returnbacklog(implicit queue) -
HANDOFF template now includes
Backlog plansandParked plansfields in Work Status section -
Monitor hero feed flattened from agent-grouped headers-and-sub-rows to a single flat newest-first list with inline classification chips (icon + kind tag), identity from agent / orchestrator / plan / System (consecutive identical collapsed), and preserved copy-only keyboard affordance; dead stagger classes replaced with per-row
.monitor-row.stagger-fade
Changed
- Monitor hero refocused from git-tree display to agent-activity stream: rows group by agent identity with plan context (plans without a declared
agent:group undersystem)
Removed
- Mission Control semantic-model: removed stale-group helpers (
FIELD_REPORT_STALE_MS,isFieldReportItemStale,partitionFieldReportByStaleness) — no remaining callers after Phase 1 flatten of blocking section; browser bulk-resolve mirror already dead - Mission Control Field Report tests: removed stale-group and browser-bulk mirror tests that expected the old nest chrome; kept all contract tests for
fieldReportResolveActionand per-row CTAs (113 tests pass)
Added
-
Mission Control Field Report: header bulk CTAs — Triage all copies
/plan-review-triagewith every visible report path (blocking first, then debt); Resolve all copies/field-report-resolvewith every visible attention id; both hidden when empty; newfieldReportTriageAllAction()helper in semantic model (202 tests pass) -
Mission Control plugin UX validation: assert dashboard HTML never embeds
vscode://orcursor://protocol URIs (locks the copy-only paste-destinations contract after residual A close) -
Mission Control plugin UX validation: assert all six plan lifecycle keys stay distinguishable without color alone (unique labels, marks, pill text, and aria)
-
Mission Control: the semantic model emits durable inventory events (
agent,skill,command,memoryadded/removed/changed) with stable ids and previous-baseline dedupe, feeding the upcoming unified Activity feed; the Monitor hero keeps its curated kind allowlist so inventory events never appear there -
Mission Control: the Activity tab renders a unified newest-first feed merging the full semantic stream (including inventory events) with client diagnostic events, deduped and capped, with type accents, per-source labels, and preserved copy-only targets; per-refresh "Data refreshed" rows are replaced by a summarized last-refreshed heartbeat
-
Mission Control: the Activity feed gains per-source filter chips (All / Plans / Git / Agents / Skills / Commands / Memory / Terminals / Processes) as a keyboard-navigable radiogroup with focus rings and reduced-motion support, filter-aware empty states, and a
navActivityBadgethat reflects the full unified feed count -
/archive-plan <plan-file>: copy-only command that removes a plan from the HANDOFF parked list and moves it into.cursor/plans/archive/, confirmed with Ask questions; Mission Control may only copy the command, never mutate in-panel -
/field-report-resolve <attention-id>: copy-only command that appends a Field Report attention id to local gitignored.cursor/context/field-report-dismissals.json(IDs only, no transcript body); Mission Control Field Report rows expose Copy resolve command -
/field-report-resolve: per-id claim-check contract — agent must locate, verify, and decide dismiss eligibility for each attention id before appending to the dismissals store; skip when the claim is still open (HITL or triage still required) -
Mission Control: Skins group in the More menu with Legacy (current palette, default) and Cursor (Cursor-like base chrome with Agent Kit semantic highlights); applied without reload, persisted under the
agent-kit:dashboard-skinbrowser preference, keyboard accessible withmenuitemradioselected state
Changed
- Mission Control Field Report: each External review card shows a short, HTML-escaped findings summary under the label (numbered Residual items, else the Standing finding, else the Full-review Outcome, else
No structured findings extracted), capped at ~240 characters so a human can triage from the card without opening the monitor file; triage, dismissal, and lifecycle classification are unchanged (ADR amendment2026-07-25_mission-control-field-report-source-contract.md) - Mission Control Field Report: untriaged External reviews stay visible after plan lifecycle demotion; blocking and debt items render in one flat list (blocking first, orange highlight on blockers; no Review debt / Older waits nests or bulk resolve chrome); surfaced cap raised to 20; triage headings and ID-only dismissals remain the only hard hides (ADR
2026-07-26_mission-control-field-report-review-debt-inbox.md) /plan-review-triage: supports multi-path sequential walk (/plan-review-triage <path1> <path2> ...) with per-monitor Ask questions gates, path skipping for nonexistent monitors, and stopping contract (Phase 3)/field-report-resolve: bulk copy target wording updated from "Older waits group" to "Field Report header"; documents the Resolve all header button (Phase 3)- Mission Control Field Report Review debt ADR: render clause amended to reflect shipped flat list (no collapsible stale-group pattern for debt rows; Phase 3)
- Mission Control plugin UX: record that validation stays string/regex against dashboard source (no JSDOM dependency) until a named behavioral regression class justifies richer interaction tests
- Mission Control Cockpit: desktop widths show a 2x2 overview fold (Current mission, Monitor, Field Report, Checklist) without page scrolling, hide the Cockpit subheader, and scroll overflowing panel content internally; the More menu lives in the header at all widths (not only at ≥1024px)
- Mission Control Current mission: the step progress bar shimmers on the current segment (gated by
prefers-reduced-motion: no-preference, disabled under reduce); the executing status chip drops its glow/pulse and keeps green fill plus the ▶ mark as the live cue - Mission Control Field Report: section carries only untriaged External reviews (agent prompts and HANDOFF awaiting-user gates no longer appear there; Checklist unchanged)
- Mission Control Field Report: each review row exposes Copy path and Copy triage command (
/plan-review-triage <path>) for paste into a fresh chat; prompt/handoff chrome removed /field-report-resolveaccepts multipleattention:report:<slug>ids in one paste (per-row Copy resolve command; Field Report no longer ships nest-level bulk resolve chrome)- Mission Control: header Refresh control is a 32×32 icon-only button (inline SVG,
currentColor); refreshing spins the icon (respectsprefers-reduced-motion); no-data uses title/aria "Start server" instead of button text /start-project: when HANDOFF already has an active plan, Ask questions for disposition before writing HANDOFF (Add new plan to backlog/Park current plan and activate new/Cancel); never park the active plan silently. Backlog path keeps the current plan active, lists the new plan underBacklog plans, and skips Gate B. Mirrored incursor-plan-handoff,hitl-ask-questions,session-plan-guard, andplan-routine; ADR2026-07-25_start-project-plan-disposition-gate.md/plan-review-triage: every outcome (Write residuals plan, Fix nits only, Ack and stop) must persist a durable## Triage note(or equivalent) on the monitor so Field Report clears untriaged rows; Ack and stop no longer relies on HANDOFF alone- Mission Control: Cockpit top-nav active chrome uses muted fill and transparent border (no blue stroke), aligned with Cursor Plan & Usage
- Mission Control: Field Report attention rows and Checklist plan cards no longer render severity or lifecycle left bars; severity badges remain
- Mission Control: Monitor Recent activity and Activity feed rows drop the colored left rail (CSS and inline); event type stays visible via icon and label, and the presentation test now fails if a left-bar accent is reintroduced
- Mission Control: unanswered-chat rows identify the conversation (first-line snippet, chat id, quiet time, pending question) and pair the copied chat id with past-chat-picker resume guidance, staying copy-only
/run-planorchestration: review to-dos with a findingsworker_contractdispatch workers with write access so they author plan findings; orchestrator transcription is fallback only (secondhand label + HANDOFF gap). Cross-linked fromautogit/plan-routine.md./run-planstaging-ready: workers must run applicable formatter/linter checks on touched files and report them underTests:/Validation:beforeStaging ready: yes; orchestrator rejects yes without that evidence when formatted/linted files changed (pure markdown with no applicable linter may state none). Mirrored inplan.mdtemplate andautogit/plan-routine.md; cross-links biome format incidents in.cursor/memory/errors/.- Multi-lens plan review findings persist to
.cursor/memory/plan-review-<plan-slug>.md(versioned audit) at consolidate or plan close; active plans remain gitignored per public-tree guard. Convention inmemory-looprule and ADR2026-07-25_plan-review-findings-durable-home.md; 24h review backfilled inplan-review-24h-full-review-and-fix.md. /summarycloses with an Ask questions gate for the next step (Continue where we left off,Something else,Show more detail); chat fallback when the tool is unavailable.
Fixed
- Mission Control Checklist: Actions dropdown uses
position: fixed+getBoundingClientRect(same pattern as nav More) so Start/Edit/Cancel are not clipped by#recent-plans-panel/.panel-scroll-bodyoverflow; prefer open above, flip below when space above is tight - Mission Control HANDOFF parsing: accept plain (no-backtick)
- **Plan:** name.plan.mdand recover Backlog/Parked/Run queue lists written as##headings when the- **Field:**bullet is missing; session hard rule + format warning steer writers back to bullet fields (ADR2026-07-26_handoff-machine-field-contract.md) - Monitor delivery attribution: each delivery event resolves its plan from its own merge branch (exact plan-basename match after conventional-prefix strip); unresolvable branches carry no attribution instead of inheriting the active plan's name
- Monitor coalescing: the merge is the anchor and absorbs the commits beneath it, so real squash and merge histories collapse into one attributed delivery row and feature commits are no longer dropped; squash-merge commits anchor their own delivery; the unimplemented
windowMstime-window claim was removed from the producer docs - Monitor delivery rows:
refs.sharestores the copy-only and keyboard contract (role,tabindex,aria-label, copy handler),.monitor-sub-rowgains a token-based hover, and the stagger animation binds behindprefers-reduced-motion - Monitor/Activity stream: each merge renders once (raw merge and absorbed commit rows superseded by a delivery are dropped), delivery events are no longer starved by the activity cap (producer
limit), andplan_progressevents carry the plan'sagent - Plan template and
autogit/plan-routine.mddocument the plan-levelagent:attribution field (kit agent id from.cursor/agents/, null fallback grouped assystem, distinct from per-to-doworker_type) - Mission Control Field Report: clear agent-prompt rows when every exact
*.plan.mdreference in the pending question is completed or parked/exhausted; demote External-review rows for the same terminal reviewed-plan lifecycle without marking them triaged (unknown or missing plan refs stay visible) - Mission Control Field Report: lifecycle clear parses plan references from the untruncated pending question, so a live multi-plan wait whose active reference sits past the 200-character display cutoff is no longer cleared by a terminal reference before it
- Mission Control Field Report: a plan record whose frontmatter parses zero to-dos resolves as unknown for attention clearing (not completed), so a parse failure cannot hide a live prompt or External-review row on false terminal evidence
- Mission Control Field Report: the browser bulk resolve helper validates the attention-id allowlist before building the copied command, mirroring the semantic model so malformed snapshot ids cannot enter clipboard text
- Mission Control: refresh control is borderless with transparent idle background (fill only on hover), uses a centered Feather-style SVG, and spins on
transform-origin: 50%so the icon no longer wobbles off-axis - Mission Control: typography follows Cursor workbench defaults (
system-uisans,13px/ weight500chrome labels,16pxicons,12pxdescriptions, separate mono stack) instead of mixed sizes and a mono-in-UI font stack - Mission Control: extend Cursor chrome scale tokens to More-menu labels, count badges, refresh icon box, and discreet meta icons (regression-locked; no lifecycle pill restyle yet)
- Mission Control: shared
--mc-*structure tokens for radius, spacing, card/header padding, and meta type; Legacy/Cursor skins stay color/surface overrides on the same ladder - Mission Control: lifecycle and Field Report severity labels use solid semantic fills (no outline), sharing one pill rule on the Cursor chrome ladder; adds
--orange-bgfor incomplete/warning - Mission Control: polish pass removes dead refresh-flash CSS, aligns feed icons to the chrome icon token, and keeps focus-visible / reduced-motion contracts under live refresh
- Mission Control: Current mission status badges join the solid chip family (filled semantic surface, no outline, chrome tokens); live pulse and its reduced-motion fallback glow without a perimeter ring, and state marks plus the idle pill radius carry the non-color cues
- Mission Control: Checklist recent plan cards list up to 10 plans instead of 5
- Mission Control HANDOFF parsing: Parked/Backlog plan sections are multi-line blocks; only
*.plan.mdrefs count (branch names and monitor paths ignored);Backlog plansis a first-class lifecycle with badge/sort/Checklist notes, mirroring parked zero-open → completed - Port B
install.mdtable includes.cursor/commands/field-report-resolve.mdso the L0 inventory stays aligned withpackages/cli/src/lifecycle/l0.ts - Mission Control Checklist: readiness advisories stay while a check is
needs_choiceand clear only when the doctor report turns ready oronboarding.deferredItemsrecords an explicit deferral with a reason; readiness rows carry the pillarcheckIdsocollaboration.providermatches theconfirm-provideraction - Mission Control live refresh: compact pretty-printed snapshots to a single SSE
data:line, count silence only after validated payloads, keep periodic flush off the watch debounce, and generate snapshots asynchronously so the Live badge cannot mask a frozen panel - Mission Control plan lifecycle: a parked plan with zero open to-dos classifies as completed instead of staying
PARKEDat N/N, while parked metadata is preserved - Mission Control plan lifecycle: a HANDOFF that reports STOPPED or exhausted with all to-dos terminal classifies as completed even when the mode string mentions
orchestrated, instead of reporting a live run - Mission Control: Current mission and the overview footer stop presenting an exhausted plan as active
- Mission Control: a completed plan keeps the Current mission panel with a COMPLETED status, full N/N progress, its final completed step, and honest copy-only actions instead of collapsing to the IDLE empty state; IDLE is reserved for snapshots without a HANDOFF plan reference
- Mission Control lifecycle: HANDOFF transitions trust plan to-do status, so pending or in-progress work cannot render as completed or idle during the final tick, and terminal work remains visible as completed
- Mission Control semantic model emits
PASTE_DESTINATIONSkeys (chatInput,pastChatPicker) forpasteDestinationinstead of human label strings - Mission Control: remove dead native-open helpers (
buildEditorFileUris,joinRepoRoot) and unusedsystem.repoRootsnapshot field left after the copy-only decision - Mission Control empty-state copy uses colons instead of em dash sentence connectors (All good, No plans yet, No commands registered, and similar)
- Superseded ADR for protocol-open trimmed to history-only; current behavior remains the 2026-07-25 copy-only paste-destination record
- L0 commands (
/start-project,/git-prod,/run-plan,/summary): em dash sentence connectors replaced with colons or punctuation per kit hygiene - Public sync auto-merge uses squash merge (
--squash --auto) so CI matches the public repo ruleset (merge commits disallowed) sync-publicCI job fails whenPUBLIC_REPO_TOKENis unset on tag or manual sync runs instead of exiting green with no sync/continue-planHITL gate uses Ask questions with concrete options; typed "yes" is no longer the confirmation path
[4.7.2] - 2026-07-25
Fixed
- Public-sync dashboard allowlist guard skips when
scripts/public-sync.manifestis absent (private-only file), so the public mirror CI stays green
[4.7.1] - 2026-07-25
Fixed
- Public sync allowlists
dashboard/**so Mission Control sources reach the mirror with the CLI dashboard tests that import them - Regression guard:
packages/cli/src/dashboard/public-sync-manifest-guard.test.tsfails when synced dashboard tests depend on paths outside the allowlist
[4.7.0] - 2026-07-25
Follows 4.5.1. Version 4.6.0 was withdrawn after release because it carried an unfinished dashboard; that number stays retired and is not reused. This release ships the completed Mission Control panel.
Added
agent-kit dashboard/npm run dashboard(dashboard/start.mjs): terminal counterpart to/dashboard; detach-starts Mission Control if needed, waits for HTTP 200, prints the URL, and opens the default browser- Decision record: Mission Control actions are copy-only and name a paste destination (
.cursor/memory/decisions/2026-07-25_mission-control-copy-only-paste-destinations.md), superseding the 2026-07-24 protocol-open record - Mission Control plugin UX validation suite (
packages/cli/src/dashboard/plugin-ux-validation.test.ts): narrow/mid layout media queries, reduced-motion, keyboard accordion/focus preservation, empty states, copy-only CTAs that name their paste destination, SSE+polling fallback, Cockpit anchors plus the More sections menu with no horizontal tab track, Cockpit order (Current mission → Monitor → Field Report → Checklist), nav/heading label parity, the space icon set, lifecycle visual keys, and hardening regressions (XSS helpers, read-only serve, loopback CORS) - Mission Control Field Report renders
missionControl.attentionbelow Current mission and carries only what waits on a human reply: agent prompts awaiting an answer, external reviews awaiting triage, and the active handoff gate, each with a copy CTA and an empty state - Mission Control Field Report source, agent prompts awaiting a reply: a transcript surfaces when its last agent-question tool call has no user entry after it, read from the project transcript store (30-day window, 60 files, 1 MB per file, 8 items rendered,
subagents/transcripts ignored), with a copy action for the past-chat picker (packages/cli/src/dashboard/field-report-prompts.test.ts) - Mission Control Field Report source, external reviews awaiting triage: a
.cursor/memory/plan-monitor-<slug>.mdreport counts as triaged when it carries a triage heading or when a plan other than the reviewed plan names the report slug or the reviewed plan; untriaged reports copy the triage command with the report path (packages/cli/src/dashboard/external-reports.test.ts) - Decision record: Mission Control Field Report source contract, covering both detection rules and the weaker signals rejected against real local data (
.cursor/memory/decisions/2026-07-25_mission-control-field-report-source-contract.md) - Shared inline SVG space-theme icon set with accessible names, used by the Cockpit section headings and the navigation, with no icon font, sprite fetch, or frontend dependency
- Static asset regression test (
packages/cli/src/dashboard/static-assets.test.ts): every root-absolutesrc/hrefin the panel markup must resolve to a real file underdashboard/, so an asset URL cannot 404 silently - Mission Control semantic snapshot model (
missionControl.now/activity/attention/ classifiedplans) indashboard/lib/semantic-model.mjs, wired intodashboard-data.mjs(schema 1.2.0) with fixture tests - Mission Control guard unit tests (config allowlist, git.files shape, static path lockdown, CORS, loopback bind); helpers in
dashboard/lib/guards.mjs - Local Agent Kit dashboard, branded Mission Control (
npm run start:dashboard, port 3333), with live activity indicators, SSE heartbeat, process/terminal diffing, and responsive/a11y polish /dashboardcommand: startsdashboard/serve.mjsif port 3333 is free and opens Mission Control in Cursor Simple Browser; registered in the L0 inventory- Mission Control git section lists staged/unstaged/untracked files with copy-only diff commands
- Observability overhaul in Mission Control: status bar with live system metrics, real-time activity feed with delta badges, clickable CTAs (plans, commands, agents, memory, terminals, git, health), SSE connectivity indicators, process health monitoring, terminal popups, git diff viewer, micro-animations, loading skeletons, and responsive layout
- Mission Control terminal list shows capped
lastOutputpreviews from the snapshot payload - Mission Control Processes section: Copy PID CTA per process row (no kill/restart)
- Mission Control Git section: bounded dirty
files[]fromgit status --short(paths only), status badges, and copy-to-clipboard staged/unstagedgit diffcommands per file - Error memory entry: public sync PR merge-blocked by ruleset and merge-commit method (
.cursor/memory/errors/2026-07-24_public-sync-pr-merge-blocked-ruleset.md, private) - Decision record: Mission Control local-only security posture (
.cursor/memory/decisions/2026-07-24_mission-control-local-only-security.md) - Repository personalization profile (
.cursor/context/personalization.json,.cursor/project-context.md,AGENTS.md) with matching manifest packs and protected paths in.cursor/agent-kit.json docs-repocore skill andcursor-skills-nodecommunity skill- DevOps scaffolding templates:
templates/CODEOWNERSand GitLab CI templates for content, Node plus Docker, and frontend plus Firebase repositories
Changed
- Mission Control Cockpit page drops the redundant page-level
Cockpitsection title; the primary nav link remains the name for that page - External review chat prepares a visible paste for an interactive Claude run, while CI remains headless; the launcher uses
--permission-mode auto /start-projectand session readiness block only unresolved essential checks; non-essential provider confirmation remains advisory- Mission Control actions are copy-only and name the destination that receives the paste: repo-relative paths go to the file picker (Cmd+P / Ctrl+P), slash commands to the chat input, chat references to the past-chat picker, and shell commands, PIDs, working directories, and commit shas to the terminal. No label, tooltip, aria-label, or confirmation claims a native editor open, and there are no Stage or Restart controls the panel cannot perform. The snapshot action contract carries
path/copytypes withsubjectandpasteDestination - Mission Control navigation: four Cockpit anchors (Cockpit, Monitor, Field Report, Checklist) plus a More sections menu holding Plans, Activity, Agents, Skills, Commands, Health, Git, Memory, Terminals, and Processes with their counts, replacing the hamburger drawer and the horizontally scrolling tab track; the menu is keyboard operable, closes on Escape and on outside click, and returns focus to its trigger, and the narrow panel no longer shows a horizontal scrollbar
- Mission Control Cockpit sections read Current mission, Monitor, Field Report, then Checklist, each led by an icon from the shared set, with navigation labels that match the headings
- Mission Control Checklist owns plan-state items: parked plans, incomplete plans, and the non-essential readiness note moved out of Field Report and render next to the plan cards, and a note is dropped when its plan already renders as a card
- Mission Control Current mission card: Previous → Current → Next stepper with a segmented step progress bar, deriving previous from completed todo statuses (
previousTodoin the semantic view model) - Mission Control executing badge: green live pulse (
now-status-live); remove redundant companion status dot; awaiting/idle stay distinct without color alone; reduced motion kills the pulse - Mission Control Current mission meta: Mode and Updated demoted to discreet icon-led rows (inline SVG with accessible names and tooltips)
- Mission Control Checklist shows a plan card set (lifecycle status,
x of xprogress, datetime, Copy path) sorted executing then attention then mtime; the Plans section uses keyboard-accessible accordions with full todo lists (narrow: one open unless Shift-click or Multiple open) - Mission Control Monitor feed renders the semantic
missionControl.activitysequence (run-plan ticks, merges, staging, commits, plan progress) with copyable plan paths and commit shas; terminal/process churn stays in the Activity diagnostic section - Mission Control Current mission panel reads
missionControl.now(status text, plan, x of x, mode, current/next todo, last update) and refreshes from each SSE snapshot while preserving focus, scroll, and expanded agent rows - Mission Control narrow plugin shell: single header transport/freshness signal, removed status-bar and metric-card chrome, demoted inventory behind secondary navigation, and tuned layout for ~360–520px Cursor panels
- Mission Control render hygiene: pause background polling only when SSE is not live; restore nav hairline active state; remove dead section-loading helpers; dedupe card-flash CSS
- Mission Control accessibility pass:
:focus-visiblerings on interactive controls, keyboard activation for plan/process/git rows, scopedaria-liveupdates,prefers-reduced-motionoverrides, and improved muted text contrast - Mission Control server binds
127.0.0.1by default (HOSToverride), serves onlydashboard/static assets, and applies localhost-only CORS - Mission Control branding across the dashboard: SVG logo asset, page title, favicon, server banner, data-model description
- Active navigation item uses a 1px hairline border instead of a left accent bar, with reserved border space so the active state does not shift layout
- Dashboard snapshot generation caps terminal file reads (64 KB, 40 files) and process listings (50 entries), and reads git ahead/behind without shell fallbacks
- Registry rebuilds preserve curated non-L1 artifacts instead of silently dropping them
- Repository readiness plan triage note: verified CLI tests pass (86/86), residual A closed
/dashboardopen path: try in-IDE browser once, then clipboard + Simple Browser / external browser instructions (no retry loop on localhost crash)- Mission Control snapshot allowlists config fields for the dashboard payload instead of exporting full nested onboarding/readiness objects
Removed
- Mission Control header Copy start control (false-positive when Live but process label missing). Start from the terminal with
npm run dashboard/agent-kit dashboard, or from chat with/dashboard
Fixed
- Mission Control header logo and favicon render from a served response: the panel requested
/dashboard/logo.svgwhile the static resolver already roots request paths atdashboard/, so the URL resolved to a nonexistentdashboard/dashboard/logo.svgand returned 404 - Mission Control More sections menu is no longer clipped by the
overflow: hiddennav row that suppresses the horizontal scrollbar: the menu anchors with fixed positioning computed from the trigger rect and scrolls internally when the viewport is short - Mission Control Cockpit anchors finish their scroll across a live refresh: a snapshot re-render used to restore the scroll position captured while the anchor was still travelling, leaving the reader part way to the section
- Mission Control terminal expand controls carry an accessible name that says which terminal they belong to
- Mission Control degrades a failed snapshot into empty panels: the server error payload now carries every collection the panel reads, so a data failure no longer surfaces as a render error
/dashboardnow daemonizes Mission Control so the server survives the agent shell, verifies liveness in a separate call, and treats browser connection errors as a dead-server signal- Mission Control live refresh: expand
.cursorwatch coverage (readiness, agents, skills, commands), periodic SSE broadcast for non-file sources (git/terminals/processes), and resume poll on SSE silence so the panel no longer stays stale while transport shows Live - Mission Control polling no longer fights SSE-driven renders while the stream is connected
- Mission Control a11y: keyboard-operable table rows, reduced-motion respect for animations, and less noisy live region announcements
- Mission Control dashboard server binds
127.0.0.1by default, serves onlydashboard/static files, and restricts CORS to localhost origins on the dashboard port - Dashboard stayed on the loading pane: the
statusDotelement id shadowed the status helper, and the SSE handler set the loading flag before a debounced render that then bailed on that same flag - Concurrent HTTP and SSE requests stacked synchronous snapshot child processes;
serve.mjsnow caches payloads for 2s, reuses in-flight generation, debounces watch broadcasts, and bounds generation with a timeout - Background polling no longer wipes the rendered pane, and section selection is preserved across re-renders instead of resetting to Overview
- Render errors surface an inline failure state with escaped output instead of leaving the panel blank
- Mission Control terminal expand popup uses
data-terminal-idlisteners and DOM construction (no inlineonclickwith output content) - Mission Control HTML: restore missing
</style>close and fix activity-feed template join syntax - Mission Control XSS: escape dynamic HTML, attributes, and JS string contexts in dashboard rendering (
escapeHtml,escapeAttr,escapeJsString) - Mission Control snapshot truncates terminal, process, and git metadata strings and caps terminal/process list sizes
- Mission Control change animations only on real deltas (section hash and metric diffs), not every poll/re-render
- Mission Control LIVE badge tracks transport state (SSE live, polling fallback, reconnecting with attempt count)
- Mission Control plan and memory copy paths are correct and consistent; every copy CTA shows a toast with clipboard-failure fallback
[4.5.1] - 2026-07-24
Fixed
- CI and tests made portable to the public mirror (root-scoped plans guard, dogfood fixture skip, L0 registry assertions that tolerate public-owned
registry.jsondrift) - Version manifests (
.cursor/agent-kit.json,.cursor-plugin/plugin.json) kept in sync with package SemVer on release
Changed
.gitignore: ignore PKCS12/PFX and credential JSON patterns; ignore local readiness snapshot andagent-kit.config.json
[4.5.0] - 2026-07-24
Added
- Design contract and dogfood acceptance criteria for repository-readiness onboarding, including install-to-agent discovery handoff and the namespaced
/agent-kit-onboarddecision - CLI readiness model, repository scanner, provider evidence, and portable snapshot contract for application and non-application repositories
- Idempotent safe-readiness fixes with dry-run evidence, merge-safe repository profiles, and versioned onboarding state
- Unified install, init, doctor, and status readiness workflow with canonical L0 inventory and version parity checks
- Namespaced
/agent-kit-onboardreadiness journey with managed legacy-command migration and resume-aware session guidance - Evidence-based repository personalization with protected ownership metadata and prepared
/start-projectprofile reuse - Readiness integration scenarios, L0 inventory parity guards, prompts unit coverage, and ops/knowledge self-hosted dogfood fixture
Changed
- Docs and installer brief: single readiness narrative around
/agent-kit-onboard; skins and external review stay optional after essentials - Legacy welcome-only
/onboardcompletion semantics superseded by verified readiness (see memory decisions) - Built-in workspace skins (Autopilot, Night Shift, Ghost Runner) now include thematic emojis in chat hints and CLI banners
[4.4.7] - 2026-07-23
Fixed
- CI: Biome format in
glob.test.tsso tag CI can publish after 4.4.6 lint failure
[4.4.6] - 2026-07-23
Fixed
- CLI: stop blanket-protecting
.cursor/context/**so L0 templates andconfig.example.jsoninstall; legacy manifest globs expand to session-only paths on install/update - Launcher: missing external-review prompt tips and exits 0 (no hard error); commands prefight templates before claiming a review ran
Added
- Onboard / run-plan: External Review Ask (opt-in after skin; exhaustion Ask Run now / Always / Not now) and hitl-ask-questions gates
- CLI: external plan review arm prefers
.cursor/scripts/launcher, falls back toscripts/;--forceone-shot bypass of config opt-in - L0: ship external plan review artifacts (commands, templates,
config.example.json, canonical launcher under.cursor/scripts/) - Public sync: allowlist
.cursor/scripts/**and.cursor/context/config.example.json
Changed
- Launcher:
scripts/plan-external-review.shis a thin wrapper; canonical path is.cursor/scripts/plan-external-review.sh
Docs
- ADR / guides: external plan review promoted to L0 (still opt-in); paths and
offerOnExhausted/--force/ exhaustion Ask documented indocs/external-plan-review.md,docs/getting-started.md,docs/layers-spec.md
[4.4.5] - 2026-07-22
Fixed
- CI:
sync-publicjob installs pnpm and disablessetup-nodepackage-manager-cache so tag pushes after Actions v5 do not fail withUnable to locate executable file: pnpm
Added
- Sync: after the public sync PR merges, create a public GitHub Release (
vX.Y.Z) from CHANGELOG notes so the storefront Latest badge tracks the release (opt out withPUBLIC_SYNC_CREATE_RELEASE=false)
[4.4.4] - 2026-07-22
Changed
- CI: bump GitHub Actions to Node 24 runtimes (
actions/checkout@v5,actions/setup-node@v5,pnpm/action-setup@v5) to clear Node 20 deprecation annotations; job toolchain stays on Node 20
[4.4.3] - 2026-07-22
Docs
- README: Features table covering plans/HITL, handoff, run modes, git spine, memory loop, workspace skins, external plan review, packs, and output hygiene; Docs table links skins + external plan review
- Getting started: workspace skins subsection and onboard/continue-plan/run-plan skin defaults
Fixed
- CLI:
resolve.test.tsexecFile mock callback arity (offline path) sotsc --noEmitpasses in CI after 4.4.2
[4.4.2] - 2026-07-22
Added
- Hooks:
sessionStart(session-plan-guard.py) tips whendogfood/README.mdlists unprocessed inbox files (no watchers; consumers withoutdogfood/unchanged) - Dogfood: private analysis surface with inbox contract (naming, index, ingest ritual); sessionStart surfaces unprocessed index entries
Fixed
- CLI: auto-refresh remote registry cache on every resolve that reuses
~/.cache/agent-kit/registry/*so new L0 artifacts (e.g.onboard.md) appear without requiring--refresh; offline/fetch failures still keep the existing cache
Docs
- Update repository boundaries to document dogfood/ as private analysis folder
- Document stale remote cache missing L0 onboard error in .cursor/memory/errors/
[4.4.1] - 2026-07-22
Fixed
- CLI: Biome lint/format on
skin-bannersunit test and relatedinit/promptsformat drift (non-null assertions blocked CIbuildafterv4.4.0, which skippedpublish-npmandsync-public)
[4.4.0] - 2026-07-21
Added
- Skins: built-in packs
autopilot,night-shift, andghost-runnerunderregistry/skins/core/(schema inregistry/schemas/skin-pack.json; index inregistry/skins/core/index.json) - Skins: mode-aware chat chrome integration in
/continue-planand/run-plancommands; workspace skin configuration reading from.cursor/context/config.jsonwith built-in pack fallbacks - CLI:
agent-kit run-plantick banners fromworkspaceSkin.modes["cli-run-plan"](defaultghost-runner); loadsregistry/skins/core/<id>/skin.json, kolorist-only coloring, fail-soft to plain logs when the skin file is missing - Docs:
docs/skins-contract.mdworkspace skins schema, mode defaults, acceptance rules, and hygiene boundary;workspaceSkinkeys in.cursor/context/config.example.json - Commands:
/onboardAsk questions workspace skin pick (Keep mode defaults / Autopilot / Night Shift / Ghost Runner / Skip); mergesworkspaceSkininto.cursor/context/config.jsonwithout wiping other keys; already-onboarded menu includesChange workspace skin - CLI:
agent-kit initwizard optional clack select for the same skin preference; writesworkspaceSkininto.cursor/context/config.json(merge-safe) - Docs:
docs/public-launch-announcement.mdcopy-paste public launch text; indexed fromdocs/README.mdand linked fromdocs/public-launch.md - Docs:
docs/creating-skins.mdskin pack format, placement, contribute checklist; indexed fromdocs/README.md,docs/CONTRIBUTING.md, anddocs/contribute-upstream.md
Changed
- Rules: enhanced
ux-tone.mdcwith workspace skin chrome guidance and HITL confirmation hygiene (skins affect chat tone only, never confirmation options) - Rules:
hitl-ask-questions/onboardgate lists workspace skin pick andChange workspace skin - Docs/meta: product identity says HITL framework (not developer bootstrapper) in
docs/README.md,docs/CONTRIBUTING.md, root + CLIpackage.json, CLI banner, anddocs/cursor-native-audit.mdplugin description row - Docs: renamed launch copy from channel-specific
public-launch-whatsapp.mdto channel-agnosticpublic-launch-announcement.md - Docs: storefront claims for
/onboardand/start-projectmatch Ask questions + chat fallback, HITL gates, and Context Guardian wording (README, getting-started, bootstrap) - Sync: public sync PRs get a semantic body (Summary + CHANGELOG release notes + source SHA) and auto-merge by default (
gh pr merge --auto); opt out withPUBLIC_SYNC_AUTO_MERGE=false - Docs:
/git-prodrequires annotatedvX.Y.Ztag push after privatemain(triggerspublish-npm+sync-public); public sync auto-merge documented in checklist and repository boundaries - Sync:
scripts/sync-public.mjsruns git viaexecFileSyncargv arrays (no shell-string interpolation for branch/remote/url/message) - Docs: consumer install notes version pin for unpinned
npx @dadado/agent-kit-cli(README, install.md, getting-started) - Docs: plan execution security note (
cursor-agent --sandbox disabledaccess; registry trust model for external contributions) in getting-started and repository-boundaries
[4.3.0] - 2026-07-20
Added
- Commands:
/onboardfirst-session welcome (Ask questions,onboardedmarker in.cursor/context/config.json); bridges to/start-projectwithout writing plan files; registered as L0
Changed
- CLI: post-install Next block points at
/onboard(then/start-projectwhen you have a goal);install.md§6 /install-prompt.md/ README brief align - Hooks:
sessionStartnudges/onboardwhen L0 is present andonboardedis not true (context only; no Ask questions from the hook)
[4.2.4] - 2026-07-20
Added
- Docs:
install-prompt.mdsingle source of truth for the pasteable Cursor installer brief (README embeds the same text; blank projects can fetch the raw URL) - Sync:
install-prompt.mdon the public sync allowlist so consumers can fetch the raw URL after/git-prodmirror sync
Changed
- Docs: consumer Install CTA is pasteable Cursor agent brief + single-line
npx @dadado/agent-kit-cli install; factory / monorepopnpm --filterinstall lives in CONTRIBUTING only (storefront vs factory) - Install: Port B requires absolute workspace-root confirmation via Ask questions, prefers CLI when Node/npx exists, and accepts entry via attached
install.mdorinstall-prompt.md; Preference section keeps consumer fences one executable line each (no#comments inside fences) - CLI:
installlogs absolute project root before writing and prints a post-install Next block (/start-project,agent-kit status);initexit path mirrors the Next block
[4.2.3] - 2026-07-20
Fixed
- Sync: remove stale
dadadoentry fromscripts/public-sync.denylistso@dadado/agent-kit-clidocs and package metadata pass the public sync content guard (CIsync-publicfailed on tagv4.2.2)
[4.2.2] - 2026-07-20
Added
- Rules: always-applied L0
hitl-ask-questions.mdc(AskQuestion-first for all kit HITL gates; chat fallback; CLI clack exception) - Decision: optional external plan review via Claude Code (opt-in config, post-hoc monitoring, no HITL interference)
- Templates: plan monitor template and external review prompt for Claude Code integration (.cursor/context/templates/plan-monitor.md, plan-external-review-prompt.md)
- Scripts / commands: opt-in external plan review launcher (
scripts/plan-external-review.sh,/plan-external-review); Claude Code post-exhaustion arm; no-op if disabled orclaudemissing - Command:
/plan-review-triagefor processing Claude monitor residuals with Ask questions (write residuals plan / fix nits only / ack and stop); cross-linked from/plan-external-reviewand/run-plan - CLI:
agent-kit run-planarmsscripts/plan-external-review.shwhen the loop stops on plan exhausted (opt-in / missingclaudestay in the script; tips do not fail the loop) - Docs:
docs/external-plan-review.mdguide covering setup, workflow, configuration options, and triage guidelines for dual-agent plan validation - Docs: npm publish HITL checklist for
@dadado/agent-kit-cli(docs/npm-publish-checklist.md; linked from repository boundaries) - Security: external PR threat model section in
docs/public-launch.mdcovering contributor fork PRs, workflow protection, dependency confusion, and maintainer review guidance
Changed
- Rules:
hitl-ask-questionschat fallback documents numbered list + typed "Other"; tip notes empirical model gaps (Auto / Grok 4.5) with memory decision link - Commands:
/run-plantick close documents optional external plan review after exhaustion (not a Cursorstophook; never steals/git-prodHITL);/plan-external-reviewnotes the wired exhausted path - Commands / install / onboarding: Ask questions for confirmations (install Port B, context-guardian, continue-plan, git-prod, run-plan risk, handoff preference); bootstrap + getting-started aligned
- Install.md: Ask questions wired for all four residual gates (registry URL/ref, git hooks install, nested agent-kit/ migration, structure-already-existed confirmation)
- Commands:
/continue-planmulti-plan picker when multiple resumable plans exist; Ask questions for plan selection and next to-do confirmation - Commands:
/start-projectalways creates a plan (Broad Intake Review, park prior active plan, Ask questions for Gate A/B); no continue-vs-new; resume via/continue-plan - Rules / hooks: mirrored always-create-plan + Broad Intake + Ask questions HITL across all surfaces (cursor-plan-handoff, session-plan-guard.py, plan-routine, docs)
- Memory: supersede start-project two-gates decision (2026-07-20 always-create-plan + Broad Intake + Ask questions; park prior plan; no continue-vs-new)
- Docs: consolidated overlapping topology/cutover docs with
topology-private-public.mdas SoT and short pointers from other docs - Breaking (npm): CLI package renamed from
@agent-kit/clito@dadado/agent-kit-cli(publish under maintainer npm scope@dadado)
Fixed
- Docs: drift/coherence inventories no longer hardcode stale product version
3.5.1(point topackage.json) - Memory: loop-review mandate addendum (continuous monitoring stays human HITL, not silent agent cancel); Decisions index lists the mandate
- Docs: Phase B topology status marked COMPLETE; cursor-native-audit product version aligned to 4.2.1
[4.2.1] - 2026-07-19
Fixed
- Sync: append-only public sync preserves public-owned
registry/**across allowlist replace (Phase B SoT no longer wiped when excluded from the private→public manifest)
Changed
- Docs: topology + boundaries updated for Phase B invariant (sync preserves public-owned registry; private remains factory for CLI/sync/dogfood even after public storefront + registry SoT)
[4.2.0] - 2026-07-19
Fixed
- Docs: root README maintainers section no longer claims "this repo is agent-kit-dev" (false on the public mirror after sync); names private factory vs public storefront + registry SoT (Phase B)
Changed
- Docs: Phase B phase5 leak audit + public-URL install dogfood (2026-07-19) - Guard public tree pass;
node scripts/sync-public.mjs --dry-runexit 0 (no session/secret paths; noregistry/**;.cursor/hooks.jsonin set); smokeinstall/update/statusagainsthttps://github.com/agent-kit-startup/agent-kit@main(24 L0 files); contribute gate rejects.cursor/HANDOFF.md. Gap:@agent-kit/clinot yet on npm (npx404); documented checkout +--urlpath in README / getting-started / bootstrap - Sync: Phase B cutover -
scripts/public-sync.manifestno longer mirrorsregistry/**from private (include removed,!registry/**exclude); public repo is SoT for registry - Contribute: Phase B cutover - contribution surfaces now point to public-first registry flow (public repo is canonical; CLI instructions use
--base main) - Docs: Phase B final pre-freeze public mirror recorded (private
9f6c717→ public PR #8; registry still in sync allowlist) - Docs: Registry freeze messaging - private registry edits will soon stop publishing; prepare for Phase B cutover to public-canonical registry
[4.1.0] - 2026-07-19
Added
- CLI:
agent-kit run-planheadless continuous plan runner (fresh agent per tick,LOOP_TICK_RESULTcontract, stop file / max-ticks / no-progress guards); pluggable backend (cursor-agentdefault,claudereserved) - Commands:
/run-planunifies continuous plan execution; strategy auto-selected (orchestrated workers, in-session loop, or headlessagent-kit run-plan) - Registry: expanded artifacts[] from ~17→50 entries with cursor-skills-* community skills (12 new) and checklist-n8n support
- Domain packs: DevOps templates (CODEOWNERS, GitLab CI variants for Docker/Firebase/content)
- Domain packs: engineering-architecture templates (ADR, task-brief)
- Domain packs: context-management template (context-pack)
- Docs: contributor quickstart section in CONTRIBUTING.md with skill placement and testing workflow; worktree isolation note for headless plan execution; secrets hook scope clarification
- Docs: ops/docs audit follow-ups (Phase 5) - contributor workflow improvements, git worktree isolation notes, pre-commit hook scope clarification
Removed
- Registry: four
cursor-skills-*mirror skills (json/n8n/prompts/sql) deduped into their canonical counterparts;checklist-n8n.mdmoved inton8n-workflows
Fixed
- CLI:
guessRegistryPathnarrows the legacy flat skill id beforepath.posix.joinsopnpm typecheckpasses under strict indexed access - Security: replaced shell-interpolated git commit in
scripts/sync-public.mjswithexecFileSyncto prevent command injection
Changed
-
Security: bump monorepo devDependencies to clear pnpm audit critical/high (turbo >=2.9.14, vitest >=3.2.6, vite >=7.3.5 for the CLI test toolchain)
-
Release: root and
packages/clipackage.jsonversions aligned to closed CHANGELOG SemVer (4.0.1);/git-prodmust bump both when closing a release (seeautogit/gitupdate.md) -
CI: run
pnpm typecheckbetween lint and test in the build job -
Docs: skill-to-agent routing one-liners on community skills (
n8n-workflows,sql-postgres,prompts-markdown,json-data-config) stating skill-first in the main window vs the matching demoted Task subagent, withdocs-repoandsecurity-reviewerrouting notes;/git-staging,/git-prod,/handoffnow state they run in the main window and are not Task-dispatched by default -
Commands:
/run-plan-loopand/run-plan-orchestrateddeprecated to thin aliases of/run-plan; tick contract lives in one place (run-plan.md) -
Scripts:
scripts/plan-loop.shis a thin wrapper that forwards toagent-kit run-plan -
Docs: README usage, getting-started, plan-routine, install.md, migrate-consumer, layers-spec updated for the single continuous command
-
Registry:
build-registry.mjsfails on duplicate skill ids and preserves hand-curated L0 artifacts across rebuilds -
Docs: CONTRIBUTING documents two contribution paths (improve existing skill vs new skill id)
-
Domain packs: consolidated pack.json for devops/cybersec/engineering-architecture/context-management with expanded skill sets
-
Registry: community skills count increased from 7→19 to include cursor-skills-* collection
-
Security: git-secrets-safety rule dual placement (L0 + cybersec pack)
-
Docs: updated domain-packs.md and layers-spec.md for Phase 4 consolidation
-
CLI: L0/install types updated to support expanded domain pack structure
-
Schemas: agent-kit.pack.schema.json updated for enhanced pack configurations
[4.0.1] - 2026-07-19
Fixed
- CLI: Biome format in
handoff.tspending todo spread (unblocks CI lint and public sync after v4.0.0).
4.0.0 - 2026-07-19
Added
- Docs: three-layer cheat sheet (local scratch / private factory / public storefront) in
docs/repository-boundaries.md, linked from root README and docs index. - Skills: translated community and core skills to English (n8n-workflows, json-data-config, clickup, ux-message-flows, prompts-markdown, clean-code, sql-postgres) with registry mirrors updated.
Fixed
- Public sync allowlist includes
.cursor/hooks.json(sibling of.cursor/hooks/**). Without it, consumeragent-kit installfrom publicmainwarnedMissing in registryand skipped Cursor-native hook wiring. /start-projectHITL: two gates (approve plan file, then approve first unit); active HANDOFF asks continue vs start new; goal-in-same-message is not execute permission. Aligned/continue-plan,sessionStarthard rules,cursor-plan-handoff,plan-routine, getting-started, README.
Changed
- Breaking: L1 pack ids renamed to English:
gestao-projeto→project-management,gestao-contexto→context-management,engenharia-arquitetura→engineering-architecture(dirs +registry/packs/index.json+ regeneratedregistry/registry.json+ CLIDOMAIN_PACK_IDS). Update consumer manifests that still list the old ids. - Docs inventories refreshed post EN sweep:
coherence-inventory,drift-inventory,cursor-native-auditaligned to 3.5.x release notes, 10 commands, EN pack ids, and Phase B cutover (removed stale EN-thesis / Fase labels). - CHANGELOG header translated to English (body history unchanged).
- Public surface EN sweep close:
HANDOFF.md.example, context templates,cursor-handoffmessages,.cursor/hooks/**user strings, and sync-allowlisted residue translated; optional PT blurb kept only indocs/github-about.md. - Root/docs and CLI user-facing strings:
adicionar-skills.mdrenamed toadd-skills.md(EN body);categories.md,install.mdcomments,docs/repository-boundaries.mdflow section, and related docs residue translated; CLI prompts inprompts.ts,handoff.ts,init.ts. - Stack rules under
.cursor/rules/cursor-skills-*.mdc: remaining Portuguese bodies translated to English (api, clickup, devops, groovy, integrations, json, mobile, n8n, node, php, prompts, python, sql, testing, webdesign); frontmatter globs preserved.generalandgit-workflowwere already EN. - Agents under
.cursor/agents/: bodies translated to English;testes-roteirosrenamed totest-suites(pack + regeneratedregistry/registry.json); docs inventories updated. - Public sync PR heads use semantic names (
sync/vX.Y.Z-<shortsha>) instead ofsync/private-<run_id>; re-runs update the same head and close supersededsync/*PRs. CI no longer overridesPUBLIC_SYNC_BRANCH. - Public
Protect mainruleset: Repository Admin bypass (always) so solo maintainer can merge sync PRs without a second reviewer (avoids self-approval deadlock).
3.5.1 - 2026-07-19
Added
pre-pushauthorized prod path:ALLOW_MAIN_PUSH=1 git push origin main(keeps the hook on; preferred over--no-verifyfor/git-prod). Documented ingit-hooks/README.mdandautogit/gitupdate.md.
Changed
- Docs inventories (
coherence-inventory,drift-inventory) andgit-autogitagent aligned to English command names; legacy homolog alias references removed from live surfaces.
3.5.0 - 2026-07-19
Adicionado
- Guardas de hook
git-hooks/pre-commitegit-hooks/pre-push: bloqueiam commit e push direto emmain/master;git-hooks/README.mddocumenta instalação e o override pontual (--no-verify). - Native Cursor hooks (L0):
.cursor/hooks.json+.cursor/hooks/agent/(sessionStartinjeta HANDOFF + hard rules;preCompactavisa handoff). Soft rules sozinhas não bastavam no dogfood. Documentado emdocs/layers-spec.md,docs/getting-started.md,docs/bootstrap.md.
Alterado
- Native hooks: removed
stopfollow-up (stop-phase-guard.py) so/git-staging//git-prodHITL is not interrupted; keepsessionStart+preCompact. Session hard rules note that HITL slash commands keep the turn. - Orchestrated routing: worker signal →
subagent_typetable and fallback in/run-plan-orchestrated; optional plan todoworker_typeinautogit/plan-routine.mdand plan template. - Agent install orphans:
docs-repoagent added to L1engenharia-arquitetura(skill + agent, clean-code pattern);git-autogitand thin stack agents (json-guardian,prompts-agents,n8n-workflows,sql-schema) documented as dogfood-only / skill-first indocs/domain-packs.mdanddocs/coherence-inventory.md. Registry regenerated. - README: reescrito para versão lean em inglês (~54 linhas), focado no valor principal (contexto persistente + git seguro) e fluxo básico, removendo detalhes internos para aumentar adesão inicial.
- Docs sweep: command names and CLI examples aligned to English (
/start-project,/continue-plan,agent-kit, pack ids likecontext-management) acrossdocs/,add-skills.md, and.cursor/context/templates/plan.md. - Modo manual endurecido:
/start-projecte/continue-plan(e rulescursor-plan-handoff/context-guardian) param após uma fase e não dispensam perguntas de contexto. Multi-fase na mesma janela só via/run-plan-loopou/run-plan-orchestrated. - README: abertura ampliada de "memória de contexto + git seguro" para o escopo real - harness do workflow completo (bootstrap personalizado, plano → execução, integração de PM/automação/infra e DevOps staging-first estruturado que faz os agentes lerem o estado real do projeto). "Why you'd want it" ganha bullets de loop completo e DevOps; produção segue exigindo confirmação.
- Anti-slop: política que elimina o caractere travessão (em dash) de mensagens de commit, textos e docs, mantendo-o apenas em citação literal obrigatória. Novo padrão no skill
clean-codee reforço nas rulesagent-output-hygiene,docs-professional-standardeux-tone. Scrub aplicado nas rules, skills e docs de face (README, CHANGELOG,install.md,docs/). - Spine DevOps reforçado nas rules
cursor-skills-devopsecursor-skills-git-workflow: staging-first (nunca trabalhar emmain), auditoria first-parent domaine poda de branch legada. - CHANGELOG: links de comparação de versões atualizados (faltavam 3.2.0 a 3.4.0 e o
[Unreleased]apontava para uma tag antiga).
Removido
- Branch legada
homologacao(local e remotos): migrada parastaging.
3.4.0 - 2026-07-19
Alterado
- README: reescrito em voz de produto para leitor externo - abre pela dor (perder contexto em chats longos), explica handoff/plano/staging→prod em linguagem comum e remove jargão interno do texto (L0, Core Pack, hygiene, spine); tabela de docs descreve cada guia pelo conteúdo.
docs/getting-started.md: reescrito full em voz de produto - install, tabela de comandos em linguagem comum, "a normal day" e seção separada para quem desenvolve o kit.docs/bootstrap.md: reescrito full - abre pelo layout que o install gera (não pelo anti-pattern); passos de install/update/migração em linguagem comum.docs/domain-packs.md: reescrito full - explica o que é um pack e para que serve, tabela "what it adds / good for", sem jargão de fase.docs/layers-spec.mdedocs/agent-kit-manifest.md: mantêm o modelo L0–L3 (docs de maintainer), mas ganham abertura em linguagem simples e perdem referências de sessão ("Phase 0", "fleet migration", "drift denominator", "f1-/f2-/f6-", seções de "Acceptance").docs/public-launch.md: checklist marca ruleset demaindo repositório público como ativo.
3.3.1 - 2026-07-18
Alterado
- README: rewrite slim em inglês - pitch HITL, install L0, fluxo, CLI lifecycle e links; remove inventário de stack (ClickUp/n8n/SQL…) e seção PT duplicada; L0 alinhado a
packages/cli/src/lifecycle/l0.ts. docs/github-about.md: Description alinhada à tese HITL (deixa de usar “developer bootstrapper”).docs/public-launch.mdedocs/repository-boundaries.md:PUBLIC_REPO_TOKENdocumenta tambémWorkflows: write(sync com.github/workflows/).
3.3.0 - 2026-07-18
Alterado
- README: abertura reescrita em voz de produto (princípios HITL, estrutura, hygiene, core vs stack) - remove tabela de posicionamento interno e link para checklist de ops.
- Sync público:
install.md,categories.md,add-skills.mdeHANDOFF.md.exampleincluídos no manifest - README público os referencia (links quebravam no espelho). - Política do repositório público: sync passa a abrir PR contra
mainpor padrão; CI usaPUBLIC_REPO_TOKEN;mainpermanece como única branch longa e recebe ruleset com review + checkbuild. docs/CONTRIBUTING.mdedocs/cursor-3-features.md: guideline de tooling Cursor-native reescrita em termos genéricos (sem citar gateway específico).- Hygiene no conjunto público:
docs/review-camadas.mdsem nome de org privada, números de PR e ids de sessão;docs/cursor-native-audit.mdedocs/public-launch.mdsem referências a paths privados (.cursor/plans/,.cursor/memory/); denylist do sync ganha\bWAM\be\bSofia\b(guard estrutural).
Removido
docs/CONTRIBUTING.md: seção GitHub CLI (gh) - troubleshooting de autenticação local (PAT fine-grained, keyring da máquina) não é guideline de contribuição; conteúdo já coberto em.cursor/memory/errors/eautogit/gitupdate.md(troubleshooting).
3.2.0 - 2026-07-17
Adicionado
- Runbook genérico de migração consumer:
docs/migrate-consumer.md(YOUR_PROJECT; manifest +updatepreserva L3; loop/orquestrado). - Frota de consumers migrada (
f4-migrar-frota): nestedagent-kit/removido; manifests v3.0.0; L3 preservado (inventário anonimizado emdocs/drift-inventory.md). - CLI
agent-kit contribute: detecta drift/novos artefatos, gate anti-slop/hygiene,--writepara checkout local + corpo de PR sugerido (docs/contribute-upstream.md). - Coerência interna (
f6): skills SoT no registry (incl.json-data-config,prompts-markdown,ux-message-flows); mergecode-deslop→clean-codeeclickup-project-mgmt→clickup; workspace só viaagent-kit update; inventário atualizado. - Repo público (
f6): README EN com tese HITL;docs/public-launch.mdgo/no-go;sync-public.mjsdefault append-only (--force-snapshotescape hatch). - Topologia Fase 7 (
f7-topologia-repos):docs/topology-private-public.md- Phase A mirror vs Phase B registry canônico no público; cutover e promote runbook; boundaries/CONTRIBUTING alinhados. - Marketplace (
f7-marketplace): skills comversion/categoryno frontmatter; builder →registry.json;docs/marketplace.md+ gate em CONTRIBUTING; plugin.json alinhado à tese HITL. - MCP pago (
f7-mcp-pago): spec Release 2 em doc privado (valor vs registry grátis, tiers, infra, gate de implementação). - Review camadas (
review-camadas):docs/review-camadas.md- pass HITL/gates; residuals só ops. - Bootstrap sem cópia de pasta:
docs/bootstrap.md;install.md/ README / getting-started apontam paraagent-kit install(L0 +autogit/+ manifest); L0 passa a incluirautogit/gitupdate.mdeautogit/plan-routine.md. - CLI lifecycle:
agent-kit install/update/diff(comadd/statusalinhados) contra registry local ou cache remoto;updatee cópias respeitam paths L3 emprotected/overridesdo manifest. docs/drift-inventory.md: inventário de drift entre workspaces (cópiasagent-kit/, contagens, candidatos L0, artefatos L3 e órfãos a promover).docs/layers-spec.md: spec das camadas L0–L3 (precedência, nomenclatura, lista L0, packs L1, limites L2/L3).- Comando
/executar-plano-loop: execução contínua do plano com update de status nos to-dos a cada tick, HANDOFF e/git-stagingautomático (nunca/git-prodno loop). - Comando
/executar-plano-orquestrado: janela principal magra + workers (Task); contrato de summary; staging automático; fallback para loop/manual se não houver subagentes; L0 no CLI (packages/cli/src/lifecycle/l0.ts). - Template de plano
.cursor/context/templates/plan.mdcom budget de contexto por to-do (read_scope,worker_contract,max_ticks);autogit/plan-routine.mde rulecursor-plan-handoffdocumentam os campos. - Manifest de distribuição
.cursor/agent-kit.json: schema JSON (schemas/agent-kit.manifest.schema.json), doc (docs/agent-kit-manifest.md), parser/tipos no CLI, dogfood neste repo;agent-kit statusmostra manifest + profile. - Domain packs L1 (
registry/packs/*/pack.json+docs/domain-packs.md): membership dos 7 packs (cybersec,devops,engenharia-arquitetura,clean-code,gestao-projeto,gestao-contexto,quality); schemaschemas/agent-kit.pack.schema.json. - Registry schemaVersion 2:
registry/registry.jsonpassa a listarpackseartifacts(rules/agents/commands/hooks via packs);node scripts/build-registry.mjs;agent-kit addinstala skill ou pack (--skill/--packse id colidir).
Alterado
- Hygiene: origem de sessão ≠ caso de uso do produto; dogfood canônico = este monorepo; docs de migrate/drift/bootstrap sem nomes de consumer; decisão
2026-07-17_session-origin-not-product-usecase. docs/drift-inventory.md/docs/bootstrap.md: piloto = dogfood no SoT; migrate-consumer = runbook genérico.agent-kit updatedeixa de regenerar só pelo wizard profile: sincroniza L0/packs/skills a partir do manifest e do registry.docs/getting-started.md: tabela de comandos cominstall/diff/ lifecycle L3.- Decisão em
.cursor/memory/decisions/: título e arquivo renomeados para framework HITL (contra autonomia sem revisão) - remove termo transitório do posicionamento do produto; índice e referência histórica no CHANGELOG alinhados. docs/README.md: links para inventário de drift e spec de camadas.autogit/plan-routine.mde rulecursor-plan-handoff.mdc: plano primeiro; três modos (manual / loop / orquestrado); placar de status no frontmatter.docs/getting-started.md,docs/layers-spec.md,docs/coherence-inventory.md: documentam o loop no core.
Corrigido
- Sync público: spec de pricing (doc privado) excluída do manifest até decisão de publicação; links públicos ajustados.
- Segurança (CLI): registry remoto valida
url/refantes dogit clone- sóhttps://, rejeita transportes que executam comando (ext::,file://,ssh) e argument injection (-...); subprocessos git rodam comGIT_ALLOW_PROTOCOL=https. Fecha o vetor de RCE viaregistry.urlem.cursor/agent-kit.jsonde projeto não confiável. - Sync público:
sync-public.mjsganha guard de conteúdo além do allowlist de paths - bloqueia shapes de secret (AWS, PAT, private key, Slack) e termos de denylist privada (scripts/public-sync.denylist, fora do manifest público; override viaPUBLIC_SYNC_DENYLIST). docs/drift-inventory.md: inventário totalmente anonimizado (workspaces →consumer-N, artefatos L3 → exemplos genéricos); nenhum nome de consumer privado no conjunto sincronizado ao público.- CI: contexto
secretsnão é permitido emifde job - jobssync-publicepublish-npmagora condicionam só por ref/evento e os steps pulam com aviso quandoPUBLIC_REPO_URL/NPM_TOKENnão estão configurados (oworkflow_dispatchfalhava com HTTP 422). scripts/trigger-public-sync-after-prod.sh: aceita remotes GitHub com alias SSH (ex.:git@github-agent-kit:owner/repo.git), não só URLsgithub.com.
3.1.0 - 2026-07-14
Alterado
- Staging-first:
git staging→origin/stagingpassa a ser o comando/branch canônico do spine DevOps;git homolog/homologacaoviram sinônimos legados. Branchstagingcriada no origin a partir dehomologacao. Atualizados:autogit/gitupdate.md(prompts "git staging" e "git prod" com fechamento de release no CHANGELOG e passo de sync público),autogit/plan-routine.md, rules (cursor-skills-git-workflow,cursor-skills-general,cursor-skills-devops,cursor-skills-clickup), commands (git-stagingprincipal,git-homologlegado,git-prod), agents (git-autogit,clickup-tasks), skill coregit-workflow, README,install.md,cursor-handoff, docs (repository-boundaries,getting-started,cursor-3-features,coherence-inventory) e CLI (detecção de branchstaging, labels e textos de handoff; valor internohomolog-prodmantido por compatibilidade). Decisão registrada em.cursor/memory/decisions/2026-07-14_staging-first-branch-rename.md.
Adicionado
docs/cursor-native-audit.md: auditoria Cursor-native (plugin, rule modes, shell hooks, gapshooks.json, VS Code/Windsurf).docs/coherence-inventory.md: inventário Fase 1 - classificação core | stack | merge de rules, skills, hooks, agents e commands.
Alterado
.cursor/rules/ux-tone.mdc: frontmatter YAML (alwaysApply: true) para carregamento consistente no Cursor.docs/README.md: links para cursor-native audit e coherence inventory.- Identidade do projeto atualizada: nova descrição unificada - "Developer bootstrapper for AI-assisted IDEs" - propagada para README,
package.json(root + CLI),plugin.json,docs/github-about.md, CLI meta, e todas as docs (getting-started,creating-skills,cursor-3-features,CONTRIBUTING,repository-boundaries,templates/*/README). README reestruturado: "Why v3" substituído por "What it does" (understand → generate → maintain context) e "Key features".
Corrigido
packages/cli/src/utils/logger.ts: import nomeado dekolorist(ESM semdefault) para compatibilidade com Node 20+ ao executar a CLI.
Adicionado
scripts/trigger-public-sync-after-prod.she script npmpnpm git:trigger-public-sync: apósgit prod, disparamworkflow_dispatchdo CI noorigin(sync_public=true, refmain) quando existe remotepublicno GitHub; integrado ao passo 13 deautogit/gitupdate.md,.cursor/commands/git-prod.md, regracursor-skills-git-workflow.mdce agentegit-autogit.md. Arquivo incluído nopublic-sync.manifest.docs/repository-boundaries.md: English doc - local × Git × npm table; CI blocks trackingHANDOFF.mdand*.plan.mdunder.cursor/plans/; private vs public mirror and sync manifest (see file for current setup).- Passo Guard public tree em
.github/workflows/ci.yml. scripts/sync-public.mjsescripts/public-sync.manifest: sync por allowlist para repositório público espelho.- Jobs CI sync-public (tag
v*ouworkflow_dispatch) e publish-npm (tagv*), ativos apenas quando os secretsPUBLIC_REPO_URLeNPM_TOKENestiverem configurados. docs/github-about.md: texto de About para o repositório GitHub (description + topics).- Core skills (5) incluídos em
registry/registry.json(antes só tinha community). initeupdate: quandoregistry/registry.jsonexiste no projeto, instalam automaticamente as skills core selecionadas no profile em.cursor/skills/(installSkillsByIdsemregistry/install.ts).- Regra
.cursor/rules/memory-loop.mdc, layout.cursor/memory/(errors/,decisions/,_index.md) e subagentememory-extractorpara consolidar aprendizados entre sessões. agent-kit handoff: lê plano ativo em.cursor/plans/, grava.cursor/HANDOFF.mdcom progresso, to-dos e rotinas sugeridas; se existir.cursor/agent-kit.config.json, usa workflow Git e ferramentas de gestão de projeto do perfil (senão sugere PR/MR genérico).- Scanner CLI: metadados por provedor Git (
GIT_PLATFORM_META), tipos de CI e de ferramenta de gestão de projeto ampliados para geradores e docs. - Rules
agent-output-hygiene.mdc(chat ≠ artefato versionado) edocs-professional-standard.mdc(documentação herdável, sem contexto transitório). - Comando
/git-staging(alias degit homolog) em.cursor/commands/git-staging.md. - Decisões em
.cursor/memory/decisions/: framework HITL (contra autonomia sem revisão), harness estrutural vs stack, output hygiene, docs professional standard. add-skills.md,install.md,categories.md,registry-schema.md,skills-registry.json, scriptsbuild-registry.shenew-skill.sh,HANDOFF.md.example.
Alterado
- Public Harness F0: tese de framework (autonomia + humano no loop); spine DevOps (
git staging≡git homolog→git prod→ memory-loop); PM (ClickUp) e n8n on demand, não core. autogit/gitupdate.md,autogit/plan-routine.md: rotinas alinhadas ao spine DevOps e sinônimos staging/homolog.- Agents, rules, skills (
.cursor/+registry/skills/core/) e commands revisados para hygiene, docs standard e HITL. cursor-handoff, README edocs/cursor-3-features.mdalinhados à narrativa de harness estrutural.
Alterado
docs/repository-boundaries.md: fluxo homolog → prod →pnpm git:trigger-public-sync(além de tag/dispatch manual).autogit/gitupdate.md: passo 13 detalhado; resumo emgit prod(What it does)..gitignore: ignorar.cursor/plans/**/*.plan.md(incluiarchive/); snapshots de plano arquivado deixam de ser candidatos a commit.autogit/gitupdate.md: seção sobre nomenclaturamain/homologacao, ambientes de CI vs branches e boas práticas GitHub/GitLab..cursor/memory/: índice único (errors + decisions) e decisão registrada sobre branches e ambientes.- Narrativa de handoff unificada: handoff em arquivo é a fonte da verdade; features nativas do Cursor (summaries,
/resume, Agents Window) complementam - não substituem. context-guardian.mdc: planejar por ~50% da janela, gravar HANDOFF após cada task, aviso proativo em ~60%.cursor-plan-handoff.mdc: um HANDOFF por projeto, atualizar to-dos sempre, sugerir rotinas pós-task; CLI + script./cursor-handoffopcional documentados..cursor/commands/handoff.md,context-librarian.md: fluxo completo e rotinas pós-task.docs/cursor-3-features.md: Cursor nativo como complemento, não substituto.generator/cursor.ts: rules geradas incluem handoff awareness (regra03-handoff.mdc).- README,
docs/github-about.md,docs/creating-skills.md: lista completa de comandos CLI; esclarecimento core skills vsregistry/;adddescrito como core + community. agent-kit add: descrição do comando (core ou community).agent-kit handoff: plano ativo → HANDOFF.md;./cursor-handoff handoffopcional quando o script existe na raiz (Unix; Windows orientar Git Bash/WSL).docs/CONTRIBUTING.md: seção GitHub CLI (gh) - PAT fine-grained vschecks:read, OAuth no navegador ou PAT classic comrepo.CHANGELOG.mdreformatado para Keep a Changelog com seções PT-BR,[Unreleased]e links de comparação.registry/registry.json: estrutura separada em{ core, community }em vez de array flat.registry/client.ts: nova funçãoallSkills()que busca em core + community.registry/install.ts: detecta core vs community +installSkillsByIdspara instalação em lote.registry/types.ts:RegistryIndex.skillsagora é{ core, community }.
Removido
- Dependência
zoddo CLI (não era utilizada em nenhum arquivo).
Corrigido
- CI (GitHub Actions):
pnpm/action-setup@v4não recebe maisversionduplicada; usapackageManagerdopackage.json(pnpm@10.0.0).
3.0.0 - 2026-04-05
Adicionado
- Monorepo com
pnpm+turboe CLI em TypeScript (packages/cli). - Scanner de projeto (
agent-kit scan): detecta stack, IDE, estrutura existente. - Wizard dual-path: setup guiado para repos existentes e greenfield.
- Gerador adaptativo: gera regras, skills e templates conforme IDE e plano/tier.
- Registry installer (
agent-kit add <skill>): instala skills do catálogo core/community. - Estrutura
registry/(core + community) etemplates/por IDE. autogit/gitupdate.md: rotinasgit homolog/git prodcom Conventional Commits, SemVer e CHANGELOG.autogit/plan-routine.md: roteiro de criação de planos com ClickUp sync.git-hooks/prepare-commit-msg: removeCo-authored-by: Cursordos commits..cursor/commands/: git-homolog, git-prod, handoff, continuar-plano, iniciar-projeto, context-status, dicas, resumo..cursor/agents/: 12 subagentes (git-autogit, cleancode-refactor, context-librarian, docs-repo, json-guardian, n8n-workflows, prompts-agents, security-reviewer, sql-schema, tech-lead, testes-roteiros, clickup-tasks)..cursor/rules/: regras always-on (general, git-workflow, clickup, plan-handoff, context-guardian, ux-tone).- CI via GitHub Actions (lint, test, build).
- Documentação: getting-started, creating-skills, cursor-3-features, CONTRIBUTING.
Alterado
- Migração completa de v2 (shell script + JSON registry) para v3 (TypeScript monorepo).
- v2 preservada em
_legacy/v2/para referência.