@cairnkeep/cli 2.15.4 → 2.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +44 -0
- package/CONTRIBUTING.md +12 -0
- package/README.md +85 -590
- package/docs/README.md +87 -0
- package/docs/agents.md +193 -0
- package/docs/context-intelligence.md +143 -0
- package/docs/context-packs.md +33 -0
- package/docs/domain-knowledge.md +29 -0
- package/docs/ecosystem.md +23 -0
- package/docs/learning/CURRICULUM-MAP.md +3 -1
- package/docs/learning/FEATURE-GUIDE.md +23 -4
- package/docs/learning/README.md +4 -0
- package/docs/learning/lessons/L00-why-cairnkeep.md +3 -1
- package/docs/learning/lessons/L01-safe-trial.md +3 -3
- package/docs/learning/lessons/L02-installation.md +2 -2
- package/docs/learning/lessons/L03-first-project.md +9 -10
- package/docs/learning/lessons/L19-validated-skill-improvement.md +1 -1
- package/docs/learning/lessons/L20-mcp-tool-profiles.md +1 -1
- package/docs/learning/lessons/L21-context-packs.md +1 -1
- package/docs/learning/lessons/L22-native-windows.md +2 -2
- package/docs/learning/lessons/L23-guided-setup.md +18 -5
- package/docs/learning/lessons/L24-okf-exchange.md +1 -1
- package/docs/learning/lessons/L25-playbooks.md +1 -1
- package/docs/learning/lessons/L26-context-intelligence.md +180 -0
- package/docs/learning/tracks/evidence-and-evaluation.md +1 -0
- package/docs/learning/tracks/operator.md +1 -0
- package/docs/learning/tracks/practitioner.md +1 -0
- package/docs/learning/video-scripts/V26-context-intelligence.md +144 -0
- package/docs/native-windows.md +5 -0
- package/docs/operating.md +65 -3
- package/docs/privacy-and-data-flow.md +22 -0
- package/docs/quickstart.md +12 -4
- package/docs/releasing.md +27 -19
- package/docs/storage.md +21 -0
- package/docs/work-evidence.md +14 -0
- package/examples/eval/bundled-fake.json +1 -1
- package/mcp-memory-server/dist/context-pack-cli.js +3 -1
- package/mcp-memory-server/dist/context-pack-retrieval.js +413 -0
- package/mcp-memory-server/dist/context-pack.js +171 -3
- package/mcp-memory-server/dist/domain-retrieval-provider.js +257 -0
- package/mcp-memory-server/dist/index.js +73 -387
- package/mcp-memory-server/dist/mcp-tool-catalog.js +2 -0
- package/mcp-memory-server/dist/memory-extraction.js +87 -0
- package/mcp-memory-server/dist/memory-proposal-cli.js +110 -0
- package/mcp-memory-server/dist/memory-proposal-schema.js +78 -0
- package/mcp-memory-server/dist/memory-proposal-store.js +273 -0
- package/mcp-memory-server/dist/platform-security.js +32 -26
- package/mcp-memory-server/dist/retrieval-benchmark.js +199 -0
- package/mcp-memory-server/dist/reviewed-memory-store.js +281 -0
- package/mcp-memory-server/dist/work-evidence-schema.js +17 -0
- package/mcp-memory-server/dist/work-evidence-store.js +57 -1
- package/mcp-memory-server/package.json +8 -1
- package/package.json +1 -1
- package/schemas/context-usage-receipt.schema.json +41 -0
- package/schemas/memory-proposal.schema.json +65 -0
- package/schemas/retrieval-benchmark.schema.json +64 -0
- package/scripts/cairn-cli.mjs +3 -0
- package/scripts/completion.sh +17 -6
- package/scripts/doctor.sh +4 -2
- package/scripts/setup.mjs +92 -13
- package/scripts/terminal-prompts.mjs +172 -0
- package/scripts/test-completion.sh +8 -1
- package/scripts/test-docs-navigation.sh +63 -0
- package/scripts/test-doctor.sh +21 -0
- package/scripts/test-phase17-artifact-lifecycle.sh +1 -1
- package/scripts/test-release-sbom.sh +44 -16
- package/scripts/test-setup-preflight.mjs +130 -0
- package/scripts/test-windows-native.mjs +30 -0
- package/scripts/verify-docs-parity.sh +28 -28
- package/scripts/windows-platform.mjs +8 -5
package/README.md
CHANGED
|
@@ -4,620 +4,115 @@
|
|
|
4
4
|
[](https://www.npmjs.com/package/@cairnkeep/cli)
|
|
5
5
|
[](LICENSE)
|
|
6
6
|
|
|
7
|
-
>
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
##
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
7
|
+
> Durable, local-first memory and context for coding agents.
|
|
8
|
+
|
|
9
|
+
Cairnkeep helps coding agents carry project context across sessions and
|
|
10
|
+
harnesses. It stores decisions, constraints, patterns, and lessons in
|
|
11
|
+
project-scoped memory, then gives agents a bounded protocol for finding and
|
|
12
|
+
verifying that context without turning memory into an authority or an
|
|
13
|
+
autonomous agent runtime.
|
|
14
|
+
|
|
15
|
+
## Why Cairnkeep?
|
|
16
|
+
|
|
17
|
+
- **Continuity across sessions.** Recall project decisions and recurring
|
|
18
|
+
failures instead of rediscovering them from scratch.
|
|
19
|
+
- **Harness independence.** Use the same memory through Claude Code, OpenCode,
|
|
20
|
+
Codex CLI, Kimi Code, Qwen Code, Pi, or another MCP client.
|
|
21
|
+
- **Local by default.** The default stdio server stores data on your computer;
|
|
22
|
+
remote access, embeddings, capture, and external context are explicit
|
|
23
|
+
opt-ins.
|
|
24
|
+
- **Bounded agent guidance.** Managed `AGENTS.md` instructions and project
|
|
25
|
+
playbooks tell compatible agents when to retrieve context and which checks
|
|
26
|
+
apply, but never execute work or grant approval.
|
|
27
|
+
- **Least authority.** Complete MCP annotations, read-only/custom tool profiles,
|
|
28
|
+
capability gates, and immutable context packs keep observation separate from
|
|
29
|
+
action.
|
|
30
|
+
|
|
31
|
+
## Quick start
|
|
32
|
+
|
|
33
|
+
Cairnkeep requires Node.js 22 or newer. In an interactive terminal, guided
|
|
34
|
+
setup presents selectable Git and memory choices plus checkboxes for every
|
|
35
|
+
supported coding harness:
|
|
19
36
|
|
|
20
37
|
```bash
|
|
21
38
|
npm install --global @cairnkeep/cli
|
|
22
|
-
cairn setup /path/to/project
|
|
39
|
+
cairn setup /path/to/project
|
|
23
40
|
cd /path/to/project
|
|
41
|
+
cairn doctor
|
|
24
42
|
./.ai/start-codex.sh # Windows: .\.ai\start-codex.cmd
|
|
25
43
|
```
|
|
26
44
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
## Status
|
|
33
|
-
|
|
34
|
-
Shipped: the memory server, the `cairn` CLI (`setup`, `bootstrap`, `memory-server`, `sync`, `sync-pi`, `sync-kimi`,
|
|
35
|
-
`doctor`, `playbook`, `trajectory`, `artifact`, `evidence`, `mcp-tools`, `pack`, `notes`, `memory`, `eval`, `audit-timer`, `completion`, `uninstall`) installable via
|
|
36
|
-
`npm i -g @cairnkeep/cli`, and the
|
|
37
|
-
operating layer (commands,
|
|
38
|
-
agents, hooks) installed on Claude Code and OpenCode, plus the native Pi
|
|
39
|
-
trajectory extension and thin Pi/Kimi graph and playbook adapters. The generic launchers
|
|
40
|
-
expose wrapper seams (`.ai/pre-launch.sh`/`.ai/pre-launch.ps1`,
|
|
41
|
-
`CAIRN_EXTRA_SETTINGS`, `.ai/post-exit.sh`/`.ai/post-exit.ps1`) so an enterprise wrapper can add provider/credential setup
|
|
42
|
-
without forking them. Also shipped: context exploration (`/context-explore`) and
|
|
43
|
-
a thin routing seam (`route_check`), both of which delegate to
|
|
44
|
-
[token-miser](https://github.com/cairnkeep/token-miser), a public
|
|
45
|
-
cairnkeep-org sibling project.
|
|
46
|
-
|
|
47
|
-
Version 2.12 adds a declarative harness registry, first-class Codex project
|
|
48
|
-
setup, and a shorter path from installation to verified recall.
|
|
49
|
-
Version 2.13 adds opt-in local Git-linked work evidence around generated harness
|
|
50
|
-
launchers, including native Windows, without capturing prompts or replacing Git.
|
|
51
|
-
Version 2.15 adds bounded project playbooks that help agents select existing
|
|
52
|
-
recall, planning, verification, review, security, documentation, and learning
|
|
53
|
-
steps without becoming an agent runtime or granting approval.
|
|
54
|
-
Version 2.15.4 makes the generic durable-context retrieval the first tool or
|
|
55
|
-
command for compatible agents, puts bounded playbook signal values inline,
|
|
56
|
-
and supports command- and event-scoped playbook help. Agents still verify
|
|
57
|
-
repository provenance, and instruction presence remains distinct from runtime
|
|
58
|
-
evidence that a tool was called.
|
|
59
|
-
|
|
60
|
-
## Compatibility
|
|
61
|
-
|
|
62
|
-
Node.js 22, 24, and 26 are supported. Cairnkeep 2.x requires Node.js 22 or
|
|
63
|
-
newer; Cairnkeep 1.x remains available for older runtimes, although Node.js 18
|
|
64
|
-
and 20 are end-of-life upstream.
|
|
65
|
-
|
|
66
|
-
| Client or platform | Support level |
|
|
67
|
-
|---|---|
|
|
68
|
-
| Claude Code on Linux/macOS | Memory server plus commands, agents, hooks, and launchers |
|
|
69
|
-
| OpenCode on Linux/macOS | Memory server plus commands, plugins, hooks, and launchers |
|
|
70
|
-
| Kimi Code on Linux/macOS | Memory MCP server, project launcher, and opt-in `/graphify` Skill |
|
|
71
|
-
| Qwen Code on Linux/macOS | Memory MCP server plus project launcher; no Cairnkeep operating-layer assets yet |
|
|
72
|
-
| Pi on Linux/macOS | Memory MCP through a maintained local stdio extension; native opt-in trajectory extension, launcher, and `/graphify` prompt; Pi 0.84.1 minimum for the bridge |
|
|
73
|
-
| Codex CLI on Linux/macOS | Project-scoped memory MCP configuration and launcher; no Cairnkeep-specific commands or hooks |
|
|
74
|
-
| Other MCP clients | Memory plus optional domain-knowledge and context-pack MCP tools |
|
|
75
|
-
| Native Windows x64 | Node-native CLI, guided setup, memory server, bootstrap compatibility, PowerShell/Command Prompt launchers, sync, hooks, doctor, storage lifecycle, Task Scheduler, completion, and uninstall |
|
|
76
|
-
| Windows ARM64 | Supported through Windows x64 emulation only; a native database binding is not currently shipped |
|
|
77
|
-
| WSL | Uses the normal Linux workflow; distinct from native Windows and Git Bash |
|
|
78
|
-
|
|
79
|
-
The `cairn graph` CLI is harness-independent and can be run from a project
|
|
80
|
-
shell used by Kimi Code, Pi, Qwen Code, Codex, or another client. Claude Code,
|
|
81
|
-
OpenCode, Pi, and Kimi can receive thin `/graphify` adapters; those adapters do
|
|
82
|
-
not imply equivalent hooks, agents, or MCP support.
|
|
83
|
-
|
|
84
|
-
Linux, macOS, Bash 3.2 portability, native PowerShell on Windows x64, global npm
|
|
85
|
-
installation, and clean Node 22/24/26 runtime checks are exercised in CI. See
|
|
86
|
-
[Native Windows operation](docs/native-windows.md) for platform-specific setup,
|
|
87
|
-
ACL, scheduling, process-tree, and recovery details.
|
|
88
|
-
|
|
89
|
-
See [Harness compatibility](docs/harness-compatibility.md) for exact support
|
|
90
|
-
levels, trust boundaries, and candidates that are not yet runtime-tested.
|
|
91
|
-
|
|
92
|
-
## Try with Podman
|
|
93
|
-
|
|
94
|
-
The minimal OCI image runs the memory server as an unprivileged user and keeps
|
|
95
|
-
all databases in a named volume:
|
|
96
|
-
|
|
97
|
-
```bash
|
|
98
|
-
podman run --rm -i \
|
|
99
|
-
--userns=keep-id:uid=10001,gid=10001 \
|
|
100
|
-
--read-only --cap-drop=all --security-opt=no-new-privileges \
|
|
101
|
-
--tmpfs=/tmp:rw,noexec,nosuid,size=64m,mode=1777 \
|
|
102
|
-
--volume cairnkeep-data:/data:Z,U \
|
|
103
|
-
ghcr.io/cairnkeep/cairnkeep:latest stdio
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
For persistent authenticated HTTP, rootless Quadlet, isolated workspace mode,
|
|
107
|
-
storage paths, secrets, and private derived images, see
|
|
108
|
-
**[Containers](docs/containers.md)**.
|
|
109
|
-
|
|
110
|
-
## Components
|
|
111
|
-
|
|
112
|
-
- **`mcp-memory-server/`** — an MCP server exposing durable, scoped memory
|
|
113
|
-
(`memory_write`, `memory_search`, …) backed by AgentFS, with optional
|
|
114
|
-
embedding-ranked search against any OpenAI-compatible endpoint.
|
|
115
|
-
- **`bin/cairn`** — the CLI. `cairn setup [path]` guides or deterministically
|
|
116
|
-
reconciles selected project assets; `cairn bootstrap [path]` preserves the
|
|
117
|
-
established scripted scaffold contract; `cairn doctor` health-checks the configured pieces;
|
|
118
|
-
`cairn trajectory list|show|prune` manages opt-in local session trajectories;
|
|
119
|
-
`cairn artifact list|show|delete|prune` manages opt-in local artifacts;
|
|
120
|
-
`cairn mcp-tools list|status|set|reset` applies least-authority discovery
|
|
121
|
-
profiles; `cairn pack` validates, installs, pins, updates, and approves
|
|
122
|
-
immutable external context;
|
|
123
|
-
`cairn eval validate|run|ablate|report|prune|delete` coordinates explicit
|
|
124
|
-
local two-pass and one-capability-at-a-time measurements;
|
|
125
|
-
`cairn skill harvest|list|show|review|propose|evaluate|apply|rollback`
|
|
126
|
-
turns recurring hindsight evidence into reviewed, measured, reversible
|
|
127
|
-
skill-file improvements;
|
|
128
|
-
`cairn graph build|query|status|diff|explain|path` owns the local Graphify
|
|
129
|
-
workflow from any project shell without installing Graphify-owned harness
|
|
130
|
-
assets; Claude Code, OpenCode, Pi, and Kimi add thin `/graphify` wrappers;
|
|
131
|
-
`cairn notes distill|search-error|promote|doctor` compiles and searches
|
|
132
|
-
default-off local hindsight notes outside the online agent path;
|
|
133
|
-
`cairn memory export|import` relocates the durable store between machines
|
|
134
|
-
(`export` requires the optional `sqlite3` CLI);
|
|
135
|
-
`cairn audit-timer` installs the scheduled memory+wiki audit;
|
|
136
|
-
`cairn completion bash|zsh|fish` generates shell completion definitions; and
|
|
137
|
-
`cairn sync-pi` installs the native Pi memory and trajectory extensions plus graph prompt;
|
|
138
|
-
`cairn sync-kimi` installs the Kimi graph Skill;
|
|
139
|
-
`cairn uninstall` reverses the install (backup-first, revertible).
|
|
140
|
-
- **`templates/`** — project scaffolding (generic launchers, env) plus the
|
|
141
|
-
derived-knowledge layer (wiki, alignment, graph, security, planning).
|
|
142
|
-
- **`scripts/`** — asset-sync and maintenance utilities.
|
|
143
|
-
|
|
144
|
-
## Related projects
|
|
145
|
-
|
|
146
|
-
- **[token-miser](https://github.com/cairnkeep/token-miser)** — a public
|
|
147
|
-
cairnkeep-org sibling that owns context exploration and request routing;
|
|
148
|
-
cairnkeep's `context_explore` and `route_check` tools are thin delegates
|
|
149
|
-
to it.
|
|
150
|
-
|
|
151
|
-
## Optional companion tools
|
|
152
|
-
|
|
153
|
-
cairnkeep runs standalone — none of the tools below are required. Its memory
|
|
154
|
-
server, `cairn bootstrap`, and derived-knowledge features work with none of
|
|
155
|
-
them. These are the accelerators the author pairs cairnkeep with; each is opt-in.
|
|
45
|
+
Select Codex CLI in the harness checklist for this route. Review
|
|
46
|
+
`.codex/config.toml` and accept Codex's project-trust prompt on first use.
|
|
47
|
+
Automation can supply every choice explicitly; the quickstart documents that
|
|
48
|
+
deterministic form.
|
|
156
49
|
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
| [rtk](https://github.com/rtk-ai/rtk) | "Rust Token Killer": token-reduced proxy for git/npm/cargo output | Shell-level, no wiring needed |
|
|
50
|
+
See the [quickstart](docs/quickstart.md) for Claude Code, the first
|
|
51
|
+
remember/recall cycle, recovery, and setup ownership. See
|
|
52
|
+
[harness compatibility](docs/harness-compatibility.md) for the exact surface
|
|
53
|
+
supported by each client.
|
|
162
54
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
operating layer installed into your harness, and a configured project. `cairn
|
|
167
|
-
setup` is the recommended guided entry point; `cairn bootstrap` remains the
|
|
168
|
-
deterministic compatibility primitive for established scripts. Project setup
|
|
169
|
-
reports but never performs machine-level sync. The full ordered walkthrough is
|
|
170
|
-
in **[the quickstart](docs/quickstart.md)**; the complete operator reference is
|
|
171
|
-
in **[docs/operating.md](docs/operating.md)**.
|
|
172
|
-
|
|
173
|
-
This setup is local by default: the registered stdio server stores memory on
|
|
174
|
-
the user's computer. Cairnkeep never discovers or selects a remote host.
|
|
175
|
-
Remote HTTP storage requires an explicit server deployment and client URL; see
|
|
176
|
-
**[Memory storage and deployment](docs/storage.md)** before enabling it.
|
|
177
|
-
|
|
178
|
-
The short version for Claude Code:
|
|
179
|
-
|
|
180
|
-
```bash
|
|
181
|
-
# 1. Install cairnkeep and register the memory server (server name: cairn-memory)
|
|
182
|
-
npm install -g @cairnkeep/cli
|
|
183
|
-
claude mcp add cairn-memory -s user -- cairn memory-server
|
|
184
|
-
|
|
185
|
-
# 2. Install the operating layer (commands, agents, hooks, scaffold templates)
|
|
186
|
-
cairn sync --apply # add --live-root <proj>/.claude to scope it
|
|
187
|
-
|
|
188
|
-
# 3. Configure a project deterministically
|
|
189
|
-
cairn setup /path/to/project --git init --harness claude --memory local --yes
|
|
190
|
-
cp /path/to/project/.ai/env.example /path/to/project/.ai/.env # then edit
|
|
191
|
-
|
|
192
|
-
# 4. Launch (and, optionally, check the wiring first)
|
|
193
|
-
cd /path/to/project && cairn doctor
|
|
194
|
-
./.ai/start-claude.sh
|
|
195
|
-
```
|
|
196
|
-
|
|
197
|
-
After setup, the basic workflow is intentionally small:
|
|
198
|
-
|
|
199
|
-
```text
|
|
200
|
-
> /remember Use transactional migrations for schema changes
|
|
201
|
-
Stored as patterns/transactional-migrations.
|
|
202
|
-
|
|
203
|
-
> /recall transactional migrations
|
|
204
|
-
patterns/transactional-migrations: Use transactional migrations for schema changes
|
|
205
|
-
```
|
|
206
|
-
|
|
207
|
-
The exact command rendering depends on the client. Any MCP client can call
|
|
55
|
+
The core loop is intentionally small: store a concise, verified project fact,
|
|
56
|
+
close the session, and retrieve it when a later task needs it. Claude Code and
|
|
57
|
+
OpenCode expose `/remember` and `/recall`; any compatible MCP client can use
|
|
208
58
|
`memory_write` and `memory_search` directly.
|
|
209
59
|
|
|
210
|
-
|
|
211
|
-
managed block in `AGENTS.md`. The block directs compatible agents to make one
|
|
212
|
-
task-derived, project-scoped memory search for nontrivial work involving prior
|
|
213
|
-
decisions, conventions, constraints, or failures. Results are locators, not
|
|
214
|
-
authority; referenced repository sources must be verified, and memory is never
|
|
215
|
-
promoted automatically. Agents can evaluate the playbook at task boundaries:
|
|
60
|
+
## For coding agents
|
|
216
61
|
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
cairn playbook check finish --changed src/example.ts --completed verify.tests --enforce
|
|
220
|
-
```
|
|
62
|
+
Setup installs a managed project instruction block with a deliberately small
|
|
63
|
+
protocol:
|
|
221
64
|
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
65
|
+
1. For a nontrivial task that may depend on prior project knowledge, make one
|
|
66
|
+
task-derived, project-scoped `memory_search` the first tool or command.
|
|
67
|
+
2. Treat results as locators, not truth; verify the maintained repository
|
|
68
|
+
sources they reference.
|
|
69
|
+
3. Continue with normal repository inspection if memory is unavailable or has
|
|
70
|
+
no relevant result.
|
|
71
|
+
4. Never write, supersede, or approve durable memory unless the user or a
|
|
72
|
+
reviewed workflow explicitly requests it.
|
|
226
73
|
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
Existing operator-owned `.codex/config.toml` files are never overwritten; a
|
|
231
|
-
reported `skipped` file must be merged by the operator and checked with
|
|
232
|
-
`cairn doctor`.
|
|
74
|
+
Cairnkeep playbooks can recommend or require existing review, verification,
|
|
75
|
+
security, documentation, and learning steps. They do not run those steps,
|
|
76
|
+
activate skills, enable capabilities, or authorize destructive work.
|
|
233
77
|
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
configuration requires a literal URL and supports a token reference through
|
|
237
|
-
`bearerTokenEnvVar`; it does not expand `${VAR}` in the URL. See
|
|
238
|
-
[Harness compatibility](docs/harness-compatibility.md#kimi-code).
|
|
78
|
+
Read [Cairnkeep for coding agents](docs/agents.md) for the full contract,
|
|
79
|
+
authority model, harness behavior, and graceful fallback.
|
|
239
80
|
|
|
240
|
-
|
|
241
|
-
It registers `/graphify` (also `/skill:graphify`) and delegates every supported
|
|
242
|
-
operation exclusively to `cairn graph`.
|
|
81
|
+
## Trust boundary
|
|
243
82
|
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
83
|
+
Cairnkeep is not a hosted agent, telemetry service, or automatic remote
|
|
84
|
+
knowledge collector. Memory is durable context, not source-of-truth
|
|
85
|
+
documentation. Configured Claude Code and OpenCode hooks can derive local
|
|
86
|
+
memory candidates; durable promotion and every networked or sensitive capture
|
|
87
|
+
path remain separately controlled. Ordinary uninstall retains durable data
|
|
88
|
+
unless an explicit purge is requested.
|
|
249
89
|
|
|
250
|
-
|
|
251
|
-
|
|
90
|
+
Start with [Privacy and data flow](docs/privacy-and-data-flow.md) and
|
|
91
|
+
[Memory storage and deployment](docs/storage.md) before enabling remote HTTP,
|
|
92
|
+
embeddings, trajectories, artifacts, work evidence, or context packs.
|
|
252
93
|
|
|
253
|
-
|
|
254
|
-
cairn sync-pi --apply
|
|
255
|
-
cairn sync-pi --check
|
|
256
|
-
cairn setup /path/to/project --git init --harness pi --memory local --yes
|
|
257
|
-
cd /path/to/project && cairn doctor && ./.ai/start-pi.sh
|
|
258
|
-
```
|
|
259
|
-
|
|
260
|
-
This installs the maintained local stdio memory extension, trajectory capture,
|
|
261
|
-
and the thin `/graphify` prompt. The memory extension discovers the effective
|
|
262
|
-
server tool catalog and preserves annotations in trusted result details; Pi's
|
|
263
|
-
public API has no native annotations field. It adds tools only—no prompt runs,
|
|
264
|
-
skill activation, autonomous loop, or remote access. Pi 0.84.1 is the minimum
|
|
265
|
-
validated version; v2.11 also passed the registry-current Pi release and the
|
|
266
|
-
documented Node, Bash, and native Windows matrix.
|
|
267
|
-
|
|
268
|
-
Preview removal before confirming it. Uninstall backs up every managed file it
|
|
269
|
-
will change and prints the generated revert command; durable memory and context
|
|
270
|
-
packs remain unless their explicit purge flags are supplied:
|
|
271
|
-
|
|
272
|
-
```bash
|
|
273
|
-
cairn uninstall --dry-run /path/to/project
|
|
274
|
-
cairn uninstall --yes /path/to/project
|
|
275
|
-
```
|
|
94
|
+
## Documentation
|
|
276
95
|
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
96
|
+
The [documentation hub](docs/README.md) is the index for setup, agents,
|
|
97
|
+
operations, optional features, deployment, learning paths, and contributor
|
|
98
|
+
guides. In particular:
|
|
280
99
|
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
printf '%s\n' 'TypeError: example' | cairn notes search-error --project /path/to/project --json
|
|
289
|
-
```
|
|
290
|
-
|
|
291
|
-
Notes keep deterministic failure, resolution, abandonment, and recurrence
|
|
292
|
-
history under `~/.cairnkeep/notes/`. Shared promotion is never automatic: it
|
|
293
|
-
requires compatible evidence from two distinct projects and an explicit
|
|
294
|
-
`cairn notes promote NOTE-ID --with NOTE-ID --confirm`. See the
|
|
295
|
-
[operating guide](docs/operating.md#hindsight-notes-opt-in) before enabling
|
|
296
|
-
optional model enrichment.
|
|
297
|
-
|
|
298
|
-
Prefer working from a clone? Build the server with `cd mcp-memory-server && npm
|
|
299
|
-
install && npm run build`, then use `scripts/sync-claude-assets.sh` and
|
|
300
|
-
`bin/cairn` in place of the installed `cairn`.
|
|
301
|
-
|
|
302
|
-
Step 2 is easy to miss and load-bearing: without it the memory server is
|
|
303
|
-
registered but none of the `/remember`, `/recall`, `/wiki-*`, `/security-audit`,
|
|
304
|
-
or `/repo-review` commands (and no memory hooks) exist. OpenCode uses the
|
|
305
|
-
`sync-opencode-*.sh` scripts instead — see the operating guide.
|
|
306
|
-
|
|
307
|
-
The launchers load `.ai/.env` and start the harness in the repo root. They stay
|
|
308
|
-
deliberately minimal — provider/profile specifics belong in your own wrapper,
|
|
309
|
-
which plugs in through the launcher seams below.
|
|
310
|
-
|
|
311
|
-
**Wrapper seams.** The generic launchers are no-ops beyond loading `.ai/.env`
|
|
312
|
-
unless a wrapper opts in:
|
|
313
|
-
|
|
314
|
-
- **`.ai/pre-launch.sh`** — sourced after `.env`, before the harness starts. May
|
|
315
|
-
export env (e.g. a provider base URL) or abort the launch by returning
|
|
316
|
-
non-zero. This is where credential refresh / connectivity setup lives.
|
|
317
|
-
- **`CAIRN_EXTRA_SETTINGS`** — path to a settings file layered onto the harness
|
|
318
|
-
(`--settings` for Claude Code, `OPENCODE_CONFIG` for OpenCode). Kimi, Qwen,
|
|
319
|
-
and Pi do not interpret this variable in their generic launchers.
|
|
320
|
-
Process env still wins, so an inline value beats the profile.
|
|
321
|
-
- **`.ai/post-exit.sh`** — sourced after the harness exits, with
|
|
322
|
-
`CAIRN_EXIT_STATUS` set to its exit code.
|
|
323
|
-
|
|
324
|
-
**Contributor mode.** Working on a repo you don't own? `cairn bootstrap
|
|
325
|
-
--untracked /path/to/project` additionally writes the scaffolded paths
|
|
326
|
-
(`.ai/`, `.planning/`, `.agentfs/`) into the repo's `.git/info/exclude`, so the workflow
|
|
327
|
-
files stay purely local: nothing to commit or push, invisible to every other
|
|
328
|
-
contributor, and no edit to the shared `.gitignore`. The trade-off is that
|
|
329
|
-
untracked planning state lives only on that clone — deleting the clone
|
|
330
|
-
deletes it. To move the durable memory itself between machines, use
|
|
331
|
-
`cairn memory export` / `cairn memory import`.
|
|
332
|
-
|
|
333
|
-
## Configuration
|
|
334
|
-
|
|
335
|
-
The memory server and collaboration commands are configured entirely through
|
|
336
|
-
`.ai/.env` (any OpenAI-compatible API for extraction and embedding-ranked
|
|
337
|
-
search):
|
|
338
|
-
|
|
339
|
-
| Variable | Purpose |
|
|
340
|
-
|---|---|
|
|
341
|
-
| `CAIRN_LLM_API_KEY` | API key for the extraction / embeddings endpoint |
|
|
342
|
-
| `CAIRN_LLM_API_URL` | Base URL of the OpenAI-compatible endpoint |
|
|
343
|
-
| `CAIRN_LLM_EXTRACTION_MODEL` | Chat model used for memory extraction |
|
|
344
|
-
| `CAIRN_MEMORY_EMBEDDING_URL` | Embeddings endpoint (falls back to `CAIRN_LLM_API_URL`) |
|
|
345
|
-
| `CAIRN_MEMORY_EMBEDDING_MODEL` | Embedding model name (required for semantic search) |
|
|
346
|
-
| `CAIRN_MEMORY_EMBEDDING_TIMEOUT_MS` | Embedding request timeout before substring fallback (default `15000`) |
|
|
347
|
-
| `CAIRN_AGENTFS_BASE_DIR` | Base dir for global memory scopes (default `~/.cairnkeep`) |
|
|
348
|
-
| `CAIRN_MCP_TOOL_PROFILE` | Process override for MCP exposure: `full`, `read-only`, or `custom` |
|
|
349
|
-
| `CAIRN_MCP_ALLOWED_TOOLS` | Comma-separated exact allowlist required by a custom process profile |
|
|
350
|
-
| `CAIRN_CONTEXT_PACKS` | Opt in to local context-pack list/search/read/related tools (default off) |
|
|
351
|
-
| `CAIRN_CONTEXT_PACK_HTTP` | Separately consent to context-pack tools over authenticated HTTP (default off) |
|
|
352
|
-
| `CAIRN_PACK_BASE_DIR` | Immutable pack objects, source records, pointers, and retrieval cache (default `~/.cairnkeep/packs`) |
|
|
353
|
-
| `CAIRN_PLAYBOOK_PROFILE` | Process-only playbook profile override: `minimal`, `balanced`, or `strict` (project default: `balanced`) |
|
|
354
|
-
| `CAIRN_PLAYBOOK_ACTOR` | Optional local receipt label; caller-supplied and unauthenticated in v2.15 |
|
|
355
|
-
| `CAIRN_PLAYBOOK_ACTOR_KIND` | Optional local actor kind: `user`, `agent`, or `service` |
|
|
356
|
-
| `CAIRN_PLAYBOOK_SESSION` | Optional bounded session label used by playbook decisions and receipts |
|
|
357
|
-
| `CAIRN_TRAJECTORY_CAPTURE` | Opt in to local structured session capture (`1`, `true`, `yes`, or `on`; default off) |
|
|
358
|
-
| `CAIRN_TRAJECTORY_SESSION_MAX_BYTES` | Maximum serialized bytes per captured session (default `5242880`, 5 MiB) |
|
|
359
|
-
| `CAIRN_TRAJECTORY_STORE_MAX_BYTES` | Maximum logical bytes across local trajectories (default `268435456`, 256 MiB) |
|
|
360
|
-
| `CAIRN_TRAJECTORY_RETENTION_DAYS` | Retain captured sessions for this many days (default `30`) |
|
|
361
|
-
| `CAIRN_TRAJECTORY_REDACTION_FILE` | Optional project-contained redaction config (default `.ai/trajectory-redaction.json` when present) |
|
|
362
|
-
| `CAIRN_REDACTION_FILE` | Optional project-contained redaction config shared by trajectories and artifacts (falls back to `CAIRN_TRAJECTORY_REDACTION_FILE`) |
|
|
363
|
-
| `CAIRN_WORK_EVIDENCE` | Capture bounded Git state around generated harness launches (off by default) |
|
|
364
|
-
| `CAIRN_WORK_EVIDENCE_PATCH` | Request an optional redacted patch artifact (off by default; also requires `CAIRN_ARTIFACT_STORE`) |
|
|
365
|
-
| `CAIRN_WORK_EVIDENCE_RETENTION_DAYS` | Work-evidence retention (default `30`; `0` disables age pruning) |
|
|
366
|
-
| `CAIRN_WORK_EVIDENCE_STORE_MAX_BYTES` | Project-local work-evidence metadata budget (default `67108864`, 64 MiB) |
|
|
367
|
-
| `CAIRN_WORK_EVIDENCE_MAX_TOUCHED_PATHS` | Maximum touched-path labels per record (default and hard maximum `4096`) |
|
|
368
|
-
| `CAIRN_WORK_EVIDENCE_PATCH_MAX_BYTES` | Maximum optional patch bytes (default `1048576`, 1 MiB; the artifact cap can lower it) |
|
|
369
|
-
| `CAIRN_COMPACTION_CAPTURE` | Opt in to local harness-produced compaction capture and fresh-session recovery (off by default) |
|
|
370
|
-
| `CAIRN_ARTIFACT_STORE` | Expose four local stdio artifact tools (off by default; independent of compaction capture) |
|
|
371
|
-
| `CAIRN_ARTIFACT_HTTP` | Separately consent to artifact tools over authenticated HTTP (off by default; also requires `CAIRN_ARTIFACT_STORE`) |
|
|
372
|
-
| `CAIRN_ARTIFACT_MAX_BYTES` | Maximum stored bytes per artifact (default `1048576`, 1 MiB) |
|
|
373
|
-
| `CAIRN_ARTIFACT_SESSION_MAX_BYTES` | Maximum logical bytes per artifact session (default `16777216`, 16 MiB) |
|
|
374
|
-
| `CAIRN_ARTIFACT_STORE_MAX_BYTES` | Maximum logical bytes in one artifact store (default `268435456`, 256 MiB) |
|
|
375
|
-
| `CAIRN_ARTIFACT_RETENTION_DAYS` | Artifact age retention (default `30`) |
|
|
376
|
-
| `CAIRN_COMPACTION_MAX_REVISIONS` | Retained compaction revisions per session (default `8`) |
|
|
377
|
-
| `CAIRN_ARTIFACT_GENERATED_FILE_SNAPSHOT_MAX_BYTES` | Generated-file inline snapshot cap (default `262144`, 256 KiB; lower if the artifact cap is lower) |
|
|
378
|
-
| `CAIRN_NOTE_DISTILLATION` | Opt in to one-shot/scheduled local note distillation and lookup (default off) |
|
|
379
|
-
| `CAIRN_NOTE_ENRICHMENT` | Separately opt in to remote/local prose enrichment; never implied by credentials (default off) |
|
|
380
|
-
| `CAIRN_NOTE_ENRICHMENT_MODEL` | Explicit chat model for optional note enrichment (no default) |
|
|
381
|
-
| `CAIRN_NOTE_ENRICHMENT_TIMEOUT_MS` | Optional enrichment timeout (default `15000`) |
|
|
382
|
-
| `CAIRN_TYPED_MEMORY_NODES` | Opt in to typed metadata, filters, logical note address spaces, and `memory_import` (default off; restart the server after changing) |
|
|
383
|
-
| `CAIRN_CAPABILITY_CONTRACT` | Opt in to the managed eight-capability contract (default off) |
|
|
384
|
-
| `CAIRN_CAPABILITY_LOGGING` | Override payload-free local callback logging (`1`/`0`; default off) |
|
|
385
|
-
| `CAIRN_CAPABILITY_MEMORY_WRITE` | Override `memory.write` for this process |
|
|
386
|
-
| `CAIRN_CAPABILITY_MEMORY_SEARCH` | Override `memory.search` for this process |
|
|
387
|
-
| `CAIRN_CAPABILITY_NOTES_DISTILL` | Override `notes.distill` for this process |
|
|
388
|
-
| `CAIRN_CAPABILITY_WIKI` | Override `wiki` for this process |
|
|
389
|
-
| `CAIRN_CAPABILITY_GRAPH` | Override `graph` for this process |
|
|
390
|
-
| `CAIRN_CAPABILITY_SECURITY_AUDIT` | Override `security.audit` for this process |
|
|
391
|
-
| `CAIRN_CAPABILITY_ROUTE_CHECK` | Override `route.check` for this process |
|
|
392
|
-
| `CAIRN_CAPABILITY_CONTEXT_EXPLORE` | Override `context.explore` for this process |
|
|
393
|
-
| `CAIRN_EVAL` | Opt in to the local evaluation coordinator (default off; does not select a harness, model, endpoint, credential, or network) |
|
|
394
|
-
| `CAIRN_GIT_PROVIDER` | Git host for collaboration commands: `github`\|`gitlab`\|`codeberg`\|`forgejo`\|`none` ([docs/git-providers.md](docs/git-providers.md)) |
|
|
395
|
-
| `CAIRN_ROUTE_ENDPOINT` | Base URL of an already-running token-miser routing/tiering proxy (unset → `route_check` is inert) |
|
|
396
|
-
| `CAIRN_GRAPHIFY_BINARY` | Optional Graphify command/path override (default `graphify` from `PATH`; JavaScript helpers run through Node) |
|
|
397
|
-
| `CAIRN_EXPLORE_BINARY` | Absolute path to the `token_miser` binary used by `context_explore` (unset → the tool throws) |
|
|
398
|
-
| `CAIRN_EXPLORE_REPO_ROOT` | Default repo root for `context_explore` when no per-call `repo_root` is given |
|
|
399
|
-
| `CAIRN_EXTRA_SETTINGS` | Optional settings/config file the launcher layers onto the harness (wrapper seam) |
|
|
400
|
-
| `CAIRN_ANYTHINGLLM_SYNC_SCRIPT` | Override path to the domain-knowledge sync script (when the integration lives outside the repo) |
|
|
401
|
-
| `CAIRN_ANYTHINGLLM_PROJECTS_FILE` | Override path to the bundled sync script's project configuration |
|
|
402
|
-
| `CAIRN_ANYTHINGLLM_STATE_FILE` | Override path to the bundled sync script's incremental state |
|
|
403
|
-
|
|
404
|
-
Without an API key, search degrades gracefully to substring matching.
|
|
405
|
-
There is no Cairnkeep telemetry. Optional extraction, embeddings, document RAG,
|
|
406
|
-
remote memory, and delegated exploration can send content to endpoints you
|
|
407
|
-
configure. Review [Privacy and data flow](docs/privacy-and-data-flow.md) before
|
|
408
|
-
enabling them.
|
|
409
|
-
|
|
410
|
-
### MCP authority and context packs
|
|
411
|
-
|
|
412
|
-
Every tool publishes a stable title and all four MCP annotation hints. Use
|
|
413
|
-
`cairn mcp-tools set read-only` for observation-only clients, or an exact custom
|
|
414
|
-
allowlist when a workflow needs fewer tools. Process settings override the
|
|
415
|
-
strict project file; the default remains `full`. Profiles only remove tools and
|
|
416
|
-
cannot bypass capability or feature gates. See
|
|
417
|
-
[MCP tool profiles](docs/mcp-tool-profiles.md).
|
|
418
|
-
|
|
419
|
-
Context packs are immutable, digest-addressed local document/skill bundles.
|
|
420
|
-
They are installed and project-pinned manually; no background Git sync occurs.
|
|
421
|
-
With `CAIRN_CONTEXT_PACKS=1`, enabled documents are searchable and their local
|
|
422
|
-
links traversable through four read-only MCP tools. Skills remain invisible until their exact file digest is
|
|
423
|
-
approved, and are never copied or executed. See
|
|
424
|
-
[Immutable context packs](docs/context-packs.md). OKF 0.1/0.2 import and
|
|
425
|
-
privacy-reviewed OKF 0.2 export are documented in
|
|
426
|
-
[Open Knowledge Format exchange](docs/open-knowledge-format.md).
|
|
427
|
-
|
|
428
|
-
### Managed capability contract (opt-in)
|
|
429
|
-
|
|
430
|
-
`CAIRN_CAPABILITY_CONTRACT=1` enables one versioned, typed boundary around the
|
|
431
|
-
existing capability owners. The master flag and callback logging are both off
|
|
432
|
-
by default. With the master flag unset, MCP registration, installed
|
|
433
|
-
Markdown/workflow bytes, commands, processes, configuration reads, logging,
|
|
434
|
-
output, and performance remain on the legacy path.
|
|
435
|
-
|
|
436
|
-
| Capability ID | Kind | Existing owner | Compatibility default | Process override |
|
|
437
|
-
|---|---|---|---:|---|
|
|
438
|
-
| `memory.write` | MCP tool | `memory_write` | on | `CAIRN_CAPABILITY_MEMORY_WRITE` |
|
|
439
|
-
| `memory.search` | MCP tool | `memory_search` | on | `CAIRN_CAPABILITY_MEMORY_SEARCH` |
|
|
440
|
-
| `notes.distill` | offline job | note distillation CLI/timer | off | `CAIRN_CAPABILITY_NOTES_DISTILL` |
|
|
441
|
-
| `wiki` | operating workflow | installed wiki commands/workflows | on | `CAIRN_CAPABILITY_WIKI` |
|
|
442
|
-
| `graph` | operating workflow | installed graph commands | inherited from `graphify.enabled`, otherwise off | `CAIRN_CAPABILITY_GRAPH` |
|
|
443
|
-
| `security.audit` | operating workflow | installed security commands/workflows | on | `CAIRN_CAPABILITY_SECURITY_AUDIT` |
|
|
444
|
-
| `route.check` | MCP tool | existing token-miser routing delegate | on | `CAIRN_CAPABILITY_ROUTE_CHECK` |
|
|
445
|
-
| `context.explore` | MCP tool | existing token-miser exploration delegate | on | `CAIRN_CAPABILITY_CONTEXT_EXPLORE` |
|
|
446
|
-
|
|
447
|
-
Manage project overrides in `.ai/capabilities.json` through the CLI rather than
|
|
448
|
-
editing JSON:
|
|
449
|
-
|
|
450
|
-
```bash
|
|
451
|
-
CAIRN_CAPABILITY_CONTRACT=1 cairn capabilities list
|
|
452
|
-
CAIRN_CAPABILITY_CONTRACT=1 cairn capabilities status --json
|
|
453
|
-
CAIRN_CAPABILITY_CONTRACT=1 cairn capabilities disable context.explore
|
|
454
|
-
CAIRN_CAPABILITY_CONTRACT=1 cairn capabilities reset context.explore
|
|
455
|
-
CAIRN_CAPABILITY_CONTRACT=1 cairn capabilities logging enable
|
|
456
|
-
```
|
|
457
|
-
|
|
458
|
-
Process overrides take precedence over project values, which take precedence
|
|
459
|
-
over compatibility defaults. `reset` removes an explicit override and restores
|
|
460
|
-
the inherited state; it does not mean enabled. Changes to the four MCP
|
|
461
|
-
capabilities (`memory.write`, `memory.search`, `route.check`, and
|
|
462
|
-
`context.explore`) require a fresh memory-server start and disabled tools are
|
|
463
|
-
omitted from `tools/list`. Offline and operating workflows resolve state at
|
|
464
|
-
each invocation. Enabling the master does not enable `notes.distill` or graph
|
|
465
|
-
when their compatibility inputs remain off.
|
|
466
|
-
|
|
467
|
-
Callback records are local, payload-free operating evidence, not evaluation
|
|
468
|
-
results or telemetry. They require the contract, callback logging, and local
|
|
469
|
-
trajectory capture to be enabled together. Cairnkeep makes no capability gain,
|
|
470
|
-
memory-quality, or efficiency claim from this instrumentation; Phase 19 must
|
|
471
|
-
first create an explicit all-enabled baseline and measure one-disabled states.
|
|
472
|
-
See the [operating guide](docs/operating.md#managed-capability-contract-opt-in),
|
|
473
|
-
[storage contract](docs/storage.md#capability-callback-storage), and
|
|
474
|
-
[privacy flow](docs/privacy-and-data-flow.md#capability-callback-flow).
|
|
475
|
-
|
|
476
|
-
### Evaluation harness (opt-in, measurement only)
|
|
477
|
-
|
|
478
|
-
`CAIRN_EVAL=1` enables `cairn eval` for a committed schema-v1 task set and an
|
|
479
|
-
explicit operator-owned adapter program. `validate` resolves immutable inputs,
|
|
480
|
-
limits, commands, digests, output containment, and a deterministic serial
|
|
481
|
-
schedule without invoking the adapter. `run` measures from-scratch Run 1 versus
|
|
482
|
-
a fresh Run 2 that can see only its own task's immutable note snapshot.
|
|
483
|
-
`ablate` measures an explicit all-eight-capabilities-on baseline against one
|
|
484
|
-
exactly-one-disabled treatment, with both passes in both arms. Execution prints
|
|
485
|
-
the invocation estimate and requires `--yes`; there is no retry, inference,
|
|
486
|
-
provider, endpoint, credential, model, or network default.
|
|
487
|
-
|
|
488
|
-
The canonical local JSON report records optional reported turns/tokens/cost,
|
|
489
|
-
independently verified pass state, full and note-eligible populations,
|
|
490
|
-
missingness, paired deltas, capability/notes/revision digests, and seeded
|
|
491
|
-
bootstrap uncertainty. Turns compare only under exact matching turn-semantics
|
|
492
|
-
compatibility IDs; token totals are never inferred and unknown verifier results
|
|
493
|
-
are never counted as pass or fail. Reports describe estimates and
|
|
494
|
-
inconclusive/small-sample conditions; they do not claim causality,
|
|
495
|
-
significance, quality change, or efficiency change.
|
|
496
|
-
|
|
497
|
-
The bundled fake task set and adapter are deterministic, offline framework
|
|
498
|
-
fixtures. They cannot support a Cairnkeep performance statement. Any future
|
|
499
|
-
efficiency statement requires a separate committed `live-evaluation` artifact
|
|
500
|
-
whose source, task-set, report, schema, note-snapshot, missingness, runtime, and
|
|
501
|
-
claim anchors all pass `scripts/verify-phase19-runtime-evidence.mjs`. No such
|
|
502
|
-
live claim or evidence artifact is shipped here, and external paper calibration
|
|
503
|
-
is neither a Cairnkeep result nor an acceptance target.
|
|
504
|
-
|
|
505
|
-
Reports and note snapshots stay under
|
|
506
|
-
`.agentfs/eval/experiments/<experiment-id>/`; default uninstall retains them,
|
|
507
|
-
while explicit purge is backup-first and revertible. Cancellation retains an
|
|
508
|
-
inspectable partial report. POSIX process-group cleanup and Windows descendant-
|
|
509
|
-
tree cleanup through `taskkill.exe /T` are tested by their platform contracts. See the
|
|
510
|
-
[operating guide](docs/operating.md#evaluation-harness-opt-in),
|
|
511
|
-
[storage contract](docs/storage.md#evaluation-report-and-note-snapshot-storage),
|
|
512
|
-
and [privacy flow](docs/privacy-and-data-flow.md#evaluation-adapter-and-report-flow).
|
|
513
|
-
|
|
514
|
-
### Validated skill improvement (opt-in)
|
|
515
|
-
|
|
516
|
-
`cairn skill` promotes repeated, resolved hindsight evidence through a guarded
|
|
517
|
-
lifecycle: local harvest, explicit evidence review, bounded proposal generation,
|
|
518
|
-
separate exploration and confirmation evaluations, exact-digest application,
|
|
519
|
-
and backup-first rollback. Cairnkeep never rewrites a live skill during proposal
|
|
520
|
-
or evaluation, never sends evidence to the proposal adapter before approval,
|
|
521
|
-
and never applies a candidate automatically.
|
|
522
|
-
|
|
523
|
-
Proposal generation uses an explicit strict adapter configuration with an
|
|
524
|
-
environment allowlist. Evaluation remains disabled unless `CAIRN_EVAL=1`, uses
|
|
525
|
-
the existing isolated worktree runner and independent verifier, and requires
|
|
526
|
-
disjoint committed task sets bound to one immutable source revision. A
|
|
527
|
-
candidate is eligible only when both stages meet the configured improvement
|
|
528
|
-
floor with no regression or unknown pair. See the
|
|
529
|
-
[validated skill guide](docs/skill-improvement.md),
|
|
530
|
-
[storage contract](docs/storage.md#validated-skill-storage), and
|
|
531
|
-
[privacy flow](docs/privacy-and-data-flow.md#validated-skill-improvement-flow).
|
|
532
|
-
|
|
533
|
-
### Typed memory nodes and structured import (opt-in)
|
|
534
|
-
|
|
535
|
-
`CAIRN_TYPED_MEMORY_NODES=1` adds schema-v1 `node_type`, canonical `tags`,
|
|
536
|
-
`address_space`, hard list/search filters (`node_types`, `tags_all`,
|
|
537
|
-
`tags_any`), and exactly one new MCP tool: `memory_import`. The flag is read
|
|
538
|
-
when each server/session is created, so restart after changing it. Unset keeps
|
|
539
|
-
the existing 14 tools, schemas, response roots, raw values, files, processes,
|
|
540
|
-
network behavior, and output unchanged. It adds no read/edit/update/delete
|
|
541
|
-
aliases; `memory_supersede` remains the sole edit operation.
|
|
542
|
-
|
|
543
|
-
Core types are `memory`, `knowledge`, `hindsight`, `shared`, and `provenance`;
|
|
544
|
-
extensions use a namespaced form such as `team:runbook`. Tags are ASCII
|
|
545
|
-
lowercase, with whitespace and underscores normalized to hyphens, deduplicated,
|
|
546
|
-
and sorted. Filters are applied before ranking. Exact key/tag/type hits precede
|
|
547
|
-
semantic results; without a working configured embedding endpoint, search uses
|
|
548
|
-
stable local substring matching.
|
|
549
|
-
|
|
550
|
-
`memory_import` accepts one inline schema-v1 batch for one concrete scope and
|
|
551
|
-
one `memory`, `project-notes`, or `shared-notes` address. It supports 1–256
|
|
552
|
-
unique relative keys, values up to 256 KiB each and 5 MiB total, optional
|
|
553
|
-
`import_id`, `dry_run`, and `conflict_policy: reject|supersede`. Results contain
|
|
554
|
-
only digests, counts, keys, and actions—never supplied values. The default
|
|
555
|
-
reject policy cannot overwrite; explicit supersede preserves typed history.
|
|
556
|
-
Note addresses require `scope: project` and logical keys, never filesystem
|
|
557
|
-
paths. See the [operating guide](docs/operating.md#typed-memory-nodes-and-note-address-spaces-opt-in).
|
|
558
|
-
|
|
559
|
-
### Git-linked work evidence (opt-in)
|
|
560
|
-
|
|
561
|
-
`CAIRN_WORK_EVIDENCE=1` makes generated Claude Code, OpenCode, Pi, Kimi, Qwen
|
|
562
|
-
and Codex launchers record bounded start/end Git state and links to exact local
|
|
563
|
-
trajectories, artifacts and reviewed-memory writes. It records no prompts,
|
|
564
|
-
keystrokes or reasoning, and harness launch remains fail-open when Git or
|
|
565
|
-
capture is unavailable. Inspect it with `cairn evidence list|show|delete|prune|doctor`.
|
|
566
|
-
Optional patch capture requires both `CAIRN_WORK_EVIDENCE_PATCH=1` and
|
|
567
|
-
`CAIRN_ARTIFACT_STORE=1`; Cairnkeep never applies or restores a patch. See the
|
|
568
|
-
[work-evidence guide](docs/work-evidence.md).
|
|
569
|
-
|
|
570
|
-
### Compaction continuity and artifacts (opt-in)
|
|
571
|
-
|
|
572
|
-
`CAIRN_COMPACTION_CAPTURE=1` captures only harness-produced compaction summaries
|
|
573
|
-
from the pinned Claude Code `PostCompact` 2.1.219 and 2.1.220 payloads and
|
|
574
|
-
OpenCode `session.compacted` 1.17.20 seam. It stores redacted immutable revisions locally and injects the latest
|
|
575
|
-
valid structured goals, decisions, TODOs, and critical errors when a session
|
|
576
|
-
starts. A resumed session is preferred; a fresh session falls back to the
|
|
577
|
-
newest valid project summary and marks stale context for validation. The raw
|
|
578
|
-
redacted summary is available only through an explicit read. Cairnkeep never
|
|
579
|
-
generates or triggers compaction.
|
|
580
|
-
|
|
581
|
-
`CAIRN_ARTIFACT_STORE=1` independently exposes exactly four stdio MCP tools:
|
|
582
|
-
`artifact_write`, `artifact_read`, `artifact_list`, and `artifact_delete`.
|
|
583
|
-
The initial kinds are exactly `compaction_summary`, `diff`, `test_output`, and
|
|
584
|
-
`generated_file`. Generated-file paths are labels only; the server never reads
|
|
585
|
-
them. Operators can inspect retained local data whether or not MCP writes are
|
|
586
|
-
currently enabled:
|
|
587
|
-
|
|
588
|
-
```bash
|
|
589
|
-
cairn artifact list --kind compaction_summary --json
|
|
590
|
-
cairn artifact show ARTIFACT-ID --json
|
|
591
|
-
cairn artifact delete ARTIFACT-ID --dry-run --json
|
|
592
|
-
cairn artifact prune --dry-run --include-protected --json
|
|
593
|
-
```
|
|
100
|
+
- [Quickstart](docs/quickstart.md)
|
|
101
|
+
- [For coding agents](docs/agents.md)
|
|
102
|
+
- [Context intelligence](docs/context-intelligence.md)
|
|
103
|
+
- [Operating guide](docs/operating.md)
|
|
104
|
+
- [Harness compatibility](docs/harness-compatibility.md)
|
|
105
|
+
- [Privacy and data flow](docs/privacy-and-data-flow.md)
|
|
106
|
+
- [Guided learning paths and video scripts](docs/learning/README.md)
|
|
594
107
|
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
`CAIRN_ARTIFACT_STORE=1` plus `CAIRN_ARTIFACT_HTTP=1`, as well as the existing
|
|
598
|
-
bearer, `Host`, and validated `X-Cairn-Project` controls. Artifact HTTP never
|
|
599
|
-
exposes trajectory data. See the [operating guide](docs/operating.md#compaction-continuity-and-artifacts-opt-in),
|
|
600
|
-
[storage contract](docs/storage.md#artifact-storage), and
|
|
601
|
-
[privacy flows](docs/privacy-and-data-flow.md#compaction-and-artifact-flows).
|
|
108
|
+
The repository supports Linux, macOS, native Windows x64, WSL, Node.js 22/24/26,
|
|
109
|
+
and real Bash 3.2 within the boundaries documented in the compatibility guides.
|
|
602
110
|
|
|
603
|
-
##
|
|
111
|
+
## Contributing and support
|
|
604
112
|
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
- **Managed overlay distributions** (wrapper CLI, policy lock, private registry, rollback) — [docs/overlay-distributions.md](docs/overlay-distributions.md)
|
|
609
|
-
- **Full operating guide** — [docs/operating.md](docs/operating.md)
|
|
610
|
-
- **Memory storage and deployment** — [docs/storage.md](docs/storage.md)
|
|
611
|
-
- **Podman and OCI containers** — [docs/containers.md](docs/containers.md)
|
|
612
|
-
- **Privacy and data flow** — [docs/privacy-and-data-flow.md](docs/privacy-and-data-flow.md)
|
|
613
|
-
- **MCP tool profiles** — [docs/mcp-tool-profiles.md](docs/mcp-tool-profiles.md)
|
|
614
|
-
- **Immutable context packs** — [docs/context-packs.md](docs/context-packs.md)
|
|
615
|
-
- **Open Knowledge Format exchange** — [docs/open-knowledge-format.md](docs/open-knowledge-format.md)
|
|
616
|
-
- **Validated skill improvement** — [docs/skill-improvement.md](docs/skill-improvement.md)
|
|
617
|
-
- **Git providers** — [docs/git-providers.md](docs/git-providers.md)
|
|
618
|
-
- **Support** — [SUPPORT.md](SUPPORT.md)
|
|
619
|
-
- **Contributing** — [CONTRIBUTING.md](CONTRIBUTING.md)
|
|
620
|
-
- **Security policy** — [SECURITY.md](SECURITY.md)
|
|
113
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for development and pull-request
|
|
114
|
+
guidelines, [SUPPORT.md](SUPPORT.md) for help, and [SECURITY.md](SECURITY.md) for
|
|
115
|
+
private vulnerability reporting.
|
|
621
116
|
|
|
622
117
|
## License
|
|
623
118
|
|