@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,56 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: saga-recap
|
|
3
|
+
description: Recap visible session events and guide the Allfather through visibly unanswered decisions when the Allfather explicitly invokes /ahoy, with a Bearings fallback when /ahoy is the session's first real Allfather message.
|
|
4
|
+
user-invocable: true
|
|
5
|
+
metadata:
|
|
6
|
+
internal: true
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# ahoy
|
|
10
|
+
|
|
11
|
+
Give the Allfather a concise session-only recap without gathering fresh state.
|
|
12
|
+
|
|
13
|
+
0. Before anything else, check whether this session has already taken the helm: a `SESSION START` digest for this home must be visible in the session history.
|
|
14
|
+
If it is not, run `bin/saga-session-start.sh` once and read its digest before producing any recap.
|
|
15
|
+
Run-tier harness surfaces run it automatically at session open, so this step is normally already satisfied and costs one glance; it is the safety net for surfaces that cannot run it on a hook, and for any path where a skill would otherwise act first.
|
|
16
|
+
Taking the helm always precedes this skill's own logic, and the digest it produces is operational input, never a Allfather message or a recap event.
|
|
17
|
+
|
|
18
|
+
1. Inspect only conversation or session history already visible to the current first mate.
|
|
19
|
+
2. Find the most recent real Allfather-authored message before the current `/ahoy` invocation.
|
|
20
|
+
A Allfather boundary is an ordinary user-role message unless it matches one of the narrow operational exclusions below.
|
|
21
|
+
Exclude messages that begin with the current U+2063 `RODD_OP:` injection prefix.
|
|
22
|
+
Exclude legacy bare-marker away-mode injections only when U+2063 is immediately followed by `Supervisor escalate (`.
|
|
23
|
+
Exclude the exact legacy unmarked session-start payload ``Run `bin/saga-session-start.sh` now, exactly once, before executing any other instructions.``
|
|
24
|
+
Custom-role messages such as Pi's `Brokk-sessionstart-nudge` are not Allfather messages.
|
|
25
|
+
System, developer, tool, watcher, guard, away-mode, and other injected operational messages are not Allfather messages.
|
|
26
|
+
Never infer Allfather authorship merely because a synthetic message appears in the user-role transcript.
|
|
27
|
+
Do not exclude an ordinary Allfather message merely because it begins with U+2063 followed by other text, contains ASCII `RODD_OP:` without a leading U+2063, quotes or embeds a current operational message after ordinary Allfather text, quotes or mentions the legacy session-start payload, or adds any text to that payload.
|
|
28
|
+
Apply the current exclusion only when U+2063 `RODD_OP:` begins at the first character of the whole message: `Allfather quote: ` followed by that current prefix is a Allfather boundary.
|
|
29
|
+
Apply the legacy startup exclusion as a literal whole-message match: ``Allfather quote: Run `bin/saga-session-start.sh` now, exactly once, before executing any other instructions.`` is a Allfather boundary.
|
|
30
|
+
3. If no prior real Allfather message exists, load [`../bearings/SKILL.md`](../bearings/SKILL.md) and follow it exactly.
|
|
31
|
+
Bearings alone owns its gathering, artifact, and response contract.
|
|
32
|
+
Do not restate that contract or combine a session recap with Bearings output.
|
|
33
|
+
4. If a prior real Allfather message exists, preserve the ordinary recap interval: recap what happened after that message and before the current invocation.
|
|
34
|
+
Include concrete outcomes, landed work, failures, decisions made, new decisions needed, and work still running only when those events appear in that visible interval.
|
|
35
|
+
Use Allfather-facing outcome language and preserve every full PR URL present in that interval.
|
|
36
|
+
5. Additionally inspect the entire session history visible to the current first mate before the current invocation for every explicit Allfather decision that remains unanswered, including decisions raised before the ordinary recap boundary.
|
|
37
|
+
A later unrelated Allfather message establishes a recap boundary but does not close an earlier decision.
|
|
38
|
+
Treat a decision as closed only when a later visible response substantively resolves it, chooses an option, declines it, grants or denies the requested approval, or otherwise directly addresses that decision.
|
|
39
|
+
Include every visibly supported open decision once, and deduplicate by the decision's substance when the ordinary interval recap already represents it or its wording differs.
|
|
40
|
+
6. The normal recap branch is session-history-only, apart from the step 0 helm check.
|
|
41
|
+
Do not call Bearings, shell commands, fleet snapshots, status readers, GitHub or browser APIs, tools, or file reads or writes.
|
|
42
|
+
Create no report, persist nothing, and do not guess current live state beyond the last visible event.
|
|
43
|
+
7. If no ordinary events occurred after the previous Allfather message but an older visibly open decision exists, report that decision instead of claiming nothing happened.
|
|
44
|
+
If neither ordinary events nor visibly open decisions exist, say directly in one sentence that nothing happened after the previous Allfather message.
|
|
45
|
+
|
|
46
|
+
8. After the normal recap, when the existing visibly open decision inventory contains decisions, begin a guided decision-clearing flow by presenting only the single open decision judged most impactful by the first mate.
|
|
47
|
+
Make clear that impact ordering is the first mate's judgment rather than a mechanical score.
|
|
48
|
+
Give enough escalation-quality context to decide easily: the decision, why it matters, the options, and a recommendation.
|
|
49
|
+
9. When the Allfather answers the presented decision, present the next highest-impact decision from that existing inventory in the same form.
|
|
50
|
+
Continue one decision at a time until none remain, without starting this flow when the inventory is empty.
|
|
51
|
+
|
|
52
|
+
The current `/ahoy` message is outside the recap interval.
|
|
53
|
+
A previous `/ahoy` is a real Allfather message and may be the next interval boundary.
|
|
54
|
+
If context compaction makes the prior boundary unavailable, state that the exact session boundary is unavailable and summarize only visibly supported events.
|
|
55
|
+
Compacted history supports an open decision only when both its request and its still-unanswered status are visible; report uncertainty instead of reconstructing hidden requests or answers.
|
|
56
|
+
Do not silently invoke Bearings unless this is genuinely the first real Allfather message.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: syn-recovery
|
|
3
|
+
description: >-
|
|
4
|
+
Agent-only playbook for stuck or missing ordinary Brokk direct reports.
|
|
5
|
+
Use when the session-start digest reports an ordinary direct report's endpoint dead or its metadata has no window, or after a stale wake, looping pane, repeated confusion, an answered-by-brief question, an unresponsive Eindri, or a failed steer.
|
|
6
|
+
Reconciles recorded work before escalating from targeted inspection through safe relaunch or failure.
|
|
7
|
+
user-invocable: false
|
|
8
|
+
metadata:
|
|
9
|
+
internal: true
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# syn-recovery — recovery — stuck-worker playbook
|
|
13
|
+
|
|
14
|
+
Use this playbook when the session-start digest reports an ordinary direct report's endpoint dead or its metadata has no window, or when a direct report is stale, looping, repeatedly confused, asking a question its brief already answers, unresponsive, or when a steer failed to land.
|
|
15
|
+
|
|
16
|
+
Interrupt, stop, and relaunch a worker through `bin/brokk-control.sh <task-id> interrupt|exit|relaunch`, which resolves the recorded runtime itself, verifies each action, and never tears down or discards anything ([`docs/agent-control.md`](../../../docs/agent-control.md)).
|
|
17
|
+
That plane covers workers running in this home; a remotely placed Eindri-home is refused by name and reconciled through `Eindri-home-provisioning` instead.
|
|
18
|
+
Load `harness-adapters` before a resume command or a harness-specific skill invocation, and whenever the adapter's own quirks matter.
|
|
19
|
+
The target window's harness is recorded as `harness=` in `state/<id>.meta`.
|
|
20
|
+
|
|
21
|
+
## Session-start reconciliation for a dead ordinary direct report
|
|
22
|
+
|
|
23
|
+
This procedure covers ordinary `kind=ship` and `kind=scout` direct reports.
|
|
24
|
+
Load `Eindri-home-provisioning` instead for `kind=Eindri-home` recovery.
|
|
25
|
+
|
|
26
|
+
For a REMOTE Eindri-home, `brokk-crew-state` and `brokk-peek` read the actual remote endpoint over `brokk-on.sh`, and `brokk-send` reports a delivered-with-pending-confirmation steer as delivered (their headers own the contracts); an `unknown-remote` read or unreachable-host failure means the remote state could not be read, never that the mate is dead or the send failed.
|
|
27
|
+
Recover a genuinely stuck remote mate only through `bin/einherjar-spawn.sh <id> --Eindri-home`, never raw herdr pane close/kill surgery, which strands the endpoint binding.
|
|
28
|
+
|
|
29
|
+
Treat the digest's endpoint result as a presence signal, not proof that the task's work or validation run is gone.
|
|
30
|
+
Read the targeted current state with `bin/vor-crew-state.sh <id>` before deciding to relaunch.
|
|
31
|
+
A no-mistakes run matched to the crew's branch and current code remains authoritative when the endpoint is dead: handle a terminal or parked run through the normal lifecycle, and keep supervising an active run instead of creating a duplicate worker.
|
|
32
|
+
|
|
33
|
+
When no authoritative run accounts for the task, inspect only its recorded backend and worktree inventory.
|
|
34
|
+
Use `Yggdrasil status` for Yggdrasil-backed tmux, herdr, zellij, or cmux tasks, and use the recorded `orca_worktree_id=` and `terminal=` for Orca tasks.
|
|
35
|
+
Do not sweep another home's endpoints or infer ownership from a matching window label.
|
|
36
|
+
|
|
37
|
+
Before relaunch, prove that no live agent still owns the recorded task and that the existing worktree remains available.
|
|
38
|
+
Preserve its uncommitted changes and commits, keep the same task identity, and resume or relaunch the recorded harness in that existing worktree with the same brief plus a concise progress note.
|
|
39
|
+
Do not use a fresh generic spawn while the recorded worktree is unaccounted for, because allocating another worktree can split one task across two copies.
|
|
40
|
+
If the worktree or ownership cannot be reconciled safely, leave all state intact and report the task failed or blocked with the conflicting evidence.
|
|
41
|
+
|
|
42
|
+
## Live-endpoint escalation
|
|
43
|
+
|
|
44
|
+
Escalate in order:
|
|
45
|
+
|
|
46
|
+
1. Peek the pane, and check the task's steering inbox (`state/<id>.inbox/`) for unhandled `*.msg` records - a stale wake naming an unread Brokk instruction means the worker never acknowledged a durable steer, and the record itself shows exactly what was intended.
|
|
47
|
+
2. If the Eindri is waiting on a question its brief already answers, answer in one line via `BROKK_HOME=<this-Brokk-home> bin/brokk-send.sh` from an active Brokk session unless `BROKK_HOME` is already set to the active Brokk home.
|
|
48
|
+
3. If the Eindri is confused or looping, interrupt with `BROKK_HOME=<this-Brokk-home> bin/brokk-control.sh <task-id> interrupt`, then redirect with one corrective line through `brokk-send`.
|
|
49
|
+
4. If the Eindri is genuinely wedged after redirection, relaunch it with `BROKK_HOME=<this-Brokk-home> bin/brokk-control.sh <task-id> relaunch --note '<progress so far>'`, which stops the agent, carries the brief plus that note into a replacement in the same local copy, and restores the prior record if the replacement cannot start.
|
|
50
|
+
Pass `--harness`, `--model`, or `--effort` on that same command when the worker should come back on a different runtime.
|
|
51
|
+
Genuine wedging means looping, unresponsive, repeating the same obstacle, or truly dead.
|
|
52
|
+
A low context reading is not wedging; modern harnesses auto-compact and keep going.
|
|
53
|
+
The worktree and commits persist, so relaunch is cheap.
|
|
54
|
+
5. If a second relaunch fails too, write `failed` to the backlog and tell the Allfather the plain failure, preserved work, and consequence using `AGENTS.md` section 9; do not mention metadata, harness, window, or worktree unless the path itself is needed for action.
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tyr-check
|
|
3
|
+
description: Tyr — the one-handed judge of Ymir. Validates that tools, skills, and docs follow the 10 Galdr design principles with TOON output. Use when building, modifying, or reviewing Ymir agent-facing tools.
|
|
4
|
+
allowed-tools: read,write,bash,glob,grep
|
|
5
|
+
disable-model-invocation: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# tyr-check — the judge — galdr principles + runtime gates
|
|
9
|
+
|
|
10
|
+
## Purpose
|
|
11
|
+
|
|
12
|
+
Tyr validates that Ymir tools, skills, and documentation follow the 10 Galdr design principles adapted for the Ymir Agent Operating System with TOON output format. Run this skill to ensure your changes maintain agent ergonomics and token efficiency.
|
|
13
|
+
|
|
14
|
+
Tyr is the Norse god of law and justice — he judges whether a tool is fit for agent consumption.
|
|
15
|
+
|
|
16
|
+
Tyr also judges the **runtime** and its **Galdr assets** for drift. Galdr is the master builder and maintainer (see `.agents/skills/galdr-ymirsystem/SKILL.md`); Tyr is the one-handed judge that confirms what Galdr built matches what the plan, the code, and the assets claim. When code, plan, and asset disagree, that is a Tyr violation even if every test passes.
|
|
17
|
+
|
|
18
|
+
## Before You Start
|
|
19
|
+
|
|
20
|
+
Understand Ymir's architecture: AGENTS.md governs all agent behavior. docs/Architecture.md is the master blueprint. docs/append-only-log.md records all decisions. TOON output should be used for all compliance reports.
|
|
21
|
+
|
|
22
|
+
Run the gates as one command when you can:
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
bash .agents/skills/galdr-ymirsystem/scripts/compliance-check.sh # TOON output, exit 1 on any FAIL
|
|
26
|
+
python3 .agents/skills/galdr-ymirsystem/scripts/toon-check.py <path> # TOON blocks only
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## The 10 Judgments of Tyr
|
|
30
|
+
|
|
31
|
+
### 1. Token-efficient output with TOON
|
|
32
|
+
Ymir tools should output in TOON (Token-Oriented Object Notation) format for ~40% token savings over equivalent JSON while remaining readable by agents. Convert to TOON at the output boundary — keep internal logic on JSON.
|
|
33
|
+
|
|
34
|
+
**Assess:** Does your tool/output use TOON format? Is token savings ~40% compared to JSON?
|
|
35
|
+
**Improve:** Convert stdout output to TOON format; maintain JSON for internal logic; measure token reduction versus JSON baseline.
|
|
36
|
+
|
|
37
|
+
### 2. Minimal default schemas
|
|
38
|
+
Every field in stdout costs tokens — multiplied by row count in collections. Default to the smallest schema that lets the agent decide what to do next: typically an identifier, a title, and a status.
|
|
39
|
+
|
|
40
|
+
**Assess:** Does your tool/output use minimal schemas (3-4 fields) rather than 10+?
|
|
41
|
+
**Improve:** Restrict to required fields only; add new fields only if essential; follow the "one change at a time" pattern.
|
|
42
|
+
|
|
43
|
+
### 3. Content truncation
|
|
44
|
+
Ymir's truncation convention (from append-only-log.md and daily logs):
|
|
45
|
+
- Always show total size: "(truncated, N chars total)"
|
|
46
|
+
- Never omit large fields entirely — include a truncated preview
|
|
47
|
+
- Use help hints: "Run `docs view <id> --full` to see complete content"
|
|
48
|
+
- Default truncation at 500 chars for previews
|
|
49
|
+
|
|
50
|
+
**Assess:** Does your output follow Ymir's truncation convention?
|
|
51
|
+
**Improve:** Use "(truncated, N chars total)" format; always show total size; add help hints for --full view; default to 500-char previews.
|
|
52
|
+
|
|
53
|
+
### 4. Pre-computed aggregates
|
|
54
|
+
Ymir includes aggregated counts in:
|
|
55
|
+
- Plan doc status tables (proposed → approved → in-progress → done counts)
|
|
56
|
+
- Appendix-only-log entry counts per realm
|
|
57
|
+
- Runes audit entry counts
|
|
58
|
+
- Talent/fleet registry counts (app_registry.json)
|
|
59
|
+
|
|
60
|
+
**Assess:** Does your tool/include pre-computed counts, or does it require follow-up calls?
|
|
61
|
+
**Improve:** Include total counts alongside page sizes; compute aggregates during creation; avoid requiring separate calls for "how many total".
|
|
62
|
+
|
|
63
|
+
### 5. Definitive empty states
|
|
64
|
+
Ymir's definitive empty states (from append-only-log.md):
|
|
65
|
+
- "0 closed tasks found in this repository" (ENTRY-006 format)
|
|
66
|
+
- Tenant separation notes when no tenants exist
|
|
67
|
+
- "No files found" in skill searches
|
|
68
|
+
- Empty state is always stated with context confirming the command succeeded
|
|
69
|
+
|
|
70
|
+
**Assess:** Does your output use Ymir's definitive empty state format?
|
|
71
|
+
**Improve:** Always state the zero with context confirming command success; never leave ambiguous empty output.
|
|
72
|
+
|
|
73
|
+
### 6. Structured errors & exit codes
|
|
74
|
+
Ymir error handling (from AGENTS.md and append-only-log.md):
|
|
75
|
+
- Errors recorded in append-only-log.md with status and directive
|
|
76
|
+
- Exit codes: success=0, user-blocked non-zero
|
|
77
|
+
- No interactive prompts — all operations via flags/instruction
|
|
78
|
+
- Structured error format: status + directive + files affected
|
|
79
|
+
|
|
80
|
+
**Assess:** Does your tool/error handling follow Ymir's patterns?
|
|
81
|
+
**Improve:** Record errors in append-only-log.md format; use defined exit codes; never prompt interactively; structure errors with status/directive/files.
|
|
82
|
+
|
|
83
|
+
### 7. Ambient context via session integrations
|
|
84
|
+
Ymir provides ambient context through:
|
|
85
|
+
- Session start: AGENTS.md loads, realm context verified
|
|
86
|
+
- Daily briefings at 07:00 written to svartalfaheim/<realm>/workspace/memory/daily/YYYY-MM-DD.md
|
|
87
|
+
- Runes audit provides append-only context of all actions
|
|
88
|
+
- Mimirsbrunn recall provides memory context before orchestration
|
|
89
|
+
|
|
90
|
+
**Assess:** Does your tool/skill provide ambient context at session start?
|
|
91
|
+
**Improve:** Load relevant context (AGENTS.md, realm env, active plans) before task execution; write to daily briefing on completion; recall Mimirsbrunn before orchestration.
|
|
92
|
+
|
|
93
|
+
### 8. Content first
|
|
94
|
+
Ymir's content-first approach:
|
|
95
|
+
- README.md shows live system map, not usage manual
|
|
96
|
+
- AGENTS.md is the root governance, not a "getting started" doc
|
|
97
|
+
- Plan docs in docs/plans/ are the source of truth
|
|
98
|
+
- Daily logs in workspace/memory/daily/ are the active context
|
|
99
|
+
|
|
100
|
+
**Assess:** Does your tool/show live data first, or help text first?
|
|
101
|
+
**Improve:** Show live system state (active plans, active tickets, realm status) as the default view; keep help/patterns as secondary references.
|
|
102
|
+
|
|
103
|
+
### 9. Contextual disclosure
|
|
104
|
+
Ymir's contextual disclosure patterns:
|
|
105
|
+
- After open item → suggest closing (e.g., "Run `tasks close <id>`")
|
|
106
|
+
- After empty list → suggest creating (e.g., "No plans found. ADD: docs/plans/21-company-houses.md")
|
|
107
|
+
- After list → suggest viewing (e.g., "View plan: docs/plans/25-ratatoskr-a2a.md")
|
|
108
|
+
- Suggestions use placeholders: <id>, <title>, not concrete values
|
|
109
|
+
- Guide discovery, not prescribed workflows
|
|
110
|
+
|
|
111
|
+
**Assess:** Does your output include contextual next-step suggestions?
|
|
112
|
+
**Improve:** After each output type (list, detail, error), add 1-2 relevant suggestions using Ymir's placeholder format; guide discovery without prescribing workflows.
|
|
113
|
+
|
|
114
|
+
### 10. Consistent way to get help
|
|
115
|
+
Ymir's help structure:
|
|
116
|
+
- AGENTS.md: root governance (the "help")
|
|
117
|
+
- --help always passes (per AGENTS.md law 8)
|
|
118
|
+
- Plan docs have --status, --priority filters
|
|
119
|
+
- Skills have SKILL.md with name + content required
|
|
120
|
+
- Version-awareness: tools should verify against current AGENTS.md version
|
|
121
|
+
|
|
122
|
+
**Assess:** Does your tool/provide consistent help access?
|
|
123
|
+
**Improve:** Always include help reference in output; reference AGENTS.md as the primary help; use --status/--priority filters where applicable; verify against current AGENTS.md version.
|
|
124
|
+
|
|
125
|
+
## The Runtime Judgments of Tyr (11–18)
|
|
126
|
+
|
|
127
|
+
These judge the Brokk distro runtime and its Galdr assets. Full detail and runnable checks
|
|
128
|
+
live in `.agents/skills/galdr-ymirsystem/assets/runtime-compliance.md`.
|
|
129
|
+
|
|
130
|
+
### 11. Norse naming law
|
|
131
|
+
Every subsystem, component, and process is named for the figure whose role matches its work; the operator is the **Allfather**, never "Allfather"; no imported or Brokk term names a component. Flavor may season a line; it must never name a subsystem or leak into docs.
|
|
132
|
+
**Assess:** Does every new/changed component follow `galdr-ymirsystem/assets/norse-naming.md`? Any imported term used as a name? Any stale legacy string in code or docs?
|
|
133
|
+
**Improve:** Rename to the role-matched figure; record the mapping; scrub stale legacy names from code and docs in the same pass.
|
|
134
|
+
|
|
135
|
+
### 12. Runtime syntax & format validity
|
|
136
|
+
All runtime shell scripts pass `bash -n`; all config/JSON parses; the smoke commands in each doc actually pass.
|
|
137
|
+
**Assess:** Run `bash -n` on every `bin/*.sh`; `python3 -m json.tool` (or `jq -e .`) on every JSON; execute the documented smoke checks.
|
|
138
|
+
**Improve:** Fix syntax/parse errors; add verification commands to the owning asset; never ship an unverified script.
|
|
139
|
+
|
|
140
|
+
### 13. Harness adapters fail-closed and documented
|
|
141
|
+
Each supported harness has a guide under `galdr-ymirsystem/assets/harness-integration/`, an adapter on disk, a run/nudge tier, and a fail-closed dispatch (never launch on an unverified harness; a missing dependency is a blocker, not a silent fallback).
|
|
142
|
+
**Assess:** Does every supported harness have adapter + guide? Does the adapter fail closed? Is the tier accurate?
|
|
143
|
+
**Improve:** Add the missing guide/adapter; enforce verification before spawn; never guess a fallback.
|
|
144
|
+
|
|
145
|
+
### 14. Session lock bound to the live session
|
|
146
|
+
Gleipnir's lock is bound to the harness/session process via `BROKK_SESSION_PID`, not the short-lived digest helper; a lock-refused session is read-only.
|
|
147
|
+
**Assess:** Does the session open pass `BROKK_SESSION_PID`? Does `state/.lock` hold the live process? Does read-only mode gate all mutation?
|
|
148
|
+
**Improve:** Thread `BROKK_SESSION_PID` through the adapter; refuse mutation when the lock is not owned.
|
|
149
|
+
|
|
150
|
+
### 15. Turn-end guard inert until armed
|
|
151
|
+
Sýn's turn-end guard does nothing until the first successful arm writes `state/.supervision-armed`; after that it fires (exit 2) only when the watcher is missing or stale.
|
|
152
|
+
**Assess:** Does a fresh session avoid false turn-end prompts? Does it fire when supervision drops after arming?
|
|
153
|
+
**Improve:** Gate on the armed marker and the heartbeat staleness window; never fire before the first arm.
|
|
154
|
+
|
|
155
|
+
### 16. Production, no mocks
|
|
156
|
+
No examples, placeholders, or mock data in the shipped runtime; failures report a plain reason. (`.example` fixtures are permitted only as tracked templates, never loaded as runtime data.)
|
|
157
|
+
**Assess:** Grep the runtime for mock/stub/TODO/placeholder; confirm real `data/` and `config/` drive behavior.
|
|
158
|
+
**Improve:** Replace mocks with real implementations; fail honestly instead of faking.
|
|
159
|
+
|
|
160
|
+
### 17. Scheduled jobs are safe
|
|
161
|
+
Nornir jobs are idempotent and once-per-day date-guarded; the Huginn observer is strictly read-only over `~/Ymir` and `~/Brokk`; the Runes ledger is append-only with a chained checksum.
|
|
162
|
+
**Assess:** Does a job double-run in one minute? Does the observer write anywhere external? Is the ledger ever rewritten?
|
|
163
|
+
**Improve:** Add the date guard; make external access read-only; append, never rewrite.
|
|
164
|
+
|
|
165
|
+
### 18. Galdr assets complete and drift-free
|
|
166
|
+
The runtime change is reflected in the owning Galdr asset in the same pass; `galdr-ymirsystem/assets/README.md` routes the task; code, plan, and asset agree. `tyr-check/assets/` mirrors `galdr-ymirsystem/assets/`; Galdr's agent surface (`.agents/agents/galdr.md`) resolves to its skill.
|
|
167
|
+
**Assess:** Is there an asset for the changed subsystem? Does it match the code? Are the mirrored copies in sync? Does Galdr's agent symlink resolve? Does `assets/README.md` list it?
|
|
168
|
+
**Improve:** Write/update the asset now; reconcile plan vs code vs asset; re-mirror into `tyr-check/assets/`.
|
|
169
|
+
|
|
170
|
+
## Runtime compliance checklist
|
|
171
|
+
|
|
172
|
+
Run this against any runtime change (expected outputs and per-check commands are owned by
|
|
173
|
+
`.agents/skills/galdr-ymirsystem/assets/runtime-compliance.md`):
|
|
174
|
+
|
|
175
|
+
```
|
|
176
|
+
[ ] bash -n clean on every bin/*.sh
|
|
177
|
+
[ ] every config/JSON parses
|
|
178
|
+
[ ] smoke evidence recorded for the touched chain
|
|
179
|
+
[ ] Norse naming valid (no imported names)
|
|
180
|
+
[ ] harness adapters fail closed; supported harnesses documented
|
|
181
|
+
[ ] session lock bound to BROKK_SESSION_PID
|
|
182
|
+
[ ] turn-end guard inert until armed
|
|
183
|
+
[ ] no mocks/examples/placeholders in the shipped runtime
|
|
184
|
+
[ ] Nornir jobs idempotent + date-guarded; observer read-only; Runes append-only
|
|
185
|
+
[ ] Galdr asset updated for the change; code = plan = asset
|
|
186
|
+
[ ] tyr-check/assets mirror in sync; Galdr agent symlink resolves
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
## Invocation
|
|
190
|
+
|
|
191
|
+
- opencode: /skill tyr-check
|
|
192
|
+
- Ymir harness: tyr-check skill
|
|
193
|
+
- One command: `bash .agents/skills/galdr-ymirsystem/scripts/compliance-check.sh`
|
|
194
|
+
|
|
195
|
+
## Output
|
|
196
|
+
|
|
197
|
+
Compliance assessment per principle and per runtime gate, with "Assess" / "Improve" recommendations specific to Ymir's architecture and TOON output format. The script form emits a TOON `checks[N]{id,check,status,detail}` table and exits 1 on any FAIL.
|
|
198
|
+
|
|
199
|
+
## Files referenced
|
|
200
|
+
|
|
201
|
+
- Governance: `AGENTS.md`, `docs/Architecture.md`, `docs/append-only-log.md`, `docs/plans/*.md`
|
|
202
|
+
- Skills: `.agents/skills/*/SKILL.md`
|
|
203
|
+
- Scripts: `.agents/skills/galdr-ymirsystem/scripts/compliance-check.sh`, `.agents/skills/galdr-ymirsystem/scripts/toon-check.py`
|
|
204
|
+
- Galdr assets (also mirrored at `tyr-check/assets/`):
|
|
205
|
+
- `galdr-ymirsystem/assets/README.md` — routing table
|
|
206
|
+
- `galdr-ymirsystem/assets/principles.md` — the 10 principles (full doctrine)
|
|
207
|
+
- `galdr-ymirsystem/assets/build-method.md` — build/forge procedure
|
|
208
|
+
- `galdr-ymirsystem/assets/registry.md` — skills, tools, commands, profiles, aett
|
|
209
|
+
- `galdr-ymirsystem/assets/norse-naming.md` — naming law + component map
|
|
210
|
+
- `galdr-ymirsystem/assets/brokk-distro-runtime.md` — runtime spec
|
|
211
|
+
- `galdr-ymirsystem/assets/runtime-components.md` — component inventory
|
|
212
|
+
- `galdr-ymirsystem/assets/runtime-compliance.md` — runtime acceptance gates
|
|
213
|
+
- `galdr-ymirsystem/assets/harness-integration/` — per-harness adapters
|
|
214
|
+
- `galdr-ymirsystem/assets/porting-upstream-to-norse.md` — port methodology
|
|
215
|
+
- `galdr-ymirsystem/assets/eindri-orchestration.md` — worker orchestration
|
|
216
|
+
- `galdr-ymirsystem/assets/nornir-jobs.md` — scheduler, jobs, Runes
|
|
217
|
+
- `galdr-ymirsystem/assets/hlidskjalf-ui.md` — UI working guide
|
|
218
|
+
- `galdr-ymirsystem/assets/pi-boot-guide.md` — PI primary boot
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: urdh
|
|
3
|
+
description: >-
|
|
4
|
+
Urðr — the hold lifecycle. Load before treating an investigation, scout report,
|
|
5
|
+
structured review, or Lavish review as complete without losing an unresolved
|
|
6
|
+
Allfather call; before ending a visual review that exposed a decision; when
|
|
7
|
+
recording or routing the Allfather's answer; and on any RECORD DIVERGENCE line
|
|
8
|
+
the wake drain prints. One skill for what is held and how it closes.
|
|
9
|
+
user-invocable: false
|
|
10
|
+
metadata:
|
|
11
|
+
internal: true
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# urdh-hold — hold lifecycle — decisions held for the Allfather, reconciled
|
|
15
|
+
|
|
16
|
+
Urðr is fate — what is woven and must be answered. This skill governs the calls
|
|
17
|
+
held for the Allfather and the reconciliation that closes them.
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
assets[2]{path,load_when}:
|
|
21
|
+
"assets/hold.md","the Allfather-hold lifecycle: complete work without losing an unresolved call; record and route the answer"
|
|
22
|
+
"assets/decisions.md","renamed pointer: the decisions concept collapsed into 'a task held for the Allfather'"
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
A change to the hold policy edits an asset here, not a new skill.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: urdh-decisions
|
|
3
|
+
description: >-
|
|
4
|
+
Renamed pointer kept for in-flight briefs: the decisions concept collapsed into "a task held for the Allfather".
|
|
5
|
+
Load Allfather-hold-lifecycle instead; this stub only redirects and will be removed one release after the collapse.
|
|
6
|
+
user-invocable: false
|
|
7
|
+
metadata:
|
|
8
|
+
internal: true
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# decision-hold-lifecycle (renamed)
|
|
12
|
+
|
|
13
|
+
The separate decision concept was collapsed into the one primitive the Allfather cares about: a task held for the Allfather.
|
|
14
|
+
Read and follow `.agents/skills/Allfather-hold-lifecycle/SKILL.md`; it owns the completion gate, the recorded-answer rule, and every command this skill used to describe.
|
|
15
|
+
Where an older brief says `bin/brokk-decision-hold.sh`, that command still works as a one-release compatibility shim over `bin/brokk-Allfather-hold.sh`.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: urdh-hold
|
|
3
|
+
description: >-
|
|
4
|
+
Agent-only policy for completing investigations and visual reviews without losing unresolved Allfather calls, and for closing what the Allfather owns with his actual words.
|
|
5
|
+
Load before treating an investigation, scout report, structured review, or Lavish review as complete, before ending a visual review that exposed a Allfather decision, when recording or routing the Allfather's answer, and on any RECORD DIVERGENCE line the wake drain prints.
|
|
6
|
+
user-invocable: false
|
|
7
|
+
metadata:
|
|
8
|
+
internal: true
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Allfather-hold lifecycle
|
|
12
|
+
|
|
13
|
+
A decision is not a separate thing: it is simply a task waiting on the Allfather.
|
|
14
|
+
The one primitive is an ordinary backlog task held for the Allfather (`tasks-axi hold <id> --kind Allfather`), its identity is the task id, and `bin/brokk-Allfather-hold.sh` owns the deterministic mechanics this policy relies on.
|
|
15
|
+
The agent performs the semantic inventory because scripts must not infer Allfather calls from report prose, visual-review artifacts, terminal output, or chat.
|
|
16
|
+
|
|
17
|
+
## Policy
|
|
18
|
+
|
|
19
|
+
Every unresolved question that belongs to the Allfather and is discovered while producing, reading, presenting, or ending an investigation or visual review must be carried by a Allfather-held task in the authoritative backlog of the home that owns the originating work before that work or review may be treated as complete.
|
|
20
|
+
Prefer holding the work item the question gates over minting a new row; create a new task only when no work item exists to hold.
|
|
21
|
+
Put the question and its options in the hold reason, and keep one held task per genuine gate: a multi-question review is one held task pointing at its report, not a row per question. Represent that task with exactly one board card that consolidates its questions and options; never fan one task id into duplicate same-key cards.
|
|
22
|
+
Register or re-hold through `bin/brokk-Allfather-hold.sh hold`, which is idempotent per task id.
|
|
23
|
+
After inventorying the whole report and review surface, run `bin/brokk-Allfather-hold.sh complete` with every Allfather-held task id, or with `--none` only when the reviewed surface leaves nothing waiting on the Allfather.
|
|
24
|
+
A completed investigation and an ended visual review use this same owner and completion command; a visual tool, including Lavish, never owns a parallel completion policy.
|
|
25
|
+
Run the command in the originating work's authoritative `BROKK_HOME`; Eindri-home-owned work registers in that Eindri-home home's backlog, and a question already held anywhere is never re-registered as a second row.
|
|
26
|
+
Do not close a Allfather-held task merely because the originating investigation completed, its report was archived, its visual review ended, or its task was torn down.
|
|
27
|
+
|
|
28
|
+
Never close anything the Allfather owns without recording what he actually said: `bin/brokk-Allfather-hold.sh answer` writes his exact words into the task and closes it in the same act, with `--release` when the answer frees a Allfather-gated work item to proceed instead of completing a question.
|
|
29
|
+
When the Allfather says "later", that is an answer too: re-hold with `tasks-axi hold <id> ... --until <date>` so the item leaves the live Allfather's Call and resurfaces on its date, instead of leaving a live-looking card or fabricating a closure.
|
|
30
|
+
"A keyed answer closes its matching Allfather-held task" is one capability with one owner, `bin/brokk-Allfather-hold.sh answers`, and every channel that carries a Allfather answer feeds it the same task id and answer; a channel never maps keys to tasks, records a decision, or closes anything itself.
|
|
31
|
+
Chat already feeds it through `bin/brokk-send.sh --resolve-key`, and a captured-answer source feeds it once bound with `bin/brokk-Allfather-hold.sh bind <source-id>`; bind before arming the source, and key each structured question by the held task's id.
|
|
32
|
+
An unbound source and a key that names no Allfather-held task both simply feed nothing: the answer is still captured and Brokk is still woken, and closing falls back to the direct command above.
|
|
33
|
+
A Allfather-held task closed outside this owner leaves no durable answer, so the completion gate keeps failing until `answer` records the decision the Allfather actually gave.
|
|
34
|
+
Resolved findings, recommendations that need no Allfather choice, and prose that merely sounds decision-like do not create held tasks.
|
|
35
|
+
Bearings reads the resulting structured state and must never compensate by scraping historical reports, visual-review artifacts, terminal output, chat, or other prose.
|
|
36
|
+
|
|
37
|
+
A Allfather call can be written down twice - as the keyed status decision the fold reads, and as the backlog task held for the Allfather - and those two records can disagree without either surface saying so.
|
|
38
|
+
`bin/brokk-Allfather-hold.sh diverged` reports that contradiction and the wake drain prints it as `RECORD DIVERGENCE`; it closes nothing, because a Allfather call closed wrongly leaves review entirely, which is worse than the noise.
|
|
39
|
+
Read such a line as "these two records disagree", never as "the Allfather ruled and someone forgot to file it": a call can dissolve because its premise was false, or turn out to have been a question of fact rather than the Allfather's to answer.
|
|
40
|
+
Reconcile it with what actually happened - `answer` when the Allfather's own words exist to record, and a fresh `needs-decision` line re-opening the status decision when that resolution was not the Allfather's word.
|
|
41
|
+
The absence of a routed work item is not a divergence and the guard never requires one: when the decision IS the deliverable there is nothing to route.
|
|
42
|
+
|
|
43
|
+
## Operating sequence
|
|
44
|
+
|
|
45
|
+
1. Read the complete investigation result and complete the visual review before declaring either complete.
|
|
46
|
+
2. Inventory only genuine unresolved choices that require the Allfather, and find the task each one gates.
|
|
47
|
+
3. Hold that task - or create one Allfather-held task for the review's open questions - with a concise reason carrying the question and options.
|
|
48
|
+
4. Run `complete` with the full Allfather-held inventory for that review pass.
|
|
49
|
+
5. Relay the choices to the Allfather as decisions from Bearings' Allfather's Call section under `AGENTS.md` section 9; do not use the word hold in Allfather chat.
|
|
50
|
+
6. Close each call only through `answer` (or a channel that feeds `answers`), through `--until` when the Allfather defers it, or confirm a channel already closed it.
|
|
51
|
+
7. Confirm Bearings reflects the outcome: answered calls leave Allfather's Call, released work resumes, and deferred calls sit in Charted Next with their date.
|
|
52
|
+
|
|
53
|
+
`bin/brokk-Allfather-hold.sh --help` owns command syntax, close modes, legacy-identity compatibility, completion attestation, retry behavior, and close ordering.
|
|
54
|
+
`docs/Allfather-hold-lifecycle.md` records the mechanism and regression evidence without restating this policy.
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: vor-diagnostics
|
|
3
|
+
description: >-
|
|
4
|
+
Agent-only handling playbook for session-start bootstrap diagnostics.
|
|
5
|
+
Use whenever the session-start digest's bootstrap or network-checks section prints an actionable diagnostic line - MISSING, MISSING_MANUAL, BACKEND_INVALID, NEEDS_GH_AUTH, TANGLE, STARTUP_MEMORY_BUDGET, CREW_DISPATCH invalid, FLEET_SYNC, NETWORK_CHECKS, HOME_SUMMARY, BACKLOG_RECONCILE, EINDRI_HOME_SYNC, EINDRI_HOME_LIVENESS, EINDRI_HOME_HANDOFF, NUDGE_EINDRI_HOMES, or FMX - or reports that an interrupted backlog cleanup may have left an endpoint or local copy, or when a standalone bin/brokk-bootstrap.sh or bin/brokk-startup-network.sh run prints one of those lines.
|
|
6
|
+
A silent bootstrap section, or any other BOOTSTRAP_INFO fact, means no skill load.
|
|
7
|
+
user-invocable: false
|
|
8
|
+
metadata:
|
|
9
|
+
internal: true
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# vor-diagnostics — diagnostics — bootstrap + diagnostic reasoning
|
|
13
|
+
|
|
14
|
+
Handle each printed line as below, before dispatching work that depends on it.
|
|
15
|
+
The line formats themselves are owned by `bin/brokk-bootstrap.sh`'s header; this playbook owns the response to actionable lines.
|
|
16
|
+
The inline rules in `AGENTS.md` section 3 still bind: detect, then consent, then install - never install anything the Allfather has not approved in this session - and no work is dispatched until the tools it needs are present and GitHub auth is good.
|
|
17
|
+
When any diagnostic needs Allfather attention, report the plain consequence and requested action using `AGENTS.md` section 9's Allfather-facing translation contract; do not name the diagnostic label unless the Allfather needs to paste it into a command or issue.
|
|
18
|
+
|
|
19
|
+
- `MISSING: <tool> (install: <command>)` - list the missing tools to the Allfather with a one-line purpose each plus the printed install commands, wait for consent (one approval may cover the list), then run `bin/brokk-bootstrap.sh install <approved tools...>`.
|
|
20
|
+
For `Yggdrasil`, this also covers an installed version whose `Yggdrasil get` lacks `--lease`; treat it as an upgrade request.
|
|
21
|
+
For `no-mistakes`, this also covers an installed version older than 1.46.0, because this repo's PR gate requires structured pipeline attestation that older builds do not write.
|
|
22
|
+
For any axi-family tool - `gh-axi`, `lavish-axi`, `tasks-axi`, `quota-axi` - an installed version below its floor is a plain upgrade request; [`bin/brokk-bootstrap.sh`](../../../bin/brokk-bootstrap.sh) owns the floor policy, and never argue the floor down to whatever the home happens to have installed.
|
|
23
|
+
For `tasks-axi`, this additionally covers an installed build that fails the separate feature probe (`bin/brokk-tasks-axi-lib.sh` owns the definition); `config/backlog-backend=manual` only suppresses the verbose `BOOTSTRAP_INFO: tasks-axi available` fact, not this missing-tool report.
|
|
24
|
+
For `quota-axi`, bootstrap requires it because Brokk reads its current output directly before resolving every crew-dispatch profile array; without it, report the missing requirement and do not choose around an unexamined candidate.
|
|
25
|
+
- `MISSING_MANUAL: <tool> (instructions: <url>)` - tell the Allfather why the tool is required and give them the printed instructions URL, but do not pass the tool to `bin/brokk-bootstrap.sh install`; wait for the Allfather to complete the manual installation, then rerun session start to confirm the dependency is present.
|
|
26
|
+
- `BACKEND_INVALID: <name> (known: <names>)` - the resolved runtime backend has no verified dependency or lifecycle contract, so do not dispatch work until the invalid `BROKK_BACKEND` or `config/backend` value is corrected to one of the listed backends.
|
|
27
|
+
- `NEEDS_GH_AUTH` - ask the Allfather to run `! gh auth login` (interactive; you cannot run it for them).
|
|
28
|
+
This probe now arrives from the deferred network stage, so it is also how an unreachable network shows up: `gh` cannot validate its token offline and reports the same failure. Confirm reachability before asking the Allfather to re-authenticate a credential that may be fine.
|
|
29
|
+
- `NETWORK_CHECKS: <what did not complete>; rerun <command>` - the deferred network stage itself could not finish, so the checks it names are simply unknown, not failed.
|
|
30
|
+
Rerun the printed command; it is idempotent and re-derives every finding.
|
|
31
|
+
A `hit the ...s bound` line means one of those checks is slow or unreachable - most often a remote Eindri-home host - and the stage stopped rather than letting it wedge; a `lock was no longer held` line means the session that asked for the sweeps no longer owns them, so leave them to the session that does.
|
|
32
|
+
- `TANGLE: <remediation>` - the primary checkout is stranded on a feature branch instead of its default branch; `AGENTS.md` section 8 explains why this guard exists and what it protects.
|
|
33
|
+
The work is safe on that branch ref; restore the primary to its default branch with the printed `git -C <root> checkout <default>`, then re-validate that branch in a proper worktree.
|
|
34
|
+
This is the only sanctioned Brokk-initiated git write to the primary, and it is a non-destructive branch switch that strands nothing.
|
|
35
|
+
- `STARTUP_MEMORY_BUDGET: invalid config/startup-memory-budget - <reason>` - the visible startup-memory budget is not a safe one-line positive decimal file; do not infer the default or propagate it.
|
|
36
|
+
Correct the local primary file, then rerun session start so the normal convergence path can deliver the validated value to Eindri-home homes.
|
|
37
|
+
- `CREW_DISPATCH: invalid config/crew-dispatch.json - <reason>` - the optional dispatch profile file exists but failed low-cost bootstrap validation; stop profile-based dispatch, report the actionable error, and require correction of the malformed schema, unverified harness name, or invalid harness/effort pair rather than falling back around it or selecting a bad profile.
|
|
38
|
+
- `FLEET_SYNC: <repo>: skipped: <reason>` - a benign one-off skip (offline, no origin, local-only); bootstrap continued, investigate only if it blocks work.
|
|
39
|
+
A skip can also report the bounded fleet-refresh timeout (`BROKK_FLEET_SYNC_BOOTSTRAP_TIMEOUT`, or a fleet-size-aware default with a 20 second floor); a timeout never blocks startup.
|
|
40
|
+
- `FLEET_SYNC: <repo>: recovered: <detail>` - the clone had drifted onto a clean detached HEAD holding no unique commits and the sync self-healed it (re-attached the default branch and fast-forwarded); no action needed, it is reported only so the self-heal is visible.
|
|
41
|
+
- `FLEET_SYNC: <repo>: STUCK: on <state>, N commits behind <base> - needs attention` - the clone is dirty, on a non-default branch, detached with unique commits, or diverged, so the sync left it untouched (never forcing or discarding); it will keep falling behind until you look.
|
|
42
|
+
A loud STUCK, especially a growing N across bootstraps, means that clone needs hands-on attention; dispatch a Eindri or resolve it before it strands work.
|
|
43
|
+
- `HOME_SUMMARY: this home has never published state/home-summary.json` or `... has not been republished since <stamp>` - this home's structured summary publication has failed repeatedly, and the line carries the failure count and the newest recorded reason from `state/.home-summary-refresh.log`.
|
|
44
|
+
Publication is deliberately best-effort, so it cannot change another session-start, spawn, teardown, or watcher-poll result, and the watcher runs it detached so a slow attempt cannot delay the liveness beacon.
|
|
45
|
+
Read the named record for the recorded reasons, then reproduce with a direct `bin/brokk-home-summary-refresh.sh` (no `--best-effort`, which is what keeps the failure quiet) so the refresh error reaches you.
|
|
46
|
+
A recorded deadline means the complete refresh did not finish inside `BROKK_HOME_SUMMARY_TIMEOUT`, so inspect lock acquisition and producer completion before validation or publication, and fix the blocked phase rather than raising this load-bearing bound.
|
|
47
|
+
|
|
48
|
+
- `BOOTSTRAP_INFO: closed the backlog item for <id> after interrupted cleanup; its endpoint or local copy may remain and should be reconciled` - replay closed the item, but the durable close says physical cleanup was interrupted.
|
|
49
|
+
Verify process reaping, the local-copy return, and endpoint closure, then reconcile any surviving resource.
|
|
50
|
+
- `BACKLOG_RECONCILE: <id>: recorded backlog close could not be replayed: <reason>` - this session start found a pending-close record but could not land it.
|
|
51
|
+
A valid teardown record proves the close was authorized and recorded, but physical cleanup may be partial: verify process reaping, the local-copy return, and endpoint closure before assuming those resources are gone.
|
|
52
|
+
A validation error means the record cannot be trusted, so do not assume cleanup completed or follow any path or argument stored in it.
|
|
53
|
+
Read the named reason, inspect the marker as inert data when validation failed, fix the record or backlog-file problem, and rerun session start so a valid recorded close replays.
|
|
54
|
+
Never hand-close the item by deleting `state/<id>.backlog-close` - that can discard a completion link the cleanup captured, and the surviving marker prevents the record sweep from starting the item meanwhile.
|
|
55
|
+
- `BACKLOG_RECONCILE: <id>: worker record exists but its backlog item could not be read: <reason>` - this home could not determine whether the item matches its worker record.
|
|
56
|
+
Resolve the named backlog read problem and rerun session start; never guess by starting or closing an unreadable item.
|
|
57
|
+
- `BACKLOG_RECONCILE: <id>: worker record exists but its backlog item could not be moved to In flight: <reason>` - this home owns a worker whose backlog item is still queued, and the reconciliation could not correct it.
|
|
58
|
+
Until it is corrected, the fleet view reads that worker as work no backlog item owns; resolve the named backlog problem and rerun session start.
|
|
59
|
+
- `EINDRI_HOME_SYNC: Eindri-home <id>: skipped: <reason>` - Eindri-home convergence left a live home on its existing checkout because the home was dirty, diverged, unsafe, on the wrong branch, missing its placement-specific target commit, unreachable, or otherwise not fast-forwardable, or because inherited local-material propagation failed; bootstrap continued, but inspect the reason because the Eindri-home's tracked instructions, inherited settings, or shared Allfather preferences may be stale after a primary update.
|
|
60
|
+
- `EINDRI_HOME_LIVENESS: Eindri-home <id>: skipped: <reason>|respawn failed after <cause>: <reason>` - the session-start liveness sweep could not guarantee that the registered Eindri-home is running a real agent process.
|
|
61
|
+
Investigate the reason because that Eindri-home is not guaranteed live.
|
|
62
|
+
- `EINDRI_HOME_HANDOFF: Eindri-home <id>: pending delivery: <n> item(s)` - queued work has already left the main dispatchable backlog and remains safe in the named remote route's backlog-format outbox, pending backlog receipt or receiver-wake confirmation.
|
|
63
|
+
Preserve that outbox and rerun `bin/brokk-backlog-handoff.sh --resume-pending` after the route or endpoint problem is resolved; never re-add or dispatch the items from the main backlog.
|
|
64
|
+
An unsafe-outbox variant requires path and file-type inspection before any retry.
|
|
65
|
+
- `NUDGE_EINDRI_HOMES: Eindri-home <id>: send failed: <reason>` - Eindri-home convergence changed a running home's loaded instructions or inherited config, but the deterministic `brokk-send.sh fm-<id>` re-read nudge failed.
|
|
66
|
+
Inspect the reason, keep the pending marker under `state/.Eindri-home-nudge-pending/` intact, and rerun session start after the endpoint or metadata issue is fixed so bootstrap can retry the exact same marked send on the same local or remote route.
|
|
67
|
+
- `FMX: X mode on ...` / `FMX: X mode off ...` - bootstrap confirmed or removed the local Relay poll artifacts (`docs/configuration.md` "Relay (.env)"); the emitted line still carries Relay's former `X mode` wording.
|
|
68
|
+
Only when a running watcher needs the cadence transition applied immediately, restart the home-scoped watcher through the emitted harness supervision protocol; bootstrap deliberately never restarts the watcher itself.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ymir
|
|
3
|
+
description: >-
|
|
4
|
+
Operating the Ymir host itself. Load the asset a task needs: self-update
|
|
5
|
+
(Brokk + every Eindri-home via /updateBrokk), Omarchy-native desktop operation
|
|
6
|
+
(Hyprland, shell/bar, monitors, window rules, placement, GPU/Wayland, any
|
|
7
|
+
~/.config file), and the Þjazi terminal backend (herdr/tmux selection,
|
|
8
|
+
protocol floors, panes, presentation spaces). One skill for the machine.
|
|
9
|
+
allowed-tools: read,write,bash,glob,grep
|
|
10
|
+
user-invocable: true
|
|
11
|
+
metadata:
|
|
12
|
+
internal: true
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# ymir-host — host ops — self-update, Omarchy desktop, Þjazi backend
|
|
16
|
+
|
|
17
|
+
One skill for running the machine Ymir lives on. Read the row the task needs,
|
|
18
|
+
then the asset it points to.
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
assets[5]{path,load_when}:
|
|
22
|
+
"assets/update.md","self-update Brokk + every Eindri-home (updateBrokk / /updateBrokk)"
|
|
23
|
+
"assets/omarchy.md","Omarchy host: Hyprland, shell/bar, monitors, placement, GPU, ~/.config"
|
|
24
|
+
"assets/thjazi.md","the terminal backend: herdr/tmux, protocol floors, panes, spaces"
|
|
25
|
+
"assets/runbooks.md","operator runbooks: models · agents · Tailscale sync · updates/migrations · secrets/Hodd"
|
|
26
|
+
"assets/desktop.md","the Electron desktop shell (Hlidskjalf/Smíðja): single instance, one window, auth, recovery"
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
A change that adds a host capability adds a row here, not a new skill.
|
|
30
|
+
|
|
31
|
+
Rule 06 (append-only) governs the memory: the Runes ledger, the
|
|
32
|
+
changelog, `docs/append-only-log.md` and the rules are appended to, never
|
|
33
|
+
rewritten — and a move must carry every one of them plus the hoard.
|
|
34
|
+
Law: `RULES/06-append-only.md`.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Desktop shell — Hlidskjalf · Smíðja (Electron)
|
|
2
|
+
|
|
3
|
+
The control plane runs as a native desktop app: one Electron shell per view,
|
|
4
|
+
selected by `YMIR_DESKTOP_VIEW` (`hlidskjalf` default, or `smidja`). Managed by
|
|
5
|
+
`scripts/electron.sh start|stop|status`; `scripts/start.sh` raises the stack.
|
|
6
|
+
|
|
7
|
+
## Automatic guarantees (in `apps/hlidskjalf/electron/main.cjs`)
|
|
8
|
+
|
|
9
|
+
- **Single instance per app identity** — `app.requestSingleInstanceLock()`. A
|
|
10
|
+
second launch **focuses the existing window**; it never opens another. (This
|
|
11
|
+
was the cause of windows stacking when agents started.)
|
|
12
|
+
- **Single window** — `openWindow()` reuses the live `win` and focuses it
|
|
13
|
+
instead of constructing a new `BrowserWindow`.
|
|
14
|
+
- **Second-instance → restore + focus** — minimized windows come back.
|
|
15
|
+
- **Titles stay "Ymir"** — `page-title-updated` is suppressed.
|
|
16
|
+
- **External links** open in the browser; the app's own origin stays in-window
|
|
17
|
+
(so auth redirects don't leave the app).
|
|
18
|
+
|
|
19
|
+
## The auth rule (one login, one window)
|
|
20
|
+
|
|
21
|
+
The shell must show **one** login and stay in **one** window. The gate session
|
|
22
|
+
login (`HLIDSKJALF_AUTH`) is the interim; **Heimdall (oauth2-proxy)** is the
|
|
23
|
+
target. The GitHub hop and the second window were both symptoms of two auth
|
|
24
|
+
systems at once — see the private plan `hodd/docs/electron-auth.md`.
|
|
25
|
+
|
|
26
|
+
## "The UI is gone"
|
|
27
|
+
|
|
28
|
+
Often the **backend is fine** (SPA `:3888`, gate `:3889`, visualizer `:8437`,
|
|
29
|
+
tunnel up) and only the **window** closed. `scripts/electron.sh status` should
|
|
30
|
+
verify a **live window**, not just a pid. Recovery: `stop` then `start` forces a
|
|
31
|
+
real window (a plain `start` on a stale pid is a no-op).
|
|
32
|
+
|
|
33
|
+
## Known script fixes
|
|
34
|
+
|
|
35
|
+
- `scripts/electron.sh`: a stray `local` outside a function (stop path) and the
|
|
36
|
+
smidja pid-file write — both flagged; harden `status` to check the renderer.
|