@zerwiz/ymir 0.1.4 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/README.md +291 -0
- package/.agents/agents/bragi-marketer.md +111 -0
- package/.agents/agents/brokk.md +352 -0
- package/.agents/agents/forseti-reviewer.md +93 -0
- package/.agents/agents/frigg-consent.md +77 -0
- package/.agents/agents/groa-update.md +77 -0
- package/.agents/agents/hnoss-designer.md +69 -0
- package/.agents/agents/huginn-researcher.md +99 -0
- package/.agents/agents/jord-projects.md +78 -0
- package/.agents/agents/kvasir-scout.md +91 -0
- package/.agents/agents/mimir-planner.md +92 -0
- package/.agents/agents/muninn-stow.md +77 -0
- package/.agents/agents/saga-bearings.md +78 -0
- package/.agents/agents/sindri-developer.md +114 -0
- package/.agents/agents/snotra-documenter.md +105 -0
- package/.agents/agents/syn-recovery.md +78 -0
- package/.agents/agents/tyr-check.md +78 -0
- package/.agents/agents/urdh-hold.md +77 -0
- package/.agents/agents/volundr-smith.md +80 -0
- package/.agents/agents/vor-diagnostics.md +77 -0
- package/.agents/assets/agents/naming.md +50 -0
- package/.agents/assets/agents/registry.md +93 -0
- package/.agents/assets/agents/runtime.md +36 -0
- package/.agents/assets/agents/toon-tasks-cli.md +42 -0
- package/.agents/assets/templates/company_entity.template.md +37 -0
- package/.agents/backend/backends/cmux.sh +649 -0
- package/.agents/backend/backends/herdr-eventwait.py +157 -0
- package/.agents/backend/backends/herdr-workspace-move.py +114 -0
- package/.agents/backend/backends/herdr.sh +3386 -0
- package/.agents/backend/backends/orca.sh +290 -0
- package/.agents/backend/backends/tmux.sh +357 -0
- package/.agents/backend/backends/zellij.sh +700 -0
- package/.agents/backend/fm-afk-launch.sh +654 -0
- package/.agents/backend/fm-afk-return.sh +241 -0
- package/.agents/backend/fm-afk-start.sh +172 -0
- package/.agents/backend/fm-arm-command-policy.mjs +960 -0
- package/.agents/backend/fm-arm-pretool-check.sh +200 -0
- package/.agents/backend/fm-backend-hometag-lib.sh +52 -0
- package/.agents/backend/fm-backend.sh +981 -0
- package/.agents/backend/fm-backlog-handoff.sh +909 -0
- package/.agents/backend/fm-backlog-receive.sh +187 -0
- package/.agents/backend/fm-backlog-transition-lib.sh +779 -0
- package/.agents/backend/fm-bearings-board.sh +204 -0
- package/.agents/backend/fm-bearings-snapshot.sh +546 -0
- package/.agents/backend/fm-bootstrap.sh +1568 -0
- package/.agents/backend/fm-branch-outcome.sh +203 -0
- package/.agents/backend/fm-branch-prompt.sh +101 -0
- package/.agents/backend/fm-brief.sh +452 -0
- package/.agents/backend/fm-busy-event.sh +234 -0
- package/.agents/backend/fm-busy-lib.sh +986 -0
- package/.agents/backend/fm-captain-hold.sh +1001 -0
- package/.agents/backend/fm-cd-command-policy.mjs +153 -0
- package/.agents/backend/fm-cd-pretool-check.sh +190 -0
- package/.agents/backend/fm-check-lib.sh +74 -0
- package/.agents/backend/fm-check-register.sh +42 -0
- package/.agents/backend/fm-check-unregister.sh +52 -0
- package/.agents/backend/fm-classify-lib.sh +1770 -0
- package/.agents/backend/fm-claude-stop-autoarm.sh +334 -0
- package/.agents/backend/fm-composer-lib.sh +1416 -0
- package/.agents/backend/fm-config-inherit-lib.sh +1202 -0
- package/.agents/backend/fm-config-push.sh +254 -0
- package/.agents/backend/fm-control-lib.sh +251 -0
- package/.agents/backend/fm-control.sh +878 -0
- package/.agents/backend/fm-crew-state.sh +625 -0
- package/.agents/backend/fm-cursor-lib.sh +243 -0
- package/.agents/backend/fm-decision-hold.sh +232 -0
- package/.agents/backend/fm-doc-audience-check.sh +269 -0
- package/.agents/backend/fm-dod-lib.sh +67 -0
- package/.agents/backend/fm-ensure-agents-md.sh +253 -0
- package/.agents/backend/fm-extension-launch-barrier.mjs +129 -0
- package/.agents/backend/fm-extension.mjs +2577 -0
- package/.agents/backend/fm-extension.sh +16 -0
- package/.agents/backend/fm-ff-lib.sh +420 -0
- package/.agents/backend/fm-fleet-snapshot.sh +1463 -0
- package/.agents/backend/fm-fleet-sync.sh +458 -0
- package/.agents/backend/fm-fleet-view.sh +96 -0
- package/.agents/backend/fm-gate-refuse-lib.sh +102 -0
- package/.agents/backend/fm-guard.sh +242 -0
- package/.agents/backend/fm-harness.sh +195 -0
- package/.agents/backend/fm-herdr-ci-cleanup.sh +115 -0
- package/.agents/backend/fm-herdr-lab.sh +346 -0
- package/.agents/backend/fm-herdr-session-cleanup.sh +337 -0
- package/.agents/backend/fm-home-seed.sh +984 -0
- package/.agents/backend/fm-home-summary-refresh.sh +255 -0
- package/.agents/backend/fm-hook-host-lib.sh +36 -0
- package/.agents/backend/fm-inactive-reconcile.sh +531 -0
- package/.agents/backend/fm-inbox.sh +399 -0
- package/.agents/backend/fm-install-actionlint.sh +84 -0
- package/.agents/backend/fm-install-herdr.sh +96 -0
- package/.agents/backend/fm-install-shellcheck.sh +84 -0
- package/.agents/backend/fm-install-treehouse.sh +95 -0
- package/.agents/backend/fm-kimi-turnend-hook.sh +276 -0
- package/.agents/backend/fm-lease-lib.sh +218 -0
- package/.agents/backend/fm-lease.sh +189 -0
- package/.agents/backend/fm-line-cap-lib.sh +51 -0
- package/.agents/backend/fm-lint-workflows.sh +137 -0
- package/.agents/backend/fm-lint.sh +591 -0
- package/.agents/backend/fm-lock-lib.sh +104 -0
- package/.agents/backend/fm-lock.sh +107 -0
- package/.agents/backend/fm-marker-lib.sh +12 -0
- package/.agents/backend/fm-merge-local.sh +74 -0
- package/.agents/backend/fm-merge-outcome-lib.sh +138 -0
- package/.agents/backend/fm-nm-run-lib.sh +124 -0
- package/.agents/backend/fm-on.sh +125 -0
- package/.agents/backend/fm-operational-input.sh +253 -0
- package/.agents/backend/fm-peek.sh +46 -0
- package/.agents/backend/fm-pending-reply-lib.sh +1409 -0
- package/.agents/backend/fm-pr-check.sh +135 -0
- package/.agents/backend/fm-pr-lib.sh +1016 -0
- package/.agents/backend/fm-pr-merge.sh +707 -0
- package/.agents/backend/fm-pr-poll.sh +110 -0
- package/.agents/backend/fm-primary-scope-lib.sh +33 -0
- package/.agents/backend/fm-procevent-extension-capture.pl +259 -0
- package/.agents/backend/fm-procevent-lavish.sh +628 -0
- package/.agents/backend/fm-procevent-lib.sh +892 -0
- package/.agents/backend/fm-procevent-quota.sh +290 -0
- package/.agents/backend/fm-procevent-remote-reply.sh +577 -0
- package/.agents/backend/fm-procevent-when.sh +504 -0
- package/.agents/backend/fm-procevent.sh +1466 -0
- package/.agents/backend/fm-project-mode.sh +92 -0
- package/.agents/backend/fm-project-origin-lib.sh +180 -0
- package/.agents/backend/fm-promote.sh +282 -0
- package/.agents/backend/fm-public-followup-emit.sh +260 -0
- package/.agents/backend/fm-public-followup-lib.sh +398 -0
- package/.agents/backend/fm-public-followup.sh +1330 -0
- package/.agents/backend/fm-push-transition-lib.sh +168 -0
- package/.agents/backend/fm-quota-axi-lib.sh +93 -0
- package/.agents/backend/fm-quota-choose.sh +384 -0
- package/.agents/backend/fm-remote-delta-read.sh +189 -0
- package/.agents/backend/fm-remote-doctor.sh +800 -0
- package/.agents/backend/fm-remote-entrypoint.sh +193 -0
- package/.agents/backend/fm-remote-file.sh +234 -0
- package/.agents/backend/fm-remote-home-provision.sh +259 -0
- package/.agents/backend/fm-remote-home-seed.sh +259 -0
- package/.agents/backend/fm-remote-inherit-push.sh +90 -0
- package/.agents/backend/fm-remote-inherit.sh +179 -0
- package/.agents/backend/fm-remote-job-lib.sh +1241 -0
- package/.agents/backend/fm-remote-job-reap-orphans.sh +137 -0
- package/.agents/backend/fm-remote-job-worker.sh +1124 -0
- package/.agents/backend/fm-remote-readiness-lib.sh +44 -0
- package/.agents/backend/fm-remote-secondmate-control.sh +340 -0
- package/.agents/backend/fm-review-diff.sh +158 -0
- package/.agents/backend/fm-secondmate-charter-lib.sh +44 -0
- package/.agents/backend/fm-secondmate-nudge-lib.sh +68 -0
- package/.agents/backend/fm-secondmate-parent-lib.sh +70 -0
- package/.agents/backend/fm-secondmate-reconcile.sh +371 -0
- package/.agents/backend/fm-secondmate-registry-lib.sh +311 -0
- package/.agents/backend/fm-secondmate-report.sh +88 -0
- package/.agents/backend/fm-send.sh +1059 -0
- package/.agents/backend/fm-session-lock-lib.sh +176 -0
- package/.agents/backend/fm-session-start.sh +970 -0
- package/.agents/backend/fm-sessionstart-cursor.sh +40 -0
- package/.agents/backend/fm-sessionstart-nudge.sh +45 -0
- package/.agents/backend/fm-sessionstart-run.sh +145 -0
- package/.agents/backend/fm-spawn.sh +3153 -0
- package/.agents/backend/fm-startup-memory-budget-lib.sh +224 -0
- package/.agents/backend/fm-startup-memory-budget.sh +94 -0
- package/.agents/backend/fm-startup-network.sh +642 -0
- package/.agents/backend/fm-stow-cascade.sh +251 -0
- package/.agents/backend/fm-subagent-pretool-check.sh +207 -0
- package/.agents/backend/fm-supervise-daemon.sh +1732 -0
- package/.agents/backend/fm-supervision-instructions.sh +215 -0
- package/.agents/backend/fm-supervision-lib.sh +90 -0
- package/.agents/backend/fm-supervisor-target-lib.sh +78 -0
- package/.agents/backend/fm-tangle-lib.sh +53 -0
- package/.agents/backend/fm-task-inbox-lib.sh +402 -0
- package/.agents/backend/fm-tasks-axi-lib.sh +123 -0
- package/.agents/backend/fm-teardown.sh +2922 -0
- package/.agents/backend/fm-test-isolation-proof.sh +588 -0
- package/.agents/backend/fm-test-run.sh +2191 -0
- package/.agents/backend/fm-timeout-lib.sh +141 -0
- package/.agents/backend/fm-timing-lib.sh +179 -0
- package/.agents/backend/fm-tmux-lib.sh +291 -0
- package/.agents/backend/fm-tool-update-check.sh +898 -0
- package/.agents/backend/fm-trace-context-lib.sh +227 -0
- package/.agents/backend/fm-transition-lib.sh +103 -0
- package/.agents/backend/fm-turnend-guard-cursor.sh +391 -0
- package/.agents/backend/fm-turnend-guard-grok.sh +90 -0
- package/.agents/backend/fm-turnend-guard.sh +432 -0
- package/.agents/backend/fm-update.sh +110 -0
- package/.agents/backend/fm-vendor-auth-probe.sh +190 -0
- package/.agents/backend/fm-voice-client.py +1373 -0
- package/.agents/backend/fm-voice-relay.py +1256 -0
- package/.agents/backend/fm-wake-drain.sh +592 -0
- package/.agents/backend/fm-wake-grant.sh +127 -0
- package/.agents/backend/fm-wake-lib.sh +1849 -0
- package/.agents/backend/fm-watch-arm.sh +602 -0
- package/.agents/backend/fm-watch-checkpoint.sh +109 -0
- package/.agents/backend/fm-watch.sh +1962 -0
- package/.agents/backend/fm-x-dismiss.sh +116 -0
- package/.agents/backend/fm-x-followup.sh +286 -0
- package/.agents/backend/fm-x-lib.sh +1000 -0
- package/.agents/backend/fm-x-link.sh +234 -0
- package/.agents/backend/fm-x-poll.sh +185 -0
- package/.agents/backend/fm-x-reply.sh +385 -0
- package/.agents/backend/fm_voice_frame.py +166 -0
- package/.agents/backend/fm_voice_records.py +574 -0
- package/.agents/backend/model-bridge.py +290 -0
- package/.agents/backend/opencode-go-bridge.py +30 -0
- package/.agents/bus/README.md +12 -0
- package/.agents/bus/messages.json +1 -0
- package/.agents/config/agents.machine.example.yaml +16 -0
- package/.agents/config/agents.yaml +50 -0
- package/.agents/config/agents.yaml.example +72 -0
- package/.agents/config/crew-dispatch.json +22 -0
- package/.agents/config/cron.yaml +9 -0
- package/.agents/config/eindri-dispatch.json +67 -0
- package/.agents/config/eindri-harness +1 -0
- package/.agents/config/startup-memory-budget +1 -0
- package/.agents/config/tailscale-sync.yaml +27 -0
- package/.agents/filebrowser/.filebrowser.json +6 -0
- package/.agents/filebrowser/README.md +11 -0
- package/.agents/gateway/README.md +12 -0
- package/.agents/github/README.md +15 -0
- package/.agents/github/webhooks/.gitkeep +0 -0
- package/.agents/github/workflows/.gitkeep +0 -0
- package/.agents/harness/opencode/plugins/lib/rodd-operational-input.js +37 -0
- package/.agents/harness/opencode/plugins/package.json +4 -0
- package/.agents/harness/opencode/plugins/saga-sessionstart.js +77 -0
- package/.agents/harness/opencode/plugins/syn-cd-check.js +61 -0
- package/.agents/harness/opencode/plugins/syn-pretool-check.js +68 -0
- package/.agents/harness/opencode/plugins/syn-turnend-guard.js +105 -0
- package/.agents/harness/opencode/plugins/syn-watch-arm.js +521 -0
- package/.agents/memory/README.md +46 -0
- package/.agents/memory/kaia.engram +0 -0
- package/.agents/memory/kaia.engram-shm +0 -0
- package/.agents/memory/kaia.engram-wal +0 -0
- package/.agents/memory/runes_audit.md +5 -0
- package/.agents/memory/well/episodes.jsonl +367 -0
- package/.agents/memory/well/workspace.jsonl +27 -0
- package/.agents/migrations/0001-hodd-layout.sh +38 -0
- package/.agents/migrations/0002-a2a-mcp.sh +27 -0
- package/.agents/migrations/0003-private-data-separation.sh +111 -0
- package/.agents/migrations/0004-hoard-and-realms.sh +104 -0
- package/.agents/sandbox/Dockerfile.utgard +19 -0
- package/.agents/sandbox/README.md +14 -0
- package/.agents/sandbox/utgard.config.json +14 -0
- package/.agents/skills/README.md +59 -0
- package/.agents/skills/bragi-marketing/README.md +3 -0
- package/.agents/skills/bragi-marketing/SKILL.md +82 -0
- package/.agents/skills/eindri-homes/README.md +3 -0
- package/.agents/skills/eindri-homes/SKILL.md +291 -0
- package/.agents/skills/eindri-homes/assets/control-plane.md +122 -0
- package/.agents/skills/eindri-homes/assets/dispatch.md +80 -0
- package/.agents/skills/frigg-consent/README.md +3 -0
- package/.agents/skills/frigg-consent/SKILL.md +56 -0
- package/.agents/skills/galdr-ymirsystem/README.md +3 -0
- package/.agents/skills/galdr-ymirsystem/SKILL.md +158 -0
- package/.agents/skills/galdr-ymirsystem/assets/README.md +74 -0
- package/.agents/skills/galdr-ymirsystem/assets/brokk-distro-runtime.md +390 -0
- package/.agents/skills/galdr-ymirsystem/assets/build-method.md +113 -0
- package/.agents/skills/galdr-ymirsystem/assets/build-tool-categories.md +178 -0
- package/.agents/skills/galdr-ymirsystem/assets/eindri-orchestration.md +518 -0
- package/.agents/skills/galdr-ymirsystem/assets/eindri-profiles.md +136 -0
- package/.agents/skills/galdr-ymirsystem/assets/harness-integration/README.md +673 -0
- package/.agents/skills/galdr-ymirsystem/assets/harness-integration/claude-code.md +197 -0
- package/.agents/skills/galdr-ymirsystem/assets/harness-integration/codex.md +191 -0
- package/.agents/skills/galdr-ymirsystem/assets/harness-integration/cursor.md +193 -0
- package/.agents/skills/galdr-ymirsystem/assets/harness-integration/opencode.md +262 -0
- package/.agents/skills/galdr-ymirsystem/assets/harness-integration/pi.md +295 -0
- package/.agents/skills/galdr-ymirsystem/assets/hlidskjalf-ui.md +496 -0
- package/.agents/skills/galdr-ymirsystem/assets/installation.md +571 -0
- package/.agents/skills/galdr-ymirsystem/assets/local-models/HOST-DATA.example.md +72 -0
- package/.agents/skills/galdr-ymirsystem/assets/local-models.md +274 -0
- package/.agents/skills/galdr-ymirsystem/assets/memory-well.md +161 -0
- package/.agents/skills/galdr-ymirsystem/assets/nornir-jobs.md +377 -0
- package/.agents/skills/galdr-ymirsystem/assets/norse-naming.md +325 -0
- package/.agents/skills/galdr-ymirsystem/assets/odrerir-hall.md +129 -0
- package/.agents/skills/galdr-ymirsystem/assets/pi-boot/einherjar-spawn.schema.json +81 -0
- package/.agents/skills/galdr-ymirsystem/assets/pi-boot/herdr-profile.toml +75 -0
- package/.agents/skills/galdr-ymirsystem/assets/pi-boot/pi-profile.yml +96 -0
- package/.agents/skills/galdr-ymirsystem/assets/pi-boot/supervision-tree.yml +163 -0
- package/.agents/skills/galdr-ymirsystem/assets/pi-boot-guide.md +58 -0
- package/.agents/skills/galdr-ymirsystem/assets/porting-upstream-to-norse.md +301 -0
- package/.agents/skills/galdr-ymirsystem/assets/principles.md +385 -0
- package/.agents/skills/galdr-ymirsystem/assets/reference-adoption.md +99 -0
- package/.agents/skills/galdr-ymirsystem/assets/registry.md +379 -0
- package/.agents/skills/galdr-ymirsystem/assets/runtime-compliance.md +463 -0
- package/.agents/skills/galdr-ymirsystem/assets/runtime-components.md +553 -0
- package/.agents/skills/galdr-ymirsystem/assets/smidja.md +175 -0
- package/.agents/skills/galdr-ymirsystem/schemas/toon-schemas.md +190 -0
- package/.agents/skills/galdr-ymirsystem/scripts/README.md +45 -0
- package/.agents/skills/galdr-ymirsystem/scripts/bench-one.sh +248 -0
- package/.agents/skills/galdr-ymirsystem/scripts/compliance-check.sh +360 -0
- package/.agents/skills/galdr-ymirsystem/scripts/gpu-sample.sh +43 -0
- package/.agents/skills/galdr-ymirsystem/scripts/stop-all.sh +34 -0
- package/.agents/skills/galdr-ymirsystem/scripts/toon-check.py +188 -0
- package/.agents/skills/gjallarhorn-relay/README.md +3 -0
- package/.agents/skills/gjallarhorn-relay/SKILL.md +283 -0
- package/.agents/skills/groa-update/SKILL.md +70 -0
- package/.agents/skills/hamr-adapters/README.md +3 -0
- package/.agents/skills/hamr-adapters/SKILL.md +123 -0
- package/.agents/skills/hamr-adapters/references/common/control-and-recovery.md +37 -0
- package/.agents/skills/hamr-adapters/references/common/dispatch.md +32 -0
- package/.agents/skills/hamr-adapters/references/common/model-and-effort.md +42 -0
- package/.agents/skills/hamr-adapters/references/common/primary-hooks.md +40 -0
- package/.agents/skills/hamr-adapters/references/harness/claude.md +55 -0
- package/.agents/skills/hamr-adapters/references/harness/codex.md +43 -0
- package/.agents/skills/hamr-adapters/references/harness/cursor.md +75 -0
- package/.agents/skills/hamr-adapters/references/harness/grok.md +69 -0
- package/.agents/skills/hamr-adapters/references/harness/kimi.md +51 -0
- package/.agents/skills/hamr-adapters/references/harness/muse.md +70 -0
- package/.agents/skills/hamr-adapters/references/harness/opencode.md +42 -0
- package/.agents/skills/hamr-adapters/references/harness/pi.md +56 -0
- package/.agents/skills/herdr-panes/README.md +3 -0
- package/.agents/skills/herdr-panes/SKILL.md +92 -0
- package/.agents/skills/herdr-panes/assets/herdr-backend.md +346 -0
- package/.agents/skills/herdr-panes/assets/tmux-backend.md +115 -0
- package/.agents/skills/hnoss-design/DESIGN.md +19 -0
- package/.agents/skills/hnoss-design/README.md +3 -0
- package/.agents/skills/hnoss-design/SKILL.md +83 -0
- package/.agents/skills/hvild-afk/README.md +3 -0
- package/.agents/skills/hvild-afk/SKILL.md +241 -0
- package/.agents/skills/jord-projects/README.md +3 -0
- package/.agents/skills/jord-projects/SKILL.md +92 -0
- package/.agents/skills/lifecycle/SKILL.md +56 -0
- package/.agents/skills/lifecycle/smoke_test.sh +52 -0
- package/.agents/skills/lifecycle/start.sh +21 -0
- package/.agents/skills/lifecycle/status.sh +35 -0
- package/.agents/skills/lifecycle/stop.sh +16 -0
- package/.agents/skills/muninn-stow/README.md +3 -0
- package/.agents/skills/muninn-stow/SKILL.md +309 -0
- package/.agents/skills/no-mistakes/SKILL.md +379 -0
- package/.agents/skills/nornir-schedule/README.md +3 -0
- package/.agents/skills/nornir-schedule/SKILL.md +25 -0
- package/.agents/skills/nornir-schedule/assets/events.md +137 -0
- package/.agents/skills/nornir-schedule/assets/quota.md +131 -0
- package/.agents/skills/nsr-compliance/README.md +3 -0
- package/.agents/skills/nsr-compliance/SKILL.md +29 -0
- package/.agents/skills/nsr-compliance/assets/nsr/README.md +40 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/RULES/README.md +15 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/RULES/git-workflow.md +18 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/RULES/security.md +22 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/RULES/tech-stack.md +8 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/SKILL.md +71 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/config/core_four.yaml +16 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/gates/check_danger.sh +102 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/gates/check_wiring.sh +69 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/gates/validate_code.sh +29 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/gates/verify_docs.py +66 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/generate.sh +109 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/harness/envelopes/result_envelope.json +14 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/harness/envelopes/task_envelope.json +20 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/harness/runner.py +303 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/telemetry/logger.py +112 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/README.md +18 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/config/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/gates/README.md +12 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/gates/check_env.sh +23 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/gates/check_paths.sh +20 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/gates/check_platform.sh +23 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/harness/README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/harness/envelopes/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/installer/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/installer/install.sh +125 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/telemetry/README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/README.md +20 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/features/README.md +36 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/features/SKILL-template.md +14 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/git_ops/README.md +25 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/git_ops/SKILL.md +13 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/git_ops/create_branch.sh +6 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/git_ops/safe_commit.sh +9 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/git_ops/sync_upstream.sh +6 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/README.md +27 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/SKILL.md +15 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/smoke_test.sh +12 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/start.sh +19 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/status.sh +12 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/stop.sh +15 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/README.md +18 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/config/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/config/core_four.yaml +13 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/README.md +12 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/check_danger.sh +102 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/check_env.sh +23 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/check_paths.sh +20 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/check_platform.sh +23 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/check_wiring.sh +69 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/harness/README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/harness/envelopes/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/harness/envelopes/result_envelope.json +14 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/harness/envelopes/task_envelope.json +20 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/harness/runner.py +303 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/installer/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/installer/install.sh +125 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/telemetry/README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/telemetry/logger.py +112 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/BEST_PRACTICES/README.md +14 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/BEST_PRACTICES/api.md +17 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/BEST_PRACTICES/compliance-wiring.md +155 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/BEST_PRACTICES/frontend.md +15 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/README.md +23 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/clients/README.md +16 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/clients/template-README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/deploy.sh +49 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/envs/README.md +12 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/envs/development.env.example +17 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/envs/production.env.example +17 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/envs/staging.env.example +17 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/tenants/README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/tenants/template.env.example +8 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/README.md +26 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/agent.md +7 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/developers/dev-1.md +20 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/linux.md +9 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/macos.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/shared.md +19 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/windows.md +14 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/HOSTING/README.md +25 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/HOSTING/_template.md +41 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/HOSTING/hosting-1.md +41 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/README.md +21 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/RUNBOOK/README.md +15 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/RUNBOOK/deployment.md +19 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/RUNBOOK/disaster-recovery.md +15 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/RUNBOOK/ops-tasks.md +14 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/features/README.md +16 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/project-skills.md +146 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/research/README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/research/software-compliance-research.md +269 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/working-with-agents.md +260 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/AGENTS.md +38 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/ARCHITECTURE.md +36 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/BEST_PRACTICES.md +27 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/CI_CD.md +23 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/FEATURES.md +15 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/README.md +22 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/RULES.md +37 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/STRUCTURE.md +45 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/TECH_STACK.md +28 -0
- package/.agents/skills/nsr-compliance/assets/nsr/scaffold-spec.md +63 -0
- package/.agents/skills/nsr-compliance/assets/nsr/scripts/scaffold.sh +103 -0
- package/.agents/skills/nsr-compliance/assets/nsr/scripts/validate.sh +52 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/SKILL.md +71 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/config/core_four.yaml +16 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/gates/check_danger.sh +102 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/gates/check_wiring.sh +69 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/gates/validate_code.sh +29 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/gates/verify_docs.py +66 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/generate.sh +109 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/harness/envelopes/result_envelope.json +14 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/harness/envelopes/task_envelope.json +20 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/harness/runner.py +303 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/telemetry/logger.py +112 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/README.md +18 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/config/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/gates/README.md +12 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/gates/check_env.sh +23 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/gates/check_paths.sh +20 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/gates/check_platform.sh +23 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/harness/README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/harness/envelopes/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/installer/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/installer/install.sh +125 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/telemetry/README.md +11 -0
- package/.agents/skills/pr-ops/README.md +3 -0
- package/.agents/skills/pr-ops/SKILL.md +109 -0
- package/.agents/skills/ratatoskr-a2a/README.md +3 -0
- package/.agents/skills/ratatoskr-a2a/SKILL.md +148 -0
- package/.agents/skills/rules-check-drift/SKILL.md +81 -0
- package/.agents/skills/saga-bearings/README.md +3 -0
- package/.agents/skills/saga-bearings/SKILL.md +26 -0
- package/.agents/skills/saga-bearings/assets/bearings.md +161 -0
- package/.agents/skills/saga-bearings/assets/board-template.html +731 -0
- package/.agents/skills/saga-bearings/assets/recap.md +56 -0
- package/.agents/skills/syn-recovery/README.md +3 -0
- package/.agents/skills/syn-recovery/SKILL.md +54 -0
- package/.agents/skills/tyr-check/README.md +3 -0
- package/.agents/skills/tyr-check/SKILL.md +218 -0
- package/.agents/skills/urdh-hold/README.md +3 -0
- package/.agents/skills/urdh-hold/SKILL.md +25 -0
- package/.agents/skills/urdh-hold/assets/decisions.md +15 -0
- package/.agents/skills/urdh-hold/assets/hold.md +54 -0
- package/.agents/skills/vor-diagnostics/README.md +3 -0
- package/.agents/skills/vor-diagnostics/SKILL.md +68 -0
- package/.agents/skills/ymir-host/README.md +3 -0
- package/.agents/skills/ymir-host/SKILL.md +34 -0
- package/.agents/skills/ymir-host/assets/desktop.md +36 -0
- package/.agents/skills/ymir-host/assets/omarchy.md +297 -0
- package/.agents/skills/ymir-host/assets/runbooks.md +15 -0
- package/.agents/skills/ymir-host/assets/thjazi.md +220 -0
- package/.agents/skills/ymir-host/assets/update.md +64 -0
- package/.agents/tests/assets/board-render-harness.mjs +117 -0
- package/.agents/tests/cmux-test-safety.sh +51 -0
- package/.agents/tests/fixtures.sh +291 -0
- package/.agents/tests/fm-afk-inject-e2e.test.sh +428 -0
- package/.agents/tests/fm-afk-inject-herdr-e2e.test.sh +536 -0
- package/.agents/tests/fm-afk-launch.test.sh +961 -0
- package/.agents/tests/fm-afk-pi-herdr-return-e2e.test.sh +297 -0
- package/.agents/tests/fm-afk-return.test.sh +283 -0
- package/.agents/tests/fm-arm-pretool-check.test.sh +482 -0
- package/.agents/tests/fm-ask-user-authority.test.sh +42 -0
- package/.agents/tests/fm-backend-autodetect-smoke.test.sh +176 -0
- package/.agents/tests/fm-backend-cmux-smoke.test.sh +188 -0
- package/.agents/tests/fm-backend-cmux.test.sh +1166 -0
- package/.agents/tests/fm-backend-herdr-eventwait-smoke.test.sh +136 -0
- package/.agents/tests/fm-backend-herdr-eventwait.test.py +106 -0
- package/.agents/tests/fm-backend-herdr-focus-flash-e2e.test.sh +409 -0
- package/.agents/tests/fm-backend-herdr-launcher-workspace-e2e.test.sh +437 -0
- package/.agents/tests/fm-backend-herdr-presentation-e2e.test.sh +1424 -0
- package/.agents/tests/fm-backend-herdr-prune-safety-e2e.test.sh +180 -0
- package/.agents/tests/fm-backend-herdr-respawn-idem-e2e.test.sh +182 -0
- package/.agents/tests/fm-backend-herdr-smoke.test.sh +355 -0
- package/.agents/tests/fm-backend-herdr-workspace-per-home-e2e.test.sh +251 -0
- package/.agents/tests/fm-backend-herdr.test.sh +4606 -0
- package/.agents/tests/fm-backend-orca.test.sh +1357 -0
- package/.agents/tests/fm-backend-tmux-smoke.test.sh +173 -0
- package/.agents/tests/fm-backend-zellij-smoke.test.sh +205 -0
- package/.agents/tests/fm-backend-zellij.test.sh +1360 -0
- package/.agents/tests/fm-backend.test.sh +1142 -0
- package/.agents/tests/fm-backlog-atomicity.test.sh +2302 -0
- package/.agents/tests/fm-backlog-handoff.test.sh +1360 -0
- package/.agents/tests/fm-bearings-board-render.test.sh +135 -0
- package/.agents/tests/fm-bearings-board.test.sh +414 -0
- package/.agents/tests/fm-bearings-snapshot.test.sh +1990 -0
- package/.agents/tests/fm-bootstrap-network-parallel.test.sh +316 -0
- package/.agents/tests/fm-bootstrap.test.sh +1178 -0
- package/.agents/tests/fm-branch-supervision.test.sh +552 -0
- package/.agents/tests/fm-brief.test.sh +785 -0
- package/.agents/tests/fm-busy-adapter-wiring.test.sh +324 -0
- package/.agents/tests/fm-busy-state.test.sh +465 -0
- package/.agents/tests/fm-calm-pi-extension.test.sh +3979 -0
- package/.agents/tests/fm-captain-hold-lifecycle.test.sh +1187 -0
- package/.agents/tests/fm-cd-pretool-check.test.sh +400 -0
- package/.agents/tests/fm-check-unregister.test.sh +198 -0
- package/.agents/tests/fm-classify-corr-token.test.sh +543 -0
- package/.agents/tests/fm-classify-decision-key.test.sh +340 -0
- package/.agents/tests/fm-claude-stop-autoarm-live-e2e.test.sh +164 -0
- package/.agents/tests/fm-claude-stop-autoarm.test.sh +1190 -0
- package/.agents/tests/fm-cmux-claude-composer-live-e2e.test.sh +110 -0
- package/.agents/tests/fm-codex-continuity-live-e2e.test.sh +55 -0
- package/.agents/tests/fm-composer-ghost.test.sh +716 -0
- package/.agents/tests/fm-composer-lib.test.sh +666 -0
- package/.agents/tests/fm-composer-matrix-live-e2e.test.sh +220 -0
- package/.agents/tests/fm-control-herdr-smoke.test.sh +149 -0
- package/.agents/tests/fm-control-relaunch.test.sh +1530 -0
- package/.agents/tests/fm-control.test.sh +910 -0
- package/.agents/tests/fm-crew-state.test.sh +1610 -0
- package/.agents/tests/fm-cursor-harness.test.sh +404 -0
- package/.agents/tests/fm-cursor-primary-live-e2e.test.sh +217 -0
- package/.agents/tests/fm-cursor-primary.test.sh +708 -0
- package/.agents/tests/fm-daemon.test.sh +2740 -0
- package/.agents/tests/fm-documentation-audiences.test.sh +141 -0
- package/.agents/tests/fm-ensure-agents-md.test.sh +371 -0
- package/.agents/tests/fm-extension-binding.test.sh +2187 -0
- package/.agents/tests/fm-fleet-snapshot-view.test.sh +816 -0
- package/.agents/tests/fm-fleet-sync.test.sh +721 -0
- package/.agents/tests/fm-gate-refuse.test.sh +356 -0
- package/.agents/tests/fm-gitignore-config.test.sh +89 -0
- package/.agents/tests/fm-gotmp.test.sh +230 -0
- package/.agents/tests/fm-grok-continuity-live-e2e.test.sh +112 -0
- package/.agents/tests/fm-grok-harness.test.sh +117 -0
- package/.agents/tests/fm-grok-stop-live-e2e.test.sh +219 -0
- package/.agents/tests/fm-guard-stale-banner.test.sh +709 -0
- package/.agents/tests/fm-harness-adapter-instructions-live-e2e.test.sh +134 -0
- package/.agents/tests/fm-harness-adapter-references.test.sh +30 -0
- package/.agents/tests/fm-harness-liveness-drift-live-e2e.test.sh +151 -0
- package/.agents/tests/fm-herdr-lab.test.sh +243 -0
- package/.agents/tests/fm-herdr-session-cleanup-e2e.test.sh +146 -0
- package/.agents/tests/fm-herdr-session-cleanup.test.sh +329 -0
- package/.agents/tests/fm-herdr-submit-confirm-live-e2e.test.sh +125 -0
- package/.agents/tests/fm-herdr-version-floor-live-e2e.test.sh +144 -0
- package/.agents/tests/fm-home-summary-refresh.test.sh +971 -0
- package/.agents/tests/fm-inactive-reconcile.test.sh +485 -0
- package/.agents/tests/fm-kimi-harness.test.sh +687 -0
- package/.agents/tests/fm-lint-workflows.test.sh +532 -0
- package/.agents/tests/fm-lint.test.sh +1023 -0
- package/.agents/tests/fm-muse-harness.test.sh +932 -0
- package/.agents/tests/fm-muse-signals-live-e2e.test.sh +205 -0
- package/.agents/tests/fm-no-mistakes-required.test.sh +72 -0
- package/.agents/tests/fm-on.test.sh +507 -0
- package/.agents/tests/fm-opencode-primary-live-e2e.test.sh +357 -0
- package/.agents/tests/fm-operational-input.test.sh +160 -0
- package/.agents/tests/fm-peek-remote.test.sh +110 -0
- package/.agents/tests/fm-pending-reply.test.sh +1288 -0
- package/.agents/tests/fm-pi-branch-extension.test.sh +3182 -0
- package/.agents/tests/fm-pi-branch-live-e2e.test.sh +527 -0
- package/.agents/tests/fm-pi-primary-live-e2e.test.sh +345 -0
- package/.agents/tests/fm-pi-primary-types.test.sh +68 -0
- package/.agents/tests/fm-pi-watch-extension.test.sh +2843 -0
- package/.agents/tests/fm-pr-check-security.test.sh +2140 -0
- package/.agents/tests/fm-pr-merge.test.sh +2135 -0
- package/.agents/tests/fm-procevent-quota.test.sh +225 -0
- package/.agents/tests/fm-procevent-when.test.sh +406 -0
- package/.agents/tests/fm-procevent.test.sh +1745 -0
- package/.agents/tests/fm-project-origin.test.sh +110 -0
- package/.agents/tests/fm-public-followup.test.sh +2272 -0
- package/.agents/tests/fm-quota-array-dispatch-live-e2e.test.sh +526 -0
- package/.agents/tests/fm-quota-choose.test.sh +626 -0
- package/.agents/tests/fm-remote-backlog-handoff.test.sh +453 -0
- package/.agents/tests/fm-remote-doctor.test.sh +625 -0
- package/.agents/tests/fm-remote-entrypoint.test.sh +59 -0
- package/.agents/tests/fm-remote-job-orphan-reap.test.sh +205 -0
- package/.agents/tests/fm-remote-job.test.sh +768 -0
- package/.agents/tests/fm-remote-reply.test.sh +520 -0
- package/.agents/tests/fm-remote-secondmate-lifecycle-e2e.test.sh +1256 -0
- package/.agents/tests/fm-remote-secondmate-parent-binding.test.sh +326 -0
- package/.agents/tests/fm-remote-secondmate-trace-context.test.sh +310 -0
- package/.agents/tests/fm-remote-transport-lanes.test.sh +431 -0
- package/.agents/tests/fm-review-diff.test.sh +176 -0
- package/.agents/tests/fm-secondmate-harness.test.sh +2600 -0
- package/.agents/tests/fm-secondmate-lifecycle-e2e.test.sh +259 -0
- package/.agents/tests/fm-secondmate-liveness.test.sh +559 -0
- package/.agents/tests/fm-secondmate-reconcile.test.sh +732 -0
- package/.agents/tests/fm-secondmate-safety.test.sh +2972 -0
- package/.agents/tests/fm-secondmate-sync.test.sh +913 -0
- package/.agents/tests/fm-send-inbox-doorbell-live-e2e.test.sh +206 -0
- package/.agents/tests/fm-send-inbox.test.sh +352 -0
- package/.agents/tests/fm-send-popup-settle.test.sh +167 -0
- package/.agents/tests/fm-send-remote-delivery.test.sh +796 -0
- package/.agents/tests/fm-send-resolve-key.test.sh +551 -0
- package/.agents/tests/fm-send-secondmate-marker-herdr-e2e.test.sh +187 -0
- package/.agents/tests/fm-send-secondmate-marker.test.sh +278 -0
- package/.agents/tests/fm-send-settle.test.sh +147 -0
- package/.agents/tests/fm-send-strict.test.sh +241 -0
- package/.agents/tests/fm-session-lock-ancestry.test.sh +365 -0
- package/.agents/tests/fm-session-start.test.sh +2515 -0
- package/.agents/tests/fm-sessionstart-hook-live-e2e.test.sh +631 -0
- package/.agents/tests/fm-sessionstart-instruction-refresh-live-e2e.test.sh +230 -0
- package/.agents/tests/fm-sessionstart-nudge.test.sh +1039 -0
- package/.agents/tests/fm-shared-captain-inheritance.test.sh +404 -0
- package/.agents/tests/fm-spawn-batch.test.sh +148 -0
- package/.agents/tests/fm-spawn-dispatch-profile.test.sh +827 -0
- package/.agents/tests/fm-spawn-pool-base-freshen.test.sh +440 -0
- package/.agents/tests/fm-spawn-worktree-settle.test.sh +147 -0
- package/.agents/tests/fm-startup-memory-budget.test.sh +333 -0
- package/.agents/tests/fm-startup-network.test.sh +712 -0
- package/.agents/tests/fm-stow-cascade.test.sh +370 -0
- package/.agents/tests/fm-subagent-pretool-check.test.sh +291 -0
- package/.agents/tests/fm-supervision-events.test.sh +156 -0
- package/.agents/tests/fm-supervision-instructions.test.sh +189 -0
- package/.agents/tests/fm-tangle-guard.test.sh +277 -0
- package/.agents/tests/fm-task-delivery.test.sh +420 -0
- package/.agents/tests/fm-task-inbox.test.sh +513 -0
- package/.agents/tests/fm-teardown-endpoint-safety.test.sh +374 -0
- package/.agents/tests/fm-teardown.test.sh +2665 -0
- package/.agents/tests/fm-test-fixture-cleanup.test.sh +172 -0
- package/.agents/tests/fm-test-fixtures.test.sh +132 -0
- package/.agents/tests/fm-test-isolation-proof.test.sh +278 -0
- package/.agents/tests/fm-test-run.test.sh +1196 -0
- package/.agents/tests/fm-tmux-agent-liveness.test.sh +354 -0
- package/.agents/tests/fm-tmux-submit-busy.test.sh +340 -0
- package/.agents/tests/fm-tool-update-check.test.sh +1044 -0
- package/.agents/tests/fm-trace-context-lib.test.sh +253 -0
- package/.agents/tests/fm-trace-context-spawn.test.sh +581 -0
- package/.agents/tests/fm-transition-lib.test.sh +54 -0
- package/.agents/tests/fm-turnend-guard.test.sh +1822 -0
- package/.agents/tests/fm-update.test.sh +304 -0
- package/.agents/tests/fm-vendor-auth-probe.test.sh +395 -0
- package/.agents/tests/fm-voice-relay.test.sh +4741 -0
- package/.agents/tests/fm-wake-daemon-lifecycle-e2e.test.sh +171 -0
- package/.agents/tests/fm-wake-drain-open-decisions-cursor.test.sh +356 -0
- package/.agents/tests/fm-wake-drain-open-decisions.test.sh +226 -0
- package/.agents/tests/fm-wake-drain-unread-status.test.sh +379 -0
- package/.agents/tests/fm-wake-queue.test.sh +1224 -0
- package/.agents/tests/fm-watch-arm.test.sh +821 -0
- package/.agents/tests/fm-watch-checkpoint.test.sh +87 -0
- package/.agents/tests/fm-watch-recovery-loop.test.sh +223 -0
- package/.agents/tests/fm-watch-triage.test.sh +3889 -0
- package/.agents/tests/fm-watcher-lock.test.sh +1133 -0
- package/.agents/tests/fm-x-mode.test.sh +3042 -0
- package/.agents/tests/gleipnir-guard-pretool-check.test.sh +51 -0
- package/.agents/tests/gleipnir-machine-lock.test.sh +130 -0
- package/.agents/tests/herdr-test-safety.sh +42 -0
- package/.agents/tests/lib.sh +315 -0
- package/.agents/tests/remote-herdr-fixture.sh +125 -0
- package/.agents/tests/secondmate-helpers.sh +193 -0
- package/.agents/tests/smoke.test.sh +93 -0
- package/.agents/tests/wake-helpers.sh +338 -0
- package/.agents/tests/zellij-test-safety.sh +60 -0
- package/.agents/tools/README.md +10 -0
- package/.agents/tools/bin/tasks-cli +267 -0
- package/.agents/tools/tasks-cli.ts +216 -0
- package/AGENTS.md +454 -0
- package/CHANGELOG.md +881 -0
- package/LICENSE +1 -1
- package/NOTICE +63 -0
- package/README.md +113 -59
- package/RULES/01-domains.md +51 -0
- package/RULES/02-agents.md +78 -0
- package/RULES/03-houses.md +61 -0
- package/RULES/04-hoard.md +65 -0
- package/RULES/05-platforms.md +67 -0
- package/RULES/06-append-only.md +58 -0
- package/RULES/07-config.md +45 -0
- package/RULES/08-delivery-gate.md +75 -0
- package/RULES/README.md +20 -0
- package/bin/README.md +107 -0
- package/bin/a2a-mcp.sh +98 -0
- package/bin/a2a-serve.py +103 -0
- package/bin/a2a-serve.sh +8 -0
- package/bin/a2a-talk.sh +50 -0
- package/bin/a2abridge-ensure.sh +108 -0
- package/bin/agent-run.sh +43 -0
- package/bin/agents-config.sh +233 -0
- package/bin/apodex-smoke-test.sh +92 -0
- package/bin/bifrost-bridge.sh +112 -0
- package/bin/bifrost-ingress.sh +77 -0
- package/bin/bootstrap-macos.sh +107 -0
- package/bin/bootstrap-windows.ps1 +112 -0
- package/bin/branch-guard.sh +64 -0
- package/bin/brokk +73 -0
- package/bin/brokk-classify-lib.sh +1770 -0
- package/bin/brokk-lease-lib.sh +222 -0
- package/bin/brokk-lease.sh +193 -0
- package/bin/brokk-lint.sh +65 -0
- package/bin/brokk-send.sh +38 -0
- package/bin/brokk-update.sh +9 -0
- package/bin/brokk-wake-grant.sh +127 -0
- package/bin/brokk-wake-lib.sh +1849 -0
- package/bin/changelog-guard.sh +165 -0
- package/bin/crash-sense.sh +160 -0
- package/bin/desktop-place.sh +224 -0
- package/bin/docs-guard.sh +39 -0
- package/bin/editor-place.sh +207 -0
- package/bin/eindri-acclaim.sh +34 -0
- package/bin/eindri-control.sh +28 -0
- package/bin/eindri-role.sh +83 -0
- package/bin/eindri-seen.sh +41 -0
- package/bin/eindri-send.sh +15 -0
- package/bin/eindri-start.sh +85 -0
- package/bin/eindri-watch.sh +57 -0
- package/bin/einherjar-spawn.sh +576 -0
- package/bin/eir-doctor.sh +112 -0
- package/bin/erindi-brief.sh +271 -0
- package/bin/fleet-apply.sh +68 -0
- package/bin/github-deploy.sh +81 -0
- package/bin/gjallarhorn-expose.sh +102 -0
- package/bin/gjallarhorn-notify.sh +58 -0
- package/bin/gjallarhorn-purge.sh +54 -0
- package/bin/gjallarhorn-tunnel.sh +72 -0
- package/bin/gleipnir-lock-lib.sh +284 -0
- package/bin/groa-update.sh +122 -0
- package/bin/hall-snapshot.sh +92 -0
- package/bin/hamr-harness.sh +246 -0
- package/bin/heimdall-ssh-keys.sh +374 -0
- package/bin/herdr-agents.py +44 -0
- package/bin/herdr-ensure.sh +104 -0
- package/bin/herdr-run.sh +431 -0
- package/bin/hermes-ensure.sh +88 -0
- package/bin/hoard-lib.sh +25 -0
- package/bin/hodd.sh +78 -0
- package/bin/host-sense.sh +199 -0
- package/bin/huginn-research-worker.sh +108 -0
- package/bin/local-model-lock.sh +51 -0
- package/bin/mimir-bridge.py +226 -0
- package/bin/mimir-bridge.sh +87 -0
- package/bin/mimir-ingest.sh +131 -0
- package/bin/mimir.sh +113 -0
- package/bin/mjollnir-webhook.sh +59 -0
- package/bin/mjollnir.sh +85 -0
- package/bin/model-hardware.sh +82 -0
- package/bin/model-resolve.sh +147 -0
- package/bin/models-detect.sh +178 -0
- package/bin/nornir-cron-start.sh +162 -0
- package/bin/nornir-job-daily-briefing.sh +191 -0
- package/bin/nornir-job-git-sync.sh +152 -0
- package/bin/nornir-job-memory-housekeeping.sh +114 -0
- package/bin/nornir-job-observer.sh +166 -0
- package/bin/nornir-job-skillopt-sleep.sh +76 -0
- package/bin/omarchy-hook-install.sh +60 -0
- package/bin/omarchy-install.sh +148 -0
- package/bin/omarchy-plugins.sh +174 -0
- package/bin/omarchy-sense.sh +149 -0
- package/bin/perm-guard.sh +30 -0
- package/bin/pi-agent.sh +68 -0
- package/bin/pi-ensure.sh +77 -0
- package/bin/pi-local.sh +37 -0
- package/bin/pi-seat.sh +63 -0
- package/bin/prereq-ensure.sh +166 -0
- package/bin/private-guard.sh +38 -0
- package/bin/project-git.sh +55 -0
- package/bin/public-guard.sh +70 -0
- package/bin/ratatoskr.sh +49 -0
- package/bin/realm-lib.sh +32 -0
- package/bin/repo-scrub.sh +62 -0
- package/bin/rodd-operational-input.sh +250 -0
- package/bin/runes-append.sh +198 -0
- package/bin/saga-session-start.sh +172 -0
- package/bin/saga-sessionstart-run.sh +79 -0
- package/bin/saga-wake-drain.sh +41 -0
- package/bin/secret-guard.sh +63 -0
- package/bin/sessrumnir-ensure.sh +100 -0
- package/bin/sessrumnir-sync.sh +237 -0
- package/bin/sessrumnir.sh +91 -0
- package/bin/skillopt-setup.sh +76 -0
- package/bin/skuld-branch-outcome.sh +203 -0
- package/bin/skuld-branch-prompt.sh +101 -0
- package/bin/smidja-bootstrap.sh +90 -0
- package/bin/smidja-observe.sh +86 -0
- package/bin/syn-arm-pretool-check.sh +57 -0
- package/bin/syn-asset-pretool-check.sh +76 -0
- package/bin/syn-cd-pretool-check.sh +28 -0
- package/bin/syn-guard-pretool-check.sh +83 -0
- package/bin/syn-turnend-guard.sh +36 -0
- package/bin/syn-watch-arm.sh +99 -0
- package/bin/tailscale-sync.sh +190 -0
- package/bin/telegram-bot.sh +69 -0
- package/bin/toolchain.sh +74 -0
- package/bin/utgard.sh +111 -0
- package/bin/valhalla.sh +115 -0
- package/bin/valknut-load.sh +260 -0
- package/bin/vor-crew-state.sh +124 -0
- package/bin/wedge-notify.sh +47 -0
- package/bin/workspace-provision.sh +80 -0
- package/bin/workspace-rag.sh +150 -0
- package/bin/wyrd-db.sh +47 -0
- package/bin/yggdrasil.sh +152 -0
- package/bin/ymir-edit.sh +145 -0
- package/bin/ymir-install.sh +641 -0
- package/bin/ymir-invite.sh +93 -0
- package/bin/ymir-isolation.sh +88 -0
- package/bin/ymir-migrate.sh +61 -0
- package/bin/ymir-platform.sh +348 -0
- package/bin/ymir-say.sh +97 -0
- package/bin/ymir-setup-auth.sh +108 -0
- package/bin/ymir-validate.sh +173 -0
- package/bin/ymir.js +74 -16
- package/docs/Architecture.md +339 -0
- package/docs/design.md +351 -0
- package/docs/installations/README.md +63 -0
- package/docs/installations/ymir-home.md +93 -0
- package/docs/integration.md +105 -0
- package/docs/lore.md +1056 -0
- package/docs/research/agent-harnesses.md +290 -0
- package/docs/runbooks/README.md +19 -0
- package/docs/runbooks/a2a.md +91 -0
- package/docs/runbooks/agent-permissions.md +99 -0
- package/docs/runbooks/agents.md +57 -0
- package/docs/runbooks/models.md +69 -0
- package/docs/runbooks/realm-onboarding.md +60 -0
- package/docs/runbooks/secrets-and-hoard.md +60 -0
- package/docs/runbooks/updates-and-migrations.md +110 -0
- package/docs/runbooks/worktrees-isolation.md +72 -0
- package/docs/session-start.md +105 -0
- package/docs/skillopt-integration.md +321 -0
- package/docs/sync-system.md +66 -0
- package/docs/workspaces.md +104 -0
- package/docs/ymir-rut.md +260 -0
- package/package.json +44 -14
- package/packaging/build.sh +74 -0
- package/packaging/macos/Ymir Installer.command +43 -0
- package/packaging/windows/ymir-setup.nsi +74 -0
- package/scripts/README.md +22 -0
- package/scripts/electron.sh +210 -0
- package/scripts/start.sh +167 -0
- package/scripts/stop.sh +113 -0
- package/install.sh +0 -35
|
@@ -0,0 +1,571 @@
|
|
|
1
|
+
# Installation & First Setup — stand the whole system up
|
|
2
|
+
|
|
3
|
+
> **Purpose:** Everything Galdr must know to install, provision, and repair
|
|
4
|
+
> Ymir for an operator who does not have it. The code is authoritative; this
|
|
5
|
+
> page is the map.
|
|
6
|
+
|
|
7
|
+
One command sets up the whole system for the user; it self-heals what it can and
|
|
8
|
+
reports what it cannot. It **asks for consent first** (accept the plan, or pass
|
|
9
|
+
`--yes` for non-interactive use), and it **validates at the end** that what it
|
|
10
|
+
claims is actually running.
|
|
11
|
+
|
|
12
|
+
```
|
|
13
|
+
bin/ymir-install.sh # the first setup (idempotent; asks to proceed)
|
|
14
|
+
bin/ymir-install.sh --check # report only, no writes, no prompt
|
|
15
|
+
bin/ymir-install.sh --yes # non-interactive (accept the plan)
|
|
16
|
+
bin/ymir-install.sh --skip-engines --skip-services
|
|
17
|
+
bin/ymir-install.sh --no-desktop # don't open the desktop apps at the end
|
|
18
|
+
bin/ymir-install.sh --status # alias of --check
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## The steps
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
install[20]{step,what,self-heals}:
|
|
25
|
+
"panes","the run shown in a herdr pane","bin/herdr-run.sh sits a pane beside the caller when inside herdr; inline otherwise — a pane that cannot be raised never loses the work"
|
|
26
|
+
"prereqs","git python3 bun docker|podman gh · mcp<2","bin/prereq-ensure.sh installs bun+uv+mcp in user space; engram is an honest optional SKIP"
|
|
27
|
+
"memory-well","the engram engine (Mimirsbrunn)","optional; reported with the exact next command, never a fake fix"
|
|
28
|
+
"tree","workspace/{work,personal}/<domains>, companies/, workspaces.yaml, projects.yaml, and the hoard OUTSIDE the repo (secrets/ · docs/ · identity/ · tenants/ at $YMIR_HOARD, else $YMIR_HOME)","creates if missing; hoard_root resolves through bin/hoard-lib.sh so no script can point the hoard inside the checkout (Rule 04), and an empty secrets/platform.env (0600) is seeded so bin/hodd.sh emit resolves"
|
|
29
|
+
"engines","treehouse · sandcastle · no-mistakes","installs treehouse + no-mistakes from their installers"
|
|
30
|
+
"hermes","the Nous Research agent runtime","installs via bin/hermes-ensure.sh when absent"
|
|
31
|
+
"sessrumnir","the Sessrúmnir desktop GUI (vendored pi-desktop at apps/sessrumnir)","bin/sessrumnir-ensure.sh installs deps + builds on first run (deps are never committed); launch via bin/sessrumnir.sh"
|
|
32
|
+
"backend","Þjazi — herdr (protocol 14+) or tmux","bin/herdr-ensure.sh detects/tests version, installs via the pinned installer or falls back to tmux"
|
|
33
|
+
"host","this machine — learnt on EVERY host","bin/omarchy-sense.sh learns the setup, bin/desktop-place.sh places the apps, the Omarchy post-update hook (when Omarchy), the wedge-alarm channel, and (on Omarchy) an OFFER of the suggested shell plugins — listed, never installed unbidden; seeds the private config/agents.yaml from its example"
|
|
34
|
+
"sandbox","utgard-runner:latest image","builds via bin/utgard.sh build on Docker or rootless Podman; distinguishes an unreachable engine from a build failure"
|
|
35
|
+
"memory","engram store + harness MCP registrations","raises the bridge; reports MCP coverage"
|
|
36
|
+
"smidja","smidja/smidja_data/smidja.db","bin/smidja-bootstrap.sh creates it from the tracer schema + a bootstrap session"
|
|
37
|
+
"visualizer","the Smíðja visualizer UI (Vue, served on :8437)","builds ./dist with bun when absent — the API serves the UI from dist, and without it the API answers but shows no interface"
|
|
38
|
+
"loaders","agents/skills into the harnesses","runs bin/valknut-load.sh"
|
|
39
|
+
"gates","the git delivery gates — secret-guard (pre-commit), branch-guard + changelog-guard (pre-push)","bin/secret-guard.sh --install and bin/changelog-guard.sh --install seat the versioned guards into .git/hooks, so the gate is live from the first commit of a fresh clone; idempotent"
|
|
40
|
+
"invite","the way in for anyone else — an invite code","bin/ymir-invite.sh ensure mints one only when nothing is live, so the step is idempotent; the code is printed at the end of the run and again in workspace/INSTALL.md"
|
|
41
|
+
"register","workspace/INSTALL.md","writes the record"
|
|
42
|
+
"services","gate API, SPA, Nornir, bridges, visualizer","raises via scripts/start.sh (which builds the visualizer UI when ./dist is absent)"
|
|
43
|
+
"desktop","Hlidskjalf + Smíðja desktop apps","bin/desktop-place.sh puts each on its OWN numbered desktop (preferring EMPTY ones); scripts/electron.sh start --both self-heals the Electron binary"
|
|
44
|
+
"validate","the running system","bin/ymir-validate.sh — live port/store/process checks"
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
**22** `step_*` functions are defined. A step is not a row: one step may emit
|
|
48
|
+
several. `prereqs` also emits `memory-well`, `host` also emits `agents-config`,
|
|
49
|
+
`smidja` also emits `visualizer`, and `spa` also emits `hlidskjalf`. `--check`
|
|
50
|
+
skips the runtime-only steps (`services`, `desktop`, `validate`), which have
|
|
51
|
+
nothing to report when the runtime is not raised, so a real run prints those
|
|
52
|
+
three in addition. The exact set is whatever the host honestly has — never
|
|
53
|
+
assume the count:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
bash bin/ymir-install.sh --check | grep -cE '^ "' # the honest count, on your host
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Configuration is never hardcoded (Rule 07)
|
|
60
|
+
|
|
61
|
+
Every port, host, endpoint, path, and credential is resolved from env/config with
|
|
62
|
+
**one documented default** — never a literal in shipped runtime. Ports read
|
|
63
|
+
`HLIDSKJALF_PORT` / `HLIDSKJALF_API_PORT` / `SMIDJA_VIZ_API_PORT`, the SPA bind
|
|
64
|
+
host reads `HLIDSKJALF_HOST`, and a deployment overrides them in its env file
|
|
65
|
+
(Quadlet/Compose), never by patching the core. Law: `RULES/07-config.md`.
|
|
66
|
+
|
|
67
|
+
## Container engine: Docker **or** rootless Podman
|
|
68
|
+
|
|
69
|
+
The core never assumes an engine binary. `bin/ymir-platform.sh` resolves whichever
|
|
70
|
+
this host can reach (`YMIR_CONTAINER_ENGINE` forces one) and exposes:
|
|
71
|
+
|
|
72
|
+
- `ymir_container_engine` / `ymir_container_engine_name` — `docker` or `podman`.
|
|
73
|
+
- `ymir_engine_is_podman` — true even when a `docker` binary fronts Podman (the
|
|
74
|
+
podman-docker shim).
|
|
75
|
+
- `ymir_volume_suffix` — `:Z` whenever SELinux is enforcing (Docker and Podman
|
|
76
|
+
both need the relabel), else empty.
|
|
77
|
+
- `ymir_rootless_podman` — rootless Podman needs `--userns=keep-id` so a bind
|
|
78
|
+
mount lands owned by the invoking user.
|
|
79
|
+
|
|
80
|
+
`bin/utgard.sh`, `bin/einherjar-spawn.sh`, `bin/valhalla.sh`, `bin/ymir-validate.sh`,
|
|
81
|
+
this installer, and `bin/prereq-ensure.sh` all use these; none names an engine
|
|
82
|
+
directly. **Quadlet**-managed containers (Podman + systemd) surface as
|
|
83
|
+
`systemd --user` units, which the process hall lists. A host-managed deployment
|
|
84
|
+
layer (Quadlet, compose, bare) sits **over** this agnostic core — never inside it.
|
|
85
|
+
|
|
86
|
+
## The visualizer UI
|
|
87
|
+
|
|
88
|
+
The Smíðja visualizer **API** runs on `:8437` and serves its **UI** from
|
|
89
|
+
`apps/visualizer/dist`. A fresh clone has no `dist`, so the API answers but shows
|
|
90
|
+
"No ./dist build found" — an install gap. The installer (and `scripts/start.sh`)
|
|
91
|
+
now build it when absent:
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
(cd .agents/skills/smidja-factory/apps/visualizer && bun run build) # vue-tsc + vite
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
`bin/ymir-validate.sh` reports `visualizer` FAIL when `./dist` is missing, so the
|
|
98
|
+
gap cannot silently return.
|
|
99
|
+
|
|
100
|
+
## Desktop placement (Omarchy desktops, not monitors)
|
|
101
|
+
|
|
102
|
+
On Omarchy the numbered **desktops** (1 2 3 4 5 …) are the "screens" an operator
|
|
103
|
+
switches between. `bin/desktop-place.sh` gives each Ymir app its **own** desktop,
|
|
104
|
+
**preferring an empty one**, so the apps open separated and reachable with
|
|
105
|
+
`Super+<n>` rather than stacking on the active desktop.
|
|
106
|
+
|
|
107
|
+
```
|
|
108
|
+
bin/desktop-place.sh plan # which desktop each app would take
|
|
109
|
+
bin/desktop-place.sh apply # write the rules + hyprctl reload
|
|
110
|
+
bin/desktop-place.sh status # what is installed
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
It writes `~/.config/hypr/ymir-desktops.lua` using Omarchy's own idiom —
|
|
114
|
+
`o.window({ class = "^ymir-hlidskjalf$" }, { workspace = "2" })` — and adds one
|
|
115
|
+
`require("hypr.ymir-desktops")` line to the user's `hyprland.lua`. It **never**
|
|
116
|
+
touches `/usr/share/omarchy/`. Verify with `hyprctl configerrors` (must be empty).
|
|
117
|
+
On a non-Omarchy host the step is a clean SKIP.
|
|
118
|
+
|
|
119
|
+
## The Þjazi backend (herdr-first)
|
|
120
|
+
|
|
121
|
+
Ymir spawns agents into terminal panes, so a terminal backend must exist. Ymir is
|
|
122
|
+
**herdr-first**: `herdr` (Þjazi) is preferred, `tmux` is the accepted reference
|
|
123
|
+
backend, and a missing backend is reported — never a silent fallback.
|
|
124
|
+
|
|
125
|
+
```
|
|
126
|
+
backend_priority[3]{rank,backend,note}:
|
|
127
|
+
"1","herdr","preferred; protocol 14+ for panes, 0.8.0+ for presentation spaces"
|
|
128
|
+
"2","tmux","verified reference backend; always acceptable"
|
|
129
|
+
"3","none","spawn is refused with a plain reason"
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
```
|
|
133
|
+
bin/herdr-ensure.sh status # what is present, and does it meet the floor
|
|
134
|
+
bin/herdr-ensure.sh ensure --install # install via the pinned, SHA-verified installer
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
`ensure` installs through `.agents/backend/fm-install-herdr.sh` (exact version +
|
|
138
|
+
protocol check), and falls back to reporting `tmux` when herdr cannot be fetched.
|
|
139
|
+
Selection order for the running system: `config/backend` → `BROKK_BACKEND` →
|
|
140
|
+
`HERDR_ENV=1` → else tmux. Full reference: the `ymir` skill, `assets/thjazi.md`.
|
|
141
|
+
|
|
142
|
+
## Suggested Omarchy plugins (offered, never forced)
|
|
143
|
+
|
|
144
|
+
Omarchy's shell is plugin-shaped, and a few registry plugins are Ymir's own organs
|
|
145
|
+
rendered on the desktop. `bin/omarchy-plugins.sh` suggests them and installs only
|
|
146
|
+
what the Allfather accepts.
|
|
147
|
+
|
|
148
|
+
```
|
|
149
|
+
bin/omarchy-plugins.sh list # what Ymir suggests, and why
|
|
150
|
+
bin/omarchy-plugins.sh installed # reads omarchy's own plugin list
|
|
151
|
+
bin/omarchy-plugins.sh suggest # the offer (no install)
|
|
152
|
+
bin/omarchy-plugins.sh add <id> # install one, with consent
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
The core three are Ymir's organs: **Herdr Watch** (Þjazi in the bar), **Hermes
|
|
156
|
+
Deck** (our worker runtime), **Skill Manager** (the Galdr family across harnesses).
|
|
157
|
+
Installation uses Omarchy's own verb — `omarchy plugin add <repo> --enable` — never
|
|
158
|
+
a raw clone.
|
|
159
|
+
|
|
160
|
+
**These run unsandboxed inside the shell.** The registry "validates listings, not
|
|
161
|
+
plugin security", so nothing installs without an explicit yes (`--yes` for
|
|
162
|
+
non-interactive callers; without it a non-interactive `add` refuses with exit 3).
|
|
163
|
+
The installer only *offers*.
|
|
164
|
+
|
|
165
|
+
## Consent
|
|
166
|
+
A real install prints its plan and waits for `[y/N]`. Declining changes nothing
|
|
167
|
+
(exit 3). `--check` never prompts. A non-interactive caller without `--yes` is
|
|
168
|
+
refused rather than silently proceeding.
|
|
169
|
+
|
|
170
|
+
The plan names every change, including the terminal backend (herdr/tmux), the
|
|
171
|
+
host learning, and the desktop placement — so the operator accepts what is
|
|
172
|
+
actually done, not a shorter list that drifted behind the code.
|
|
173
|
+
|
|
174
|
+
## The operator's way in (auth) — `bin/ymir-setup-auth.sh`
|
|
175
|
+
|
|
176
|
+
A fresh checkout seeds **no credential**, so the gate has no way in until the
|
|
177
|
+
operator sets one. `step_auth` (interactive install prompts; `--yes`/non-tty
|
|
178
|
+
defers) covers two doors:
|
|
179
|
+
|
|
180
|
+
```bash
|
|
181
|
+
bin/ymir-setup-auth.sh status # which door (if any) is configured
|
|
182
|
+
bin/ymir-setup-auth.sh set [--user U] # a local password -> HLIDSKJALF_AUTH in .env.local
|
|
183
|
+
bin/ymir-setup-auth.sh github # GitHub sign-in -> GITHUB_CLIENT_ID + GITHUB_CLIENT_SECRET
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
Both write `.env.local` (0600, gitignored); a secret is never printed or put in a
|
|
187
|
+
child process's argv. The gate reads `HLIDSKJALF_AUTH` (`user:pass`) and the
|
|
188
|
+
GitHub OAuth keys (`/api/auth/github`; sign-in names a login but never grants
|
|
189
|
+
access on its own — an account/invite is still required). Restart the gate after
|
|
190
|
+
setting a credential. One login is meant to cover every surface — see the shared
|
|
191
|
+
session below.
|
|
192
|
+
|
|
193
|
+
## Letting someone else in (invites)
|
|
194
|
+
|
|
195
|
+
One operator owns the instance. The installer mints an **invite code**
|
|
196
|
+
(`step_invite`) and prints it at the end of the run; share that code and someone
|
|
197
|
+
else can create their own account at the gate login screen. Registration is
|
|
198
|
+
closed unless a live code exists, so an instance is never accidentally open.
|
|
199
|
+
|
|
200
|
+
```bash
|
|
201
|
+
bin/ymir-invite.sh mint [--limit N] # a new code (default ceiling 5 accounts)
|
|
202
|
+
bin/ymir-invite.sh list # every code, what is spent, who is in
|
|
203
|
+
bin/ymir-invite.sh revoke <CODE> # take one back, now
|
|
204
|
+
bin/ymir-invite.sh where # where the accounts live on this machine
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
Accounts are stored in `~/.config/ymir/accounts.json` (mode `0600`), machine
|
|
208
|
+
state that never enters the repo, with argon2id hashes only. The operator's own
|
|
209
|
+
credentials stay `HLIDSKJALF_AUTH` in `.env.local` — invites are for everyone
|
|
210
|
+
*else*. Full surface: the galdr `hlidskjalf-ui.md` asset.
|
|
211
|
+
|
|
212
|
+
## Validation
|
|
213
|
+
|
|
214
|
+
After the runtime is up, `bin/ymir-validate.sh` observes the result: prerequisites,
|
|
215
|
+
the Utgard image, the gate API (`:3889`), the SPA (`:3888`), Bifrost (`:4603`),
|
|
216
|
+
Nornir cron, `smidja.db`, the desktop apps, the well (`:4602`), and the audit
|
|
217
|
+
ledger. A FAIL means the install is not usable; a WARN means a documented-optional
|
|
218
|
+
part is off. `--json` for machine consumption.
|
|
219
|
+
|
|
220
|
+
## What the system adopts (engines)
|
|
221
|
+
|
|
222
|
+
| Engine | Norse shell | Role |
|
|
223
|
+
|---|---|---|
|
|
224
|
+
| **treehouse** (`kunchenguid/treehouse`) | Yggdrasil | reusable worktree pool |
|
|
225
|
+
| **sandcastle** (`mattpocock/sandcastle`) | Utgard | Docker/Podman/Vercel sandboxes |
|
|
226
|
+
| **no-mistakes** (`kunchenguid/no-mistakes`) | Mjollnir · Glitnir | clean-PR validation gate |
|
|
227
|
+
| **Hermes** (`NousResearch/hermes-agent`, MIT) | — (product name) | worker agent runtime: own brain, memory, skills, subagents, sandbox backends |
|
|
228
|
+
| **pi-desktop** (`FaqFirebase/pi-desktop`, Apache-2.0) | **Sessrúmnir** (vendored at `apps/sessrumnir`) | desktop GUI for the Pi/OMP coding agents — the seat-hall, themed with the Ymir way-of palette |
|
|
229
|
+
|
|
230
|
+
## Missing dependencies
|
|
231
|
+
|
|
232
|
+
- **Fixable in user space** (no sudo): `bun`, `uv`, `mcp<2>` — via
|
|
233
|
+
`bin/prereq-ensure.sh`. `treehouse`, `no-mistakes`, **Hermes**, and the **Þjazi
|
|
234
|
+
backend** (herdr, or tmux) are installed by their own ensure/steps.
|
|
235
|
+
- **Needs a system package** (reported with the exact command): `git`,
|
|
236
|
+
`python3`, `docker`, `gh`.
|
|
237
|
+
- **Optional, honest SKIP:** the `engram` memory engine. The published PyPI
|
|
238
|
+
`engram` is **not** Ymir's engine (it is an unrelated scientific package), so
|
|
239
|
+
the installer reports the well as off rather than installing the wrong thing.
|
|
240
|
+
- **Offline:** engine/Hermes/herdr installers fail gracefully and are reported;
|
|
241
|
+
re-run when the network returns.
|
|
242
|
+
|
|
243
|
+
## Hermes specifically (`bin/hermes-ensure.sh`)
|
|
244
|
+
|
|
245
|
+
```
|
|
246
|
+
hermes-ensure.sh status # hermes[1]{installed,version,path,method}
|
|
247
|
+
hermes-ensure.sh ensure --install # install if absent, then report
|
|
248
|
+
hermes-ensure.sh install # curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
A user who lacks Hermes gets it at setup (`hermes` step). Config/identity
|
|
252
|
+
(`hermes setup`, auth) stays the user's own; Ymir guarantees only the runtime.
|
|
253
|
+
|
|
254
|
+
## Sessrúmnir specifically (`bin/sessrumnir-ensure.sh`, `bin/sessrumnir.sh`)
|
|
255
|
+
|
|
256
|
+
```
|
|
257
|
+
sessrumnir-ensure.sh status # sessrumnir[1]{dir,deps,built,electron}
|
|
258
|
+
sessrumnir-ensure.sh ensure --install # install deps + build when absent, then report
|
|
259
|
+
sessrumnir-ensure.sh install # npm install + electron-binary heal + npm run build
|
|
260
|
+
sessrumnir.sh start [path] # launch the seat-hall (deps installed on first run)
|
|
261
|
+
sessrumnir.sh status | stop
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
Deps are never committed; the ensure step installs them on first run, exactly as
|
|
265
|
+
`scripts/electron.sh` does for the other desktop apps. The external engine keeps
|
|
266
|
+
its product name `pi-desktop`; the GUI the user sees is Sessrúmnir, themed with
|
|
267
|
+
Ymir's deep-navy palette. The Omarchy launcher entry is rendered from
|
|
268
|
+
`apps/sessrumnir/resources/ymir-sessrumnir.desktop.in` by `bin/desktop-place.sh`
|
|
269
|
+
(placement + `SUPER+B`).
|
|
270
|
+
|
|
271
|
+
## Neutral tenant defaults — a fresh Ymir is a distro, not the company
|
|
272
|
+
|
|
273
|
+
A fresh install ships **no company of its own**. `bin/ymir-install.sh` seeds one
|
|
274
|
+
`personal` workspace and an **empty** projects registry (a commented example
|
|
275
|
+
only); it never writes a company slug, a company remote, or a `work (company: …)`
|
|
276
|
+
line. The runtime resolves the active realm **neutrally** through
|
|
277
|
+
`bin/realm-lib.sh` (`ymir_active_realm`): `data/realm.md` (first line) → the first
|
|
278
|
+
non-example tenant under `svartalfaheim/` → `default`. **No script may fall back
|
|
279
|
+
to a company slug.** The reference tenant the distro was built for lives at
|
|
280
|
+
`svartalfaheim/examples/wayof/` — an example to copy, never the default. A `work`
|
|
281
|
+
workspace must name its own company: `workspace-provision.sh` requires
|
|
282
|
+
`--company <slug>`.
|
|
283
|
+
|
|
284
|
+
## Per-workspace provisioning
|
|
285
|
+
|
|
286
|
+
```
|
|
287
|
+
bin/workspace-provision.sh <name> --kind work|personal [--domains a,b,c] [--company <slug>]
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
Creates `workspace/<name>/<domains>/`, registers it in `workspaces.yaml`, and
|
|
291
|
+
for a **work** workspace attaches it to the tenant container
|
|
292
|
+
`svartalfaheim/<company>/`. `--company` is required for a work workspace — the
|
|
293
|
+
company is the operator's to name; Ymir ships no default.
|
|
294
|
+
|
|
295
|
+
## Verify
|
|
296
|
+
|
|
297
|
+
```
|
|
298
|
+
bin/ymir-install.sh --check # all steps OK/WARN
|
|
299
|
+
bin/ymir-validate.sh # the running system actually works
|
|
300
|
+
bin/herdr-ensure.sh status # the Þjazi backend and its protocol floor
|
|
301
|
+
bin/omarchy-sense.sh status # what Ymir has learnt about this host
|
|
302
|
+
bin/saga-session-start.sh # the session digest
|
|
303
|
+
bash .agents/skills/galdr-ymirsystem/scripts/compliance-check.sh
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
On an **Omarchy** host the installer also learns the machine
|
|
307
|
+
(`bin/omarchy-sense.sh`) and installs a `post-update` hook so Ymir re-learns it
|
|
308
|
+
every time Omarchy updates. On a non-Omarchy host that step is a clean SKIP.
|
|
309
|
+
|
|
310
|
+
Rule: the installer is **idempotent** — running it again changes nothing but
|
|
311
|
+
fills gaps. It never overwrites real user data.
|
|
312
|
+
|
|
313
|
+
## Node dependencies in a fresh clone — the postinstall trap
|
|
314
|
+
|
|
315
|
+
A clone never carries `node_modules`. Two components need them, and each has its
|
|
316
|
+
own package manager:
|
|
317
|
+
|
|
318
|
+
```bash
|
|
319
|
+
# Hlidskjalf (npm + package-lock.json) — what scripts/start.sh runs
|
|
320
|
+
cd apps/hlidskjalf && npm install --no-audit --no-fund
|
|
321
|
+
npm run typecheck && npm run build # dist/ is what the SPA serves
|
|
322
|
+
|
|
323
|
+
# Smiðja visualizer (bun + bun.lock)
|
|
324
|
+
cd .agents/skills/smidja-factory/apps/visualizer && bun install && bun run build
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
The visualizer's `dist/` is not optional: its API serves the UI from `./dist`,
|
|
328
|
+
and without a build it answers the API but prints *"No ./dist build found"*.
|
|
329
|
+
|
|
330
|
+
### The trap: install scripts can be skipped silently
|
|
331
|
+
|
|
332
|
+
Newer npm versions gate package install scripts (`allowScripts`). When a script
|
|
333
|
+
is not approved the install still reports success, so you get a **half-broken
|
|
334
|
+
tree that passes its own build**:
|
|
335
|
+
|
|
336
|
+
```
|
|
337
|
+
2 packages have install scripts not yet covered by allowScripts:
|
|
338
|
+
electron@33.4.11 (postinstall: node install.js)
|
|
339
|
+
esbuild@0.25.12 (postinstall: node install.js)
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
- `esbuild` survives it (its binary arrives through the platform-specific
|
|
343
|
+
package), so `npm run build` succeeds and everything looks healthy.
|
|
344
|
+
- **`electron` does not.** Its postinstall downloads the ~100 MB runtime; without
|
|
345
|
+
it `node_modules/electron/dist/` is left partial and `path.txt` is never
|
|
346
|
+
written, so the desktop shell cannot start — while the web app builds perfectly.
|
|
347
|
+
|
|
348
|
+
Detect it:
|
|
349
|
+
|
|
350
|
+
```bash
|
|
351
|
+
npm install-scripts ls # what is unapproved
|
|
352
|
+
node_modules/electron/dist/electron --version # fails if skipped
|
|
353
|
+
cat node_modules/electron/path.txt # absent if skipped
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
Fix it:
|
|
357
|
+
|
|
358
|
+
```bash
|
|
359
|
+
npm install-scripts approve electron esbuild
|
|
360
|
+
npm rebuild electron
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
If the rebuild still exits **silently** and `dist/` stays partial, the download
|
|
364
|
+
is cached but was not re-extracted — complete it by hand, which is all the
|
|
365
|
+
package's own installer does:
|
|
366
|
+
|
|
367
|
+
```bash
|
|
368
|
+
ZIP=$(ls ~/.cache/electron/*/electron-v*-linux-x64.zip | head -1)
|
|
369
|
+
rm -rf node_modules/electron/dist && mkdir -p node_modules/electron/dist
|
|
370
|
+
unzip -q -o "$ZIP" -d node_modules/electron/dist
|
|
371
|
+
printf 'electron' > node_modules/electron/path.txt # the linux binary name
|
|
372
|
+
chmod +x node_modules/electron/dist/electron
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
**Verify the install as a whole**, not just that a build passed: the electron and
|
|
376
|
+
esbuild binaries report versions, both `dist/` directories exist, and
|
|
377
|
+
`bin/ymir-install.sh --check` reports the visualizer and smidja green.
|
|
378
|
+
|
|
379
|
+
## Platform support — Linux, macOS, Windows
|
|
380
|
+
|
|
381
|
+
Ymir runs on Linux (native), macOS (native) and Windows (through **WSL2**, with
|
|
382
|
+
MSYS/Git Bash as best-effort). The runtime is bash, so Windows means a POSIX
|
|
383
|
+
shell: WSL2 is the supported path, and it is also the only one where the Linux
|
|
384
|
+
GPU and service paths behave normally.
|
|
385
|
+
|
|
386
|
+
### One place knows the difference
|
|
387
|
+
|
|
388
|
+
`bin/ymir-platform.sh` is the portability layer. It defines functions only and is
|
|
389
|
+
sourced, never executed:
|
|
390
|
+
|
|
391
|
+
```bash
|
|
392
|
+
. "$ROOT/bin/ymir-platform.sh" # scripts already do this via the shim block
|
|
393
|
+
```
|
|
394
|
+
|
|
395
|
+
| Need | Function | Why it exists |
|
|
396
|
+
|---|---|---|
|
|
397
|
+
| Which OS | `ymir_os` → `linux` \| `macos` \| `wsl` \| `msys` | branching, once |
|
|
398
|
+
| CPU count | `ymir_nproc` | `nproc` is GNU; macOS uses `sysctl -n hw.ncpu` |
|
|
399
|
+
| Resolve a path | `ymir_readlink_f` | BSD `readlink` has no `-f`; mirrors GNU semantics including the "parent must exist" rule |
|
|
400
|
+
| File facts | `ymir_stat_mtime`, `ymir_stat_size`, `ymir_stat_id`, `ymir_stat_birth`, `ymir_stat_mode` | GNU `stat -c` vs BSD `stat -f`, and birth time exists on both but differently |
|
|
401
|
+
| Timing | `ymir_epoch_ns` | BSD `date` has no `%N` |
|
|
402
|
+
| A pid's command line | `ymir_pid_cmdline`, `ymir_pid_matches` | `/proc` is Linux-only; falls back to `ps -o command=` |
|
|
403
|
+
| Signal a process by pattern | `ymir_kill_matching` | `pkill` is absent on some MSYS/WSL images; falls back to `ps` + `kill` |
|
|
404
|
+
| Detach a process | `ymir_detach` | `setsid` is absent on macOS; falls back to `nohup` |
|
|
405
|
+
| Exclusive lock | `ymir_lock` | `flock` is Linux; falls back to an atomic `mkdir` lock |
|
|
406
|
+
| Services | `ymir_service_backend`, `ymir_service_active` | `systemd` on Linux, `launchd` on macOS, neither elsewhere |
|
|
407
|
+
| GPUs | `ymir_gpu_name`, `ymir_gpu_mem_used` | never assume NVIDIA: `nvidia-smi`, then `rocm-smi`, then Apple's unified memory |
|
|
408
|
+
| Paths | `ymir_tmp`, `ymir_expand_tilde` | `TMPDIR`/`TEMP` vary; a leading `~` must be expanded explicitly |
|
|
409
|
+
|
|
410
|
+
Scripts that need any of these carry a short shim block near the top that finds
|
|
411
|
+
and sources the library, then marks it loaded so a second source is a no-op:
|
|
412
|
+
|
|
413
|
+
```bash
|
|
414
|
+
if [ -z "${YMIR_PLATFORM_LOADED:-}" ]; then
|
|
415
|
+
_ymir_dir=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
|
|
416
|
+
for _ymir_c in "$_ymir_dir/ymir-platform.sh" "$(dirname "$_ymir_dir")/bin/ymir-platform.sh"; do
|
|
417
|
+
[ -r "$_ymir_c" ] && { . "$_ymir_c"; YMIR_PLATFORM_LOADED=1; break; }
|
|
418
|
+
done
|
|
419
|
+
unset _ymir_dir _ymir_c
|
|
420
|
+
fi
|
|
421
|
+
```
|
|
422
|
+
|
|
423
|
+
### Rules for new code
|
|
424
|
+
|
|
425
|
+
1. **Never call `readlink -f`, `stat -c`, `nproc`, `setsid`, `flock`, `date +%N`
|
|
426
|
+
or read `/proc` directly.** Use the shim.
|
|
427
|
+
2. **Never assume NVIDIA.** Ask the shim; a machine may be AMD, Intel or Apple.
|
|
428
|
+
3. **Never hardcode a home directory.** Use `$HOME`, or `ymir_expand_tilde` for a
|
|
429
|
+
user-supplied path, and keep machine-specific values in generated config
|
|
430
|
+
rather than in the tree.
|
|
431
|
+
4. **Never assume a desktop.** `.desktop` files, `systemctl` and window managers
|
|
432
|
+
are Linux-shaped; a launcher must be generated for the host, not shipped as
|
|
433
|
+
one file for all.
|
|
434
|
+
5. **Test the fallback, not just the happy path.** Most of these functions exist
|
|
435
|
+
because the Linux path already worked; the risk is the other branch.
|
|
436
|
+
|
|
437
|
+
Standalone tools that ship outside a Ymir checkout (for example
|
|
438
|
+
`.agents/skills/galdr-ymirsystem/scripts/bench-one.sh`) carry their own small portable
|
|
439
|
+
helpers instead of sourcing the library, so they run anywhere on their own.
|
|
440
|
+
|
|
441
|
+
### Machine config is rendered, never shipped
|
|
442
|
+
|
|
443
|
+
Two files must contain **absolute** paths (the engram MCP server's binary and its
|
|
444
|
+
database), so a tracked copy would hand every operator the previous one's home —
|
|
445
|
+
exactly what `/home/<user>/...` did in this tree. They follow the `.env.example`
|
|
446
|
+
pattern instead:
|
|
447
|
+
|
|
448
|
+
| Shipped (tracked) | Rendered (gitignored) |
|
|
449
|
+
|---|---|
|
|
450
|
+
| `opencode.json.example` | `opencode.json` |
|
|
451
|
+
| `.pi/mcp.json.example` | `.pi/mcp.json` |
|
|
452
|
+
|
|
453
|
+
Placeholders `__YMIR_HOME__` and `__YMIR_ROOT__` are substituted with `$HOME` and
|
|
454
|
+
the checkout root by `bin/valknut-load.sh` (its `render_config`, run for both
|
|
455
|
+
`--pi` and `--opencode`). It is idempotent: identical content is left alone and
|
|
456
|
+
reported as `unchanged`.
|
|
457
|
+
|
|
458
|
+
Rule: **if a config must hold an absolute path, it is generated from an
|
|
459
|
+
`.example`, not committed.** The same applies to launchers — a `.desktop` file
|
|
460
|
+
is one OS's answer and must be produced for the host, not shipped for all.
|
|
461
|
+
|
|
462
|
+
## Omarchy-first: the core is portable, the desktop is Omarchy's
|
|
463
|
+
|
|
464
|
+
Ymir is an **Omarchy-first** system. That is a design statement, not a
|
|
465
|
+
restriction — it says which desktop integration is first-class, not which
|
|
466
|
+
machines may run the runtime.
|
|
467
|
+
|
|
468
|
+
**Two layers, deliberately separate:**
|
|
469
|
+
|
|
470
|
+
| Layer | Runs on | What it owns |
|
|
471
|
+
|---|---|---|
|
|
472
|
+
| **Portable core** | Linux, macOS, Windows (WSL2; MSYS best-effort) | the runtime — session digest, lock, watch, cron, skills — the installer's user-space prerequisites, the capability shim, generated machine config |
|
|
473
|
+
| **Omarchy layer** | Omarchy only | learning the host (`omarchy-sense`), placing each app on its own numbered Hyprland desktop (`desktop-place`), the launcher entries (`.desktop`), the suggested shell plugins, the post-update hook |
|
|
474
|
+
|
|
475
|
+
The core never grows a Hyprland branch, and the Omarchy layer is never stretched
|
|
476
|
+
into pretending it is portable. An Omarchy-specific step is gated on the host and
|
|
477
|
+
reports a clean skip anywhere else:
|
|
478
|
+
|
|
479
|
+
```bash
|
|
480
|
+
[ -d /usr/share/omarchy ] && ... || add host OK "... (not an Omarchy host)"
|
|
481
|
+
```
|
|
482
|
+
|
|
483
|
+
That is why `step_host` and `step_desktop` are the only steps that mention
|
|
484
|
+
Omarchy: everywhere else, the same code path runs on any host.
|
|
485
|
+
|
|
486
|
+
### What the Omarchy layer installs
|
|
487
|
+
|
|
488
|
+
```bash
|
|
489
|
+
bin/omarchy-sense.sh observe # learn packages, configs, Omarchy version
|
|
490
|
+
bin/omarchy-plugins.sh add # the suggested shell plugins (never forced)
|
|
491
|
+
bin/omarchy-hook-install.sh install # re-learn after every `omarchy update`
|
|
492
|
+
bin/desktop-place.sh apply # Hyprland desktops + launcher entries
|
|
493
|
+
```
|
|
494
|
+
|
|
495
|
+
`desktop-place.sh apply` does both halves of the desktop integration: it writes
|
|
496
|
+
the Hyprland window rules that give each Ymir app its own numbered desktop, and
|
|
497
|
+
it renders the launcher templates into `~/.local/share/applications/`. The
|
|
498
|
+
templates (`apps/hlidskjalf/electron/*.desktop.in`) carry `__YMIR_ROOT__` rather
|
|
499
|
+
than an absolute path, because where the checkout lives is a fact about the
|
|
500
|
+
machine, not about Ymir.
|
|
501
|
+
|
|
502
|
+
**Rule:** `RULES/05-platforms.md` — a core change updates every
|
|
503
|
+
platform layer in the same change.
|
|
504
|
+
|
|
505
|
+
**Rule for a new desktop feature:** if it is Omarchy-specific, it belongs in the
|
|
506
|
+
Omarchy layer and is gated; if it is core, it must work on every platform. Do not
|
|
507
|
+
blur the two — a branch of Hyprland logic inside a core script is how a portable
|
|
508
|
+
runtime stops being portable.
|
|
509
|
+
|
|
510
|
+
### A move must carry the memory, not just the code
|
|
511
|
+
|
|
512
|
+
Rule 06 makes this explicit, because a home swap here dropped
|
|
513
|
+
`docs/append-only-log.md`, `docs/masterplan.md`, `docs/plans/` and the private
|
|
514
|
+
business set: the backup carried `state`, `.env.local`, `data`, the realm and
|
|
515
|
+
`workspace` — but not `docs/` or `assets/`. The code arrived; the memory did not.
|
|
516
|
+
|
|
517
|
+
Before and after any migration, re-clone or swap, check the sets **by name**:
|
|
518
|
+
|
|
519
|
+
```bash
|
|
520
|
+
for f in CHANGELOG.md docs/append-only-log.md workspace/memory/runes_audit.md; do
|
|
521
|
+
[ -e "$f" ] || echo "MISSING append-only artifact: $f"
|
|
522
|
+
done
|
|
523
|
+
ls "$YMIR_HOARD/docs" "$YMIR_HOARD/identity" 2>/dev/null # the private set
|
|
524
|
+
```
|
|
525
|
+
|
|
526
|
+
A backup is only as good as its file list. If a directory is not named in the
|
|
527
|
+
backup, it is not carried.
|
|
528
|
+
|
|
529
|
+
### The memory engine is provisioned, not hinted (2026-09-12)
|
|
530
|
+
|
|
531
|
+
`bin/ymir-install.sh` used to *check* for the well engine and, failing, print
|
|
532
|
+
`SKIP "optional — install engine then run bin/mimir-bridge.sh"`. A SKIP never
|
|
533
|
+
blocks, so the well was silently down on every install — and the hint named the
|
|
534
|
+
wrong package, so following it made things worse.
|
|
535
|
+
|
|
536
|
+
Now the installer provisions it: `bin/prereq-ensure.sh engram` installs
|
|
537
|
+
**`engdbram`** (the distribution; the *module* is `engram`) into an interpreter
|
|
538
|
+
that can run it (>=3.11; uv supplies 3.12 when the distro's Python is unsuitable),
|
|
539
|
+
and records that interpreter in `~/.config/ymir/engram-python`. `bin/mimir-bridge.sh`
|
|
540
|
+
reads the same file, so the installer and the bridge always agree.
|
|
541
|
+
|
|
542
|
+
```bash
|
|
543
|
+
bin/prereq-ensure.sh engram # install and record the interpreter
|
|
544
|
+
bin/mimir-bridge.sh --start # the :4602 face over the engine
|
|
545
|
+
curl -s 127.0.0.1:4602/health # {"status": "up", "store": ".agents/memory/kaia.engram"}
|
|
546
|
+
```
|
|
547
|
+
|
|
548
|
+
**Never `pip install engram`.** PyPI's `engram` is an unrelated rendering library
|
|
549
|
+
(mitsuba/drjit/torch) whose install pulls gigabytes of CUDA wheels and still
|
|
550
|
+
leaves Ymir with no engine. The prerequisite target exists so nobody has to know
|
|
551
|
+
that: `bin/prereq-ensure.sh engram`.
|
|
552
|
+
|
|
553
|
+
### The rename sweep broke governed paths, not just prose (2026-09-12)
|
|
554
|
+
|
|
555
|
+
The `smidja` → `smidja-factory` rename left `smidja-factory-factory` behind in
|
|
556
|
+
**seven** places — `scripts/start.sh` (`VIZ_DIR`), `bin/ymir-validate.sh`,
|
|
557
|
+
`bin/ymir-install.sh` (twice: the dist probe and the build dir),
|
|
558
|
+
`bin/saga-session-start.sh` (the governed-path TOON row), `AGENTS.md` (the
|
|
559
|
+
`governed[]` table, twice) and the guard's own `asset_for` pattern.
|
|
560
|
+
|
|
561
|
+
The damage was not cosmetic: a governed path that does not exist makes the
|
|
562
|
+
pretool guard stop matching, so the smidja rule protected nothing while every
|
|
563
|
+
check still passed. A `governed` check now exists in
|
|
564
|
+
`compliance-check.sh` for exactly this class (see `runtime-compliance.md` §G13);
|
|
565
|
+
it reports `all 25 governed paths exist`.
|
|
566
|
+
|
|
567
|
+
`bin/ymir-install.sh` and `bin/ymir-validate.sh` are the two files of this asset
|
|
568
|
+
that the sweep corrected. The visualizer path is
|
|
569
|
+
`.agents/skills/smidja-factory/apps/visualizer` — **not** a doubled
|
|
570
|
+
`smidja-factory-factory`, and not the abandoned `.agents/skills/smidja/` tree
|
|
571
|
+
(stale build output, moved aside).
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# HOST-DATA.example — the shape of a host record (Vog)
|
|
2
|
+
|
|
3
|
+
Vog weighs a local model on a machine; this is the shape of the record it keeps.
|
|
4
|
+
|
|
5
|
+
A host record is **private to the machine it describes** and lives in that
|
|
6
|
+
machine's Hoard: `hodd/docs/vog/`. This file is the tracked `*.example`
|
|
7
|
+
shape (Rule 04) so a new operator knows what belongs there without inheriting
|
|
8
|
+
anyone's data.
|
|
9
|
+
|
|
10
|
+
Copy this skeleton into the Hoard and fill it in per host.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## `<hostname>` — `<device summary>`
|
|
15
|
+
|
|
16
|
+
| | |
|
|
17
|
+
|---|---|
|
|
18
|
+
| Serving GPU | `<vendor model, VRAM, link>` |
|
|
19
|
+
| Other GPU(s) | `<device, role>` |
|
|
20
|
+
| System RAM | `<size>` |
|
|
21
|
+
| Driver / runtime | `<versions>` |
|
|
22
|
+
| Model directory | `<path>` where the weights actually live |
|
|
23
|
+
|
|
24
|
+
## Serving stack on this host
|
|
25
|
+
|
|
26
|
+
| Part | Path / endpoint |
|
|
27
|
+
|---|---|
|
|
28
|
+
| Registry (single source of truth) | `<path>` |
|
|
29
|
+
| Launcher / engine | `<path>` |
|
|
30
|
+
| Router / gateway | `<path>` `:<port>` |
|
|
31
|
+
| Secondary endpoint (other device/backend) | `<path>` `:<port>` |
|
|
32
|
+
| Autostart | `<systemd unit or equivalent>` |
|
|
33
|
+
| Client wiring | `<pi / editor / other>` |
|
|
34
|
+
|
|
35
|
+
## Models on this host, verified
|
|
36
|
+
|
|
37
|
+
One row per model. `ctx` is the **verified** window — the largest value that
|
|
38
|
+
survived a real request — never the file's maximum.
|
|
39
|
+
|
|
40
|
+
| Model | quant | weights | KV bytes/token | ctx | prefill t/s | decode t/s | peak memory | alias |
|
|
41
|
+
|---|---|---|---|---|---|---|---|---|
|
|
42
|
+
| `<name>` | `<quant>` | `<GiB>` | `<KiB>` | `<ctx>` | `<n>` | `<n>` | `<MiB>` | `<alias>` |
|
|
43
|
+
|
|
44
|
+
## Configurations tried and rejected
|
|
45
|
+
|
|
46
|
+
The most useful part of the record. Keep what failed and why.
|
|
47
|
+
|
|
48
|
+
| Config | Result | Cause |
|
|
49
|
+
|---|---|---|
|
|
50
|
+
| `<ctx / kv / batch / device>` | `<load failure, crash on request, etc.>` | `<measured cause>` |
|
|
51
|
+
|
|
52
|
+
## Measured rules this host produced
|
|
53
|
+
|
|
54
|
+
Short, falsifiable statements, each traceable to a table above. For example:
|
|
55
|
+
"a smaller context ceiling changes memory and not speed — measured identical
|
|
56
|
+
decode at two ceilings" or "KV size, not weight size, decides how much context
|
|
57
|
+
fits on this device".
|
|
58
|
+
|
|
59
|
+
## Traps specific to this host
|
|
60
|
+
|
|
61
|
+
| Symptom | Cause | Fix |
|
|
62
|
+
|---|---|---|
|
|
63
|
+
| `<observable>` | `<mechanism>` | `<what to do>` |
|
|
64
|
+
|
|
65
|
+
## Reference points for a new model on this host
|
|
66
|
+
|
|
67
|
+
The budget formula with this box's numbers filled in, so the next model can be
|
|
68
|
+
sized before it is downloaded:
|
|
69
|
+
|
|
70
|
+
```
|
|
71
|
+
usable_context = (free_memory - weights - compute_buffer) / kv_bytes_per_token
|
|
72
|
+
```
|