@zerwiz/ymir 0.1.4 → 0.1.7
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/README.md +74 -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 +360 -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.example +72 -0
- package/.agents/config/crew-dispatch.json +22 -0
- package/.agents/config/cron.yaml +11 -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/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/runes_audit.md +5 -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 +121 -0
- package/.agents/migrations/0004-hoard-and-realms.sh +104 -0
- package/.agents/migrations/0005-roots-out-of-tree.sh +158 -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 +159 -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 +736 -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 +539 -0
- package/.agents/skills/galdr-ymirsystem/assets/installation.md +763 -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 +163 -0
- package/.agents/skills/galdr-ymirsystem/assets/nornir-jobs.md +415 -0
- package/.agents/skills/galdr-ymirsystem/assets/norse-naming.md +325 -0
- package/.agents/skills/galdr-ymirsystem/assets/odrerir-hall.md +133 -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 +101 -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 +180 -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 +503 -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 +90 -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 +57 -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 +35 -0
- package/.agents/skills/ymir-host/assets/desktop.md +36 -0
- package/.agents/skills/ymir-host/assets/install.md +69 -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 +498 -0
- package/CHANGELOG.md +1913 -0
- package/LICENSE +1 -1
- package/NOTICE +63 -0
- package/README.md +114 -60
- 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 +97 -0
- package/RULES/05-platforms.md +67 -0
- package/RULES/06-append-only.md +108 -0
- package/RULES/07-config.md +101 -0
- package/RULES/08-delivery-gate.md +75 -0
- package/RULES/09-electron.md +58 -0
- package/RULES/README.md +22 -0
- package/bin/README.md +107 -0
- package/bin/a2a-mcp.sh +133 -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 +256 -0
- package/bin/apodex-smoke-test.sh +105 -0
- package/bin/bifrost-bridge.sh +131 -0
- package/bin/bifrost-ingress.sh +77 -0
- package/bin/bootstrap-macos.sh +112 -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 +51 -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-assemble.sh +154 -0
- package/bin/changelog-guard.sh +197 -0
- package/bin/crash-sense.sh +173 -0
- package/bin/design-check.sh +80 -0
- package/bin/design-icon.sh +153 -0
- package/bin/desktop-place.sh +224 -0
- package/bin/docs-guard.sh +39 -0
- package/bin/editor-place.sh +225 -0
- package/bin/eindri-acclaim.sh +47 -0
- package/bin/eindri-control.sh +28 -0
- package/bin/eindri-role.sh +83 -0
- package/bin/eindri-seat.sh +83 -0
- package/bin/eindri-seen.sh +54 -0
- package/bin/eindri-send.sh +15 -0
- package/bin/eindri-start.sh +98 -0
- package/bin/eindri-watch.sh +57 -0
- package/bin/einherjar-spawn.sh +576 -0
- package/bin/eir-doctor.sh +158 -0
- package/bin/erindi-brief.sh +271 -0
- package/bin/feature-inventory.sh +73 -0
- package/bin/fleet-apply.sh +81 -0
- package/bin/github-deploy.sh +94 -0
- package/bin/gjallarhorn-expose.sh +136 -0
- package/bin/gjallarhorn-notify.sh +71 -0
- package/bin/gjallarhorn-purge.sh +67 -0
- package/bin/gjallarhorn-tunnel.sh +85 -0
- package/bin/gleipnir-lock-lib.sh +284 -0
- package/bin/groa-update.sh +130 -0
- package/bin/hall-snapshot.sh +111 -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 +452 -0
- package/bin/hermes-ensure.sh +88 -0
- package/bin/hlidskjalf-agents.sh +172 -0
- package/bin/hlidskjalf-usage.sh +196 -0
- package/bin/hoard-guard.sh +135 -0
- package/bin/hoard-lib.sh +105 -0
- package/bin/hodd.sh +102 -0
- package/bin/host-sense.sh +199 -0
- package/bin/huginn-research-worker.sh +121 -0
- package/bin/local-model-lock.sh +70 -0
- package/bin/mimir-bridge.py +259 -0
- package/bin/mimir-bridge.sh +100 -0
- package/bin/mimir-ingest.sh +131 -0
- package/bin/mimir-reflect.sh +27 -0
- package/bin/mimir.sh +113 -0
- package/bin/mjollnir-webhook.sh +72 -0
- package/bin/mjollnir.sh +104 -0
- package/bin/model-hardware.sh +96 -0
- package/bin/model-resolve.sh +160 -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-hall-snapshot.sh +28 -0
- package/bin/nornir-job-memory-housekeeping.sh +114 -0
- package/bin/nornir-job-nsr-compliance.sh +54 -0
- package/bin/nornir-job-observer.sh +166 -0
- package/bin/nornir-job-skillopt-sleep.sh +76 -0
- package/bin/npm-publish.sh +136 -0
- package/bin/omarchy-hook-install.sh +60 -0
- package/bin/omarchy-install.sh +161 -0
- package/bin/omarchy-plugins.sh +187 -0
- package/bin/omarchy-sense.sh +162 -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-model-agnostic.sh +71 -0
- package/bin/pi-seat.sh +63 -0
- package/bin/prereq-ensure.sh +166 -0
- package/bin/private-guard.sh +58 -0
- package/bin/project-git.sh +69 -0
- package/bin/public-guard.sh +71 -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 +104 -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 +94 -0
- package/bin/smidja-observe.sh +86 -0
- package/bin/syn-arm-pretool-check.sh +57 -0
- package/bin/syn-asset-pretool-check.sh +89 -0
- package/bin/syn-cd-pretool-check.sh +28 -0
- package/bin/syn-guard-pretool-check.sh +83 -0
- package/bin/syn-spawn-pretool-check.sh +58 -0
- package/bin/syn-turnend-guard.sh +36 -0
- package/bin/syn-watch-arm.sh +99 -0
- package/bin/tailscale-sync.sh +203 -0
- package/bin/telegram-bot.sh +82 -0
- package/bin/toolchain.sh +74 -0
- package/bin/ui-truth-check.sh +75 -0
- package/bin/utgard.sh +111 -0
- package/bin/valhalla.sh +115 -0
- package/bin/valknut-load.sh +298 -0
- package/bin/vor-crew-state.sh +124 -0
- package/bin/wedge-notify.sh +60 -0
- package/bin/workspace-provision.sh +80 -0
- package/bin/workspace-rag.sh +163 -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 +806 -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-plan.sh +356 -0
- package/bin/ymir-platform.sh +348 -0
- package/bin/ymir-say.sh +110 -0
- package/bin/ymir-setup-auth.sh +119 -0
- package/bin/ymir-validate.sh +193 -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 +1060 -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 +54 -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 +269 -0
- package/scripts/lower.sh +34 -0
- package/scripts/raise.sh +42 -0
- package/scripts/start.sh +217 -0
- package/scripts/stop.sh +113 -0
- package/install.sh +0 -35
|
@@ -0,0 +1,518 @@
|
|
|
1
|
+
# Eindri Orchestration — worker spawn, brief, state, isolation, and supervision
|
|
2
|
+
|
|
3
|
+
Purpose: the complete, production-grade reference for how Brokk gathers an **Eindri** worker
|
|
4
|
+
(Einherjar → Erindi → Vör → Yggdrasil → Utgard → Valhalla) from dispatch to delivery.
|
|
5
|
+
|
|
6
|
+
> **One worker, one brief, one worktree.** Every Eindri is gathered by
|
|
7
|
+
> `bin/einherjar-spawn.sh`, reads exactly one brief at `data/<task-id>/brief.md`, and runs in
|
|
8
|
+
> exactly one Yggdrasil worktree at `.yggdrasil/<task-id>`. The brief and the recorded task
|
|
9
|
+
> cannot drift: both carry the same `Delivery contract: mode=<mode>` line.
|
|
10
|
+
>
|
|
11
|
+
> Provenance: the upstream agent-distro spawn/brief/state pattern
|
|
12
|
+
> (`$BROKK_UPSTREAM/bin/fm-spawn.sh`, `fm-brief.sh`, `fm-crew-state.sh`) is the source
|
|
13
|
+
> of the pattern; Ymir's runtime is `bin/einherjar-spawn.sh`, `bin/erindi-brief.sh`, and
|
|
14
|
+
> `bin/vor-crew-state.sh`, retargeted for plan 29. Upstream nautical labels are provenance
|
|
15
|
+
> only — the Ymir names are Norse.
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## 1. The orchestration chain
|
|
20
|
+
|
|
21
|
+
| Stage | Norse name | Owner artifact | Lives at |
|
|
22
|
+
|---|---|---|---|
|
|
23
|
+
| Dispatch decision | **Brokk** | `config/eindri-dispatch.json` | repo config |
|
|
24
|
+
| Harness detection | **Hamr** | `bin/hamr-harness.sh` | repo bin |
|
|
25
|
+
| Worker gather | **Einherjar** | `bin/einherjar-spawn.sh` | repo bin |
|
|
26
|
+
| Worker brief | **Erindi** | `bin/erindi-brief.sh` → `data/<id>/brief.md` | private `data/` |
|
|
27
|
+
| Worktree isolation | **Yggdrasil** | `.yggdrasil/<id>` (git worktree) | private `.yggdrasil/` |
|
|
28
|
+
| Sandbox seal | **Utgard** | `.agents/sandbox/Dockerfile.utgard` | repo `.agents/` |
|
|
29
|
+
| State reconciliation | **Vör** | `bin/vor-crew-state.sh` | repo bin |
|
|
30
|
+
| Status event log | (Eindri writes) | `state/<id>.status` | private `state/` |
|
|
31
|
+
| Steering inbox | (Brokk writes) | `state/<id>.inbox/*.msg` | private `state/` |
|
|
32
|
+
| Record | (spawn writes) | `state/<id>.meta` | private `state/` |
|
|
33
|
+
| Supervision | **Valhalla** | tmux/herdr pane or supervision tree | backend |
|
|
34
|
+
| Human merge gate | **Glitnir** | PR review card in Hlidskjalf | portal |
|
|
35
|
+
|
|
36
|
+
`DATA`, `STATE`, and `CONFIG` default to `$BROKK_HOME/data`, `$BROKK_HOME/state`, and
|
|
37
|
+
`$BROKK_HOME/config`. They are gitignored (`.gitignore:59-63`) and are the only writable
|
|
38
|
+
surface outside the worktree.
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## 2. Spawn interface — `bin/einherjar-spawn.sh`
|
|
43
|
+
|
|
44
|
+
### 2.1 Usage forms
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
einherjar-spawn.sh <task-id> <project-dir> --mode <direct-PR|local-only|no-mistakes>
|
|
48
|
+
[--yolo on|off] [--harness <name>] [--model <name>]
|
|
49
|
+
[--effort <low|medium|high|xhigh|max>] [--backend tmux|herdr]
|
|
50
|
+
[--isolation on|off|auto]
|
|
51
|
+
|
|
52
|
+
einherjar-spawn.sh <task-id> <project-dir> --scout
|
|
53
|
+
[--harness <name>] [--model <name>] [--effort <...>]
|
|
54
|
+
[--backend <...>] [--isolation <...>]
|
|
55
|
+
|
|
56
|
+
einherjar-spawn.sh <task-id> --relaunch
|
|
57
|
+
[--harness <name>] [--model <name>] [--effort <...>] [--isolation <...>]
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Every spawn prints exactly one record line to stdout:
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
spawned <id> harness=<h> kind=<kind> mode=<m> yolo=<y> backend=<b> target=<t> worktree=<wt> isolation=<on|off>
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
(`--scout` omits `mode=`/`yolo=`; the output shape is defined at
|
|
67
|
+
`bin/einherjar-spawn.sh:550-554`.)
|
|
68
|
+
|
|
69
|
+
### 2.2 Flag reference
|
|
70
|
+
|
|
71
|
+
| Flag | Values | Default | Meaning / failure mode |
|
|
72
|
+
|---|---|---|---|
|
|
73
|
+
| `<task-id>` (positional 1) | `[A-Za-z0-9._-]+` | required | No `/`, no leading `.`, no spaces; else exit 2. |
|
|
74
|
+
| `<project-dir>` (positional 2) | path | required for fresh spawn | Must be a git working tree; else error. Resolved absolute. |
|
|
75
|
+
| `--mode` | `direct-PR`, `local-only`, `no-mistakes` | — | **Required for ship spawns.** Refused with `--scout` and `--relaunch`. |
|
|
76
|
+
| `--scout` | flag | off | Deliverable is `data/<id>/report.md`; no branch, no push, no PR. |
|
|
77
|
+
| `--relaunch` | flag | off | Reuse recorded worktree/kind/mode from `state/<id>.meta`; only harness/model/effort/isolation may change. |
|
|
78
|
+
| `--yolo` | `on`, `off` | `off` | Merge posture recorded in the meta for a ship task; not a brief input. |
|
|
79
|
+
| `--harness` | name **or** raw command | detected | Verified: `opencode pi pi-signed`. A value containing whitespace is a raw launch escape hatch. |
|
|
80
|
+
| `--model` | token | harness default | Passed through as `--model` (opencode/pi). |
|
|
81
|
+
| `--effort` | `low`, `medium`, `high`, `xhigh`, `max` | harness default | Passed to `pi` as `--thinking`; opencode ignores it. |
|
|
82
|
+
| `--backend` | `tmux`, `herdr` | resolved | tmux window `eindri-<id>` or herdr workspace `eindri-<id>`. |
|
|
83
|
+
| `--isolation` | `on`, `off`, `auto` | `auto` | `auto` seals only when the Utgard image is present, and reports the decision. |
|
|
84
|
+
|
|
85
|
+
### 2.3 Environment overrides
|
|
86
|
+
|
|
87
|
+
| Variable | Effect |
|
|
88
|
+
|---|---|
|
|
89
|
+
| `BROKK_ROOT_OVERRIDE` | Root used when `BROKK_HOME` is unset. |
|
|
90
|
+
| `BROKK_HOME` | Home owning `data/ state/ config/`; defaults to repo root. |
|
|
91
|
+
| `BROKK_STATE_OVERRIDE` | Override `state/` (metas, status, launch scripts). |
|
|
92
|
+
| `BROKK_DATA_OVERRIDE` | Override `data/` (briefs, reports). |
|
|
93
|
+
| `BROKK_CONFIG_OVERRIDE` | Override `config/` (dispatch, harness, backend). |
|
|
94
|
+
| `BROKK_BACKEND` | Force `tmux` or `herdr` when `--backend` is absent. |
|
|
95
|
+
| `BROKK_TMUX_SESSION` | tmux session name when not already inside tmux (default `brokk`). |
|
|
96
|
+
| `TMUX` / `HERDR_ENV` | Runtime detection of the active multiplexer. |
|
|
97
|
+
| `BROKK_PI_HARNESS` | `pi-signed` selects the signed pi adapter in Hamr. |
|
|
98
|
+
|
|
99
|
+
### 2.4 Harness resolution and the fail-closed law
|
|
100
|
+
|
|
101
|
+
`bin/einherjar-spawn.sh:166-237` resolves the harness in this order:
|
|
102
|
+
|
|
103
|
+
1. **Explicit `--harness <name>`** → verified against `VERIFIED_HARNESSES='opencode pi pi-signed'`.
|
|
104
|
+
2. **Explicit `--harness '<raw command>'`** (contains whitespace) → the raw-launch escape hatch;
|
|
105
|
+
prints a warning and names the derived harness. Use only to trial a new adapter.
|
|
106
|
+
3. **`config/eindri-dispatch.json` present** → a fresh spawn with no explicit `--harness`
|
|
107
|
+
is **refused** (consultation backstop: the dispatch profiles must be read, never skipped).
|
|
108
|
+
4. **`bin/hamr-harness.sh crew`** when executable, else an inline detector
|
|
109
|
+
(`config/eindri-harness` → env markers → process ancestry → `opencode`).
|
|
110
|
+
|
|
111
|
+
Fail-closed rules:
|
|
112
|
+
|
|
113
|
+
- An unverified harness is refused with a plain reason, never silently downgraded.
|
|
114
|
+
- A verified harness whose executable is not on `PATH` is refused.
|
|
115
|
+
- `--relaunch` re-verifies the recorded harness (or recorded raw command) the same way.
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## 3. Erindi — the worker brief
|
|
120
|
+
|
|
121
|
+
`bin/erindi-brief.sh` scaffolds `data/<id>/brief.md`. It **refuses to overwrite** an existing
|
|
122
|
+
brief unless `--relaunch` is given.
|
|
123
|
+
|
|
124
|
+
### 3.1 Usage
|
|
125
|
+
|
|
126
|
+
```
|
|
127
|
+
erindi-brief.sh <task-id> <repo-name> --mode <no-mistakes|direct-PR|local-only>
|
|
128
|
+
erindi-brief.sh <task-id> <repo-name> --scout
|
|
129
|
+
erindi-brief.sh <task-id> --relaunch
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
`--relaunch` regenerates from `state/<id>.meta` so a replacement Eindri receives the **same**
|
|
133
|
+
delivery contract; it re-derives the mode and refuses `--mode`. `--yolo` is rejected here — it
|
|
134
|
+
belongs to spawn (`bin/erindi-brief.sh:70`).
|
|
135
|
+
|
|
136
|
+
### 3.2 Brief structure (ship)
|
|
137
|
+
|
|
138
|
+
| Section | Content |
|
|
139
|
+
|---|---|
|
|
140
|
+
| Role line | "You are an Eindri: an autonomous worker agent managed by Brokk. Work on your own; do not wait for the Allfather." |
|
|
141
|
+
| `# Task` | `{TASK}` placeholder Brokk replaces at dispatch. |
|
|
142
|
+
| `# Delivery contract` | The fixed machine-readable line `Delivery contract: mode=<mode>`. |
|
|
143
|
+
| `# Setup` | Disposable worktree of `<repo>` at `.yggdrasil/<id>` (or `/sandbox/workspace` under Utgard), detached HEAD. Isolation assertion first: `pwd -P` + `git rev-parse --show-toplevel` must resolve to the worktree. |
|
|
144
|
+
| Branch step | `git checkout -b eindri/<id>` (plus `no-mistakes doctor`/`init` for `no-mistakes`). |
|
|
145
|
+
| `# Rules` | Never push default branch / never merge; stay inside the worktree; status protocol; block after two failures; escalate product decisions. |
|
|
146
|
+
| Brokk instruction inbox | Read `state/<id>.inbox/*.msg` in numeric order; acknowledge by moving to `handled/`. |
|
|
147
|
+
| `# Definition of done` | Mode-specific terminal action and status line. |
|
|
148
|
+
|
|
149
|
+
### 3.3 The `Delivery contract:` line
|
|
150
|
+
|
|
151
|
+
- Written only for ship briefs, as `Delivery contract: mode=<mode>`
|
|
152
|
+
(`bin/erindi-brief.sh:245`).
|
|
153
|
+
- Read by `bin/einherjar-spawn.sh:327-335`: if present and it disagrees with the explicit
|
|
154
|
+
`--mode`, the launch is **refused**. A missing line warns but launches on `--mode`.
|
|
155
|
+
- Scout briefs carry `Delivery contract: mode=scout` (`bin/erindi-brief.sh:183`) and are not
|
|
156
|
+
mode-checked at launch.
|
|
157
|
+
|
|
158
|
+
### 3.4 Delivery modes
|
|
159
|
+
|
|
160
|
+
| Mode | Branch/push | Pipeline | Terminal status | Merge owner |
|
|
161
|
+
|---|---|---|---|---|
|
|
162
|
+
| `no-mistakes` | push `eindri/<id>`, open the pipeline PR | `no-mistakes` | `done: <PR url> (pipeline <status>)` | Glitnir human gate |
|
|
163
|
+
| `direct-PR` | push `eindri/<id>`, open PR via `gh` | none | `done: opened PR <url>` | Glitnir human gate |
|
|
164
|
+
| `local-only` | `eindri/<id>` only, no push/PR | none | `done: ready in branch eindri/<id>` | Brokk merges local `main` after Allfather approval |
|
|
165
|
+
| `scout` | none | none | `done: {conclusion}` with report at `data/<id>/report.md` | n/a (report only) |
|
|
166
|
+
|
|
167
|
+
### 3.5 Status protocol (the event log)
|
|
168
|
+
|
|
169
|
+
The brief instructs the worker to append one line to `state/<id>.status`:
|
|
170
|
+
|
|
171
|
+
```
|
|
172
|
+
echo "{state}: {one short line}" >> 'state/<id>.status'
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
| State | Meaning |
|
|
176
|
+
|---|---|
|
|
177
|
+
| `working` | Non-terminal phase change; do not end the turn on it. |
|
|
178
|
+
| `needs-decision` | A choice belongs to the Allfather; Brokk replies. |
|
|
179
|
+
| `blocked` | The worker is stuck and needs Brokk to act. |
|
|
180
|
+
| `paused` | Deliberately idling on a known external wait expected to clear (differs from `blocked`). |
|
|
181
|
+
| `done` | A Definition-of-done gate is met. |
|
|
182
|
+
| `failed` | The task cannot complete. |
|
|
183
|
+
| `resolved` | Closes a decision/blocker by exact key; **not** a state. |
|
|
184
|
+
|
|
185
|
+
A decision/blocker stays open until a `resolved` line carrying its exact key lands; a later
|
|
186
|
+
`done:`/`working:` never closes it.
|
|
187
|
+
|
|
188
|
+
### 3.6 Steering inbox
|
|
189
|
+
|
|
190
|
+
`state/<id>.inbox/*.msg` is Brokk's durable channel into a running worker. The worker lists
|
|
191
|
+
`*.msg`, reads in numeric order, acts, then moves each handled message to
|
|
192
|
+
`state/<id>.inbox/handled/`. **The move is the acknowledgement** — without it Brokk rings
|
|
193
|
+
again and eventually treats the worker as stuck.
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
## 4. Vör — deterministic state reconciliation
|
|
198
|
+
|
|
199
|
+
`bin/vor-crew-state.sh <task-id>` reads the current state without a model and without trusting
|
|
200
|
+
a `tail -1` of the append-only log. Output is one stable line:
|
|
201
|
+
|
|
202
|
+
```
|
|
203
|
+
state: <working|parked|done|blocked|paused|failed|unknown> · source: <backend|status-log|none> · <detail>
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
The separator is a middle dot surrounded by spaces (` · `). Exit code is **0** on any
|
|
207
|
+
successful read regardless of state; **2** on a usage error (no id).
|
|
208
|
+
|
|
209
|
+
### 4.1 Reconciliation order (`bin/vor-crew-state.sh:40-124`)
|
|
210
|
+
|
|
211
|
+
1. Read `worktree`, `kind`, `backend`, `window` from `state/<id>.meta`.
|
|
212
|
+
2. Missing/gone worktree → `state: unknown · source: none · worktree gone (torn down?)`.
|
|
213
|
+
3. No recorded backend target:
|
|
214
|
+
- a log verb mapping to a recognized run-state → `source: status-log`;
|
|
215
|
+
- otherwise → `state: unknown · source: none · no backend target recorded`.
|
|
216
|
+
4. Backend target **alive** (`tmux display-message -p -t <t> '#{pane_id}'` / `herdr pane get <t>`):
|
|
217
|
+
- terminal log verdict (`done`/`failed`) → `source: status-log`;
|
|
218
|
+
- working/parked/blocked/paused → `source: status-log`;
|
|
219
|
+
- otherwise → `state: working · source: backend · endpoint alive: <t>`.
|
|
220
|
+
5. Backend target **gone**: a terminal log verdict is durable truth; otherwise
|
|
221
|
+
`state: unknown · source: none · backend target gone: <t>`.
|
|
222
|
+
|
|
223
|
+
### 4.2 Verb → state map (`bin/vor-crew-state.sh:71-81`)
|
|
224
|
+
|
|
225
|
+
| Log verb | Canonical state |
|
|
226
|
+
|---|---|
|
|
227
|
+
| `working` | `working` |
|
|
228
|
+
| `needs-decision` | `parked` |
|
|
229
|
+
| `blocked` | `blocked` |
|
|
230
|
+
| `done` | `done` |
|
|
231
|
+
| `failed` | `failed` |
|
|
232
|
+
| `paused` (configurable verb) | `paused` |
|
|
233
|
+
| anything else, incl. `resolved` | `unknown` (never emitted as state) |
|
|
234
|
+
|
|
235
|
+
`BROKK_PAUSED_VERB` (default `paused`) retargets the paused verb consistently across brief,
|
|
236
|
+
state, and reconciliation.
|
|
237
|
+
|
|
238
|
+
---
|
|
239
|
+
|
|
240
|
+
## 5. Dispatch profiles and harness override
|
|
241
|
+
|
|
242
|
+
### 5.1 `config/eindri-dispatch.json`
|
|
243
|
+
|
|
244
|
+
Brokk reads the dispatch rules **before** dispatching and passes concrete flags. Schema:
|
|
245
|
+
`version`, `platform`, `notes`, `rules[]` (`when`, `use[]`, `why`), `default[]`.
|
|
246
|
+
|
|
247
|
+
| Rule (`when`) | Harness | Model | Effort |
|
|
248
|
+
|---|---|---|---|
|
|
249
|
+
| General implementation, refactoring, bug fixes | `opencode` | `opencode-go/deepseek-v4.1-flash` | `medium` |
|
|
250
|
+
| Deep investigation, diagnosis, planning, design | `opencode` | `opencode-go/deepseek-v4.1-flash` | `xhigh` |
|
|
251
|
+
| Trivial mechanical edits / file gathering | `opencode` | `opencode-go/deepseek-v4.1-flash` | `low` |
|
|
252
|
+
| Long-running autonomous / background execution | `pi` | (Pi default) | `medium` |
|
|
253
|
+
| **default** | `opencode` | `opencode-go/deepseek-v4.1-flash` | `medium` |
|
|
254
|
+
|
|
255
|
+
Because this file exists, a fresh spawn without an explicit `--harness` is refused — the agent
|
|
256
|
+
must consult the rules and pass the resolved harness. Validate it with:
|
|
257
|
+
|
|
258
|
+
```bash
|
|
259
|
+
python3 -c "import json;json.load(open('config/eindri-dispatch.json'))"
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
### 5.2 `config/eindri-harness` (harness override)
|
|
263
|
+
|
|
264
|
+
Single first non-empty, non-comment line: `<harness> [<model>] [<effort>]`
|
|
265
|
+
(`bin/hamr-harness.sh:21-24`). Today's file is just `opencode` (harness-only).
|
|
266
|
+
|
|
267
|
+
```bash
|
|
268
|
+
bin/hamr-harness.sh eindri # effective Eindri harness
|
|
269
|
+
bin/hamr-harness.sh eindri-model # optional model token (empty when absent)
|
|
270
|
+
bin/hamr-harness.sh eindri-effort # optional effort token (empty when absent)
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
Model/effort come **only** from this file. `default` or absent resolves to Brokk's own harness.
|
|
274
|
+
|
|
275
|
+
---
|
|
276
|
+
|
|
277
|
+
## 6. Yggdrasil — worktree isolation
|
|
278
|
+
|
|
279
|
+
`bin/einherjar-spawn.sh` creates or reuses the worktree at `$BROKK_HOME/.yggdrasil/<id>`:
|
|
280
|
+
|
|
281
|
+
- Base ref: `origin/HEAD` when resolvable, else `HEAD`; created `--detach` so the worker's
|
|
282
|
+
branch is its own (`bin/einherjar-spawn.sh:373-386`).
|
|
283
|
+
- A pre-existing directory that is not a worktree root is refused (no silent reuse).
|
|
284
|
+
- A relaunch reuses the exact recorded `worktree` and **refuses if it is gone**.
|
|
285
|
+
- The linked worktree's `.git` file points at the project's common git dir; that dir's path is
|
|
286
|
+
recorded (`GIT_COMMON`) so Utgard can mount it at the same path.
|
|
287
|
+
|
|
288
|
+
Manual equivalents (for inspection/repair):
|
|
289
|
+
|
|
290
|
+
```bash
|
|
291
|
+
git -C <project-dir> worktree add --detach .yggdrasil/<id> HEAD
|
|
292
|
+
git -C .yggdrasil/<id> rev-parse --show-toplevel
|
|
293
|
+
git -C <project-dir> worktree list
|
|
294
|
+
git -C <project-dir> worktree remove .yggdrasil/<id> # teardown
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
> **Isolation assertion is authoritative.** The brief makes the worker prove
|
|
298
|
+
> `pwd -P` and `git rev-parse --show-toplevel` are the worktree, not the primary checkout. If
|
|
299
|
+
> they are not, the worker must append `blocked: launched in primary checkout, not an isolated
|
|
300
|
+
> worktree` and stop.
|
|
301
|
+
|
|
302
|
+
---
|
|
303
|
+
|
|
304
|
+
## 7. Utgard — Docker sealing
|
|
305
|
+
|
|
306
|
+
`--isolation auto` seals when `docker` is on `PATH` **and** `utgard-runner:latest` exists;
|
|
307
|
+
otherwise it runs in the worktree and reports the decision. `--isolation on` fails closed if
|
|
308
|
+
either is missing.
|
|
309
|
+
|
|
310
|
+
Build the image:
|
|
311
|
+
|
|
312
|
+
```bash
|
|
313
|
+
docker build -f .agents/sandbox/Dockerfile.utgard -t utgard-runner:latest .agents/sandbox
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
The exact launch line emitted by `bin/einherjar-spawn.sh:471` (real flags):
|
|
317
|
+
|
|
318
|
+
```bash
|
|
319
|
+
docker run --rm -it --network none --cpus 1.0 --memory 512m \
|
|
320
|
+
--security-opt no-new-privileges --user "$(id -u):$(id -g)" -e HOME=/tmp \
|
|
321
|
+
-v "<worktree>:/sandbox/workspace" \
|
|
322
|
+
[-v "<git-common-dir>:<git-common-dir>"] \
|
|
323
|
+
-v "<STATE>:<STATE>" -v "<DATA>:<DATA>" \
|
|
324
|
+
-w /sandbox/workspace utgard-runner:latest bash "<state>/<id>.launch.sh"
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
| Flag | Why it is there |
|
|
328
|
+
|---|---|
|
|
329
|
+
| `--rm` | No residue; a failed run never accumulates containers. |
|
|
330
|
+
| `--network none` | No network by law (`.agents/sandbox/README.md`). |
|
|
331
|
+
| `--cpus 1.0 --memory 512m` | Hard CPU/RAM caps mirroring `sandcastle.config.json`. |
|
|
332
|
+
| `--security-opt no-new-privileges` | No privilege escalation. |
|
|
333
|
+
| `--user "$(id -u):$(id -g)"` | **The host UID/GID fix.** Without it the worker writes files owned by `agentuser`/root and the host cannot manage them. |
|
|
334
|
+
| `-e HOME=/tmp` | The image's `HOME` is read-only/absent for the mounted user; `/tmp` keeps tool caches writable. |
|
|
335
|
+
| `-v <worktree>:/sandbox/workspace` | The worktree is the only working surface. |
|
|
336
|
+
| `-v <git-common-dir>:<same path>` | **The `.git` fix.** A linked worktree's `.git` is a file pointing at the common git dir; mounting it at the identical path lets git resolve inside the container. Without it every git command fails with "not a git repository". |
|
|
337
|
+
| `-v <STATE>:<STATE>` / `-v <DATA>:<DATA>` | The brief's status, inbox, meta, and report paths resolve identically inside and outside. |
|
|
338
|
+
| `-w /sandbox/workspace` | Working directory matches the brief's under-Utgard path. |
|
|
339
|
+
|
|
340
|
+
The sidecar `state/<id>.utgard` records the effective seal:
|
|
341
|
+
|
|
342
|
+
```
|
|
343
|
+
image=utgard-runner:latest
|
|
344
|
+
network=none
|
|
345
|
+
cpus=1.0
|
|
346
|
+
memory=512m
|
|
347
|
+
security_opt=no-new-privileges
|
|
348
|
+
user=<uid>:<gid>
|
|
349
|
+
worktree_mount=<wt>:/sandbox/workspace
|
|
350
|
+
git_common_mount=<path>:<path>|none
|
|
351
|
+
state_mount=<STATE>:<STATE>
|
|
352
|
+
data_mount=<DATA>:<DATA>
|
|
353
|
+
launch=<state>/<id>.launch.sh
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
`--isolation off` removes `state/<id>.utgard` and launches `bash <state>/<id>.launch.sh` in
|
|
357
|
+
the worktree.
|
|
358
|
+
|
|
359
|
+
---
|
|
360
|
+
|
|
361
|
+
## 8. Valhalla — supervision
|
|
362
|
+
|
|
363
|
+
- **tmux**: creates/detaches window `eindri-<id>` in the current or `brokk` session, disables
|
|
364
|
+
auto-rename, sends the launch command. A duplicate window name is refused
|
|
365
|
+
(`bin/einherjar-spawn.sh:478-499`).
|
|
366
|
+
- **herdr**: creates workspace `eindri-<id>` with `--cwd <worktree> --no-focus`, then sends
|
|
367
|
+
the launch command to its pane (`bin/einherjar-spawn.sh:501-516`).
|
|
368
|
+
- **Skill assets**: `assets/pi-boot/supervision-tree.yml` defines the Valhalla supervision
|
|
369
|
+
branch (brokk-primary, three Eindri workers, herdr, Mimirsbrunn, Ratatoskr) and
|
|
370
|
+
`assets/pi-boot/herdr-profile.toml` the pane layout. These are reference configurations;
|
|
371
|
+
apply them through the process supervisor, do not hand-run panes.
|
|
372
|
+
|
|
373
|
+
Inspect a worker:
|
|
374
|
+
|
|
375
|
+
```bash
|
|
376
|
+
bin/vor-crew-state.sh <id>
|
|
377
|
+
tmux list-windows -t brokk -F '#{window_name}'
|
|
378
|
+
tmux capture-pane -pt brokk:eindri-<id> | tail -40
|
|
379
|
+
herdr pane list --workspace <ws>
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
---
|
|
383
|
+
|
|
384
|
+
## 9. Worked examples
|
|
385
|
+
|
|
386
|
+
### 9.1 Ship a direct PR
|
|
387
|
+
|
|
388
|
+
```bash
|
|
389
|
+
# 1. Brief (mode resolved at intake)
|
|
390
|
+
bin/erindi-brief.sh W0123 my-repo --mode direct-PR
|
|
391
|
+
# 2. Brokk replaces {TASK} in data/W0123/brief.md
|
|
392
|
+
# 3. Spawn with an explicit dispatch-resolved harness
|
|
393
|
+
bin/einherjar-spawn.sh W0123 /home/<user>/repos/my-repo \
|
|
394
|
+
--mode direct-PR --harness opencode \
|
|
395
|
+
--model opencode-go/deepseek-v4.1-flash --effort medium \
|
|
396
|
+
--backend tmux --isolation auto
|
|
397
|
+
# 4. Watch state
|
|
398
|
+
bin/vor-crew-state.sh W0123
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
### 9.2 Scout a codebase (report only)
|
|
402
|
+
|
|
403
|
+
```bash
|
|
404
|
+
bin/erindi-brief.sh W0124 my-repo --scout
|
|
405
|
+
bin/einherjar-spawn.sh W0124 /home/<user>/repos/my-repo --scout \
|
|
406
|
+
--harness opencode --effort xhigh
|
|
407
|
+
```
|
|
408
|
+
|
|
409
|
+
Report lands at `data/W0124/report.md`; the worktree is scratch.
|
|
410
|
+
|
|
411
|
+
### 9.3 Relaunch after a crash
|
|
412
|
+
|
|
413
|
+
```bash
|
|
414
|
+
bin/erindi-brief.sh W0123 --relaunch # same delivery contract
|
|
415
|
+
bin/einherjar-spawn.sh W0123 --relaunch --harness pi --effort high
|
|
416
|
+
```
|
|
417
|
+
|
|
418
|
+
Worktree, kind, and mode come from `state/W0123.meta`; only harness/model/effort/isolation may
|
|
419
|
+
change. If the worktree is gone, the relaunch is refused — recover it first.
|
|
420
|
+
|
|
421
|
+
### 9.4 Sealed run (Utgard)
|
|
422
|
+
|
|
423
|
+
```bash
|
|
424
|
+
docker build -f .agents/sandbox/Dockerfile.utgard -t utgard-runner:latest .agents/sandbox
|
|
425
|
+
bin/einherjar-spawn.sh W0125 my-repo --mode local-only --harness opencode --isolation on
|
|
426
|
+
cat state/W0125.utgard
|
|
427
|
+
```
|
|
428
|
+
|
|
429
|
+
### 9.5 Steer a running worker
|
|
430
|
+
|
|
431
|
+
```bash
|
|
432
|
+
mkdir -p state/W0123.inbox
|
|
433
|
+
printf 'Use the v2 API; the v1 endpoint is deprecated.\n' > state/W0123.inbox/001.msg
|
|
434
|
+
# worker reads, acts, then acknowledges:
|
|
435
|
+
# mv state/W0123.inbox/001.msg state/W0123.inbox/handled/
|
|
436
|
+
```
|
|
437
|
+
|
|
438
|
+
---
|
|
439
|
+
|
|
440
|
+
## 10. The record — `state/<id>.meta`
|
|
441
|
+
|
|
442
|
+
Line-oriented `key=value` written atomically by spawn:
|
|
443
|
+
|
|
444
|
+
| Key | Meaning |
|
|
445
|
+
|---|---|
|
|
446
|
+
| `id`, `kind` | Task id; `ship` or `scout`. |
|
|
447
|
+
| `mode`, `yolo` | Ship only: the delivery mode and merge posture. |
|
|
448
|
+
| `harness`, `raw_launch` | Adapter name; raw command when the escape hatch was used. |
|
|
449
|
+
| `model`, `effort` | Resolved model/effort (may be empty). |
|
|
450
|
+
| `backend`, `window` | `tmux`/`herdr` and the target id. |
|
|
451
|
+
| `worktree`, `project` | The isolated worktree and its source repo. |
|
|
452
|
+
| `brief`, `launch` | Paths to `brief.md` and the generated `.launch.sh`. |
|
|
453
|
+
| `isolation` | `on`/`off` effective seal. |
|
|
454
|
+
| `spawn_gen` | Unique spawn generation (`s<epoch>.<pid>.<rand>`). |
|
|
455
|
+
|
|
456
|
+
`meta_value` reads the **last** matching key (`grep ... | tail -1`), so a torn write can never
|
|
457
|
+
shadow a completed record once the atomic `mv` lands.
|
|
458
|
+
|
|
459
|
+
---
|
|
460
|
+
|
|
461
|
+
## 11. Verification
|
|
462
|
+
|
|
463
|
+
```bash
|
|
464
|
+
# 1. Scripts parse
|
|
465
|
+
for f in bin/einherjar-spawn.sh bin/erindi-brief.sh bin/vor-crew-state.sh \
|
|
466
|
+
bin/hamr-harness.sh bin/gleipnir-lock-lib.sh; do bash -n "$f" && echo "OK $f"; done
|
|
467
|
+
|
|
468
|
+
# 2. Dispatch config parses
|
|
469
|
+
python3 -c "import json;json.load(open('config/eindri-dispatch.json'))"
|
|
470
|
+
|
|
471
|
+
# 3. Harness detection answers
|
|
472
|
+
bin/hamr-harness.sh
|
|
473
|
+
bin/hamr-harness.sh eindri
|
|
474
|
+
|
|
475
|
+
# 4. Help/usage renders (exit 0)
|
|
476
|
+
bin/einherjar-spawn.sh --help >/dev/null && echo "spawn help OK"
|
|
477
|
+
bin/erindi-brief.sh --help >/dev/null && echo "brief help OK"
|
|
478
|
+
|
|
479
|
+
# 5. Fail-closed on a fresh spawn without an explicit harness (dispatch active)
|
|
480
|
+
bin/einherjar-spawn.sh demo /tmp/not-a-repo --mode local-only; echo "exit=$?"
|
|
481
|
+
|
|
482
|
+
# 6. Worktree isolation for a real git repo
|
|
483
|
+
git -C <project-dir> worktree list | grep .yggdrasil/<id>
|
|
484
|
+
```
|
|
485
|
+
|
|
486
|
+
---
|
|
487
|
+
|
|
488
|
+
## 12. Gotchas
|
|
489
|
+
|
|
490
|
+
- **Ymir itself is not a git repo.** `git -C $YMIR_ROOT rev-parse` fails; a spawn's
|
|
491
|
+
`<project-dir>` must be a real git working tree or Yggdrasil cannot create the worktree.
|
|
492
|
+
- **`config/eindri-dispatch.json` active ⇒ no implicit harness.** Omitting `--harness` is a
|
|
493
|
+
hard error, not a fallback.
|
|
494
|
+
- **Verified set is small.** `opencode pi pi-signed` only. `claude`/`codex`/`cursor` are
|
|
495
|
+
**detected** but not launch-verified; pass a raw `--harness` command to trial one.
|
|
496
|
+
- **Brief must exist before spawn.** Spawn refuses with the exact regeneration command in the
|
|
497
|
+
error.
|
|
498
|
+
- **Mode drift is refused.** If `Delivery contract: mode=` ≠ `--mode`, spawn exits 1.
|
|
499
|
+
- **tmux window collision.** `brokk:eindri-<id>` already existing aborts the spawn; tear it
|
|
500
|
+
down or relaunch.
|
|
501
|
+
- **`--relaunch` refuses a vanished worktree.** Recover or recreate it; do not delete the meta.
|
|
502
|
+
- **Docker UID/GID and `.git` mount are mandatory** for a sealed run; see §7.
|
|
503
|
+
- **`resolved` is never a state.** Vör explicitly maps it to `unknown`/non-state so a closed
|
|
504
|
+
decision cannot masquerade as current work.
|
|
505
|
+
- **`paused` ≠ `blocked`.** Paused = known external wait expected to clear; blocked = Brokk
|
|
506
|
+
must act.
|
|
507
|
+
- **Status is an event log, not state.** Always reconcile with `vor-crew-state.sh`, not `tail`.
|
|
508
|
+
|
|
509
|
+
## 13. Maintaining this
|
|
510
|
+
|
|
511
|
+
- When a spawn flag or the printed `spawned` line changes, update §2 and the compiled example
|
|
512
|
+
in the plan (`docs/plans/29-brokk-distro-runtime.md`).
|
|
513
|
+
- When a delivery mode is added, update the brief (`bin/erindi-brief.sh`), the dispatch rules,
|
|
514
|
+
and the tables in §3.4 in the same change.
|
|
515
|
+
- When the Utgard `docker run` line changes (`bin/einherjar-spawn.sh:451-475`), re-run §11 and
|
|
516
|
+
update §7 verbatim.
|
|
517
|
+
- Keep `VERIFIED_HARNESSES`, the dispatch profiles, and `bin/hamr-harness.sh`'s adapter set in
|
|
518
|
+
agreement; a mismatch is a compliance failure (see `runtime-compliance.md`).
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
# Galdr Assets — Build Tools & Worker References
|
|
2
|
+
|
|
3
|
+
This directory contains the assets that Galdr needs to understand about different build tools and their requirements, including worker profiles and tool-specific configurations.
|
|
4
|
+
|
|
5
|
+
## The Einherjar — Agent Fleet
|
|
6
|
+
|
|
7
|
+
Eight specialists, one primary. Each is named for the figure whose role matches its work.
|
|
8
|
+
|
|
9
|
+
| Agent | Norse | Role | Domain | File |
|
|
10
|
+
|-------|-------|------|--------|------|
|
|
11
|
+
| **Brokk** | Brokk | Primary agent — forge-master, dispatcher, supervisor | All | `.agents/agents/brokk.md` |
|
|
12
|
+
| **Sindri** | Sindri (smith) | Code synthesis, refactoring, tests, CLI tools | Development | `.agents/agents/sindri-developer.md` |
|
|
13
|
+
| **Bragi** | Bragi (skald) | Marketing, content, SEO, social copy | Marketing | `.agents/agents/bragi-marketer.md` |
|
|
14
|
+
| **Huginn** | Huginn (sage) | Research, web search, analysis, knowledge discovery | Research | `.agents/agents/huginn-researcher.md` |
|
|
15
|
+
| **Mimir** | Mimir | Planner — memory, recall, architecture sequencing | Planning | `.agents/agents/mimir-planner.md` |
|
|
16
|
+
| **Kvasir** | Kvasir (wisest) | Scout — reconnaissance, investigation | Scout | `.agents/agents/kvasir-scout.md` |
|
|
17
|
+
| **Forseti** | Forseti (reconciler) | Reviewer — QA, acceptance, compliance | Review | `.agents/agents/forseti-reviewer.md` |
|
|
18
|
+
| **Snotra** | Snotra (modest) | Documenter — docs, changelogs, runbooks | Docs | `.agents/agents/snotra-documenter.md` |
|
|
19
|
+
|
|
20
|
+
**Rule:** Every agent carries its rune of introduction (Agent Card). Every agent
|
|
21
|
+
reports to Brokk. Brokk reports to the Allfather.
|
|
22
|
+
|
|
23
|
+
## Legacy Sub-Agent Profiles (`.agents/subagents/*.md` — superseded)
|
|
24
|
+
|
|
25
|
+
These profiles were superseded by the Einherjar fleet above. They remain for
|
|
26
|
+
historical reference only.
|
|
27
|
+
|
|
28
|
+
Each worker operates inside Utgard containers on Yggdrasil worktrees with specific specializations:
|
|
29
|
+
|
|
30
|
+
### developer (`.agents/subagents/developer.md`)
|
|
31
|
+
- **Role**: Code synthesis, refactoring, test writing, CLI tools, package management
|
|
32
|
+
- **Capabilities**: code_synthesis, refactoring, test_writing, cli_tools, package_management
|
|
33
|
+
- **Tools**: yggdrasil, herder, hermes_runner, vector_db, supabase
|
|
34
|
+
- **Workspace patterns**: development/, .agents/tools/, .agents/skills/
|
|
35
|
+
- **Security**: runs_in_utgard: true, utgard_network: none, utgard_resource_caps: true, yggdrasil_worktree: true, sandboxed: true
|
|
36
|
+
|
|
37
|
+
### marketer (`.agents/subagents/marketer.md`)
|
|
38
|
+
- **Role**: Content creation, SEO, social copy, marketing campaigns
|
|
39
|
+
- **Capabilities**: content_creation, seo_optimization, social_copy, campaign_planning, market_research
|
|
40
|
+
- **Tools**: vector_db, supabase, hermes_runner, herder, yggdrasil
|
|
41
|
+
- **Workspace patterns**: marketing/, .agents/assets/templates/, .agents/skills/
|
|
42
|
+
- **Security**: runs_in_utgard: true, utgard_network: none, utgard_resource_caps: true, yggdrasil_worktree: true, sandboxed: true
|
|
43
|
+
|
|
44
|
+
### researcher (`.agents/subagents/researcher.md`)
|
|
45
|
+
- **Role**: RAG, web search, analysis, knowledge discovery
|
|
46
|
+
- **Capabilities**: rag_search, web_search, analysis, summarization, entity_extraction
|
|
47
|
+
- **Tools**: vector_db, hermes_runner, herder, yggdrasil, supabase
|
|
48
|
+
- **Workspace patterns**: development/, .agents/memory/, .agents/assets/templates/
|
|
49
|
+
- **Security**: runs_in_utgard: true, utgard_network: none, utgard_resource_caps: true, yggdrasil_worktree: true, sandboxed: true
|
|
50
|
+
|
|
51
|
+
## Build Tool Categories
|
|
52
|
+
|
|
53
|
+
Galdr needs to know about these build tool categories and their asset requirements:
|
|
54
|
+
|
|
55
|
+
### 1. Python Smíðja Tools
|
|
56
|
+
- **Location**: `templates/smidja/` (deterministic Python scripts)
|
|
57
|
+
- **Key files**: `smidja_*.py` orchestrator scripts, `smidja_modules/*.py`
|
|
58
|
+
- **Data contracts**: Pydantic v2 data types in `smidja_modules/data_types.py`
|
|
59
|
+
- **Agent runtime**: `agent_pi.py` (Pi), `agent_opencode.py` (opencode)
|
|
60
|
+
- **Tracing**: SQLite WAL + JSONL events in `smidja_modules/tracer.py`
|
|
61
|
+
- **Quality gates**: Deterministic subprocess runs in `smidja_modules/quality.py`
|
|
62
|
+
- **Permissions**: Path-based write enforcement in `smidja_modules/permissions.py`
|
|
63
|
+
- **Context handoff**: File-based `context_handoff/` dir in `smidja_modules/agents.py`
|
|
64
|
+
- **Sub-agents**: Task-tool lane materialization (G2) in `smidja_modules/agents.py`
|
|
65
|
+
|
|
66
|
+
### 2. Command-Smíðja (Skill-based)
|
|
67
|
+
- **Location**: Reuse `smidja` validated OSS project
|
|
68
|
+
- **Features**: Smíðja: deterministic Python owns graph, agents bounded nodes, typed JSON envelopes, SQLite telemetry, Vue visualizer (`apps/visualizer/`, served at port 8437)
|
|
69
|
+
- **Assets**: Smíðja scripts, roster/config, visualizer
|
|
70
|
+
|
|
71
|
+
### 3. Brokk Crew Orchestration
|
|
72
|
+
- **Location**: External agent distro by kunchenguid
|
|
73
|
+
- **Features**: One Allfather talks to first mate running autonomous coding agents in tmux panes on git worktrees
|
|
74
|
+
- **Project modes**: no-mistakes/direct-PR/local-only/+yolo
|
|
75
|
+
- **Assets**: Crew orchestration, worktree isolation (yggdrasil/orca), restart-proof disk state, supervision watcher, X/Discord Relay, eindri-homes
|
|
76
|
+
|
|
77
|
+
### 4. Galdr Skill Assets
|
|
78
|
+
- **Location**: `.agents/skills/galdr-ymirsystem/assets/`
|
|
79
|
+
- **Purpose**: Reference data for skill synthesis and compliance checking
|
|
80
|
+
- **Contents**: Tool schemas, template patterns, Eindri profile references
|
|
81
|
+
|
|
82
|
+
## Tool-Specific Asset Requirements
|
|
83
|
+
|
|
84
|
+
### TOON Output Format
|
|
85
|
+
- All Galdr-generated CLI tools must output in TOON (Token-Oriented Object Notation) format
|
|
86
|
+
- ~40% token savings over equivalent JSON
|
|
87
|
+
- Convert to TOON at the output boundary — keep internal logic on JSON
|
|
88
|
+
- Minimal default schemas: 3-4 fields per list item, not 10+
|
|
89
|
+
|
|
90
|
+
### Norse Naming Convention
|
|
91
|
+
- All new skills must follow Norse mythology naming (aett pattern)
|
|
92
|
+
- galdr aett: incantation / chant standards
|
|
93
|
+
- Examples: galdr, tyr-check, smidja-factory, valhalla, skrymir, bifrost, heimdall
|
|
94
|
+
|
|
95
|
+
### Utgard Sandbox Requirements
|
|
96
|
+
- All agent-facing tools must specify: runs_in_utgard: true
|
|
97
|
+
- Network: utgard_network: none (no network access)
|
|
98
|
+
- Resource caps: utgard_resource_caps: true
|
|
99
|
+
- Worktree integration: yggdrasil_worktree: true
|
|
100
|
+
- Sandboxed execution: sandboxed: true
|
|
101
|
+
|
|
102
|
+
### Session Integration
|
|
103
|
+
- Primary: session hook (installs/plugin after user intent is clear)
|
|
104
|
+
- Secondary: installable Agent Skill (loads on demand, no per-session token cost)
|
|
105
|
+
- Recommended: hook first (ambient context plus live state), skill second (lower overhead, broader support)
|
|
106
|
+
|
|
107
|
+
## Compliance Gates
|
|
108
|
+
|
|
109
|
+
Before a new Galdr skill is considered "forged", it must pass:
|
|
110
|
+
|
|
111
|
+
1. **TOON output test** — all stdout output uses TOON format, measured ~40% smaller than equivalent JSON across 3 sample outputs
|
|
112
|
+
2. **Principle compliance** — all 10 design principles assessed via tyr-check
|
|
113
|
+
3. **Norse name validity** — skill name follows the aett pattern, not a random label
|
|
114
|
+
4. **Frame integration** — SKILL.md placed in `.agents/skills/<name>/`, referenced in `.agents/skills/README.md`
|
|
115
|
+
5. **Mimirsbrunn observation** — the skill's creation is observed into the well (`POST /observe`) before it is deemed "live"
|
|
116
|
+
6. **Eindri worker compatibility** — skill declares workspace patterns compatible with Eindri sub-agent profiles
|
|
117
|
+
7. **Utgard sandbox validation** — skill specifies: runs_in_utgard: true, utgard_network: none, utgard_resource_caps: true, yggdrasil_worktree: true, sandboxed: true
|
|
118
|
+
|
|
119
|
+
## Asset Reference Files
|
|
120
|
+
|
|
121
|
+
| File | Purpose | Reference |
|
|
122
|
+
|------|---------|-----------|
|
|
123
|
+
| `eindri-profiles.md` | Eindri sub-agent role profiles | `.agents/subagents/` |
|
|
124
|
+
| `build-tool-categories.md` | Build tool category definitions | This file |
|
|
125
|
+
| `tool-schemas/` | JSON/TON schemas for different tool types | `tool-schemas/` directory |
|
|
126
|
+
| `workspace-patterns.md` | Workspace pattern conventions | `workspace-patterns.md` |
|
|
127
|
+
| `compliance-requirements.md` | Compliance gate requirements | `compliance-requirements.md` |
|
|
128
|
+
|
|
129
|
+
## Usage
|
|
130
|
+
|
|
131
|
+
Galdr references these assets when:
|
|
132
|
+
- Synthesizing new skills via `brokk-craft` (planned) against `galdr`'s build-method
|
|
133
|
+
- Validating existing skills via `tyr-check`
|
|
134
|
+
- Ensuring new CLI tools adhere to Ymir ergonomic standards
|
|
135
|
+
- Maintaining Norse naming convention and aett pattern consistency
|
|
136
|
+
- Verifying Utgard sandbox compliance for all agent-facing tools
|