@zerwiz/ymir 0.1.3 → 0.1.5
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/.agents/README.md +291 -0
- package/.agents/agents/bragi-marketer.md +111 -0
- package/.agents/agents/brokk.md +352 -0
- package/.agents/agents/forseti-reviewer.md +93 -0
- package/.agents/agents/frigg-consent.md +77 -0
- package/.agents/agents/groa-update.md +77 -0
- package/.agents/agents/hnoss-designer.md +69 -0
- package/.agents/agents/huginn-researcher.md +99 -0
- package/.agents/agents/jord-projects.md +78 -0
- package/.agents/agents/kvasir-scout.md +91 -0
- package/.agents/agents/mimir-planner.md +92 -0
- package/.agents/agents/muninn-stow.md +77 -0
- package/.agents/agents/saga-bearings.md +78 -0
- package/.agents/agents/sindri-developer.md +114 -0
- package/.agents/agents/snotra-documenter.md +105 -0
- package/.agents/agents/syn-recovery.md +78 -0
- package/.agents/agents/tyr-check.md +78 -0
- package/.agents/agents/urdh-hold.md +77 -0
- package/.agents/agents/volundr-smith.md +80 -0
- package/.agents/agents/vor-diagnostics.md +77 -0
- package/.agents/assets/agents/naming.md +50 -0
- package/.agents/assets/agents/registry.md +93 -0
- package/.agents/assets/agents/runtime.md +36 -0
- package/.agents/assets/agents/toon-tasks-cli.md +42 -0
- package/.agents/assets/templates/company_entity.template.md +37 -0
- package/.agents/backend/backends/cmux.sh +649 -0
- package/.agents/backend/backends/herdr-eventwait.py +157 -0
- package/.agents/backend/backends/herdr-workspace-move.py +114 -0
- package/.agents/backend/backends/herdr.sh +3386 -0
- package/.agents/backend/backends/orca.sh +290 -0
- package/.agents/backend/backends/tmux.sh +357 -0
- package/.agents/backend/backends/zellij.sh +700 -0
- package/.agents/backend/fm-afk-launch.sh +654 -0
- package/.agents/backend/fm-afk-return.sh +241 -0
- package/.agents/backend/fm-afk-start.sh +172 -0
- package/.agents/backend/fm-arm-command-policy.mjs +960 -0
- package/.agents/backend/fm-arm-pretool-check.sh +200 -0
- package/.agents/backend/fm-backend-hometag-lib.sh +52 -0
- package/.agents/backend/fm-backend.sh +981 -0
- package/.agents/backend/fm-backlog-handoff.sh +909 -0
- package/.agents/backend/fm-backlog-receive.sh +187 -0
- package/.agents/backend/fm-backlog-transition-lib.sh +779 -0
- package/.agents/backend/fm-bearings-board.sh +204 -0
- package/.agents/backend/fm-bearings-snapshot.sh +546 -0
- package/.agents/backend/fm-bootstrap.sh +1568 -0
- package/.agents/backend/fm-branch-outcome.sh +203 -0
- package/.agents/backend/fm-branch-prompt.sh +101 -0
- package/.agents/backend/fm-brief.sh +452 -0
- package/.agents/backend/fm-busy-event.sh +234 -0
- package/.agents/backend/fm-busy-lib.sh +986 -0
- package/.agents/backend/fm-captain-hold.sh +1001 -0
- package/.agents/backend/fm-cd-command-policy.mjs +153 -0
- package/.agents/backend/fm-cd-pretool-check.sh +190 -0
- package/.agents/backend/fm-check-lib.sh +74 -0
- package/.agents/backend/fm-check-register.sh +42 -0
- package/.agents/backend/fm-check-unregister.sh +52 -0
- package/.agents/backend/fm-classify-lib.sh +1770 -0
- package/.agents/backend/fm-claude-stop-autoarm.sh +334 -0
- package/.agents/backend/fm-composer-lib.sh +1416 -0
- package/.agents/backend/fm-config-inherit-lib.sh +1202 -0
- package/.agents/backend/fm-config-push.sh +254 -0
- package/.agents/backend/fm-control-lib.sh +251 -0
- package/.agents/backend/fm-control.sh +878 -0
- package/.agents/backend/fm-crew-state.sh +625 -0
- package/.agents/backend/fm-cursor-lib.sh +243 -0
- package/.agents/backend/fm-decision-hold.sh +232 -0
- package/.agents/backend/fm-doc-audience-check.sh +269 -0
- package/.agents/backend/fm-dod-lib.sh +67 -0
- package/.agents/backend/fm-ensure-agents-md.sh +253 -0
- package/.agents/backend/fm-extension-launch-barrier.mjs +129 -0
- package/.agents/backend/fm-extension.mjs +2577 -0
- package/.agents/backend/fm-extension.sh +16 -0
- package/.agents/backend/fm-ff-lib.sh +420 -0
- package/.agents/backend/fm-fleet-snapshot.sh +1463 -0
- package/.agents/backend/fm-fleet-sync.sh +458 -0
- package/.agents/backend/fm-fleet-view.sh +96 -0
- package/.agents/backend/fm-gate-refuse-lib.sh +102 -0
- package/.agents/backend/fm-guard.sh +242 -0
- package/.agents/backend/fm-harness.sh +195 -0
- package/.agents/backend/fm-herdr-ci-cleanup.sh +115 -0
- package/.agents/backend/fm-herdr-lab.sh +346 -0
- package/.agents/backend/fm-herdr-session-cleanup.sh +337 -0
- package/.agents/backend/fm-home-seed.sh +984 -0
- package/.agents/backend/fm-home-summary-refresh.sh +255 -0
- package/.agents/backend/fm-hook-host-lib.sh +36 -0
- package/.agents/backend/fm-inactive-reconcile.sh +531 -0
- package/.agents/backend/fm-inbox.sh +399 -0
- package/.agents/backend/fm-install-actionlint.sh +84 -0
- package/.agents/backend/fm-install-herdr.sh +96 -0
- package/.agents/backend/fm-install-shellcheck.sh +84 -0
- package/.agents/backend/fm-install-treehouse.sh +95 -0
- package/.agents/backend/fm-kimi-turnend-hook.sh +276 -0
- package/.agents/backend/fm-lease-lib.sh +218 -0
- package/.agents/backend/fm-lease.sh +189 -0
- package/.agents/backend/fm-line-cap-lib.sh +51 -0
- package/.agents/backend/fm-lint-workflows.sh +137 -0
- package/.agents/backend/fm-lint.sh +591 -0
- package/.agents/backend/fm-lock-lib.sh +104 -0
- package/.agents/backend/fm-lock.sh +107 -0
- package/.agents/backend/fm-marker-lib.sh +12 -0
- package/.agents/backend/fm-merge-local.sh +74 -0
- package/.agents/backend/fm-merge-outcome-lib.sh +138 -0
- package/.agents/backend/fm-nm-run-lib.sh +124 -0
- package/.agents/backend/fm-on.sh +125 -0
- package/.agents/backend/fm-operational-input.sh +253 -0
- package/.agents/backend/fm-peek.sh +46 -0
- package/.agents/backend/fm-pending-reply-lib.sh +1409 -0
- package/.agents/backend/fm-pr-check.sh +135 -0
- package/.agents/backend/fm-pr-lib.sh +1016 -0
- package/.agents/backend/fm-pr-merge.sh +707 -0
- package/.agents/backend/fm-pr-poll.sh +110 -0
- package/.agents/backend/fm-primary-scope-lib.sh +33 -0
- package/.agents/backend/fm-procevent-extension-capture.pl +259 -0
- package/.agents/backend/fm-procevent-lavish.sh +628 -0
- package/.agents/backend/fm-procevent-lib.sh +892 -0
- package/.agents/backend/fm-procevent-quota.sh +290 -0
- package/.agents/backend/fm-procevent-remote-reply.sh +577 -0
- package/.agents/backend/fm-procevent-when.sh +504 -0
- package/.agents/backend/fm-procevent.sh +1466 -0
- package/.agents/backend/fm-project-mode.sh +92 -0
- package/.agents/backend/fm-project-origin-lib.sh +180 -0
- package/.agents/backend/fm-promote.sh +282 -0
- package/.agents/backend/fm-public-followup-emit.sh +260 -0
- package/.agents/backend/fm-public-followup-lib.sh +398 -0
- package/.agents/backend/fm-public-followup.sh +1330 -0
- package/.agents/backend/fm-push-transition-lib.sh +168 -0
- package/.agents/backend/fm-quota-axi-lib.sh +93 -0
- package/.agents/backend/fm-quota-choose.sh +384 -0
- package/.agents/backend/fm-remote-delta-read.sh +189 -0
- package/.agents/backend/fm-remote-doctor.sh +800 -0
- package/.agents/backend/fm-remote-entrypoint.sh +193 -0
- package/.agents/backend/fm-remote-file.sh +234 -0
- package/.agents/backend/fm-remote-home-provision.sh +259 -0
- package/.agents/backend/fm-remote-home-seed.sh +259 -0
- package/.agents/backend/fm-remote-inherit-push.sh +90 -0
- package/.agents/backend/fm-remote-inherit.sh +179 -0
- package/.agents/backend/fm-remote-job-lib.sh +1241 -0
- package/.agents/backend/fm-remote-job-reap-orphans.sh +137 -0
- package/.agents/backend/fm-remote-job-worker.sh +1124 -0
- package/.agents/backend/fm-remote-readiness-lib.sh +44 -0
- package/.agents/backend/fm-remote-secondmate-control.sh +340 -0
- package/.agents/backend/fm-review-diff.sh +158 -0
- package/.agents/backend/fm-secondmate-charter-lib.sh +44 -0
- package/.agents/backend/fm-secondmate-nudge-lib.sh +68 -0
- package/.agents/backend/fm-secondmate-parent-lib.sh +70 -0
- package/.agents/backend/fm-secondmate-reconcile.sh +371 -0
- package/.agents/backend/fm-secondmate-registry-lib.sh +311 -0
- package/.agents/backend/fm-secondmate-report.sh +88 -0
- package/.agents/backend/fm-send.sh +1059 -0
- package/.agents/backend/fm-session-lock-lib.sh +176 -0
- package/.agents/backend/fm-session-start.sh +970 -0
- package/.agents/backend/fm-sessionstart-cursor.sh +40 -0
- package/.agents/backend/fm-sessionstart-nudge.sh +45 -0
- package/.agents/backend/fm-sessionstart-run.sh +145 -0
- package/.agents/backend/fm-spawn.sh +3153 -0
- package/.agents/backend/fm-startup-memory-budget-lib.sh +224 -0
- package/.agents/backend/fm-startup-memory-budget.sh +94 -0
- package/.agents/backend/fm-startup-network.sh +642 -0
- package/.agents/backend/fm-stow-cascade.sh +251 -0
- package/.agents/backend/fm-subagent-pretool-check.sh +207 -0
- package/.agents/backend/fm-supervise-daemon.sh +1732 -0
- package/.agents/backend/fm-supervision-instructions.sh +215 -0
- package/.agents/backend/fm-supervision-lib.sh +90 -0
- package/.agents/backend/fm-supervisor-target-lib.sh +78 -0
- package/.agents/backend/fm-tangle-lib.sh +53 -0
- package/.agents/backend/fm-task-inbox-lib.sh +402 -0
- package/.agents/backend/fm-tasks-axi-lib.sh +123 -0
- package/.agents/backend/fm-teardown.sh +2922 -0
- package/.agents/backend/fm-test-isolation-proof.sh +588 -0
- package/.agents/backend/fm-test-run.sh +2191 -0
- package/.agents/backend/fm-timeout-lib.sh +141 -0
- package/.agents/backend/fm-timing-lib.sh +179 -0
- package/.agents/backend/fm-tmux-lib.sh +291 -0
- package/.agents/backend/fm-tool-update-check.sh +898 -0
- package/.agents/backend/fm-trace-context-lib.sh +227 -0
- package/.agents/backend/fm-transition-lib.sh +103 -0
- package/.agents/backend/fm-turnend-guard-cursor.sh +391 -0
- package/.agents/backend/fm-turnend-guard-grok.sh +90 -0
- package/.agents/backend/fm-turnend-guard.sh +432 -0
- package/.agents/backend/fm-update.sh +110 -0
- package/.agents/backend/fm-vendor-auth-probe.sh +190 -0
- package/.agents/backend/fm-voice-client.py +1373 -0
- package/.agents/backend/fm-voice-relay.py +1256 -0
- package/.agents/backend/fm-wake-drain.sh +592 -0
- package/.agents/backend/fm-wake-grant.sh +127 -0
- package/.agents/backend/fm-wake-lib.sh +1849 -0
- package/.agents/backend/fm-watch-arm.sh +602 -0
- package/.agents/backend/fm-watch-checkpoint.sh +109 -0
- package/.agents/backend/fm-watch.sh +1962 -0
- package/.agents/backend/fm-x-dismiss.sh +116 -0
- package/.agents/backend/fm-x-followup.sh +286 -0
- package/.agents/backend/fm-x-lib.sh +1000 -0
- package/.agents/backend/fm-x-link.sh +234 -0
- package/.agents/backend/fm-x-poll.sh +185 -0
- package/.agents/backend/fm-x-reply.sh +385 -0
- package/.agents/backend/fm_voice_frame.py +166 -0
- package/.agents/backend/fm_voice_records.py +574 -0
- package/.agents/backend/model-bridge.py +290 -0
- package/.agents/backend/opencode-go-bridge.py +30 -0
- package/.agents/bus/README.md +12 -0
- package/.agents/bus/messages.json +1 -0
- package/.agents/config/agents.machine.example.yaml +16 -0
- package/.agents/config/agents.yaml +50 -0
- package/.agents/config/agents.yaml.example +72 -0
- package/.agents/config/crew-dispatch.json +22 -0
- package/.agents/config/cron.yaml +9 -0
- package/.agents/config/eindri-dispatch.json +67 -0
- package/.agents/config/eindri-harness +1 -0
- package/.agents/config/startup-memory-budget +1 -0
- package/.agents/config/tailscale-sync.yaml +27 -0
- package/.agents/filebrowser/.filebrowser.json +6 -0
- package/.agents/filebrowser/README.md +11 -0
- package/.agents/gateway/README.md +12 -0
- package/.agents/github/README.md +15 -0
- package/.agents/github/webhooks/.gitkeep +0 -0
- package/.agents/github/workflows/.gitkeep +0 -0
- package/.agents/harness/opencode/plugins/lib/rodd-operational-input.js +37 -0
- package/.agents/harness/opencode/plugins/package.json +4 -0
- package/.agents/harness/opencode/plugins/saga-sessionstart.js +77 -0
- package/.agents/harness/opencode/plugins/syn-cd-check.js +61 -0
- package/.agents/harness/opencode/plugins/syn-pretool-check.js +68 -0
- package/.agents/harness/opencode/plugins/syn-turnend-guard.js +105 -0
- package/.agents/harness/opencode/plugins/syn-watch-arm.js +521 -0
- package/.agents/memory/README.md +46 -0
- package/.agents/memory/kaia.engram +0 -0
- package/.agents/memory/kaia.engram-shm +0 -0
- package/.agents/memory/kaia.engram-wal +0 -0
- package/.agents/memory/runes_audit.md +5 -0
- package/.agents/memory/well/episodes.jsonl +367 -0
- package/.agents/memory/well/workspace.jsonl +27 -0
- package/.agents/migrations/0001-hodd-layout.sh +38 -0
- package/.agents/migrations/0002-a2a-mcp.sh +27 -0
- package/.agents/migrations/0003-private-data-separation.sh +111 -0
- package/.agents/migrations/0004-hoard-and-realms.sh +104 -0
- package/.agents/sandbox/Dockerfile.utgard +19 -0
- package/.agents/sandbox/README.md +14 -0
- package/.agents/sandbox/utgard.config.json +14 -0
- package/.agents/skills/README.md +59 -0
- package/.agents/skills/bragi-marketing/README.md +3 -0
- package/.agents/skills/bragi-marketing/SKILL.md +82 -0
- package/.agents/skills/eindri-homes/README.md +3 -0
- package/.agents/skills/eindri-homes/SKILL.md +291 -0
- package/.agents/skills/eindri-homes/assets/control-plane.md +122 -0
- package/.agents/skills/eindri-homes/assets/dispatch.md +80 -0
- package/.agents/skills/frigg-consent/README.md +3 -0
- package/.agents/skills/frigg-consent/SKILL.md +56 -0
- package/.agents/skills/galdr-ymirsystem/README.md +3 -0
- package/.agents/skills/galdr-ymirsystem/SKILL.md +158 -0
- package/.agents/skills/galdr-ymirsystem/assets/README.md +74 -0
- package/.agents/skills/galdr-ymirsystem/assets/brokk-distro-runtime.md +390 -0
- package/.agents/skills/galdr-ymirsystem/assets/build-method.md +113 -0
- package/.agents/skills/galdr-ymirsystem/assets/build-tool-categories.md +178 -0
- package/.agents/skills/galdr-ymirsystem/assets/eindri-orchestration.md +518 -0
- package/.agents/skills/galdr-ymirsystem/assets/eindri-profiles.md +136 -0
- package/.agents/skills/galdr-ymirsystem/assets/harness-integration/README.md +673 -0
- package/.agents/skills/galdr-ymirsystem/assets/harness-integration/claude-code.md +197 -0
- package/.agents/skills/galdr-ymirsystem/assets/harness-integration/codex.md +191 -0
- package/.agents/skills/galdr-ymirsystem/assets/harness-integration/cursor.md +193 -0
- package/.agents/skills/galdr-ymirsystem/assets/harness-integration/opencode.md +262 -0
- package/.agents/skills/galdr-ymirsystem/assets/harness-integration/pi.md +295 -0
- package/.agents/skills/galdr-ymirsystem/assets/hlidskjalf-ui.md +496 -0
- package/.agents/skills/galdr-ymirsystem/assets/installation.md +571 -0
- package/.agents/skills/galdr-ymirsystem/assets/local-models/HOST-DATA.example.md +72 -0
- package/.agents/skills/galdr-ymirsystem/assets/local-models.md +274 -0
- package/.agents/skills/galdr-ymirsystem/assets/memory-well.md +161 -0
- package/.agents/skills/galdr-ymirsystem/assets/nornir-jobs.md +377 -0
- package/.agents/skills/galdr-ymirsystem/assets/norse-naming.md +325 -0
- package/.agents/skills/galdr-ymirsystem/assets/odrerir-hall.md +129 -0
- package/.agents/skills/galdr-ymirsystem/assets/pi-boot/einherjar-spawn.schema.json +81 -0
- package/.agents/skills/galdr-ymirsystem/assets/pi-boot/herdr-profile.toml +75 -0
- package/.agents/skills/galdr-ymirsystem/assets/pi-boot/pi-profile.yml +96 -0
- package/.agents/skills/galdr-ymirsystem/assets/pi-boot/supervision-tree.yml +163 -0
- package/.agents/skills/galdr-ymirsystem/assets/pi-boot-guide.md +58 -0
- package/.agents/skills/galdr-ymirsystem/assets/porting-upstream-to-norse.md +301 -0
- package/.agents/skills/galdr-ymirsystem/assets/principles.md +385 -0
- package/.agents/skills/galdr-ymirsystem/assets/reference-adoption.md +99 -0
- package/.agents/skills/galdr-ymirsystem/assets/registry.md +379 -0
- package/.agents/skills/galdr-ymirsystem/assets/runtime-compliance.md +463 -0
- package/.agents/skills/galdr-ymirsystem/assets/runtime-components.md +553 -0
- package/.agents/skills/galdr-ymirsystem/assets/smidja.md +175 -0
- package/.agents/skills/galdr-ymirsystem/schemas/toon-schemas.md +190 -0
- package/.agents/skills/galdr-ymirsystem/scripts/README.md +45 -0
- package/.agents/skills/galdr-ymirsystem/scripts/bench-one.sh +248 -0
- package/.agents/skills/galdr-ymirsystem/scripts/compliance-check.sh +360 -0
- package/.agents/skills/galdr-ymirsystem/scripts/gpu-sample.sh +43 -0
- package/.agents/skills/galdr-ymirsystem/scripts/stop-all.sh +34 -0
- package/.agents/skills/galdr-ymirsystem/scripts/toon-check.py +188 -0
- package/.agents/skills/gjallarhorn-relay/README.md +3 -0
- package/.agents/skills/gjallarhorn-relay/SKILL.md +283 -0
- package/.agents/skills/groa-update/SKILL.md +70 -0
- package/.agents/skills/hamr-adapters/README.md +3 -0
- package/.agents/skills/hamr-adapters/SKILL.md +123 -0
- package/.agents/skills/hamr-adapters/references/common/control-and-recovery.md +37 -0
- package/.agents/skills/hamr-adapters/references/common/dispatch.md +32 -0
- package/.agents/skills/hamr-adapters/references/common/model-and-effort.md +42 -0
- package/.agents/skills/hamr-adapters/references/common/primary-hooks.md +40 -0
- package/.agents/skills/hamr-adapters/references/harness/claude.md +55 -0
- package/.agents/skills/hamr-adapters/references/harness/codex.md +43 -0
- package/.agents/skills/hamr-adapters/references/harness/cursor.md +75 -0
- package/.agents/skills/hamr-adapters/references/harness/grok.md +69 -0
- package/.agents/skills/hamr-adapters/references/harness/kimi.md +51 -0
- package/.agents/skills/hamr-adapters/references/harness/muse.md +70 -0
- package/.agents/skills/hamr-adapters/references/harness/opencode.md +42 -0
- package/.agents/skills/hamr-adapters/references/harness/pi.md +56 -0
- package/.agents/skills/herdr-panes/README.md +3 -0
- package/.agents/skills/herdr-panes/SKILL.md +92 -0
- package/.agents/skills/herdr-panes/assets/herdr-backend.md +346 -0
- package/.agents/skills/herdr-panes/assets/tmux-backend.md +115 -0
- package/.agents/skills/hnoss-design/DESIGN.md +19 -0
- package/.agents/skills/hnoss-design/README.md +3 -0
- package/.agents/skills/hnoss-design/SKILL.md +83 -0
- package/.agents/skills/hvild-afk/README.md +3 -0
- package/.agents/skills/hvild-afk/SKILL.md +241 -0
- package/.agents/skills/jord-projects/README.md +3 -0
- package/.agents/skills/jord-projects/SKILL.md +92 -0
- package/.agents/skills/lifecycle/SKILL.md +56 -0
- package/.agents/skills/lifecycle/smoke_test.sh +52 -0
- package/.agents/skills/lifecycle/start.sh +21 -0
- package/.agents/skills/lifecycle/status.sh +35 -0
- package/.agents/skills/lifecycle/stop.sh +16 -0
- package/.agents/skills/muninn-stow/README.md +3 -0
- package/.agents/skills/muninn-stow/SKILL.md +309 -0
- package/.agents/skills/no-mistakes/SKILL.md +379 -0
- package/.agents/skills/nornir-schedule/README.md +3 -0
- package/.agents/skills/nornir-schedule/SKILL.md +25 -0
- package/.agents/skills/nornir-schedule/assets/events.md +137 -0
- package/.agents/skills/nornir-schedule/assets/quota.md +131 -0
- package/.agents/skills/nsr-compliance/README.md +3 -0
- package/.agents/skills/nsr-compliance/SKILL.md +29 -0
- package/.agents/skills/nsr-compliance/assets/nsr/README.md +40 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/RULES/README.md +15 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/RULES/git-workflow.md +18 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/RULES/security.md +22 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/RULES/tech-stack.md +8 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/SKILL.md +71 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/config/core_four.yaml +16 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/gates/check_danger.sh +102 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/gates/check_wiring.sh +69 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/gates/validate_code.sh +29 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/gates/verify_docs.py +66 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/generate.sh +109 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/harness/envelopes/result_envelope.json +14 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/harness/envelopes/task_envelope.json +20 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/harness/runner.py +303 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/telemetry/logger.py +112 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/README.md +18 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/config/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/gates/README.md +12 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/gates/check_env.sh +23 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/gates/check_paths.sh +20 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/gates/check_platform.sh +23 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/harness/README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/harness/envelopes/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/installer/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/installer/install.sh +125 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/telemetry/README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/README.md +20 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/features/README.md +36 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/features/SKILL-template.md +14 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/git_ops/README.md +25 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/git_ops/SKILL.md +13 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/git_ops/create_branch.sh +6 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/git_ops/safe_commit.sh +9 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/git_ops/sync_upstream.sh +6 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/README.md +27 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/SKILL.md +15 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/smoke_test.sh +12 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/start.sh +19 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/status.sh +12 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/stop.sh +15 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/README.md +18 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/config/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/config/core_four.yaml +13 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/README.md +12 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/check_danger.sh +102 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/check_env.sh +23 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/check_paths.sh +20 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/check_platform.sh +23 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/check_wiring.sh +69 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/harness/README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/harness/envelopes/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/harness/envelopes/result_envelope.json +14 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/harness/envelopes/task_envelope.json +20 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/harness/runner.py +303 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/installer/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/installer/install.sh +125 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/telemetry/README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/telemetry/logger.py +112 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/BEST_PRACTICES/README.md +14 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/BEST_PRACTICES/api.md +17 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/BEST_PRACTICES/compliance-wiring.md +155 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/BEST_PRACTICES/frontend.md +15 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/README.md +23 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/clients/README.md +16 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/clients/template-README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/deploy.sh +49 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/envs/README.md +12 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/envs/development.env.example +17 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/envs/production.env.example +17 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/envs/staging.env.example +17 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/tenants/README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/tenants/template.env.example +8 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/README.md +26 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/agent.md +7 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/developers/dev-1.md +20 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/linux.md +9 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/macos.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/shared.md +19 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/windows.md +14 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/HOSTING/README.md +25 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/HOSTING/_template.md +41 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/HOSTING/hosting-1.md +41 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/README.md +21 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/RUNBOOK/README.md +15 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/RUNBOOK/deployment.md +19 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/RUNBOOK/disaster-recovery.md +15 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/RUNBOOK/ops-tasks.md +14 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/features/README.md +16 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/project-skills.md +146 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/research/README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/research/software-compliance-research.md +269 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/working-with-agents.md +260 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/AGENTS.md +38 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/ARCHITECTURE.md +36 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/BEST_PRACTICES.md +27 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/CI_CD.md +23 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/FEATURES.md +15 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/README.md +22 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/RULES.md +37 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/STRUCTURE.md +45 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/TECH_STACK.md +28 -0
- package/.agents/skills/nsr-compliance/assets/nsr/scaffold-spec.md +63 -0
- package/.agents/skills/nsr-compliance/assets/nsr/scripts/scaffold.sh +103 -0
- package/.agents/skills/nsr-compliance/assets/nsr/scripts/validate.sh +52 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/SKILL.md +71 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/config/core_four.yaml +16 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/gates/check_danger.sh +102 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/gates/check_wiring.sh +69 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/gates/validate_code.sh +29 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/gates/verify_docs.py +66 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/generate.sh +109 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/harness/envelopes/result_envelope.json +14 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/harness/envelopes/task_envelope.json +20 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/harness/runner.py +303 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/telemetry/logger.py +112 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/README.md +18 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/config/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/gates/README.md +12 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/gates/check_env.sh +23 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/gates/check_paths.sh +20 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/gates/check_platform.sh +23 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/harness/README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/harness/envelopes/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/installer/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/installer/install.sh +125 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/telemetry/README.md +11 -0
- package/.agents/skills/pr-ops/README.md +3 -0
- package/.agents/skills/pr-ops/SKILL.md +109 -0
- package/.agents/skills/ratatoskr-a2a/README.md +3 -0
- package/.agents/skills/ratatoskr-a2a/SKILL.md +148 -0
- package/.agents/skills/rules-check-drift/SKILL.md +81 -0
- package/.agents/skills/saga-bearings/README.md +3 -0
- package/.agents/skills/saga-bearings/SKILL.md +26 -0
- package/.agents/skills/saga-bearings/assets/bearings.md +161 -0
- package/.agents/skills/saga-bearings/assets/board-template.html +731 -0
- package/.agents/skills/saga-bearings/assets/recap.md +56 -0
- package/.agents/skills/syn-recovery/README.md +3 -0
- package/.agents/skills/syn-recovery/SKILL.md +54 -0
- package/.agents/skills/tyr-check/README.md +3 -0
- package/.agents/skills/tyr-check/SKILL.md +218 -0
- package/.agents/skills/urdh-hold/README.md +3 -0
- package/.agents/skills/urdh-hold/SKILL.md +25 -0
- package/.agents/skills/urdh-hold/assets/decisions.md +15 -0
- package/.agents/skills/urdh-hold/assets/hold.md +54 -0
- package/.agents/skills/vor-diagnostics/README.md +3 -0
- package/.agents/skills/vor-diagnostics/SKILL.md +68 -0
- package/.agents/skills/ymir-host/README.md +3 -0
- package/.agents/skills/ymir-host/SKILL.md +34 -0
- package/.agents/skills/ymir-host/assets/desktop.md +36 -0
- package/.agents/skills/ymir-host/assets/omarchy.md +297 -0
- package/.agents/skills/ymir-host/assets/runbooks.md +15 -0
- package/.agents/skills/ymir-host/assets/thjazi.md +220 -0
- package/.agents/skills/ymir-host/assets/update.md +64 -0
- package/.agents/tests/assets/board-render-harness.mjs +117 -0
- package/.agents/tests/cmux-test-safety.sh +51 -0
- package/.agents/tests/fixtures.sh +291 -0
- package/.agents/tests/fm-afk-inject-e2e.test.sh +428 -0
- package/.agents/tests/fm-afk-inject-herdr-e2e.test.sh +536 -0
- package/.agents/tests/fm-afk-launch.test.sh +961 -0
- package/.agents/tests/fm-afk-pi-herdr-return-e2e.test.sh +297 -0
- package/.agents/tests/fm-afk-return.test.sh +283 -0
- package/.agents/tests/fm-arm-pretool-check.test.sh +482 -0
- package/.agents/tests/fm-ask-user-authority.test.sh +42 -0
- package/.agents/tests/fm-backend-autodetect-smoke.test.sh +176 -0
- package/.agents/tests/fm-backend-cmux-smoke.test.sh +188 -0
- package/.agents/tests/fm-backend-cmux.test.sh +1166 -0
- package/.agents/tests/fm-backend-herdr-eventwait-smoke.test.sh +136 -0
- package/.agents/tests/fm-backend-herdr-eventwait.test.py +106 -0
- package/.agents/tests/fm-backend-herdr-focus-flash-e2e.test.sh +409 -0
- package/.agents/tests/fm-backend-herdr-launcher-workspace-e2e.test.sh +437 -0
- package/.agents/tests/fm-backend-herdr-presentation-e2e.test.sh +1424 -0
- package/.agents/tests/fm-backend-herdr-prune-safety-e2e.test.sh +180 -0
- package/.agents/tests/fm-backend-herdr-respawn-idem-e2e.test.sh +182 -0
- package/.agents/tests/fm-backend-herdr-smoke.test.sh +355 -0
- package/.agents/tests/fm-backend-herdr-workspace-per-home-e2e.test.sh +251 -0
- package/.agents/tests/fm-backend-herdr.test.sh +4606 -0
- package/.agents/tests/fm-backend-orca.test.sh +1357 -0
- package/.agents/tests/fm-backend-tmux-smoke.test.sh +173 -0
- package/.agents/tests/fm-backend-zellij-smoke.test.sh +205 -0
- package/.agents/tests/fm-backend-zellij.test.sh +1360 -0
- package/.agents/tests/fm-backend.test.sh +1142 -0
- package/.agents/tests/fm-backlog-atomicity.test.sh +2302 -0
- package/.agents/tests/fm-backlog-handoff.test.sh +1360 -0
- package/.agents/tests/fm-bearings-board-render.test.sh +135 -0
- package/.agents/tests/fm-bearings-board.test.sh +414 -0
- package/.agents/tests/fm-bearings-snapshot.test.sh +1990 -0
- package/.agents/tests/fm-bootstrap-network-parallel.test.sh +316 -0
- package/.agents/tests/fm-bootstrap.test.sh +1178 -0
- package/.agents/tests/fm-branch-supervision.test.sh +552 -0
- package/.agents/tests/fm-brief.test.sh +785 -0
- package/.agents/tests/fm-busy-adapter-wiring.test.sh +324 -0
- package/.agents/tests/fm-busy-state.test.sh +465 -0
- package/.agents/tests/fm-calm-pi-extension.test.sh +3979 -0
- package/.agents/tests/fm-captain-hold-lifecycle.test.sh +1187 -0
- package/.agents/tests/fm-cd-pretool-check.test.sh +400 -0
- package/.agents/tests/fm-check-unregister.test.sh +198 -0
- package/.agents/tests/fm-classify-corr-token.test.sh +543 -0
- package/.agents/tests/fm-classify-decision-key.test.sh +340 -0
- package/.agents/tests/fm-claude-stop-autoarm-live-e2e.test.sh +164 -0
- package/.agents/tests/fm-claude-stop-autoarm.test.sh +1190 -0
- package/.agents/tests/fm-cmux-claude-composer-live-e2e.test.sh +110 -0
- package/.agents/tests/fm-codex-continuity-live-e2e.test.sh +55 -0
- package/.agents/tests/fm-composer-ghost.test.sh +716 -0
- package/.agents/tests/fm-composer-lib.test.sh +666 -0
- package/.agents/tests/fm-composer-matrix-live-e2e.test.sh +220 -0
- package/.agents/tests/fm-control-herdr-smoke.test.sh +149 -0
- package/.agents/tests/fm-control-relaunch.test.sh +1530 -0
- package/.agents/tests/fm-control.test.sh +910 -0
- package/.agents/tests/fm-crew-state.test.sh +1610 -0
- package/.agents/tests/fm-cursor-harness.test.sh +404 -0
- package/.agents/tests/fm-cursor-primary-live-e2e.test.sh +217 -0
- package/.agents/tests/fm-cursor-primary.test.sh +708 -0
- package/.agents/tests/fm-daemon.test.sh +2740 -0
- package/.agents/tests/fm-documentation-audiences.test.sh +141 -0
- package/.agents/tests/fm-ensure-agents-md.test.sh +371 -0
- package/.agents/tests/fm-extension-binding.test.sh +2187 -0
- package/.agents/tests/fm-fleet-snapshot-view.test.sh +816 -0
- package/.agents/tests/fm-fleet-sync.test.sh +721 -0
- package/.agents/tests/fm-gate-refuse.test.sh +356 -0
- package/.agents/tests/fm-gitignore-config.test.sh +89 -0
- package/.agents/tests/fm-gotmp.test.sh +230 -0
- package/.agents/tests/fm-grok-continuity-live-e2e.test.sh +112 -0
- package/.agents/tests/fm-grok-harness.test.sh +117 -0
- package/.agents/tests/fm-grok-stop-live-e2e.test.sh +219 -0
- package/.agents/tests/fm-guard-stale-banner.test.sh +709 -0
- package/.agents/tests/fm-harness-adapter-instructions-live-e2e.test.sh +134 -0
- package/.agents/tests/fm-harness-adapter-references.test.sh +30 -0
- package/.agents/tests/fm-harness-liveness-drift-live-e2e.test.sh +151 -0
- package/.agents/tests/fm-herdr-lab.test.sh +243 -0
- package/.agents/tests/fm-herdr-session-cleanup-e2e.test.sh +146 -0
- package/.agents/tests/fm-herdr-session-cleanup.test.sh +329 -0
- package/.agents/tests/fm-herdr-submit-confirm-live-e2e.test.sh +125 -0
- package/.agents/tests/fm-herdr-version-floor-live-e2e.test.sh +144 -0
- package/.agents/tests/fm-home-summary-refresh.test.sh +971 -0
- package/.agents/tests/fm-inactive-reconcile.test.sh +485 -0
- package/.agents/tests/fm-kimi-harness.test.sh +687 -0
- package/.agents/tests/fm-lint-workflows.test.sh +532 -0
- package/.agents/tests/fm-lint.test.sh +1023 -0
- package/.agents/tests/fm-muse-harness.test.sh +932 -0
- package/.agents/tests/fm-muse-signals-live-e2e.test.sh +205 -0
- package/.agents/tests/fm-no-mistakes-required.test.sh +72 -0
- package/.agents/tests/fm-on.test.sh +507 -0
- package/.agents/tests/fm-opencode-primary-live-e2e.test.sh +357 -0
- package/.agents/tests/fm-operational-input.test.sh +160 -0
- package/.agents/tests/fm-peek-remote.test.sh +110 -0
- package/.agents/tests/fm-pending-reply.test.sh +1288 -0
- package/.agents/tests/fm-pi-branch-extension.test.sh +3182 -0
- package/.agents/tests/fm-pi-branch-live-e2e.test.sh +527 -0
- package/.agents/tests/fm-pi-primary-live-e2e.test.sh +345 -0
- package/.agents/tests/fm-pi-primary-types.test.sh +68 -0
- package/.agents/tests/fm-pi-watch-extension.test.sh +2843 -0
- package/.agents/tests/fm-pr-check-security.test.sh +2140 -0
- package/.agents/tests/fm-pr-merge.test.sh +2135 -0
- package/.agents/tests/fm-procevent-quota.test.sh +225 -0
- package/.agents/tests/fm-procevent-when.test.sh +406 -0
- package/.agents/tests/fm-procevent.test.sh +1745 -0
- package/.agents/tests/fm-project-origin.test.sh +110 -0
- package/.agents/tests/fm-public-followup.test.sh +2272 -0
- package/.agents/tests/fm-quota-array-dispatch-live-e2e.test.sh +526 -0
- package/.agents/tests/fm-quota-choose.test.sh +626 -0
- package/.agents/tests/fm-remote-backlog-handoff.test.sh +453 -0
- package/.agents/tests/fm-remote-doctor.test.sh +625 -0
- package/.agents/tests/fm-remote-entrypoint.test.sh +59 -0
- package/.agents/tests/fm-remote-job-orphan-reap.test.sh +205 -0
- package/.agents/tests/fm-remote-job.test.sh +768 -0
- package/.agents/tests/fm-remote-reply.test.sh +520 -0
- package/.agents/tests/fm-remote-secondmate-lifecycle-e2e.test.sh +1256 -0
- package/.agents/tests/fm-remote-secondmate-parent-binding.test.sh +326 -0
- package/.agents/tests/fm-remote-secondmate-trace-context.test.sh +310 -0
- package/.agents/tests/fm-remote-transport-lanes.test.sh +431 -0
- package/.agents/tests/fm-review-diff.test.sh +176 -0
- package/.agents/tests/fm-secondmate-harness.test.sh +2600 -0
- package/.agents/tests/fm-secondmate-lifecycle-e2e.test.sh +259 -0
- package/.agents/tests/fm-secondmate-liveness.test.sh +559 -0
- package/.agents/tests/fm-secondmate-reconcile.test.sh +732 -0
- package/.agents/tests/fm-secondmate-safety.test.sh +2972 -0
- package/.agents/tests/fm-secondmate-sync.test.sh +913 -0
- package/.agents/tests/fm-send-inbox-doorbell-live-e2e.test.sh +206 -0
- package/.agents/tests/fm-send-inbox.test.sh +352 -0
- package/.agents/tests/fm-send-popup-settle.test.sh +167 -0
- package/.agents/tests/fm-send-remote-delivery.test.sh +796 -0
- package/.agents/tests/fm-send-resolve-key.test.sh +551 -0
- package/.agents/tests/fm-send-secondmate-marker-herdr-e2e.test.sh +187 -0
- package/.agents/tests/fm-send-secondmate-marker.test.sh +278 -0
- package/.agents/tests/fm-send-settle.test.sh +147 -0
- package/.agents/tests/fm-send-strict.test.sh +241 -0
- package/.agents/tests/fm-session-lock-ancestry.test.sh +365 -0
- package/.agents/tests/fm-session-start.test.sh +2515 -0
- package/.agents/tests/fm-sessionstart-hook-live-e2e.test.sh +631 -0
- package/.agents/tests/fm-sessionstart-instruction-refresh-live-e2e.test.sh +230 -0
- package/.agents/tests/fm-sessionstart-nudge.test.sh +1039 -0
- package/.agents/tests/fm-shared-captain-inheritance.test.sh +404 -0
- package/.agents/tests/fm-spawn-batch.test.sh +148 -0
- package/.agents/tests/fm-spawn-dispatch-profile.test.sh +827 -0
- package/.agents/tests/fm-spawn-pool-base-freshen.test.sh +440 -0
- package/.agents/tests/fm-spawn-worktree-settle.test.sh +147 -0
- package/.agents/tests/fm-startup-memory-budget.test.sh +333 -0
- package/.agents/tests/fm-startup-network.test.sh +712 -0
- package/.agents/tests/fm-stow-cascade.test.sh +370 -0
- package/.agents/tests/fm-subagent-pretool-check.test.sh +291 -0
- package/.agents/tests/fm-supervision-events.test.sh +156 -0
- package/.agents/tests/fm-supervision-instructions.test.sh +189 -0
- package/.agents/tests/fm-tangle-guard.test.sh +277 -0
- package/.agents/tests/fm-task-delivery.test.sh +420 -0
- package/.agents/tests/fm-task-inbox.test.sh +513 -0
- package/.agents/tests/fm-teardown-endpoint-safety.test.sh +374 -0
- package/.agents/tests/fm-teardown.test.sh +2665 -0
- package/.agents/tests/fm-test-fixture-cleanup.test.sh +172 -0
- package/.agents/tests/fm-test-fixtures.test.sh +132 -0
- package/.agents/tests/fm-test-isolation-proof.test.sh +278 -0
- package/.agents/tests/fm-test-run.test.sh +1196 -0
- package/.agents/tests/fm-tmux-agent-liveness.test.sh +354 -0
- package/.agents/tests/fm-tmux-submit-busy.test.sh +340 -0
- package/.agents/tests/fm-tool-update-check.test.sh +1044 -0
- package/.agents/tests/fm-trace-context-lib.test.sh +253 -0
- package/.agents/tests/fm-trace-context-spawn.test.sh +581 -0
- package/.agents/tests/fm-transition-lib.test.sh +54 -0
- package/.agents/tests/fm-turnend-guard.test.sh +1822 -0
- package/.agents/tests/fm-update.test.sh +304 -0
- package/.agents/tests/fm-vendor-auth-probe.test.sh +395 -0
- package/.agents/tests/fm-voice-relay.test.sh +4741 -0
- package/.agents/tests/fm-wake-daemon-lifecycle-e2e.test.sh +171 -0
- package/.agents/tests/fm-wake-drain-open-decisions-cursor.test.sh +356 -0
- package/.agents/tests/fm-wake-drain-open-decisions.test.sh +226 -0
- package/.agents/tests/fm-wake-drain-unread-status.test.sh +379 -0
- package/.agents/tests/fm-wake-queue.test.sh +1224 -0
- package/.agents/tests/fm-watch-arm.test.sh +821 -0
- package/.agents/tests/fm-watch-checkpoint.test.sh +87 -0
- package/.agents/tests/fm-watch-recovery-loop.test.sh +223 -0
- package/.agents/tests/fm-watch-triage.test.sh +3889 -0
- package/.agents/tests/fm-watcher-lock.test.sh +1133 -0
- package/.agents/tests/fm-x-mode.test.sh +3042 -0
- package/.agents/tests/gleipnir-guard-pretool-check.test.sh +51 -0
- package/.agents/tests/gleipnir-machine-lock.test.sh +130 -0
- package/.agents/tests/herdr-test-safety.sh +42 -0
- package/.agents/tests/lib.sh +315 -0
- package/.agents/tests/remote-herdr-fixture.sh +125 -0
- package/.agents/tests/secondmate-helpers.sh +193 -0
- package/.agents/tests/smoke.test.sh +93 -0
- package/.agents/tests/wake-helpers.sh +338 -0
- package/.agents/tests/zellij-test-safety.sh +60 -0
- package/.agents/tools/README.md +10 -0
- package/.agents/tools/bin/tasks-cli +267 -0
- package/.agents/tools/tasks-cli.ts +216 -0
- package/AGENTS.md +454 -0
- package/CHANGELOG.md +881 -0
- package/LICENSE +1 -1
- package/NOTICE +63 -0
- package/README.md +113 -39
- package/RULES/01-domains.md +51 -0
- package/RULES/02-agents.md +78 -0
- package/RULES/03-houses.md +61 -0
- package/RULES/04-hoard.md +65 -0
- package/RULES/05-platforms.md +67 -0
- package/RULES/06-append-only.md +58 -0
- package/RULES/07-config.md +45 -0
- package/RULES/08-delivery-gate.md +75 -0
- package/RULES/README.md +20 -0
- package/bin/README.md +107 -0
- package/bin/a2a-mcp.sh +98 -0
- package/bin/a2a-serve.py +103 -0
- package/bin/a2a-serve.sh +8 -0
- package/bin/a2a-talk.sh +50 -0
- package/bin/a2abridge-ensure.sh +108 -0
- package/bin/agent-run.sh +43 -0
- package/bin/agents-config.sh +233 -0
- package/bin/apodex-smoke-test.sh +92 -0
- package/bin/bifrost-bridge.sh +112 -0
- package/bin/bifrost-ingress.sh +77 -0
- package/bin/bootstrap-macos.sh +107 -0
- package/bin/bootstrap-windows.ps1 +112 -0
- package/bin/branch-guard.sh +64 -0
- package/bin/brokk +73 -0
- package/bin/brokk-classify-lib.sh +1770 -0
- package/bin/brokk-lease-lib.sh +222 -0
- package/bin/brokk-lease.sh +193 -0
- package/bin/brokk-lint.sh +65 -0
- package/bin/brokk-send.sh +38 -0
- package/bin/brokk-update.sh +9 -0
- package/bin/brokk-wake-grant.sh +127 -0
- package/bin/brokk-wake-lib.sh +1849 -0
- package/bin/changelog-guard.sh +165 -0
- package/bin/crash-sense.sh +160 -0
- package/bin/desktop-place.sh +224 -0
- package/bin/docs-guard.sh +39 -0
- package/bin/editor-place.sh +207 -0
- package/bin/eindri-acclaim.sh +34 -0
- package/bin/eindri-control.sh +28 -0
- package/bin/eindri-role.sh +83 -0
- package/bin/eindri-seen.sh +41 -0
- package/bin/eindri-send.sh +15 -0
- package/bin/eindri-start.sh +85 -0
- package/bin/eindri-watch.sh +57 -0
- package/bin/einherjar-spawn.sh +576 -0
- package/bin/eir-doctor.sh +112 -0
- package/bin/erindi-brief.sh +271 -0
- package/bin/fleet-apply.sh +68 -0
- package/bin/github-deploy.sh +81 -0
- package/bin/gjallarhorn-expose.sh +102 -0
- package/bin/gjallarhorn-notify.sh +58 -0
- package/bin/gjallarhorn-purge.sh +54 -0
- package/bin/gjallarhorn-tunnel.sh +72 -0
- package/bin/gleipnir-lock-lib.sh +284 -0
- package/bin/groa-update.sh +122 -0
- package/bin/hall-snapshot.sh +92 -0
- package/bin/hamr-harness.sh +246 -0
- package/bin/heimdall-ssh-keys.sh +374 -0
- package/bin/herdr-agents.py +44 -0
- package/bin/herdr-ensure.sh +104 -0
- package/bin/herdr-run.sh +431 -0
- package/bin/hermes-ensure.sh +88 -0
- package/bin/hoard-lib.sh +25 -0
- package/bin/hodd.sh +78 -0
- package/bin/host-sense.sh +199 -0
- package/bin/huginn-research-worker.sh +108 -0
- package/bin/local-model-lock.sh +51 -0
- package/bin/mimir-bridge.py +226 -0
- package/bin/mimir-bridge.sh +87 -0
- package/bin/mimir-ingest.sh +131 -0
- package/bin/mimir.sh +113 -0
- package/bin/mjollnir-webhook.sh +59 -0
- package/bin/mjollnir.sh +85 -0
- package/bin/model-hardware.sh +82 -0
- package/bin/model-resolve.sh +147 -0
- package/bin/models-detect.sh +178 -0
- package/bin/nornir-cron-start.sh +162 -0
- package/bin/nornir-job-daily-briefing.sh +191 -0
- package/bin/nornir-job-git-sync.sh +152 -0
- package/bin/nornir-job-memory-housekeeping.sh +114 -0
- package/bin/nornir-job-observer.sh +166 -0
- package/bin/nornir-job-skillopt-sleep.sh +76 -0
- package/bin/omarchy-hook-install.sh +60 -0
- package/bin/omarchy-install.sh +148 -0
- package/bin/omarchy-plugins.sh +174 -0
- package/bin/omarchy-sense.sh +149 -0
- package/bin/perm-guard.sh +30 -0
- package/bin/pi-agent.sh +68 -0
- package/bin/pi-ensure.sh +77 -0
- package/bin/pi-local.sh +37 -0
- package/bin/pi-seat.sh +63 -0
- package/bin/prereq-ensure.sh +166 -0
- package/bin/private-guard.sh +38 -0
- package/bin/project-git.sh +55 -0
- package/bin/public-guard.sh +70 -0
- package/bin/ratatoskr.sh +49 -0
- package/bin/realm-lib.sh +32 -0
- package/bin/repo-scrub.sh +62 -0
- package/bin/rodd-operational-input.sh +250 -0
- package/bin/runes-append.sh +198 -0
- package/bin/saga-session-start.sh +172 -0
- package/bin/saga-sessionstart-run.sh +79 -0
- package/bin/saga-wake-drain.sh +41 -0
- package/bin/secret-guard.sh +63 -0
- package/bin/sessrumnir-ensure.sh +100 -0
- package/bin/sessrumnir-sync.sh +237 -0
- package/bin/sessrumnir.sh +91 -0
- package/bin/skillopt-setup.sh +76 -0
- package/bin/skuld-branch-outcome.sh +203 -0
- package/bin/skuld-branch-prompt.sh +101 -0
- package/bin/smidja-bootstrap.sh +90 -0
- package/bin/smidja-observe.sh +86 -0
- package/bin/syn-arm-pretool-check.sh +57 -0
- package/bin/syn-asset-pretool-check.sh +76 -0
- package/bin/syn-cd-pretool-check.sh +28 -0
- package/bin/syn-guard-pretool-check.sh +83 -0
- package/bin/syn-turnend-guard.sh +36 -0
- package/bin/syn-watch-arm.sh +99 -0
- package/bin/tailscale-sync.sh +190 -0
- package/bin/telegram-bot.sh +69 -0
- package/bin/toolchain.sh +74 -0
- package/bin/utgard.sh +111 -0
- package/bin/valhalla.sh +115 -0
- package/bin/valknut-load.sh +260 -0
- package/bin/vor-crew-state.sh +124 -0
- package/bin/wedge-notify.sh +47 -0
- package/bin/workspace-provision.sh +80 -0
- package/bin/workspace-rag.sh +150 -0
- package/bin/wyrd-db.sh +47 -0
- package/bin/yggdrasil.sh +152 -0
- package/bin/ymir-edit.sh +145 -0
- package/bin/ymir-install.sh +641 -0
- package/bin/ymir-invite.sh +93 -0
- package/bin/ymir-isolation.sh +88 -0
- package/bin/ymir-migrate.sh +61 -0
- package/bin/ymir-platform.sh +348 -0
- package/bin/ymir-say.sh +97 -0
- package/bin/ymir-setup-auth.sh +108 -0
- package/bin/ymir-validate.sh +173 -0
- package/bin/ymir.js +74 -16
- package/docs/Architecture.md +339 -0
- package/docs/design.md +351 -0
- package/docs/installations/README.md +63 -0
- package/docs/installations/ymir-home.md +93 -0
- package/docs/integration.md +105 -0
- package/docs/lore.md +1056 -0
- package/docs/research/agent-harnesses.md +290 -0
- package/docs/runbooks/README.md +19 -0
- package/docs/runbooks/a2a.md +91 -0
- package/docs/runbooks/agent-permissions.md +99 -0
- package/docs/runbooks/agents.md +57 -0
- package/docs/runbooks/models.md +69 -0
- package/docs/runbooks/realm-onboarding.md +60 -0
- package/docs/runbooks/secrets-and-hoard.md +60 -0
- package/docs/runbooks/updates-and-migrations.md +110 -0
- package/docs/runbooks/worktrees-isolation.md +72 -0
- package/docs/session-start.md +105 -0
- package/docs/skillopt-integration.md +321 -0
- package/docs/sync-system.md +66 -0
- package/docs/workspaces.md +104 -0
- package/docs/ymir-rut.md +260 -0
- package/package.json +44 -14
- package/packaging/build.sh +74 -0
- package/packaging/macos/Ymir Installer.command +43 -0
- package/packaging/windows/ymir-setup.nsi +74 -0
- package/scripts/README.md +22 -0
- package/scripts/electron.sh +210 -0
- package/scripts/start.sh +167 -0
- package/scripts/stop.sh +113 -0
- package/install.sh +0 -35
|
@@ -0,0 +1,553 @@
|
|
|
1
|
+
# Runtime Components — complete inventory of the Brokk distro runtime
|
|
2
|
+
|
|
3
|
+
> **Purpose:** Enumerate every runtime component under `bin/`, `.pi/extensions/`, `.opencode/plugins/`, the harness hook files, and the `config/` + `data/` home, with each component's Norse role, purpose, usage, environment, exit codes, and what it calls — precise enough for an agent to operate or rebuild any part from this page alone.
|
|
4
|
+
|
|
5
|
+
This is the companion reference to [`harness-integration/README.md`](harness-integration/README.md) and plan [`docs/plans/29-brokk-distro-runtime.md`](../../../../docs/plans/29-brokk-distro-runtime.md). The **code is authoritative**; disagreements are listed in §11.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 1. The home model
|
|
10
|
+
|
|
11
|
+
Ymir separates **tracked code** from **private state**, exactly as the upstream distro pattern does.
|
|
12
|
+
|
|
13
|
+
| Layer | Location | Tracked? | Contents |
|
|
14
|
+
|---|---|---|---|
|
|
15
|
+
| Root | `BROKK_ROOT_OVERRIDE` → repo root | yes | `bin/`, `AGENTS.md`, `opencode.json`, `.agents/`, `.pi/`, `.opencode/` |
|
|
16
|
+
| Home | `BROKK_HOME` → `BROKK_ROOT_OVERRIDE` or repo root | — | the runtime's private home |
|
|
17
|
+
| Data | `$BROKK_HOME/data` | gitignored | operator/projects/learnings/realm/backlog, per-task briefs |
|
|
18
|
+
| State | `$BROKK_HOME/state` | gitignored | lock, metas, status logs, wake queue, cron, runes lock |
|
|
19
|
+
| Config | `$BROKK_HOME/config` | gitignored | cron.yaml, eindri-harness, eindri-dispatch.json |
|
|
20
|
+
| Worktrees | `$BROKK_HOME/.yggdrasil/<id>` | gitignored | per-Eindri git worktrees |
|
|
21
|
+
|
|
22
|
+
`.gitignore` enforces the privacy: `data/*` (except `*.example`), `state/*`, `config/*`, `.yggdrasil/`, `svartalfaheim/*/.env.realm`, `.agents/memory/*.db`.
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## 2. Environment contract (all components)
|
|
27
|
+
|
|
28
|
+
| Variable | Meaning | Default | Used by |
|
|
29
|
+
|---|---|---|---|
|
|
30
|
+
| `BROKK_ROOT_OVERRIDE` | tracked code root | script-relative repo root | all scripts |
|
|
31
|
+
| `BROKK_HOME` | private home | `BROKK_ROOT_OVERRIDE` or root | all scripts |
|
|
32
|
+
| `BROKK_STATE_OVERRIDE` | state dir | `$BROKK_HOME/state` | all scripts |
|
|
33
|
+
| `BROKK_DATA_OVERRIDE` | data dir | `$BROKK_HOME/data` | brief, jobs, spawn |
|
|
34
|
+
| `BROKK_CONFIG_OVERRIDE` | config dir | `$BROKK_HOME/config` | hamr, spawn, cron |
|
|
35
|
+
| `BROKK_REALM` | active realm | `data/realm.md` line 1, else `way-of` | digest, jobs |
|
|
36
|
+
| `BROKK_SESSION_PID` | live harness pid bound to the lock | `${BROKK_SESSION_PID:-$$}` | lock, Pi/OpenCode adapters |
|
|
37
|
+
| `BROKK_PROC_ROOT_OVERRIDE` | `/proc` root for Cursor identity | `/proc` | hamr |
|
|
38
|
+
| `BROKK_PI_HARNESS` | `pi-signed` selects the signed Pi identity | unset | hamr |
|
|
39
|
+
| `BROKK_SESSIONSTART_INELIGIBLE` | `1` makes Pi's prerequisite exit 3 | unset | sessionstart-run |
|
|
40
|
+
| `RODD_OPERATIONAL_INPUT_SCRIPT` | override the Rödd CLI path | adapter-relative | Pi Rödd lib |
|
|
41
|
+
|
|
42
|
+
Per-component variable lists appear in each section below.
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## 3. `bin/` script inventory
|
|
47
|
+
|
|
48
|
+
### 3.1 Summary table
|
|
49
|
+
|
|
50
|
+
| Script | Norse | Purpose | Usage | Exit |
|
|
51
|
+
|---|---|---|---|---|
|
|
52
|
+
| `bin/saga-session-start.sh` | **Sága** | one-command session-start digest (8 stages) | `saga-session-start.sh` | 0 |
|
|
53
|
+
| `bin/saga-sessionstart-run.sh` | **Sága** | session-open router for run-tier harnesses | `saga-sessionstart-run.sh [--source <s>] [--pi-prerequisite]` | 0 (3 if Pi stand-down) |
|
|
54
|
+
| `bin/saga-wake-drain.sh` | **Sága** | present durable wakes + open decisions | `saga-wake-drain.sh` | 0 |
|
|
55
|
+
| `bin/syn-watch-arm.sh` | **Sýn** | arm one watcher cycle | `syn-watch-arm.sh --restart` / `--handling-delivered <g> --watcher-pid <p>` | 0 |
|
|
56
|
+
| `bin/syn-turnend-guard.sh` | **Sýn** | refuse a blind turn end | `syn-turnend-guard.sh [--claude]` | 0 healthy/inert; 2 off |
|
|
57
|
+
| `bin/syn-arm-pretool-check.sh` | **Sýn** | deny backgrounding/detaching the arm (real `&`/nohup/setsid/disown; `&&` and `bash -n` allowed) | `... --command <cmd>` | 0 allow; 2 block |
|
|
58
|
+
| `bin/syn-cd-pretool-check.sh` | **Sýn** | deny escaping `cd` | `... --command <cmd>` | 0 allow; 2 block |
|
|
59
|
+
| `bin/syn-guard-pretool-check.sh` | **Sýn** | deny destructive shapes against the lock, supervision markers, the append-only Runes ledger, the guard machinery, secrets, and the fleet registries | `... --command <cmd>` | 0 allow; 2 block |
|
|
60
|
+
| `bin/gleipnir-lock-lib.sh` | **Gleipnir** | session lock library: machine-global for the primary, per-home for an Eindri-home (`state/.lock-path` pointer) | source only | fn return 0/1 |
|
|
61
|
+
| `bin/rodd-operational-input.sh` | **Rödd** | operational wire encode/kind/classify/body | `... encode <kind>` \| `kind` \| `classify` \| `body` \| `--help` | 0; 1 non-match; 2 usage |
|
|
62
|
+
| `bin/hamr-harness.sh` | **Hamr** | detect harness identity | `hamr-harness.sh` \| `eindri` \| `eindri-model` \| `eindri-effort` | 0 |
|
|
63
|
+
| `bin/einherjar-spawn.sh` | **Einherjar** | spawn an Eindri worker | `einherjar-spawn.sh <id> <project> --mode <m> [flags]` | 0; 1 error; 2 usage |
|
|
64
|
+
| `bin/erindi-brief.sh` | **Erindi** | scaffold a worker brief | `erindi-brief.sh <id> <repo> --mode <m>` \| `--scout` \| `--relaunch` | 0; 1 error; 2 usage |
|
|
65
|
+
| `bin/vor-crew-state.sh` | **Vör** | read a worker's current state | `vor-crew-state.sh <id>` | 0; 2 usage |
|
|
66
|
+
| `bin/nornir-cron-start.sh` | **Nornir** | ensure scheduled jobs run (idempotent) | `nornir-cron-start.sh [--status\|--stop]` | 0 |
|
|
67
|
+
| `bin/nornir-job-daily-briefing.sh` | **Sága** | 07:00 deterministic briefing | `nornir-job-daily-briefing.sh` | 0; 1 IO |
|
|
68
|
+
| `bin/nornir-job-git-sync.sh` | **Yggdrasil** | safe git fetch/push | `nornir-job-git-sync.sh` | 0; 1 git missing; 2 bad mode |
|
|
69
|
+
| `bin/nornir-job-memory-housekeeping.sh` | **Muninn** | backup-gated memory snapshot/prune | `nornir-job-memory-housekeeping.sh` | 0 |
|
|
70
|
+
| `bin/nornir-job-observer.sh` | **Huginn** | read-only observation of command + Brokk | `nornir-job-observer.sh` | 0 |
|
|
71
|
+
| `bin/runes-append.sh` | **Runes** | append-only chained audit ledger | `... <actor> <event> [--order W] [--realm R] --message "..."` \| `--help` | 0; 1 IO; 2 usage |
|
|
72
|
+
|
|
73
|
+
### 3.2 `bin/saga-session-start.sh` — Sága, the session digest
|
|
74
|
+
|
|
75
|
+
The one-command session open. Prints **one ordered digest** and does nothing else. Source it? No — it is a script; it sources `gleipnir-lock-lib.sh`.
|
|
76
|
+
|
|
77
|
+
Sections, in order:
|
|
78
|
+
|
|
79
|
+
| # | Section | Content |
|
|
80
|
+
|---|---|---|
|
|
81
|
+
| 1 | `LOCK` | acquire the session lock (machine-global for the primary, per-home for an Eindri-home); on refusal print `READ-ONLY: session lock held by pid N` |
|
|
82
|
+
| 2 | `BOOTSTRAP` | detect-only: `git bash node` present, `svartalfaheim/<realm>/.env.realm` present/ABSENT |
|
|
83
|
+
| 3 | `WAKE QUEUE` | calls `bin/saga-wake-drain.sh`; prints pending wakes and `open decisions: N` |
|
|
84
|
+
| 4 | `SUPERVISION` | static instruction: arm via the harness adapter, never run `syn-watch-arm.sh` by hand |
|
|
85
|
+
| 5 | `FLEET DIGEST` | count of `state/*.meta`; count of `^- Status: ADDED` in `docs/masterplan.md` (open forge orders) |
|
|
86
|
+
| 6 | `CONTEXT DIGEST` | realm, then `data/operator.md`, `data/projects.md`, `data/learnings.md`, each with `ABSENT:` when missing |
|
|
87
|
+
| 7 | `CRON START` | calls `bin/nornir-cron-start.sh` |
|
|
88
|
+
| 8 | `NEXT STEP` | closing pointer: "Ascend Hlidskjalf as Brokk. Address the Allfather. Read once; act." |
|
|
89
|
+
|
|
90
|
+
- **Never re-read** the digest's sources unless a source was reported absent/corrupt (read-once contract).
|
|
91
|
+
- Env: `BROKK_ROOT_OVERRIDE`, `BROKK_HOME`, `BROKK_STATE_OVERRIDE`, `BROKK_DATA_OVERRIDE`, `BROKK_CONFIG_OVERRIDE`, `BROKK_REALM`, `BROKK_SESSION_PID`.
|
|
92
|
+
- Calls: `saga-wake-drain.sh`, `nornir-cron-start.sh`.
|
|
93
|
+
- Exit: 0 always.
|
|
94
|
+
|
|
95
|
+
### 3.3 `bin/saga-sessionstart-run.sh` — Sága, the session-open router
|
|
96
|
+
|
|
97
|
+
The single command every session-open adapter invokes. Decides full run / re-emit / nudge from the source.
|
|
98
|
+
|
|
99
|
+
```
|
|
100
|
+
saga-sessionstart-run.sh [--source startup|new|clear|compact|resume|reload|fork] [--pi-prerequisite]
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
| Source | Behavior |
|
|
104
|
+
|---|---|
|
|
105
|
+
| `startup`, `new`, `*` (default) | run `saga-session-start.sh`; write `state/.session-start-complete` |
|
|
106
|
+
| `clear`, `compact` | if `.session-start-complete` exists → print `CONTEXT RE-EMIT`; else run the full digest |
|
|
107
|
+
| `resume`, `reload`, `fork` | print `Run \`bash .../saga-session-start.sh\` exactly once now ...` |
|
|
108
|
+
|
|
109
|
+
- With no `--source` and a non-tty stdin, parses `"source":"..."` from a Claude/Codex JSON payload.
|
|
110
|
+
- `--pi-prerequisite` + `BROKK_SESSIONSTART_INELIGIBLE=1` → **exit 3** (stand-down).
|
|
111
|
+
- Every ordinary transport path exits 0: a failed start must reach the agent as text, never block the session.
|
|
112
|
+
- Env: `BROKK_ROOT_OVERRIDE`, `BROKK_HOME`, `BROKK_STATE_OVERRIDE`, `BROKK_SESSIONSTART_INELIGIBLE`.
|
|
113
|
+
- Calls: `saga-session-start.sh`.
|
|
114
|
+
|
|
115
|
+
### 3.4 `bin/saga-wake-drain.sh` — Sága, the wake presenter
|
|
116
|
+
|
|
117
|
+
Prints the durable wake queue (`state/.wake-queue`) and the count of open decision markers (`state/*.decision`).
|
|
118
|
+
|
|
119
|
+
```
|
|
120
|
+
wake queue: N pending
|
|
121
|
+
WAKE <record>
|
|
122
|
+
WAKE_ACK_REQUIRED: acknowledge handled wakes to drop them from the queue
|
|
123
|
+
open decisions: N
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
Records stay durable until acknowledged. Env: `BROKK_ROOT_OVERRIDE`, `BROKK_HOME`, `BROKK_STATE_OVERRIDE`.
|
|
127
|
+
|
|
128
|
+
### 3.5 `bin/syn-watch-arm.sh` — Sýn, the watcher cycle
|
|
129
|
+
|
|
130
|
+
Arms one supervision cycle. `--restart` prints `watcher: started pid=<pid> recovery-generation=<gen>`, writes `state/.supervision-armed`, and loops.
|
|
131
|
+
|
|
132
|
+
| Actionable condition | Line | Effect |
|
|
133
|
+
|---|---|---|
|
|
134
|
+
| non-empty `state/.wake-queue` | `signal: wake queue` | exits 0 |
|
|
135
|
+
| any `state/*.signal` | `signal: <name>` (file removed) | exits 0 |
|
|
136
|
+
| any `state/*.check` | `check: <name>` (file removed) | exits 0 |
|
|
137
|
+
| `state/.watcher-stop` | `stale: watcher stopped by operator` (file removed) | exits 0 |
|
|
138
|
+
|
|
139
|
+
- Refuses with exit 0 + stderr `watcher: read-only - no live session holds the lock` when no live lock owner.
|
|
140
|
+
- Writes `state/.watch.heartbeat` each loop iteration (every `BROKK_WATCH_POLL_SECONDS`).
|
|
141
|
+
- **Re-verifies the lock every poll** (not only at arm): when the owner dies it retires silently (`watcher: retired - session lock is no longer held`, **not** an actionable line) so an orphaned watcher cannot keep the arm marker fresh for a dead session and silence the turn-end guard.
|
|
142
|
+
- `--handling-delivered <generation> --watcher-pid <pid>` prints `watcher: handling delivered ...` and exits 0 (ack path used by Gná/Sýn plugins).
|
|
143
|
+
- Env: `BROKK_ROOT_OVERRIDE`, `BROKK_HOME`, `BROKK_STATE_OVERRIDE`, `BROKK_WATCH_POLL_SECONDS` (5), `BROKK_WATCH_HEARTBEAT_STALE_SECONDS` (60), `BROKK_WATCH_PREDECESSOR_ARM_PID`.
|
|
144
|
+
- Sources `gleipnir-lock-lib.sh`.
|
|
145
|
+
|
|
146
|
+
### 3.6 `bin/syn-turnend-guard.sh` — Sýn, the blind-turn refusal
|
|
147
|
+
|
|
148
|
+
```
|
|
149
|
+
syn-turnend-guard.sh [--claude]
|
|
150
|
+
# drains stdin ({"stop_hook_active":false})
|
|
151
|
+
# inert until state/.supervision-armed exists → exit 0
|
|
152
|
+
# stale when now - state/.watch.heartbeat > BROKK_WATCH_HEARTBEAT_STALE_SECONDS → exit 2
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
On exit 2 stderr carries the recovery instruction. Env: `BROKK_ROOT_OVERRIDE`, `BROKK_HOME`, `BROKK_STATE_OVERRIDE`, `BROKK_WATCH_HEARTBEAT_STALE_SECONDS`.
|
|
156
|
+
|
|
157
|
+
### 3.7 `bin/syn-arm-pretool-check.sh` / `bin/syn-cd-pretool-check.sh` — Sýn, seatbelts
|
|
158
|
+
|
|
159
|
+
v0 inert-by-default policy owners.
|
|
160
|
+
|
|
161
|
+
```bash
|
|
162
|
+
syn-arm-pretool-check.sh --command <cmd> # denies *syn-watch-arm.sh*& or &*syn-watch-arm.sh*
|
|
163
|
+
syn-cd-pretool-check.sh --command <cmd> # denies *'cd '*'/../'*
|
|
164
|
+
# exit 0 allow; exit 2 block with reason on stderr
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
Unknown flags are ignored (`shift`). No env. Both accept `--claude`/`--cursor` as ignored transport tags.
|
|
168
|
+
|
|
169
|
+
### 3.8 `bin/gleipnir-lock-lib.sh` — Gleipnir, the session lock (source library)
|
|
170
|
+
|
|
171
|
+
Source-safe. Writes/releases `state/.lock` as a bare pid.
|
|
172
|
+
|
|
173
|
+
| Function | Signature | Notes |
|
|
174
|
+
|---|---|---|
|
|
175
|
+
| `gleipnir_root` | `<result-var>` | root path |
|
|
176
|
+
| `gleipnir_state_dir` | `<result-var>` | state dir |
|
|
177
|
+
| `gleipnir_pid_alive` | `<pid>` | numeric-guarded `kill -0` |
|
|
178
|
+
| `gleipnir_lock_path` | `<result-var>` | `$state/.lock` |
|
|
179
|
+
| `gleipnir_lock_owner` | `<result-var>` | trims whitespace from `.lock` |
|
|
180
|
+
| `gleipnir_lock_owned` | — | exit 0 if an ancestor pid (≤8 levels) owns the lock |
|
|
181
|
+
| `gleipnir_lock_acquire` | — | returns 1 if another **live** pid holds it; else writes `${BROKK_SESSION_PID:-$$}` |
|
|
182
|
+
| `gleipnir_lock_release` | — | removes `.lock` only if `$$` is the owner |
|
|
183
|
+
|
|
184
|
+
Exports `GLEIPNIR_LOCK_ACQUIRED=0`. Env: `BROKK_ROOT_OVERRIDE`, `BROKK_HOME`, `BROKK_STATE_OVERRIDE`, `BROKK_SESSION_PID`.
|
|
185
|
+
|
|
186
|
+
### 3.9 `bin/rodd-operational-input.sh` — Rödd, the operational wire
|
|
187
|
+
|
|
188
|
+
Both a source-safe library and the cross-language CLI. **Single owner** of the wire grammar; callers never re-parse.
|
|
189
|
+
|
|
190
|
+
Wire form: `<U+2063>RODD_OP: v1 <kind>: <body>`.
|
|
191
|
+
|
|
192
|
+
| Command | stdin | stdout | Exit |
|
|
193
|
+
|---|---|---|---|
|
|
194
|
+
| `encode <kind>` | body | encoded message | 0; 2 invalid kind/no body |
|
|
195
|
+
| `kind` | current input | kind | 0; 1 non-match |
|
|
196
|
+
| `classify` | current or legacy input | kind | 0; 1 non-match |
|
|
197
|
+
| `body` | current input | body | 0; 1 non-match |
|
|
198
|
+
| `--help` | — | usage | 0 |
|
|
199
|
+
|
|
200
|
+
Current kinds (`RODD_KINDS`): `session-start watcher turn-end-guard away-supervisor launch-brief branch-outcome`, plus the `from-brokk` compatibility carrier (`RODD_FROMBROKK_MARK`). Legacy detection exists only for persisted pre-protocol transcripts. Bash 3.2 compatible. No env required; the Pi Rödd lib may set `RODD_OPERATIONAL_INPUT_SCRIPT`.
|
|
201
|
+
|
|
202
|
+
### 3.10 `bin/hamr-harness.sh` — Hamr, the shape detector
|
|
203
|
+
|
|
204
|
+
Prints the harness identity of the current process tree.
|
|
205
|
+
|
|
206
|
+
```
|
|
207
|
+
hamr-harness.sh → claude|codex|opencode|pi|pi-signed|grok|kimi|cursor|unknown
|
|
208
|
+
hamr-harness.sh eindri → config/eindri-harness harness, or own when absent/"default"
|
|
209
|
+
hamr-harness.sh eindri-model → optional model token from config/eindri-harness
|
|
210
|
+
hamr-harness.sh eindri-effort → optional effort token
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
- Layer 1 env markers, checked **in order**: `CURSOR_AGENT`/`CURSOR_INVOKED_AS` → `CLAUDECODE` → `PI_CODING_AGENT` (with `BROKK_PI_HARNESS`) → `GROK_AGENT`.
|
|
214
|
+
- Layer 2 walks ancestors ≤8 levels by `comm`, then `argv0`/`args` for bare interpreters.
|
|
215
|
+
- `config/eindri-harness` format: one line `<harness> [<model>] [<effort>]`; first non-blank, non-`#` line wins.
|
|
216
|
+
- Rejects a bare `agent`/`MainThread` unless structural Cursor evidence exists.
|
|
217
|
+
- Env: `BROKK_ROOT_OVERRIDE`, `BROKK_HOME`, `BROKK_CONFIG_OVERRIDE`, `BROKK_PROC_ROOT_OVERRIDE`.
|
|
218
|
+
|
|
219
|
+
### 3.11 `bin/einherjar-spawn.sh` — Einherjar, the worker spawn
|
|
220
|
+
|
|
221
|
+
```
|
|
222
|
+
einherjar-spawn.sh <task-id> <project-dir> --mode <direct-PR|local-only|no-mistakes>
|
|
223
|
+
[--yolo on|off] [--harness <name>] [--model <name>]
|
|
224
|
+
[--effort low|medium|high|xhigh|max] [--backend tmux|herdr]
|
|
225
|
+
[--isolation on|off|auto]
|
|
226
|
+
einherjar-spawn.sh <task-id> <project-dir> --scout [flags...]
|
|
227
|
+
einherjar-spawn.sh <task-id> --relaunch [--harness ...] [--model ...] [--effort ...] [--isolation ...]
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
Behavior:
|
|
231
|
+
|
|
232
|
+
1. Validates the task id (no `/`, no leading `.`, no spaces).
|
|
233
|
+
2. Resolves the harness; **fails closed** against `VERIFIED_HARNESSES='opencode pi pi-signed'` (line 53). A `--harness` with whitespace is a raw launch escape hatch with a warning. If `config/eindri-dispatch.json` exists, fresh spawns must pass an explicit `--harness`.
|
|
234
|
+
3. Requires the brief at `data/<id>/brief.md`; a ship launch refuses if the brief's `Delivery contract: mode=` disagrees with `--mode`.
|
|
235
|
+
4. Creates/reuses a Yggdrasil worktree at `$BROKK_HOME/.yggdrasil/<id>` (detached at `origin/HEAD` or `HEAD`).
|
|
236
|
+
5. Resolves isolation: `on` requires docker + `utgard-runner:latest`; `auto` picks it when present and reports the decision.
|
|
237
|
+
6. Builds `state/<id>.launch.sh`, writes `state/<id>.utgard` when isolated, then launches in tmux (`eindri-<id>` window) or herdr (`eindri-<id>` workspace).
|
|
238
|
+
7. Records `state/<id>.meta` and prints `spawned <id> harness=... kind=... mode=... yolo=... backend=... target=... worktree=... isolation=...`.
|
|
239
|
+
|
|
240
|
+
Env: `BROKK_ROOT_OVERRIDE`, `BROKK_HOME`, `BROKK_STATE_OVERRIDE`, `BROKK_DATA_OVERRIDE`, `BROKK_CONFIG_OVERRIDE`, `BROKK_BACKEND`, `BROKK_TMUX_SESSION`, `TMUX`, `HERDR_ENV`, plus harness markers for detection.
|
|
241
|
+
Exit: 0 ok; 1 operational error; 2 missing task-id/project.
|
|
242
|
+
The `.utgard` file records: image, `network=none`, cpus 1.0, memory 512m, `no-new-privileges`, uid:gid, worktree/state/data mounts, launch script.
|
|
243
|
+
|
|
244
|
+
### 3.12 `bin/erindi-brief.sh` — Erindi, the worker brief
|
|
245
|
+
|
|
246
|
+
Scaffolds `data/<id>/brief.md` with the Setup / Rules / Definition-of-done contract and the fixed `Delivery contract: mode=<mode>` line that `einherjar-spawn.sh` reads.
|
|
247
|
+
|
|
248
|
+
```
|
|
249
|
+
erindi-brief.sh <task-id> <repo-name> --mode <no-mistakes|direct-PR|local-only>
|
|
250
|
+
erindi-brief.sh <task-id> <repo-name> --scout
|
|
251
|
+
erindi-brief.sh <task-id> --relaunch
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
- `--scout` writes the report contract (`data/<id>/report.md`); no branch/PR.
|
|
255
|
+
- `--relaunch` re-derives kind/mode from `state/<id>.meta`; refuses to invent a mode.
|
|
256
|
+
- Refuses to overwrite an existing brief unless `--relaunch`.
|
|
257
|
+
- Status protocol states: `working, needs-decision, blocked, <paused>, done, failed` appended to `state/<id>.status`.
|
|
258
|
+
- Steering inbox: `state/<id>.inbox/NNN.msg`; moving to `handled/` is the acknowledgement.
|
|
259
|
+
- Env: `BROKK_ROOT_OVERRIDE`, `BROKK_HOME`, `BROKK_DATA_OVERRIDE`, `BROKK_STATE_OVERRIDE`, `BROKK_PAUSED_VERB` (default `paused`).
|
|
260
|
+
|
|
261
|
+
### 3.13 `bin/vor-crew-state.sh` — Vör, the state reconciler
|
|
262
|
+
|
|
263
|
+
Read-only deterministic read of a worker's **current** state, reconciling the append-only status log against the live backend endpoint recorded in the meta.
|
|
264
|
+
|
|
265
|
+
```
|
|
266
|
+
state: <working|parked|done|blocked|paused|failed|unknown> · source: <backend|status-log|none> · <detail>
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
- Maps `needs-decision` → `parked`; `resolved` is never a state.
|
|
270
|
+
- Verifies endpoint liveness with `tmux display-message` or `herdr pane get`.
|
|
271
|
+
- Env: `BROKK_ROOT_OVERRIDE`, `BROKK_HOME`, `BROKK_STATE_OVERRIDE`, `BROKK_PAUSED_VERB`.
|
|
272
|
+
- Exit 0 on any successful read; 2 usage.
|
|
273
|
+
|
|
274
|
+
### 3.14 `bin/nornir-cron-start.sh` — Nornir, the scheduler
|
|
275
|
+
|
|
276
|
+
Idempotently keeps one scheduler loop alive (pid in `state/cron.pid`).
|
|
277
|
+
|
|
278
|
+
```
|
|
279
|
+
nornir-cron-start.sh # start if not running
|
|
280
|
+
nornir-cron-start.sh --status → cron: running pid=<p> jobs=<n> | cron: stopped jobs=<n>
|
|
281
|
+
nornir-cron-start.sh --stop # kill the loop, remove the pid file
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
- Reads `config/cron.yaml` (`HH:MM <command>` lines); no jobs → `cron: no jobs configured` exit 0.
|
|
285
|
+
- The loop polls every 45s, matches `HH:MM` once per day via a per-command stamp under `state/.cron-fired/<key>`, and holds a per-job `flock` under `state/.cron-locks/`.
|
|
286
|
+
- Exports `BROKK_HOME`/`BROKK_STATE_OVERRIDE`/`BROKK_CONFIG_OVERRIDE`/`BROKK_ROOT_OVERRIDE`/`BROKK_REALM` to each job; runs from `$BROKK_HOME`.
|
|
287
|
+
- `running_pid` verifies the live pid's command line contains `cron run:` to defeat pid reuse.
|
|
288
|
+
- Logs to `state/cron.log` with rotation at `BROKK_CRON_LOG_MAX_BYTES` (1 MiB).
|
|
289
|
+
- Env: `BROKK_ROOT_OVERRIDE`, `BROKK_HOME`, `BROKK_STATE_OVERRIDE`, `BROKK_CONFIG_OVERRIDE`, `BROKK_CRON_LOG_MAX_BYTES`.
|
|
290
|
+
|
|
291
|
+
### 3.15 `bin/nornir-job-daily-briefing.sh` — Sága, the daily seeing
|
|
292
|
+
|
|
293
|
+
Deterministic (no model call) daily briefing. Writes `svartalfaheim/<realm>/workspace/memory/daily/YYYY-MM-DD.md` atomically from four inputs: open forge orders from `docs/masterplan.md`, fleet/state, active plan statuses, and today's Runes tail. Safe to re-run within a day.
|
|
294
|
+
|
|
295
|
+
Env: `BROKK_HOME`, `BROKK_STATE_OVERRIDE`, `BROKK_DATA_OVERRIDE`, `BROKK_REALM`, `BROKK_BRIEF_DIR`, `BROKK_BRIEF_MAX_ORDERS` (15), `BROKK_BRIEF_MAX_RUNES` (12). Sources `runes-append.sh`. Exit 1 if the output dir cannot be created/written.
|
|
296
|
+
|
|
297
|
+
### 3.16 `bin/nornir-job-git-sync.sh` — Yggdrasil, the world-tree sync
|
|
298
|
+
|
|
299
|
+
Never force, never discard unlanded work.
|
|
300
|
+
|
|
301
|
+
- `BROKK_GIT_SYNC_MODE=fetch` (default): `fetch --prune`, then `merge --ff-only` on the tracked upstream; divergence is reported and left untouched.
|
|
302
|
+
- `BROKK_GIT_SYNC_MODE=push` (opt-in): commit dirty tree (`nornir git-sync <stamp>`), then push (no force).
|
|
303
|
+
- Discovers targets from `BROKK_GIT_SYNC_TARGETS` (colon-separated) or auto-discovery of `$BROKK_HOME`, `workspace/`, `midgard/`, realm `projects/`.
|
|
304
|
+
- Env: `BROKK_ROOT_OVERRIDE`, `BROKK_HOME`, `BROKK_DATA_OVERRIDE`, `BROKK_GIT_SYNC_MODE`, `BROKK_GIT_SYNC_REMOTE` (origin), `BROKK_GIT_SYNC_TARGETS`, `BROKK_REALM`. Sources `runes-append.sh`. Exit 1 if git missing; 2 bad mode.
|
|
305
|
+
|
|
306
|
+
### 3.17 `bin/nornir-job-memory-housekeeping.sh` — Muninn, the memory raven
|
|
307
|
+
|
|
308
|
+
Backup-first, prune-gated.
|
|
309
|
+
|
|
310
|
+
1. Reports the engram/vector store state (`BROKK_MIMIR_DB`); says `ABSENT` when unwired — never fakes decay/compress.
|
|
311
|
+
2. Snapshots memory roots to `$BROKK_BACKUP_DIR/memory-YYYY-MM-DD.tar.gz`.
|
|
312
|
+
3. Prunes ephemeral files only when `BROKK_MEMORY_PRUNE=1` **and** a backup succeeded.
|
|
313
|
+
|
|
314
|
+
Env: `BROKK_HOME`, `BROKK_STATE_OVERRIDE`, `BROKK_DATA_OVERRIDE`, `BROKK_BACKUP_DIR` (`$state/backups`), `BROKK_MEMORY_ROOTS` (`.agents/memory:workspace/memory:svartalfaheim/<realm>/workspace/memory`), `BROKK_MIMIR_DB`, `BROKK_MEMORY_PRUNE`, `BROKK_MEMORY_PRUNE_DAYS` (7), `BROKK_REALM`. Sources `runes-append.sh`.
|
|
315
|
+
|
|
316
|
+
### 3.18 `bin/nornir-job-observer.sh` — Huginn, the observation raven
|
|
317
|
+
|
|
318
|
+
**Read-only** observation of Ymir's own runtime (`docs/masterplan.md` orders, `.agents/agents` roster, `.agents/memory/well`, `workspace/memory/runes_audit.md`, `smidja/smidja_data/smidja.db` read-only SQLite) plus an external, read-only worktree root. Never writes the runtime; carves a Runes line and appends `state/observer.log` for every observation, including explicit `ABSENT` lines.
|
|
319
|
+
|
|
320
|
+
Env: `BROKK_ROOT_OVERRIDE`, `BROKK_HOME`, `BROKK_STATE_OVERRIDE`, `BROKK_YGGDRASIL_ROOT` (`~/.Yggdrasil`). Sources `runes-append.sh`.
|
|
321
|
+
|
|
322
|
+
### 3.19 `bin/runes-append.sh` — Runes, the audit ledger
|
|
323
|
+
|
|
324
|
+
Append-only, checksum-chained JSONL under `workspace/memory/runes_audit.md`.
|
|
325
|
+
|
|
326
|
+
```
|
|
327
|
+
runes-append.sh <actor> <event> [--order Wxxxx] [--realm R] --message "..."
|
|
328
|
+
# library: . bin/runes-append.sh ; runes_append <actor> <event> ... --message "..."
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
Each entry folds the previous `checksum` into its own (`prev` field), appended under one exclusive `flock` so concurrent writers cannot fork the chain. Never rewrites or truncates. Head: `# YGGDRASIL Audit Trail`.
|
|
332
|
+
|
|
333
|
+
Env: `BROKK_HOME`, `BROKK_RUNES_FILE`, `BROKK_RUNES_DIR` (`$home/workspace/memory`), `BROKK_RUNES_LOCK` (`$home/state/runes.lock`), `BROKK_ROOT_OVERRIDE`. Exports `RUNES_LAST_CHECKSUM`. Exit 0 appended; 1 IO; 2 usage (prints `error:` + `help:`).
|
|
334
|
+
|
|
335
|
+
---
|
|
336
|
+
|
|
337
|
+
## 4. `.pi/extensions/` — Pi adapter components
|
|
338
|
+
|
|
339
|
+
| File | Norse | Function |
|
|
340
|
+
|---|---|---|
|
|
341
|
+
| `syn-turnend-guard.ts` | **Sýn** | session-start injection (`before_agent_start`), compaction re-emit (`session_compact`), turn-end guard (`agent_settled`), PreToolUse seatbelts (`tool_call`) |
|
|
342
|
+
| `gna-pi-watch.ts` | **Gná** | watcher continuity: `session_start`/`session_shutdown`, `gna_watch_arm` tool, `/gna-watch-arm` command, arm child supervision |
|
|
343
|
+
| `lib/vordr-sessionstart-supervisor.mjs` | **Vörðr** | detached digest child supervisor with IPC `{type:"result",code,bytes}` |
|
|
344
|
+
| `lib/rodd-operational-input.ts` | **Rödd** | `encodeRoddOperationalInput`, `classifyRoddOperationalText`, `classifyRoddCurrentOperationalText` |
|
|
345
|
+
|
|
346
|
+
State markers: `state/.pi-syn-turnend-loaded`, `state/.pi-gna-watch-loaded` (each holds `<sha256>\n<pid>`). Full deep dive: [`harness-integration/pi.md`](harness-integration/pi.md).
|
|
347
|
+
|
|
348
|
+
---
|
|
349
|
+
|
|
350
|
+
## 5. `.opencode/plugins/` — OpenCode adapter components
|
|
351
|
+
|
|
352
|
+
| File | Export | Function |
|
|
353
|
+
|---|---|---|
|
|
354
|
+
| `saga-sessionstart.js` | `SagaSessionstart` | `session.created` → run wrapper, inject via `promptAsync` |
|
|
355
|
+
| `syn-watch-arm.js` | `SynWatchArm` | `session.idle` → arm; publishes `globalThis.__brokkOpenCodeWatchArm` |
|
|
356
|
+
| `syn-turnend-guard.js` | `SynTurnendGuard` | `session.idle` → consult coordinator, then guard, re-prompt on exit 2 |
|
|
357
|
+
| `syn-pretool-check.js` | `SynPretoolCheck` | `tool.execute.before` → arm seatbelt (throw to block) |
|
|
358
|
+
| `syn-cd-check.js` | `SynCdCheck` | `tool.execute.before` → cd seatbelt (throw to block) |
|
|
359
|
+
| `lib/rodd-operational-input.js` | `encodeRoddOperationalInput(root, kind, content)` | Rödd wire bridge |
|
|
360
|
+
| `package.json` | — | `{"private":true,"type":"module"}`; plugins auto-load by path |
|
|
361
|
+
|
|
362
|
+
Full deep dive: [`harness-integration/opencode.md`](harness-integration/opencode.md).
|
|
363
|
+
|
|
364
|
+
---
|
|
365
|
+
|
|
366
|
+
## 6. Harness hook files
|
|
367
|
+
|
|
368
|
+
| File | Harness | Hook groups | Deep dive |
|
|
369
|
+
|---|---|---|---|
|
|
370
|
+
| `.claude/settings.json` | Claude Code | `SessionStart`, `Stop` (guard + asyncRewake arm) | [`claude-code.md`](harness-integration/claude-code.md) |
|
|
371
|
+
| `.codex/hooks.json` | Codex | `SessionStart`, `PreToolUse` (Bash), `Stop` + `[features].hooks=true` | [`codex.md`](harness-integration/codex.md) |
|
|
372
|
+
| `.cursor/hooks.json` | Cursor | `sessionStart`, `preToolUse` (Shell), `stop` | [`cursor.md`](harness-integration/cursor.md) |
|
|
373
|
+
| *(none)* | Grok | not implemented in Ymir | — |
|
|
374
|
+
|
|
375
|
+
`opencode.json` is the OpenCode harness config: `default_agent: brokk`, agent roster, `skills.paths: [".agents/skills"]`. Plugins are discovered by path, not declared.
|
|
376
|
+
|
|
377
|
+
---
|
|
378
|
+
|
|
379
|
+
## 7. `config/` files
|
|
380
|
+
|
|
381
|
+
| File | Format | Purpose |
|
|
382
|
+
|---|---|---|
|
|
383
|
+
| `config/cron.yaml` | `HH:MM <command>` lines, `#` comments | Nornir schedule. Current jobs: `07:00` daily briefing, `06:00` observer, `00:30` memory housekeeping, `00:00` git sync |
|
|
384
|
+
| `config/eindri-harness` | one line `<harness> [<model>] [<effort>]` | default harness for dispatched Eindri. Current: `opencode` |
|
|
385
|
+
| `config/eindri-dispatch.json` | JSON (rules + default) | per-task harness/model/effort selection rules. If present, `einherjar-spawn.sh` requires an explicit `--harness` |
|
|
386
|
+
| `config/backend` *(optional)* | one word `tmux`/`herdr` | backend override for `einherjar-spawn.sh`; absent here |
|
|
387
|
+
| `config/x-mode.env` *(optional)* | shell env | sourced by the OpenCode arm spawn; makes `shouldArm` true. Absent by default |
|
|
388
|
+
|
|
389
|
+
`config/eindri-dispatch.json` rules (current):
|
|
390
|
+
|
|
391
|
+
| When | Use |
|
|
392
|
+
|---|---|
|
|
393
|
+
| General implementation / refactoring / bug fixes | opencode + `opencode-go/deepseek-v4.1-flash`, effort `medium` |
|
|
394
|
+
| Deep investigation / planning / ambiguous design | opencode + flash, effort `xhigh` |
|
|
395
|
+
| Trivial mechanical edits | opencode + flash, effort `low` |
|
|
396
|
+
| Long-running autonomous/background workers | pi, effort `medium` (no model → Pi default) |
|
|
397
|
+
| default | opencode + flash, `medium` |
|
|
398
|
+
|
|
399
|
+
---
|
|
400
|
+
|
|
401
|
+
## 8. `data/` files
|
|
402
|
+
|
|
403
|
+
| File | Purpose |
|
|
404
|
+
|---|---|
|
|
405
|
+
| `data/realm.md` | active realm (one line). Current: `way-of` |
|
|
406
|
+
| `data/operator.md` | Allfather preferences and working style, injected at session start |
|
|
407
|
+
| `data/projects.md` | realm/project registry table (project, realm, house, path, posture) |
|
|
408
|
+
| `data/learnings.md` | curated dated operational facts |
|
|
409
|
+
| `data/backlog.md` | pointer/queue summary; the source of truth is `docs/masterplan.md` |
|
|
410
|
+
| `data/<id>/brief.md` | per-Eindri errand (scaffolded by `erindi-brief.sh`) |
|
|
411
|
+
| `data/<id>/report.md` | scout deliverable |
|
|
412
|
+
|
|
413
|
+
---
|
|
414
|
+
|
|
415
|
+
## 9. `state/` runtime files (reference)
|
|
416
|
+
|
|
417
|
+
| Path | Written by | Meaning |
|
|
418
|
+
|---|---|---|
|
|
419
|
+
| `.lock` | Gleipnir | live session pid |
|
|
420
|
+
| `.supervision-armed` | `syn-watch-arm.sh` | guard-enable marker |
|
|
421
|
+
| `.watch.heartbeat` | `syn-watch-arm.sh` | epoch seconds heartbeat |
|
|
422
|
+
| `.wake-queue` | watcher/peers | durable wake records |
|
|
423
|
+
| `*.signal`, `*.check` | watchers/peers | actionable signals consumed by the arm |
|
|
424
|
+
| `.watcher-stop` | operator | asks the arm to exit `stale:` |
|
|
425
|
+
| `*.decision` | approval gates | open decisions counted by wake-drain |
|
|
426
|
+
| `<id>.meta` | `einherjar-spawn.sh` | task record (id, kind, mode, harness, model, effort, backend, window, worktree, project, brief, isolation, launch, spawn_gen) |
|
|
427
|
+
| `<id>.status` | Eindri worker | append-only status log |
|
|
428
|
+
| `<id>.launch.sh` | `einherjar-spawn.sh` | exact launch command script |
|
|
429
|
+
| `<id>.utgard` | `einherjar-spawn.sh` | isolation record (image, mounts, limits) |
|
|
430
|
+
| `<id>.inbox/` | Brokk | steering messages; `handled/` subdir |
|
|
431
|
+
| `.session-start-complete` | `saga-sessionstart-run.sh` | records a completed startup (for re-emit) |
|
|
432
|
+
| `.pi-syn-turnend-loaded`, `.pi-gna-watch-loaded` | Pi extensions | load markers |
|
|
433
|
+
| `.afk` | operator | suppresses arming in `shouldArm` |
|
|
434
|
+
| `cron.pid`, `cron.log` | `nornir-cron-start.sh` | scheduler pid + log |
|
|
435
|
+
| `.cron-fired/<key>` | scheduler | per-command day stamp |
|
|
436
|
+
| `.cron-locks/<key>.lock` | scheduler | per-job flock |
|
|
437
|
+
| `backups/` | Muninn | memory snapshots |
|
|
438
|
+
| `observer.log`, `observer.last` | Huginn | observation log + last summary |
|
|
439
|
+
| `runes.lock` | Runes | append lock |
|
|
440
|
+
|
|
441
|
+
---
|
|
442
|
+
|
|
443
|
+
## 10. Verification
|
|
444
|
+
|
|
445
|
+
### 10.1 Scripts parse
|
|
446
|
+
|
|
447
|
+
```bash
|
|
448
|
+
cd "$BROKK_HOME"
|
|
449
|
+
for f in bin/*.sh; do bash -n "$f" || echo "SYNTAX FAIL: $f"; done && echo "bash -n clean"
|
|
450
|
+
```
|
|
451
|
+
|
|
452
|
+
### 10.2 Libs behave under `set -u` when sourced
|
|
453
|
+
|
|
454
|
+
```bash
|
|
455
|
+
bash -c '. bin/gleipnir-lock-lib.sh; . bin/runes-append.sh; . bin/rodd-operational-input.sh; echo "sourced ok"'
|
|
456
|
+
```
|
|
457
|
+
|
|
458
|
+
### 10.3 JSON and YAML-shaped config
|
|
459
|
+
|
|
460
|
+
```bash
|
|
461
|
+
python3 -m json.tool config/eindri-dispatch.json >/dev/null && echo "dispatch ok"
|
|
462
|
+
python3 -m json.tool opencode.json >/dev/null && echo "opencode ok"
|
|
463
|
+
python3 -m json.tool .opencode/plugins/package.json >/dev/null && echo "plugins pkg ok"
|
|
464
|
+
grep -vE '^[[:space:]]*(#|$)' config/cron.yaml | wc -l
|
|
465
|
+
```
|
|
466
|
+
|
|
467
|
+
### 10.4 Digest is complete
|
|
468
|
+
|
|
469
|
+
```bash
|
|
470
|
+
bin/saga-session-start.sh | grep -E '^== '
|
|
471
|
+
# expect: LOCK, BOOTSTRAP, WAKE QUEUE, SUPERVISION, FLEET DIGEST, CONTEXT DIGEST, CRON START, NEXT STEP
|
|
472
|
+
```
|
|
473
|
+
|
|
474
|
+
### 10.5 Watcher, guard, wake drain
|
|
475
|
+
|
|
476
|
+
```bash
|
|
477
|
+
bin/saga-wake-drain.sh
|
|
478
|
+
: > state/.wake-queue; bin/syn-watch-arm.sh --restart # exits "signal: wake queue"
|
|
479
|
+
rm -f state/.supervision-armed
|
|
480
|
+
echo '{"stop_hook_active":false}' | bin/syn-turnend-guard.sh; echo "inert -> $? (0)"
|
|
481
|
+
touch state/.supervision-armed; rm -f state/.watch.heartbeat
|
|
482
|
+
echo '{"stop_hook_active":false}' | bin/syn-turnend-guard.sh; echo "stale -> $? (2)"
|
|
483
|
+
```
|
|
484
|
+
|
|
485
|
+
### 10.6 Harness detection
|
|
486
|
+
|
|
487
|
+
```bash
|
|
488
|
+
bin/hamr-harness.sh
|
|
489
|
+
bin/hamr-harness.sh eindri # honour config/eindri-harness
|
|
490
|
+
bin/hamr-harness.sh eindri-model
|
|
491
|
+
bin/hamr-harness.sh eindri-effort
|
|
492
|
+
```
|
|
493
|
+
|
|
494
|
+
### 10.7 Rödd round-trip
|
|
495
|
+
|
|
496
|
+
```bash
|
|
497
|
+
printf 'hello' | bin/rodd-operational-input.sh encode watcher \
|
|
498
|
+
| bin/rodd-operational-input.sh kind # → watcher
|
|
499
|
+
printf 'hello' | bin/rodd-operational-input.sh encode watcher \
|
|
500
|
+
| bin/rodd-operational-input.sh body # → hello
|
|
501
|
+
bin/rodd-operational-input.sh --help >/dev/null && echo "rodd help ok"
|
|
502
|
+
```
|
|
503
|
+
|
|
504
|
+
### 10.8 Runes append (safe in a temp home)
|
|
505
|
+
|
|
506
|
+
```bash
|
|
507
|
+
tmp=$(mktemp -d); mkdir -p "$tmp/state"
|
|
508
|
+
BROKK_ROOT_OVERRIDE="$tmp" BROKK_HOME="$tmp" bin/runes-append.sh tester probe --message "smoke"
|
|
509
|
+
grep -c '"checksum":"' "$tmp/workspace/memory/runes_audit.md"
|
|
510
|
+
```
|
|
511
|
+
|
|
512
|
+
### 10.9 Cron status
|
|
513
|
+
|
|
514
|
+
```bash
|
|
515
|
+
bin/nornir-cron-start.sh --status # → cron: running pid=... jobs=4
|
|
516
|
+
```
|
|
517
|
+
|
|
518
|
+
---
|
|
519
|
+
|
|
520
|
+
## 11. Gotchas
|
|
521
|
+
|
|
522
|
+
- **`saga-session-start.sh` acquires but never releases the lock.** A refused lock means the whole session is read-only. Release is process-exit bound.
|
|
523
|
+
- **The fleet digest counts `state/*.meta`, not `data/backlog.md`.** Plan §6 claims `data/backlog.md` feeds the fleet digest; the code does not read it there.
|
|
524
|
+
- **The digest has 8 sections, not the 9 in plan §6.** There is no `NETWORK CHECKS` stage.
|
|
525
|
+
- **`bin/einherjar-spawn.sh:170` calls `hamr-harness.sh crew`, but the subcommand is `eindri`.** `crew` falls through to `detect_own`, so `config/eindri-harness` is ignored on the Hamr path (the inline fallback honours it). See §12.
|
|
526
|
+
- **`config/eindri-dispatch.json` makes fresh spawns require an explicit `--harness`.** This is intentional (consultation backstop) but surprises callers who omit it.
|
|
527
|
+
- **`--relaunch` cannot change mode/kind/project.** Only harness/model/effort/isolation may change; mode is re-derived from the meta.
|
|
528
|
+
- **The daily briefing is deterministic by design.** No model call; do not "improve" it into an LLM summary.
|
|
529
|
+
- **Muninn never prunes without a successful backup.** `BROKK_MEMORY_PRUNE=1` is inert if the backup failed.
|
|
530
|
+
- **Huginn observes only Ymir's own tree** (plus the read-only external worktree root). Never add a write path.
|
|
531
|
+
- **`BROKK_GIT_SYNC_MODE=push` commits a dirty tree.** That is not a bug; it is the "never discard unlanded work" law. Still no force.
|
|
532
|
+
- **`nornir-cron-start.sh --stop` leaves `.cron-fired` stamps in place.** A job restarted the same day will not double-run until the date rolls.
|
|
533
|
+
- **`.afk` suppresses arming** (`shouldArm` in the OpenCode plugin and the equivalent gate). If supervision "won't arm", check for `state/.afk`.
|
|
534
|
+
- **A linked worktree never owns supervision.** `isPrimaryRoot` requires `git-dir == git-common-dir`.
|
|
535
|
+
- **`rodd-operational-input.sh` printed `body` without a trailing newline; `kind`/`classify` print one.** Callers strip as needed.
|
|
536
|
+
|
|
537
|
+
---
|
|
538
|
+
|
|
539
|
+
## 12. Code-vs-doc disagreements (truth is the code)
|
|
540
|
+
|
|
541
|
+
| Doc says | Code says (truth) |
|
|
542
|
+
|---|---|
|
|
543
|
+
| Plan §12/§13 and `.pi/extensions/README.md` name OpenCode adapter files `syn-sessionstart.js` / `gna-watch-arm.js` | actual: `saga-sessionstart.js`, `syn-watch-arm.js` |
|
|
544
|
+
| `.pi/extensions/README.md:36-38` says OpenCode/Claude/Codex/Cursor adapters "are still to come" | all four are landed (`.opencode/plugins/*`, `.claude/settings.json`, `.codex/hooks.json`, `.cursor/hooks.json`) |
|
|
545
|
+
| Plan §13 lists `bin/hamr-harness.sh`, `bin/einherjar-spawn.sh`, `bin/erindi-brief.sh`, `bin/vor-crew-state.sh`, `bin/nornir-job-*.sh`, `bin/runes-append.sh`, `config/eindri-dispatch.json` as "still to build" | all are present and `bash -n` clean |
|
|
546
|
+
| Plan §6 digest: 9 stages incl. `NETWORK CHECKS`, fleet digest from `data/backlog.md` | 8 sections; no NETWORK CHECKS; fleet digest reads `state/*.meta` + `docs/masterplan.md` |
|
|
547
|
+
| Plan §7 OpenCode session-start file `syn-sessionstart.js` | `saga-sessionstart.js` |
|
|
548
|
+
| Plan §7 Grok "project hooks (`grok --trust`)" | no `.grok/` exists in Ymir; Grok unimplemented |
|
|
549
|
+
| Plan §7 Codex "nudge-tier / bounded foreground checkpoint" | Codex is run-tier via `SessionStart` JSON + `PreToolUse` + `Stop` |
|
|
550
|
+
| Plan §7 Cursor "run interactive only (no headless turn-end)" | also implements `sessionStart` + `stop` hooks; headless still lacks the turn-end hook |
|
|
551
|
+
| `bin/einherjar-spawn.sh` calls `hamr-harness.sh crew` | `hamr-harness.sh` supports `eindri`/`eindri-model`/`eindri-effort`; `crew` silently falls through to `detect_own` |
|
|
552
|
+
| `bin/erindi-brief.sh` / `einherjar-spawn.sh` reference `.agents/sandbox/Dockerfile.utgard` and `utgard-runner:latest` | the Dockerfile and `sandcastle.config.json` exist; no image is guaranteed built, so `--isolation auto` reports `off` until it is |
|
|
553
|
+
| Plan §13 says `docs/supervision-protocols/` will be created | directory does not exist in Ymir |
|