create-egregore 0.20.2 → 0.21.0-runtime-mvp.2

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 (706) hide show
  1. package/assets/egregore-launcher.js +1013 -16
  2. package/bin/cli.js +11 -0
  3. package/lib/claude-runtime.js +192 -0
  4. package/lib/local.js +38 -31
  5. package/lib/pi-runtime.js +1 -0
  6. package/lib/prime-runtime.js +1 -0
  7. package/lib/runtime-identity.js +146 -0
  8. package/lib/setup.js +116 -17
  9. package/package.json +10 -6
  10. package/runtime/claude/.claude/context/commit-format.md +110 -0
  11. package/runtime/claude/.claude/context/git-language.md +46 -0
  12. package/runtime/claude/.claude/context/notification-consent.md +66 -0
  13. package/runtime/claude/.claude/context/pr-format.md +67 -0
  14. package/runtime/claude/.claude/context/telemetry.md +133 -0
  15. package/runtime/claude/.claude/hooks/boundary-check.sh +333 -0
  16. package/runtime/claude/.claude/hooks/branch-guard.sh +231 -0
  17. package/runtime/claude/.claude/hooks/card-context.sh +38 -0
  18. package/runtime/claude/.claude/hooks/emissary-detect.sh +53 -0
  19. package/runtime/claude/.claude/hooks/memory-refresh.sh +67 -0
  20. package/runtime/claude/.claude/hooks/onboarding-guard.sh +86 -0
  21. package/runtime/claude/.claude/hooks/retrieval-context.sh +43 -0
  22. package/runtime/claude/.claude/rules/voice-bedrock.md +73 -0
  23. package/runtime/claude/.claude/settings.json +131 -0
  24. package/runtime/claude/.claude/skills/activity/SKILL.md +68 -0
  25. package/runtime/claude/.claude/skills/announce/SKILL.md +54 -0
  26. package/runtime/claude/.claude/skills/archive/SKILL.md +71 -0
  27. package/runtime/claude/.claude/skills/branch/SKILL.md +147 -0
  28. package/runtime/claude/.claude/skills/checkup/SKILL.md +159 -0
  29. package/runtime/claude/.claude/skills/commit/SKILL.md +103 -0
  30. package/runtime/claude/.claude/skills/contribute/SKILL.md +343 -0
  31. package/runtime/claude/.claude/skills/create-skill/SKILL.md +135 -0
  32. package/runtime/claude/.claude/skills/dark-mode/SKILL.md +410 -0
  33. package/runtime/claude/.claude/skills/dashboard/SKILL.md +43 -0
  34. package/runtime/claude/.claude/skills/deep-reflect/REPORT.md +140 -0
  35. package/runtime/claude/.claude/skills/deep-reflect/RESEARCH.md +132 -0
  36. package/runtime/claude/.claude/skills/deep-reflect/ROLES.md +104 -0
  37. package/runtime/claude/.claude/skills/deep-reflect/SKILL.md +170 -0
  38. package/runtime/claude/.claude/skills/delete-user/SKILL.md +150 -0
  39. package/runtime/claude/.claude/skills/emissary/SKILL.md +220 -0
  40. package/runtime/claude/.claude/skills/handoff/SKILL.md +124 -0
  41. package/runtime/claude/.claude/skills/harvest/AUDIT.md +546 -0
  42. package/runtime/claude/.claude/skills/harvest/FORMAT.md +436 -0
  43. package/runtime/claude/.claude/skills/harvest/PROCESS.md +395 -0
  44. package/runtime/claude/.claude/skills/harvest/QUESTION_PALETTE.md +76 -0
  45. package/runtime/claude/.claude/skills/harvest/SKILL.md +100 -0
  46. package/runtime/claude/.claude/skills/ingest/SKILL.md +112 -0
  47. package/runtime/claude/.claude/skills/ingest-corpus/SKILL.md +187 -0
  48. package/runtime/claude/.claude/skills/ingest-notion/SKILL.md +214 -0
  49. package/runtime/claude/.claude/skills/ingest-user-interview/SKILL.md +65 -0
  50. package/runtime/claude/.claude/skills/ingest-user-interview/references/analysis-contract.md +125 -0
  51. package/runtime/claude/.claude/skills/invite/SKILL.md +111 -0
  52. package/runtime/claude/.claude/skills/issue/SKILL.md +104 -0
  53. package/runtime/claude/.claude/skills/me/SKILL.md +81 -0
  54. package/runtime/claude/.claude/skills/meeting/SKILL.md +76 -0
  55. package/runtime/claude/.claude/skills/meeting/references/analysis-contract.md +102 -0
  56. package/runtime/claude/.claude/skills/note/SKILL.md +71 -0
  57. package/runtime/claude/.claude/skills/notion-connect/SKILL.md +124 -0
  58. package/runtime/claude/.claude/skills/onboarding/SKILL.md +159 -0
  59. package/runtime/claude/.claude/skills/pr/SKILL.md +85 -0
  60. package/runtime/claude/.claude/skills/pull/SKILL.md +79 -0
  61. package/runtime/claude/.claude/skills/push/SKILL.md +47 -0
  62. package/runtime/claude/.claude/skills/quest/SKILL.md +121 -0
  63. package/runtime/claude/.claude/skills/reflect/SKILL.md +69 -0
  64. package/runtime/claude/.claude/skills/review-pr/SKILL.md +276 -0
  65. package/runtime/claude/.claude/skills/save/SKILL.md +92 -0
  66. package/runtime/claude/.claude/skills/slack-connect/SKILL.md +148 -0
  67. package/runtime/claude/.claude/skills/summon/SKILL.md +240 -0
  68. package/runtime/claude/.claude/skills/sync-repos/SKILL.md +82 -0
  69. package/runtime/claude/.claude/skills/teams-connect/SKILL.md +216 -0
  70. package/runtime/claude/.claude/skills/telegram-connect/SKILL.md +110 -0
  71. package/runtime/claude/.claude/skills/telemetry/SKILL.md +117 -0
  72. package/runtime/claude/.claude/skills/test/SKILL.md +87 -0
  73. package/runtime/claude/.claude/skills/the-spiral/SKILL.md +492 -0
  74. package/runtime/claude/.claude/skills/tui-design/SKILL.md +188 -0
  75. package/runtime/claude/.claude/skills/tutorial/SKILL.md +100 -0
  76. package/runtime/claude/.claude/skills/update/SKILL.md +265 -0
  77. package/runtime/claude/.claude/skills/view/SKILL.md +393 -0
  78. package/runtime/claude/.claude/skills/view/compose-scaffold.html +221 -0
  79. package/runtime/claude/.claude/skills/visual-explain/SKILL.md +132 -0
  80. package/runtime/claude/.claude/skills/wrap/SKILL.md +98 -0
  81. package/runtime/claude/CLAUDE.md +447 -0
  82. package/runtime/claude/bin/activity-action.sh +92 -0
  83. package/runtime/claude/bin/activity-data.sh +17 -0
  84. package/runtime/claude/bin/agent.sh +783 -0
  85. package/runtime/claude/bin/artifact-register.sh +164 -0
  86. package/runtime/claude/bin/artifact-writeback.sh +53 -0
  87. package/runtime/claude/bin/artifacts.sh +288 -0
  88. package/runtime/claude/bin/attendant.sh +707 -0
  89. package/runtime/claude/bin/autosave.sh +112 -0
  90. package/runtime/claude/bin/boundary.sh +253 -0
  91. package/runtime/claude/bin/build-sealed-dataroom.mjs +722 -0
  92. package/runtime/claude/bin/capture-reconcile.sh +69 -0
  93. package/runtime/claude/bin/capture-run.sh +357 -0
  94. package/runtime/claude/bin/codex-install-skills.sh +78 -0
  95. package/runtime/claude/bin/codex-render-spec.mjs +462 -0
  96. package/runtime/claude/bin/codex-session-start.sh +275 -0
  97. package/runtime/claude/bin/codex-skill-render.mjs +349 -0
  98. package/runtime/claude/bin/codex-sync-skills.sh +237 -0
  99. package/runtime/claude/bin/connect-refresh.sh +33 -0
  100. package/runtime/claude/bin/contribute-guard.sh +79 -0
  101. package/runtime/claude/bin/corpus_map.py +806 -0
  102. package/runtime/claude/bin/corpus_survey.py +304 -0
  103. package/runtime/claude/bin/dashboard-data.sh +18 -0
  104. package/runtime/claude/bin/github-auth.sh +121 -0
  105. package/runtime/claude/bin/graph-batch.sh +86 -0
  106. package/runtime/claude/bin/graph-op.sh +1106 -0
  107. package/runtime/claude/bin/graph-projection.sh +54 -0
  108. package/runtime/claude/bin/graph-wal.sh +242 -0
  109. package/runtime/claude/bin/graph.sh +267 -0
  110. package/runtime/claude/bin/handoff-lifecycle-job.sh +146 -0
  111. package/runtime/claude/bin/handoff-lifecycle.sh +280 -0
  112. package/runtime/claude/bin/handoff-pr-backfill.sh +86 -0
  113. package/runtime/claude/bin/handoff-preview.sh +169 -0
  114. package/runtime/claude/bin/handoff-run.sh +692 -0
  115. package/runtime/claude/bin/handoff-save-egregore.sh +224 -0
  116. package/runtime/claude/bin/index-handoff.sh +322 -0
  117. package/runtime/claude/bin/ingest-graph.sh +86 -0
  118. package/runtime/claude/bin/ingest-item.sh +10 -0
  119. package/runtime/claude/bin/ingest-surface.html +495 -0
  120. package/runtime/claude/bin/ingest.py +1011 -0
  121. package/runtime/claude/bin/ingest.sh +308 -0
  122. package/runtime/claude/bin/ingest_graph.py +856 -0
  123. package/runtime/claude/bin/ingest_surface.py +544 -0
  124. package/runtime/claude/bin/invite.sh +6 -0
  125. package/runtime/claude/bin/issue.sh +10 -0
  126. package/runtime/claude/bin/knowledge.sh +10 -0
  127. package/runtime/claude/bin/lib/artifact-id.sh +46 -0
  128. package/runtime/claude/bin/lib/config.sh +136 -0
  129. package/runtime/claude/bin/lib/context.sh +642 -0
  130. package/runtime/claude/bin/lib/dashboard-artifact.sh +242 -0
  131. package/runtime/claude/bin/lib/ensure-develop.sh +183 -0
  132. package/runtime/claude/bin/lib/git-message.sh +37 -0
  133. package/runtime/claude/bin/lib/git-sync.sh +494 -0
  134. package/runtime/claude/bin/lib/greeting.sh +548 -0
  135. package/runtime/claude/bin/lib/handoff-meta.sh +97 -0
  136. package/runtime/claude/bin/lib/hash.sh +13 -0
  137. package/runtime/claude/bin/lib/identity.sh +213 -0
  138. package/runtime/claude/bin/lib/metrics.sh +374 -0
  139. package/runtime/claude/bin/lib/noncode.sh +31 -0
  140. package/runtime/claude/bin/lib/permissions.sh +106 -0
  141. package/runtime/claude/bin/lib/time.sh +56 -0
  142. package/runtime/claude/bin/lib/worktree-links.sh +85 -0
  143. package/runtime/claude/bin/node-run.sh +42 -0
  144. package/runtime/claude/bin/notification.sh +6 -0
  145. package/runtime/claude/bin/notify.sh +636 -0
  146. package/runtime/claude/bin/observe-context.sh +14 -0
  147. package/runtime/claude/bin/onboarding.sh +6 -0
  148. package/runtime/claude/bin/person.py +634 -0
  149. package/runtime/claude/bin/person.sh +481 -0
  150. package/runtime/claude/bin/pi-render-spec.mjs +140 -0
  151. package/runtime/claude/bin/post-update.sh +37 -0
  152. package/runtime/claude/bin/prime-render-spec.mjs +147 -0
  153. package/runtime/claude/bin/publish-artifact.sh +324 -0
  154. package/runtime/claude/bin/publish-references.sh +144 -0
  155. package/runtime/claude/bin/quest.sh +9 -0
  156. package/runtime/claude/bin/question.sh +8 -0
  157. package/runtime/claude/bin/repo-state.sh +96 -0
  158. package/runtime/claude/bin/research-ingest.sh +7 -0
  159. package/runtime/claude/bin/restore-owned-skills.sh +67 -0
  160. package/runtime/claude/bin/retrieval_eval.py +385 -0
  161. package/runtime/claude/bin/runtime-identity.sh +70 -0
  162. package/runtime/claude/bin/runtime-upgrade.sh +43 -0
  163. package/runtime/claude/bin/scroll.sh +9 -0
  164. package/runtime/claude/bin/search.sh +318 -0
  165. package/runtime/claude/bin/session-autosave.sh +220 -0
  166. package/runtime/claude/bin/session-log.sh +199 -0
  167. package/runtime/claude/bin/session-start.sh +696 -0
  168. package/runtime/claude/bin/settings.sh +532 -0
  169. package/runtime/claude/bin/startup-check.sh +136 -0
  170. package/runtime/claude/bin/statusline.sh +41 -0
  171. package/runtime/claude/bin/telemetry.sh +666 -0
  172. package/runtime/claude/bin/test-changes.sh +344 -0
  173. package/runtime/claude/bin/thread.sh +9 -0
  174. package/runtime/claude/bin/todo.sh +9 -0
  175. package/runtime/claude/bin/view-render.sh +126 -0
  176. package/runtime/claude/bin/worktree-create.sh +145 -0
  177. package/runtime/claude/bin/worktree-remove.sh +50 -0
  178. package/runtime/claude/bin/worktree.sh +198 -0
  179. package/runtime/claude/egregore_runtime/__init__.py +228 -0
  180. package/runtime/claude/egregore_runtime/adapters/__init__.py +5 -0
  181. package/runtime/claude/egregore_runtime/adapters/invitation.py +237 -0
  182. package/runtime/claude/egregore_runtime/adapters/notification.py +59 -0
  183. package/runtime/claude/egregore_runtime/adapters/qmd.py +1701 -0
  184. package/runtime/claude/egregore_runtime/adapters/qmd_cli.py +210 -0
  185. package/runtime/claude/egregore_runtime/adapters/qmd_embed_worker.py +59 -0
  186. package/runtime/claude/egregore_runtime/admin_gate.py +102 -0
  187. package/runtime/claude/egregore_runtime/artifacts.py +523 -0
  188. package/runtime/claude/egregore_runtime/contracts.py +499 -0
  189. package/runtime/claude/egregore_runtime/entitlements.py +85 -0
  190. package/runtime/claude/egregore_runtime/errors.py +10 -0
  191. package/runtime/claude/egregore_runtime/graph.py +356 -0
  192. package/runtime/claude/egregore_runtime/handoff_lookup.py +196 -0
  193. package/runtime/claude/egregore_runtime/harness_cli.py +1221 -0
  194. package/runtime/claude/egregore_runtime/identity.py +734 -0
  195. package/runtime/claude/egregore_runtime/identity_cli.py +91 -0
  196. package/runtime/claude/egregore_runtime/ingest.py +575 -0
  197. package/runtime/claude/egregore_runtime/ingest_cli.py +254 -0
  198. package/runtime/claude/egregore_runtime/ingest_index_cli.py +147 -0
  199. package/runtime/claude/egregore_runtime/invitation_cli.py +51 -0
  200. package/runtime/claude/egregore_runtime/invitations.py +116 -0
  201. package/runtime/claude/egregore_runtime/issue_cli.py +305 -0
  202. package/runtime/claude/egregore_runtime/issues.py +359 -0
  203. package/runtime/claude/egregore_runtime/knowledge.py +376 -0
  204. package/runtime/claude/egregore_runtime/knowledge_cli.py +173 -0
  205. package/runtime/claude/egregore_runtime/lifecycle.py +888 -0
  206. package/runtime/claude/egregore_runtime/lifecycle_cli.py +269 -0
  207. package/runtime/claude/egregore_runtime/notification_cli.py +125 -0
  208. package/runtime/claude/egregore_runtime/notifications.py +230 -0
  209. package/runtime/claude/egregore_runtime/observe.py +342 -0
  210. package/runtime/claude/egregore_runtime/onboarding.py +290 -0
  211. package/runtime/claude/egregore_runtime/onboarding_cli.py +110 -0
  212. package/runtime/claude/egregore_runtime/policy.py +144 -0
  213. package/runtime/claude/egregore_runtime/profile.py +193 -0
  214. package/runtime/claude/egregore_runtime/quest_cli.py +216 -0
  215. package/runtime/claude/egregore_runtime/question_cli.py +180 -0
  216. package/runtime/claude/egregore_runtime/questions.py +304 -0
  217. package/runtime/claude/egregore_runtime/quests.py +419 -0
  218. package/runtime/claude/egregore_runtime/readiness.py +379 -0
  219. package/runtime/claude/egregore_runtime/research_ingest.py +256 -0
  220. package/runtime/claude/egregore_runtime/research_ingest_cli.py +44 -0
  221. package/runtime/claude/egregore_runtime/runtime.py +464 -0
  222. package/runtime/claude/egregore_runtime/scroll_cli.py +185 -0
  223. package/runtime/claude/egregore_runtime/scrolls.py +726 -0
  224. package/runtime/claude/egregore_runtime/status.py +412 -0
  225. package/runtime/claude/egregore_runtime/status_cli.py +174 -0
  226. package/runtime/claude/egregore_runtime/sync.py +218 -0
  227. package/runtime/claude/egregore_runtime/teamsync.py +139 -0
  228. package/runtime/claude/egregore_runtime/telemetry.py +640 -0
  229. package/runtime/claude/egregore_runtime/thread_cli.py +173 -0
  230. package/runtime/claude/egregore_runtime/threads.py +517 -0
  231. package/runtime/claude/egregore_runtime/todo_cli.py +142 -0
  232. package/runtime/claude/egregore_runtime/todos.py +244 -0
  233. package/runtime/claude/egregore_runtime/upgrade.py +770 -0
  234. package/runtime/claude/egregore_runtime/upgrade_worker.py +53 -0
  235. package/runtime/claude/egregore_runtime/writeback.py +391 -0
  236. package/runtime/claude/egregore_runtime/writeback_cli.py +114 -0
  237. package/runtime/claude/manifest.json +284 -0
  238. package/runtime/codex/.codex/hooks/search-hint.js +21 -52
  239. package/runtime/codex/.codex/hooks.json +3 -3
  240. package/runtime/codex/.codex/skills/activity/SKILL.md +23 -66
  241. package/runtime/codex/.codex/skills/announce/SKILL.md +27 -50
  242. package/runtime/codex/.codex/skills/archive/SKILL.md +21 -36
  243. package/runtime/codex/.codex/skills/checkup/SKILL.md +77 -36
  244. package/runtime/codex/.codex/skills/dark-mode/SKILL.md +1 -1
  245. package/runtime/codex/.codex/skills/dashboard/SKILL.md +17 -47
  246. package/runtime/codex/.codex/skills/handoff/SKILL.md +84 -133
  247. package/runtime/codex/.codex/skills/harvest/SKILL.md +32 -117
  248. package/runtime/codex/.codex/skills/ingest/SKILL.md +47 -25
  249. package/runtime/codex/.codex/skills/ingest-user-interview/SKILL.md +18 -36
  250. package/runtime/codex/.codex/skills/ingest-user-interview/references/analysis-contract.md +42 -0
  251. package/runtime/codex/.codex/skills/invite/SKILL.md +21 -35
  252. package/runtime/codex/.codex/skills/issue/SKILL.md +60 -41
  253. package/runtime/codex/.codex/skills/me/SKILL.md +1 -1
  254. package/runtime/codex/.codex/skills/meeting/SKILL.md +16 -36
  255. package/runtime/codex/.codex/skills/meeting/references/analysis-contract.md +48 -0
  256. package/runtime/codex/.codex/skills/note/SKILL.md +30 -25
  257. package/runtime/codex/.codex/skills/onboarding/SKILL.md +36 -41
  258. package/runtime/codex/.codex/skills/pull/SKILL.md +1 -1
  259. package/runtime/codex/.codex/skills/quest/SKILL.md +27 -66
  260. package/runtime/codex/.codex/skills/reflect/SKILL.md +22 -36
  261. package/runtime/codex/.codex/skills/save/SKILL.md +2 -2
  262. package/runtime/codex/.codex/skills/telemetry/SKILL.md +1 -1
  263. package/runtime/codex/.codex/skills/test/SKILL.md +1 -1
  264. package/runtime/codex/.codex/skills/tutorial/SKILL.md +40 -41
  265. package/runtime/codex/.codex/skills/view/SKILL.md +115 -111
  266. package/runtime/codex/.codex/skills/wrap/SKILL.md +45 -41
  267. package/runtime/codex/.codex/spec-manifest.json +9 -9
  268. package/runtime/codex/AGENTS.md +62 -58
  269. package/runtime/codex/bin/activity-action.sh +92 -0
  270. package/runtime/codex/bin/activity-data.sh +12 -233
  271. package/runtime/codex/bin/agent.sh +84 -100
  272. package/runtime/codex/bin/artifact-register.sh +164 -0
  273. package/runtime/codex/bin/artifact-writeback.sh +53 -0
  274. package/runtime/codex/bin/artifacts.sh +288 -0
  275. package/runtime/codex/bin/build-sealed-dataroom.mjs +722 -0
  276. package/runtime/codex/bin/capture-run.sh +18 -2
  277. package/runtime/codex/bin/codex-render-spec.mjs +41 -16
  278. package/runtime/codex/bin/codex-session-start.sh +14 -4
  279. package/runtime/codex/bin/codex-skill-render.mjs +9 -7
  280. package/runtime/codex/bin/corpus_map.py +806 -0
  281. package/runtime/codex/bin/corpus_survey.py +304 -0
  282. package/runtime/codex/bin/dashboard-data.sh +11 -171
  283. package/runtime/codex/bin/github-auth.sh +121 -0
  284. package/runtime/codex/bin/graph-batch.sh +7 -0
  285. package/runtime/codex/bin/graph-op.sh +4 -0
  286. package/runtime/codex/bin/graph-projection.sh +54 -0
  287. package/runtime/codex/bin/graph-wal.sh +13 -0
  288. package/runtime/codex/bin/graph.sh +44 -0
  289. package/runtime/codex/bin/handoff-lifecycle-job.sh +146 -0
  290. package/runtime/codex/bin/handoff-lifecycle.sh +280 -0
  291. package/runtime/codex/bin/handoff-preview.sh +169 -0
  292. package/runtime/codex/bin/handoff-run.sh +42 -26
  293. package/runtime/codex/bin/ingest-graph.sh +6 -0
  294. package/runtime/codex/bin/ingest-item.sh +10 -0
  295. package/runtime/codex/bin/ingest.sh +59 -30
  296. package/runtime/codex/bin/invite.sh +6 -0
  297. package/runtime/codex/bin/issue.sh +10 -0
  298. package/runtime/codex/bin/knowledge.sh +10 -0
  299. package/runtime/codex/bin/lib/config.sh +20 -0
  300. package/runtime/codex/bin/lib/context.sh +46 -25
  301. package/runtime/codex/bin/lib/git-sync.sh +70 -6
  302. package/runtime/codex/bin/lib/greeting.sh +34 -5
  303. package/runtime/codex/bin/lib/handoff-meta.sh +97 -0
  304. package/runtime/codex/bin/lib/worktree-links.sh +6 -0
  305. package/runtime/codex/bin/node-run.sh +42 -0
  306. package/runtime/codex/bin/notification.sh +6 -0
  307. package/runtime/codex/bin/observe-context.sh +14 -0
  308. package/runtime/codex/bin/onboarding.sh +6 -0
  309. package/runtime/codex/bin/person.py +4 -0
  310. package/runtime/codex/bin/person.sh +43 -10
  311. package/runtime/codex/bin/pi-render-spec.mjs +140 -0
  312. package/runtime/codex/bin/post-update.sh +37 -0
  313. package/runtime/codex/bin/prime-render-spec.mjs +147 -0
  314. package/runtime/codex/bin/publish-artifact.sh +55 -2
  315. package/runtime/codex/bin/quest.sh +9 -0
  316. package/runtime/codex/bin/question.sh +8 -0
  317. package/runtime/codex/bin/research-ingest.sh +7 -0
  318. package/runtime/codex/bin/restore-owned-skills.sh +67 -0
  319. package/runtime/codex/bin/retrieval_eval.py +385 -0
  320. package/runtime/codex/bin/runtime-identity.sh +70 -0
  321. package/runtime/codex/bin/runtime-upgrade.sh +43 -0
  322. package/runtime/codex/bin/scroll.sh +9 -0
  323. package/runtime/codex/bin/search.sh +231 -195
  324. package/runtime/codex/bin/settings.sh +174 -5
  325. package/runtime/codex/bin/startup-check.sh +136 -0
  326. package/runtime/codex/bin/telemetry.sh +522 -247
  327. package/runtime/codex/bin/test-changes.sh +344 -0
  328. package/runtime/codex/bin/thread.sh +9 -0
  329. package/runtime/codex/bin/todo.sh +9 -0
  330. package/runtime/codex/bin/view-render.sh +126 -0
  331. package/runtime/codex/bin/worktree-create.sh +19 -5
  332. package/runtime/codex/egregore_runtime/__init__.py +228 -0
  333. package/runtime/codex/egregore_runtime/adapters/__init__.py +5 -0
  334. package/runtime/codex/egregore_runtime/adapters/invitation.py +237 -0
  335. package/runtime/codex/egregore_runtime/adapters/notification.py +59 -0
  336. package/runtime/codex/egregore_runtime/adapters/qmd.py +1701 -0
  337. package/runtime/codex/egregore_runtime/adapters/qmd_cli.py +210 -0
  338. package/runtime/codex/egregore_runtime/adapters/qmd_embed_worker.py +59 -0
  339. package/runtime/codex/egregore_runtime/admin_gate.py +102 -0
  340. package/runtime/codex/egregore_runtime/artifacts.py +523 -0
  341. package/runtime/codex/egregore_runtime/contracts.py +499 -0
  342. package/runtime/codex/egregore_runtime/entitlements.py +85 -0
  343. package/runtime/codex/egregore_runtime/errors.py +10 -0
  344. package/runtime/codex/egregore_runtime/graph.py +356 -0
  345. package/runtime/codex/egregore_runtime/handoff_lookup.py +196 -0
  346. package/runtime/codex/egregore_runtime/harness_cli.py +1221 -0
  347. package/runtime/codex/egregore_runtime/identity.py +734 -0
  348. package/runtime/codex/egregore_runtime/identity_cli.py +91 -0
  349. package/runtime/codex/egregore_runtime/ingest.py +575 -0
  350. package/runtime/codex/egregore_runtime/ingest_cli.py +254 -0
  351. package/runtime/codex/egregore_runtime/ingest_index_cli.py +147 -0
  352. package/runtime/codex/egregore_runtime/invitation_cli.py +51 -0
  353. package/runtime/codex/egregore_runtime/invitations.py +116 -0
  354. package/runtime/codex/egregore_runtime/issue_cli.py +305 -0
  355. package/runtime/codex/egregore_runtime/issues.py +359 -0
  356. package/runtime/codex/egregore_runtime/knowledge.py +376 -0
  357. package/runtime/codex/egregore_runtime/knowledge_cli.py +173 -0
  358. package/runtime/codex/egregore_runtime/lifecycle.py +888 -0
  359. package/runtime/codex/egregore_runtime/lifecycle_cli.py +269 -0
  360. package/runtime/codex/egregore_runtime/notification_cli.py +125 -0
  361. package/runtime/codex/egregore_runtime/notifications.py +230 -0
  362. package/runtime/codex/egregore_runtime/observe.py +342 -0
  363. package/runtime/codex/egregore_runtime/onboarding.py +290 -0
  364. package/runtime/codex/egregore_runtime/onboarding_cli.py +110 -0
  365. package/runtime/codex/egregore_runtime/policy.py +144 -0
  366. package/runtime/codex/egregore_runtime/profile.py +193 -0
  367. package/runtime/codex/egregore_runtime/quest_cli.py +216 -0
  368. package/runtime/codex/egregore_runtime/question_cli.py +180 -0
  369. package/runtime/codex/egregore_runtime/questions.py +304 -0
  370. package/runtime/codex/egregore_runtime/quests.py +419 -0
  371. package/runtime/codex/egregore_runtime/readiness.py +379 -0
  372. package/runtime/codex/egregore_runtime/research_ingest.py +256 -0
  373. package/runtime/codex/egregore_runtime/research_ingest_cli.py +44 -0
  374. package/runtime/codex/egregore_runtime/runtime.py +464 -0
  375. package/runtime/codex/egregore_runtime/scroll_cli.py +185 -0
  376. package/runtime/codex/egregore_runtime/scrolls.py +726 -0
  377. package/runtime/codex/egregore_runtime/status.py +412 -0
  378. package/runtime/codex/egregore_runtime/status_cli.py +174 -0
  379. package/runtime/codex/egregore_runtime/sync.py +218 -0
  380. package/runtime/codex/egregore_runtime/teamsync.py +139 -0
  381. package/runtime/codex/egregore_runtime/telemetry.py +640 -0
  382. package/runtime/codex/egregore_runtime/thread_cli.py +173 -0
  383. package/runtime/codex/egregore_runtime/threads.py +517 -0
  384. package/runtime/codex/egregore_runtime/todo_cli.py +142 -0
  385. package/runtime/codex/egregore_runtime/todos.py +244 -0
  386. package/runtime/codex/egregore_runtime/upgrade.py +770 -0
  387. package/runtime/codex/egregore_runtime/upgrade_worker.py +53 -0
  388. package/runtime/codex/egregore_runtime/writeback.py +391 -0
  389. package/runtime/codex/egregore_runtime/writeback_cli.py +114 -0
  390. package/runtime/codex/manifest.json +98 -1
  391. package/runtime/pi/.codex/hooks/search-hint.js +21 -52
  392. package/runtime/pi/.codex/hooks.json +3 -3
  393. package/runtime/pi/.codex/skills/activity/SKILL.md +23 -66
  394. package/runtime/pi/.codex/skills/announce/SKILL.md +27 -50
  395. package/runtime/pi/.codex/skills/archive/SKILL.md +21 -36
  396. package/runtime/pi/.codex/skills/checkup/SKILL.md +77 -36
  397. package/runtime/pi/.codex/skills/dark-mode/SKILL.md +1 -1
  398. package/runtime/pi/.codex/skills/dashboard/SKILL.md +17 -47
  399. package/runtime/pi/.codex/skills/handoff/SKILL.md +84 -133
  400. package/runtime/pi/.codex/skills/harvest/SKILL.md +32 -117
  401. package/runtime/pi/.codex/skills/ingest/SKILL.md +47 -25
  402. package/runtime/pi/.codex/skills/ingest-user-interview/SKILL.md +18 -36
  403. package/runtime/pi/.codex/skills/ingest-user-interview/references/analysis-contract.md +42 -0
  404. package/runtime/pi/.codex/skills/invite/SKILL.md +21 -35
  405. package/runtime/pi/.codex/skills/issue/SKILL.md +60 -41
  406. package/runtime/pi/.codex/skills/me/SKILL.md +1 -1
  407. package/runtime/pi/.codex/skills/meeting/SKILL.md +16 -36
  408. package/runtime/pi/.codex/skills/meeting/references/analysis-contract.md +48 -0
  409. package/runtime/pi/.codex/skills/note/SKILL.md +30 -25
  410. package/runtime/pi/.codex/skills/onboarding/SKILL.md +36 -41
  411. package/runtime/pi/.codex/skills/pull/SKILL.md +1 -1
  412. package/runtime/pi/.codex/skills/quest/SKILL.md +27 -66
  413. package/runtime/pi/.codex/skills/reflect/SKILL.md +22 -36
  414. package/runtime/pi/.codex/skills/save/SKILL.md +2 -2
  415. package/runtime/pi/.codex/skills/telemetry/SKILL.md +1 -1
  416. package/runtime/pi/.codex/skills/test/SKILL.md +1 -1
  417. package/runtime/pi/.codex/skills/tutorial/SKILL.md +40 -41
  418. package/runtime/pi/.codex/skills/view/SKILL.md +115 -111
  419. package/runtime/pi/.codex/skills/wrap/SKILL.md +45 -41
  420. package/runtime/pi/.codex/spec-manifest.json +9 -9
  421. package/runtime/pi/.pi/APPEND_SYSTEM.md +57 -48
  422. package/runtime/pi/.pi/extensions/egregore.ts +7 -0
  423. package/runtime/pi/.pi/spec-manifest.json +2 -2
  424. package/runtime/pi/AGENTS.md +62 -58
  425. package/runtime/pi/bin/activity-action.sh +92 -0
  426. package/runtime/pi/bin/activity-data.sh +12 -233
  427. package/runtime/pi/bin/agent.sh +84 -100
  428. package/runtime/pi/bin/artifact-register.sh +164 -0
  429. package/runtime/pi/bin/artifact-writeback.sh +53 -0
  430. package/runtime/pi/bin/artifacts.sh +288 -0
  431. package/runtime/pi/bin/build-sealed-dataroom.mjs +722 -0
  432. package/runtime/pi/bin/capture-run.sh +18 -2
  433. package/runtime/pi/bin/codex-render-spec.mjs +41 -16
  434. package/runtime/pi/bin/codex-session-start.sh +14 -4
  435. package/runtime/pi/bin/codex-skill-render.mjs +9 -7
  436. package/runtime/pi/bin/corpus_map.py +806 -0
  437. package/runtime/pi/bin/corpus_survey.py +304 -0
  438. package/runtime/pi/bin/dashboard-data.sh +11 -171
  439. package/runtime/pi/bin/github-auth.sh +121 -0
  440. package/runtime/pi/bin/graph-batch.sh +7 -0
  441. package/runtime/pi/bin/graph-op.sh +4 -0
  442. package/runtime/pi/bin/graph-projection.sh +54 -0
  443. package/runtime/pi/bin/graph-wal.sh +13 -0
  444. package/runtime/pi/bin/graph.sh +44 -0
  445. package/runtime/pi/bin/handoff-lifecycle-job.sh +146 -0
  446. package/runtime/pi/bin/handoff-lifecycle.sh +280 -0
  447. package/runtime/pi/bin/handoff-preview.sh +169 -0
  448. package/runtime/pi/bin/handoff-run.sh +42 -26
  449. package/runtime/pi/bin/ingest-graph.sh +6 -0
  450. package/runtime/pi/bin/ingest-item.sh +10 -0
  451. package/runtime/pi/bin/ingest.sh +59 -30
  452. package/runtime/pi/bin/invite.sh +6 -0
  453. package/runtime/pi/bin/issue.sh +10 -0
  454. package/runtime/pi/bin/knowledge.sh +10 -0
  455. package/runtime/pi/bin/lib/config.sh +20 -0
  456. package/runtime/pi/bin/lib/context.sh +46 -25
  457. package/runtime/pi/bin/lib/git-sync.sh +70 -6
  458. package/runtime/pi/bin/lib/greeting.sh +34 -5
  459. package/runtime/pi/bin/lib/handoff-meta.sh +97 -0
  460. package/runtime/pi/bin/lib/worktree-links.sh +6 -0
  461. package/runtime/pi/bin/node-run.sh +42 -0
  462. package/runtime/pi/bin/notification.sh +6 -0
  463. package/runtime/pi/bin/observe-context.sh +14 -0
  464. package/runtime/pi/bin/onboarding.sh +6 -0
  465. package/runtime/pi/bin/person.py +4 -0
  466. package/runtime/pi/bin/person.sh +43 -10
  467. package/runtime/pi/bin/pi-observe-context.mjs +93 -0
  468. package/runtime/pi/bin/pi-product-workflows.mjs +1 -1
  469. package/runtime/pi/bin/pi-render-spec.mjs +1 -1
  470. package/runtime/pi/bin/post-update.sh +37 -0
  471. package/runtime/pi/bin/prime-render-spec.mjs +147 -0
  472. package/runtime/pi/bin/publish-artifact.sh +55 -2
  473. package/runtime/pi/bin/quest.sh +9 -0
  474. package/runtime/pi/bin/question.sh +8 -0
  475. package/runtime/pi/bin/research-ingest.sh +7 -0
  476. package/runtime/pi/bin/restore-owned-skills.sh +67 -0
  477. package/runtime/pi/bin/retrieval_eval.py +385 -0
  478. package/runtime/pi/bin/runtime-identity.sh +70 -0
  479. package/runtime/pi/bin/runtime-upgrade.sh +43 -0
  480. package/runtime/pi/bin/scroll.sh +9 -0
  481. package/runtime/pi/bin/search.sh +231 -195
  482. package/runtime/pi/bin/settings.sh +174 -5
  483. package/runtime/pi/bin/startup-check.sh +136 -0
  484. package/runtime/pi/bin/telemetry.sh +522 -247
  485. package/runtime/pi/bin/test-changes.sh +344 -0
  486. package/runtime/pi/bin/thread.sh +9 -0
  487. package/runtime/pi/bin/todo.sh +9 -0
  488. package/runtime/pi/bin/view-render.sh +126 -0
  489. package/runtime/pi/bin/worktree-create.sh +19 -5
  490. package/runtime/pi/egregore_runtime/__init__.py +228 -0
  491. package/runtime/pi/egregore_runtime/adapters/__init__.py +5 -0
  492. package/runtime/pi/egregore_runtime/adapters/invitation.py +237 -0
  493. package/runtime/pi/egregore_runtime/adapters/notification.py +59 -0
  494. package/runtime/pi/egregore_runtime/adapters/qmd.py +1701 -0
  495. package/runtime/pi/egregore_runtime/adapters/qmd_cli.py +210 -0
  496. package/runtime/pi/egregore_runtime/adapters/qmd_embed_worker.py +59 -0
  497. package/runtime/pi/egregore_runtime/admin_gate.py +102 -0
  498. package/runtime/pi/egregore_runtime/artifacts.py +523 -0
  499. package/runtime/pi/egregore_runtime/contracts.py +499 -0
  500. package/runtime/pi/egregore_runtime/entitlements.py +85 -0
  501. package/runtime/pi/egregore_runtime/errors.py +10 -0
  502. package/runtime/pi/egregore_runtime/graph.py +356 -0
  503. package/runtime/pi/egregore_runtime/handoff_lookup.py +196 -0
  504. package/runtime/pi/egregore_runtime/harness_cli.py +1221 -0
  505. package/runtime/pi/egregore_runtime/identity.py +734 -0
  506. package/runtime/pi/egregore_runtime/identity_cli.py +91 -0
  507. package/runtime/pi/egregore_runtime/ingest.py +575 -0
  508. package/runtime/pi/egregore_runtime/ingest_cli.py +254 -0
  509. package/runtime/pi/egregore_runtime/ingest_index_cli.py +147 -0
  510. package/runtime/pi/egregore_runtime/invitation_cli.py +51 -0
  511. package/runtime/pi/egregore_runtime/invitations.py +116 -0
  512. package/runtime/pi/egregore_runtime/issue_cli.py +305 -0
  513. package/runtime/pi/egregore_runtime/issues.py +359 -0
  514. package/runtime/pi/egregore_runtime/knowledge.py +376 -0
  515. package/runtime/pi/egregore_runtime/knowledge_cli.py +173 -0
  516. package/runtime/pi/egregore_runtime/lifecycle.py +888 -0
  517. package/runtime/pi/egregore_runtime/lifecycle_cli.py +269 -0
  518. package/runtime/pi/egregore_runtime/notification_cli.py +125 -0
  519. package/runtime/pi/egregore_runtime/notifications.py +230 -0
  520. package/runtime/pi/egregore_runtime/observe.py +342 -0
  521. package/runtime/pi/egregore_runtime/onboarding.py +290 -0
  522. package/runtime/pi/egregore_runtime/onboarding_cli.py +110 -0
  523. package/runtime/pi/egregore_runtime/policy.py +144 -0
  524. package/runtime/pi/egregore_runtime/profile.py +193 -0
  525. package/runtime/pi/egregore_runtime/quest_cli.py +216 -0
  526. package/runtime/pi/egregore_runtime/question_cli.py +180 -0
  527. package/runtime/pi/egregore_runtime/questions.py +304 -0
  528. package/runtime/pi/egregore_runtime/quests.py +419 -0
  529. package/runtime/pi/egregore_runtime/readiness.py +379 -0
  530. package/runtime/pi/egregore_runtime/research_ingest.py +256 -0
  531. package/runtime/pi/egregore_runtime/research_ingest_cli.py +44 -0
  532. package/runtime/pi/egregore_runtime/runtime.py +464 -0
  533. package/runtime/pi/egregore_runtime/scroll_cli.py +185 -0
  534. package/runtime/pi/egregore_runtime/scrolls.py +726 -0
  535. package/runtime/pi/egregore_runtime/status.py +412 -0
  536. package/runtime/pi/egregore_runtime/status_cli.py +174 -0
  537. package/runtime/pi/egregore_runtime/sync.py +218 -0
  538. package/runtime/pi/egregore_runtime/teamsync.py +139 -0
  539. package/runtime/pi/egregore_runtime/telemetry.py +640 -0
  540. package/runtime/pi/egregore_runtime/thread_cli.py +173 -0
  541. package/runtime/pi/egregore_runtime/threads.py +517 -0
  542. package/runtime/pi/egregore_runtime/todo_cli.py +142 -0
  543. package/runtime/pi/egregore_runtime/todos.py +244 -0
  544. package/runtime/pi/egregore_runtime/upgrade.py +770 -0
  545. package/runtime/pi/egregore_runtime/upgrade_worker.py +53 -0
  546. package/runtime/pi/egregore_runtime/writeback.py +391 -0
  547. package/runtime/pi/egregore_runtime/writeback_cli.py +114 -0
  548. package/runtime/pi/manifest.json +98 -1
  549. package/runtime/prime/.codex/hooks/search-hint.js +21 -52
  550. package/runtime/prime/.codex/hooks.json +3 -3
  551. package/runtime/prime/.codex/skills/activity/SKILL.md +23 -66
  552. package/runtime/prime/.codex/skills/announce/SKILL.md +27 -50
  553. package/runtime/prime/.codex/skills/archive/SKILL.md +21 -36
  554. package/runtime/prime/.codex/skills/checkup/SKILL.md +77 -36
  555. package/runtime/prime/.codex/skills/dark-mode/SKILL.md +1 -1
  556. package/runtime/prime/.codex/skills/dashboard/SKILL.md +17 -47
  557. package/runtime/prime/.codex/skills/handoff/SKILL.md +84 -133
  558. package/runtime/prime/.codex/skills/harvest/SKILL.md +32 -117
  559. package/runtime/prime/.codex/skills/ingest/SKILL.md +47 -25
  560. package/runtime/prime/.codex/skills/ingest-user-interview/SKILL.md +18 -36
  561. package/runtime/prime/.codex/skills/ingest-user-interview/references/analysis-contract.md +42 -0
  562. package/runtime/prime/.codex/skills/invite/SKILL.md +21 -35
  563. package/runtime/prime/.codex/skills/issue/SKILL.md +60 -41
  564. package/runtime/prime/.codex/skills/me/SKILL.md +1 -1
  565. package/runtime/prime/.codex/skills/meeting/SKILL.md +16 -36
  566. package/runtime/prime/.codex/skills/meeting/references/analysis-contract.md +48 -0
  567. package/runtime/prime/.codex/skills/note/SKILL.md +30 -25
  568. package/runtime/prime/.codex/skills/onboarding/SKILL.md +36 -41
  569. package/runtime/prime/.codex/skills/pull/SKILL.md +1 -1
  570. package/runtime/prime/.codex/skills/quest/SKILL.md +27 -66
  571. package/runtime/prime/.codex/skills/reflect/SKILL.md +22 -36
  572. package/runtime/prime/.codex/skills/save/SKILL.md +2 -2
  573. package/runtime/prime/.codex/skills/telemetry/SKILL.md +1 -1
  574. package/runtime/prime/.codex/skills/test/SKILL.md +1 -1
  575. package/runtime/prime/.codex/skills/tutorial/SKILL.md +40 -41
  576. package/runtime/prime/.codex/skills/view/SKILL.md +115 -111
  577. package/runtime/prime/.codex/skills/wrap/SKILL.md +45 -41
  578. package/runtime/prime/.codex/spec-manifest.json +9 -9
  579. package/runtime/prime/.prime/agent/APPEND_SYSTEM.md +57 -48
  580. package/runtime/prime/.prime/agent/extensions/egregore.ts +7 -0
  581. package/runtime/prime/.prime/agent/spec-manifest.json +2 -2
  582. package/runtime/prime/AGENTS.md +62 -58
  583. package/runtime/prime/bin/activity-action.sh +92 -0
  584. package/runtime/prime/bin/activity-data.sh +12 -233
  585. package/runtime/prime/bin/agent.sh +84 -100
  586. package/runtime/prime/bin/artifact-register.sh +164 -0
  587. package/runtime/prime/bin/artifact-writeback.sh +53 -0
  588. package/runtime/prime/bin/artifacts.sh +288 -0
  589. package/runtime/prime/bin/build-sealed-dataroom.mjs +722 -0
  590. package/runtime/prime/bin/capture-run.sh +18 -2
  591. package/runtime/prime/bin/codex-render-spec.mjs +41 -16
  592. package/runtime/prime/bin/codex-session-start.sh +14 -4
  593. package/runtime/prime/bin/codex-skill-render.mjs +9 -7
  594. package/runtime/prime/bin/corpus_map.py +806 -0
  595. package/runtime/prime/bin/corpus_survey.py +304 -0
  596. package/runtime/prime/bin/dashboard-data.sh +11 -171
  597. package/runtime/prime/bin/github-auth.sh +121 -0
  598. package/runtime/prime/bin/graph-batch.sh +7 -0
  599. package/runtime/prime/bin/graph-op.sh +4 -0
  600. package/runtime/prime/bin/graph-projection.sh +54 -0
  601. package/runtime/prime/bin/graph-wal.sh +13 -0
  602. package/runtime/prime/bin/graph.sh +44 -0
  603. package/runtime/prime/bin/handoff-lifecycle-job.sh +146 -0
  604. package/runtime/prime/bin/handoff-lifecycle.sh +280 -0
  605. package/runtime/prime/bin/handoff-preview.sh +169 -0
  606. package/runtime/prime/bin/handoff-run.sh +42 -26
  607. package/runtime/prime/bin/ingest-graph.sh +6 -0
  608. package/runtime/prime/bin/ingest-item.sh +10 -0
  609. package/runtime/prime/bin/ingest.sh +59 -30
  610. package/runtime/prime/bin/invite.sh +6 -0
  611. package/runtime/prime/bin/issue.sh +10 -0
  612. package/runtime/prime/bin/knowledge.sh +10 -0
  613. package/runtime/prime/bin/lib/config.sh +20 -0
  614. package/runtime/prime/bin/lib/context.sh +46 -25
  615. package/runtime/prime/bin/lib/git-sync.sh +70 -6
  616. package/runtime/prime/bin/lib/greeting.sh +34 -5
  617. package/runtime/prime/bin/lib/handoff-meta.sh +97 -0
  618. package/runtime/prime/bin/lib/worktree-links.sh +6 -0
  619. package/runtime/prime/bin/node-run.sh +42 -0
  620. package/runtime/prime/bin/notification.sh +6 -0
  621. package/runtime/prime/bin/observe-context.sh +14 -0
  622. package/runtime/prime/bin/onboarding.sh +6 -0
  623. package/runtime/prime/bin/person.py +4 -0
  624. package/runtime/prime/bin/person.sh +43 -10
  625. package/runtime/prime/bin/pi-observe-context.mjs +93 -0
  626. package/runtime/prime/bin/pi-product-workflows.mjs +1 -1
  627. package/runtime/prime/bin/pi-render-spec.mjs +140 -0
  628. package/runtime/prime/bin/post-update.sh +37 -0
  629. package/runtime/prime/bin/prime-render-spec.mjs +1 -1
  630. package/runtime/prime/bin/publish-artifact.sh +55 -2
  631. package/runtime/prime/bin/quest.sh +9 -0
  632. package/runtime/prime/bin/question.sh +8 -0
  633. package/runtime/prime/bin/research-ingest.sh +7 -0
  634. package/runtime/prime/bin/restore-owned-skills.sh +67 -0
  635. package/runtime/prime/bin/retrieval_eval.py +385 -0
  636. package/runtime/prime/bin/runtime-identity.sh +70 -0
  637. package/runtime/prime/bin/runtime-upgrade.sh +43 -0
  638. package/runtime/prime/bin/scroll.sh +9 -0
  639. package/runtime/prime/bin/search.sh +231 -195
  640. package/runtime/prime/bin/settings.sh +174 -5
  641. package/runtime/prime/bin/startup-check.sh +136 -0
  642. package/runtime/prime/bin/telemetry.sh +522 -247
  643. package/runtime/prime/bin/test-changes.sh +344 -0
  644. package/runtime/prime/bin/thread.sh +9 -0
  645. package/runtime/prime/bin/todo.sh +9 -0
  646. package/runtime/prime/bin/view-render.sh +126 -0
  647. package/runtime/prime/bin/worktree-create.sh +19 -5
  648. package/runtime/prime/egregore_runtime/__init__.py +228 -0
  649. package/runtime/prime/egregore_runtime/adapters/__init__.py +5 -0
  650. package/runtime/prime/egregore_runtime/adapters/invitation.py +237 -0
  651. package/runtime/prime/egregore_runtime/adapters/notification.py +59 -0
  652. package/runtime/prime/egregore_runtime/adapters/qmd.py +1701 -0
  653. package/runtime/prime/egregore_runtime/adapters/qmd_cli.py +210 -0
  654. package/runtime/prime/egregore_runtime/adapters/qmd_embed_worker.py +59 -0
  655. package/runtime/prime/egregore_runtime/admin_gate.py +102 -0
  656. package/runtime/prime/egregore_runtime/artifacts.py +523 -0
  657. package/runtime/prime/egregore_runtime/contracts.py +499 -0
  658. package/runtime/prime/egregore_runtime/entitlements.py +85 -0
  659. package/runtime/prime/egregore_runtime/errors.py +10 -0
  660. package/runtime/prime/egregore_runtime/graph.py +356 -0
  661. package/runtime/prime/egregore_runtime/handoff_lookup.py +196 -0
  662. package/runtime/prime/egregore_runtime/harness_cli.py +1221 -0
  663. package/runtime/prime/egregore_runtime/identity.py +734 -0
  664. package/runtime/prime/egregore_runtime/identity_cli.py +91 -0
  665. package/runtime/prime/egregore_runtime/ingest.py +575 -0
  666. package/runtime/prime/egregore_runtime/ingest_cli.py +254 -0
  667. package/runtime/prime/egregore_runtime/ingest_index_cli.py +147 -0
  668. package/runtime/prime/egregore_runtime/invitation_cli.py +51 -0
  669. package/runtime/prime/egregore_runtime/invitations.py +116 -0
  670. package/runtime/prime/egregore_runtime/issue_cli.py +305 -0
  671. package/runtime/prime/egregore_runtime/issues.py +359 -0
  672. package/runtime/prime/egregore_runtime/knowledge.py +376 -0
  673. package/runtime/prime/egregore_runtime/knowledge_cli.py +173 -0
  674. package/runtime/prime/egregore_runtime/lifecycle.py +888 -0
  675. package/runtime/prime/egregore_runtime/lifecycle_cli.py +269 -0
  676. package/runtime/prime/egregore_runtime/notification_cli.py +125 -0
  677. package/runtime/prime/egregore_runtime/notifications.py +230 -0
  678. package/runtime/prime/egregore_runtime/observe.py +342 -0
  679. package/runtime/prime/egregore_runtime/onboarding.py +290 -0
  680. package/runtime/prime/egregore_runtime/onboarding_cli.py +110 -0
  681. package/runtime/prime/egregore_runtime/policy.py +144 -0
  682. package/runtime/prime/egregore_runtime/profile.py +193 -0
  683. package/runtime/prime/egregore_runtime/quest_cli.py +216 -0
  684. package/runtime/prime/egregore_runtime/question_cli.py +180 -0
  685. package/runtime/prime/egregore_runtime/questions.py +304 -0
  686. package/runtime/prime/egregore_runtime/quests.py +419 -0
  687. package/runtime/prime/egregore_runtime/readiness.py +379 -0
  688. package/runtime/prime/egregore_runtime/research_ingest.py +256 -0
  689. package/runtime/prime/egregore_runtime/research_ingest_cli.py +44 -0
  690. package/runtime/prime/egregore_runtime/runtime.py +464 -0
  691. package/runtime/prime/egregore_runtime/scroll_cli.py +185 -0
  692. package/runtime/prime/egregore_runtime/scrolls.py +726 -0
  693. package/runtime/prime/egregore_runtime/status.py +412 -0
  694. package/runtime/prime/egregore_runtime/status_cli.py +174 -0
  695. package/runtime/prime/egregore_runtime/sync.py +218 -0
  696. package/runtime/prime/egregore_runtime/teamsync.py +139 -0
  697. package/runtime/prime/egregore_runtime/telemetry.py +640 -0
  698. package/runtime/prime/egregore_runtime/thread_cli.py +173 -0
  699. package/runtime/prime/egregore_runtime/threads.py +517 -0
  700. package/runtime/prime/egregore_runtime/todo_cli.py +142 -0
  701. package/runtime/prime/egregore_runtime/todos.py +244 -0
  702. package/runtime/prime/egregore_runtime/upgrade.py +770 -0
  703. package/runtime/prime/egregore_runtime/upgrade_worker.py +53 -0
  704. package/runtime/prime/egregore_runtime/writeback.py +391 -0
  705. package/runtime/prime/egregore_runtime/writeback_cli.py +114 -0
  706. package/runtime/prime/manifest.json +98 -1
package/lib/setup.js CHANGED
@@ -12,6 +12,11 @@ const {
12
12
  installCodexRuntime,
13
13
  reportCodexRuntimeSummary,
14
14
  } = require("./codex-runtime");
15
+ const {
16
+ hasClaudeRuntimeSupport,
17
+ installClaudeRuntime,
18
+ reportClaudeRuntimeSummary,
19
+ } = require("./claude-runtime");
15
20
  const {
16
21
  hasPiRuntimeSupport,
17
22
  installPiRuntime,
@@ -27,6 +32,12 @@ const {
27
32
  reportConnectRuntimeSummary,
28
33
  } = require("./connect-runtime");
29
34
  const { commandExists } = require("./path-lookup");
35
+ const {
36
+ initializeIdentityState,
37
+ initializeOnboardingState,
38
+ initializeOrganizationConfig,
39
+ organizationIdentityDocument,
40
+ } = require("./runtime-identity");
30
41
 
31
42
  const https = require("node:https");
32
43
 
@@ -34,6 +45,41 @@ function run(cmd, opts = {}) {
34
45
  return execSync(cmd, { stdio: "pipe", encoding: "utf-8", timeout: 60000, ...opts }).trim();
35
46
  }
36
47
 
48
+ function prepareLocalRetrieval(egregoreDir, ui) {
49
+ const adapter = path.join(egregoreDir, "bin", "agent.sh");
50
+ if (!fs.existsSync(adapter)) {
51
+ ui.warn("Local retrieval setup is unavailable; update this Egregore before indexing memory");
52
+ return { status: "unavailable", bm25Ready: false, semantic: "unavailable" };
53
+ }
54
+ ui.info("Preparing Local retrieval · QMD 2.8.3 · BM25 first, semantic embeddings in background…");
55
+ const result = spawnSync("bash", [adapter, "sync"], {
56
+ cwd: egregoreDir,
57
+ encoding: "utf-8",
58
+ timeout: 180000,
59
+ env: { ...process.env, EGREGORE_RUNTIME: "installer" },
60
+ });
61
+ const output = `${result.stdout || ""}\n${result.stderr || ""}`;
62
+ const bm25Ready = /lexical ready:\s*yes/i.test(output);
63
+ const semantic = /semantic:\s*ready/i.test(output)
64
+ ? "ready"
65
+ : /semantic:\s*building/i.test(output)
66
+ ? "building"
67
+ : "unavailable";
68
+ if (result.status !== 0 || !bm25Ready) {
69
+ const detail = output.trim().split(/\r?\n/).find((line) => /^failure:/i.test(line));
70
+ ui.warn(`Canonical memory is installed, but Local retrieval is not ready${detail ? ` — ${detail}` : ""}`);
71
+ ui.info(" Retry: egregore runtime sync");
72
+ return { status: "degraded", bm25Ready, semantic, output };
73
+ }
74
+ ui.success("Canonical memory current · BM25 search ready");
75
+ if (semantic === "ready") {
76
+ ui.success("Semantic retrieval ready");
77
+ } else {
78
+ ui.info(" ◐ Semantic embeddings are building in the background; search works now with BM25");
79
+ }
80
+ return { status: "ready", bm25Ready, semantic, output };
81
+ }
82
+
37
83
  function ghApi(method, apiPath, token, body) {
38
84
  return new Promise((resolve, reject) => {
39
85
  const payload = body ? JSON.stringify(body) : null;
@@ -77,6 +123,7 @@ function ghApi(method, apiPath, token, body) {
77
123
  function initMemoryDirs(memoryDir) {
78
124
  const dirs = [
79
125
  "people",
126
+ "identity",
80
127
  "invites",
81
128
  "handoffs",
82
129
  "knowledge/questions",
@@ -99,6 +146,9 @@ function initMemoryDirs(memoryDir) {
99
146
  * Accept pending GitHub repo collaboration invitations for the given org.
100
147
  */
101
148
  async function acceptPendingInvitations(githubToken, githubOrg, ui) {
149
+ // Offline/local fixtures and token-less refreshes have no GitHub identity to
150
+ // query. Returning here also keeps packaged-artifact canaries hermetic.
151
+ if (!githubToken || !githubOrg) return;
102
152
  try {
103
153
  const { status, data } = await ghApi("GET", "/user/repository_invitations", githubToken);
104
154
  if (status !== 200 || !Array.isArray(data)) return;
@@ -292,7 +342,7 @@ async function ensureInstallerMemberRole(data = {}, existingState = {}, ui) {
292
342
  }
293
343
 
294
344
  function buildOnboardingState(existing = {}, data = {}, opts = {}) {
295
- const state = { ...existing };
345
+ let state = initializeIdentityState(existing, data, opts);
296
346
  const preferredRuntime = normalizeRuntime(opts.runtime);
297
347
  const githubUsername = data.github_username || state.github_username || "";
298
348
  const githubId = data.github_id || state.github_id || null;
@@ -359,7 +409,7 @@ function buildOnboardingState(existing = {}, data = {}, opts = {}) {
359
409
  if (data.onboarding_role || data.role) {
360
410
  state.onboarding.role = data.onboarding_role || data.role;
361
411
  }
362
- return state;
412
+ return initializeOnboardingState(state, { ...data, display_name: displayName, member_role: memberRole });
363
413
  }
364
414
 
365
415
  async function ensureInstallerDisplayName(data, existingState, ui) {
@@ -488,8 +538,13 @@ async function install(data, ui, targetDir, opts = {}) {
488
538
  // could lose egregore.json even though the default branch contained it.
489
539
  // Recover that exact file from origin/main when possible, then validate it
490
540
  // before writing credentials or registering a launcher.
541
+ let runtimeConfig = null;
491
542
  if (api_key || data.api_url) {
492
- ensureConnectedConfig(egregoreDir, data, ui);
543
+ runtimeConfig = ensureConnectedConfig(egregoreDir, data, ui);
544
+ } else {
545
+ try {
546
+ runtimeConfig = JSON.parse(fs.readFileSync(path.join(egregoreDir, "egregore.json"), "utf-8"));
547
+ } catch {}
493
548
  }
494
549
 
495
550
  // 4. Write .env (secrets only — never committed to git)
@@ -508,7 +563,12 @@ async function install(data, ui, targetDir, opts = {}) {
508
563
  }
509
564
  const displayName = await ensureInstallerDisplayName(data, state, ui);
510
565
  const memberRole = await ensureInstallerMemberRole(data, state, ui);
511
- state = buildOnboardingState(state, { ...data, display_name: displayName, member_role: memberRole }, {
566
+ state = buildOnboardingState(state, {
567
+ ...data,
568
+ org_id: data.org_id || runtimeConfig?.org_id || `legacy-org:${data.slug || "unknown"}`,
569
+ display_name: displayName,
570
+ member_role: memberRole,
571
+ }, {
512
572
  runtime: preferredRuntime,
513
573
  flowVariant: opts.flowVariant,
514
574
  onboardingComplete: opts.onboardingComplete !== false,
@@ -516,13 +576,13 @@ async function install(data, ui, targetDir, opts = {}) {
516
576
  fs.writeFileSync(statePath, JSON.stringify(state, null, 2) + "\n");
517
577
  try { ensurePersonOnboardingWitness(memoryDir, state); } catch {}
518
578
 
519
- // 4c. Overlay the selected shell-runtime support. Claude Code reads
520
- // CLAUDE.md, not AGENTS.md; overlaying the Codex AGENTS.md/.codex into a Claude
521
- // workspace gives a wandering agent a competing startup protocol (the
522
- // xenocracy onboarding regression). Claude joiners keep the cloned repo as-is —
523
- // any inherited AGENTS.md carries the runtime-precedence guard that redirects
524
- // Claude back to CLAUDE.md.
525
- if (preferredRuntime === "codex") {
579
+ // 4c. Overlay the selected harness adapter from the installed npm artifact.
580
+ // Each adapter shares the same Egregore Runtime while keeping harness files
581
+ // thin and independently refreshable.
582
+ if (preferredRuntime === "claude-code") {
583
+ const claudeRuntime = installClaudeRuntime(egregoreDir);
584
+ reportClaudeRuntimeSummary(claudeRuntime, ui);
585
+ } else if (preferredRuntime === "codex") {
526
586
  const codexRuntime = installCodexRuntime(egregoreDir);
527
587
  reportCodexRuntimeSummary(codexRuntime, ui);
528
588
  } else if (preferredRuntime === "pi") {
@@ -556,6 +616,11 @@ async function install(data, ui, targetDir, opts = {}) {
556
616
  } catch {}
557
617
  }
558
618
 
619
+ // Make canonical memory searchable before the first harness prompt. The
620
+ // unified Runtime sync blocks only through BM25 readiness; initial semantic
621
+ // embeddings are explicitly detached and continue in the background.
622
+ const retrieval = prepareLocalRetrieval(egregoreDir, ui);
623
+
559
624
  // 5. Register instance + install launcher binary
560
625
  ui.step(5, totalSteps, "Registering instance...");
561
626
  registerInstance(forkDirName, org_name, egregoreDir, preferredRuntime);
@@ -625,6 +690,9 @@ async function install(data, ui, targetDir, opts = {}) {
625
690
  telegram: telegram_group_link ? "connected" : "skipped",
626
691
  assistant: runtimeDisplay(preferredRuntime),
627
692
  command: "run egregore anytime",
693
+ retrieval: retrieval.bm25Ready
694
+ ? (retrieval.semantic === "ready" ? "BM25 + semantic ready" : "BM25 ready · semantic building")
695
+ : "needs retry",
628
696
  };
629
697
 
630
698
  const ui_ = require("./ui");
@@ -637,6 +705,7 @@ async function install(data, ui, targetDir, opts = {}) {
637
705
  ui.info(`${ui.green("●")} invite ${setupSummary.invite}`);
638
706
  ui.info(`${ui.green("●")} Telegram ${setupSummary.telegram}`);
639
707
  ui.info(`${ui.green("●")} harness ${setupSummary.assistant}`);
708
+ ui.info(`${retrieval.bm25Ready ? ui.green("●") : ui.yellow("!")} retrieval ${setupSummary.retrieval}`);
640
709
  ui.info(`${ui.green("●")} next ${setupSummary.command}`);
641
710
  console.log("");
642
711
  ui.info(`Your workspace:`);
@@ -730,6 +799,16 @@ function ensureConnectedConfig(repoDir, data, ui) {
730
799
  config.mode = "connected";
731
800
  changed = true;
732
801
  }
802
+ const initialized = initializeOrganizationConfig(config, {
803
+ // Legacy connected configs must resolve identically for every joiner.
804
+ // The control plane can replace this explicit compatibility id during a
805
+ // coordinated migration; never mint a different local org id per clone.
806
+ orgId: data.org_id || config.org_id || `legacy-org:${config.slug}`,
807
+ });
808
+ if (JSON.stringify(initialized) !== JSON.stringify(config)) {
809
+ config = initialized;
810
+ changed = true;
811
+ }
733
812
  if (changed) {
734
813
  fs.writeFileSync(configPath, JSON.stringify(config, null, 2) + "\n");
735
814
  }
@@ -919,6 +998,8 @@ function primeTrustArgs() {
919
998
  }
920
999
 
921
1000
  function claudeLaunchArgs(egregoreDir) {
1001
+ // Submit Egregore's intentional initial prompt so Claude opens directly into
1002
+ // the organization start experience.
922
1003
  const args = ["start"];
923
1004
  const memoryLink = path.join(egregoreDir, "memory");
924
1005
  try {
@@ -1170,7 +1251,16 @@ async function launchOrInstruct(egregoreDir, alias, ui, ctx = {}) {
1170
1251
  ui.info(`Next time, ${launcherNextStep(ui, aliasName)}`);
1171
1252
  console.log("");
1172
1253
 
1173
- if (runtime === "codex") {
1254
+ if (runtime === "claude-code") {
1255
+ const claudeRuntime = installClaudeRuntime(egregoreDir);
1256
+ reportClaudeRuntimeSummary(claudeRuntime, ui);
1257
+ if (!hasClaudeRuntimeSupport(egregoreDir)) {
1258
+ ui.warn("Claude Code runtime support is incomplete; refresh this Egregore before launching.");
1259
+ ui.info(`Run ${ui.bold(aliasName)} after updating the checkout.`);
1260
+ console.log("");
1261
+ return;
1262
+ }
1263
+ } else if (runtime === "codex") {
1174
1264
  const codexRuntime = installCodexRuntime(egregoreDir);
1175
1265
  reportCodexRuntimeSummary(codexRuntime, ui);
1176
1266
  if (!hasCodexCoreSupport(egregoreDir)) {
@@ -1309,11 +1399,17 @@ function appendLocalBinToRc(ui) {
1309
1399
  */
1310
1400
  async function installLauncherBinary(egregoreDir, ui) {
1311
1401
  const template = readLauncherTemplate();
1312
- const candidates = [
1313
- { dir: "/usr/local/bin", location: "system" },
1314
- { dir: "/opt/homebrew/bin", location: "system" },
1315
- { dir: path.join(os.homedir(), ".local", "bin"), location: "user" },
1316
- ];
1402
+ // Tests, containers, and managed installations can pin the launcher to an
1403
+ // isolated directory. When explicitly configured, never fall through to a
1404
+ // machine-wide path: isolation is the reason the override exists.
1405
+ const configuredBinDir = process.env.EGREGORE_LAUNCHER_BIN_DIR;
1406
+ const candidates = configuredBinDir
1407
+ ? [{ dir: path.resolve(configuredBinDir), location: "user" }]
1408
+ : [
1409
+ { dir: "/usr/local/bin", location: "system" },
1410
+ { dir: "/opt/homebrew/bin", location: "system" },
1411
+ { dir: path.join(os.homedir(), ".local", "bin"), location: "user" },
1412
+ ];
1317
1413
 
1318
1414
  let chosen = null;
1319
1415
  for (const c of candidates) {
@@ -1540,6 +1636,8 @@ module.exports = {
1540
1636
  installLauncherBinary,
1541
1637
  launchOrInstruct,
1542
1638
  buildOnboardingState,
1639
+ initializeOrganizationConfig,
1640
+ organizationIdentityDocument,
1543
1641
  ensurePersonOnboardingWitness,
1544
1642
  ensureInstallerMemberRole,
1545
1643
  embedToken,
@@ -1551,5 +1649,6 @@ module.exports = {
1551
1649
  ensureDevelop,
1552
1650
  ensureConnectedConfig,
1553
1651
  resolveEgregoreInstallDir,
1652
+ prepareLocalRetrieval,
1554
1653
  run,
1555
1654
  };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "create-egregore",
3
- "version": "0.20.2",
4
- "description": "Set up Egregore for your team in one command \u2014 installs the egregore launcher and your choice of Claude Code, Codex, or Pi.",
3
+ "version": "0.21.0-runtime-mvp.2",
4
+ "description": "Set up Egregore for your team in one command — installs the egregore launcher and your choice of Claude Code, Codex, or Pi.",
5
5
  "license": "MIT",
6
6
  "bin": {
7
7
  "create-egregore": "./bin/cli.js"
@@ -10,18 +10,22 @@
10
10
  "node": ">=18"
11
11
  },
12
12
  "scripts": {
13
- "build:runtime": "node ../../bin/capability-distribution.mjs generate-skill-view --root ../.. && node scripts/build-runtime-bundle.mjs && node scripts/build-pi-runtime-bundle.mjs && node scripts/build-prime-runtime-bundle.mjs && node ../../api/scripts/build-connect-runtime-pack.mjs",
13
+ "build:runtime": "node ../../bin/capability-distribution.mjs generate-skill-view --root ../.. && node scripts/build-runtime-bundle.mjs && node scripts/build-claude-runtime-bundle.mjs && node scripts/build-pi-runtime-bundle.mjs && node scripts/build-prime-runtime-bundle.mjs && node ../../api/scripts/build-connect-runtime-pack.mjs",
14
+ "build:claude-runtime": "node scripts/build-claude-runtime-bundle.mjs",
14
15
  "build:pi-runtime": "node scripts/build-pi-runtime-bundle.mjs",
15
16
  "build:prime-runtime": "node scripts/build-prime-runtime-bundle.mjs",
16
- "test": "node ../../bin/capability-distribution.mjs validate --root ../.. && node scripts/build-runtime-bundle.mjs --check && node scripts/build-pi-runtime-bundle.mjs --check && node scripts/build-prime-runtime-bundle.mjs --check && node ../../bin/prime-render-spec.mjs --check && node ../../bin/pi-render-spec.mjs --check && node ../../api/scripts/build-connect-runtime-pack.mjs --check && node --test test/capability-distribution.test.js test/connect-runtime.test.js test/context.test.js test/path-lookup.test.js test/nixos-portability.test.js test/parse-join-target.test.js test/skip-repos.test.js test/install-origin-guard.test.js test/onboarding-shortcircuit.test.js test/welcome-screen.test.js test/runtime-selection.test.js test/command-generation.test.js test/auth-gh.test.js test/gauntlet-fixes.test.js test/codex-runtime.test.js test/pi-runtime.test.js test/prime-runtime.test.js test/prime-branch-policy.test.js test/prime-bridge-skill.test.js test/prime-session-smoke.test.js test/pi-product-workflows.test.js test/installer-runtime-source.test.js test/scroll-repro.test.js test/launcher-refocus-redraw.test.js test/multiselect-remote-search.test.js test/back-navigation.test.js test/manifest-form.test.js test/launcher-delete.test.js test/launcher-connect.test.js test/installer-connect-choice.test.js test/launcher-connected-status.test.js test/launcher-permissions.test.js test/launcher-update.test.js test/connected-config.test.js test/workflow-settings.test.js",
17
+ "test": "node ../../bin/capability-distribution.mjs validate --root ../.. && node scripts/build-runtime-bundle.mjs --check && node scripts/build-claude-runtime-bundle.mjs --check && node scripts/build-pi-runtime-bundle.mjs --check && node scripts/build-prime-runtime-bundle.mjs --check && node ../../bin/prime-render-spec.mjs --check && node ../../bin/pi-render-spec.mjs --check && node ../../api/scripts/build-connect-runtime-pack.mjs --check && node --test test/capability-distribution.test.js test/connect-runtime.test.js test/context.test.js test/path-lookup.test.js test/nixos-portability.test.js test/parse-join-target.test.js test/skip-repos.test.js test/install-origin-guard.test.js test/onboarding-shortcircuit.test.js test/runtime-identity.test.js test/welcome-screen.test.js test/runtime-selection.test.js test/command-generation.test.js test/auth-gh.test.js test/gauntlet-fixes.test.js test/claude-runtime.test.js test/codex-runtime.test.js test/pi-runtime.test.js test/prime-runtime.test.js test/prime-branch-policy.test.js test/prime-bridge-skill.test.js test/pi-observe-context.test.js test/pi-session-smoke.test.js test/prime-session-smoke.test.js test/pi-product-workflows.test.js test/installer-runtime-source.test.js test/runtime-readiness.test.js test/scroll-repro.test.js test/launcher-refocus-redraw.test.js test/multiselect-remote-search.test.js test/back-navigation.test.js test/manifest-form.test.js test/launcher-delete.test.js test/launcher-connect.test.js test/installer-connect-choice.test.js test/launcher-connected-status.test.js test/launcher-telemetry.test.js test/launcher-runtime.test.js test/launcher-settings.test.js test/launcher-permissions.test.js test/launcher-update.test.js test/connected-config.test.js test/workflow-settings.test.js",
18
+ "test:packed-runtime": "node scripts/packed-runtime-canary.mjs",
17
19
  "test:e2e": "node --test test/e2e-local.test.js",
18
- "test:all": "node scripts/build-runtime-bundle.mjs --check && node scripts/build-pi-runtime-bundle.mjs --check && node --test test/"
20
+ "test:all": "node scripts/build-runtime-bundle.mjs --check && node scripts/build-claude-runtime-bundle.mjs --check && node scripts/build-pi-runtime-bundle.mjs --check && node --test test/"
19
21
  },
20
22
  "files": [
21
23
  "bin/",
22
24
  "lib/",
23
25
  "assets/",
24
- "runtime/"
26
+ "runtime/",
27
+ "!runtime/**/__pycache__/",
28
+ "!runtime/**/*.py[cod]"
25
29
  ],
26
30
  "keywords": [
27
31
  "egregore",
@@ -0,0 +1,110 @@
1
+ # Commit Format — one convention, every harness
2
+
3
+ Every commit in an Egregore — from Claude Code, Codex, Pi, a background
4
+ script, or a human — carries the same message shape. Commits are the
5
+ finest-grained record the org keeps: agents reconstruct context from
6
+ `git log` before they read anything else, and a message that cannot be
7
+ understood without its session is context lost.
8
+
9
+ This spec covers newly authored, non-merge commits. Git-generated
10
+ messages — merges, `git revert`'s native `Revert "…"` form, autosquash
11
+ fixups — keep their native shape, and the advisory lint skips them.
12
+
13
+ Sibling spec: `.claude/context/pr-format.md`. Wording rules for both:
14
+ `.claude/context/git-language.md`.
15
+
16
+ ## Subject
17
+
18
+ `type(scope): imperative summary` — the same grammar as PR titles
19
+ (`pr-format.md` § Title is the authoritative statement; restated here).
20
+
21
+ - ≤ 72 characters (git tooling truncates beyond that), aim for ≤ 50.
22
+ No trailing period.
23
+ - Types: `feat` `fix` `docs` `refactor` `chore` `test` `perf` `ci`
24
+ `build` `release` — the same set as PR titles.
25
+ - Scope = subsystem (`loom`, `emissary`, `handoff`, `api`, `site`,
26
+ `launcher`, …), the same vocabulary as PR titles. Omit it when the
27
+ summary already names the subsystem, when the change spans several,
28
+ or when none fits.
29
+ - Imperative, lowercase summary. It completes "if applied, this commit
30
+ will ___": `fix(emissary): stop smokes emailing recipients` — not
31
+ `Fixed smokes` or `fixes smokes`.
32
+ - A breaking change appends `!` after the scope
33
+ (`feat(api)!: drop v1 handoff routes`) and explains the break in the
34
+ body.
35
+ - One logical change per commit — split when the parts are
36
+ independently revertable. A summary that needs "and" is the usual
37
+ smell, not the law.
38
+
39
+ ## Body
40
+
41
+ Blank line after the subject, then prose wrapped at 72 columns. Never
42
+ break a URL, command, or quoted error string to satisfy the wrap.
43
+
44
+ - Optional when the subject says everything (typo fixes, mechanical
45
+ renames). Required when the diff cannot explain its own motivation.
46
+ - What changed and why. State prior behavior, what was wrong with it,
47
+ and why this solution. Skip implementation narration the diff
48
+ already shows; do include mechanism that affects review, operation,
49
+ or compatibility.
50
+ - Wording follows `.claude/context/git-language.md`.
51
+
52
+ ## Trailers
53
+
54
+ Agent-authored commits end with machine-readable git trailers,
55
+ blank-line separated from the body:
56
+
57
+ ```
58
+ Egregore-Session: <session id>
59
+ Co-Authored-By: <harness identity>
60
+ ```
61
+
62
+ - `Egregore-Session` is the id from `.egregore-session-id`. It links
63
+ the commit to its session in the graph — commit → session → handoff
64
+ lineage becomes queryable:
65
+ `git log --format='%(trailers:key=Egregore-Session,valueonly)'`.
66
+ Omit only when no session id exists (bare scripts, CI). A commit
67
+ carrying work from several sessions repeats the trailer, one per
68
+ session; squashes keep every contributing session's trailer, and a
69
+ cherry-pick keeps the source commit's.
70
+ - `Co-Authored-By` is the harness's standing identity line — e.g.
71
+ `Claude Fable 5 <noreply@anthropic.com>`, the Codex worker identity,
72
+ or `Egregore Attendant <noreply@egregore.xyz>`. It states that an
73
+ agent co-authored the commit; GitHub rendering it as a co-author is
74
+ the point, not a side effect.
75
+ - Issue references are trailers (`Refs: #123`), never subject text.
76
+ `Refs:` is non-closing metadata; use `owner/repo#123` across repos.
77
+ GitHub closing keywords belong in the PR body, not in commits.
78
+ - Humans committing by hand skip trailers.
79
+
80
+ ## Automation
81
+
82
+ Background scripts use the same grammar — imperative, and
83
+ `chore(<subsystem>)` unless a more specific type applies:
84
+
85
+ | Legacy style | Convention |
86
+ |---|---|
87
+ | `Handoff: <topic> (to <who>)` | `chore(handoff): record <topic> (to <who>)` |
88
+ | `Auto-save: session content` | `chore(autosave): save session work` |
89
+ | `Archive session <id>` | `chore(transcripts): archive session <id>` |
90
+ | `Auto-update Egregore framework` | `chore(sync): update framework from upstream` |
91
+
92
+ Workflow scopes name workflow artifacts only. A commit that carries
93
+ real work derives its type and scope from the diff — `/save` of a loom
94
+ feature is `feat(loom): …`, never `chore(save): …`. The transport must
95
+ not mask the work.
96
+
97
+ ## Relationship to PRs
98
+
99
+ The PR title always describes the whole PR. When the PR holds a single
100
+ commit whose subject already does that, reuse the subject verbatim —
101
+ this is the common case for agent PRs.
102
+
103
+ ## Enforcement map
104
+
105
+ | Layer | Path | Covers |
106
+ |---|---|---|
107
+ | Authoring | `.claude/skills/commit`, `/save`, `/pr`, AGENTS.md § Commit format | Claude Code, Codex, Pi, shell agents |
108
+ | Composers | `bin/agent.sh`, `bin/handoff-*.sh`, `bin/lib/git-sync.sh`, `bin/session-autosave.sh`, … | every scripted commit |
109
+ | Advisory CI | `.github/workflows/pr-format.yml` commit-subject report | every PR branch |
110
+ | Parity | convention parity test (`tests/`) | spec copies across runtimes, and the grammar shared by this spec and `pr-format.md` |
@@ -0,0 +1,46 @@
1
+ # Git Language — how commits and PRs are worded
2
+
3
+ Ten rules for the prose inside commit messages and PR bodies. Distilled
4
+ from Simplified Technical English (ASD-STE100) and the Google developer
5
+ documentation style guide, tuned for Egregore's actual reader: a
6
+ teammate or an agent months from now, holding only the message and the
7
+ diff.
8
+
9
+ Structure (sections, subjects, lengths) lives in
10
+ `.claude/context/commit-format.md` and `.claude/context/pr-format.md`.
11
+ This file governs wording only — specifically, prose that *describes
12
+ the change*. Subjects follow the format specs' imperative grammar, and
13
+ procedure belongs where the format specs ask for it: verification
14
+ commands, manual steps, migration and rollback notes are welcome in
15
+ `## Verification` and `## Risk`, and rules 5 and 10 do not apply to
16
+ them.
17
+
18
+ 1. **Active voice, named actor.** "The gate skips drafts" — not
19
+ "drafts are skipped."
20
+ 2. **Present tense for the change; past tense only for old behavior.**
21
+ "Routes /commit to the executor tier. Previously every call went to
22
+ the frontier model."
23
+ 3. **One fact per sentence.** Two facts are two sentences. Aim for
24
+ 20 words or fewer.
25
+ 4. **One name per thing.** Use the org's established term every time,
26
+ never a synonym for variety. If the org says "handoff", then
27
+ "session summary" is a different thing or a mistake.
28
+ (`.claude/rules/voice-bedrock.md` lists banned vocabulary.)
29
+ 5. **What and why, never how.** The diff is the how. Spend words on
30
+ prior behavior, the problem, and why this solution.
31
+ 6. **Concrete over abstract.** Name the file, the command, the error
32
+ string, the number. "Cuts session start 24s → 4s" beats
33
+ "significantly improves performance."
34
+ 7. **Front-load.** Strongest fact first — in the subject, in each
35
+ bullet, in each paragraph. Readers scan.
36
+ 8. **Self-contained.** No session-local shorthand, no "as discussed",
37
+ no bare "it" pointing outside the message. Every reference resolves
38
+ from the message alone; link what you cite.
39
+ 9. **No filler.** Delete intensifiers and hedges: simply, just, very,
40
+ significantly, comprehensive, robust, might potentially.
41
+ 10. **Describe the change, not your process.** "Validate input before
42
+ parsing" — not "addressed review feedback" or "updated per
43
+ discussion."
44
+
45
+ The test for any sentence: could an agent with no memory of this
46
+ session act on it correctly? If not, add the missing name or number.
@@ -0,0 +1,66 @@
1
+ # External notification consent
2
+
3
+ This protocol applies to every Telegram, Teams, or other external notification
4
+ in every harness. It applies even when the user asked to announce, notify,
5
+ handoff, invite, or message someone, and even when the harness is running with
6
+ broad tool permissions.
7
+
8
+ ## Invariant
9
+
10
+ Never dispatch an external notification until the human has approved that one
11
+ exact delivery in a dedicated checkpoint. The checkpoint must show:
12
+
13
+ - the organization;
14
+ - the final recipient or group;
15
+ - every channel that will receive it;
16
+ - the exact final message, including links.
17
+
18
+ A workflow request, plan approval, batch approval, prior approval, broad
19
+ permission mode, or approval of a related action is not notification consent.
20
+ There is no standing "always allow" choice. One approval authorizes one attempt
21
+ to send one immutable message.
22
+
23
+ ## Required flow
24
+
25
+ 1. Finish the message first. Publish any artifact and insert its real URL
26
+ before planning; never change the message after preview.
27
+ 2. Resolve the exact delivery without sending:
28
+
29
+ ```bash
30
+ PLAN_JSON=$(bash bin/notify.sh plan send "$RECIPIENT" "$MESSAGE")
31
+ # or
32
+ PLAN_JSON=$(bash bin/notify.sh plan group "$MESSAGE")
33
+ ```
34
+
35
+ 3. Read `plan_id` and `digest` from `PLAN_JSON`. Show the organization,
36
+ recipient, all `channels`/`deliveries`, and exact `message` in a dedicated
37
+ Send / Edit / Cancel question. Use the harness's structured question UI
38
+ when available. Otherwise show the same fields in plain text and stop for
39
+ the user's answer.
40
+ 4. Only if the user selects Send for that exact preview:
41
+
42
+ ```bash
43
+ APPROVAL_JSON=$(bash bin/notify.sh approve \
44
+ "$PLAN_ID" "$DIGEST" APPROVE_EXACT_NOTIFICATION)
45
+ APPROVAL_TOKEN=$(printf '%s' "$APPROVAL_JSON" | jq -r '.approval_token')
46
+ bash bin/notify.sh dispatch "$PLAN_ID" "$APPROVAL_TOKEN"
47
+ ```
48
+
49
+ 5. If the user chooses Edit, cancel the old plan, edit, create a new plan, and
50
+ preview again. If they choose Cancel, cancel it and do not send. If the plan
51
+ expires or dispatch fails, create a new plan and obtain new consent; never
52
+ retry from the old approval.
53
+
54
+ ## Hard rules
55
+
56
+ - Never call notification API endpoints directly. Use `bin/notify.sh`.
57
+ - Never use legacy `notify.sh send` or `notify.sh group`; they only create a
58
+ proposal and intentionally cannot dispatch.
59
+ - Never substitute a group when a direct message cannot be delivered.
60
+ - Never add a channel after preview.
61
+ - Never approve or dispatch from a detached/background process, hook, cron
62
+ job, batch execution, or unattended agent. Those paths may create a plan and
63
+ report that human approval is pending.
64
+ - Multiple direct recipients require a separate preview and approval for each
65
+ exact message. A group fanout may use one approval only when every receiving
66
+ channel is listed in the preview.
@@ -0,0 +1,67 @@
1
+ # PR Format — one convention, every harness
2
+
3
+ Every pull request in an Egregore — from Claude Code, Codex, any other
4
+ harness, a script, or a human — carries the same description shape. Domain
5
+ knowledge encoded as infrastructure, not as per-harness habit. It is
6
+ enforced in four layers: authoring instructions (this spec, referenced by
7
+ `/pr`, `/save`, and AGENTS.md), a fallback generator (`bin/agent.sh save`
8
+ builds a compliant body when the caller supplies none), a web-UI template
9
+ for humans, and a CI gate (`.github/workflows/pr-format.yml`) that fails
10
+ non-compliant PRs with a fix-it comment.
11
+
12
+ Sibling spec: `.claude/context/commit-format.md` (commit subjects share
13
+ this spec's title grammar). Wording rules for both:
14
+ `.claude/context/git-language.md`.
15
+
16
+ ## Title
17
+
18
+ `type(scope): imperative summary` — ≤ 72 chars, no trailing period.
19
+ Types: `feat` `fix` `docs` `refactor` `chore` `test` `perf` `ci` `build`
20
+ `release`. Scope = subsystem (`loom`, `minion`, `emissary`, `api`, `site`,
21
+ `launcher`, …). Title style is advisory — reported by the gate, not failed.
22
+
23
+ ## Body
24
+
25
+ Three sections are gated, two are optional. In this order:
26
+
27
+ | Section | Required | Contents |
28
+ |---|---|---|
29
+ | `## What` | always | 1–4 bullets, the change itself, most important first. A reader should know what merged from this section alone. |
30
+ | `## Why` | always | 1–3 sentences. The motivation or problem — context the diff cannot show. Link the decision/quest/issue that spawned it. |
31
+ | `## Verification` | when the diff touches non-markdown files | How this was checked: test command + result, manual steps, or an honest `Not verified — <reason>`. Never omit; never fake. The gate accepts `## Testing` as a legacy alias — write `## Verification` in new PRs. |
32
+ | `## Risk` | when real | Breaking changes, blast radius (does merging publish or deploy?), rollback note. |
33
+ | `## Links` | when they exist | Issues, quests, handoffs, superseded PRs. |
34
+
35
+ Footer: the attribution line of the harness that authored the body —
36
+ one line, the final non-blank line, preceded by a blank line, shaped
37
+ `🤖 <verb> with/via <harness>`. Canonical forms:
38
+ `🤖 Generated with [Claude Code](https://claude.com/claude-code)`,
39
+ `🤖 Generated with Codex`. The transport form (`🤖 Saved via
40
+ bin/agent.sh`) appears only when the bridge generated the skeleton
41
+ body itself. Humans skip the footer. Commit-level attribution is
42
+ separate and lives in git trailers — see
43
+ `.claude/context/commit-format.md` § Trailers.
44
+
45
+ ## Rules of thumb
46
+
47
+ - **Compact beats complete.** Drop a detail if it doesn't change what the
48
+ reviewer does next. Hierarchy beats prose: lead each section with its
49
+ strongest line.
50
+ - **Never create a PR with an empty body** or `--fill`. A harness that
51
+ cannot write the body routes through `bin/agent.sh save`, which generates
52
+ a compliant skeleton from the commit log and diff.
53
+ - **Auto-merged markdown-only PRs still need What + Why** — two lines
54
+ suffice.
55
+
56
+ ## Enforcement map
57
+
58
+ | Layer | Path | Covers |
59
+ |---|---|---|
60
+ | Authoring | `.claude/skills/pr`, `.claude/skills/save`, `AGENTS.md` § Pull request format | Claude Code, Codex, shell agents |
61
+ | Fallback generator | `bin/agent.sh save` (`--pr-body` / auto-skeleton) | any bridge caller |
62
+ | Template | `.github/pull_request_template.md` | humans in the web UI |
63
+ | Gate | `.github/workflows/pr-format.yml` | everything — fails the check and posts a fix-it comment |
64
+
65
+ Gate exemptions: draft PRs, `release:`-titled PRs, bot-authored PRs.
66
+ The gate blocks auto-merge only if `pr-format` is marked a required status
67
+ check in branch protection — an admin, per-repo setting.