@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
@@ -82,12 +82,14 @@ chmod +x "$SB/bin/"*
82
82
  export HOME="$SB/home" XDG_CONFIG_HOME="$SB/home/.config" PATH="$SB/bin:$PATH"
83
83
  LIVE="$SB/live"
84
84
  PI_LIVE="$SB/pi-live"
85
+ KIMI_LIVE="$SB/kimi-live"
85
86
 
86
87
  echo "test-uninstall"
87
88
 
88
89
  # --- install the operating layer -------------------------------------------
89
90
  "$ROOT_DIR/scripts/sync-claude-assets.sh" --apply --live-root "$LIVE" >/dev/null 2>&1
90
91
  "$ROOT_DIR/scripts/sync-pi-assets.sh" --apply --live-root "$PI_LIVE" >/dev/null 2>&1
92
+ "$ROOT_DIR/scripts/sync-kimi-assets.sh" --apply --live-root "$KIMI_LIVE" >/dev/null 2>&1
91
93
  md_installed=$(find "$LIVE" -type f -name '*.md' | wc -l | tr -d ' ')
92
94
  check "assets installed" "$([[ $md_installed -gt 0 ]] && echo yes || echo no)" "yes"
93
95
  check "managed hooks registered" "$(managed_hook_count "$LIVE/settings.json")" "5"
@@ -105,6 +107,8 @@ fs.writeFileSync(path, JSON.stringify(settings, null, 2) + "\n")
105
107
  NODE
106
108
  cp "$LIVE/settings.json" "$SB/settings.before.json"
107
109
  cp "$PI_LIVE/extensions/cairnkeep-trajectory.ts" "$SB/pi.before.ts"
110
+ cp "$PI_LIVE/prompts/graphify.md" "$SB/pi-graph.before.md"
111
+ cp "$KIMI_LIVE/skills/graphify/SKILL.md" "$SB/kimi-graph.before.md"
108
112
  mkdir -p "$SB/home/.cairnkeep/notes/projects/example/hindsight"
109
113
  printf 'durable note bytes\n' >"$SB/home/.cairnkeep/notes/projects/example/hindsight/failure.md"
110
114
  mkdir -p "$SB/home/.cairnkeep/notes/.cairnkeep/history/project-notes/knowledge/example" \
@@ -204,10 +208,12 @@ overlay_before=$(tree_hash "$PROJECT_DATA/.ai/capability-contract")
204
208
  project_before=$(tree_hash "$PROJECT_DATA")
205
209
 
206
210
  # --- dry-run must change nothing -------------------------------------------
207
- "$ROOT_DIR/scripts/uninstall.sh" --dry-run --live-root "$LIVE" --pi-live-root "$PI_LIVE" "$PROJECT_DATA" >/dev/null 2>&1
211
+ "$ROOT_DIR/scripts/uninstall.sh" --dry-run --live-root "$LIVE" --pi-live-root "$PI_LIVE" --kimi-live-root "$KIMI_LIVE" "$PROJECT_DATA" >/dev/null 2>&1
208
212
  check "dry-run leaves assets" "$(find "$LIVE" -type f -name '*.md' | wc -l | tr -d ' ')" "$md_installed"
209
213
  check "dry-run makes no bundle" "$(ls -d "$SB/home/.cairnkeep-uninstall-"* 2>/dev/null | wc -l | tr -d ' ')" "0"
210
214
  check "dry-run leaves Pi extension" "$([[ -f "$PI_LIVE/extensions/cairnkeep-trajectory.ts" ]] && echo yes || echo no)" "yes"
215
+ check "dry-run leaves Pi graph prompt" "$([[ -f "$PI_LIVE/prompts/graphify.md" ]] && echo yes || echo no)" "yes"
216
+ check "dry-run leaves Kimi graph Skill" "$([[ -f "$KIMI_LIVE/skills/graphify/SKILL.md" ]] && echo yes || echo no)" "yes"
211
217
  check "dry-run leaves settings identical" "$(cmp -s "$SB/settings.before.json" "$LIVE/settings.json" && echo yes || echo no)" "yes"
212
218
  check "dry-run leaves artifact bytes exact" "$(cmp -s "$SB/artifacts.before.db" "$PROJECT_DATA/.agentfs/artifacts.db" && echo yes || echo no)" "yes"
213
219
  check "dry-run leaves eval tree, bytes, and modes exact" "$(tree_identity "$PROJECT_DATA/.agentfs/eval")" "$eval_before"
@@ -216,11 +222,13 @@ check "dry-run leaves adjacent project exact" "$(tree_identity "$ADJACENT_PROJEC
216
222
  check "dry-run leaves project state byte-identical" "$(tree_hash "$PROJECT_DATA")" "$project_before"
217
223
 
218
224
  # --- real uninstall ---------------------------------------------------------
219
- "$ROOT_DIR/scripts/uninstall.sh" --yes --live-root "$LIVE" --pi-live-root "$PI_LIVE" "$PROJECT_DATA" >/dev/null 2>&1
225
+ "$ROOT_DIR/scripts/uninstall.sh" --yes --live-root "$LIVE" --pi-live-root "$PI_LIVE" --kimi-live-root "$KIMI_LIVE" "$PROJECT_DATA" >/dev/null 2>&1
220
226
  check "assets removed" "$(find "$LIVE" -type f -name '*.md' | wc -l | tr -d ' ')" "0"
221
227
  check "managed hooks de-registered" "$(managed_hook_count "$LIVE/settings.json")" "0"
222
228
  check "unrelated hook preserved" "$(grep -cF 'keep-me.sh' "$LIVE/settings.json" 2>/dev/null || true)" "1"
223
229
  check "Pi extension removed" "$([[ -e "$PI_LIVE/extensions/cairnkeep-trajectory.ts" ]] && echo no || echo yes)" "yes"
230
+ check "Pi graph prompt removed" "$([[ -e "$PI_LIVE/prompts/graphify.md" ]] && echo no || echo yes)" "yes"
231
+ check "Kimi graph Skill removed" "$([[ -e "$KIMI_LIVE/skills/graphify/SKILL.md" ]] && echo no || echo yes)" "yes"
224
232
  check "default uninstall keeps notes" "$(sha256sum "$SB/home/.cairnkeep/notes/projects/example/hindsight/failure.md" | cut -d' ' -f1)" "$note_before"
225
233
  check "default uninstall keeps all typed and journal bytes" "$(tree_hash "$SB/home/.cairnkeep")" "$store_before"
226
234
  check "default uninstall keeps artifact bytes exact" "$(cmp -s "$SB/artifacts.before.db" "$PROJECT_DATA/.agentfs/artifacts.db" && echo yes || echo no)" "yes"
@@ -243,6 +251,8 @@ bash "$BK/revert.sh" >/dev/null 2>&1
243
251
  check "assets restored" "$(find "$LIVE" -type f -name '*.md' | wc -l | tr -d ' ')" "$md_installed"
244
252
  check "settings.json identical" "$(cmp -s "$SB/settings.before.json" "$LIVE/settings.json" && echo yes || echo no)" "yes"
245
253
  check "Pi extension restored" "$(cmp -s "$SB/pi.before.ts" "$PI_LIVE/extensions/cairnkeep-trajectory.ts" && echo yes || echo no)" "yes"
254
+ check "Pi graph prompt restored" "$(cmp -s "$SB/pi-graph.before.md" "$PI_LIVE/prompts/graphify.md" && echo yes || echo no)" "yes"
255
+ check "Kimi graph Skill restored" "$(cmp -s "$SB/kimi-graph.before.md" "$KIMI_LIVE/skills/graphify/SKILL.md" && echo yes || echo no)" "yes"
246
256
  check "capability config bytes restored" "$(cmp -s "$SB/capabilities.before.json" "$PROJECT_DATA/.ai/capabilities.json" && echo yes || echo no)" "yes"
247
257
  check "capability overlay bytes restored" "$(tree_hash "$PROJECT_DATA/.ai/capability-contract")" "$overlay_before"
248
258
  check "capability hook registrations restored" "$(capability_hook_count "$CLAUDE_OVERLAY/settings.json")" "5"
@@ -22,6 +22,7 @@ TPL="$CAIRN_ROOT/templates"
22
22
 
23
23
  LIVE_ROOT="${CLAUDE_CONFIG_DIR:-$HOME/.claude}"
24
24
  PI_LIVE_ROOT="${PI_CODING_AGENT_DIR:-$HOME/.pi/agent}"
25
+ KIMI_LIVE_ROOT="${KIMI_CODE_HOME:-$HOME/.kimi-code}"
25
26
  STORE_DIR="${CAIRN_AGENTFS_BASE_DIR:-$HOME/.cairnkeep}"
26
27
  STORE_DIR="${STORE_DIR/#\~/$HOME}"
27
28
  DRY_RUN=0
@@ -40,6 +41,7 @@ PROJECT_AI_FILES=(
40
41
  start-opencode.sh
41
42
  start-pi.sh
42
43
  start-kimi.sh
44
+ start-qwen.sh
43
45
  env.example
44
46
  trajectory-redaction.json
45
47
  capabilities.json
@@ -48,7 +50,7 @@ PROJECT_AI_FILES=(
48
50
  usage() {
49
51
  cat <<'EOF'
50
52
  Usage: uninstall.sh [--dry-run] [--yes] [--purge-memory] [--live-root PATH]
51
- [--pi-live-root PATH] [PROJECT ...]
53
+ [--pi-live-root PATH] [--kimi-live-root PATH] [PROJECT ...]
52
54
 
53
55
  Reverse cairnkeep's install. Everything removed/edited is backed up into
54
56
  $HOME/.cairnkeep-uninstall-<ts>/ with a revert.sh before any change.
@@ -59,6 +61,7 @@ $HOME/.cairnkeep-uninstall-<ts>/ with a revert.sh before any change.
59
61
  trajectories in each PROJECT. Backed up first; off by default.
60
62
  --live-root PATH Claude root to clean (default: $CLAUDE_CONFIG_DIR or ~/.claude).
61
63
  --pi-live-root PATH Pi agent root to clean (default: $PI_CODING_AGENT_DIR or ~/.pi/agent).
64
+ --kimi-live-root PATH Kimi Code root to clean (default: $KIMI_CODE_HOME or ~/.kimi-code).
62
65
  PROJECT ... Also revert `cairn bootstrap` in these project dirs
63
66
  (.ai/, .planning/, and any .git/info/exclude entries).
64
67
  -h, --help Show this help.
@@ -72,6 +75,7 @@ while [[ $# -gt 0 ]]; do
72
75
  --purge-memory) PURGE_MEMORY=1; shift ;;
73
76
  --live-root) LIVE_ROOT="$2"; shift 2 ;;
74
77
  --pi-live-root) PI_LIVE_ROOT="$2"; shift 2 ;;
78
+ --kimi-live-root) KIMI_LIVE_ROOT="$2"; shift 2 ;;
75
79
  -h|--help) usage; exit 0 ;;
76
80
  -*) echo "Unknown option: $1" >&2; usage >&2; exit 2 ;;
77
81
  *) PROJECTS+=("$1"); shift ;;
@@ -136,6 +140,7 @@ echo "cairn uninstall"
136
140
  [[ $DRY_RUN -eq 1 ]] && echo "(dry run — nothing will change)"
137
141
  echo " live root: $LIVE_ROOT"
138
142
  echo " Pi live root: $PI_LIVE_ROOT"
143
+ echo " Kimi root: $KIMI_LIVE_ROOT"
139
144
  echo " memory store: $STORE_DIR ($([[ $PURGE_MEMORY -eq 1 ]] && echo 'WILL be purged' || echo 'kept'))"
140
145
  [[ ${#PROJECTS[@]} -gt 0 ]] && echo " projects: ${PROJECTS[*]}"
141
146
 
@@ -149,10 +154,13 @@ fi
149
154
  echo "Operating layer (assets):"
150
155
  while IFS= read -r dst; do remove_path "$dst"; done < <(asset_dests)
151
156
 
152
- # The Pi adapter is one precisely owned extension; do not touch any other Pi
153
- # configuration or extensions in the same user root.
154
- echo "Pi extension:"
157
+ # These are precisely owned adapter paths; do not touch neighboring harness
158
+ # configuration in either user root.
159
+ echo "Pi adapters:"
155
160
  remove_path "$PI_LIVE_ROOT/extensions/cairnkeep-trajectory.ts"
161
+ remove_path "$PI_LIVE_ROOT/prompts/graphify.md"
162
+ echo "Kimi adapter:"
163
+ remove_path "$KIMI_LIVE_ROOT/skills/graphify/SKILL.md"
156
164
 
157
165
  # 2. settings.json hook registrations (back up whole file, then de-register).
158
166
  SETTINGS="$LIVE_ROOT/settings.json"
@@ -31,7 +31,26 @@ This repository uses `.planning/graphs/` as an optional, local, machine-facing d
31
31
  ## Maintenance
32
32
 
33
33
  - Enable Graphify explicitly in `.planning/config.json`.
34
- - Install it locally with `uv pip install graphifyy && graphify install` before first use.
35
- - Use `/gsd-graphify build` to create or refresh the graph after meaningful topology or architecture-doc changes.
36
- - Use `/gsd-graphify status`, `/gsd-graphify query <term>`, and `/gsd-graphify diff` to inspect freshness and focused subgraphs.
37
- - Planner and query consumers should treat stale graphs as approximate context, not proof.
34
+ - Install only the isolated Graphify CLI with `uv tool install graphifyy` before
35
+ first use (`pipx install graphifyy` is an equivalent fallback). Do not run
36
+ `graphify install`: Cairnkeep owns the installed commands and harness wiring,
37
+ so Graphify-owned skills, instructions, and hooks would duplicate them.
38
+ - Claude Code and OpenCode receive the `/graphify` command with their operating
39
+ layers. Kimi Code receives the equivalent thin Skill after `cairn sync-kimi
40
+ --apply`, and Pi receives the equivalent thin prompt after `cairn sync-pi
41
+ --apply`. Both delegate exclusively to portable forms such as
42
+ `cairn graph build`, `cairn graph explain <symbol>`, and
43
+ `cairn graph path <from> <to>`.
44
+ - Use `/graphify build` to create or refresh the graph after meaningful
45
+ code-topology changes. The managed build is local code-only extraction; it
46
+ does not send documents to a semantic extraction backend.
47
+ - Use `/graphify status`, `/graphify query <term>`, and `/graphify diff` to
48
+ inspect freshness and focused subgraphs.
49
+ - Use `/graphify explain <symbol>` for one exact function, class, or file, and
50
+ `/graphify path <from> <to>` for the shortest structural route between two
51
+ exact symbols.
52
+ - Prefer exact symbol names or narrowly scoped terms when querying. Treat broad
53
+ prose-query results as discovery hints and verify them against canonical
54
+ source files.
55
+ - Planner and query consumers should treat stale graphs as approximate context,
56
+ not proof.
@@ -0,0 +1,32 @@
1
+ #!/usr/bin/env bash
2
+ # Cairnkeep launcher for Qwen Code. Loads this repo's private .ai/.env, runs
3
+ # the optional pre/post seams, and launches Qwen from the project root. Qwen
4
+ # reads user ~/.qwen/settings.json plus project .qwen/settings.json and
5
+ # .mcp.json configuration.
6
+ set -euo pipefail
7
+ ROOT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)
8
+
9
+ if [[ -f "$ROOT_DIR/.ai/.env" ]]; then
10
+ set -a
11
+ # shellcheck disable=SC1091
12
+ . "$ROOT_DIR/.ai/.env"
13
+ set +a
14
+ fi
15
+ if [[ -f "$ROOT_DIR/.ai/pre-launch.sh" ]]; then
16
+ # shellcheck disable=SC1091
17
+ . "$ROOT_DIR/.ai/pre-launch.sh"
18
+ fi
19
+
20
+ cd "$ROOT_DIR"
21
+
22
+ if [[ -f "$ROOT_DIR/.ai/post-exit.sh" ]]; then
23
+ set +e
24
+ qwen "$@"
25
+ CAIRN_EXIT_STATUS=$?
26
+ set -e
27
+ export CAIRN_EXIT_STATUS
28
+ # shellcheck disable=SC1091
29
+ . "$ROOT_DIR/.ai/post-exit.sh" || true
30
+ exit "$CAIRN_EXIT_STATUS"
31
+ fi
32
+ exec qwen "$@"
@@ -1,153 +0,0 @@
1
- # Learning Path Production Plan
2
-
3
- This plan grows the course in small publishable waves. Each wave produces a
4
- useful learner outcome on its own and leaves the public material in a coherent
5
- state.
6
-
7
- ## Guiding principles
8
-
9
- - Demonstrate value before architecture.
10
- - Keep public lessons provider-neutral and free of private configuration.
11
- - Teach local storage first; remote storage must always be an explicit choice.
12
- - Write the canonical lesson before recording the video.
13
- - Use short videos that can be replaced independently after product changes.
14
- - Treat commands, expected output, and recovery instructions as tested product
15
- surfaces rather than informal prose.
16
- - Keep default-off evidence and evaluation features out of the quickstart.
17
- - Never convert framework-fixture results into product-performance claims.
18
-
19
- ## Wave 0 - Course foundation
20
-
21
- **Deliverables**
22
-
23
- - Stable lesson IDs L00-L17.
24
- - Quickstart, practitioner, evidence-and-evaluation, and operator tracks.
25
- - Lesson, video, and instructor templates.
26
- - Complete L00-L03 lesson and recording scripts.
27
- - Briefs and acceptance criteria for L04-L17.
28
- - A release-reviewed feature-to-lesson coverage map.
29
-
30
- **Exit gate**
31
-
32
- - A new learner can follow L00-L03 on a clean machine or stop safely after the
33
- container trial.
34
- - Every command is current and no optional service is presented as mandatory.
35
-
36
- ## Wave 1 - Pilot the quickstart
37
-
38
- 1. Rehearse L00-L03 without recording and log confusing steps.
39
- 2. Run the lessons on one clean Linux environment and one macOS environment.
40
- 3. Record the four short videos from the supplied scripts.
41
- 4. Ask two learners to complete the track without live assistance.
42
- 5. Fix every repeated point of confusion before public promotion.
43
-
44
- **Artifacts:** four videos, four blog-ready lessons, one learner feedback form.
45
-
46
- **Exit gate:** both pilot learners reach a successful `/remember` and `/recall`
47
- round trip and can explain where their memory is stored.
48
-
49
- ## Wave 2 - Daily practitioner value
50
-
51
- Expand L04-L06 and L13 in this order:
52
-
53
- 1. L04 memory keys, scopes, search, history, and review.
54
- 2. L05 wiki, alignment, session hooks, and derived-knowledge boundaries.
55
- 3. L06 `/repo-review` and `/security-audit` against a deliberately vulnerable
56
- toy repository.
57
- 4. L13 structured evidence, redaction, deterministic hindsight, compaction,
58
- artifact inspection, and cleanup against synthetic sessions.
59
-
60
- Use the public `cairnkeep-course-labs` repository created for this wave. Its
61
- synthetic Trail Ledger project, prominent safety boundary, eight tagged
62
- checkpoints, executable verification, offline evaluation route, and
63
- `solutions/review-target` branch are the shared demo source. Expand lesson prose
64
- and presenter scripts against those immutable starts rather than copying the
65
- demo into this repository.
66
-
67
- **Exit gate:** a learner can complete all labs from a fresh clone, and CI resets
68
- and verifies every starter state.
69
-
70
- ## Wave 3 - Safe operation
71
-
72
- Expand L07-L08 and add a backup/restore lab:
73
-
74
- - Draw the local stdio and explicit remote HTTP data flows.
75
- - Demonstrate `cairn memory path`, export, import, and rollback.
76
- - Explain identity, project, and global routing without using real credentials.
77
- - Test the multiple-machine procedure with disposable stores before recording.
78
-
79
- **Exit gate:** the learner can predict the storage destination before starting
80
- a session and can restore a snapshot without losing the pre-existing store.
81
-
82
- ## Wave 4 - Optional accelerators
83
-
84
- Expand L09-L10 as independent modules:
85
-
86
- - Optional document RAG, workspace selection, query, and sync.
87
- - token-miser/FastContext exploration, citations, caching, and failure modes.
88
-
89
- Each lesson begins and ends with the reminder that Cairnkeep works without the
90
- optional component.
91
-
92
- **Exit gate:** disabling either integration returns the learner to a healthy
93
- standalone Cairnkeep workflow.
94
-
95
- ## Wave 5 - Evidence governance and measurement
96
-
97
- Expand L14-L17 in dependency order:
98
-
99
- 1. L14 typed nodes, hard filters, logical note addresses, and import replay.
100
- 2. L15 capability precedence, omission, restart boundaries, and value-free
101
- callbacks.
102
- 3. L16 offline two-pass fixtures, one-capability ablation, report reading,
103
- missingness, uncertainty, retention, and claim boundaries.
104
- 4. L17 current-versus-design-only ownership and approval boundaries.
105
-
106
- The first L16 lab must use only the committed deterministic fixture. A separate
107
- live-evaluation course artifact may be introduced only after its provenance and
108
- claim anchors pass the repository's runtime-evidence verifier.
109
-
110
- **Exit gate:** the learner can inspect effective state and retained evidence,
111
- execute the fixture safely, and state exactly why it does not prove a quality or
112
- efficiency gain.
113
-
114
- ## Wave 6 - Operators and platform teams
115
-
116
- Expand L11-L12:
117
-
118
- - Rootless containers, persistent volumes, authenticated HTTP, and isolation.
119
- - Overlay manifests, private package delivery, bootstrap policy, fleet updates,
120
- rollback, and release gates.
121
-
122
- **Exit gate:** the operator can explain every host mount, network boundary,
123
- credential source, storage destination, and rollback action.
124
-
125
- ## Wave 7 - Publication and maintenance
126
-
127
- 1. Publish a landing article linking to the four tracks.
128
- 2. Publish videos as a playlist with lesson IDs in every title.
129
- 3. Add release compatibility metadata to each completed lesson.
130
- 4. Run a command-verification pass for every Cairnkeep minor release.
131
- 5. Reconcile `cairn help`, the changelog, and the curriculum coverage map for
132
- every minor release.
133
- 6. Review learner feedback monthly during the pilot, then quarterly.
134
-
135
- ## How we will work together
136
-
137
- For each lesson, follow this loop:
138
-
139
- 1. **Select:** choose the next lesson from the current wave.
140
- 2. **Discover:** collect real learner questions and one convincing use case.
141
- 3. **Draft:** complete the lesson using the template.
142
- 4. **Verify:** execute every command from a clean starting state.
143
- 5. **Script:** derive the video script from the verified lesson.
144
- 6. **Rehearse:** read it aloud while performing the demo once without recording.
145
- 7. **Record:** capture the short lesson in sections, not one continuous take.
146
- 8. **Pilot:** give the written lesson to a learner before publishing the video.
147
- 9. **Improve:** incorporate observed failures and publish both formats together.
148
-
149
- The immediate next step is an unrecorded L00-L03 rehearsal using
150
- `course-00-app` and `course-01-bootstrap`. Then expand L04-L06 and L13 against
151
- `course-02-memory`, `course-03-quality`, and `course-05-evidence`. Use the
152
- checklist in the [instructor guide](instructor-guide.md) and record questions
153
- rather than polishing video production prematurely.
@@ -1,66 +0,0 @@
1
- # Instructor Guide
2
-
3
- ## Before each lesson
4
-
5
- - Confirm the lesson is marked **Ready**, not **Brief**.
6
- - Run every command against the current Cairnkeep release.
7
- - Use a disposable repository and synthetic names, URLs, tokens, and data.
8
- - Hide notifications, shell history, credentials, bookmarks, and unrelated
9
- repositories before screen recording.
10
- - Increase terminal font size and keep one command per visible line.
11
- - Prepare a clean start snapshot and a known-good completed snapshot.
12
- - Rehearse the failure-recovery section, not only the happy path.
13
- - For L13-L16, prove every optional flag starts disabled and clean up only the
14
- disposable evidence or experiment root created by the lesson.
15
- - Label deterministic evaluation fixtures as framework evidence, never product
16
- quality or efficiency evidence.
17
-
18
- ## Recommended recording format
19
-
20
- Record each video as independent segments:
21
-
22
- 1. **Hook:** the concrete problem in 20-40 seconds.
23
- 2. **Outcome:** what the learner will be able to verify.
24
- 3. **Concept:** only the mental model required for the exercise.
25
- 4. **Demo:** commands and observable results.
26
- 5. **Boundary:** storage, privacy, or trust implication.
27
- 6. **Recap:** result and next lesson.
28
-
29
- Aim for 8-15 minutes. If a script exceeds 15 minutes, split the lesson rather
30
- than speaking faster.
31
-
32
- ## Recording conventions
33
-
34
- - Say command intent before typing the command.
35
- - Pause after important output so it can be read.
36
- - Never paste a real token, cookie, endpoint, email, or repository name.
37
- - Describe output rather than claiming every learner will see identical text.
38
- - Keep mistakes that teach a recovery step; remove unrelated typing mistakes.
39
- - Refer to lessons by stable ID, for example “L02”, so links survive title edits.
40
-
41
- ## Pilot feedback
42
-
43
- Ask each pilot learner:
44
-
45
- 1. Where did you first become uncertain?
46
- 2. Which command did you run without understanding its effect?
47
- 3. Where do you believe memory is stored?
48
- 4. What would prevent you from using this in a real project tomorrow?
49
- 5. Which result made the value clear?
50
-
51
- Record observations without collecting project content, prompts, credentials,
52
- or memory values.
53
-
54
- ## Definition of done
55
-
56
- A lesson is **Ready** only when:
57
-
58
- - prerequisites and cleanup are explicit;
59
- - all commands were executed from the documented starting state;
60
- - verification distinguishes success from partial installation;
61
- - common failures have actionable recovery steps;
62
- - storage and privacy implications are stated;
63
- - the video script matches the verified lesson;
64
- - a learner other than the author completed it without hidden instructions.
65
- - the command surface and lesson assignment agree with the
66
- [curriculum coverage map](CURRICULUM-MAP.md).
@@ -1,50 +0,0 @@
1
- # LXX Video Script - Title
2
-
3
- **Target duration:** NN minutes
4
- **Companion lesson:** link
5
-
6
- ## Recording setup
7
-
8
- - Screen and terminal state.
9
- - Files or browser tabs prepared in advance.
10
- - Sensitive information that must be hidden.
11
-
12
- ## 00:00 - Hook
13
-
14
- **Say:** Presenter wording.
15
-
16
- **Show:** Exact visual or terminal state.
17
-
18
- ## 00:30 - Outcome
19
-
20
- **Say:** What the learner will prove.
21
-
22
- **Show:** Final result briefly, without teaching it yet.
23
-
24
- ## 01:00 - Mental model
25
-
26
- **Say:** Minimum required explanation.
27
-
28
- **Show:** Diagram, slide, or command help.
29
-
30
- ## 02:00 - Demonstration
31
-
32
- For every step include:
33
-
34
- - **Say:** intent before action;
35
- - **Do:** command or interaction;
36
- - **Point out:** the one important result.
37
-
38
- ## NN:NN - Boundary and recovery
39
-
40
- Explain storage/privacy implications and demonstrate one common recovery.
41
-
42
- ## NN:NN - Recap
43
-
44
- Restate the verified outcome and name the next lesson by ID.
45
-
46
- ## Editing notes
47
-
48
- - Chapters and on-screen captions.
49
- - Sections safe to re-record independently.
50
- - Links for the description.
@@ -1,80 +0,0 @@
1
- # L00 Video Script - Why Cairnkeep?
2
-
3
- **Target duration:** 7 minutes
4
- **Companion lesson:** [L00](../lessons/L00-why-cairnkeep.md)
5
-
6
- ## Recording setup
7
-
8
- - Show only the trust-ladder table from the lesson.
9
- - Prepare one slide containing the question: “What should survive this session?”
10
- - No terminal or private project is required.
11
-
12
- ## 00:00 - Hook
13
-
14
- **Say:** “A coding agent can solve a difficult problem today and make the same
15
- mistake tomorrow. The missing piece is often not more context. It is a small,
16
- reviewed record of what the project already learned.”
17
-
18
- **Show:** The question slide.
19
-
20
- ## 00:35 - Outcome
21
-
22
- **Say:** “In this lesson you will learn where Cairnkeep fits, what it should
23
- remember, and what must remain in the repository or another canonical system.”
24
-
25
- **Show:** The lesson outcome.
26
-
27
- ## 01:00 - Trust ladder
28
-
29
- **Say:** “Follow information through a trust ladder. The current conversation is
30
- working context. Optional captured evidence and hindsight notes preserve bounded
31
- local observations, but they are not automatically trusted memory. Cairnkeep
32
- memory holds concise operational facts. The project wiki is derived, cited
33
- knowledge. Code, tests, specifications, policies, and issue trackers remain
34
- canonical.”
35
-
36
- **Show:** Reveal one table row at a time.
37
-
38
- **Say:** “If these disagree, the canonical source wins. Cairnkeep helps the
39
- agent find and apply knowledge; it does not redefine truth.”
40
-
41
- ## 02:40 - Memory versus RAG
42
-
43
- **Say:** “Document RAG and codebase exploration answer a different question:
44
- which source material is relevant right now? Cairnkeep can integrate with those
45
- retrieval paths, but it does not require them. A decision such as ‘use
46
- transactional migrations’ is a memory. The complete migration policy remains a
47
- document.”
48
-
49
- **Show:** Memory on the left, document retrieval on the right.
50
-
51
- ## 03:40 - Classification exercise
52
-
53
- **Say:** “Consider four statements. A confirmed API behavior can become memory
54
- and should still be traceable to code or a specification. A complete API
55
- specification remains canonical. A debugging hypothesis stays in the session
56
- until confirmed. A verified operational prohibition is a durable constraint.”
57
-
58
- **Show:** The four L00 exercise statements and reveal answers after a pause.
59
-
60
- ## 05:10 - Boundary
61
-
62
- **Say:** “Cairnkeep does not store every sentence from a session. The default
63
- stdio setup stores memory on this computer. Structured capture, notes,
64
- artifacts, evaluation, remote storage, model extraction, embeddings, and
65
- document RAG are separate explicit choices.”
66
-
67
- **Show:** “Local by default. Optional means opt-in.”
68
-
69
- ## 06:10 - Recap
70
-
71
- **Say:** “Remember three things: durable memory is selective, evidence is not
72
- automatically trusted memory, and canonical sources still win. Optional layers
73
- are not prerequisites. In L01 we will inspect the published container without
74
- installing the complete workflow.”
75
-
76
- ## Editing notes
77
-
78
- - Chapters: Problem, Trust ladder, Memory vs retrieval, Exercise, Boundary.
79
- - Link L00 and L01 in the description.
80
- - Re-record the version-independent slide only if the conceptual model changes.
@@ -1,78 +0,0 @@
1
- # L01 Video Script - Try it safely
2
-
3
- **Target duration:** 8 minutes
4
- **Companion lesson:** [L01](../lessons/L01-safe-trial.md)
5
-
6
- ## Recording setup
7
-
8
- - Use a terminal with no registry credentials or unrelated containers visible.
9
- - Remove any prior `cairnkeep-course-data` volume before recording.
10
- - Put the complete Podman command in a prepared text file to avoid typing errors.
11
-
12
- ## 00:00 - Hook
13
-
14
- **Say:** “Before installing commands or changing a coding harness, we can inspect
15
- how the Cairnkeep server is packaged and what it is allowed to persist.”
16
-
17
- **Show:** An empty terminal and `podman --version`.
18
-
19
- ## 00:30 - Outcome
20
-
21
- **Say:** “We will run the server as an unprivileged, read-only container, expose
22
- no network port, and identify the single named volume that would hold memory.”
23
-
24
- ## 01:00 - Pull the image
25
-
26
- **Say:** “I am pinning the course version rather than using `latest`, so this
27
- recording and the written instructions refer to the same artifact.”
28
-
29
- **Do:** Run the L01 `podman pull` command.
30
-
31
- **Point out:** The exact image name and version, without dwelling on layer output.
32
-
33
- ## 02:00 - Explain the isolation flags
34
-
35
- **Say:** “The root filesystem is read-only, Linux capabilities are dropped,
36
- new privileges are disabled, and only a constrained temporary directory plus a
37
- named data volume are writable. No home directory or project is mounted.”
38
-
39
- **Show:** Highlight the command in sections before running it.
40
-
41
- ## 03:15 - Start and stop
42
-
43
- **Do:** Run the direct Podman stdio command.
44
-
45
- **Say:** “The quiet process is expected. It is waiting for MCP messages on
46
- standard input; it is not a web application.”
47
-
48
- **Do:** Pause for two seconds, then press `Ctrl-C`.
49
-
50
- ## 04:30 - Inspect persistence
51
-
52
- **Do:** Run `podman volume inspect cairnkeep-course-data`.
53
-
54
- **Say:** “The container was disposable. The named volume is separate and would
55
- survive replacement of the container. Removing that volume would remove its
56
- stored databases.”
57
-
58
- ## 05:40 - Boundary and recovery
59
-
60
- **Say:** “This test exposed no port and contacted no remote Cairnkeep server.
61
- If your environment blocks GHCR or Podman, skip this optional trial and use the
62
- npm installation in L02.”
63
-
64
- **Do:** Run `podman volume exists cairnkeep-course-data` and show status `0`.
65
-
66
- ## 06:50 - Cleanup and recap
67
-
68
- **Do:** Run `podman volume rm cairnkeep-course-data`.
69
-
70
- **Say:** “Never run that cleanup against a real memory volume. We proved three
71
- things: the server runs unprivileged, stdio exposes no listener, and persistence
72
- is explicit. In L02 we install the complete local workflow.”
73
-
74
- ## Editing notes
75
-
76
- - Blur unrelated image and volume names if they appear.
77
- - Add a warning caption before volume removal.
78
- - Link the Containers documentation and L02.