Estimated horizon: 1–2 months of session work to reach shippable. Picker: whoever opens the next session in this tree. Read
.claude/CLAUDE.mdfirst — it has the live-system map and the source-of-truth rule. Phases are sequential; each ends with a gate. A failed gate halts the phase (andon) — fix before proceeding.
- Clone in the three upstream sources (
ai-loadout,claude-memories,claude-rules) underpackages/ - Clone in the runtime hook under
apps/hook/ - Drop CLAUDE.md and this ROADMAP for the next picker
-
git init+ initial commit (no remote yet — deliberate; see the repo-first waiver in CLAUDE.md)
Goal: make the four trees install + build + test under one root.
- Root
package.jsonwithworkspaces: ["packages/*", "apps/*"]— npm workspaces (studio standard; not pnpm/yarn —workspace:*protocol is NOT valid npm, depend by package name and let the workspace resolve it) — commitab8aad8 - One root
tsconfig.base.jsonextended by each package — commitab8aad8 - Package names do not change in this phase.
packages/kernelkeeps@mcptoolshop/ai-loadout(it is published under that name; renaming is a Phase 5 decision).apps/hook's existing"@mcptoolshop/ai-loadout"dependency then resolves to the workspace copy automatically. - Each package keeps its own
package.json; versions follow the root version from Phase 5 onward -
npm ciat root → working install; rootbuild/test/verifyscripts run the three TS packages in order, all green (203 baseline → 228 after Stage A) — commitab8aad8 - Sync check:
git diff --no-index apps/hook ~/.claude/loadout-hookshows no drift (runapps/hook/smoke-test.ps1after any hook change)
Gate: green root build, all existing suites pass, hook still injects when driven with stdin JSON, mirror-vs-live diff clean.
The hook went live 2026-06-10 and immediately produced field evidence. Fix the known defects before building more surface on top of them.
- Score threshold in the hook. (DONE — commit
43155a8, HOK-01.)apps/hook/loadout-hook.mjsnow applies aHOOK_MIN_SCORE=0.3floor alongside themanual-entry filter, so below-threshold matches emit nothing. Resolves the observed off-topic claude-guardian/duel-system pointers. (Calibration against accumulatedusage.jsonlcan still tune the floor later.) - Index hygiene at the source. The generated index contains junk entries derived from prose lines that aren't topic refs — confirmed examples:
memory-files(from a "- Memory files:" line),full-frame(from "Full frame: …"),see-also-…(a 100+-char id from a "See also:" line). Fix inpackages/memories' parser/index-gen: skip refs whose derived name is empty/generic, and add avalidaterule flagging ids > 60 chars. Then regenerate the store index + global copy and confirm the junk is gone. - Fix the 1 remaining LONG_SUMMARY entry (
newsletter-publishing-…, 159-char summary) — shorten its MEMORY.md line. - Keyword quality pass. Weak matches come from generic auto-extracted keywords. Use
ai-loadout overlapsto find routing ambiguities; hand-curate keywords (via frontmatter) for the worst offenders. - First observability report (only if ~2 weeks of usage.jsonl has accumulated by this session; otherwise defer to Phase 3's
reportcommand):ai-loadout usage/dead/budgetover the log → list never-loaded entries and wrongly-loaded entries; feed fixes back into keywords.
Gate: hook is silent on a deliberately off-topic prompt; junk entries absent from a regenerated index; claude-memories validate 0 errors; ai-loadout validate 0 warnings.
Goal: one loadout-os binary that wraps the three CLI surfaces AND absorbs the operational rituals. Built this session — packages/cli/ (@mcptoolshop/loadout-os, bin loadout-os): namespaced memories/rules wraps + flat kernel verbs + doctor/report/refresh rituals + hook test; 78 tests. refresh is built with a NAMED_COMPENSATOR but not yet run live; old-bin deprecating shims deferred to Phase 6.
- New
packages/cli/withbin: { "loadout-os": "..." } - Wrapping subcommands:
loadout-os memories <index|validate|stats|health>— wrapspackages/memories/loadout-os rules <analyze|split|validate|stats>— wrapspackages/rules/loadout-os resolve|explain|usage|dead|overlaps|budget|validate— wrapspackages/kernel/loadout-os hook test— drivesapps/hookwith a sample prompt
- Ritual subcommands (this is the consolidation payoff — one command instead of a 3-step ritual):
loadout-os refresh— store index → validate (halt on errors) → copy/rewrite to~/.ai-loadout/index.json. Replaces~/.ai-loadout/refresh.ps1; update the Index Freshness Ritual text in the global CLAUDE.md when this lands.loadout-os doctor— one health screen: store validates, indexgeneratednewer than newest store .md mtime, global copy matches store copy, hook wired in~/.claude/settings.json, usage.jsonl growing.loadout-os report— usage/dead-entry/budget summary over usage.jsonl (the observability loop, run monthly).
- Old binaries (
claude-memories,claude-rules,ai-loadout) get thin shims that delegate + deprecation-warn for one minor release -
--helpcomplete and accurate (Hard Gate C of shipcheck)
Gate: shipcheck init + audit cleanly on the new CLI; hard gates A–D green; loadout-os refresh produces a byte-identical result to the manual ritual.
Goal: one Starlight handbook + one landing page covers the whole layer.
-
site/at the root, Astro + Starlight (use thehandbookskill) - Sections: Kernel, Memories, Rules, Runtime hook, Rituals (
refresh/doctor/report), Migration from the three legacy packages - Single landing page replaces the three separate
mcp-tool-shop-org.github.io/{ai-loadout,claude-memories,claude-rules}/pages - CNAME + GitHub Pages wiring (deploy itself waits for Phase 6)
Goal: reserve the name, set up Trusted Publishing, create the GitHub repo.
- Naming — RESOLVED 2026-06-16:
loadout-os(rebrand frommemory-os; director call). Matches the*-ossister pattern (game-foundry-os, research-os) and keeps continuity with@mcptoolshop/ai-loadout+~/.ai-loadout/. - Reserve
@mcptoolshop/loadout-os— deferred to the Phase 6 real publish: the@mcptoolshopscope already protects the name (no squat risk on a scoped package), and the don't-default-to-empty-placeholder rule favors publishing the real treatment-complete package over a 0.0.0 placeholder. Wire OIDC/Trusted Publishing in the rootpublish.yml. - Create
mcp-tool-shop-org/loadout-oson GitHub (private at first; public at Phase 6 publish) — this closes the repo-first waiver - Add remote, push everything to date
- CI workflow per
github-actions.mdrules: paths-gated, ubuntu-latest only, concurrency block, max 2 workflow files- Remove
packages/*/.github/(8 inert workflow files + 2 dependabot.yml) BEFORE adding the remote; author a single root CI per github-actions.md (max 2 workflows, paths-gated, one pages deploy).
- Remove
Goal: ship @mcptoolshop/loadout-os@1.0.0, retire the three upstream repos. Irreversible actions live here — author the six-standards compliance block + compensators table (publish, release, deprecate, settings cutover) in the session dispatch before executing.
Pre-step — consumer inventory (do this BEFORE any cutover; pointer-chain breakage is this workspace's known failure mode):
- Grep
E:\AIfor@mcptoolshop/ai-loadoutimports (known:apps/hook; suspected: none — verify) - List global installs to replace:
ai-loadout(npm),claude-memories+claude-rules(installed from local upstream dirs) - List config/doc references to update: global CLAUDE.md Index Freshness Ritual text,
~/.ai-loadout/refresh.ps1,~/.claude/settings.jsonhook command, canonical memory entries (loadout-os-prototype.md,ai-loadout.md, knowledge-os entries)
Ship:
- Shipcheck full audit (31/31; v1.0.0 minimum rule satisfied by 1.0.0)
- Translations BEFORE
npm publishandgh release create(release-ordering rule, global CLAUDE.md) -
npm publishvia Trusted Publishing;gh release create v1.0.0
Cut over + retire:
-
~/.claude/settings.jsonhook command → the loadout-os-installed hook entrypoint; verify with a live prompt; keep~/.claude/loadout-hook/until verified, then delete - Replace global CLI installs; update ritual text + refresh script references
-
npm deprecate @mcptoolshop/ai-loadoutwith a pointer to loadout-os (the only published upstream) - Archive upstream repos on GitHub (
gh repo archivefor ai-loadout / claude-memories / claude-rules) and move the local dirsE:/AI/{ai-loadout,claude-memories,claude-rules}/→E:/DEEP_MEMORY/retired/with a README pointing here - Update canonical memory:
loadout-os-prototype.md→ shipped entry; MEMORY.md one-liner; run the Index Freshness Ritual
Gate: shipcheck 31/31, CI green, hook works through the published package on a live prompt, consumer-inventory list fully checked off, no broken pointer chains.
- Embedding-based matching to replace keyword scoring — the 2026-06-10 weak-match evidence motivates it, but it's a research project; Phase 2's threshold + keyword curation is the cheap 80%. Revisit after a month of usage.jsonl data.
- Multi-rig sync of
~/.ai-loadout/index.json— no second rig exists. - Web UI for browsing the dispatch table — nice-to-have, not critical path.
Naming: keep or rebrand?RESOLVED 2026-06-16 →loadout-os(see Phase 5).- Kernel CLI surface preserved verbatim under
loadout-os …(lower migration cost) or restructured (fix ergonomics warts)? Default: verbatim, restructure later behind the same bin. - License: three sources are MIT; root stays MIT? (Default yes.)
Resolved 2026-06-10: package manager = npm workspaces (matches every other studio monorepo; workspace:* in the original draft was pnpm syntax and would fail under npm).
When all six phases pass, flip this file to a CHANGELOG-style retrospective and start the next iteration. The canonical memory entry (loadout-os-prototype.md) gets rewritten as a shipped-product entry at the same time.