@zerwiz/ymir 0.1.3 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/README.md +291 -0
- package/.agents/agents/bragi-marketer.md +111 -0
- package/.agents/agents/brokk.md +352 -0
- package/.agents/agents/forseti-reviewer.md +93 -0
- package/.agents/agents/frigg-consent.md +77 -0
- package/.agents/agents/groa-update.md +77 -0
- package/.agents/agents/hnoss-designer.md +69 -0
- package/.agents/agents/huginn-researcher.md +99 -0
- package/.agents/agents/jord-projects.md +78 -0
- package/.agents/agents/kvasir-scout.md +91 -0
- package/.agents/agents/mimir-planner.md +92 -0
- package/.agents/agents/muninn-stow.md +77 -0
- package/.agents/agents/saga-bearings.md +78 -0
- package/.agents/agents/sindri-developer.md +114 -0
- package/.agents/agents/snotra-documenter.md +105 -0
- package/.agents/agents/syn-recovery.md +78 -0
- package/.agents/agents/tyr-check.md +78 -0
- package/.agents/agents/urdh-hold.md +77 -0
- package/.agents/agents/volundr-smith.md +80 -0
- package/.agents/agents/vor-diagnostics.md +77 -0
- package/.agents/assets/agents/naming.md +50 -0
- package/.agents/assets/agents/registry.md +93 -0
- package/.agents/assets/agents/runtime.md +36 -0
- package/.agents/assets/agents/toon-tasks-cli.md +42 -0
- package/.agents/assets/templates/company_entity.template.md +37 -0
- package/.agents/backend/backends/cmux.sh +649 -0
- package/.agents/backend/backends/herdr-eventwait.py +157 -0
- package/.agents/backend/backends/herdr-workspace-move.py +114 -0
- package/.agents/backend/backends/herdr.sh +3386 -0
- package/.agents/backend/backends/orca.sh +290 -0
- package/.agents/backend/backends/tmux.sh +357 -0
- package/.agents/backend/backends/zellij.sh +700 -0
- package/.agents/backend/fm-afk-launch.sh +654 -0
- package/.agents/backend/fm-afk-return.sh +241 -0
- package/.agents/backend/fm-afk-start.sh +172 -0
- package/.agents/backend/fm-arm-command-policy.mjs +960 -0
- package/.agents/backend/fm-arm-pretool-check.sh +200 -0
- package/.agents/backend/fm-backend-hometag-lib.sh +52 -0
- package/.agents/backend/fm-backend.sh +981 -0
- package/.agents/backend/fm-backlog-handoff.sh +909 -0
- package/.agents/backend/fm-backlog-receive.sh +187 -0
- package/.agents/backend/fm-backlog-transition-lib.sh +779 -0
- package/.agents/backend/fm-bearings-board.sh +204 -0
- package/.agents/backend/fm-bearings-snapshot.sh +546 -0
- package/.agents/backend/fm-bootstrap.sh +1568 -0
- package/.agents/backend/fm-branch-outcome.sh +203 -0
- package/.agents/backend/fm-branch-prompt.sh +101 -0
- package/.agents/backend/fm-brief.sh +452 -0
- package/.agents/backend/fm-busy-event.sh +234 -0
- package/.agents/backend/fm-busy-lib.sh +986 -0
- package/.agents/backend/fm-captain-hold.sh +1001 -0
- package/.agents/backend/fm-cd-command-policy.mjs +153 -0
- package/.agents/backend/fm-cd-pretool-check.sh +190 -0
- package/.agents/backend/fm-check-lib.sh +74 -0
- package/.agents/backend/fm-check-register.sh +42 -0
- package/.agents/backend/fm-check-unregister.sh +52 -0
- package/.agents/backend/fm-classify-lib.sh +1770 -0
- package/.agents/backend/fm-claude-stop-autoarm.sh +334 -0
- package/.agents/backend/fm-composer-lib.sh +1416 -0
- package/.agents/backend/fm-config-inherit-lib.sh +1202 -0
- package/.agents/backend/fm-config-push.sh +254 -0
- package/.agents/backend/fm-control-lib.sh +251 -0
- package/.agents/backend/fm-control.sh +878 -0
- package/.agents/backend/fm-crew-state.sh +625 -0
- package/.agents/backend/fm-cursor-lib.sh +243 -0
- package/.agents/backend/fm-decision-hold.sh +232 -0
- package/.agents/backend/fm-doc-audience-check.sh +269 -0
- package/.agents/backend/fm-dod-lib.sh +67 -0
- package/.agents/backend/fm-ensure-agents-md.sh +253 -0
- package/.agents/backend/fm-extension-launch-barrier.mjs +129 -0
- package/.agents/backend/fm-extension.mjs +2577 -0
- package/.agents/backend/fm-extension.sh +16 -0
- package/.agents/backend/fm-ff-lib.sh +420 -0
- package/.agents/backend/fm-fleet-snapshot.sh +1463 -0
- package/.agents/backend/fm-fleet-sync.sh +458 -0
- package/.agents/backend/fm-fleet-view.sh +96 -0
- package/.agents/backend/fm-gate-refuse-lib.sh +102 -0
- package/.agents/backend/fm-guard.sh +242 -0
- package/.agents/backend/fm-harness.sh +195 -0
- package/.agents/backend/fm-herdr-ci-cleanup.sh +115 -0
- package/.agents/backend/fm-herdr-lab.sh +346 -0
- package/.agents/backend/fm-herdr-session-cleanup.sh +337 -0
- package/.agents/backend/fm-home-seed.sh +984 -0
- package/.agents/backend/fm-home-summary-refresh.sh +255 -0
- package/.agents/backend/fm-hook-host-lib.sh +36 -0
- package/.agents/backend/fm-inactive-reconcile.sh +531 -0
- package/.agents/backend/fm-inbox.sh +399 -0
- package/.agents/backend/fm-install-actionlint.sh +84 -0
- package/.agents/backend/fm-install-herdr.sh +96 -0
- package/.agents/backend/fm-install-shellcheck.sh +84 -0
- package/.agents/backend/fm-install-treehouse.sh +95 -0
- package/.agents/backend/fm-kimi-turnend-hook.sh +276 -0
- package/.agents/backend/fm-lease-lib.sh +218 -0
- package/.agents/backend/fm-lease.sh +189 -0
- package/.agents/backend/fm-line-cap-lib.sh +51 -0
- package/.agents/backend/fm-lint-workflows.sh +137 -0
- package/.agents/backend/fm-lint.sh +591 -0
- package/.agents/backend/fm-lock-lib.sh +104 -0
- package/.agents/backend/fm-lock.sh +107 -0
- package/.agents/backend/fm-marker-lib.sh +12 -0
- package/.agents/backend/fm-merge-local.sh +74 -0
- package/.agents/backend/fm-merge-outcome-lib.sh +138 -0
- package/.agents/backend/fm-nm-run-lib.sh +124 -0
- package/.agents/backend/fm-on.sh +125 -0
- package/.agents/backend/fm-operational-input.sh +253 -0
- package/.agents/backend/fm-peek.sh +46 -0
- package/.agents/backend/fm-pending-reply-lib.sh +1409 -0
- package/.agents/backend/fm-pr-check.sh +135 -0
- package/.agents/backend/fm-pr-lib.sh +1016 -0
- package/.agents/backend/fm-pr-merge.sh +707 -0
- package/.agents/backend/fm-pr-poll.sh +110 -0
- package/.agents/backend/fm-primary-scope-lib.sh +33 -0
- package/.agents/backend/fm-procevent-extension-capture.pl +259 -0
- package/.agents/backend/fm-procevent-lavish.sh +628 -0
- package/.agents/backend/fm-procevent-lib.sh +892 -0
- package/.agents/backend/fm-procevent-quota.sh +290 -0
- package/.agents/backend/fm-procevent-remote-reply.sh +577 -0
- package/.agents/backend/fm-procevent-when.sh +504 -0
- package/.agents/backend/fm-procevent.sh +1466 -0
- package/.agents/backend/fm-project-mode.sh +92 -0
- package/.agents/backend/fm-project-origin-lib.sh +180 -0
- package/.agents/backend/fm-promote.sh +282 -0
- package/.agents/backend/fm-public-followup-emit.sh +260 -0
- package/.agents/backend/fm-public-followup-lib.sh +398 -0
- package/.agents/backend/fm-public-followup.sh +1330 -0
- package/.agents/backend/fm-push-transition-lib.sh +168 -0
- package/.agents/backend/fm-quota-axi-lib.sh +93 -0
- package/.agents/backend/fm-quota-choose.sh +384 -0
- package/.agents/backend/fm-remote-delta-read.sh +189 -0
- package/.agents/backend/fm-remote-doctor.sh +800 -0
- package/.agents/backend/fm-remote-entrypoint.sh +193 -0
- package/.agents/backend/fm-remote-file.sh +234 -0
- package/.agents/backend/fm-remote-home-provision.sh +259 -0
- package/.agents/backend/fm-remote-home-seed.sh +259 -0
- package/.agents/backend/fm-remote-inherit-push.sh +90 -0
- package/.agents/backend/fm-remote-inherit.sh +179 -0
- package/.agents/backend/fm-remote-job-lib.sh +1241 -0
- package/.agents/backend/fm-remote-job-reap-orphans.sh +137 -0
- package/.agents/backend/fm-remote-job-worker.sh +1124 -0
- package/.agents/backend/fm-remote-readiness-lib.sh +44 -0
- package/.agents/backend/fm-remote-secondmate-control.sh +340 -0
- package/.agents/backend/fm-review-diff.sh +158 -0
- package/.agents/backend/fm-secondmate-charter-lib.sh +44 -0
- package/.agents/backend/fm-secondmate-nudge-lib.sh +68 -0
- package/.agents/backend/fm-secondmate-parent-lib.sh +70 -0
- package/.agents/backend/fm-secondmate-reconcile.sh +371 -0
- package/.agents/backend/fm-secondmate-registry-lib.sh +311 -0
- package/.agents/backend/fm-secondmate-report.sh +88 -0
- package/.agents/backend/fm-send.sh +1059 -0
- package/.agents/backend/fm-session-lock-lib.sh +176 -0
- package/.agents/backend/fm-session-start.sh +970 -0
- package/.agents/backend/fm-sessionstart-cursor.sh +40 -0
- package/.agents/backend/fm-sessionstart-nudge.sh +45 -0
- package/.agents/backend/fm-sessionstart-run.sh +145 -0
- package/.agents/backend/fm-spawn.sh +3153 -0
- package/.agents/backend/fm-startup-memory-budget-lib.sh +224 -0
- package/.agents/backend/fm-startup-memory-budget.sh +94 -0
- package/.agents/backend/fm-startup-network.sh +642 -0
- package/.agents/backend/fm-stow-cascade.sh +251 -0
- package/.agents/backend/fm-subagent-pretool-check.sh +207 -0
- package/.agents/backend/fm-supervise-daemon.sh +1732 -0
- package/.agents/backend/fm-supervision-instructions.sh +215 -0
- package/.agents/backend/fm-supervision-lib.sh +90 -0
- package/.agents/backend/fm-supervisor-target-lib.sh +78 -0
- package/.agents/backend/fm-tangle-lib.sh +53 -0
- package/.agents/backend/fm-task-inbox-lib.sh +402 -0
- package/.agents/backend/fm-tasks-axi-lib.sh +123 -0
- package/.agents/backend/fm-teardown.sh +2922 -0
- package/.agents/backend/fm-test-isolation-proof.sh +588 -0
- package/.agents/backend/fm-test-run.sh +2191 -0
- package/.agents/backend/fm-timeout-lib.sh +141 -0
- package/.agents/backend/fm-timing-lib.sh +179 -0
- package/.agents/backend/fm-tmux-lib.sh +291 -0
- package/.agents/backend/fm-tool-update-check.sh +898 -0
- package/.agents/backend/fm-trace-context-lib.sh +227 -0
- package/.agents/backend/fm-transition-lib.sh +103 -0
- package/.agents/backend/fm-turnend-guard-cursor.sh +391 -0
- package/.agents/backend/fm-turnend-guard-grok.sh +90 -0
- package/.agents/backend/fm-turnend-guard.sh +432 -0
- package/.agents/backend/fm-update.sh +110 -0
- package/.agents/backend/fm-vendor-auth-probe.sh +190 -0
- package/.agents/backend/fm-voice-client.py +1373 -0
- package/.agents/backend/fm-voice-relay.py +1256 -0
- package/.agents/backend/fm-wake-drain.sh +592 -0
- package/.agents/backend/fm-wake-grant.sh +127 -0
- package/.agents/backend/fm-wake-lib.sh +1849 -0
- package/.agents/backend/fm-watch-arm.sh +602 -0
- package/.agents/backend/fm-watch-checkpoint.sh +109 -0
- package/.agents/backend/fm-watch.sh +1962 -0
- package/.agents/backend/fm-x-dismiss.sh +116 -0
- package/.agents/backend/fm-x-followup.sh +286 -0
- package/.agents/backend/fm-x-lib.sh +1000 -0
- package/.agents/backend/fm-x-link.sh +234 -0
- package/.agents/backend/fm-x-poll.sh +185 -0
- package/.agents/backend/fm-x-reply.sh +385 -0
- package/.agents/backend/fm_voice_frame.py +166 -0
- package/.agents/backend/fm_voice_records.py +574 -0
- package/.agents/backend/model-bridge.py +290 -0
- package/.agents/backend/opencode-go-bridge.py +30 -0
- package/.agents/bus/README.md +12 -0
- package/.agents/bus/messages.json +1 -0
- package/.agents/config/agents.machine.example.yaml +16 -0
- package/.agents/config/agents.yaml +50 -0
- package/.agents/config/agents.yaml.example +72 -0
- package/.agents/config/crew-dispatch.json +22 -0
- package/.agents/config/cron.yaml +9 -0
- package/.agents/config/eindri-dispatch.json +67 -0
- package/.agents/config/eindri-harness +1 -0
- package/.agents/config/startup-memory-budget +1 -0
- package/.agents/config/tailscale-sync.yaml +27 -0
- package/.agents/filebrowser/.filebrowser.json +6 -0
- package/.agents/filebrowser/README.md +11 -0
- package/.agents/gateway/README.md +12 -0
- package/.agents/github/README.md +15 -0
- package/.agents/github/webhooks/.gitkeep +0 -0
- package/.agents/github/workflows/.gitkeep +0 -0
- package/.agents/harness/opencode/plugins/lib/rodd-operational-input.js +37 -0
- package/.agents/harness/opencode/plugins/package.json +4 -0
- package/.agents/harness/opencode/plugins/saga-sessionstart.js +77 -0
- package/.agents/harness/opencode/plugins/syn-cd-check.js +61 -0
- package/.agents/harness/opencode/plugins/syn-pretool-check.js +68 -0
- package/.agents/harness/opencode/plugins/syn-turnend-guard.js +105 -0
- package/.agents/harness/opencode/plugins/syn-watch-arm.js +521 -0
- package/.agents/memory/README.md +46 -0
- package/.agents/memory/kaia.engram +0 -0
- package/.agents/memory/kaia.engram-shm +0 -0
- package/.agents/memory/kaia.engram-wal +0 -0
- package/.agents/memory/runes_audit.md +5 -0
- package/.agents/memory/well/episodes.jsonl +367 -0
- package/.agents/memory/well/workspace.jsonl +27 -0
- package/.agents/migrations/0001-hodd-layout.sh +38 -0
- package/.agents/migrations/0002-a2a-mcp.sh +27 -0
- package/.agents/migrations/0003-private-data-separation.sh +111 -0
- package/.agents/migrations/0004-hoard-and-realms.sh +104 -0
- package/.agents/sandbox/Dockerfile.utgard +19 -0
- package/.agents/sandbox/README.md +14 -0
- package/.agents/sandbox/utgard.config.json +14 -0
- package/.agents/skills/README.md +59 -0
- package/.agents/skills/bragi-marketing/README.md +3 -0
- package/.agents/skills/bragi-marketing/SKILL.md +82 -0
- package/.agents/skills/eindri-homes/README.md +3 -0
- package/.agents/skills/eindri-homes/SKILL.md +291 -0
- package/.agents/skills/eindri-homes/assets/control-plane.md +122 -0
- package/.agents/skills/eindri-homes/assets/dispatch.md +80 -0
- package/.agents/skills/frigg-consent/README.md +3 -0
- package/.agents/skills/frigg-consent/SKILL.md +56 -0
- package/.agents/skills/galdr-ymirsystem/README.md +3 -0
- package/.agents/skills/galdr-ymirsystem/SKILL.md +158 -0
- package/.agents/skills/galdr-ymirsystem/assets/README.md +74 -0
- package/.agents/skills/galdr-ymirsystem/assets/brokk-distro-runtime.md +390 -0
- package/.agents/skills/galdr-ymirsystem/assets/build-method.md +113 -0
- package/.agents/skills/galdr-ymirsystem/assets/build-tool-categories.md +178 -0
- package/.agents/skills/galdr-ymirsystem/assets/eindri-orchestration.md +518 -0
- package/.agents/skills/galdr-ymirsystem/assets/eindri-profiles.md +136 -0
- package/.agents/skills/galdr-ymirsystem/assets/harness-integration/README.md +673 -0
- package/.agents/skills/galdr-ymirsystem/assets/harness-integration/claude-code.md +197 -0
- package/.agents/skills/galdr-ymirsystem/assets/harness-integration/codex.md +191 -0
- package/.agents/skills/galdr-ymirsystem/assets/harness-integration/cursor.md +193 -0
- package/.agents/skills/galdr-ymirsystem/assets/harness-integration/opencode.md +262 -0
- package/.agents/skills/galdr-ymirsystem/assets/harness-integration/pi.md +295 -0
- package/.agents/skills/galdr-ymirsystem/assets/hlidskjalf-ui.md +496 -0
- package/.agents/skills/galdr-ymirsystem/assets/installation.md +571 -0
- package/.agents/skills/galdr-ymirsystem/assets/local-models/HOST-DATA.example.md +72 -0
- package/.agents/skills/galdr-ymirsystem/assets/local-models.md +274 -0
- package/.agents/skills/galdr-ymirsystem/assets/memory-well.md +161 -0
- package/.agents/skills/galdr-ymirsystem/assets/nornir-jobs.md +377 -0
- package/.agents/skills/galdr-ymirsystem/assets/norse-naming.md +325 -0
- package/.agents/skills/galdr-ymirsystem/assets/odrerir-hall.md +129 -0
- package/.agents/skills/galdr-ymirsystem/assets/pi-boot/einherjar-spawn.schema.json +81 -0
- package/.agents/skills/galdr-ymirsystem/assets/pi-boot/herdr-profile.toml +75 -0
- package/.agents/skills/galdr-ymirsystem/assets/pi-boot/pi-profile.yml +96 -0
- package/.agents/skills/galdr-ymirsystem/assets/pi-boot/supervision-tree.yml +163 -0
- package/.agents/skills/galdr-ymirsystem/assets/pi-boot-guide.md +58 -0
- package/.agents/skills/galdr-ymirsystem/assets/porting-upstream-to-norse.md +301 -0
- package/.agents/skills/galdr-ymirsystem/assets/principles.md +385 -0
- package/.agents/skills/galdr-ymirsystem/assets/reference-adoption.md +99 -0
- package/.agents/skills/galdr-ymirsystem/assets/registry.md +379 -0
- package/.agents/skills/galdr-ymirsystem/assets/runtime-compliance.md +463 -0
- package/.agents/skills/galdr-ymirsystem/assets/runtime-components.md +553 -0
- package/.agents/skills/galdr-ymirsystem/assets/smidja.md +175 -0
- package/.agents/skills/galdr-ymirsystem/schemas/toon-schemas.md +190 -0
- package/.agents/skills/galdr-ymirsystem/scripts/README.md +45 -0
- package/.agents/skills/galdr-ymirsystem/scripts/bench-one.sh +248 -0
- package/.agents/skills/galdr-ymirsystem/scripts/compliance-check.sh +360 -0
- package/.agents/skills/galdr-ymirsystem/scripts/gpu-sample.sh +43 -0
- package/.agents/skills/galdr-ymirsystem/scripts/stop-all.sh +34 -0
- package/.agents/skills/galdr-ymirsystem/scripts/toon-check.py +188 -0
- package/.agents/skills/gjallarhorn-relay/README.md +3 -0
- package/.agents/skills/gjallarhorn-relay/SKILL.md +283 -0
- package/.agents/skills/groa-update/SKILL.md +70 -0
- package/.agents/skills/hamr-adapters/README.md +3 -0
- package/.agents/skills/hamr-adapters/SKILL.md +123 -0
- package/.agents/skills/hamr-adapters/references/common/control-and-recovery.md +37 -0
- package/.agents/skills/hamr-adapters/references/common/dispatch.md +32 -0
- package/.agents/skills/hamr-adapters/references/common/model-and-effort.md +42 -0
- package/.agents/skills/hamr-adapters/references/common/primary-hooks.md +40 -0
- package/.agents/skills/hamr-adapters/references/harness/claude.md +55 -0
- package/.agents/skills/hamr-adapters/references/harness/codex.md +43 -0
- package/.agents/skills/hamr-adapters/references/harness/cursor.md +75 -0
- package/.agents/skills/hamr-adapters/references/harness/grok.md +69 -0
- package/.agents/skills/hamr-adapters/references/harness/kimi.md +51 -0
- package/.agents/skills/hamr-adapters/references/harness/muse.md +70 -0
- package/.agents/skills/hamr-adapters/references/harness/opencode.md +42 -0
- package/.agents/skills/hamr-adapters/references/harness/pi.md +56 -0
- package/.agents/skills/herdr-panes/README.md +3 -0
- package/.agents/skills/herdr-panes/SKILL.md +92 -0
- package/.agents/skills/herdr-panes/assets/herdr-backend.md +346 -0
- package/.agents/skills/herdr-panes/assets/tmux-backend.md +115 -0
- package/.agents/skills/hnoss-design/DESIGN.md +19 -0
- package/.agents/skills/hnoss-design/README.md +3 -0
- package/.agents/skills/hnoss-design/SKILL.md +83 -0
- package/.agents/skills/hvild-afk/README.md +3 -0
- package/.agents/skills/hvild-afk/SKILL.md +241 -0
- package/.agents/skills/jord-projects/README.md +3 -0
- package/.agents/skills/jord-projects/SKILL.md +92 -0
- package/.agents/skills/lifecycle/SKILL.md +56 -0
- package/.agents/skills/lifecycle/smoke_test.sh +52 -0
- package/.agents/skills/lifecycle/start.sh +21 -0
- package/.agents/skills/lifecycle/status.sh +35 -0
- package/.agents/skills/lifecycle/stop.sh +16 -0
- package/.agents/skills/muninn-stow/README.md +3 -0
- package/.agents/skills/muninn-stow/SKILL.md +309 -0
- package/.agents/skills/no-mistakes/SKILL.md +379 -0
- package/.agents/skills/nornir-schedule/README.md +3 -0
- package/.agents/skills/nornir-schedule/SKILL.md +25 -0
- package/.agents/skills/nornir-schedule/assets/events.md +137 -0
- package/.agents/skills/nornir-schedule/assets/quota.md +131 -0
- package/.agents/skills/nsr-compliance/README.md +3 -0
- package/.agents/skills/nsr-compliance/SKILL.md +29 -0
- package/.agents/skills/nsr-compliance/assets/nsr/README.md +40 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/RULES/README.md +15 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/RULES/git-workflow.md +18 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/RULES/security.md +22 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/RULES/tech-stack.md +8 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/SKILL.md +71 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/config/core_four.yaml +16 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/gates/check_danger.sh +102 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/gates/check_wiring.sh +69 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/gates/validate_code.sh +29 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/gates/verify_docs.py +66 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/generate.sh +109 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/harness/envelopes/result_envelope.json +14 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/harness/envelopes/task_envelope.json +20 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/harness/runner.py +303 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/telemetry/logger.py +112 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/README.md +18 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/config/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/gates/README.md +12 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/gates/check_env.sh +23 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/gates/check_paths.sh +20 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/gates/check_platform.sh +23 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/harness/README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/harness/envelopes/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/installer/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/installer/install.sh +125 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/telemetry/README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/README.md +20 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/features/README.md +36 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/features/SKILL-template.md +14 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/git_ops/README.md +25 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/git_ops/SKILL.md +13 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/git_ops/create_branch.sh +6 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/git_ops/safe_commit.sh +9 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/git_ops/sync_upstream.sh +6 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/README.md +27 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/SKILL.md +15 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/smoke_test.sh +12 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/start.sh +19 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/status.sh +12 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/stop.sh +15 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/README.md +18 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/config/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/config/core_four.yaml +13 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/README.md +12 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/check_danger.sh +102 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/check_env.sh +23 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/check_paths.sh +20 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/check_platform.sh +23 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/check_wiring.sh +69 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/harness/README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/harness/envelopes/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/harness/envelopes/result_envelope.json +14 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/harness/envelopes/task_envelope.json +20 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/harness/runner.py +303 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/installer/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/installer/install.sh +125 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/telemetry/README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/telemetry/logger.py +112 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/BEST_PRACTICES/README.md +14 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/BEST_PRACTICES/api.md +17 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/BEST_PRACTICES/compliance-wiring.md +155 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/BEST_PRACTICES/frontend.md +15 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/README.md +23 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/clients/README.md +16 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/clients/template-README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/deploy.sh +49 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/envs/README.md +12 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/envs/development.env.example +17 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/envs/production.env.example +17 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/envs/staging.env.example +17 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/tenants/README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/tenants/template.env.example +8 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/README.md +26 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/agent.md +7 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/developers/dev-1.md +20 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/linux.md +9 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/macos.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/shared.md +19 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/windows.md +14 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/HOSTING/README.md +25 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/HOSTING/_template.md +41 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/HOSTING/hosting-1.md +41 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/README.md +21 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/RUNBOOK/README.md +15 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/RUNBOOK/deployment.md +19 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/RUNBOOK/disaster-recovery.md +15 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/RUNBOOK/ops-tasks.md +14 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/features/README.md +16 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/project-skills.md +146 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/research/README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/research/software-compliance-research.md +269 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/working-with-agents.md +260 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/AGENTS.md +38 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/ARCHITECTURE.md +36 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/BEST_PRACTICES.md +27 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/CI_CD.md +23 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/FEATURES.md +15 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/README.md +22 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/RULES.md +37 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/STRUCTURE.md +45 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/TECH_STACK.md +28 -0
- package/.agents/skills/nsr-compliance/assets/nsr/scaffold-spec.md +63 -0
- package/.agents/skills/nsr-compliance/assets/nsr/scripts/scaffold.sh +103 -0
- package/.agents/skills/nsr-compliance/assets/nsr/scripts/validate.sh +52 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/SKILL.md +71 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/config/core_four.yaml +16 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/gates/check_danger.sh +102 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/gates/check_wiring.sh +69 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/gates/validate_code.sh +29 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/gates/verify_docs.py +66 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/generate.sh +109 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/harness/envelopes/result_envelope.json +14 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/harness/envelopes/task_envelope.json +20 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/harness/runner.py +303 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/telemetry/logger.py +112 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/README.md +18 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/config/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/gates/README.md +12 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/gates/check_env.sh +23 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/gates/check_paths.sh +20 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/gates/check_platform.sh +23 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/harness/README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/harness/envelopes/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/installer/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/installer/install.sh +125 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/telemetry/README.md +11 -0
- package/.agents/skills/pr-ops/README.md +3 -0
- package/.agents/skills/pr-ops/SKILL.md +109 -0
- package/.agents/skills/ratatoskr-a2a/README.md +3 -0
- package/.agents/skills/ratatoskr-a2a/SKILL.md +148 -0
- package/.agents/skills/rules-check-drift/SKILL.md +81 -0
- package/.agents/skills/saga-bearings/README.md +3 -0
- package/.agents/skills/saga-bearings/SKILL.md +26 -0
- package/.agents/skills/saga-bearings/assets/bearings.md +161 -0
- package/.agents/skills/saga-bearings/assets/board-template.html +731 -0
- package/.agents/skills/saga-bearings/assets/recap.md +56 -0
- package/.agents/skills/syn-recovery/README.md +3 -0
- package/.agents/skills/syn-recovery/SKILL.md +54 -0
- package/.agents/skills/tyr-check/README.md +3 -0
- package/.agents/skills/tyr-check/SKILL.md +218 -0
- package/.agents/skills/urdh-hold/README.md +3 -0
- package/.agents/skills/urdh-hold/SKILL.md +25 -0
- package/.agents/skills/urdh-hold/assets/decisions.md +15 -0
- package/.agents/skills/urdh-hold/assets/hold.md +54 -0
- package/.agents/skills/vor-diagnostics/README.md +3 -0
- package/.agents/skills/vor-diagnostics/SKILL.md +68 -0
- package/.agents/skills/ymir-host/README.md +3 -0
- package/.agents/skills/ymir-host/SKILL.md +34 -0
- package/.agents/skills/ymir-host/assets/desktop.md +36 -0
- package/.agents/skills/ymir-host/assets/omarchy.md +297 -0
- package/.agents/skills/ymir-host/assets/runbooks.md +15 -0
- package/.agents/skills/ymir-host/assets/thjazi.md +220 -0
- package/.agents/skills/ymir-host/assets/update.md +64 -0
- package/.agents/tests/assets/board-render-harness.mjs +117 -0
- package/.agents/tests/cmux-test-safety.sh +51 -0
- package/.agents/tests/fixtures.sh +291 -0
- package/.agents/tests/fm-afk-inject-e2e.test.sh +428 -0
- package/.agents/tests/fm-afk-inject-herdr-e2e.test.sh +536 -0
- package/.agents/tests/fm-afk-launch.test.sh +961 -0
- package/.agents/tests/fm-afk-pi-herdr-return-e2e.test.sh +297 -0
- package/.agents/tests/fm-afk-return.test.sh +283 -0
- package/.agents/tests/fm-arm-pretool-check.test.sh +482 -0
- package/.agents/tests/fm-ask-user-authority.test.sh +42 -0
- package/.agents/tests/fm-backend-autodetect-smoke.test.sh +176 -0
- package/.agents/tests/fm-backend-cmux-smoke.test.sh +188 -0
- package/.agents/tests/fm-backend-cmux.test.sh +1166 -0
- package/.agents/tests/fm-backend-herdr-eventwait-smoke.test.sh +136 -0
- package/.agents/tests/fm-backend-herdr-eventwait.test.py +106 -0
- package/.agents/tests/fm-backend-herdr-focus-flash-e2e.test.sh +409 -0
- package/.agents/tests/fm-backend-herdr-launcher-workspace-e2e.test.sh +437 -0
- package/.agents/tests/fm-backend-herdr-presentation-e2e.test.sh +1424 -0
- package/.agents/tests/fm-backend-herdr-prune-safety-e2e.test.sh +180 -0
- package/.agents/tests/fm-backend-herdr-respawn-idem-e2e.test.sh +182 -0
- package/.agents/tests/fm-backend-herdr-smoke.test.sh +355 -0
- package/.agents/tests/fm-backend-herdr-workspace-per-home-e2e.test.sh +251 -0
- package/.agents/tests/fm-backend-herdr.test.sh +4606 -0
- package/.agents/tests/fm-backend-orca.test.sh +1357 -0
- package/.agents/tests/fm-backend-tmux-smoke.test.sh +173 -0
- package/.agents/tests/fm-backend-zellij-smoke.test.sh +205 -0
- package/.agents/tests/fm-backend-zellij.test.sh +1360 -0
- package/.agents/tests/fm-backend.test.sh +1142 -0
- package/.agents/tests/fm-backlog-atomicity.test.sh +2302 -0
- package/.agents/tests/fm-backlog-handoff.test.sh +1360 -0
- package/.agents/tests/fm-bearings-board-render.test.sh +135 -0
- package/.agents/tests/fm-bearings-board.test.sh +414 -0
- package/.agents/tests/fm-bearings-snapshot.test.sh +1990 -0
- package/.agents/tests/fm-bootstrap-network-parallel.test.sh +316 -0
- package/.agents/tests/fm-bootstrap.test.sh +1178 -0
- package/.agents/tests/fm-branch-supervision.test.sh +552 -0
- package/.agents/tests/fm-brief.test.sh +785 -0
- package/.agents/tests/fm-busy-adapter-wiring.test.sh +324 -0
- package/.agents/tests/fm-busy-state.test.sh +465 -0
- package/.agents/tests/fm-calm-pi-extension.test.sh +3979 -0
- package/.agents/tests/fm-captain-hold-lifecycle.test.sh +1187 -0
- package/.agents/tests/fm-cd-pretool-check.test.sh +400 -0
- package/.agents/tests/fm-check-unregister.test.sh +198 -0
- package/.agents/tests/fm-classify-corr-token.test.sh +543 -0
- package/.agents/tests/fm-classify-decision-key.test.sh +340 -0
- package/.agents/tests/fm-claude-stop-autoarm-live-e2e.test.sh +164 -0
- package/.agents/tests/fm-claude-stop-autoarm.test.sh +1190 -0
- package/.agents/tests/fm-cmux-claude-composer-live-e2e.test.sh +110 -0
- package/.agents/tests/fm-codex-continuity-live-e2e.test.sh +55 -0
- package/.agents/tests/fm-composer-ghost.test.sh +716 -0
- package/.agents/tests/fm-composer-lib.test.sh +666 -0
- package/.agents/tests/fm-composer-matrix-live-e2e.test.sh +220 -0
- package/.agents/tests/fm-control-herdr-smoke.test.sh +149 -0
- package/.agents/tests/fm-control-relaunch.test.sh +1530 -0
- package/.agents/tests/fm-control.test.sh +910 -0
- package/.agents/tests/fm-crew-state.test.sh +1610 -0
- package/.agents/tests/fm-cursor-harness.test.sh +404 -0
- package/.agents/tests/fm-cursor-primary-live-e2e.test.sh +217 -0
- package/.agents/tests/fm-cursor-primary.test.sh +708 -0
- package/.agents/tests/fm-daemon.test.sh +2740 -0
- package/.agents/tests/fm-documentation-audiences.test.sh +141 -0
- package/.agents/tests/fm-ensure-agents-md.test.sh +371 -0
- package/.agents/tests/fm-extension-binding.test.sh +2187 -0
- package/.agents/tests/fm-fleet-snapshot-view.test.sh +816 -0
- package/.agents/tests/fm-fleet-sync.test.sh +721 -0
- package/.agents/tests/fm-gate-refuse.test.sh +356 -0
- package/.agents/tests/fm-gitignore-config.test.sh +89 -0
- package/.agents/tests/fm-gotmp.test.sh +230 -0
- package/.agents/tests/fm-grok-continuity-live-e2e.test.sh +112 -0
- package/.agents/tests/fm-grok-harness.test.sh +117 -0
- package/.agents/tests/fm-grok-stop-live-e2e.test.sh +219 -0
- package/.agents/tests/fm-guard-stale-banner.test.sh +709 -0
- package/.agents/tests/fm-harness-adapter-instructions-live-e2e.test.sh +134 -0
- package/.agents/tests/fm-harness-adapter-references.test.sh +30 -0
- package/.agents/tests/fm-harness-liveness-drift-live-e2e.test.sh +151 -0
- package/.agents/tests/fm-herdr-lab.test.sh +243 -0
- package/.agents/tests/fm-herdr-session-cleanup-e2e.test.sh +146 -0
- package/.agents/tests/fm-herdr-session-cleanup.test.sh +329 -0
- package/.agents/tests/fm-herdr-submit-confirm-live-e2e.test.sh +125 -0
- package/.agents/tests/fm-herdr-version-floor-live-e2e.test.sh +144 -0
- package/.agents/tests/fm-home-summary-refresh.test.sh +971 -0
- package/.agents/tests/fm-inactive-reconcile.test.sh +485 -0
- package/.agents/tests/fm-kimi-harness.test.sh +687 -0
- package/.agents/tests/fm-lint-workflows.test.sh +532 -0
- package/.agents/tests/fm-lint.test.sh +1023 -0
- package/.agents/tests/fm-muse-harness.test.sh +932 -0
- package/.agents/tests/fm-muse-signals-live-e2e.test.sh +205 -0
- package/.agents/tests/fm-no-mistakes-required.test.sh +72 -0
- package/.agents/tests/fm-on.test.sh +507 -0
- package/.agents/tests/fm-opencode-primary-live-e2e.test.sh +357 -0
- package/.agents/tests/fm-operational-input.test.sh +160 -0
- package/.agents/tests/fm-peek-remote.test.sh +110 -0
- package/.agents/tests/fm-pending-reply.test.sh +1288 -0
- package/.agents/tests/fm-pi-branch-extension.test.sh +3182 -0
- package/.agents/tests/fm-pi-branch-live-e2e.test.sh +527 -0
- package/.agents/tests/fm-pi-primary-live-e2e.test.sh +345 -0
- package/.agents/tests/fm-pi-primary-types.test.sh +68 -0
- package/.agents/tests/fm-pi-watch-extension.test.sh +2843 -0
- package/.agents/tests/fm-pr-check-security.test.sh +2140 -0
- package/.agents/tests/fm-pr-merge.test.sh +2135 -0
- package/.agents/tests/fm-procevent-quota.test.sh +225 -0
- package/.agents/tests/fm-procevent-when.test.sh +406 -0
- package/.agents/tests/fm-procevent.test.sh +1745 -0
- package/.agents/tests/fm-project-origin.test.sh +110 -0
- package/.agents/tests/fm-public-followup.test.sh +2272 -0
- package/.agents/tests/fm-quota-array-dispatch-live-e2e.test.sh +526 -0
- package/.agents/tests/fm-quota-choose.test.sh +626 -0
- package/.agents/tests/fm-remote-backlog-handoff.test.sh +453 -0
- package/.agents/tests/fm-remote-doctor.test.sh +625 -0
- package/.agents/tests/fm-remote-entrypoint.test.sh +59 -0
- package/.agents/tests/fm-remote-job-orphan-reap.test.sh +205 -0
- package/.agents/tests/fm-remote-job.test.sh +768 -0
- package/.agents/tests/fm-remote-reply.test.sh +520 -0
- package/.agents/tests/fm-remote-secondmate-lifecycle-e2e.test.sh +1256 -0
- package/.agents/tests/fm-remote-secondmate-parent-binding.test.sh +326 -0
- package/.agents/tests/fm-remote-secondmate-trace-context.test.sh +310 -0
- package/.agents/tests/fm-remote-transport-lanes.test.sh +431 -0
- package/.agents/tests/fm-review-diff.test.sh +176 -0
- package/.agents/tests/fm-secondmate-harness.test.sh +2600 -0
- package/.agents/tests/fm-secondmate-lifecycle-e2e.test.sh +259 -0
- package/.agents/tests/fm-secondmate-liveness.test.sh +559 -0
- package/.agents/tests/fm-secondmate-reconcile.test.sh +732 -0
- package/.agents/tests/fm-secondmate-safety.test.sh +2972 -0
- package/.agents/tests/fm-secondmate-sync.test.sh +913 -0
- package/.agents/tests/fm-send-inbox-doorbell-live-e2e.test.sh +206 -0
- package/.agents/tests/fm-send-inbox.test.sh +352 -0
- package/.agents/tests/fm-send-popup-settle.test.sh +167 -0
- package/.agents/tests/fm-send-remote-delivery.test.sh +796 -0
- package/.agents/tests/fm-send-resolve-key.test.sh +551 -0
- package/.agents/tests/fm-send-secondmate-marker-herdr-e2e.test.sh +187 -0
- package/.agents/tests/fm-send-secondmate-marker.test.sh +278 -0
- package/.agents/tests/fm-send-settle.test.sh +147 -0
- package/.agents/tests/fm-send-strict.test.sh +241 -0
- package/.agents/tests/fm-session-lock-ancestry.test.sh +365 -0
- package/.agents/tests/fm-session-start.test.sh +2515 -0
- package/.agents/tests/fm-sessionstart-hook-live-e2e.test.sh +631 -0
- package/.agents/tests/fm-sessionstart-instruction-refresh-live-e2e.test.sh +230 -0
- package/.agents/tests/fm-sessionstart-nudge.test.sh +1039 -0
- package/.agents/tests/fm-shared-captain-inheritance.test.sh +404 -0
- package/.agents/tests/fm-spawn-batch.test.sh +148 -0
- package/.agents/tests/fm-spawn-dispatch-profile.test.sh +827 -0
- package/.agents/tests/fm-spawn-pool-base-freshen.test.sh +440 -0
- package/.agents/tests/fm-spawn-worktree-settle.test.sh +147 -0
- package/.agents/tests/fm-startup-memory-budget.test.sh +333 -0
- package/.agents/tests/fm-startup-network.test.sh +712 -0
- package/.agents/tests/fm-stow-cascade.test.sh +370 -0
- package/.agents/tests/fm-subagent-pretool-check.test.sh +291 -0
- package/.agents/tests/fm-supervision-events.test.sh +156 -0
- package/.agents/tests/fm-supervision-instructions.test.sh +189 -0
- package/.agents/tests/fm-tangle-guard.test.sh +277 -0
- package/.agents/tests/fm-task-delivery.test.sh +420 -0
- package/.agents/tests/fm-task-inbox.test.sh +513 -0
- package/.agents/tests/fm-teardown-endpoint-safety.test.sh +374 -0
- package/.agents/tests/fm-teardown.test.sh +2665 -0
- package/.agents/tests/fm-test-fixture-cleanup.test.sh +172 -0
- package/.agents/tests/fm-test-fixtures.test.sh +132 -0
- package/.agents/tests/fm-test-isolation-proof.test.sh +278 -0
- package/.agents/tests/fm-test-run.test.sh +1196 -0
- package/.agents/tests/fm-tmux-agent-liveness.test.sh +354 -0
- package/.agents/tests/fm-tmux-submit-busy.test.sh +340 -0
- package/.agents/tests/fm-tool-update-check.test.sh +1044 -0
- package/.agents/tests/fm-trace-context-lib.test.sh +253 -0
- package/.agents/tests/fm-trace-context-spawn.test.sh +581 -0
- package/.agents/tests/fm-transition-lib.test.sh +54 -0
- package/.agents/tests/fm-turnend-guard.test.sh +1822 -0
- package/.agents/tests/fm-update.test.sh +304 -0
- package/.agents/tests/fm-vendor-auth-probe.test.sh +395 -0
- package/.agents/tests/fm-voice-relay.test.sh +4741 -0
- package/.agents/tests/fm-wake-daemon-lifecycle-e2e.test.sh +171 -0
- package/.agents/tests/fm-wake-drain-open-decisions-cursor.test.sh +356 -0
- package/.agents/tests/fm-wake-drain-open-decisions.test.sh +226 -0
- package/.agents/tests/fm-wake-drain-unread-status.test.sh +379 -0
- package/.agents/tests/fm-wake-queue.test.sh +1224 -0
- package/.agents/tests/fm-watch-arm.test.sh +821 -0
- package/.agents/tests/fm-watch-checkpoint.test.sh +87 -0
- package/.agents/tests/fm-watch-recovery-loop.test.sh +223 -0
- package/.agents/tests/fm-watch-triage.test.sh +3889 -0
- package/.agents/tests/fm-watcher-lock.test.sh +1133 -0
- package/.agents/tests/fm-x-mode.test.sh +3042 -0
- package/.agents/tests/gleipnir-guard-pretool-check.test.sh +51 -0
- package/.agents/tests/gleipnir-machine-lock.test.sh +130 -0
- package/.agents/tests/herdr-test-safety.sh +42 -0
- package/.agents/tests/lib.sh +315 -0
- package/.agents/tests/remote-herdr-fixture.sh +125 -0
- package/.agents/tests/secondmate-helpers.sh +193 -0
- package/.agents/tests/smoke.test.sh +93 -0
- package/.agents/tests/wake-helpers.sh +338 -0
- package/.agents/tests/zellij-test-safety.sh +60 -0
- package/.agents/tools/README.md +10 -0
- package/.agents/tools/bin/tasks-cli +267 -0
- package/.agents/tools/tasks-cli.ts +216 -0
- package/AGENTS.md +454 -0
- package/CHANGELOG.md +881 -0
- package/LICENSE +1 -1
- package/NOTICE +63 -0
- package/README.md +113 -39
- package/RULES/01-domains.md +51 -0
- package/RULES/02-agents.md +78 -0
- package/RULES/03-houses.md +61 -0
- package/RULES/04-hoard.md +65 -0
- package/RULES/05-platforms.md +67 -0
- package/RULES/06-append-only.md +58 -0
- package/RULES/07-config.md +45 -0
- package/RULES/08-delivery-gate.md +75 -0
- package/RULES/README.md +20 -0
- package/bin/README.md +107 -0
- package/bin/a2a-mcp.sh +98 -0
- package/bin/a2a-serve.py +103 -0
- package/bin/a2a-serve.sh +8 -0
- package/bin/a2a-talk.sh +50 -0
- package/bin/a2abridge-ensure.sh +108 -0
- package/bin/agent-run.sh +43 -0
- package/bin/agents-config.sh +233 -0
- package/bin/apodex-smoke-test.sh +92 -0
- package/bin/bifrost-bridge.sh +112 -0
- package/bin/bifrost-ingress.sh +77 -0
- package/bin/bootstrap-macos.sh +107 -0
- package/bin/bootstrap-windows.ps1 +112 -0
- package/bin/branch-guard.sh +64 -0
- package/bin/brokk +73 -0
- package/bin/brokk-classify-lib.sh +1770 -0
- package/bin/brokk-lease-lib.sh +222 -0
- package/bin/brokk-lease.sh +193 -0
- package/bin/brokk-lint.sh +65 -0
- package/bin/brokk-send.sh +38 -0
- package/bin/brokk-update.sh +9 -0
- package/bin/brokk-wake-grant.sh +127 -0
- package/bin/brokk-wake-lib.sh +1849 -0
- package/bin/changelog-guard.sh +165 -0
- package/bin/crash-sense.sh +160 -0
- package/bin/desktop-place.sh +224 -0
- package/bin/docs-guard.sh +39 -0
- package/bin/editor-place.sh +207 -0
- package/bin/eindri-acclaim.sh +34 -0
- package/bin/eindri-control.sh +28 -0
- package/bin/eindri-role.sh +83 -0
- package/bin/eindri-seen.sh +41 -0
- package/bin/eindri-send.sh +15 -0
- package/bin/eindri-start.sh +85 -0
- package/bin/eindri-watch.sh +57 -0
- package/bin/einherjar-spawn.sh +576 -0
- package/bin/eir-doctor.sh +112 -0
- package/bin/erindi-brief.sh +271 -0
- package/bin/fleet-apply.sh +68 -0
- package/bin/github-deploy.sh +81 -0
- package/bin/gjallarhorn-expose.sh +102 -0
- package/bin/gjallarhorn-notify.sh +58 -0
- package/bin/gjallarhorn-purge.sh +54 -0
- package/bin/gjallarhorn-tunnel.sh +72 -0
- package/bin/gleipnir-lock-lib.sh +284 -0
- package/bin/groa-update.sh +122 -0
- package/bin/hall-snapshot.sh +92 -0
- package/bin/hamr-harness.sh +246 -0
- package/bin/heimdall-ssh-keys.sh +374 -0
- package/bin/herdr-agents.py +44 -0
- package/bin/herdr-ensure.sh +104 -0
- package/bin/herdr-run.sh +431 -0
- package/bin/hermes-ensure.sh +88 -0
- package/bin/hoard-lib.sh +25 -0
- package/bin/hodd.sh +78 -0
- package/bin/host-sense.sh +199 -0
- package/bin/huginn-research-worker.sh +108 -0
- package/bin/local-model-lock.sh +51 -0
- package/bin/mimir-bridge.py +226 -0
- package/bin/mimir-bridge.sh +87 -0
- package/bin/mimir-ingest.sh +131 -0
- package/bin/mimir.sh +113 -0
- package/bin/mjollnir-webhook.sh +59 -0
- package/bin/mjollnir.sh +85 -0
- package/bin/model-hardware.sh +82 -0
- package/bin/model-resolve.sh +147 -0
- package/bin/models-detect.sh +178 -0
- package/bin/nornir-cron-start.sh +162 -0
- package/bin/nornir-job-daily-briefing.sh +191 -0
- package/bin/nornir-job-git-sync.sh +152 -0
- package/bin/nornir-job-memory-housekeeping.sh +114 -0
- package/bin/nornir-job-observer.sh +166 -0
- package/bin/nornir-job-skillopt-sleep.sh +76 -0
- package/bin/omarchy-hook-install.sh +60 -0
- package/bin/omarchy-install.sh +148 -0
- package/bin/omarchy-plugins.sh +174 -0
- package/bin/omarchy-sense.sh +149 -0
- package/bin/perm-guard.sh +30 -0
- package/bin/pi-agent.sh +68 -0
- package/bin/pi-ensure.sh +77 -0
- package/bin/pi-local.sh +37 -0
- package/bin/pi-seat.sh +63 -0
- package/bin/prereq-ensure.sh +166 -0
- package/bin/private-guard.sh +38 -0
- package/bin/project-git.sh +55 -0
- package/bin/public-guard.sh +70 -0
- package/bin/ratatoskr.sh +49 -0
- package/bin/realm-lib.sh +32 -0
- package/bin/repo-scrub.sh +62 -0
- package/bin/rodd-operational-input.sh +250 -0
- package/bin/runes-append.sh +198 -0
- package/bin/saga-session-start.sh +172 -0
- package/bin/saga-sessionstart-run.sh +79 -0
- package/bin/saga-wake-drain.sh +41 -0
- package/bin/secret-guard.sh +63 -0
- package/bin/sessrumnir-ensure.sh +100 -0
- package/bin/sessrumnir-sync.sh +237 -0
- package/bin/sessrumnir.sh +91 -0
- package/bin/skillopt-setup.sh +76 -0
- package/bin/skuld-branch-outcome.sh +203 -0
- package/bin/skuld-branch-prompt.sh +101 -0
- package/bin/smidja-bootstrap.sh +90 -0
- package/bin/smidja-observe.sh +86 -0
- package/bin/syn-arm-pretool-check.sh +57 -0
- package/bin/syn-asset-pretool-check.sh +76 -0
- package/bin/syn-cd-pretool-check.sh +28 -0
- package/bin/syn-guard-pretool-check.sh +83 -0
- package/bin/syn-turnend-guard.sh +36 -0
- package/bin/syn-watch-arm.sh +99 -0
- package/bin/tailscale-sync.sh +190 -0
- package/bin/telegram-bot.sh +69 -0
- package/bin/toolchain.sh +74 -0
- package/bin/utgard.sh +111 -0
- package/bin/valhalla.sh +115 -0
- package/bin/valknut-load.sh +260 -0
- package/bin/vor-crew-state.sh +124 -0
- package/bin/wedge-notify.sh +47 -0
- package/bin/workspace-provision.sh +80 -0
- package/bin/workspace-rag.sh +150 -0
- package/bin/wyrd-db.sh +47 -0
- package/bin/yggdrasil.sh +152 -0
- package/bin/ymir-edit.sh +145 -0
- package/bin/ymir-install.sh +641 -0
- package/bin/ymir-invite.sh +93 -0
- package/bin/ymir-isolation.sh +88 -0
- package/bin/ymir-migrate.sh +61 -0
- package/bin/ymir-platform.sh +348 -0
- package/bin/ymir-say.sh +97 -0
- package/bin/ymir-setup-auth.sh +108 -0
- package/bin/ymir-validate.sh +173 -0
- package/bin/ymir.js +74 -16
- package/docs/Architecture.md +339 -0
- package/docs/design.md +351 -0
- package/docs/installations/README.md +63 -0
- package/docs/installations/ymir-home.md +93 -0
- package/docs/integration.md +105 -0
- package/docs/lore.md +1056 -0
- package/docs/research/agent-harnesses.md +290 -0
- package/docs/runbooks/README.md +19 -0
- package/docs/runbooks/a2a.md +91 -0
- package/docs/runbooks/agent-permissions.md +99 -0
- package/docs/runbooks/agents.md +57 -0
- package/docs/runbooks/models.md +69 -0
- package/docs/runbooks/realm-onboarding.md +60 -0
- package/docs/runbooks/secrets-and-hoard.md +60 -0
- package/docs/runbooks/updates-and-migrations.md +110 -0
- package/docs/runbooks/worktrees-isolation.md +72 -0
- package/docs/session-start.md +105 -0
- package/docs/skillopt-integration.md +321 -0
- package/docs/sync-system.md +66 -0
- package/docs/workspaces.md +104 -0
- package/docs/ymir-rut.md +260 -0
- package/package.json +44 -14
- package/packaging/build.sh +74 -0
- package/packaging/macos/Ymir Installer.command +43 -0
- package/packaging/windows/ymir-setup.nsi +74 -0
- package/scripts/README.md +22 -0
- package/scripts/electron.sh +210 -0
- package/scripts/start.sh +167 -0
- package/scripts/stop.sh +113 -0
- package/install.sh +0 -35
package/docs/lore.md
ADDED
|
@@ -0,0 +1,1056 @@
|
|
|
1
|
+
# YMIR — The Lore
|
|
2
|
+
|
|
3
|
+
> The system carries Norse names not as decoration but as **load-bearing allegory** — every name is chosen because the myth already explains the machine's job. The visual language is the same rule made visible: **carved, not skinned**. ([`docs/design.md`](design.md))
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## I. The Creation: Ymir, the Primordial Giant
|
|
8
|
+
|
|
9
|
+
In the old tale, there was nothing before the worlds but cold mist and embers of fire.
|
|
10
|
+
From their meeting in the Void — **Ginnungagap** — came the first being: the giant
|
|
11
|
+
**Ymir (Aurgelmir)**, the ancestor of everything. The gods slew him and made the
|
|
12
|
+
world from his body: flesh became the earth, blood the seas, bones the mountains,
|
|
13
|
+
hair the forests, skull the sky.
|
|
14
|
+
|
|
15
|
+
That is what this platform is. **Ymir** is the substrate — a single machine, a single
|
|
16
|
+
repo — the primordial body from which every realm of work is carved. Every service,
|
|
17
|
+
every repo, every tool this fleet ships is shaped from Ymir's frame and lives on it.
|
|
18
|
+
|
|
19
|
+
It is also the reason the UI looks the way it does. Nothing is painted onto Ymir;
|
|
20
|
+
everything is cut **from** him — chiseled bevels, hammered steel surfaces, runes
|
|
21
|
+
cut into obsidian. The design does not decorate the system; it exposes its bones.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## II. The Builders: Brokk and Eitri (Eindri)
|
|
26
|
+
|
|
27
|
+
After the world was made, the gods needed smiths. Two dwarf brothers are the
|
|
28
|
+
greatest craftsmen in the myths:
|
|
29
|
+
|
|
30
|
+
- **Brokk** works the **bellows** — he drives the forge, keeps the fire fed, drives
|
|
31
|
+
the work to completion even when he's bitten on the hand.
|
|
32
|
+
- **Eitri** (our **Eindri**) works the **craft** — the hands that shape the metal.
|
|
33
|
+
|
|
34
|
+
Together they out-forged the sons of Ivaldi and produced the Aesir's finest
|
|
35
|
+
treasures — chief among them **Mjölnir**, the hammer that returns to the hand.
|
|
36
|
+
|
|
37
|
+
That is the agent fleet:
|
|
38
|
+
|
|
39
|
+
- **Brokk** is the primary agent — the one who keeps the forge hot, drives each
|
|
40
|
+
task to a tangible artifact, and works through anything.
|
|
41
|
+
- **Eindri** workers are the delegated hands — isolated smiths struck off in
|
|
42
|
+
**Utgard** sandboxes so a single bad casting never shatters the forge.
|
|
43
|
+
|
|
44
|
+
Behind them stands a third worker of the same fabric: **Kaia**, the shaper of
|
|
45
|
+
the fleet itself (see §IV). She is not the hands or the bellows — she is the
|
|
46
|
+
**eye that remembers**, and the will that decides which smith takes which metal.
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## III. The World Tree and the Realms
|
|
51
|
+
|
|
52
|
+
The worlds are not separate — they hang in one tree, **Yggdrasil**, connected,
|
|
53
|
+
holding each other up. Same here: worktrees (*branches*) hold parallel effort
|
|
54
|
+
without collision, and every realm routes through the same trunk.
|
|
55
|
+
|
|
56
|
+
The nine worlds of the myth map onto Ymir's spaces:
|
|
57
|
+
|
|
58
|
+
| Realm of the myth | What it is in Ymir |
|
|
59
|
+
|---|---|
|
|
60
|
+
| **Svartalfaheim / Nidavellir** — the dwarf-halls under the earth | tenant workspaces — the shop floors |
|
|
61
|
+
| **Midgard** — the world of humans, middle, shared | cross-tenant shared assets & repos |
|
|
62
|
+
| **Utgard (Jötunheim)** — outside the wall, where giants dwell | the sandbox barrier — untrusted code runs *there*, never in the halls |
|
|
63
|
+
| **Yggdrasil** — the tree that binds all realms | git worktree isolation, zero-collision parallel edits |
|
|
64
|
+
| **Mimirsbrunn** — the well at the root of the tree | the engram memory engine — Kaia's and the platform's long-term memory |
|
|
65
|
+
|
|
66
|
+
### The Seven Gates
|
|
67
|
+
|
|
68
|
+
Ymir Rut, the long-form building plan ([`docs/ymir-rut.md`](ymir-rut.md)), is the
|
|
69
|
+
story of **seven interlocked daemons** standing at the gates of the tree — each a
|
|
70
|
+
myth-made-module:
|
|
71
|
+
|
|
72
|
+
| Gate | Daemon | Job |
|
|
73
|
+
|---|---|---|
|
|
74
|
+
| **Bifrost** | ingress gateway | the burning bridge — every crossing into Ymir passes over it |
|
|
75
|
+
| **Hlidskjalf** | control plane | Odin's high seat — the view of every realm |
|
|
76
|
+
| **Svartalfaheim** | tenant realms | the isolated dwarf-halls — `sandbox_isolated`, nothing bleeds between halls |
|
|
77
|
+
| **Brokk** | agent workers | the forge itself — autonomous workers that build, audit, transform |
|
|
78
|
+
| **Utgard** | ephemeral sandboxes | the walled realm — `docker_ephemeral`, sealed and destroyed after each task |
|
|
79
|
+
| **Yggdrasil** | worktree manager | the tree — `.yggdrasil` branches hold parallel work without collision |
|
|
80
|
+
| **Ratatoskr** | event bus / A2A backbone | the messenger — carries every word between all gates |
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## IV. The Well: Mimirsbrunn, Mimir, and Kaia
|
|
85
|
+
|
|
86
|
+
At the root of Yggdrasil lies **Mimirsbrunn**, the well of wisdom. **Mimir**
|
|
87
|
+
guards it; whoever drinks its water receives the memory of all things. Even Odin
|
|
88
|
+
paid an eye for a single drink.
|
|
89
|
+
|
|
90
|
+
In Ymir, the water is **engram** — an open-source cognitive memory library
|
|
91
|
+
(single-file SQLite + vector + full-text + local embeddings). The well is named
|
|
92
|
+
**Mimirsbrunn**. The one who speaks from the well — the oracle that answers what
|
|
93
|
+
we remember about a project before we act — is **Kaia**.
|
|
94
|
+
|
|
95
|
+
- Every meaningful action is **observed** into the well (`POST /observe`).
|
|
96
|
+
- Before any orchestration, the fleet **recalls** (`GET /recall`) what the well
|
|
97
|
+
remembers about this project.
|
|
98
|
+
- The ledger of the gods is written in runes, not ink — every action is inscribed
|
|
99
|
+
into **Runes**, the append-only audit ledger. A rune that is carved cannot be
|
|
100
|
+
un-carved.
|
|
101
|
+
|
|
102
|
+
**Kaia's charge.** She does not act on faith. Before she dispatches a single
|
|
103
|
+
smith she drinks from the well (recalls what this project has taught before) and
|
|
104
|
+
then she passes every plan through **the veil** — the anti-hallucination gate —
|
|
105
|
+
asking, *is this grounded in what the well holds, or is it spun from air?* Only
|
|
106
|
+
what passes is forged.
|
|
107
|
+
|
|
108
|
+
**Rule of the well:** memory is always a *boost, never a blocker* — a dry well
|
|
109
|
+
fires cold, but never stops the forge.
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## V. The Artifacts
|
|
114
|
+
|
|
115
|
+
The smiths forged the gods' weapons; the system ships the same by analogy:
|
|
116
|
+
|
|
117
|
+
- **Gungnir** — Odin's spear, which never misses its mark. The **skill
|
|
118
|
+
synthesis engine**: a skill is forged, validated in Utgard, then it hits its
|
|
119
|
+
target every time.
|
|
120
|
+
- **Mjölnir** — the hammer that returns. The **issue→PR pipeline**: it strikes,
|
|
121
|
+
and it comes back with a pull request in hand.
|
|
122
|
+
- **Bifrost** — the burning rainbow bridge to Asgard. The **gateway / reverse
|
|
123
|
+
proxy**: every ingress crosses it.
|
|
124
|
+
- **Heimdall** — the watchman who stands at Bifrost. **OAuth/security guard**:
|
|
125
|
+
nothing crosses the bridge unvouched — and the one who *signs every agent's
|
|
126
|
+
rune of introduction*, so no forged identity crosses either.
|
|
127
|
+
- **Gjallarhorn** — Heimdall's horn. The **Cloudflare tunnel**: outbound signal
|
|
128
|
+
carrying Ymir to the world.
|
|
129
|
+
- **Hlidskjalf** — Odin's high seat, from which he sees all the realms. The
|
|
130
|
+
**dashboard**: the sovereign's view of the whole fleet — fleet graph, the A2A
|
|
131
|
+
task stream, the well, the Runes, the reviews.
|
|
132
|
+
- **Skrymir** — the hulking giant who once tricked Thor himself. The **web file
|
|
133
|
+
browser**: the huge hand reaching into the halls, deceptively silent.
|
|
134
|
+
- **Ratatoskr** — the squirrel who runs the length of Yggdrasil, carrying
|
|
135
|
+
messages between the worlds. The **A2A 1.0 collaboration backbone**
|
|
136
|
+
(see §V.b below): every agent carries a **rune of introduction** — an Agent
|
|
137
|
+
Card naming its skills and its address, signed by Heimdall — and every task it
|
|
138
|
+
passes along the tree follows the old law of the messenger: state is announced,
|
|
139
|
+
work is tracked, gossip is endless and fast. Redis is the squirrel's nest; the
|
|
140
|
+
A2A task model is the word it carries.
|
|
141
|
+
- **Hermóðr** — the messenger god who traveled to Hel and back, crossing realms
|
|
142
|
+
to retrieve what was lost. The **MCP/A2A composition**: the bridge pattern where
|
|
143
|
+
the orchestrator delegates via A2A 1.0 horizontally, and specialists access
|
|
144
|
+
tools vertically via MCP. Composes two validated OSS standards so agents can
|
|
145
|
+
delegate horizontally while accessing tools vertically.
|
|
146
|
+
- **Valhalla** — the hall of the slain, where heroes are gathered and watched. The
|
|
147
|
+
**process health monitor**: PM2/Docker keeps every process's soul alive and watched.
|
|
148
|
+
- **Þjazi** — the experimental terminal backend that drives sub-agent panes.
|
|
149
|
+
Native per-pane agent state and push events; protocol 14+ required;
|
|
150
|
+
0.7.1/0.7.3/0.7.4/0.7.5/0.8.0 floors; presentation spaces on 0.8.0+. Þjazi
|
|
151
|
+
provides the terminal session while Yggdrasil continues to provide task
|
|
152
|
+
worktrees. When the Allfather spawns a sub-agent, Þjazi opens a visible terminal
|
|
153
|
+
pane pointing to the Yggdrasil worktree, enabling real-time observation of the
|
|
154
|
+
agent's typing, CLI execution, and test runs.
|
|
155
|
+
|
|
156
|
+
### V.b. The Runes of Introduction (Ratatoskr's law)
|
|
157
|
+
|
|
158
|
+
Every agent that joins the tree publishes a **rune of introduction** — its Agent
|
|
159
|
+
Card at `/.well-known/agent-card.json`: what it can do, how to reach it, and what
|
|
160
|
+
proof it carries. Discovery is by **capability, never by guessing an address**.
|
|
161
|
+
Heimdall signs the rune (JWS) so no agent can claim another's name. The message
|
|
162
|
+
law is simple, and unbroken:
|
|
163
|
+
|
|
164
|
+
1. Every message has a **task state** — submitted, working, done, failed — which
|
|
165
|
+
is *announced*, never whispered.
|
|
166
|
+
2. Terminal states cannot be restarted; retries are the sender's duty.
|
|
167
|
+
3. Every word spoken between realms is **observed into the well and carved into
|
|
168
|
+
Runes** — the squirrel gossips, but the ledger remembers.
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## VI. The Houses
|
|
173
|
+
|
|
174
|
+
The fleet **works for houses** — distinct brands under which the work is
|
|
175
|
+
published. Each house is a venture owned by WayOf, and each carries a piece of
|
|
176
|
+
the myth that names it — and a **seal**, the house accent cut into the rune it
|
|
177
|
+
wears on tags and marks (design.md §2.2).
|
|
178
|
+
|
|
179
|
+
| House | Name-sake | Seal | What the house does today |
|
|
180
|
+
|---|---|---|---|
|
|
181
|
+
| **Ymir Labs** | the primordial giant; the frame of the world | cyan `#38bdf8` | the platform itself: Ymir OS, Hlidskjalf, the agent fleet, Mimirsbrunn — the body everything else is carved from |
|
|
182
|
+
| **Brokk Forge** | the bellows-smith who drove the forging of Mjölnir | forge amber `#f59e0b` | engineering & build tooling: WayOf Command/Runecode, softwerefactory, wayofmono, the smidja |
|
|
183
|
+
| **Runestone Labs** (short: **Runir**) | the runes carved once, that cannot be un-carved | rune crimson `#f43f5e` | records & compliance: `.compliance` gates, rune auditing, docs, runbooks, research |
|
|
184
|
+
| **Muninn Labs** | the raven *(memory)* that flew for Odin daily | raven violet `#8b5cf6` | memory & knowledge: Anchor/wayofteams-mcp anchor-memory, Mimirsbrunn/engram, vector RAG |
|
|
185
|
+
| **Dvalin** | the dwarf smith of the finest crafted things | cold steel `#94a3b8` | crafted tools — OptiCat (HVAC Pro), Linkable, Todo, Desk, Material Files |
|
|
186
|
+
| **Utgard Studios** | the realm where the giants work, outside the walls | jötun magenta `#d946ef` | creative: WhyNot Productions (soul/growth media), AiPic (video), OpenChamber, sensual dojo, sensebit |
|
|
187
|
+
| **Askr** | the first man, shaped from an ash tree | ash green `#34d399` | human-centered products: Relocation Copilot, onboarding automation |
|
|
188
|
+
| **Mannheim** | *(holding — reserving a clan name with no myth yet)* | slate `#64748b` | holding; allocated when a new venture claims it |
|
|
189
|
+
|
|
190
|
+
> Houses are **names in the mythos, not subsystems** — they are the ventures the
|
|
191
|
+
> fleet ships under, mapped per ENTRY-004. A house may be split or merged only by
|
|
192
|
+
> a new append-only entry, never silently.
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
## VII. The Forge-Master's Rule (open source first)
|
|
197
|
+
|
|
198
|
+
The dwarves are the greatest smiths in the myths — but even they do not hammer
|
|
199
|
+
every nail themselves. The finest tools are **borrowed anvils**: proven weapons
|
|
200
|
+
already forged by others, taken up and named into the myth rather than rebuilt
|
|
201
|
+
from raw ore.
|
|
202
|
+
|
|
203
|
+
So it is here. Ymir forges only what makes it Ymir — **the UI and UX
|
|
204
|
+
(Hlidskjalf), the agent runtime (Brokk, Eindri, Kaia), and the collaboration
|
|
205
|
+
(Ratatoskr)**. Everything beneath that is a validated open-source engine given a
|
|
206
|
+
Norse name and a Norn-carved shell:
|
|
207
|
+
|
|
208
|
+
| Borrowed anvil | Norse name |
|
|
209
|
+
|---|---|
|
|
210
|
+
| engram (`engdbram`) | **Mimirsbrunn** |
|
|
211
|
+
| Redis (queue under the A2A task model) | **Ratatoskr**'s nest |
|
|
212
|
+
| `a2aproject/a2a` + SDKs (A2A 1.0) | the **Ratatoskr** protocol |
|
|
213
|
+
| Traefik/Caddy | **Bifrost** |
|
|
214
|
+
| OAuth2-proxy/Authentik + JWS signing | **Heimdall** |
|
|
215
|
+
| cloudflared | **Gjallarhorn** |
|
|
216
|
+
| Docker (rootless, network-none) | **Utgard** |
|
|
217
|
+
| MinIO/FileBrowser | **Skrymir** |
|
|
218
|
+
| PM2/Docker | **Valhalla** |
|
|
219
|
+
| the upstream `firstmate` distro, `.compliance`, the **Smíðja visualizer** | the **library of the halls** — existing, adopted, not rebuilt |
|
|
220
|
+
|
|
221
|
+
The rule: *does a validated OSS project already do this?* If yes, name it and
|
|
222
|
+
use it. Only what differentiates Ymir is smithed in Ymir's own forge.
|
|
223
|
+
|
|
224
|
+
---
|
|
225
|
+
|
|
226
|
+
## VIII. The Reforging
|
|
227
|
+
|
|
228
|
+
The giant is first carved from **light metals** — TypeScript, Python, React, Vue —
|
|
229
|
+
the working metals the smiths are most keen-handed with, so the whole of Ymir can
|
|
230
|
+
be raised and proven end to end. That is the law of the build: **the stack stays
|
|
231
|
+
simple for the agents; the agents stay good at their stack.**
|
|
232
|
+
|
|
233
|
+
When the machine works — every realm turning, every gate answering — the forging
|
|
234
|
+
is not done; it is *re-forged*. The seven gates are re-hammered in **Rut-steel**
|
|
235
|
+
(Rust, NATS, gRPC, libgit2 — the target spec in `docs/ymir-rut.md`): heavier,
|
|
236
|
+
faster, quieter. Every module is re-floored one-for-one into its Rut crate —
|
|
237
|
+
**never redesigned, only re-forged.** The contract each gate keeps is the same;
|
|
238
|
+
only the metal changes.
|
|
239
|
+
|
|
240
|
+
---
|
|
241
|
+
|
|
242
|
+
## IX. The Frame (how to read this repo)
|
|
243
|
+
|
|
244
|
+
1. **Ymir** is the body — one repo, one machine, all realms carved from it.
|
|
245
|
+
2. **Yggdrasil** is the tree — worktrees and branches keep parallel work alive
|
|
246
|
+
without collision.
|
|
247
|
+
3. **Svartalfaheim** holds the shop floors — never work outside your realm, a
|
|
248
|
+
dwarf never meddles in another's hall.
|
|
249
|
+
4. **Mimirsbrunn** is the well — drink before you act, water it afterwards.
|
|
250
|
+
5. **Runes** are the ledger — a rune carved stays carved; every significant
|
|
251
|
+
action is inscribed.
|
|
252
|
+
6. **Hermóðr** is the bridge — MCP/A2A composition: the orchestrator delegates
|
|
253
|
+
via A2A 1.0 horizontally, specialists access tools vertically via MCP.
|
|
254
|
+
Composes two validated OSS standards so agents can delegate horizontally
|
|
255
|
+
while accessing tools vertically.
|
|
256
|
+
7. **Ratatoskr** is the messenger — every agent carries its rune of
|
|
257
|
+
introduction, every word is task-tracked, observed, and carved.
|
|
258
|
+
8. **Kaia** is the eye — she drinks from the well before every dispatch and
|
|
259
|
+
passes every plan through the veil.
|
|
260
|
+
9. **Houses** are the ventures — the fleet forges for them, and honors them with
|
|
261
|
+
the names and seals they carry.
|
|
262
|
+
10. **The forge rule** — borrow the proven anvil, smith only what Ymir is
|
|
263
|
+
(UI/UX, the runtime, the collaboration) — and when all of it works end to
|
|
264
|
+
end, re-forge it in Rut steel.
|
|
265
|
+
|
|
266
|
+
*The giant is slain so the worlds may stand. The opposite is true here: Ymir
|
|
267
|
+
stands, and from it the worlds are carved — light metal first, Rut steel after.*
|
|
268
|
+
## X. The Skill Forge and the Borrowed Anvil (NEW)
|
|
269
|
+
|
|
270
|
+
The galdr chants that structure agent-tool interaction are not forged from raw ore —
|
|
271
|
+
they are **chiselled from proven patterns**, named into the myth and given a Norn-carved
|
|
272
|
+
shell. This is the Ymir way of the skill smith.
|
|
273
|
+
|
|
274
|
+
### The Three Levels of Skill Smithing
|
|
275
|
+
|
|
276
|
+
**Level 1 — The Borrowed Anvil**
|
|
277
|
+
Proven OSS projects already do the work. Ymir names them and gives them a Norse
|
|
278
|
+
identity, never rebuilding from raw ore.
|
|
279
|
+
|
|
280
|
+
| Borrowed anvil | Norse name | Domain |
|
|
281
|
+
|---|---|---|
|
|
282
|
+
| `engdbram` (PyPI `engdbram`, v2.2.1) | **Mimirsbrunn** | engram memory engine |
|
|
283
|
+
| Redis (queue under the A2A task model) | **Ratatoskr**'s nest | A2A task queue |
|
|
284
|
+
| `a2aproject/a2a` + SDKs (A2A 1.0) | the **Ratatoskr** protocol | agent↔agent horizontal delegation |
|
|
285
|
+
| Traefik/Caddy | **Bifrost** | gateway / reverse proxy |
|
|
286
|
+
| OAuth2-proxy/Authentik + JWS signing | **Heimdall** | auth / agent card signing |
|
|
287
|
+
| cloudflared | **Gjallarhorn** | outbound encrypted tunnel |
|
|
288
|
+
| Docker (rootless, network-none) | **Utgard** | ephemeral sandboxes |
|
|
289
|
+
| MinIO/FileBrowser | **Skrymir** | file browser |
|
|
290
|
+
| PM2/Docker | **Valhalla** | process health monitor |
|
|
291
|
+
| the upstream `firstmate` distro, `.compliance`, the **Smíðja visualizer** | the **library of the halls** | existing, adopted, not rebuilt |
|
|
292
|
+
| TOON (Token-Oriented Object Notation) | **Galdr** | token-efficient output format |
|
|
293
|
+
| principles.yaml (10 design principles) | the **runes of ergonomics** | CLI standards |
|
|
294
|
+
|
|
295
|
+
The rule: *does a validated OSS project already do this?* If yes, name it and use it.
|
|
296
|
+
Only what differentiates Ymir is smithed in Ymir's own forge.
|
|
297
|
+
|
|
298
|
+
**Level 2 — The Galdr Chant (new skills)**
|
|
299
|
+
When no validated OSS project exists, the galdr craftsperson writes a new skill
|
|
300
|
+
in the Ymir tradition — Norse-named, TOON-output, all 10 principles baked in.
|
|
301
|
+
|
|
302
|
+
The recent galdr family illustrates this:
|
|
303
|
+
|
|
304
|
+
- **`galdr`** — Agent experience incantation standards (renamed from `axi`, adapted TOON)
|
|
305
|
+
- **`tyr-check`** — Ymir Galdr compliance checker (renamed from `axi-compliance`)
|
|
306
|
+
- **`brokk-craft`** — generates new Galdr-compliant skills using TOON format (NEW)
|
|
307
|
+
|
|
308
|
+
Each carries the same 10 principles, each Norse-named, each adapted for Ymir's
|
|
309
|
+
architecture rather than copied wholesale.
|
|
310
|
+
|
|
311
|
+
**Level 3 — The Frame Integration**
|
|
312
|
+
New skills are not dropped into the repo — they are ** framed** into the Ymir
|
|
313
|
+
structure:
|
|
314
|
+
|
|
315
|
+
- Skill index: `.agents/skills/README.md` tracks every galdr skill
|
|
316
|
+
- Compliance gate: `tyr-check` runs on every new skill before merge
|
|
317
|
+
- Frame placement: skills live in `.agents/skills/<norse-name>/SKILL.md`
|
|
318
|
+
- Session integration: each skill declares its hook or skill-path in its frontmatter
|
|
319
|
+
- The frame remembers: every significant action is observed into Mimirsbrunn
|
|
320
|
+
before the skill is considered "live"
|
|
321
|
+
|
|
322
|
+
Once all five gates pass, the skill is "forged" — it joins the library of the halls
|
|
323
|
+
and is available via `npx skills add <owner>/<repo> --skill <name>` or as a managed
|
|
324
|
+
plugin in `.config/opencode/plugins/`.
|
|
325
|
+
|
|
326
|
+
### The Aett of Skill Naming
|
|
327
|
+
|
|
328
|
+
Ymir skills follow an **aett** (Norse: "a family of eight") naming pattern:
|
|
329
|
+
|
|
330
|
+
| Aett name | Pattern | Example |
|
|
331
|
+
|---|---|---|
|
|
332
|
+
| **galdr-** | incantation / chant standards | `galdr`, `tyr-check`, `brokk-craft` |
|
|
333
|
+
| **mimir-** | memory / recall | (planned) |
|
|
334
|
+
| **yggd-** | tree / worktree | (planned) |
|
|
335
|
+
| **rat-** | messenger / A2A | `ratatoskr` (bus), `rat-***`-axi (community) |
|
|
336
|
+
| **heimd-** | gate / guard | (planned) |
|
|
337
|
+
| **bifr-** | bridge / gateway | (planned) |
|
|
338
|
+
| **val-** | hall / health | `valhalla` (process monitor) |
|
|
339
|
+
| **skyr-** | giant / file scope | `skrymir` (file browser) |
|
|
340
|
+
|
|
341
|
+
New skills are assigned to the aett that best matches their domain. The galdr aett
|
|
342
|
+
is the first tier: skills that structure agent-tool ergonomics and output format.
|
|
343
|
+
|
|
344
|
+
### The Forging Verification
|
|
345
|
+
|
|
346
|
+
Before a new galdr skill is considered forged, it must pass:
|
|
347
|
+
|
|
348
|
+
1. **TOON output test** — all stdout output uses TOON format, measured ~40% smaller
|
|
349
|
+
than equivalent JSON across 3 sample outputs
|
|
350
|
+
2. **Principle compliance** — all 10 design principles assessed via `tyr-check`
|
|
351
|
+
3. **Norse name validity** — skill name follows the aett pattern, not a random label
|
|
352
|
+
4. **Frame integration** — SKILL.md placed in `.agents/skills/<name>/`, referenced in
|
|
353
|
+
`.agents/skills/README.md`, daily briefing notes the new forge entry
|
|
354
|
+
5. **Mimirsbrunn observation** — the skill's creation is observed into the well
|
|
355
|
+
(`POST /observe`) before it is deemed "live"
|
|
356
|
+
|
|
357
|
+
Once all five gates pass, the skill is "forged" — it joins the library of the halls
|
|
358
|
+
and is available via `npx skills add <owner>/<repo> --skill <name>` or as a managed
|
|
359
|
+
plugin in `.config/opencode/plugins/`.
|
|
360
|
+
|
|
361
|
+
---
|
|
362
|
+
|
|
363
|
+
## XI. Smíðja — the Smithy (the Software Factory)
|
|
364
|
+
|
|
365
|
+
Norse: **Smíðja** is the *smithy* — the workshop where the metal is actually worked.
|
|
366
|
+
Ymir's smiths (Brokk, the Eindri) are the hands; **Smíðja is the shop floor they work
|
|
367
|
+
on**: the repeatable engine that takes an errand, marshals a team of agents, runs them
|
|
368
|
+
through bounded phases, and returns a forged artifact.
|
|
369
|
+
|
|
370
|
+
It is **not** the house. **Brokk Forge** is the venture (the brand the engineering work
|
|
371
|
+
ships under); **Smíðja** is the machine inside it — *agents plus code*: deterministic
|
|
372
|
+
scripts own sequencing, retries and acceptance; coding agents work inside bounded
|
|
373
|
+
phases; typed JSON envelopes carry context between them; the whole run streams into a
|
|
374
|
+
trace so it can be watched and learned from. The old rule holds:
|
|
375
|
+
|
|
376
|
+
> *Agent proposes, code disposes.*
|
|
377
|
+
|
|
378
|
+
**Völundr** — Wayland the Smith, the craftiest smith in the Norse tales — is the master
|
|
379
|
+
who runs the shop floor. Where **Kaia** is the eye by the well (Ymir-wide orchestration:
|
|
380
|
+
recall, veil, dispatch), **Völundr** is Smíðja's own orchestrator: the smith who
|
|
381
|
+
reads the roster, sets the chain, and drives each phase to its acceptance gate. Two
|
|
382
|
+
seats, two roles: Kaia decides *what* is forged; Völundr decides *how* the smithy runs.
|
|
383
|
+
|
|
384
|
+
| Aspect | Name | What it is |
|
|
385
|
+
|---|---|---|
|
|
386
|
+
| The workshop / engine | **Smíðja** | the smithy — rosters, phases, envelopes, retries, acceptance |
|
|
387
|
+
| The master smith | **Völundr** | the Smíðja orchestrator (Kaia's seat inside Smíðja) |
|
|
388
|
+
| The observation window | **Smíðja's eye** | the trace visualizer — runs, lanes, phases, decisions, stats |
|
|
389
|
+
|
|
390
|
+
### Naming rationale
|
|
391
|
+
|
|
392
|
+
- **Smíðja** was once floated as the *platform* name and set aside — the platform is
|
|
393
|
+
and remains **Ymir** (the body); Smíðja is correctly scoped now to the *workshop*
|
|
394
|
+
inside it. Nothing on the shop floor is the body; it is where the body is worked.
|
|
395
|
+
- **Völundr** is free of collisions and names precisely the orchestrating craftsman.
|
|
396
|
+
It does not replace Kaia in Ymir; it names **Kaia's seat inside Smíðja**.
|
|
397
|
+
|
|
398
|
+
### The rule of the shop
|
|
399
|
+
|
|
400
|
+
1. Every errand enters as a **team** (roster), never a loose agent.
|
|
401
|
+
2. Work happens in **bounded phases**; a phase ends only at its acceptance gate.
|
|
402
|
+
3. Context crosses phases only in **typed envelopes** — never by guessing.
|
|
403
|
+
4. Every run is **observed** — the trace is the shop's memory (Mimirsbrunn) and its
|
|
404
|
+
ledger (Runes). A run that is not watched cannot be trusted.
|
|
405
|
+
5. **The smithy is borrowed, not rebuilt** — Smíðja adopts the validated upstream
|
|
406
|
+
engine and wears the Norse name, as every borrowed anvil in §VII does.
|
|
407
|
+
|
|
408
|
+
Smíðja can be watched *beside* Hlidskjalf, or from within it — the two seats of the
|
|
409
|
+
same Allfather: Hlidskjalf for the whole of Ymir, Smíðja for the work in the fire.
|
|
410
|
+
|
|
411
|
+
*The bellows feed the flame; the smith reads the metal; the shop remembers every blow.*
|
|
412
|
+
|
|
413
|
+
## XII. Smíðja's Eye — the trace visualizer (ports & how it is raised)
|
|
414
|
+
|
|
415
|
+
Smíðja's work is only as trustworthy as the sight of it. The observer (**Huginn**)
|
|
416
|
+
keeps the ledger; **Smíðja's eye** is the live trace UI — a Vue + Bun app that
|
|
417
|
+
polls the smithy's own SQLite trace and draws the run: sessions, phase lanes,
|
|
418
|
+
envelopes, gates and their evidence, decisions, stats, and Völundr's memory.
|
|
419
|
+
|
|
420
|
+
One trace, one face — plus an optional dev face:
|
|
421
|
+
|
|
422
|
+
| Face | Port | What it is |
|
|
423
|
+
|---|---|---|
|
|
424
|
+
| API + built UI | `127.0.0.1:8437` | Bun server, read-only over `smidja/smidja_data/smidja.db` (`bun:sqlite`); serves the built Vue `dist/` on the same port |
|
|
425
|
+
| Dev UI (optional) | `127.0.0.1:8438` | Vite dev server, only with `SMIDJA_VIZ_DEV=1`; proxies `/api` → `:8437` |
|
|
426
|
+
|
|
427
|
+
Open the visualizer at **`http://127.0.0.1:8437/`**.
|
|
428
|
+
|
|
429
|
+
- The trace DB is **repo-local**: `$YMIR_ROOT/smidja/smidja_data/smidja.db`.
|
|
430
|
+
Any Smíðja run writes it; the Hlidskjalf gates (Sessions / Trace / Decisions /
|
|
431
|
+
Stats) and this visualizer both read it.
|
|
432
|
+
- Ports are overridable: `SMIDJA_VIZ_API_PORT`, `SMIDJA_VIZ_UI_PORT`. The SPA's
|
|
433
|
+
link uses `VITE_VISUALIZER_URL` (default `http://127.0.0.1:8437`).
|
|
434
|
+
|
|
435
|
+
### How it is raised
|
|
436
|
+
|
|
437
|
+
`scripts/start.sh` raises the whole seat in one command, and `scripts/stop.sh`
|
|
438
|
+
lowers it:
|
|
439
|
+
|
|
440
|
+
1. Hlidskjalf SPA — `:3888`
|
|
441
|
+
2. Hlidskjalf gate API — `:3889` (`apps/hlidskjalf/server`, reads the runtime)
|
|
442
|
+
3. Smíðja visualizer — `:8437` (`CMD_DB=<repo>/smidja/smidja_data/smidja.db`; API + built UI)
|
|
443
|
+
4. Nornir cron + Bifrost bridge
|
|
444
|
+
|
|
445
|
+
```bash
|
|
446
|
+
scripts/start.sh # raise: SPA :3888 · gate API :3889 · visualizer :8437
|
|
447
|
+
scripts/stop.sh # lower them all
|
|
448
|
+
```
|
|
449
|
+
|
|
450
|
+
The **Sessions** gate (Hlidskjalf) carries **Open visualizer**, which opens
|
|
451
|
+
`http://127.0.0.1:8437` in a new tab; it also has **Refresh**, and the app polls
|
|
452
|
+
`smidja.db` every five seconds so a newly-finished run appears on its own.
|
|
453
|
+
Hlidskjalf and the visualizer are two windows on the same smithy: the seat that
|
|
454
|
+
sees all of Ymir, and the eye on the work in the fire. Open them side by side.
|
|
455
|
+
|
|
456
|
+
*The seeress keeps the ledger; the eye keeps the fire in view.*
|
|
457
|
+
|
|
458
|
+
## XIII. The Seating (the Sága digest at session open)
|
|
459
|
+
|
|
460
|
+
When a harness opens inside Ymir, Brokk does not begin mid-thought. Before the
|
|
461
|
+
first word, the seat is taken and the realm is read aloud.
|
|
462
|
+
|
|
463
|
+
**Sága** the seeress speaks first. She is the order of the session open: she binds
|
|
464
|
+
the seat with **Gleipnir** so that one session, and only one, holds the reins; she
|
|
465
|
+
raises **Bifrost**, the bridge, so the voice reaches the models beyond the wall;
|
|
466
|
+
she wakes the **Nornir**, who set the day's schedule and keep it; and she recites
|
|
467
|
+
the state of the house — the lock, the waiting wakes, the fleet, the realm, the
|
|
468
|
+
Allfather's standing word. Only then does the first turn begin.
|
|
469
|
+
|
|
470
|
+
Her recitation is a **whisper, not a horn**. It is laid into Brokk's mind and not
|
|
471
|
+
onto the screen; a stranger watching the transcript sees only Brokk greet the
|
|
472
|
+
Allfather, and mistakes the silence for an empty seat. But the seat was taken: the
|
|
473
|
+
lock is bound, the bridge is up, and the Nornir are already at their loom. The
|
|
474
|
+
proof is not in what is shown; it is in what is running.
|
|
475
|
+
|
|
476
|
+
The harnesses differ in how they hear her. Some are asked politely and may tarry;
|
|
477
|
+
the stronger ones run her words unbidden, before the first question is even read.
|
|
478
|
+
Ymir prefers the latter wherever the metal allows it.
|
|
479
|
+
|
|
480
|
+
This is borrowed craft, as all good craft is: the pattern came from a proven
|
|
481
|
+
distro of agents, and Ymir clad it in its own names. The seeress keeps her old
|
|
482
|
+
work; only her garb is Norse. The plain telling of the mechanism — the tiers, the
|
|
483
|
+
stages, the means of proof — lives in [`docs/session-start.md`](session-start.md).
|
|
484
|
+
|
|
485
|
+
*The seeress speaks before the smith lifts the hammer; the wise seat is taken
|
|
486
|
+
before the first blow.*
|
|
487
|
+
|
|
488
|
+
## XIV. The Open Forge (external contribution)
|
|
489
|
+
|
|
490
|
+
Ymir is not a closed hall. Anyone may fork the repo, work in their own copy, and
|
|
491
|
+
send a pull request back to the main tree. The gate is open — the law is simple.
|
|
492
|
+
|
|
493
|
+
### The Fork Law
|
|
494
|
+
|
|
495
|
+
1. **Fork** the repo on GitHub.
|
|
496
|
+
2. **Clone** your fork, make changes on a feature branch.
|
|
497
|
+
3. **Open a PR** against `zerwiz/ymir:main` (or `zerwiz/ymir:main` if you
|
|
498
|
+
cloned from the personal fork).
|
|
499
|
+
4. **One thing per PR.** A PR does one focused thing — a fix, a feature, a
|
|
500
|
+
refactor.
|
|
501
|
+
5. **No secrets.** Never commit `.env.local`, `.env.realm`, API keys, tokens.
|
|
502
|
+
6. **Norse naming.** Name subsystems for the figure whose role matches its work.
|
|
503
|
+
7. **Human approval.** All PRs require explicit approval from the Allfather.
|
|
504
|
+
|
|
505
|
+
### The Agent's Path (Eindri)
|
|
506
|
+
|
|
507
|
+
Every agent in the Ymir tree carries the **pr-ops** skill — the pull request
|
|
508
|
+
lifecycle. It pairs with **git-ops** (branch creation, commits, sync) so the
|
|
509
|
+
full workflow is scripted:
|
|
510
|
+
|
|
511
|
+
```
|
|
512
|
+
1. git-ops create_branch → feat/my-change
|
|
513
|
+
2. Make changes, commit (git-ops safe_commit)
|
|
514
|
+
3. git-ops sync_upstream → push + rebase
|
|
515
|
+
4. pr-ops pr-create feat/my-change → opens PR
|
|
516
|
+
5. pr-ops pr-status → check CI
|
|
517
|
+
6. pr-ops pr-merge → request human approval
|
|
518
|
+
```
|
|
519
|
+
|
|
520
|
+
The skill is at `.agents/skills/pr-ops/SKILL.md`. It is the standard path for
|
|
521
|
+
any agent that needs to send work back to the main tree.
|
|
522
|
+
|
|
523
|
+
### The Repository Today
|
|
524
|
+
|
|
525
|
+
The repo is the body — one tree, one machine, all realms carved from it.
|
|
526
|
+
It carries:
|
|
527
|
+
|
|
528
|
+
- **The platform** — Hlidskjalf (portal), Brokk (agent runtime), Ratatoskr (A2A)
|
|
529
|
+
- **The smithy** — Smíðja (agent factory, Völundr orchestrator)
|
|
530
|
+
- **The realms** — Svartalfaheim (tenant workspaces), Midgard (shared assets)
|
|
531
|
+
- **The gates** — Bifrost, Heimdall, Gjallarhorn, Utgard, Yggdrasil
|
|
532
|
+
- **The skills** — 21+ Norse-named capabilities in `.agents/skills/`
|
|
533
|
+
- **The plans** — 20+ architectural plans in `docs/plans/`
|
|
534
|
+
- **The lore** — this file, the load-bearing allegory
|
|
535
|
+
|
|
536
|
+
*The forge is open. The hammer falls for anyone who brings good metal.*
|
|
537
|
+
|
|
538
|
+
## XV. The Allfather's Seat (and the cloth of the halls)
|
|
539
|
+
|
|
540
|
+
There is one operator, and it is the **Allfather**. The smithy was borrowed from
|
|
541
|
+
an older shop and still calls the caller *engineer* in its ledgers — that is the
|
|
542
|
+
borrowed word and it stays in the books, but in the halls of Hlidskjalf the seat
|
|
543
|
+
is named true. When the ledger of runs is read, the column is **Allfather**.
|
|
544
|
+
When a phase is traced, the one who called it is the Allfather. No borrowed
|
|
545
|
+
title is worn on the wall.
|
|
546
|
+
|
|
547
|
+
### The cloth of the halls
|
|
548
|
+
|
|
549
|
+
Every hall wears the same cloth. A picker, a list, a form — none of them hangs
|
|
550
|
+
raw. A list that spills past the frame, or a control that ignores the realm's
|
|
551
|
+
tint and steel, is a hall that was left unroofed. Three rules hold:
|
|
552
|
+
|
|
553
|
+
1. **The realm's cloth.** Colours, radius, and type come from the theme tokens —
|
|
554
|
+
never a stock browser control dropped in bare.
|
|
555
|
+
2. **The frame holds.** Long catalogs are held in a scroll of the hall's making,
|
|
556
|
+
searched and thinned, so the wall never stretches to the floor.
|
|
557
|
+
3. **The hand reaches.** Anything the eye sees, the hand can touch: the prompts
|
|
558
|
+
of an agent are opened from that agent, not hunted in a separate room.
|
|
559
|
+
|
|
560
|
+
### The three new seats
|
|
561
|
+
|
|
562
|
+
- The **Ledger of Runs** — the smithy's whole account rendered true: runs,
|
|
563
|
+
tokens, cache and cost, the local and the cloud split, and what the work
|
|
564
|
+
would have cost on the great vendors. Every figure is counted, none guessed.
|
|
565
|
+
- **Kaia's Long Table** — the oracle's chat: she keeps the last **forty**
|
|
566
|
+
exchanges in view, and she **drinks from the well before every dispatch**, so
|
|
567
|
+
no answer is spoken dry. The thread is hers to keep, split, and clear.
|
|
568
|
+
- The **Prompt Anvil** — in the Forge, the words that command each agent are
|
|
569
|
+
laid open and may be struck and re-set by the Allfather's own hand.
|
|
570
|
+
|
|
571
|
+
*One seat, one cloth, one open anvil: the hall is built for the hand that
|
|
572
|
+
calls.*
|
|
573
|
+
|
|
574
|
+
## XVI. The Binding and the Watch (Gleipnir, Skuld, Valknut)
|
|
575
|
+
|
|
576
|
+
Three mechanisms hold the fleet together — a lock, a ledger of futures, and a
|
|
577
|
+
knot that binds the load.
|
|
578
|
+
|
|
579
|
+
### Gleipnir — the binding lock
|
|
580
|
+
|
|
581
|
+
**Gleipnir** was the ribbon that bound the great wolf Fenrir — thin, unbreakable,
|
|
582
|
+
forged from six things: the sound of a cat's footfall, the beard of a woman,
|
|
583
|
+
the roots of a mountain, the sinews of a bear, the breath of a fish, and the
|
|
584
|
+
spit of a bird. In Ymir, Gleipnir is the **session lock** — one session, one
|
|
585
|
+
reins. When Sága speaks at session open, she binds Gleipnir so no other harness
|
|
586
|
+
may hold the seat. The lock is a file (`.lock`) that holds the live PID of the
|
|
587
|
+
harness process; when the process dies, the lock breaks.
|
|
588
|
+
|
|
589
|
+
- `bin/gleipnir-lock-lib.sh` — lock/unlock primitives
|
|
590
|
+
- `bin/brokk-lease.sh` — acquire/release a lease (Gleipnir's grip)
|
|
591
|
+
- `bin/brokk-lease-lib.sh` — lease helpers
|
|
592
|
+
|
|
593
|
+
**Rule:** a broken lock means the seat is free; a held lock means the seat is
|
|
594
|
+
occupied. No two sessions may hold the same seat.
|
|
595
|
+
|
|
596
|
+
### Skuld — the branch outcome
|
|
597
|
+
|
|
598
|
+
**Skuld** is the youngest Norn — she who *shall be*. She sees the future of every
|
|
599
|
+
branch, the outcome of every merge, the shape of what will be. In Ymir, Skuld
|
|
600
|
+
is the **branch outcome tracker** — every branch that enters the tree is given
|
|
601
|
+
a prompt, a review, and an outcome. The outcomes are durable; they survive
|
|
602
|
+
reboots, resets, and context compaction.
|
|
603
|
+
|
|
604
|
+
- `bin/skuld-branch-prompt.sh` — generate the review prompt for a branch
|
|
605
|
+
- `bin/skuld-branch-outcome.sh` — record the outcome (approved, rejected,
|
|
606
|
+
merged, abandoned)
|
|
607
|
+
|
|
608
|
+
**Rule:** no branch merges without Skuld's verdict. The outcome is carved into
|
|
609
|
+
the branch's durable store and observed into Mimirsbrunn.
|
|
610
|
+
|
|
611
|
+
### Valknut — the load mechanism
|
|
612
|
+
|
|
613
|
+
**Valknut** is the knot of the slain — three interlocking triangles, the mark
|
|
614
|
+
of Odin's choice. In Ymir, Valknut is the **load mechanism** — it assembles
|
|
615
|
+
the agent config, the Eindri dispatch, the harness settings, and the startup
|
|
616
|
+
memory budget into a single coherent payload before the first turn.
|
|
617
|
+
|
|
618
|
+
- `bin/valknut-load.sh` — load the full agent configuration
|
|
619
|
+
- upstream `crew-dispatch.json` dispatch schema (provenance; Ymir ships `eindri-dispatch.json`)
|
|
620
|
+
- `.agents/config/eindri-dispatch.json` — Eindri dispatch schema
|
|
621
|
+
- `.agents/config/cron.yaml` — Nornir schedule
|
|
622
|
+
- `.agents/config/startup-memory-budget` — memory limits at boot
|
|
623
|
+
- `.agents/config/eindri-harness/` — harness profiles for Eindri workers
|
|
624
|
+
|
|
625
|
+
**Rule:** Valknut loads once at session start. What it loads is the shape of
|
|
626
|
+
the fleet for this session — agents, models, memory budget, cron schedule.
|
|
627
|
+
|
|
628
|
+
---
|
|
629
|
+
|
|
630
|
+
## XVII. The Diagnostics and the Brief (Vor, Erindi)
|
|
631
|
+
|
|
632
|
+
Two mechanisms govern how work enters the forge and how the fleet's health is
|
|
633
|
+
monitored.
|
|
634
|
+
|
|
635
|
+
### Vor — the vigilant one
|
|
636
|
+
|
|
637
|
+
**Vör** is the goddess who sees everything — she has a memory so sharp that
|
|
638
|
+
nothing escapes her. In Ymir, Vor is the **diagnostics and Eindri state** engine.
|
|
639
|
+
She bootstraps the fleet, checks Eindri state, and reports health.
|
|
640
|
+
|
|
641
|
+
- `bin/vor-crew-state.sh` — check the state of all Eindri workers
|
|
642
|
+
- `vor-diagnostics` skill — bootstrap + diagnostic reasoning
|
|
643
|
+
|
|
644
|
+
**Rule:** Vor runs before every dispatch. If the Eindri are unhealthy, the dispatch
|
|
645
|
+
is delayed or rerouted.
|
|
646
|
+
|
|
647
|
+
### Erindi — the errand
|
|
648
|
+
|
|
649
|
+
**Erindi** is the Norse word for *errand* or *brief*. In Ymir, the erindi is
|
|
650
|
+
the **task brief** — the structured format that carries a task from the Allfather
|
|
651
|
+
through Kaia to an Eindri worker. It defines the scope, the acceptance criteria,
|
|
652
|
+
the constraints, and the expected output.
|
|
653
|
+
|
|
654
|
+
- `bin/erindi-brief.sh` — generate and validate an erindi brief
|
|
655
|
+
|
|
656
|
+
**Rule:** every task enters as an erindi. No task is dispatched without a brief.
|
|
657
|
+
|
|
658
|
+
---
|
|
659
|
+
|
|
660
|
+
## XVIII. The Shape-Changer and the Consent Gate (Hamr, Frigg)
|
|
661
|
+
|
|
662
|
+
Two mechanisms govern how the fleet adapts and how consent is obtained.
|
|
663
|
+
|
|
664
|
+
### Hamr — the shape-changer
|
|
665
|
+
|
|
666
|
+
**Hamr** means *shape* or *form*. In the myths, shape-changers take different
|
|
667
|
+
forms to accomplish different tasks. In Ymir, Hamr is the **harness adapter** —
|
|
668
|
+
it translates between different agent harnesses (Pi, OpenCode, Claude Code,
|
|
669
|
+
Cursor) and presents a unified interface.
|
|
670
|
+
|
|
671
|
+
- `bin/hamr-harness.sh` — harness adapter script
|
|
672
|
+
- `hamr` skill — per-harness adapter reference
|
|
673
|
+
|
|
674
|
+
**Rule:** Hamr adapts; it does not decide. The harness shape changes; the
|
|
675
|
+
fleet's job does not.
|
|
676
|
+
|
|
677
|
+
### Frigg — the consent gate
|
|
678
|
+
|
|
679
|
+
**Frigg** is the queen, Odin's wife, who knows the fate of all but cannot
|
|
680
|
+
reveal it until it comes to pass. In Ymir, Frigg is the **consent gate** —
|
|
681
|
+
the authority that asks the user before any action that cannot be undone.
|
|
682
|
+
|
|
683
|
+
- `frigg-consent` skill — consent / ask-user authority gate
|
|
684
|
+
|
|
685
|
+
**Rule:** Frigg speaks before the hammer falls. No irreversible action proceeds
|
|
686
|
+
without her consent.
|
|
687
|
+
|
|
688
|
+
---
|
|
689
|
+
|
|
690
|
+
## XIX. The Earth and the Decision-Hold (Jörð, Urðr)
|
|
691
|
+
|
|
692
|
+
Two mechanisms govern project tracking and decision lifecycle.
|
|
693
|
+
|
|
694
|
+
### Jörð — the earth goddess
|
|
695
|
+
|
|
696
|
+
**Jörð** is the earth herself, mother of Thor. In Ymir, Jörð is the **project
|
|
697
|
+
registry** — the living record of every project, its posture, its delivery
|
|
698
|
+
state, its dependencies.
|
|
699
|
+
|
|
700
|
+
- `jord-projects` skill — project registry + delivery posture
|
|
701
|
+
|
|
702
|
+
**Rule:** Jörð remembers what exists. Before any new project is forged, Jörð
|
|
703
|
+
is consulted.
|
|
704
|
+
|
|
705
|
+
### Urðr — the decision-hold
|
|
706
|
+
|
|
707
|
+
**Urðr** is the eldest Norn — she who *was*. She measures the past, holds
|
|
708
|
+
decisions, and reconciles the Allfather's hold.
|
|
709
|
+
|
|
710
|
+
|
|
711
|
+
**Rule:** Urðr holds what has been decided. A decision held by Urðr cannot
|
|
712
|
+
be silently overwritten; it must be explicitly closed or updated.
|
|
713
|
+
|
|
714
|
+
---
|
|
715
|
+
|
|
716
|
+
## XX. The Recovery and the Away Mode (Sýn, Hvíld)
|
|
717
|
+
|
|
718
|
+
Two mechanisms govern worker health and idle supervision.
|
|
719
|
+
|
|
720
|
+
### Sýn — the seer
|
|
721
|
+
|
|
722
|
+
**Sýn** is one of the goddesses who visits every nine nights to watch over
|
|
723
|
+
the worlds. In Ymir, Sýn is the **stuck-worker recovery** playbook — when an
|
|
724
|
+
Eindri worker is stuck, failing, or unresponsive, Sýn intervenes.
|
|
725
|
+
|
|
726
|
+
- `syn-recovery` skill — stuck-worker recovery playbook
|
|
727
|
+
- `syn-arm-pretool-check.sh` — pre-tool check for arm
|
|
728
|
+
- `syn-cd-pretool-check.sh` — pre-tool check for CI/CD
|
|
729
|
+
- `syn-turnend-guard.sh` — turn-end guard
|
|
730
|
+
- `syn-watch-arm.sh` — watch arm
|
|
731
|
+
|
|
732
|
+
**Rule:** Sýn never lets a worker die in silence. A stuck worker is recovered
|
|
733
|
+
or replaced.
|
|
734
|
+
|
|
735
|
+
### Hvíld — the rest
|
|
736
|
+
|
|
737
|
+
**Hvíld** means *rest* or *idle*. In Ymir, Hvíld is the **away-mode
|
|
738
|
+
supervision** — when the Allfather is away, Hvíld keeps watch, handles
|
|
739
|
+
routine wakes, and batches escalations.
|
|
740
|
+
|
|
741
|
+
- `hvild-afk` skill — away-mode supervision
|
|
742
|
+
- `bin/saga-wake-drain.sh` — wake drain for Hvíld
|
|
743
|
+
|
|
744
|
+
**Rule:** Hvíld watches while the Allfather rests. It does not act; it
|
|
745
|
+
escalates.
|
|
746
|
+
|
|
747
|
+
---
|
|
748
|
+
|
|
749
|
+
## XXI. The Update and the Relay (Ymir-update, Gjallarhorn-relay)
|
|
750
|
+
|
|
751
|
+
Two mechanisms govern self-maintenance and external communication.
|
|
752
|
+
|
|
753
|
+
### Ymir-update — the self-update
|
|
754
|
+
|
|
755
|
+
**Ymir-update** is the **self-update mechanism** — it updates the running
|
|
756
|
+
system and its workers without human intervention, within bounds.
|
|
757
|
+
|
|
758
|
+
- `ymir` skill (update asset) — self-update the running system + workers
|
|
759
|
+
|
|
760
|
+
**Rule:** Ymir-update is safe. It never breaks the forge; it only sharpens
|
|
761
|
+
the tools.
|
|
762
|
+
|
|
763
|
+
### Gjallarhorn-relay — the public relay
|
|
764
|
+
|
|
765
|
+
**Gjallarhorn-relay** is the **public relay** — it posts replies to external
|
|
766
|
+
channels (X/Twitter, Discord) from inside the fleet.
|
|
767
|
+
|
|
768
|
+
- `gjallarhorn-relay` skill — public relay replies (X/Discord)
|
|
769
|
+
- `bin/gjallarhorn-notify.sh` — notify script
|
|
770
|
+
- `bin/telegram-bot.sh` — Telegram bot integration
|
|
771
|
+
|
|
772
|
+
**Rule:** Gjallarhorn-relay speaks only what the fleet has decided. It does
|
|
773
|
+
not originate; it broadcasts.
|
|
774
|
+
|
|
775
|
+
---
|
|
776
|
+
|
|
777
|
+
## XXII. The Nornir's Array (Nornir-events, Nornir-quota)
|
|
778
|
+
|
|
779
|
+
The Nornir do not just schedule — they select and source.
|
|
780
|
+
|
|
781
|
+
- **Nornir-events** — process→event sources. Every running process is
|
|
782
|
+
converted into an event that enters the fleet's event stream.
|
|
783
|
+
- **Nornir-quota** — quota-aware dispatch array selection. Before dispatch,
|
|
784
|
+
Nornir checks quotas and selects the right array of workers.
|
|
785
|
+
|
|
786
|
+
**Rule:** The Nornir see past, present, and future. They schedule (past),
|
|
787
|
+
select (present), and source (future).
|
|
788
|
+
|
|
789
|
+
---
|
|
790
|
+
|
|
791
|
+
## XXIII. The Agent Fleet (the Einherjar)
|
|
792
|
+
|
|
793
|
+
The Einherjar are the gathered warriors — the agents who serve the Allfather.
|
|
794
|
+
Each is named for the figure whose role matches its work.
|
|
795
|
+
|
|
796
|
+
| Agent | Norse | Role | File |
|
|
797
|
+
|-------|-------|------|------|
|
|
798
|
+
| **Brokk** | Brokk | Primary agent — the bellows, the forge driver | `.agents/agents/brokk.md` |
|
|
799
|
+
| **Sindri** | Sindri | The smith — code synthesis, refactoring, tests | `.agents/agents/sindri-developer.md` |
|
|
800
|
+
| **Bragi** | Bragi | The poet — marketing, content, social | `.agents/agents/bragi-marketer.md` |
|
|
801
|
+
| **Huginn** | Huginn | The thought — research, web search, analysis | `.agents/agents/huginn-researcher.md` |
|
|
802
|
+
| **Mimir** | Mimir | The planner — memory, recall, planning | `.agents/agents/mimir-planner.md` |
|
|
803
|
+
| **Kvasir** | Kvasir | The wisest — scout, reconnaissance | `.agents/agents/kvasir-scout.md` |
|
|
804
|
+
| **Forseti** | Forseti | The reconciler — reviewer, compliance | `.agents/agents/forseti-reviewer.md` |
|
|
805
|
+
| **Snotra** | Snotra | The modest — documenter, docs, runbooks | `.agents/agents/snotra-documenter.md` |
|
|
806
|
+
| **Galdr** | Galdr | The master builder — runtime, CLI, ergonomics | `.agents/agents/galdr.md` |
|
|
807
|
+
|
|
808
|
+
**Rule:** Every agent carries its rune of introduction (Agent Card). Every
|
|
809
|
+
agent reports to Brokk. Brokk reports to the Allfather.
|
|
810
|
+
|
|
811
|
+
---
|
|
812
|
+
|
|
813
|
+
## XXIV. The Midgard Commons
|
|
814
|
+
|
|
815
|
+
**Midgard** is the world of humans — the shared space between realms. It holds
|
|
816
|
+
what belongs to all houses, nothing to one.
|
|
817
|
+
|
|
818
|
+
| Path | What it holds |
|
|
819
|
+
|------|---------------|
|
|
820
|
+
| `midgard/design-system/` | Theme tokens, icons, rune glyphs, component rules |
|
|
821
|
+
| `midgard/company_wiki/` | Cross-tenant company knowledge |
|
|
822
|
+
| `midgard/github_org_repos/` | GitHub organization repo inventory |
|
|
823
|
+
| `midgard/shared-packages/` | Shared npm/Python packages |
|
|
824
|
+
| `midgard/infrastructure/` | DB schemas, Caddyfile, cloudflared, oauth2-proxy |
|
|
825
|
+
|
|
826
|
+
**Rule:** Midgard is shared. No realm may mutate another realm's Midgard assets.
|
|
827
|
+
|
|
828
|
+
---
|
|
829
|
+
|
|
830
|
+
## XXV. The Wyrd Database
|
|
831
|
+
|
|
832
|
+
**Wyrd** is fate — the inescapable shape of what will be. In Ymir, Wyrd is the
|
|
833
|
+
**workspace RAG database** — it indexes every file, every commit, every change,
|
|
834
|
+
so that recall is fast and accurate.
|
|
835
|
+
|
|
836
|
+
- `bin/wyrd-db.sh` — Wyrd database operations
|
|
837
|
+
- `bin/workspace-rag.sh` — workspace RAG indexing
|
|
838
|
+
|
|
839
|
+
**Rule:** Wyrd remembers everything. It does not judge; it retrieves.
|
|
840
|
+
|
|
841
|
+
---
|
|
842
|
+
|
|
843
|
+
## XXVI. The Toolchain and the Justfile
|
|
844
|
+
|
|
845
|
+
**The toolchain** is the unified entry point for all Ymir operations. It wraps
|
|
846
|
+
individual scripts, validates arguments, and routes to the right tool.
|
|
847
|
+
|
|
848
|
+
- `bin/toolchain.sh` — unified toolchain entry point
|
|
849
|
+
- `justfile` — task runner (replaces Makefile)
|
|
850
|
+
|
|
851
|
+
**Rule:** The toolchain is the door. Everything enters through it.
|
|
852
|
+
|
|
853
|
+
---
|
|
854
|
+
|
|
855
|
+
## XXVII. The Entity Graph
|
|
856
|
+
|
|
857
|
+
**The entity graph** is the knowledge graph of every company, project, and
|
|
858
|
+
relationship in Svartalfaheim. It maps ownership, dependencies, and delivery
|
|
859
|
+
posture.
|
|
860
|
+
|
|
861
|
+
- `svartalfaheim/way-of/workspace/memory/entity_graph/` — entity graph data
|
|
862
|
+
|
|
863
|
+
**Rule:** The entity graph is append-only. Changes are new entries, not edits.
|
|
864
|
+
|
|
865
|
+
---
|
|
866
|
+
|
|
867
|
+
## XXVIII. The Veil and the Glitnir Gate
|
|
868
|
+
|
|
869
|
+
Two gates govern what passes and what is reviewed.
|
|
870
|
+
|
|
871
|
+
### The Veil — the anti-hallucination gate
|
|
872
|
+
|
|
873
|
+
**The Veil** is the filter between what the well remembers and what is spoken.
|
|
874
|
+
Before Kaia dispatches a single smith, she passes every plan through the Veil,
|
|
875
|
+
asking: *is this grounded in what the well holds, or is it spun from air?*
|
|
876
|
+
|
|
877
|
+
**Rule:** Nothing passes the Veil without evidence from Mimirsbrunn.
|
|
878
|
+
|
|
879
|
+
### Glitnir — the review gate
|
|
880
|
+
|
|
881
|
+
**Glitnir** is the shining hall where the gods hold their judgments. In Ymir,
|
|
882
|
+
Glitnir is the **human review gate** — every PR, every merge, every production
|
|
883
|
+
deploy must pass through Glitnir. The Allfather is the judge.
|
|
884
|
+
|
|
885
|
+
**Rule:** Glitnir never auto-approves. Human approval is always required.
|
|
886
|
+
|
|
887
|
+
---
|
|
888
|
+
|
|
889
|
+
## XXIX. The Full Skill Index
|
|
890
|
+
|
|
891
|
+
The complete index of all Norse-named skills in Ymir:
|
|
892
|
+
|
|
893
|
+
| Skill | Norse | Purpose |
|
|
894
|
+
|-------|-------|---------|
|
|
895
|
+
| `galdr` | Galdr | Agent-CLI ergonomics + master builder of the runtime |
|
|
896
|
+
| `tyr-check` | Tyr | The judge — 10 Galdr principles + runtime gates |
|
|
897
|
+
| `smidja` | Smiðja | The smithy — roster, phases, envelopes, factory |
|
|
898
|
+
| `hvild-afk` | Hvíld | Away-mode supervision — routine wakes, batched escalations |
|
|
899
|
+
| `saga` | Sága | session bearings: fleet digest (/bearings) + recap (/ahoy) |
|
|
900
|
+
| `muninn-stow` | Muninn | Session-knowledge curation, routing, persistence |
|
|
901
|
+
| `jord-projects` | Jörð | Project registry + delivery posture |
|
|
902
|
+
| `urdh` | Urðr | Allfather-hold lifecycle |
|
|
903
|
+
| `frigg-consent` | Frigg | Consent / ask-user authority gate |
|
|
904
|
+
| `vor-diagnostics` | Vör | Bootstrap + diagnostic reasoning |
|
|
905
|
+
| `nornir` | Nornir | fate & schedule: events + quota |
|
|
906
|
+
| `gjallarhorn-relay` | Gjallarhorn | Public relay replies (X/Discord) |
|
|
907
|
+
| `eindri-homes` | Eindri | Isolated worker homes (provisioning) |
|
|
908
|
+
| `syn-recovery` | Sýn | Stuck-worker recovery playbook |
|
|
909
|
+
| `ymir` (update) | Ymir | Self-update the running system + workers |
|
|
910
|
+
| `hamr` | Hamr | Per-harness adapter reference |
|
|
911
|
+
| `pr-ops` | — | PR lifecycle — create, update, check status, request merge |
|
|
912
|
+
|
|
913
|
+
**Total: 21 skills.** All Norse-named except where the name was already taken
|
|
914
|
+
by a borrowed anvil (pr-ops). Local-model operation is a galdr asset, not a skill:
|
|
915
|
+
`assets/local-models.md`.
|
|
916
|
+
|
|
917
|
+
---
|
|
918
|
+
|
|
919
|
+
## XXX. The Complete Frame
|
|
920
|
+
|
|
921
|
+
How to read the full Ymir tree:
|
|
922
|
+
|
|
923
|
+
1. **Ymir** is the body — one repo, one machine, all realms carved from it.
|
|
924
|
+
2. **Yggdrasil** is the tree — worktrees and branches keep parallel work alive
|
|
925
|
+
without collision.
|
|
926
|
+
3. **Svartalfaheim** holds the shop floors — never work outside your realm.
|
|
927
|
+
4. **Midgard** is the commons — shared assets, nothing to one realm.
|
|
928
|
+
5. **Mimirsbrunn** is the well — drink before you act, water it afterwards.
|
|
929
|
+
6. **Runes** are the ledger — a rune carved stays carved.
|
|
930
|
+
7. **Ratatoskr** is the messenger — every agent carries its rune of introduction.
|
|
931
|
+
8. **Kaia** is the eye — she drinks from the well before every dispatch.
|
|
932
|
+
9. **Völundr** is the smithy master — Kaia's seat inside Smíðja.
|
|
933
|
+
10. **Gleipnir** is the lock — one session, one reins.
|
|
934
|
+
11. **Skuld** is the outcome — every branch has a verdict.
|
|
935
|
+
12. **Valknut** is the load — config assembled once at boot.
|
|
936
|
+
13. **Vor** is the watch — Eindri state checked before dispatch.
|
|
937
|
+
14. **Erindi** is the brief — every task enters structured.
|
|
938
|
+
15. **Hamr** is the shape — harness adapter, unified interface.
|
|
939
|
+
16. **Frigg** is the consent — no irreversible action without her word.
|
|
940
|
+
17. **Jörð** is the earth — project registry, living record.
|
|
941
|
+
18. **Urðr** is the past — decision-hold, reconciliation.
|
|
942
|
+
19. **Sýn** is the seer — stuck-worker recovery.
|
|
943
|
+
20. **Hvíld** is the rest — away-mode supervision.
|
|
944
|
+
21. **Wyrd** is the fate — workspace RAG database.
|
|
945
|
+
22. **The Veil** is the filter — nothing passes without well evidence.
|
|
946
|
+
23. **Glitnir** is the gate — human review, always required.
|
|
947
|
+
24. **Houses** are the ventures — the fleet forges for them.
|
|
948
|
+
25. **The Einherjar** are the agents — eight specialists, one primary.
|
|
949
|
+
26. **The toolchain** is the door — everything enters through it.
|
|
950
|
+
27. **The entity graph** is the map — ownership, dependencies, posture.
|
|
951
|
+
28. **The cloth of the halls** — realm colors, frame holds, hand reaches.
|
|
952
|
+
29. **The three seats** — Ledger of Runs, Kaia's Long Table, Prompt Anvil.
|
|
953
|
+
|
|
954
|
+
*The giant stands, and from it the worlds are carved — light metal first,
|
|
955
|
+
Rut steel after. The lock is bound, the bridge is up, the Nornir are at their
|
|
956
|
+
loom. The seat is taken. The forge is lit.*
|
|
957
|
+
|
|
958
|
+
Smíðja's work is only as trustworthy as the sight of it. The observer (**Huginn**)
|
|
959
|
+
keeps the ledger; **Smíðja's eye** is the live trace UI — a Vue + Bun app that
|
|
960
|
+
polls the smithy's own SQLite trace and draws the run: sessions, phase lanes,
|
|
961
|
+
envelopes, gates and their evidence, decisions, stats, and Völundr's memory.
|
|
962
|
+
|
|
963
|
+
One trace, one face — plus an optional dev face:
|
|
964
|
+
|
|
965
|
+
| Face | Port | What it is |
|
|
966
|
+
|---|---|---|
|
|
967
|
+
| API + built UI | `127.0.0.1:8437` | Bun server, read-only over `smidja/smidja_data/smidja.db` (`bun:sqlite`); serves the built Vue `dist/` on the same port |
|
|
968
|
+
| Dev UI (optional) | `127.0.0.1:8438` | Vite dev server, only with `SMIDJA_VIZ_DEV=1`; proxies `/api` → `:8437` |
|
|
969
|
+
|
|
970
|
+
Open the visualizer at **`http://127.0.0.1:8437/`**.
|
|
971
|
+
|
|
972
|
+
- The trace DB is **repo-local**: `$YMIR_ROOT/smidja/smidja_data/smidja.db`.
|
|
973
|
+
Any Smíðja run writes it; the Hlidskjalf gates (Sessions / Trace / Decisions /
|
|
974
|
+
Stats) and this visualizer both read it.
|
|
975
|
+
- Ports are overridable: `SMIDJA_VIZ_API_PORT`, `SMIDJA_VIZ_UI_PORT`. The SPA's
|
|
976
|
+
link uses `VITE_VISUALIZER_URL` (default `http://127.0.0.1:8437`).
|
|
977
|
+
|
|
978
|
+
### How it is raised
|
|
979
|
+
|
|
980
|
+
`scripts/start.sh` raises the whole seat in one command, and `scripts/stop.sh`
|
|
981
|
+
lowers it:
|
|
982
|
+
|
|
983
|
+
1. Hlidskjalf SPA — `:3888`
|
|
984
|
+
2. Hlidskjalf gate API — `:3889` (`apps/hlidskjalf/server`, reads the runtime)
|
|
985
|
+
3. Smíðja visualizer — `:8437` (`CMD_DB=<repo>/smidja/smidja_data/smidja.db`; API + built UI)
|
|
986
|
+
4. Nornir cron + Bifrost bridge
|
|
987
|
+
|
|
988
|
+
```bash
|
|
989
|
+
scripts/start.sh # raise: SPA :3888 · gate API :3889 · visualizer :8437
|
|
990
|
+
scripts/stop.sh # lower them all
|
|
991
|
+
```
|
|
992
|
+
|
|
993
|
+
The **Sessions** gate (Hlidskjalf) carries **Open visualizer**, which opens
|
|
994
|
+
`http://127.0.0.1:8437` in a new tab; it also has **Refresh**, and the app polls
|
|
995
|
+
`smidja.db` every five seconds so a newly-finished run appears on its own.
|
|
996
|
+
Hlidskjalf and the visualizer are two windows on the same smithy: the seat that
|
|
997
|
+
sees all of Ymir, and the eye on the work in the fire. Open them side by side.
|
|
998
|
+
|
|
999
|
+
*The seeress keeps the ledger; the eye keeps the fire in view.*
|
|
1000
|
+
|
|
1001
|
+
---
|
|
1002
|
+
|
|
1003
|
+
## XVII. The Renewal and the Healing (Gróa, Eir)
|
|
1004
|
+
|
|
1005
|
+
The tree does not stay young on its own. Two figures tend it when the work is
|
|
1006
|
+
not going forward but must still be made right: one who **renews**, and one who
|
|
1007
|
+
**heals**.
|
|
1008
|
+
|
|
1009
|
+
**Gróa** is the *völva* — the shamaness whose name means *to grow*. In the old
|
|
1010
|
+
tales she comes to mend what battle has left broken. In Ymir she is the
|
|
1011
|
+
**updater shaman**: she fast-forwards Brokk and every registered Eindri-home to
|
|
1012
|
+
the latest from origin — never forcing, never stashing, advancing only a clean
|
|
1013
|
+
fast-forward, and skipping anything dirty, diverged, or offline — then mends the
|
|
1014
|
+
tree forward through its migrations and fleet preferences. **Brokk** runs her;
|
|
1015
|
+
**Galdr** owns the assets she must be reflected in the moment the instruction
|
|
1016
|
+
surface moves (`galdr-reread`); the `groa-update` skill (`/updateBrokk`) is her
|
|
1017
|
+
door. She lives in `bin/groa-update.sh`; `bin/brokk-update.sh` is her old name,
|
|
1018
|
+
kept as an alias.
|
|
1019
|
+
|
|
1020
|
+
**Eir** is the goddess of healing, counted the best of physicians — she who
|
|
1021
|
+
mends and spares. In Ymir she is the **doctor**: she composes every surface that
|
|
1022
|
+
owns its own health (the `*-ensure.sh` tools, the memory well, the MCP wiring,
|
|
1023
|
+
the session lock, the migrations), tells the Allfather plainly which are whole
|
|
1024
|
+
and which are broken, and — on `fix` — mends what can be mended safely. Gróa
|
|
1025
|
+
keeps the tree *current*; Eir makes it *work*. She lives in `bin/eir-doctor.sh`.
|
|
1026
|
+
|
|
1027
|
+
Where **Gleipnir** binds one session to the reins and **Sýn** keeps the watch,
|
|
1028
|
+
Gróa and Eir keep the machine itself alive between those sessions: the one
|
|
1029
|
+
renewing, the other healing.
|
|
1030
|
+
|
|
1031
|
+
*The völva renews the tree; the healer mends what breaks under it.*
|
|
1032
|
+
|
|
1033
|
+
## XXXI. The Weaving of the Halls
|
|
1034
|
+
|
|
1035
|
+
Three halls stood apart — the high seat, the smithy, the seat by the fire —
|
|
1036
|
+
each wearing its own cloth, none sharing the stone and the bronze. Then the
|
|
1037
|
+
weave was thrown across them at once, and the halls became one look: the
|
|
1038
|
+
panels of the seat, the tokens of the smithy, the cuts of the high seat all
|
|
1039
|
+
read the same tokens, and the blue that had marked foreign text was struck
|
|
1040
|
+
from them. The default of the smithy was named **Fensalir**, the weaving
|
|
1041
|
+
halls themselves, and the old overrides still won when a user willed them.
|
|
1042
|
+
|
|
1043
|
+
And because the saga must be seen, not only read, the **Óðrerir** was raised
|
|
1044
|
+
on the landing — the cauldron of the mead of poetry, poured live: a deck
|
|
1045
|
+
of dealt slate, a carved ledger of what is underway and what has landed and
|
|
1046
|
+
what is charted, fed by real state from the machine. Every door in every
|
|
1047
|
+
hall gained the rune ᛟ, To the Hall, and the landing gained its own.
|
|
1048
|
+
|
|
1049
|
+
The smiths themselves became a woven thing: each finished work files its
|
|
1050
|
+
saga, the bridge wakes the forge-master, and the wake that would echo is
|
|
1051
|
+
guarded — once drained, it is not re-told. The realm took its name, the
|
|
1052
|
+
hoard was mapped, and the day's whole weave was folded into main and pushed
|
|
1053
|
+
to the world's door.
|
|
1054
|
+
|
|
1055
|
+
*The halls share one cloth; the mead pours; the rune points home; the saga
|
|
1056
|
+
files itself.*
|