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
@@ -0,0 +1,438 @@
1
+ ---
2
+ name: view
3
+ description: "Generate a branded HTML artifact from Egregore data (quest, handoff, activity, board, network, or any document) and open it in the browser. Use for /view, 'render this', or 'show me visually'."
4
+ ---
5
+
6
+ Generate a branded HTML artifact from Egregore data and open it in the browser.
7
+
8
+ Works in both connected and local mode — resolves data from memory files, not the graph.
9
+
10
+ ## When to invoke
11
+
12
+ User says: "show me visually", "render this", "view as artifact", "open in browser",
13
+ "make this readable", "generate artifact", "show me [quest/handoff/plan]", "/view"
14
+
15
+ Not this: terminal formatting → just format in markdown · dashboard → `/dashboard`
16
+
17
+ Arguments: $ARGUMENTS (Optional: artifact type and/or name, or a file path)
18
+
19
+ ## Runtime source boundary
20
+
21
+ Resolve deictic requests from the current conversation before organizational
22
+ retrieval. When `this`, `that`, `it`, or `the above` unambiguously refers to
23
+ the single artifact just created, accepted, or shown, reuse its full content
24
+ already in context and stage it verbatim. If that content is collapsed or the
25
+ prior receipt supplies only a canonical path, open that exact path once through
26
+ `bin/search.sh open`; do not run `bin/search.sh query` to rediscover a known
27
+ artifact.
28
+
29
+ Resolve organizational sources from the attached authorized
30
+ `EGREGORE_ORG_CONTEXT_V1` block first. Do not repeat its retrieval or reopen
31
+ its already opened sources. When the requested source is absent, run one
32
+ Runtime query and open the selected canonical file through
33
+ `bin/search.sh open`; do not use raw `ls`, `find`, or graph traversal as an
34
+ authorization bypass. Local rendering is the default. Publishing or replacing
35
+ a stable hosted view requires an explicit `SHARE` request and checkpoint.
36
+ Never publish from an ordinary view request.
37
+
38
+ ## Loom routing
39
+
40
+ Claude Code: use this Loom routing section. Other harnesses continue with
41
+ Rendering mode below.
42
+
43
+ Skip this section when the prompt contains `LOOM-EXECUTOR`; execute the
44
+ authorized render directly and never re-delegate.
45
+
46
+ Explicit `--compose`, designed/flagship, or client-facing requests remain
47
+ main-loop-only: render inline, then print
48
+ `bash bin/loom.sh footer view --override` and mark telemetry as an override.
49
+ For the deterministic renderer:
50
+
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
+ present (Loom is internal-only and does not ship in the OSS distribution),
53
+ skip route resolution and the footer entirely and follow the script route
54
+ below — it is the framework default and needs no Loom.
55
+ 2. **Script route (`"mode": "script"` — the framework default).** Judgment
56
+ stays in the main loop: resolve what the user means into a type and source
57
+ (the Resolution logic below). Then run the mechanics with no model in the
58
+ loop — one call, which stages the source through the Runtime read boundary,
59
+ serves repeat views from a content-addressed cache, renders, and opens:
60
+ `bash bin/view-render.sh <type> <memory/...-or-file> [-- --brief <path>]`.
61
+ Print its output verbatim, then `bash bin/loom.sh footer view`. Do not
62
+ spawn a subagent, re-open the source yourself, or re-run retrieval for the
63
+ render. If the script exits non-zero, report its error; only a composition
64
+ or interaction need justifies taking over inline.
65
+ 3. For an inline route, continue below in the main loop.
66
+ 4. For a delegate route (org override), delegate only when available and
67
+ permitted in this session; otherwise continue inline. When delegating,
68
+ spawn `loom-executor` at the returned tier with `LOOM-DECISION-ID`, `LOOM-EXECUTOR: Execute
69
+ .claude/skills/view/SKILL.md`, the user's exact arguments, and the attached
70
+ `EGREGORE_ORG_CONTEXT_V1` block verbatim; print its final output, then
71
+ `bash bin/loom.sh footer view`. On `LOW_CONFIDENCE:` take over inline.
72
+ 5. Emit telemetry best-effort from the driver:
73
+ `bash bin/telemetry.sh emit "command" '{"command":"view","routed":true}' 2>/dev/null &`.
74
+
75
+ Loom transports the authorized context; it never grants new read or SHARE
76
+ authority. The minion workflow is unrelated to this render route.
77
+
78
+ ## Rendering mode
79
+
80
+ Use the packaged deterministic renderer by default, driven through
81
+ `bin/view-render.sh` — rendering is mechanical, so no model belongs in that
82
+ path. Run inline composition only when the user explicitly requests it. A
83
+ normal “view/open/render this” uses the script route without duplicate
84
+ retrieval. A repeat view of unchanged content reports
85
+ `(served from render cache)` — that is expected, not staleness: the cache key
86
+ is the content bytes, the renderer, and the arguments.
87
+
88
+ ## Supported artifact types
89
+
90
+ - `quest` — renders quest markdown from `memory/quests/`
91
+ - `handoff` — renders handoff markdown from `memory/handoffs/`
92
+ - `activity` — renders live team activity dashboard (no file needed)
93
+ - `board` — renders the typed live project-board surface (interactive editor with 5 tabs: Activity / Priority / Person / Timeline / Done). Publishing the stable hosted board is a separate explicit action.
94
+ - `network` — renders people/relationship network (no file needed)
95
+ - `document` — renders any markdown file with branded styling (auto-detected fallback)
96
+
97
+ ## Resolution logic
98
+
99
+ The key job of `/view` is resolving what the user wants to see into a file path. This must work without a graph.
100
+
101
+ ### 1. Parse the arguments
102
+
103
+ - `/view quest artifact-generation` → type=quest, name=artifact-generation
104
+ - `/view handoff oss-security-audit` → type=handoff, name=oss-security-audit
105
+ - `/view activity` → type=activity, no file needed
106
+ - `/view board` → type=board, typed live surface; no source path resolution
107
+ - `/view network` → type=network, no file needed
108
+ - `/view artifact-generation` → no type specified, search all types
109
+ - `/view memory/knowledge/decisions/some-decision.md` → direct file path
110
+ - `show me the security audit visually` → extract keywords, search
111
+
112
+ ### 2. Resolve the file
113
+
114
+ **Direct canonical file path**: If the argument names `memory/...`, open it
115
+ through `bash bin/search.sh open "memory/..."` into a temporary render source.
116
+ A denied or missing source stops resolution; never pass the raw canonical path
117
+ to the renderer or fall through to an unchecked filesystem read. An explicit
118
+ non-memory path inside the current repository may be rendered as a repository
119
+ document, but it is never treated as organizational memory.
120
+
121
+ **Quest, handoff, document, or auto-detected name**: Prefer the best matching
122
+ canonical source and opened content already present in
123
+ `EGREGORE_ORG_CONTEXT_V1`; stage that content as a temporary render source
124
+ without reopening it. Otherwise run one ranked call, optionally including the
125
+ requested type in the concept, then open only the selected result into the
126
+ temporary render source:
127
+
128
+ ```bash
129
+ bash bin/search.sh query "<artifact name and optional type>" -n 6 --compact --context-packet
130
+ bash bin/search.sh open "<selected memory/... path>"
131
+ ```
132
+
133
+ Claude Code: `--compact --context-packet` keeps the ranked evidence out of the
134
+ visible transcript — the resolution query must never print result blocks
135
+ before the render. Pass the selected source to the renderer script as its
136
+ `memory/...` canonical path, never as an absolute filesystem path.
137
+
138
+ Infer the renderer type from the selected canonical path. If several results
139
+ are genuinely ambiguous, show the short choices rather than scanning the
140
+ repository again.
141
+
142
+ **Activity**: No file resolution needed — runs `bin/activity-data.sh` live.
143
+
144
+ **Board / Network**: Use only the renderer's typed Runtime-backed live surface;
145
+ do not pre-scan or pre-open memory files.
146
+
147
+ **Auto-detect type** (no type specified): infer `quest` or `handoff` from the
148
+ authorized result path; everything else is `document`.
149
+
150
+ ### 3. Generate and open
151
+
152
+ **On the script route, `bin/view-render.sh` owns everything in this section**:
153
+ it resolves the packaged renderer locally (checked-out
154
+ `packages/egregore-artifacts` with dependencies first, then the instance's
155
+ managed renderer, then an installed `egregore-artifacts` on PATH;
156
+ never `npx`, never a registry fetch), stages complete `memory/...` documents
157
+ through the existing authorized `Runtime.open_source` adapter (ordinary model
158
+ evidence reads remain bounded), serves unchanged content from the content-addressed
159
+ render cache, invokes the renderer exactly once with `--output`, and opens the
160
+ browser. Call it once with the resolved type and source; do not re-implement
161
+ these steps inline. The commands below describe what the script does and are
162
+ the inline fallback only when the resolved route is `inline`.
163
+
164
+ **Design trace (documents).** A `document` render should follow the design
165
+ trace, not ship bare: auto-walk the UGI synthesis graph from the document's
166
+ substance (five stage ids — objective · audience · register · palette ·
167
+ grammar; option ids and auto-walk rules in
168
+ `packages/design-system/generative-ui/skill/SKILL.md`), resolve the brief, and
169
+ pass it to the renderer:
170
+
171
+ ```bash
172
+ bash bin/node-run.sh --input-type=module -e "
173
+ import { resolveBrief } from './packages/design-system/generative-ui/resolve-brief.js';
174
+ import fs from 'node:fs';
175
+ fs.mkdirSync('tmp', { recursive: true });
176
+ fs.writeFileSync('tmp/view-brief-{slug}.json',
177
+ JSON.stringify(resolveBrief(['{objective}','{audience}','{register}','{palette}','{grammar}'])));
178
+ "
179
+ bash bin/view-render.sh document <memory/...-or-file> -- --brief tmp/view-brief-{slug}.json
180
+ ```
181
+
182
+ Picking the five ids is judgment and stays in the main loop; the brief file
183
+ rides into the render through `--` and participates in the cache key.
184
+
185
+ Pick the five ids from the substance, one line of judgment each (e.g. a
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.
194
+
195
+ The deterministic renderer already owns its light/dark theme contract. Do not
196
+ invoke or reread a separate visual-theme skill for an ordinary render. Apply
197
+ the Dark Mode contract only while authoring composed HTML or changing renderer
198
+ code.
199
+
200
+ ### Composition path (`--compose`) — band 5, main-loop only
201
+
202
+ The template above is the **floor**. `--compose` is the **ceiling**: the design
203
+ trace at full depth means COMPOSITION, not pass-through (D6 free-generative band
204
+ — how the reference pages were made). The template renderer can never reach it;
205
+ composition is the frontier model authoring the page from the substance. This
206
+ path is what makes that reachable from the command instead of only by accident.
207
+
208
+ This path fires only on explicit cues: `--compose`, "compose / make it
209
+ presentable / client-facing / flagship / with the design trace / use the design
210
+ trace / designed artifact / band 5". **When the user names "the design trace,"
211
+ they mean this composed ceiling — never the floor.** Otherwise use the local
212
+ deterministic renderer.
213
+
214
+ **Technical documents compose too — in a different register.** A spec, RFC,
215
+ protocol, architecture doc, API reference, evaluation report, or postmortem is
216
+ flagship and gets the full chrome, but it does **not** get editorial voice. See
217
+ step 4 below: the register decision comes before any content is written, and
218
+ picking wrong is the single most common way a composed render lands badly.
219
+
220
+ **Procedure (run inline — never delegate; see the compose note in Loom routing):**
221
+
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
+
230
+ 2. Start from the scaffold: `.claude/skills/view/compose-scaffold.html` (copy it;
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.
234
+ 3. Walk the UGI graph for the register/palette/grammar (as above) and stamp the
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.
252
+ 4. **Decide the register FIRST — editorial or technical.** This governs every
253
+ sentence you then write, and it is not a style preference; it is what the
254
+ document *is*. Ask: does a reader come here to be *persuaded of a view*, or
255
+ to *look something up and implement it*?
256
+
257
+ | | **Editorial** | **Technical** |
258
+ |---|---|---|
259
+ | Documents | strategy · prep · briefing · explainer · analysis · narrative recap · pitch | spec · RFC · protocol · architecture · API reference · evaluation report · runbook · postmortem |
260
+ | Headings | **statement titles** — the section's *finding* as display copy ("Most of the zoom-out is already decided.") | **descriptive, numbered** — the section's *name* ("3.3 Toponym and cultivar collision") |
261
+ | Hero | two-tone `Lead. <em>accent phrase</em>` + italic standfirst | plain title + a `.meta` grid (version · date · author · depends-on) |
262
+ | Prose | argues, lands a point, carries voice | states, qualifies, cites; declarative and neutral |
263
+ | Opens with | the claim | Abstract, then Scope |
264
+ | Decisions | `.hl` / `.readout` — the thing to land | explicit `Decision:` blocks, individually citable |
265
+ | Tables | `.sumtable`, status matrices | numbered with `<caption>` ("Table 2 — …") so prose can reference them |
266
+ | Never | bury the finding in a neutral heading | editorialize a heading, or assert without the measurement behind it |
267
+
268
+ Signals for technical: numbered sections, a version field, "spec"/"protocol"/
269
+ "requirements" in the title, code blocks carrying invocations, tables of
270
+ measurements, a References section. **When the document is something someone
271
+ will implement from, choose technical.** Editorial voice on a spec reads as
272
+ unserious and buries the lookup value — that is the failure mode this table
273
+ exists to prevent.
274
+
275
+ Stamp the choice into the manifest `register` and the footer trail
276
+ (`editorial` / `technical`, with a matching grammar such as `decisive` or
277
+ `specification`).
278
+
279
+ 5. **Transform, don't mirror** — in the chosen register. Never reproduce the
280
+ markdown structure verbatim; pick a component per section from the kit by
281
+ what the content *is*:
282
+ - `.ledger` for Q→A pairs · `.tagcard` for named claims · `.claims` for
283
+ numbers/stats · `.panels`+`.verdict-band` for option sets · `.hl` for the
284
+ one thing to land · `.steps` for sequences · `.feat` for capability+status
285
+ rows · `.threads` for decision lists · `.gap` for negatives · `.sumtable`
286
+ with `.dot`s for a status matrix · `.readout` for the honest bottom line
287
+ - technical renders lean on captioned tables, `Decision:` blocks, numbered
288
+ rationale lists, and `.note`/`.note.caution` for limitations and hazards;
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
300
+ - **transformation in technical register means structure, not voice** — split
301
+ prose into tables, number the rationale, surface the decisions; do not
302
+ rewrite the author's claims into slogans
303
+ - nav links: one per composed section, to its `id` anchor
304
+ 6. **Never inline a hex in content** — every theme-sensitive color is a
305
+ `var(--token)`, or the toggle breaks dark mode. The kit already obeys this.
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.
309
+ 7. Write to `/tmp/egregore-artifacts/composed-{slug}.html` and open directly
310
+ (`open <path>`), then report the path + `Renderer: composed (band 5, inline)`.
311
+
312
+ Composition is judgment, not a script — the scaffold is the vocabulary, the
313
+ substance decides the sentence. When `--compose` is absent, use the fast
314
+ template path below.
315
+
316
+ For typed artifacts with a file:
317
+ ```bash
318
+ bash bin/view-render.sh <type> <memory/...-or-file>
319
+ ```
320
+
321
+ For auto-detected (just a file path):
322
+ ```bash
323
+ bash bin/view-render.sh document <memory/...-or-file>
324
+ ```
325
+
326
+ For activity (no file — live surfaces are never cached):
327
+ ```bash
328
+ bash bin/view-render.sh activity
329
+ ```
330
+
331
+ **For an explicitly requested publish:** local render/open is already complete.
332
+ Authorize `SHARE` for the exact staged artifact and show a Publish / Cancel
333
+ checkpoint containing the organization, destination, title, source, and
334
+ whether a stable URL will be replaced. After approval, invoke the Runtime
335
+ publication adapter once. `/view` does not inspect hosting configuration or
336
+ manage publication transport itself. If no Runtime publication adapter is
337
+ available, keep the local artifact and say publishing is unavailable rather
338
+ than falling back to a legacy script. Notification consent remains separate.
339
+
340
+
341
+ ### 4. Report
342
+
343
+ Report the exact HTML path returned by the renderer or written by composition;
344
+ do not infer a filename from the examples below.
345
+
346
+ ```
347
+ ✓ Artifact opened in browser
348
+ File: /tmp/egregore-artifacts/{type}-{name}-{ts}.html
349
+ ```
350
+
351
+ Only after an approved SHARE action returns a URL, append:
352
+ ```
353
+ ◆ {receipt.url} (use the exact URL returned by the approved publication)
354
+ ```
355
+ Read `org_slug` from `egregore.json`.
356
+
357
+ ## Fallback
358
+
359
+ If the local renderer is unavailable, report that the instance renderer needs
360
+ installation or repair. Do not install or fetch software implicitly.
361
+
362
+ ## Ambiguity handling
363
+
364
+ If the name matches multiple files, ask with a structured question when available and permitted in this session; otherwise ask in plain text:
365
+ ```
366
+ Found multiple matches for "security":
367
+ 1. handoffs/2026-03/31-cem-oss-security-audit.md
368
+ 2. quests/oss-security-review.md
369
+ Which one?
370
+ ```
371
+
372
+ If no matches found, **fall through to synthesis mode** (see below).
373
+
374
+ ## Synthesis mode
375
+
376
+ When the input is a prompt or topic rather than a file name — or when file resolution finds nothing — synthesize an artifact from multiple sources.
377
+
378
+ 1. **Reuse authorized evidence** — start from `EGREGORE_ORG_CONTEXT_V1`. If it
379
+ is absent or insufficient, run Runtime Observe once through
380
+ `bin/search.sh query`; open only a selected returned canonical source through
381
+ `bin/search.sh open`. Never scan `memory/`. Read repository files only when
382
+ the user explicitly asked to synthesize codebase material.
383
+ 2. **Write a temporary markdown file** — synthesize only the authorized
384
+ evidence into `tmp/view-synthesized-{slug}.md`. When the
385
+ attached context already contains opened content, stage that content without
386
+ reopening its canonical source.
387
+ 3. **Render it** — `bash bin/view-render.sh document tmp/view-synthesized-{slug}.md`
388
+ 4. **Report** — same as normal: `✓ Artifact opened in browser`
389
+
390
+ This is the default fallback — don't ask the user if they want synthesis. If `/view auth architecture` doesn't match a file, just do the research and render it.
391
+
392
+ **When to synthesize vs. when to say "not found":**
393
+ - Prompt is a topic/question ("auth architecture", "how does onboarding work") → synthesize
394
+ - Prompt looks like a filename that should exist but doesn't ("my-missing-doc") → say not found
395
+ - Use judgment — if the user clearly expects a specific file, don't synthesize a guess
396
+
397
+ ## Examples
398
+
399
+ ```
400
+ > /view quest artifact-generation
401
+
402
+ ✓ Artifact opened in browser
403
+ File: /tmp/egregore-artifacts/quest-artifact-generation.html
404
+ ```
405
+
406
+ ```
407
+ > show me the security audit visually
408
+
409
+ Resolving "security audit"...
410
+ Found: memory/handoffs/2026-03/31-cem-oss-security-audit.md
411
+
412
+ ✓ Artifact opened in browser
413
+ File: /tmp/egregore-artifacts/handoff-31-cem-oss-security-audit.html
414
+ ```
415
+
416
+ ```
417
+ > /view memory/knowledge/decisions/auth-redirect.md
418
+
419
+ ✓ Artifact opened in browser
420
+ File: /tmp/egregore-artifacts/document-auth-redirect.html
421
+ ```
422
+
423
+ ```
424
+ > /view activity
425
+
426
+ ✓ Artifact opened in browser
427
+ File: /tmp/egregore-artifacts/activity-2026-04-06.html
428
+ ```
429
+
430
+ ```
431
+ > /view auth architecture
432
+
433
+ No file match — synthesizing from codebase...
434
+ Reading: api/main.py, api/auth.py, api/services/storage.py, ...
435
+
436
+ ✓ Artifact opened in browser
437
+ File: /tmp/egregore-artifacts/document-auth-architecture.html
438
+ ```
@@ -14,6 +14,17 @@
14
14
  }
15
15
  ],
16
16
  "PreToolUse": [
17
+ {
18
+ "matcher": "Bash|exec_command|shell_command|shell|write_stdin|apply_patch|Edit|Write|Read|view_image",
19
+ "hooks": [
20
+ {
21
+ "type": "command",
22
+ "command": "h=\"$(git rev-parse --show-toplevel)/bin/boundary-hook.sh\"; if [ -f \"$h\" ]; then exec bash \"$h\" codex; fi; echo 'Environment isolation: boundary guard missing (bin/boundary-hook.sh) — run /update, then restart the session. Every action is blocked until the guard is back.' >&2; exit 2",
23
+ "timeout": 10,
24
+ "statusMessage": "Checking Egregore instance boundary"
25
+ }
26
+ ]
27
+ },
17
28
  {
18
29
  "matcher": "Bash|exec_command|apply_patch|Edit|Write",
19
30
  "hooks": [
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: dark-mode
3
- description: 'Use when authoring or modifying browser-rendered visual output: HTML, CSS, React SSR, artifact templates, markdown renderers, design tokens, themes, or composed pages. Do not invoke for an ordinary /view render—the checked-in renderer already owns its theme contract. The load-bearing rule is that theme-sensitive colors must be emitted as `var(--token)`, never resolved inline hex.'
3
+ description: 'Use when authoring or modifying browser-rendered visual output: HTML, CSS, React SSR, artifact templates, markdown renderers, design tokens, themes, or composed pages. Do not invoke for an ordinary /view render—the checked-in renderer already owns its theme contract. The load-bearing rule is that theme-sensitive colors must be emitted as `var(--token)`, never resolved inline hex; the colors themselves come from the design system registry.'
4
4
  ---
5
5
 
6
6
  <!-- generated-by: bin/codex-sync-skills.sh -->
@@ -0,0 +1,29 @@
1
+ ---
2
+ name: records
3
+ description: 'View or change your session records, hold the current session, redact a past record, record past sessions from this machine, and close or file the open items records carry.'
4
+ ---
5
+
6
+ <!-- generated-by: bin/codex-sync-skills.sh -->
7
+
8
+ # Egregore records Adapter
9
+
10
+ This adapter runs the canonical Egregore workflow for `records`. Its one
11
+ maintained body is `.claude/skills/records/SKILL.md`; read that file completely and follow it here.
12
+
13
+ Use the project shell and filesystem directly. Do not invoke Claude Code
14
+ commands. Translate interactive choices to structured Codex question tooling
15
+ when it is available; otherwise render compact numbered choices with an
16
+ `Other:` option and wait for the user.
17
+
18
+ 1. Read `.claude/skills/records/SKILL.md` for the workflow details.
19
+ 2. Run the referenced `bin/` scripts directly from Codex.
20
+ 3. Treat graph and publish steps as best-effort unless that workflow explicitly
21
+ says they are required.
22
+ 4. For every external notification, follow
23
+ `.claude/context/notification-consent.md`: plan without sending, then show
24
+ a separate exact Send / Edit / Cancel checkpoint. Never infer notification
25
+ consent from the workflow request or a batch approval.
26
+ 5. Keep local-mode behavior filesystem-first and avoid graph or notification
27
+ calls when `egregore.json` declares `"mode": "local"`.
28
+ 6. Never call the deprecated `egregore-handoff` CLI for Egregore project
29
+ handoffs.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: summon
3
- description: 'Design and launch a persistent agent (a spirit) that runs on a schedule or watches for conditions, via adaptive questioning that produces a reviewable spec before launch.'
3
+ description: 'Reuse, design, and launch Egregore spirits. Review available recipes and current host permissions, then start authorized on-demand work or design a scheduled process for an available scheduler.'
4
4
  ---
5
5
 
6
6
  <!-- generated-by: bin/codex-sync-skills.sh -->
@@ -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)}