@zerwiz/ymir 0.1.4 → 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 -59
- 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,96 @@
|
|
|
1
|
+
# PI Profile — Default Brokk Harness Profile for Ymir
|
|
2
|
+
|
|
3
|
+
profile:
|
|
4
|
+
name: "pi"
|
|
5
|
+
description: "Principal Investigator — system primary agent for Ymir"
|
|
6
|
+
version: "1.0.0"
|
|
7
|
+
|
|
8
|
+
agent:
|
|
9
|
+
model: "lmstudio/qwen3.6-35b-a3b"
|
|
10
|
+
temperature: 0.7
|
|
11
|
+
max_tokens: 8192
|
|
12
|
+
system_prompt: "BROKK — SYSTEM OPERATING MANUAL (see .opencode/agents/brokk.md)"
|
|
13
|
+
|
|
14
|
+
context:
|
|
15
|
+
max_tokens: 48000
|
|
16
|
+
budget_warning_percent: 50
|
|
17
|
+
compaction:
|
|
18
|
+
auto: true
|
|
19
|
+
tail_turns: 15
|
|
20
|
+
|
|
21
|
+
tools:
|
|
22
|
+
enabled:
|
|
23
|
+
- read
|
|
24
|
+
- write
|
|
25
|
+
- edit
|
|
26
|
+
- bash
|
|
27
|
+
- glob
|
|
28
|
+
- grep
|
|
29
|
+
- task
|
|
30
|
+
- skill
|
|
31
|
+
- question
|
|
32
|
+
- webfetch
|
|
33
|
+
- websearch
|
|
34
|
+
- lsp
|
|
35
|
+
- todowrite
|
|
36
|
+
bash_patterns:
|
|
37
|
+
- "git *": "allow"
|
|
38
|
+
- "npx *": "allow"
|
|
39
|
+
- "python3 *": "allow"
|
|
40
|
+
- "docker *": "allow"
|
|
41
|
+
- "gh *": "allow"
|
|
42
|
+
- "*": "allow"
|
|
43
|
+
|
|
44
|
+
workspace:
|
|
45
|
+
root: "$YMIR_ROOT"
|
|
46
|
+
realm: "auto"
|
|
47
|
+
paths:
|
|
48
|
+
skills: ".agents/skills"
|
|
49
|
+
tools: ".agents/tools"
|
|
50
|
+
subagents: ".agents/subagents"
|
|
51
|
+
assets: ".agents/assets"
|
|
52
|
+
plans: "docs/plans"
|
|
53
|
+
memory: "workspace/memory"
|
|
54
|
+
|
|
55
|
+
herdr:
|
|
56
|
+
session_name: "ymir-pi"
|
|
57
|
+
layout: "vertical"
|
|
58
|
+
panes:
|
|
59
|
+
- name: "brokk"
|
|
60
|
+
command: "opencode"
|
|
61
|
+
focus: true
|
|
62
|
+
- name: "eindri-dev"
|
|
63
|
+
command: "opencode"
|
|
64
|
+
- name: "eindri-marketer"
|
|
65
|
+
command: "opencode"
|
|
66
|
+
- name: "eindri-researcher"
|
|
67
|
+
command: "opencode"
|
|
68
|
+
- name: "valhalla"
|
|
69
|
+
command: "tail -f /dev/null"
|
|
70
|
+
|
|
71
|
+
fm_spawn:
|
|
72
|
+
default_profile: "pi"
|
|
73
|
+
worker_profiles:
|
|
74
|
+
- "eindri-dev"
|
|
75
|
+
- "eindri-marketer"
|
|
76
|
+
- "eindri-researcher"
|
|
77
|
+
dispatch_timeout_ms: 30000
|
|
78
|
+
observe_before_dispatch: true
|
|
79
|
+
carve_runes_on_complete: true
|
|
80
|
+
|
|
81
|
+
mimirsbrunn:
|
|
82
|
+
endpoint: "http://localhost:4602"
|
|
83
|
+
agent_keys:
|
|
84
|
+
- "agent://ymir/brokk"
|
|
85
|
+
- "agent://ymir/eindri-dev"
|
|
86
|
+
- "agent://ymir/eindri-marketer"
|
|
87
|
+
- "agent://ymir/eindri-researcher"
|
|
88
|
+
recall_mode: "hybrid"
|
|
89
|
+
|
|
90
|
+
utgard:
|
|
91
|
+
default_caps:
|
|
92
|
+
cpu: "2.0"
|
|
93
|
+
memory: "4g"
|
|
94
|
+
timeout: "300s"
|
|
95
|
+
network: "none"
|
|
96
|
+
rootless: true
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
# Valhalla Supervision Tree — PI Supervision Branch
|
|
2
|
+
|
|
3
|
+
supervision:
|
|
4
|
+
name: "ymir-pi-supervision"
|
|
5
|
+
description: "Valhalla supervision branch for PI primary boot under Brokk"
|
|
6
|
+
backend: "supervisord" # or pm2/docker/systemd/npm
|
|
7
|
+
config_file: "$YMIR_ROOT/.config/supervisord/ymir-pi.conf"
|
|
8
|
+
|
|
9
|
+
processes:
|
|
10
|
+
- name: "brokk-primary"
|
|
11
|
+
command: "opencode --agent brokk"
|
|
12
|
+
directory: "$YMIR_ROOT"
|
|
13
|
+
user: "<user>"
|
|
14
|
+
autostart: true
|
|
15
|
+
autorestart: "unexpected"
|
|
16
|
+
startsecs: 10
|
|
17
|
+
startretries: 3
|
|
18
|
+
stderr_logfile: "$YMIR_ROOT/logs/brokk.err.log"
|
|
19
|
+
stdout_logfile: "$YMIR_ROOT/logs/brokk.out.log"
|
|
20
|
+
environment:
|
|
21
|
+
OPENCODE_AGENT: "brokk"
|
|
22
|
+
YMIR_REALM: "auto"
|
|
23
|
+
health_check:
|
|
24
|
+
endpoint: "http://localhost:8080/health/brokk"
|
|
25
|
+
interval: 30
|
|
26
|
+
timeout: 5
|
|
27
|
+
|
|
28
|
+
- name: "eindri-dev-worker"
|
|
29
|
+
command: "opencode --agent build"
|
|
30
|
+
directory: "$YMIR_ROOT/.yggdrasil/eindri-dev"
|
|
31
|
+
user: "<user>"
|
|
32
|
+
autostart: false
|
|
33
|
+
autorestart: "unexpected"
|
|
34
|
+
startsecs: 15
|
|
35
|
+
startretries: 2
|
|
36
|
+
stderr_logfile: "$YMIR_ROOT/logs/eindri-dev.err.log"
|
|
37
|
+
stdout_logfile: "$YMIR_ROOT/logs/eindri-dev.out.log"
|
|
38
|
+
environment:
|
|
39
|
+
OPENCODE_AGENT: "build"
|
|
40
|
+
YMIR_REALM: "auto"
|
|
41
|
+
EINDRI_ROLE: "developer"
|
|
42
|
+
YGGDRASIL_WORKTREE: "$YMIR_ROOT/.yggdrasil/eindri-dev"
|
|
43
|
+
health_check:
|
|
44
|
+
endpoint: "http://localhost:8081/health/eindri-dev"
|
|
45
|
+
interval: 30
|
|
46
|
+
timeout: 5
|
|
47
|
+
|
|
48
|
+
- name: "eindri-marketer-worker"
|
|
49
|
+
command: "opencode --agent build"
|
|
50
|
+
directory: "$YMIR_ROOT/.yggdrasil/eindri-marketer"
|
|
51
|
+
user: "<user>"
|
|
52
|
+
autostart: false
|
|
53
|
+
autorestart: "unexpected"
|
|
54
|
+
startsecs: 15
|
|
55
|
+
startretries: 2
|
|
56
|
+
stderr_logfile: "$YMIR_ROOT/logs/eindri-marketer.err.log"
|
|
57
|
+
stdout_logfile: "$YMIR_ROOT/logs/eindri-marketer.out.log"
|
|
58
|
+
environment:
|
|
59
|
+
OPENCODE_AGENT: "build"
|
|
60
|
+
YMIR_REALM: "auto"
|
|
61
|
+
EINDRI_ROLE: "marketer"
|
|
62
|
+
YGGDRASIL_WORKTREE: "$YMIR_ROOT/.yggdrasil/eindri-marketer"
|
|
63
|
+
health_check:
|
|
64
|
+
endpoint: "http://localhost:8082/health/eindri-marketer"
|
|
65
|
+
interval: 30
|
|
66
|
+
timeout: 5
|
|
67
|
+
|
|
68
|
+
- name: "eindri-researcher-worker"
|
|
69
|
+
command: "opencode --agent build"
|
|
70
|
+
directory: "$YMIR_ROOT/.yggdrasil/eindri-researcher"
|
|
71
|
+
user: "<user>"
|
|
72
|
+
autostart: false
|
|
73
|
+
autorestart: "unexpected"
|
|
74
|
+
startsecs: 15
|
|
75
|
+
startretries: 2
|
|
76
|
+
stderr_logfile: "$YMIR_ROOT/logs/eindri-researcher.err.log"
|
|
77
|
+
stdout_logfile: "$YMIR_ROOT/logs/eindri-researcher.out.log"
|
|
78
|
+
environment:
|
|
79
|
+
OPENCODE_AGENT: "build"
|
|
80
|
+
YMIR_REALM: "auto"
|
|
81
|
+
EINDRI_ROLE: "researcher"
|
|
82
|
+
YGGDRASIL_WORKTREE: "$YMIR_ROOT/.yggdrasil/eindri-researcher"
|
|
83
|
+
health_check:
|
|
84
|
+
endpoint: "http://localhost:8083/health/eindri-researcher"
|
|
85
|
+
interval: 30
|
|
86
|
+
timeout: 5
|
|
87
|
+
|
|
88
|
+
- name: "herdr-multiplexer"
|
|
89
|
+
command: "herdr start --config $YMIR_ROOT/.agents/skills/galdr-ymirsystem/assets/pi-boot/herdr-profile.toml"
|
|
90
|
+
directory: "$YMIR_ROOT"
|
|
91
|
+
user: "<user>"
|
|
92
|
+
autostart: true
|
|
93
|
+
autorestart: "always"
|
|
94
|
+
startsecs: 5
|
|
95
|
+
startretries: 5
|
|
96
|
+
stderr_logfile: "$YMIR_ROOT/logs/herdr.err.log"
|
|
97
|
+
stdout_logfile: "$YMIR_ROOT/logs/herdr.out.log"
|
|
98
|
+
environment:
|
|
99
|
+
HERDR_SESSION: "ymir-pi"
|
|
100
|
+
THJAZI_PROTOCOL: "14"
|
|
101
|
+
health_check:
|
|
102
|
+
endpoint: "http://localhost:8084/health/herdr"
|
|
103
|
+
interval: 30
|
|
104
|
+
timeout: 5
|
|
105
|
+
|
|
106
|
+
- name: "mimirsbrunn-bridge"
|
|
107
|
+
command: "python3 $YMIR_ROOT/bin/mimir-bridge.py"
|
|
108
|
+
directory: "$YMIR_ROOT"
|
|
109
|
+
user: "<user>"
|
|
110
|
+
autostart: true
|
|
111
|
+
autorestart: "always"
|
|
112
|
+
startsecs: 10
|
|
113
|
+
startretries: 3
|
|
114
|
+
stderr_logfile: "$YMIR_ROOT/logs/mimirsbrunn.err.log"
|
|
115
|
+
stdout_logfile: "$YMIR_ROOT/logs/mimirsbrunn.out.log"
|
|
116
|
+
environment:
|
|
117
|
+
ENGRAM_PORT: "4602"
|
|
118
|
+
ENGRAM_DATA_DIR: "$YMIR_ROOT/.agents/memory"
|
|
119
|
+
health_check:
|
|
120
|
+
endpoint: "http://localhost:4602/health"
|
|
121
|
+
interval: 30
|
|
122
|
+
timeout: 5
|
|
123
|
+
|
|
124
|
+
- name: "ratatoskr-bus"
|
|
125
|
+
command: "node $YMIR_ROOT/.agents/bus/ratatoskr_server.js"
|
|
126
|
+
directory: "$YMIR_ROOT"
|
|
127
|
+
user: "<user>"
|
|
128
|
+
autostart: true
|
|
129
|
+
autorestart: "always"
|
|
130
|
+
startsecs: 5
|
|
131
|
+
startretries: 3
|
|
132
|
+
stderr_logfile: "$YMIR_ROOT/logs/ratatoskr.err.log"
|
|
133
|
+
stdout_logfile: "$YMIR_ROOT/logs/ratatoskr.out.log"
|
|
134
|
+
environment:
|
|
135
|
+
RATATOSKR_PORT: "4603"
|
|
136
|
+
REDIS_URL: "redis://localhost:6379"
|
|
137
|
+
health_check:
|
|
138
|
+
endpoint: "http://localhost:4603/health"
|
|
139
|
+
interval: 30
|
|
140
|
+
timeout: 5
|
|
141
|
+
|
|
142
|
+
groups:
|
|
143
|
+
- name: "pi-core"
|
|
144
|
+
processes: ["brokk-primary", "herdr-multiplexer", "mimirsbrunn-bridge", "ratatoskr-bus"]
|
|
145
|
+
priority: 10
|
|
146
|
+
|
|
147
|
+
- name: "eindri-workers"
|
|
148
|
+
processes: ["eindri-dev-worker", "eindri-marketer-worker", "eindri-researcher-worker"]
|
|
149
|
+
priority: 5
|
|
150
|
+
|
|
151
|
+
- name: "pi-all"
|
|
152
|
+
processes: ["pi-core", "eindri-workers"]
|
|
153
|
+
priority: 1
|
|
154
|
+
|
|
155
|
+
lifecycle:
|
|
156
|
+
on_start:
|
|
157
|
+
- "mkdir -p $YMIR_ROOT/logs"
|
|
158
|
+
- "mkdir -p $YMIR_ROOT/.yggdrasil"
|
|
159
|
+
- "mkdir -p $YMIR_ROOT/workspace/memory"
|
|
160
|
+
on_stop:
|
|
161
|
+
- "echo 'Valhalla: PI supervision branch stopped' >> $YMIR_ROOT/workspace/memory/runes_audit.md"
|
|
162
|
+
on_restart:
|
|
163
|
+
- "echo 'Valhalla: Process $PROCESS_NAME restarted at $(date)' >> $YMIR_ROOT/workspace/memory/runes_audit.md"
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# PI Primary Boot — how Ymir boots as Brokk
|
|
2
|
+
|
|
3
|
+
Load this when building or changing the PI primary boot path. Ymir's system
|
|
4
|
+
primary boots as **PI** into the Brokk distro runtime; Galdr governs its CLI
|
|
5
|
+
surface.
|
|
6
|
+
|
|
7
|
+
## Boot stack
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
pi_boot[6]{figure,mechanism,file}:
|
|
11
|
+
"Hamr","harness resolution (Pi default profile)","bin/hamr-harness.sh"
|
|
12
|
+
"Einherjar","dispatch Eindri workers from an Erindi brief","bin/einherjar-spawn.sh"
|
|
13
|
+
"Runtime backend","herdr/tmux pane supervision (Þjazi protocol 14+)","bin/backend/*"
|
|
14
|
+
"Supervision","Sýn/Gná watcher + Pi supervision branch under Valhalla","bin/syn-watch-arm.sh, .pi/extensions/gna-pi-watch.ts"
|
|
15
|
+
"Worktrees","Yggdrasil (`.yggdrasil/<id>/`) zero-collision isolation","bin/einherjar-spawn.sh"
|
|
16
|
+
"Huginn observer","read-only (W0012) until Ratatoskr two-way","bin/nornir-job-observer.sh"
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## PI CLI requirements (Galdr-governed)
|
|
20
|
+
|
|
21
|
+
Every PI-facing CLI must:
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
pi_cli[5]{id,requirement}:
|
|
25
|
+
1,"Support Hamr profile resolution (`--profile pi` default)"
|
|
26
|
+
2,"Emit TOON with the rodd operational schema (status, role, worktree, utgard, sandboxed, session_id)"
|
|
27
|
+
3,"Declare Utgard sandbox compliance (the five gates in registry.md)"
|
|
28
|
+
4,"Integrate with herdr for pane lifecycle (spawn/monitor/kill)"
|
|
29
|
+
5,"Observe into Mimirsbrunn on every dispatch (`POST /observe`)"
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Boot asset directory
|
|
33
|
+
|
|
34
|
+
`.agents/skills/galdr-ymirsystem/assets/pi-boot/`
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
pi_boot_assets[4]{file,purpose}:
|
|
38
|
+
"pi-profile.yml","default PI harness profile (model, context, tools, workspaceRAG)"
|
|
39
|
+
"herdr-profile.toml","pane layout, Þjazi protocol config"
|
|
40
|
+
"einherjar-spawn.schema.json","dispatch payload validation"
|
|
41
|
+
"supervision-tree.yml","Valhalla supervision branch definition"
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Verification
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
bash -n bin/hamr-harness.sh bin/einherjar-spawn.sh
|
|
48
|
+
python3 -m json.tool .agents/skills/galdr-ymirsystem/assets/pi-boot/einherjar-spawn.schema.json
|
|
49
|
+
bash bin/hamr-harness.sh # prints the current harness
|
|
50
|
+
bash bin/hamr-harness.sh eindri # prints the effective Eindri harness
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Maintaining this
|
|
54
|
+
|
|
55
|
+
- **Owner:** Brokk. **Router:** `.agents/skills/galdr-ymirsystem/SKILL.md`.
|
|
56
|
+
- **Mirror:** `.agents/skills/tyr-check/assets/pi-boot-guide.md`.
|
|
57
|
+
- The runtime itself is specified in `assets/brokk-distro-runtime.md`; this asset is
|
|
58
|
+
the PI boot view only.
|
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
# Porting Brokk to Norse — the methodology we actually used
|
|
2
|
+
|
|
3
|
+
> Purpose: the reproducible record of how Ymir adopted the validated **Brokk** agent distro and retargeted it to the Brokk runtime — copy-then-edit, the coupling audit, the mechanical rename rules, the two critical invariants, what was deferred, and the verification protocol.
|
|
4
|
+
|
|
5
|
+
Reference is read-only: the upstream distro lives at `$BROKK_UPSTREAM` and is cited here by path as **provenance**, never as a Ymir component name. Ymir follows the **open-source-first** law (`AGENTS.md:91-97`): reuse the validated OSS pattern, do not rebuild it. This document is the porting record, not a second architecture.
|
|
6
|
+
|
|
7
|
+
## 1. Why adopt rather than rebuild
|
|
8
|
+
|
|
9
|
+
`$BROKK_UPSTREAM` is an **agent distro** (`README.md:36-41`): a directory of instructions, skills, tooling, policies, and state conventions that turns a general-purpose agent into a specialized one. Its mechanism is exactly the function Ymir needed — a harness opened in the repo instantiates the primary and injects context before the first turn.
|
|
10
|
+
|
|
11
|
+
| What Brokk proved | What Ymir inherited |
|
|
12
|
+
|---|---|
|
|
13
|
+
| Role adoption on launch (`AGENTS.md:1-12`) | `AGENTS.md` mandate: "You are Brokk; the operator is the Allfather" |
|
|
14
|
+
| One-command session start (upstream digest) | `bin/saga-session-start.sh` |
|
|
15
|
+
| Native harness injection (`bin/fm-sessionstart-run.sh`, `.opencode/plugins/fm-primary-sessionstart-nudge.js`, `.pi/extensions/fm-primary-turnend-guard.ts`, `.claude/settings.json`) | `bin/saga-sessionstart-run.sh`, `.opencode/plugins/saga-sessionstart.js`, `.pi/extensions/syn-turnend-guard.ts`, `.claude/settings.json` |
|
|
16
|
+
| Home separation (`FM_HOME`, `AGENTS.md:42-54`) | `BROKK_HOME`; private `data/ state/ config/` |
|
|
17
|
+
| Context sources (`data/Allfather.md · projects.md · learnings.md`, state metas) | `data/operator.md · projects.md · learnings.md` |
|
|
18
|
+
| Harness detection + dispatch (`bin/fm-harness.sh`, `bin/fm-spawn.sh`, `config/eindri-harness`, `config/crew-dispatch.json`) | `bin/hamr-harness.sh`, `bin/einherjar-spawn.sh`, `config/eindri-harness`, `config/eindri-dispatch.json` |
|
|
19
|
+
| Supervision, no cron (`bin/fm-watch-arm.sh`, `bin/fm-turnend-guard.sh`, `docs/supervision-protocols/`) | `bin/syn-watch-arm.sh`, `bin/syn-turnend-guard.sh`; Nornir added for the scheduled spine |
|
|
20
|
+
| Isolation (Yggdrasil worktrees, Eindri-home homes) | Yggdrasil worktrees; Eindri-home dropped |
|
|
21
|
+
|
|
22
|
+
**Ymir only builds what differentiates it** — the UI/UX, the agent runtime, and A2A collaboration. Everything else is adopted. The port is therefore a *retarget*, not a rewrite.
|
|
23
|
+
|
|
24
|
+
## 2. Method — copy-then-edit
|
|
25
|
+
|
|
26
|
+
The method is deliberately mechanical:
|
|
27
|
+
|
|
28
|
+
1. **Copy the generic mechanism**, file for file, from `$BROKK_UPSTREAM` into the Ymir tree at the same role position.
|
|
29
|
+
2. **Preserve the contract shape** (argument grammar, exit codes, environment overrides, output lines) so the ported scripts remain behaviorally identical where the mechanism is generic.
|
|
30
|
+
3. **Retarget the labels** with a fixed rename table (§4). The retarget is a find-and-replace over names, not a redesign.
|
|
31
|
+
4. **Trim to the Ymir surface.** Drop features that have no Ymir owner (Eindri-home homes, extra backends, presentation theming, relays).
|
|
32
|
+
5. **Re-verify** with the protocol in §7 before calling any ported file production.
|
|
33
|
+
|
|
34
|
+
Why not rebuild: the upstream scripts encode years of edge-case handling (lock ancestry, pid reuse, heartbeat staleness, date-guarded scheduling, chain-locked ledgers). Rebuilding would re-learn those edges at the cost of production incidents. Copying carries the learned behavior across; editing the labels makes it ours.
|
|
35
|
+
|
|
36
|
+
## 3. Coupling audit
|
|
37
|
+
|
|
38
|
+
Before retargeting, every upstream file was classified. The rule: **generic mechanisms are copied; coupled surfaces are either retargeted or dropped.**
|
|
39
|
+
|
|
40
|
+
### 3.1 Generic (copied, then label-retargeted)
|
|
41
|
+
|
|
42
|
+
| Upstream file | Generic mechanism | Ymir file |
|
|
43
|
+
|---|---|---|
|
|
44
|
+
| `bin/fm-harness.sh` | two-layer harness detection (env markers, ancestry walk) | `bin/hamr-harness.sh` |
|
|
45
|
+
| `bin/fm-session-start.sh` | one ordered startup digest | `bin/saga-session-start.sh` |
|
|
46
|
+
| `bin/fm-sessionstart-run.sh` | source routing (startup/compact/resume) | `bin/saga-sessionstart-run.sh` |
|
|
47
|
+
| `bin/fm-session-lock-lib.sh`, `bin/fm-lock-lib.sh` | per-home lock bound to a live pid | `bin/gleipnir-lock-lib.sh` |
|
|
48
|
+
| `bin/fm-wake-drain.sh` | durable wake presentation | `bin/saga-wake-drain.sh` |
|
|
49
|
+
| `bin/fm-watch-arm.sh` | one event-driven watch cycle | `bin/syn-watch-arm.sh` |
|
|
50
|
+
| `bin/fm-turnend-guard.sh` | refuse a blind turn end | `bin/syn-turnend-guard.sh` |
|
|
51
|
+
| `bin/fm-arm-pretool-check.sh` | deny backgrounding the arm | `bin/syn-arm-pretool-check.sh` |
|
|
52
|
+
| `bin/fm-cd-pretool-check.sh` | deny escaping the home | `bin/syn-cd-pretool-check.sh` |
|
|
53
|
+
| `bin/fm-operational-input.sh` | structured operational wire (encode/kind/classify/body) | `bin/rodd-operational-input.sh` |
|
|
54
|
+
| `bin/fm-brief.sh` | worker brief scaffold with a fixed delivery-contract line | `bin/erindi-brief.sh` |
|
|
55
|
+
| `bin/fm-spawn.sh` | worktree + backend launch + meta record | `bin/einherjar-spawn.sh` |
|
|
56
|
+
| `bin/fm-crew-state.sh` | reconcile status log vs backend liveness | `bin/vor-crew-state.sh` |
|
|
57
|
+
| `.pi/extensions/fm-primary-turnend-guard.ts` | inject digest, re-emit on compaction, refuse blind end | `.pi/extensions/syn-turnend-guard.ts` |
|
|
58
|
+
| `.pi/extensions/fm-primary-pi-watch.ts` | watcher continuity (arm/re-arm/deliver) | `.pi/extensions/gna-pi-watch.ts` |
|
|
59
|
+
| `.pi/extensions/lib/fm-sessionstart-supervisor.mjs` | supervise the digest child | `.pi/extensions/lib/vordr-sessionstart-supervisor.mjs` |
|
|
60
|
+
| `.pi/extensions/lib/fm-operational-input.ts` | wire bridge for Pi | `.pi/extensions/lib/rodd-operational-input.ts` |
|
|
61
|
+
| `.opencode/plugins/fm-primary-sessionstart-nudge.js` | nudge-tier session-start injection | `.opencode/plugins/saga-sessionstart.js` |
|
|
62
|
+
| `.opencode/plugins/fm-primary-watch-arm.js` | watcher-arm continuity in the TUI | `.opencode/plugins/syn-watch-arm.js` |
|
|
63
|
+
| `.opencode/plugins/fm-primary-turnend-guard.js` | turn-end guard for OpenCode | `.opencode/plugins/syn-turnend-guard.js` |
|
|
64
|
+
| `.opencode/plugins/fm-primary-pretool-check.js`, `…-cd-check.js` | seatbelt pre-tool checks | `.opencode/plugins/syn-pretool-check.js`, `syn-cd-check.js` |
|
|
65
|
+
| `config/crew-dispatch.json` | per-task harness/model/effort rules | `config/eindri-dispatch.json` |
|
|
66
|
+
| `docs/supervision-protocols/*.md` | per-harness operating blocks | (folded into the Sága supervision stage; protocols deferred) |
|
|
67
|
+
|
|
68
|
+
### 3.2 Coupled (retargeted or dropped)
|
|
69
|
+
|
|
70
|
+
| Upstream surface | Coupling | Disposition |
|
|
71
|
+
|---|---|---|
|
|
72
|
+
| `Allfather` / `Allfather.md` | Brokk identity | **retargeted** to Allfather / `data/operator.md` |
|
|
73
|
+
| `Eindri` / `fm-crew-state.sh` | Brokk identity | **retargeted** to Eindri / `bin/vor-crew-state.sh` |
|
|
74
|
+
| `crew` subcommand of `fm-harness.sh` | Brokk identity | **retargeted** to `eindri` (see §9 for the caller bug) |
|
|
75
|
+
| `Yggdrasil` worktrees | Brokk tooling | **retargeted** to Yggdrasil (`.yggdrasil/<id>`) |
|
|
76
|
+
| `Eindri-home` homes, `config/Eindri-home-harness`, `fm-Eindri-home-*.sh` | Brokk fleet scope | **dropped** — one Brokk home; realm homes cover scope |
|
|
77
|
+
| `calm` presentation (`config/calm`, `.pi/extensions/fm-calm*.ts`, `docs/calm*`) | Brokk UX | **deferred** — presentation only; not required to seat Brokk |
|
|
78
|
+
| Pi supervision branch (`fm-branch-supervision.ts`, `docs/pi-supervision-branch.md`) | Brokk runtime | **deferred** to W0073 |
|
|
79
|
+
| `bin/backends/{zellij,orca,cmux}.sh`, `codex-app` | Brokk backends | **dropped** — Ymir keeps `tmux` and `herdr` (Þjazi 14+) |
|
|
80
|
+
| `bin/fm-voice-*.py`, `fm_voice_*.py`, X/Discord relay (`fm-x-*.sh`, `fm-public-followup*`) | Brokk channels | **dropped** — Ratatoskr/Hlidskjalf own Ymir channels |
|
|
81
|
+
| `bin/fm-bootstrap.sh`, `fm-home-seed.sh`, `fm-remote-*.sh`, quota/procevent | Brokk infra | **dropped** — out of the Ymir surface |
|
|
82
|
+
| `AGENTS.md:1-...` personality and nautical voice | Brokk identity | **rewritten** into `AGENTS.md` SYSTEM MANDATE (Norse) |
|
|
83
|
+
| `.env`, `config/calm`, `config/startup-memory-budget` | Brokk preferences | **dropped/deferred** |
|
|
84
|
+
|
|
85
|
+
**Coupling rule.** A surface is *coupled* if its name, voice, or scope is Brokk-specific. Coupled surfaces are never copied verbatim; they are either retargeted (name/scope preserved, labels changed) or dropped. A copied file that still contains `Allfather`, `Eindri`, `Yggdrasil`, `FM_`, or `fm-` is a port defect.
|
|
86
|
+
|
|
87
|
+
## 4. Mechanical retarget rules
|
|
88
|
+
|
|
89
|
+
Apply these in order. After each pass, run the audit in §7.5.
|
|
90
|
+
|
|
91
|
+
| Pattern | Replacement | Notes |
|
|
92
|
+
|---|---|---|
|
|
93
|
+
| `FM_HOME` | `BROKK_HOME` | the private home selector |
|
|
94
|
+
| `FM_ROOT_OVERRIDE` | `BROKK_ROOT_OVERRIDE` | tracked code root |
|
|
95
|
+
| `FM_STATE_OVERRIDE` | `BROKK_STATE_OVERRIDE` | |
|
|
96
|
+
| `FM_CONFIG_OVERRIDE` | `BROKK_CONFIG_OVERRIDE` | |
|
|
97
|
+
| `FM_DATA_OVERRIDE` | `BROKK_DATA_OVERRIDE` | |
|
|
98
|
+
| `FM_*` (remaining) | `BROKK_*` | every upstream env var |
|
|
99
|
+
| `fm-` prefix | figure prefix (see below) | file and function names |
|
|
100
|
+
| `Brokk` | Brokk / Ymir (by role) | never a component name in Ymir |
|
|
101
|
+
| `Eindri` / `crew` | **Eindri** / `eindri` | |
|
|
102
|
+
| `Allfather` | **Allfather** | operator address |
|
|
103
|
+
| `Yggdrasil` | **Yggdrasil** | worktree root `.yggdrasil/` |
|
|
104
|
+
| `Eindri-home` | **dropped** | no replacement |
|
|
105
|
+
| `calm` | **deferred** | no replacement yet |
|
|
106
|
+
| `fm-crew-state.sh` | `bin/vor-crew-state.sh` | Vör = awareness of state |
|
|
107
|
+
|
|
108
|
+
Figure-prefix mapping for the `fm-` → `<-prefix>` pass:
|
|
109
|
+
|
|
110
|
+
| Upstream stem | Ymir stem | Figure |
|
|
111
|
+
|---|---|---|
|
|
112
|
+
| `fm-session-start`, `fm-sessionstart-run`, `fm-wake-drain` | `saga-*` | Sága (seeress / digest) |
|
|
113
|
+
| `fm-watch-arm`, `fm-turnend-guard`, `fm-arm-pretool-check`, `fm-cd-pretool-check` | `syn-*` | Sýn (watch) |
|
|
114
|
+
| `fm-harness` | `hamr-harness.sh` | Hamr (shape) |
|
|
115
|
+
| `fm-spawn` | `einherjar-spawn.sh` | Einherjar (gathered warriors) |
|
|
116
|
+
| `fm-brief` | `erindi-brief.sh` | Erindi (errand) |
|
|
117
|
+
| `fm-crew-state` | `vor-crew-state.sh` | Vör (awareness) |
|
|
118
|
+
| `fm-lock-lib`, `fm-session-lock-lib` | `gleipnir-lock-lib.sh` | Gleipnir (binding) |
|
|
119
|
+
| `fm-operational-input` | `rodd-operational-input.sh` | Rödd (voice) |
|
|
120
|
+
| `fm-sessionstart-supervisor` | `vordr-sessionstart-supervisor.mjs` | Vörðr (warden) |
|
|
121
|
+
| `fm-primary-pi-watch` | `gna-pi-watch.ts` | Gná (messenger) |
|
|
122
|
+
| `fm-primary-*` (OpenCode) | `saga-*` / `syn-*` by role | Sága / Sýn |
|
|
123
|
+
|
|
124
|
+
Runtime extension beyond the upstream distro: **Nornir** (`bin/nornir-cron-start.sh`, `bin/nornir-job-*.sh`, `config/cron.yaml`) and **Runes** (`bin/runes-append.sh`) have no Brokk equivalent. Brokk used a watcher only; Ymir adds the scheduled spine (plan 29 §6 stage 8) and the chained audit ledger.
|
|
125
|
+
|
|
126
|
+
## 5. The two critical invariants
|
|
127
|
+
|
|
128
|
+
These are the port's load-bearing fixes. Both came from observed Brokk behavior that does not survive a naive retarget.
|
|
129
|
+
|
|
130
|
+
### 5.1 Bind the lock to the live session pid
|
|
131
|
+
|
|
132
|
+
**Problem:** the digest runner is short-lived. If Gleipnir keyed `state/.lock` to the digest helper's pid, the lock would appear dead the moment the helper exited — and a second session could mutate shared state.
|
|
133
|
+
|
|
134
|
+
**Fix:** harnesses pass `BROKK_SESSION_PID`, and `gleipnir_lock_acquire` writes `${BROKK_SESSION_PID:-$$}`:
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
# bin/gleipnir-lock-lib.sh
|
|
138
|
+
printf '%s\n' "${BROKK_SESSION_PID:-$$}" >"$lock"
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
Ownership is proved by walking up to 8 ancestry levels (`gleipnir_lock_owned`), so the short-lived helper can still confirm the live session owns the chain. The Pi extension's `lockOwnership()` reads the same pid from `state/.lock` and treats missing / other / pid 1 as non-owned.
|
|
142
|
+
|
|
143
|
+
**Test:** open a session, note the pid in `state/.lock`, confirm it is the harness pid (not the digest pid) with the session still live.
|
|
144
|
+
|
|
145
|
+
### 5.2 Turn-end guard inert until first arm
|
|
146
|
+
|
|
147
|
+
**Problem:** Brokk's turn-end guard fires on every stop. If ported unchanged, a fresh Ymir session with no supervision yet would be told "supervision is off" on the very first turn — noise that trains the operator to ignore it.
|
|
148
|
+
|
|
149
|
+
**Fix:** `bin/syn-turnend-guard.sh` returns 0 unless `state/.supervision-armed` exists:
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
[ -f "$STATE/.supervision-armed" ] || exit 0
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
Only after a successful `bin/syn-watch-arm.sh` cycle writes the marker does the guard check `state/.watch.heartbeat` against `BROKK_WATCH_HEARTBEAT_STALE_SECONDS` and exit 2 when stale. **Do not arm the guard before the first successful arm.** This invariant is recorded in `data/learnings.md`.
|
|
156
|
+
|
|
157
|
+
## 6. What was deferred
|
|
158
|
+
|
|
159
|
+
Deferred means: named, bounded, and intentionally not built now. These are not bugs.
|
|
160
|
+
|
|
161
|
+
| Deferred item | Upstream source | Re-entry point |
|
|
162
|
+
|---|---|---|
|
|
163
|
+
| Presentation theming ("calm") | `config/calm`, `.pi/extensions/fm-calm*.ts`, `docs/calm*` | later plan; presentation only |
|
|
164
|
+
| Pi supervision branch | `.pi/extensions/fm-branch-supervision.ts`, `docs/pi-supervision-branch.md` | W0073 / W0053 |
|
|
165
|
+
| Per-harness supervision protocol docs | `docs/supervision-protocols/*.md` | when the Sága supervision stage needs per-harness blocks |
|
|
166
|
+
| Grok / Kimi adapters | Brokk hook scripts | plan 29 B-3 remainder |
|
|
167
|
+
| Eindri-home homes | `fm-Eindri-home-*.sh` | not planned (realm homes instead) |
|
|
168
|
+
| Extra spawn backends | `bin/backends/*.sh` | only if a validated need appears |
|
|
169
|
+
| Voice relay / X / Discord | `fm-voice-*`, `fm-x-*` | Ratatoskr/Hlidskjalf own channels |
|
|
170
|
+
|
|
171
|
+
The `.pi/extensions/README.md` records the same defers. Keep the two in sync.
|
|
172
|
+
|
|
173
|
+
## 7. Verification protocol
|
|
174
|
+
|
|
175
|
+
Every ported file must pass all five gates before it is called production. No mocks, no examples, no placeholders.
|
|
176
|
+
|
|
177
|
+
### 7.1 Shell syntax
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
for f in bin/*.sh; do bash -n "$f" || echo "FAIL $f"; done
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
### 7.2 JSON parse
|
|
184
|
+
|
|
185
|
+
```bash
|
|
186
|
+
for f in config/*.json .claude/settings.json .codex/hooks.json .cursor/hooks.json .opencode/plugins/package.json; do
|
|
187
|
+
jq -e . "$f" >/dev/null || echo "FAIL $f"
|
|
188
|
+
done
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
### 7.3 TypeScript/JS parse (adapters)
|
|
192
|
+
|
|
193
|
+
```bash
|
|
194
|
+
node --check .opencode/plugins/*.js .opencode/plugins/lib/*.js 2>/dev/null
|
|
195
|
+
# Pi .ts files are validated by the Pi runtime and by the extension's own load marker
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
### 7.4 Smoke tests (behavioral)
|
|
199
|
+
|
|
200
|
+
| Test | Command | Expected |
|
|
201
|
+
|---|---|---|
|
|
202
|
+
| Digest end-to-end | `bash bin/saga-session-start.sh` | 8 sections; lock line; cron running; context delimited; `ABSENT` explicit |
|
|
203
|
+
| Digest routing | `bash bin/saga-sessionstart-run.sh --source compact` | re-emit text, exit 0 |
|
|
204
|
+
| Harness detect | `bash bin/hamr-harness.sh` and `… eindri` | prints a verified harness / configured Eindri harness |
|
|
205
|
+
| Lock semantics | open two sessions | second says `READ-ONLY: session lock held by pid N` |
|
|
206
|
+
| Wake drain | `bash bin/saga-wake-drain.sh` | `wake queue: 0 pending` when empty, never blank |
|
|
207
|
+
| Cron status/start | `bash bin/nornir-cron-start.sh --status`; `…` | `cron: running pid=N jobs=4` / idempotent start |
|
|
208
|
+
| Watch arm | `bash bin/syn-watch-arm.sh --restart` | prints `watcher: started …`, writes `.supervision-armed` + heartbeat, exits on a `signal:`/`stale:`/`check:`/`heartbeat:` line |
|
|
209
|
+
| Turn-end guard inert | run before any arm | exit 0 |
|
|
210
|
+
| Turn-end guard armed+stale | remove heartbeat after arming | prints recovery, exit 2 |
|
|
211
|
+
| Rödd wire | `printf 'hi' \| bash bin/rodd-operational-input.sh encode session-start` | one `\u2063RODD_OP: v1 session-start: hi`; `kind`/`body` round-trip |
|
|
212
|
+
| Runes append | `bash bin/runes-append.sh smoke event --message hi` | `runes: appended … checksum=…`; ledger gains one chained line |
|
|
213
|
+
| Brief scaffold | `bash bin/erindi-brief.sh T-smoke repo --mode local-only` | `data/T-smoke/brief.md` with `Delivery contract: mode=local-only` |
|
|
214
|
+
| Spawn fail-closed | `bash bin/einherjar-spawn.sh T-smoke . --mode local-only --harness bogus` | refuses: not verified |
|
|
215
|
+
| Dispatch backstop | with `config/eindri-dispatch.json` present, omit `--harness` | refuses: pass an explicit `--harness` |
|
|
216
|
+
| Vör read | `bash bin/vor-crew-state.sh T-smoke` | one `state: … · source: … · …` line, exit 0 |
|
|
217
|
+
|
|
218
|
+
### 7.5 Naming audit
|
|
219
|
+
|
|
220
|
+
```bash
|
|
221
|
+
grep -rniE 'Allfather|Brokk|Eindri|Eindri-home|fm-|Yggdrasil|calm' \
|
|
222
|
+
bin .pi .opencode config data .agents/skills/galdr-ymirsystem/assets/*.md \
|
|
223
|
+
| grep -v 'porting-upstream-to-norse.md'
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
Expected: only provenance citations in this file and the known legacy strings listed in `norse-naming.md` §6.3.
|
|
227
|
+
|
|
228
|
+
## 8. File-by-file port status
|
|
229
|
+
|
|
230
|
+
| Ymir file | Upstream origin | Status |
|
|
231
|
+
|---|---|---|
|
|
232
|
+
| `bin/saga-session-start.sh` | `bin/fm-session-start.sh` | landed, verified |
|
|
233
|
+
| `bin/saga-sessionstart-run.sh` | `bin/fm-sessionstart-run.sh` | landed, verified |
|
|
234
|
+
| `bin/gleipnir-lock-lib.sh` | `bin/fm-session-lock-lib.sh`, `bin/fm-lock-lib.sh` | landed, verified |
|
|
235
|
+
| `bin/hamr-harness.sh` | `bin/fm-harness.sh` | landed |
|
|
236
|
+
| `bin/einherjar-spawn.sh` | `bin/fm-spawn.sh` | landed; **caller bug** see §9 |
|
|
237
|
+
| `bin/erindi-brief.sh` | `bin/fm-brief.sh` | landed, verified |
|
|
238
|
+
| `bin/vor-crew-state.sh` | `bin/fm-crew-state.sh` | landed, verified |
|
|
239
|
+
| `bin/rodd-operational-input.sh` | `bin/fm-operational-input.sh` | landed, verified |
|
|
240
|
+
| `bin/saga-wake-drain.sh` | `bin/fm-wake-drain.sh` | landed, verified |
|
|
241
|
+
| `bin/syn-watch-arm.sh` | `bin/fm-watch-arm.sh` | landed, verified |
|
|
242
|
+
| `bin/syn-turnend-guard.sh` | `bin/fm-turnend-guard.sh` | landed, verified |
|
|
243
|
+
| `bin/syn-arm-pretool-check.sh` | `bin/fm-arm-pretool-check.sh` | landed, inert v0 |
|
|
244
|
+
| `bin/syn-cd-pretool-check.sh` | `bin/fm-cd-pretool-check.sh` | landed, inert v0 |
|
|
245
|
+
| `bin/nornir-cron-start.sh`, `bin/nornir-job-*.sh` | none (Ymir extension) | landed, verified |
|
|
246
|
+
| `bin/runes-append.sh` | none (Ymir extension) | landed, verified |
|
|
247
|
+
| `.pi/extensions/syn-turnend-guard.ts` | `.pi/extensions/fm-primary-turnend-guard.ts` | landed, verified |
|
|
248
|
+
| `.pi/extensions/gna-pi-watch.ts` | `.pi/extensions/fm-primary-pi-watch.ts` | landed; calm + supervision branch dropped |
|
|
249
|
+
| `.pi/extensions/lib/vordr-sessionstart-supervisor.mjs` | `.pi/extensions/lib/fm-sessionstart-supervisor.mjs` | landed |
|
|
250
|
+
| `.pi/extensions/lib/rodd-operational-input.ts` | `.pi/extensions/lib/fm-operational-input.ts` | landed |
|
|
251
|
+
| `.opencode/plugins/saga-sessionstart.js` | `.opencode/plugins/fm-primary-sessionstart-nudge.js` | landed |
|
|
252
|
+
| `.opencode/plugins/syn-watch-arm.js` | `.opencode/plugins/fm-primary-watch-arm.js` | landed |
|
|
253
|
+
| `.opencode/plugins/syn-turnend-guard.js` | `.opencode/plugins/fm-primary-turnend-guard.js` | landed |
|
|
254
|
+
| `.opencode/plugins/syn-pretool-check.js`, `syn-cd-check.js` | `.opencode/plugins/fm-primary-pretool-check.js`, `…-cd-check.js` | landed |
|
|
255
|
+
| `.claude/settings.json` | `.claude/settings.json` | landed, retargeted |
|
|
256
|
+
| `.codex/hooks.json` | `.codex/hooks.json` | landed, retargeted |
|
|
257
|
+
| `.cursor/hooks.json` | `.cursor/hooks.json` | landed, retargeted |
|
|
258
|
+
| `config/eindri-dispatch.json` | `config/crew-dispatch.json` | landed, retargeted |
|
|
259
|
+
| `config/eindri-harness` | `config/eindri-harness` (documented upstream) | landed |
|
|
260
|
+
| `config/cron.yaml` | none (Ymir extension) | landed |
|
|
261
|
+
| `AGENTS.md` (mandate) | `AGENTS.md:1-12` adopted, voice rewritten | landed |
|
|
262
|
+
|
|
263
|
+
## 9. Known code/doc disagreements from the port
|
|
264
|
+
|
|
265
|
+
These are real mismatches between plan/source docs and the shipped tree, found while writing this reference. They are recorded here, not silently fixed, because the port was a documentation pass.
|
|
266
|
+
|
|
267
|
+
| # | Disagreement | Evidence | Impact |
|
|
268
|
+
|---|---|---|---|
|
|
269
|
+
| 1 | `bin/einherjar-spawn.sh:170` calls `hamr-harness.sh crew`, but `bin/hamr-harness.sh:231-236` accepts only `eindri`, `eindri-model`, `eindri-effort` (the upstream `crew` subcommand was renamed to `eindri`). `crew` falls through to `detect_own`. | upstream `bin/fm-harness.sh` header documents `crew`; the port renamed it but did not retarget the caller | Latent: masked while `config/eindri-dispatch.json` forces an explicit `--harness`; would mis-resolve the configured Eindri harness if the dispatch file were removed. Fix: call `hamr-harness.sh eindri`. |
|
|
270
|
+
| 2 | Plan 29 declares a **9-stage** digest (§1, §6, acceptance §8.3 "all nine stages"); the script header and implementation are **8 stages** (`NETWORK CHECKS` is deferred/not implemented). | `docs/plans/29-brokk-distro-runtime.md:171,207` vs `bin/saga-session-start.sh:9-17` | Doc drift; the runtime is correct at 8. Reconcile the plan or implement the network-checks stage. |
|
|
271
|
+
| 3 | Plan 29 §7/§13 names `.opencode/plugins/syn-sessionstart.js`; the shipped file is `.opencode/plugins/saga-sessionstart.js`. | `docs/plans/29-brokk-distro-runtime.md:139,188` vs the tree | Doc drift; the adapter works, the plan's filename is stale. |
|
|
272
|
+
| 4 | Plan 29 §13 "Still to build" lists `hamr-harness.sh`, the `.opencode`/Claude/Codex/Cursor adapters, `einherjar-spawn.sh`, `erindi-brief.sh`, `vor-crew-state.sh`, `config/eindri-dispatch.json`, `bin/nornir-job-*.sh`, `runes-append.sh`, real `data/`, `config/cron.yaml`, and the `AGENTS.md` header as unbuilt — all now exist. | `docs/plans/29-brokk-distro-runtime.md:318-322` | Stale status; the tree has advanced past the plan. |
|
|
273
|
+
| 5 | `.pi/extensions/README.md` says the `.opencode`/Claude/Codex/Cursor adapters are "not yet wired"; they are wired. | `.pi/extensions/README.md` "Not yet wired" section | Stale doc. |
|
|
274
|
+
| 6 | `AGENTS.md:231-244` (`PI / FIRSTMATE INTEGRATION`) still uses `fm-harness`, `fm-spawn`, `Yggdrasil`, and the `Brokk_crew` schema, contradicting the Norse naming law at `AGENTS.md:6` and the port. | root `AGENTS.md` | Imported terminology in the always-loaded contract. Retarget or strike the section. |
|
|
275
|
+
| 7 | `.claude/settings.json` passes `--claude` to `bin/syn-turnend-guard.sh`; the guard accepts no arguments and ignores it. | `.claude/settings.json` Stop hook vs `bin/syn-turnend-guard.sh` | Harmless argument mismatch. |
|
|
276
|
+
| 8 | `bin/runes-append.sh:101` titles the ledger `# YGGDRASIL Audit Trail` while the subsystem is **Runes**. | `bin/runes-append.sh:101` | Naming inconsistency; changing it must preserve append-only history. |
|
|
277
|
+
|
|
278
|
+
### §9 resolutions (2026-09-11)
|
|
279
|
+
|
|
280
|
+
The audit findings were reconciled in the same working session; the table above is kept as
|
|
281
|
+
the historical record.
|
|
282
|
+
|
|
283
|
+
| # | Resolution |
|
|
284
|
+
|---|---|
|
|
285
|
+
| 1 | **Fixed** — `bin/einherjar-spawn.sh` now calls `hamr-harness.sh eindri`. |
|
|
286
|
+
| 2 | **Reconciled** — plan 29 acceptance is now "all eight stages"; the network-checks stage remains deferred, not implemented. |
|
|
287
|
+
| 3 | **Fixed** — plan 29 §7/§13 now name `.opencode/plugins/saga-sessionstart.js`. |
|
|
288
|
+
| 4 | **Fixed** — plan 29 §13 now reads "Landed"; every listed component exists. |
|
|
289
|
+
| 5 | **Fixed** — `.pi/extensions/README.md` now lists all wired adapters. |
|
|
290
|
+
| 6 | **Fixed** — `AGENTS.md` §PI PRIMARY BOOT now uses Hamr/Einherjar/Yggdrasil/`rodd`; the imported heading and `Brokk_crew` schema are gone. |
|
|
291
|
+
| 7 | **Left as-is** — the `--claude` argument is ignored by the guard and is harmless. |
|
|
292
|
+
| 8 | **Fixed** — `bin/runes-append.sh` now titles the ledger `# RUNES Audit Trail`.
|
|
293
|
+
|
|
294
|
+
## Maintaining this
|
|
295
|
+
|
|
296
|
+
- **Owner:** Brokk. **Reference:** `$BROKK_UPSTREAM` (read-only). **Plan:** `docs/plans/29-brokk-distro-runtime.md`.
|
|
297
|
+
- **When adding a ported file**, add a row to §8 with its upstream origin and verification status.
|
|
298
|
+
- **When a §9 disagreement is resolved, remove its row** and note the fix in `data/learnings.md`.
|
|
299
|
+
- **Never edit `$BROKK_UPSTREAM`.** It is provenance; Ymir reads it and never writes to it (`AGENTS.md:96`, plan 29 §9 "NOT").
|
|
300
|
+
- **Re-run §7 gates** after any change to a ported script, and keep the naming audit (§7.5) clean of new imported terms.
|
|
301
|
+
- **Keep the coupling audit (§3) current:** a new upstream mechanism is generic or coupled, and this document must say which before it is copied.
|