@pleri/olam-cli 0.1.186 → 0.1.195

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 (189) hide show
  1. package/README.md +1 -1
  2. package/dist/ask/knowledge-pack-builder.d.ts.map +1 -1
  3. package/dist/ask/knowledge-pack-builder.js +5 -0
  4. package/dist/ask/knowledge-pack-builder.js.map +1 -1
  5. package/dist/ask/knowledge-pack.generated.d.ts.map +1 -1
  6. package/dist/ask/knowledge-pack.generated.js +442 -33
  7. package/dist/ask/knowledge-pack.generated.js.map +1 -1
  8. package/dist/commands/auth-status.js +2 -2
  9. package/dist/commands/auth-status.js.map +1 -1
  10. package/dist/commands/auth.js +1 -1
  11. package/dist/commands/auth.js.map +1 -1
  12. package/dist/commands/bootstrap.d.ts +4 -0
  13. package/dist/commands/bootstrap.d.ts.map +1 -1
  14. package/dist/commands/bootstrap.js +6 -9
  15. package/dist/commands/bootstrap.js.map +1 -1
  16. package/dist/commands/clean.js +1 -1
  17. package/dist/commands/clean.js.map +1 -1
  18. package/dist/commands/completion.d.ts.map +1 -1
  19. package/dist/commands/completion.js +1 -4
  20. package/dist/commands/completion.js.map +1 -1
  21. package/dist/commands/create.d.ts.map +1 -1
  22. package/dist/commands/create.js +10 -0
  23. package/dist/commands/create.js.map +1 -1
  24. package/dist/commands/crystallize.js +12 -14
  25. package/dist/commands/crystallize.js.map +1 -1
  26. package/dist/commands/destroy.d.ts +13 -1
  27. package/dist/commands/destroy.d.ts.map +1 -1
  28. package/dist/commands/destroy.js +52 -6
  29. package/dist/commands/destroy.js.map +1 -1
  30. package/dist/commands/dispatch.d.ts +9 -0
  31. package/dist/commands/dispatch.d.ts.map +1 -1
  32. package/dist/commands/dispatch.js +21 -2
  33. package/dist/commands/dispatch.js.map +1 -1
  34. package/dist/commands/doctor.d.ts +1 -1
  35. package/dist/commands/doctor.d.ts.map +1 -1
  36. package/dist/commands/doctor.js +29 -22
  37. package/dist/commands/doctor.js.map +1 -1
  38. package/dist/commands/enter.d.ts +3 -3
  39. package/dist/commands/enter.d.ts.map +1 -1
  40. package/dist/commands/enter.js +57 -44
  41. package/dist/commands/enter.js.map +1 -1
  42. package/dist/commands/flywheel/index.d.ts.map +1 -1
  43. package/dist/commands/flywheel/index.js +1 -1
  44. package/dist/commands/flywheel/index.js.map +1 -1
  45. package/dist/commands/host-cp.d.ts.map +1 -1
  46. package/dist/commands/host-cp.js +2 -1
  47. package/dist/commands/host-cp.js.map +1 -1
  48. package/dist/commands/implode.d.ts.map +1 -1
  49. package/dist/commands/implode.js +1 -1
  50. package/dist/commands/implode.js.map +1 -1
  51. package/dist/commands/init.d.ts +20 -0
  52. package/dist/commands/init.d.ts.map +1 -1
  53. package/dist/commands/init.js +102 -9
  54. package/dist/commands/init.js.map +1 -1
  55. package/dist/commands/install.js +2 -2
  56. package/dist/commands/install.js.map +1 -1
  57. package/dist/commands/kg-build.d.ts.map +1 -1
  58. package/dist/commands/kg-build.js +3 -0
  59. package/dist/commands/kg-build.js.map +1 -1
  60. package/dist/commands/kg-classify.d.ts +20 -0
  61. package/dist/commands/kg-classify.d.ts.map +1 -1
  62. package/dist/commands/kg-classify.js +59 -42
  63. package/dist/commands/kg-classify.js.map +1 -1
  64. package/dist/commands/kg-mirror.d.ts +40 -0
  65. package/dist/commands/kg-mirror.d.ts.map +1 -0
  66. package/dist/commands/kg-mirror.js +228 -0
  67. package/dist/commands/kg-mirror.js.map +1 -0
  68. package/dist/commands/mcp/index.js +1 -1
  69. package/dist/commands/mcp/index.js.map +1 -1
  70. package/dist/commands/memory/index.d.ts.map +1 -1
  71. package/dist/commands/memory/index.js +1 -1
  72. package/dist/commands/memory/index.js.map +1 -1
  73. package/dist/commands/resume.d.ts.map +1 -1
  74. package/dist/commands/resume.js +1 -1
  75. package/dist/commands/resume.js.map +1 -1
  76. package/dist/commands/services-tls.d.ts +120 -0
  77. package/dist/commands/services-tls.d.ts.map +1 -0
  78. package/dist/commands/services-tls.js +434 -0
  79. package/dist/commands/services-tls.js.map +1 -0
  80. package/dist/commands/services.d.ts.map +1 -1
  81. package/dist/commands/services.js +40 -1
  82. package/dist/commands/services.js.map +1 -1
  83. package/dist/commands/setup-linux-gate.d.ts.map +1 -1
  84. package/dist/commands/setup-linux-gate.js +1 -3
  85. package/dist/commands/setup-linux-gate.js.map +1 -1
  86. package/dist/commands/setup-metrics.d.ts.map +1 -1
  87. package/dist/commands/setup-metrics.js +1 -2
  88. package/dist/commands/setup-metrics.js.map +1 -1
  89. package/dist/commands/setup-phase-5a-skill-source.d.ts +17 -1
  90. package/dist/commands/setup-phase-5a-skill-source.d.ts.map +1 -1
  91. package/dist/commands/setup-phase-5a-skill-source.js +69 -6
  92. package/dist/commands/setup-phase-5a-skill-source.js.map +1 -1
  93. package/dist/commands/setup.d.ts +26 -1
  94. package/dist/commands/setup.d.ts.map +1 -1
  95. package/dist/commands/setup.js +189 -47
  96. package/dist/commands/setup.js.map +1 -1
  97. package/dist/commands/skills-onboard.d.ts.map +1 -1
  98. package/dist/commands/skills-onboard.js +4 -1
  99. package/dist/commands/skills-onboard.js.map +1 -1
  100. package/dist/commands/skills-source.d.ts.map +1 -1
  101. package/dist/commands/skills-source.js +20 -4
  102. package/dist/commands/skills-source.js.map +1 -1
  103. package/dist/commands/status.d.ts.map +1 -1
  104. package/dist/commands/status.js +5 -1
  105. package/dist/commands/status.js.map +1 -1
  106. package/dist/commands/upgrade.d.ts.map +1 -1
  107. package/dist/commands/upgrade.js +1 -3
  108. package/dist/commands/upgrade.js.map +1 -1
  109. package/dist/commands/yolo.d.ts.map +1 -1
  110. package/dist/commands/yolo.js +1 -1
  111. package/dist/commands/yolo.js.map +1 -1
  112. package/dist/context.d.ts +4 -0
  113. package/dist/context.d.ts.map +1 -1
  114. package/dist/context.js +3 -2
  115. package/dist/context.js.map +1 -1
  116. package/dist/image-digests.json +8 -8
  117. package/dist/index.js +4409 -2375
  118. package/dist/index.js.map +1 -1
  119. package/dist/lib/auth-refresh-kubernetes.d.ts.map +1 -1
  120. package/dist/lib/auth-refresh-kubernetes.js +14 -5
  121. package/dist/lib/auth-refresh-kubernetes.js.map +1 -1
  122. package/dist/lib/bootstrap-kubernetes.d.ts +41 -0
  123. package/dist/lib/bootstrap-kubernetes.d.ts.map +1 -1
  124. package/dist/lib/bootstrap-kubernetes.js +289 -36
  125. package/dist/lib/bootstrap-kubernetes.js.map +1 -1
  126. package/dist/lib/cf-access-token.d.ts.map +1 -1
  127. package/dist/lib/cf-access-token.js +2 -3
  128. package/dist/lib/cf-access-token.js.map +1 -1
  129. package/dist/lib/health-probes.d.ts +14 -0
  130. package/dist/lib/health-probes.d.ts.map +1 -1
  131. package/dist/lib/health-probes.js +41 -3
  132. package/dist/lib/health-probes.js.map +1 -1
  133. package/dist/lib/help-groups.d.ts +36 -0
  134. package/dist/lib/help-groups.d.ts.map +1 -0
  135. package/dist/lib/help-groups.js +124 -0
  136. package/dist/lib/help-groups.js.map +1 -0
  137. package/dist/lib/k8s-bootstrap.d.ts +6 -0
  138. package/dist/lib/k8s-bootstrap.d.ts.map +1 -1
  139. package/dist/lib/k8s-bootstrap.js +15 -2
  140. package/dist/lib/k8s-bootstrap.js.map +1 -1
  141. package/dist/lib/k8s-secret-render.d.ts.map +1 -1
  142. package/dist/lib/k8s-secret-render.js +17 -10
  143. package/dist/lib/k8s-secret-render.js.map +1 -1
  144. package/dist/lib/memory-secret.d.ts +15 -2
  145. package/dist/lib/memory-secret.d.ts.map +1 -1
  146. package/dist/lib/memory-secret.js +25 -8
  147. package/dist/lib/memory-secret.js.map +1 -1
  148. package/dist/lib/upgrade-check.d.ts +60 -0
  149. package/dist/lib/upgrade-check.d.ts.map +1 -0
  150. package/dist/lib/upgrade-check.js +169 -0
  151. package/dist/lib/upgrade-check.js.map +1 -0
  152. package/dist/lib/upgrade-kubernetes.d.ts +17 -0
  153. package/dist/lib/upgrade-kubernetes.d.ts.map +1 -1
  154. package/dist/lib/upgrade-kubernetes.js +125 -1
  155. package/dist/lib/upgrade-kubernetes.js.map +1 -1
  156. package/dist/mcp-server.js +2687 -2818
  157. package/hermes-bundle/version.json +1 -1
  158. package/host-cp/k8s/manifests/30-configmap.yaml +8 -1
  159. package/host-cp/k8s/manifests/50-deployment.yaml +1 -1
  160. package/host-cp/k8s/manifests/60-service.yaml +12 -4
  161. package/host-cp/k8s/manifests/70-ingressroute.yaml +58 -0
  162. package/host-cp/k8s/manifests/auth-service/50-deployment.yaml +1 -1
  163. package/host-cp/k8s/manifests/chunks-electric/10-serviceaccount.yaml +8 -0
  164. package/host-cp/k8s/manifests/chunks-electric/20-rbac.yaml +27 -0
  165. package/host-cp/k8s/manifests/chunks-electric/30-configmap.yaml +23 -0
  166. package/host-cp/k8s/manifests/chunks-electric/45-pvc.yaml +19 -0
  167. package/host-cp/k8s/manifests/chunks-electric/50-deployment.yaml +84 -0
  168. package/host-cp/k8s/manifests/chunks-electric/60-service.yaml +17 -0
  169. package/host-cp/k8s/manifests/chunks-postgres/10-serviceaccount.yaml +8 -0
  170. package/host-cp/k8s/manifests/chunks-postgres/20-rbac.yaml +29 -0
  171. package/host-cp/k8s/manifests/chunks-postgres/30-configmap.yaml +185 -0
  172. package/host-cp/k8s/manifests/chunks-postgres/45-pvc.yaml +24 -0
  173. package/host-cp/k8s/manifests/chunks-postgres/50-deployment.yaml +101 -0
  174. package/host-cp/k8s/manifests/chunks-postgres/60-service.yaml +24 -0
  175. package/host-cp/k8s/manifests/kg-service/50-deployment.yaml +1 -1
  176. package/host-cp/k8s/manifests/mcp-auth-service/50-deployment.yaml +1 -1
  177. package/host-cp/k8s/manifests/memory-service/50-deployment.yaml +1 -1
  178. package/host-cp/k8s/manifests/plan-chat-service/10-serviceaccount.yaml +8 -0
  179. package/host-cp/k8s/manifests/plan-chat-service/20-rbac.yaml +29 -0
  180. package/host-cp/k8s/manifests/plan-chat-service/30-configmap.yaml +36 -0
  181. package/host-cp/k8s/manifests/plan-chat-service/45-pvc.yaml +24 -0
  182. package/host-cp/k8s/manifests/plan-chat-service/50-deployment.yaml +135 -0
  183. package/host-cp/k8s/manifests/plan-chat-service/60-service.yaml +17 -0
  184. package/host-cp/src/plan-chat-secret.mjs +16 -1
  185. package/host-cp/src/plan-chat-service.mjs +709 -11
  186. package/host-cp/src/planning-sessions.mjs +252 -0
  187. package/host-cp/src/pr-cache.mjs +11 -2
  188. package/host-cp/src/server.mjs +128 -22
  189. package/package.json +2 -1
@@ -173,20 +173,16 @@ codes are explicit: \`3\` = pull failed, \`4\` = protocol mismatch.
173
173
 
174
174
  ## Quick start
175
175
 
176
+ **Two paths: Kubernetes (default, full-featured) or Docker Compose (lighter, for CI).**
177
+
178
+ ### Kubernetes (recommended)
179
+
176
180
  \`\`\`bash
177
181
  curl -fsSL https://olam.bar.dev/install | sh
178
182
  olam setup
179
183
  \`\`\`
180
184
 
181
- That's it. The installer puts \`@pleri/olam-cli\` on your PATH (requires Node.js ≥ 20 and npm). \`olam setup\` installs k3d (if absent), creates a local Kubernetes cluster named \`olam-dev\`, and brings up the full peripheral stack (host-cp, auth-service, mcp-auth-service, kg-service, memory-service). Works on macOS and Linux. No source checkout required.
182
-
183
- The setup wizard is **idempotent** — re-running skips steps that are already complete.
184
-
185
- After setup, every world is one call:
186
-
187
- \`\`\`bash
188
- olam create --name my-world --task "audit the auth module for SSRF"
189
- \`\`\`
185
+ The installer puts \`@pleri/olam-cli\` on your PATH (requires Node.js ≥ 20 and npm). \`olam setup\` installs k3d (if absent), creates a local Kubernetes cluster named \`olam-dev\`, and brings up the full peripheral stack (host-cp, auth-service, mcp-auth-service, kg-service, memory-service). Works on macOS and Linux. No source checkout required. The setup wizard is **idempotent** — re-running skips steps that are already complete.
190
186
 
191
187
  Full setup guide (prereqs, observability, troubleshooting):
192
188
  [\`docs/onboarding/k3s-mode-setup.md\`](./docs/onboarding/k3s-mode-setup.md).
@@ -204,6 +200,16 @@ This runs three host containers (auth, mcp-auth, kg-service) via docker compose
204
200
 
205
201
  Full setup guide for compose mode: [\`docs/onboarding/fresh-machine-setup.md\`](./docs/onboarding/fresh-machine-setup.md).
206
202
 
203
+ ### Create your first world
204
+
205
+ After setup completes, every world is one call:
206
+
207
+ \`\`\`bash
208
+ olam create --name my-world --task "audit the auth module for SSRF"
209
+ \`\`\`
210
+
211
+ Open the dashboard URL in your browser — you'll see the world provisioning, credentials flowing in from the vault, and your task dispatching to an in-world Claude session.
212
+
207
213
  ---
208
214
 
209
215
  ## Setup
@@ -783,6 +789,7 @@ Source: \`docs/ONBOARDING.md\`
783
789
 
784
790
  - **Docker daemon** running (Docker Desktop, or colima on macOS)
785
791
  - **Node.js ≥ 20** (\`node --version\`)
792
+ - **GitHub CLI authenticated** (\`gh auth login\`) — \`olam setup\` uses \`gh auth token\` to create a GHCR pull secret; skipping this fails on first image pull
786
793
  - **Claude Code** (\`claude --version\`) — authenticated via \`claude auth login\`
787
794
  - **Git** with SSH key configured for your repos
788
795
 
@@ -793,7 +800,7 @@ Source: \`docs/ONBOARDING.md\`
793
800
  No source checkout required — the CLI publishes to npm:
794
801
 
795
802
  \`\`\`bash
796
- curl -fsSL https://olam.bar.dev/install | sh # installs @pleri/olam-cli on PATH
803
+ curl -fsSL https://olam.bar.dev/install | sh # installs @pleri/olam-cli on PATH (PLERI is the GitHub org & npm scope)
797
804
  olam setup # k3d cluster + full peripheral stack
798
805
  \`\`\`
799
806
 
@@ -804,7 +811,15 @@ mcp-auth-service, kg-service, and memory-service. Pass
804
811
  no cluster). Full guide:
805
812
  [\`docs/onboarding/k3s-mode-setup.md\`](onboarding/k3s-mode-setup.md).
806
813
 
807
- ## 2. Register the MCP server (1 minute)
814
+ ## 2. Verify your setup (1 minute)
815
+
816
+ \`\`\`bash
817
+ olam doctor # runs 8–23 checks: auth, services, vault, network
818
+ \`\`\`
819
+
820
+ This diagnoses common issues (Docker daemon, images, credentials, etc.). Any FAIL row shows an actionable remedy — fix and re-run until all rows PASS.
821
+
822
+ ## 3. Register the MCP server (1 minute)
808
823
 
809
824
  \`\`\`bash
810
825
  olam mcp install # default --scope=user
@@ -817,7 +832,7 @@ worlds directly. Core tools: \`olam_create\`, \`olam_dispatch\`,
817
832
  \`olam_enter\`, \`olam_crystallize\`, \`olam_pr_*\`. Restart Claude Code and
818
833
  verify with \`claude mcp list\` (look for \`olam\`).
819
834
 
820
- ## 3. Configure your repos (2 minutes)
835
+ ## 4. Configure your repos (2 minutes)
821
836
 
822
837
  Point Olam at the repos a world should clone. Use the interactive
823
838
  wizard:
@@ -832,7 +847,29 @@ world-runner tier (\`docker\` | \`cloudflare\` | \`cloudflare-isolate\`). See
832
847
  [\`docs/architecture/config-spec.md\`](architecture/config-spec.md) for
833
848
  the full schema.
834
849
 
835
- ## 4. Create your first world (2 minutes)
850
+ ## 4b. Multi-project workspaces (optional)
851
+
852
+ Olam supports managing multiple repos across different projects. Each
853
+ workspace is a named bundle of repos that can be reused across worlds.
854
+
855
+ \`\`\`bash
856
+ olam workspace list # see configured workspaces
857
+ olam workspace add my-workspace --repo <url>#<branch> # create from repos
858
+ olam workspace add my-workspace --from-config # seed from current .olam/config.yaml
859
+ olam workspace show my-workspace # pretty-print workspace YAML
860
+ olam workspace remove my-workspace # delete a workspace
861
+ \`\`\`
862
+
863
+ When creating a world, specify the workspace:
864
+
865
+ \`\`\`bash
866
+ olam create --name <world> --workspace my-workspace --task "..."
867
+ \`\`\`
868
+
869
+ See [\`docs/architecture/config-spec.md\`](architecture/config-spec.md) for
870
+ the full workspace schema.
871
+
872
+ ## 5. Create your first world (2 minutes)
836
873
 
837
874
  In Claude Code, say:
838
875
 
@@ -844,9 +881,9 @@ Claude will:
844
881
  1. Create a Docker container (or CF Sandbox) with your repo cloned
845
882
  2. Set up git worktrees for isolation
846
883
  3. Boot the in-world Claude session and auto-dispatch the task
847
- 4. Return the Host CP dashboard URL (\`http://127.0.0.1:19000\`)
884
+ 4. Return the Host CP dashboard URL (\`http://127.0.0.1:19001\`)
848
885
 
849
- ## 5. Dispatch a task (1 minute)
886
+ ## 6. Dispatch a task (1 minute)
850
887
 
851
888
  \`\`\`
852
889
  Dispatch to the world: investigate and fix the session timeout issue
@@ -854,7 +891,7 @@ Dispatch to the world: investigate and fix the session timeout issue
854
891
 
855
892
  Claude Code runs autonomously inside the world. Every tool call, every decision, every exploration is captured as a thought node.
856
893
 
857
- ## 6. Watch it work (ongoing)
894
+ ## 7. Watch it work (ongoing)
858
895
 
859
896
  **Dashboard:** Open the Host CP URL from step 4. You'll see:
860
897
  - the **seed of thought** pinned at the top (the immutable task)
@@ -869,7 +906,7 @@ Claude Code runs autonomously inside the world. Every tool call, every decision,
869
906
  What is the world thinking right now?
870
907
  \`\`\`
871
908
 
872
- ## 7. Clean up
909
+ ## 8. Clean up
873
910
 
874
911
  \`\`\`
875
912
  Crystallize and destroy the world
@@ -891,7 +928,7 @@ after \`olam setup\`):
891
928
  \`\`\`bash
892
929
  olam create --name login-fix --repos my-project --task "Fix session timeout"
893
930
  olam dispatch login-fix "investigate and fix the session timeout"
894
- olam observe login-fix # placeholder; for now attach via the world terminal
931
+ olam observe login-fix # Alternative: \`olam enter login-fix\` for a shell inside the world (until \`olam observe\` ships)
895
932
  olam status login-fix
896
933
  olam crystallize login-fix # requires PLERI; otherwise no-op (exit 2)
897
934
  olam destroy login-fix # accepts the world ID or name
@@ -929,11 +966,39 @@ refresh token never leaves the service.
929
966
 
930
967
  | Problem | Fix |
931
968
  |---------|-----|
969
+ | Something not working | Run \`olam doctor\` — it diagnoses the setup and shows remedies for each issue |
932
970
  | "Docker not running" | Start Docker Desktop |
933
971
  | "No Claude credentials" | Run \`claude auth login\` on the host |
972
+ | "GHCR pull secret failed" or "401 unauthorized" on first \`olam setup\` | Run \`gh auth login\` and verify with \`gh auth status\` |
934
973
  | Dashboard shows empty | Wait for the first dispatch to generate thoughts |
935
974
  | "Port already in use" | Another world is running. Use \`olam list\` to check |
936
975
  | Session seems stuck | Use \`olam enter <world>\` to open the terminal and check |
976
+ | Blank page at localhost:19001 (npm install) | Run \`olam services up\` to restart host-cp; check \`olam doctor\` for SPA dist staging. |
977
+ | Blank page at localhost:19001 (source checkout) | Run \`cd packages/host-cp && npm run build:spa\` to rebuild the SPA dist locally. |
978
+ | Cloud toggle missing in SPA | Both \`OLAM_CLOUD_URL\` and \`OLAM_SHOWCASE_PASSWORD\` must be set. If only one is set the server logs a \`[cloud]\` warning at startup. |
979
+
980
+ ## Bare-node / source-checkout mode
981
+
982
+ If you are running host-cp directly from source (not via \`olam setup\`
983
+ or a pulled Docker image), you need to build the SPA before first boot:
984
+
985
+ \`\`\`bash
986
+ # From the repo root:
987
+ cd packages/host-cp
988
+ npm run build:spa # builds plan-chat-spa and stages it into packages/host-cp/dist/
989
+ npm start # prestart hook runs check:spa first; rebuilds if dist is stale
990
+ \`\`\`
991
+
992
+ \`npm start\` runs \`check:spa\` first. If \`dist/\` is already populated and
993
+ self-consistent (every asset in \`index.html\` is present on disk) it skips
994
+ the build and starts immediately. If not, it calls \`build:spa\` to rebuild.
995
+
996
+ The \`build:spa\` script triggers a full \`npm run build:ci\` + \`vite build\`
997
+ chain on a cold checkout (takes ~60s the first time; subsequent runs skip
998
+ the vite build if \`packages/plan-chat-spa/dist/client/\` is already populated).
999
+
1000
+ **This is not required when using \`olam setup\`** — the Docker image has the
1001
+ SPA baked in and host-cp never touches the local \`dist/\` directory.
937
1002
 
938
1003
  ## Architecture
939
1004
 
@@ -1088,16 +1153,18 @@ olam skills source list
1088
1153
 
1089
1154
  ---
1090
1155
 
1091
- ## 5. Start the memory-bridge
1156
+ ## 5. Start the memory service (Docker container)
1092
1157
 
1093
- The memory-bridge is a host process that serves \`127.0.0.1:3111/agentmemory/livez\`. When it's running, \`olam skills sync\` will inject the olam-meta-memory-recall + olam-meta-memory-classify hook blocks into \`~/.claude/settings.json\`. When it's NOT running, the strip half of the auto-migration still fires but no olam-meta blocks land — meaning operator gets no recall/classify behavior.
1158
+ The memory-service is a Docker container (managed by \`olam services\`) that serves \`127.0.0.1:3111/agentmemory/livez\`. When it's running, \`olam skills sync\` will inject the olam-meta-memory-recall + olam-meta-memory-classify hook blocks into \`~/.claude/settings.json\`. When it's NOT running, the strip half of the auto-migration still fires but no olam-meta blocks land — meaning operator gets no recall/classify behavior.
1094
1159
 
1095
1160
  \`\`\`bash
1096
1161
  olam memory secret # → shows the bearer at ~/.olam/memory-secret (auto-generated on first run)
1097
- olam memory start # → starts the host process; polls livez until ready
1098
- olam memory status # → pid + livez + secret-set check
1162
+ olam memory start # → starts the olam-memory-service container; polls livez until ready
1163
+ olam memory status # → container state + livez + secret-set check
1099
1164
  \`\`\`
1100
1165
 
1166
+ **Note:** \`~/.olam/memory-secret\` is used with the Docker Compose substrate (this guide). For Kubernetes, the file is \`~/.olam/memory-bearer-secret\`. They are the same logical service in different deployment substrates.
1167
+
1101
1168
  Sanity check the live probe:
1102
1169
 
1103
1170
  \`\`\`bash
@@ -1225,6 +1292,7 @@ If the recall hook doesn't fire, run \`olam memory status\` to confirm the bridg
1225
1292
  ## What's NOT in this doc
1226
1293
 
1227
1294
  - Setting up Cloudflare-substrate worlds (separate doc: \`docs/architecture/cf-worlds-spec.md\`).
1295
+ - **Cloud-mode (optional)**: if you want dispatches to run on Cloudflare Sandboxes instead of local Docker, follow [plan-cloud-mode-setup.md](../runbooks/plan-cloud-mode-setup.md) to set \`OLAM_CLOUD_URL\` + \`OLAM_SHOWCASE_PASSWORD\` on host-cp.
1228
1296
  - PLERI thought-graph integration (separate setup; skip-pleri is fine for most operators).
1229
1297
  - Per-project skill overrides (advanced; see Phase B B2 + \`docs/architecture/skill-source-contract.md\`).
1230
1298
  - Cutting an olam release (developer flow, not operator flow; see \`~/.claude/skills/olam-cut-release/SKILL.md\`).
@@ -1251,6 +1319,345 @@ npm uninstall -g @pleri/olam-cli
1251
1319
 
1252
1320
  ---
1253
1321
 
1322
+ ## Setup — k3d/k3s mode (default substrate, port 19001)
1323
+
1324
+ Source: \`docs/onboarding/k3s-mode-setup.md\`
1325
+
1326
+ # Olam in k3d mode — definitive setup guide
1327
+
1328
+ > **Audience**: an operator setting up olam on their workstation. k3d mode runs olam's full peripheral stack (host-cp, auth-service, mcp-auth-service, kg-service, memory-service) as a real Kubernetes deployment on a local k3d cluster, with Prometheus + Grafana + Loki + Kyverno for observability.
1329
+ >
1330
+ > **End state**: a local k3d cluster \`olam-dev\`, five peripheral pods at \`1/1 Running\` in the \`olam\` namespace, a \`monitoring\` namespace with kube-prometheus-stack + Grafana, the \`olam\` CLI talking to host-cp inside the cluster.
1331
+ >
1332
+ > **Time**: ~5 minutes warm, ~10 minutes cold (image pulls).
1333
+ >
1334
+ > **k3d on all platforms**: olam uses k3d (k3s wrapped in Docker) on both macOS and Linux. No sudo needed — k3d only requires a Docker daemon. Same substrate, same mental model, same teardown on every machine.
1335
+
1336
+ k3d is the **default mode** for olam. For the lighter docker-compose mode (3 containers, no cluster), see [fresh-machine-setup.md](fresh-machine-setup.md).
1337
+
1338
+ ---
1339
+
1340
+ ## 0. Prerequisites
1341
+
1342
+ You need these tools installed. \`olam setup\` will prompt to install missing brew-formulae for you on macOS (answer y); on Linux it uses the upstream k3d install script (no sudo needed). Pass \`-y\` to skip all prompts.
1343
+
1344
+ | Tool | Why | Install |
1345
+ |---|---|---|
1346
+ | **Node.js ≥ 20** | The olam CLI runs on Node | \`nvm install 20\` |
1347
+ | **Docker daemon** | k3d runs k3s nodes as Docker containers (required on all platforms) | Docker Desktop (macOS/Windows) or \`sudo apt install docker.io\` (Linux); colima works too |
1348
+ | **colima** (macOS, optional) | Lightweight Docker runtime for macOS | \`brew install colima && colima start --cpu 4 --memory 8 --vm-type=vz --mount-type=virtiofs\` |
1349
+ | **k3d** | Wraps k3s in Docker for local clusters — works on macOS and Linux, no sudo | \`brew install k3d\` (macOS/Linux with brew) or \`curl -s https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh \\| bash\` |
1350
+ | **kubectl** | Cluster operations | \`brew install kubectl\` |
1351
+ | **helm** | Installs Loki + Promtail + Grafana + Prometheus + Kyverno | \`brew install helm\` |
1352
+ | **gh** | ghcr-pull secret + \`gh auth token\` | \`brew install gh && gh auth login\` |
1353
+ | **docker** + \`docker compose\` plugin | Hosts the docker-socket-proxy sibling container | Docker Desktop, or colima ships it |
1354
+ | **jq, curl, openssl** | Shell helpers | macOS defaults |
1355
+ | **Claude Code subscription** | The \`claude\` CLI inside each world consumes your local subscription | \`npm install -g @anthropic-ai/claude-code\` |
1356
+
1357
+ ---
1358
+
1359
+ ## 1. Install the olam CLI
1360
+
1361
+ \`\`\`bash
1362
+ # One-line installer (recommended)
1363
+ curl -fsSL https://olam.bar.dev/install | sh
1364
+
1365
+ # Or via npm directly
1366
+ npm install -g @pleri/olam-cli
1367
+ \`\`\`
1368
+
1369
+ Verify:
1370
+
1371
+ \`\`\`bash
1372
+ olam --version
1373
+ \`\`\`
1374
+
1375
+ The CLI ships every manifest, secret template, and observability install script it needs inside the npm tarball — no \`git clone\` required.
1376
+
1377
+ ---
1378
+
1379
+ ## 2. Authenticate \`gh\`
1380
+
1381
+ \`\`\`bash
1382
+ gh auth login
1383
+ \`\`\`
1384
+
1385
+ The bootstrap creates a \`ghcr-pull\` Kubernetes Secret from \`gh auth token\` so pulls of \`ghcr.io/pleri/olam-*\` images don't hit anonymous rate limits.
1386
+
1387
+ ---
1388
+
1389
+ ## 3. Bootstrap
1390
+
1391
+ Single command, end-to-end:
1392
+
1393
+ \`\`\`bash
1394
+ olam setup
1395
+ \`\`\`
1396
+
1397
+ Pass \`-y\` to skip all prompts (non-interactive, auto-affirm every step):
1398
+
1399
+ \`\`\`bash
1400
+ olam setup -y
1401
+ \`\`\`
1402
+
1403
+ The command is **idempotent** — re-running against an existing cluster only does work for incomplete steps. It runs five ordered phases:
1404
+
1405
+ | # | Phase | What it does |
1406
+ |---|---|---|
1407
+ | 0 | **Preflight** | Detects missing tools and prints actionable install commands. Verifies \`gh\` is authenticated and the docker daemon is reachable. |
1408
+ | 1 | **Secrets** | Generates \`~/.olam/{auth-secret,kg-bearer-token,auth-db-secret,mcp-auth-jwt-secret,memory-bearer-secret}\` if absent (32-byte hex, mode 0600). |
1409
+ | 2 | **Colima** (macOS only) | Ensures colima is running; if not, starts it with sensible defaults. Applies \`chmod 666 /var/run/docker.sock\` inside the colima VM (virtiofs mitigation). |
1410
+ | 3 | **Cluster** | \`k3d cluster create olam-dev\` with the gh-config bind. Skipped if cluster exists. (Override the name with \`--cluster-name\`.) |
1411
+ | 4 | **Observability** | Chains the bundled install scripts: Loki + Promtail, Grafana with port-forward + admin secret, kube-prometheus-stack with recording rules, Kyverno admission policy. |
1412
+ | 5 | **Apply manifests + rollout** | Delegates to the existing \`olam upgrade\` flow: namespace, RBAC, secrets, ghcr-pull, host-side docker-socket-proxy, manifest apply, rollout status (per-deployment, 90s timeout), port-forward, \`/health\` verify, audit log. |
1413
+
1414
+ Flag reference:
1415
+
1416
+ \`\`\`bash
1417
+ olam setup --help
1418
+ \`\`\`
1419
+
1420
+ Common overrides:
1421
+
1422
+ - \`-y, --yes\` — auto-affirm every prompt (non-interactive).
1423
+ - \`--substrate <docker|kubernetes>\` — force a substrate instead of auto-detecting.
1424
+ - \`--cluster-name <name>\` — k3d cluster name to create/use (default: \`olam-dev\`).
1425
+ - \`--reuse-cluster <name>\` — reuse an existing reachable kube context instead of provisioning.
1426
+ - \`--skip-cluster-create\` — cluster already exists; skip cluster provisioning.
1427
+ - \`--skip-doctor\` — skip final health check (useful in CI).
1428
+
1429
+ ---
1430
+
1431
+ ## 4. Verify the cluster is healthy
1432
+
1433
+ \`\`\`bash
1434
+ kubectl get pods -n olam
1435
+ \`\`\`
1436
+
1437
+ Expected — all five \`1/1 Running\`:
1438
+
1439
+ \`\`\`
1440
+ NAME READY STATUS RESTARTS AGE
1441
+ olam-auth-service-... 1/1 Running 0 ~5m
1442
+ olam-host-cp-... 1/1 Running 0 ~5m
1443
+ olam-kg-service-... 1/1 Running 0 ~5m
1444
+ olam-mcp-auth-service-... 1/1 Running 0 ~5m
1445
+ olam-memory-service-... 1/1 Running 0 ~5m
1446
+ \`\`\`
1447
+
1448
+ If something's off:
1449
+
1450
+ \`\`\`bash
1451
+ olam doctor # checks substrate, cluster, pods, secrets
1452
+ olam services status # k8s-aware status table
1453
+ \`\`\`
1454
+
1455
+ ---
1456
+
1457
+ ## 5. Open Grafana
1458
+
1459
+ \`\`\`bash
1460
+ kubectl port-forward -n monitoring svc/olam-grafana 3000:80
1461
+ open http://localhost:3000
1462
+ \`\`\`
1463
+
1464
+ User \`admin\`, password from:
1465
+
1466
+ \`\`\`bash
1467
+ kubectl get secret olam-grafana-admin -n monitoring \\
1468
+ -o jsonpath='{.data.admin-password}' | base64 -d
1469
+ \`\`\`
1470
+
1471
+ Pre-installed dashboards (under "Olam"):
1472
+
1473
+ - **olam-home** — at-a-glance status across all peripherals.
1474
+ - **host-cp** — request rate, p50/p95/p99 latency, world counts.
1475
+ - **kg-service** — classifier hit rate, classify latency, hook traffic.
1476
+ - **request-rate** — per-route HTTP request rate (uses recording rule \`olam:http_requests:rate5m_by_service_route\`).
1477
+
1478
+ ---
1479
+
1480
+ ## 6. Day-to-day operations
1481
+
1482
+ \`\`\`bash
1483
+ olam doctor # health check across substrate
1484
+ olam services status # peripherals status table (k8s-aware)
1485
+ olam services restart <name> # kubectl rollout restart for one peripheral
1486
+ olam services down # scale all peripherals to 0 replicas
1487
+ olam services up # scale them back to 1
1488
+ \`\`\`
1489
+
1490
+ To pick up a new release after \`npm install -g @pleri/olam-cli@latest\`:
1491
+
1492
+ \`\`\`bash
1493
+ olam upgrade
1494
+ \`\`\`
1495
+
1496
+ The upgrade flow re-applies all manifests (Kubernetes rolls the deployments to the new image digests); persistent volumes survive.
1497
+
1498
+ ---
1499
+
1500
+ ## 7. Tear down
1501
+
1502
+ \`\`\`bash
1503
+ olam implode --dry-run # preview what will be removed
1504
+ olam implode # confirmed: cluster + secrets + state
1505
+ \`\`\`
1506
+
1507
+ \`olam implode\` removes the k3d cluster, the host-side docker-socket-proxy sibling, every container, every secret in \`~/.olam/\`, and the global config. Use it when you want to start completely fresh; otherwise prefer \`olam services down\` or scale to 0.
1508
+
1509
+ ---
1510
+
1511
+ ## Choosing compose mode instead
1512
+
1513
+ To use the lighter 3-container compose path instead:
1514
+
1515
+ \`\`\`bash
1516
+ curl -fsSL https://olam.bar.dev/install | sh
1517
+ olam setup --substrate=docker
1518
+ \`\`\`
1519
+
1520
+ The CLI is substrate-aware: \`olam setup\`, \`olam services up|down|status|restart\`, \`olam upgrade\`, and \`olam doctor\` all route to the correct backend based on \`~/.olam/config.json\`'s \`host.substrate\` value.
1521
+
1522
+ Full compose guide: [\`fresh-machine-setup.md\`](./fresh-machine-setup.md).
1523
+
1524
+ ---
1525
+
1526
+ ## Architecture quick-ref
1527
+
1528
+ \`\`\`
1529
+ ┌─────────────────────────┐
1530
+ │ operator's machine │
1531
+ │ │
1532
+ │ ~/.olam/*-secret ─────┼──▶ Kubernetes Secrets
1533
+ │ ~/.config/gh ─────┼──▶ k3d --volume bind
1534
+ │ │
1535
+ │ ┌─────────────────┐ │
1536
+ │ │ docker daemon │ │
1537
+ │ │ │ │
1538
+ │ │ ┌──────────┐ │ │
1539
+ │ │ │ k3d node │ │ │ ┌─────────────────────────┐
1540
+ │ │ │ cluster │◀──┼────┼─────│ ghcr.io/pleri/olam-* │
1541
+ │ │ │ olam-dev │ │ │ │ (pulled with gh token) │
1542
+ │ │ └────┬─────┘ │ │ └─────────────────────────┘
1543
+ │ │ │ TCP │ │
1544
+ │ │ ▼ :2375 │ │
1545
+ │ │ ┌──────────────┴┐ │
1546
+ │ │ │ docker-socket │ │
1547
+ │ │ │ proxy │ │
1548
+ │ │ │ (sibling │ │
1549
+ │ │ │ container) │ │
1550
+ │ │ └───────────────┘ │
1551
+ │ └─────────────────────┘
1552
+ └─────────────────────────┘
1553
+
1554
+ ▼ k3d nodes via host.k3d.internal:2375
1555
+ ┌──────────────────────────────────────┐
1556
+ │ cluster: olam-dev │
1557
+ │ │
1558
+ │ namespace: olam │
1559
+ │ olam-host-cp (1/1 Running) │
1560
+ │ olam-auth-service (1/1 Running) │
1561
+ │ olam-mcp-auth-svc (1/1 Running) │
1562
+ │ olam-kg-service (1/1 Running) │
1563
+ │ olam-memory-service (1/1 Running) │
1564
+ │ │
1565
+ │ namespace: monitoring │
1566
+ │ olam-grafana │
1567
+ │ prometheus-operated │
1568
+ │ loki + promtail │
1569
+ │ kyverno (admission) │
1570
+ └──────────────────────────────────────┘
1571
+ \`\`\`
1572
+
1573
+ Why the sibling docker-socket-proxy? On macOS, colima exposes \`/var/run/docker.sock\` via virtiofs, which blocks unix-socket bind-mounts into k3d pods. The proxy runs as a normal Docker container on the operator's daemon and exposes the same socket over TCP \`:2375\`. Pods reach it through an ExternalName Service. See [\`docs/test-reports/olam-k3d-on-mac-substrate-decision-eli5.md\`](../test-reports/olam-k3d-on-mac-substrate-decision-eli5.md).
1574
+
1575
+ ---
1576
+
1577
+ ## Common issues
1578
+
1579
+ | Symptom | Fix |
1580
+ |---|---|
1581
+ | \`colima not running\` | \`colima start --cpu 4 --memory 8 --vm-type=vz --mount-type=virtiofs\` |
1582
+ | \`permission denied\` on docker socket | \`colima ssh -- sudo chmod 666 /var/run/docker.sock\` |
1583
+ | Missing tool errors at preflight | Install manually per the prereq table, then re-run \`olam setup\` |
1584
+ | \`helm install\` timeout during observability bootstrap | Set \`OLAM_HELM_TIMEOUT=600s\` (or higher on loaded machines). See [Tuning](#tuning-helm-timeouts-on-resource-constrained-machines) for details. |
1585
+ | \`host-cp\` \`CrashLoopBackOff\` with \`inClusterContext is not in the allowlist\` | Image pre-dates v0.1.161 — \`npm install -g @pleri/olam-cli@latest && olam upgrade\` |
1586
+ | \`memory-service\` \`CrashLoopBackOff\` with \`port 3111 is already in use\` | Image pre-dates v0.1.163 — \`npm install -g @pleri/olam-cli@latest && olam upgrade\` |
1587
+ | \`imagePullBackOff\` from \`ghcr.io/pleri/olam-*\` | The bootstrap creates \`ghcr-pull\` from \`gh auth token\`; re-run \`olam setup\` after \`gh auth login\` |
1588
+ | Grafana dashboards missing | \`kubectl rollout restart deploy/olam-grafana -n monitoring\` |
1589
+ | host-cp can't reach docker | \`docker ps \\| grep docker-socket-proxy\` — restart with \`olam setup --skip-cluster-create\` to re-run only the proxy + manifest-apply steps |
1590
+ | \`helm install\` fails with \`Error: context deadline exceeded\` during observability bootstrap (grafana / loki / kube-prometheus-stack / kyverno) | The Colima VM is sharing CPU/memory with too many other containers. Bump the helm timeout via \`OLAM_HELM_TIMEOUT=900s olam setup\` (default is \`600s\`). On very loaded machines, \`1200s\` is reasonable. Applies to every \`helm install\` step in the observability chain. |
1591
+
1592
+ ### Tuning helm timeouts on resource-constrained machines
1593
+
1594
+ Every observability \`helm install\` (grafana, loki, promtail, kube-prometheus-stack, kyverno) reads \`OLAM_HELM_TIMEOUT\` (default \`600s\`). When the Colima VM is sharing resources with a heavy local workload, charts can take longer than the default to converge — bump the env var instead of editing scripts:
1595
+
1596
+ \`\`\`bash
1597
+ OLAM_HELM_TIMEOUT=900s olam setup # bootstrap with longer timeout
1598
+ OLAM_HELM_TIMEOUT=1200s olam setup # very loaded machines
1599
+ \`\`\`
1600
+
1601
+ CI Linux runners run unmodified at \`600s\` (dedicated resources). The knob exists for macOS-Colima hosts that share a VM with other docker workloads.
1602
+
1603
+ ### Tuning Prometheus scrape/discovery waits
1604
+
1605
+ The Phase C E2E scripts in \`scripts/e2e/\` poll Prometheus for synthetic-target discovery (\`TARGET_DISCOVERY_TIMEOUT\`, default 240s — \`cardinality-drop.sh\`, \`kyverno-cardinality-mutate.sh\`, \`dashboards-have-data.sh\`) and then sleep for recording-rule evaluation (\`SCRAPE_WAIT\`, default 70s — \`dashboards-have-data.sh\`). Both default values cover ≥2 rule-evaluation cycles at the 30s rule interval against a 15s scrape interval. Override on very slow runners:
1606
+
1607
+ \`\`\`bash
1608
+ OLAM_PROM_DISCOVERY_TIMEOUT=300 OLAM_PROM_SCRAPE_WAIT=120 npm run test:ingress-integration
1609
+ \`\`\`
1610
+
1611
+ ### Troubleshooting port-forwards
1612
+
1613
+ **Problem:** connections to a port-forward (e.g. \`localhost:19001\` for host-cp, \`localhost:3000\` for Grafana) suddenly fail with "connection refused".
1614
+
1615
+ **Why:** kubectl port-forwards die when:
1616
+ - The terminal that started them exits
1617
+ - k3d restarts or the cluster reboots
1618
+ - The underlying pod crashes or is redeployed
1619
+ - The local kube context changes
1620
+
1621
+ **Diagnose:**
1622
+ \`\`\`bash
1623
+ ps aux | grep "kubectl port-forward"
1624
+ \`\`\`
1625
+
1626
+ If nothing shows up, the port-forward is dead and needs to be re-established.
1627
+
1628
+ **Fix:**
1629
+
1630
+ Option 1 — re-establish all port-forwards at once:
1631
+ \`\`\`bash
1632
+ olam services up
1633
+ \`\`\`
1634
+
1635
+ Option 2 — manually restart the port-forward (canonical command from the setup doc):
1636
+ \`\`\`bash
1637
+ kubectl port-forward -n olam svc/host-cp 19001:19001
1638
+ \`\`\`
1639
+
1640
+ Use \`olam services status\` to see which services are running and which port each binds to locally.
1641
+
1642
+ When everything else fails, tear down and re-create:
1643
+
1644
+ \`\`\`bash
1645
+ olam implode
1646
+ olam setup
1647
+ \`\`\`
1648
+
1649
+ \`olam implode\` removes everything; \`olam setup\` re-creates from scratch.
1650
+
1651
+ ---
1652
+
1653
+ ## What to read next
1654
+
1655
+ - \`olam --help\`, \`olam setup --help\` — the canonical CLI surface.
1656
+ - [\`docs/architecture/peripheral-services-on-k3s.md\`](../architecture/peripheral-services-on-k3s.md) — design doc for the k3s peripheral architecture.
1657
+ - [\`docs/test-reports/olam-k3d-on-mac-substrate-decision-eli5.md\`](../test-reports/olam-k3d-on-mac-substrate-decision-eli5.md) — why the docker-socket-proxy sits where it sits.
1658
+
1659
+ ---
1660
+
1254
1661
  ## Architecture — the problem olam solves
1255
1662
 
1256
1663
  Source: \`docs/architecture/01-problem.md\`
@@ -1857,13 +2264,13 @@ Top-level commands (run \`olam <command> --help\` for flags and subcommands):
1857
2264
  - \`olam bootstrap\` — One-shot wiring of a fresh Hermes install to olam (MCP + KG hook + skill mirror)
1858
2265
  - \`olam build\` — Build pristine KG for a workspace (default: current dir). Routes through olam-kg-service /build endpoint. Use --pending to drain the pending queue.
1859
2266
  - \`olam check-ports\` — Check if runbook ports are available
1860
- - \`olam clean\` — Reap orphan world filesystem state under ~/.olam/worlds/
1861
- - \`olam completion\` — Emit a POSIX shell completion script for zsh or bash.
2267
+ - \`olam clean\` — Reap orphaned world filesystem state
2268
+ - \`olam completion\` — Emit a shell completion script for zsh or bash
1862
2269
  - \`olam config\` — Manage global olam configuration
1863
2270
  - \`olam create\` — Create a new development world
1864
2271
  - \`olam crystallize\` — Crystallize thoughts from a world to Pleri Plane
1865
2272
  - \`olam deregister\` — Remove a world from the host CP registry (does NOT destroy the world)
1866
- - \`olam destroy\` — Destroy a world and clean up resources (accepts world ID or name)
2273
+ - \`olam destroy\` — Destroy a world and clean up its resources
1867
2274
  - \`olam diagnose\` — Bundle diagnostics into a zip file for sharing with maintainers
1868
2275
  - \`olam diff\` — Show what
1869
2276
  - \`olam disable\` — Take a credential out of rotation (manual cooldown)
@@ -1876,8 +2283,8 @@ Top-level commands (run \`olam <command> --help\` for flags and subcommands):
1876
2283
  - \`olam get\` — Print the active substrate
1877
2284
  - \`olam hermes\` — Hermes integration commands
1878
2285
  - \`olam host-cp\` — Manage the Olam host control plane container
1879
- - \`olam implode\` — Destroy ALL local olam install + configs (containers, images, volumes, ~/.olam/, npm package). Default is dry-run.
1880
- - \`olam init\` — Initialize olam in the current project
2286
+ - \`olam implode\` — Destroy ALL local olam install and configs (dry-run by default)
2287
+ - \`olam init\` — Initialize olam in the current project or globally
1881
2288
  - \`olam inspect\` — Diagnose warm-create cache hits/misses for a workspace (read-only; mutates nothing)
1882
2289
  - \`olam install\` — Pick an archetype preset for this Olam install
1883
2290
  - \`olam install-hook\` — Install kg-service hook (idempotent). --for hermes targets ~/.hermes/; default targets .claude/settings.json
@@ -1892,6 +2299,7 @@ Top-level commands (run \`olam <command> --help\` for flags and subcommands):
1892
2299
  - \`olam logs\` — Stream application logs from a world (engine-agnostic)
1893
2300
  - \`olam migrate-hooks-back\` — Reverse olam-meta hook injection by restoring ~/.claude/settings.json from a B5 snapshot
1894
2301
  - \`olam migrate-to-remote\` — Print guidance for re-authenticating local credentials against the remote auth-worker (v1: no auto-migration of secrets)
2302
+ - \`olam mirror\` — cloud-kg-mirror operations (build via CF Worker, classify at edge)
1895
2303
  - \`olam observe\` — Stream thoughts from a world (coming soon)
1896
2304
  - \`olam onboard\` — Fresh-install umbrella: register + clone + install SessionStart hook + first sync, in one verb
1897
2305
  - \`olam path\` — Print the absolute path to ~/.olam/keys.yaml
@@ -1909,18 +2317,18 @@ Top-level commands (run \`olam <command> --help\` for flags and subcommands):
1909
2317
  - \`olam repos\` — Manage the global repo registry
1910
2318
  - \`olam restart\` — Restart a world container (auto-builds agent-stream bundle when stale)
1911
2319
  - \`olam restore\` — Move a shadow-backup file back to its original path
1912
- - \`olam resume\` — Resume a world by PR number, URL, or branch — finds the world that opened the PR and enters it.
2320
+ - \`olam resume\` — Re-enter a world by PR number, URL, or branch name
1913
2321
  - \`olam revoke-anthropic-token\` — Revoke an Anthropic proxy token on the remote auth-worker (g4)
1914
2322
  - \`olam rotate-service-token\` — Revoke a service token and guide through re-binding a replacement
1915
2323
  - \`olam runbooks\` — Manage runbooks in the global config
1916
2324
  - \`olam savings\` — Show cumulative KG-hit savings tallied by the kg-service container
1917
2325
  - \`olam seed\` — Manage postgres seed templates on the olam-postgres singleton
1918
- - \`olam services\` — Manage Olam service containers. Substrate-aware: compose uses docker; kubernetes uses kubectl.
2326
+ - \`olam services\` — Manage Olam service containers (up/down/status/logs)
1919
2327
  - \`olam set-prefix\` — Set the deploy prefix for a registered skill source (skills+agents deploy as <prefix>:<canonical-name>)
1920
2328
  - \`olam set-prefix-scope\` — Set which artifact kinds are renamed by the prefix (comma-separated: skill, agent, or skill,agent)
1921
- - \`olam setup\` — Fresh-host onboarding wizard. Default substrate=kubernetes (k3d on all platforms):
1922
- - \`olam setup-linux-gate-status\` — Detect whether the Linux platform expansion gate has been triggered.
1923
- - \`olam setup-metrics\` — Query trust-audit-log for olam setup dogfood statistics.
2329
+ - \`olam setup\` — Fresh-host onboarding wizard (k3d cluster + services, idempotent)
2330
+ - \`olam setup-linux-gate-status\` — Check whether the Linux platform expansion gate has been triggered
2331
+ - \`olam setup-metrics\` — Query trust-audit-log for setup dogfood statistics
1924
2332
  - \`olam shadow-backups\` — Manage
1925
2333
  - \`olam show\` — Show full gate detail (diff, command, commits)
1926
2334
  - \`olam skills\` — Manage skill sources and synchronization
@@ -1931,6 +2339,7 @@ Top-level commands (run \`olam <command> --help\` for flags and subcommands):
1931
2339
  - \`olam stop\` — Stop the host CP container + remove token + PID files
1932
2340
  - \`olam substrate\` — Manage deployment substrate (beta)
1933
2341
  - \`olam sync\` — Sync registered skill sources to ~/.claude/
2342
+ - \`olam tls-install\` — Provision a locally-trusted TLS cert (mkcert) for the Traefik IngressRoute
1934
2343
  - \`olam uninstall\` — Remove /10x: chain skill symlinks from ~/.claude/skills (preserves user-authored skills + non-chain skill sources)
1935
2344
  - \`olam uninstall-hook\` — Remove kg-service PreToolUse hook from .claude/settings.json (sentinel-matched; surgical)
1936
2345
  - \`olam unset-prefix\` — Remove the deploy prefix from a registered skill source (reverts to canonical deploy names)
@@ -1942,6 +2351,6 @@ Top-level commands (run \`olam <command> --help\` for flags and subcommands):
1942
2351
  - \`olam watch\` — Run graphify --watch against a workspace, keeping its pristine KG fresh
1943
2352
  - \`olam workspace\` — Manage the named catalog of repo bundles that worlds instantiate from
1944
2353
  - \`olam world\` — World management subcommands
1945
- - \`olam yolo\` — Dispatch a parallel Claude Code session in a new tmux window + isolated git worktree
2354
+ - \`olam yolo\` — Parallel Claude Code session in a new tmux window + isolated worktree
1946
2355
  `;
1947
2356
  //# sourceMappingURL=knowledge-pack.generated.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"knowledge-pack.generated.js","sourceRoot":"","sources":["../../src/ask/knowledge-pack.generated.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,oBAAoB;AAEpB,MAAM,CAAC,MAAM,cAAc,GAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAk5DrC,CAAC"}
1
+ {"version":3,"file":"knowledge-pack.generated.js","sourceRoot":"","sources":["../../src/ask/knowledge-pack.generated.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,oBAAoB;AAEpB,MAAM,CAAC,MAAM,cAAc,GAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2yErC,CAAC"}