@zerwiz/ymir 0.1.4 → 0.1.5

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