11 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this
repository. It is orientation only — implementation history, component details, and
operational procedures live in the docs/implementation-status.md
index and its docs/implementation-status/ leaf files (read on demand, e.g. before touching
a plugin or claiming something isn't built yet).
What this repository is
cc-os is the user's personal operating layer for Claude Code: the family of always-on,
globally installed os-* plugins that run on every machine the user works from, plus the
research/evals that inform them. The founding piece is a cross-project memory system (for
a multi-client freelancer), but the scope is the whole operating layer — memory, decisions,
process/backlog management, status, notifications — and the long-term intent is that the
os-* plugins are aware of each other and cooperate (ADR-023). By contrast,
~/dev/cc-plugins holds optional, as-needed plugins; anything that should be ambient on
every machine belongs here. Everything is markdown-as-truth: specs,
ADRs, and the build plan in docs/ are the source of truth for what is being built. When
asked to "build," work from the staged tasks in docs/memory-system/04-build-plan.md, not ad
hoc.
Directory layout
Numbered files within a directory are not a required reading order — read the one whose topic you need.
docs/adr/— the ADR system (one file per decision + generatedREADME.mdindex), managed via/os-adr:*skills. Migrated 2026-07-12 from the monolithicdocs/memory-system/03-architecture-decisions.md, which is retained as the historical source (provenance:migration_sourcefrontmatter) but is no longer where new decisions go.docs/memory-system/— the design of the memory system itself.02-system-design.mdis the architecture,03-architecture-decisions.mdis the historical ADR log (seedocs/adr/above),04-build-plan.mdthe build outline with step status,06-graphify-evaluation.mdjustifies the Graphify pivot.docs/implementation-status.md— the status index: headline timeline + per-component one-liners. Full detail (per-plugin build history, eval-harness records) lives in leaf files underdocs/implementation-status/, read on demand; plugin rename/cache-refresh runbooks are indocs/implementation-status/operational-procedures.md.docs/graphify/— verified handbook for the Graphify knowledge-graph tool. Skim00-README.mdfor the model; keep09-best-practices-checklist.mdopen when running it. Claims are provenance-tagged ([github]trustworthy;[interview]/[unverified claim]not).graphify-interview,memory-systems-compared060326(repo root) — raw source transcripts. Only open to trace a claim's origin; treat as intent, not fact.plugins/— source of the global plugins, symlinked into~/.claude/plugins/.openspec/— spec-driven change management (see workflow below)..claude/,.codex/,.pi/— identical copies of the OpenSpec skills for three AI assistants. Only open when changing a skill — and mirror any change across all three.
The current design in one paragraph
This is a work in progress, not a frozen spec; when a conversation changes the design,
update this paragraph (and the relevant docs/memory-system/ files + an ADR) to match.
Two memory types kept as separate systems: episodic ("what happened, when") handled
by memsearch (Milvus Lite, embedded, single global store for ALL clients by design —
ADR-015), and semantic/knowledge ("how do we…") handled by the existing
~/Documents/SecondBrain Obsidian vault as the single source of truth (ADR-012). Notes
keep summary + six flat namespaced facets
(type//client//project//domain//tool//convention/) plus scope/ (ADR-011);
hierarchy comes from hub notes, wikilinks, and Graphify graph edges — not nested tags
(Graphify is a structure extractor, not a topic clusterer; hubs are author-provided,
ADR-014). The vault is queried via a Graphify knowledge graph (local Ollama SLM for doc
extraction, tree-sitter AST for code); Graphify replaced the originally-planned Ruby/SQLite
tag-index CLI (2026-06-03 pivot). Retrieval is hook-injected + on-demand; freshness is lazy
(write-time hook + SessionStart reconcile, no daemon); the vault and memsearch store
auto-sync to private Forgejo repos via SessionEnd hooks. Ships as a global Claude Code
plugin (os-vault) with skills. Projects are onboarded one at a time; bulk vault migration
is deferred to last (ADR-013).
Implemented components (inventory)
All build-plan steps required for the memory system are complete (2026-06-15).
docs/implementation-status.md is the index; full detail per
item is in its leaf files under docs/implementation-status/ — read the relevant leaf
before modifying any of these:
- os-vault (
plugins/os-vault/) — vault write/query/reorganize/onboard-project/ design-template skills, SessionStart/End hooks, memsearch + vault git sync. Write-behavior eval harness inplugins/os-vault/eval/. - os-context (
plugins/os-context/, renamed 2026-07-13 from os-orchestration) — a prompt-composer SessionStart plugin: concatenatesprompts/session-start/*.md(orchestration/delegation rules, kickoff conventions, standing safety, decision-memo format) into one additionalContext block for all sessions; this repo carries no local override. Eval harness inplugins/os-context/eval/. - os-status (
plugins/os-status/) — aggregated deterministic SessionStart checks (subagent-model env override, ADR system present, vault hub note present). ADR-022. - os-doc-hygiene (
plugins/os-doc-hygiene/) — stale/bloated-doc monitoring; check/clean/status/sweep skills. - os-adr (
plugins/os-adr/) — ADR system: Rubylib/adr/+ CLIs, create/init/migrate/ find skills; Eval A/B/C harnesses. cc-os retrofit done 2026-07-12 (promoted ahead of pilots — ADR-020 amendment /docs/adr/0020); remaining rollout: pilot projects one at a time, then wider. - os-backlog (
plugins/os-backlog/) — git-issues backlog surface (ADR-0042 retired Planka 2026-07-16): tracker routing (forgejo:/github:/repo:in.cc-os/config),issue-create/issuesCLI, capture/list/route skills, ten-label taxonomy with human-onlynext; non-repo/ops work lives in the privatejared/opsForgejo repo. - Graphify v0.8.31 (
~/.local/bin/graphify; PyPI package isgraphifyy, double-y) — vault graph at~/Documents/SecondBrain/graphify-out/, per-project graphs at<project-root>/graphify-out/(gitignored); both disposable/rebuildable. - memsearch v0.4.6 (marketplace plugin) —
~/.memsearch/memory/YYYY-MM-DD.mddaily files + Milvus index;/memory-recall,/memory-config.
Eval discipline (applies to every harness above): scenario Task blocks are held-out —
never run them informally; reserve sets are never even read informally. Before designing or
running any autoresearch eval, Read
~/Documents/SecondBrain/howto/running-autoresearch-skill-evals.md. Wording loops for
os-adr Eval B, os-vault WS2, and os-orchestration WS4 are complete and shipped
(2026-07-04/07/08); their run-sets AND reserves are contaminated for future wording tuning —
next signal is production IRL session audits.
Issue tracking
Issues (created via /to-tickets) live on self-hosted Forgejo (jared/cc-os), queried with
the tea CLI — not GitHub/gh. See docs/issue-workflow.md.
OpenSpec workflow
Changes are managed spec-driven via OpenSpec. Use the matching skills rather than editing
spec files by hand: openspec-explore, openspec-propose, openspec-apply-change,
openspec-verify-change, openspec-archive-change (slash commands under /opsx:*). Live
changes in openspec/changes/, completed in openspec/changes/archive/, stable specs in
openspec/specs/. openspec/config.yaml uses schema: spec-driven; project context for
OpenSpec artifacts comes from docs/ and this file.
Conventions specific to this repo
- Provenance discipline: when writing about Graphify or anything sourced from the
interview transcripts, keep the inline source tags and never promote an
[interview]/[unverified claim]to fact without checking a primary source (the GitHub repo is the authority; anchored to Graphify v0.8.30). - Dates are absolute (e.g.
2026-06-03); design docs carry a_Last updated:_/ status line — keep these current when editing. - Decisions live in ADRs in
docs/adr/(index:docs/adr/README.md). Don't silently reverse a locked decision; record the superseding decision via/os-adr:createwith the reasoning. When a task involves an architecture-level choice, or changes/replaces an approach this codebase already uses (a library, a convention, a plugin structure) → first run/os-adr:findto check whether a recorded decision covers it, and when you make such a choice → record it with/os-adr:create. A task that reverses an Accepted ADR is not complete until the superseding ADR exists. - Keep records current: when a build step completes, (a) mark it done in
docs/memory-system/04-build-plan.md, (b) record it per the index+progressive-disclosure convention: a one-line headline entry indocs/implementation-status.mdplus the detail in the relevantdocs/implementation-status/<component>.mdleaf file (create one if needed; don't restate what an ADR already records), and (c) update the design paragraph in THIS file only if the design itself changed. Never append status history to this file, and never let the index file regrow into a changelog — the os-doc-hygienefile_lengthsignal (400 lines / ~4k tokens) enforces this. - Plugin and skill naming: before naming ANY new cc-os plugin, skill, or slash command,
Read
plugins/cc-architect/references/conventions/cc-os-naming.md(canonical repo copy; the SecondBrain vault note of the same name now defers to it) and follow it. In brief: plugins areos-[domain]; skills are verb-first kebab-case, invoked as/os-[domain]:[verb]; nocommands/dispatcher directories; never set aname:field in SKILL.md frontmatter (it collapses the slash command to a bare unnamespaced form). - After editing any plugin source (SKILL.md, hooks, CLIs), run
bin/refresh-plugins— source edits don't reach sessions until the cache is refreshed. Rename/move procedure and cache details:docs/implementation-status/operational-procedures.md.