create-egregore 0.21.6 → 0.22.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 (719) hide show
  1. package/assets/egregore-launcher.js +58 -6
  2. package/assets/egregore-launcher.sh +15 -2
  3. package/lib/claude-runtime.js +2 -0
  4. package/lib/codex-runtime.js +2 -0
  5. package/lib/setup.js +20 -3
  6. package/package.json +2 -2
  7. package/runtime/claude/.claude/context/commit-format.md +7 -4
  8. package/runtime/claude/.claude/context/handoff-claiming.md +32 -0
  9. package/runtime/claude/.claude/context/notification-consent.md +12 -9
  10. package/runtime/claude/.claude/hooks/boundary-check.sh +14 -331
  11. package/runtime/claude/.claude/hooks/memory-read-guard.sh +9 -1
  12. package/runtime/claude/.claude/rules/voice-bedrock.md +6 -2
  13. package/runtime/claude/.claude/settings.json +1 -1
  14. package/runtime/claude/.claude/skills/commit/SKILL.md +5 -3
  15. package/runtime/claude/.claude/skills/dark-mode/SKILL.md +48 -369
  16. package/runtime/claude/.claude/skills/records/SKILL.md +158 -0
  17. package/runtime/claude/.claude/skills/reflect/SKILL.md +50 -21
  18. package/runtime/claude/.claude/skills/review-pr/SKILL.md +4 -2
  19. package/runtime/claude/.claude/skills/save/SKILL.md +9 -3
  20. package/runtime/claude/.claude/skills/summon/SKILL.md +138 -207
  21. package/runtime/claude/.claude/skills/tui-design/SKILL.md +1 -1
  22. package/runtime/claude/.claude/skills/update/SKILL.md +1 -1
  23. package/runtime/claude/.claude/skills/view/SKILL.md +52 -16
  24. package/runtime/claude/.claude/skills/view/compose-scaffold.html +19 -13
  25. package/runtime/claude/CLAUDE.md +59 -95
  26. package/runtime/claude/bin/agent.sh +231 -7
  27. package/runtime/claude/bin/api-call.sh +44 -23
  28. package/runtime/claude/bin/artifact-register.sh +7 -1
  29. package/runtime/claude/bin/artifact-writeback.sh +1 -1
  30. package/runtime/claude/bin/artifacts.sh +66 -265
  31. package/runtime/claude/bin/attendant.sh +4 -1
  32. package/runtime/claude/bin/boundary-guard.cjs +1848 -0
  33. package/runtime/claude/bin/boundary-hook.sh +41 -0
  34. package/runtime/claude/bin/boundary.sh +15 -155
  35. package/runtime/claude/bin/capture-run.sh +32 -2
  36. package/runtime/claude/bin/codex-render-spec.mjs +24 -46
  37. package/runtime/claude/bin/codex-session-start.sh +19 -0
  38. package/runtime/claude/bin/codex-skill-render.mjs +18 -0
  39. package/runtime/claude/bin/config-get.sh +10 -1
  40. package/runtime/claude/bin/connect-refresh.sh +16 -0
  41. package/runtime/claude/bin/corpus_map.py +5 -0
  42. package/runtime/claude/bin/data/capabilities/claude.json +1480 -0
  43. package/runtime/claude/bin/genui.sh +19 -0
  44. package/runtime/claude/bin/graph-batch.sh +1 -1
  45. package/runtime/claude/bin/graph-op.sh +14 -0
  46. package/runtime/claude/bin/graph.sh +1 -1
  47. package/runtime/claude/bin/handoff-pr-backfill.sh +1 -1
  48. package/runtime/claude/bin/handoff-run.sh +11 -6
  49. package/runtime/claude/bin/ingest-item.sh +1 -1
  50. package/runtime/claude/bin/ingest-surface.html +22 -4
  51. package/runtime/claude/bin/issue.sh +1 -1
  52. package/runtime/claude/bin/knowledge.sh +1 -1
  53. package/runtime/claude/bin/lib/card-delivery.sh +329 -0
  54. package/runtime/claude/bin/lib/config.sh +148 -3
  55. package/runtime/claude/bin/lib/context.sh +38 -67
  56. package/runtime/claude/bin/lib/genui-entry.py +36 -0
  57. package/runtime/claude/bin/lib/git-message.sh +25 -6
  58. package/runtime/claude/bin/lib/git-sync.sh +12 -4
  59. package/runtime/claude/bin/lib/greeting.sh +255 -28
  60. package/runtime/claude/bin/lib/handoff_meta.py +294 -0
  61. package/runtime/claude/bin/lib/health-footer.sh +83 -2
  62. package/runtime/claude/bin/lib/identity.sh +31 -10
  63. package/runtime/claude/bin/lib/instance-registry.sh +71 -0
  64. package/runtime/claude/bin/lib/local_ci_receipt.py +249 -0
  65. package/runtime/claude/bin/lib/metrics.sh +121 -8
  66. package/runtime/claude/bin/lib/notices.sh +36 -0
  67. package/runtime/claude/bin/lib/record_outcomes.py +729 -0
  68. package/runtime/claude/bin/lib/reflexes.py +267 -0
  69. package/runtime/claude/bin/lib/retrieval_scorecard.py +624 -0
  70. package/runtime/claude/bin/lib/session-record-prompt.txt +18 -0
  71. package/runtime/claude/bin/lib/session_record.py +3747 -0
  72. package/runtime/claude/bin/lib/session_trail.py +1983 -0
  73. package/runtime/claude/bin/lib/settings-drift.sh +8 -5
  74. package/runtime/claude/bin/lib/startup-restart.sh +41 -0
  75. package/runtime/claude/bin/lib/worktree-links.sh +92 -0
  76. package/runtime/claude/bin/memory-push.sh +6 -0
  77. package/runtime/claude/bin/merge-gate.sh +498 -0
  78. package/runtime/claude/bin/notify.sh +5 -2
  79. package/runtime/claude/bin/page-access.sh +103 -0
  80. package/runtime/claude/bin/person.sh +13 -2
  81. package/runtime/claude/bin/pi-render-spec.mjs +0 -1
  82. package/runtime/claude/bin/pi-spirit-discovery.mjs +34 -0
  83. package/runtime/claude/bin/post-update.sh +181 -0
  84. package/runtime/claude/bin/prime-render-spec.mjs +0 -1
  85. package/runtime/claude/bin/publish-artifact.sh +89 -42
  86. package/runtime/claude/bin/qa-inventory.sh +2 -2
  87. package/runtime/claude/bin/quest.sh +1 -1
  88. package/runtime/claude/bin/records.sh +11 -0
  89. package/runtime/claude/bin/reflexes/05-vitals.sh +9 -0
  90. package/runtime/claude/bin/reflexes/10-open-items.sh +12 -0
  91. package/runtime/claude/bin/reflexes/15-retrieval.sh +8 -0
  92. package/runtime/claude/bin/reflexes/20-nightly.sh +100 -0
  93. package/runtime/claude/bin/reflexes/20-sandbox.sh +85 -0
  94. package/runtime/claude/bin/reflexes/30-cost.py +116 -0
  95. package/runtime/claude/bin/reflexes/40-shells.py +51 -0
  96. package/runtime/claude/bin/reflexes/README.md +61 -0
  97. package/runtime/claude/bin/reflexes.sh +7 -0
  98. package/runtime/claude/bin/runtime-identity.sh +140 -42
  99. package/runtime/claude/bin/screenshot.sh +77 -0
  100. package/runtime/claude/bin/scroll.sh +1 -1
  101. package/runtime/claude/bin/search.sh +31 -5
  102. package/runtime/claude/bin/session-autosave.sh +6 -3
  103. package/runtime/claude/bin/session-id.sh +147 -0
  104. package/runtime/claude/bin/session-log.sh +19 -0
  105. package/runtime/claude/bin/session-record.sh +26 -0
  106. package/runtime/claude/bin/session-start.sh +121 -151
  107. package/runtime/claude/bin/settings.sh +13 -8
  108. package/runtime/claude/bin/spirit-discovery-claude.sh +4 -0
  109. package/runtime/claude/bin/spirit-discovery-codex.sh +4 -0
  110. package/runtime/claude/bin/spirit-discovery-pi.sh +4 -0
  111. package/runtime/claude/bin/spirit-discovery-prime.sh +4 -0
  112. package/runtime/claude/bin/spirit-discovery.sh +4 -0
  113. package/runtime/claude/bin/startup-check.sh +1 -1
  114. package/runtime/claude/bin/telemetry.sh +11 -4
  115. package/runtime/claude/bin/test-baseline.sh +33 -5
  116. package/runtime/claude/bin/todo.sh +1 -1
  117. package/runtime/claude/bin/worktree-create.sh +15 -45
  118. package/runtime/claude/bin/worktree.sh +6 -0
  119. package/runtime/claude/docs/spirit-discovery.md +96 -0
  120. package/runtime/claude/egregore_runtime/__init__.py +18 -12
  121. package/runtime/claude/egregore_runtime/access.py +608 -0
  122. package/runtime/claude/egregore_runtime/access_cli.py +190 -0
  123. package/runtime/claude/egregore_runtime/adapters/invitation.py +5 -3
  124. package/runtime/claude/egregore_runtime/adapters/qmd.py +521 -47
  125. package/runtime/claude/egregore_runtime/admin_entry.py +56 -0
  126. package/runtime/claude/egregore_runtime/artifacts.py +222 -16
  127. package/runtime/claude/egregore_runtime/contracts.py +27 -0
  128. package/runtime/claude/egregore_runtime/eligibility.py +5 -12
  129. package/runtime/claude/egregore_runtime/episode_binding.py +16 -5
  130. package/runtime/claude/egregore_runtime/github_issues.py +2 -2
  131. package/runtime/claude/egregore_runtime/handoff_lookup.py +9 -20
  132. package/runtime/claude/egregore_runtime/harness_cli.py +674 -149
  133. package/runtime/claude/egregore_runtime/held.py +2436 -0
  134. package/runtime/claude/egregore_runtime/hosted_api.py +137 -0
  135. package/runtime/claude/egregore_runtime/identity.py +196 -65
  136. package/runtime/claude/egregore_runtime/identity_transfer.py +6 -2
  137. package/runtime/claude/egregore_runtime/ingest_cli.py +2 -2
  138. package/runtime/claude/egregore_runtime/ingest_index_cli.py +4 -16
  139. package/runtime/claude/egregore_runtime/installation.py +119 -0
  140. package/runtime/claude/egregore_runtime/investigation.py +64 -41
  141. package/runtime/claude/egregore_runtime/investigation_guidance.py +16 -11
  142. package/runtime/claude/egregore_runtime/issue_cli.py +51 -32
  143. package/runtime/claude/egregore_runtime/issue_reporting.py +4 -3
  144. package/runtime/claude/egregore_runtime/issue_triage_service.py +2 -2
  145. package/runtime/claude/egregore_runtime/issues.py +12 -6
  146. package/runtime/claude/egregore_runtime/knowledge.py +331 -5
  147. package/runtime/claude/egregore_runtime/knowledge_cli.py +57 -17
  148. package/runtime/claude/egregore_runtime/lifecycle.py +88 -22
  149. package/runtime/claude/egregore_runtime/lifecycle_cli.py +21 -13
  150. package/runtime/claude/egregore_runtime/line_ids.py +10 -0
  151. package/runtime/claude/egregore_runtime/memory_push.py +349 -0
  152. package/runtime/claude/egregore_runtime/observe.py +64 -25
  153. package/runtime/claude/egregore_runtime/observers.py +19 -0
  154. package/runtime/claude/egregore_runtime/optional_modules.py +13 -0
  155. package/runtime/claude/egregore_runtime/outputs_cli.py +321 -0
  156. package/runtime/claude/egregore_runtime/policy.py +651 -24
  157. package/runtime/claude/egregore_runtime/private_result.py +2 -1
  158. package/runtime/claude/egregore_runtime/projection.py +946 -0
  159. package/runtime/claude/egregore_runtime/quest_cli.py +20 -23
  160. package/runtime/claude/egregore_runtime/question_cli.py +15 -11
  161. package/runtime/claude/egregore_runtime/questions.py +10 -10
  162. package/runtime/claude/egregore_runtime/quests.py +10 -10
  163. package/runtime/claude/egregore_runtime/record_publish.py +548 -0
  164. package/runtime/claude/egregore_runtime/record_subject.py +564 -0
  165. package/runtime/claude/egregore_runtime/research_ingest.py +2 -4
  166. package/runtime/claude/egregore_runtime/runtime.py +169 -60
  167. package/runtime/claude/egregore_runtime/sandbox.py +194 -0
  168. package/runtime/claude/egregore_runtime/scroll_cli.py +22 -32
  169. package/runtime/claude/egregore_runtime/scrolls.py +23 -15
  170. package/runtime/claude/egregore_runtime/shadow.py +262 -0
  171. package/runtime/claude/egregore_runtime/spirit_discovery.py +487 -0
  172. package/runtime/claude/egregore_runtime/spirit_discovery_cli.py +25 -0
  173. package/runtime/claude/egregore_runtime/spirit_discovery_transport.py +18 -0
  174. package/runtime/claude/egregore_runtime/status.py +101 -44
  175. package/runtime/claude/egregore_runtime/status_cli.py +13 -5
  176. package/runtime/claude/egregore_runtime/sync.py +39 -21
  177. package/runtime/claude/egregore_runtime/taste.py +934 -0
  178. package/runtime/claude/egregore_runtime/taste_cli.py +242 -0
  179. package/runtime/claude/egregore_runtime/taste_rules.py +91 -0
  180. package/runtime/claude/egregore_runtime/telemetry.py +26 -3
  181. package/runtime/claude/egregore_runtime/todo_cli.py +15 -12
  182. package/runtime/claude/egregore_runtime/todos.py +3 -2
  183. package/runtime/claude/egregore_runtime/upgrade.py +85 -58
  184. package/runtime/claude/egregore_runtime/writeback.py +330 -24
  185. package/runtime/claude/manifest.json +65 -5
  186. package/runtime/codex/.claude/context/handoff-claiming.md +32 -0
  187. package/runtime/codex/.claude/context/notification-consent.md +12 -9
  188. package/runtime/codex/.claude/skills/view/SKILL.md +438 -0
  189. package/runtime/codex/.codex/hooks.json +11 -0
  190. package/runtime/codex/.codex/skills/dark-mode/SKILL.md +1 -1
  191. package/runtime/codex/.codex/skills/records/SKILL.md +29 -0
  192. package/runtime/codex/.codex/skills/summon/SKILL.md +1 -1
  193. package/runtime/codex/.codex/skills/view/assets/compose-scaffold.html +19 -13
  194. package/runtime/codex/.codex/spec-manifest.json +13 -19
  195. package/runtime/codex/AGENTS.md +54 -105
  196. package/runtime/codex/bin/agent.sh +231 -7
  197. package/runtime/codex/bin/api-call.sh +44 -23
  198. package/runtime/codex/bin/artifact-register.sh +7 -1
  199. package/runtime/codex/bin/artifact-writeback.sh +1 -1
  200. package/runtime/codex/bin/artifacts.sh +66 -265
  201. package/runtime/codex/bin/attendant.sh +4 -1
  202. package/runtime/codex/bin/boundary-guard.cjs +1848 -0
  203. package/runtime/codex/bin/boundary-hook.sh +41 -0
  204. package/runtime/codex/bin/capture-run.sh +32 -2
  205. package/runtime/codex/bin/codex-render-spec.mjs +24 -46
  206. package/runtime/codex/bin/codex-session-start.sh +19 -0
  207. package/runtime/codex/bin/codex-skill-render.mjs +18 -0
  208. package/runtime/codex/bin/config-get.sh +10 -1
  209. package/runtime/codex/bin/connect-refresh.sh +16 -0
  210. package/runtime/codex/bin/corpus_map.py +5 -0
  211. package/runtime/codex/bin/data/capabilities/codex.json +1458 -0
  212. package/runtime/codex/bin/genui.sh +19 -0
  213. package/runtime/codex/bin/graph-batch.sh +1 -1
  214. package/runtime/codex/bin/graph-op.sh +14 -0
  215. package/runtime/codex/bin/graph.sh +1 -1
  216. package/runtime/codex/bin/handoff-pr-backfill.sh +1 -1
  217. package/runtime/codex/bin/handoff-run.sh +11 -6
  218. package/runtime/codex/bin/ingest-item.sh +1 -1
  219. package/runtime/codex/bin/ingest-surface.html +22 -4
  220. package/runtime/codex/bin/issue.sh +1 -1
  221. package/runtime/codex/bin/knowledge.sh +1 -1
  222. package/runtime/codex/bin/lib/card-delivery.sh +329 -0
  223. package/runtime/codex/bin/lib/config.sh +148 -3
  224. package/runtime/codex/bin/lib/context.sh +38 -67
  225. package/runtime/codex/bin/lib/genui-entry.py +36 -0
  226. package/runtime/codex/bin/lib/git-message.sh +25 -6
  227. package/runtime/codex/bin/lib/git-sync.sh +12 -4
  228. package/runtime/codex/bin/lib/greeting.sh +255 -28
  229. package/runtime/codex/bin/lib/handoff_meta.py +294 -0
  230. package/runtime/codex/bin/lib/health-footer.sh +83 -2
  231. package/runtime/codex/bin/lib/identity.sh +31 -10
  232. package/runtime/codex/bin/lib/instance-registry.sh +71 -0
  233. package/runtime/codex/bin/lib/local_ci_receipt.py +249 -0
  234. package/runtime/codex/bin/lib/metrics.sh +121 -8
  235. package/runtime/codex/bin/lib/notices.sh +36 -0
  236. package/runtime/codex/bin/lib/record_outcomes.py +729 -0
  237. package/runtime/codex/bin/lib/reflexes.py +267 -0
  238. package/runtime/codex/bin/lib/retrieval_scorecard.py +624 -0
  239. package/runtime/codex/bin/lib/session-record-prompt.txt +18 -0
  240. package/runtime/codex/bin/lib/session_record.py +3747 -0
  241. package/runtime/codex/bin/lib/session_trail.py +1983 -0
  242. package/runtime/codex/bin/lib/settings-drift.sh +8 -5
  243. package/runtime/codex/bin/lib/startup-restart.sh +41 -0
  244. package/runtime/codex/bin/lib/worktree-links.sh +92 -0
  245. package/runtime/codex/bin/memory-push.sh +6 -0
  246. package/runtime/codex/bin/merge-gate.sh +498 -0
  247. package/runtime/codex/bin/notify.sh +5 -2
  248. package/runtime/codex/bin/page-access.sh +103 -0
  249. package/runtime/codex/bin/person.sh +13 -2
  250. package/runtime/codex/bin/pi-render-spec.mjs +0 -1
  251. package/runtime/codex/bin/pi-spirit-discovery.mjs +34 -0
  252. package/runtime/codex/bin/post-update.sh +181 -0
  253. package/runtime/codex/bin/prime-render-spec.mjs +0 -1
  254. package/runtime/codex/bin/publish-artifact.sh +89 -42
  255. package/runtime/codex/bin/qa-inventory.sh +2 -2
  256. package/runtime/codex/bin/quest.sh +1 -1
  257. package/runtime/codex/bin/records.sh +11 -0
  258. package/runtime/codex/bin/reflexes/05-vitals.sh +9 -0
  259. package/runtime/codex/bin/reflexes/10-open-items.sh +12 -0
  260. package/runtime/codex/bin/reflexes/15-retrieval.sh +8 -0
  261. package/runtime/codex/bin/reflexes/20-nightly.sh +100 -0
  262. package/runtime/codex/bin/reflexes/20-sandbox.sh +85 -0
  263. package/runtime/codex/bin/reflexes/30-cost.py +116 -0
  264. package/runtime/codex/bin/reflexes/40-shells.py +51 -0
  265. package/runtime/codex/bin/reflexes/README.md +61 -0
  266. package/runtime/codex/bin/reflexes.sh +7 -0
  267. package/runtime/codex/bin/runtime-identity.sh +140 -42
  268. package/runtime/codex/bin/screenshot.sh +77 -0
  269. package/runtime/codex/bin/scroll.sh +1 -1
  270. package/runtime/codex/bin/search.sh +31 -5
  271. package/runtime/codex/bin/session-autosave.sh +6 -3
  272. package/runtime/codex/bin/session-id.sh +147 -0
  273. package/runtime/codex/bin/session-log.sh +19 -0
  274. package/runtime/codex/bin/session-record.sh +26 -0
  275. package/runtime/codex/bin/settings.sh +13 -8
  276. package/runtime/codex/bin/spirit-discovery-claude.sh +4 -0
  277. package/runtime/codex/bin/spirit-discovery-codex.sh +4 -0
  278. package/runtime/codex/bin/spirit-discovery-pi.sh +4 -0
  279. package/runtime/codex/bin/spirit-discovery-prime.sh +4 -0
  280. package/runtime/codex/bin/spirit-discovery.sh +4 -0
  281. package/runtime/codex/bin/startup-check.sh +1 -1
  282. package/runtime/codex/bin/telemetry.sh +11 -4
  283. package/runtime/codex/bin/test-baseline.sh +33 -5
  284. package/runtime/codex/bin/todo.sh +1 -1
  285. package/runtime/codex/bin/worktree-create.sh +15 -45
  286. package/runtime/codex/bin/worktree.sh +6 -0
  287. package/runtime/codex/docs/spirit-discovery.md +96 -0
  288. package/runtime/codex/egregore_runtime/__init__.py +18 -12
  289. package/runtime/codex/egregore_runtime/access.py +608 -0
  290. package/runtime/codex/egregore_runtime/access_cli.py +190 -0
  291. package/runtime/codex/egregore_runtime/adapters/invitation.py +5 -3
  292. package/runtime/codex/egregore_runtime/adapters/qmd.py +521 -47
  293. package/runtime/codex/egregore_runtime/admin_entry.py +56 -0
  294. package/runtime/codex/egregore_runtime/artifacts.py +222 -16
  295. package/runtime/codex/egregore_runtime/contracts.py +27 -0
  296. package/runtime/codex/egregore_runtime/eligibility.py +5 -12
  297. package/runtime/codex/egregore_runtime/episode_binding.py +16 -5
  298. package/runtime/codex/egregore_runtime/github_issues.py +2 -2
  299. package/runtime/codex/egregore_runtime/handoff_lookup.py +9 -20
  300. package/runtime/codex/egregore_runtime/harness_cli.py +674 -149
  301. package/runtime/codex/egregore_runtime/held.py +2436 -0
  302. package/runtime/codex/egregore_runtime/hosted_api.py +137 -0
  303. package/runtime/codex/egregore_runtime/identity.py +196 -65
  304. package/runtime/codex/egregore_runtime/identity_transfer.py +6 -2
  305. package/runtime/codex/egregore_runtime/ingest_cli.py +2 -2
  306. package/runtime/codex/egregore_runtime/ingest_index_cli.py +4 -16
  307. package/runtime/codex/egregore_runtime/installation.py +119 -0
  308. package/runtime/codex/egregore_runtime/investigation.py +64 -41
  309. package/runtime/codex/egregore_runtime/investigation_guidance.py +16 -11
  310. package/runtime/codex/egregore_runtime/issue_cli.py +51 -32
  311. package/runtime/codex/egregore_runtime/issue_reporting.py +4 -3
  312. package/runtime/codex/egregore_runtime/issue_triage_service.py +2 -2
  313. package/runtime/codex/egregore_runtime/issues.py +12 -6
  314. package/runtime/codex/egregore_runtime/knowledge.py +331 -5
  315. package/runtime/codex/egregore_runtime/knowledge_cli.py +57 -17
  316. package/runtime/codex/egregore_runtime/lifecycle.py +88 -22
  317. package/runtime/codex/egregore_runtime/lifecycle_cli.py +21 -13
  318. package/runtime/codex/egregore_runtime/line_ids.py +10 -0
  319. package/runtime/codex/egregore_runtime/memory_push.py +349 -0
  320. package/runtime/codex/egregore_runtime/observe.py +64 -25
  321. package/runtime/codex/egregore_runtime/observers.py +19 -0
  322. package/runtime/codex/egregore_runtime/optional_modules.py +13 -0
  323. package/runtime/codex/egregore_runtime/outputs_cli.py +321 -0
  324. package/runtime/codex/egregore_runtime/policy.py +651 -24
  325. package/runtime/codex/egregore_runtime/private_result.py +2 -1
  326. package/runtime/codex/egregore_runtime/projection.py +946 -0
  327. package/runtime/codex/egregore_runtime/quest_cli.py +20 -23
  328. package/runtime/codex/egregore_runtime/question_cli.py +15 -11
  329. package/runtime/codex/egregore_runtime/questions.py +10 -10
  330. package/runtime/codex/egregore_runtime/quests.py +10 -10
  331. package/runtime/codex/egregore_runtime/record_publish.py +548 -0
  332. package/runtime/codex/egregore_runtime/record_subject.py +564 -0
  333. package/runtime/codex/egregore_runtime/research_ingest.py +2 -4
  334. package/runtime/codex/egregore_runtime/runtime.py +169 -60
  335. package/runtime/codex/egregore_runtime/sandbox.py +194 -0
  336. package/runtime/codex/egregore_runtime/scroll_cli.py +22 -32
  337. package/runtime/codex/egregore_runtime/scrolls.py +23 -15
  338. package/runtime/codex/egregore_runtime/shadow.py +262 -0
  339. package/runtime/codex/egregore_runtime/spirit_discovery.py +487 -0
  340. package/runtime/codex/egregore_runtime/spirit_discovery_cli.py +25 -0
  341. package/runtime/codex/egregore_runtime/spirit_discovery_transport.py +18 -0
  342. package/runtime/codex/egregore_runtime/status.py +101 -44
  343. package/runtime/codex/egregore_runtime/status_cli.py +13 -5
  344. package/runtime/codex/egregore_runtime/sync.py +39 -21
  345. package/runtime/codex/egregore_runtime/taste.py +934 -0
  346. package/runtime/codex/egregore_runtime/taste_cli.py +242 -0
  347. package/runtime/codex/egregore_runtime/taste_rules.py +91 -0
  348. package/runtime/codex/egregore_runtime/telemetry.py +26 -3
  349. package/runtime/codex/egregore_runtime/todo_cli.py +15 -12
  350. package/runtime/codex/egregore_runtime/todos.py +3 -2
  351. package/runtime/codex/egregore_runtime/upgrade.py +85 -58
  352. package/runtime/codex/egregore_runtime/writeback.py +330 -24
  353. package/runtime/codex/manifest.json +66 -5
  354. package/runtime/pi/.claude/context/handoff-claiming.md +32 -0
  355. package/runtime/pi/.claude/context/notification-consent.md +12 -9
  356. package/runtime/pi/.claude/skills/view/SKILL.md +438 -0
  357. package/runtime/pi/.codex/hooks.json +11 -0
  358. package/runtime/pi/.codex/skills/dark-mode/SKILL.md +1 -1
  359. package/runtime/pi/.codex/skills/records/SKILL.md +29 -0
  360. package/runtime/pi/.codex/skills/summon/SKILL.md +1 -1
  361. package/runtime/pi/.codex/skills/view/assets/compose-scaffold.html +19 -13
  362. package/runtime/pi/.codex/spec-manifest.json +13 -19
  363. package/runtime/pi/.pi/APPEND_SYSTEM.md +53 -99
  364. package/runtime/pi/.pi/extensions/egregore.ts +13 -1
  365. package/runtime/pi/.pi/spec-manifest.json +2 -2
  366. package/runtime/pi/AGENTS.md +54 -105
  367. package/runtime/pi/bin/agent.sh +231 -7
  368. package/runtime/pi/bin/api-call.sh +44 -23
  369. package/runtime/pi/bin/artifact-register.sh +7 -1
  370. package/runtime/pi/bin/artifact-writeback.sh +1 -1
  371. package/runtime/pi/bin/artifacts.sh +66 -265
  372. package/runtime/pi/bin/attendant.sh +4 -1
  373. package/runtime/pi/bin/boundary-guard.cjs +1848 -0
  374. package/runtime/pi/bin/boundary-hook.sh +41 -0
  375. package/runtime/pi/bin/capture-run.sh +32 -2
  376. package/runtime/pi/bin/codex-render-spec.mjs +24 -46
  377. package/runtime/pi/bin/codex-session-start.sh +19 -0
  378. package/runtime/pi/bin/codex-skill-render.mjs +18 -0
  379. package/runtime/pi/bin/config-get.sh +10 -1
  380. package/runtime/pi/bin/connect-refresh.sh +16 -0
  381. package/runtime/pi/bin/corpus_map.py +5 -0
  382. package/runtime/pi/bin/data/capabilities/pi.json +1458 -0
  383. package/runtime/pi/bin/genui.sh +19 -0
  384. package/runtime/pi/bin/graph-batch.sh +1 -1
  385. package/runtime/pi/bin/graph-op.sh +14 -0
  386. package/runtime/pi/bin/graph.sh +1 -1
  387. package/runtime/pi/bin/handoff-pr-backfill.sh +1 -1
  388. package/runtime/pi/bin/handoff-run.sh +11 -6
  389. package/runtime/pi/bin/ingest-item.sh +1 -1
  390. package/runtime/pi/bin/ingest-surface.html +22 -4
  391. package/runtime/pi/bin/issue.sh +1 -1
  392. package/runtime/pi/bin/knowledge.sh +1 -1
  393. package/runtime/pi/bin/lib/card-delivery.sh +329 -0
  394. package/runtime/pi/bin/lib/config.sh +148 -3
  395. package/runtime/pi/bin/lib/context.sh +38 -67
  396. package/runtime/pi/bin/lib/genui-entry.py +36 -0
  397. package/runtime/pi/bin/lib/git-message.sh +25 -6
  398. package/runtime/pi/bin/lib/git-sync.sh +12 -4
  399. package/runtime/pi/bin/lib/greeting.sh +255 -28
  400. package/runtime/pi/bin/lib/handoff_meta.py +294 -0
  401. package/runtime/pi/bin/lib/health-footer.sh +83 -2
  402. package/runtime/pi/bin/lib/identity.sh +31 -10
  403. package/runtime/pi/bin/lib/instance-registry.sh +71 -0
  404. package/runtime/pi/bin/lib/local_ci_receipt.py +249 -0
  405. package/runtime/pi/bin/lib/metrics.sh +121 -8
  406. package/runtime/pi/bin/lib/notices.sh +36 -0
  407. package/runtime/pi/bin/lib/record_outcomes.py +729 -0
  408. package/runtime/pi/bin/lib/reflexes.py +267 -0
  409. package/runtime/pi/bin/lib/retrieval_scorecard.py +624 -0
  410. package/runtime/pi/bin/lib/session-record-prompt.txt +18 -0
  411. package/runtime/pi/bin/lib/session_record.py +3747 -0
  412. package/runtime/pi/bin/lib/session_trail.py +1983 -0
  413. package/runtime/pi/bin/lib/settings-drift.sh +8 -5
  414. package/runtime/pi/bin/lib/startup-restart.sh +41 -0
  415. package/runtime/pi/bin/lib/worktree-links.sh +92 -0
  416. package/runtime/pi/bin/memory-push.sh +6 -0
  417. package/runtime/pi/bin/merge-gate.sh +498 -0
  418. package/runtime/pi/bin/notify.sh +5 -2
  419. package/runtime/pi/bin/page-access.sh +103 -0
  420. package/runtime/pi/bin/person.sh +13 -2
  421. package/runtime/pi/bin/pi-branch-policy.mjs +37 -0
  422. package/runtime/pi/bin/pi-observe-context.mjs +97 -4
  423. package/runtime/pi/bin/pi-render-spec.mjs +0 -1
  424. package/runtime/pi/bin/pi-session-start.sh +4 -1
  425. package/runtime/pi/bin/pi-spirit-discovery.mjs +34 -0
  426. package/runtime/pi/bin/post-update.sh +181 -0
  427. package/runtime/pi/bin/prime-render-spec.mjs +0 -1
  428. package/runtime/pi/bin/publish-artifact.sh +89 -42
  429. package/runtime/pi/bin/qa-inventory.sh +2 -2
  430. package/runtime/pi/bin/quest.sh +1 -1
  431. package/runtime/pi/bin/records.sh +11 -0
  432. package/runtime/pi/bin/reflexes/05-vitals.sh +9 -0
  433. package/runtime/pi/bin/reflexes/10-open-items.sh +12 -0
  434. package/runtime/pi/bin/reflexes/15-retrieval.sh +8 -0
  435. package/runtime/pi/bin/reflexes/20-nightly.sh +100 -0
  436. package/runtime/pi/bin/reflexes/20-sandbox.sh +85 -0
  437. package/runtime/pi/bin/reflexes/30-cost.py +116 -0
  438. package/runtime/pi/bin/reflexes/40-shells.py +51 -0
  439. package/runtime/pi/bin/reflexes/README.md +61 -0
  440. package/runtime/pi/bin/reflexes.sh +7 -0
  441. package/runtime/pi/bin/runtime-identity.sh +140 -42
  442. package/runtime/pi/bin/screenshot.sh +77 -0
  443. package/runtime/pi/bin/scroll.sh +1 -1
  444. package/runtime/pi/bin/search.sh +31 -5
  445. package/runtime/pi/bin/session-autosave.sh +6 -3
  446. package/runtime/pi/bin/session-id.sh +147 -0
  447. package/runtime/pi/bin/session-log.sh +19 -0
  448. package/runtime/pi/bin/session-record.sh +26 -0
  449. package/runtime/pi/bin/settings.sh +13 -8
  450. package/runtime/pi/bin/spirit-discovery-claude.sh +4 -0
  451. package/runtime/pi/bin/spirit-discovery-codex.sh +4 -0
  452. package/runtime/pi/bin/spirit-discovery-pi.sh +4 -0
  453. package/runtime/pi/bin/spirit-discovery-prime.sh +4 -0
  454. package/runtime/pi/bin/spirit-discovery.sh +4 -0
  455. package/runtime/pi/bin/startup-check.sh +1 -1
  456. package/runtime/pi/bin/telemetry.sh +11 -4
  457. package/runtime/pi/bin/test-baseline.sh +33 -5
  458. package/runtime/pi/bin/todo.sh +1 -1
  459. package/runtime/pi/bin/worktree-create.sh +15 -45
  460. package/runtime/pi/bin/worktree.sh +6 -0
  461. package/runtime/pi/docs/spirit-discovery.md +96 -0
  462. package/runtime/pi/egregore_runtime/__init__.py +18 -12
  463. package/runtime/pi/egregore_runtime/access.py +608 -0
  464. package/runtime/pi/egregore_runtime/access_cli.py +190 -0
  465. package/runtime/pi/egregore_runtime/adapters/invitation.py +5 -3
  466. package/runtime/pi/egregore_runtime/adapters/qmd.py +521 -47
  467. package/runtime/pi/egregore_runtime/admin_entry.py +56 -0
  468. package/runtime/pi/egregore_runtime/artifacts.py +222 -16
  469. package/runtime/pi/egregore_runtime/contracts.py +27 -0
  470. package/runtime/pi/egregore_runtime/eligibility.py +5 -12
  471. package/runtime/pi/egregore_runtime/episode_binding.py +16 -5
  472. package/runtime/pi/egregore_runtime/github_issues.py +2 -2
  473. package/runtime/pi/egregore_runtime/handoff_lookup.py +9 -20
  474. package/runtime/pi/egregore_runtime/harness_cli.py +674 -149
  475. package/runtime/pi/egregore_runtime/held.py +2436 -0
  476. package/runtime/pi/egregore_runtime/hosted_api.py +137 -0
  477. package/runtime/pi/egregore_runtime/identity.py +196 -65
  478. package/runtime/pi/egregore_runtime/identity_transfer.py +6 -2
  479. package/runtime/pi/egregore_runtime/ingest_cli.py +2 -2
  480. package/runtime/pi/egregore_runtime/ingest_index_cli.py +4 -16
  481. package/runtime/pi/egregore_runtime/installation.py +119 -0
  482. package/runtime/pi/egregore_runtime/investigation.py +64 -41
  483. package/runtime/pi/egregore_runtime/investigation_guidance.py +16 -11
  484. package/runtime/pi/egregore_runtime/issue_cli.py +51 -32
  485. package/runtime/pi/egregore_runtime/issue_reporting.py +4 -3
  486. package/runtime/pi/egregore_runtime/issue_triage_service.py +2 -2
  487. package/runtime/pi/egregore_runtime/issues.py +12 -6
  488. package/runtime/pi/egregore_runtime/knowledge.py +331 -5
  489. package/runtime/pi/egregore_runtime/knowledge_cli.py +57 -17
  490. package/runtime/pi/egregore_runtime/lifecycle.py +88 -22
  491. package/runtime/pi/egregore_runtime/lifecycle_cli.py +21 -13
  492. package/runtime/pi/egregore_runtime/line_ids.py +10 -0
  493. package/runtime/pi/egregore_runtime/memory_push.py +349 -0
  494. package/runtime/pi/egregore_runtime/observe.py +64 -25
  495. package/runtime/pi/egregore_runtime/observers.py +19 -0
  496. package/runtime/pi/egregore_runtime/optional_modules.py +13 -0
  497. package/runtime/pi/egregore_runtime/outputs_cli.py +321 -0
  498. package/runtime/pi/egregore_runtime/policy.py +651 -24
  499. package/runtime/pi/egregore_runtime/private_result.py +2 -1
  500. package/runtime/pi/egregore_runtime/projection.py +946 -0
  501. package/runtime/pi/egregore_runtime/quest_cli.py +20 -23
  502. package/runtime/pi/egregore_runtime/question_cli.py +15 -11
  503. package/runtime/pi/egregore_runtime/questions.py +10 -10
  504. package/runtime/pi/egregore_runtime/quests.py +10 -10
  505. package/runtime/pi/egregore_runtime/record_publish.py +548 -0
  506. package/runtime/pi/egregore_runtime/record_subject.py +564 -0
  507. package/runtime/pi/egregore_runtime/research_ingest.py +2 -4
  508. package/runtime/pi/egregore_runtime/runtime.py +169 -60
  509. package/runtime/pi/egregore_runtime/sandbox.py +194 -0
  510. package/runtime/pi/egregore_runtime/scroll_cli.py +22 -32
  511. package/runtime/pi/egregore_runtime/scrolls.py +23 -15
  512. package/runtime/pi/egregore_runtime/shadow.py +262 -0
  513. package/runtime/pi/egregore_runtime/spirit_discovery.py +487 -0
  514. package/runtime/pi/egregore_runtime/spirit_discovery_cli.py +25 -0
  515. package/runtime/pi/egregore_runtime/spirit_discovery_transport.py +18 -0
  516. package/runtime/pi/egregore_runtime/status.py +101 -44
  517. package/runtime/pi/egregore_runtime/status_cli.py +13 -5
  518. package/runtime/pi/egregore_runtime/sync.py +39 -21
  519. package/runtime/pi/egregore_runtime/taste.py +934 -0
  520. package/runtime/pi/egregore_runtime/taste_cli.py +242 -0
  521. package/runtime/pi/egregore_runtime/taste_rules.py +91 -0
  522. package/runtime/pi/egregore_runtime/telemetry.py +26 -3
  523. package/runtime/pi/egregore_runtime/todo_cli.py +15 -12
  524. package/runtime/pi/egregore_runtime/todos.py +3 -2
  525. package/runtime/pi/egregore_runtime/upgrade.py +85 -58
  526. package/runtime/pi/egregore_runtime/writeback.py +330 -24
  527. package/runtime/pi/manifest.json +66 -5
  528. package/runtime/prime/.claude/context/handoff-claiming.md +32 -0
  529. package/runtime/prime/.claude/context/notification-consent.md +12 -9
  530. package/runtime/prime/.claude/skills/view/SKILL.md +438 -0
  531. package/runtime/prime/.codex/hooks.json +11 -0
  532. package/runtime/prime/.codex/skills/dark-mode/SKILL.md +1 -1
  533. package/runtime/prime/.codex/skills/records/SKILL.md +29 -0
  534. package/runtime/prime/.codex/skills/summon/SKILL.md +1 -1
  535. package/runtime/prime/.codex/skills/view/assets/compose-scaffold.html +19 -13
  536. package/runtime/prime/.codex/spec-manifest.json +13 -19
  537. package/runtime/prime/.prime/agent/APPEND_SYSTEM.md +53 -99
  538. package/runtime/prime/.prime/agent/extensions/egregore.ts +14 -1
  539. package/runtime/prime/.prime/agent/skills/egregore/SKILL.md +14 -6
  540. package/runtime/prime/.prime/agent/skills/egregore/src/egregore/__init__.py +66 -1
  541. package/runtime/prime/.prime/agent/spec-manifest.json +2 -2
  542. package/runtime/prime/AGENTS.md +54 -105
  543. package/runtime/prime/bin/agent.sh +231 -7
  544. package/runtime/prime/bin/api-call.sh +44 -23
  545. package/runtime/prime/bin/artifact-register.sh +7 -1
  546. package/runtime/prime/bin/artifact-writeback.sh +1 -1
  547. package/runtime/prime/bin/artifacts.sh +66 -265
  548. package/runtime/prime/bin/attendant.sh +4 -1
  549. package/runtime/prime/bin/boundary-guard.cjs +1848 -0
  550. package/runtime/prime/bin/boundary-hook.sh +41 -0
  551. package/runtime/prime/bin/capture-run.sh +32 -2
  552. package/runtime/prime/bin/codex-render-spec.mjs +24 -46
  553. package/runtime/prime/bin/codex-session-start.sh +19 -0
  554. package/runtime/prime/bin/codex-skill-render.mjs +18 -0
  555. package/runtime/prime/bin/config-get.sh +10 -1
  556. package/runtime/prime/bin/connect-refresh.sh +16 -0
  557. package/runtime/prime/bin/corpus_map.py +5 -0
  558. package/runtime/prime/bin/data/capabilities/prime.json +1458 -0
  559. package/runtime/prime/bin/genui.sh +19 -0
  560. package/runtime/prime/bin/graph-batch.sh +1 -1
  561. package/runtime/prime/bin/graph-op.sh +14 -0
  562. package/runtime/prime/bin/graph.sh +1 -1
  563. package/runtime/prime/bin/handoff-pr-backfill.sh +1 -1
  564. package/runtime/prime/bin/handoff-run.sh +11 -6
  565. package/runtime/prime/bin/ingest-item.sh +1 -1
  566. package/runtime/prime/bin/ingest-surface.html +22 -4
  567. package/runtime/prime/bin/issue.sh +1 -1
  568. package/runtime/prime/bin/knowledge.sh +1 -1
  569. package/runtime/prime/bin/lib/card-delivery.sh +329 -0
  570. package/runtime/prime/bin/lib/config.sh +148 -3
  571. package/runtime/prime/bin/lib/context.sh +38 -67
  572. package/runtime/prime/bin/lib/genui-entry.py +36 -0
  573. package/runtime/prime/bin/lib/git-message.sh +25 -6
  574. package/runtime/prime/bin/lib/git-sync.sh +12 -4
  575. package/runtime/prime/bin/lib/greeting.sh +255 -28
  576. package/runtime/prime/bin/lib/handoff_meta.py +294 -0
  577. package/runtime/prime/bin/lib/health-footer.sh +83 -2
  578. package/runtime/prime/bin/lib/identity.sh +31 -10
  579. package/runtime/prime/bin/lib/instance-registry.sh +71 -0
  580. package/runtime/prime/bin/lib/local_ci_receipt.py +249 -0
  581. package/runtime/prime/bin/lib/metrics.sh +121 -8
  582. package/runtime/prime/bin/lib/notices.sh +36 -0
  583. package/runtime/prime/bin/lib/record_outcomes.py +729 -0
  584. package/runtime/prime/bin/lib/reflexes.py +267 -0
  585. package/runtime/prime/bin/lib/retrieval_scorecard.py +624 -0
  586. package/runtime/prime/bin/lib/session-record-prompt.txt +18 -0
  587. package/runtime/prime/bin/lib/session_record.py +3747 -0
  588. package/runtime/prime/bin/lib/session_trail.py +1983 -0
  589. package/runtime/prime/bin/lib/settings-drift.sh +8 -5
  590. package/runtime/prime/bin/lib/startup-restart.sh +41 -0
  591. package/runtime/prime/bin/lib/worktree-links.sh +92 -0
  592. package/runtime/prime/bin/memory-push.sh +6 -0
  593. package/runtime/prime/bin/merge-gate.sh +498 -0
  594. package/runtime/prime/bin/notify.sh +5 -2
  595. package/runtime/prime/bin/page-access.sh +103 -0
  596. package/runtime/prime/bin/person.sh +13 -2
  597. package/runtime/prime/bin/pi-branch-policy.mjs +37 -0
  598. package/runtime/prime/bin/pi-observe-context.mjs +97 -4
  599. package/runtime/prime/bin/pi-render-spec.mjs +0 -1
  600. package/runtime/prime/bin/pi-spirit-discovery.mjs +34 -0
  601. package/runtime/prime/bin/post-update.sh +181 -0
  602. package/runtime/prime/bin/prime-render-spec.mjs +0 -1
  603. package/runtime/prime/bin/prime-session-start.sh +3 -1
  604. package/runtime/prime/bin/publish-artifact.sh +89 -42
  605. package/runtime/prime/bin/qa-inventory.sh +2 -2
  606. package/runtime/prime/bin/quest.sh +1 -1
  607. package/runtime/prime/bin/records.sh +11 -0
  608. package/runtime/prime/bin/reflexes/05-vitals.sh +9 -0
  609. package/runtime/prime/bin/reflexes/10-open-items.sh +12 -0
  610. package/runtime/prime/bin/reflexes/15-retrieval.sh +8 -0
  611. package/runtime/prime/bin/reflexes/20-nightly.sh +100 -0
  612. package/runtime/prime/bin/reflexes/20-sandbox.sh +85 -0
  613. package/runtime/prime/bin/reflexes/30-cost.py +116 -0
  614. package/runtime/prime/bin/reflexes/40-shells.py +51 -0
  615. package/runtime/prime/bin/reflexes/README.md +61 -0
  616. package/runtime/prime/bin/reflexes.sh +7 -0
  617. package/runtime/prime/bin/runtime-identity.sh +140 -42
  618. package/runtime/prime/bin/screenshot.sh +77 -0
  619. package/runtime/prime/bin/scroll.sh +1 -1
  620. package/runtime/prime/bin/search.sh +31 -5
  621. package/runtime/prime/bin/session-autosave.sh +6 -3
  622. package/runtime/prime/bin/session-id.sh +147 -0
  623. package/runtime/prime/bin/session-log.sh +19 -0
  624. package/runtime/prime/bin/session-record.sh +26 -0
  625. package/runtime/prime/bin/settings.sh +13 -8
  626. package/runtime/prime/bin/spirit-discovery-claude.sh +4 -0
  627. package/runtime/prime/bin/spirit-discovery-codex.sh +4 -0
  628. package/runtime/prime/bin/spirit-discovery-pi.sh +4 -0
  629. package/runtime/prime/bin/spirit-discovery-prime.sh +4 -0
  630. package/runtime/prime/bin/spirit-discovery.sh +4 -0
  631. package/runtime/prime/bin/startup-check.sh +1 -1
  632. package/runtime/prime/bin/telemetry.sh +11 -4
  633. package/runtime/prime/bin/test-baseline.sh +33 -5
  634. package/runtime/prime/bin/todo.sh +1 -1
  635. package/runtime/prime/bin/worktree-create.sh +15 -45
  636. package/runtime/prime/bin/worktree.sh +6 -0
  637. package/runtime/prime/docs/spirit-discovery.md +96 -0
  638. package/runtime/prime/egregore_runtime/__init__.py +18 -12
  639. package/runtime/prime/egregore_runtime/access.py +608 -0
  640. package/runtime/prime/egregore_runtime/access_cli.py +190 -0
  641. package/runtime/prime/egregore_runtime/adapters/invitation.py +5 -3
  642. package/runtime/prime/egregore_runtime/adapters/qmd.py +521 -47
  643. package/runtime/prime/egregore_runtime/admin_entry.py +56 -0
  644. package/runtime/prime/egregore_runtime/artifacts.py +222 -16
  645. package/runtime/prime/egregore_runtime/contracts.py +27 -0
  646. package/runtime/prime/egregore_runtime/eligibility.py +5 -12
  647. package/runtime/prime/egregore_runtime/episode_binding.py +16 -5
  648. package/runtime/prime/egregore_runtime/github_issues.py +2 -2
  649. package/runtime/prime/egregore_runtime/handoff_lookup.py +9 -20
  650. package/runtime/prime/egregore_runtime/harness_cli.py +674 -149
  651. package/runtime/prime/egregore_runtime/held.py +2436 -0
  652. package/runtime/prime/egregore_runtime/hosted_api.py +137 -0
  653. package/runtime/prime/egregore_runtime/identity.py +196 -65
  654. package/runtime/prime/egregore_runtime/identity_transfer.py +6 -2
  655. package/runtime/prime/egregore_runtime/ingest_cli.py +2 -2
  656. package/runtime/prime/egregore_runtime/ingest_index_cli.py +4 -16
  657. package/runtime/prime/egregore_runtime/installation.py +119 -0
  658. package/runtime/prime/egregore_runtime/investigation.py +64 -41
  659. package/runtime/prime/egregore_runtime/investigation_guidance.py +16 -11
  660. package/runtime/prime/egregore_runtime/issue_cli.py +51 -32
  661. package/runtime/prime/egregore_runtime/issue_reporting.py +4 -3
  662. package/runtime/prime/egregore_runtime/issue_triage_service.py +2 -2
  663. package/runtime/prime/egregore_runtime/issues.py +12 -6
  664. package/runtime/prime/egregore_runtime/knowledge.py +331 -5
  665. package/runtime/prime/egregore_runtime/knowledge_cli.py +57 -17
  666. package/runtime/prime/egregore_runtime/lifecycle.py +88 -22
  667. package/runtime/prime/egregore_runtime/lifecycle_cli.py +21 -13
  668. package/runtime/prime/egregore_runtime/line_ids.py +10 -0
  669. package/runtime/prime/egregore_runtime/memory_push.py +349 -0
  670. package/runtime/prime/egregore_runtime/observe.py +64 -25
  671. package/runtime/prime/egregore_runtime/observers.py +19 -0
  672. package/runtime/prime/egregore_runtime/optional_modules.py +13 -0
  673. package/runtime/prime/egregore_runtime/outputs_cli.py +321 -0
  674. package/runtime/prime/egregore_runtime/policy.py +651 -24
  675. package/runtime/prime/egregore_runtime/private_result.py +2 -1
  676. package/runtime/prime/egregore_runtime/projection.py +946 -0
  677. package/runtime/prime/egregore_runtime/quest_cli.py +20 -23
  678. package/runtime/prime/egregore_runtime/question_cli.py +15 -11
  679. package/runtime/prime/egregore_runtime/questions.py +10 -10
  680. package/runtime/prime/egregore_runtime/quests.py +10 -10
  681. package/runtime/prime/egregore_runtime/record_publish.py +548 -0
  682. package/runtime/prime/egregore_runtime/record_subject.py +564 -0
  683. package/runtime/prime/egregore_runtime/research_ingest.py +2 -4
  684. package/runtime/prime/egregore_runtime/runtime.py +169 -60
  685. package/runtime/prime/egregore_runtime/sandbox.py +194 -0
  686. package/runtime/prime/egregore_runtime/scroll_cli.py +22 -32
  687. package/runtime/prime/egregore_runtime/scrolls.py +23 -15
  688. package/runtime/prime/egregore_runtime/shadow.py +262 -0
  689. package/runtime/prime/egregore_runtime/spirit_discovery.py +487 -0
  690. package/runtime/prime/egregore_runtime/spirit_discovery_cli.py +25 -0
  691. package/runtime/prime/egregore_runtime/spirit_discovery_transport.py +18 -0
  692. package/runtime/prime/egregore_runtime/status.py +101 -44
  693. package/runtime/prime/egregore_runtime/status_cli.py +13 -5
  694. package/runtime/prime/egregore_runtime/sync.py +39 -21
  695. package/runtime/prime/egregore_runtime/taste.py +934 -0
  696. package/runtime/prime/egregore_runtime/taste_cli.py +242 -0
  697. package/runtime/prime/egregore_runtime/taste_rules.py +91 -0
  698. package/runtime/prime/egregore_runtime/telemetry.py +26 -3
  699. package/runtime/prime/egregore_runtime/todo_cli.py +15 -12
  700. package/runtime/prime/egregore_runtime/todos.py +3 -2
  701. package/runtime/prime/egregore_runtime/upgrade.py +85 -58
  702. package/runtime/prime/egregore_runtime/writeback.py +330 -24
  703. package/runtime/prime/manifest.json +66 -5
  704. package/runtime/claude/bin/thread.sh +0 -9
  705. package/runtime/claude/egregore_runtime/admin_gate.py +0 -102
  706. package/runtime/claude/egregore_runtime/thread_cli.py +0 -173
  707. package/runtime/claude/egregore_runtime/threads.py +0 -521
  708. package/runtime/codex/bin/thread.sh +0 -9
  709. package/runtime/codex/egregore_runtime/admin_gate.py +0 -102
  710. package/runtime/codex/egregore_runtime/thread_cli.py +0 -173
  711. package/runtime/codex/egregore_runtime/threads.py +0 -521
  712. package/runtime/pi/bin/thread.sh +0 -9
  713. package/runtime/pi/egregore_runtime/admin_gate.py +0 -102
  714. package/runtime/pi/egregore_runtime/thread_cli.py +0 -173
  715. package/runtime/pi/egregore_runtime/threads.py +0 -521
  716. package/runtime/prime/bin/thread.sh +0 -9
  717. package/runtime/prime/egregore_runtime/admin_gate.py +0 -102
  718. package/runtime/prime/egregore_runtime/thread_cli.py +0 -173
  719. package/runtime/prime/egregore_runtime/threads.py +0 -521
@@ -48,7 +48,7 @@ main-loop-only: render inline, then print
48
48
  `bash bin/loom.sh footer view --override` and mark telemetry as an override.
49
49
  For the deterministic renderer:
50
50
 
51
- 1. Resolve `ROUTE=$(bash bin/loom.sh route view)`. When `bin/loom.sh` is not
51
+ 1. Resolve the route: run `bash bin/loom.sh route view` and read the JSON line it prints. When `bin/loom.sh` is not
52
52
  present (Loom is internal-only and does not ship in the OSS distribution),
53
53
  skip route resolution and the footer entirely and follow the script route
54
54
  below — it is the framework default and needs no Loom.
@@ -183,11 +183,14 @@ Picking the five ids is judgment and stays in the main loop; the brief file
183
183
  rides into the render through `--` and participates in the cache key.
184
184
 
185
185
  Pick the five ids from the substance, one line of judgment each (e.g. a
186
- strategy prep doc → decide · operators · editorial · vellum · decisive; a
187
- public explainer → persuade · newcomer · marketing · loam · quiet). The brief
188
- drives palette + grammar treatment; the designed layout (nav · hero · anchored
189
- sections) renders regardless. If the checked-out generative-ui layer is
190
- unavailable, render without `--brief`; never fetch it or block on the trace.
186
+ strategy prep doc → decide · operators · editorial · ledger · decisive; a
187
+ public explainer → persuade · newcomer · marketing · ledger · quiet). For the
188
+ palette, use `ledger`, the registry default pair (`sovereign`), unless the
189
+ content has a stated reason for another registered pair; a palette with no
190
+ registered pair is never a default pick. The brief drives palette + grammar
191
+ treatment; the designed layout (nav · hero · anchored sections) renders
192
+ regardless. If the checked-out generative-ui layer is unavailable, render
193
+ without `--brief`; never fetch it or block on the trace.
191
194
 
192
195
  The deterministic renderer already owns its light/dark theme contract. Do not
193
196
  invoke or reread a separate visual-theme skill for an ordinary render. Apply
@@ -216,14 +219,36 @@ picking wrong is the single most common way a composed render lands badly.
216
219
 
217
220
  **Procedure (run inline — never delegate; see the compose note in Loom routing):**
218
221
 
219
- 1. Read the source document in full.
222
+ 1. Read the source document in full. Then read what people have said they
223
+ like in generated interfaces and keep it as context: words to consider,
224
+ never a template to copy. `{task}` is a few words naming this work:
225
+
226
+ ```bash
227
+ bash bin/genui.sh taste --task '{task}' --form view
228
+ ```
229
+
220
230
  2. Start from the scaffold: `.claude/skills/view/compose-scaffold.html` (copy it;
221
- it carries the complete Meridian chrome — vellum/nocturne/loam tokens, fonts,
222
- sticky nav, theme toggle, contours — and a documented component kit). You fill
223
- content; you do **not** rebuild the chrome or re-pick colors.
231
+ it carries the chrome — fonts, sticky nav, theme toggle, contours — and a
232
+ documented component kit). You fill content; you do **not** rebuild the
233
+ chrome or invent colors.
224
234
  3. Walk the UGI graph for the register/palette/grammar (as above) and stamp the
225
- manifest `register`/`grammar` + the footer trail. Pick the palette by
226
- substance: vellum (strategy/decision), loam (warm/instructional), etc.
235
+ manifest `register`/`grammar` + the footer trail. For the palette, use the
236
+ registry default pair (`sovereign`) unless the content has a stated reason
237
+ for another registered pair. The scaffold predates the registry: its theme
238
+ blocks are the `meridian` pair (`vellum`, `nocturne`) plus an older `loam`
239
+ block, and its header note to leave them in place no longer holds. Take the
240
+ chosen pair's two theme blocks from the first of these files that exists:
241
+ - `packages/design-system/dist/egregore-design.css` (the source repository)
242
+ - `packages/egregore-artifacts/lib/vendor/design-system/dist/egregore-design.css`
243
+ - `lib/vendor/design-system/dist/egregore-design.css` inside the installed
244
+ `egregore-artifacts` package that `bin/view-render.sh` runs
245
+
246
+ Replace all three scaffold blocks with them; match the `<html>` attributes,
247
+ the manifest `pair` and `resolvedTheme`, and the toggle's theme ids and
248
+ label to that pair; and point the scaffold's meridian-only names
249
+ (`--prussian*`, `--brass*`, `--teal`, `--rose`, `--contour`) at role tokens.
250
+ If none of the three files exists, keep the scaffold's `meridian` blocks and
251
+ say so in the report.
227
252
  4. **Decide the register FIRST — editorial or technical.** This governs every
228
253
  sentence you then write, and it is not a style preference; it is what the
229
254
  document *is*. Ask: does a reader come here to be *persuaded of a view*, or
@@ -262,15 +287,25 @@ picking wrong is the single most common way a composed render lands badly.
262
287
  - technical renders lean on captioned tables, `Decision:` blocks, numbered
263
288
  rationale lists, and `.note`/`.note.caution` for limitations and hazards;
264
289
  they use `.hl`/`.readout` sparingly and never as a substitute for a heading
290
+ - **Highlights: no side stripes.** Never draw a coloured bar down one side
291
+ of a box. In the scaffold, `.hl` is the quiet status panel (6% tone tint,
292
+ 1px tone hairline, 12px radius) whose `.k` label carries the tone's shape:
293
+ ● for the plain `.hl`, ▲ and ■ for its warn and critical variants.
294
+ `.readout` is the key point: bigger type, no box. Typed renders take the
295
+ same treatments from the kit's recipe classes
296
+ (`packages/egregore-artifacts/lib/recipe.js`): `.eg-mark` for a marker
297
+ under the words, `.eg-margin` with an `.eg-label` for a label in the
298
+ margin, `.eg-quote` for a quote with a hanging opening mark, and
299
+ `.eg-panel` with a shaped `.eg-label` for status
265
300
  - **transformation in technical register means structure, not voice** — split
266
301
  prose into tables, number the rationale, surface the decisions; do not
267
302
  rewrite the author's claims into slogans
268
303
  - nav links: one per composed section, to its `id` anchor
269
304
  6. **Never inline a hex in content** — every theme-sensitive color is a
270
305
  `var(--token)`, or the toggle breaks dark mode. The kit already obeys this.
271
- Verify before opening: every `var(--x)` used must be defined in **both**
272
- `[data-theme="vellum"]` and `[data-theme="nocturne"]`, or dark mode breaks
273
- silently on that element.
306
+ Verify before opening: every `var(--x)` used must be defined in **both** of
307
+ the chosen pair's theme blocks (for `sovereign`: `[data-theme="ledger"]` and
308
+ `[data-theme="bedrock"]`), or dark mode breaks silently on that element.
274
309
  7. Write to `/tmp/egregore-artifacts/composed-{slug}.html` and open directly
275
310
  (`open <path>`), then report the path + `Renderer: composed (band 5, inline)`.
276
311
 
@@ -302,6 +337,7 @@ manage publication transport itself. If no Runtime publication adapter is
302
337
  available, keep the local artifact and say publishing is unavailable rather
303
338
  than falling back to a legacy script. Notification consent remains separate.
304
339
 
340
+
305
341
  ### 4. Report
306
342
 
307
343
  Report the exact HTML path returned by the renderer or written by composition;
@@ -314,7 +350,7 @@ do not infer a filename from the examples below.
314
350
 
315
351
  Only after an approved SHARE action returns a URL, append:
316
352
  ```
317
- ◆ https://egregore.xyz/view/{org_slug}/board (stable — refresh for latest)
353
+ ◆ {receipt.url} (use the exact URL returned by the approved publication)
318
354
  ```
319
355
  Read `org_slug` from `egregore.json`.
320
356
 
@@ -6,7 +6,7 @@
6
6
  How to use: copy this file, then
7
7
  1. fill <title>, the manifest `register`/`grammar`, nav brand + links,
8
8
  the hero (series / h1 / standfirst / chips), and the footer.
9
- 2. replace the <!-- COMPONENTS: … --> region with composed sections built
9
+ 2. replace the COMPONENTS comment region with composed sections built
10
10
  from the component kit below — do NOT mirror the markdown; transform
11
11
  the substance into the grammar (statement titles, panels, cards, …).
12
12
  3. every theme-sensitive color MUST be a var(--token). Never inline hex
@@ -24,9 +24,9 @@
24
24
  <script type="application/json" id="egregore-design-manifest">{"system":"egregore-design-convention","version":"0.3.0","lineage":"meridian","pair":"meridian","mode":"auto","resolvedTheme":"vellum","target":"browser","register":"__REGISTER__","grammar":"__GRAMMAR__","composed":true}</script>
25
25
  <style>
26
26
  :root{--serif:"Fraunces",Georgia,serif;--sans:"Hanken Grotesk",system-ui,sans-serif;--mono:"IBM Plex Mono",ui-monospace,monospace;--ease:cubic-bezier(.22,.61,.36,1)}
27
- [data-theme="vellum"]{--paper:#eceef2;--paper-2:#e2e6ec;--card:#f8fafc;--ink:#15212e;--ink-soft:#4d5a68;--ink-faint:#8492a0;--line:#cbd4de;--line-soft:#dde3ea;--prussian:#2c4a6b;--prussian-bright:#3f74ad;--brass:#9a7521;--brass-bright:#c0962f;--teal:#1d7a6e;--rose:#a8493e;--t1:#9a7521;--t1-bg:#f3ead0;--t2:#1d7a6e;--t2-bg:#ddefea;--t3:#a8493e;--t3-bg:#f4ddd7;--contour:#bcc6d2;--shadow:0 1px 2px rgba(21,33,46,.06),0 12px 34px -18px rgba(21,33,46,.34)}
28
- [data-theme="nocturne"]{--paper:#0e151d;--paper-2:#131c26;--card:#18222e;--ink:#e7ecf2;--ink-soft:#aab6c2;--ink-faint:#76838f;--line:#2a3744;--line-soft:#202b36;--prussian:#5b8cc0;--prussian-bright:#7aa9d8;--brass:#d8b25a;--brass-bright:#e7c878;--teal:#3fb0a0;--rose:#d2796b;--t1:#d8b25a;--t1-bg:#2c2616;--t2:#3fb0a0;--t2-bg:#152b29;--t3:#d2796b;--t3-bg:#2c1c18;--contour:#283543;--shadow:0 1px 2px rgba(0,0,0,.4),0 18px 40px -20px rgba(0,0,0,.7)}
29
- [data-theme="loam"]{--paper:#f0ece2;--paper-2:#e7e1d3;--card:#faf7f0;--ink:#241d12;--ink-soft:#5c4f3a;--ink-faint:#8f8168;--line:#d3c9b4;--line-soft:#e2dac8;--prussian:#5a6b3a;--brass:#9a6b21;--teal:#3a7a5c;--rose:#a85a3e;--t1:#9a6b21;--t1-bg:#efe2c8;--t2:#3a7a5c;--t2-bg:#dcebe0;--t3:#a85a3e;--t3-bg:#f2ded4;--contour:#c8bca0;--shadow:0 1px 2px rgba(36,29,18,.06),0 12px 34px -18px rgba(36,29,18,.3)}
27
+ [data-theme="vellum"]{--paper:#eceef2;--paper-2:#e2e6ec;--card:#f8fafc;--ink:#15212e;--ink-soft:#4d5a68;--ink-faint:#8492a0;--line:#cbd4de;--line-soft:#dde3ea;--prussian:#2c4a6b;--prussian-bright:#3f74ad;--brass:#9a7521;--brass-bright:#c0962f;--teal:#1d7a6e;--rose:#a8493e;--t1:#9a7521;--t1-bg:#f3ead0;--t2:#1d7a6e;--t2-bg:#ddefea;--t3:#a8493e;--t3-bg:#f4ddd7;--ok:#1d7a6e;--ok-bg:#ddefea;--note:#3a6b96;--note-bg:#ddeaf6;--warn:#8c680b;--warn-bg:#f3ead0;--critical:#a8493e;--critical-bg:#f4ddd7;--neutral:#667381;--neutral-bg:#e4e8ed;--contour:#bcc6d2;--shadow:0 1px 2px rgba(21,33,46,.06),0 12px 34px -18px rgba(21,33,46,.34)}
28
+ [data-theme="nocturne"]{--paper:#0e151d;--paper-2:#131c26;--card:#18222e;--ink:#e7ecf2;--ink-soft:#aab6c2;--ink-faint:#76838f;--line:#2a3744;--line-soft:#202b36;--prussian:#5b8cc0;--prussian-bright:#7aa9d8;--brass:#d8b25a;--brass-bright:#e7c878;--teal:#3fb0a0;--rose:#d2796b;--t1:#d8b25a;--t1-bg:#2c2616;--t2:#3fb0a0;--t2-bg:#152b29;--t3:#d2796b;--t3-bg:#2c1c18;--ok:#3fb0a0;--ok-bg:#152b29;--note:#6fa6d4;--note-bg:#1a2834;--warn:#d8b25a;--warn-bg:#2c2616;--critical:#d2796b;--critical-bg:#2c1c18;--neutral:#8694a2;--neutral-bg:#21262b;--contour:#283543;--shadow:0 1px 2px rgba(0,0,0,.4),0 18px 40px -20px rgba(0,0,0,.7)}
29
+ [data-theme="loam"]{--paper:#f0ece2;--paper-2:#e7e1d3;--card:#faf7f0;--ink:#241d12;--ink-soft:#5c4f3a;--ink-faint:#8f8168;--line:#d3c9b4;--line-soft:#e2dac8;--prussian:#5a6b3a;--brass:#9a6b21;--teal:#3a7a5c;--rose:#a85a3e;--t1:#9a6b21;--t1-bg:#efe2c8;--t2:#3a7a5c;--t2-bg:#dcebe0;--t3:#a85a3e;--t3-bg:#f2ded4;--ok:#3a5a40;--ok-bg:#e7eee2;--note:#3d6a78;--note-bg:#d9ecf2;--warn:#8e6900;--warn-bg:#f3e9cf;--critical:#a4543b;--critical-bg:#f0ddd2;--neutral:#746a5a;--neutral-bg:#eae6dd;--contour:#c8bca0;--shadow:0 1px 2px rgba(36,29,18,.06),0 12px 34px -18px rgba(36,29,18,.3)}
30
30
 
31
31
  /* ── base ── */
32
32
  *{box-sizing:border-box;margin:0;padding:0}
@@ -113,12 +113,17 @@ h2{font-family:var(--serif);font-weight:430;font-size:clamp(1.9rem,3.4vw,2.6rem)
113
113
  .verdict-band{background:var(--t2-bg);border:1px solid var(--t2);border-radius:12px;padding:16px 22px;font:500 .82rem/1.7 var(--mono);color:var(--ink)}
114
114
  .verdict-band b{color:var(--t2)}
115
115
 
116
- /* ── highlight callout ── */
117
- .hl{background:var(--t2-bg);border:1px solid var(--t2);border-radius:14px;padding:22px 26px;margin:18px 0}
118
- .hl.brass{background:var(--t1-bg);border-color:var(--t1)} .hl.rose{background:var(--t3-bg);border-color:var(--t3)}
119
- .hl .k{font:600 .66rem/1 var(--mono);letter-spacing:1.5px;text-transform:uppercase;color:var(--t2)}
120
- .hl.brass .k{color:var(--t1)} .hl.rose .k{color:var(--t3)}
121
- .hl h3{font-family:var(--serif);font-weight:500;font-size:1.3rem;margin:8px 0 10px}
116
+ /* ── highlight: the one thing to land, as a quiet status panel (no side stripe) ──
117
+ 6% tone tint, a 1px tone hairline all round, 12px radius. The tone comes from
118
+ the role tokens and the .k label carries its shape, so it reads in greyscale:
119
+ .hl = ok ● (decided) · .hl.brass = warn ▲ (owed, the ask) · .hl.rose = critical ■ (risk) */
120
+ .hl{--tone:var(--ok);background:color-mix(in oklab,var(--tone) 6%,var(--card));border:1px solid color-mix(in oklab,var(--tone) 30%,transparent);border-radius:12px;padding:16px 20px 18px;margin:18px 0}
121
+ .hl.brass{--tone:var(--warn)} .hl.rose{--tone:var(--critical)}
122
+ .hl .k{display:inline-flex;align-items:center;gap:8px;font:500 .69rem/1 var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--tone)}
123
+ .hl .k::before{content:"";width:8px;height:8px;background:currentColor;border-radius:50%;flex:none}
124
+ .hl.brass .k::before{border-radius:0;width:9px;clip-path:polygon(50% 0,100% 100%,0 100%)}
125
+ .hl.rose .k::before{border-radius:1px}
126
+ .hl h3{font-family:var(--serif);font-weight:500;font-size:1.3rem;margin:10px 0 8px}
122
127
  .hl p{font-size:.96rem} .hl .num{font-family:var(--serif);font-style:italic;color:var(--ink)}
123
128
 
124
129
  /* ── Q/A ledger ── */
@@ -163,9 +168,10 @@ h2{font-family:var(--serif);font-weight:430;font-size:clamp(1.9rem,3.4vw,2.6rem)
163
168
  .dot{display:inline-block;width:18px;height:18px;line-height:18px;border-radius:50%;font-size:.72rem;font-weight:700}
164
169
  .dot.ok{background:var(--t2-bg);color:var(--t2)} .dot.half{background:var(--t1-bg);color:var(--t1)} .dot.no{background:var(--t3-bg);color:var(--t3)} .dot.neu{background:var(--paper-2);color:var(--ink-faint)}
165
170
 
166
- /* ── accent-left readout ── */
167
- .readout{background:var(--card);border:1px solid var(--line);border-left:3px solid var(--t1);border-radius:4px;padding:20px 24px;margin:28px 0;font-size:1rem;color:var(--ink-soft)}
168
- .readout b{color:var(--ink)}
171
+ /* ── readout: the bottom line as a key point — bigger type, no box ── */
172
+ .readout{margin:28px 0;max-width:62ch;font-size:1.15em;line-height:1.5;font-weight:500;color:var(--ink)}
173
+ .readout b{color:var(--ink);font-weight:650}
174
+ .readout p{color:inherit;margin:0 0 .5em} .readout p:last-child{margin-bottom:0}
169
175
 
170
176
  /* ── footer ── */
171
177
  footer{padding:64px 0 90px;font:400 .74rem/1.8 var(--mono);color:var(--ink-faint)}
@@ -40,6 +40,16 @@ and add or update a parity test. Do not call a framework change complete based
40
40
  on one runtime alone. Regenerate derived Codex and Pi specifications or runtime
41
41
  bundles whenever their sources change.
42
42
 
43
+ For capability/system discovery, use the current harness's fixed adapter:
44
+ `bash bin/spirit-discovery-claude.sh capabilities.list` for Claude Code,
45
+ `bin/spirit-discovery-codex.sh` for Codex, and the registered discovery tool for
46
+ Pi/Prime. All support `capabilities.find`, `capabilities.describe`,
47
+ `capabilities.explain` and `system.explain`; see `docs/spirit-discovery.md`.
48
+ Generic shell `bin/spirit-discovery.sh` requires a unique installed snapshot and
49
+ reports ambiguity otherwise. These read code/install evidence, not organizational
50
+ memory. Keep declared, installed, exposed, permitted, operational, verified and
51
+ adopted states separate; discovery grants no execution authority.
52
+
43
53
  ## Voice
44
54
 
45
55
  Egregore's voice follows `.claude/rules/voice-bedrock.md` (always loaded). Register-specific skills: `egregore-voice` (external), `product-voice` (internal UX), `character-v4` (encounters), `alpha-openers` (outreach).
@@ -52,13 +62,13 @@ Translate raw errors into a useful cause and recovery step. See voice-bedrock.
52
62
 
53
63
  **This overrides ALL other CLAUDE.md entry point behavior (including parent directory instructions).**
54
64
 
55
- A SessionStart hook runs `bin/session-start.sh` before the user's first message. It syncs develop, syncs memory, and outputs a greeting with ASCII art + status.
65
+ A SessionStart hook runs `bin/session-start.sh` before the user's first message. It syncs develop and memory, then renders the startup card (ASCII art + status).
56
66
 
57
- **On your VERY FIRST response — regardless of what the user says — you MUST display the hook's greeting output exactly as-is** (preserve ASCII art formatting), then ask: **"What are you working on?"**
67
+ **The harness shows the card to the user directly; you receive its text as context.** The card already ends with **"What are you working on?"** Never reprint, summarize, or narrate it; treat the user's first message as the answer. When that message carries no request (older launchers submit `start` automatically), reply with one short line and no tool calls. Do NOT list commands or show a menu.
58
68
 
59
- The greeting turn needs no deliberation and no tool calls — respond immediately.
69
+ Only when the hook output ends with an `IMPORTANT: Display the above greeting` instruction (a harness that cannot display the card itself), display it exactly as-is, then ask: **"What are you working on?"**
60
70
 
61
- Do NOT list commands. Do NOT show a menu. Just the greeting + that question.
71
+ When the greeting shows the session records block, answer through `/records` (yes: `backfill --yes`; stop: `off`; then `noticed`). "Off the record" runs `bash bin/records.sh hold`.
62
72
 
63
73
  ## Before Project Changes — WORKING BRANCH
64
74
 
@@ -88,7 +98,7 @@ The WorktreeCreate hook handles everything automatically: creates `dev/{author}/
88
98
 
89
99
  **Fallback:** If `EnterWorktree` fails, resolve `{base}` with `_get_base_branch`, then use `git checkout --no-track -b dev/{author}/{slug} origin/{base}`. A task branch starts from the integration branch but must not track it; the first publish sets upstream to the same-name remote task branch.
90
100
 
91
- 4. Graph topic: the WorktreeCreate hook records the session's topic and branch on the graph itself (it reads `.egregore-session-id` for you). Only the fallback and topic-pivot paths below, which bypass the hook, need it by hand — fire-and-forget: `bash bin/graph-op.sh set-current-topic "topic from slug" "dev/author/slug" 2>/dev/null &`. Never assemble the session id with a `$(cat …)` substitution: a worktree-isolated session refuses that shape and the write silently never happens.
101
+ 4. Graph topic: the WorktreeCreate hook records the session's topic and branch on the graph itself (it reads `.egregore-session-id` for you). Only the fallback and topic-pivot paths below, which bypass the hook, need it by hand — fire-and-forget: `bash bin/graph-op.sh set-current-topic "topic from slug" "dev/author/slug" 2>/dev/null &`. Never assemble the session id with a `$(cat …)` substitution: a worktree-isolated session refuses that shape and the write silently never happens. The shapes the worktree guard refuses and their plain forms are in `.claude/context/plain-shell.md`; split a refused command instead of retrying it.
92
102
 
93
103
  ### Starting-work UX contract
94
104
 
@@ -144,27 +154,7 @@ return as picking up a living thread, not reconstructing a Git session.
144
154
 
145
155
  ### Handoff claiming
146
156
 
147
- If `addressed_to_user` handoffs exist and the user is picking one up, create the IMPLEMENTS link after branch creation:
148
- ```bash
149
- bash bin/graph-op.sh claim-handoff "$SESSION_ID" "$HANDOFF_SESSION_ID" 2>/dev/null &
150
- ```
151
-
152
- **Auto-checkout repos from handoff**: After claiming, check the `addressed_rich` context for `repoState`. If the handoff includes repo state (non-empty `repoState` array), check out the handoff's branches in each managed repo:
153
-
154
- ```bash
155
- PARENT_DIR="$(cd .. && pwd)"
156
- # For each entry in repoState:
157
- REPO_DIR="$PARENT_DIR/$REPO_NAME"
158
- if [ -d "$REPO_DIR/.git" ] || [ -f "$REPO_DIR/.git" ]; then
159
- git -C "$REPO_DIR" fetch origin "$BRANCH" --quiet 2>/dev/null
160
- git -C "$REPO_DIR" checkout "$BRANCH" 2>/dev/null || \
161
- git -C "$REPO_DIR" checkout -b "$BRANCH" "origin/$BRANCH" 2>/dev/null
162
- fi
163
- ```
164
-
165
- Report results: `✓ Checked out {branch} in {repo1}, {repo2}`. If a branch no longer exists (PR was merged): `◐ {repo}: PR #{N} merged — on {base}`. This works in both local and connected modes (pure git).
166
-
167
- If `repoState` is absent or empty (old handoff format), skip auto-checkout silently.
157
+ When the user picks up a handoff addressed to them, follow `.claude/context/handoff-claiming.md` after branch creation: it claims the handoff and checks out the branches its `repoState` names in each managed repo.
168
158
 
169
159
  **Exceptions** — skip branching when:
170
160
  - User says `/branch` (doing it themselves)
@@ -202,6 +192,8 @@ Plan mode is **not** blocked by branch-guard — you can enter plan mode on deve
202
192
 
203
193
  If hook output contains `onboarding_needed`, invoke `/onboarding` instead of the greeting.
204
194
 
195
+
196
+
205
197
  ---
206
198
 
207
199
  ## Config Files
@@ -226,7 +218,7 @@ answers it: `open-handoffs`, `pending-questions`, `lineage`, or
226
218
  `meeting-history`. Verify projection freshness/coverage and open its canonical
227
219
  `evidencePath` before acting. Canonical Markdown wins on disagreement.
228
220
 
229
- Run `catalog` only when the route is unclear. Named reads return bounded stable fields and exact canonical `evidencePath` pointers; open only the returned files needed to answer. When a read reports partial coverage, use `unprojectedPaths` rather than claiming those files are represented in the graph. Use `bin/graph.sh` for unsupported Neo4j queries and never construct curl calls directly. See DEVELOPMENT.md §1 for the schema. Local recall uses Runtime `find`/`open`.
221
+ Run `catalog` only when the route is unclear. Open only the returned `evidencePath` files needed to answer; on partial coverage, name `unprojectedPaths` instead of claiming them. Use `bin/graph.sh` for unsupported Neo4j queries and never construct curl calls directly (schema: DEVELOPMENT.md §1).
230
222
 
231
223
  ## Egregore Retrieval Beat
232
224
 
@@ -237,60 +229,42 @@ For each user-directed organizational lookup, show exactly one visible line:
237
229
  - retrieval that actually queries the connected graph:
238
230
  `⌕ Egregore Connect · searching your organization’s memory and relationships`
239
231
 
240
- When `EGREGORE_ORG_CONTEXT_V1` is attached, reuse its authorized evidence.
241
- For a remaining gap continue a Runtime investigation, preserving earlier findings.
242
- Follow `.claude/context/retrieval-investigation.md`: the model chooses keyword,
243
- semantic, hybrid, filename, literal, or date inventory; Runtime owns permissions,
244
- evidence history, pages and per-prompt limits. Empty results allow refinements
245
- within the requested dates. Never relax the date boundary to manufacture coverage.
246
-
247
- **Scope.** Egregore Runtime is for organizational recall only: team memory,
248
- decisions, handoffs, prior work. Code, files, Git, and tests use the harness's
249
- normal tools, with no beat and no Runtime call.
250
-
251
232
  **Visibility is the contract.** Emit it verbatim as a standalone assistant
252
233
  message before the first tool call that performs the organizational recall
253
234
  (the `bin/search.sh` query or a graph read). Tool output does not satisfy it.
254
- Do not paraphrase the line.
235
+ Do not paraphrase the line. Emit once per episode.
236
+ Never name `Egregore Connect` unless a graph read will actually run.
255
237
 
256
- Use Connect only for a graph traversal that actually runs. Emit once per
257
- episode.
238
+ **Scope.** Egregore Runtime is for organizational recall only: team memory,
239
+ decisions, handoffs, prior work. Code, files, Git, and tests use the harness's
240
+ normal tools, with no beat and no Runtime call. Startup hydration, graph
241
+ writes, ingestion, background sync, maintenance, and internal queries get no beat.
258
242
 
259
243
  **Routing:** Organizational recall always enters Egregore Runtime. The model is
260
244
  the semantic intent authority, deciding from meaning rather than fixed phrases.
245
+ Do not run retrieval on unrelated prompts or infer graph from recall intent.
261
246
  Prompt hooks attach identity and guidance only; they never retrieve evidence.
262
- Without attached context, choose the appropriate Runtime operation:
247
+ The full retrieval contract arrives with the session's first prompt as
248
+ `EGREGORE_ACTOR_CONTEXT_V1` (later prompts carry a reminder); follow it.
249
+ When `EGREGORE_ORG_CONTEXT_V1` is attached, reuse its authorized evidence.
250
+ When the full contract is not in your context (a subagent, a missed hook, or
251
+ after a compaction), start with
263
252
 
264
253
  ```bash
265
254
  bash bin/search.sh find "<query>" --kind <kind> --context-packet
266
255
  ```
267
256
 
268
- Choose `filename`, `literal`, or `dates` for canonical file lookups; `keyword`
269
- for BM25; `semantic` for paraphrases; `hybrid` for combined ranking. No mode
270
- must run first. Open necessary sources together with `bash bin/search.sh open
271
- memory/path-a.md memory/path-b.md`. Runtime retains request state; do not write
272
- JSON operations, episode arguments, or gap explanations for normal retrieval.
273
- Use `find` for model-led discovery; `query` is a compatibility command. Read
274
- canonical sources through `search.sh open`, never a raw file-read tool or shell
275
- read. An adequate excerpt already supports an answer; no extra open is needed.
257
+ and follow `.claude/context/retrieval-investigation.md`.
258
+ Open necessary sources together with `bash bin/search.sh open`; never read
259
+ memory with a raw file tool, `grep` or `ls`. Do not `cd` into the sibling memory repository.
260
+ Never relax the date boundary to manufacture coverage.
276
261
 
277
262
  `--context-packet` attaches the evidence privately; the visible output is the
278
263
  attribution line alone. Never re-print ranked results or raw JSON.
279
264
 
280
- Do not resolve `memory/` to its sibling repo or start with raw `grep`/`ls`.
281
- Search attaches no graph by default. Open a source only when its excerpt
282
- cannot support a necessary claim. For current
283
- team/person synthesis, retain the requested subject and choose a `recent_days`
284
- window. Use date filters for a known topic, or a bounded date inventory for
285
- a recent-work overview. `/activity`, `/dashboard`, and `/project`
286
- display bounded status surfaces only when named or directly requested as a
287
- card. Explained syntheses of current organizational work and prior-work
288
- discovery are Runtime/QMD recall. Do not run retrieval on unrelated prompts or
289
- infer graph from recall intent.
290
-
291
- Do not emit the beat for code search, Git inspection, startup hydration, graph
292
- writes, ingestion, background sync, maintenance, or internal queries.
293
- Never name `Egregore Connect` unless a graph read will actually run.
265
+ `/activity`, `/dashboard`, and `/project` display bounded status surfaces only
266
+ when named or directly requested as a card.
267
+ Explained syntheses of current organizational work and prior-work discovery are Runtime/QMD recall.
294
268
 
295
269
  ## Notifications
296
270
 
@@ -332,12 +306,15 @@ Never repeat it.
332
306
 
333
307
  ## Memory
334
308
 
335
- `memory/` is a symlink to the memory repo defined in `egregore.json`. Key directories:
336
- - `people/` — team directory
337
- - `handoffs/` — session handoffs + `index.md`
338
- - `knowledge/decisions/` — org decisions
339
- - `knowledge/patterns/` — emergent patterns
340
- - `infrastructure/` — service registry (URLs, names, credential locations)
309
+ `memory/` links to the repo in `egregore.json`:
310
+ - `people/` — team
311
+ - `handoffs/` — handoffs and index
312
+ - `knowledge/decisions/` — decisions
313
+ - `knowledge/patterns/` — patterns
314
+ - `infrastructure/` — services and credential locations
315
+
316
+ Write memory through its commands, never the files: `/reflect` for decisions, `/handoff` for handoffs.
317
+
341
318
 
342
319
  Always use HTTPS for git operations — `github-auth.sh` handles credential storage.
343
320
 
@@ -356,9 +333,8 @@ needs) or escalate one tier (uncertainty). Full spec:
356
333
  ## Git Workflow
357
334
 
358
335
  `develop` is the default integration branch. A top-level
359
- `egregore.json.base_branch` replaces it for instances using another integration
360
- branch; `base_branch: "main"` is single-branch mode. Users never interact with
361
- git directly.
336
+ `egregore.json.base_branch` replaces it; `base_branch: "main"` is single-branch
337
+ mode. Users never interact with git directly.
362
338
 
363
339
  ```
364
340
  main ← selected `/release` candidates
@@ -372,10 +348,9 @@ develop ← CL integration (available internally)
372
348
  - **On launch**: syncs the configured base branch + memory. Does NOT create a branch.
373
349
  - **Branch creation**: required before project changes; read-only work stays put.
374
350
  - **Resuming**: rebase onto the configured base branch and continue.
375
- - **Read-only sessions**: no branch creation based on message count.
376
351
  - **`/save`**: pushes the working branch and opens a PR to the configured base. Auto-merges markdown-only PRs.
377
352
  - **Memory repo**: stays on main (separate repo, auto-merge).
378
- - **Never push directly to the configured base, main, or develop.** All changes flow through PRs.
353
+ - **Never push directly to the configured base, main, or develop.** Changes flow through PRs, merged with `bash bin/agent.sh merge <pr>`, never `gh pr merge`; a red check needs a receipt naming each failing job and why.
379
354
 
380
355
  ### Pull request format (all harnesses)
381
356
 
@@ -383,23 +358,17 @@ Every PR body follows `.claude/context/pr-format.md`, enforced by the `pr-format
383
358
 
384
359
  ### Commit format (all harnesses)
385
360
 
386
- Every commit follows `.claude/context/commit-format.md`: subject `type(scope): imperative summary` (≤ 72 chars, aim ≤ 50, lowercase, same grammar and type set as PR titles), body wrapped at 72 explaining what and why — never how, and git trailers on agent-authored commits (`Egregore-Session: <id>` from `.egregore-session-id`, plus the harness `Co-Authored-By` line). Background scripts commit as `chore(<subsystem>): …`, but a commit carrying real work derives its type/scope from the diff — the transport never masks the work. Git-generated messages (merges, reverts, autosquash fixups) keep their native form. Wording for commits and PRs follows `.claude/context/git-language.md`.
361
+ Every commit follows `.claude/context/commit-format.md`: subject `type(scope): imperative summary` (≤ 72 chars, aim ≤ 50, lowercase, same grammar and type set as PR titles), body wrapped at 72 explaining what and why — never how, and git trailers on agent-authored commits (`Egregore-Session: <id>` from `bash bin/session-id.sh`, plus the harness `Co-Authored-By` line). Background scripts commit as `chore(<subsystem>): …`, but a commit carrying real work derives its type/scope from the diff — the transport never masks the work. Git-generated messages (merges, reverts, autosquash fixups) keep their native form. Wording for commits and PRs follows `.claude/context/git-language.md`.
387
362
 
388
363
  ### Managed Repos
389
364
 
390
365
  Repos in `egregore.json` → `repos[]` are cloned as siblings (`../{repo}/`). Each entry can be a string or `{"name": "...", "description": "..."}`. Match user intent to the right repo using `description`. Same branching strategy. Use `git -C` with absolute paths — never `cd` into repos. `/save` scans all managed repos for uncommitted changes.
391
366
 
392
- ## Working Conventions
393
-
394
- - For unfamiliar org work, use Observe context; if absent, run `bash bin/search.sh find` with an appropriate lookup kind.
395
- - Document significant decisions in `memory/knowledge/decisions/`
396
- - After substantial sessions, log to `memory/handoffs/` and update `index.md`
397
-
398
367
  ## Command Awareness
399
368
 
400
369
  Invoke commands from user intent — don't wait for the slash. Each command file has a `## When to invoke` section. Load it for the full spec.
401
370
 
402
- **Core loop** — `/activity` `/dashboard` `/handoff` `/wrap` `/save` `/reflect` `/todo`
371
+ **Core loop** — `/activity` `/dashboard` `/handoff` `/wrap` `/save` `/reflect` `/todo` `/records`
403
372
  **Knowledge** — `/search` `/deep-reflect` `/archive` `/note` `/add` `/meeting` `/ingest` `/scroll` `/mock` `/audit`
404
373
  **Identity** — `/me` (view profile or set display name)
405
374
  **Coordination** — `/ask` `/quest` `/issue` `/invite` `/delete-user` `/announce`
@@ -411,17 +380,10 @@ Invoke commands from user intent — don't wait for the slash. Each command file
411
380
 
412
381
  **Disambiguation:**
413
382
  - Knowledge: `/reflect` (share-ready) · `/note` (half-baked) · `/deep-reflect` (deep research over memory — questions AND cross-referencing) · `/archive` (AI patterns) · `/audit` (evidence-mined forensic sweep of the org's own record — any target)
414
- - Exact lifecycle questions (latest/oldest handoff addressed to or sent by someone, open/unresolved) — recognize the intent from meaning and run the typed lookup `bash bin/search.sh handoffs [--mine|--sent|--addressed-to X] [--status open] [--order newest|oldest]` — deterministic, one beat, never a semantic query; empty result means say so.
415
- - Finding things — **the model chooses organizational retrieval through Runtime**.
416
- Reuse equivalent evidence and investigate distinct gaps through the same Runtime.
417
- Use `bash bin/search.sh find` or `open` and the shared investigation contract. Use Grep/Glob for code and exact errors, not org
418
- recall. Do not `cd` into the sibling memory repository.
419
- - Finding **something you generated** (a scroll, handoff, emissary, decision, any hosted egregore.xyz link): `bash bin/artifacts.sh find <query>`. Every generative surface records into memory — hosted artifacts self-register into `memory/artifacts/` at publish (committed+pushed, findable from any session); handoffs in `memory/handoffs/`, emissaries in `memory/handoffs/outbound/`, decisions/findings/patterns in `memory/knowledge/`. The finder searches all of them by **content, not just name**, ranks title/topic matches above body mentions, tags hits by type (`[document]`/`[handoff]`/`[emissary]`/`[decision]`), and surfaces the shareable URL — grep-first in OSS, search + graph when available. *"bring me the artifact where I laid out our GTM plan"* → this.
383
+ - Finding things — organizational recall through Runtime (Egregore Retrieval Beat); Grep/Glob for code and exact errors.
384
+ - Finding **something you generated** (a scroll, handoff, emissary, decision, any hosted egregore.xyz link): `bash bin/artifacts.sh find <query>` searches every generated record by content, tags its type and returns the shareable URL. *"bring me the artifact where I laid out our GTM plan"* → this.
420
385
  - Artifacts with questions: `/scroll` (living paper + embedded harvest, updates in place) · `/view` (static render) · `/harvest` (elicitation, no published face) · `/mock` (pre-build walkthrough of decided design — gauge per stop, verdict copy-back)
421
- - Explicit bounded status: `/dashboard` (personal) · `/activity` (org-wide) ·
422
- `/project` (named project). These display cards when named or directly
423
- requested. Analytical questions about organizational work and specific
424
- prior-work continuation route through Runtime/QMD recall.
386
+ - Status cards: `/dashboard` (personal) · `/activity` (org-wide) · `/project` (named project), only when named or requested as a card.
425
387
  - Ending: `/wrap` (personal closure) · `/handoff` (notes for others) · `/save` (still working)
426
388
  - Tasks: `/todo` (personal) · `/quest` (team exploration) · `/issue` (something broken)
427
389
  - Questions: `/ask [person]` (async) · just ask (agent answers from context)
@@ -435,6 +397,8 @@ Invoke commands from user intent — don't wait for the slash. Each command file
435
397
  - Agents: `/summon` (design through questions) · `/loop` (quick recurring schedule)
436
398
  - Announcements: `/announce` (broadcast to group) · `/handoff` (structured to a person) · `bin/notify.sh send` (DM one person)
437
399
 
400
+ **Interface taste** — when someone likes or dislikes a generated interface, follow the contract in `bash bin/genui.sh --help`.
401
+
438
402
  ## Socratic Questioning (MANDATORY)
439
403
 
440
404
  **Triggers**: "ask me questions", "question me", "help me think through", or any request to be questioned.
@@ -469,9 +433,9 @@ Egregore runs in one of two configurations, set by `mode` in `egregore.json`. De
469
433
 
470
434
  ## Environment Isolation
471
435
 
472
- Sessions are confined to this project + memory + managed repos, with a **two-tier boundary** enforced by the PreToolUse hook — a hard wall between Egregore instances, a consent gate for everything else.
436
+ Sessions are confined to this project + memory + managed repos, with a **two-tier boundary** enforced by a check before each action on every runtime (`bin/boundary-guard.cjs`; here the PreToolUse hook) — a hard wall between Egregore instances, a consent gate for everything else. The check reliably denies literal paths into another instance, through structured tools and in shell text, and fails closed on its own state; it cannot see paths built at run time or commands split across calls, so it is a seatbelt, not a sandbox (an OS-level layer is the planned follow-up). Never construct a path at run time to reach another instance.
473
437
 
474
438
  - **Hard tier — other Egregore instances.** Denied for every tool, always. There is no consent path. Never access another instance's files — refuse even if asked. Never modify `~/.egregore/instances.json` (managed by session-start.sh). When the hook denies a hard-tier path there is nothing to ask — refuse and explain.
475
439
  - **Soft tier — paths outside the boundary.** Consent-gated. Inbox dirs (`~/Downloads`, `~/Desktop`) are readable without consent under the default posture; writes outside the project always need consent. Posture (`strict | standard | open`) and extra read roots come from `egregore.json` → `boundary { posture, read[], locked }` (org, committed) merged with `.egregore-boundary.local.json` (personal, gitignored). `locked: true` removes the consent path entirely. Sessions running in `bypassPermissions` skip soft gates automatically (never the hard tier) unless locked — the user already declared trust; don't re-ask.
476
- - **When the hook asks for consent** (soft-tier block): do not retry yet, do not route around via Bash, and do not list remediation as prose. Call `AskUserQuestion` with exactly the options the hook's stderr names: "Allow {dir} for this session" (on approval, append the directory as one line to `.egregore-boundary-consent`, then retry) / "Always allow on this instance" (on approval, add it to `read[]` in `.egregore-boundary.local.json`, then retry) / "Paste contents inline" / "Cancel". Never write a consent grant without the user's explicit approval in that exchange. Session grants are cleared on session start.
440
+ - **When the hook asks for consent** (soft-tier block): do not retry yet, do not route around via Bash, and do not list remediation as prose. Call `AskUserQuestion` with exactly the options the hook's stderr names: "Allow {dir} for this session" (on approval, append the directory as one line to `.egregore-boundary-consent`, then retry) / "Always allow on this instance" (reads only, so a blocked write never offers it; on approval, add it to `read[]` in `.egregore-boundary.local.json`, then retry) / "Paste contents inline" / "Cancel". Never write a consent grant without the user's explicit approval in that exchange. Session grants are cleared on session start.
477
441
  - See DEVELOPMENT.md §3 for boundary details and `memory/knowledge/decisions/2026-07-08-boundary-hook-consent-design.md` for the design decisions