diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea4ddc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +# Local AI-assistant skill mirrors (kept in sync locally, not versioned) +.claude/ +.codex/ +.pi/ diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..15081f7 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,84 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## What this repository is + +`cc-os` is a **documentation- and design-only repository** — there is no application code, +build, lint, or test step yet. It captures the design of a **personal, cross-project memory +system for Claude Code** (for a multi-client freelancer) plus the research that informs it. +Implementation has **not started**; the deliverables here are markdown specs, ADRs, and a +build outline that a future session turns into a real implementation. + +Everything is markdown-as-truth. When asked to "build," the next step is to convert the +existing build outline into a staged implementation plan, not to start coding ad hoc. + +## Directory layout + +Numbered files within a directory are not a required reading order — read the one whose topic +you need. + +- **`docs/memory-system/`** — the design of the memory system itself. Go here to understand or + change *what is being built*. `02-system-design.md` is the architecture, `03-architecture- + decisions.md` is the ADR log (each decision + what was rejected/deferred and why), + `04-build-plan.md` is the build outline, `06-graphify-evaluation.md` justifies the Graphify + pivot. Read the specific file relevant to your task; read the whole set only when reworking + the design. +- **`docs/graphify/`** — a verified handbook for the Graphify knowledge-graph tool (the chosen + knowledge-layer engine). Go here when working with Graphify commands/behavior. Skim + `00-README.md` for the model, keep `09-best-practices-checklist.md` open while actually + running it. Claims are provenance-tagged (`[github]` trustworthy; `[interview]` / + `[unverified claim]` not). +- **`graphify-interview`, `memory-systems-compared060326`** (repo root) — raw source + transcripts (marketing / video). Only open these to trace where a claim came from; treat as + *intent*, not *fact* — they were already corrected against primary sources in `docs/`. +- **`openspec/`** — spec-driven change management (see workflow below). `changes/` holds live + changes, `changes/archive/` completed ones, `specs/` stable specs. +- **`.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. The paragraph below is the current approach; +treat it as the default you operate from, but **whenever a conversation with the user changes +the design, update this paragraph (and the relevant `docs/memory-system/` files + an ADR) to +match.** Keep it accurate, don't preserve it for its own sake. + +Two memory types kept as **separate systems**: **episodic** ("what happened, when") handled by +**memsearch** (Milvus Lite, embedded), and **semantic/knowledge** ("how do we…") handled by a +flat **Obsidian markdown vault** as the single source of truth. Notes keep `summary` + +namespaced tags (`tool/`/`client/`/`domain/`/`convention/`/`scope/`) as metadata, and the vault +is queried via a **Graphify knowledge graph** (local Ollama SLM for doc extraction, free +tree-sitter AST for code). Retrieval is hook-injected + on-demand so project repos stay thin; +freshness is lazy +(write-time hook + SessionStart reconcile, no daemon/cron); the vault syncs to a VPS while +indexes stay disposable and rebuildable. Ships as a global Claude Code plugin with skills. + +**Recent pivot (2026-06-03):** Graphify **replaces** the originally-planned Ruby/SQLite +tag-index CLI and also covers the deferred QMD semantic layer. `04-build-plan.md` and +`06-graphify-evaluation.md` reflect this; if an older doc still describes the Ruby CLI, defer +to those two and fix the stale doc. + +## OpenSpec workflow + +Changes are managed spec-driven via OpenSpec. Use the matching skills rather than editing spec +files by hand: `openspec-explore` (think through an idea), `openspec-propose` (create a change +with design/specs/tasks), `openspec-apply-change` (implement tasks), `openspec-verify-change` +(validate before archiving), `openspec-archive-change`. Slash commands mirror these under +`/opsx:*`. Live changes live in `openspec/changes/`, completed ones in +`openspec/changes/archive/`, stable specs in `openspec/specs/`. + +`openspec/config.yaml` uses `schema: spec-driven`; its `context` block is currently empty — +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; it was anchored to Graphify **v0.8.30**). +- **Dates are absolute** (e.g. `2026-06-03`), and design docs carry a `_Last updated:_` / + status line — keep these current when editing. +- **Decisions live in ADRs.** Don't silently reverse a locked decision; add or amend an ADR in + `03-architecture-decisions.md` with the reasoning. +- The package on PyPI is `graphifyy` (double-y) but the command is `graphify`. diff --git a/openspec/config.yaml b/openspec/config.yaml new file mode 100644 index 0000000..392946c --- /dev/null +++ b/openspec/config.yaml @@ -0,0 +1,20 @@ +schema: spec-driven + +# Project context (optional) +# This is shown to AI when creating artifacts. +# Add your tech stack, conventions, style guides, domain knowledge, etc. +# Example: +# context: | +# Tech stack: TypeScript, React, Node.js +# We use conventional commits +# Domain: e-commerce platform + +# Per-artifact rules (optional) +# Add custom rules for specific artifacts. +# Example: +# rules: +# proposal: +# - Keep proposals under 500 words +# - Always include a "Non-goals" section +# tasks: +# - Break tasks into chunks of max 2 hours