create-egregore 0.20.1 → 0.21.0-runtime-mvp.1

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 (715) hide show
  1. package/assets/egregore-launcher.js +1059 -21
  2. package/bin/cli.js +11 -0
  3. package/lib/claude-runtime.js +192 -0
  4. package/lib/local.js +42 -51
  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 -19
  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 +11 -11
  268. package/runtime/codex/AGENTS.md +85 -67
  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 +99 -103
  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 +46 -19
  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/contribute-guard.sh +79 -0
  281. package/runtime/codex/bin/corpus_map.py +806 -0
  282. package/runtime/codex/bin/corpus_survey.py +304 -0
  283. package/runtime/codex/bin/dashboard-data.sh +11 -171
  284. package/runtime/codex/bin/github-auth.sh +121 -0
  285. package/runtime/codex/bin/graph-batch.sh +7 -0
  286. package/runtime/codex/bin/graph-op.sh +4 -0
  287. package/runtime/codex/bin/graph-projection.sh +54 -0
  288. package/runtime/codex/bin/graph-wal.sh +13 -0
  289. package/runtime/codex/bin/graph.sh +44 -0
  290. package/runtime/codex/bin/handoff-lifecycle-job.sh +146 -0
  291. package/runtime/codex/bin/handoff-lifecycle.sh +280 -0
  292. package/runtime/codex/bin/handoff-preview.sh +169 -0
  293. package/runtime/codex/bin/handoff-run.sh +42 -26
  294. package/runtime/codex/bin/handoff-save-egregore.sh +1 -1
  295. package/runtime/codex/bin/ingest-graph.sh +6 -0
  296. package/runtime/codex/bin/ingest-item.sh +10 -0
  297. package/runtime/codex/bin/ingest.sh +59 -30
  298. package/runtime/codex/bin/invite.sh +6 -0
  299. package/runtime/codex/bin/issue.sh +10 -0
  300. package/runtime/codex/bin/knowledge.sh +10 -0
  301. package/runtime/codex/bin/lib/config.sh +20 -0
  302. package/runtime/codex/bin/lib/context.sh +46 -25
  303. package/runtime/codex/bin/lib/git-sync.sh +86 -6
  304. package/runtime/codex/bin/lib/greeting.sh +36 -7
  305. package/runtime/codex/bin/lib/handoff-meta.sh +97 -0
  306. package/runtime/codex/bin/lib/worktree-links.sh +6 -0
  307. package/runtime/codex/bin/node-run.sh +42 -0
  308. package/runtime/codex/bin/notification.sh +6 -0
  309. package/runtime/codex/bin/observe-context.sh +14 -0
  310. package/runtime/codex/bin/onboarding.sh +6 -0
  311. package/runtime/codex/bin/person.py +4 -0
  312. package/runtime/codex/bin/person.sh +43 -10
  313. package/runtime/codex/bin/pi-render-spec.mjs +140 -0
  314. package/runtime/codex/bin/post-update.sh +37 -0
  315. package/runtime/codex/bin/prime-render-spec.mjs +147 -0
  316. package/runtime/codex/bin/publish-artifact.sh +55 -2
  317. package/runtime/codex/bin/quest.sh +9 -0
  318. package/runtime/codex/bin/question.sh +8 -0
  319. package/runtime/codex/bin/research-ingest.sh +7 -0
  320. package/runtime/codex/bin/restore-owned-skills.sh +67 -0
  321. package/runtime/codex/bin/retrieval_eval.py +385 -0
  322. package/runtime/codex/bin/runtime-identity.sh +70 -0
  323. package/runtime/codex/bin/runtime-upgrade.sh +43 -0
  324. package/runtime/codex/bin/scroll.sh +9 -0
  325. package/runtime/codex/bin/search.sh +243 -165
  326. package/runtime/codex/bin/session-autosave.sh +6 -1
  327. package/runtime/codex/bin/settings.sh +235 -7
  328. package/runtime/codex/bin/startup-check.sh +136 -0
  329. package/runtime/codex/bin/telemetry.sh +522 -247
  330. package/runtime/codex/bin/test-changes.sh +344 -0
  331. package/runtime/codex/bin/thread.sh +9 -0
  332. package/runtime/codex/bin/todo.sh +9 -0
  333. package/runtime/codex/bin/view-render.sh +126 -0
  334. package/runtime/codex/bin/worktree-create.sh +23 -6
  335. package/runtime/codex/egregore_runtime/__init__.py +228 -0
  336. package/runtime/codex/egregore_runtime/adapters/__init__.py +5 -0
  337. package/runtime/codex/egregore_runtime/adapters/invitation.py +237 -0
  338. package/runtime/codex/egregore_runtime/adapters/notification.py +59 -0
  339. package/runtime/codex/egregore_runtime/adapters/qmd.py +1701 -0
  340. package/runtime/codex/egregore_runtime/adapters/qmd_cli.py +210 -0
  341. package/runtime/codex/egregore_runtime/adapters/qmd_embed_worker.py +59 -0
  342. package/runtime/codex/egregore_runtime/admin_gate.py +102 -0
  343. package/runtime/codex/egregore_runtime/artifacts.py +523 -0
  344. package/runtime/codex/egregore_runtime/contracts.py +499 -0
  345. package/runtime/codex/egregore_runtime/entitlements.py +85 -0
  346. package/runtime/codex/egregore_runtime/errors.py +10 -0
  347. package/runtime/codex/egregore_runtime/graph.py +356 -0
  348. package/runtime/codex/egregore_runtime/handoff_lookup.py +196 -0
  349. package/runtime/codex/egregore_runtime/harness_cli.py +1221 -0
  350. package/runtime/codex/egregore_runtime/identity.py +734 -0
  351. package/runtime/codex/egregore_runtime/identity_cli.py +91 -0
  352. package/runtime/codex/egregore_runtime/ingest.py +575 -0
  353. package/runtime/codex/egregore_runtime/ingest_cli.py +254 -0
  354. package/runtime/codex/egregore_runtime/ingest_index_cli.py +147 -0
  355. package/runtime/codex/egregore_runtime/invitation_cli.py +51 -0
  356. package/runtime/codex/egregore_runtime/invitations.py +116 -0
  357. package/runtime/codex/egregore_runtime/issue_cli.py +305 -0
  358. package/runtime/codex/egregore_runtime/issues.py +359 -0
  359. package/runtime/codex/egregore_runtime/knowledge.py +376 -0
  360. package/runtime/codex/egregore_runtime/knowledge_cli.py +173 -0
  361. package/runtime/codex/egregore_runtime/lifecycle.py +888 -0
  362. package/runtime/codex/egregore_runtime/lifecycle_cli.py +269 -0
  363. package/runtime/codex/egregore_runtime/notification_cli.py +125 -0
  364. package/runtime/codex/egregore_runtime/notifications.py +230 -0
  365. package/runtime/codex/egregore_runtime/observe.py +342 -0
  366. package/runtime/codex/egregore_runtime/onboarding.py +290 -0
  367. package/runtime/codex/egregore_runtime/onboarding_cli.py +110 -0
  368. package/runtime/codex/egregore_runtime/policy.py +144 -0
  369. package/runtime/codex/egregore_runtime/profile.py +193 -0
  370. package/runtime/codex/egregore_runtime/quest_cli.py +216 -0
  371. package/runtime/codex/egregore_runtime/question_cli.py +180 -0
  372. package/runtime/codex/egregore_runtime/questions.py +304 -0
  373. package/runtime/codex/egregore_runtime/quests.py +419 -0
  374. package/runtime/codex/egregore_runtime/readiness.py +379 -0
  375. package/runtime/codex/egregore_runtime/research_ingest.py +256 -0
  376. package/runtime/codex/egregore_runtime/research_ingest_cli.py +44 -0
  377. package/runtime/codex/egregore_runtime/runtime.py +464 -0
  378. package/runtime/codex/egregore_runtime/scroll_cli.py +185 -0
  379. package/runtime/codex/egregore_runtime/scrolls.py +726 -0
  380. package/runtime/codex/egregore_runtime/status.py +412 -0
  381. package/runtime/codex/egregore_runtime/status_cli.py +174 -0
  382. package/runtime/codex/egregore_runtime/sync.py +218 -0
  383. package/runtime/codex/egregore_runtime/teamsync.py +139 -0
  384. package/runtime/codex/egregore_runtime/telemetry.py +640 -0
  385. package/runtime/codex/egregore_runtime/thread_cli.py +173 -0
  386. package/runtime/codex/egregore_runtime/threads.py +517 -0
  387. package/runtime/codex/egregore_runtime/todo_cli.py +142 -0
  388. package/runtime/codex/egregore_runtime/todos.py +244 -0
  389. package/runtime/codex/egregore_runtime/upgrade.py +770 -0
  390. package/runtime/codex/egregore_runtime/upgrade_worker.py +53 -0
  391. package/runtime/codex/egregore_runtime/writeback.py +391 -0
  392. package/runtime/codex/egregore_runtime/writeback_cli.py +114 -0
  393. package/runtime/codex/manifest.json +99 -1
  394. package/runtime/pi/.codex/hooks/search-hint.js +21 -52
  395. package/runtime/pi/.codex/hooks.json +3 -3
  396. package/runtime/pi/.codex/skills/activity/SKILL.md +23 -66
  397. package/runtime/pi/.codex/skills/announce/SKILL.md +27 -50
  398. package/runtime/pi/.codex/skills/archive/SKILL.md +21 -36
  399. package/runtime/pi/.codex/skills/checkup/SKILL.md +77 -36
  400. package/runtime/pi/.codex/skills/dark-mode/SKILL.md +1 -1
  401. package/runtime/pi/.codex/skills/dashboard/SKILL.md +17 -47
  402. package/runtime/pi/.codex/skills/handoff/SKILL.md +84 -133
  403. package/runtime/pi/.codex/skills/harvest/SKILL.md +32 -117
  404. package/runtime/pi/.codex/skills/ingest/SKILL.md +47 -25
  405. package/runtime/pi/.codex/skills/ingest-user-interview/SKILL.md +18 -36
  406. package/runtime/pi/.codex/skills/ingest-user-interview/references/analysis-contract.md +42 -0
  407. package/runtime/pi/.codex/skills/invite/SKILL.md +21 -35
  408. package/runtime/pi/.codex/skills/issue/SKILL.md +60 -41
  409. package/runtime/pi/.codex/skills/me/SKILL.md +1 -1
  410. package/runtime/pi/.codex/skills/meeting/SKILL.md +16 -36
  411. package/runtime/pi/.codex/skills/meeting/references/analysis-contract.md +48 -0
  412. package/runtime/pi/.codex/skills/note/SKILL.md +30 -25
  413. package/runtime/pi/.codex/skills/onboarding/SKILL.md +36 -41
  414. package/runtime/pi/.codex/skills/pull/SKILL.md +1 -1
  415. package/runtime/pi/.codex/skills/quest/SKILL.md +27 -66
  416. package/runtime/pi/.codex/skills/reflect/SKILL.md +22 -36
  417. package/runtime/pi/.codex/skills/save/SKILL.md +2 -2
  418. package/runtime/pi/.codex/skills/telemetry/SKILL.md +1 -1
  419. package/runtime/pi/.codex/skills/test/SKILL.md +1 -1
  420. package/runtime/pi/.codex/skills/tutorial/SKILL.md +40 -41
  421. package/runtime/pi/.codex/skills/view/SKILL.md +115 -111
  422. package/runtime/pi/.codex/skills/wrap/SKILL.md +45 -41
  423. package/runtime/pi/.codex/spec-manifest.json +11 -11
  424. package/runtime/pi/.pi/APPEND_SYSTEM.md +80 -57
  425. package/runtime/pi/.pi/extensions/egregore.ts +7 -0
  426. package/runtime/pi/.pi/spec-manifest.json +2 -2
  427. package/runtime/pi/AGENTS.md +85 -67
  428. package/runtime/pi/bin/activity-action.sh +92 -0
  429. package/runtime/pi/bin/activity-data.sh +12 -233
  430. package/runtime/pi/bin/agent.sh +99 -103
  431. package/runtime/pi/bin/artifact-register.sh +164 -0
  432. package/runtime/pi/bin/artifact-writeback.sh +53 -0
  433. package/runtime/pi/bin/artifacts.sh +288 -0
  434. package/runtime/pi/bin/build-sealed-dataroom.mjs +722 -0
  435. package/runtime/pi/bin/capture-run.sh +18 -2
  436. package/runtime/pi/bin/codex-render-spec.mjs +46 -19
  437. package/runtime/pi/bin/codex-session-start.sh +14 -4
  438. package/runtime/pi/bin/codex-skill-render.mjs +9 -7
  439. package/runtime/pi/bin/contribute-guard.sh +79 -0
  440. package/runtime/pi/bin/corpus_map.py +806 -0
  441. package/runtime/pi/bin/corpus_survey.py +304 -0
  442. package/runtime/pi/bin/dashboard-data.sh +11 -171
  443. package/runtime/pi/bin/github-auth.sh +121 -0
  444. package/runtime/pi/bin/graph-batch.sh +7 -0
  445. package/runtime/pi/bin/graph-op.sh +4 -0
  446. package/runtime/pi/bin/graph-projection.sh +54 -0
  447. package/runtime/pi/bin/graph-wal.sh +13 -0
  448. package/runtime/pi/bin/graph.sh +44 -0
  449. package/runtime/pi/bin/handoff-lifecycle-job.sh +146 -0
  450. package/runtime/pi/bin/handoff-lifecycle.sh +280 -0
  451. package/runtime/pi/bin/handoff-preview.sh +169 -0
  452. package/runtime/pi/bin/handoff-run.sh +42 -26
  453. package/runtime/pi/bin/handoff-save-egregore.sh +1 -1
  454. package/runtime/pi/bin/ingest-graph.sh +6 -0
  455. package/runtime/pi/bin/ingest-item.sh +10 -0
  456. package/runtime/pi/bin/ingest.sh +59 -30
  457. package/runtime/pi/bin/invite.sh +6 -0
  458. package/runtime/pi/bin/issue.sh +10 -0
  459. package/runtime/pi/bin/knowledge.sh +10 -0
  460. package/runtime/pi/bin/lib/config.sh +20 -0
  461. package/runtime/pi/bin/lib/context.sh +46 -25
  462. package/runtime/pi/bin/lib/git-sync.sh +86 -6
  463. package/runtime/pi/bin/lib/greeting.sh +36 -7
  464. package/runtime/pi/bin/lib/handoff-meta.sh +97 -0
  465. package/runtime/pi/bin/lib/worktree-links.sh +6 -0
  466. package/runtime/pi/bin/node-run.sh +42 -0
  467. package/runtime/pi/bin/notification.sh +6 -0
  468. package/runtime/pi/bin/observe-context.sh +14 -0
  469. package/runtime/pi/bin/onboarding.sh +6 -0
  470. package/runtime/pi/bin/person.py +4 -0
  471. package/runtime/pi/bin/person.sh +43 -10
  472. package/runtime/pi/bin/pi-observe-context.mjs +93 -0
  473. package/runtime/pi/bin/pi-product-workflows.mjs +1 -1
  474. package/runtime/pi/bin/pi-render-spec.mjs +1 -1
  475. package/runtime/pi/bin/post-update.sh +37 -0
  476. package/runtime/pi/bin/prime-render-spec.mjs +147 -0
  477. package/runtime/pi/bin/publish-artifact.sh +55 -2
  478. package/runtime/pi/bin/quest.sh +9 -0
  479. package/runtime/pi/bin/question.sh +8 -0
  480. package/runtime/pi/bin/research-ingest.sh +7 -0
  481. package/runtime/pi/bin/restore-owned-skills.sh +67 -0
  482. package/runtime/pi/bin/retrieval_eval.py +385 -0
  483. package/runtime/pi/bin/runtime-identity.sh +70 -0
  484. package/runtime/pi/bin/runtime-upgrade.sh +43 -0
  485. package/runtime/pi/bin/scroll.sh +9 -0
  486. package/runtime/pi/bin/search.sh +243 -165
  487. package/runtime/pi/bin/session-autosave.sh +6 -1
  488. package/runtime/pi/bin/settings.sh +235 -7
  489. package/runtime/pi/bin/startup-check.sh +136 -0
  490. package/runtime/pi/bin/telemetry.sh +522 -247
  491. package/runtime/pi/bin/test-changes.sh +344 -0
  492. package/runtime/pi/bin/thread.sh +9 -0
  493. package/runtime/pi/bin/todo.sh +9 -0
  494. package/runtime/pi/bin/view-render.sh +126 -0
  495. package/runtime/pi/bin/worktree-create.sh +23 -6
  496. package/runtime/pi/egregore_runtime/__init__.py +228 -0
  497. package/runtime/pi/egregore_runtime/adapters/__init__.py +5 -0
  498. package/runtime/pi/egregore_runtime/adapters/invitation.py +237 -0
  499. package/runtime/pi/egregore_runtime/adapters/notification.py +59 -0
  500. package/runtime/pi/egregore_runtime/adapters/qmd.py +1701 -0
  501. package/runtime/pi/egregore_runtime/adapters/qmd_cli.py +210 -0
  502. package/runtime/pi/egregore_runtime/adapters/qmd_embed_worker.py +59 -0
  503. package/runtime/pi/egregore_runtime/admin_gate.py +102 -0
  504. package/runtime/pi/egregore_runtime/artifacts.py +523 -0
  505. package/runtime/pi/egregore_runtime/contracts.py +499 -0
  506. package/runtime/pi/egregore_runtime/entitlements.py +85 -0
  507. package/runtime/pi/egregore_runtime/errors.py +10 -0
  508. package/runtime/pi/egregore_runtime/graph.py +356 -0
  509. package/runtime/pi/egregore_runtime/handoff_lookup.py +196 -0
  510. package/runtime/pi/egregore_runtime/harness_cli.py +1221 -0
  511. package/runtime/pi/egregore_runtime/identity.py +734 -0
  512. package/runtime/pi/egregore_runtime/identity_cli.py +91 -0
  513. package/runtime/pi/egregore_runtime/ingest.py +575 -0
  514. package/runtime/pi/egregore_runtime/ingest_cli.py +254 -0
  515. package/runtime/pi/egregore_runtime/ingest_index_cli.py +147 -0
  516. package/runtime/pi/egregore_runtime/invitation_cli.py +51 -0
  517. package/runtime/pi/egregore_runtime/invitations.py +116 -0
  518. package/runtime/pi/egregore_runtime/issue_cli.py +305 -0
  519. package/runtime/pi/egregore_runtime/issues.py +359 -0
  520. package/runtime/pi/egregore_runtime/knowledge.py +376 -0
  521. package/runtime/pi/egregore_runtime/knowledge_cli.py +173 -0
  522. package/runtime/pi/egregore_runtime/lifecycle.py +888 -0
  523. package/runtime/pi/egregore_runtime/lifecycle_cli.py +269 -0
  524. package/runtime/pi/egregore_runtime/notification_cli.py +125 -0
  525. package/runtime/pi/egregore_runtime/notifications.py +230 -0
  526. package/runtime/pi/egregore_runtime/observe.py +342 -0
  527. package/runtime/pi/egregore_runtime/onboarding.py +290 -0
  528. package/runtime/pi/egregore_runtime/onboarding_cli.py +110 -0
  529. package/runtime/pi/egregore_runtime/policy.py +144 -0
  530. package/runtime/pi/egregore_runtime/profile.py +193 -0
  531. package/runtime/pi/egregore_runtime/quest_cli.py +216 -0
  532. package/runtime/pi/egregore_runtime/question_cli.py +180 -0
  533. package/runtime/pi/egregore_runtime/questions.py +304 -0
  534. package/runtime/pi/egregore_runtime/quests.py +419 -0
  535. package/runtime/pi/egregore_runtime/readiness.py +379 -0
  536. package/runtime/pi/egregore_runtime/research_ingest.py +256 -0
  537. package/runtime/pi/egregore_runtime/research_ingest_cli.py +44 -0
  538. package/runtime/pi/egregore_runtime/runtime.py +464 -0
  539. package/runtime/pi/egregore_runtime/scroll_cli.py +185 -0
  540. package/runtime/pi/egregore_runtime/scrolls.py +726 -0
  541. package/runtime/pi/egregore_runtime/status.py +412 -0
  542. package/runtime/pi/egregore_runtime/status_cli.py +174 -0
  543. package/runtime/pi/egregore_runtime/sync.py +218 -0
  544. package/runtime/pi/egregore_runtime/teamsync.py +139 -0
  545. package/runtime/pi/egregore_runtime/telemetry.py +640 -0
  546. package/runtime/pi/egregore_runtime/thread_cli.py +173 -0
  547. package/runtime/pi/egregore_runtime/threads.py +517 -0
  548. package/runtime/pi/egregore_runtime/todo_cli.py +142 -0
  549. package/runtime/pi/egregore_runtime/todos.py +244 -0
  550. package/runtime/pi/egregore_runtime/upgrade.py +770 -0
  551. package/runtime/pi/egregore_runtime/upgrade_worker.py +53 -0
  552. package/runtime/pi/egregore_runtime/writeback.py +391 -0
  553. package/runtime/pi/egregore_runtime/writeback_cli.py +114 -0
  554. package/runtime/pi/manifest.json +99 -1
  555. package/runtime/prime/.codex/hooks/search-hint.js +21 -52
  556. package/runtime/prime/.codex/hooks.json +3 -3
  557. package/runtime/prime/.codex/skills/activity/SKILL.md +23 -66
  558. package/runtime/prime/.codex/skills/announce/SKILL.md +27 -50
  559. package/runtime/prime/.codex/skills/archive/SKILL.md +21 -36
  560. package/runtime/prime/.codex/skills/checkup/SKILL.md +77 -36
  561. package/runtime/prime/.codex/skills/dark-mode/SKILL.md +1 -1
  562. package/runtime/prime/.codex/skills/dashboard/SKILL.md +17 -47
  563. package/runtime/prime/.codex/skills/handoff/SKILL.md +84 -133
  564. package/runtime/prime/.codex/skills/harvest/SKILL.md +32 -117
  565. package/runtime/prime/.codex/skills/ingest/SKILL.md +47 -25
  566. package/runtime/prime/.codex/skills/ingest-user-interview/SKILL.md +18 -36
  567. package/runtime/prime/.codex/skills/ingest-user-interview/references/analysis-contract.md +42 -0
  568. package/runtime/prime/.codex/skills/invite/SKILL.md +21 -35
  569. package/runtime/prime/.codex/skills/issue/SKILL.md +60 -41
  570. package/runtime/prime/.codex/skills/me/SKILL.md +1 -1
  571. package/runtime/prime/.codex/skills/meeting/SKILL.md +16 -36
  572. package/runtime/prime/.codex/skills/meeting/references/analysis-contract.md +48 -0
  573. package/runtime/prime/.codex/skills/note/SKILL.md +30 -25
  574. package/runtime/prime/.codex/skills/onboarding/SKILL.md +36 -41
  575. package/runtime/prime/.codex/skills/pull/SKILL.md +1 -1
  576. package/runtime/prime/.codex/skills/quest/SKILL.md +27 -66
  577. package/runtime/prime/.codex/skills/reflect/SKILL.md +22 -36
  578. package/runtime/prime/.codex/skills/save/SKILL.md +2 -2
  579. package/runtime/prime/.codex/skills/telemetry/SKILL.md +1 -1
  580. package/runtime/prime/.codex/skills/test/SKILL.md +1 -1
  581. package/runtime/prime/.codex/skills/tutorial/SKILL.md +40 -41
  582. package/runtime/prime/.codex/skills/view/SKILL.md +115 -111
  583. package/runtime/prime/.codex/skills/wrap/SKILL.md +45 -41
  584. package/runtime/prime/.codex/spec-manifest.json +11 -11
  585. package/runtime/prime/.prime/agent/APPEND_SYSTEM.md +81 -58
  586. package/runtime/prime/.prime/agent/extensions/egregore.ts +7 -0
  587. package/runtime/prime/.prime/agent/spec-manifest.json +2 -2
  588. package/runtime/prime/AGENTS.md +85 -67
  589. package/runtime/prime/bin/activity-action.sh +92 -0
  590. package/runtime/prime/bin/activity-data.sh +12 -233
  591. package/runtime/prime/bin/agent.sh +99 -103
  592. package/runtime/prime/bin/artifact-register.sh +164 -0
  593. package/runtime/prime/bin/artifact-writeback.sh +53 -0
  594. package/runtime/prime/bin/artifacts.sh +288 -0
  595. package/runtime/prime/bin/build-sealed-dataroom.mjs +722 -0
  596. package/runtime/prime/bin/capture-run.sh +18 -2
  597. package/runtime/prime/bin/codex-render-spec.mjs +46 -19
  598. package/runtime/prime/bin/codex-session-start.sh +14 -4
  599. package/runtime/prime/bin/codex-skill-render.mjs +9 -7
  600. package/runtime/prime/bin/contribute-guard.sh +79 -0
  601. package/runtime/prime/bin/corpus_map.py +806 -0
  602. package/runtime/prime/bin/corpus_survey.py +304 -0
  603. package/runtime/prime/bin/dashboard-data.sh +11 -171
  604. package/runtime/prime/bin/github-auth.sh +121 -0
  605. package/runtime/prime/bin/graph-batch.sh +7 -0
  606. package/runtime/prime/bin/graph-op.sh +4 -0
  607. package/runtime/prime/bin/graph-projection.sh +54 -0
  608. package/runtime/prime/bin/graph-wal.sh +13 -0
  609. package/runtime/prime/bin/graph.sh +44 -0
  610. package/runtime/prime/bin/handoff-lifecycle-job.sh +146 -0
  611. package/runtime/prime/bin/handoff-lifecycle.sh +280 -0
  612. package/runtime/prime/bin/handoff-preview.sh +169 -0
  613. package/runtime/prime/bin/handoff-run.sh +42 -26
  614. package/runtime/prime/bin/handoff-save-egregore.sh +1 -1
  615. package/runtime/prime/bin/ingest-graph.sh +6 -0
  616. package/runtime/prime/bin/ingest-item.sh +10 -0
  617. package/runtime/prime/bin/ingest.sh +59 -30
  618. package/runtime/prime/bin/invite.sh +6 -0
  619. package/runtime/prime/bin/issue.sh +10 -0
  620. package/runtime/prime/bin/knowledge.sh +10 -0
  621. package/runtime/prime/bin/lib/config.sh +20 -0
  622. package/runtime/prime/bin/lib/context.sh +46 -25
  623. package/runtime/prime/bin/lib/git-sync.sh +86 -6
  624. package/runtime/prime/bin/lib/greeting.sh +36 -7
  625. package/runtime/prime/bin/lib/handoff-meta.sh +97 -0
  626. package/runtime/prime/bin/lib/worktree-links.sh +6 -0
  627. package/runtime/prime/bin/node-run.sh +42 -0
  628. package/runtime/prime/bin/notification.sh +6 -0
  629. package/runtime/prime/bin/observe-context.sh +14 -0
  630. package/runtime/prime/bin/onboarding.sh +6 -0
  631. package/runtime/prime/bin/person.py +4 -0
  632. package/runtime/prime/bin/person.sh +43 -10
  633. package/runtime/prime/bin/pi-observe-context.mjs +93 -0
  634. package/runtime/prime/bin/pi-product-workflows.mjs +1 -1
  635. package/runtime/prime/bin/pi-render-spec.mjs +140 -0
  636. package/runtime/prime/bin/post-update.sh +37 -0
  637. package/runtime/prime/bin/prime-render-spec.mjs +2 -2
  638. package/runtime/prime/bin/publish-artifact.sh +55 -2
  639. package/runtime/prime/bin/quest.sh +9 -0
  640. package/runtime/prime/bin/question.sh +8 -0
  641. package/runtime/prime/bin/research-ingest.sh +7 -0
  642. package/runtime/prime/bin/restore-owned-skills.sh +67 -0
  643. package/runtime/prime/bin/retrieval_eval.py +385 -0
  644. package/runtime/prime/bin/runtime-identity.sh +70 -0
  645. package/runtime/prime/bin/runtime-upgrade.sh +43 -0
  646. package/runtime/prime/bin/scroll.sh +9 -0
  647. package/runtime/prime/bin/search.sh +243 -165
  648. package/runtime/prime/bin/session-autosave.sh +6 -1
  649. package/runtime/prime/bin/settings.sh +235 -7
  650. package/runtime/prime/bin/startup-check.sh +136 -0
  651. package/runtime/prime/bin/telemetry.sh +522 -247
  652. package/runtime/prime/bin/test-changes.sh +344 -0
  653. package/runtime/prime/bin/thread.sh +9 -0
  654. package/runtime/prime/bin/todo.sh +9 -0
  655. package/runtime/prime/bin/view-render.sh +126 -0
  656. package/runtime/prime/bin/worktree-create.sh +23 -6
  657. package/runtime/prime/egregore_runtime/__init__.py +228 -0
  658. package/runtime/prime/egregore_runtime/adapters/__init__.py +5 -0
  659. package/runtime/prime/egregore_runtime/adapters/invitation.py +237 -0
  660. package/runtime/prime/egregore_runtime/adapters/notification.py +59 -0
  661. package/runtime/prime/egregore_runtime/adapters/qmd.py +1701 -0
  662. package/runtime/prime/egregore_runtime/adapters/qmd_cli.py +210 -0
  663. package/runtime/prime/egregore_runtime/adapters/qmd_embed_worker.py +59 -0
  664. package/runtime/prime/egregore_runtime/admin_gate.py +102 -0
  665. package/runtime/prime/egregore_runtime/artifacts.py +523 -0
  666. package/runtime/prime/egregore_runtime/contracts.py +499 -0
  667. package/runtime/prime/egregore_runtime/entitlements.py +85 -0
  668. package/runtime/prime/egregore_runtime/errors.py +10 -0
  669. package/runtime/prime/egregore_runtime/graph.py +356 -0
  670. package/runtime/prime/egregore_runtime/handoff_lookup.py +196 -0
  671. package/runtime/prime/egregore_runtime/harness_cli.py +1221 -0
  672. package/runtime/prime/egregore_runtime/identity.py +734 -0
  673. package/runtime/prime/egregore_runtime/identity_cli.py +91 -0
  674. package/runtime/prime/egregore_runtime/ingest.py +575 -0
  675. package/runtime/prime/egregore_runtime/ingest_cli.py +254 -0
  676. package/runtime/prime/egregore_runtime/ingest_index_cli.py +147 -0
  677. package/runtime/prime/egregore_runtime/invitation_cli.py +51 -0
  678. package/runtime/prime/egregore_runtime/invitations.py +116 -0
  679. package/runtime/prime/egregore_runtime/issue_cli.py +305 -0
  680. package/runtime/prime/egregore_runtime/issues.py +359 -0
  681. package/runtime/prime/egregore_runtime/knowledge.py +376 -0
  682. package/runtime/prime/egregore_runtime/knowledge_cli.py +173 -0
  683. package/runtime/prime/egregore_runtime/lifecycle.py +888 -0
  684. package/runtime/prime/egregore_runtime/lifecycle_cli.py +269 -0
  685. package/runtime/prime/egregore_runtime/notification_cli.py +125 -0
  686. package/runtime/prime/egregore_runtime/notifications.py +230 -0
  687. package/runtime/prime/egregore_runtime/observe.py +342 -0
  688. package/runtime/prime/egregore_runtime/onboarding.py +290 -0
  689. package/runtime/prime/egregore_runtime/onboarding_cli.py +110 -0
  690. package/runtime/prime/egregore_runtime/policy.py +144 -0
  691. package/runtime/prime/egregore_runtime/profile.py +193 -0
  692. package/runtime/prime/egregore_runtime/quest_cli.py +216 -0
  693. package/runtime/prime/egregore_runtime/question_cli.py +180 -0
  694. package/runtime/prime/egregore_runtime/questions.py +304 -0
  695. package/runtime/prime/egregore_runtime/quests.py +419 -0
  696. package/runtime/prime/egregore_runtime/readiness.py +379 -0
  697. package/runtime/prime/egregore_runtime/research_ingest.py +256 -0
  698. package/runtime/prime/egregore_runtime/research_ingest_cli.py +44 -0
  699. package/runtime/prime/egregore_runtime/runtime.py +464 -0
  700. package/runtime/prime/egregore_runtime/scroll_cli.py +185 -0
  701. package/runtime/prime/egregore_runtime/scrolls.py +726 -0
  702. package/runtime/prime/egregore_runtime/status.py +412 -0
  703. package/runtime/prime/egregore_runtime/status_cli.py +174 -0
  704. package/runtime/prime/egregore_runtime/sync.py +218 -0
  705. package/runtime/prime/egregore_runtime/teamsync.py +139 -0
  706. package/runtime/prime/egregore_runtime/telemetry.py +640 -0
  707. package/runtime/prime/egregore_runtime/thread_cli.py +173 -0
  708. package/runtime/prime/egregore_runtime/threads.py +517 -0
  709. package/runtime/prime/egregore_runtime/todo_cli.py +142 -0
  710. package/runtime/prime/egregore_runtime/todos.py +244 -0
  711. package/runtime/prime/egregore_runtime/upgrade.py +770 -0
  712. package/runtime/prime/egregore_runtime/upgrade_worker.py +53 -0
  713. package/runtime/prime/egregore_runtime/writeback.py +391 -0
  714. package/runtime/prime/egregore_runtime/writeback_cli.py +114 -0
  715. package/runtime/prime/manifest.json +99 -1
package/bin/cli.js CHANGED
@@ -30,6 +30,11 @@ const {
30
30
  installCodexRuntime,
31
31
  reportCodexRuntimeSummary,
32
32
  } = require("../lib/codex-runtime");
33
+ const {
34
+ hasClaudeRuntimeSupport,
35
+ installClaudeRuntime,
36
+ reportClaudeRuntimeSummary,
37
+ } = require("../lib/claude-runtime");
33
38
  const {
34
39
  hasPiRuntimeSupport,
35
40
  installPiRuntime,
@@ -131,6 +136,12 @@ async function upgradePortableRuntimesForExisting(instances) {
131
136
  const connectPack = eligibility.eligible
132
137
  ? await fetchConnectRuntimePack(inst.path)
133
138
  : null;
139
+ const claudeSummary = installClaudeRuntime(inst.path);
140
+ const claudeReady = hasClaudeRuntimeSupport(inst.path);
141
+ reportClaudeRuntimeSummary(claudeSummary, ui, {
142
+ label: `Claude Code runtime for ${inst.slug || inst.name || path.basename(inst.path)}`,
143
+ includeConflicts: !claudeReady,
144
+ });
134
145
  const summary = installCodexRuntime(inst.path);
135
146
  const ready = hasCodexRuntimeSupport(inst.path);
136
147
  reportCodexRuntimeSummary(summary, ui, {
@@ -0,0 +1,192 @@
1
+ "use strict";
2
+
3
+ const crypto = require("node:crypto");
4
+ const { execFileSync } = require("node:child_process");
5
+ const fs = require("node:fs");
6
+ const path = require("node:path");
7
+
8
+ const PACKAGE = require("../package.json");
9
+ const BUNDLE_DIR = path.join(__dirname, "..", "runtime", "claude");
10
+ const BUNDLE_MANIFEST = path.join(BUNDLE_DIR, "manifest.json");
11
+ const LOCAL_MANIFEST = path.join(".egregore", "claude-runtime-manifest.json");
12
+
13
+ const REQUIRED_RUNTIME_PATHS = [
14
+ "CLAUDE.md",
15
+ ".claude/settings.json",
16
+ ".claude/hooks/boundary-check.sh",
17
+ ".claude/hooks/branch-guard.sh",
18
+ ".claude/skills/activity/SKILL.md",
19
+ "bin/session-start.sh",
20
+ "bin/observe-context.sh",
21
+ "egregore_runtime/harness_cli.py",
22
+ "egregore_runtime/runtime.py",
23
+ ];
24
+
25
+ const readJson = (file, fallback) => {
26
+ try { return JSON.parse(fs.readFileSync(file, "utf8")); } catch { return fallback; }
27
+ };
28
+ const hashBuffer = (buffer) => crypto.createHash("sha256").update(buffer).digest("hex");
29
+ const pathExists = (file) => { try { fs.lstatSync(file); return true; } catch { return false; } };
30
+
31
+ function listFiles(dir, prefix = "") {
32
+ if (!fs.existsSync(dir)) return [];
33
+ const result = [];
34
+ for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
35
+ const rel = prefix ? path.join(prefix, entry.name) : entry.name;
36
+ const full = path.join(dir, entry.name);
37
+ if (entry.isDirectory()) result.push(...listFiles(full, rel));
38
+ else if (entry.isFile()) result.push(rel);
39
+ }
40
+ return result.sort();
41
+ }
42
+
43
+ function bundleManifest() { return readJson(BUNDLE_MANIFEST, { files: [], skills: [], skillCount: 0 }); }
44
+ function bundleFiles() { return listFiles(BUNDLE_DIR).filter((rel) => rel !== "manifest.json"); }
45
+
46
+ function installManifestPath(egregoreDir) {
47
+ const gitPath = path.join(egregoreDir, ".git");
48
+ try {
49
+ const stat = fs.lstatSync(gitPath);
50
+ if (stat.isDirectory()) return path.join(gitPath, "info", "egregore-claude-runtime.json");
51
+ if (stat.isFile()) {
52
+ const match = fs.readFileSync(gitPath, "utf8").trim().match(/^gitdir:\s*(.+)$/);
53
+ if (match) {
54
+ const gitDir = path.isAbsolute(match[1]) ? match[1] : path.resolve(egregoreDir, match[1]);
55
+ return path.join(gitDir, "info", "egregore-claude-runtime.json");
56
+ }
57
+ }
58
+ } catch {}
59
+ return path.join(egregoreDir, LOCAL_MANIFEST);
60
+ }
61
+
62
+ function ownedSkills(egregoreDir) {
63
+ const configured = readJson(path.join(egregoreDir, "egregore.json"), {}).owned_skills;
64
+ if (!Array.isArray(configured)) return new Set();
65
+ return new Set(configured.filter((name) => typeof name === "string" && /^[a-z0-9][a-z0-9-]*$/.test(name)));
66
+ }
67
+
68
+ function ownedSkillPath(rel, owned) {
69
+ const match = rel.replaceAll("\\", "/").match(/^\.claude\/skills\/([^/]+)(?:\/|$)/);
70
+ return Boolean(match && owned.has(match[1]));
71
+ }
72
+
73
+ function copyFile(src, dest) {
74
+ fs.mkdirSync(path.dirname(dest), { recursive: true });
75
+ fs.copyFileSync(src, dest);
76
+ try { fs.chmodSync(dest, fs.statSync(src).mode & 0o777); } catch {}
77
+ }
78
+
79
+ // One-time ownership migration for pre-bundle Claude installs. A clean,
80
+ // tracked path is part of the cloned framework template and may be adopted by
81
+ // the package. Dirty/untracked paths are user work and remain untouched.
82
+ function isCleanTrackedFrameworkFile(egregoreDir, rel) {
83
+ try {
84
+ execFileSync("git", ["ls-files", "--error-unmatch", "--", rel], {
85
+ cwd: egregoreDir, stdio: "ignore",
86
+ });
87
+ execFileSync("git", ["diff", "--quiet", "HEAD", "--", rel], {
88
+ cwd: egregoreDir, stdio: "ignore",
89
+ });
90
+ execFileSync("git", ["diff", "--cached", "--quiet", "HEAD", "--", rel], {
91
+ cwd: egregoreDir, stdio: "ignore",
92
+ });
93
+ return true;
94
+ } catch {
95
+ return false;
96
+ }
97
+ }
98
+
99
+ function installClaudeRuntime(egregoreDir) {
100
+ if (!fs.existsSync(BUNDLE_DIR)) throw new Error(`Claude runtime bundle missing: ${BUNDLE_DIR}`);
101
+ const manifestPath = installManifestPath(egregoreDir);
102
+ const previous = readJson(manifestPath, { files: {} });
103
+ const previousFiles = previous.files || {};
104
+ const owned = ownedSkills(egregoreDir);
105
+ const next = { package: PACKAGE.name, version: PACKAGE.version, installedAt: new Date().toISOString(), files: {} };
106
+ const summary = {
107
+ installed: 0, updated: 0, removed: 0, skipped: 0, conflicted: 0,
108
+ conflicts: [], files: [], ownedSkills: [...owned].sort(),
109
+ bundleSkills: bundleManifest().skills || [], bundleSkillCount: bundleManifest().skillCount || 0,
110
+ };
111
+ const files = bundleFiles();
112
+ const current = new Set(files);
113
+
114
+ for (const [rel, record] of Object.entries(previousFiles)) {
115
+ if (ownedSkillPath(rel, owned)) { summary.skipped += 1; continue; }
116
+ if (current.has(rel)) continue;
117
+ const dest = path.join(egregoreDir, rel);
118
+ if (!pathExists(dest)) continue;
119
+ let stat;
120
+ try { stat = fs.lstatSync(dest); } catch { continue; }
121
+ if (stat.isFile() && hashBuffer(fs.readFileSync(dest)) === record.hash) {
122
+ fs.unlinkSync(dest);
123
+ try { fs.rmdirSync(path.dirname(dest)); } catch {}
124
+ summary.removed += 1;
125
+ } else {
126
+ summary.conflicted += 1;
127
+ summary.conflicts.push(rel);
128
+ next.files[rel] = { hash: record.hash };
129
+ }
130
+ }
131
+
132
+ for (const rel of files) {
133
+ if (ownedSkillPath(rel, owned)) { summary.skipped += 1; continue; }
134
+ const src = path.join(BUNDLE_DIR, rel);
135
+ const dest = path.join(egregoreDir, rel);
136
+ const sourceHash = hashBuffer(fs.readFileSync(src));
137
+ const previousHash = previousFiles[rel]?.hash;
138
+ const record = () => { next.files[rel] = { hash: sourceHash }; summary.files.push(rel); };
139
+
140
+ if (!pathExists(dest)) {
141
+ copyFile(src, dest); summary.installed += 1; record(); continue;
142
+ }
143
+ let stat;
144
+ try { stat = fs.lstatSync(dest); } catch {}
145
+ if (!stat?.isFile()) {
146
+ summary.conflicted += 1; summary.conflicts.push(rel);
147
+ if (previousHash) next.files[rel] = { hash: previousHash };
148
+ continue;
149
+ }
150
+ const currentHash = hashBuffer(fs.readFileSync(dest));
151
+ if (currentHash === sourceHash) {
152
+ try { fs.chmodSync(dest, fs.statSync(src).mode & 0o777); } catch {}
153
+ summary.skipped += 1; record();
154
+ } else if (previousHash && currentHash === previousHash) {
155
+ copyFile(src, dest); summary.updated += 1; record();
156
+ } else if (!previousHash && isCleanTrackedFrameworkFile(egregoreDir, rel)) {
157
+ copyFile(src, dest); summary.updated += 1; record();
158
+ } else {
159
+ summary.conflicted += 1; summary.conflicts.push(rel);
160
+ if (previousHash) next.files[rel] = { hash: previousHash };
161
+ }
162
+ }
163
+
164
+ fs.mkdirSync(path.dirname(manifestPath), { recursive: true });
165
+ fs.writeFileSync(manifestPath, JSON.stringify(next, null, 2) + "\n");
166
+ return summary;
167
+ }
168
+
169
+ function hasClaudeRuntimeSupport(egregoreDir) {
170
+ return REQUIRED_RUNTIME_PATHS.every((rel) => fs.existsSync(path.join(egregoreDir, rel)));
171
+ }
172
+
173
+ function reportClaudeRuntimeSummary(summary, ui, opts = {}) {
174
+ if (!summary || !ui) return;
175
+ const label = opts.label || "Claude Code runtime";
176
+ const changed = summary.installed + summary.updated + (summary.removed || 0);
177
+ if (changed > 0) ui.success(`${label} ready (${summary.installed} installed, ${summary.updated} updated, ${summary.removed || 0} removed, ${summary.skipped} unchanged)`);
178
+ if (opts.includeConflicts !== false && summary.conflicted > 0) {
179
+ const count = summary.conflicted;
180
+ ui.info(ui.dim ? ui.dim(`${label}: kept ${count} locally managed framework file${count === 1 ? "" : "s"}.`) : `${label}: kept ${count} locally managed framework file${count === 1 ? "" : "s"}.`);
181
+ }
182
+ }
183
+
184
+ module.exports = {
185
+ BUNDLE_DIR,
186
+ bundleFiles,
187
+ bundleManifest,
188
+ hasClaudeRuntimeSupport,
189
+ installClaudeRuntime,
190
+ installManifestPath,
191
+ reportClaudeRuntimeSummary,
192
+ };
package/lib/local.js CHANGED
@@ -16,6 +16,7 @@ const {
16
16
  tryGhAuthOrLogin,
17
17
  } = require("./auth");
18
18
  const { installCodexRuntime, reportCodexRuntimeSummary } = require("./codex-runtime");
19
+ const { installClaudeRuntime, reportClaudeRuntimeSummary } = require("./claude-runtime");
19
20
  const { installPiRuntime, reportPiRuntimeSummary } = require("./pi-runtime");
20
21
  const { installPrimeRuntime, reportPrimeRuntimeSummary } = require("./prime-runtime");
21
22
  const {
@@ -31,7 +32,9 @@ const {
31
32
  configureGitCredentials,
32
33
  gitCloneEnv,
33
34
  initMemoryDirs,
34
- ensureDevelop,
35
+ buildOnboardingState,
36
+ initializeOrganizationConfig,
37
+ organizationIdentityDocument,
35
38
  ensurePersonOnboardingWitness,
36
39
  ensureInstallerMemberRole,
37
40
  run,
@@ -1031,7 +1034,6 @@ async function localFounderFlow(ui, ctx = {}) {
1031
1034
 
1032
1035
  const githubOrg = st.githubOrg;
1033
1036
  const isOrg = st.isOrg;
1034
- const isNewProject = st.isNewProject;
1035
1037
  const orgName = st.orgName;
1036
1038
  const description = st.description;
1037
1039
  let newProjectRepo = st.newProjectRepo;
@@ -1156,13 +1158,14 @@ async function localFounderFlow(ui, ctx = {}) {
1156
1158
  const s3 = ui.spinner(`Creating ${newProjectRepo}...`);
1157
1159
  const projExists = await repoExists(githubToken, githubOrg, newProjectRepo);
1158
1160
  if (projExists) {
1159
- selectedRepos.push({ name: newProjectRepo });
1161
+ const branchInfo = await detectRepoBranches(githubToken, githubOrg, newProjectRepo).catch(() => null);
1162
+ selectedRepos.push({ name: newProjectRepo, base_branch: branchInfo?.defaultBranch || "main" });
1160
1163
  s3.stop(`${newProjectRepo} already exists — added to managed repos`);
1161
1164
  } else {
1162
1165
  try {
1163
1166
  await createRepo(githubToken, githubOrg, newProjectRepo, isOrg, description || "");
1164
1167
  if (await waitForRepo(githubToken, githubOrg, newProjectRepo)) {
1165
- selectedRepos.push({ name: newProjectRepo });
1168
+ selectedRepos.push({ name: newProjectRepo, base_branch: "main" });
1166
1169
  s3.stop(`Created ${newProjectRepo}`);
1167
1170
  } else {
1168
1171
  s3.fail(`${newProjectRepo} creation timed out`);
@@ -1174,18 +1177,19 @@ async function localFounderFlow(ui, ctx = {}) {
1174
1177
  }
1175
1178
 
1176
1179
  // 8. Write egregore.json to remote repo (so joiners can read it)
1177
- const egreConfig = {
1180
+ const egreConfig = initializeOrganizationConfig({
1178
1181
  mode: "local",
1179
1182
  org_name: orgName,
1180
1183
  github_org: githubOrg,
1181
1184
  memory_repo: `https://github.com/${githubOrg}/${memoryRepoName}.git`,
1182
1185
  slug: slug,
1183
1186
  repo_name: repoName,
1187
+ base_branch: "main",
1184
1188
  repos: selectedRepos,
1185
1189
  upstream_url: "https://github.com/egregore-labs/egregore.git",
1186
1190
  report_url: "https://xgksfrirtdumacvmfkzj.supabase.co",
1187
1191
  report_key: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Inhna3NmcmlydGR1bWFjdm1ma3pqIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NzA5OTA1ODksImV4cCI6MjA4NjU2NjU4OX0.1UWNgER6nQazrayly1KDrswClURUkGKxeirZg5L8uk4",
1188
- };
1192
+ });
1189
1193
  // Joiners resolve the org by reading egregore.json from the remote — if
1190
1194
  // this push silently fails (observed: transient failure right after
1191
1195
  // template generation), the org is unjoinable and the founder never knows.
@@ -1219,12 +1223,22 @@ async function localFounderFlow(ui, ctx = {}) {
1219
1223
  }
1220
1224
 
1221
1225
  // 9. Init memory dirs on remote (so joiners get the structure)
1222
- const memDirs = ["people", "invites", "handoffs", "knowledge/questions", "knowledge/decisions", "knowledge/patterns", "knowledge/findings", "quests", "wraps"];
1226
+ const memDirs = ["people", "identity", "invites", "handoffs", "knowledge/questions", "knowledge/decisions", "knowledge/patterns", "knowledge/findings", "quests", "wraps"];
1223
1227
  for (const d of memDirs) {
1224
1228
  try {
1225
1229
  await putFileContent(githubToken, githubOrg, memoryRepoName, `${d}/.gitkeep`, "", `Initialize ${d}`);
1226
1230
  } catch {}
1227
1231
  }
1232
+ try {
1233
+ await putFileContent(
1234
+ githubToken,
1235
+ githubOrg,
1236
+ memoryRepoName,
1237
+ "identity/EGREGORE.md",
1238
+ organizationIdentityDocument(egreConfig),
1239
+ `Declare organizational identity for ${orgName}`,
1240
+ );
1241
+ } catch {}
1228
1242
 
1229
1243
  // 10. Clone locally
1230
1244
  const base = ctx.targetDir || process.cwd();
@@ -1241,18 +1255,6 @@ async function localFounderFlow(ui, ctx = {}) {
1241
1255
  ui.step(1, totalSteps, "Cloning egregore...");
1242
1256
  cloneRepo(forkUrl, egregoreDir, githubToken, ui, "egregore");
1243
1257
  setGitIdentity(egregoreDir, user);
1244
- ensureDevelop(egregoreDir);
1245
- // ensureDevelop only creates develop on the REMOTE (git branch, no checkout),
1246
- // so the clone is still on main. The egregore operates on develop, so switch
1247
- // to it now — otherwise local overlays (the codex runtime) get committed to
1248
- // main and are orphaned when session-start later checks out develop.
1249
- try {
1250
- execFileSync("git", ["-C", egregoreDir, "checkout", "develop"], { stdio: "pipe" });
1251
- } catch {
1252
- try {
1253
- execFileSync("git", ["-C", egregoreDir, "checkout", "-b", "develop", "origin/develop"], { stdio: "pipe" });
1254
- } catch {}
1255
- }
1256
1258
 
1257
1259
  ui.step(2, totalSteps, "Cloning shared memory...");
1258
1260
  cloneRepo(memoryUrl, memoryDir, githubToken, ui, "memory");
@@ -1290,34 +1292,22 @@ async function localFounderFlow(ui, ctx = {}) {
1290
1292
  // and ran the invite flow). See .claude/skills/onboarding/SKILL.md
1291
1293
  // "Pre-captured check" blocks.
1292
1294
  const slugifiedName = (displayName || user.login).toLowerCase().replace(/\s+/g, "-");
1293
- const state = {
1295
+ const state = buildOnboardingState({}, {
1294
1296
  github_username: user.login,
1295
1297
  github_id: user.id,
1296
- person_id: user.id ? `github:${user.id}` : `github-login:${user.login.toLowerCase()}`,
1297
1298
  github_name: user.name,
1298
1299
  display_name: displayName || user.login,
1299
- name: slugifiedName,
1300
1300
  member_role: memberRole,
1301
1301
  email: user.email,
1302
- emails: user.email ? [user.email.toLowerCase()] : [],
1303
- onboarding_complete: false,
1304
1302
  usage_type: "founder_group",
1305
- org_setup: true,
1306
- github_configured: true,
1307
- workspace_ready: true,
1308
- preferred_runtime: preferredRuntime,
1309
- // Pre-captured onboarding signals. Invite flag is set later in step 18
1310
- // after the user's answer; default to undefined here so the skill knows
1311
- // to wait, then the installer mutates this block on invite completion.
1312
- onboarding: {
1313
- phase: "orient",
1314
- started_at: new Date().toISOString(),
1315
- installer_captured: true,
1316
- role: "founder",
1317
- member_role: memberRole,
1318
- },
1319
- profile_fields_collected: ["name", "role"],
1320
- };
1303
+ onboarding_role: "founder",
1304
+ org_id: egreConfig.org_id,
1305
+ }, {
1306
+ runtime: preferredRuntime,
1307
+ onboardingComplete: false,
1308
+ });
1309
+ state.name = slugifiedName;
1310
+ state.emails = user.email ? [user.email.toLowerCase()] : [];
1321
1311
  fs.writeFileSync(path.join(egregoreDir, ".egregore-state.json"), JSON.stringify(state, null, 2) + "\n");
1322
1312
 
1323
1313
  // 15. Create founder's person file in memory
@@ -1356,22 +1346,13 @@ async function localFounderFlow(ui, ctx = {}) {
1356
1346
  const repoUrl = `https://github.com/${githubOrg}/${mrName}.git`;
1357
1347
  cloneRepo(repoUrl, repoDir, githubToken, ui, mrName);
1358
1348
  setGitIdentity(repoDir, user);
1359
- // New repos get develop branch (our workflow). Existing repos keep their default.
1360
- if (isNewProject) {
1361
- ensureDevelop(repoDir);
1362
- }
1363
1349
  } catch {
1364
1350
  ui.warn(`Could not clone ${mrName} — you may not have access.`);
1365
1351
  }
1366
1352
  }
1367
1353
 
1368
- // 16. Runtime overlay. Codex and Pi installs commit their derived runtime
1369
- // so it's TRACKED (symmetric with .claude/). Claude installs do the
1370
- // opposite: Claude Code reads CLAUDE.md, not AGENTS.md, so we strip the
1371
- // Codex AGENTS.md/.codex the template ships — otherwise a fresh Claude
1372
- // agent (e.g. when onboarding suppresses the greeting) wanders into
1373
- // AGENTS.md's startup steps. A Codex teammate who joins later regenerates
1374
- // AGENTS.md via /update.
1354
+ // 16. Runtime overlay. Every selected harness now comes from the same
1355
+ // package-owned, capability-filtered Runtime distribution.
1375
1356
  if (preferredRuntime === "codex") {
1376
1357
  const codexRuntime = installCodexRuntime(egregoreDir);
1377
1358
  reportCodexRuntimeSummary(codexRuntime, ui);
@@ -1411,6 +1392,16 @@ async function localFounderFlow(ui, ctx = {}) {
1411
1392
  }
1412
1393
  } catch {}
1413
1394
  } else {
1395
+ const claudeRuntime = installClaudeRuntime(egregoreDir);
1396
+ reportClaudeRuntimeSummary(claudeRuntime, ui);
1397
+ try {
1398
+ const toCommit = Array.isArray(claudeRuntime.files) ? [...claudeRuntime.files] : [];
1399
+ if (toCommit.length) {
1400
+ execFileSync("git", ["add", "--", ...toCommit], { cwd: egregoreDir, stdio: "pipe" });
1401
+ run('git commit -m "Add Claude Code Runtime adapter"', { cwd: egregoreDir });
1402
+ run("git push", { cwd: egregoreDir });
1403
+ }
1404
+ } catch {}
1414
1405
  stripCodexRuntimeForClaude(egregoreDir, ui);
1415
1406
  }
1416
1407
 
package/lib/pi-runtime.js CHANGED
@@ -18,6 +18,7 @@ const REQUIRED_RUNTIME_PATHS = [
18
18
  ".codex/skills",
19
19
  "bin/agent.sh",
20
20
  "bin/pi-branch-policy.mjs",
21
+ "bin/pi-observe-context.mjs",
21
22
  "bin/pi-session-start.sh",
22
23
  "bin/codex-session-start.sh",
23
24
  "bin/codex-skill-render.mjs",
@@ -19,6 +19,7 @@ const REQUIRED_RUNTIME_PATHS = [
19
19
  ".codex/skills",
20
20
  "bin/agent.sh",
21
21
  "bin/pi-branch-policy.mjs",
22
+ "bin/pi-observe-context.mjs",
22
23
  "bin/pi-product-workflows.mjs",
23
24
  "bin/prime-session-start.sh",
24
25
  "bin/codex-session-start.sh",
@@ -0,0 +1,146 @@
1
+ /**
2
+ * Provider-independent identity/config scaffolding for the installer.
3
+ *
4
+ * GitHub remains the current repository transport and a linked provider. Its
5
+ * login and numeric id are compatibility fields, never Egregore domain ids.
6
+ */
7
+
8
+ const { randomUUID } = require("node:crypto");
9
+
10
+ const CONFIG_SCHEMA = "egregore-config/v1";
11
+ const PROFILE_SCHEMA = "egregore-profile/v1";
12
+ const IDENTITY_SCHEMA = "egregore-identity/v2";
13
+ const ONBOARDING_SCHEMA = "egregore-onboarding/v1";
14
+
15
+ function opaqueId(prefix, idFactory = randomUUID) {
16
+ return `${prefix}_${String(idFactory()).replaceAll("-", "")}`;
17
+ }
18
+
19
+ function initializeOrganizationConfig(config = {}, opts = {}) {
20
+ const next = { ...config };
21
+ next.schema_version = next.schema_version || CONFIG_SCHEMA;
22
+ next.org_id = next.org_id || opts.orgId || opaqueId("org", opts.idFactory);
23
+ next.profile = {
24
+ schema_version: PROFILE_SCHEMA,
25
+ revision: "profile/v1",
26
+ identity_path: "memory/identity/EGREGORE.md",
27
+ purpose_path: "memory/identity/EGREGORE.md",
28
+ principles_path: "memory/identity/EGREGORE.md",
29
+ conventions_path: "memory/identity/EGREGORE.md",
30
+ declared_sections: ["essence", "values", "domains", "voice", "decision-grammar"],
31
+ default_policy: "all-access-v1",
32
+ default_context_budget: 8000,
33
+ ...(next.profile || {}),
34
+ };
35
+ return next;
36
+ }
37
+
38
+ function organizationIdentityDocument(config = {}, opts = {}) {
39
+ const name = config.org_name || "Our organization";
40
+ const orgType = opts.orgType || "team";
41
+ const intent = opts.intent || "collaborate and accumulate organizational knowledge";
42
+ const founded = opts.founded || new Date().toISOString().slice(0, 10);
43
+ return [
44
+ `# ${name}`,
45
+ "",
46
+ "## Essence",
47
+ "",
48
+ `${name} is a ${orgType} using Egregore to ${intent}.`,
49
+ "This declaration is versioned organizational identity; refine it through normal review.",
50
+ "",
51
+ "## Values",
52
+ "",
53
+ "- Preserve provenance and make consequential reasoning inspectable.",
54
+ "- Leave canonical organizational state more useful than you found it.",
55
+ "- Keep human and agent authority explicit.",
56
+ "",
57
+ "## Domains",
58
+ "",
59
+ "- Add the fields this organization works in and the boundaries it respects.",
60
+ "",
61
+ "## Voice",
62
+ "",
63
+ "Direct, specific, and honest about uncertainty.",
64
+ "",
65
+ "## Decision Grammar",
66
+ "",
67
+ "- Record decisions that affect more than one session.",
68
+ "- Bias toward action for reversible choices.",
69
+ "- Seek another perspective before irreversible choices.",
70
+ "",
71
+ "## Lineage",
72
+ "",
73
+ `Founded: ${founded}`,
74
+ "",
75
+ ].join("\n");
76
+ }
77
+
78
+ function initializeIdentityState(state = {}, data = {}, opts = {}) {
79
+ const next = { ...state };
80
+ const accountId = data.account_id || next.account_id || opaqueId("acct", opts.idFactory);
81
+ const actorId = data.actor_id || next.actor_id || opaqueId("actor", opts.idFactory);
82
+ const membershipId = data.membership_id || next.membership_id || opaqueId("membership", opts.idFactory);
83
+ const providerIdentities = { ...(next.provider_identities || {}) };
84
+ const githubUsername = data.github_username || next.github_username;
85
+ const githubId = data.github_id || next.github_id;
86
+ if (githubUsername || githubId) {
87
+ providerIdentities.github = {
88
+ ...(providerIdentities.github || {}),
89
+ ...(githubId ? { subject: String(githubId) } : {}),
90
+ ...(githubUsername ? { username: githubUsername } : {}),
91
+ };
92
+ }
93
+ const email = data.github_email || data.email || next.email;
94
+ if (email) {
95
+ providerIdentities.email = {
96
+ ...(providerIdentities.email || {}),
97
+ subject: String(email).toLowerCase(),
98
+ };
99
+ }
100
+
101
+ next.account_id = accountId;
102
+ next.actor_id = actorId;
103
+ next.membership_id = membershipId;
104
+ next.provider_identities = providerIdentities;
105
+ next.identity_version = 2;
106
+ next.identity = {
107
+ ...(next.identity || {}),
108
+ schema_version: IDENTITY_SCHEMA,
109
+ account_id: accountId,
110
+ actor_id: actorId,
111
+ actor_kind: "person",
112
+ membership_id: membershipId,
113
+ org_id: data.org_id || next.identity?.org_id || null,
114
+ provider_identities: providerIdentities,
115
+ };
116
+ return next;
117
+ }
118
+
119
+ function initializeOnboardingState(state = {}, data = {}) {
120
+ const next = { ...state, onboarding: { ...(state.onboarding || {}) } };
121
+ const onboarding = next.onboarding;
122
+ onboarding.schema_version = ONBOARDING_SCHEMA;
123
+ onboarding.intent = data.org_intent || onboarding.intent || "collaborate";
124
+ onboarding.org_type = data.org_type || onboarding.org_type || "team";
125
+ onboarding.path = Array.isArray(onboarding.path) ? onboarding.path : [];
126
+ onboarding.answers = {
127
+ ...(onboarding.answers || {}),
128
+ ...(data.display_name ? { display_name: data.display_name } : {}),
129
+ ...(data.member_role ? { member_role: data.member_role } : {}),
130
+ };
131
+ onboarding.next_step = onboarding.phase === "complete" ? null : onboarding.next_step || "orient";
132
+ next.onboarding = onboarding;
133
+ return next;
134
+ }
135
+
136
+ module.exports = {
137
+ CONFIG_SCHEMA,
138
+ PROFILE_SCHEMA,
139
+ IDENTITY_SCHEMA,
140
+ ONBOARDING_SCHEMA,
141
+ opaqueId,
142
+ initializeOrganizationConfig,
143
+ organizationIdentityDocument,
144
+ initializeIdentityState,
145
+ initializeOnboardingState,
146
+ };