@zerwiz/ymir 0.1.4 → 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/README.md +291 -0
- package/.agents/agents/bragi-marketer.md +111 -0
- package/.agents/agents/brokk.md +352 -0
- package/.agents/agents/forseti-reviewer.md +93 -0
- package/.agents/agents/frigg-consent.md +77 -0
- package/.agents/agents/groa-update.md +77 -0
- package/.agents/agents/hnoss-designer.md +69 -0
- package/.agents/agents/huginn-researcher.md +99 -0
- package/.agents/agents/jord-projects.md +78 -0
- package/.agents/agents/kvasir-scout.md +91 -0
- package/.agents/agents/mimir-planner.md +92 -0
- package/.agents/agents/muninn-stow.md +77 -0
- package/.agents/agents/saga-bearings.md +78 -0
- package/.agents/agents/sindri-developer.md +114 -0
- package/.agents/agents/snotra-documenter.md +105 -0
- package/.agents/agents/syn-recovery.md +78 -0
- package/.agents/agents/tyr-check.md +78 -0
- package/.agents/agents/urdh-hold.md +77 -0
- package/.agents/agents/volundr-smith.md +80 -0
- package/.agents/agents/vor-diagnostics.md +77 -0
- package/.agents/assets/agents/naming.md +50 -0
- package/.agents/assets/agents/registry.md +93 -0
- package/.agents/assets/agents/runtime.md +36 -0
- package/.agents/assets/agents/toon-tasks-cli.md +42 -0
- package/.agents/assets/templates/company_entity.template.md +37 -0
- package/.agents/backend/README.md +74 -0
- package/.agents/backend/backends/cmux.sh +649 -0
- package/.agents/backend/backends/herdr-eventwait.py +157 -0
- package/.agents/backend/backends/herdr-workspace-move.py +114 -0
- package/.agents/backend/backends/herdr.sh +3386 -0
- package/.agents/backend/backends/orca.sh +290 -0
- package/.agents/backend/backends/tmux.sh +357 -0
- package/.agents/backend/backends/zellij.sh +700 -0
- package/.agents/backend/fm-afk-launch.sh +654 -0
- package/.agents/backend/fm-afk-return.sh +241 -0
- package/.agents/backend/fm-afk-start.sh +172 -0
- package/.agents/backend/fm-arm-command-policy.mjs +960 -0
- package/.agents/backend/fm-arm-pretool-check.sh +200 -0
- package/.agents/backend/fm-backend-hometag-lib.sh +52 -0
- package/.agents/backend/fm-backend.sh +981 -0
- package/.agents/backend/fm-backlog-handoff.sh +909 -0
- package/.agents/backend/fm-backlog-receive.sh +187 -0
- package/.agents/backend/fm-backlog-transition-lib.sh +779 -0
- package/.agents/backend/fm-bearings-board.sh +204 -0
- package/.agents/backend/fm-bearings-snapshot.sh +546 -0
- package/.agents/backend/fm-bootstrap.sh +1568 -0
- package/.agents/backend/fm-branch-outcome.sh +203 -0
- package/.agents/backend/fm-branch-prompt.sh +101 -0
- package/.agents/backend/fm-brief.sh +452 -0
- package/.agents/backend/fm-busy-event.sh +234 -0
- package/.agents/backend/fm-busy-lib.sh +986 -0
- package/.agents/backend/fm-captain-hold.sh +1001 -0
- package/.agents/backend/fm-cd-command-policy.mjs +153 -0
- package/.agents/backend/fm-cd-pretool-check.sh +190 -0
- package/.agents/backend/fm-check-lib.sh +74 -0
- package/.agents/backend/fm-check-register.sh +42 -0
- package/.agents/backend/fm-check-unregister.sh +52 -0
- package/.agents/backend/fm-classify-lib.sh +1770 -0
- package/.agents/backend/fm-claude-stop-autoarm.sh +334 -0
- package/.agents/backend/fm-composer-lib.sh +1416 -0
- package/.agents/backend/fm-config-inherit-lib.sh +1202 -0
- package/.agents/backend/fm-config-push.sh +254 -0
- package/.agents/backend/fm-control-lib.sh +251 -0
- package/.agents/backend/fm-control.sh +878 -0
- package/.agents/backend/fm-crew-state.sh +625 -0
- package/.agents/backend/fm-cursor-lib.sh +243 -0
- package/.agents/backend/fm-decision-hold.sh +232 -0
- package/.agents/backend/fm-doc-audience-check.sh +269 -0
- package/.agents/backend/fm-dod-lib.sh +67 -0
- package/.agents/backend/fm-ensure-agents-md.sh +253 -0
- package/.agents/backend/fm-extension-launch-barrier.mjs +129 -0
- package/.agents/backend/fm-extension.mjs +2577 -0
- package/.agents/backend/fm-extension.sh +16 -0
- package/.agents/backend/fm-ff-lib.sh +420 -0
- package/.agents/backend/fm-fleet-snapshot.sh +1463 -0
- package/.agents/backend/fm-fleet-sync.sh +458 -0
- package/.agents/backend/fm-fleet-view.sh +96 -0
- package/.agents/backend/fm-gate-refuse-lib.sh +102 -0
- package/.agents/backend/fm-guard.sh +242 -0
- package/.agents/backend/fm-harness.sh +195 -0
- package/.agents/backend/fm-herdr-ci-cleanup.sh +115 -0
- package/.agents/backend/fm-herdr-lab.sh +346 -0
- package/.agents/backend/fm-herdr-session-cleanup.sh +337 -0
- package/.agents/backend/fm-home-seed.sh +984 -0
- package/.agents/backend/fm-home-summary-refresh.sh +255 -0
- package/.agents/backend/fm-hook-host-lib.sh +36 -0
- package/.agents/backend/fm-inactive-reconcile.sh +531 -0
- package/.agents/backend/fm-inbox.sh +399 -0
- package/.agents/backend/fm-install-actionlint.sh +84 -0
- package/.agents/backend/fm-install-herdr.sh +96 -0
- package/.agents/backend/fm-install-shellcheck.sh +84 -0
- package/.agents/backend/fm-install-treehouse.sh +95 -0
- package/.agents/backend/fm-kimi-turnend-hook.sh +276 -0
- package/.agents/backend/fm-lease-lib.sh +218 -0
- package/.agents/backend/fm-lease.sh +189 -0
- package/.agents/backend/fm-line-cap-lib.sh +51 -0
- package/.agents/backend/fm-lint-workflows.sh +137 -0
- package/.agents/backend/fm-lint.sh +591 -0
- package/.agents/backend/fm-lock-lib.sh +104 -0
- package/.agents/backend/fm-lock.sh +107 -0
- package/.agents/backend/fm-marker-lib.sh +12 -0
- package/.agents/backend/fm-merge-local.sh +74 -0
- package/.agents/backend/fm-merge-outcome-lib.sh +138 -0
- package/.agents/backend/fm-nm-run-lib.sh +124 -0
- package/.agents/backend/fm-on.sh +125 -0
- package/.agents/backend/fm-operational-input.sh +253 -0
- package/.agents/backend/fm-peek.sh +46 -0
- package/.agents/backend/fm-pending-reply-lib.sh +1409 -0
- package/.agents/backend/fm-pr-check.sh +135 -0
- package/.agents/backend/fm-pr-lib.sh +1016 -0
- package/.agents/backend/fm-pr-merge.sh +707 -0
- package/.agents/backend/fm-pr-poll.sh +110 -0
- package/.agents/backend/fm-primary-scope-lib.sh +33 -0
- package/.agents/backend/fm-procevent-extension-capture.pl +259 -0
- package/.agents/backend/fm-procevent-lavish.sh +628 -0
- package/.agents/backend/fm-procevent-lib.sh +892 -0
- package/.agents/backend/fm-procevent-quota.sh +290 -0
- package/.agents/backend/fm-procevent-remote-reply.sh +577 -0
- package/.agents/backend/fm-procevent-when.sh +504 -0
- package/.agents/backend/fm-procevent.sh +1466 -0
- package/.agents/backend/fm-project-mode.sh +92 -0
- package/.agents/backend/fm-project-origin-lib.sh +180 -0
- package/.agents/backend/fm-promote.sh +282 -0
- package/.agents/backend/fm-public-followup-emit.sh +260 -0
- package/.agents/backend/fm-public-followup-lib.sh +398 -0
- package/.agents/backend/fm-public-followup.sh +1330 -0
- package/.agents/backend/fm-push-transition-lib.sh +168 -0
- package/.agents/backend/fm-quota-axi-lib.sh +93 -0
- package/.agents/backend/fm-quota-choose.sh +384 -0
- package/.agents/backend/fm-remote-delta-read.sh +189 -0
- package/.agents/backend/fm-remote-doctor.sh +800 -0
- package/.agents/backend/fm-remote-entrypoint.sh +193 -0
- package/.agents/backend/fm-remote-file.sh +234 -0
- package/.agents/backend/fm-remote-home-provision.sh +259 -0
- package/.agents/backend/fm-remote-home-seed.sh +259 -0
- package/.agents/backend/fm-remote-inherit-push.sh +90 -0
- package/.agents/backend/fm-remote-inherit.sh +179 -0
- package/.agents/backend/fm-remote-job-lib.sh +1241 -0
- package/.agents/backend/fm-remote-job-reap-orphans.sh +137 -0
- package/.agents/backend/fm-remote-job-worker.sh +1124 -0
- package/.agents/backend/fm-remote-readiness-lib.sh +44 -0
- package/.agents/backend/fm-remote-secondmate-control.sh +340 -0
- package/.agents/backend/fm-review-diff.sh +158 -0
- package/.agents/backend/fm-secondmate-charter-lib.sh +44 -0
- package/.agents/backend/fm-secondmate-nudge-lib.sh +68 -0
- package/.agents/backend/fm-secondmate-parent-lib.sh +70 -0
- package/.agents/backend/fm-secondmate-reconcile.sh +371 -0
- package/.agents/backend/fm-secondmate-registry-lib.sh +311 -0
- package/.agents/backend/fm-secondmate-report.sh +88 -0
- package/.agents/backend/fm-send.sh +1059 -0
- package/.agents/backend/fm-session-lock-lib.sh +176 -0
- package/.agents/backend/fm-session-start.sh +970 -0
- package/.agents/backend/fm-sessionstart-cursor.sh +40 -0
- package/.agents/backend/fm-sessionstart-nudge.sh +45 -0
- package/.agents/backend/fm-sessionstart-run.sh +145 -0
- package/.agents/backend/fm-spawn.sh +3153 -0
- package/.agents/backend/fm-startup-memory-budget-lib.sh +224 -0
- package/.agents/backend/fm-startup-memory-budget.sh +94 -0
- package/.agents/backend/fm-startup-network.sh +642 -0
- package/.agents/backend/fm-stow-cascade.sh +251 -0
- package/.agents/backend/fm-subagent-pretool-check.sh +207 -0
- package/.agents/backend/fm-supervise-daemon.sh +1732 -0
- package/.agents/backend/fm-supervision-instructions.sh +215 -0
- package/.agents/backend/fm-supervision-lib.sh +90 -0
- package/.agents/backend/fm-supervisor-target-lib.sh +78 -0
- package/.agents/backend/fm-tangle-lib.sh +53 -0
- package/.agents/backend/fm-task-inbox-lib.sh +402 -0
- package/.agents/backend/fm-tasks-axi-lib.sh +123 -0
- package/.agents/backend/fm-teardown.sh +2922 -0
- package/.agents/backend/fm-test-isolation-proof.sh +588 -0
- package/.agents/backend/fm-test-run.sh +2191 -0
- package/.agents/backend/fm-timeout-lib.sh +141 -0
- package/.agents/backend/fm-timing-lib.sh +179 -0
- package/.agents/backend/fm-tmux-lib.sh +291 -0
- package/.agents/backend/fm-tool-update-check.sh +898 -0
- package/.agents/backend/fm-trace-context-lib.sh +227 -0
- package/.agents/backend/fm-transition-lib.sh +103 -0
- package/.agents/backend/fm-turnend-guard-cursor.sh +391 -0
- package/.agents/backend/fm-turnend-guard-grok.sh +90 -0
- package/.agents/backend/fm-turnend-guard.sh +432 -0
- package/.agents/backend/fm-update.sh +110 -0
- package/.agents/backend/fm-vendor-auth-probe.sh +190 -0
- package/.agents/backend/fm-voice-client.py +1373 -0
- package/.agents/backend/fm-voice-relay.py +1256 -0
- package/.agents/backend/fm-wake-drain.sh +592 -0
- package/.agents/backend/fm-wake-grant.sh +127 -0
- package/.agents/backend/fm-wake-lib.sh +1849 -0
- package/.agents/backend/fm-watch-arm.sh +602 -0
- package/.agents/backend/fm-watch-checkpoint.sh +109 -0
- package/.agents/backend/fm-watch.sh +1962 -0
- package/.agents/backend/fm-x-dismiss.sh +116 -0
- package/.agents/backend/fm-x-followup.sh +286 -0
- package/.agents/backend/fm-x-lib.sh +1000 -0
- package/.agents/backend/fm-x-link.sh +234 -0
- package/.agents/backend/fm-x-poll.sh +185 -0
- package/.agents/backend/fm-x-reply.sh +385 -0
- package/.agents/backend/fm_voice_frame.py +166 -0
- package/.agents/backend/fm_voice_records.py +574 -0
- package/.agents/backend/model-bridge.py +360 -0
- package/.agents/backend/opencode-go-bridge.py +30 -0
- package/.agents/bus/README.md +12 -0
- package/.agents/bus/messages.json +1 -0
- package/.agents/config/agents.machine.example.yaml +16 -0
- package/.agents/config/agents.yaml.example +72 -0
- package/.agents/config/crew-dispatch.json +22 -0
- package/.agents/config/cron.yaml +11 -0
- package/.agents/config/eindri-dispatch.json +67 -0
- package/.agents/config/eindri-harness +1 -0
- package/.agents/config/startup-memory-budget +1 -0
- package/.agents/filebrowser/.filebrowser.json +6 -0
- package/.agents/filebrowser/README.md +11 -0
- package/.agents/gateway/README.md +12 -0
- package/.agents/github/README.md +15 -0
- package/.agents/github/webhooks/.gitkeep +0 -0
- package/.agents/github/workflows/.gitkeep +0 -0
- package/.agents/harness/opencode/plugins/lib/rodd-operational-input.js +37 -0
- package/.agents/harness/opencode/plugins/package.json +4 -0
- package/.agents/harness/opencode/plugins/saga-sessionstart.js +77 -0
- package/.agents/harness/opencode/plugins/syn-cd-check.js +61 -0
- package/.agents/harness/opencode/plugins/syn-pretool-check.js +68 -0
- package/.agents/harness/opencode/plugins/syn-turnend-guard.js +105 -0
- package/.agents/harness/opencode/plugins/syn-watch-arm.js +521 -0
- package/.agents/memory/README.md +46 -0
- package/.agents/memory/runes_audit.md +5 -0
- package/.agents/migrations/0001-hodd-layout.sh +38 -0
- package/.agents/migrations/0002-a2a-mcp.sh +27 -0
- package/.agents/migrations/0003-private-data-separation.sh +121 -0
- package/.agents/migrations/0004-hoard-and-realms.sh +104 -0
- package/.agents/migrations/0005-roots-out-of-tree.sh +158 -0
- package/.agents/sandbox/Dockerfile.utgard +19 -0
- package/.agents/sandbox/README.md +14 -0
- package/.agents/sandbox/utgard.config.json +14 -0
- package/.agents/skills/README.md +59 -0
- package/.agents/skills/bragi-marketing/README.md +3 -0
- package/.agents/skills/bragi-marketing/SKILL.md +82 -0
- package/.agents/skills/eindri-homes/README.md +3 -0
- package/.agents/skills/eindri-homes/SKILL.md +291 -0
- package/.agents/skills/eindri-homes/assets/control-plane.md +122 -0
- package/.agents/skills/eindri-homes/assets/dispatch.md +80 -0
- package/.agents/skills/frigg-consent/README.md +3 -0
- package/.agents/skills/frigg-consent/SKILL.md +56 -0
- package/.agents/skills/galdr-ymirsystem/README.md +3 -0
- package/.agents/skills/galdr-ymirsystem/SKILL.md +159 -0
- package/.agents/skills/galdr-ymirsystem/assets/README.md +74 -0
- package/.agents/skills/galdr-ymirsystem/assets/brokk-distro-runtime.md +390 -0
- package/.agents/skills/galdr-ymirsystem/assets/build-method.md +113 -0
- package/.agents/skills/galdr-ymirsystem/assets/build-tool-categories.md +178 -0
- package/.agents/skills/galdr-ymirsystem/assets/eindri-orchestration.md +518 -0
- package/.agents/skills/galdr-ymirsystem/assets/eindri-profiles.md +136 -0
- package/.agents/skills/galdr-ymirsystem/assets/harness-integration/README.md +736 -0
- package/.agents/skills/galdr-ymirsystem/assets/harness-integration/claude-code.md +197 -0
- package/.agents/skills/galdr-ymirsystem/assets/harness-integration/codex.md +191 -0
- package/.agents/skills/galdr-ymirsystem/assets/harness-integration/cursor.md +193 -0
- package/.agents/skills/galdr-ymirsystem/assets/harness-integration/opencode.md +262 -0
- package/.agents/skills/galdr-ymirsystem/assets/harness-integration/pi.md +295 -0
- package/.agents/skills/galdr-ymirsystem/assets/hlidskjalf-ui.md +539 -0
- package/.agents/skills/galdr-ymirsystem/assets/installation.md +763 -0
- package/.agents/skills/galdr-ymirsystem/assets/local-models/HOST-DATA.example.md +72 -0
- package/.agents/skills/galdr-ymirsystem/assets/local-models.md +274 -0
- package/.agents/skills/galdr-ymirsystem/assets/memory-well.md +163 -0
- package/.agents/skills/galdr-ymirsystem/assets/nornir-jobs.md +415 -0
- package/.agents/skills/galdr-ymirsystem/assets/norse-naming.md +325 -0
- package/.agents/skills/galdr-ymirsystem/assets/odrerir-hall.md +133 -0
- package/.agents/skills/galdr-ymirsystem/assets/pi-boot/einherjar-spawn.schema.json +81 -0
- package/.agents/skills/galdr-ymirsystem/assets/pi-boot/herdr-profile.toml +75 -0
- package/.agents/skills/galdr-ymirsystem/assets/pi-boot/pi-profile.yml +101 -0
- package/.agents/skills/galdr-ymirsystem/assets/pi-boot/supervision-tree.yml +163 -0
- package/.agents/skills/galdr-ymirsystem/assets/pi-boot-guide.md +58 -0
- package/.agents/skills/galdr-ymirsystem/assets/porting-upstream-to-norse.md +301 -0
- package/.agents/skills/galdr-ymirsystem/assets/principles.md +385 -0
- package/.agents/skills/galdr-ymirsystem/assets/reference-adoption.md +99 -0
- package/.agents/skills/galdr-ymirsystem/assets/registry.md +379 -0
- package/.agents/skills/galdr-ymirsystem/assets/runtime-compliance.md +463 -0
- package/.agents/skills/galdr-ymirsystem/assets/runtime-components.md +553 -0
- package/.agents/skills/galdr-ymirsystem/assets/smidja.md +180 -0
- package/.agents/skills/galdr-ymirsystem/schemas/toon-schemas.md +190 -0
- package/.agents/skills/galdr-ymirsystem/scripts/README.md +45 -0
- package/.agents/skills/galdr-ymirsystem/scripts/bench-one.sh +248 -0
- package/.agents/skills/galdr-ymirsystem/scripts/compliance-check.sh +503 -0
- package/.agents/skills/galdr-ymirsystem/scripts/gpu-sample.sh +43 -0
- package/.agents/skills/galdr-ymirsystem/scripts/stop-all.sh +34 -0
- package/.agents/skills/galdr-ymirsystem/scripts/toon-check.py +188 -0
- package/.agents/skills/gjallarhorn-relay/README.md +3 -0
- package/.agents/skills/gjallarhorn-relay/SKILL.md +283 -0
- package/.agents/skills/groa-update/SKILL.md +90 -0
- package/.agents/skills/hamr-adapters/README.md +3 -0
- package/.agents/skills/hamr-adapters/SKILL.md +123 -0
- package/.agents/skills/hamr-adapters/references/common/control-and-recovery.md +37 -0
- package/.agents/skills/hamr-adapters/references/common/dispatch.md +32 -0
- package/.agents/skills/hamr-adapters/references/common/model-and-effort.md +42 -0
- package/.agents/skills/hamr-adapters/references/common/primary-hooks.md +40 -0
- package/.agents/skills/hamr-adapters/references/harness/claude.md +55 -0
- package/.agents/skills/hamr-adapters/references/harness/codex.md +43 -0
- package/.agents/skills/hamr-adapters/references/harness/cursor.md +75 -0
- package/.agents/skills/hamr-adapters/references/harness/grok.md +69 -0
- package/.agents/skills/hamr-adapters/references/harness/kimi.md +51 -0
- package/.agents/skills/hamr-adapters/references/harness/muse.md +70 -0
- package/.agents/skills/hamr-adapters/references/harness/opencode.md +42 -0
- package/.agents/skills/hamr-adapters/references/harness/pi.md +56 -0
- package/.agents/skills/herdr-panes/README.md +3 -0
- package/.agents/skills/herdr-panes/SKILL.md +92 -0
- package/.agents/skills/herdr-panes/assets/herdr-backend.md +346 -0
- package/.agents/skills/herdr-panes/assets/tmux-backend.md +115 -0
- package/.agents/skills/hnoss-design/DESIGN.md +19 -0
- package/.agents/skills/hnoss-design/README.md +3 -0
- package/.agents/skills/hnoss-design/SKILL.md +83 -0
- package/.agents/skills/hvild-afk/README.md +3 -0
- package/.agents/skills/hvild-afk/SKILL.md +241 -0
- package/.agents/skills/jord-projects/README.md +3 -0
- package/.agents/skills/jord-projects/SKILL.md +92 -0
- package/.agents/skills/lifecycle/SKILL.md +56 -0
- package/.agents/skills/lifecycle/smoke_test.sh +57 -0
- package/.agents/skills/lifecycle/start.sh +21 -0
- package/.agents/skills/lifecycle/status.sh +35 -0
- package/.agents/skills/lifecycle/stop.sh +16 -0
- package/.agents/skills/muninn-stow/README.md +3 -0
- package/.agents/skills/muninn-stow/SKILL.md +309 -0
- package/.agents/skills/no-mistakes/SKILL.md +379 -0
- package/.agents/skills/nornir-schedule/README.md +3 -0
- package/.agents/skills/nornir-schedule/SKILL.md +25 -0
- package/.agents/skills/nornir-schedule/assets/events.md +137 -0
- package/.agents/skills/nornir-schedule/assets/quota.md +131 -0
- package/.agents/skills/nsr-compliance/README.md +3 -0
- package/.agents/skills/nsr-compliance/SKILL.md +29 -0
- package/.agents/skills/nsr-compliance/assets/nsr/README.md +40 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/RULES/README.md +15 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/RULES/git-workflow.md +18 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/RULES/security.md +22 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/RULES/tech-stack.md +8 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/SKILL.md +71 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/config/core_four.yaml +16 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/gates/check_danger.sh +102 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/gates/check_wiring.sh +69 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/gates/validate_code.sh +29 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/gates/verify_docs.py +66 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/generate.sh +109 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/harness/envelopes/result_envelope.json +14 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/harness/envelopes/task_envelope.json +20 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/harness/runner.py +303 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/telemetry/logger.py +112 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/README.md +18 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/config/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/gates/README.md +12 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/gates/check_env.sh +23 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/gates/check_paths.sh +20 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/gates/check_platform.sh +23 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/harness/README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/harness/envelopes/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/installer/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/installer/install.sh +125 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/telemetry/README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/README.md +20 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/features/README.md +36 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/features/SKILL-template.md +14 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/git_ops/README.md +25 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/git_ops/SKILL.md +13 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/git_ops/create_branch.sh +6 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/git_ops/safe_commit.sh +9 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/git_ops/sync_upstream.sh +6 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/README.md +27 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/SKILL.md +15 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/smoke_test.sh +12 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/start.sh +19 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/status.sh +12 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/stop.sh +15 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/README.md +18 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/config/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/config/core_four.yaml +13 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/README.md +12 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/check_danger.sh +102 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/check_env.sh +23 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/check_paths.sh +20 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/check_platform.sh +23 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/check_wiring.sh +69 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/harness/README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/harness/envelopes/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/harness/envelopes/result_envelope.json +14 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/harness/envelopes/task_envelope.json +20 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/harness/runner.py +303 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/installer/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/installer/install.sh +125 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/telemetry/README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/telemetry/logger.py +112 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/BEST_PRACTICES/README.md +14 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/BEST_PRACTICES/api.md +17 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/BEST_PRACTICES/compliance-wiring.md +155 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/BEST_PRACTICES/frontend.md +15 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/README.md +23 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/clients/README.md +16 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/clients/template-README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/deploy.sh +49 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/envs/README.md +12 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/envs/development.env.example +17 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/envs/production.env.example +17 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/envs/staging.env.example +17 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/tenants/README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/tenants/template.env.example +8 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/README.md +26 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/agent.md +7 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/developers/dev-1.md +20 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/linux.md +9 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/macos.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/shared.md +19 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/windows.md +14 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/HOSTING/README.md +25 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/HOSTING/_template.md +41 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/HOSTING/hosting-1.md +41 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/README.md +21 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/RUNBOOK/README.md +15 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/RUNBOOK/deployment.md +19 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/RUNBOOK/disaster-recovery.md +15 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/RUNBOOK/ops-tasks.md +14 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/features/README.md +16 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/project-skills.md +146 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/research/README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/research/software-compliance-research.md +269 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/working-with-agents.md +260 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/AGENTS.md +38 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/ARCHITECTURE.md +36 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/BEST_PRACTICES.md +27 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/CI_CD.md +23 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/FEATURES.md +15 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/README.md +22 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/RULES.md +37 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/STRUCTURE.md +45 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/TECH_STACK.md +28 -0
- package/.agents/skills/nsr-compliance/assets/nsr/scaffold-spec.md +63 -0
- package/.agents/skills/nsr-compliance/assets/nsr/scripts/scaffold.sh +103 -0
- package/.agents/skills/nsr-compliance/assets/nsr/scripts/validate.sh +52 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/SKILL.md +71 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/config/core_four.yaml +16 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/gates/check_danger.sh +102 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/gates/check_wiring.sh +69 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/gates/validate_code.sh +29 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/gates/verify_docs.py +66 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/generate.sh +109 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/harness/envelopes/result_envelope.json +14 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/harness/envelopes/task_envelope.json +20 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/harness/runner.py +303 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/telemetry/logger.py +112 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/README.md +18 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/config/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/gates/README.md +12 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/gates/check_env.sh +23 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/gates/check_paths.sh +20 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/gates/check_platform.sh +23 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/harness/README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/harness/envelopes/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/installer/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/installer/install.sh +125 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/telemetry/README.md +11 -0
- package/.agents/skills/pr-ops/README.md +3 -0
- package/.agents/skills/pr-ops/SKILL.md +109 -0
- package/.agents/skills/ratatoskr-a2a/README.md +3 -0
- package/.agents/skills/ratatoskr-a2a/SKILL.md +148 -0
- package/.agents/skills/rules-check-drift/SKILL.md +81 -0
- package/.agents/skills/saga-bearings/README.md +3 -0
- package/.agents/skills/saga-bearings/SKILL.md +26 -0
- package/.agents/skills/saga-bearings/assets/bearings.md +161 -0
- package/.agents/skills/saga-bearings/assets/board-template.html +731 -0
- package/.agents/skills/saga-bearings/assets/recap.md +56 -0
- package/.agents/skills/syn-recovery/README.md +3 -0
- package/.agents/skills/syn-recovery/SKILL.md +54 -0
- package/.agents/skills/tyr-check/README.md +3 -0
- package/.agents/skills/tyr-check/SKILL.md +218 -0
- package/.agents/skills/urdh-hold/README.md +3 -0
- package/.agents/skills/urdh-hold/SKILL.md +25 -0
- package/.agents/skills/urdh-hold/assets/decisions.md +15 -0
- package/.agents/skills/urdh-hold/assets/hold.md +54 -0
- package/.agents/skills/vor-diagnostics/README.md +3 -0
- package/.agents/skills/vor-diagnostics/SKILL.md +68 -0
- package/.agents/skills/ymir-host/README.md +3 -0
- package/.agents/skills/ymir-host/SKILL.md +35 -0
- package/.agents/skills/ymir-host/assets/desktop.md +36 -0
- package/.agents/skills/ymir-host/assets/install.md +69 -0
- package/.agents/skills/ymir-host/assets/omarchy.md +297 -0
- package/.agents/skills/ymir-host/assets/runbooks.md +15 -0
- package/.agents/skills/ymir-host/assets/thjazi.md +220 -0
- package/.agents/skills/ymir-host/assets/update.md +64 -0
- package/.agents/tests/assets/board-render-harness.mjs +117 -0
- package/.agents/tests/cmux-test-safety.sh +51 -0
- package/.agents/tests/fixtures.sh +291 -0
- package/.agents/tests/fm-afk-inject-e2e.test.sh +428 -0
- package/.agents/tests/fm-afk-inject-herdr-e2e.test.sh +536 -0
- package/.agents/tests/fm-afk-launch.test.sh +961 -0
- package/.agents/tests/fm-afk-pi-herdr-return-e2e.test.sh +297 -0
- package/.agents/tests/fm-afk-return.test.sh +283 -0
- package/.agents/tests/fm-arm-pretool-check.test.sh +482 -0
- package/.agents/tests/fm-ask-user-authority.test.sh +42 -0
- package/.agents/tests/fm-backend-autodetect-smoke.test.sh +176 -0
- package/.agents/tests/fm-backend-cmux-smoke.test.sh +188 -0
- package/.agents/tests/fm-backend-cmux.test.sh +1166 -0
- package/.agents/tests/fm-backend-herdr-eventwait-smoke.test.sh +136 -0
- package/.agents/tests/fm-backend-herdr-eventwait.test.py +106 -0
- package/.agents/tests/fm-backend-herdr-focus-flash-e2e.test.sh +409 -0
- package/.agents/tests/fm-backend-herdr-launcher-workspace-e2e.test.sh +437 -0
- package/.agents/tests/fm-backend-herdr-presentation-e2e.test.sh +1424 -0
- package/.agents/tests/fm-backend-herdr-prune-safety-e2e.test.sh +180 -0
- package/.agents/tests/fm-backend-herdr-respawn-idem-e2e.test.sh +182 -0
- package/.agents/tests/fm-backend-herdr-smoke.test.sh +355 -0
- package/.agents/tests/fm-backend-herdr-workspace-per-home-e2e.test.sh +251 -0
- package/.agents/tests/fm-backend-herdr.test.sh +4606 -0
- package/.agents/tests/fm-backend-orca.test.sh +1357 -0
- package/.agents/tests/fm-backend-tmux-smoke.test.sh +173 -0
- package/.agents/tests/fm-backend-zellij-smoke.test.sh +205 -0
- package/.agents/tests/fm-backend-zellij.test.sh +1360 -0
- package/.agents/tests/fm-backend.test.sh +1142 -0
- package/.agents/tests/fm-backlog-atomicity.test.sh +2302 -0
- package/.agents/tests/fm-backlog-handoff.test.sh +1360 -0
- package/.agents/tests/fm-bearings-board-render.test.sh +135 -0
- package/.agents/tests/fm-bearings-board.test.sh +414 -0
- package/.agents/tests/fm-bearings-snapshot.test.sh +1990 -0
- package/.agents/tests/fm-bootstrap-network-parallel.test.sh +316 -0
- package/.agents/tests/fm-bootstrap.test.sh +1178 -0
- package/.agents/tests/fm-branch-supervision.test.sh +552 -0
- package/.agents/tests/fm-brief.test.sh +785 -0
- package/.agents/tests/fm-busy-adapter-wiring.test.sh +324 -0
- package/.agents/tests/fm-busy-state.test.sh +465 -0
- package/.agents/tests/fm-calm-pi-extension.test.sh +3979 -0
- package/.agents/tests/fm-captain-hold-lifecycle.test.sh +1187 -0
- package/.agents/tests/fm-cd-pretool-check.test.sh +400 -0
- package/.agents/tests/fm-check-unregister.test.sh +198 -0
- package/.agents/tests/fm-classify-corr-token.test.sh +543 -0
- package/.agents/tests/fm-classify-decision-key.test.sh +340 -0
- package/.agents/tests/fm-claude-stop-autoarm-live-e2e.test.sh +164 -0
- package/.agents/tests/fm-claude-stop-autoarm.test.sh +1190 -0
- package/.agents/tests/fm-cmux-claude-composer-live-e2e.test.sh +110 -0
- package/.agents/tests/fm-codex-continuity-live-e2e.test.sh +55 -0
- package/.agents/tests/fm-composer-ghost.test.sh +716 -0
- package/.agents/tests/fm-composer-lib.test.sh +666 -0
- package/.agents/tests/fm-composer-matrix-live-e2e.test.sh +220 -0
- package/.agents/tests/fm-control-herdr-smoke.test.sh +149 -0
- package/.agents/tests/fm-control-relaunch.test.sh +1530 -0
- package/.agents/tests/fm-control.test.sh +910 -0
- package/.agents/tests/fm-crew-state.test.sh +1610 -0
- package/.agents/tests/fm-cursor-harness.test.sh +404 -0
- package/.agents/tests/fm-cursor-primary-live-e2e.test.sh +217 -0
- package/.agents/tests/fm-cursor-primary.test.sh +708 -0
- package/.agents/tests/fm-daemon.test.sh +2740 -0
- package/.agents/tests/fm-documentation-audiences.test.sh +141 -0
- package/.agents/tests/fm-ensure-agents-md.test.sh +371 -0
- package/.agents/tests/fm-extension-binding.test.sh +2187 -0
- package/.agents/tests/fm-fleet-snapshot-view.test.sh +816 -0
- package/.agents/tests/fm-fleet-sync.test.sh +721 -0
- package/.agents/tests/fm-gate-refuse.test.sh +356 -0
- package/.agents/tests/fm-gitignore-config.test.sh +89 -0
- package/.agents/tests/fm-gotmp.test.sh +230 -0
- package/.agents/tests/fm-grok-continuity-live-e2e.test.sh +112 -0
- package/.agents/tests/fm-grok-harness.test.sh +117 -0
- package/.agents/tests/fm-grok-stop-live-e2e.test.sh +219 -0
- package/.agents/tests/fm-guard-stale-banner.test.sh +709 -0
- package/.agents/tests/fm-harness-adapter-instructions-live-e2e.test.sh +134 -0
- package/.agents/tests/fm-harness-adapter-references.test.sh +30 -0
- package/.agents/tests/fm-harness-liveness-drift-live-e2e.test.sh +151 -0
- package/.agents/tests/fm-herdr-lab.test.sh +243 -0
- package/.agents/tests/fm-herdr-session-cleanup-e2e.test.sh +146 -0
- package/.agents/tests/fm-herdr-session-cleanup.test.sh +329 -0
- package/.agents/tests/fm-herdr-submit-confirm-live-e2e.test.sh +125 -0
- package/.agents/tests/fm-herdr-version-floor-live-e2e.test.sh +144 -0
- package/.agents/tests/fm-home-summary-refresh.test.sh +971 -0
- package/.agents/tests/fm-inactive-reconcile.test.sh +485 -0
- package/.agents/tests/fm-kimi-harness.test.sh +687 -0
- package/.agents/tests/fm-lint-workflows.test.sh +532 -0
- package/.agents/tests/fm-lint.test.sh +1023 -0
- package/.agents/tests/fm-muse-harness.test.sh +932 -0
- package/.agents/tests/fm-muse-signals-live-e2e.test.sh +205 -0
- package/.agents/tests/fm-no-mistakes-required.test.sh +72 -0
- package/.agents/tests/fm-on.test.sh +507 -0
- package/.agents/tests/fm-opencode-primary-live-e2e.test.sh +357 -0
- package/.agents/tests/fm-operational-input.test.sh +160 -0
- package/.agents/tests/fm-peek-remote.test.sh +110 -0
- package/.agents/tests/fm-pending-reply.test.sh +1288 -0
- package/.agents/tests/fm-pi-branch-extension.test.sh +3182 -0
- package/.agents/tests/fm-pi-branch-live-e2e.test.sh +527 -0
- package/.agents/tests/fm-pi-primary-live-e2e.test.sh +345 -0
- package/.agents/tests/fm-pi-primary-types.test.sh +68 -0
- package/.agents/tests/fm-pi-watch-extension.test.sh +2843 -0
- package/.agents/tests/fm-pr-check-security.test.sh +2140 -0
- package/.agents/tests/fm-pr-merge.test.sh +2135 -0
- package/.agents/tests/fm-procevent-quota.test.sh +225 -0
- package/.agents/tests/fm-procevent-when.test.sh +406 -0
- package/.agents/tests/fm-procevent.test.sh +1745 -0
- package/.agents/tests/fm-project-origin.test.sh +110 -0
- package/.agents/tests/fm-public-followup.test.sh +2272 -0
- package/.agents/tests/fm-quota-array-dispatch-live-e2e.test.sh +526 -0
- package/.agents/tests/fm-quota-choose.test.sh +626 -0
- package/.agents/tests/fm-remote-backlog-handoff.test.sh +453 -0
- package/.agents/tests/fm-remote-doctor.test.sh +625 -0
- package/.agents/tests/fm-remote-entrypoint.test.sh +59 -0
- package/.agents/tests/fm-remote-job-orphan-reap.test.sh +205 -0
- package/.agents/tests/fm-remote-job.test.sh +768 -0
- package/.agents/tests/fm-remote-reply.test.sh +520 -0
- package/.agents/tests/fm-remote-secondmate-lifecycle-e2e.test.sh +1256 -0
- package/.agents/tests/fm-remote-secondmate-parent-binding.test.sh +326 -0
- package/.agents/tests/fm-remote-secondmate-trace-context.test.sh +310 -0
- package/.agents/tests/fm-remote-transport-lanes.test.sh +431 -0
- package/.agents/tests/fm-review-diff.test.sh +176 -0
- package/.agents/tests/fm-secondmate-harness.test.sh +2600 -0
- package/.agents/tests/fm-secondmate-lifecycle-e2e.test.sh +259 -0
- package/.agents/tests/fm-secondmate-liveness.test.sh +559 -0
- package/.agents/tests/fm-secondmate-reconcile.test.sh +732 -0
- package/.agents/tests/fm-secondmate-safety.test.sh +2972 -0
- package/.agents/tests/fm-secondmate-sync.test.sh +913 -0
- package/.agents/tests/fm-send-inbox-doorbell-live-e2e.test.sh +206 -0
- package/.agents/tests/fm-send-inbox.test.sh +352 -0
- package/.agents/tests/fm-send-popup-settle.test.sh +167 -0
- package/.agents/tests/fm-send-remote-delivery.test.sh +796 -0
- package/.agents/tests/fm-send-resolve-key.test.sh +551 -0
- package/.agents/tests/fm-send-secondmate-marker-herdr-e2e.test.sh +187 -0
- package/.agents/tests/fm-send-secondmate-marker.test.sh +278 -0
- package/.agents/tests/fm-send-settle.test.sh +147 -0
- package/.agents/tests/fm-send-strict.test.sh +241 -0
- package/.agents/tests/fm-session-lock-ancestry.test.sh +365 -0
- package/.agents/tests/fm-session-start.test.sh +2515 -0
- package/.agents/tests/fm-sessionstart-hook-live-e2e.test.sh +631 -0
- package/.agents/tests/fm-sessionstart-instruction-refresh-live-e2e.test.sh +230 -0
- package/.agents/tests/fm-sessionstart-nudge.test.sh +1039 -0
- package/.agents/tests/fm-shared-captain-inheritance.test.sh +404 -0
- package/.agents/tests/fm-spawn-batch.test.sh +148 -0
- package/.agents/tests/fm-spawn-dispatch-profile.test.sh +827 -0
- package/.agents/tests/fm-spawn-pool-base-freshen.test.sh +440 -0
- package/.agents/tests/fm-spawn-worktree-settle.test.sh +147 -0
- package/.agents/tests/fm-startup-memory-budget.test.sh +333 -0
- package/.agents/tests/fm-startup-network.test.sh +712 -0
- package/.agents/tests/fm-stow-cascade.test.sh +370 -0
- package/.agents/tests/fm-subagent-pretool-check.test.sh +291 -0
- package/.agents/tests/fm-supervision-events.test.sh +156 -0
- package/.agents/tests/fm-supervision-instructions.test.sh +189 -0
- package/.agents/tests/fm-tangle-guard.test.sh +277 -0
- package/.agents/tests/fm-task-delivery.test.sh +420 -0
- package/.agents/tests/fm-task-inbox.test.sh +513 -0
- package/.agents/tests/fm-teardown-endpoint-safety.test.sh +374 -0
- package/.agents/tests/fm-teardown.test.sh +2665 -0
- package/.agents/tests/fm-test-fixture-cleanup.test.sh +172 -0
- package/.agents/tests/fm-test-fixtures.test.sh +132 -0
- package/.agents/tests/fm-test-isolation-proof.test.sh +278 -0
- package/.agents/tests/fm-test-run.test.sh +1196 -0
- package/.agents/tests/fm-tmux-agent-liveness.test.sh +354 -0
- package/.agents/tests/fm-tmux-submit-busy.test.sh +340 -0
- package/.agents/tests/fm-tool-update-check.test.sh +1044 -0
- package/.agents/tests/fm-trace-context-lib.test.sh +253 -0
- package/.agents/tests/fm-trace-context-spawn.test.sh +581 -0
- package/.agents/tests/fm-transition-lib.test.sh +54 -0
- package/.agents/tests/fm-turnend-guard.test.sh +1822 -0
- package/.agents/tests/fm-update.test.sh +304 -0
- package/.agents/tests/fm-vendor-auth-probe.test.sh +395 -0
- package/.agents/tests/fm-voice-relay.test.sh +4741 -0
- package/.agents/tests/fm-wake-daemon-lifecycle-e2e.test.sh +171 -0
- package/.agents/tests/fm-wake-drain-open-decisions-cursor.test.sh +356 -0
- package/.agents/tests/fm-wake-drain-open-decisions.test.sh +226 -0
- package/.agents/tests/fm-wake-drain-unread-status.test.sh +379 -0
- package/.agents/tests/fm-wake-queue.test.sh +1224 -0
- package/.agents/tests/fm-watch-arm.test.sh +821 -0
- package/.agents/tests/fm-watch-checkpoint.test.sh +87 -0
- package/.agents/tests/fm-watch-recovery-loop.test.sh +223 -0
- package/.agents/tests/fm-watch-triage.test.sh +3889 -0
- package/.agents/tests/fm-watcher-lock.test.sh +1133 -0
- package/.agents/tests/fm-x-mode.test.sh +3042 -0
- package/.agents/tests/gleipnir-guard-pretool-check.test.sh +51 -0
- package/.agents/tests/gleipnir-machine-lock.test.sh +130 -0
- package/.agents/tests/herdr-test-safety.sh +42 -0
- package/.agents/tests/lib.sh +315 -0
- package/.agents/tests/remote-herdr-fixture.sh +125 -0
- package/.agents/tests/secondmate-helpers.sh +193 -0
- package/.agents/tests/smoke.test.sh +93 -0
- package/.agents/tests/wake-helpers.sh +338 -0
- package/.agents/tests/zellij-test-safety.sh +60 -0
- package/.agents/tools/README.md +10 -0
- package/.agents/tools/bin/tasks-cli +267 -0
- package/.agents/tools/tasks-cli.ts +216 -0
- package/AGENTS.md +498 -0
- package/CHANGELOG.md +1913 -0
- package/LICENSE +1 -1
- package/NOTICE +63 -0
- package/README.md +114 -60
- package/RULES/01-domains.md +51 -0
- package/RULES/02-agents.md +78 -0
- package/RULES/03-houses.md +61 -0
- package/RULES/04-hoard.md +97 -0
- package/RULES/05-platforms.md +67 -0
- package/RULES/06-append-only.md +108 -0
- package/RULES/07-config.md +101 -0
- package/RULES/08-delivery-gate.md +75 -0
- package/RULES/09-electron.md +58 -0
- package/RULES/README.md +22 -0
- package/bin/README.md +107 -0
- package/bin/a2a-mcp.sh +133 -0
- package/bin/a2a-serve.py +103 -0
- package/bin/a2a-serve.sh +8 -0
- package/bin/a2a-talk.sh +50 -0
- package/bin/a2abridge-ensure.sh +108 -0
- package/bin/agent-run.sh +43 -0
- package/bin/agents-config.sh +256 -0
- package/bin/apodex-smoke-test.sh +105 -0
- package/bin/bifrost-bridge.sh +131 -0
- package/bin/bifrost-ingress.sh +77 -0
- package/bin/bootstrap-macos.sh +112 -0
- package/bin/bootstrap-windows.ps1 +112 -0
- package/bin/branch-guard.sh +64 -0
- package/bin/brokk +73 -0
- package/bin/brokk-classify-lib.sh +1770 -0
- package/bin/brokk-lease-lib.sh +222 -0
- package/bin/brokk-lease.sh +193 -0
- package/bin/brokk-lint.sh +65 -0
- package/bin/brokk-send.sh +51 -0
- package/bin/brokk-update.sh +9 -0
- package/bin/brokk-wake-grant.sh +127 -0
- package/bin/brokk-wake-lib.sh +1849 -0
- package/bin/changelog-assemble.sh +154 -0
- package/bin/changelog-guard.sh +197 -0
- package/bin/crash-sense.sh +173 -0
- package/bin/design-check.sh +80 -0
- package/bin/design-icon.sh +153 -0
- package/bin/desktop-place.sh +224 -0
- package/bin/docs-guard.sh +39 -0
- package/bin/editor-place.sh +225 -0
- package/bin/eindri-acclaim.sh +47 -0
- package/bin/eindri-control.sh +28 -0
- package/bin/eindri-role.sh +83 -0
- package/bin/eindri-seat.sh +83 -0
- package/bin/eindri-seen.sh +54 -0
- package/bin/eindri-send.sh +15 -0
- package/bin/eindri-start.sh +98 -0
- package/bin/eindri-watch.sh +57 -0
- package/bin/einherjar-spawn.sh +576 -0
- package/bin/eir-doctor.sh +158 -0
- package/bin/erindi-brief.sh +271 -0
- package/bin/feature-inventory.sh +73 -0
- package/bin/fleet-apply.sh +81 -0
- package/bin/github-deploy.sh +94 -0
- package/bin/gjallarhorn-expose.sh +136 -0
- package/bin/gjallarhorn-notify.sh +71 -0
- package/bin/gjallarhorn-purge.sh +67 -0
- package/bin/gjallarhorn-tunnel.sh +85 -0
- package/bin/gleipnir-lock-lib.sh +284 -0
- package/bin/groa-update.sh +130 -0
- package/bin/hall-snapshot.sh +111 -0
- package/bin/hamr-harness.sh +246 -0
- package/bin/heimdall-ssh-keys.sh +374 -0
- package/bin/herdr-agents.py +44 -0
- package/bin/herdr-ensure.sh +104 -0
- package/bin/herdr-run.sh +452 -0
- package/bin/hermes-ensure.sh +88 -0
- package/bin/hlidskjalf-agents.sh +172 -0
- package/bin/hlidskjalf-usage.sh +196 -0
- package/bin/hoard-guard.sh +135 -0
- package/bin/hoard-lib.sh +105 -0
- package/bin/hodd.sh +102 -0
- package/bin/host-sense.sh +199 -0
- package/bin/huginn-research-worker.sh +121 -0
- package/bin/local-model-lock.sh +70 -0
- package/bin/mimir-bridge.py +259 -0
- package/bin/mimir-bridge.sh +100 -0
- package/bin/mimir-ingest.sh +131 -0
- package/bin/mimir-reflect.sh +27 -0
- package/bin/mimir.sh +113 -0
- package/bin/mjollnir-webhook.sh +72 -0
- package/bin/mjollnir.sh +104 -0
- package/bin/model-hardware.sh +96 -0
- package/bin/model-resolve.sh +160 -0
- package/bin/models-detect.sh +178 -0
- package/bin/nornir-cron-start.sh +162 -0
- package/bin/nornir-job-daily-briefing.sh +191 -0
- package/bin/nornir-job-git-sync.sh +152 -0
- package/bin/nornir-job-hall-snapshot.sh +28 -0
- package/bin/nornir-job-memory-housekeeping.sh +114 -0
- package/bin/nornir-job-nsr-compliance.sh +54 -0
- package/bin/nornir-job-observer.sh +166 -0
- package/bin/nornir-job-skillopt-sleep.sh +76 -0
- package/bin/npm-publish.sh +136 -0
- package/bin/omarchy-hook-install.sh +60 -0
- package/bin/omarchy-install.sh +161 -0
- package/bin/omarchy-plugins.sh +187 -0
- package/bin/omarchy-sense.sh +162 -0
- package/bin/perm-guard.sh +30 -0
- package/bin/pi-agent.sh +68 -0
- package/bin/pi-ensure.sh +77 -0
- package/bin/pi-local.sh +37 -0
- package/bin/pi-model-agnostic.sh +71 -0
- package/bin/pi-seat.sh +63 -0
- package/bin/prereq-ensure.sh +166 -0
- package/bin/private-guard.sh +58 -0
- package/bin/project-git.sh +69 -0
- package/bin/public-guard.sh +71 -0
- package/bin/ratatoskr.sh +49 -0
- package/bin/realm-lib.sh +32 -0
- package/bin/repo-scrub.sh +62 -0
- package/bin/rodd-operational-input.sh +250 -0
- package/bin/runes-append.sh +198 -0
- package/bin/saga-session-start.sh +172 -0
- package/bin/saga-sessionstart-run.sh +79 -0
- package/bin/saga-wake-drain.sh +41 -0
- package/bin/secret-guard.sh +63 -0
- package/bin/sessrumnir-ensure.sh +100 -0
- package/bin/sessrumnir-sync.sh +237 -0
- package/bin/sessrumnir.sh +104 -0
- package/bin/skillopt-setup.sh +76 -0
- package/bin/skuld-branch-outcome.sh +203 -0
- package/bin/skuld-branch-prompt.sh +101 -0
- package/bin/smidja-bootstrap.sh +94 -0
- package/bin/smidja-observe.sh +86 -0
- package/bin/syn-arm-pretool-check.sh +57 -0
- package/bin/syn-asset-pretool-check.sh +89 -0
- package/bin/syn-cd-pretool-check.sh +28 -0
- package/bin/syn-guard-pretool-check.sh +83 -0
- package/bin/syn-spawn-pretool-check.sh +58 -0
- package/bin/syn-turnend-guard.sh +36 -0
- package/bin/syn-watch-arm.sh +99 -0
- package/bin/tailscale-sync.sh +203 -0
- package/bin/telegram-bot.sh +82 -0
- package/bin/toolchain.sh +74 -0
- package/bin/ui-truth-check.sh +75 -0
- package/bin/utgard.sh +111 -0
- package/bin/valhalla.sh +115 -0
- package/bin/valknut-load.sh +298 -0
- package/bin/vor-crew-state.sh +124 -0
- package/bin/wedge-notify.sh +60 -0
- package/bin/workspace-provision.sh +80 -0
- package/bin/workspace-rag.sh +163 -0
- package/bin/wyrd-db.sh +47 -0
- package/bin/yggdrasil.sh +152 -0
- package/bin/ymir-edit.sh +145 -0
- package/bin/ymir-install.sh +806 -0
- package/bin/ymir-invite.sh +93 -0
- package/bin/ymir-isolation.sh +88 -0
- package/bin/ymir-migrate.sh +61 -0
- package/bin/ymir-plan.sh +356 -0
- package/bin/ymir-platform.sh +348 -0
- package/bin/ymir-say.sh +110 -0
- package/bin/ymir-setup-auth.sh +119 -0
- package/bin/ymir-validate.sh +193 -0
- package/bin/ymir.js +74 -16
- package/docs/Architecture.md +339 -0
- package/docs/design.md +351 -0
- package/docs/installations/README.md +63 -0
- package/docs/installations/ymir-home.md +93 -0
- package/docs/integration.md +105 -0
- package/docs/lore.md +1060 -0
- package/docs/research/agent-harnesses.md +290 -0
- package/docs/runbooks/README.md +19 -0
- package/docs/runbooks/a2a.md +91 -0
- package/docs/runbooks/agent-permissions.md +99 -0
- package/docs/runbooks/agents.md +57 -0
- package/docs/runbooks/models.md +69 -0
- package/docs/runbooks/realm-onboarding.md +60 -0
- package/docs/runbooks/secrets-and-hoard.md +60 -0
- package/docs/runbooks/updates-and-migrations.md +110 -0
- package/docs/runbooks/worktrees-isolation.md +72 -0
- package/docs/session-start.md +105 -0
- package/docs/skillopt-integration.md +321 -0
- package/docs/sync-system.md +66 -0
- package/docs/workspaces.md +104 -0
- package/docs/ymir-rut.md +260 -0
- package/package.json +54 -14
- package/packaging/build.sh +74 -0
- package/packaging/macos/Ymir Installer.command +43 -0
- package/packaging/windows/ymir-setup.nsi +74 -0
- package/scripts/README.md +22 -0
- package/scripts/electron.sh +269 -0
- package/scripts/lower.sh +34 -0
- package/scripts/raise.sh +42 -0
- package/scripts/start.sh +217 -0
- package/scripts/stop.sh +113 -0
- package/install.sh +0 -35
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# ymir-validate.sh — verify the installation actually works.
|
|
3
|
+
#
|
|
4
|
+
# The installer reports what it did; this proves it. Every check is an
|
|
5
|
+
# observation of the running system (a live port, a readable store, a running
|
|
6
|
+
# process), never a restatement of intent. A FAIL means the install is not
|
|
7
|
+
# usable; a WARN means a documented-optional part is off.
|
|
8
|
+
#
|
|
9
|
+
# Usage:
|
|
10
|
+
# bin/ymir-validate.sh [--json] [--quiet]
|
|
11
|
+
# bin/ymir-validate.sh --version
|
|
12
|
+
#
|
|
13
|
+
# Exit: 0 all required checks pass, 1 a required check failed, 2 usage.
|
|
14
|
+
set -u
|
|
15
|
+
|
|
16
|
+
VERSION="1.0.0"
|
|
17
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
18
|
+
ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
19
|
+
# shellcheck source=bin/ymir-platform.sh
|
|
20
|
+
. "$SCRIPT_DIR/ymir-platform.sh"
|
|
21
|
+
# Docker or rootless Podman (Fedora), whichever is present.
|
|
22
|
+
CONTAINER_ENGINE="$(ymir_container_engine_name 2>/dev/null || true)"
|
|
23
|
+
JSON=0; QUIET=0
|
|
24
|
+
|
|
25
|
+
case "${1-}" in
|
|
26
|
+
-v|-V|--version) printf '%s\n' "$VERSION"; exit 0 ;;
|
|
27
|
+
-h|--help) sed -n '2,14p' "$0" | sed 's/^# \{0,1\}//'; exit 0 ;;
|
|
28
|
+
esac
|
|
29
|
+
while [ $# -gt 0 ]; do
|
|
30
|
+
case "$1" in
|
|
31
|
+
--json) JSON=1; shift ;;
|
|
32
|
+
--quiet) QUIET=1; shift ;;
|
|
33
|
+
*) printf 'error: unknown flag %s\nhelp: bin/ymir-validate.sh [--json|--quiet]\n' "$1" >&2; exit 2 ;;
|
|
34
|
+
esac
|
|
35
|
+
done
|
|
36
|
+
|
|
37
|
+
declare -a IDS STATES DETAILS
|
|
38
|
+
add() { IDS+=("$1"); STATES+=("$2"); DETAILS+=("$3"); }
|
|
39
|
+
say() { [ "$QUIET" = 1 ] || printf '%s\n' "$1"; }
|
|
40
|
+
|
|
41
|
+
http_code() { # <url> -> status code, or 000
|
|
42
|
+
curl -s -o /dev/null -w '%{http_code}' --max-time 5 "$1" 2>/dev/null || printf '000'
|
|
43
|
+
}
|
|
44
|
+
port_open() { (exec 3<>"/dev/tcp/127.0.0.1/$1") 2>/dev/null; }
|
|
45
|
+
|
|
46
|
+
# ── 1. prerequisites present ────────────────────────────────────────────────
|
|
47
|
+
miss=""
|
|
48
|
+
for c in git python3 bun gh; do command -v "$c" >/dev/null 2>&1 || miss="$miss $c"; done
|
|
49
|
+
[ -n "$CONTAINER_ENGINE" ] || miss="$miss docker/podman"
|
|
50
|
+
if [ -z "$miss" ]; then add prereqs PASS "git python3 bun $CONTAINER_ENGINE gh present"
|
|
51
|
+
else add prereqs FAIL "missing:$miss"; fi
|
|
52
|
+
|
|
53
|
+
# ── 2. Utgard sandbox image ─────────────────────────────────────────────────
|
|
54
|
+
if [ -z "$CONTAINER_ENGINE" ]; then
|
|
55
|
+
add sandbox WARN "no container engine (docker/podman) — sandbox unavailable"
|
|
56
|
+
elif "$CONTAINER_ENGINE" image inspect utgard-runner:latest >/dev/null 2>&1; then
|
|
57
|
+
add sandbox PASS "utgard-runner:latest present ($CONTAINER_ENGINE)"
|
|
58
|
+
elif ! "$CONTAINER_ENGINE" info >/dev/null 2>&1; then
|
|
59
|
+
add sandbox WARN "$CONTAINER_ENGINE not reachable (rootless podman: check login session; docker: check group)"
|
|
60
|
+
else
|
|
61
|
+
add sandbox FAIL "utgard-runner:latest missing — run bin/utgard.sh build"
|
|
62
|
+
fi
|
|
63
|
+
|
|
64
|
+
# ── 3. the gate API (:3889) — the control plane's data face ─────────────────
|
|
65
|
+
code="$(http_code http://127.0.0.1:3889/api/health)"
|
|
66
|
+
case "$code" in
|
|
67
|
+
200) add gate-api PASS "GET /api/health -> 200" ;;
|
|
68
|
+
401) add gate-api PASS "GET /api/health -> 401 (up, auth enforced)" ;;
|
|
69
|
+
000) add gate-api FAIL "no response on :3889 — run scripts/start.sh" ;;
|
|
70
|
+
*) add gate-api WARN "unexpected status $code on :3889" ;;
|
|
71
|
+
esac
|
|
72
|
+
|
|
73
|
+
# ── 4. the SPA (:3888) ──────────────────────────────────────────────────────
|
|
74
|
+
code="$(http_code http://127.0.0.1:3888/)"
|
|
75
|
+
if [ "$code" = 200 ]; then add spa PASS "GET / -> 200"
|
|
76
|
+
else add spa FAIL "no 200 on :3888 (got $code) — run scripts/start.sh"; fi
|
|
77
|
+
|
|
78
|
+
# ── 5. Bifrost model bridge (:4603) — provider-aware, keyless-capable ───────
|
|
79
|
+
if port_open 4603; then
|
|
80
|
+
provider="$(curl -s --max-time 5 http://127.0.0.1:4603/v1/models 2>/dev/null | head -c 40)"
|
|
81
|
+
if [ -n "$provider" ]; then add bifrost PASS "bridge up on :4603 (models served)"
|
|
82
|
+
else add bifrost WARN "port 4603 open but /v1/models empty"; fi
|
|
83
|
+
else
|
|
84
|
+
add bifrost FAIL "bridge down on :4603 — run bin/bifrost-bridge.sh --start"
|
|
85
|
+
fi
|
|
86
|
+
|
|
87
|
+
# ── 6. Nornir cron running ──────────────────────────────────────────────────
|
|
88
|
+
# The scheduler's cmdline is `bash -c <body>` and carries no "nornir" token, so
|
|
89
|
+
# ask nornir-cron-start.sh itself (it owns the identity check) instead of pgrep.
|
|
90
|
+
if [ -x "$ROOT/bin/nornir-cron-start.sh" ]; then
|
|
91
|
+
cron_out="$("$ROOT/bin/nornir-cron-start.sh" 2>/dev/null || true)"
|
|
92
|
+
if printf '%s' "$cron_out" | grep -q 'cron: running'; then
|
|
93
|
+
add cron PASS "$(printf '%s' "$cron_out" | grep -m1 'cron: running')"
|
|
94
|
+
else
|
|
95
|
+
add cron FAIL "nornir cron not running — run bin/nornir-cron-start.sh"
|
|
96
|
+
fi
|
|
97
|
+
else
|
|
98
|
+
add cron SKIP "no nornir-cron-start.sh"
|
|
99
|
+
fi
|
|
100
|
+
|
|
101
|
+
# ── 7. smidja db (visualizer readiness) ─────────────────────────────────────
|
|
102
|
+
# The same pair scripts/start.sh and bin/smidja-bootstrap.sh resolve: an existing
|
|
103
|
+
# $YMIR_HOME/smidja/smidja.db first, then an in-repo copy.
|
|
104
|
+
YMIR_HOME="${YMIR_HOME:-$HOME/Documents/Ymir}"
|
|
105
|
+
SMIDJA_DB_PATH="${SMIDJA_DB:-}"
|
|
106
|
+
if [ -z "$SMIDJA_DB_PATH" ]; then
|
|
107
|
+
for c in "$YMIR_HOME/smidja/smidja.db" "$ROOT/apps/smidja/smidja_data/smidja.db"; do
|
|
108
|
+
[ -f "$c" ] && { SMIDJA_DB_PATH="$c"; break; }
|
|
109
|
+
done
|
|
110
|
+
SMIDJA_DB_PATH="${SMIDJA_DB_PATH:-$YMIR_HOME/smidja/smidja.db}"
|
|
111
|
+
fi
|
|
112
|
+
if [ -f "$SMIDJA_DB_PATH" ]; then
|
|
113
|
+
add smidja-db PASS "smidja.db present"
|
|
114
|
+
else
|
|
115
|
+
add smidja-db FAIL "smidja.db missing — run bin/smidja-bootstrap.sh"
|
|
116
|
+
fi
|
|
117
|
+
|
|
118
|
+
# ── 7b. visualizer (built ./dist AND its API actually listening) ────────────
|
|
119
|
+
# A PASS must mean the thing is UP. Probe the port, not just the build: a
|
|
120
|
+
# built-but-dead visualizer (a bad CMD_DB, a crashed API) is a FAIL, not green.
|
|
121
|
+
VIZ="$ROOT/.agents/skills/smidja-factory/apps/visualizer"
|
|
122
|
+
VIZ_PORT="${SMIDJA_VIZ_API_PORT:-8437}"
|
|
123
|
+
if [ ! -d "$VIZ" ]; then
|
|
124
|
+
add visualizer SKIP "no visualizer tree at $VIZ"
|
|
125
|
+
elif [ ! -d "$VIZ/dist" ]; then
|
|
126
|
+
add visualizer FAIL "UI not built (./dist missing) — (cd $VIZ && bun run build)"
|
|
127
|
+
elif port_open "$VIZ_PORT"; then
|
|
128
|
+
add visualizer PASS "UI built and served on :$VIZ_PORT"
|
|
129
|
+
else
|
|
130
|
+
add visualizer FAIL "UI built but no API listening on :$VIZ_PORT — run scripts/start.sh"
|
|
131
|
+
fi
|
|
132
|
+
|
|
133
|
+
# ── 8. desktop apps (both Electron windows) ─────────────────────────────────
|
|
134
|
+
if [ -x "$ROOT/scripts/electron.sh" ]; then
|
|
135
|
+
st="$("$ROOT/scripts/electron.sh" status 2>/dev/null || true)"
|
|
136
|
+
up_h=$(printf '%s' "$st" | grep -c '"hlidskjalf","up"' || true)
|
|
137
|
+
up_s=$(printf '%s' "$st" | grep -c '"smidja","up"' || true)
|
|
138
|
+
if [ "$up_h" = 1 ] && [ "$up_s" = 1 ]; then add desktop PASS "Hlidskjalf + Smíðja both up"
|
|
139
|
+
elif [ "$up_h" = 1 ] || [ "$up_s" = 1 ]; then add desktop WARN "one desktop app up (h=$up_h s=$up_s) — run scripts/electron.sh start --both"
|
|
140
|
+
else add desktop WARN "desktop apps not running — run scripts/electron.sh start --both"; fi
|
|
141
|
+
else
|
|
142
|
+
add desktop SKIP "no scripts/electron.sh"
|
|
143
|
+
fi
|
|
144
|
+
|
|
145
|
+
# ── 9. the memory well (:4602) — documented optional ────────────────────────
|
|
146
|
+
if port_open 4602; then add memory PASS "Mimir bridge up on :4602"
|
|
147
|
+
else add memory WARN "well off (:4602) — needs the engram engine; platform runs without it"; fi
|
|
148
|
+
|
|
149
|
+
# ── 10. audit ledger intact ─────────────────────────────────────────────────
|
|
150
|
+
RUNES_LEDGER=""
|
|
151
|
+
# The ledger follows the hoard (Rule 06): 0004-hoard-and-realms moved it under
|
|
152
|
+
# hodd/memory/. Try the hoard first, then the pre-move locations.
|
|
153
|
+
for c in "${YMIR_HOME:+${YMIR_HOARD:-$YMIR_HOME/hodd}/memory/runes_audit.md}" \
|
|
154
|
+
"${YMIR_HOME:+$YMIR_HOME/memory/runes_audit.md}" \
|
|
155
|
+
"$ROOT/workspace/memory/runes_audit.md"; do
|
|
156
|
+
[ -n "$c" ] && [ -r "$c" ] && { RUNES_LEDGER="$c"; break; }
|
|
157
|
+
done
|
|
158
|
+
if [ -r "$RUNES_LEDGER" ]; then
|
|
159
|
+
add runes PASS "audit ledger readable ($(wc -l <"$RUNES_LEDGER" | tr -d ' ') lines)"
|
|
160
|
+
else
|
|
161
|
+
add runes FAIL "audit ledger unreadable"
|
|
162
|
+
fi
|
|
163
|
+
|
|
164
|
+
# ── output ──────────────────────────────────────────────────────────────────
|
|
165
|
+
fails=0; warns=0
|
|
166
|
+
for s in "${STATES[@]}"; do
|
|
167
|
+
[ "$s" = FAIL ] && fails=$((fails + 1))
|
|
168
|
+
[ "$s" = WARN ] && warns=$((warns + 1))
|
|
169
|
+
done
|
|
170
|
+
|
|
171
|
+
if [ "$JSON" = 1 ]; then
|
|
172
|
+
printf '{\n "checks": [\n'
|
|
173
|
+
first=1
|
|
174
|
+
for i in "${!IDS[@]}"; do
|
|
175
|
+
[ $first = 0 ] && printf ',\n'
|
|
176
|
+
first=0
|
|
177
|
+
printf ' {"id":"%s","status":"%s","detail":"%s"}' "${IDS[$i]}" "${STATES[$i]}" "${DETAILS[$i]}"
|
|
178
|
+
done
|
|
179
|
+
printf '\n ],\n "fails": %d,\n "warns": %d\n}\n' "$fails" "$warns"
|
|
180
|
+
else
|
|
181
|
+
say "validate[${#IDS[@]}]{check,status,detail}:"
|
|
182
|
+
for i in "${!IDS[@]}"; do
|
|
183
|
+
say " \"${IDS[$i]}\",\"${STATES[$i]}\",\"${DETAILS[$i]}\""
|
|
184
|
+
done
|
|
185
|
+
fi
|
|
186
|
+
|
|
187
|
+
if [ "$fails" -gt 0 ]; then
|
|
188
|
+
[ "$QUIET" = 1 ] || printf '\n%s required check(s) failed — the install is not fully usable\n' "$fails"
|
|
189
|
+
printf 'help: %s required check(s) failed, %s warning(s)\n' "$fails" "$warns" >&2
|
|
190
|
+
exit 1
|
|
191
|
+
fi
|
|
192
|
+
[ "$QUIET" = 1 ] || printf '\nall required checks pass (%s warning(s))\n' "$warns"
|
|
193
|
+
exit 0
|
package/bin/ymir.js
CHANGED
|
@@ -1,20 +1,78 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
2
|
+
/**
|
|
3
|
+
* ymir — the CLI the npm package publishes.
|
|
4
|
+
*
|
|
5
|
+
* It is a thin, honest wrapper: the real work lives in the shell scripts under
|
|
6
|
+
* bin/, which are the same scripts a git clone runs. This file exists because
|
|
7
|
+
* npm needs a Node entry point (`bin: ymir`) and because a package user should
|
|
8
|
+
* not have to know where the checkout landed.
|
|
9
|
+
*
|
|
10
|
+
* ymir # the same as `ymir install`
|
|
11
|
+
* ymir install [--yes] # first setup (idempotent, self-healing)
|
|
12
|
+
* ymir sense # what THIS machine is
|
|
13
|
+
* ymir validate # prove what stands
|
|
14
|
+
* ymir migrate # heal an older home forward
|
|
15
|
+
* ymir --version
|
|
16
|
+
*
|
|
17
|
+
* Exit codes follow the scripts: 0 ok, 1 error, 2 usage.
|
|
18
|
+
*/
|
|
19
|
+
'use strict';
|
|
20
|
+
|
|
21
|
+
const { spawnSync } = require('node:child_process');
|
|
22
|
+
const path = require('node:path');
|
|
23
|
+
const fs = require('node:fs');
|
|
24
|
+
|
|
25
|
+
const ROOT = path.resolve(__dirname, '..');
|
|
26
|
+
const pkg = (() => {
|
|
27
|
+
try { return require(path.join(ROOT, 'package.json')); } catch { return { version: '0.0.0' }; }
|
|
28
|
+
})();
|
|
29
|
+
|
|
30
|
+
const TASKS = {
|
|
31
|
+
install: 'ymir-install.sh',
|
|
32
|
+
validate: 'ymir-validate.sh',
|
|
33
|
+
migrate: 'ymir-migrate.sh',
|
|
34
|
+
sense: 'host-sense.sh',
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
function usage() {
|
|
38
|
+
process.stdout.write(
|
|
39
|
+
`ymir ${pkg.version} — the single-tenant agent operating system\n\n` +
|
|
40
|
+
'Usage:\n' +
|
|
41
|
+
' ymir first setup (same as `ymir install`)\n' +
|
|
42
|
+
' ymir install [--yes] first setup, idempotent and self-healing\n' +
|
|
43
|
+
' ymir sense report THIS machine (distro, session, desktop, capabilities)\n' +
|
|
44
|
+
' ymir validate verify the running system\n' +
|
|
45
|
+
' ymir migrate heal an older home forward\n' +
|
|
46
|
+
' ymir --version\n\n' +
|
|
47
|
+
'Output is TOON. The scripts are the source of truth; this CLI only points at them.\n'
|
|
48
|
+
);
|
|
14
49
|
}
|
|
15
50
|
|
|
16
|
-
|
|
17
|
-
|
|
51
|
+
function run(script, args) {
|
|
52
|
+
const file = path.join(ROOT, 'bin', script);
|
|
53
|
+
if (!fs.existsSync(file)) {
|
|
54
|
+
process.stderr.write(`error: ${path.relative(ROOT, file)} is missing from this install\n`);
|
|
55
|
+
process.stderr.write('help: reinstall — npm i -g @zerwiz/ymir, or git clone the distro\n');
|
|
56
|
+
process.exit(1);
|
|
57
|
+
}
|
|
58
|
+
const r = spawnSync('bash', [file, ...args], { stdio: 'inherit' });
|
|
59
|
+
process.exit(r.status === null ? 1 : r.status);
|
|
60
|
+
}
|
|
18
61
|
|
|
19
|
-
const
|
|
20
|
-
|
|
62
|
+
const argv = process.argv.slice(2);
|
|
63
|
+
const first = argv[0];
|
|
64
|
+
|
|
65
|
+
if (!first) run(TASKS.install, []);
|
|
66
|
+
if (first === '--version' || first === '-v' || first === '-V') {
|
|
67
|
+
process.stdout.write(`${pkg.version}\n`);
|
|
68
|
+
process.exit(0);
|
|
69
|
+
}
|
|
70
|
+
if (first === '--help' || first === '-h' || first === 'help') { usage(); process.exit(0); }
|
|
71
|
+
|
|
72
|
+
const script = TASKS[first];
|
|
73
|
+
if (!script) {
|
|
74
|
+
process.stderr.write(`error: unknown command ${first}\n`);
|
|
75
|
+
process.stderr.write('help: ymir [install|sense|validate|migrate|--version]\n');
|
|
76
|
+
process.exit(2);
|
|
77
|
+
}
|
|
78
|
+
run(script, argv.slice(1));
|
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
# YMIR — Master Architecture
|
|
2
|
+
|
|
3
|
+
Status: **DRAFT v0.2** — consolidates `Ymir.md`, the Ymir Rut v2.6 target spec
|
|
4
|
+
(`docs/ymir-rut.md`), the A2A collaboration doctrine (ENTRY-008), the engram
|
|
5
|
+
memory engine (ENTRY-007), the house system (ENTRY-004), and the OSS-first
|
|
6
|
+
stack ruling (ENTRY-009/010).
|
|
7
|
+
|
|
8
|
+
> **Stack ruling (today):** **TypeScript + Python + React + Vue** — the agent-proficient
|
|
9
|
+
> stack, so agents can run and extend the whole platform. Rust/Cargo, NATS, Envoy,
|
|
10
|
+
> and Protobuf are the **Ymir Rut v2.6 target** and are ported to *after* the system
|
|
11
|
+
> works end-to-end. Every service below maps one-for-one to a future Rut crate
|
|
12
|
+
> (see **§6** and `docs/ymir-rut.md`).
|
|
13
|
+
|
|
14
|
+
## 1. What Ymir Is
|
|
15
|
+
|
|
16
|
+
Ymir is a lean, single-operator agentic operating system. One person runs an entire
|
|
17
|
+
**business, software development, marketing, and personal life** from a single
|
|
18
|
+
repository, orchestrated by autonomous Norse-named agents.
|
|
19
|
+
|
|
20
|
+
- **Local-first** — everything runs on your machine or your VPS via Docker Compose.
|
|
21
|
+
- **Mythos-first** — names are load-bearing allegory, not decoration (`docs/lore.md`):
|
|
22
|
+
the giant (Ymir), the smiths (Brokk/Eindri), the well (Mimirsbrunn), the houses.
|
|
23
|
+
- **OSS-first** — for every feature below the runtime, adopt a **validated open-source
|
|
24
|
+
project** first; Ymir owns only the **UI/UX (Hlidskjalf)**, the **agent runtime**
|
|
25
|
+
(Brokk/Eindri/Kaia), and **A2A collaboration** (Ratatoskr).
|
|
26
|
+
- **Self-aware** — `AGENTS.md` in the root governs every agent's behavior.
|
|
27
|
+
- **Isolated-by-default** — sub-agent code executes in ephemeral containers (Utgard)
|
|
28
|
+
on isolated git worktrees (Yggdrasil).
|
|
29
|
+
- **Memory-native** — every action is *observed* into Mimirsbrunn (engram) and
|
|
30
|
+
*carved* into Runes; agents recall before they act.
|
|
31
|
+
- **Autonomous** — cron jobs, GitHub webhooks, and an A2A message backbone keep
|
|
32
|
+
agents working while you're away.
|
|
33
|
+
- **Multi-tenant** — every realm (client/brand/division) gets fully isolated memory,
|
|
34
|
+
secrets, and projects.
|
|
35
|
+
|
|
36
|
+
## 2. System Topology (7 realms / modules)
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
┌─────────────────────────────────────┐
|
|
40
|
+
│ USER INTERFACES │ React · Vue
|
|
41
|
+
│ Telegram │ Web Portal (Hlidskjalf)│
|
|
42
|
+
└──────────────┬──────────────────────┘
|
|
43
|
+
│ HTTPS / WebSockets
|
|
44
|
+
┌──────────────▼──────────────────────┐
|
|
45
|
+
│ GJALLARHORN (Tunnel) │
|
|
46
|
+
│ cloudflared outbound │
|
|
47
|
+
└──────────────┬──────────────────────┘
|
|
48
|
+
▼
|
|
49
|
+
┌──────────────────────────────────────┐
|
|
50
|
+
│ BIFROST (Gateway / Reverse Proxy) │ Traefik/Caddy + Heimdall
|
|
51
|
+
│ + HEIMDALL (OAuth · signed cards) │
|
|
52
|
+
└──────────────┬──────────────────────┘
|
|
53
|
+
▼
|
|
54
|
+
┌───────────────────────────────────────────────────────────────────────┐
|
|
55
|
+
│ YMIR CORE (TS/Python) │
|
|
56
|
+
│ │
|
|
57
|
+
│ ┌──────────────┐ ┌────────────────┐ ┌────────────────────────┐ │
|
|
58
|
+
│ │ AGENTS.md ├──►│ Brokk/Kaia ├──►│ GUNGNIR Skill Engine │ │
|
|
59
|
+
│ │ (Root Laws) │ │ Orchestrator │ │ (Validated skills) │ │
|
|
60
|
+
│ └──────────────┘ └───────┬────────┘ └────────────────────────┘ │
|
|
61
|
+
│ │ A2A 1.0 dispatch (delegation) │
|
|
62
|
+
│ ┌──────────┬───────────────┼──────────┬──────────────────────┐ │
|
|
63
|
+
│ ▼ ▼ ▼ ▼ ▼ │
|
|
64
|
+
┌──────────┐┌──────────┐ ┌───────────┐┌───────────┐ ┌──────────┐│
|
|
65
|
+
│MIMIRSBRUNN│ RATATOSKR│ │ YGGDRASIL ││ UTGARD │ │ MJOLLNIR ││
|
|
66
|
+
│ engram │ A2A 1.0 │ │ git ││ Docker │ │ Issue→PR ││
|
|
67
|
+
│ bridge │ + Redis │ │ worktrees ││ sandbox │ │ pipeline ││
|
|
68
|
+
└──────────┘└──────────┘ └───────────┘└───────────┘ └──────────┘│
|
|
69
|
+
└───────────────────────────────────────────────────────────────────────┘
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
- **Svartalfaheim** holds the realms (one directory per tenant) and per-tenant
|
|
73
|
+
A2A discovery; **Midgard** is the shared cross-tenant space; **Runes** is the
|
|
74
|
+
immutable ledger; **Valhalla** supervises the processes.
|
|
75
|
+
|
|
76
|
+
## 3. Core Subsystems
|
|
77
|
+
|
|
78
|
+
### 3.1 Agent Runtime — Brokk, Eindri & Kaia
|
|
79
|
+
- **Brokk** is the primary autonomous agent — single-operator executive partner
|
|
80
|
+
(Development, Marketing, Business Strategy, Life Execution).
|
|
81
|
+
- **Eindri** workers are isolated sub-agents spawned for delegated tasks, always
|
|
82
|
+
inside Utgard sandboxes on Yggdrasil worktrees.
|
|
83
|
+
- **Kaia** is the orchestrator + the oracle by the Well: she recalls Mimirsbrunn
|
|
84
|
+
before dispatch, honours the anti-hallucination gate, and dispatches specialists
|
|
85
|
+
as **A2A tasks** (SSE streaming); specialists reach tools via **MCP**.
|
|
86
|
+
- Realm personae in `svartalfaheim/<realm>/Brokk.md`.
|
|
87
|
+
|
|
88
|
+
### 3.2 Memory — Mimirsbrunn (engram engine) + Runes
|
|
89
|
+
Adopted from Kaia's proven smidja memory (ENTRY-007): the well is **engram**
|
|
90
|
+
(`engdbram`, open source — single-file SQLite + sqlite-vec + FTS5 + local embeddings).
|
|
91
|
+
|
|
92
|
+
| Tier | Name | Engine | Use |
|
|
93
|
+
|------|------|--------|-----|
|
|
94
|
+
| Tier 1 | Hot / Active | `svartalfaheim/<realm>/workspace/**/*.md` | Human-readable identity, goals, tasks |
|
|
95
|
+
| Tier 2 | Deep memory | **engram** store served by the bridge (`:4602`) | episodic recall, hybrid/cosine/spreading |
|
|
96
|
+
| Tier 3 | Audit | `workspace/memory/runes_audit.md` | append-only ledger (Runes) |
|
|
97
|
+
|
|
98
|
+
- Every significant action → `POST /observe` (episode into the well) + Runes entry.
|
|
99
|
+
- Before acting: `GET /recall` — "what does the well remember about this project?"
|
|
100
|
+
- **Memory is a boost, never a blocker** — a dry well fires cold, never stops the forge.
|
|
101
|
+
|
|
102
|
+
### 3.3 Skills — Gungnir
|
|
103
|
+
- Recurring tasks become scripts/skills in `.agents/skills/`.
|
|
104
|
+
- Self-synthesis loop: identify gap → write skill → **validate in Utgard** → register.
|
|
105
|
+
- Skill index: `.agents/skills/README.md`.
|
|
106
|
+
|
|
107
|
+
### 3.4 Isolation — Yggdrasil + Utgard
|
|
108
|
+
- **Yggdrasil**: complex tasks never edit the main tree; each agent gets
|
|
109
|
+
`./<repo>/.yggdrasil/<agent-id>/` on its own branch (`.treehouses` in Rut terms).
|
|
110
|
+
- **Utgard**: untrusted code, dynamic skills, Eindri tasks run in ephemeral Docker
|
|
111
|
+
containers, `--network none`, strict CPU/RAM/timeouts, no root. A failed run never
|
|
112
|
+
touches main. Destroyed on completion (ephemeral lifecycle).
|
|
113
|
+
|
|
114
|
+
### 3.5 Inter-Agent Bus — Ratatoskr (A2A 1.0 backbone) ⭐
|
|
115
|
+
The collaboration differentiator (ENTRY-008). Built on the **open A2A Protocol v1.0**
|
|
116
|
+
(Linux Foundation), NOT a bespoke bus:
|
|
117
|
+
|
|
118
|
+
- **Agent Cards** at `/.well-known/agent-card.json`, realm-scoped registry; discovery
|
|
119
|
+
= capability, never endpoint guessing. Cards JWS-signed via Heimdall.
|
|
120
|
+
- **Task lifecycle**: SUBMITTED → WORKING → COMPLETED/FAILED/REJECTED/CANCELED/
|
|
121
|
+
INPUT_REQUIRED/AUTH_REQUIRED; terminal states never restart (retry/idempotency
|
|
122
|
+
lives in the orchestrator).
|
|
123
|
+
- **Redis pub/sub** is the queue *under* the A2A task model (semantics on A2A,
|
|
124
|
+
throughput on Redis).
|
|
125
|
+
- Every A2A message is **observed into Mimirsbrunn** and **logged to Runes**.
|
|
126
|
+
- The `a2a-bridge` skill is the canonical collaboration skill (inbox per turn,
|
|
127
|
+
complete tasks, FYI peers on contract/schema/infra changes).
|
|
128
|
+
- Plan: `docs/plans/25-ratatoskr-a2a.md`.
|
|
129
|
+
|
|
130
|
+
### 3.6 Multi-Tenancy — Svartalfaheim
|
|
131
|
+
- Each realm = isolated domain: `.env.realm`, `Brokk.md`, `projects/`, `companies/`,
|
|
132
|
+
`workspace/`.
|
|
133
|
+
- **Rut specification:** realm::namespace + vault::keys — memory pages, env vars, and
|
|
134
|
+
credential tokens cannot cross tenant boundaries (`sandbox_isolated`).
|
|
135
|
+
- Realm context loader (`tenant_context_loader.ts`) verifies boundaries before any task;
|
|
136
|
+
cross-realm A2A requires an explicit grant.
|
|
137
|
+
|
|
138
|
+
### 3.7 Global Shared Space — Midgard
|
|
139
|
+
- Cross-tenant repos, design system, shared packages, infrastructure, company wiki.
|
|
140
|
+
- Parallel work uses Yggdrasil worktrees inside `github_org_repos/`.
|
|
141
|
+
|
|
142
|
+
### 3.8 Gateway & Security — Bifrost, Heimdall, Gjallarhorn
|
|
143
|
+
- **Bifrost**: Traefik/Caddy routes `/` → Hlidskjalf, `/files/` → Skrymir,
|
|
144
|
+
`/webhooks/github` → Mjollnir, `/oauth2/` → Heimdall. TLS termination.
|
|
145
|
+
- **Heimdall**: OAuth2-proxy/Authentik (GitHub OAuth) + **Agent Card signing (JWS)**;
|
|
146
|
+
tenant isolation enforced at the proxy layer.
|
|
147
|
+
- **Gjallarhorn**: cloudflared, outbound-only encrypted tunnel.
|
|
148
|
+
|
|
149
|
+
### 3.9 User Interfaces — Hlidskjalf & Skrymir (the UI/UX differentiator)
|
|
150
|
+
- **Hlidskjalf** — **React/Vue** master control dashboard per the **Ymir Rut design
|
|
151
|
+
system** (`docs/ymir-rut.md` Part 3): Cinzel / JetBrains Mono / Inter typography,
|
|
152
|
+
obsidian + cyan + violet palette, Algiz-anvil emblem. Views: fleet graph, A2A task
|
|
153
|
+
stream, memory well (`#/memory`), PR review cards, tenant switcher, Runes stream.
|
|
154
|
+
- **Skrymir** — embedded file browser (FileBrowser) scoped per tenant via Bifrost.
|
|
155
|
+
- **Telegram / Web chat** — remote command and approve while away.
|
|
156
|
+
|
|
157
|
+
### 3.10 Automation — Cron, Mjollnir, Valhalla
|
|
158
|
+
- **Cron runner**: stateless spawn → inject AGENTS.md + task prompt → execute →
|
|
159
|
+
write realm daily log → exit. Daily briefing 07:00, git backup, social poster.
|
|
160
|
+
- **Mjollnir (Issue→PR)**: HMAC-verified webhook → worktree + Utgard sub-agent →
|
|
161
|
+
fix + tests → `gh pr create` → human review in Hlidskjalf. Never force-merges.
|
|
162
|
+
- **Valhalla**: PM2/Docker/systemd lifecycle (`process_controller.ts`) + fleet
|
|
163
|
+
registry (`app_registry.json`). Missions, processes, and worker clusters.
|
|
164
|
+
|
|
165
|
+
### 3.11 Þjazi Backend Integration
|
|
166
|
+
- **Þjazi** is an experimental agent-native terminal backend with native per-pane agent state and push events, required when running sub-agents inside terminal panes.
|
|
167
|
+
- **Protocol floor**: Þjazi protocol 14 or newer is required; broad backend verification covers versions 0.7.1, 0.7.3, 0.7.4, 0.7.5, and 0.8.0, while protocol-16 features remain gated by availability.
|
|
168
|
+
- **Default-on presentation spaces** have a higher floor of Þjazi 0.8.0; homes can opt out by writing `off` into local `config/herdr-presentation-spaces`, and opt in by writing `on`.
|
|
169
|
+
- **Endpoint metadata** recorded per task: `backend=herdr`, `window=<session>:<pane-id>`, `herdr_session=<session>`, `herdr_workspace_id=<workspace-id>`, `herdr_tab_id=<tab-id>`, `herdr_pane_id=<pane-id>`.
|
|
170
|
+
- **Transport behavior**: Adapter starts and polls a named server before workspace/tab/pane/agent calls. Every Þjazi invocation goes through `fm_backend_herdr_cli`, which sets the environment and passes an explicit trailing `--session <name>`.
|
|
171
|
+
- **Push events**: Protocol 16 can subscribe to `pane.agent_status_changed` over a bounded Unix-socket reader. Polling runs every cycle and remains the permanent fallback when protocol 16, the event schema, Python, connection, subscription, or repeated reader execution is unavailable.
|
|
172
|
+
- **Away-mode supervisor**: Supports tmux and Þjazi supervisor panes only. Refuses Zellij, Orca, and cmux. For Þjazi, target existence, native state, capture, composer state, and verified submit all route through the shared backend dispatcher and the explicit named-session CLI owner.
|
|
173
|
+
- **Destructive lab safety**: `bin/fm-herdr-lab.sh` is the sole supported lifecycle helper for isolated verification. It provisions only non-default names beginning with `fm-lab-`, appends an explicit `--session` to allowed task commands, refuses caller-supplied session flags and server/session lifecycle subcommands, and performs destructive stop/delete only through its guarded lifecycle actions.
|
|
174
|
+
- **Active limits**: Þjazi remains experimental; presentation ordering needs protocol 16 and Python and is best-effort only; mutable labels can collide and are never placement or destructive authority; a Brokk outside Þjazi cannot resolve a launcher workspace, so a colliding home label refuses new spawns until the collision is cleared; ghost and placeholder recognition uses ANSI de-emphasis when available.
|
|
175
|
+
- **Regression test suite**: 18+ test scripts covering presentation, cleanup, prune safety, focus, respawn, workspace-per-home, launcher workspace, and event wait smoke tests.
|
|
176
|
+
- **Sub-agent orchestration**: When Brokk orchestrates sub-agents, Þjazi opens visible terminal panes/windows via `herdr run --pane-name "<role>-<branch>"` pointing to Treehouse worktrees. The user can see the sub-agent typing, executing CLI tools, and running tests live in real time. Þjazi panes are non-blocking—the main agent remains open to answer user inputs or supervise other sub-agents.
|
|
177
|
+
|
|
178
|
+
### 3.11 Company System — Houses (ENTRY-004)
|
|
179
|
+
- The fleet forges for **houses**: Ymir Labs, Brokk Forge, Runestone (Runir),
|
|
180
|
+
Muninn Labs, Dvalin, Utgard Studios, Askr, Mannheim. Each is a real venture with
|
|
181
|
+
a myth that names it (`docs/lore.md` §VI).
|
|
182
|
+
- Per-tenant `companies/` entity cards + `projects/` (plan 21).
|
|
183
|
+
|
|
184
|
+
## 3.12 Agentic Engineering Workflow Integration (Brokk)
|
|
185
|
+
|
|
186
|
+
### Four-Layer Program Design Framework
|
|
187
|
+
Integrated from Dex Horthy's agentic engineering framework (YouTube `xgkjtF89-44`, August 2026). Ymir incorporates the four-layer system alongside its existing seven realms, reinforcing the OSS-first doctrine (ENTRY-008).
|
|
188
|
+
|
|
189
|
+
**Layer 1 — Product (What & Why)**
|
|
190
|
+
- Problem statement, success metrics, announcement post, HTML mockups
|
|
191
|
+
- Aligns with Ymir's ticket-creation and PRD workflows
|
|
192
|
+
- Measurable goals tied to business outcomes (conversion rates, resource reduction targets)
|
|
193
|
+
|
|
194
|
+
**Layer 2 — System Architecture (How Services Fit)**
|
|
195
|
+
- Service topology, request/response flow, endpoint contracts, query outlines
|
|
196
|
+
- Complements Ymir's existing architecture layer in create-plan skill
|
|
197
|
+
- Service boundaries and flow diagrams map to Ymir's service orchestration
|
|
198
|
+
|
|
199
|
+
**Layer 3 — Program Design ⚠️ THE SKIPPED LAYER** (Critical Integration)
|
|
200
|
+
- **File locations**: Where each piece lives in the Ymir monorepo
|
|
201
|
+
- **Types and method signatures**: Exact interfaces before implementation
|
|
202
|
+
- **Call stack visualization**: Execution path when features run
|
|
203
|
+
- **Test shapes**: Test signatures only (not implementation)
|
|
204
|
+
- **Ymir enforcement**: `validate-plan` skill now mandates Layer 3 capture before spawn
|
|
205
|
+
- **Quote**: *"A good plan ends with the tests and the call stack. The point is that these are decisions the agent will otherwise make silently, and that you may not like."* — Dex Horthy
|
|
206
|
+
|
|
207
|
+
**Layer 4 — Vertical Slices / Tracer Bullets (Execution Order)**
|
|
208
|
+
- **Anti-horizontal-building**: Prevents DB→Service→API→FE sequencing that leaves nothing testable
|
|
209
|
+
- **Ymir implementation**: `ticket-executor` Phase 0 gate requires vertical slice definition
|
|
210
|
+
- **Tracer bullet approach**: Mock API → stub FE → wire together → then add migrations/logic
|
|
211
|
+
- **Dex's observation**: *"I have never seen a model do this without a human telling it the order."*
|
|
212
|
+
|
|
213
|
+
### Context Engineering Principles (from upstream research)
|
|
214
|
+
- **"Dumb zone" at ~50% context**: Real for models AND humans — structural decisions early when cheap
|
|
215
|
+
- **Right tokens, not more tokens**: One 43k-token planning session > re-steering 3,000-line diff later
|
|
216
|
+
- **Victor Tali trick**: *"Which choices are you not confident about?"* — pre-mortem before run, not post-hoc
|
|
217
|
+
- **Measurable goals beat instructions**: Agent given a number moves much further than one given description
|
|
218
|
+
|
|
219
|
+
### Integration with Ymir Systems
|
|
220
|
+
- **Mimirsbrunn memory**: Program design decisions observed into the well before agent dispatch
|
|
221
|
+
- **Ratatoskr A2A backbone**: Vertical slice tasks dispatched as A2A tasks to specialists
|
|
222
|
+
- **Yggdrasil worktrees**: Each slice runs on isolated worktrees with Utgard sandboxing
|
|
223
|
+
- **Brokk/Eindri runtime**: Four-layer framework enforced in plan creation and ticket execution
|
|
224
|
+
- **Mjollnir issue→PR pipeline**: Incident-to-agent patterns integrated (classifier → brief → PR)
|
|
225
|
+
- **Valhalla process supervisor**: Context budget tracking and phase transitions
|
|
226
|
+
|
|
227
|
+
### Acceptance Criteria (Ymir + Brokk Integration)
|
|
228
|
+
- [x] Every ship task has all 4 layers documented before spawn
|
|
229
|
+
- [x] Zero horizontal-first builds (Slice 1 e2e testable first)
|
|
230
|
+
- [x] 100% of ship tasks have measurable goals
|
|
231
|
+
- [ ] Context budget warnings visible in fleet digest
|
|
232
|
+
- [x] Pre-mortem confidence check on every program design
|
|
233
|
+
- [ ] High-stakes changes go through multi-model review
|
|
234
|
+
- [ ] Incident-to-PR pipeline operational
|
|
235
|
+
|
|
236
|
+
## 4. Execution Chain Examples
|
|
237
|
+
|
|
238
|
+
### 4.1 Inbound GitHub Bug Report
|
|
239
|
+
```
|
|
240
|
+
Webhook → Gjallarhorn → Bifrost → issue_listener.ts (HMAC verify)
|
|
241
|
+
→ Mjollnir routes to realm → commit from Mimirsbrunn (recall project memory)
|
|
242
|
+
→ treehouse worktree (fix-issue-N) → Eindri inside Utgard diagnoses + patches + tests
|
|
243
|
+
→ push branch → gh pr create (Fixes #N)
|
|
244
|
+
→ notify (Telegram + Hlidskjalf) → human reviews → merge
|
|
245
|
+
→ outcome observed into the well + Runes logs everything
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
### 4.2 Background Daily Briefing
|
|
249
|
+
```
|
|
250
|
+
Cron 07:00 → daily_brief.ts → loads AGENTS.md + realm context
|
|
251
|
+
→ RECALL Mimirsbrunn for active dev/marketing context
|
|
252
|
+
→ assemble prompt (untrusted_context contained)
|
|
253
|
+
→ spawn headless agent → write svartalfaheim/<realm>/workspace/memory/daily/YYYY-MM-DD.md
|
|
254
|
+
→ auto-commit sync (git_backup.ts) → exit
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
### 4.3 A2A Delegation (Kaia → specialist)
|
|
258
|
+
```
|
|
259
|
+
Kaia recalls the well (what worked here before)
|
|
260
|
+
→ discovers specialist via realm registry (Agent Card) → creates A2A task (SubmitTask)
|
|
261
|
+
→ specialist streams progress over SSE (Working → updates)
|
|
262
|
+
→ specialist finishes (Completed, artifacts) → tools via MCP internally
|
|
263
|
+
→ Kaia observes the outcome into Mimirsbrunn → logs to Runes → Hlidskjalf renders state
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
### 4.4 Parallel Feature Work (two agents, one shared repo)
|
|
267
|
+
```
|
|
268
|
+
Agent A: yggdrasil create → .yggdrasil/agent-a/ (branch agent/a/auth)
|
|
269
|
+
Agent B: yggdrasil create → .yggdrasil/agent-b/ (branch agent/b/logging)
|
|
270
|
+
Both run tests inside their own Utgard container (mount own worktree only)
|
|
271
|
+
On success: cleanup(merge=true) → merged to main, worktree removed
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
## 5. Data Flow & Security Boundaries
|
|
275
|
+
|
|
276
|
+
| Boundary | Enforced by |
|
|
277
|
+
|----------|-------------|
|
|
278
|
+
| Tenant independence | Svartalfaheim realm namespace + vault keys; proxy-level path scoping; per-realm `.env.realm`; realm-scoped A2A registry |
|
|
279
|
+
| Agent identity | **JWS-signed Agent Cards** (Heimdall); rejected tampered cards |
|
|
280
|
+
| Untrusted code | Utgard: network-none containers, resource caps, cgroups, no root, ephemeral destroy |
|
|
281
|
+
| Secrets | Only `.env.local` / `.env.realm`; never in markdown or git |
|
|
282
|
+
| Prompt injection | `<untrusted_context>` containment + immutable system prompt layer |
|
|
283
|
+
| Git safety | Yggdrasil worktrees; Mjollnir never force-merges |
|
|
284
|
+
| Deploy safety | Zero-trust `gh secret set` + human-approved PRs |
|
|
285
|
+
| Traceability | every significant action carved into Runes; target traceability index 0.984 (Rut) |
|
|
286
|
+
|
|
287
|
+
## 6. Tech Stack Reference (current = TS/Python/React/Vue; target = Ymir Rut v2.6)
|
|
288
|
+
|
|
289
|
+
### Current stack (build today)
|
|
290
|
+
|
|
291
|
+
| Layer | Choice | Norse shell |
|
|
292
|
+
|-------|--------|-------------|
|
|
293
|
+
| Control plane daemons | **TypeScript** (Node 22) | Bifrost, Svartalfaheim, Yggdrasil, Ratatoskr, Mjollnir, Valhalla |
|
|
294
|
+
| Agent orchestration | **Python 3.12+** + TS | Brokk / Kaia / Eindri (mirrors smidja harness) |
|
|
295
|
+
| UI / UX | **React + Vue** | Hlidskjalf portal, Skrymir |
|
|
296
|
+
| Inter-agent | **A2A 1.0** (JSON-RPC 2.0/SSE) + **Redis** | Ratatoskr |
|
|
297
|
+
| Memory | **engram/engdbram** bridge `:4602` | Mimirsbrunn |
|
|
298
|
+
| Sandbox | Docker (rootless, network-none) + Python | Utgard |
|
|
299
|
+
| Gateway | Traefik/Caddy | Bifrost |
|
|
300
|
+
| Auth | OAuth2-proxy/Authentik + JWS cards | Heimdall |
|
|
301
|
+
| Tunnel | cloudflared | Gjallarhorn |
|
|
302
|
+
| Files | FileBrowser / MinIO | Skrymir |
|
|
303
|
+
| Persistence | Postgres 16 (self-hosted) + engram/SQLite | Runes/Mimirsbrunn |
|
|
304
|
+
| Process mgmt | PM2 / Docker | Valhalla |
|
|
305
|
+
| CI/CD | GitHub Actions + gh CLI | Mjollnir / deploy |
|
|
306
|
+
| Reused systems | `smidja`, the upstream `firstmate` distro, `.compliance`, smidja visualizer | — |
|
|
307
|
+
|
|
308
|
+
### Target stack (Ymir Rut v2.6 — port AFTER end-to-end, ENTRY-009)
|
|
309
|
+
|
|
310
|
+
| Layer | Rut choice | Crate/module |
|
|
311
|
+
|-------|-----------|--------------|
|
|
312
|
+
| Control plane | **Rust (Edition 2024) + Tokio** | crates/{bifrost,hlidskjalf,svartalfaheim,ratatoskr,yggdrasil} |
|
|
313
|
+
| Broker | **NATS JetStream** | `bus::nats`, `dispatch::router` |
|
|
314
|
+
| IPC | **gRPC/Protobuf v3** + JSON-RPC/Unix sockets | `proto/v2/` |
|
|
315
|
+
| Worktrees | **libgit2** `.treehouses` | `worktree::libgit2`, `snapshot::diff` |
|
|
316
|
+
| Sandbox | rootless Docker + **cgroups v2** + seccomp | `runtime/utgard/` |
|
|
317
|
+
| Agent harness | Python 3.12+ / Node 22 (unchanged) | `runtime/brokk/` |
|
|
318
|
+
| Persistence | PostgreSQL 16 + MinIO/S3 | storage tier |
|
|
319
|
+
| Deploy | Helm charts + compose | `configs/` |
|
|
320
|
+
|
|
321
|
+
## 7. Build Order (Updated)
|
|
322
|
+
|
|
323
|
+
| Phase | Scope | Depends on |
|
|
324
|
+
|-------|-------|-----------|
|
|
325
|
+
| P0 | Monorepo skeleton, AGENTS.md, realm routing, docs (lore, Rut, architecture) | — |
|
|
326
|
+
| P1 | Yggdrasil worktrees + Utgard sandbox | P0 |
|
|
327
|
+
| P2 | Memory — engram bridge (Mimirsbrunn) + Runes audit | P0 |
|
|
328
|
+
| P3 | Skills engine (Gungnir) + validation loop | P1 |
|
|
329
|
+
| P4 | **Ratatoskr A2A 1.0 backbone** (cards, registry, Redis) | P0 |
|
|
330
|
+
| P5 | Cron automation | P2, P3 |
|
|
331
|
+
| P6 | Realm multi-tenancy + tenant context loader + companies/houses | P0 |
|
|
332
|
+
| P7 | Hlidskjalf portal (React/Vue, Rut design system) + Skrymir | P4 |
|
|
333
|
+
| P8 | Bifrost + Heimdall (OAuth + card signing) + Gjallarhorn | P6, P7 |
|
|
334
|
+
| P9 | Mjollnir issue→PR pipeline | P1, P4 |
|
|
335
|
+
| P10 | Toolchain & deploy engine (Valhalla, GitHub CI/CD) | P1 |
|
|
336
|
+
| P11 | **Ymir Rut port** (Rust/NATS/gRPC re-floor) — only after P0–P10 work end-to-end | P0–P10 |
|
|
337
|
+
|
|
338
|
+
Detailed per-feature plans: `docs/plans/`. Full v2.6 target spec: `docs/ymir-rut.md`.
|
|
339
|
+
Mythos & houses: `docs/lore.md`. Decision history: `docs/append-only-log.md`.
|