9.5 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 docs/implementation-status.md (read it 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 timeline, full per-component detail for every shipped plugin (os-vault, os-orchestration, os-status, os-doc-hygiene, os-adr), eval-harness records, and plugin rename/cache-refresh procedures.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). Full detail for each item is in docs/implementation-status.md — read it 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-orchestration (
plugins/os-orchestration/) — injectsORCHESTRATION.md(session-orchestration + delegation-economics rules) into all sessions; this repo carries no local override. Eval harness inplugins/os-orchestration/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. - 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-issues) 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 indocs/implementation-status.md(timeline entry + component pointer), and (c) update the design paragraph in THIS file only if the design itself changed. Never append status history to this file — it goes in implementation-status.md. - Plugin and skill naming: before naming ANY new cc-os plugin, skill, or slash command,
Read
~/Documents/SecondBrain/cc-os-plugin-skill-naming-convention.mdand 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.md → "Operational procedures".