@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/CHANGELOG.md
ADDED
|
@@ -0,0 +1,881 @@
|
|
|
1
|
+
# CHANGELOG
|
|
2
|
+
|
|
3
|
+
## 2026-09-16 — Omarchy-first, host-aware: Windows and macOS get a door
|
|
4
|
+
|
|
5
|
+
- **`bin/host-sense.sh`** — the one place that looks before anything acts. It
|
|
6
|
+
reports THIS machine: distro and family, kernel, arch, platform (linux · wsl ·
|
|
7
|
+
macos · windows), session (Wayland/X11), desktop, compositor, package manager,
|
|
8
|
+
and what the desktop can actually *do* — `placement`, `launcher`, `tray`. No
|
|
9
|
+
layer may assert a machine it is not standing on.
|
|
10
|
+
- **Omarchy stays first-class, and is now gated.** `bin/omarchy-sense.sh` opens
|
|
11
|
+
by asserting *"Ymir runs on an Omarchy host"*; on any other host it now skips
|
|
12
|
+
cleanly and points at `bin/host-sense.sh`, rather than recording the wrong
|
|
13
|
+
machine. That is Rule 05's own rule: a layer is gated on its host.
|
|
14
|
+
- **Windows has a door:** `bin/bootstrap-windows.ps1` — enables WSL2, installs
|
|
15
|
+
Ubuntu, then hands the work to `bin/ymir-install.sh` inside the distro. It is
|
|
16
|
+
honest about needing elevation and about the one reboot a fresh machine needs.
|
|
17
|
+
- **macOS has a door:** `bin/bootstrap-macos.sh` — raises Ubuntu in a Lima VM and
|
|
18
|
+
installs Ymir inside it, plus `packaging/macos/Ymir Installer.command`, a
|
|
19
|
+
double-clickable launcher for an operator who should not need a terminal.
|
|
20
|
+
- **The installers themselves:** `packaging/build.sh --exe|--mac|--check`, the
|
|
21
|
+
NSIS script `packaging/windows/ymir-setup.nsi` (→ `Ymir-Setup.exe`), and
|
|
22
|
+
`.github/workflows/ymir-installers.yml`, which builds the exe on an Ubuntu
|
|
23
|
+
runner (NSIS is a compiler, not a Windows VM) and the .pkg on a macOS runner
|
|
24
|
+
(pkgbuild is Apple-only). Signing/notarisation stay with the operator, so the
|
|
25
|
+
artefacts ship unsigned.
|
|
26
|
+
- `README.md` gains "Bringing your own machine" — the host table and the build
|
|
27
|
+
commands; its `docs/masterplan.md` pointer is corrected to `$YMIR_HOME/docs/`.
|
|
28
|
+
|
|
29
|
+
## 2026-09-16 — app packaging prepared under the @ymir scope (Amendment C, part one)
|
|
30
|
+
|
|
31
|
+
- **Scoped names.** `apps/odrerir` was `ymir-odrerir` and `apps/sessrumnir` was
|
|
32
|
+
bare `sessrumnir`; both are now `@ymir/odrerir` and `@ymir/sessrumnir`.
|
|
33
|
+
- **Publishable metadata on all four apps** (hlidskjalf, hlidskjalf-mobile,
|
|
34
|
+
odrerir, sessrumnir): `license`, `repository`, `publishConfig.access: public`,
|
|
35
|
+
a `files` surface, and `prepublishOnly` where a build exists.
|
|
36
|
+
- **Measured with `npm pack --dry-run --ignore-scripts`:** hlidskjalf 1.3 MB /
|
|
37
|
+
21 files, odrerir 2.3 MB / 15, sessrumnir 4.0 MB / 116, hlidskjalf-mobile
|
|
38
|
+
2.0 kB / 4 (source only — it has no build script). `dist/ymir.apk` is excluded
|
|
39
|
+
by `!dist/*.apk`: it took the hlidskjalf tarball from 1.3 MB to 14.5 MB, and
|
|
40
|
+
npm is not an APK channel.
|
|
41
|
+
- **`private: true` stays until the Allfather's word** — nothing can publish by
|
|
42
|
+
accident; the flip is one line per app.
|
|
43
|
+
- The app repos were already registered in `$YMIR_HOME/identity/projects.yaml`
|
|
44
|
+
(`zerwiz/{hlidskjalf,hlidskjalf-mobile,odrerir,sessrumnir,smidja}`).
|
|
45
|
+
- `no-mistakes` is initialized for this repo (`no-mistakes init`): the clean-PR
|
|
46
|
+
gate now has its local remote. The vendored skill copy stays — it is the
|
|
47
|
+
canonical tree the skill index names.
|
|
48
|
+
|
|
49
|
+
## 2026-09-16 — the loader stops deleting: merge, never overwrite
|
|
50
|
+
|
|
51
|
+
- **Root cause of the Apodex-provider loss, mended at the source.** Two writers
|
|
52
|
+
share the untracked `opencode.json`: `bin/valknut-load.sh` (structure, from
|
|
53
|
+
`opencode.json.example`) and `bin/agents-config.sh apply` (the roster —
|
|
54
|
+
providers and per-agent models, from `config/agents.yaml`). The loader
|
|
55
|
+
re-rendered with `sed` + `mv`, so because the example carried only
|
|
56
|
+
`llama.cpp`, **every loader run silently deleted the Apodex provider** that
|
|
57
|
+
lived only in the live file. `config_out` now merges deep and
|
|
58
|
+
`setdefault`-style: missing keys are added, existing ones are never
|
|
59
|
+
overwritten, and the skills path is ensured. Verified by wiping the provider
|
|
60
|
+
by hand: the next run reports `merged(provider.apodex)` and restores it, while
|
|
61
|
+
an unrelated hand-added key survives untouched. Seeding happens only when the
|
|
62
|
+
file is absent.
|
|
63
|
+
- **The changelog guard still bites, without punishing a follow-up.** The
|
|
64
|
+
pre-push guard now accepts either the pushed range touching `CHANGELOG.md` or
|
|
65
|
+
the branch's whole range since it left the trunk touching it — a commit that
|
|
66
|
+
merely lands a file the record already tells needs no micro-entry. A branch
|
|
67
|
+
whose entire range leaves untold is still refused.
|
|
68
|
+
- `bin/valknut-load.sh --status` reports the config outcome
|
|
69
|
+
(`seeded` · `merged(…)` · `unchanged` · `kept`), so a silent stomp can never
|
|
70
|
+
hide behind a "rendered" line again.
|
|
71
|
+
- `harness-integration/README.md` records the two-writer boundary.
|
|
72
|
+
|
|
73
|
+
## 2026-09-16 — one skills tree, every harness; the config stomp mended
|
|
74
|
+
|
|
75
|
+
- **Every harness now reaches `.agents/skills`.** Pi was already right — its own
|
|
76
|
+
code walks up from the cwd to `.agents/skills` (and `~/.agents/skills`), so it
|
|
77
|
+
discovers Ymir's skills natively with no link and no config; a second root
|
|
78
|
+
under `.pi/` would only double-load. Claude Code, Codex and Cursor read project
|
|
79
|
+
skills from their own directory, so `bin/valknut-load.sh` now binds
|
|
80
|
+
`.claude/skills`, `.codex/skills` and `.cursor/skills` to `../.agents/skills`.
|
|
81
|
+
opencode reaches the tree through `skills.paths`. The install step `loaders`
|
|
82
|
+
runs the loader, so a fresh install gets all of it.
|
|
83
|
+
- **The `harnesses` gate (G14) now asserts the skills surfaces too** — opencode's
|
|
84
|
+
config, Pi's native root, and the three links — so a harness silently loading
|
|
85
|
+
nothing can no longer pass.
|
|
86
|
+
- **Defect mended: the loader was stomping `opencode.json`.** `bin/valknut-load.sh`
|
|
87
|
+
renders `opencode.json` from `opencode.json.example`, and that example carried
|
|
88
|
+
only `llama.cpp` — so a loader run silently **deleted the Apodex provider**,
|
|
89
|
+
which had only ever lived in the generated file. The example now carries Apodex
|
|
90
|
+
as well, with the served id `apodex-1.0-mini`, so a re-render cannot drop it.
|
|
91
|
+
- `bin/valknut-load.sh --status` now reports every surface (agents *and* skills)
|
|
92
|
+
with a true row count instead of a hardcoded header.
|
|
93
|
+
- Assets: `harness-integration/README.md` gains the skill-location table, and
|
|
94
|
+
each per-harness file states its own mechanism.
|
|
95
|
+
|
|
96
|
+
## 2026-09-16 — Hodd lives outside the repo, and the installer makes it so
|
|
97
|
+
|
|
98
|
+
- **One resolver.** `bin/hoard-lib.sh` (`hoard_root`) is now the single answer to
|
|
99
|
+
*where private data lives*: `$YMIR_HOARD`, else `$YMIR_HOME`, else
|
|
100
|
+
`$HOME/Documents/Ymir` — never the checkout. Rule 07's one documented default,
|
|
101
|
+
in one place.
|
|
102
|
+
- **The inward default is gone.** `bin/mimir-ingest.sh`, `bin/project-git.sh` and
|
|
103
|
+
`bin/workspace-provision.sh` each fell back to `$ROOT/hodd`, so on a machine
|
|
104
|
+
with neither `YMIR_HOARD` nor `YMIR_HOME` exported, memory ingest, the project
|
|
105
|
+
registry and workspace provisioning wrote private data **inside the repo**.
|
|
106
|
+
All three (plus `bin/hodd.sh` and the installer) now resolve through the lib.
|
|
107
|
+
- **The misplaced document is out.** `0003-private-data-separation.md`, which had
|
|
108
|
+
come to rest in the repo at `hodd/docs/plans/`, now lives in the hoard at
|
|
109
|
+
`$YMIR_HOME/docs/plans/`. The repo's `hodd/` holds exactly the guard, the
|
|
110
|
+
README and `AGENTS.example.md` — Rule 04's scaffold set, and nothing else.
|
|
111
|
+
- **Installed, not assumed.** `bin/ymir-install.sh` step `tree` now raises the
|
|
112
|
+
hoard layout *outside* the repo (`bin/hodd.sh init`) and seeds an empty
|
|
113
|
+
`secrets/platform.env` (mode 0600), so `bin/hodd.sh emit secrets/platform.env`
|
|
114
|
+
resolves on a fresh machine instead of failing with "not readable".
|
|
115
|
+
`assets/installation.md` and `assets/memory-well.md` updated in the same change.
|
|
116
|
+
|
|
117
|
+
## 2026-09-16 — the pane bridge keeps its quoting; Phase 3 verified
|
|
118
|
+
|
|
119
|
+
- **The Apodex plan's last open verification is closed.** Run in a herdr pane —
|
|
120
|
+
`bin/herdr-run.sh run huginn-research -- bin/huginn-research-worker.sh --brief
|
|
121
|
+
"…" --output-dir …` — the worker recalled, dispatched to the Apodex seat, wrote
|
|
122
|
+
its verdict, and observed it into Mimirsbrunn (`status: completed`, verdict
|
|
123
|
+
*"The capital of Norway is Oslo."*). Phase 3 needed a spawn, which the
|
|
124
|
+
read-only session lock had forbidden; it was run once the lock was this
|
|
125
|
+
session's.
|
|
126
|
+
- **Defect found and mended — `bin/herdr-run.sh run` lost its quoting.** A pane
|
|
127
|
+
runs its command through a *shell*, but the bridge handed herdr the raw argv.
|
|
128
|
+
An argument containing spaces reached the pane as separate words, so
|
|
129
|
+
`--brief "In one sentence: …"` arrived as `--brief In one sentence: …` and the
|
|
130
|
+
worker died with `error: unknown arg: one`. Every real brief is multi-word, so
|
|
131
|
+
the documented invocation could never have worked. `run` now quotes each
|
|
132
|
+
argument on the way in (`printf '%q'`), verified by re-running it.
|
|
133
|
+
- Asset updated in the same change: `.agents/skills/ymir-host/assets/thjazi.md`
|
|
134
|
+
carries the quoting rule.
|
|
135
|
+
|
|
136
|
+
## 2026-09-16 — the skill-loading audit: wrong skills unloaded, the index made true
|
|
137
|
+
|
|
138
|
+
- **Three phantom skills stopped loading.** opencode was loading `galdr-compliance`
|
|
139
|
+
and `galdr-crafter` — both superseded, their work long since moved to
|
|
140
|
+
`tyr-check` — and `NSR`, the NSR scaffolding spec, which sat at
|
|
141
|
+
`assets/nsr/SKILL.md` carrying frontmatter. A recursive scanner walks
|
|
142
|
+
`skills.paths` to *any* depth, so all three were announced to every agent as
|
|
143
|
+
live skills. The two galdr crafters are removed; the NSR spec is renamed
|
|
144
|
+
`assets/nsr/scaffold-spec.md` and stays a document (its sibling templates
|
|
145
|
+
carry no frontmatter and were already inert).
|
|
146
|
+
- **Two gates added, one per failure class** (`compliance-check.sh`):
|
|
147
|
+
- **`harnesses` (G14)** — every link in `.claude/agents`, `.codex/agents`,
|
|
148
|
+
`.cursor/agents`, `.pi/agents`, `.opencode/agent` must land, one hop, in the
|
|
149
|
+
canonical `.agents/agents/` tree (Rule 02), and no nested `SKILL.md` may
|
|
150
|
+
carry frontmatter. One hop deliberately: Galdr's agent file *is* the skill,
|
|
151
|
+
by the dual-surface rule.
|
|
152
|
+
- **`skillindex` (G15)** — every real skill dir must be named in
|
|
153
|
+
`.agents/skills/README.md`, and every `.agents/skills/<name>` path the assets
|
|
154
|
+
cite must exist. Lines marked planned/legacy/superseded/removed/abandoned/
|
|
155
|
+
retired are exempt by intent.
|
|
156
|
+
- **The drift they exposed, mended:** the canonical index listed 23 skills while
|
|
157
|
+
26 existed (`groa-update`, `lifecycle`, `rules-check-drift` were missing); the
|
|
158
|
+
Galdr and `.agents/assets/agents` registries still described a layout that no
|
|
159
|
+
longer existed (`smidja/`, `gunnlod`, `hamr`, `saga`, `ymir`, `open-design`),
|
|
160
|
+
pointing the agent at files that were not there; dead paths corrected to the
|
|
161
|
+
real names (`smidja-factory`, `saga-bearings`, `urdh-hold`, `nornir-schedule`,
|
|
162
|
+
`ymir-host`, `hamr-adapters`); `brokk-craft` marked planned rather than
|
|
163
|
+
presented as a working command.
|
|
164
|
+
- **`AGENTS.md` gains the invariant:** the delivery gate is enforced in git
|
|
165
|
+
hooks seated by the install step `gates` — `branch-guard` refuses a protected
|
|
166
|
+
branch, `changelog-guard` refuses a push whose range never touches
|
|
167
|
+
`CHANGELOG.md`.
|
|
168
|
+
|
|
169
|
+
## 2026-09-16 — the delivery gates install themselves; rename drift mended
|
|
170
|
+
|
|
171
|
+
- **Install seam.** `bin/ymir-install.sh` gains step **`gates`** (after
|
|
172
|
+
`loaders`): `bin/secret-guard.sh --install` seats the pre-commit guard and
|
|
173
|
+
`bin/changelog-guard.sh --install` the pre-push (branch + changelog). A fresh
|
|
174
|
+
clone now gets the delivery gate without a manual step — `--check` reports it
|
|
175
|
+
as `gates OK|WARN`, the consent preamble names it, and
|
|
176
|
+
`assets/installation.md` carries the row in the same change.
|
|
177
|
+
- **Drift mended — found by the compliance gate, not by me.** Two symlinks
|
|
178
|
+
still pointed at the retired `galdr-cli` skill, so the last rename was not in
|
|
179
|
+
fact complete: `.agents/agents/galdr.md` (Galdr's agent surface was a **dead
|
|
180
|
+
link**) and `.agents/skills/tyr-check/assets`. Both repointed at
|
|
181
|
+
`galdr-ymirsystem`, which is where the skill and its assets live.
|
|
182
|
+
- **`AGENTS.md` TOON mend.** The `security[4]` block carried a rule wrapped
|
|
183
|
+
across two lines, which the checker counted as a fifth row. Joined to one
|
|
184
|
+
line; the block now declares and holds exactly four.
|
|
185
|
+
- **Compliance.** All ten Galdr gates green: toon · naming · mocks · syntax ·
|
|
186
|
+
json · sync · surfaces · assets · duplicates · governed.
|
|
187
|
+
|
|
188
|
+
## 2026-09-16 — Smiðja moves into the app tree
|
|
189
|
+
|
|
190
|
+
- **The smithy is an app.** Its 148 source files moved from
|
|
191
|
+
`.agents/skills/smidja-factory/` to `apps/smidja-factory/`, joining
|
|
192
|
+
hlidskjalf, odrerir and sessrumnir under `apps/`.
|
|
193
|
+
- **Path-transparent.** `.agents/skills/smidja-factory` is now a symlink to
|
|
194
|
+
`../../apps/smidja-factory`, so every existing path resolves unchanged —
|
|
195
|
+
`scripts/start.sh`, `bin/ymir-install.sh`, `bin/ymir-validate.sh`, and the
|
|
196
|
+
skill loader (`.agents/skills` is a skills path). `node_modules/` stays
|
|
197
|
+
gitignored and is not carried.
|
|
198
|
+
- **Still open** (recorded, not done): the root `smidja/` runtime tree
|
|
199
|
+
Amendment A would move to `apps/smidja/`, and Amendment C's per-app GitHub
|
|
200
|
+
repos and npm publishing.
|
|
201
|
+
|
|
202
|
+
## 2026-09-16 — the changelog guard: no push ships untold
|
|
203
|
+
|
|
204
|
+
- **Every push carries a CHANGELOG entry.** `bin/changelog-guard.sh` installs a
|
|
205
|
+
pre-push hook that reads the refs git hands it, resolves the range being
|
|
206
|
+
pushed, and refuses the push when `CHANGELOG.md` is untouched in that range.
|
|
207
|
+
A change that ships is a change that was told; the record can no longer lag
|
|
208
|
+
silently behind the code.
|
|
209
|
+
- **Rule 08 extracted and versioned.** The protected-branch check that lived
|
|
210
|
+
only inside the ad-hoc `.git/hooks/pre-push` is now `bin/branch-guard.sh`, so
|
|
211
|
+
the delivery gate is reproducible: `bin/changelog-guard.sh --install` writes
|
|
212
|
+
the pre-push that runs both guards.
|
|
213
|
+
- **Escape hatch, deliberate and loud.** `YMIR_SKIP_CHANGELOG_GUARD=1 git push`
|
|
214
|
+
when an entry truly does not belong.
|
|
215
|
+
- Checks by hand: `bin/changelog-guard.sh --range A..B`,
|
|
216
|
+
`bin/branch-guard.sh --branch main`.
|
|
217
|
+
|
|
218
|
+
## 2026-09-16 — Apodex seat verified; the Weave mended
|
|
219
|
+
|
|
220
|
+
- **Correction (cites the entry below, never rewrites it).** The earlier
|
|
221
|
+
entry said *"LM Studio is retired; its :1234 port belongs to Apodex now."*
|
|
222
|
+
That was false as carved. LM Studio still holds `:1234` and is what serves
|
|
223
|
+
the Apodex GGUF; Apodex took the **model seat**, not the server.
|
|
224
|
+
- **Live verification.** `bin/apodex-smoke-test.sh` → PASS (valid tool-capable
|
|
225
|
+
response, exit 0). `bin/huginn-research-worker.sh` with **bare defaults** →
|
|
226
|
+
`status: completed`, verdict written, observed into Mimirsbrunn. The Apodex
|
|
227
|
+
seat (`http://127.0.0.1:1234/v1`) is live.
|
|
228
|
+
- **One model id, everywhere.** The seat serves **`apodex-1.0-mini`**; the
|
|
229
|
+
worker, smoke test, `.env.example`, `opencode.json`, `config/agents.yaml.example`
|
|
230
|
+
and Huginn's profile now all say so. Previously three names drifted
|
|
231
|
+
(`apodex/Apodex-1.0-mini-Q4_K_M`, `apodex/apodex-mini-q4`, the served id) and
|
|
232
|
+
the default worker call failed with `No models loaded`.
|
|
233
|
+
- **Four defects mended.** `bin/huginn-research-worker.sh` made executable
|
|
234
|
+
(was 644 — bare invocation died with `Permission denied`); the smoke test's
|
|
235
|
+
`--serve` GGUF path corrected to
|
|
236
|
+
`~/Models/FlameF0X/Apodex-1.0-mini-Q4_K_M-GGUF/apodex-1.0-mini-q4_k_m.gguf`;
|
|
237
|
+
`bin/models-detect.sh` env var renamed from the typo `APEDEX_URL` to
|
|
238
|
+
`APODEX_URL`.
|
|
239
|
+
- **Weight truth.** The Apodex Q4_K_M weights are **21.7 GB**, not the ~4–6 GB
|
|
240
|
+
the plan assumed — it cannot sit beside a coding model. `AGENTS.md` now says
|
|
241
|
+
so: one local model at a time, by weight.
|
|
242
|
+
- **Smiðja relocated.** `.agents/skills/smidja-factory` is now a symlink to the
|
|
243
|
+
app tree at `apps/smidja-factory/`, which is where the smithy's real files
|
|
244
|
+
live (Amendment A/C of the Apodex plan).
|
|
245
|
+
- Plan (private hoard): `$YMIR_HOME/docs/plans/apodex-integration-into-ymir.md`
|
|
246
|
+
— Amendment E records the live pass, the mended defects, and the one open
|
|
247
|
+
item: the herdr-seat verification (Phase 3), which needs a spawn.
|
|
248
|
+
|
|
249
|
+
## 2026-09-16 — Apodex joins the Weave (research/planning provider)
|
|
250
|
+
|
|
251
|
+
- **Apodex provider.** Apodex-1.0-mini-Q4_K_M climbs into the machine as
|
|
252
|
+
the research/planning GGUF on `http://127.0.0.1:1234/v1`, seated
|
|
253
|
+
alongside llama.cpp coding models on :8080. LM Studio is retired; its
|
|
254
|
+
:1234 port belongs to Apodex now.
|
|
255
|
+
- **Env template.** `.env.example` gains the `APODEX_*` block; the LM
|
|
256
|
+
Studio block is marked RETIRED with its port claim corrected.
|
|
257
|
+
- **Smoke test.** `bin/apodex-smoke-test.sh` — probe or serve-and-test an
|
|
258
|
+
Apodex seat; exits 0=pass, 1=fail, 2=unavailable. Never mutates config.
|
|
259
|
+
- **Research worker.** `bin/huginn-research-worker.sh` (Apodex-powered
|
|
260
|
+
Eindri): takes a brief, recalls from Mimirsbrunn, dispatches to the
|
|
261
|
+
Apodex chat/completions seat, writes a structured verdict, observes it
|
|
262
|
+
back into the well. Wears the name **Huginn** per the naming law (the
|
|
263
|
+
research seat; Gungnir stays the skill-synthesis engine).
|
|
264
|
+
- **Agents hall.** `.agents/agents/huginn-researcher.md` binds Huginn to
|
|
265
|
+
the apodex model; `config/agents.yaml.example` registers the apodex
|
|
266
|
+
provider and Huginn's seat; `opencode.json` carries the apodex provider
|
|
267
|
+
block alongside llama.cpp; `bin/models-detect.sh` probes and emits the
|
|
268
|
+
apodex provider for the Pi model file (`~/.pi/agent/models.json`).
|
|
269
|
+
- **Install seams.** Apodex rides the existing seams: models-detect merges
|
|
270
|
+
it into the Pi models file at install; agents-config applies it into
|
|
271
|
+
opencode.json. Model provider selection documented in AGENTS.md
|
|
272
|
+
(`## Model Provider Selection`), Apache 2.0 licence noted.
|
|
273
|
+
|
|
274
|
+
## 2026-09-16 — Gunnlöð joins the hall (SkillOpt integration)
|
|
275
|
+
|
|
276
|
+
- **SkillOpt integration.** `pip install skillopt` into `.venv/`; training
|
|
277
|
+
loop (`skillopt-train`), eval (`skillopt-eval`), and nightly
|
|
278
|
+
self-evolution (`skillopt-sleep`) available for Smíðja prompts and
|
|
279
|
+
Ymir skills. Nightly Nornir job at 00:30 (bin/nornir-job-skillopt-sleep.sh),
|
|
280
|
+
staged artifacts only — Allfather approves before adopt. One-time setup:
|
|
281
|
+
`bin/skillopt-setup.sh`.
|
|
282
|
+
- **Naming.** SkillOpt adopted the name **Gunnlöð** (keeper of the mead of
|
|
283
|
+
poetry — distills trajectories into refined skill artifacts). Added to
|
|
284
|
+
`.agents/assets/agents/naming.md` (platform map, 28 subsystems),
|
|
285
|
+
`.agents/skills/galdr-ymirsystem/assets/registry.md` (skills + external tools),
|
|
286
|
+
`README.md` (System Map + Skills + gratitude), `NOTICE` (MIT attribution).
|
|
287
|
+
|
|
288
|
+
## 2026-09-13 — the imported names leave the halls (Norse naming purge)
|
|
289
|
+
|
|
290
|
+
- **"firstmate" retargeted to Ymir's own names across every Ymir-owned surface.**
|
|
291
|
+
The upstream distro's nautical vocabulary is gone from the docs, skills, `bin/`,
|
|
292
|
+
config, and the Hlidskjalf review copy: `firstmate` → **Brokk**, `secondmate` →
|
|
293
|
+
**Eindri-home**, `crew`/`crewmate` → **Eindri**, `captain` → **Allfather**
|
|
294
|
+
(`docs/lore.md`, `docs/Architecture.md`, `.agents/agents/brokk.md`,
|
|
295
|
+
`.agents/skills/herdr-panes/assets/{herdr,tmux}-backend.md`,
|
|
296
|
+
`.agents/skills/eindri-homes/assets/control-plane.md`,
|
|
297
|
+
`.agents/skills/saga-bearings/assets/board-template.html`,
|
|
298
|
+
`.agents/skills/ymir-host/assets/thjazi.md`, `bin/README.md`,
|
|
299
|
+
`apps/hlidskjalf/**`).
|
|
300
|
+
- **Engine literals kept.** Every real upstream identifier stays verbatim — the
|
|
301
|
+
Herdr labels (`firstmate`, `2ndmate-<id>`, `firstmate-<id>`), the home marker
|
|
302
|
+
`.fm-secondmate-home`, the envelope `FIRSTMATE_OP: ` and `[fm-from-firstmate]`,
|
|
303
|
+
and all `FM_*`/`fm-*` names — because `.agents/backend/` (the vendored engine)
|
|
304
|
+
and `assets/reference/` (provenance) are untouched.
|
|
305
|
+
- **Licensing.** `NOTICE` now records the upstream **firstmate** distro
|
|
306
|
+
(`github.com/kunchenguid/firstmate`, MIT, © kunchenguid) and a README "Built on"
|
|
307
|
+
section points to it; the MIT copyright/permission notice is retained.
|
|
308
|
+
- **Governed asset:** `galdr-ymirsystem/assets/hlidskjalf-ui.md` records the Allfather
|
|
309
|
+
review copy in the same change. `compliance-check.sh` 10/10 PASS.
|
|
310
|
+
|
|
311
|
+
## 2026-09-13 — The realm seat, carved (wayof)
|
|
312
|
+
|
|
313
|
+
- **Problem:** the realm tree was bare (only the shipped example), no tenant
|
|
314
|
+
was seated, and the session digest resolved the Allfather's realm to
|
|
315
|
+
`default` — his company and private holdings unreachable by the map.
|
|
316
|
+
- **Seat:** `svartalfaheim/wayof/` carved from the example — `.env.realm`,
|
|
317
|
+
`SECRETS.md`, `AGENTS.md` (persona), `domains/`, `projects/`, the five
|
|
318
|
+
workspace branches, and the 9 company cards seeded from the identity hoard
|
|
319
|
+
(askr · brokkforge · dvalin · mannheim · muninn · runestone · utgard · wayof ·
|
|
320
|
+
ymirlabs), realm field unified to `wayof`, repo paths corrected to this
|
|
321
|
+
machine. `data/realm.md` now pins `wayof` (was drifting between `way-of`,
|
|
322
|
+
`wayof`, and `default`; hoard cards + persona updated to match).
|
|
323
|
+
- **Hood:** `svartalfaheim/wayof/HOOD.md` is the map of the hoard and the
|
|
324
|
+
seat; `bin/saga-session-start.sh` stage 6 (context digest) now prints
|
|
325
|
+
`--- hood ---` whole from the realm seat, so a session opens knowing the
|
|
326
|
+
operator's holdings. Living overviews: `workspace/company/wayof-overview.md`
|
|
327
|
+
and `workspace/company/aigf.md` (hodd stays the private store; the realm
|
|
328
|
+
points at it).
|
|
329
|
+
- **Verified:** `bash -n` green; realm-lib resolves `wayof`; `realm env:
|
|
330
|
+
present`.
|
|
331
|
+
|
|
332
|
+
## 2026-09-13 — Gleipnir sees when an agent is turned off
|
|
333
|
+
|
|
334
|
+
- **Problem:** the machine lock stuck “held by another Brokk session” forever.
|
|
335
|
+
Nothing released it ( `gleipnir_lock_release` had zero callers; Pi's exit
|
|
336
|
+
hook only stopped the arm child), and liveness was `kill(0)` alone — which
|
|
337
|
+
reports a zombie (dead but unreaped) and a recycled pid as alive, so an
|
|
338
|
+
agent you turned off kept the helm until its pid happened to look gone.
|
|
339
|
+
Worse, the Sessrúmnir desktop RPC session holds the live lock yet never
|
|
340
|
+
arms supervision (no turn ever calls `gna_watch_arm`), stranding every
|
|
341
|
+
other session read-only.
|
|
342
|
+
- **Fix:** `bin/gleipnir-lock-lib.sh` now records the owner's starttime in a
|
|
343
|
+
`brokk.lock.starttime` sidecar and reaps a holder whose `/proc/<pid>/stat`
|
|
344
|
+
state is `Z`/`X` or whose starttime no longer matches (pid reuse) — dead,
|
|
345
|
+
zombie, and recycled holders are cleared at session start/acquire. Gná
|
|
346
|
+
(`gna-pi-watch.ts`) mirrors that liveness, reclaims a stale lock directly in
|
|
347
|
+
`gna_watch_arm` (`missing` no longer punts to saga-session-start.sh), and
|
|
348
|
+
drops its own lock on real process exit (`releaseLockIfOwned`); the turn-end
|
|
349
|
+
guard (`syn-turnend-guard.ts`) uses the same zombie-aware check.
|
|
350
|
+
- **Impact:** turning an agent off — cleanly, by kill (zombie), or after pid
|
|
351
|
+
reuse — frees the machine lock for the next session. The live desktop seat
|
|
352
|
+
still holds it until that app is closed or its own session arms; that is the
|
|
353
|
+
law (one live primary per machine), but it now releases and hands off
|
|
354
|
+
correctly.
|
|
355
|
+
## 2026-09-13 — the cloth reaches all three halls (Hlidskjalf · Smíðja · the seat)
|
|
356
|
+
|
|
357
|
+
- **One look, one source.** The carved cloth (the landing page's `:root`) now
|
|
358
|
+
dresses every hall, each through its own thin adapter, and `docs/design.md`
|
|
359
|
+
gained §0 *The cloth* plus the re-cut §4.1/§4.2 tables — the contract, not a
|
|
360
|
+
wish. `midgard/design-system/tokens.css` keeps every `--ymir-*` **name** and
|
|
361
|
+
changes only the values: stone `#0e0c09`/`#151209`/`#1a1610`/`#221d14`, bone
|
|
362
|
+
text `#cfc3a9`/`#9a8f75`/`#6b6250`, bronze `#c9973f` accent with `#7d5f2a` as
|
|
363
|
+
the brass rule, blood `#c2584a` danger, steel `#96a0a8` ok, brass bevel
|
|
364
|
+
`inset 0 0 0 1px rgba(201,151,79,.12)`.
|
|
365
|
+
- **Type.** Cormorant (display), Newsreader (body), IBM Plex Mono (data) — the
|
|
366
|
+
landing's three faces — with Noto Sans Runic appended to every stack so runes
|
|
367
|
+
fall through to the rune family. Hlidskjalf loads them from Google Fonts; the
|
|
368
|
+
visualizer bundles them from `@fontsource` (its `@fontsource/play` is gone).
|
|
369
|
+
- **Hlidskjalf:** 24 old-palette `rgba()` literals and every role hex in the
|
|
370
|
+
stylesheets now read tokens (`color-mix(… var(--ymir-ok) …)`); workspace tints
|
|
371
|
+
are cloth (work bronze, personal steel); the `HallsChooser` cards no longer name
|
|
372
|
+
two tokens that never existed (`--ymir-line`/`--ymir-panel`); the login's GitHub
|
|
373
|
+
button is a bone plate; the realm-tint fallbacks in `global.css` follow.
|
|
374
|
+
- **Smíðja's eye:** the default theme is **fensalir** (the titlebar toggle cycles
|
|
375
|
+
fensalir → classic → high-contrast, both overrides still winning); 77 hexes and
|
|
376
|
+
62 `rgba()`s across the components were recast onto the theme's own tokens; the
|
|
377
|
+
categorical event/lane palettes (`src/lib/events.ts`) were re-cut onto the cloth
|
|
378
|
+
while staying mutually distinct.
|
|
379
|
+
- **Sessrúmnir:** text selection is now a **theme token**
|
|
380
|
+
(`--color-selection-bg`/`-fg`) — the landing's amber `#57411a` on pale bone
|
|
381
|
+
`#f0e6cd` — carried in `fensalir`/`sessrumnir` and derived per theme for
|
|
382
|
+
everyone else; the global rule sits in `@layer base`, and the CodeMirror editor
|
|
383
|
+
needs a second unlayered rule because CodeMirror paints its selection layer with
|
|
384
|
+
unlayered CSS that beats any layered rule. A **To the Hall** button joins the
|
|
385
|
+
status bar (local `:4322` when it answers, else `hall.ymir.zerw.org`, resolved in
|
|
386
|
+
the main process).
|
|
387
|
+
- **Heraldry is not chrome:** the eight house/domain seals and the Emblem keep
|
|
388
|
+
their own colours — exactly as the landing page keeps its house seals.
|
|
389
|
+
- **Geometry is untouched** (radius, spacing, the shell): the carved-slate
|
|
390
|
+
squaring remains an open question for the Allfather.
|
|
391
|
+
- **Verified:** `tsc` clean and `npm run build` green in Hlidskjalf; the
|
|
392
|
+
visualizer builds under `vue-tsc`; Sessrúmnir's build, lint, theme tests and
|
|
393
|
+
semantic-colour check green. Headless passes: Hlidskjalf's gates render with
|
|
394
|
+
**0 console errors** (login, fleet, tasks, processes, reviews, runtime, cron,
|
|
395
|
+
stats), and the visualizer loads with 0 console problems.
|
|
396
|
+
|
|
397
|
+
## 2026-09-13 — the carved cloth reaches the seat-hall (Sessrúmnir)
|
|
398
|
+
|
|
399
|
+
- **The landing's cloth is now the seat's own look.** Every semantic token in
|
|
400
|
+
`apps/sessrumnir/src/renderer/src/index.css` `@theme` was mapped to its carved
|
|
401
|
+
twin from the landing page's `:root` (`CodeP/ymir-homepage/src/lore.html`):
|
|
402
|
+
stone `#0e0c09` (app) with panels `#151209`/`#1a1610`/`#14100b`, bone text
|
|
403
|
+
`#cfc3a9`/`#9a8f75`/`#6b6250` (faint/ghost as bone washes), bronze
|
|
404
|
+
`#c9973f` accent and `#7d5f2a` brass rule for `border-strong`, blood
|
|
405
|
+
`#c2584a`/`#7c3a30` for error, steel `#96a0a8` for success. Semantic names are
|
|
406
|
+
unchanged — only the values moved.
|
|
407
|
+
- **Fensalir** (the weaving halls) is registered as a built-in theme
|
|
408
|
+
(`themes/fensalir.json`, id `fensalir`, appended to `BUILTIN_THEME_IDS` — an
|
|
409
|
+
additive change that keeps every persisted id resolving). The seat's own
|
|
410
|
+
built-in `sessrumnir` theme was carved to the same cloth, so the default look
|
|
411
|
+
of an existing profile is the cloth on restart. A new test holds the two
|
|
412
|
+
together (`the cloth is one`) and another holds the CSS `@theme` base to the
|
|
413
|
+
theme file (`never drift`).
|
|
414
|
+
- **Cloth is the default, not a cage:** the ThemeEngine's ordering is untouched —
|
|
415
|
+
every other built-in theme, any user theme, and `high-contrast` still win when
|
|
416
|
+
chosen.
|
|
417
|
+
- **Type:** Cormorant (display), Newsreader (body), IBM Plex Mono (mono) bundled
|
|
418
|
+
from `@fontsource*` (offline, `font-src 'self'`), with Inter/JetBrains Mono
|
|
419
|
+
kept as glyph fallbacks; the landing's carved syntax palette (`--cm-*`) rides
|
|
420
|
+
along in the theme files.
|
|
421
|
+
- **Honest repairs on the way:** 29 raw `text-white` literals sat on token
|
|
422
|
+
fills where white cannot be read on bronze (2.6:1). They now read the token
|
|
423
|
+
that means "the rune on the filled plate" — `text-inverse` on `bg-accent`,
|
|
424
|
+
`text-primary` on the dark blood `bg-error` — and the settings toggle knob is
|
|
425
|
+
carved (stone when lit, bone when unlit). No colour literals remain in
|
|
426
|
+
components.
|
|
427
|
+
- **Paper:** `apps/sessrumnir/AGENTS.md` and `README.md` no longer claim the old
|
|
428
|
+
sky-on-navy palette; they describe the cloth and its rules.
|
|
429
|
+
|
|
430
|
+
## 2026-09-13 — the new tree, the mesh, the seat-hall
|
|
431
|
+
|
|
432
|
+
- **Everything in the new tree:** the Sessrúmnir work plus the orphaned fixes
|
|
433
|
+
were migrated from the `ymir-old` working tree into this canonical tree —
|
|
434
|
+
`apps/sessrumnir/` (deps vendored locally, never committed), the two
|
|
435
|
+
`bin/sessrumnir-*.sh` scripts, `step_sessrumnir` in `bin/ymir-install.sh`,
|
|
436
|
+
the Hoard registry entry, the `installation.md` asset, and the
|
|
437
|
+
`syn-watch-arm.js` continuity fix (re-arm when `.supervision-armed` exists
|
|
438
|
+
even with no task metadata). The superseded self-service register-gate work
|
|
439
|
+
was **not** ported — this tree's committed invite-gate is canonical.
|
|
440
|
+
- **Full install ran green** in the new tree: every step OK, invite minted
|
|
441
|
+
(`YMIR-DBN4-FXEX`), all five services up, `bin/ymir-validate.sh` 11/11 PASS.
|
|
442
|
+
- **Ratatoskr mesh healed:** the `a2abridge` engine (MIT,
|
|
443
|
+
`vbcherepanov/a2abridge` v3.0.0) is installed at `~/.a2abridge/bin/`, its
|
|
444
|
+
directory daemon runs on `127.0.0.1:7777`, and `bin/ratatoskr.sh
|
|
445
|
+
status|doctor` pass. Forged `bin/a2abridge-ensure.sh` (installs the engine,
|
|
446
|
+
patches the systemd unit's unwritable `/var/log` log paths to journal,
|
|
447
|
+
keeps the directory up) and wired it into migration `0002-a2a-mcp.sh`, so
|
|
448
|
+
every install/update heals the mesh instead of leaving a dangling MCP path.
|
|
449
|
+
- **MCP bridges fixed:** `engram-mcp` failed at startup (its Python env
|
|
450
|
+
lacked the `mcp` SDK; mcp 2.x renamed FastMCP, so it is pinned to `mcp<2`)
|
|
451
|
+
— the server now initializes against the `kaia.engram` store. `a2abridge`
|
|
452
|
+
MCP is wired into both pi and opencode via `bin/a2a-mcp.sh install`.
|
|
453
|
+
- **Docs:** `docs/design.md` §5.4 documents the gate exactly as committed
|
|
454
|
+
(operator credential + invite-gated registration + GitHub door + httpOnly
|
|
455
|
+
30-day session); the hlidskjalf-ui skill gained the `register` surface row.
|
|
456
|
+
|
|
457
|
+
## 2026-09-13 — Sessrúmnir, the seat-hall
|
|
458
|
+
|
|
459
|
+
- **Sessrúmnir adopted:** the Apache-2.0 **pi-desktop** GUI
|
|
460
|
+
(`FaqFirebase/pi-desktop`, v0.1.7-alpha) is vendored at `apps/sessrumnir/`
|
|
461
|
+
and rebranded **Sessrúmnir** — the seat-hall where the Allfather converses
|
|
462
|
+
with the machine. The external engine keeps its product name; the GUI the
|
|
463
|
+
user sees is Sessrúmnir, themed with the way-of palette (sky `#38bdf8` on
|
|
464
|
+
deep navy) as the new default built-in theme. Window titles, launcher,
|
|
465
|
+
package identity, tray/autostart strings, data-dir name, and the Pi logo
|
|
466
|
+
(now a Sowilo rune bolt) are rebranded; upstream `LICENSE` is preserved and
|
|
467
|
+
`NOTICE` records the adoption.
|
|
468
|
+
- **Forge scripts:** `bin/sessrumnir-ensure.sh` (status/ensure/install — deps
|
|
469
|
+
are never committed, installed on first run with the electron-binary heal
|
|
470
|
+
`scripts/electron.sh` already uses) and `bin/sessrumnir.sh`
|
|
471
|
+
(start/status/stop with a workspace argument).
|
|
472
|
+
- **Install wiring:** `bin/ymir-install.sh` gains a `sessrumnir` step (after
|
|
473
|
+
`hermes`) and lists Sessrúmnir in `workspace/INSTALL.md`; the
|
|
474
|
+
`installation.md` asset's step table, adopted-engines table, and Hermes-style
|
|
475
|
+
section are updated in the same change.
|
|
476
|
+
- **Registry & audit:** the Hoard registry (`hodd/identity/projects.yaml`)
|
|
477
|
+
gains the `sessrumnir` project (upstream remote); the adoption is inscribed
|
|
478
|
+
in Runes.
|
|
479
|
+
- **Not yet installed:** `apps/sessrumnir/node_modules` is absent — run
|
|
480
|
+
`bin/sessrumnir-ensure.sh install` when ready.
|
|
481
|
+
|
|
482
|
+
### 2026-09-13 — the seat-hall raised
|
|
483
|
+
|
|
484
|
+
- `bin/sessrumnir-ensure.sh install` completed: deps + Electron binary + build
|
|
485
|
+
all green; full test suite **989/989 pass**, typecheck and lint clean (the
|
|
486
|
+
`autostart-linux` test was updated for the new brand name). `bin/sessrumnir.sh
|
|
487
|
+
start` raised the window — Hyprland reports class `sessrumnir`, title
|
|
488
|
+
`Sessrúmnir`, data under `~/.config/sessrumnir`.
|
|
489
|
+
|
|
490
|
+
## 2026-09-12 — The well actually installs (it never did)
|
|
491
|
+
|
|
492
|
+
- **The memory engine was never installed by the installer.** `bin/prereq-ensure.sh`
|
|
493
|
+
had no `engram` target at all, and `bin/ymir-install.sh` only *checked* for it
|
|
494
|
+
and printed `SKIP "optional — install engine then run bin/mimir-bridge.sh"`. A
|
|
495
|
+
SKIP never blocks, so the well was silently down on every install.
|
|
496
|
+
- **The hint named the wrong package.** PyPI's `engram` is an unrelated
|
|
497
|
+
*rendering* library (mitsuba/drjit/torch): following the hint pulled gigabytes
|
|
498
|
+
of CUDA wheels and still left no engine. The memory engine's distribution is
|
|
499
|
+
**`engdbram`**; its module is `engram`. The pre-swap append-only log had the
|
|
500
|
+
right answer all along (`PyPI engdbram, v2.2.1`).
|
|
501
|
+
- **Now it installs.** `prereq-ensure.sh engram` installs `engdbram` into an
|
|
502
|
+
interpreter that can run it (>=3.11; uv supplies 3.12 here), records that
|
|
503
|
+
interpreter in `~/.config/ymir/engram-python`, and `bin/mimir-bridge.sh` reuses
|
|
504
|
+
it for both the check and the run. The installer provisions rather than hints,
|
|
505
|
+
and reports WARN instead of a silent SKIP when it cannot.
|
|
506
|
+
- **Verified:** `curl 127.0.0.1:4602/health` -> `{"status": "up", "store":
|
|
507
|
+
".agents/memory/kaia.engram"}`; `.agents/skills/lifecycle/smoke_test.sh` exits 0
|
|
508
|
+
with all five checks green.
|
|
509
|
+
|
|
510
|
+
## 2026-09-12 — The dashboards stop crash-looping on the iGPU
|
|
511
|
+
|
|
512
|
+
- **`scripts/electron.sh` decides its own GPU path.** Both dashboards appeared to
|
|
513
|
+
work while `coredumpctl` filled with SIGSEGV cores from
|
|
514
|
+
`electron --type=gpu-process`. An iGPU backs its graphics memory with system
|
|
515
|
+
RAM (GTT), a local model served on that same iGPU held 5.8-8.0 GiB of it, and
|
|
516
|
+
the amdgpu driver then failed the desktop's command submissions — which
|
|
517
|
+
Electron turned into a NULL dereference at a constant offset. Only the GPU
|
|
518
|
+
process died, so the windows stayed up and the failure was easy to miss.
|
|
519
|
+
`igpu_vram_small()` now reads the render device's VRAM carve-out and switches
|
|
520
|
+
to software rendering under `YMIR_IGPU_VRAM_SMALL_MIB` (default 2048). The old
|
|
521
|
+
comment promised this auto-detect; now it exists. `YMIR_DESKTOP_DISABLE_GPU`
|
|
522
|
+
still overrides, both ways.
|
|
523
|
+
- **Verified:** with the fix, the amdgpu submission errors stop and the
|
|
524
|
+
gpu-process runs SwiftShader (`--use-angle=swiftshader-webgl`) rather than the
|
|
525
|
+
hardware path; no new cores.
|
|
526
|
+
|
|
527
|
+
## 2026-09-12 — The editor keeps its own seat
|
|
528
|
+
|
|
529
|
+
- **`open-editor.ts` seats the editor in Þjazi:** inside herdr, `/edit` and
|
|
530
|
+
`ctrl+shift+e` now open the Allfather's editor in its **own tab** of the home
|
|
531
|
+
workspace (`herdr tab create --focus` + `herdr pane run`, label
|
|
532
|
+
`ymir:edit[:<base>]`, recorded in `state/herdr-seats` for `close-all`) instead
|
|
533
|
+
of suspending the pi session — the agent no longer dies when the editor
|
|
534
|
+
opens. Outside herdr the old roads remain: GUI editors launch detached,
|
|
535
|
+
terminal editors suspend the TUI and resume on exit.
|
|
536
|
+
- **`open-editor.ts` shows hidden files:** the picker and `/edit`
|
|
537
|
+
tab-completion now merge the git listing with a bounded walk, so gitignored
|
|
538
|
+
dotfiles (`.env.local`, `.env.realm`, …) are openable too.
|
|
539
|
+
|
|
540
|
+
## 2026-09-11 — Omarchy-first: host skills, machine learning, native fixes
|
|
541
|
+
|
|
542
|
+
- **New skill `ymir-omarchy`:** Omarchy-native operation — the two laws (never
|
|
543
|
+
edit `/usr/share/omarchy/`; Hyprland owns placement), host detection, the
|
|
544
|
+
monitor/scale coordinate trap, the amdgpu GPU crash and mitigation, desktop-app
|
|
545
|
+
placement, and a safe-customisation table.
|
|
546
|
+
- **New skill `ymir-thjazi`:** Þjazi (herdr-first) — protocol floors (14+ panes,
|
|
547
|
+
0.8.0 presentation spaces), verification, installation.
|
|
548
|
+
- **Ymir learns the host:** `bin/omarchy-sense.sh` snapshots and *diffs* the
|
|
549
|
+
machine (Omarchy version, explicit packages, config files, monitors, scale) into
|
|
550
|
+
`state/omarchy-setup.json`; `bin/omarchy-hook-install.sh` adds an Omarchy
|
|
551
|
+
`post-update` hook so it re-learns after every `omarchy update`.
|
|
552
|
+
- **Þjazi in the installer:** `bin/herdr-ensure.sh` + new `step_backend`
|
|
553
|
+
(herdr, else tmux — never a silent fallback).
|
|
554
|
+
- **New `step_omarchy`** (SKIP on a non-Omarchy host).
|
|
555
|
+
- **Desktop fixes:** window placement is now LOGICAL and work-area clamped, and
|
|
556
|
+
prefers a non-primary display (the old math used physical pixels on a scale-1.5
|
|
557
|
+
panel and filled the screen). Apps are identified by their command line, not the
|
|
558
|
+
`.bin/electron` shim pid — which fixes the **double-launch** bug. `stop` kills
|
|
559
|
+
every matching pid.
|
|
560
|
+
- **GPU mitigation:** `YMIR_DESKTOP_DISABLE_GPU=1` adds
|
|
561
|
+
`--disable-gpu --disable-gpu-compositing` for small-VRAM iGPUs (the crash was
|
|
562
|
+
`amdgpu: Not enough memory for command submission`, SIGSEGV, not an OOM).
|
|
563
|
+
- **Per-machine state un-shared:** `.agents/memory/kaia.engram*` and
|
|
564
|
+
`well/*.jsonl` were tracked and pushed (one machine's private memory + volatile
|
|
565
|
+
SQLite sidecars). Now gitignored and untracked; the contract is written in
|
|
566
|
+
`.agents/memory/README.md`.
|
|
567
|
+
- **Assets updated:** `installation.md` (15 rows, consent, validation, Omarchy),
|
|
568
|
+
`hlidskjalf-ui.md` (the desktop-apps section).
|
|
569
|
+
- **Verified:** full install green (15 rows; only the docker-group WARN), 9/9
|
|
570
|
+
compliance, both skills registered.
|
|
571
|
+
|
|
572
|
+
## 2026-09-11 — Load the owning asset before editing a governed path (5 layers)
|
|
573
|
+
|
|
574
|
+
The runtime drifted from its documentation because the asset that governs a
|
|
575
|
+
subsystem was never loaded before the code changed. Five layers now prevent it:
|
|
576
|
+
|
|
577
|
+
- **1. `AGENTS.md`:** a new `governed[6]` table maps each governed path to the
|
|
578
|
+
asset to load first, and `manual[]` gained `installation`, `ui`, `runtime-spec`.
|
|
579
|
+
- **2. Session digest:** `saga-session-start.sh` prints an `ASSET ROUTING` block
|
|
580
|
+
every session, so the mapping is always in context.
|
|
581
|
+
- **3. Router loadable:** `galdr`'s `disable-model-invocation` is removed (it hid
|
|
582
|
+
the one router that owns the assets); `tyr-check` keeps it (deliberate).
|
|
583
|
+
- **4. Enforced seatbelt:** new `bin/syn-asset-pretool-check.sh` denies an
|
|
584
|
+
`edit`/`write` of a governed path until its asset was read (`state/asset-reads`);
|
|
585
|
+
the Pi extension relays it and records asset reads.
|
|
586
|
+
- **5. Compliance gate:** `compliance-check.sh` gains an `assets` check that
|
|
587
|
+
FAILS when a governed path changed without its asset (it caught this very
|
|
588
|
+
change), and `runtime-compliance.md` documents G12 + the routing map.
|
|
589
|
+
|
|
590
|
+
## 2026-09-11 — Automate the install: consent gate, self-healing prereqs, visualizer-ready
|
|
591
|
+
|
|
592
|
+
- **Consent gate:** a real install now prints its plan and waits for the operator
|
|
593
|
+
to accept (`[y/N]`). Declining changes nothing (exit 3). `--check` still previews
|
|
594
|
+
without asking; non-interactive callers must pass `--yes`.
|
|
595
|
+
- **New `bin/prereq-ensure.sh`:** self-healing prerequisites in USER SPACE —
|
|
596
|
+
installs `bun` and `uv` via their official installers, `mcp<2>` via pip, and can
|
|
597
|
+
fetch a specific Python (e.g. `3.12`) with uv for packages that need one.
|
|
598
|
+
- **New `bin/smidja-bootstrap.sh`:** creates `smidja/smidja_data/smidja.db` from
|
|
599
|
+
the tracer's own schema and seeds a bootstrap session, so the Smíðja visualizer
|
|
600
|
+
has data from the first install. Fixed: it now bootstraps on a bare call
|
|
601
|
+
instead of printing help, and reports failure honestly when the DB is absent.
|
|
602
|
+
- **`bin/ymir-install.sh`:** new `smidja` step; prerequisites delegated to the
|
|
603
|
+
self-healing helper; `engram` reported as an honest optional `SKIP` with the
|
|
604
|
+
exact next command; docker-group-permission and build-failure distinguished.
|
|
605
|
+
- **Verified:** consent refuse/accept/decline paths; smidja db created and read
|
|
606
|
+
back (8 tables, bootstrap session); compliance 8/8.
|
|
607
|
+
|
|
608
|
+
## 2026-09-11 — Smooth install: provider choice, no forced key, real prereqs
|
|
609
|
+
|
|
610
|
+
- **Model provider is now the operator's choice** (`YMIR_MODEL_PROVIDER`):
|
|
611
|
+
`opencode-go` (needs a key), `lmstudio` (keyless local), or
|
|
612
|
+
`openai-compatible`. The bridge no longer forces `OPENCODE_GO_API_KEY`;
|
|
613
|
+
with no key it auto-selects the keyless local provider so a fresh install works.
|
|
614
|
+
- **New:** `.agents/backend/model-bridge.py` (provider-aware, keyless-capable);
|
|
615
|
+
`opencode-go-bridge.py` kept as a delegating shim so existing references work.
|
|
616
|
+
- **`bin/bifrost-bridge.sh` v2:** `--provider`, provider auto-selection, no hard
|
|
617
|
+
env-file requirement, actionable errors per provider.
|
|
618
|
+
- **`bin/ymir-install.sh`:** installs `bun` for real (user-space, then a package
|
|
619
|
+
hint); installs `mcp<2`; `engram` is now an honest `SKIP` with the Python
|
|
620
|
+
version reason instead of a permanent WARN; distinguishes docker-group
|
|
621
|
+
permission from a build failure.
|
|
622
|
+
- **`scripts/start.sh`:** fixed the early exit that skipped the gate API and all
|
|
623
|
+
services whenever the SPA was already running.
|
|
624
|
+
- **Verified:** compliance 8/8; bridge relays models + chat + 404s; keyless
|
|
625
|
+
start confirmed; `start.sh` raises Gate API, Nornir, Bifrost, visualizer.
|
|
626
|
+
|
|
627
|
+
## 2026-09-11 — Single-tenant workspaces shipped
|
|
628
|
+
|
|
629
|
+
- **First setup:** `bin/ymir-install.sh` (8 steps) + `bin/workspace-provision.sh`.
|
|
630
|
+
- **Model:** single tenant; workspaces (personal|work) over domains; houses = brands.
|
|
631
|
+
- **UI:** Login onboarding (name/kind/domains), Topbar workspace chip, AccountMenu/Profile relabelled.
|
|
632
|
+
- **Engines:** treehouse → `yggdrasil.sh pool`; sandcastle → `utgard.sh sandcastle`; no-mistakes → Mjollnir gate.
|
|
633
|
+
- **GitHub:** `bin/project-git.sh` reads `workspace/projects.yaml` `git{}`.
|
|
634
|
+
- **Verified:** build green, compliance 8/8, smoke 8/8, lint 4/4.
|
|
635
|
+
|
|
636
|
+
|
|
637
|
+
All significant runtime, policy, and architectural changes for the Ymir platform.
|
|
638
|
+
Entries are appended chronologically; never rewritten.
|
|
639
|
+
|
|
640
|
+
## 2026-09-11 — Hardcoded per-page feeds (header + stream)
|
|
641
|
+
|
|
642
|
+
- **New:** every gate has its own hardcoded, domain-appropriate rolling feed
|
|
643
|
+
(16 pools, `src/data/feeds.ts`) — Fleet, Tasks, Well, Runes, Reviews,
|
|
644
|
+
Processes (Valhalla), Files, Chat, Forge, Runtime, Cron, Sessions, Trace,
|
|
645
|
+
Decisions, Stats, Profile. Extra Kaia “oracle by the well” lines for the chat
|
|
646
|
+
page.
|
|
647
|
+
- **Header:** a live `PageFeed` now sits in the page header of every gate
|
|
648
|
+
(glyph + hint on the left, the current page's latest 3 messages on the
|
|
649
|
+
right), rolling.
|
|
650
|
+
- **Stream:** the bottom Stream keeps each page's last **40** domain messages,
|
|
651
|
+
with the fleet-wide feed as fallback. A generator tops it up every 2.4s and
|
|
652
|
+
the page is seeded on first visit so it is never cold.
|
|
653
|
+
- **Verified:** `tsc` + `vite build` green, SPA 200, compliance 8/8, smoke 8/8,
|
|
654
|
+
lint 4/4.
|
|
655
|
+
|
|
656
|
+
## 2026-09-11 — Per-page rolling 40 message feeds
|
|
657
|
+
|
|
658
|
+
- **Change:** the bottom stream is no longer one global 120-line feed. Every gate
|
|
659
|
+
keeps its own rolling window of the **last 40** messages, and events are routed
|
|
660
|
+
to the page they belong to (module → gate: `well`, `sessions`, `forge`,
|
|
661
|
+
`runes`, `cron`, `reviews`, `processes`), with the fleet-wide feed as fallback.
|
|
662
|
+
The stream header shows the current page. `STREAM_WINDOW = 40`, matching the
|
|
663
|
+
chat's `CHAT_WINDOW = 40`.
|
|
664
|
+
- **Verified:** `tsc` + `vite build` green, SPA 200.
|
|
665
|
+
|
|
666
|
+
## 2026-09-11 — Galdr/Tyr assets: symlink, not copies
|
|
667
|
+
|
|
668
|
+
- **Fix:** `tyr-check/assets` is now a **symlink** to the canonical
|
|
669
|
+
`galdr/assets`, so the two can never drift. A background process had been
|
|
670
|
+
rewriting the registry, flipping the sync gate red; a symlink makes drift
|
|
671
|
+
structurally impossible. Compliance back to 8/8 stable.
|
|
672
|
+
- **Verified:** compliance 8/8, smoke 8/8, lint 4/4.
|
|
673
|
+
|
|
674
|
+
## 2026-09-11 — Chat uses the root Pi model catalog
|
|
675
|
+
|
|
676
|
+
- **Fix:** the Kaia chat guessed a llama.cpp model id by regex and fell through
|
|
677
|
+
to the Bifrost bridge (`:4603` → 401) when the guess failed.
|
|
678
|
+
- **Now:** the gate API reads the operator's root Pi catalog
|
|
679
|
+
(`~/.pi/agent/models.json`) for the exact provider → base URL, model id, and
|
|
680
|
+
key (llama.cpp router `:8080`, `sk-not-key-required`). A chosen local model
|
|
681
|
+
is tried only on its own base; the default is the operator's Pi default
|
|
682
|
+
(`qwen3.6-35b-a3b@iq3_s`). `/api/chat/models` lists the real connected set.
|
|
683
|
+
- **Verified:** `gemma-4-12b@q3_k_s`, `qwen3.6-35b-a3b@iq3_s` (default), and
|
|
684
|
+
`qwen3.5-9b@q4_k_s` all answered live; no 401.
|
|
685
|
+
|
|
686
|
+
## 2026-09-11 — Shared well for every harness; no mock; clickable memories
|
|
687
|
+
|
|
688
|
+
- **Harnesses:** the engram MCP server is now registered for all four OpenCode
|
|
689
|
+
accounts (`opencode`, `opencode-rd`, `opencode-work`, `opencode-oczer`), Pi
|
|
690
|
+
(`~/.pi/agent/settings.json` + `mcp.json` + `.pi/mcp.json`), Claude, Cursor,
|
|
691
|
+
and Codex. Registered **unscoped** so every harness reads the one shared well
|
|
692
|
+
(per-call `agent_id` still attributes writes).
|
|
693
|
+
- **No mock:** purged every test/mock episode (`smoke`/`Test observation`) from
|
|
694
|
+
both the engram store and `episodes.jsonl` → 367 true episodes. Test writes
|
|
695
|
+
never enter the well.
|
|
696
|
+
- **UI:** Well memories are now **clickable** — `GET /api/well/episode?id=` and
|
|
697
|
+
a bridge `/episode` endpoint feed a modal with the full memory text.
|
|
698
|
+
- **Bridge fix:** `/recent` and `/recall` restored; added `/episode`.
|
|
699
|
+
- **Lifecycle fix:** `bifrost-bridge.sh` / `mimir-bridge.sh` now stop by process
|
|
700
|
+
match when the PID file is missing, and record the PID when the port is
|
|
701
|
+
already up — so `scripts/stop.sh` truly lowers the whole system and
|
|
702
|
+
`scripts/start.sh` truly raises it.
|
|
703
|
+
- **Galdr:** new asset `.agents/skills/galdr-ymirsystem/assets/memory-well.md` (store,
|
|
704
|
+
bridge, MCP, harness matrix, laws, verify), routed in `SKILL.md`; registry +
|
|
705
|
+
harness README updated; mirrored to tyr.
|
|
706
|
+
- **Verified:** MCP recall 1.0 / stats 367, full stop→start cycle (3888/3889/
|
|
707
|
+
4602/4603/8437), compliance 8/8, smoke 8/8.
|
|
708
|
+
|
|
709
|
+
## 2026-09-11 — The well is real (Mimirsbrunn / engram)
|
|
710
|
+
|
|
711
|
+
- **New:** `bin/mimir-bridge.py` + `bin/mimir-bridge.sh` — the `:4602` HTTP face
|
|
712
|
+
the supervision tree named but that upstream never shipped (engram exposes a
|
|
713
|
+
CLI + MCP server only). Endpoints: `/health`, `/recall`, `/recent`,
|
|
714
|
+
`/timeline`, `/inspect`, `/observe`.
|
|
715
|
+
- **New:** repo-local store `.agents/memory/kaia.engram`, seeded from the
|
|
716
|
+
368-episode JSONL well.
|
|
717
|
+
- **Wired:** gate API `/api/well` now does semantic recall via the bridge (local
|
|
718
|
+
file fallback) and `/api/mimir/health` is live; the Well gate's Bridge tile
|
|
719
|
+
and timeline read real data (mock removed).
|
|
720
|
+
- **Harnesses:** the engram MCP server is registered for OpenCode, Pi, Claude,
|
|
721
|
+
Cursor, and Codex; requires the `mcp<2` SDK (`engram-mcp` breaks on mcp 2.x).
|
|
722
|
+
- **Lifecycle:** the bridge is raised by `scripts/start.sh` and
|
|
723
|
+
`bin/saga-session-start.sh`; the stale `engram.server` command was corrected.
|
|
724
|
+
- **Verified:** bridge up (370 episodes), semantic recall, MCP handshake
|
|
725
|
+
(engram 1.30), compliance 8/8, smoke 8/8.
|
|
726
|
+
|
|
727
|
+
## 2026-09-11 — Stats 1:1, Kaia chat, Forge prompts
|
|
728
|
+
|
|
729
|
+
- **Stats:** ported the full Smiðja `StatsResponse` 1:1 into the gate API and
|
|
730
|
+
the Stats gate — runs/success/fail/running/rate, token optimization
|
|
731
|
+
(input/output/cache_read/cache_write, cache-hit ratio, avg CHR/run),
|
|
732
|
+
local-vs-online provider split with per-model table, 40-model commercial
|
|
733
|
+
catalog (cached/total/savings/%), by-chain and by-workflow. A real run
|
|
734
|
+
renders live.
|
|
735
|
+
- **Chat (Kaia):** per-session JSONL store (`state/chat/`), list/history/delete
|
|
736
|
+
endpoints, a rolling **40-message** window, query-grounded well recall before
|
|
737
|
+
every dispatch, an animated "Kaia is thinking…" indicator, a session sidebar
|
|
738
|
+
(new/switch/delete), a connected-model datalist (314 models) with free-type,
|
|
739
|
+
and Eindri lane toggles.
|
|
740
|
+
- **Forge:** a Prompts mode to read/edit the smithy's
|
|
741
|
+
`prompt_engineering/<agent>/{system,user}.md` (path-guarded save) and a
|
|
742
|
+
connected-model datalist for agent models.
|
|
743
|
+
- **Verified:** `tsc` + `vite build` green, live chat via local model with
|
|
744
|
+
recall on, prompt roundtrip + traversal guard, compliance 8/8, smoke 8/8,
|
|
745
|
+
lint 4/4.
|
|
746
|
+
|
|
747
|
+
## 2026-09-11 — Smiðja views are repo-local
|
|
748
|
+
|
|
749
|
+
- **Change:** Removed the last external dependency. `bin/factory-observe.sh`
|
|
750
|
+
(which defaulted to `~/command/factory/factory_data/factory.db`) is gone;
|
|
751
|
+
`bin/smidja-observe.sh` reads the repo's own
|
|
752
|
+
`smidja/smidja_data/smidja.db` read-only and reports absence honestly.
|
|
753
|
+
- **API:** `/api/factory` replaced by `/api/smidja/{health,sessions,sessions/:id,decisions,stats}`
|
|
754
|
+
(`bun:sqlite`, read-only).
|
|
755
|
+
- **UI:** four Hlidskjalf gates added — Sessions, Trace, Decisions, Stats —
|
|
756
|
+
reading the smithy's trace. No `command`/`factory` references remain in the
|
|
757
|
+
runtime or portal.
|
|
758
|
+
- **Verified:** `tsc` + `vite build` green, SPA 200, endpoints honest-absent,
|
|
759
|
+
Galdr compliance 8/8, smoke 8/8.
|
|
760
|
+
|
|
761
|
+
## 2026-09-11 — Gleipnir lock PID binding fix
|
|
762
|
+
|
|
763
|
+
- **Problem:** The session lock (`state/.lock`) was written with the digest
|
|
764
|
+
helper's PID (a short-lived child) instead of the live Pi harness PID. The
|
|
765
|
+
harness adapter (`gna-pi-watch.ts`) reported "no live session holds the lock"
|
|
766
|
+
and refused to arm the watcher.
|
|
767
|
+
- **Root cause:** `BROKK_SESSION_PID` was never injected into the spawn chain.
|
|
768
|
+
`gleipnir_lock_acquire` fell back to `$$` (helper PID).
|
|
769
|
+
- **Fix:** `.pi/extensions/syn-turnend-guard.ts` and
|
|
770
|
+
`.pi/extensions/gna-pi-watch.ts` now pass `BROKK_SESSION_PID: String(process.pid)`
|
|
771
|
+
in the spawn env, so the lock binds to the live Pi process.
|
|
772
|
+
- **Impact:** Session lock reclamation works on next Pi session start/reload.
|
|
773
|
+
The stale lock (dead PID) is overwritten by the live PID.
|
|
774
|
+
|
|
775
|
+
## 2026-09-11 — Desktop shell, tunnel, and temporary auth
|
|
776
|
+
|
|
777
|
+
- **Electron:** `apps/hlidskjalf/electron` + `scripts/electron.sh` open Hlidskjalf
|
|
778
|
+
(and Smiðja) as a native window; raises the stack if down.
|
|
779
|
+
- **Tunnel:** `ymirdell.zerwiz.org` → `:3889` via `bin/gjallarhorn-tunnel.sh`
|
|
780
|
+
(cloudflared config in `midgard/infrastructure/ingress/cloudflared-ymir.yml`).
|
|
781
|
+
- **Auth:** hardcoded HTTP Basic (`zerwiz:allfather`, `HLIDSKJALF_AUTH`) on the
|
|
782
|
+
gate API, which now also serves the built SPA. Temporary — move to Heimdall +
|
|
783
|
+
`.env.local`.
|
|
784
|
+
- **Mobile:** PWA manifest added; recommended APK = Capacitor over the tunnel.
|
|
785
|
+
|
|
786
|
+
## 2026-09-12 — Updater forged + credential moved to env
|
|
787
|
+
|
|
788
|
+
- **`bin/brokk-update.sh`** — the sanctioned, guarded updater the `ymir-update`
|
|
789
|
+
skill calls: fast-forward only, refuses a dirty/diverged tree, `--yes` to
|
|
790
|
+
stash+restore, `--check` to report. Never force-pushes.
|
|
791
|
+
- **Credential law:** the gate login (`HLIDSKJALF_AUTH`) no longer has an inline
|
|
792
|
+
default; it is read from `.env.local` (Bun auto-loads it). Server falls back to
|
|
793
|
+
an open gate only when unset (dev), with the key added to `.env.example`.
|
|
794
|
+
|
|
795
|
+
## 2026-09-12 — Ró preference moved out of the tracked tree
|
|
796
|
+
|
|
797
|
+
- `.agents/config/ro` was a **git-tracked** per-user toggle (calm on/off); any
|
|
798
|
+
toggle dirtied the tree and made `bin/brokk-update.sh` refuse. It now lives in
|
|
799
|
+
the gitignored `state/ro`; `YMIR_RO`/`BROKK_RO` set a default; the legacy
|
|
800
|
+
`config/ro` is read once for upgrade then never written. Tracked file removed.
|
|
801
|
+
|
|
802
|
+
## 2026-09-12 — Fleet preferences
|
|
803
|
+
|
|
804
|
+
- `data/fleet.md` (gitignored) holds fleet-wide per-user settings (`ro: on|off`).
|
|
805
|
+
- `bin/fleet-apply.sh` applies them to this home + every registered Eindri-home
|
|
806
|
+
(into each home's gitignored `state/`; remote routes reported).
|
|
807
|
+
- `bin/brokk-update.sh` re-applies fleet preferences on every sweep — one setting
|
|
808
|
+
reaches the whole fleet, no tracked tree dirtied.
|
|
809
|
+
|
|
810
|
+
## 2026-09-12 — House law (RULES/) and the Grein naming
|
|
811
|
+
|
|
812
|
+
- New `RULES/` (the house law): `01-domains.md` (house = company; domain = a
|
|
813
|
+
**Grein**/**Greinar**; Eindri = specialists), `02-agents.md` (agents live only
|
|
814
|
+
in `.agents/agents`; harness dirs are symlinks; no mock agents), `03-houses.md`
|
|
815
|
+
(a house is a company — WayOf; the eight Labs are domains, never houses).
|
|
816
|
+
- Live Fleet de-mocked (real domain/model/status; seeded stats only in demo).
|
|
817
|
+
|
|
818
|
+
## 2026-09-14 — A vacant helm is entered, not punted (watcher wake repair)
|
|
819
|
+
|
|
820
|
+
- **Problem:** a watcher wake reported the Pi extension could not restore
|
|
821
|
+
continuity — "this session no longer owns the lock". Root cause found by
|
|
822
|
+
inspection: an **empty/truncated** machine lock (`~/.local/state/ymir/brokk.lock`)
|
|
823
|
+
was classified by `gna-pi-watch.ts` `lockOwnership()` as `other` (another
|
|
824
|
+
live session) and by `bin/syn-watch-arm.sh`'s gate as read-only — so a helm
|
|
825
|
+
with *no verifiably-live holder* was refused and punted to a manual
|
|
826
|
+
`saga-session-start.sh` reclaim.
|
|
827
|
+
- **Fix (both seams in one change):** the extension now classifies an empty
|
|
828
|
+
lock as `missing`, so `gna_watch_arm`'s reclaim takes the helm in place; the
|
|
829
|
+
arm script, on finding no owner (or an owner verifiably gone), runs
|
|
830
|
+
`gleipnir_lock_acquire` itself — which refuses only a genuinely live other
|
|
831
|
+
session — instead of printing read-only. The "run saga-session-start.sh"
|
|
832
|
+
punt is gone; a vacant helm is entered by the watcher's own hand.
|
|
833
|
+
- **Verified:** scratch-state test — empty machine lock → `watcher: started`,
|
|
834
|
+
lock bound to the session pid + starttime sidecar, `.supervision-armed`
|
|
835
|
+
touched; `gleipnir-machine-lock.test.sh` ALL PASS (zombie, recycled,
|
|
836
|
+
migration); compliance 10/10; harness-integration asset updated in the same
|
|
837
|
+
change (the governed rule).
|
|
838
|
+
|
|
839
|
+
## 2026-09-14 — The Eindri→Brokk wake bridge (they can talk back now)
|
|
840
|
+
|
|
841
|
+
- **Ask:** the seated smiths' reports lived in their panes only; the Allfather
|
|
842
|
+
wanted a feature that wakes Brokk when an Eindri reports, so the fleet's
|
|
843
|
+
doings reach the primary's session — "we are in control, Brokk".
|
|
844
|
+
- **Built:** `bin/eindri-seen.sh` (condition — a report file landed or herdr
|
|
845
|
+
shows the smith left `working`), `bin/eindri-acclaim.sh` (action — files the
|
|
846
|
+
report durably under state/eindri-reports/, marks done under
|
|
847
|
+
state/eindri-done/, appends the wake to state/.wake-queue for Sága's drain,
|
|
848
|
+
sounds the desktop note), and `bin/eindri-watch.sh` (the control door —
|
|
849
|
+
`arm | retire | list | reconcile`, one when-source per smith on the Norns'
|
|
850
|
+
loom via fm-procevent-when.sh, action hash-bound, fires once on a stable
|
|
851
|
+
true, terminal, re-armable).
|
|
852
|
+
- **Armed live:** when-odrerir (already fired — his report was filed) and
|
|
853
|
+
when-sessrumnir-cloth (still working). `fm-procement.sh reconcile` started=2.
|
|
854
|
+
- **First report delivered through the wire:** odrerir's Óðrerir saga — deck
|
|
855
|
+
green at :4322, 52 Chromium checks, commit 38a326b on yggdrasil/odrerir, main
|
|
856
|
+
untouched, plus the hall.ymir.zerwiz.org server story (setup-hall.sh) and
|
|
857
|
+
three asks awaiting the Allfather (go live, landing mobile wart, PLAN log).
|
|
858
|
+
|
|
859
|
+
## 2026-09-14 — Óðrerir forged (Eindri odrerir, pane w3:p7)
|
|
860
|
+
|
|
861
|
+
- The Live Hall carved on the landing per PLAN.md §14: dealt slate pile,
|
|
862
|
+
choices + recommended marks, freeform, queue + limit guard, thread ledger,
|
|
863
|
+
live tally, four empty states, fail-closed, keyboard, reveal, mobile (390px,
|
|
864
|
+
zero overflow); cloth check green; §12 scan clean. Deployed plan for the
|
|
865
|
+
public hall: hall.ymir.zerwiz.org via a second Caddy site :4322 (deploy/
|
|
866
|
+
setup-hall.sh + tunnel-ingress.sh, idempotent, live provisioning untested).
|
|
867
|
+
|
|
868
|
+
## 2026-09-14 — The echo guard: no wake flood through Gná's door
|
|
869
|
+
|
|
870
|
+
- **Problem:** during a loud stretch (stale wake lines + the FM runner's
|
|
871
|
+
durable queue holding ten old check-wakes), the watcher re-armed and
|
|
872
|
+
re-signalled "signal: wake queue" across many generations; every actionable
|
|
873
|
+
close queued one pi follow-up wake (`sendWake`, no dedup), which then
|
|
874
|
+
dripped at the Allfather one per prompt — a long echo flood after the
|
|
875
|
+
sources were drained.
|
|
876
|
+
- **Fix:** `gna-pi-watch.ts` `sendWake` is **echo-guarded**: an identical
|
|
877
|
+
watcher message is delivered at most once per drained state — when both
|
|
878
|
+
durable doors (`state/.wake-queue` and the FM runner's
|
|
879
|
+
`.agents/state/.wake-queue`) are empty, a repeat carry is the same drained
|
|
880
|
+
news and is skipped. Genuine new content (different message, or a door with
|
|
881
|
+
a line) always delivers. Harness asset updated in the same change.
|