@cairnkeep/cli 2.16.0 → 2.17.1

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.
Files changed (63) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/README.md +1 -0
  3. package/docs/README.md +8 -0
  4. package/docs/agents.md +20 -0
  5. package/docs/context-intelligence.md +143 -0
  6. package/docs/context-packs.md +33 -0
  7. package/docs/domain-knowledge.md +29 -0
  8. package/docs/ecosystem.md +0 -1
  9. package/docs/learning/CURRICULUM-MAP.md +3 -1
  10. package/docs/learning/FEATURE-GUIDE.md +22 -3
  11. package/docs/learning/README.md +1 -0
  12. package/docs/learning/lessons/L00-why-cairnkeep.md +1 -1
  13. package/docs/learning/lessons/L01-safe-trial.md +3 -3
  14. package/docs/learning/lessons/L02-installation.md +2 -2
  15. package/docs/learning/lessons/L03-first-project.md +1 -1
  16. package/docs/learning/lessons/L19-validated-skill-improvement.md +1 -1
  17. package/docs/learning/lessons/L20-mcp-tool-profiles.md +1 -1
  18. package/docs/learning/lessons/L21-context-packs.md +1 -1
  19. package/docs/learning/lessons/L22-native-windows.md +2 -2
  20. package/docs/learning/lessons/L23-guided-setup.md +1 -1
  21. package/docs/learning/lessons/L24-okf-exchange.md +1 -1
  22. package/docs/learning/lessons/L25-playbooks.md +1 -1
  23. package/docs/learning/lessons/L26-context-intelligence.md +180 -0
  24. package/docs/learning/tracks/evidence-and-evaluation.md +1 -0
  25. package/docs/learning/tracks/operator.md +1 -0
  26. package/docs/learning/tracks/practitioner.md +1 -0
  27. package/docs/learning/video-scripts/V26-context-intelligence.md +144 -0
  28. package/docs/operating.md +44 -0
  29. package/docs/privacy-and-data-flow.md +22 -0
  30. package/docs/storage.md +21 -0
  31. package/docs/work-evidence.md +14 -0
  32. package/examples/eval/bundled-fake.json +1 -1
  33. package/mcp-memory-server/dist/context-pack-cli.js +3 -1
  34. package/mcp-memory-server/dist/context-pack-retrieval.js +413 -0
  35. package/mcp-memory-server/dist/context-pack.js +171 -3
  36. package/mcp-memory-server/dist/domain-retrieval-provider.js +257 -0
  37. package/mcp-memory-server/dist/index.js +73 -387
  38. package/mcp-memory-server/dist/mcp-tool-catalog.js +2 -0
  39. package/mcp-memory-server/dist/memory-extraction.js +87 -0
  40. package/mcp-memory-server/dist/memory-proposal-cli.js +110 -0
  41. package/mcp-memory-server/dist/memory-proposal-schema.js +78 -0
  42. package/mcp-memory-server/dist/memory-proposal-store.js +273 -0
  43. package/mcp-memory-server/dist/platform-security.js +32 -26
  44. package/mcp-memory-server/dist/retrieval-benchmark.js +199 -0
  45. package/mcp-memory-server/dist/reviewed-memory-store.js +281 -0
  46. package/mcp-memory-server/dist/work-evidence-schema.js +17 -0
  47. package/mcp-memory-server/dist/work-evidence-store.js +57 -1
  48. package/mcp-memory-server/package.json +8 -1
  49. package/package.json +2 -2
  50. package/schemas/context-usage-receipt.schema.json +41 -0
  51. package/schemas/memory-proposal.schema.json +65 -0
  52. package/schemas/retrieval-benchmark.schema.json +64 -0
  53. package/scripts/cairn-cli.mjs +2 -0
  54. package/scripts/completion.sh +17 -6
  55. package/scripts/doctor.sh +4 -2
  56. package/scripts/terminal-prompts.mjs +5 -3
  57. package/scripts/test-completion.sh +8 -1
  58. package/scripts/test-doctor.sh +21 -0
  59. package/scripts/test-release-sbom.sh +4 -1
  60. package/scripts/test-setup-preflight.mjs +13 -0
  61. package/scripts/test-windows-native.mjs +30 -0
  62. package/scripts/windows-platform.mjs +8 -5
  63. package/templates/PROJECT-INSTRUCTIONS.md.template +0 -1
package/CHANGELOG.md CHANGED
@@ -5,6 +5,40 @@ All notable user-facing changes are documented here. This project follows
5
5
 
6
6
  ## [Unreleased]
7
7
 
8
+ ## [2.17.1] - 2026-08-31
9
+
10
+ ### Fixed
11
+
12
+ - Release TTY stdin after every interactive `cairn setup` selector so setup
13
+ returns to the shell after completion, including through SSH terminals that
14
+ report stdin as already flowing.
15
+ - Keep the context-usage receipt smoke fixture relative to the test run so its
16
+ doctor assertion cannot fail merely because a hard-coded timestamp aged out.
17
+
18
+ ## [2.17.0] - 2026-08-29
19
+
20
+ ### Added
21
+
22
+ - Frozen, offline retrieval benchmark with substring and deterministic mock-
23
+ embedding goldens, quality/cost/latency metrics, mutation accounting, and
24
+ forbidden-result leakage checks.
25
+ - Progressive context-pack hierarchy and derived summary cache, the
26
+ `context_pack_tree` MCP tool, and opt-in hierarchical search detail and
27
+ sanitized explanation traces. Compatible flat content search remains the
28
+ default.
29
+ - Opt-in, privacy-preserving context-usage receipts linked to work evidence.
30
+ - Review-gated `cairn proposals create|list|show|apply|doctor` workflow for
31
+ promoting redacted trajectory candidates into reviewed durable memory.
32
+ - Provider-neutral domain retrieval with an explicitly gated, read-only
33
+ OpenViking adapter; AnythingLLM remains the default provider.
34
+
35
+ ### Changed
36
+
37
+ - Context-pack search can return stable result and chunk digests when requested,
38
+ without changing the default response shape.
39
+ - `cairn doctor` validates progressive context-cache records while preserving
40
+ immutable pack objects, project pins, and skill-approval authority.
41
+
8
42
  ## [2.16.0] - 2026-08-27
9
43
 
10
44
  ### Added
package/README.md CHANGED
@@ -99,6 +99,7 @@ guides. In particular:
99
99
 
100
100
  - [Quickstart](docs/quickstart.md)
101
101
  - [For coding agents](docs/agents.md)
102
+ - [Context intelligence](docs/context-intelligence.md)
102
103
  - [Operating guide](docs/operating.md)
103
104
  - [Harness compatibility](docs/harness-compatibility.md)
104
105
  - [Privacy and data flow](docs/privacy-and-data-flow.md)
package/docs/README.md CHANGED
@@ -27,6 +27,14 @@ linked guides rather than the project landing page.
27
27
  - [Validated skill improvement](skill-improvement.md) describes the reviewed,
28
28
  measured, reversible path for changing a live skill.
29
29
 
30
+ ## Context intelligence
31
+
32
+ - [Context intelligence](context-intelligence.md) connects progressive context-pack
33
+ retrieval, the frozen benchmark, usage receipts, review-gated proposals, and
34
+ the optional read-only OpenViking provider.
35
+ - [Immutable context packs](context-packs.md), [domain knowledge](domain-knowledge.md),
36
+ and [work evidence](work-evidence.md) document each boundary in depth.
37
+
30
38
  ## Operations, storage, and privacy
31
39
 
32
40
  - [Operating Cairnkeep](operating.md) is the full CLI and configuration
package/docs/agents.md CHANGED
@@ -139,6 +139,26 @@ and file digest. Even then, they are discoverable text through MCP—not copied
139
139
  into a harness, automatically activated, or executed. A pack update invalidates
140
140
  the old approval. See [Immutable context packs](context-packs.md).
141
141
 
142
+ ## Progressive retrieval and reviewed-memory proposals
143
+
144
+ When `context_pack_tree` is available, inspect abstracts before requesting full
145
+ content. Use hierarchical search for broad questions, exact path/title retrieval
146
+ for known leaves, and `explain: true` only when the bounded selection trace helps
147
+ debug retrieval. Default flat search remains valid and compatible.
148
+
149
+ Stable result references are opt-in (`include_refs: true`). If the operator also
150
+ enables `context_usage_record`, record only whether the cited result was used;
151
+ never put prompts or content into digest fields. Treat recording as a mutation.
152
+
153
+ `cairn proposals create` may suggest reviewed-memory candidates from a stored,
154
+ redacted trajectory, but an agent must inspect the proposal and use
155
+ `cairn proposals apply DIGEST` explicitly. Never treat extraction output as
156
+ reviewed truth, auto-apply it, or work around a stale-source/base-memory failure.
157
+
158
+ The optional OpenViking provider changes only how `domain_knowledge_query`
159
+ retrieves external context. It does not replace Cairnkeep's memory, evidence,
160
+ pack, or authority model.
161
+
142
162
  ## Graceful fallback
143
163
 
144
164
  Cairnkeep should never block ordinary engineering merely because optional
@@ -0,0 +1,143 @@
1
+ # Context intelligence
2
+
3
+ Cairnkeep can retrieve immutable project context progressively, measure retrieval
4
+ quality, record privacy-preserving usage evidence, and propose reviewed-memory
5
+ changes. These features keep the existing authority model: retrieval is an
6
+ observation; durable-memory changes require an explicit review and apply step.
7
+
8
+ ## Progressive context-pack retrieval
9
+
10
+ Enable context packs for the process with `CAIRN_CONTEXT_PACKS=1`. The existing
11
+ `context_pack_list`, `context_pack_search`, and `context_pack_read` tools remain
12
+ available, and the default search remains the compatible flat, content-level
13
+ search. Two optional surfaces add progressive disclosure:
14
+
15
+ - `context_pack_tree` returns only enabled documents and approved skills, using
16
+ `abstract` or `overview` detail.
17
+ - `context_pack_search` accepts `strategy: "hierarchical"`,
18
+ `detail: "abstract" | "overview" | "content"`, and `explain: true`.
19
+
20
+ For example:
21
+
22
+ ```json
23
+ {
24
+ "query": "release validation",
25
+ "strategy": "hierarchical",
26
+ "detail": "overview",
27
+ "explain": true,
28
+ "include_refs": true
29
+ }
30
+ ```
31
+
32
+ Hierarchical search ranks pack, directory, and file summaries before reading
33
+ content. An exact path or title can bypass the hierarchy and select the matching
34
+ leaf directly. `explain` adds a bounded, sanitized decision trace. It never adds
35
+ hidden file content to the trace.
36
+
37
+ Abstracts and overviews are deterministic derived data. They are cached below
38
+ the pack base directory in `cache/context/`, outside immutable pack objects, and
39
+ are bound to the pack digest and exact visible-file set. `cairn doctor` validates
40
+ this cache and can remove invalid derived entries; it does not enable a pack or
41
+ approve a skill.
42
+
43
+ Visibility is unchanged: a document must belong to an enabled pack, while a
44
+ skill must also have a current project approval matching the pack digest, path,
45
+ and file digest. Updating a pack therefore invalidates its old skill approvals.
46
+ Pack SHA-256 digests establish integrity, not publisher authenticity.
47
+
48
+ ## Retrieval benchmark
49
+
50
+ The repository includes a frozen synthetic benchmark with hierarchical files,
51
+ multiple versions, and a hidden skill. Positive retrieval cases report Hit@1,
52
+ Recall@5, and MRR; negative-only isolation cases report their count, pass rate,
53
+ and leaks separately. The report also covers relevant/irrelevant bytes, an
54
+ estimated token count, latency, network and filesystem mutations, and leakage
55
+ from disabled packs, unapproved skills, case-specific exclusions, or undeclared
56
+ result identities. Frozen substring and deterministic mock-embedding goldens
57
+ make regression checks offline and reproducible.
58
+
59
+ From a source checkout:
60
+
61
+ ```sh
62
+ npm --prefix mcp-memory-server run build
63
+ npm --prefix mcp-memory-server run check:retrieval-benchmark
64
+ npm --prefix mcp-memory-server run benchmark:retrieval
65
+ ```
66
+
67
+ The first command compiles the TypeScript sources. The second runs the contract
68
+ smoke test and checks the frozen golden. The third rebuilds and emits a current
69
+ report.
70
+ The benchmark is an engineering baseline, not a claim about every real project.
71
+
72
+ ## Context-usage receipts
73
+
74
+ Search results can include stable references by setting `include_refs: true`.
75
+ Each result then has a `chunk_digest`, and the response has a `result_digest`.
76
+ With work evidence enabled, set `CAIRN_CONTEXT_USAGE=1` as the second consent
77
+ gate to expose the local-only `context_usage_record` MCP mutation, then record
78
+ whether a referenced result was used. The tool is not registered unless both
79
+ `CAIRN_WORK_EVIDENCE=1` and `CAIRN_CONTEXT_USAGE=1` are active:
80
+
81
+ ```json
82
+ {
83
+ "task_digest": "<64-lowercase-hex-digest>",
84
+ "result_digest": "<64-lowercase-hex-digest>",
85
+ "outcome": "used"
86
+ }
87
+ ```
88
+
89
+ `outcome` is `used`, `unused`, or `unknown`. The receipt links to the active work
90
+ evidence unless `evidence_id` is supplied explicitly. It stores digests and the
91
+ outcome, not the query, prompt, retrieved content, or model response. The tool is
92
+ a mutation, so the read-only MCP profile does not expose it. Receipts are strict,
93
+ idempotent links in the existing work-evidence store and follow its retention.
94
+
95
+ ## Review-gated memory proposals
96
+
97
+ `cairn proposals` turns a stored, redacted trajectory into candidates for
98
+ reviewed durable memory. It never applies candidates during extraction:
99
+
100
+ ```sh
101
+ cairn proposals create --session SESSION_ID --scope project --json
102
+ cairn proposals list --json
103
+ cairn proposals show PROPOSAL_DIGEST --json
104
+ cairn proposals apply PROPOSAL_DIGEST --json
105
+ cairn proposals doctor --json
106
+ ```
107
+
108
+ `create` loads the named local trajectory, redacts it again before any configured
109
+ model call, and writes an immutable, digest-addressed proposal under
110
+ `.agentfs/memory-proposals/`. The digest binds the source, extraction, base memory,
111
+ and candidates. `apply` accepts that exact digest, rechecks source and base-memory
112
+ freshness, and then performs the reviewed-memory write atomically. A stale or
113
+ tampered proposal fails instead of being rebased or silently accepted.
114
+
115
+ Model extraction uses the existing `CAIRN_LLM_API_URL`, `CAIRN_LLM_API_KEY`, and
116
+ `CAIRN_LLM_EXTRACTION_MODEL` settings. No background hook creates or applies
117
+ proposals.
118
+
119
+ ## Optional OpenViking retrieval provider
120
+
121
+ AnythingLLM remains the default domain-retrieval provider. OpenViking is an
122
+ optional, read-only adapter behind two explicit settings:
123
+
124
+ ```sh
125
+ CAIRN_DOMAIN_RETRIEVAL_PROVIDER=openviking
126
+ CAIRN_OPENVIKING=1
127
+ CAIRN_OPENVIKING_BASE_URL=http://127.0.0.1:1933
128
+ # Optional:
129
+ CAIRN_OPENVIKING_API_KEY=...
130
+ CAIRN_OPENVIKING_TIMEOUT_MS=5000
131
+ ```
132
+
133
+ The existing `domain_knowledge_query` tool keeps its schema. The adapter calls
134
+ only OpenViking's search endpoint; Cairnkeep does not import, sync, watch, delete,
135
+ or commit OpenViking data. Plain HTTP is accepted only for loopback hosts; other
136
+ hosts require HTTPS. Embedded URL credentials, redirects, oversized responses,
137
+ and invalid response shapes are rejected. Authenticated remote MCP deployment
138
+ also requires the separate `CAIRN_OPENVIKING_MCP_HTTP=1` consent flag.
139
+
140
+ OpenViking does not replace Cairnkeep. It can supply an external retrieval index;
141
+ Cairnkeep still owns project identity, reviewed memory, immutable context-pack
142
+ pins, tool authority, evidence, and approval boundaries. No OpenViking package or
143
+ service is required for the default Cairnkeep installation.
@@ -95,6 +95,39 @@ Authenticated HTTP deployments need the separate
95
95
  project header. Pack digests prove integrity, not publisher authenticity.
96
96
  Publisher signatures remain future work.
97
97
 
98
+ ## Progressive hierarchy and stable result references
99
+
100
+ The default `context_pack_search` request remains flat content search, preserving
101
+ the established schema and response shape. Agents can opt into progressive
102
+ disclosure without changing pack contents:
103
+
104
+ ```json
105
+ {
106
+ "query": "deployment rollback",
107
+ "strategy": "hierarchical",
108
+ "detail": "overview",
109
+ "explain": true,
110
+ "include_refs": true
111
+ }
112
+ ```
113
+
114
+ `strategy` is `flat` or `hierarchical`; `detail` is `abstract`, `overview`, or
115
+ `content`. The optional trace is bounded and sanitized. `context_pack_tree`
116
+ returns the visible hierarchy at `abstract` or `overview` detail, optionally
117
+ limited by pack ID, `id@version`, or digest.
118
+
119
+ Summaries are deterministic derived cache entries below
120
+ `${CAIRN_PACK_BASE_DIR:-~/.cairnkeep/packs}/cache/context/`. They are bound to the
121
+ pack digest and visible-file-set digest, not stored in immutable objects, and can
122
+ be rebuilt without choosing an enabled version or granting approval. Search with
123
+ `include_refs: true` adds per-result `chunk_digest` values and a response-level
124
+ `result_digest` for optional usage receipts.
125
+
126
+ Only enabled documents and explicitly approved skills contribute to the tree,
127
+ summary cache, search results, or explanation trace. A skill approval remains
128
+ bound to project identity, pack digest, path, and file digest; a changed pack
129
+ digest cannot inherit it.
130
+
98
131
  ## Open Knowledge Format exchange
99
132
 
100
133
  Use `cairn pack validate-okf` and `cairn pack import-okf` to consume OKF 0.1 or
@@ -96,6 +96,35 @@ copy of the example JSON at the default user config path, or set
96
96
  and state beside the script retain that legacy behavior. To customize the
97
97
  implementation itself, set `CAIRN_ANYTHINGLLM_SYNC_SCRIPT` to the adapted copy.
98
98
 
99
+ ## Retrieval providers
100
+
101
+ AnythingLLM remains the default. Selecting it explicitly is optional:
102
+
103
+ ```sh
104
+ CAIRN_DOMAIN_RETRIEVAL_PROVIDER=anythingllm
105
+ ```
106
+
107
+ OpenViking can instead back the existing read-only `domain_knowledge_query`
108
+ tool. It is deliberately double-gated and has no sync or write path:
109
+
110
+ ```sh
111
+ CAIRN_DOMAIN_RETRIEVAL_PROVIDER=openviking
112
+ CAIRN_OPENVIKING=1
113
+ CAIRN_OPENVIKING_BASE_URL=http://127.0.0.1:1933
114
+ # CAIRN_OPENVIKING_API_KEY=...
115
+ # CAIRN_OPENVIKING_TIMEOUT_MS=5000
116
+ ```
117
+
118
+ Plain HTTP is limited to loopback. Use HTTPS for any other host. Credentials in
119
+ the URL, redirects, invalid response shapes, and oversized bodies are rejected.
120
+ Authenticated remote MCP use requires the additional explicit consent setting
121
+ `CAIRN_OPENVIKING_MCP_HTTP=1`.
122
+
123
+ This adapter queries `/api/v1/search/find` only. Cairnkeep does not synchronize
124
+ documents into OpenViking, start its service, or adopt its session and memory
125
+ model. OpenViking is optional external retrieval; Cairnkeep remains the authority
126
+ for reviewed memory, pack pins, approvals, evidence, and MCP profiles.
127
+
99
128
  ## Not using RAG?
100
129
 
101
130
  Do nothing. The tools stay inert, cost nothing, and the rest of cairnkeep is
package/docs/ecosystem.md CHANGED
@@ -14,7 +14,6 @@ graph workflows have their own explicit companion requirements.
14
14
 
15
15
  | Tool | What it adds | Integration |
16
16
  |---|---|---|
17
- | [lean-ctx](https://github.com/yvgude/lean-ctx) | Compressed file reads, searches, shell output, and directory maps | Register it as an MCP server in the chosen harness |
18
17
  | [token-miser](https://github.com/cairnkeep/token-miser) | Model routing and compact codebase exploration | Configure `CAIRN_ROUTE_ENDPOINT` and/or `CAIRN_EXPLORE_BINARY` |
19
18
  | [rtk](https://github.com/rtk-ai/rtk) | Token-reduced output for common Git, npm, and Cargo commands | Install as a shell-level proxy; Cairnkeep wiring is not required |
20
19
 
@@ -1,6 +1,6 @@
1
1
  # Curriculum Coverage Map
2
2
 
3
- **Baseline:** Cairnkeep 2.16.0
3
+ **Baseline:** Cairnkeep 2.17.1
4
4
  **Last reviewed:** 2026-08-19
5
5
 
6
6
  This map prevents the course from drifting behind the product. It assigns each
@@ -41,6 +41,7 @@ been rehearsed.
41
41
  | Pi local stdio memory bridge, trusted annotation details, and explicit lifecycle | L23 | L23 | Ready; Pi 0.84.1 validated minimum |
42
42
  | OKF 0.1/0.2 validation/import, provenance, links, regressions, and reviewed 0.2 export | L24 | L24 | Ready; local/offline by default |
43
43
  | Bounded project playbooks, generic memory retrieval guidance, enforcement, and private receipts | L25 | L25 | Ready; balanced/local by default; invocation requires runtime evidence; actor identity unverified |
44
+ | Progressive pack retrieval, frozen benchmark, context-usage receipts, review-gated memory proposals, optional provider adapter | L26 | V26 | Ready; default flat search and AnythingLLM remain compatible; OpenViking and receipt mutation are explicitly gated |
44
45
 
45
46
  ## Release Review
46
47
 
@@ -85,6 +86,7 @@ against `cairn help` so a new command cannot bypass a curriculum decision.
85
86
  |---|---|
86
87
  | `cairn bootstrap` | L03 compatibility challenge |
87
88
  | `cairn setup` | L03 for Claude/Codex; advanced Pi lifecycle in L23 |
89
+ | `cairn proposals` | L26 |
88
90
  | `cairn memory-server` | L02 |
89
91
  | `cairn sync` | L02 |
90
92
  | `cairn sync-pi` | L13 and L23 |
@@ -1,6 +1,6 @@
1
1
  # Cairnkeep feature guide
2
2
 
3
- **Baseline:** Cairnkeep 2.16.0
3
+ **Baseline:** Cairnkeep 2.17.1
4
4
 
5
5
  This is the step-back map for choosing and operating Cairnkeep features. The
6
6
  [course labs](https://github.com/cairnkeep/cairnkeep-course-labs) provide one
@@ -117,5 +117,24 @@ prerequisites for ordinary memory.
117
117
  - Use `cairn uninstall --dry-run` before uninstall; durable memory is retained
118
118
  unless purge is explicitly requested.
119
119
  - Revisit the [storage guide](../storage.md) and
120
- [privacy/data-flow guide](../privacy-and-data-flow.md) before enabling a new
121
- network or retention path.
120
+ [privacy/data-flow guide](../privacy-and-data-flow.md) before enabling a new
121
+ network or retention path.
122
+
123
+ ## Context intelligence
124
+
125
+ L26 joins five related surfaces without collapsing their authority boundaries:
126
+
127
+ - the frozen retrieval benchmark measures relevance, context cost, latency,
128
+ mutations, and forbidden leakage offline;
129
+ - context-pack trees and hierarchical summaries support progressive disclosure,
130
+ while omitted options retain compatible flat content search;
131
+ - opt-in result digests can produce content-free usage receipts linked to work
132
+ evidence;
133
+ - trajectory extraction creates an immutable proposal that must be reviewed and
134
+ applied by exact digest before it becomes durable memory;
135
+ - the OpenViking adapter is optional read-only domain retrieval, with
136
+ AnythingLLM still the default and Cairnkeep still owning memory and evidence.
137
+
138
+ See [L26](lessons/L26-context-intelligence.md), its
139
+ [video script](video-scripts/V26-context-intelligence.md), and the
140
+ [context-intelligence reference](../context-intelligence.md).
@@ -60,6 +60,7 @@ expanded only after their labs are executable.
60
60
  | L23 | [Guided setup and Pi memory](lessons/L23-guided-setup.md) | Ready | 35 min |
61
61
  | L24 | [Reviewed knowledge exchange](lessons/L24-okf-exchange.md) | Ready | 35 min |
62
62
  | L25 | [Bounded workflow playbooks](lessons/L25-playbooks.md) | Ready | 35 min |
63
+ | L26 | [Context intelligence with explicit authority](lessons/L26-context-intelligence.md) | Ready | 45 min |
63
64
 
64
65
  The [curriculum coverage map](CURRICULUM-MAP.md) records where every public
65
66
  feature is introduced, practised, and operated. It also marks design-only work
@@ -3,7 +3,7 @@
3
3
  **Status:** Ready
4
4
  **Track:** Quickstart
5
5
  **Time:** 10 minutes
6
- **Tested with:** Cairnkeep 2.16.0
6
+ **Tested with:** Cairnkeep 2.17.1
7
7
 
8
8
  ## Outcome
9
9
 
@@ -3,7 +3,7 @@
3
3
  **Status:** Ready
4
4
  **Track:** Quickstart
5
5
  **Time:** 15 minutes
6
- **Tested with:** Cairnkeep 2.16.0
6
+ **Tested with:** Cairnkeep 2.17.1
7
7
 
8
8
  ## Outcome
9
9
 
@@ -26,7 +26,7 @@ ephemeral; the named course volume is persistent.
26
26
  1. Pull the public image:
27
27
 
28
28
  ```bash
29
- podman pull ghcr.io/cairnkeep/cairnkeep:2.16.0
29
+ podman pull ghcr.io/cairnkeep/cairnkeep:2.17.1
30
30
  ```
31
31
 
32
32
  2. Start the stdio server with a read-only root filesystem and no Linux
@@ -38,7 +38,7 @@ ephemeral; the named course volume is persistent.
38
38
  --read-only --cap-drop=all --security-opt=no-new-privileges \
39
39
  --tmpfs=/tmp:rw,noexec,nosuid,size=64m,mode=1777 \
40
40
  --volume cairnkeep-course-data:/data:Z,U \
41
- ghcr.io/cairnkeep/cairnkeep:2.16.0 stdio
41
+ ghcr.io/cairnkeep/cairnkeep:2.17.1 stdio
42
42
  ```
43
43
 
44
44
  3. The process waits quietly for MCP input. Press `Ctrl-C` after confirming it
@@ -3,7 +3,7 @@
3
3
  **Status:** Ready
4
4
  **Track:** Quickstart
5
5
  **Time:** 25 minutes
6
- **Tested with:** Cairnkeep 2.16.0 and Node.js 22 or newer
6
+ **Tested with:** Cairnkeep 2.17.1 and Node.js 22 or newer
7
7
 
8
8
  ## Outcome
9
9
 
@@ -47,7 +47,7 @@ sync. Codex project trust remains an explicit operator decision.
47
47
  2. Install Cairnkeep:
48
48
 
49
49
  ```bash
50
- npm install --global @cairnkeep/cli@2.16.0
50
+ npm install --global @cairnkeep/cli@2.17.1
51
51
  cairn --version
52
52
  ```
53
53
 
@@ -3,7 +3,7 @@
3
3
  **Status:** Ready
4
4
  **Track:** Quickstart
5
5
  **Time:** 25 minutes
6
- **Tested with:** Cairnkeep 2.16.0
6
+ **Tested with:** Cairnkeep 2.17.1
7
7
 
8
8
  ## Outcome
9
9
 
@@ -3,7 +3,7 @@
3
3
  **Status:** Ready
4
4
  **Track:** Evidence and Evaluation
5
5
  **Time:** 50 minutes
6
- **Tested with:** Cairnkeep 2.16.0
6
+ **Tested with:** Cairnkeep 2.17.1
7
7
 
8
8
  ## Outcome
9
9
 
@@ -1,7 +1,7 @@
1
1
  # L20 - Least-authority MCP tool profiles
2
2
 
3
3
  **Status:** Ready
4
- **Tested with:** Cairnkeep 2.16.0 and Node.js 22 or newer
4
+ **Tested with:** Cairnkeep 2.17.1 and Node.js 22 or newer
5
5
  **Time:** 25 minutes
6
6
 
7
7
  ## Outcome
@@ -1,7 +1,7 @@
1
1
  # L21 - Immutable context packs and skill approval
2
2
 
3
3
  **Status:** Ready
4
- **Tested with:** Cairnkeep 2.16.0 and Node.js 22 or newer
4
+ **Tested with:** Cairnkeep 2.17.1 and Node.js 22 or newer
5
5
  **Time:** 40 minutes
6
6
 
7
7
  ## Outcome
@@ -3,7 +3,7 @@
3
3
  **Status:** Ready
4
4
  **Track:** Operator
5
5
  **Time:** 30 minutes
6
- **Tested with:** Cairnkeep 2.16.0, Windows x64, and Node.js 22 or newer
6
+ **Tested with:** Cairnkeep 2.17.1, Windows x64, and Node.js 22 or newer
7
7
 
8
8
  ## Outcome
9
9
 
@@ -16,7 +16,7 @@ perform a reversible uninstall without relying on WSL or Git Bash.
16
16
  From PowerShell:
17
17
 
18
18
  ```powershell
19
- npm install --global @cairnkeep/cli@2.16.0
19
+ npm install --global @cairnkeep/cli@2.17.1
20
20
  cairn version
21
21
 
22
22
  $Lab = Join-Path $env:TEMP 'Cairnkeep Windows Lab'
@@ -3,7 +3,7 @@
3
3
  **Status:** Ready
4
4
  **Track:** Quickstart and Operator
5
5
  **Time:** 35 minutes
6
- **Tested with:** Cairnkeep 2.16.0; Pi 0.84.1; Node.js 22, 24, and 26
6
+ **Tested with:** Cairnkeep 2.17.1; Pi 0.84.1; Node.js 22, 24, and 26
7
7
 
8
8
  ## Outcome
9
9
 
@@ -1,7 +1,7 @@
1
1
  # L24 - Reviewed knowledge exchange
2
2
 
3
3
  **Status:** Ready
4
- **Tested with:** Cairnkeep 2.16.0 and Node.js 22 or newer
4
+ **Tested with:** Cairnkeep 2.17.1 and Node.js 22 or newer
5
5
  **Time:** 35 minutes
6
6
 
7
7
  ## Outcome
@@ -1,7 +1,7 @@
1
1
  # L25 - Bounded workflow playbooks
2
2
 
3
3
  **Status:** Ready
4
- **Tested with:** Cairnkeep 2.16.0 and Node.js 22 or newer
4
+ **Tested with:** Cairnkeep 2.17.1 and Node.js 22 or newer
5
5
  **Time:** 35 minutes
6
6
 
7
7
  ## Outcome