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.
- package/assets/egregore-launcher.js +1013 -16
- package/bin/cli.js +11 -0
- package/lib/claude-runtime.js +192 -0
- package/lib/local.js +38 -31
- package/lib/pi-runtime.js +1 -0
- package/lib/prime-runtime.js +1 -0
- package/lib/runtime-identity.js +146 -0
- package/lib/setup.js +116 -17
- package/package.json +10 -6
- package/runtime/claude/.claude/context/commit-format.md +110 -0
- package/runtime/claude/.claude/context/git-language.md +46 -0
- package/runtime/claude/.claude/context/notification-consent.md +66 -0
- package/runtime/claude/.claude/context/pr-format.md +67 -0
- package/runtime/claude/.claude/context/telemetry.md +133 -0
- package/runtime/claude/.claude/hooks/boundary-check.sh +333 -0
- package/runtime/claude/.claude/hooks/branch-guard.sh +231 -0
- package/runtime/claude/.claude/hooks/card-context.sh +38 -0
- package/runtime/claude/.claude/hooks/emissary-detect.sh +53 -0
- package/runtime/claude/.claude/hooks/memory-refresh.sh +67 -0
- package/runtime/claude/.claude/hooks/onboarding-guard.sh +86 -0
- package/runtime/claude/.claude/hooks/retrieval-context.sh +43 -0
- package/runtime/claude/.claude/rules/voice-bedrock.md +73 -0
- package/runtime/claude/.claude/settings.json +131 -0
- package/runtime/claude/.claude/skills/activity/SKILL.md +68 -0
- package/runtime/claude/.claude/skills/announce/SKILL.md +54 -0
- package/runtime/claude/.claude/skills/archive/SKILL.md +71 -0
- package/runtime/claude/.claude/skills/branch/SKILL.md +147 -0
- package/runtime/claude/.claude/skills/checkup/SKILL.md +159 -0
- package/runtime/claude/.claude/skills/commit/SKILL.md +103 -0
- package/runtime/claude/.claude/skills/contribute/SKILL.md +343 -0
- package/runtime/claude/.claude/skills/create-skill/SKILL.md +135 -0
- package/runtime/claude/.claude/skills/dark-mode/SKILL.md +410 -0
- package/runtime/claude/.claude/skills/dashboard/SKILL.md +43 -0
- package/runtime/claude/.claude/skills/deep-reflect/REPORT.md +140 -0
- package/runtime/claude/.claude/skills/deep-reflect/RESEARCH.md +132 -0
- package/runtime/claude/.claude/skills/deep-reflect/ROLES.md +104 -0
- package/runtime/claude/.claude/skills/deep-reflect/SKILL.md +170 -0
- package/runtime/claude/.claude/skills/delete-user/SKILL.md +150 -0
- package/runtime/claude/.claude/skills/emissary/SKILL.md +220 -0
- package/runtime/claude/.claude/skills/handoff/SKILL.md +124 -0
- package/runtime/claude/.claude/skills/harvest/AUDIT.md +546 -0
- package/runtime/claude/.claude/skills/harvest/FORMAT.md +436 -0
- package/runtime/claude/.claude/skills/harvest/PROCESS.md +395 -0
- package/runtime/claude/.claude/skills/harvest/QUESTION_PALETTE.md +76 -0
- package/runtime/claude/.claude/skills/harvest/SKILL.md +100 -0
- package/runtime/claude/.claude/skills/ingest/SKILL.md +112 -0
- package/runtime/claude/.claude/skills/ingest-corpus/SKILL.md +187 -0
- package/runtime/claude/.claude/skills/ingest-notion/SKILL.md +214 -0
- package/runtime/claude/.claude/skills/ingest-user-interview/SKILL.md +65 -0
- package/runtime/claude/.claude/skills/ingest-user-interview/references/analysis-contract.md +125 -0
- package/runtime/claude/.claude/skills/invite/SKILL.md +111 -0
- package/runtime/claude/.claude/skills/issue/SKILL.md +104 -0
- package/runtime/claude/.claude/skills/me/SKILL.md +81 -0
- package/runtime/claude/.claude/skills/meeting/SKILL.md +76 -0
- package/runtime/claude/.claude/skills/meeting/references/analysis-contract.md +102 -0
- package/runtime/claude/.claude/skills/note/SKILL.md +71 -0
- package/runtime/claude/.claude/skills/notion-connect/SKILL.md +124 -0
- package/runtime/claude/.claude/skills/onboarding/SKILL.md +159 -0
- package/runtime/claude/.claude/skills/pr/SKILL.md +85 -0
- package/runtime/claude/.claude/skills/pull/SKILL.md +79 -0
- package/runtime/claude/.claude/skills/push/SKILL.md +47 -0
- package/runtime/claude/.claude/skills/quest/SKILL.md +121 -0
- package/runtime/claude/.claude/skills/reflect/SKILL.md +69 -0
- package/runtime/claude/.claude/skills/review-pr/SKILL.md +276 -0
- package/runtime/claude/.claude/skills/save/SKILL.md +92 -0
- package/runtime/claude/.claude/skills/slack-connect/SKILL.md +148 -0
- package/runtime/claude/.claude/skills/summon/SKILL.md +240 -0
- package/runtime/claude/.claude/skills/sync-repos/SKILL.md +82 -0
- package/runtime/claude/.claude/skills/teams-connect/SKILL.md +216 -0
- package/runtime/claude/.claude/skills/telegram-connect/SKILL.md +110 -0
- package/runtime/claude/.claude/skills/telemetry/SKILL.md +117 -0
- package/runtime/claude/.claude/skills/test/SKILL.md +87 -0
- package/runtime/claude/.claude/skills/the-spiral/SKILL.md +492 -0
- package/runtime/claude/.claude/skills/tui-design/SKILL.md +188 -0
- package/runtime/claude/.claude/skills/tutorial/SKILL.md +100 -0
- package/runtime/claude/.claude/skills/update/SKILL.md +265 -0
- package/runtime/claude/.claude/skills/view/SKILL.md +393 -0
- package/runtime/claude/.claude/skills/view/compose-scaffold.html +221 -0
- package/runtime/claude/.claude/skills/visual-explain/SKILL.md +132 -0
- package/runtime/claude/.claude/skills/wrap/SKILL.md +98 -0
- package/runtime/claude/CLAUDE.md +447 -0
- package/runtime/claude/bin/activity-action.sh +92 -0
- package/runtime/claude/bin/activity-data.sh +17 -0
- package/runtime/claude/bin/agent.sh +783 -0
- package/runtime/claude/bin/artifact-register.sh +164 -0
- package/runtime/claude/bin/artifact-writeback.sh +53 -0
- package/runtime/claude/bin/artifacts.sh +288 -0
- package/runtime/claude/bin/attendant.sh +707 -0
- package/runtime/claude/bin/autosave.sh +112 -0
- package/runtime/claude/bin/boundary.sh +253 -0
- package/runtime/claude/bin/build-sealed-dataroom.mjs +722 -0
- package/runtime/claude/bin/capture-reconcile.sh +69 -0
- package/runtime/claude/bin/capture-run.sh +357 -0
- package/runtime/claude/bin/codex-install-skills.sh +78 -0
- package/runtime/claude/bin/codex-render-spec.mjs +462 -0
- package/runtime/claude/bin/codex-session-start.sh +275 -0
- package/runtime/claude/bin/codex-skill-render.mjs +349 -0
- package/runtime/claude/bin/codex-sync-skills.sh +237 -0
- package/runtime/claude/bin/connect-refresh.sh +33 -0
- package/runtime/claude/bin/contribute-guard.sh +79 -0
- package/runtime/claude/bin/corpus_map.py +806 -0
- package/runtime/claude/bin/corpus_survey.py +304 -0
- package/runtime/claude/bin/dashboard-data.sh +18 -0
- package/runtime/claude/bin/github-auth.sh +121 -0
- package/runtime/claude/bin/graph-batch.sh +86 -0
- package/runtime/claude/bin/graph-op.sh +1106 -0
- package/runtime/claude/bin/graph-projection.sh +54 -0
- package/runtime/claude/bin/graph-wal.sh +242 -0
- package/runtime/claude/bin/graph.sh +267 -0
- package/runtime/claude/bin/handoff-lifecycle-job.sh +146 -0
- package/runtime/claude/bin/handoff-lifecycle.sh +280 -0
- package/runtime/claude/bin/handoff-pr-backfill.sh +86 -0
- package/runtime/claude/bin/handoff-preview.sh +169 -0
- package/runtime/claude/bin/handoff-run.sh +692 -0
- package/runtime/claude/bin/handoff-save-egregore.sh +224 -0
- package/runtime/claude/bin/index-handoff.sh +322 -0
- package/runtime/claude/bin/ingest-graph.sh +86 -0
- package/runtime/claude/bin/ingest-item.sh +10 -0
- package/runtime/claude/bin/ingest-surface.html +495 -0
- package/runtime/claude/bin/ingest.py +1011 -0
- package/runtime/claude/bin/ingest.sh +308 -0
- package/runtime/claude/bin/ingest_graph.py +856 -0
- package/runtime/claude/bin/ingest_surface.py +544 -0
- package/runtime/claude/bin/invite.sh +6 -0
- package/runtime/claude/bin/issue.sh +10 -0
- package/runtime/claude/bin/knowledge.sh +10 -0
- package/runtime/claude/bin/lib/artifact-id.sh +46 -0
- package/runtime/claude/bin/lib/config.sh +136 -0
- package/runtime/claude/bin/lib/context.sh +642 -0
- package/runtime/claude/bin/lib/dashboard-artifact.sh +242 -0
- package/runtime/claude/bin/lib/ensure-develop.sh +183 -0
- package/runtime/claude/bin/lib/git-message.sh +37 -0
- package/runtime/claude/bin/lib/git-sync.sh +494 -0
- package/runtime/claude/bin/lib/greeting.sh +548 -0
- package/runtime/claude/bin/lib/handoff-meta.sh +97 -0
- package/runtime/claude/bin/lib/hash.sh +13 -0
- package/runtime/claude/bin/lib/identity.sh +213 -0
- package/runtime/claude/bin/lib/metrics.sh +374 -0
- package/runtime/claude/bin/lib/noncode.sh +31 -0
- package/runtime/claude/bin/lib/permissions.sh +106 -0
- package/runtime/claude/bin/lib/time.sh +56 -0
- package/runtime/claude/bin/lib/worktree-links.sh +85 -0
- package/runtime/claude/bin/node-run.sh +42 -0
- package/runtime/claude/bin/notification.sh +6 -0
- package/runtime/claude/bin/notify.sh +636 -0
- package/runtime/claude/bin/observe-context.sh +14 -0
- package/runtime/claude/bin/onboarding.sh +6 -0
- package/runtime/claude/bin/person.py +634 -0
- package/runtime/claude/bin/person.sh +481 -0
- package/runtime/claude/bin/pi-render-spec.mjs +140 -0
- package/runtime/claude/bin/post-update.sh +37 -0
- package/runtime/claude/bin/prime-render-spec.mjs +147 -0
- package/runtime/claude/bin/publish-artifact.sh +324 -0
- package/runtime/claude/bin/publish-references.sh +144 -0
- package/runtime/claude/bin/quest.sh +9 -0
- package/runtime/claude/bin/question.sh +8 -0
- package/runtime/claude/bin/repo-state.sh +96 -0
- package/runtime/claude/bin/research-ingest.sh +7 -0
- package/runtime/claude/bin/restore-owned-skills.sh +67 -0
- package/runtime/claude/bin/retrieval_eval.py +385 -0
- package/runtime/claude/bin/runtime-identity.sh +70 -0
- package/runtime/claude/bin/runtime-upgrade.sh +43 -0
- package/runtime/claude/bin/scroll.sh +9 -0
- package/runtime/claude/bin/search.sh +318 -0
- package/runtime/claude/bin/session-autosave.sh +220 -0
- package/runtime/claude/bin/session-log.sh +199 -0
- package/runtime/claude/bin/session-start.sh +696 -0
- package/runtime/claude/bin/settings.sh +532 -0
- package/runtime/claude/bin/startup-check.sh +136 -0
- package/runtime/claude/bin/statusline.sh +41 -0
- package/runtime/claude/bin/telemetry.sh +666 -0
- package/runtime/claude/bin/test-changes.sh +344 -0
- package/runtime/claude/bin/thread.sh +9 -0
- package/runtime/claude/bin/todo.sh +9 -0
- package/runtime/claude/bin/view-render.sh +126 -0
- package/runtime/claude/bin/worktree-create.sh +145 -0
- package/runtime/claude/bin/worktree-remove.sh +50 -0
- package/runtime/claude/bin/worktree.sh +198 -0
- package/runtime/claude/egregore_runtime/__init__.py +228 -0
- package/runtime/claude/egregore_runtime/adapters/__init__.py +5 -0
- package/runtime/claude/egregore_runtime/adapters/invitation.py +237 -0
- package/runtime/claude/egregore_runtime/adapters/notification.py +59 -0
- package/runtime/claude/egregore_runtime/adapters/qmd.py +1701 -0
- package/runtime/claude/egregore_runtime/adapters/qmd_cli.py +210 -0
- package/runtime/claude/egregore_runtime/adapters/qmd_embed_worker.py +59 -0
- package/runtime/claude/egregore_runtime/admin_gate.py +102 -0
- package/runtime/claude/egregore_runtime/artifacts.py +523 -0
- package/runtime/claude/egregore_runtime/contracts.py +499 -0
- package/runtime/claude/egregore_runtime/entitlements.py +85 -0
- package/runtime/claude/egregore_runtime/errors.py +10 -0
- package/runtime/claude/egregore_runtime/graph.py +356 -0
- package/runtime/claude/egregore_runtime/handoff_lookup.py +196 -0
- package/runtime/claude/egregore_runtime/harness_cli.py +1221 -0
- package/runtime/claude/egregore_runtime/identity.py +734 -0
- package/runtime/claude/egregore_runtime/identity_cli.py +91 -0
- package/runtime/claude/egregore_runtime/ingest.py +575 -0
- package/runtime/claude/egregore_runtime/ingest_cli.py +254 -0
- package/runtime/claude/egregore_runtime/ingest_index_cli.py +147 -0
- package/runtime/claude/egregore_runtime/invitation_cli.py +51 -0
- package/runtime/claude/egregore_runtime/invitations.py +116 -0
- package/runtime/claude/egregore_runtime/issue_cli.py +305 -0
- package/runtime/claude/egregore_runtime/issues.py +359 -0
- package/runtime/claude/egregore_runtime/knowledge.py +376 -0
- package/runtime/claude/egregore_runtime/knowledge_cli.py +173 -0
- package/runtime/claude/egregore_runtime/lifecycle.py +888 -0
- package/runtime/claude/egregore_runtime/lifecycle_cli.py +269 -0
- package/runtime/claude/egregore_runtime/notification_cli.py +125 -0
- package/runtime/claude/egregore_runtime/notifications.py +230 -0
- package/runtime/claude/egregore_runtime/observe.py +342 -0
- package/runtime/claude/egregore_runtime/onboarding.py +290 -0
- package/runtime/claude/egregore_runtime/onboarding_cli.py +110 -0
- package/runtime/claude/egregore_runtime/policy.py +144 -0
- package/runtime/claude/egregore_runtime/profile.py +193 -0
- package/runtime/claude/egregore_runtime/quest_cli.py +216 -0
- package/runtime/claude/egregore_runtime/question_cli.py +180 -0
- package/runtime/claude/egregore_runtime/questions.py +304 -0
- package/runtime/claude/egregore_runtime/quests.py +419 -0
- package/runtime/claude/egregore_runtime/readiness.py +379 -0
- package/runtime/claude/egregore_runtime/research_ingest.py +256 -0
- package/runtime/claude/egregore_runtime/research_ingest_cli.py +44 -0
- package/runtime/claude/egregore_runtime/runtime.py +464 -0
- package/runtime/claude/egregore_runtime/scroll_cli.py +185 -0
- package/runtime/claude/egregore_runtime/scrolls.py +726 -0
- package/runtime/claude/egregore_runtime/status.py +412 -0
- package/runtime/claude/egregore_runtime/status_cli.py +174 -0
- package/runtime/claude/egregore_runtime/sync.py +218 -0
- package/runtime/claude/egregore_runtime/teamsync.py +139 -0
- package/runtime/claude/egregore_runtime/telemetry.py +640 -0
- package/runtime/claude/egregore_runtime/thread_cli.py +173 -0
- package/runtime/claude/egregore_runtime/threads.py +517 -0
- package/runtime/claude/egregore_runtime/todo_cli.py +142 -0
- package/runtime/claude/egregore_runtime/todos.py +244 -0
- package/runtime/claude/egregore_runtime/upgrade.py +770 -0
- package/runtime/claude/egregore_runtime/upgrade_worker.py +53 -0
- package/runtime/claude/egregore_runtime/writeback.py +391 -0
- package/runtime/claude/egregore_runtime/writeback_cli.py +114 -0
- package/runtime/claude/manifest.json +284 -0
- package/runtime/codex/.codex/hooks/search-hint.js +21 -52
- package/runtime/codex/.codex/hooks.json +3 -3
- package/runtime/codex/.codex/skills/activity/SKILL.md +23 -66
- package/runtime/codex/.codex/skills/announce/SKILL.md +27 -50
- package/runtime/codex/.codex/skills/archive/SKILL.md +21 -36
- package/runtime/codex/.codex/skills/checkup/SKILL.md +77 -36
- package/runtime/codex/.codex/skills/dark-mode/SKILL.md +1 -1
- package/runtime/codex/.codex/skills/dashboard/SKILL.md +17 -47
- package/runtime/codex/.codex/skills/handoff/SKILL.md +84 -133
- package/runtime/codex/.codex/skills/harvest/SKILL.md +32 -117
- package/runtime/codex/.codex/skills/ingest/SKILL.md +47 -25
- package/runtime/codex/.codex/skills/ingest-user-interview/SKILL.md +18 -36
- package/runtime/codex/.codex/skills/ingest-user-interview/references/analysis-contract.md +42 -0
- package/runtime/codex/.codex/skills/invite/SKILL.md +21 -35
- package/runtime/codex/.codex/skills/issue/SKILL.md +60 -41
- package/runtime/codex/.codex/skills/me/SKILL.md +1 -1
- package/runtime/codex/.codex/skills/meeting/SKILL.md +16 -36
- package/runtime/codex/.codex/skills/meeting/references/analysis-contract.md +48 -0
- package/runtime/codex/.codex/skills/note/SKILL.md +30 -25
- package/runtime/codex/.codex/skills/onboarding/SKILL.md +36 -41
- package/runtime/codex/.codex/skills/pull/SKILL.md +1 -1
- package/runtime/codex/.codex/skills/quest/SKILL.md +27 -66
- package/runtime/codex/.codex/skills/reflect/SKILL.md +22 -36
- package/runtime/codex/.codex/skills/save/SKILL.md +2 -2
- package/runtime/codex/.codex/skills/telemetry/SKILL.md +1 -1
- package/runtime/codex/.codex/skills/test/SKILL.md +1 -1
- package/runtime/codex/.codex/skills/tutorial/SKILL.md +40 -41
- package/runtime/codex/.codex/skills/view/SKILL.md +115 -111
- package/runtime/codex/.codex/skills/wrap/SKILL.md +45 -41
- package/runtime/codex/.codex/spec-manifest.json +9 -9
- package/runtime/codex/AGENTS.md +62 -58
- package/runtime/codex/bin/activity-action.sh +92 -0
- package/runtime/codex/bin/activity-data.sh +12 -233
- package/runtime/codex/bin/agent.sh +84 -100
- package/runtime/codex/bin/artifact-register.sh +164 -0
- package/runtime/codex/bin/artifact-writeback.sh +53 -0
- package/runtime/codex/bin/artifacts.sh +288 -0
- package/runtime/codex/bin/build-sealed-dataroom.mjs +722 -0
- package/runtime/codex/bin/capture-run.sh +18 -2
- package/runtime/codex/bin/codex-render-spec.mjs +41 -16
- package/runtime/codex/bin/codex-session-start.sh +14 -4
- package/runtime/codex/bin/codex-skill-render.mjs +9 -7
- package/runtime/codex/bin/corpus_map.py +806 -0
- package/runtime/codex/bin/corpus_survey.py +304 -0
- package/runtime/codex/bin/dashboard-data.sh +11 -171
- package/runtime/codex/bin/github-auth.sh +121 -0
- package/runtime/codex/bin/graph-batch.sh +7 -0
- package/runtime/codex/bin/graph-op.sh +4 -0
- package/runtime/codex/bin/graph-projection.sh +54 -0
- package/runtime/codex/bin/graph-wal.sh +13 -0
- package/runtime/codex/bin/graph.sh +44 -0
- package/runtime/codex/bin/handoff-lifecycle-job.sh +146 -0
- package/runtime/codex/bin/handoff-lifecycle.sh +280 -0
- package/runtime/codex/bin/handoff-preview.sh +169 -0
- package/runtime/codex/bin/handoff-run.sh +42 -26
- package/runtime/codex/bin/ingest-graph.sh +6 -0
- package/runtime/codex/bin/ingest-item.sh +10 -0
- package/runtime/codex/bin/ingest.sh +59 -30
- package/runtime/codex/bin/invite.sh +6 -0
- package/runtime/codex/bin/issue.sh +10 -0
- package/runtime/codex/bin/knowledge.sh +10 -0
- package/runtime/codex/bin/lib/config.sh +20 -0
- package/runtime/codex/bin/lib/context.sh +46 -25
- package/runtime/codex/bin/lib/git-sync.sh +70 -6
- package/runtime/codex/bin/lib/greeting.sh +34 -5
- package/runtime/codex/bin/lib/handoff-meta.sh +97 -0
- package/runtime/codex/bin/lib/worktree-links.sh +6 -0
- package/runtime/codex/bin/node-run.sh +42 -0
- package/runtime/codex/bin/notification.sh +6 -0
- package/runtime/codex/bin/observe-context.sh +14 -0
- package/runtime/codex/bin/onboarding.sh +6 -0
- package/runtime/codex/bin/person.py +4 -0
- package/runtime/codex/bin/person.sh +43 -10
- package/runtime/codex/bin/pi-render-spec.mjs +140 -0
- package/runtime/codex/bin/post-update.sh +37 -0
- package/runtime/codex/bin/prime-render-spec.mjs +147 -0
- package/runtime/codex/bin/publish-artifact.sh +55 -2
- package/runtime/codex/bin/quest.sh +9 -0
- package/runtime/codex/bin/question.sh +8 -0
- package/runtime/codex/bin/research-ingest.sh +7 -0
- package/runtime/codex/bin/restore-owned-skills.sh +67 -0
- package/runtime/codex/bin/retrieval_eval.py +385 -0
- package/runtime/codex/bin/runtime-identity.sh +70 -0
- package/runtime/codex/bin/runtime-upgrade.sh +43 -0
- package/runtime/codex/bin/scroll.sh +9 -0
- package/runtime/codex/bin/search.sh +231 -195
- package/runtime/codex/bin/settings.sh +174 -5
- package/runtime/codex/bin/startup-check.sh +136 -0
- package/runtime/codex/bin/telemetry.sh +522 -247
- package/runtime/codex/bin/test-changes.sh +344 -0
- package/runtime/codex/bin/thread.sh +9 -0
- package/runtime/codex/bin/todo.sh +9 -0
- package/runtime/codex/bin/view-render.sh +126 -0
- package/runtime/codex/bin/worktree-create.sh +19 -5
- package/runtime/codex/egregore_runtime/__init__.py +228 -0
- package/runtime/codex/egregore_runtime/adapters/__init__.py +5 -0
- package/runtime/codex/egregore_runtime/adapters/invitation.py +237 -0
- package/runtime/codex/egregore_runtime/adapters/notification.py +59 -0
- package/runtime/codex/egregore_runtime/adapters/qmd.py +1701 -0
- package/runtime/codex/egregore_runtime/adapters/qmd_cli.py +210 -0
- package/runtime/codex/egregore_runtime/adapters/qmd_embed_worker.py +59 -0
- package/runtime/codex/egregore_runtime/admin_gate.py +102 -0
- package/runtime/codex/egregore_runtime/artifacts.py +523 -0
- package/runtime/codex/egregore_runtime/contracts.py +499 -0
- package/runtime/codex/egregore_runtime/entitlements.py +85 -0
- package/runtime/codex/egregore_runtime/errors.py +10 -0
- package/runtime/codex/egregore_runtime/graph.py +356 -0
- package/runtime/codex/egregore_runtime/handoff_lookup.py +196 -0
- package/runtime/codex/egregore_runtime/harness_cli.py +1221 -0
- package/runtime/codex/egregore_runtime/identity.py +734 -0
- package/runtime/codex/egregore_runtime/identity_cli.py +91 -0
- package/runtime/codex/egregore_runtime/ingest.py +575 -0
- package/runtime/codex/egregore_runtime/ingest_cli.py +254 -0
- package/runtime/codex/egregore_runtime/ingest_index_cli.py +147 -0
- package/runtime/codex/egregore_runtime/invitation_cli.py +51 -0
- package/runtime/codex/egregore_runtime/invitations.py +116 -0
- package/runtime/codex/egregore_runtime/issue_cli.py +305 -0
- package/runtime/codex/egregore_runtime/issues.py +359 -0
- package/runtime/codex/egregore_runtime/knowledge.py +376 -0
- package/runtime/codex/egregore_runtime/knowledge_cli.py +173 -0
- package/runtime/codex/egregore_runtime/lifecycle.py +888 -0
- package/runtime/codex/egregore_runtime/lifecycle_cli.py +269 -0
- package/runtime/codex/egregore_runtime/notification_cli.py +125 -0
- package/runtime/codex/egregore_runtime/notifications.py +230 -0
- package/runtime/codex/egregore_runtime/observe.py +342 -0
- package/runtime/codex/egregore_runtime/onboarding.py +290 -0
- package/runtime/codex/egregore_runtime/onboarding_cli.py +110 -0
- package/runtime/codex/egregore_runtime/policy.py +144 -0
- package/runtime/codex/egregore_runtime/profile.py +193 -0
- package/runtime/codex/egregore_runtime/quest_cli.py +216 -0
- package/runtime/codex/egregore_runtime/question_cli.py +180 -0
- package/runtime/codex/egregore_runtime/questions.py +304 -0
- package/runtime/codex/egregore_runtime/quests.py +419 -0
- package/runtime/codex/egregore_runtime/readiness.py +379 -0
- package/runtime/codex/egregore_runtime/research_ingest.py +256 -0
- package/runtime/codex/egregore_runtime/research_ingest_cli.py +44 -0
- package/runtime/codex/egregore_runtime/runtime.py +464 -0
- package/runtime/codex/egregore_runtime/scroll_cli.py +185 -0
- package/runtime/codex/egregore_runtime/scrolls.py +726 -0
- package/runtime/codex/egregore_runtime/status.py +412 -0
- package/runtime/codex/egregore_runtime/status_cli.py +174 -0
- package/runtime/codex/egregore_runtime/sync.py +218 -0
- package/runtime/codex/egregore_runtime/teamsync.py +139 -0
- package/runtime/codex/egregore_runtime/telemetry.py +640 -0
- package/runtime/codex/egregore_runtime/thread_cli.py +173 -0
- package/runtime/codex/egregore_runtime/threads.py +517 -0
- package/runtime/codex/egregore_runtime/todo_cli.py +142 -0
- package/runtime/codex/egregore_runtime/todos.py +244 -0
- package/runtime/codex/egregore_runtime/upgrade.py +770 -0
- package/runtime/codex/egregore_runtime/upgrade_worker.py +53 -0
- package/runtime/codex/egregore_runtime/writeback.py +391 -0
- package/runtime/codex/egregore_runtime/writeback_cli.py +114 -0
- package/runtime/codex/manifest.json +98 -1
- package/runtime/pi/.codex/hooks/search-hint.js +21 -52
- package/runtime/pi/.codex/hooks.json +3 -3
- package/runtime/pi/.codex/skills/activity/SKILL.md +23 -66
- package/runtime/pi/.codex/skills/announce/SKILL.md +27 -50
- package/runtime/pi/.codex/skills/archive/SKILL.md +21 -36
- package/runtime/pi/.codex/skills/checkup/SKILL.md +77 -36
- package/runtime/pi/.codex/skills/dark-mode/SKILL.md +1 -1
- package/runtime/pi/.codex/skills/dashboard/SKILL.md +17 -47
- package/runtime/pi/.codex/skills/handoff/SKILL.md +84 -133
- package/runtime/pi/.codex/skills/harvest/SKILL.md +32 -117
- package/runtime/pi/.codex/skills/ingest/SKILL.md +47 -25
- package/runtime/pi/.codex/skills/ingest-user-interview/SKILL.md +18 -36
- package/runtime/pi/.codex/skills/ingest-user-interview/references/analysis-contract.md +42 -0
- package/runtime/pi/.codex/skills/invite/SKILL.md +21 -35
- package/runtime/pi/.codex/skills/issue/SKILL.md +60 -41
- package/runtime/pi/.codex/skills/me/SKILL.md +1 -1
- package/runtime/pi/.codex/skills/meeting/SKILL.md +16 -36
- package/runtime/pi/.codex/skills/meeting/references/analysis-contract.md +48 -0
- package/runtime/pi/.codex/skills/note/SKILL.md +30 -25
- package/runtime/pi/.codex/skills/onboarding/SKILL.md +36 -41
- package/runtime/pi/.codex/skills/pull/SKILL.md +1 -1
- package/runtime/pi/.codex/skills/quest/SKILL.md +27 -66
- package/runtime/pi/.codex/skills/reflect/SKILL.md +22 -36
- package/runtime/pi/.codex/skills/save/SKILL.md +2 -2
- package/runtime/pi/.codex/skills/telemetry/SKILL.md +1 -1
- package/runtime/pi/.codex/skills/test/SKILL.md +1 -1
- package/runtime/pi/.codex/skills/tutorial/SKILL.md +40 -41
- package/runtime/pi/.codex/skills/view/SKILL.md +115 -111
- package/runtime/pi/.codex/skills/wrap/SKILL.md +45 -41
- package/runtime/pi/.codex/spec-manifest.json +9 -9
- package/runtime/pi/.pi/APPEND_SYSTEM.md +57 -48
- package/runtime/pi/.pi/extensions/egregore.ts +7 -0
- package/runtime/pi/.pi/spec-manifest.json +2 -2
- package/runtime/pi/AGENTS.md +62 -58
- package/runtime/pi/bin/activity-action.sh +92 -0
- package/runtime/pi/bin/activity-data.sh +12 -233
- package/runtime/pi/bin/agent.sh +84 -100
- package/runtime/pi/bin/artifact-register.sh +164 -0
- package/runtime/pi/bin/artifact-writeback.sh +53 -0
- package/runtime/pi/bin/artifacts.sh +288 -0
- package/runtime/pi/bin/build-sealed-dataroom.mjs +722 -0
- package/runtime/pi/bin/capture-run.sh +18 -2
- package/runtime/pi/bin/codex-render-spec.mjs +41 -16
- package/runtime/pi/bin/codex-session-start.sh +14 -4
- package/runtime/pi/bin/codex-skill-render.mjs +9 -7
- package/runtime/pi/bin/corpus_map.py +806 -0
- package/runtime/pi/bin/corpus_survey.py +304 -0
- package/runtime/pi/bin/dashboard-data.sh +11 -171
- package/runtime/pi/bin/github-auth.sh +121 -0
- package/runtime/pi/bin/graph-batch.sh +7 -0
- package/runtime/pi/bin/graph-op.sh +4 -0
- package/runtime/pi/bin/graph-projection.sh +54 -0
- package/runtime/pi/bin/graph-wal.sh +13 -0
- package/runtime/pi/bin/graph.sh +44 -0
- package/runtime/pi/bin/handoff-lifecycle-job.sh +146 -0
- package/runtime/pi/bin/handoff-lifecycle.sh +280 -0
- package/runtime/pi/bin/handoff-preview.sh +169 -0
- package/runtime/pi/bin/handoff-run.sh +42 -26
- package/runtime/pi/bin/ingest-graph.sh +6 -0
- package/runtime/pi/bin/ingest-item.sh +10 -0
- package/runtime/pi/bin/ingest.sh +59 -30
- package/runtime/pi/bin/invite.sh +6 -0
- package/runtime/pi/bin/issue.sh +10 -0
- package/runtime/pi/bin/knowledge.sh +10 -0
- package/runtime/pi/bin/lib/config.sh +20 -0
- package/runtime/pi/bin/lib/context.sh +46 -25
- package/runtime/pi/bin/lib/git-sync.sh +70 -6
- package/runtime/pi/bin/lib/greeting.sh +34 -5
- package/runtime/pi/bin/lib/handoff-meta.sh +97 -0
- package/runtime/pi/bin/lib/worktree-links.sh +6 -0
- package/runtime/pi/bin/node-run.sh +42 -0
- package/runtime/pi/bin/notification.sh +6 -0
- package/runtime/pi/bin/observe-context.sh +14 -0
- package/runtime/pi/bin/onboarding.sh +6 -0
- package/runtime/pi/bin/person.py +4 -0
- package/runtime/pi/bin/person.sh +43 -10
- package/runtime/pi/bin/pi-observe-context.mjs +93 -0
- package/runtime/pi/bin/pi-product-workflows.mjs +1 -1
- package/runtime/pi/bin/pi-render-spec.mjs +1 -1
- package/runtime/pi/bin/post-update.sh +37 -0
- package/runtime/pi/bin/prime-render-spec.mjs +147 -0
- package/runtime/pi/bin/publish-artifact.sh +55 -2
- package/runtime/pi/bin/quest.sh +9 -0
- package/runtime/pi/bin/question.sh +8 -0
- package/runtime/pi/bin/research-ingest.sh +7 -0
- package/runtime/pi/bin/restore-owned-skills.sh +67 -0
- package/runtime/pi/bin/retrieval_eval.py +385 -0
- package/runtime/pi/bin/runtime-identity.sh +70 -0
- package/runtime/pi/bin/runtime-upgrade.sh +43 -0
- package/runtime/pi/bin/scroll.sh +9 -0
- package/runtime/pi/bin/search.sh +231 -195
- package/runtime/pi/bin/settings.sh +174 -5
- package/runtime/pi/bin/startup-check.sh +136 -0
- package/runtime/pi/bin/telemetry.sh +522 -247
- package/runtime/pi/bin/test-changes.sh +344 -0
- package/runtime/pi/bin/thread.sh +9 -0
- package/runtime/pi/bin/todo.sh +9 -0
- package/runtime/pi/bin/view-render.sh +126 -0
- package/runtime/pi/bin/worktree-create.sh +19 -5
- package/runtime/pi/egregore_runtime/__init__.py +228 -0
- package/runtime/pi/egregore_runtime/adapters/__init__.py +5 -0
- package/runtime/pi/egregore_runtime/adapters/invitation.py +237 -0
- package/runtime/pi/egregore_runtime/adapters/notification.py +59 -0
- package/runtime/pi/egregore_runtime/adapters/qmd.py +1701 -0
- package/runtime/pi/egregore_runtime/adapters/qmd_cli.py +210 -0
- package/runtime/pi/egregore_runtime/adapters/qmd_embed_worker.py +59 -0
- package/runtime/pi/egregore_runtime/admin_gate.py +102 -0
- package/runtime/pi/egregore_runtime/artifacts.py +523 -0
- package/runtime/pi/egregore_runtime/contracts.py +499 -0
- package/runtime/pi/egregore_runtime/entitlements.py +85 -0
- package/runtime/pi/egregore_runtime/errors.py +10 -0
- package/runtime/pi/egregore_runtime/graph.py +356 -0
- package/runtime/pi/egregore_runtime/handoff_lookup.py +196 -0
- package/runtime/pi/egregore_runtime/harness_cli.py +1221 -0
- package/runtime/pi/egregore_runtime/identity.py +734 -0
- package/runtime/pi/egregore_runtime/identity_cli.py +91 -0
- package/runtime/pi/egregore_runtime/ingest.py +575 -0
- package/runtime/pi/egregore_runtime/ingest_cli.py +254 -0
- package/runtime/pi/egregore_runtime/ingest_index_cli.py +147 -0
- package/runtime/pi/egregore_runtime/invitation_cli.py +51 -0
- package/runtime/pi/egregore_runtime/invitations.py +116 -0
- package/runtime/pi/egregore_runtime/issue_cli.py +305 -0
- package/runtime/pi/egregore_runtime/issues.py +359 -0
- package/runtime/pi/egregore_runtime/knowledge.py +376 -0
- package/runtime/pi/egregore_runtime/knowledge_cli.py +173 -0
- package/runtime/pi/egregore_runtime/lifecycle.py +888 -0
- package/runtime/pi/egregore_runtime/lifecycle_cli.py +269 -0
- package/runtime/pi/egregore_runtime/notification_cli.py +125 -0
- package/runtime/pi/egregore_runtime/notifications.py +230 -0
- package/runtime/pi/egregore_runtime/observe.py +342 -0
- package/runtime/pi/egregore_runtime/onboarding.py +290 -0
- package/runtime/pi/egregore_runtime/onboarding_cli.py +110 -0
- package/runtime/pi/egregore_runtime/policy.py +144 -0
- package/runtime/pi/egregore_runtime/profile.py +193 -0
- package/runtime/pi/egregore_runtime/quest_cli.py +216 -0
- package/runtime/pi/egregore_runtime/question_cli.py +180 -0
- package/runtime/pi/egregore_runtime/questions.py +304 -0
- package/runtime/pi/egregore_runtime/quests.py +419 -0
- package/runtime/pi/egregore_runtime/readiness.py +379 -0
- package/runtime/pi/egregore_runtime/research_ingest.py +256 -0
- package/runtime/pi/egregore_runtime/research_ingest_cli.py +44 -0
- package/runtime/pi/egregore_runtime/runtime.py +464 -0
- package/runtime/pi/egregore_runtime/scroll_cli.py +185 -0
- package/runtime/pi/egregore_runtime/scrolls.py +726 -0
- package/runtime/pi/egregore_runtime/status.py +412 -0
- package/runtime/pi/egregore_runtime/status_cli.py +174 -0
- package/runtime/pi/egregore_runtime/sync.py +218 -0
- package/runtime/pi/egregore_runtime/teamsync.py +139 -0
- package/runtime/pi/egregore_runtime/telemetry.py +640 -0
- package/runtime/pi/egregore_runtime/thread_cli.py +173 -0
- package/runtime/pi/egregore_runtime/threads.py +517 -0
- package/runtime/pi/egregore_runtime/todo_cli.py +142 -0
- package/runtime/pi/egregore_runtime/todos.py +244 -0
- package/runtime/pi/egregore_runtime/upgrade.py +770 -0
- package/runtime/pi/egregore_runtime/upgrade_worker.py +53 -0
- package/runtime/pi/egregore_runtime/writeback.py +391 -0
- package/runtime/pi/egregore_runtime/writeback_cli.py +114 -0
- package/runtime/pi/manifest.json +98 -1
- package/runtime/prime/.codex/hooks/search-hint.js +21 -52
- package/runtime/prime/.codex/hooks.json +3 -3
- package/runtime/prime/.codex/skills/activity/SKILL.md +23 -66
- package/runtime/prime/.codex/skills/announce/SKILL.md +27 -50
- package/runtime/prime/.codex/skills/archive/SKILL.md +21 -36
- package/runtime/prime/.codex/skills/checkup/SKILL.md +77 -36
- package/runtime/prime/.codex/skills/dark-mode/SKILL.md +1 -1
- package/runtime/prime/.codex/skills/dashboard/SKILL.md +17 -47
- package/runtime/prime/.codex/skills/handoff/SKILL.md +84 -133
- package/runtime/prime/.codex/skills/harvest/SKILL.md +32 -117
- package/runtime/prime/.codex/skills/ingest/SKILL.md +47 -25
- package/runtime/prime/.codex/skills/ingest-user-interview/SKILL.md +18 -36
- package/runtime/prime/.codex/skills/ingest-user-interview/references/analysis-contract.md +42 -0
- package/runtime/prime/.codex/skills/invite/SKILL.md +21 -35
- package/runtime/prime/.codex/skills/issue/SKILL.md +60 -41
- package/runtime/prime/.codex/skills/me/SKILL.md +1 -1
- package/runtime/prime/.codex/skills/meeting/SKILL.md +16 -36
- package/runtime/prime/.codex/skills/meeting/references/analysis-contract.md +48 -0
- package/runtime/prime/.codex/skills/note/SKILL.md +30 -25
- package/runtime/prime/.codex/skills/onboarding/SKILL.md +36 -41
- package/runtime/prime/.codex/skills/pull/SKILL.md +1 -1
- package/runtime/prime/.codex/skills/quest/SKILL.md +27 -66
- package/runtime/prime/.codex/skills/reflect/SKILL.md +22 -36
- package/runtime/prime/.codex/skills/save/SKILL.md +2 -2
- package/runtime/prime/.codex/skills/telemetry/SKILL.md +1 -1
- package/runtime/prime/.codex/skills/test/SKILL.md +1 -1
- package/runtime/prime/.codex/skills/tutorial/SKILL.md +40 -41
- package/runtime/prime/.codex/skills/view/SKILL.md +115 -111
- package/runtime/prime/.codex/skills/wrap/SKILL.md +45 -41
- package/runtime/prime/.codex/spec-manifest.json +9 -9
- package/runtime/prime/.prime/agent/APPEND_SYSTEM.md +57 -48
- package/runtime/prime/.prime/agent/extensions/egregore.ts +7 -0
- package/runtime/prime/.prime/agent/spec-manifest.json +2 -2
- package/runtime/prime/AGENTS.md +62 -58
- package/runtime/prime/bin/activity-action.sh +92 -0
- package/runtime/prime/bin/activity-data.sh +12 -233
- package/runtime/prime/bin/agent.sh +84 -100
- package/runtime/prime/bin/artifact-register.sh +164 -0
- package/runtime/prime/bin/artifact-writeback.sh +53 -0
- package/runtime/prime/bin/artifacts.sh +288 -0
- package/runtime/prime/bin/build-sealed-dataroom.mjs +722 -0
- package/runtime/prime/bin/capture-run.sh +18 -2
- package/runtime/prime/bin/codex-render-spec.mjs +41 -16
- package/runtime/prime/bin/codex-session-start.sh +14 -4
- package/runtime/prime/bin/codex-skill-render.mjs +9 -7
- package/runtime/prime/bin/corpus_map.py +806 -0
- package/runtime/prime/bin/corpus_survey.py +304 -0
- package/runtime/prime/bin/dashboard-data.sh +11 -171
- package/runtime/prime/bin/github-auth.sh +121 -0
- package/runtime/prime/bin/graph-batch.sh +7 -0
- package/runtime/prime/bin/graph-op.sh +4 -0
- package/runtime/prime/bin/graph-projection.sh +54 -0
- package/runtime/prime/bin/graph-wal.sh +13 -0
- package/runtime/prime/bin/graph.sh +44 -0
- package/runtime/prime/bin/handoff-lifecycle-job.sh +146 -0
- package/runtime/prime/bin/handoff-lifecycle.sh +280 -0
- package/runtime/prime/bin/handoff-preview.sh +169 -0
- package/runtime/prime/bin/handoff-run.sh +42 -26
- package/runtime/prime/bin/ingest-graph.sh +6 -0
- package/runtime/prime/bin/ingest-item.sh +10 -0
- package/runtime/prime/bin/ingest.sh +59 -30
- package/runtime/prime/bin/invite.sh +6 -0
- package/runtime/prime/bin/issue.sh +10 -0
- package/runtime/prime/bin/knowledge.sh +10 -0
- package/runtime/prime/bin/lib/config.sh +20 -0
- package/runtime/prime/bin/lib/context.sh +46 -25
- package/runtime/prime/bin/lib/git-sync.sh +70 -6
- package/runtime/prime/bin/lib/greeting.sh +34 -5
- package/runtime/prime/bin/lib/handoff-meta.sh +97 -0
- package/runtime/prime/bin/lib/worktree-links.sh +6 -0
- package/runtime/prime/bin/node-run.sh +42 -0
- package/runtime/prime/bin/notification.sh +6 -0
- package/runtime/prime/bin/observe-context.sh +14 -0
- package/runtime/prime/bin/onboarding.sh +6 -0
- package/runtime/prime/bin/person.py +4 -0
- package/runtime/prime/bin/person.sh +43 -10
- package/runtime/prime/bin/pi-observe-context.mjs +93 -0
- package/runtime/prime/bin/pi-product-workflows.mjs +1 -1
- package/runtime/prime/bin/pi-render-spec.mjs +140 -0
- package/runtime/prime/bin/post-update.sh +37 -0
- package/runtime/prime/bin/prime-render-spec.mjs +1 -1
- package/runtime/prime/bin/publish-artifact.sh +55 -2
- package/runtime/prime/bin/quest.sh +9 -0
- package/runtime/prime/bin/question.sh +8 -0
- package/runtime/prime/bin/research-ingest.sh +7 -0
- package/runtime/prime/bin/restore-owned-skills.sh +67 -0
- package/runtime/prime/bin/retrieval_eval.py +385 -0
- package/runtime/prime/bin/runtime-identity.sh +70 -0
- package/runtime/prime/bin/runtime-upgrade.sh +43 -0
- package/runtime/prime/bin/scroll.sh +9 -0
- package/runtime/prime/bin/search.sh +231 -195
- package/runtime/prime/bin/settings.sh +174 -5
- package/runtime/prime/bin/startup-check.sh +136 -0
- package/runtime/prime/bin/telemetry.sh +522 -247
- package/runtime/prime/bin/test-changes.sh +344 -0
- package/runtime/prime/bin/thread.sh +9 -0
- package/runtime/prime/bin/todo.sh +9 -0
- package/runtime/prime/bin/view-render.sh +126 -0
- package/runtime/prime/bin/worktree-create.sh +19 -5
- package/runtime/prime/egregore_runtime/__init__.py +228 -0
- package/runtime/prime/egregore_runtime/adapters/__init__.py +5 -0
- package/runtime/prime/egregore_runtime/adapters/invitation.py +237 -0
- package/runtime/prime/egregore_runtime/adapters/notification.py +59 -0
- package/runtime/prime/egregore_runtime/adapters/qmd.py +1701 -0
- package/runtime/prime/egregore_runtime/adapters/qmd_cli.py +210 -0
- package/runtime/prime/egregore_runtime/adapters/qmd_embed_worker.py +59 -0
- package/runtime/prime/egregore_runtime/admin_gate.py +102 -0
- package/runtime/prime/egregore_runtime/artifacts.py +523 -0
- package/runtime/prime/egregore_runtime/contracts.py +499 -0
- package/runtime/prime/egregore_runtime/entitlements.py +85 -0
- package/runtime/prime/egregore_runtime/errors.py +10 -0
- package/runtime/prime/egregore_runtime/graph.py +356 -0
- package/runtime/prime/egregore_runtime/handoff_lookup.py +196 -0
- package/runtime/prime/egregore_runtime/harness_cli.py +1221 -0
- package/runtime/prime/egregore_runtime/identity.py +734 -0
- package/runtime/prime/egregore_runtime/identity_cli.py +91 -0
- package/runtime/prime/egregore_runtime/ingest.py +575 -0
- package/runtime/prime/egregore_runtime/ingest_cli.py +254 -0
- package/runtime/prime/egregore_runtime/ingest_index_cli.py +147 -0
- package/runtime/prime/egregore_runtime/invitation_cli.py +51 -0
- package/runtime/prime/egregore_runtime/invitations.py +116 -0
- package/runtime/prime/egregore_runtime/issue_cli.py +305 -0
- package/runtime/prime/egregore_runtime/issues.py +359 -0
- package/runtime/prime/egregore_runtime/knowledge.py +376 -0
- package/runtime/prime/egregore_runtime/knowledge_cli.py +173 -0
- package/runtime/prime/egregore_runtime/lifecycle.py +888 -0
- package/runtime/prime/egregore_runtime/lifecycle_cli.py +269 -0
- package/runtime/prime/egregore_runtime/notification_cli.py +125 -0
- package/runtime/prime/egregore_runtime/notifications.py +230 -0
- package/runtime/prime/egregore_runtime/observe.py +342 -0
- package/runtime/prime/egregore_runtime/onboarding.py +290 -0
- package/runtime/prime/egregore_runtime/onboarding_cli.py +110 -0
- package/runtime/prime/egregore_runtime/policy.py +144 -0
- package/runtime/prime/egregore_runtime/profile.py +193 -0
- package/runtime/prime/egregore_runtime/quest_cli.py +216 -0
- package/runtime/prime/egregore_runtime/question_cli.py +180 -0
- package/runtime/prime/egregore_runtime/questions.py +304 -0
- package/runtime/prime/egregore_runtime/quests.py +419 -0
- package/runtime/prime/egregore_runtime/readiness.py +379 -0
- package/runtime/prime/egregore_runtime/research_ingest.py +256 -0
- package/runtime/prime/egregore_runtime/research_ingest_cli.py +44 -0
- package/runtime/prime/egregore_runtime/runtime.py +464 -0
- package/runtime/prime/egregore_runtime/scroll_cli.py +185 -0
- package/runtime/prime/egregore_runtime/scrolls.py +726 -0
- package/runtime/prime/egregore_runtime/status.py +412 -0
- package/runtime/prime/egregore_runtime/status_cli.py +174 -0
- package/runtime/prime/egregore_runtime/sync.py +218 -0
- package/runtime/prime/egregore_runtime/teamsync.py +139 -0
- package/runtime/prime/egregore_runtime/telemetry.py +640 -0
- package/runtime/prime/egregore_runtime/thread_cli.py +173 -0
- package/runtime/prime/egregore_runtime/threads.py +517 -0
- package/runtime/prime/egregore_runtime/todo_cli.py +142 -0
- package/runtime/prime/egregore_runtime/todos.py +244 -0
- package/runtime/prime/egregore_runtime/upgrade.py +770 -0
- package/runtime/prime/egregore_runtime/upgrade_worker.py +53 -0
- package/runtime/prime/egregore_runtime/writeback.py +391 -0
- package/runtime/prime/egregore_runtime/writeback_cli.py +114 -0
- 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
|
-
|
|
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, {
|
|
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
|
|
520
|
-
//
|
|
521
|
-
//
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
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 === "
|
|
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
|
-
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
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.
|
|
4
|
-
"description": "Set up Egregore for your team in one command
|
|
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.
|