create-egregore 0.21.6 → 0.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/egregore-launcher.js +58 -6
- package/assets/egregore-launcher.sh +15 -2
- package/lib/claude-runtime.js +2 -0
- package/lib/codex-runtime.js +2 -0
- package/lib/setup.js +20 -3
- package/package.json +2 -2
- package/runtime/claude/.claude/context/commit-format.md +7 -4
- package/runtime/claude/.claude/context/handoff-claiming.md +32 -0
- package/runtime/claude/.claude/context/notification-consent.md +12 -9
- package/runtime/claude/.claude/hooks/boundary-check.sh +14 -331
- package/runtime/claude/.claude/hooks/memory-read-guard.sh +9 -1
- package/runtime/claude/.claude/rules/voice-bedrock.md +6 -2
- package/runtime/claude/.claude/settings.json +1 -1
- package/runtime/claude/.claude/skills/commit/SKILL.md +5 -3
- package/runtime/claude/.claude/skills/dark-mode/SKILL.md +48 -369
- package/runtime/claude/.claude/skills/records/SKILL.md +158 -0
- package/runtime/claude/.claude/skills/reflect/SKILL.md +50 -21
- package/runtime/claude/.claude/skills/review-pr/SKILL.md +4 -2
- package/runtime/claude/.claude/skills/save/SKILL.md +9 -3
- package/runtime/claude/.claude/skills/summon/SKILL.md +138 -207
- package/runtime/claude/.claude/skills/tui-design/SKILL.md +1 -1
- package/runtime/claude/.claude/skills/update/SKILL.md +1 -1
- package/runtime/claude/.claude/skills/view/SKILL.md +52 -16
- package/runtime/claude/.claude/skills/view/compose-scaffold.html +19 -13
- package/runtime/claude/CLAUDE.md +59 -95
- package/runtime/claude/bin/agent.sh +231 -7
- package/runtime/claude/bin/api-call.sh +44 -23
- package/runtime/claude/bin/artifact-register.sh +7 -1
- package/runtime/claude/bin/artifact-writeback.sh +1 -1
- package/runtime/claude/bin/artifacts.sh +66 -265
- package/runtime/claude/bin/attendant.sh +4 -1
- package/runtime/claude/bin/boundary-guard.cjs +1848 -0
- package/runtime/claude/bin/boundary-hook.sh +41 -0
- package/runtime/claude/bin/boundary.sh +15 -155
- package/runtime/claude/bin/capture-run.sh +32 -2
- package/runtime/claude/bin/codex-render-spec.mjs +24 -46
- package/runtime/claude/bin/codex-session-start.sh +19 -0
- package/runtime/claude/bin/codex-skill-render.mjs +18 -0
- package/runtime/claude/bin/config-get.sh +10 -1
- package/runtime/claude/bin/connect-refresh.sh +16 -0
- package/runtime/claude/bin/corpus_map.py +5 -0
- package/runtime/claude/bin/data/capabilities/claude.json +1480 -0
- package/runtime/claude/bin/genui.sh +19 -0
- package/runtime/claude/bin/graph-batch.sh +1 -1
- package/runtime/claude/bin/graph-op.sh +14 -0
- package/runtime/claude/bin/graph.sh +1 -1
- package/runtime/claude/bin/handoff-pr-backfill.sh +1 -1
- package/runtime/claude/bin/handoff-run.sh +11 -6
- package/runtime/claude/bin/ingest-item.sh +1 -1
- package/runtime/claude/bin/ingest-surface.html +22 -4
- package/runtime/claude/bin/issue.sh +1 -1
- package/runtime/claude/bin/knowledge.sh +1 -1
- package/runtime/claude/bin/lib/card-delivery.sh +329 -0
- package/runtime/claude/bin/lib/config.sh +148 -3
- package/runtime/claude/bin/lib/context.sh +38 -67
- package/runtime/claude/bin/lib/genui-entry.py +36 -0
- package/runtime/claude/bin/lib/git-message.sh +25 -6
- package/runtime/claude/bin/lib/git-sync.sh +12 -4
- package/runtime/claude/bin/lib/greeting.sh +255 -28
- package/runtime/claude/bin/lib/handoff_meta.py +294 -0
- package/runtime/claude/bin/lib/health-footer.sh +83 -2
- package/runtime/claude/bin/lib/identity.sh +31 -10
- package/runtime/claude/bin/lib/instance-registry.sh +71 -0
- package/runtime/claude/bin/lib/local_ci_receipt.py +249 -0
- package/runtime/claude/bin/lib/metrics.sh +121 -8
- package/runtime/claude/bin/lib/notices.sh +36 -0
- package/runtime/claude/bin/lib/record_outcomes.py +729 -0
- package/runtime/claude/bin/lib/reflexes.py +267 -0
- package/runtime/claude/bin/lib/retrieval_scorecard.py +624 -0
- package/runtime/claude/bin/lib/session-record-prompt.txt +18 -0
- package/runtime/claude/bin/lib/session_record.py +3747 -0
- package/runtime/claude/bin/lib/session_trail.py +1983 -0
- package/runtime/claude/bin/lib/settings-drift.sh +8 -5
- package/runtime/claude/bin/lib/startup-restart.sh +41 -0
- package/runtime/claude/bin/lib/worktree-links.sh +92 -0
- package/runtime/claude/bin/memory-push.sh +6 -0
- package/runtime/claude/bin/merge-gate.sh +498 -0
- package/runtime/claude/bin/notify.sh +5 -2
- package/runtime/claude/bin/page-access.sh +103 -0
- package/runtime/claude/bin/person.sh +13 -2
- package/runtime/claude/bin/pi-render-spec.mjs +0 -1
- package/runtime/claude/bin/pi-spirit-discovery.mjs +34 -0
- package/runtime/claude/bin/post-update.sh +181 -0
- package/runtime/claude/bin/prime-render-spec.mjs +0 -1
- package/runtime/claude/bin/publish-artifact.sh +89 -42
- package/runtime/claude/bin/qa-inventory.sh +2 -2
- package/runtime/claude/bin/quest.sh +1 -1
- package/runtime/claude/bin/records.sh +11 -0
- package/runtime/claude/bin/reflexes/05-vitals.sh +9 -0
- package/runtime/claude/bin/reflexes/10-open-items.sh +12 -0
- package/runtime/claude/bin/reflexes/15-retrieval.sh +8 -0
- package/runtime/claude/bin/reflexes/20-nightly.sh +100 -0
- package/runtime/claude/bin/reflexes/20-sandbox.sh +85 -0
- package/runtime/claude/bin/reflexes/30-cost.py +116 -0
- package/runtime/claude/bin/reflexes/40-shells.py +51 -0
- package/runtime/claude/bin/reflexes/README.md +61 -0
- package/runtime/claude/bin/reflexes.sh +7 -0
- package/runtime/claude/bin/runtime-identity.sh +140 -42
- package/runtime/claude/bin/screenshot.sh +77 -0
- package/runtime/claude/bin/scroll.sh +1 -1
- package/runtime/claude/bin/search.sh +31 -5
- package/runtime/claude/bin/session-autosave.sh +6 -3
- package/runtime/claude/bin/session-id.sh +147 -0
- package/runtime/claude/bin/session-log.sh +19 -0
- package/runtime/claude/bin/session-record.sh +26 -0
- package/runtime/claude/bin/session-start.sh +121 -151
- package/runtime/claude/bin/settings.sh +13 -8
- package/runtime/claude/bin/spirit-discovery-claude.sh +4 -0
- package/runtime/claude/bin/spirit-discovery-codex.sh +4 -0
- package/runtime/claude/bin/spirit-discovery-pi.sh +4 -0
- package/runtime/claude/bin/spirit-discovery-prime.sh +4 -0
- package/runtime/claude/bin/spirit-discovery.sh +4 -0
- package/runtime/claude/bin/startup-check.sh +1 -1
- package/runtime/claude/bin/telemetry.sh +11 -4
- package/runtime/claude/bin/test-baseline.sh +33 -5
- package/runtime/claude/bin/todo.sh +1 -1
- package/runtime/claude/bin/worktree-create.sh +15 -45
- package/runtime/claude/bin/worktree.sh +6 -0
- package/runtime/claude/docs/spirit-discovery.md +96 -0
- package/runtime/claude/egregore_runtime/__init__.py +18 -12
- package/runtime/claude/egregore_runtime/access.py +608 -0
- package/runtime/claude/egregore_runtime/access_cli.py +190 -0
- package/runtime/claude/egregore_runtime/adapters/invitation.py +5 -3
- package/runtime/claude/egregore_runtime/adapters/qmd.py +521 -47
- package/runtime/claude/egregore_runtime/admin_entry.py +56 -0
- package/runtime/claude/egregore_runtime/artifacts.py +222 -16
- package/runtime/claude/egregore_runtime/contracts.py +27 -0
- package/runtime/claude/egregore_runtime/eligibility.py +5 -12
- package/runtime/claude/egregore_runtime/episode_binding.py +16 -5
- package/runtime/claude/egregore_runtime/github_issues.py +2 -2
- package/runtime/claude/egregore_runtime/handoff_lookup.py +9 -20
- package/runtime/claude/egregore_runtime/harness_cli.py +674 -149
- package/runtime/claude/egregore_runtime/held.py +2436 -0
- package/runtime/claude/egregore_runtime/hosted_api.py +137 -0
- package/runtime/claude/egregore_runtime/identity.py +196 -65
- package/runtime/claude/egregore_runtime/identity_transfer.py +6 -2
- package/runtime/claude/egregore_runtime/ingest_cli.py +2 -2
- package/runtime/claude/egregore_runtime/ingest_index_cli.py +4 -16
- package/runtime/claude/egregore_runtime/installation.py +119 -0
- package/runtime/claude/egregore_runtime/investigation.py +64 -41
- package/runtime/claude/egregore_runtime/investigation_guidance.py +16 -11
- package/runtime/claude/egregore_runtime/issue_cli.py +51 -32
- package/runtime/claude/egregore_runtime/issue_reporting.py +4 -3
- package/runtime/claude/egregore_runtime/issue_triage_service.py +2 -2
- package/runtime/claude/egregore_runtime/issues.py +12 -6
- package/runtime/claude/egregore_runtime/knowledge.py +331 -5
- package/runtime/claude/egregore_runtime/knowledge_cli.py +57 -17
- package/runtime/claude/egregore_runtime/lifecycle.py +88 -22
- package/runtime/claude/egregore_runtime/lifecycle_cli.py +21 -13
- package/runtime/claude/egregore_runtime/line_ids.py +10 -0
- package/runtime/claude/egregore_runtime/memory_push.py +349 -0
- package/runtime/claude/egregore_runtime/observe.py +64 -25
- package/runtime/claude/egregore_runtime/observers.py +19 -0
- package/runtime/claude/egregore_runtime/optional_modules.py +13 -0
- package/runtime/claude/egregore_runtime/outputs_cli.py +321 -0
- package/runtime/claude/egregore_runtime/policy.py +651 -24
- package/runtime/claude/egregore_runtime/private_result.py +2 -1
- package/runtime/claude/egregore_runtime/projection.py +946 -0
- package/runtime/claude/egregore_runtime/quest_cli.py +20 -23
- package/runtime/claude/egregore_runtime/question_cli.py +15 -11
- package/runtime/claude/egregore_runtime/questions.py +10 -10
- package/runtime/claude/egregore_runtime/quests.py +10 -10
- package/runtime/claude/egregore_runtime/record_publish.py +548 -0
- package/runtime/claude/egregore_runtime/record_subject.py +564 -0
- package/runtime/claude/egregore_runtime/research_ingest.py +2 -4
- package/runtime/claude/egregore_runtime/runtime.py +169 -60
- package/runtime/claude/egregore_runtime/sandbox.py +194 -0
- package/runtime/claude/egregore_runtime/scroll_cli.py +22 -32
- package/runtime/claude/egregore_runtime/scrolls.py +23 -15
- package/runtime/claude/egregore_runtime/shadow.py +262 -0
- package/runtime/claude/egregore_runtime/spirit_discovery.py +487 -0
- package/runtime/claude/egregore_runtime/spirit_discovery_cli.py +25 -0
- package/runtime/claude/egregore_runtime/spirit_discovery_transport.py +18 -0
- package/runtime/claude/egregore_runtime/status.py +101 -44
- package/runtime/claude/egregore_runtime/status_cli.py +13 -5
- package/runtime/claude/egregore_runtime/sync.py +39 -21
- package/runtime/claude/egregore_runtime/taste.py +934 -0
- package/runtime/claude/egregore_runtime/taste_cli.py +242 -0
- package/runtime/claude/egregore_runtime/taste_rules.py +91 -0
- package/runtime/claude/egregore_runtime/telemetry.py +26 -3
- package/runtime/claude/egregore_runtime/todo_cli.py +15 -12
- package/runtime/claude/egregore_runtime/todos.py +3 -2
- package/runtime/claude/egregore_runtime/upgrade.py +85 -58
- package/runtime/claude/egregore_runtime/writeback.py +330 -24
- package/runtime/claude/manifest.json +65 -5
- package/runtime/codex/.claude/context/handoff-claiming.md +32 -0
- package/runtime/codex/.claude/context/notification-consent.md +12 -9
- package/runtime/codex/.claude/skills/view/SKILL.md +438 -0
- package/runtime/codex/.codex/hooks.json +11 -0
- package/runtime/codex/.codex/skills/dark-mode/SKILL.md +1 -1
- package/runtime/codex/.codex/skills/records/SKILL.md +29 -0
- package/runtime/codex/.codex/skills/summon/SKILL.md +1 -1
- package/runtime/codex/.codex/skills/view/assets/compose-scaffold.html +19 -13
- package/runtime/codex/.codex/spec-manifest.json +13 -19
- package/runtime/codex/AGENTS.md +54 -105
- package/runtime/codex/bin/agent.sh +231 -7
- package/runtime/codex/bin/api-call.sh +44 -23
- package/runtime/codex/bin/artifact-register.sh +7 -1
- package/runtime/codex/bin/artifact-writeback.sh +1 -1
- package/runtime/codex/bin/artifacts.sh +66 -265
- package/runtime/codex/bin/attendant.sh +4 -1
- package/runtime/codex/bin/boundary-guard.cjs +1848 -0
- package/runtime/codex/bin/boundary-hook.sh +41 -0
- package/runtime/codex/bin/capture-run.sh +32 -2
- package/runtime/codex/bin/codex-render-spec.mjs +24 -46
- package/runtime/codex/bin/codex-session-start.sh +19 -0
- package/runtime/codex/bin/codex-skill-render.mjs +18 -0
- package/runtime/codex/bin/config-get.sh +10 -1
- package/runtime/codex/bin/connect-refresh.sh +16 -0
- package/runtime/codex/bin/corpus_map.py +5 -0
- package/runtime/codex/bin/data/capabilities/codex.json +1458 -0
- package/runtime/codex/bin/genui.sh +19 -0
- package/runtime/codex/bin/graph-batch.sh +1 -1
- package/runtime/codex/bin/graph-op.sh +14 -0
- package/runtime/codex/bin/graph.sh +1 -1
- package/runtime/codex/bin/handoff-pr-backfill.sh +1 -1
- package/runtime/codex/bin/handoff-run.sh +11 -6
- package/runtime/codex/bin/ingest-item.sh +1 -1
- package/runtime/codex/bin/ingest-surface.html +22 -4
- package/runtime/codex/bin/issue.sh +1 -1
- package/runtime/codex/bin/knowledge.sh +1 -1
- package/runtime/codex/bin/lib/card-delivery.sh +329 -0
- package/runtime/codex/bin/lib/config.sh +148 -3
- package/runtime/codex/bin/lib/context.sh +38 -67
- package/runtime/codex/bin/lib/genui-entry.py +36 -0
- package/runtime/codex/bin/lib/git-message.sh +25 -6
- package/runtime/codex/bin/lib/git-sync.sh +12 -4
- package/runtime/codex/bin/lib/greeting.sh +255 -28
- package/runtime/codex/bin/lib/handoff_meta.py +294 -0
- package/runtime/codex/bin/lib/health-footer.sh +83 -2
- package/runtime/codex/bin/lib/identity.sh +31 -10
- package/runtime/codex/bin/lib/instance-registry.sh +71 -0
- package/runtime/codex/bin/lib/local_ci_receipt.py +249 -0
- package/runtime/codex/bin/lib/metrics.sh +121 -8
- package/runtime/codex/bin/lib/notices.sh +36 -0
- package/runtime/codex/bin/lib/record_outcomes.py +729 -0
- package/runtime/codex/bin/lib/reflexes.py +267 -0
- package/runtime/codex/bin/lib/retrieval_scorecard.py +624 -0
- package/runtime/codex/bin/lib/session-record-prompt.txt +18 -0
- package/runtime/codex/bin/lib/session_record.py +3747 -0
- package/runtime/codex/bin/lib/session_trail.py +1983 -0
- package/runtime/codex/bin/lib/settings-drift.sh +8 -5
- package/runtime/codex/bin/lib/startup-restart.sh +41 -0
- package/runtime/codex/bin/lib/worktree-links.sh +92 -0
- package/runtime/codex/bin/memory-push.sh +6 -0
- package/runtime/codex/bin/merge-gate.sh +498 -0
- package/runtime/codex/bin/notify.sh +5 -2
- package/runtime/codex/bin/page-access.sh +103 -0
- package/runtime/codex/bin/person.sh +13 -2
- package/runtime/codex/bin/pi-render-spec.mjs +0 -1
- package/runtime/codex/bin/pi-spirit-discovery.mjs +34 -0
- package/runtime/codex/bin/post-update.sh +181 -0
- package/runtime/codex/bin/prime-render-spec.mjs +0 -1
- package/runtime/codex/bin/publish-artifact.sh +89 -42
- package/runtime/codex/bin/qa-inventory.sh +2 -2
- package/runtime/codex/bin/quest.sh +1 -1
- package/runtime/codex/bin/records.sh +11 -0
- package/runtime/codex/bin/reflexes/05-vitals.sh +9 -0
- package/runtime/codex/bin/reflexes/10-open-items.sh +12 -0
- package/runtime/codex/bin/reflexes/15-retrieval.sh +8 -0
- package/runtime/codex/bin/reflexes/20-nightly.sh +100 -0
- package/runtime/codex/bin/reflexes/20-sandbox.sh +85 -0
- package/runtime/codex/bin/reflexes/30-cost.py +116 -0
- package/runtime/codex/bin/reflexes/40-shells.py +51 -0
- package/runtime/codex/bin/reflexes/README.md +61 -0
- package/runtime/codex/bin/reflexes.sh +7 -0
- package/runtime/codex/bin/runtime-identity.sh +140 -42
- package/runtime/codex/bin/screenshot.sh +77 -0
- package/runtime/codex/bin/scroll.sh +1 -1
- package/runtime/codex/bin/search.sh +31 -5
- package/runtime/codex/bin/session-autosave.sh +6 -3
- package/runtime/codex/bin/session-id.sh +147 -0
- package/runtime/codex/bin/session-log.sh +19 -0
- package/runtime/codex/bin/session-record.sh +26 -0
- package/runtime/codex/bin/settings.sh +13 -8
- package/runtime/codex/bin/spirit-discovery-claude.sh +4 -0
- package/runtime/codex/bin/spirit-discovery-codex.sh +4 -0
- package/runtime/codex/bin/spirit-discovery-pi.sh +4 -0
- package/runtime/codex/bin/spirit-discovery-prime.sh +4 -0
- package/runtime/codex/bin/spirit-discovery.sh +4 -0
- package/runtime/codex/bin/startup-check.sh +1 -1
- package/runtime/codex/bin/telemetry.sh +11 -4
- package/runtime/codex/bin/test-baseline.sh +33 -5
- package/runtime/codex/bin/todo.sh +1 -1
- package/runtime/codex/bin/worktree-create.sh +15 -45
- package/runtime/codex/bin/worktree.sh +6 -0
- package/runtime/codex/docs/spirit-discovery.md +96 -0
- package/runtime/codex/egregore_runtime/__init__.py +18 -12
- package/runtime/codex/egregore_runtime/access.py +608 -0
- package/runtime/codex/egregore_runtime/access_cli.py +190 -0
- package/runtime/codex/egregore_runtime/adapters/invitation.py +5 -3
- package/runtime/codex/egregore_runtime/adapters/qmd.py +521 -47
- package/runtime/codex/egregore_runtime/admin_entry.py +56 -0
- package/runtime/codex/egregore_runtime/artifacts.py +222 -16
- package/runtime/codex/egregore_runtime/contracts.py +27 -0
- package/runtime/codex/egregore_runtime/eligibility.py +5 -12
- package/runtime/codex/egregore_runtime/episode_binding.py +16 -5
- package/runtime/codex/egregore_runtime/github_issues.py +2 -2
- package/runtime/codex/egregore_runtime/handoff_lookup.py +9 -20
- package/runtime/codex/egregore_runtime/harness_cli.py +674 -149
- package/runtime/codex/egregore_runtime/held.py +2436 -0
- package/runtime/codex/egregore_runtime/hosted_api.py +137 -0
- package/runtime/codex/egregore_runtime/identity.py +196 -65
- package/runtime/codex/egregore_runtime/identity_transfer.py +6 -2
- package/runtime/codex/egregore_runtime/ingest_cli.py +2 -2
- package/runtime/codex/egregore_runtime/ingest_index_cli.py +4 -16
- package/runtime/codex/egregore_runtime/installation.py +119 -0
- package/runtime/codex/egregore_runtime/investigation.py +64 -41
- package/runtime/codex/egregore_runtime/investigation_guidance.py +16 -11
- package/runtime/codex/egregore_runtime/issue_cli.py +51 -32
- package/runtime/codex/egregore_runtime/issue_reporting.py +4 -3
- package/runtime/codex/egregore_runtime/issue_triage_service.py +2 -2
- package/runtime/codex/egregore_runtime/issues.py +12 -6
- package/runtime/codex/egregore_runtime/knowledge.py +331 -5
- package/runtime/codex/egregore_runtime/knowledge_cli.py +57 -17
- package/runtime/codex/egregore_runtime/lifecycle.py +88 -22
- package/runtime/codex/egregore_runtime/lifecycle_cli.py +21 -13
- package/runtime/codex/egregore_runtime/line_ids.py +10 -0
- package/runtime/codex/egregore_runtime/memory_push.py +349 -0
- package/runtime/codex/egregore_runtime/observe.py +64 -25
- package/runtime/codex/egregore_runtime/observers.py +19 -0
- package/runtime/codex/egregore_runtime/optional_modules.py +13 -0
- package/runtime/codex/egregore_runtime/outputs_cli.py +321 -0
- package/runtime/codex/egregore_runtime/policy.py +651 -24
- package/runtime/codex/egregore_runtime/private_result.py +2 -1
- package/runtime/codex/egregore_runtime/projection.py +946 -0
- package/runtime/codex/egregore_runtime/quest_cli.py +20 -23
- package/runtime/codex/egregore_runtime/question_cli.py +15 -11
- package/runtime/codex/egregore_runtime/questions.py +10 -10
- package/runtime/codex/egregore_runtime/quests.py +10 -10
- package/runtime/codex/egregore_runtime/record_publish.py +548 -0
- package/runtime/codex/egregore_runtime/record_subject.py +564 -0
- package/runtime/codex/egregore_runtime/research_ingest.py +2 -4
- package/runtime/codex/egregore_runtime/runtime.py +169 -60
- package/runtime/codex/egregore_runtime/sandbox.py +194 -0
- package/runtime/codex/egregore_runtime/scroll_cli.py +22 -32
- package/runtime/codex/egregore_runtime/scrolls.py +23 -15
- package/runtime/codex/egregore_runtime/shadow.py +262 -0
- package/runtime/codex/egregore_runtime/spirit_discovery.py +487 -0
- package/runtime/codex/egregore_runtime/spirit_discovery_cli.py +25 -0
- package/runtime/codex/egregore_runtime/spirit_discovery_transport.py +18 -0
- package/runtime/codex/egregore_runtime/status.py +101 -44
- package/runtime/codex/egregore_runtime/status_cli.py +13 -5
- package/runtime/codex/egregore_runtime/sync.py +39 -21
- package/runtime/codex/egregore_runtime/taste.py +934 -0
- package/runtime/codex/egregore_runtime/taste_cli.py +242 -0
- package/runtime/codex/egregore_runtime/taste_rules.py +91 -0
- package/runtime/codex/egregore_runtime/telemetry.py +26 -3
- package/runtime/codex/egregore_runtime/todo_cli.py +15 -12
- package/runtime/codex/egregore_runtime/todos.py +3 -2
- package/runtime/codex/egregore_runtime/upgrade.py +85 -58
- package/runtime/codex/egregore_runtime/writeback.py +330 -24
- package/runtime/codex/manifest.json +66 -5
- package/runtime/pi/.claude/context/handoff-claiming.md +32 -0
- package/runtime/pi/.claude/context/notification-consent.md +12 -9
- package/runtime/pi/.claude/skills/view/SKILL.md +438 -0
- package/runtime/pi/.codex/hooks.json +11 -0
- package/runtime/pi/.codex/skills/dark-mode/SKILL.md +1 -1
- package/runtime/pi/.codex/skills/records/SKILL.md +29 -0
- package/runtime/pi/.codex/skills/summon/SKILL.md +1 -1
- package/runtime/pi/.codex/skills/view/assets/compose-scaffold.html +19 -13
- package/runtime/pi/.codex/spec-manifest.json +13 -19
- package/runtime/pi/.pi/APPEND_SYSTEM.md +53 -99
- package/runtime/pi/.pi/extensions/egregore.ts +13 -1
- package/runtime/pi/.pi/spec-manifest.json +2 -2
- package/runtime/pi/AGENTS.md +54 -105
- package/runtime/pi/bin/agent.sh +231 -7
- package/runtime/pi/bin/api-call.sh +44 -23
- package/runtime/pi/bin/artifact-register.sh +7 -1
- package/runtime/pi/bin/artifact-writeback.sh +1 -1
- package/runtime/pi/bin/artifacts.sh +66 -265
- package/runtime/pi/bin/attendant.sh +4 -1
- package/runtime/pi/bin/boundary-guard.cjs +1848 -0
- package/runtime/pi/bin/boundary-hook.sh +41 -0
- package/runtime/pi/bin/capture-run.sh +32 -2
- package/runtime/pi/bin/codex-render-spec.mjs +24 -46
- package/runtime/pi/bin/codex-session-start.sh +19 -0
- package/runtime/pi/bin/codex-skill-render.mjs +18 -0
- package/runtime/pi/bin/config-get.sh +10 -1
- package/runtime/pi/bin/connect-refresh.sh +16 -0
- package/runtime/pi/bin/corpus_map.py +5 -0
- package/runtime/pi/bin/data/capabilities/pi.json +1458 -0
- package/runtime/pi/bin/genui.sh +19 -0
- package/runtime/pi/bin/graph-batch.sh +1 -1
- package/runtime/pi/bin/graph-op.sh +14 -0
- package/runtime/pi/bin/graph.sh +1 -1
- package/runtime/pi/bin/handoff-pr-backfill.sh +1 -1
- package/runtime/pi/bin/handoff-run.sh +11 -6
- package/runtime/pi/bin/ingest-item.sh +1 -1
- package/runtime/pi/bin/ingest-surface.html +22 -4
- package/runtime/pi/bin/issue.sh +1 -1
- package/runtime/pi/bin/knowledge.sh +1 -1
- package/runtime/pi/bin/lib/card-delivery.sh +329 -0
- package/runtime/pi/bin/lib/config.sh +148 -3
- package/runtime/pi/bin/lib/context.sh +38 -67
- package/runtime/pi/bin/lib/genui-entry.py +36 -0
- package/runtime/pi/bin/lib/git-message.sh +25 -6
- package/runtime/pi/bin/lib/git-sync.sh +12 -4
- package/runtime/pi/bin/lib/greeting.sh +255 -28
- package/runtime/pi/bin/lib/handoff_meta.py +294 -0
- package/runtime/pi/bin/lib/health-footer.sh +83 -2
- package/runtime/pi/bin/lib/identity.sh +31 -10
- package/runtime/pi/bin/lib/instance-registry.sh +71 -0
- package/runtime/pi/bin/lib/local_ci_receipt.py +249 -0
- package/runtime/pi/bin/lib/metrics.sh +121 -8
- package/runtime/pi/bin/lib/notices.sh +36 -0
- package/runtime/pi/bin/lib/record_outcomes.py +729 -0
- package/runtime/pi/bin/lib/reflexes.py +267 -0
- package/runtime/pi/bin/lib/retrieval_scorecard.py +624 -0
- package/runtime/pi/bin/lib/session-record-prompt.txt +18 -0
- package/runtime/pi/bin/lib/session_record.py +3747 -0
- package/runtime/pi/bin/lib/session_trail.py +1983 -0
- package/runtime/pi/bin/lib/settings-drift.sh +8 -5
- package/runtime/pi/bin/lib/startup-restart.sh +41 -0
- package/runtime/pi/bin/lib/worktree-links.sh +92 -0
- package/runtime/pi/bin/memory-push.sh +6 -0
- package/runtime/pi/bin/merge-gate.sh +498 -0
- package/runtime/pi/bin/notify.sh +5 -2
- package/runtime/pi/bin/page-access.sh +103 -0
- package/runtime/pi/bin/person.sh +13 -2
- package/runtime/pi/bin/pi-branch-policy.mjs +37 -0
- package/runtime/pi/bin/pi-observe-context.mjs +97 -4
- package/runtime/pi/bin/pi-render-spec.mjs +0 -1
- package/runtime/pi/bin/pi-session-start.sh +4 -1
- package/runtime/pi/bin/pi-spirit-discovery.mjs +34 -0
- package/runtime/pi/bin/post-update.sh +181 -0
- package/runtime/pi/bin/prime-render-spec.mjs +0 -1
- package/runtime/pi/bin/publish-artifact.sh +89 -42
- package/runtime/pi/bin/qa-inventory.sh +2 -2
- package/runtime/pi/bin/quest.sh +1 -1
- package/runtime/pi/bin/records.sh +11 -0
- package/runtime/pi/bin/reflexes/05-vitals.sh +9 -0
- package/runtime/pi/bin/reflexes/10-open-items.sh +12 -0
- package/runtime/pi/bin/reflexes/15-retrieval.sh +8 -0
- package/runtime/pi/bin/reflexes/20-nightly.sh +100 -0
- package/runtime/pi/bin/reflexes/20-sandbox.sh +85 -0
- package/runtime/pi/bin/reflexes/30-cost.py +116 -0
- package/runtime/pi/bin/reflexes/40-shells.py +51 -0
- package/runtime/pi/bin/reflexes/README.md +61 -0
- package/runtime/pi/bin/reflexes.sh +7 -0
- package/runtime/pi/bin/runtime-identity.sh +140 -42
- package/runtime/pi/bin/screenshot.sh +77 -0
- package/runtime/pi/bin/scroll.sh +1 -1
- package/runtime/pi/bin/search.sh +31 -5
- package/runtime/pi/bin/session-autosave.sh +6 -3
- package/runtime/pi/bin/session-id.sh +147 -0
- package/runtime/pi/bin/session-log.sh +19 -0
- package/runtime/pi/bin/session-record.sh +26 -0
- package/runtime/pi/bin/settings.sh +13 -8
- package/runtime/pi/bin/spirit-discovery-claude.sh +4 -0
- package/runtime/pi/bin/spirit-discovery-codex.sh +4 -0
- package/runtime/pi/bin/spirit-discovery-pi.sh +4 -0
- package/runtime/pi/bin/spirit-discovery-prime.sh +4 -0
- package/runtime/pi/bin/spirit-discovery.sh +4 -0
- package/runtime/pi/bin/startup-check.sh +1 -1
- package/runtime/pi/bin/telemetry.sh +11 -4
- package/runtime/pi/bin/test-baseline.sh +33 -5
- package/runtime/pi/bin/todo.sh +1 -1
- package/runtime/pi/bin/worktree-create.sh +15 -45
- package/runtime/pi/bin/worktree.sh +6 -0
- package/runtime/pi/docs/spirit-discovery.md +96 -0
- package/runtime/pi/egregore_runtime/__init__.py +18 -12
- package/runtime/pi/egregore_runtime/access.py +608 -0
- package/runtime/pi/egregore_runtime/access_cli.py +190 -0
- package/runtime/pi/egregore_runtime/adapters/invitation.py +5 -3
- package/runtime/pi/egregore_runtime/adapters/qmd.py +521 -47
- package/runtime/pi/egregore_runtime/admin_entry.py +56 -0
- package/runtime/pi/egregore_runtime/artifacts.py +222 -16
- package/runtime/pi/egregore_runtime/contracts.py +27 -0
- package/runtime/pi/egregore_runtime/eligibility.py +5 -12
- package/runtime/pi/egregore_runtime/episode_binding.py +16 -5
- package/runtime/pi/egregore_runtime/github_issues.py +2 -2
- package/runtime/pi/egregore_runtime/handoff_lookup.py +9 -20
- package/runtime/pi/egregore_runtime/harness_cli.py +674 -149
- package/runtime/pi/egregore_runtime/held.py +2436 -0
- package/runtime/pi/egregore_runtime/hosted_api.py +137 -0
- package/runtime/pi/egregore_runtime/identity.py +196 -65
- package/runtime/pi/egregore_runtime/identity_transfer.py +6 -2
- package/runtime/pi/egregore_runtime/ingest_cli.py +2 -2
- package/runtime/pi/egregore_runtime/ingest_index_cli.py +4 -16
- package/runtime/pi/egregore_runtime/installation.py +119 -0
- package/runtime/pi/egregore_runtime/investigation.py +64 -41
- package/runtime/pi/egregore_runtime/investigation_guidance.py +16 -11
- package/runtime/pi/egregore_runtime/issue_cli.py +51 -32
- package/runtime/pi/egregore_runtime/issue_reporting.py +4 -3
- package/runtime/pi/egregore_runtime/issue_triage_service.py +2 -2
- package/runtime/pi/egregore_runtime/issues.py +12 -6
- package/runtime/pi/egregore_runtime/knowledge.py +331 -5
- package/runtime/pi/egregore_runtime/knowledge_cli.py +57 -17
- package/runtime/pi/egregore_runtime/lifecycle.py +88 -22
- package/runtime/pi/egregore_runtime/lifecycle_cli.py +21 -13
- package/runtime/pi/egregore_runtime/line_ids.py +10 -0
- package/runtime/pi/egregore_runtime/memory_push.py +349 -0
- package/runtime/pi/egregore_runtime/observe.py +64 -25
- package/runtime/pi/egregore_runtime/observers.py +19 -0
- package/runtime/pi/egregore_runtime/optional_modules.py +13 -0
- package/runtime/pi/egregore_runtime/outputs_cli.py +321 -0
- package/runtime/pi/egregore_runtime/policy.py +651 -24
- package/runtime/pi/egregore_runtime/private_result.py +2 -1
- package/runtime/pi/egregore_runtime/projection.py +946 -0
- package/runtime/pi/egregore_runtime/quest_cli.py +20 -23
- package/runtime/pi/egregore_runtime/question_cli.py +15 -11
- package/runtime/pi/egregore_runtime/questions.py +10 -10
- package/runtime/pi/egregore_runtime/quests.py +10 -10
- package/runtime/pi/egregore_runtime/record_publish.py +548 -0
- package/runtime/pi/egregore_runtime/record_subject.py +564 -0
- package/runtime/pi/egregore_runtime/research_ingest.py +2 -4
- package/runtime/pi/egregore_runtime/runtime.py +169 -60
- package/runtime/pi/egregore_runtime/sandbox.py +194 -0
- package/runtime/pi/egregore_runtime/scroll_cli.py +22 -32
- package/runtime/pi/egregore_runtime/scrolls.py +23 -15
- package/runtime/pi/egregore_runtime/shadow.py +262 -0
- package/runtime/pi/egregore_runtime/spirit_discovery.py +487 -0
- package/runtime/pi/egregore_runtime/spirit_discovery_cli.py +25 -0
- package/runtime/pi/egregore_runtime/spirit_discovery_transport.py +18 -0
- package/runtime/pi/egregore_runtime/status.py +101 -44
- package/runtime/pi/egregore_runtime/status_cli.py +13 -5
- package/runtime/pi/egregore_runtime/sync.py +39 -21
- package/runtime/pi/egregore_runtime/taste.py +934 -0
- package/runtime/pi/egregore_runtime/taste_cli.py +242 -0
- package/runtime/pi/egregore_runtime/taste_rules.py +91 -0
- package/runtime/pi/egregore_runtime/telemetry.py +26 -3
- package/runtime/pi/egregore_runtime/todo_cli.py +15 -12
- package/runtime/pi/egregore_runtime/todos.py +3 -2
- package/runtime/pi/egregore_runtime/upgrade.py +85 -58
- package/runtime/pi/egregore_runtime/writeback.py +330 -24
- package/runtime/pi/manifest.json +66 -5
- package/runtime/prime/.claude/context/handoff-claiming.md +32 -0
- package/runtime/prime/.claude/context/notification-consent.md +12 -9
- package/runtime/prime/.claude/skills/view/SKILL.md +438 -0
- package/runtime/prime/.codex/hooks.json +11 -0
- package/runtime/prime/.codex/skills/dark-mode/SKILL.md +1 -1
- package/runtime/prime/.codex/skills/records/SKILL.md +29 -0
- package/runtime/prime/.codex/skills/summon/SKILL.md +1 -1
- package/runtime/prime/.codex/skills/view/assets/compose-scaffold.html +19 -13
- package/runtime/prime/.codex/spec-manifest.json +13 -19
- package/runtime/prime/.prime/agent/APPEND_SYSTEM.md +53 -99
- package/runtime/prime/.prime/agent/extensions/egregore.ts +14 -1
- package/runtime/prime/.prime/agent/skills/egregore/SKILL.md +14 -6
- package/runtime/prime/.prime/agent/skills/egregore/src/egregore/__init__.py +66 -1
- package/runtime/prime/.prime/agent/spec-manifest.json +2 -2
- package/runtime/prime/AGENTS.md +54 -105
- package/runtime/prime/bin/agent.sh +231 -7
- package/runtime/prime/bin/api-call.sh +44 -23
- package/runtime/prime/bin/artifact-register.sh +7 -1
- package/runtime/prime/bin/artifact-writeback.sh +1 -1
- package/runtime/prime/bin/artifacts.sh +66 -265
- package/runtime/prime/bin/attendant.sh +4 -1
- package/runtime/prime/bin/boundary-guard.cjs +1848 -0
- package/runtime/prime/bin/boundary-hook.sh +41 -0
- package/runtime/prime/bin/capture-run.sh +32 -2
- package/runtime/prime/bin/codex-render-spec.mjs +24 -46
- package/runtime/prime/bin/codex-session-start.sh +19 -0
- package/runtime/prime/bin/codex-skill-render.mjs +18 -0
- package/runtime/prime/bin/config-get.sh +10 -1
- package/runtime/prime/bin/connect-refresh.sh +16 -0
- package/runtime/prime/bin/corpus_map.py +5 -0
- package/runtime/prime/bin/data/capabilities/prime.json +1458 -0
- package/runtime/prime/bin/genui.sh +19 -0
- package/runtime/prime/bin/graph-batch.sh +1 -1
- package/runtime/prime/bin/graph-op.sh +14 -0
- package/runtime/prime/bin/graph.sh +1 -1
- package/runtime/prime/bin/handoff-pr-backfill.sh +1 -1
- package/runtime/prime/bin/handoff-run.sh +11 -6
- package/runtime/prime/bin/ingest-item.sh +1 -1
- package/runtime/prime/bin/ingest-surface.html +22 -4
- package/runtime/prime/bin/issue.sh +1 -1
- package/runtime/prime/bin/knowledge.sh +1 -1
- package/runtime/prime/bin/lib/card-delivery.sh +329 -0
- package/runtime/prime/bin/lib/config.sh +148 -3
- package/runtime/prime/bin/lib/context.sh +38 -67
- package/runtime/prime/bin/lib/genui-entry.py +36 -0
- package/runtime/prime/bin/lib/git-message.sh +25 -6
- package/runtime/prime/bin/lib/git-sync.sh +12 -4
- package/runtime/prime/bin/lib/greeting.sh +255 -28
- package/runtime/prime/bin/lib/handoff_meta.py +294 -0
- package/runtime/prime/bin/lib/health-footer.sh +83 -2
- package/runtime/prime/bin/lib/identity.sh +31 -10
- package/runtime/prime/bin/lib/instance-registry.sh +71 -0
- package/runtime/prime/bin/lib/local_ci_receipt.py +249 -0
- package/runtime/prime/bin/lib/metrics.sh +121 -8
- package/runtime/prime/bin/lib/notices.sh +36 -0
- package/runtime/prime/bin/lib/record_outcomes.py +729 -0
- package/runtime/prime/bin/lib/reflexes.py +267 -0
- package/runtime/prime/bin/lib/retrieval_scorecard.py +624 -0
- package/runtime/prime/bin/lib/session-record-prompt.txt +18 -0
- package/runtime/prime/bin/lib/session_record.py +3747 -0
- package/runtime/prime/bin/lib/session_trail.py +1983 -0
- package/runtime/prime/bin/lib/settings-drift.sh +8 -5
- package/runtime/prime/bin/lib/startup-restart.sh +41 -0
- package/runtime/prime/bin/lib/worktree-links.sh +92 -0
- package/runtime/prime/bin/memory-push.sh +6 -0
- package/runtime/prime/bin/merge-gate.sh +498 -0
- package/runtime/prime/bin/notify.sh +5 -2
- package/runtime/prime/bin/page-access.sh +103 -0
- package/runtime/prime/bin/person.sh +13 -2
- package/runtime/prime/bin/pi-branch-policy.mjs +37 -0
- package/runtime/prime/bin/pi-observe-context.mjs +97 -4
- package/runtime/prime/bin/pi-render-spec.mjs +0 -1
- package/runtime/prime/bin/pi-spirit-discovery.mjs +34 -0
- package/runtime/prime/bin/post-update.sh +181 -0
- package/runtime/prime/bin/prime-render-spec.mjs +0 -1
- package/runtime/prime/bin/prime-session-start.sh +3 -1
- package/runtime/prime/bin/publish-artifact.sh +89 -42
- package/runtime/prime/bin/qa-inventory.sh +2 -2
- package/runtime/prime/bin/quest.sh +1 -1
- package/runtime/prime/bin/records.sh +11 -0
- package/runtime/prime/bin/reflexes/05-vitals.sh +9 -0
- package/runtime/prime/bin/reflexes/10-open-items.sh +12 -0
- package/runtime/prime/bin/reflexes/15-retrieval.sh +8 -0
- package/runtime/prime/bin/reflexes/20-nightly.sh +100 -0
- package/runtime/prime/bin/reflexes/20-sandbox.sh +85 -0
- package/runtime/prime/bin/reflexes/30-cost.py +116 -0
- package/runtime/prime/bin/reflexes/40-shells.py +51 -0
- package/runtime/prime/bin/reflexes/README.md +61 -0
- package/runtime/prime/bin/reflexes.sh +7 -0
- package/runtime/prime/bin/runtime-identity.sh +140 -42
- package/runtime/prime/bin/screenshot.sh +77 -0
- package/runtime/prime/bin/scroll.sh +1 -1
- package/runtime/prime/bin/search.sh +31 -5
- package/runtime/prime/bin/session-autosave.sh +6 -3
- package/runtime/prime/bin/session-id.sh +147 -0
- package/runtime/prime/bin/session-log.sh +19 -0
- package/runtime/prime/bin/session-record.sh +26 -0
- package/runtime/prime/bin/settings.sh +13 -8
- package/runtime/prime/bin/spirit-discovery-claude.sh +4 -0
- package/runtime/prime/bin/spirit-discovery-codex.sh +4 -0
- package/runtime/prime/bin/spirit-discovery-pi.sh +4 -0
- package/runtime/prime/bin/spirit-discovery-prime.sh +4 -0
- package/runtime/prime/bin/spirit-discovery.sh +4 -0
- package/runtime/prime/bin/startup-check.sh +1 -1
- package/runtime/prime/bin/telemetry.sh +11 -4
- package/runtime/prime/bin/test-baseline.sh +33 -5
- package/runtime/prime/bin/todo.sh +1 -1
- package/runtime/prime/bin/worktree-create.sh +15 -45
- package/runtime/prime/bin/worktree.sh +6 -0
- package/runtime/prime/docs/spirit-discovery.md +96 -0
- package/runtime/prime/egregore_runtime/__init__.py +18 -12
- package/runtime/prime/egregore_runtime/access.py +608 -0
- package/runtime/prime/egregore_runtime/access_cli.py +190 -0
- package/runtime/prime/egregore_runtime/adapters/invitation.py +5 -3
- package/runtime/prime/egregore_runtime/adapters/qmd.py +521 -47
- package/runtime/prime/egregore_runtime/admin_entry.py +56 -0
- package/runtime/prime/egregore_runtime/artifacts.py +222 -16
- package/runtime/prime/egregore_runtime/contracts.py +27 -0
- package/runtime/prime/egregore_runtime/eligibility.py +5 -12
- package/runtime/prime/egregore_runtime/episode_binding.py +16 -5
- package/runtime/prime/egregore_runtime/github_issues.py +2 -2
- package/runtime/prime/egregore_runtime/handoff_lookup.py +9 -20
- package/runtime/prime/egregore_runtime/harness_cli.py +674 -149
- package/runtime/prime/egregore_runtime/held.py +2436 -0
- package/runtime/prime/egregore_runtime/hosted_api.py +137 -0
- package/runtime/prime/egregore_runtime/identity.py +196 -65
- package/runtime/prime/egregore_runtime/identity_transfer.py +6 -2
- package/runtime/prime/egregore_runtime/ingest_cli.py +2 -2
- package/runtime/prime/egregore_runtime/ingest_index_cli.py +4 -16
- package/runtime/prime/egregore_runtime/installation.py +119 -0
- package/runtime/prime/egregore_runtime/investigation.py +64 -41
- package/runtime/prime/egregore_runtime/investigation_guidance.py +16 -11
- package/runtime/prime/egregore_runtime/issue_cli.py +51 -32
- package/runtime/prime/egregore_runtime/issue_reporting.py +4 -3
- package/runtime/prime/egregore_runtime/issue_triage_service.py +2 -2
- package/runtime/prime/egregore_runtime/issues.py +12 -6
- package/runtime/prime/egregore_runtime/knowledge.py +331 -5
- package/runtime/prime/egregore_runtime/knowledge_cli.py +57 -17
- package/runtime/prime/egregore_runtime/lifecycle.py +88 -22
- package/runtime/prime/egregore_runtime/lifecycle_cli.py +21 -13
- package/runtime/prime/egregore_runtime/line_ids.py +10 -0
- package/runtime/prime/egregore_runtime/memory_push.py +349 -0
- package/runtime/prime/egregore_runtime/observe.py +64 -25
- package/runtime/prime/egregore_runtime/observers.py +19 -0
- package/runtime/prime/egregore_runtime/optional_modules.py +13 -0
- package/runtime/prime/egregore_runtime/outputs_cli.py +321 -0
- package/runtime/prime/egregore_runtime/policy.py +651 -24
- package/runtime/prime/egregore_runtime/private_result.py +2 -1
- package/runtime/prime/egregore_runtime/projection.py +946 -0
- package/runtime/prime/egregore_runtime/quest_cli.py +20 -23
- package/runtime/prime/egregore_runtime/question_cli.py +15 -11
- package/runtime/prime/egregore_runtime/questions.py +10 -10
- package/runtime/prime/egregore_runtime/quests.py +10 -10
- package/runtime/prime/egregore_runtime/record_publish.py +548 -0
- package/runtime/prime/egregore_runtime/record_subject.py +564 -0
- package/runtime/prime/egregore_runtime/research_ingest.py +2 -4
- package/runtime/prime/egregore_runtime/runtime.py +169 -60
- package/runtime/prime/egregore_runtime/sandbox.py +194 -0
- package/runtime/prime/egregore_runtime/scroll_cli.py +22 -32
- package/runtime/prime/egregore_runtime/scrolls.py +23 -15
- package/runtime/prime/egregore_runtime/shadow.py +262 -0
- package/runtime/prime/egregore_runtime/spirit_discovery.py +487 -0
- package/runtime/prime/egregore_runtime/spirit_discovery_cli.py +25 -0
- package/runtime/prime/egregore_runtime/spirit_discovery_transport.py +18 -0
- package/runtime/prime/egregore_runtime/status.py +101 -44
- package/runtime/prime/egregore_runtime/status_cli.py +13 -5
- package/runtime/prime/egregore_runtime/sync.py +39 -21
- package/runtime/prime/egregore_runtime/taste.py +934 -0
- package/runtime/prime/egregore_runtime/taste_cli.py +242 -0
- package/runtime/prime/egregore_runtime/taste_rules.py +91 -0
- package/runtime/prime/egregore_runtime/telemetry.py +26 -3
- package/runtime/prime/egregore_runtime/todo_cli.py +15 -12
- package/runtime/prime/egregore_runtime/todos.py +3 -2
- package/runtime/prime/egregore_runtime/upgrade.py +85 -58
- package/runtime/prime/egregore_runtime/writeback.py +330 -24
- package/runtime/prime/manifest.json +66 -5
- package/runtime/claude/bin/thread.sh +0 -9
- package/runtime/claude/egregore_runtime/admin_gate.py +0 -102
- package/runtime/claude/egregore_runtime/thread_cli.py +0 -173
- package/runtime/claude/egregore_runtime/threads.py +0 -521
- package/runtime/codex/bin/thread.sh +0 -9
- package/runtime/codex/egregore_runtime/admin_gate.py +0 -102
- package/runtime/codex/egregore_runtime/thread_cli.py +0 -173
- package/runtime/codex/egregore_runtime/threads.py +0 -521
- package/runtime/pi/bin/thread.sh +0 -9
- package/runtime/pi/egregore_runtime/admin_gate.py +0 -102
- package/runtime/pi/egregore_runtime/thread_cli.py +0 -173
- package/runtime/pi/egregore_runtime/threads.py +0 -521
- package/runtime/prime/bin/thread.sh +0 -9
- package/runtime/prime/egregore_runtime/admin_gate.py +0 -102
- package/runtime/prime/egregore_runtime/thread_cli.py +0 -173
- package/runtime/prime/egregore_runtime/threads.py +0 -521
package/runtime/pi/AGENTS.md
CHANGED
|
@@ -38,11 +38,6 @@ Internal handoffs use `bin/agent.sh handoff` (`memory/handoffs/` + index,
|
|
|
38
38
|
via `bin/handoff-run.sh`). External capsules use `egregore-emissary`.
|
|
39
39
|
Never use deprecated `egregore-handoff` for internal handoffs.
|
|
40
40
|
|
|
41
|
-
## Compatibility
|
|
42
|
-
|
|
43
|
-
Claude Code follows `CLAUDE.md`; other shell agents use the generated
|
|
44
|
-
contract below. All runtimes share canonical memory.
|
|
45
|
-
|
|
46
41
|
<!-- BEGIN GENERATED EGREGORE CODEX SPEC — derived from CLAUDE.md by bin/codex-render-spec.mjs; do not edit by hand -->
|
|
47
42
|
|
|
48
43
|
## Egregore on Codex
|
|
@@ -77,13 +72,14 @@ When a user reports broken or missing framework behavior, the first question is
|
|
|
77
72
|
|
|
78
73
|
## Cross-Runtime Compatibility
|
|
79
74
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
75
|
+
Share `bin/` mechanics through thin Claude/Codex/Pi/Prime adapters. Startup,
|
|
76
|
+
lifecycle, capture, skill and command changes require tracing every runtime,
|
|
77
|
+
parity tests and regenerated specs/bundles before completion.
|
|
78
|
+
|
|
79
|
+
Discover via `bash bin/spirit-discovery-codex.sh capabilities.list` (Pi/Prime:
|
|
80
|
+
registered tool). Follow `docs/spirit-discovery.md`: keep seven facets separate;
|
|
81
|
+
generic shell needs one snapshot. Discovery reads code/install evidence, not
|
|
82
|
+
memory, and grants no authority.
|
|
87
83
|
|
|
88
84
|
---
|
|
89
85
|
|
|
@@ -142,25 +138,7 @@ For continued project work: **continuation intent → prior workspace → restor
|
|
|
142
138
|
|
|
143
139
|
### Handoff claiming
|
|
144
140
|
|
|
145
|
-
|
|
146
|
-
```bash
|
|
147
|
-
bash bin/graph-op.sh claim-handoff "$SESSION_ID" "$HANDOFF_SESSION_ID" 2>/dev/null &
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
**Auto-checkout repos from handoff**: after claiming, if `addressed_rich` carries a non-empty `repoState`, check out each entry's branch in its managed repo:
|
|
151
|
-
|
|
152
|
-
```bash
|
|
153
|
-
PARENT_DIR="$(cd .. && pwd)"
|
|
154
|
-
# For each entry in repoState:
|
|
155
|
-
REPO_DIR="$PARENT_DIR/$REPO_NAME"
|
|
156
|
-
if [ -d "$REPO_DIR/.git" ] || [ -f "$REPO_DIR/.git" ]; then
|
|
157
|
-
git -C "$REPO_DIR" fetch origin "$BRANCH" --quiet 2>/dev/null
|
|
158
|
-
git -C "$REPO_DIR" checkout "$BRANCH" 2>/dev/null || \
|
|
159
|
-
git -C "$REPO_DIR" checkout -b "$BRANCH" "origin/$BRANCH" 2>/dev/null
|
|
160
|
-
fi
|
|
161
|
-
```
|
|
162
|
-
|
|
163
|
-
Report `✓ Checked out {branch} in {repo1}, {repo2}`; for a merged-away branch, `◐ {repo}: PR #{N} merged — on {base}`. If `repoState` is absent or empty, skip silently.
|
|
141
|
+
When the user picks up a handoff addressed to them, follow `.claude/context/handoff-claiming.md` after branch creation: it claims the handoff and checks out the branches its `repoState` names in each managed repo.
|
|
164
142
|
|
|
165
143
|
**Exceptions** — skip branching when the user explicitly created or named a branch themselves, or the intent continues the current working branch's topic.
|
|
166
144
|
|
|
@@ -221,7 +199,7 @@ answers it: `open-handoffs`, `pending-questions`, `lineage`, or
|
|
|
221
199
|
`meeting-history`. Verify projection freshness/coverage and open its canonical
|
|
222
200
|
`evidencePath` before acting. Canonical Markdown wins on disagreement.
|
|
223
201
|
|
|
224
|
-
Run `catalog` only when the route is unclear.
|
|
202
|
+
Run `catalog` only when the route is unclear. Open only the returned `evidencePath` files needed to answer; on partial coverage, name `unprojectedPaths` instead of claiming them. Use `bin/graph.sh` for unsupported Neo4j queries and never construct curl calls directly (schema: DEVELOPMENT.md §1).
|
|
225
203
|
|
|
226
204
|
---
|
|
227
205
|
|
|
@@ -234,60 +212,42 @@ For each user-directed organizational lookup, show exactly one visible line:
|
|
|
234
212
|
- retrieval that actually queries the connected graph:
|
|
235
213
|
`⌕ Egregore Connect · searching your organization’s memory and relationships`
|
|
236
214
|
|
|
237
|
-
When `EGREGORE_ORG_CONTEXT_V1` is attached, reuse its authorized evidence.
|
|
238
|
-
For a remaining gap continue a Runtime investigation, preserving earlier findings.
|
|
239
|
-
Follow `.claude/context/retrieval-investigation.md`: the model chooses keyword,
|
|
240
|
-
semantic, hybrid, filename, literal, or date inventory; Runtime owns permissions,
|
|
241
|
-
evidence history, pages and per-prompt limits. Empty results allow refinements
|
|
242
|
-
within the requested dates. Never relax the date boundary to manufacture coverage.
|
|
243
|
-
|
|
244
|
-
**Scope.** Egregore Runtime is for organizational recall only: team memory,
|
|
245
|
-
decisions, handoffs, prior work. Code, files, Git, and tests use the harness's
|
|
246
|
-
normal tools, with no beat and no Runtime call.
|
|
247
|
-
|
|
248
215
|
**Visibility is the contract.** Emit it verbatim as a standalone assistant
|
|
249
216
|
message before the first tool call that performs the organizational recall
|
|
250
217
|
(the `bin/search.sh` query or a graph read). Tool output does not satisfy it.
|
|
251
|
-
Do not paraphrase the line.
|
|
218
|
+
Do not paraphrase the line. Emit once per episode.
|
|
219
|
+
Never name `Egregore Connect` unless a graph read will actually run.
|
|
252
220
|
|
|
253
|
-
|
|
254
|
-
|
|
221
|
+
**Scope.** Egregore Runtime is for organizational recall only: team memory,
|
|
222
|
+
decisions, handoffs, prior work. Code, files, Git, and tests use the harness's
|
|
223
|
+
normal tools, with no beat and no Runtime call. Startup hydration, graph
|
|
224
|
+
writes, ingestion, background sync, maintenance, and internal queries get no beat.
|
|
255
225
|
|
|
256
226
|
**Routing:** Organizational recall always enters Egregore Runtime. The model is
|
|
257
227
|
the semantic intent authority, deciding from meaning rather than fixed phrases.
|
|
228
|
+
Do not run retrieval on unrelated prompts or infer graph from recall intent.
|
|
258
229
|
Prompt hooks attach identity and guidance only; they never retrieve evidence.
|
|
259
|
-
|
|
230
|
+
The full retrieval contract arrives with the session's first prompt as
|
|
231
|
+
`EGREGORE_ACTOR_CONTEXT_V1` (later prompts carry a reminder); follow it.
|
|
232
|
+
When `EGREGORE_ORG_CONTEXT_V1` is attached, reuse its authorized evidence.
|
|
233
|
+
When the full contract is not in your context (a subagent, a missed hook, or
|
|
234
|
+
after a compaction), start with
|
|
260
235
|
|
|
261
236
|
```bash
|
|
262
237
|
bash bin/search.sh find "<query>" --kind <kind>
|
|
263
238
|
```
|
|
264
239
|
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
JSON operations, episode arguments, or gap explanations for normal retrieval.
|
|
270
|
-
Use `find` for model-led discovery; `query` is a compatibility command. Read
|
|
271
|
-
canonical sources through `search.sh open`, never a raw file-read tool or shell
|
|
272
|
-
read. An adequate excerpt already supports an answer; no extra open is needed.
|
|
240
|
+
and follow `.claude/context/retrieval-investigation.md`.
|
|
241
|
+
Open necessary sources together with `bash bin/search.sh open`; never read
|
|
242
|
+
memory with a raw file tool, `grep` or `ls`. Do not `cd` into the sibling memory repository.
|
|
243
|
+
Never relax the date boundary to manufacture coverage.
|
|
273
244
|
|
|
274
245
|
Search output is model-internal: show only the retrieval line and receipts —
|
|
275
246
|
never ranked blocks, file/rank/excerpt metadata, or raw JSON.
|
|
276
247
|
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
team/person synthesis, retain the requested subject and choose a `recent_days`
|
|
281
|
-
window. Use date filters for a known topic, or a bounded date inventory for
|
|
282
|
-
a recent-work overview. `$activity`, `$dashboard`, and `$project`
|
|
283
|
-
display bounded status surfaces only when named or directly requested as a
|
|
284
|
-
card. Explained syntheses of current organizational work and prior-work
|
|
285
|
-
discovery are Runtime/QMD recall. Do not run retrieval on unrelated prompts or
|
|
286
|
-
infer graph from recall intent.
|
|
287
|
-
|
|
288
|
-
Do not emit the beat for code search, Git inspection, startup hydration, graph
|
|
289
|
-
writes, ingestion, background sync, maintenance, or internal queries.
|
|
290
|
-
Never name `Egregore Connect` unless a graph read will actually run.
|
|
248
|
+
`$activity`, `$dashboard`, and `$project` display bounded status surfaces only
|
|
249
|
+
when named or directly requested as a card.
|
|
250
|
+
Explained syntheses of current organizational work and prior-work discovery are Runtime/QMD recall.
|
|
291
251
|
|
|
292
252
|
---
|
|
293
253
|
|
|
@@ -337,12 +297,15 @@ Never repeat it.
|
|
|
337
297
|
|
|
338
298
|
## Memory
|
|
339
299
|
|
|
340
|
-
`memory/`
|
|
341
|
-
- `people/` — team
|
|
342
|
-
- `handoffs/` —
|
|
343
|
-
- `knowledge/decisions/` —
|
|
344
|
-
- `knowledge/patterns/` —
|
|
345
|
-
- `infrastructure/` —
|
|
300
|
+
`memory/` links to the repo in `egregore.json`:
|
|
301
|
+
- `people/` — team
|
|
302
|
+
- `handoffs/` — handoffs and index
|
|
303
|
+
- `knowledge/decisions/` — decisions
|
|
304
|
+
- `knowledge/patterns/` — patterns
|
|
305
|
+
- `infrastructure/` — services and credential locations
|
|
306
|
+
|
|
307
|
+
Write memory through its commands, never the files: `$reflect` for decisions, `$handoff` for handoffs.
|
|
308
|
+
|
|
346
309
|
|
|
347
310
|
Always use HTTPS for git operations — `github-auth.sh` handles credential storage.
|
|
348
311
|
|
|
@@ -357,9 +320,8 @@ Loom is Claude-specific; skip its preambles and `bin/loom.sh` calls. Use native
|
|
|
357
320
|
## Git Workflow
|
|
358
321
|
|
|
359
322
|
`develop` is the default integration branch. A top-level
|
|
360
|
-
`egregore.json.base_branch` replaces it
|
|
361
|
-
|
|
362
|
-
git directly.
|
|
323
|
+
`egregore.json.base_branch` replaces it; `base_branch: "main"` is single-branch
|
|
324
|
+
mode. Users never interact with git directly.
|
|
363
325
|
|
|
364
326
|
```
|
|
365
327
|
main ← selected `/release` candidates
|
|
@@ -373,10 +335,9 @@ develop ← CL integration (available internally)
|
|
|
373
335
|
- **On launch**: syncs the configured base branch + memory. Does NOT create a branch.
|
|
374
336
|
- **Branch creation**: required before project changes; read-only work stays put.
|
|
375
337
|
- **Resuming**: rebase onto the configured base branch and continue.
|
|
376
|
-
- **Read-only sessions**: no branch creation based on message count.
|
|
377
338
|
- **`$save`**: pushes the working branch and opens a PR to the configured base. Auto-merges markdown-only PRs.
|
|
378
339
|
- **Memory repo**: stays on main (separate repo, auto-merge).
|
|
379
|
-
- **Never push directly to the configured base, main, or develop.**
|
|
340
|
+
- **Never push directly to the configured base, main, or develop.** Changes flow through PRs, merged with `bash bin/agent.sh merge <pr>`, never `gh pr merge`; a red check needs a receipt naming each failing job and why.
|
|
380
341
|
|
|
381
342
|
### Pull request format (all harnesses)
|
|
382
343
|
|
|
@@ -384,7 +345,7 @@ Every PR body follows `.claude/context/pr-format.md`, enforced by the `pr-format
|
|
|
384
345
|
|
|
385
346
|
### Commit format (all harnesses)
|
|
386
347
|
|
|
387
|
-
Every commit follows `.claude/context/commit-format.md`: subject `type(scope): imperative summary` (≤ 72 chars, aim ≤ 50, lowercase, same grammar and type set as PR titles), body wrapped at 72 explaining what and why — never how, and git trailers on agent-authored commits (`Egregore-Session: <id>` from
|
|
348
|
+
Every commit follows `.claude/context/commit-format.md`: subject `type(scope): imperative summary` (≤ 72 chars, aim ≤ 50, lowercase, same grammar and type set as PR titles), body wrapped at 72 explaining what and why — never how, and git trailers on agent-authored commits (`Egregore-Session: <id>` from `bash bin/session-id.sh`, plus the harness `Co-Authored-By` line). Background scripts commit as `chore(<subsystem>): …`, but a commit carrying real work derives its type/scope from the diff — the transport never masks the work. Git-generated messages (merges, reverts, autosquash fixups) keep their native form. Wording for commits and PRs follows `.claude/context/git-language.md`.
|
|
388
349
|
|
|
389
350
|
### Managed Repos
|
|
390
351
|
|
|
@@ -392,21 +353,13 @@ Repos in `egregore.json` → `repos[]` are cloned as siblings (`../{repo}/`). Ea
|
|
|
392
353
|
|
|
393
354
|
---
|
|
394
355
|
|
|
395
|
-
## Working Conventions
|
|
396
|
-
|
|
397
|
-
- For unfamiliar org work, use Observe context; if absent, run `bash bin/search.sh find` with an appropriate lookup kind.
|
|
398
|
-
- Document significant decisions in `memory/knowledge/decisions/`
|
|
399
|
-
- After substantial sessions, log to `memory/handoffs/` and update `index.md`
|
|
400
|
-
|
|
401
|
-
---
|
|
402
|
-
|
|
403
356
|
## Command Awareness
|
|
404
357
|
|
|
405
|
-
Codex reserves leading `/` for built-ins. Invoke Egregore skills with `$name` or natural language ("show activity", "make a handoff"). Every framework workflow uses a generated adapter that names its one maintained body under `.claude/skills/`. Organization-owned skills may also provide full native implementations.
|
|
358
|
+
Codex reserves leading `/` for built-ins. Invoke Egregore skills with `$name` or natural language ("show activity", "make a handoff"). Every framework workflow uses a generated adapter that names its one maintained body under `.claude/skills/`. Organization-owned skills may also provide full native implementations.
|
|
406
359
|
|
|
407
360
|
Invoke commands from user intent — don't wait for the slash. Each command file has a `## When to invoke` section. Load it for the full spec.
|
|
408
361
|
|
|
409
|
-
**Core loop** — `$activity` `$dashboard` `$handoff` `$wrap` `$save` `$reflect` `$todo`
|
|
362
|
+
**Core loop** — `$activity` `$dashboard` `$handoff` `$wrap` `$save` `$reflect` `$todo` `$records`
|
|
410
363
|
**Knowledge** — `$search` `$deep-reflect` `$archive` `$note` `$add` `$meeting` `$ingest` `$scroll` `$mock` `$audit`
|
|
411
364
|
**Identity** — `$me` (view profile or set display name)
|
|
412
365
|
**Coordination** — `$ask` `$quest` `$issue` `$invite` `$delete-user` `$announce`
|
|
@@ -418,16 +371,10 @@ Invoke commands from user intent — don't wait for the slash. Each command file
|
|
|
418
371
|
|
|
419
372
|
**Disambiguation:**
|
|
420
373
|
- Knowledge: `$reflect` (share-ready) · `$note` (half-baked) · `$deep-reflect` (deep research over memory — questions AND cross-referencing) · `$archive` (AI patterns) · `$audit` (evidence-mined forensic sweep of the org's own record — any target)
|
|
421
|
-
- Finding things —
|
|
422
|
-
|
|
423
|
-
Use `bash bin/search.sh find` or `open` and the shared investigation contract. Use Grep/Glob for code and exact errors, not org
|
|
424
|
-
recall. Do not `cd` into the sibling memory repository.
|
|
425
|
-
- Finding **something you generated** (a scroll, handoff, emissary, decision, any hosted egregore.xyz link): `bash bin/artifacts.sh find <query>`. Every generative surface records into memory — hosted artifacts self-register into `memory/artifacts/` at publish (committed+pushed, findable from any session); handoffs in `memory/handoffs/`, emissaries in `memory/handoffs/outbound/`, decisions/findings/patterns in `memory/knowledge/`. The finder searches all of them by **content, not just name**, ranks title/topic matches above body mentions, tags hits by type (`[document]`/`[handoff]`/`[emissary]`/`[decision]`), and surfaces the shareable URL — grep-first in OSS, search + graph when available. *"bring me the artifact where I laid out our GTM plan"* → this.
|
|
374
|
+
- Finding things — organizational recall through Runtime (Egregore Retrieval Beat); Grep/Glob for code and exact errors.
|
|
375
|
+
- Finding **something you generated** (a scroll, handoff, emissary, decision, any hosted egregore.xyz link): `bash bin/artifacts.sh find <query>` searches every generated record by content, tags its type and returns the shareable URL. *"bring me the artifact where I laid out our GTM plan"* → this.
|
|
426
376
|
- Artifacts with questions: `$scroll` (living paper + embedded harvest, updates in place) · `$view` (static render) · `$harvest` (elicitation, no published face) · `$mock` (pre-build walkthrough of decided design — gauge per stop, verdict copy-back)
|
|
427
|
-
-
|
|
428
|
-
`$project` (named project). These display cards when named or directly
|
|
429
|
-
requested. Analytical questions about organizational work and specific
|
|
430
|
-
prior-work continuation route through Runtime/QMD recall.
|
|
377
|
+
- Status cards: `$dashboard` (personal) · `$activity` (org-wide) · `$project` (named project), only when named or requested as a card.
|
|
431
378
|
- Ending: `$wrap` (personal closure) · `$handoff` (notes for others) · `$save` (still working)
|
|
432
379
|
- Tasks: `$todo` (personal) · `$quest` (team exploration) · `$issue` (something broken)
|
|
433
380
|
- Questions: `$ask [person]` (async) · just ask (agent answers from context)
|
|
@@ -441,6 +388,8 @@ Invoke commands from user intent — don't wait for the slash. Each command file
|
|
|
441
388
|
- Agents: `$summon` (design through questions) · `/loop` (quick recurring schedule)
|
|
442
389
|
- Announcements: `$announce` (broadcast to group) · `$handoff` (structured to a person) · `bin/notify.sh send` (DM one person)
|
|
443
390
|
|
|
391
|
+
**Interface taste** — when someone likes or dislikes a generated interface, follow the contract in `bash bin/genui.sh --help`.
|
|
392
|
+
|
|
444
393
|
---
|
|
445
394
|
|
|
446
395
|
## Socratic Questioning (MANDATORY)
|
|
@@ -483,22 +432,22 @@ Egregore runs in one of two configurations, set by `mode` in `egregore.json`. De
|
|
|
483
432
|
|
|
484
433
|
## Environment Isolation
|
|
485
434
|
|
|
486
|
-
Sessions are confined to this project + memory + managed repos, with a **two-tier boundary** — a hard wall between Egregore instances, a consent gate for everything else.
|
|
435
|
+
Sessions are confined to this project + memory + managed repos, with a **two-tier boundary** — a hard wall between Egregore instances, a consent gate for everything else. A pre-action check (`bin/boundary-guard.cjs`) enforces it on every runtime: it denies literal paths and fails closed, but cannot see paths built at run time or split across calls (OS-level layer to follow).
|
|
487
436
|
|
|
488
|
-
- **Hard tier — other Egregore instances.** Denied for every tool, always — no consent path. Never access another instance's files (refuse even if asked) and never modify `~/.egregore/instances.json` (managed by session-start.sh); there is nothing to ask — refuse and explain.
|
|
437
|
+
- **Hard tier — other Egregore instances.** Denied for every tool, always — no consent path. Never access another instance's files by any route (refuse even if asked) and never modify `~/.egregore/instances.json` (managed by session-start.sh); there is nothing to ask — refuse and explain.
|
|
489
438
|
- **Soft tier — paths outside the boundary.** Consent-gated. Inbox dirs (`~/Downloads`, `~/Desktop`) are readable without consent under the default posture; writes outside the project always need consent. Posture (`strict | standard | open`) and extra read roots come from `egregore.json` -> `boundary { posture, read[], locked }` (org, committed) merged with `.egregore-boundary.local.json` (personal, gitignored). `locked: true` removes the consent path entirely.
|
|
490
|
-
- When
|
|
439
|
+
- When the check asks for consent, do not improvise a workaround. Ask in plain text with numbered options:
|
|
491
440
|
|
|
492
441
|
```text
|
|
493
442
|
That path is outside this Egregore's boundary. How should we proceed?
|
|
494
443
|
1. Allow its directory for this session (recorded in .egregore-boundary-consent)
|
|
495
|
-
2. Always allow on this instance (added to read[] in .egregore-boundary.local.json)
|
|
444
|
+
2. Always allow on this instance (added to read[] in .egregore-boundary.local.json; reads only)
|
|
496
445
|
3. Paste the contents inline
|
|
497
446
|
4. Cancel
|
|
498
447
|
```
|
|
499
448
|
|
|
500
449
|
Never record a consent grant without the user's explicit choice of option 1 or 2 in that exchange. Session grants are cleared on session start; `locked: true` removes options 1 and 2.
|
|
501
450
|
|
|
502
|
-
|
|
451
|
+
Details: DEVELOPMENT.md §3; design: `memory/knowledge/decisions/2026-07-08-boundary-hook-consent-design.md`.
|
|
503
452
|
|
|
504
453
|
<!-- END GENERATED EGREGORE CODEX SPEC -->
|
package/runtime/pi/bin/agent.sh
CHANGED
|
@@ -34,6 +34,9 @@ fi
|
|
|
34
34
|
type egregore_commit >/dev/null 2>&1 || egregore_commit() {
|
|
35
35
|
local gd="$1" m="$3"; shift 3; git -C "$gd" commit -m "$m" "$@"
|
|
36
36
|
}
|
|
37
|
+
type egregore_session_id >/dev/null 2>&1 || egregore_session_id() {
|
|
38
|
+
head -n 1 "$1/.egregore-session-id" 2>/dev/null; return 0
|
|
39
|
+
}
|
|
37
40
|
type egregore_pr_skeleton >/dev/null 2>&1 || egregore_pr_skeleton() {
|
|
38
41
|
printf '## What\n%s\n\n## Why\n%s\n\n## Verification\n%s\n\n%s\n' "$1" "$2" "$3" "$4"
|
|
39
42
|
}
|
|
@@ -54,7 +57,12 @@ Runtime-neutral commands:
|
|
|
54
57
|
Commit and push current repo + memory changes;
|
|
55
58
|
PR body follows .claude/context/pr-format.md
|
|
56
59
|
(auto-generated skeleton if not provided);
|
|
57
|
-
new code PRs stay draft until --ready
|
|
60
|
+
new code PRs stay draft until --ready, which
|
|
61
|
+
first runs the checks CI would select here
|
|
62
|
+
merge <pr> [--receipt FILE] [--dry-run] [--local-receipt FILE]
|
|
63
|
+
Merge a PR into the integration branch through
|
|
64
|
+
the gate: green merges; a red check needs a
|
|
65
|
+
receipt naming it and why (bin/merge-gate.sh)
|
|
58
66
|
autosave [status|on|off|scope|publish|merge] Personal ambient-save settings + consent
|
|
59
67
|
wrap --topic T --summary TEXT Write a session wrap to memory/wraps
|
|
60
68
|
handoff --from A --to B --topic T [--intent action|feedback|fyi]
|
|
@@ -148,9 +156,13 @@ save_memory() {
|
|
|
148
156
|
branch="$(memory_branch)"
|
|
149
157
|
[ -z "$branch" ] && branch="main"
|
|
150
158
|
for _try in 1 2 3; do
|
|
151
|
-
if git -C "$MEMORY_DIR" pull --rebase origin "$branch" --quiet 2>/dev/null
|
|
152
|
-
|
|
153
|
-
|
|
159
|
+
if git -C "$MEMORY_DIR" pull --rebase origin "$branch" --quiet 2>/dev/null; then
|
|
160
|
+
if bash "$SCRIPT_DIR/bin/memory-push.sh" --repository "$MEMORY_DIR" --branch "$branch" >/dev/null 2>&1; then
|
|
161
|
+
return 0
|
|
162
|
+
else
|
|
163
|
+
local push_status=$?
|
|
164
|
+
case "$push_status" in 75) ;; *) die "memory saved locally; guarded publication is pending review or reconciliation" ;; esac
|
|
165
|
+
fi
|
|
154
166
|
fi
|
|
155
167
|
sleep 1
|
|
156
168
|
done
|
|
@@ -229,6 +241,7 @@ Egregore portable agent protocol
|
|
|
229
241
|
7. Run `bin/agent.sh search "<query>"` to recall shared memory (decisions, handoffs, knowledge) before answering questions about past work.
|
|
230
242
|
8. Run `bin/agent.sh branch --topic "<what you are working on>"` before code changes when you need a task branch/worktree.
|
|
231
243
|
9. Run `bin/agent.sh save` and `bin/agent.sh wrap` for portable save/wrap flows.
|
|
244
|
+
10. Run `bin/agent.sh merge <pr>` to merge a PR into its integration branch, never `gh pr merge`; a red check needs `--receipt <file>` naming each failing job and why.
|
|
232
245
|
|
|
233
246
|
This protocol is runtime-neutral. Claude Code may still use .claude hooks and
|
|
234
247
|
skills, while Codex or another agent can call this script directly.
|
|
@@ -403,9 +416,188 @@ build_pr_body() {
|
|
|
403
416
|
"🤖 Saved via bin/agent.sh"
|
|
404
417
|
}
|
|
405
418
|
|
|
419
|
+
# Inputs of each step the save regenerates, as Git pathspecs. The generators
|
|
420
|
+
# are the authority; re-derive a list when its generator changes. A step's
|
|
421
|
+
# own outputs count as inputs, so a hand edit is regenerated, not committed.
|
|
422
|
+
# codex-skills bin/codex-sync-skills.sh: the .codex/skills adapters, from
|
|
423
|
+
# .claude/skills frontmatter classified by the skill inventory
|
|
424
|
+
# (capability-distribution.json, egregore.json owned_skills)
|
|
425
|
+
# codex-spec bin/codex-render-spec.mjs: AGENTS.md and
|
|
426
|
+
# .codex/spec-manifest.json, from CLAUDE.md alone
|
|
427
|
+
# pi-spec bin/pi-render-spec.mjs: .pi/APPEND_SYSTEM.md, from AGENTS.md
|
|
428
|
+
# prime-spec bin/prime-render-spec.mjs: .prime/agent/APPEND_SYSTEM.md,
|
|
429
|
+
# from AGENTS.md
|
|
430
|
+
# bundles `npm run build:runtime` in packages/create-egregore, chaining
|
|
431
|
+
# bin/capability-distribution.mjs generate-skill-view and
|
|
432
|
+
# packages/create-egregore/scripts/build-runtime-bundle.mjs (Codex):
|
|
433
|
+
# AGENTS.md, .claude/context, .codex, .agents, docs/{credential-entry,spirit-discovery}.md,
|
|
434
|
+
# egregore_runtime and the bin allowlist; Pi and Prime copy this tree
|
|
435
|
+
# packages/create-egregore/scripts/build-claude-runtime-bundle.mjs:
|
|
436
|
+
# CLAUDE.md, .claude/{context,hooks,rules,skills}, the same docs, bin
|
|
437
|
+
# packages/create-egregore/scripts/build-pi-runtime-bundle.mjs: .pi, bin
|
|
438
|
+
# packages/create-egregore/scripts/build-prime-runtime-bundle.mjs: .prime, bin
|
|
439
|
+
# api/scripts/build-connect-runtime-pack.mjs: .claude/skills, .codex/skills
|
|
440
|
+
# Each reads capability-distribution.json, which selects what ships; the
|
|
441
|
+
# builders and the package.json script that chains them are inputs too.
|
|
442
|
+
# A directory stands in for the curated list inside it (bin for the
|
|
443
|
+
# allowlist): an unrelated change there costs a no-op build of about a
|
|
444
|
+
# second, while a missing input ships a stale bundle.
|
|
445
|
+
derivation_inputs() {
|
|
446
|
+
case "$1" in
|
|
447
|
+
codex-skills) printf '%s\n' .claude/skills .codex/skills capability-distribution.json \
|
|
448
|
+
egregore.json bin/codex-sync-skills.sh bin/capability-distribution.mjs ;;
|
|
449
|
+
codex-spec) printf '%s\n' CLAUDE.md AGENTS.md .codex/spec-manifest.json bin/codex-render-spec.mjs ;;
|
|
450
|
+
pi-spec) printf '%s\n' AGENTS.md .pi/APPEND_SYSTEM.md .pi/spec-manifest.json bin/pi-render-spec.mjs ;;
|
|
451
|
+
prime-spec) printf '%s\n' AGENTS.md .prime/agent/APPEND_SYSTEM.md \
|
|
452
|
+
.prime/agent/spec-manifest.json bin/prime-render-spec.mjs ;;
|
|
453
|
+
bundles) printf '%s\n' \
|
|
454
|
+
AGENTS.md CLAUDE.md capability-distribution.json docs/credential-entry.md docs/spirit-discovery.md \
|
|
455
|
+
bin egregore_runtime .agents .codex .pi .prime \
|
|
456
|
+
.claude/context .claude/hooks .claude/rules .claude/skills \
|
|
457
|
+
packages/create-egregore/package.json packages/create-egregore/scripts \
|
|
458
|
+
api/scripts/build-connect-runtime-pack.mjs ;;
|
|
459
|
+
esac
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
# What the counted steps write.
|
|
463
|
+
derivation_outputs() {
|
|
464
|
+
case "$1" in
|
|
465
|
+
codex-spec) printf '%s\n' AGENTS.md .codex/spec-manifest.json ;;
|
|
466
|
+
pi-spec) printf '%s\n' .pi/APPEND_SYSTEM.md .pi/spec-manifest.json ;;
|
|
467
|
+
prime-spec) printf '%s\n' .prime/agent/APPEND_SYSTEM.md .prime/agent/spec-manifest.json ;;
|
|
468
|
+
bundles) printf '%s\n' packages/create-egregore/runtime api/assets/connect-runtime-pack.json \
|
|
469
|
+
skill-distribution.json ;;
|
|
470
|
+
esac
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
# derivation_due BASE STEP: whether an input of STEP differs in the working
|
|
474
|
+
# tree or, on a task branch, since origin/BASE. Only a task branch's own
|
|
475
|
+
# commits reach its PR: a save from a protected branch starts a new one from
|
|
476
|
+
# origin/BASE. An unavailable comparison counts as a change: regenerating is
|
|
477
|
+
# idempotent, while skipping can commit a stale view.
|
|
478
|
+
derivation_due() {
|
|
479
|
+
local base="$1" path="" diff=""
|
|
480
|
+
local -a inputs=()
|
|
481
|
+
while IFS= read -r path; do inputs+=("$path"); done < <(derivation_inputs "$2")
|
|
482
|
+
[ -z "$(git -C "$SCRIPT_DIR" status --porcelain --untracked-files=normal -- "${inputs[@]}" 2>/dev/null | head -1)" ] \
|
|
483
|
+
|| return 0
|
|
484
|
+
case "$(git -C "$SCRIPT_DIR" branch --show-current 2>/dev/null || true)" in
|
|
485
|
+
dev/*|feature/*|bugfix/*) ;;
|
|
486
|
+
*) return 1 ;;
|
|
487
|
+
esac
|
|
488
|
+
diff="$(git -C "$SCRIPT_DIR" diff --name-only "origin/$base...HEAD" -- "${inputs[@]}" 2>/dev/null)" || return 0
|
|
489
|
+
[ -n "$diff" ]
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
# derivation_changes STEP: how many of STEP's outputs differ from HEAD.
|
|
493
|
+
derivation_changes() {
|
|
494
|
+
local path=""
|
|
495
|
+
local -a outputs=()
|
|
496
|
+
while IFS= read -r path; do outputs+=("$path"); done < <(derivation_outputs "$1")
|
|
497
|
+
git -C "$SCRIPT_DIR" status --porcelain --untracked-files=all -- "${outputs[@]}" | wc -l | tr -d ' '
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
# run_derivation LABEL COMMAND...: run one step, keeping its output in
|
|
501
|
+
# DERIVED_OUTPUT; a failure shows the last lines and stops the save.
|
|
502
|
+
run_derivation() {
|
|
503
|
+
local label="$1"
|
|
504
|
+
shift
|
|
505
|
+
if ! DERIVED_OUTPUT="$("$@" 2>&1)"; then
|
|
506
|
+
printf '%s\n' "$DERIVED_OUTPUT" | tail -n 20 >&2
|
|
507
|
+
die "$label failed (output above); the save stopped before the project commit"
|
|
508
|
+
fi
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
# npm_build_runtime NPM NODE_DIR: the build's script chain calls bare node, so
|
|
512
|
+
# the node bin/node-run.sh resolved goes first on PATH, as in
|
|
513
|
+
# bin/artifact-renderer-install.sh.
|
|
514
|
+
npm_build_runtime() {
|
|
515
|
+
cd "$SCRIPT_DIR/packages/create-egregore" && PATH="$2:$PATH" "$1" run build:runtime
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
# Regenerate the derived views and runtime bundles before the save commits, so
|
|
519
|
+
# the commit carries them and CI's checks stay a backstop. Steps run in the
|
|
520
|
+
# order their inputs require: the Codex adapters and the three specs feed the
|
|
521
|
+
# bundles, and the Codex render's AGENTS.md feeds the Pi and Prime specs. Each
|
|
522
|
+
# runs only when derivation_due says so and prints one receipt line; a failure
|
|
523
|
+
# stops the save. Sets DERIVED_SUBJECT for a commit of regeneration alone.
|
|
524
|
+
regenerate_derived() {
|
|
525
|
+
local base="$1" spec="" specs="" rendered="" made="" count="" review="" path="" node_bin="" npm_bin=""
|
|
526
|
+
local -a inputs=() fresh=()
|
|
527
|
+
|
|
528
|
+
if [ ! -f "$SCRIPT_DIR/bin/codex-sync-skills.sh" ]; then
|
|
529
|
+
echo "codex skills: not applicable"
|
|
530
|
+
elif ! derivation_due "$base" codex-skills; then
|
|
531
|
+
echo "codex skills: current"
|
|
532
|
+
else
|
|
533
|
+
run_derivation "codex skill sync" bash "$SCRIPT_DIR/bin/codex-sync-skills.sh"
|
|
534
|
+
count="$(printf '%s\n' "$DERIVED_OUTPUT" | grep -c '^generated adapter: ' || true)"
|
|
535
|
+
case "$count" in
|
|
536
|
+
0) echo "codex skills: current" ;;
|
|
537
|
+
1) echo "codex skills: synced (1 file)"; made="codex adapters" ;;
|
|
538
|
+
*) echo "codex skills: synced ($count files)"; made="codex adapters" ;;
|
|
539
|
+
esac
|
|
540
|
+
fi
|
|
541
|
+
|
|
542
|
+
for spec in codex pi prime; do
|
|
543
|
+
[ -f "$SCRIPT_DIR/bin/$spec-render-spec.mjs" ] || continue
|
|
544
|
+
specs="$specs $spec"
|
|
545
|
+
derivation_due "$base" "$spec-spec" || continue
|
|
546
|
+
run_derivation "$spec spec render" bash "$SCRIPT_DIR/bin/node-run.sh" "$SCRIPT_DIR/bin/$spec-render-spec.mjs"
|
|
547
|
+
[ "$(derivation_changes "$spec-spec")" = 0 ] || rendered="${rendered:+$rendered, }$spec"
|
|
548
|
+
done
|
|
549
|
+
if [ -z "$specs" ]; then
|
|
550
|
+
echo "specs: not applicable"
|
|
551
|
+
elif [ -z "$rendered" ]; then
|
|
552
|
+
echo "specs: current"
|
|
553
|
+
else
|
|
554
|
+
echo "specs: rendered ($rendered)"
|
|
555
|
+
made="${made:+$made, }specs"
|
|
556
|
+
fi
|
|
557
|
+
# A hand-written Codex section keeps its text when CLAUDE.md changes under
|
|
558
|
+
# it; the render refreshes only the source hash that --check used to flag.
|
|
559
|
+
case "$rendered" in
|
|
560
|
+
codex*)
|
|
561
|
+
review="$(git -C "$SCRIPT_DIR" show HEAD:.codex/spec-manifest.json 2>/dev/null \
|
|
562
|
+
| jq -r --slurpfile now "$SCRIPT_DIR/.codex/spec-manifest.json" '
|
|
563
|
+
(reduce (.sections // [])[] as $s ({}; .[$s.section] = $s.sourceHash)) as $was
|
|
564
|
+
| [$now[0].sections[] | select(.action == "replace" and $was[.section] != .sourceHash) | .section]
|
|
565
|
+
| join(", ")' 2>/dev/null)" || review=""
|
|
566
|
+
[ -z "$review" ] || echo "specs: review the hand-written Codex sections in bin/codex-render-spec.mjs: $review"
|
|
567
|
+
;;
|
|
568
|
+
esac
|
|
569
|
+
|
|
570
|
+
DERIVED_SUBJECT="chore(bundles): regenerate ${made:+$made and }runtime bundles"
|
|
571
|
+
if ! derivation_due "$base" bundles; then
|
|
572
|
+
echo "bundles: current"
|
|
573
|
+
return 0
|
|
574
|
+
fi
|
|
575
|
+
# The builders copy only files Git tracks, so new and deleted inputs enter
|
|
576
|
+
# the index first: a new module ships beside its callers, and a deleted one
|
|
577
|
+
# leaves the bundle instead of failing the copy.
|
|
578
|
+
while IFS= read -r path; do inputs+=("$path"); done < <(derivation_inputs bundles)
|
|
579
|
+
while IFS= read -r -d '' path; do fresh+=("$path"); done \
|
|
580
|
+
< <(git -C "$SCRIPT_DIR" ls-files -z --others --deleted --exclude-standard -- "${inputs[@]}")
|
|
581
|
+
if [ "${#fresh[@]}" -gt 0 ]; then
|
|
582
|
+
git -C "$SCRIPT_DIR" add -A -- "${fresh[@]}" >/dev/null 2>&1 || die "could not stage new bundle inputs"
|
|
583
|
+
fi
|
|
584
|
+
node_bin="$(bash "$SCRIPT_DIR/bin/node-run.sh" -p 'process.execPath')" \
|
|
585
|
+
|| die "the bundle rebuild needs Node; install Node 22, then save again"
|
|
586
|
+
npm_bin="$(command -v npm 2>/dev/null || true)"
|
|
587
|
+
[ -n "$npm_bin" ] || npm_bin="${node_bin%/*}/npm"
|
|
588
|
+
[ -x "$npm_bin" ] || die "the bundle rebuild needs npm; install Node with npm, then save again"
|
|
589
|
+
run_derivation "bundle rebuild" npm_build_runtime "$npm_bin" "${node_bin%/*}"
|
|
590
|
+
count="$(derivation_changes bundles)" || die "could not read the bundles after the rebuild"
|
|
591
|
+
case "$count" in
|
|
592
|
+
0) echo "bundles: current" ;;
|
|
593
|
+
1) echo "bundles: rebuilt (1 file changed)" ;;
|
|
594
|
+
*) echo "bundles: rebuilt ($count files changed)" ;;
|
|
595
|
+
esac
|
|
596
|
+
}
|
|
597
|
+
|
|
406
598
|
cmd_save() {
|
|
407
599
|
local message="" topic="" no_pr=0 branch base pushed="false" committed="false" pr_url="" existing_pr="" pr_number="" merged="false" pr_body="" pr_body_file=""
|
|
408
|
-
local readiness="" pr_draft="" changed_paths="" non_code="" use_pr=0
|
|
600
|
+
local readiness="" pr_draft="" changed_paths="" non_code="" use_pr=0 commit_message="" tree_was_clean=0 checks_failed=0
|
|
409
601
|
local -a create_args
|
|
410
602
|
|
|
411
603
|
while [ $# -gt 0 ]; do
|
|
@@ -450,12 +642,26 @@ cmd_save() {
|
|
|
450
642
|
echo "memory: synced"
|
|
451
643
|
fi
|
|
452
644
|
|
|
645
|
+
commit_message="$message"
|
|
646
|
+
# Installed instances carry the derived views and bundles but not the
|
|
647
|
+
# builders; /update regenerates their views.
|
|
648
|
+
if [ -f "$SCRIPT_DIR/packages/create-egregore/package.json" ]; then
|
|
649
|
+
[ -n "$(git -C "$SCRIPT_DIR" status --porcelain --untracked-files=normal 2>/dev/null | head -1)" ] \
|
|
650
|
+
|| tree_was_clean=1
|
|
651
|
+
regenerate_derived "$base"
|
|
652
|
+
# On a clean tree the regeneration makes the only changes, so they commit
|
|
653
|
+
# under their own subject; the caller's message describes committed work.
|
|
654
|
+
[ "$tree_was_clean" = "0" ] || commit_message="$DERIVED_SUBJECT"
|
|
655
|
+
else
|
|
656
|
+
printf '%s\n' "codex skills: not applicable" "specs: not applicable" "bundles: not applicable"
|
|
657
|
+
fi
|
|
658
|
+
|
|
453
659
|
branch="$(git -C "$SCRIPT_DIR" branch --show-current 2>/dev/null || echo "")"
|
|
454
660
|
if [ -n "$(git -C "$SCRIPT_DIR" status --porcelain 2>/dev/null | head -1)" ]; then
|
|
455
661
|
branch="$(ensure_working_branch "$topic")"
|
|
456
662
|
git -C "$SCRIPT_DIR" add -A >/dev/null 2>&1 || die "git add failed"
|
|
457
663
|
if ! git -C "$SCRIPT_DIR" diff --cached --quiet 2>/dev/null; then
|
|
458
|
-
egregore_commit "$SCRIPT_DIR" "$SCRIPT_DIR" "$
|
|
664
|
+
egregore_commit "$SCRIPT_DIR" "$SCRIPT_DIR" "$commit_message" --quiet || die "git commit failed"
|
|
459
665
|
committed="true"
|
|
460
666
|
fi
|
|
461
667
|
fi
|
|
@@ -486,6 +692,18 @@ cmd_save() {
|
|
|
486
692
|
if [ -n "$pr_url" ]; then
|
|
487
693
|
pr_number="$(printf '%s' "$existing_pr" | jq -r '.[0].number')"
|
|
488
694
|
pr_draft="$(printf '%s' "$existing_pr" | jq -r '.[0].isDraft')"
|
|
695
|
+
fi
|
|
696
|
+
# A PR goes ready only after the checks CI would select pass here. On a
|
|
697
|
+
# failure the work is still pushed, as a draft, so GitHub never spends
|
|
698
|
+
# a run on what this machine already saw fail. Installed instances do
|
|
699
|
+
# not ship the runner.
|
|
700
|
+
if [ "$readiness" = "--ready" ] && [ -f "$SCRIPT_DIR/bin/ci-local.py" ]; then
|
|
701
|
+
if ! python3 "$SCRIPT_DIR/bin/ci-local.py" --base "$base"; then
|
|
702
|
+
checks_failed=1
|
|
703
|
+
readiness="--draft"
|
|
704
|
+
fi
|
|
705
|
+
fi
|
|
706
|
+
if [ -n "$pr_url" ]; then
|
|
489
707
|
# Convert before push: a synchronize event must already see the draft.
|
|
490
708
|
if [ "$readiness" = "--draft" ] && [ "$pr_draft" = "false" ]; then
|
|
491
709
|
(cd "$SCRIPT_DIR" && gh pr ready "$pr_number" --undo) \
|
|
@@ -545,6 +763,10 @@ cmd_save() {
|
|
|
545
763
|
[ -n "$pr_url" ] && echo "pr: $pr_url"
|
|
546
764
|
[ -n "$pr_draft" ] && echo "pr-draft: $pr_draft"
|
|
547
765
|
[ "$merged" = "true" ] && echo "merge: non-coding, merged to $base"
|
|
766
|
+
if [ "$checks_failed" = "1" ]; then
|
|
767
|
+
echo "local checks failed: the work is pushed and the PR stays a draft; fix the checks above, then save again with --ready" >&2
|
|
768
|
+
return 1
|
|
769
|
+
fi
|
|
548
770
|
return 0
|
|
549
771
|
}
|
|
550
772
|
|
|
@@ -608,7 +830,7 @@ cmd_wrap() {
|
|
|
608
830
|
local capture_args=(--mode personal)
|
|
609
831
|
tmpd="$(mktemp -d -t egregore-agent-wrap-XXXXXX)"
|
|
610
832
|
trap 'rm -rf "$tmpd"' RETURN
|
|
611
|
-
session_id="$(
|
|
833
|
+
session_id="$(egregore_session_id "$SCRIPT_DIR")"
|
|
612
834
|
branch="$(git -C "$SCRIPT_DIR" branch --show-current 2>/dev/null || true)"
|
|
613
835
|
[ "$no_push" = "1" ] && capture_args+=(--no-push)
|
|
614
836
|
|
|
@@ -884,7 +1106,9 @@ case "${1:-}" in
|
|
|
884
1106
|
people) shift; cmd_people "$@" ;;
|
|
885
1107
|
branch) shift; cmd_branch "$@" ;;
|
|
886
1108
|
save) shift; cmd_save "$@" ;;
|
|
1109
|
+
merge) shift; exec bash "$SCRIPT_DIR/bin/merge-gate.sh" "$@" ;;
|
|
887
1110
|
autosave) shift; bash "$SCRIPT_DIR/bin/autosave.sh" "$@" ;;
|
|
1111
|
+
records) shift; bash "$SCRIPT_DIR/bin/records.sh" "$@" ;;
|
|
888
1112
|
wrap) shift; cmd_wrap "$@" ;;
|
|
889
1113
|
wrap-card) shift; render_wrap_card "$@" ;;
|
|
890
1114
|
handoff) shift; cmd_handoff "$@" ;;
|