@cairnkeep/cli 2.5.0 → 2.7.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.
Files changed (62) hide show
  1. package/CHANGELOG.md +24 -1
  2. package/README.md +33 -12
  3. package/bin/cairn +15 -3
  4. package/claude/commands/graphify.md +46 -55
  5. package/docs/building-an-overlay.md +2 -2
  6. package/docs/harness-compatibility.md +95 -9
  7. package/docs/learning/CURRICULUM-MAP.md +3 -1
  8. package/docs/learning/FEATURE-GUIDE.md +3 -2
  9. package/docs/learning/README.md +12 -12
  10. package/docs/learning/lessons/L00-why-cairnkeep.md +1 -5
  11. package/docs/learning/lessons/L01-safe-trial.md +3 -7
  12. package/docs/learning/lessons/L02-installation.md +15 -9
  13. package/docs/learning/lessons/L03-first-project.md +1 -5
  14. package/docs/learning/lessons/L04-memory-fundamentals.md +0 -6
  15. package/docs/learning/lessons/L05-daily-workflow.md +0 -5
  16. package/docs/learning/lessons/L06-repository-quality.md +0 -6
  17. package/docs/learning/lessons/L07-privacy-and-storage.md +0 -5
  18. package/docs/learning/lessons/L08-multiple-machines.md +0 -5
  19. package/docs/learning/lessons/L09-domain-knowledge.md +0 -5
  20. package/docs/learning/lessons/L10-context-exploration.md +0 -5
  21. package/docs/learning/lessons/L11-containers.md +0 -5
  22. package/docs/learning/lessons/L12-managed-overlays.md +0 -6
  23. package/docs/learning/lessons/L13-session-evidence.md +0 -6
  24. package/docs/learning/lessons/L14-typed-memory.md +0 -6
  25. package/docs/learning/lessons/L15-capability-governance.md +0 -6
  26. package/docs/learning/lessons/L16-evaluation.md +0 -7
  27. package/docs/learning/lessons/L17-agent-boundary.md +0 -6
  28. package/docs/learning/templates/lesson-template.md +0 -4
  29. package/docs/operating.md +111 -9
  30. package/docs/privacy-and-data-flow.md +1 -0
  31. package/examples/eval/bundled-fake.json +1 -1
  32. package/kimi/skills/graphify/SKILL.md +33 -0
  33. package/mcp-memory-server/dist/capability-registry.js +2 -2
  34. package/mcp-memory-server/dist/graph-cli.js +386 -0
  35. package/mcp-memory-server/package.json +2 -1
  36. package/opencode/command/graphify.md +48 -58
  37. package/package.json +4 -2
  38. package/pi/prompts/graphify.md +32 -0
  39. package/scripts/bootstrap.sh +4 -1
  40. package/scripts/completion.sh +17 -6
  41. package/scripts/smoke-bash32.sh +1 -0
  42. package/scripts/sync-kimi-assets.sh +77 -0
  43. package/scripts/sync-pi-assets.sh +52 -31
  44. package/scripts/test-bootstrap-untracked.sh +23 -1
  45. package/scripts/test-cli-dispatch.sh +4 -0
  46. package/scripts/test-completion.sh +5 -0
  47. package/scripts/test-graph-harness-adapters.sh +46 -0
  48. package/scripts/test-launcher-hooks.sh +33 -3
  49. package/scripts/test-learning-docs.sh +2 -9
  50. package/scripts/test-package-install.sh +9 -0
  51. package/scripts/test-trajectory-hooks.sh +5 -1
  52. package/scripts/test-uninstall.sh +12 -2
  53. package/scripts/uninstall.sh +12 -4
  54. package/templates/graph-policy.md.template +23 -4
  55. package/templates/start-qwen.sh.template +32 -0
  56. package/docs/learning/PRODUCTION-PLAN.md +0 -153
  57. package/docs/learning/instructor-guide.md +0 -66
  58. package/docs/learning/templates/video-script-template.md +0 -50
  59. package/docs/learning/video-scripts/L00-why-cairnkeep.md +0 -80
  60. package/docs/learning/video-scripts/L01-safe-trial.md +0 -78
  61. package/docs/learning/video-scripts/L02-installation.md +0 -97
  62. package/docs/learning/video-scripts/L03-first-project.md +0 -99
@@ -3,7 +3,7 @@
3
3
  **Status:** Ready
4
4
  **Track:** Quickstart
5
5
  **Time:** 15 minutes
6
- **Tested with:** Cairnkeep 2.5.0
6
+ **Tested with:** Cairnkeep 2.7.0
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.5.0
29
+ podman pull ghcr.io/cairnkeep/cairnkeep:2.7.0
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.5.0 stdio
41
+ ghcr.io/cairnkeep/cairnkeep:2.7.0 stdio
42
42
  ```
43
43
 
44
44
  3. The process waits quietly for MCP input. Press `Ctrl-C` after confirming it
@@ -90,7 +90,3 @@ podman volume rm cairnkeep-course-data
90
90
  - Persistence belongs to an explicitly named volume.
91
91
 
92
92
  Next: [L02 - Install the local workflow](L02-installation.md).
93
-
94
- ## Video
95
-
96
- Use [the L01 presenter script](../video-scripts/L01-safe-trial.md).
@@ -3,7 +3,7 @@
3
3
  **Status:** Ready
4
4
  **Track:** Quickstart
5
5
  **Time:** 25 minutes
6
- **Tested with:** Cairnkeep 2.5.0 and Node.js 22 or newer
6
+ **Tested with:** Cairnkeep 2.7.0 and Node.js 22 or newer
7
7
 
8
8
  ## Outcome
9
9
 
@@ -13,7 +13,7 @@ layer, and distinguish a complete installation from a partial one.
13
13
  ## Prerequisites
14
14
 
15
15
  - Node.js 22 or newer and npm.
16
- - Claude Code installed for the commands below. OpenCode and Kimi Code users
16
+ - Claude Code installed for the commands below. OpenCode, Kimi Code, and Qwen Code users
17
17
  should follow the equivalent setup in
18
18
  [the operating guide](../../operating.md).
19
19
  - Permission to install an npm package globally for your user.
@@ -41,7 +41,7 @@ machine-level steps.
41
41
  2. Install Cairnkeep:
42
42
 
43
43
  ```bash
44
- npm install --global @cairnkeep/cli@2.5.0
44
+ npm install --global @cairnkeep/cli@2.7.0
45
45
  cairn --version
46
46
  ```
47
47
 
@@ -99,14 +99,24 @@ installation.
99
99
  This registration starts `cairn memory-server` locally as a stdio child. It
100
100
  does not discover a server, send memory to a remote host, configure embeddings,
101
101
  enable session capture, or enable an optional document-RAG integration. Pi uses
102
- the separate `cairn sync-pi` trajectory adapter and still needs a user-selected
103
- bridge if Pi should expose MCP memory tools.
102
+ the separate `cairn sync-pi` trajectory and graph-prompt adapter and still needs
103
+ a user-selected bridge if Pi should expose MCP memory tools.
104
104
 
105
105
  Kimi Code can use the same memory server through its generated
106
106
  `.ai/start-kimi.sh` launcher, but its HTTP MCP configuration requires a literal
107
107
  URL rather than `${CAIRN_MEMORY_REMOTE_URL}`. Keep the resolved URL in a private
108
108
  `.kimi-code/mcp.json` and keep the bearer token in the environment. See
109
109
  [Harness compatibility](../../harness-compatibility.md#kimi-code).
110
+ Its optional `cairn sync-kimi` Skill adds only the local `/graphify` delegate;
111
+ it does not change memory transport or send graph data to a new destination.
112
+
113
+ Qwen Code can use the generated `.ai/start-qwen.sh` launcher. Its project
114
+ `.qwen/settings.json` supports environment references for both the remote URL
115
+ and authorization header, so the file can contain names such as
116
+ `${CAIRN_MEMORY_REMOTE_URL}` and `${CAIRN_MEMORY_HTTP_TOKEN}` instead of secret
117
+ values. Keep this project settings file untracked and approve the generated MCP
118
+ entry with `qwen mcp approve cairn-memory`. See
119
+ [Harness compatibility](../../harness-compatibility.md#qwen-code).
110
120
 
111
121
  ## Clean up if you stop the evaluation
112
122
 
@@ -127,7 +137,3 @@ Do not delete memory stores as part of a course cleanup.
127
137
  - Default stdio memory is local.
128
138
 
129
139
  Next: [L03 - Bootstrap the first project](L03-first-project.md).
130
-
131
- ## Video
132
-
133
- Use [the L02 presenter script](../video-scripts/L02-installation.md).
@@ -3,7 +3,7 @@
3
3
  **Status:** Ready
4
4
  **Track:** Quickstart
5
5
  **Time:** 25 minutes
6
- **Tested with:** Cairnkeep 2.5.0
6
+ **Tested with:** Cairnkeep 2.7.0
7
7
 
8
8
  ## Outcome
9
9
 
@@ -115,7 +115,3 @@ inspect `.git/info/exclude` to see how contributor mode avoids shared changes.
115
115
  - Persistence is proven only after a new session recalls the accepted fact.
116
116
 
117
117
  Next: [L04 - Memory fundamentals](L04-memory-fundamentals.md).
118
-
119
- ## Video
120
-
121
- Use [the L03 presenter script](../video-scripts/L03-first-project.md).
@@ -35,12 +35,6 @@ candidate.
35
35
  - No extracted candidate becomes durable without an explicit review action.
36
36
  - Enabling typed nodes changes discovery structure, not the authority of a fact.
37
37
 
38
- ## Planned video
39
-
40
- Open with two contradictory memories, demonstrate search and superseding, then
41
- finish with the review queue. Target 12-15 minutes. Write the complete script in
42
- Wave 2 after the lab fixture is executable.
43
-
44
38
  ## Source material
45
39
 
46
40
  - [Operating guide](../../operating.md#the-workflow)
@@ -35,11 +35,6 @@ queue before exiting.
35
35
  - The learner can describe what to do at session start, before editing, and at
36
36
  session end.
37
37
 
38
- ## Planned video
39
-
40
- Follow one small feature from session start to reviewed handoff. Target 15
41
- minutes and split wiki maintenance into a second video if rehearsal runs long.
42
-
43
38
  ## Source material
44
39
 
45
40
  - [Operating guide](../../operating.md#the-workflow)
@@ -33,12 +33,6 @@ solution branch.
33
33
  - No scan reaches outside the disposable repository or its local processes.
34
34
  - The lab passes after remediation and fails in its tagged starter state.
35
35
 
36
- ## Planned video
37
-
38
- This is the flagship value demonstration. Show one serious synthetic defect
39
- from discovery through validation and fix. Target 15 minutes; publish the full
40
- 45-minute exercise as a workshop.
41
-
42
36
  ## Source material
43
37
 
44
38
  - [Operating guide](../../operating.md#the-workflow)
@@ -34,11 +34,6 @@ names, and prove that no remote destination was discovered.
34
34
  - The learner can stop when an effective destination is ambiguous.
35
35
  - Independent feature flags are not treated as one blanket consent switch.
36
36
 
37
- ## Planned video
38
-
39
- Use two simple diagrams and one terminal preflight. Target 10 minutes. Do not
40
- demonstrate real endpoints or credentials.
41
-
42
37
  ## Source material
43
38
 
44
39
  - [Privacy and data flow](../../privacy-and-data-flow.md)
@@ -31,11 +31,6 @@ the pre-import backup.
31
31
  - The learner verifies counts and exact synthetic values on both sides.
32
32
  - No remote service is introduced merely to complete the migration lab.
33
33
 
34
- ## Planned video
35
-
36
- Record the backup, migration, verification, and rollback without cuts that hide
37
- state transitions. Target 12 minutes.
38
-
39
34
  ## Source material
40
35
 
41
36
  - [Storage and deployment](../../storage.md#inspecting-and-moving-memory)
@@ -32,11 +32,6 @@ verify the new answer. Then unset the integration and prove memory still works.
32
32
  - Updated content replaces stale retrieval results.
33
33
  - Disabling RAG leaves `/remember` and `/recall` healthy.
34
34
 
35
- ## Planned video
36
-
37
- Lead with “optional, not required”, show query then sync, and finish by disabling
38
- the integration. Target 12 minutes.
39
-
40
35
  ## Source material
41
36
 
42
37
  - [Domain knowledge](../../domain-knowledge.md)
@@ -33,11 +33,6 @@ invalidation. Disable the binary and verify standalone Cairnkeep remains usable.
33
33
  - The learner distinguishes exploration output from durable memory.
34
34
  - An unavailable explorer fails locally without breaking memory operations.
35
35
 
36
- ## Planned video
37
-
38
- Compare a broad manual search with one cited exploration result. Target 10
39
- minutes and keep routing as a separate optional chapter.
40
-
41
36
  ## Source material
42
37
 
43
38
  - [Operating guide](../../operating.md#exploration-cache-context_explore-on-by-default)
@@ -32,11 +32,6 @@ only the course resources.
32
32
  volume is deliberately removed.
33
33
  - The learner can enumerate every mount and network boundary.
34
34
 
35
- ## Planned video
36
-
37
- Use a diagram first, then replace a running container while retaining its
38
- volume. Target 15 minutes.
39
-
40
35
  ## Source material
41
36
 
42
37
  - [Containers](../../containers.md)
@@ -33,12 +33,6 @@ upgrades the pin, verifies fleet status, and rolls one project back.
33
33
  - Effective storage and service destinations are explainable before launch.
34
34
  - Upgrade and rollback preserve the disposable memory store.
35
35
 
36
- ## Planned video
37
-
38
- Show the same project under public core and a generic managed overlay, then
39
- explain the small delta. Target 15 minutes; keep registry administration in the
40
- written operator lab.
41
-
42
36
  ## Source material
43
37
 
44
38
  - [Building a private overlay](../../building-an-overlay.md)
@@ -57,12 +57,6 @@ cairn artifact list --json
57
57
  memory by purpose, store, lifecycle, and trust level.
58
58
  - Cleanup targets only the disposable course evidence.
59
59
 
60
- ## Planned video
61
-
62
- Draw the evidence lifecycle, capture one synthetic session, inspect the redacted
63
- record, and find the resulting failure note. Target 14 minutes. Treat compaction
64
- and Pi as short boundary chapters rather than requiring three harness demos.
65
-
66
60
  ## Source material
67
61
 
68
62
  - [Operating guide: structured trajectories](../../operating.md#structured-session-trajectories-opt-in)
@@ -38,12 +38,6 @@ import.
38
38
  - Imported values never appear in command diagnostics or course screenshots.
39
39
  - The learner does not present a logical note address as a host path.
40
40
 
41
- ## Planned video
42
-
43
- Use a small type-and-tag diagram, then demonstrate filtered discovery and the
44
- dry-run/replay sequence. Target 12 minutes. Keep the full import limits in the
45
- written lesson rather than narrating a table of numbers.
46
-
47
41
  ## Source material
48
42
 
49
43
  - [Operating guide: typed memory nodes](../../operating.md#typed-memory-nodes-and-note-address-spaces-opt-in)
@@ -43,12 +43,6 @@ CAIRN_CAPABILITY_CONTRACT=1 cairn capabilities logging enable
43
43
  - No callback record contains prompts, tool arguments, results, or memory values.
44
44
  - Disabling an optional capability does not break standalone memory.
45
45
 
46
- ## Planned video
47
-
48
- Show precedence as three stacked layers, then perform one disable/reset cycle.
49
- Target 11 minutes. Use JSON status for evidence and avoid presenting a digest as
50
- a security signature or performance result.
51
-
52
46
  ## Source material
53
47
 
54
48
  - [Operating guide: managed capability contract](../../operating.md#managed-capability-contract-opt-in)
@@ -52,13 +52,6 @@ after the lab is rehearsed from the packaged CLI rather than a source clone.
52
52
  without claiming causality, significance, or product improvement.
53
53
  - Course cleanup is limited to its temporary contained experiment root.
54
54
 
55
- ## Planned video
56
-
57
- Start with the claim boundary, validate before running, inspect one two-pass
58
- report, and close by marking the fixture `offline-framework`. Target 16 minutes.
59
- Publish ablation as a second short video if the complete schedule obscures the
60
- measurement concepts.
61
-
62
55
  ## Source material
63
56
 
64
57
  - [Operating guide: evaluation harness](../../operating.md#evaluation-harness-opt-in)
@@ -43,12 +43,6 @@ be required before any future implementation could act.
43
43
  - The learner can name at least one explicit future prerequisite and one
44
44
  unconditional human stop point.
45
45
 
46
- ## Planned video
47
-
48
- Use one ownership diagram and one fictional proposal. Target 9 minutes. Put a
49
- persistent `DESIGN ONLY` label on every future component and end on the exact
50
- current-versus-future boundary.
51
-
52
46
  ## Source material
53
47
 
54
48
  - [Meta-agent design contract](../../design/meta-agent.md)
@@ -58,7 +58,3 @@ Offer one bounded extension that is not required for the next lesson.
58
58
  ## Recap
59
59
 
60
60
  List three facts and link the next lesson.
61
-
62
- ## Video
63
-
64
- Link to `../video-scripts/LXX-title.md` only after the script is verified.
package/docs/operating.md CHANGED
@@ -18,7 +18,9 @@ installs. This guide covers all three in order.
18
18
 
19
19
  - Node.js 22 or newer (for the memory server) and a supported harness. Claude
20
20
  Code and OpenCode receive the full operating layer. Kimi Code receives the
21
- memory MCP and launcher. Pi receives its native trajectory adapter.
21
+ memory MCP, launcher, and opt-in graph Skill; Qwen Code receives the memory
22
+ MCP and launcher. Pi receives its native trajectory adapter, graph prompt,
23
+ and launcher.
22
24
  - Optional: the `sqlite3` CLI for `cairn memory export`. Runtime memory and
23
25
  `cairn memory import` do not require it.
24
26
  - Optional: an OpenAI-compatible LLM endpoint for memory extraction and
@@ -158,10 +160,78 @@ Model selection stays operator-env-driven through the existing
158
160
  variables (see "Configuration" below) — the harness commits no default model
159
161
  and carries no known-good allowlist.
160
162
 
163
+ ## Optional Graphify workflow
164
+
165
+ Graphify is an optional local structural index. Install only its isolated CLI:
166
+
167
+ ```bash
168
+ uv tool install graphifyy
169
+ # or: pipx install graphifyy
170
+ ```
171
+
172
+ Do not run `graphify install`: Cairnkeep owns the harness commands, policies,
173
+ and hooks, so Graphify-owned assets would duplicate that operating layer.
174
+ With the managed capability contract enabled, run
175
+ `cairn capabilities enable graph`; otherwise enable the compatibility setting
176
+ `graphify.enabled` in `.planning/config.json`. Then use the managed command
177
+ surface. Claude Code and OpenCode receive the native wrapper:
178
+
179
+ ```text
180
+ /graphify build
181
+ /graphify status
182
+ /graphify query putTrajectory
183
+ /graphify explain putTrajectory
184
+ /graphify path putTrajectory resolveCapabilityStatus
185
+ /graphify diff
186
+ ```
187
+
188
+ Install the equivalent thin adapters for Kimi Code and Pi:
189
+
190
+ ```bash
191
+ cairn sync-kimi --apply
192
+ cairn sync-pi --apply
193
+ ```
194
+
195
+ Kimi then exposes `/graphify` and `/skill:graphify`; Pi exposes `/graphify`.
196
+ Both adapters delegate exclusively to the same portable CLI, which also remains
197
+ available directly from their project shell:
198
+
199
+ ```bash
200
+ cairn graph build
201
+ cairn graph status
202
+ cairn graph query putTrajectory
203
+ cairn graph explain putTrajectory
204
+ cairn graph path putTrajectory resolveCapabilityStatus
205
+ cairn graph diff
206
+ ```
207
+
208
+ The same direct CLI works with Qwen Code, Codex, and other shell-capable
209
+ clients. This does not add a Pi MCP bridge or imply that those harnesses receive
210
+ the rest of Cairnkeep's operating layer.
211
+
212
+ All six modes delegate to `cairn graph`. Managed builds run Graphify's local
213
+ code-only `update` path with provider credentials removed from the subprocess
214
+ environment, then atomically publish validated artifacts under
215
+ `.planning/graphs/`. Previous published artifacts are isolated during the scan
216
+ so Graphify cannot re-index its own generated HTML/report/JSON. Managed builds
217
+ do not perform Graphify's optional semantic document extraction. Prefer exact
218
+ function, class, or file names; broad natural-language graph queries are less
219
+ precise. Cairnkeep does not install or update Graphify automatically.
220
+
161
221
  ## Setup order (Kimi Code)
162
222
 
163
- Kimi Code can use the Cairnkeep memory MCP and the generated project launcher.
164
- It does not yet receive Cairnkeep-specific skills, commands, or hooks.
223
+ Kimi Code can use the Cairnkeep memory MCP, generated project launcher, and one
224
+ thin graph Skill. Install the Skill into `$KIMI_CODE_HOME` (default
225
+ `~/.kimi-code`) with:
226
+
227
+ ```bash
228
+ cairn sync-kimi --apply
229
+ ```
230
+
231
+ Use `cairn sync-kimi --check` to detect drift or `--live-root DIR` for an
232
+ isolated Kimi root. The command owns only `skills/graphify/SKILL.md`; `cairn
233
+ uninstall --kimi-live-root DIR` removes it backup-first. It adds no hooks,
234
+ agents, plugins, or new data flow.
165
235
 
166
236
  For local stdio memory, create `.kimi-code/mcp.json` in the project:
167
237
 
@@ -189,10 +259,41 @@ parses it before applying its private override. See
189
259
  [Harness compatibility](harness-compatibility.md#kimi-code) for the complete
190
260
  configuration and trust-boundary guidance.
191
261
 
262
+ ## Setup order (Qwen Code)
263
+
264
+ Qwen Code can use the Cairnkeep memory MCP and the generated project launcher.
265
+ It does not yet receive Cairnkeep-specific skills, commands, or hooks.
266
+
267
+ For local stdio memory, create `.qwen/settings.json` in the project:
268
+
269
+ ```json
270
+ {
271
+ "mcpServers": {
272
+ "cairn-memory": {
273
+ "command": "cairn",
274
+ "args": ["memory-server"]
275
+ }
276
+ }
277
+ }
278
+ ```
279
+
280
+ Review and approve the project server, then launch it:
281
+
282
+ ```bash
283
+ qwen mcp approve cairn-memory
284
+ ./.ai/start-qwen.sh
285
+ ```
286
+
287
+ For authenticated remote HTTP, use `httpUrl` plus environment-expanded headers
288
+ in `.qwen/settings.json`. Keep the endpoint and bearer token in `.ai/.env` or a
289
+ machine secret store, not in the JSON file. See
290
+ [Harness compatibility](harness-compatibility.md#qwen-code) for the tested
291
+ configuration, approval behavior, and overlay guidance.
292
+
192
293
  ## Setup order (Pi)
193
294
 
194
- Pi trajectory capture uses the same project scaffold and store, but its source
195
- is a native TypeScript extension installed into Pi's agent root:
295
+ Pi trajectory capture uses the same project scaffold and store. Its sync also
296
+ installs a thin `/graphify` prompt into Pi's agent root:
196
297
 
197
298
  ```bash
198
299
  npm install -g @cairnkeep/cli
@@ -208,8 +309,9 @@ a user-chosen Pi extension/bridge separately.
208
309
 
209
310
  Use `cairn sync-pi --check` to report drift without writing, or
210
311
  `--live-root DIR` to target an isolated Pi agent root. The command owns exactly
211
- `extensions/cairnkeep-trajectory.ts`; `cairn uninstall --pi-live-root DIR`
212
- removes that file backup-first and leaves every other Pi asset untouched.
312
+ `extensions/cairnkeep-trajectory.ts` and `prompts/graphify.md`; `cairn
313
+ uninstall --pi-live-root DIR` removes those files backup-first and leaves every
314
+ other Pi asset untouched.
213
315
 
214
316
  The extension listens for Pi's native `session_shutdown` event and reads only
215
317
  the active branch from the read-only session manager. It returns before doing
@@ -663,13 +765,13 @@ maintain a running install — without forking the core. All are opt-in.
663
765
  ### Launcher seams
664
766
 
665
767
  The generic launchers (`.ai/start-claude.sh`, `.ai/start-opencode.sh`,
666
- `.ai/start-kimi.sh`, and `.ai/start-pi.sh`) run optional hooks around the
768
+ `.ai/start-kimi.sh`, `.ai/start-qwen.sh`, and `.ai/start-pi.sh`) run optional hooks around the
667
769
  harness, each a no-op when absent:
668
770
 
669
771
  | Seam | When | Purpose |
670
772
  |---|---|---|
671
773
  | `.ai/pre-launch.sh` | sourced after `.env`, before launch | export env (e.g. a provider base URL / auth), refresh credentials, or abort by returning non-zero |
672
- | `CAIRN_EXTRA_SETTINGS` | read just before launch | path to a settings file layered on Claude Code (`--settings`) or OpenCode (`OPENCODE_CONFIG`); Kimi and Pi leave the variable available to hooks but do not interpret it |
774
+ | `CAIRN_EXTRA_SETTINGS` | read just before launch | path to a settings file layered on Claude Code (`--settings`) or OpenCode (`OPENCODE_CONFIG`); Kimi, Qwen, and Pi leave the variable available to hooks but do not interpret it |
673
775
  | `.ai/post-exit.sh` | sourced after the harness exits | teardown; `CAIRN_EXIT_STATUS` holds the exit code |
674
776
 
675
777
  A wrapper that needs a non-default provider drops a `pre-launch.sh` that renders
@@ -16,6 +16,7 @@ request unless the corresponding endpoint and credential are configured.
16
16
  | `domain_knowledge_sync` | Files selected by the sync configuration | `ANYTHINGLLM_BASE_URL` |
17
17
  | `route_check` | A health request, with no memory or prompt content | `CAIRN_ROUTE_ENDPOINT` |
18
18
  | `context_explore` | Repository path and query are passed to the configured local executable | `CAIRN_EXPLORE_BINARY`; any further data flow is controlled by that tool |
19
+ | Optional Graphify workflow | The repository path, exact query/symbol names, and local published graph path are passed to the operator-installed `graphify` executable | Local Graphify subprocess with a minimal environment and no provider credentials; managed build uses code-only `update`, never semantic document extraction |
19
20
  | Remote HTTP memory | MCP requests and responses, including memory content | The explicitly registered Cairnkeep HTTP server |
20
21
  | Opt-in trajectory capture | None | Local `<project>/.agentfs/trajectory.db` only; no model or HTTP path exists |
21
22
  | Opt-in capability callback records | None | Payload-free final metadata in local `<project>/.agentfs/trajectory.db`; HTTP transport is always skipped |
@@ -1 +1 @@
1
- {"identifier":"cairn-offline-fake-v1","package_version":"2.5.0","schema_version":1,"task_set_digest":"13e95379f35839593047ec34521a65a8fa3ab92bd3993bca9dc8bf5c4a9ff36f"}
1
+ {"identifier":"cairn-offline-fake-v1","package_version":"2.7.0","schema_version":1,"task_set_digest":"13e95379f35839593047ec34521a65a8fa3ab92bd3993bca9dc8bf5c4a9ff36f"}
@@ -0,0 +1,33 @@
1
+ ---
2
+ name: graphify
3
+ description: Build, query, and inspect the local project graph exclusively through Cairnkeep
4
+ type: flow
5
+ ---
6
+
7
+ <!-- managed-by:cairnkeep -->
8
+ # Cairnkeep graph
9
+
10
+ Handle this request through Cairnkeep's public graph owner. The invocation
11
+ arguments are:
12
+
13
+ ```text
14
+ $ARGUMENTS
15
+ ```
16
+
17
+ Accept exactly one of these forms:
18
+
19
+ - `build`
20
+ - `build --force`
21
+ - `query <term>`
22
+ - `status`
23
+ - `diff`
24
+ - `explain <symbol>`
25
+ - `path <from> <to>`
26
+
27
+ Invoke the Bash tool exactly once with the corresponding `cairn graph ...`
28
+ command. Pass each term or symbol as one safely quoted argument. Return the
29
+ command output verbatim and stop.
30
+
31
+ If the arguments do not match a supported form, show the supported forms and
32
+ stop without invoking a tool. Do not call the Graphify executable, edit graph
33
+ artifacts, spawn another agent, or implement graph logic in this Skill.
@@ -6,7 +6,7 @@ const MAX_COMPATIBILITY_CONFIG_BYTES = 64 * 1024;
6
6
  function environmentName(id) {
7
7
  return `CAIRN_CAPABILITY_${id.toUpperCase().replaceAll(".", "_")}`;
8
8
  }
9
- async function readGraphCompatibility(projectRoot) {
9
+ export async function isGraphCapabilityCompatible(projectRoot) {
10
10
  const planningDirectory = join(projectRoot, ".planning");
11
11
  const configPath = join(planningDirectory, "config.json");
12
12
  try {
@@ -84,7 +84,7 @@ export const CAPABILITY_REGISTRY = [
84
84
  compatibility_default: false,
85
85
  restart_required: false,
86
86
  logging_policy: "final-callback",
87
- resolveCompatibility: ({ projectRoot, graphifyEnabled }) => graphifyEnabled ?? readGraphCompatibility(projectRoot),
87
+ resolveCompatibility: ({ projectRoot, graphifyEnabled }) => graphifyEnabled ?? isGraphCapabilityCompatible(projectRoot),
88
88
  },
89
89
  {
90
90
  id: "security.audit",