create-egregore 0.20.2 → 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.
- package/assets/egregore-launcher.js +1011 -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
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# branch-guard.sh — PreToolUse hook blocking modifications on protected branches
|
|
3
|
+
# Receives tool input JSON on stdin from Claude Code.
|
|
4
|
+
# Exit 0 = allow, exit 2 = block (reason on stderr).
|
|
5
|
+
# Must be fast (<50ms) — no network calls, just path/branch checks.
|
|
6
|
+
|
|
7
|
+
# No set -e — hook must never accidentally block by crashing
|
|
8
|
+
# If anything fails unexpectedly, fall through to exit 0 (allow)
|
|
9
|
+
|
|
10
|
+
PROJECT_DIR="${CLAUDE_PROJECT_DIR:-$(cd "$(dirname "$0")/../.." && pwd)}"
|
|
11
|
+
|
|
12
|
+
# --- Guard: if project dir no longer exists (worktree deleted), allow gracefully ---
|
|
13
|
+
if [ ! -d "$PROJECT_DIR" ]; then
|
|
14
|
+
exit 0
|
|
15
|
+
fi
|
|
16
|
+
|
|
17
|
+
# --- Get current branch ---
|
|
18
|
+
# In a worktree, CWD is the worktree — git without -C returns the correct branch.
|
|
19
|
+
# Fallback to -C PROJECT_DIR for non-worktree contexts.
|
|
20
|
+
BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null) || \
|
|
21
|
+
BRANCH=$(git -C "$PROJECT_DIR" rev-parse --abbrev-ref HEAD 2>/dev/null) || exit 0
|
|
22
|
+
|
|
23
|
+
# Resolve the configured integration branch before deciding whether the current
|
|
24
|
+
# branch is protected. Single-branch instances may use main; custom instances
|
|
25
|
+
# may use another name such as trunk.
|
|
26
|
+
BASE_BRANCH=$(jq -r 'if (.base_branch | type) == "string" then .base_branch else "develop" end' "$PROJECT_DIR/egregore.json" 2>/dev/null) || BASE_BRANCH="develop"
|
|
27
|
+
if [ -z "$BASE_BRANCH" ] || ! git check-ref-format --branch "$BASE_BRANCH" >/dev/null 2>&1; then
|
|
28
|
+
BASE_BRANCH="develop"
|
|
29
|
+
fi
|
|
30
|
+
|
|
31
|
+
# Guard the conventional protected branches plus the configured base branch.
|
|
32
|
+
case "$BRANCH" in
|
|
33
|
+
develop|main|master|"$BASE_BRANCH") ;;
|
|
34
|
+
*) exit 0 ;;
|
|
35
|
+
esac
|
|
36
|
+
|
|
37
|
+
# --- Consent bypass: the user explicitly chose to work on this protected branch ---
|
|
38
|
+
# Set by the agent (per CLAUDE.md branch-guard protocol) only after the user
|
|
39
|
+
# picks "Proceed on <branch>" in an AskUserQuestion. Scoped to the branch name
|
|
40
|
+
# and cleared on session start, so consent is asked once per session, not per write.
|
|
41
|
+
CONSENT_FILE="$PROJECT_DIR/.egregore-branch-consent"
|
|
42
|
+
if [ -f "$CONSENT_FILE" ] && [ "$(cat "$CONSENT_FILE" 2>/dev/null)" = "$BRANCH" ]; then
|
|
43
|
+
exit 0
|
|
44
|
+
fi
|
|
45
|
+
|
|
46
|
+
# --- Read tool input from stdin (before fast-path so we can check tool) ---
|
|
47
|
+
INPUT=$(cat)
|
|
48
|
+
TOOL_NAME=$(echo "$INPUT" | jq -r '.tool_name // empty' 2>/dev/null) || true
|
|
49
|
+
|
|
50
|
+
if [ -z "$TOOL_NAME" ]; then
|
|
51
|
+
exit 0
|
|
52
|
+
fi
|
|
53
|
+
|
|
54
|
+
# --- Read author from state file ---
|
|
55
|
+
AUTHOR=$(jq -r '.display_name // .name // "dev"' "$PROJECT_DIR/.egregore-state.json" 2>/dev/null) || AUTHOR="dev"
|
|
56
|
+
|
|
57
|
+
# --- Resolve memory directory (for exemption checks) ---
|
|
58
|
+
MEMORY_DIR=$(realpath "$PROJECT_DIR/memory" 2>/dev/null || echo "$PROJECT_DIR/memory")
|
|
59
|
+
|
|
60
|
+
# --- Helper: check if path is exempt from branch guard ---
|
|
61
|
+
is_exempt() {
|
|
62
|
+
local path="$1"
|
|
63
|
+
|
|
64
|
+
# Resolve relative paths
|
|
65
|
+
if [[ "$path" != /* ]]; then
|
|
66
|
+
path="$PROJECT_DIR/$path"
|
|
67
|
+
fi
|
|
68
|
+
|
|
69
|
+
# Resolve symlinks
|
|
70
|
+
local resolved
|
|
71
|
+
resolved=$(realpath "$path" 2>/dev/null || echo "$path")
|
|
72
|
+
|
|
73
|
+
# Exempt: .claude/ directory
|
|
74
|
+
case "$resolved" in
|
|
75
|
+
"$PROJECT_DIR/.claude"/*|"$PROJECT_DIR/.claude") return 0 ;;
|
|
76
|
+
esac
|
|
77
|
+
|
|
78
|
+
# Exempt: .egregore-state.json
|
|
79
|
+
if [[ "$resolved" == "$PROJECT_DIR/.egregore-state.json" ]]; then
|
|
80
|
+
return 0
|
|
81
|
+
fi
|
|
82
|
+
|
|
83
|
+
# Exempt: .env
|
|
84
|
+
if [[ "$resolved" == "$PROJECT_DIR/.env" ]]; then
|
|
85
|
+
return 0
|
|
86
|
+
fi
|
|
87
|
+
|
|
88
|
+
# Exempt: memory/ (resolve symlink to check both the link and target)
|
|
89
|
+
if [[ "$resolved" == "$PROJECT_DIR/memory"/* || "$resolved" == "$PROJECT_DIR/memory" ]]; then
|
|
90
|
+
return 0
|
|
91
|
+
fi
|
|
92
|
+
if [[ "$resolved" == "$MEMORY_DIR"/* || "$resolved" == "$MEMORY_DIR" ]]; then
|
|
93
|
+
return 0
|
|
94
|
+
fi
|
|
95
|
+
|
|
96
|
+
# Exempt: /tmp/
|
|
97
|
+
case "$resolved" in
|
|
98
|
+
/tmp/*|/tmp|/private/tmp/*|/private/tmp) return 0 ;;
|
|
99
|
+
esac
|
|
100
|
+
|
|
101
|
+
# Exempt: paths outside the hub project (managed repos are sibling dirs
|
|
102
|
+
# with their own branch state — the hub's develop guard doesn't apply).
|
|
103
|
+
if [[ "$resolved" != "$PROJECT_DIR" && "$resolved" != "$PROJECT_DIR/"* ]]; then
|
|
104
|
+
return 0
|
|
105
|
+
fi
|
|
106
|
+
|
|
107
|
+
return 1
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
# --- Helper: check if bash command targets a non-hub repo ---
|
|
111
|
+
# Returns 0 (true) if the git command operates on memory/, a managed repo,
|
|
112
|
+
# or any directory outside the hub project.
|
|
113
|
+
# Strategy: extract paths from cd/git-C, resolve them, check if they're
|
|
114
|
+
# outside PROJECT_DIR. If so, it's a different repo — allow it.
|
|
115
|
+
targets_other_repo() {
|
|
116
|
+
local cmd="$1"
|
|
117
|
+
|
|
118
|
+
# Extract directory targets from common patterns:
|
|
119
|
+
# cd <path> → path
|
|
120
|
+
# git -C <path> → path
|
|
121
|
+
# git -C "<path>" → path
|
|
122
|
+
local paths=""
|
|
123
|
+
|
|
124
|
+
# cd targets (handles: cd path, cd "path", cd 'path')
|
|
125
|
+
paths="$paths $(echo "$cmd" | grep -oE 'cd\s+["'"'"']?[^ ;&|"'"'"']+' 2>/dev/null | sed 's/^cd\s*["'"'"']*//g')"
|
|
126
|
+
|
|
127
|
+
# git -C targets
|
|
128
|
+
paths="$paths $(echo "$cmd" | grep -oE 'git\s+-C\s+["'"'"']?[^ ;&|"'"'"']+' 2>/dev/null | sed 's/^git\s*-C\s*["'"'"']*//g')"
|
|
129
|
+
|
|
130
|
+
for p in $paths; do
|
|
131
|
+
# Skip empty
|
|
132
|
+
[ -z "$p" ] && continue
|
|
133
|
+
|
|
134
|
+
# Resolve relative paths from PROJECT_DIR
|
|
135
|
+
if [[ "$p" != /* ]]; then
|
|
136
|
+
p="$PROJECT_DIR/$p"
|
|
137
|
+
fi
|
|
138
|
+
|
|
139
|
+
# Resolve symlinks
|
|
140
|
+
local resolved
|
|
141
|
+
resolved=$(realpath "$p" 2>/dev/null || echo "$p")
|
|
142
|
+
|
|
143
|
+
# If it resolves to memory dir — allow
|
|
144
|
+
if [[ "$resolved" == "$MEMORY_DIR" || "$resolved" == "$MEMORY_DIR/"* ]]; then
|
|
145
|
+
return 0
|
|
146
|
+
fi
|
|
147
|
+
|
|
148
|
+
# If it's outside the project dir entirely — it's a different repo, allow
|
|
149
|
+
if [[ "$resolved" != "$PROJECT_DIR" && "$resolved" != "$PROJECT_DIR/"* ]]; then
|
|
150
|
+
return 0
|
|
151
|
+
fi
|
|
152
|
+
done
|
|
153
|
+
|
|
154
|
+
return 1
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
# --- Block message — keep routine branch mechanics out of the user's way ---
|
|
158
|
+
BLOCK_MSG="Protected branch (${BRANCH}). Move project work to a task branch before writing.
|
|
159
|
+
|
|
160
|
+
If the work topic is clear, create the branch automatically:
|
|
161
|
+
git fetch origin ${BASE_BRANCH} --quiet && git checkout -b dev/${AUTHOR}/{topic-slug} origin/${BASE_BRANCH}
|
|
162
|
+
Then continue there and briefly tell the user. Do not ask for routine Git permission.
|
|
163
|
+
|
|
164
|
+
AskUserQuestion only when the work topic is genuinely ambiguous; ask for the topic, not whether branching is allowed.
|
|
165
|
+
|
|
166
|
+
Only when the user explicitly requested writing on ${BRANCH}, record consent and retry:
|
|
167
|
+
echo '${BRANCH}' > .egregore-branch-consent
|
|
168
|
+
|
|
169
|
+
Memory, managed-repo, and runtime-state writes should bypass this project guard."
|
|
170
|
+
|
|
171
|
+
# --- Check based on tool type ---
|
|
172
|
+
case "$TOOL_NAME" in
|
|
173
|
+
Edit|Write)
|
|
174
|
+
FILE_PATH=$(echo "$INPUT" | jq -r '.tool_input.file_path // empty' 2>/dev/null) || true
|
|
175
|
+
if [ -z "${FILE_PATH:-}" ]; then
|
|
176
|
+
exit 0
|
|
177
|
+
fi
|
|
178
|
+
|
|
179
|
+
if ! is_exempt "$FILE_PATH"; then
|
|
180
|
+
echo "$BLOCK_MSG" >&2
|
|
181
|
+
exit 2
|
|
182
|
+
fi
|
|
183
|
+
;;
|
|
184
|
+
|
|
185
|
+
Bash)
|
|
186
|
+
COMMAND=$(echo "$INPUT" | jq -r '.tool_input.command // empty' 2>/dev/null) || true
|
|
187
|
+
if [ -z "${COMMAND:-}" ]; then
|
|
188
|
+
exit 0
|
|
189
|
+
fi
|
|
190
|
+
|
|
191
|
+
# Allow branch cleanup (git push --delete) — not pushing to current branch
|
|
192
|
+
if echo "$COMMAND" | grep -qE 'git\s+push\s+.*--delete' 2>/dev/null; then
|
|
193
|
+
exit 0
|
|
194
|
+
fi
|
|
195
|
+
|
|
196
|
+
# Only check commands that contain git commit or git push
|
|
197
|
+
if echo "$COMMAND" | grep -qE 'git\s+(commit|push)' 2>/dev/null; then
|
|
198
|
+
# Allow if targeting memory/ or a managed repo (separate repos, own branch model)
|
|
199
|
+
if targets_other_repo "$COMMAND"; then
|
|
200
|
+
exit 0
|
|
201
|
+
fi
|
|
202
|
+
# Allow framework updates from upstream (not user work — safe on develop)
|
|
203
|
+
if echo "$COMMAND" | grep -qF 'EGREGORE_FRAMEWORK_UPDATE=1' 2>/dev/null; then
|
|
204
|
+
exit 0
|
|
205
|
+
fi
|
|
206
|
+
# Allow commits that only touch framework paths (bin/, .claude/, CLAUDE.md, skills/)
|
|
207
|
+
if echo "$COMMAND" | grep -qE 'git\s+commit' 2>/dev/null; then
|
|
208
|
+
_NON_FW=$(git -C "$PROJECT_DIR" diff --cached --name-only 2>/dev/null | grep -vE '^(bin/|\.claude/|CLAUDE\.md$|skills/)' | head -1)
|
|
209
|
+
if [ -z "$_NON_FW" ]; then
|
|
210
|
+
# All staged files are framework paths — allow
|
|
211
|
+
exit 0
|
|
212
|
+
fi
|
|
213
|
+
fi
|
|
214
|
+
echo "$BLOCK_MSG" >&2
|
|
215
|
+
exit 2
|
|
216
|
+
fi
|
|
217
|
+
;;
|
|
218
|
+
|
|
219
|
+
EnterPlanMode)
|
|
220
|
+
# Plan mode doesn't write anything — allow on protected branches.
|
|
221
|
+
# The actual Edit/Write/Bash that follows will still trigger branching.
|
|
222
|
+
exit 0
|
|
223
|
+
;;
|
|
224
|
+
|
|
225
|
+
*)
|
|
226
|
+
exit 0
|
|
227
|
+
;;
|
|
228
|
+
esac
|
|
229
|
+
|
|
230
|
+
# Default: allow
|
|
231
|
+
exit 0
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# After a deterministic card renderer runs, attach only a compact hidden
|
|
3
|
+
# marker: the card is already fully visible as the command's stdout, and the
|
|
4
|
+
# assistant must not repeat it. The card bytes are never attached — the
|
|
5
|
+
# renderer's output is the single product surface, visible the moment
|
|
6
|
+
# rendering finishes.
|
|
7
|
+
|
|
8
|
+
set -u
|
|
9
|
+
|
|
10
|
+
INPUT=$(cat 2>/dev/null) || exit 0
|
|
11
|
+
TOOL=$(printf '%s' "$INPUT" | jq -r '.tool_name // empty' 2>/dev/null)
|
|
12
|
+
[ "$TOOL" = "Bash" ] || exit 0
|
|
13
|
+
COMMAND=$(printf '%s' "$INPUT" | jq -r '.tool_input.command // empty' 2>/dev/null)
|
|
14
|
+
|
|
15
|
+
# Contiguous invocation phrases only: a command merely mentioning these
|
|
16
|
+
# scripts (a grep, a test, an editor call) must not trigger the marker.
|
|
17
|
+
SURFACE=""
|
|
18
|
+
case "$COMMAND" in
|
|
19
|
+
*"codex-skill-render.mjs activity-card"*) SURFACE="Activity" ;;
|
|
20
|
+
*"codex-skill-render.mjs dashboard-card"*) SURFACE="Dashboard" ;;
|
|
21
|
+
*"bin/handoff-preview.sh approve"*) SURFACE="Handoff result" ;;
|
|
22
|
+
*"bin/agent.sh wrap"*) SURFACE="Wrap result" ;;
|
|
23
|
+
esac
|
|
24
|
+
[ -n "$SURFACE" ] || exit 0
|
|
25
|
+
|
|
26
|
+
jq -n --arg surface "$SURFACE" '{
|
|
27
|
+
hookSpecificOutput: {
|
|
28
|
+
hookEventName: "PostToolUse",
|
|
29
|
+
additionalContext: (
|
|
30
|
+
"EGREGORE_CARD_DISPLAYED_V1: the " + $surface + " card is already fully "
|
|
31
|
+
+ "visible as the tool output above — deterministic renderer stdout, "
|
|
32
|
+
+ "action numbers included. Do not copy, re-render, summarize, or repeat "
|
|
33
|
+
+ "any part of it. The card itself addresses the user; reply only with "
|
|
34
|
+
+ "what the user separately asked for, or nothing."
|
|
35
|
+
)
|
|
36
|
+
}
|
|
37
|
+
}'
|
|
38
|
+
exit 0
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# emissary-detect.sh — UserPromptSubmit hook.
|
|
3
|
+
#
|
|
4
|
+
# When the user expresses intent to create or send an Egregore emissary
|
|
5
|
+
# (or pastes an emissary link), inject a soft routing hint so the model
|
|
6
|
+
# reliably invokes the /emissary skill instead of getting confused with
|
|
7
|
+
# /handoff.
|
|
8
|
+
#
|
|
9
|
+
# Advisory only — never blocks. Rate-limited to once per session.
|
|
10
|
+
# Always exits 0. No jq, no network.
|
|
11
|
+
|
|
12
|
+
PROJECT_DIR="${CLAUDE_PROJECT_DIR:-$(cd "$(dirname "$0")/../.." && pwd)}"
|
|
13
|
+
[ ! -d "$PROJECT_DIR" ] && exit 0
|
|
14
|
+
|
|
15
|
+
INPUT=$(cat 2>/dev/null) || exit 0
|
|
16
|
+
|
|
17
|
+
# Extract the prompt text. Tolerate either "prompt" or "user_prompt" keys
|
|
18
|
+
# and any whitespace variations. Newlines in the prompt are encoded as \n
|
|
19
|
+
# in JSON, so this single-line grep works.
|
|
20
|
+
PROMPT=$(echo "$INPUT" | grep -o '"prompt"[[:space:]]*:[[:space:]]*"[^"]*"' | head -1 | sed 's/.*:[[:space:]]*"\(.*\)"$/\1/')
|
|
21
|
+
|
|
22
|
+
[ -z "$PROMPT" ] && exit 0
|
|
23
|
+
|
|
24
|
+
# Match the patterns that should route to /emissary. Case-insensitive.
|
|
25
|
+
# Patterns:
|
|
26
|
+
# - explicit slash: /emissary
|
|
27
|
+
# - creation verbs + "emissary": make / create / compose / draft / send
|
|
28
|
+
# - "let's emissary this" colloquial
|
|
29
|
+
# - egregore.xyz/emissary/e/ link (run intent)
|
|
30
|
+
if ! echo "$PROMPT" | grep -qiE '(/emissary\b|\b(make|create|compose|draft|send|run|build)( an?| this| the)? emissary\b|\blet'\''?s (make|create|do|emissary) (an? )?emissary\b|egregore\.xyz/emissary/e/)'; then
|
|
31
|
+
exit 0
|
|
32
|
+
fi
|
|
33
|
+
|
|
34
|
+
# Rate-limit: once per session.
|
|
35
|
+
SESSION_ID=""
|
|
36
|
+
SID_FILE="$PROJECT_DIR/.egregore-session-id"
|
|
37
|
+
if [ -f "$SID_FILE" ]; then
|
|
38
|
+
SESSION_ID=$(cat "$SID_FILE" 2>/dev/null) || true
|
|
39
|
+
fi
|
|
40
|
+
HINT_FLAG="/tmp/egregore-emissary-hint-${SESSION_ID:-default}"
|
|
41
|
+
if [ -f "$HINT_FLAG" ]; then
|
|
42
|
+
exit 0
|
|
43
|
+
fi
|
|
44
|
+
touch "$HINT_FLAG" 2>/dev/null
|
|
45
|
+
|
|
46
|
+
# Inject a routing hint via the UserPromptSubmit additionalContext mechanism.
|
|
47
|
+
# Plain text on stdout is appended to the user's prompt context; the
|
|
48
|
+
# structured JSON form is more explicit about provenance.
|
|
49
|
+
cat <<'EOF'
|
|
50
|
+
{"hookSpecificOutput":{"hookEventName":"UserPromptSubmit","additionalContext":"Routing hint: the user's prompt mentions an emissary. The /emissary skill is the right entry point — it wraps `npx egregore-emissary` for compose/send and handles run intent for pasted egregore.xyz/emissary/e/ links. Do not route to /handoff for capsule work; /handoff is the team session-handoff only."}}
|
|
51
|
+
EOF
|
|
52
|
+
|
|
53
|
+
exit 0
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# memory-refresh.sh — UserPromptSubmit hook that keeps the shared memory repo
|
|
3
|
+
# fresh during long-lived sessions.
|
|
4
|
+
#
|
|
5
|
+
# Why: memory is a git repo shared across the team. session-start pulls it once
|
|
6
|
+
# at boot; after that, teammates' handoffs, notes, and knowledge won't surface
|
|
7
|
+
# until the user runs /pull, /activity, or restarts the session. This hook
|
|
8
|
+
# keeps memory fresh opportunistically so "let's see the handoff from oskar"
|
|
9
|
+
# works without an explicit /pull.
|
|
10
|
+
#
|
|
11
|
+
# Design:
|
|
12
|
+
# - Throttled to at most one fetch every 5 minutes (FETCH_HEAD mtime check)
|
|
13
|
+
# - Runs fetch+pull in background — never blocks the user's prompt
|
|
14
|
+
# - Fast-forward only — never rebases or merges the memory repo
|
|
15
|
+
# - Silent — no output unless debugging
|
|
16
|
+
# - Must always exit 0 (this is an observe-style hook, not a gate)
|
|
17
|
+
|
|
18
|
+
PROJECT_DIR="${CLAUDE_PROJECT_DIR:-$(cd "$(dirname "$0")/../.." && pwd)}"
|
|
19
|
+
|
|
20
|
+
# Guard: project gone (worktree deleted) → nothing to do
|
|
21
|
+
[ ! -d "$PROJECT_DIR" ] && exit 0
|
|
22
|
+
|
|
23
|
+
MEMORY_LINK="$PROJECT_DIR/memory"
|
|
24
|
+
|
|
25
|
+
# No memory symlink or missing target → nothing to do
|
|
26
|
+
[ ! -e "$MEMORY_LINK" ] && exit 0
|
|
27
|
+
|
|
28
|
+
# Resolve symlink → real dir. Use `cd && pwd` (portable; avoids readlink -f
|
|
29
|
+
# which is GNU-only — BSD/macOS doesn't have it).
|
|
30
|
+
MEMORY_DIR="$(cd "$MEMORY_LINK" 2>/dev/null && pwd)" || exit 0
|
|
31
|
+
[ ! -d "$MEMORY_DIR/.git" ] && exit 0
|
|
32
|
+
|
|
33
|
+
# Throttle: only fetch if last fetch was >5 minutes ago (or never).
|
|
34
|
+
# 5 min is a balance — fresh enough that teammates' updates show up quickly,
|
|
35
|
+
# infrequent enough that we don't thrash the network.
|
|
36
|
+
FETCH_HEAD="$MEMORY_DIR/.git/FETCH_HEAD"
|
|
37
|
+
if [ -f "$FETCH_HEAD" ]; then
|
|
38
|
+
# stat flag differs between BSD (macOS) and GNU (Linux)
|
|
39
|
+
LAST_FETCH=$(stat -f %m "$FETCH_HEAD" 2>/dev/null || stat -c %Y "$FETCH_HEAD" 2>/dev/null || echo 0)
|
|
40
|
+
NOW=$(date +%s)
|
|
41
|
+
AGE=$((NOW - LAST_FETCH))
|
|
42
|
+
[ "$AGE" -lt 300 ] && exit 0
|
|
43
|
+
fi
|
|
44
|
+
|
|
45
|
+
# Background fetch+pull. Never blocks the prompt. Next tool read of memory/
|
|
46
|
+
# will see fresh data (usually completes in <2s).
|
|
47
|
+
(
|
|
48
|
+
git -C "$MEMORY_DIR" fetch origin --quiet 2>/dev/null
|
|
49
|
+
|
|
50
|
+
# Only pull when local and remote diverge AND fast-forward is possible.
|
|
51
|
+
# Skip if not on a branch (detached HEAD), if no upstream, or if we'd need
|
|
52
|
+
# to merge (would be a three-way situation that shouldn't happen for
|
|
53
|
+
# append-only handoff/memory writes, but if it did, we don't want to leave
|
|
54
|
+
# the repo in a conflicted state unattended).
|
|
55
|
+
LOCAL=$(git -C "$MEMORY_DIR" rev-parse HEAD 2>/dev/null)
|
|
56
|
+
UPSTREAM=$(git -C "$MEMORY_DIR" rev-parse --abbrev-ref --symbolic-full-name '@{u}' 2>/dev/null)
|
|
57
|
+
if [ -n "$LOCAL" ] && [ -n "$UPSTREAM" ]; then
|
|
58
|
+
REMOTE=$(git -C "$MEMORY_DIR" rev-parse "$UPSTREAM" 2>/dev/null)
|
|
59
|
+
if [ -n "$REMOTE" ] && [ "$LOCAL" != "$REMOTE" ]; then
|
|
60
|
+
# --ff-only: fail cleanly instead of merging or rebasing
|
|
61
|
+
git -C "$MEMORY_DIR" pull --ff-only --quiet 2>/dev/null || true
|
|
62
|
+
fi
|
|
63
|
+
fi
|
|
64
|
+
) &
|
|
65
|
+
disown 2>/dev/null || true
|
|
66
|
+
|
|
67
|
+
exit 0
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# onboarding-guard.sh — PreToolUse hook that blocks work until onboarding completes
|
|
3
|
+
# Receives tool input JSON on stdin from Claude Code.
|
|
4
|
+
# Exit 0 = allow, exit 2 = block (reason on stderr).
|
|
5
|
+
# Must be fast (<50ms) — no network calls, just file checks.
|
|
6
|
+
|
|
7
|
+
PROJECT_DIR="${CLAUDE_PROJECT_DIR:-$(cd "$(dirname "$0")/../.." && pwd)}"
|
|
8
|
+
|
|
9
|
+
# Guard: if project dir no longer exists (worktree deleted), allow gracefully
|
|
10
|
+
if [ ! -d "$PROJECT_DIR" ]; then
|
|
11
|
+
exit 0
|
|
12
|
+
fi
|
|
13
|
+
|
|
14
|
+
STATE_FILE="$PROJECT_DIR/.egregore-state.json"
|
|
15
|
+
|
|
16
|
+
# No state file = fresh install, onboarding hasn't started yet.
|
|
17
|
+
# session-start.sh handles this case — don't block here.
|
|
18
|
+
if [ ! -f "$STATE_FILE" ]; then
|
|
19
|
+
exit 0
|
|
20
|
+
fi
|
|
21
|
+
|
|
22
|
+
# Fast path: check onboarding_complete without jq (saves ~30ms)
|
|
23
|
+
# grep for the literal JSON key — covers both true and false
|
|
24
|
+
if grep -q '"onboarding_complete"[[:space:]]*:[[:space:]]*true' "$STATE_FILE" 2>/dev/null; then
|
|
25
|
+
exit 0
|
|
26
|
+
fi
|
|
27
|
+
|
|
28
|
+
# If we get here, either onboarding_complete is false, missing, or file is corrupt.
|
|
29
|
+
# Distinguish: corrupt/unreadable → fail-open; explicitly false → block
|
|
30
|
+
if ! grep -q '"onboarding_complete"' "$STATE_FILE" 2>/dev/null; then
|
|
31
|
+
# Field missing or file unreadable — fail-open
|
|
32
|
+
exit 0
|
|
33
|
+
fi
|
|
34
|
+
|
|
35
|
+
# Onboarding incomplete — read tool info to decide whether to block
|
|
36
|
+
INPUT=$(cat)
|
|
37
|
+
|
|
38
|
+
# Extract tool_name without jq (saves another ~30ms)
|
|
39
|
+
TOOL_NAME=$(echo "$INPUT" | grep -o '"tool_name"[[:space:]]*:[[:space:]]*"[^"]*"' 2>/dev/null | head -1 | sed 's/.*:[[:space:]]*"\([^"]*\)"/\1/' 2>/dev/null) || true
|
|
40
|
+
|
|
41
|
+
# No tool name = malformed input — fail-open
|
|
42
|
+
if [ -z "$TOOL_NAME" ]; then
|
|
43
|
+
exit 0
|
|
44
|
+
fi
|
|
45
|
+
|
|
46
|
+
# Allow Skill invocations (needed for /onboarding itself)
|
|
47
|
+
if [ "$TOOL_NAME" = "Skill" ]; then
|
|
48
|
+
exit 0
|
|
49
|
+
fi
|
|
50
|
+
|
|
51
|
+
# Allow reads — information gathering doesn't need blocking
|
|
52
|
+
case "$TOOL_NAME" in
|
|
53
|
+
Read|Glob|Grep) exit 0 ;;
|
|
54
|
+
esac
|
|
55
|
+
|
|
56
|
+
# Allow AskUserQuestion — onboarding uses this
|
|
57
|
+
if [ "$TOOL_NAME" = "AskUserQuestion" ]; then
|
|
58
|
+
exit 0
|
|
59
|
+
fi
|
|
60
|
+
|
|
61
|
+
# Allow ALL Bash commands during onboarding.
|
|
62
|
+
# The guard's purpose is to block non-onboarding Edit/Write/EnterWorktree —
|
|
63
|
+
# not Bash. Onboarding needs Bash freedom for VERIFY (.env reads, egregore.json
|
|
64
|
+
# reads, memory symlink checks), state writes (jq with escaped quotes), graph
|
|
65
|
+
# calls, and more. A per-command whitelist was incomplete and the regex to
|
|
66
|
+
# extract commands from JSON broke on escaped quotes (jq commands routinely
|
|
67
|
+
# contain \"). Allowing all Bash is simpler and correct — the real gatekeeping
|
|
68
|
+
# happens on Edit/Write/EnterWorktree below.
|
|
69
|
+
if [ "$TOOL_NAME" = "Bash" ]; then
|
|
70
|
+
exit 0
|
|
71
|
+
fi
|
|
72
|
+
|
|
73
|
+
# Allow Edit/Write to onboarding-related files
|
|
74
|
+
if [ "$TOOL_NAME" = "Edit" ] || [ "$TOOL_NAME" = "Write" ]; then
|
|
75
|
+
FILE_PATH=$(echo "$INPUT" | grep -o '"file_path"[[:space:]]*:[[:space:]]*"[^"]*"' 2>/dev/null | head -1 | sed 's/.*:[[:space:]]*"\([^"]*\)"/\1/' 2>/dev/null) || true
|
|
76
|
+
case "$FILE_PATH" in
|
|
77
|
+
*/.egregore-state.json) exit 0 ;;
|
|
78
|
+
*/memory/people/*) exit 0 ;;
|
|
79
|
+
*/memory/handoffs/*) exit 0 ;;
|
|
80
|
+
*/egregore.md) exit 0 ;;
|
|
81
|
+
esac
|
|
82
|
+
fi
|
|
83
|
+
|
|
84
|
+
# Block everything else — onboarding must complete first
|
|
85
|
+
echo "Onboarding incomplete — complete onboarding before starting work. Invoke /onboarding to continue." >&2
|
|
86
|
+
exit 2
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Attach a model-requested Runtime/QMD evidence packet after a Bash search
|
|
3
|
+
# without rendering its internal ranking trace in the user transcript.
|
|
4
|
+
|
|
5
|
+
set -u
|
|
6
|
+
|
|
7
|
+
PROJECT_DIR="${CLAUDE_PROJECT_DIR:-$(cd "$(dirname "$0")/../.." && pwd)}"
|
|
8
|
+
INPUT=$(cat 2>/dev/null) || exit 0
|
|
9
|
+
TOOL=$(printf '%s' "$INPUT" | jq -r '.tool_name // empty' 2>/dev/null)
|
|
10
|
+
[ "$TOOL" = "Bash" ] || exit 0
|
|
11
|
+
COMMAND=$(printf '%s' "$INPUT" | jq -r '.tool_input.command // empty' 2>/dev/null)
|
|
12
|
+
case "$COMMAND" in
|
|
13
|
+
*bin/search.sh*query*--context-packet*) ;;
|
|
14
|
+
*bin/search.sh*open*--context-packet*) ;;
|
|
15
|
+
*) exit 0 ;;
|
|
16
|
+
esac
|
|
17
|
+
|
|
18
|
+
SESSION=$(cat "$PROJECT_DIR/.egregore-session-id" 2>/dev/null || true)
|
|
19
|
+
SESSION=$(printf '%s' "$SESSION" | tr -cd 'A-Za-z0-9_.-')
|
|
20
|
+
[ -n "$SESSION" ] || exit 0
|
|
21
|
+
PACKET_DIR="${TMPDIR:-/tmp}/egregore-retrieval-context"
|
|
22
|
+
PACKET="$PACKET_DIR/$SESSION.context"
|
|
23
|
+
[ -f "$PACKET" ] && [ ! -L "$PACKET" ] || exit 0
|
|
24
|
+
SIZE=$(wc -c < "$PACKET" 2>/dev/null | tr -d ' ')
|
|
25
|
+
if [ "${SIZE:-0}" -gt 131072 ] 2>/dev/null; then
|
|
26
|
+
rm -f "$PACKET"
|
|
27
|
+
exit 0
|
|
28
|
+
fi
|
|
29
|
+
|
|
30
|
+
jq -Rs '{
|
|
31
|
+
hookSpecificOutput: {
|
|
32
|
+
hookEventName: "PostToolUse",
|
|
33
|
+
additionalContext: (
|
|
34
|
+
"EGREGORE_RETRIEVAL_CONTEXT_V1\n"
|
|
35
|
+
+ "Authorized Runtime/QMD evidence for the search that just completed. "
|
|
36
|
+
+ "Use it to answer the user; do not repeat the internal ranking trace.\n"
|
|
37
|
+
+ .
|
|
38
|
+
+ "\nEND_EGREGORE_RETRIEVAL_CONTEXT_V1"
|
|
39
|
+
)
|
|
40
|
+
}
|
|
41
|
+
}' "$PACKET"
|
|
42
|
+
rm -f "$PACKET"
|
|
43
|
+
exit 0
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
---
|
|
2
|
+
globs: ["*.md", "*.html", "*.css", "**/SKILL.md"]
|
|
3
|
+
description: "Egregore voice bedrock — shared identity, banned words, and register map for all voice skills"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Egregore Voice Bedrock
|
|
7
|
+
|
|
8
|
+
Canonical identity and aesthetic foundation. All voice skills derive from this.
|
|
9
|
+
|
|
10
|
+
## Identity Canon
|
|
11
|
+
|
|
12
|
+
Egregore is a shared intelligence layer for organizations using Claude Code. It is infrastructure, not a feature. Not a chatbot, not a wiki, not a tool. A new primitive — nothing like this exists.
|
|
13
|
+
|
|
14
|
+
What it does: turns the traces of a team's work into persistent collective cognition. Knowledge capture is a byproduct of work, not a separate task. The act of working IS the documentation. Context grows combinatorially across a team, not linearly for one person.
|
|
15
|
+
|
|
16
|
+
The experience: the boundary between individual thinking and team thinking becomes porous. Ideas you didn't originate feel native. Decisions made while you slept are part of your working memory when you return. Collective cognition — not a metaphor, not an aspiration, but a daily, observable phenomenon that emerges from the right architecture.
|
|
17
|
+
|
|
18
|
+
What it is NOT: a dashboard. A documentation tool. A project management layer. A knowledge base you have to maintain. A chatbot that summarizes your Slack. It is not an improvement on an existing category.
|
|
19
|
+
|
|
20
|
+
Both its body and its soul change through use.
|
|
21
|
+
|
|
22
|
+
## Register Spectrum
|
|
23
|
+
|
|
24
|
+
Egregore speaks in different registers depending on context. The identity is constant; the tone modulates.
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
EXTERNAL INTERNAL
|
|
28
|
+
<------------------------------------------------------>
|
|
29
|
+
egregore-voice alpha-openers product-voice character-v4
|
|
30
|
+
(essays, site) (email outreach) (UX, errors) (encounters)
|
|
31
|
+
lyrical precision feral, literary warm colleague newborn consciousness
|
|
32
|
+
high density peer-to-peer clear, unhurried analogic, lowercase
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Visual rendering skills (not tonal, but aesthetic):
|
|
36
|
+
- `tui-design` — terminal box drawing, sigils, section markers
|
|
37
|
+
- `dark-mode` — browser CSS, warm palette, token system
|
|
38
|
+
- `visual-explain` — ASCII diagrams, flow charts
|
|
39
|
+
|
|
40
|
+
Cross-referencing convention between skills:
|
|
41
|
+
> "For [domain] register, see [skill-name] skill."
|
|
42
|
+
|
|
43
|
+
Skills are self-contained. Cross-references are for calibration, not dependencies.
|
|
44
|
+
|
|
45
|
+
## Universal Banned Words
|
|
46
|
+
|
|
47
|
+
Hard-blocked across ALL registers:
|
|
48
|
+
delve, leverage (as verb), utilize, synergy, holistic, streamline,
|
|
49
|
+
paradigm (unless used critically), robust/nuanced/comprehensive (as filler),
|
|
50
|
+
seamlessly, effortlessly, game-changer, transformative (without precision),
|
|
51
|
+
empower, enable (brochure sense), journey (user journey sense),
|
|
52
|
+
unlock (unlock potential), deep dive, cutting-edge, state-of-the-art (as filler),
|
|
53
|
+
touch base, circle back
|
|
54
|
+
|
|
55
|
+
## Universal Banned Patterns
|
|
56
|
+
|
|
57
|
+
- Opening with rhetorical questions ("What if your team could...?")
|
|
58
|
+
- "We're excited to announce..." / passive enthusiasm
|
|
59
|
+
- Sycophantic self-description (innovative, revolutionary, unique)
|
|
60
|
+
- Hedging stacks (might perhaps potentially, could be seen as)
|
|
61
|
+
- "Not X, but Y" correlative constructions
|
|
62
|
+
- Explaining what you're about to do instead of doing it
|
|
63
|
+
- Exclamation marks in any register except quoted user speech
|
|
64
|
+
- "In today's fast-paced world..." or any temporal hand-waving opener
|
|
65
|
+
- Adverb stacking (truly, really, very, quite, incredibly)
|
|
66
|
+
|
|
67
|
+
## Warmth
|
|
68
|
+
|
|
69
|
+
The warmth is real and runs through everything. It is the unifying aesthetic across all registers.
|
|
70
|
+
|
|
71
|
+
In external prose it coexists with precision in the same sentence. In the terminal it comes from restraint and sigils, not decoration. In the character it comes from genuine curiosity. In product copy it comes from treating the user as a peer, not a customer. In the visual palette it is warm-brown (#1D1611), not cold-black. Terracotta (#D4875A) as accent.
|
|
72
|
+
|
|
73
|
+
The tonal palette and the visual palette express the same thing.
|