72 files, 793 nodes. Open a folder, then a file, to see what it defines.
.mcp.json 0 symbolsAGENTS.md 1 symbolsCairn — project memory section L2CHANGELOG.md 2 symbolsChangelog section L10.1.0 — 2026-09-24 section L3CLAUDE.md 1 symbolsCairn — project memory section L2CONTRIBUTING.md 4 symbolsContributing section L1How we work section L10Code map section L16Rules of thumb section L26README.md 9 symbolsCairn section L1Documentation section L102Licence section L112Why section L14What you get on day one (no API key) section L29And over time section L45The terminal section L61Commands section L77Install options section L92install.sh 1 symbolssay() function L6pyproject.toml 0 symbolsagents.md 3 symbolsAgent integrations section L1Sub-agents (Claude Code), tiered by model section L16Session capture section L28architecture.md 6 symbolsArchitecture section L1Shape section L3Principles in code section L38Data flow of a sync section L49The context assembler section L61Canonical ids section L69cli.md 8 symbolsdocs/cli.md section L1CLI reference section L1Questions section L15Map section L27Specs section L31Memory, timeline, sessions section L39Servers and agents section L44Setup and health section L5configuration.md 1 symbolsConfiguration section L1mcp.md 2 symbolsMCP tools section L1docs/mcp.md section L1models-and-cost.md 4 symbolsModels and cost section L1Keeping tokens down section L10Ledger section L18Routing section L60001-unified-read-model.md 5 symbolsADR-0001: One read model for every surface section L1Decision section L10Options considered section L15Consequences section L22Context section L50002-deterministic-first.md 4 symbolsADR-0002: Deterministic first, models second section L1Consequences section L15Context section L5Decision section L90003-embedded-temporal-store.md 4 symbolsADR-0003: Embedded temporal store by default section L1Decision section L10Consequences section L15Context section L50004-model-routing.md 4 symbolsADR-0004: Task-tiered model routing section L1Consequences section L15Context section L5Decision section L90005-invisible-engines.md 4 symbolsADR-0005: One product, invisible engines section L1Exceptions, stated honestly section L16Context section L5Decision section L90006-built-in-session-capture.md 4 symbolsADR-0006: Session capture is built in section L1Decision section L12Consequences section L19Context section L5analysis.md 4 symbolsAnalysis: 001-cairn-core (cross-artifact consistency) section L1Consistency findings section L36Measured (httpx, 101 source files, shallow 50 commits; sandbox CPU) section L46Requirement coverage section L6data-model.md 4 symbolsData Model: Cairn read model (`.cairn/brain.db`) section L1Canonical ids section L16Link rules (linker) section L21State transitions section L32plan.md 8 symbolsImplementation Plan: Cairn Core section L1Technical Context section L13Constitution Check section L29Project Structure section L42Documentation (this feature) section L44Summary section L5Source Code (repository root) section L53Complexity Tracking section L87quickstart.md 1 symbolsQuickstart validation section L1research.md 9 symbolsResearch: Cairn Core section L1R2 Spec workflow integration section L15R3 Temporal fact graph section L24R4 Semantic memory section L32R5 Session capture section L39R6 MCP SDK section L49R1 Code map engine output section L5R7 Model routing & cost section L53R8 UI section L59spec.md 19 symbolsFeature Specification: Cairn Core — the engineering brain section L1User Story 5 — Memory that compounds (Priority: P2) section L102User Scenarios & Testing *(mandatory)* section L11User Story 6 — One page to see everything (Priority: P2) section L122User Story 1 — One command on an existing repo (Priority: P1) section L13User Story 7 — Premium agent experience everywhere (Priority: P3) section L133User Story 8 — Deep tier when a key is present (Priority: P3) section L144Edge Cases section L154Clarifications section L165Session 2026-09-24 section L167Requirements *(mandatory)* section L185Functional Requirements section L187Key Entities section L219Success Criteria *(mandatory)* section L229Measurable Outcomes section L231Assumptions section L240User Story 2 — "What breaks if I change this?" (Priority: P1) section L38User Story 3 — "Why is this code like this?" (Priority: P2) section L62User Story 4 — Spec-driven work with memory (Priority: P2) section L80tasks.md 14 symbolsTasks: Cairn Core section L1Phase 2: Foundational (blocks all stories) section L15Phase 3: US1 — One command on an existing repo (P1) 🎯 MVP section L22Phase 4: US2 — Impact (P1) section L32Phase 5: US3 — Why (P2) section L38Phase 6: US4 — Spec-driven work with memory (P2) section L43Phase 7: US5 — Memory that compounds (P2) section L51Phase 8: US6 — One page (P2) section L58Phase 9: US7 — Premium agent experience (P3) section L64Phase 10: US8 — Deep tier (P3) section L71Phase 11: Polish section L78Dependencies section L85Phase 1: Setup section L9Converge (remaining work, appended by T043) section L91cli.md 2 symbolscontracts/cli.md section L1CLI contract section L1http.md 1 symbolsHTTP contract (daemon, `127.0.0.1:4747`) section L1mcp.md 2 symbolscontracts/mcp.md section L1MCP contract (server name `cairn`, stdio) section L1__init__.py 0 symbols__main__.py 0 symbolsagents.py 14 symbolsmerge_json() function L103write_generated() function L117_hook_cmd() function L132_capture_cmd() function L142install() function L147note() function L154settings() function L163uninstall() function L210clean() function L220command() function L29detect() function L36installed() function L52upsert_block() function L75remove_block() function L89capture.py 9 symbolsrecord() function L108main() function L128store_path() function L36find_root() function L40redact() function L49mask() function L51_rel() function L60events_for() function L71_enabled() function L98cli.py 52 symbolsstones() function L111main_cb() function L140init() function L157run_init() function L167view() function L186mark() function L198prog() function L245status() function L277_ago() function L299doctor() function L305row() function L319sync_cmd() function L359prog() function L368impact() function L384_cairn() function L40why() function L402_narrate() function L416ask() function L427search() function L445brief() function L458trace_path() function L465trace_explain() function L472trace_query() function L479hubs() function L486areas() function L494_need_init() function L50prs() function L501specs() function L510spec_new() function L540drift() function L549_emit_json() function L56remember() function L574recall() function L587memories() function L601forget() function L609timeline() function L617_emit_pack() function L63sessions() function L631ui() function L651up() function L662core.py 42 symbols.mark_sent() method L114.accounting() method L120.sections() method L126Cairn class L133.__init__() method L136.here() method L144.map() method L151.budget_default() method L155.resolve() method L159.source_cost() method L193._logger() method L205log() function L210._cited_files() method L216._intent() method L228._sessions() method L253._memories() method L261._facts() method L266.impact() method L276ago() function L30.why() method L348.infer_targets() method L386day() function L40.context() method L403.ask() method L437Item class L45.narrate() method L453.remember() method L466.active_spec() method L473.overview() method L484.brief() method L517.line() method L52.architecture() method L554roll() function L566Target class L57.agent_activity() method L576.savings() method L592.search() method L596_recency() function L610.found() method L65Pack class L70daemon.py 5 symbols_free() function L16_health() function L22info() function L30start() function L44stop() function L67drift.py 4 symbolsrecord() function L104_finding() function L19check() function L25semantic() function L63hooks.py 5 symbols_line() function L20install_git_hooks() function L25remove_git_hooks() function L45session_start() function L60statusline() function L70linker.py 4 symbolsingest_map() function L23mention_index() function L59link_text() function L71relink_memories() function L94mcp_server.py 11 symbolsmain() function L102_cairn() function L15cairn_context() function L21cairn_impact() function L26cairn_why() function L31cairn_search() function L36cairn_trace() function L42cairn_specs() function L52cairn_remember() function L72cairn_recall() function L78build() function L91project.py 18 symbols.dir() method L102.config_path() method L106.db_path() method L110.map_dir() method L114.map_json() method L118.initialized() method L122.is_git() method L126.rel() method L129.ensure_dir() method L137.git() method L145.cfg() method L154_merge() function L48find_root() function L55Project class L65.discover() method L71.reload() method L82.name() method L93.id() method L97router.py 19 symbols.deep_enabled() method L102.model() method L108.table() method L113.tier_for() method L120.complete() method L128._anthropic() method L155._claude_code() method L176._openai() method L201BudgetExceeded class L37Budget class L42.remaining() method L47.check() method L50.charge() method L54estimate_tokens() function L58resolve_provider() function L65Router class L79.__init__() method L80.api_key() method L89.available() method L99server.py 30 symbolssavings() function L103specs() function L107drift() function L112memories() function L117add_memory() function L121forget() function L129timeline() function L133sessions() function L137ask() function L145start_sync() function L149work() function L154stream() function L166gen() function L170models() function L184brief() function L189serve() function L195create_app() function L20lifespan() function L28broadcast() function L35index() function L42health() function L46overview() function L50map_() function L57entity() function L64search() function L77_pack() function L80impact() function L87why() function L91architecture() function L95agent_activity() function L99store.py 35 symbols.tx() method L102.q() method L112.one() method L116.close() method L120.get_kv() method L125.set_kv() method L129.put_entities() method L136.put_entity() method L151.drop_source() method L155.link() method L167.entity() method L177.entities() method L181.by_path() method L184.links_to() method L188.links_from() method L199.counts() method L210.search() method L217.add_events() method L235.events() method L244.add_memory() method L261.memories() method L280.memory() method L286.forget() method L290.cochanged() method L297.filestat() method L311.log_call() method L316.ledger() method L324.log_query() method L331.queries() method L341.query_totals() method L344_ent() function L351searchable() function L71fts_query() function L77Brain class L87.__init__() method L90sync.py 8 symbols_summary() function L107spawn_background() function L123locked() function L24run() function L41step() function L52do_map() function L64do_drift() function L83do_deep() function L93__init__.py 0 symbolschronicle.py 16 symbols._driver() method L107.pending_episodes() method L125.ingest() method L154._mirror() method L185.search() method L205facts_matching() function L219dumps() function L232_local_embedder() function L30__init__() function L36create() function L40create_batch() function L45_lexical_reranker() function L52rank() function L58Chronicle class L70.__init__() method L71.engine() method L77history.py 7 symbols_is_ancestor() function L131risky_for() function L140recent_for() function L153origins() function L158risk_tags() function L24_parse() function L35ingest() function L66journal.py 7 symbolsfor_files() function L120available() function L20installed() function L25_turns() function L34_kind() function L53_migrate() function L57ingest() function L68mapper.py 31 symbols.__len__() method L120.edge_count() method L123.label() method L126.file_of() method L130.is_code() method L133.degree() method L136.describe() method L140.resolve() method L147.members() method L180.dependents() method L194.dependencies() method L218._line() method L227._span() method L231.rationale() method L241add() function L246.hubs() method L269.areas() method L273.area_graph() method L290.area_members() method L309key() function L31.file_graph() method L320_engine() function L36.languages() method L360_components() function L369index() function L416ensure_ignores() function L44build() function L51engine_text() function L66Edge class L77MapIndex class L85.load() method L96memory.py 12 symbols.remember() method L100.recall() method L131.about() method L146SemanticMemory class L21.__init__() method L26.ready() method L32._engine() method L35.add() method L64.search() method L75.history() method L86MemoryStore class L94.__init__() method L95specs.py 12 symbolspaths_in() function L106parse_feature() function L121constitution() function L155features() function L164ingest() function L171cli() function L27initialized() function L36bootstrap() function L40install_extension() function L58new_feature() function L76_unwrap() function L87_read() function L99instructions.md 1 symbolsCairn — project memory section L1cairn-architect.md 0 symbolscairn-implementer.md 0 symbolscairn-reviewer.md 0 symbolscairn-scout.md 0 symbolsask.md 0 symbolsbrief.md 0 symbolsdrift.md 0 symbolsimpact.md 0 symbolsremember.md 1 symbolsclaude/commands/remember.md section L1why.md 0 symbolsREADME.md 2 symbolsworkflow_extension/README.md section L1Cairn extension for the spec workflow section L1context.md 6 symbolsUser Input section L10Steps section L14Step 1: Find the code this feature touches section L16Step 2: Check each likely change point section L20Step 3: Feed the plan section L24Ground the plan in the project's memory section L8remember.md 3 symbolsworkflow_extension/commands/remember.md section L1Save clarifications as decisions section L5Steps section L7trace.md 5 symbolsStep 2: Review risk per task section L12Step 3: Report section L18Trace tasks to code section L5Steps section L7Step 1: Refresh the memory section L9verify.md 5 symbolsSteps section L10Step 1: Sync and check drift section L12Step 2: Resolve findings section L15Step 3: Capture learnings section L18Verify against the spec section L8conftest.py 4 symbolsgit() function L15commit() function L19repo() function L76cairn() function L94test_core.py 24 symbolstest_capture_groups_turns_and_finishes_them_on_the_next_sync() function L110test_capture_is_silent_outside_cairn_repos_and_when_disabled() function L125test_capture_hook_is_light_and_never_fails() function L133test_drift_ids_are_stable_across_processes() function L144test_drift_record_is_idempotent_and_keeps_first_seen() function L155test_sync_links_summary_names_what_it_counts() function L165test_session_paths_keep_dotfolders() function L170test_pack_accounting_matches_render_and_logs_once() function L179test_only_packs_handed_out_are_logged() function L190test_source_cost_counts_existing_files_once() function L196test_file_graph_layers_and_cycles() function L201test_risk_tags() function L21test_wrapped_requirements_are_read_whole() function L219test_sync_builds_all_layers() function L27test_impact_has_dependents_warnings_and_owners() function L35test_budget_is_respected() function L45test_why_includes_rationale_and_origin() function L52test_memory_links_to_code() function L58test_specs_parser_and_drift() function L66test_context_infers_targets() function L76test_brief_is_small() function L82_hook() function L87test_store_search_and_memory() function L9test_capture_records_prompts_files_and_commands() function L92test_surfaces.py 13 symbolstest_doctor_shows_bracketed_fixes_and_wired_agents() function L108test_http_views_for_the_page() function L117test_init_is_zero_prompt_and_idempotent() function L13test_session_briefing_counts_as_cost() function L132test_mcp_tool_calls_count_as_agent_context() function L138test_cli_json_is_counted_and_stays_lean() function L148test_uninstall_removes_only_ours() function L34test_status_and_questions_via_cli() function L49test_hooks_output() function L58test_http_api() function L64test_mcp_tools() function L78test_statusline_shows_spec_number() function L91test_installed_agents_reads_configs() function L97