@zerwiz/ymir 0.1.4 → 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (865) 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/README.md +74 -0
  27. package/.agents/backend/backends/cmux.sh +649 -0
  28. package/.agents/backend/backends/herdr-eventwait.py +157 -0
  29. package/.agents/backend/backends/herdr-workspace-move.py +114 -0
  30. package/.agents/backend/backends/herdr.sh +3386 -0
  31. package/.agents/backend/backends/orca.sh +290 -0
  32. package/.agents/backend/backends/tmux.sh +357 -0
  33. package/.agents/backend/backends/zellij.sh +700 -0
  34. package/.agents/backend/fm-afk-launch.sh +654 -0
  35. package/.agents/backend/fm-afk-return.sh +241 -0
  36. package/.agents/backend/fm-afk-start.sh +172 -0
  37. package/.agents/backend/fm-arm-command-policy.mjs +960 -0
  38. package/.agents/backend/fm-arm-pretool-check.sh +200 -0
  39. package/.agents/backend/fm-backend-hometag-lib.sh +52 -0
  40. package/.agents/backend/fm-backend.sh +981 -0
  41. package/.agents/backend/fm-backlog-handoff.sh +909 -0
  42. package/.agents/backend/fm-backlog-receive.sh +187 -0
  43. package/.agents/backend/fm-backlog-transition-lib.sh +779 -0
  44. package/.agents/backend/fm-bearings-board.sh +204 -0
  45. package/.agents/backend/fm-bearings-snapshot.sh +546 -0
  46. package/.agents/backend/fm-bootstrap.sh +1568 -0
  47. package/.agents/backend/fm-branch-outcome.sh +203 -0
  48. package/.agents/backend/fm-branch-prompt.sh +101 -0
  49. package/.agents/backend/fm-brief.sh +452 -0
  50. package/.agents/backend/fm-busy-event.sh +234 -0
  51. package/.agents/backend/fm-busy-lib.sh +986 -0
  52. package/.agents/backend/fm-captain-hold.sh +1001 -0
  53. package/.agents/backend/fm-cd-command-policy.mjs +153 -0
  54. package/.agents/backend/fm-cd-pretool-check.sh +190 -0
  55. package/.agents/backend/fm-check-lib.sh +74 -0
  56. package/.agents/backend/fm-check-register.sh +42 -0
  57. package/.agents/backend/fm-check-unregister.sh +52 -0
  58. package/.agents/backend/fm-classify-lib.sh +1770 -0
  59. package/.agents/backend/fm-claude-stop-autoarm.sh +334 -0
  60. package/.agents/backend/fm-composer-lib.sh +1416 -0
  61. package/.agents/backend/fm-config-inherit-lib.sh +1202 -0
  62. package/.agents/backend/fm-config-push.sh +254 -0
  63. package/.agents/backend/fm-control-lib.sh +251 -0
  64. package/.agents/backend/fm-control.sh +878 -0
  65. package/.agents/backend/fm-crew-state.sh +625 -0
  66. package/.agents/backend/fm-cursor-lib.sh +243 -0
  67. package/.agents/backend/fm-decision-hold.sh +232 -0
  68. package/.agents/backend/fm-doc-audience-check.sh +269 -0
  69. package/.agents/backend/fm-dod-lib.sh +67 -0
  70. package/.agents/backend/fm-ensure-agents-md.sh +253 -0
  71. package/.agents/backend/fm-extension-launch-barrier.mjs +129 -0
  72. package/.agents/backend/fm-extension.mjs +2577 -0
  73. package/.agents/backend/fm-extension.sh +16 -0
  74. package/.agents/backend/fm-ff-lib.sh +420 -0
  75. package/.agents/backend/fm-fleet-snapshot.sh +1463 -0
  76. package/.agents/backend/fm-fleet-sync.sh +458 -0
  77. package/.agents/backend/fm-fleet-view.sh +96 -0
  78. package/.agents/backend/fm-gate-refuse-lib.sh +102 -0
  79. package/.agents/backend/fm-guard.sh +242 -0
  80. package/.agents/backend/fm-harness.sh +195 -0
  81. package/.agents/backend/fm-herdr-ci-cleanup.sh +115 -0
  82. package/.agents/backend/fm-herdr-lab.sh +346 -0
  83. package/.agents/backend/fm-herdr-session-cleanup.sh +337 -0
  84. package/.agents/backend/fm-home-seed.sh +984 -0
  85. package/.agents/backend/fm-home-summary-refresh.sh +255 -0
  86. package/.agents/backend/fm-hook-host-lib.sh +36 -0
  87. package/.agents/backend/fm-inactive-reconcile.sh +531 -0
  88. package/.agents/backend/fm-inbox.sh +399 -0
  89. package/.agents/backend/fm-install-actionlint.sh +84 -0
  90. package/.agents/backend/fm-install-herdr.sh +96 -0
  91. package/.agents/backend/fm-install-shellcheck.sh +84 -0
  92. package/.agents/backend/fm-install-treehouse.sh +95 -0
  93. package/.agents/backend/fm-kimi-turnend-hook.sh +276 -0
  94. package/.agents/backend/fm-lease-lib.sh +218 -0
  95. package/.agents/backend/fm-lease.sh +189 -0
  96. package/.agents/backend/fm-line-cap-lib.sh +51 -0
  97. package/.agents/backend/fm-lint-workflows.sh +137 -0
  98. package/.agents/backend/fm-lint.sh +591 -0
  99. package/.agents/backend/fm-lock-lib.sh +104 -0
  100. package/.agents/backend/fm-lock.sh +107 -0
  101. package/.agents/backend/fm-marker-lib.sh +12 -0
  102. package/.agents/backend/fm-merge-local.sh +74 -0
  103. package/.agents/backend/fm-merge-outcome-lib.sh +138 -0
  104. package/.agents/backend/fm-nm-run-lib.sh +124 -0
  105. package/.agents/backend/fm-on.sh +125 -0
  106. package/.agents/backend/fm-operational-input.sh +253 -0
  107. package/.agents/backend/fm-peek.sh +46 -0
  108. package/.agents/backend/fm-pending-reply-lib.sh +1409 -0
  109. package/.agents/backend/fm-pr-check.sh +135 -0
  110. package/.agents/backend/fm-pr-lib.sh +1016 -0
  111. package/.agents/backend/fm-pr-merge.sh +707 -0
  112. package/.agents/backend/fm-pr-poll.sh +110 -0
  113. package/.agents/backend/fm-primary-scope-lib.sh +33 -0
  114. package/.agents/backend/fm-procevent-extension-capture.pl +259 -0
  115. package/.agents/backend/fm-procevent-lavish.sh +628 -0
  116. package/.agents/backend/fm-procevent-lib.sh +892 -0
  117. package/.agents/backend/fm-procevent-quota.sh +290 -0
  118. package/.agents/backend/fm-procevent-remote-reply.sh +577 -0
  119. package/.agents/backend/fm-procevent-when.sh +504 -0
  120. package/.agents/backend/fm-procevent.sh +1466 -0
  121. package/.agents/backend/fm-project-mode.sh +92 -0
  122. package/.agents/backend/fm-project-origin-lib.sh +180 -0
  123. package/.agents/backend/fm-promote.sh +282 -0
  124. package/.agents/backend/fm-public-followup-emit.sh +260 -0
  125. package/.agents/backend/fm-public-followup-lib.sh +398 -0
  126. package/.agents/backend/fm-public-followup.sh +1330 -0
  127. package/.agents/backend/fm-push-transition-lib.sh +168 -0
  128. package/.agents/backend/fm-quota-axi-lib.sh +93 -0
  129. package/.agents/backend/fm-quota-choose.sh +384 -0
  130. package/.agents/backend/fm-remote-delta-read.sh +189 -0
  131. package/.agents/backend/fm-remote-doctor.sh +800 -0
  132. package/.agents/backend/fm-remote-entrypoint.sh +193 -0
  133. package/.agents/backend/fm-remote-file.sh +234 -0
  134. package/.agents/backend/fm-remote-home-provision.sh +259 -0
  135. package/.agents/backend/fm-remote-home-seed.sh +259 -0
  136. package/.agents/backend/fm-remote-inherit-push.sh +90 -0
  137. package/.agents/backend/fm-remote-inherit.sh +179 -0
  138. package/.agents/backend/fm-remote-job-lib.sh +1241 -0
  139. package/.agents/backend/fm-remote-job-reap-orphans.sh +137 -0
  140. package/.agents/backend/fm-remote-job-worker.sh +1124 -0
  141. package/.agents/backend/fm-remote-readiness-lib.sh +44 -0
  142. package/.agents/backend/fm-remote-secondmate-control.sh +340 -0
  143. package/.agents/backend/fm-review-diff.sh +158 -0
  144. package/.agents/backend/fm-secondmate-charter-lib.sh +44 -0
  145. package/.agents/backend/fm-secondmate-nudge-lib.sh +68 -0
  146. package/.agents/backend/fm-secondmate-parent-lib.sh +70 -0
  147. package/.agents/backend/fm-secondmate-reconcile.sh +371 -0
  148. package/.agents/backend/fm-secondmate-registry-lib.sh +311 -0
  149. package/.agents/backend/fm-secondmate-report.sh +88 -0
  150. package/.agents/backend/fm-send.sh +1059 -0
  151. package/.agents/backend/fm-session-lock-lib.sh +176 -0
  152. package/.agents/backend/fm-session-start.sh +970 -0
  153. package/.agents/backend/fm-sessionstart-cursor.sh +40 -0
  154. package/.agents/backend/fm-sessionstart-nudge.sh +45 -0
  155. package/.agents/backend/fm-sessionstart-run.sh +145 -0
  156. package/.agents/backend/fm-spawn.sh +3153 -0
  157. package/.agents/backend/fm-startup-memory-budget-lib.sh +224 -0
  158. package/.agents/backend/fm-startup-memory-budget.sh +94 -0
  159. package/.agents/backend/fm-startup-network.sh +642 -0
  160. package/.agents/backend/fm-stow-cascade.sh +251 -0
  161. package/.agents/backend/fm-subagent-pretool-check.sh +207 -0
  162. package/.agents/backend/fm-supervise-daemon.sh +1732 -0
  163. package/.agents/backend/fm-supervision-instructions.sh +215 -0
  164. package/.agents/backend/fm-supervision-lib.sh +90 -0
  165. package/.agents/backend/fm-supervisor-target-lib.sh +78 -0
  166. package/.agents/backend/fm-tangle-lib.sh +53 -0
  167. package/.agents/backend/fm-task-inbox-lib.sh +402 -0
  168. package/.agents/backend/fm-tasks-axi-lib.sh +123 -0
  169. package/.agents/backend/fm-teardown.sh +2922 -0
  170. package/.agents/backend/fm-test-isolation-proof.sh +588 -0
  171. package/.agents/backend/fm-test-run.sh +2191 -0
  172. package/.agents/backend/fm-timeout-lib.sh +141 -0
  173. package/.agents/backend/fm-timing-lib.sh +179 -0
  174. package/.agents/backend/fm-tmux-lib.sh +291 -0
  175. package/.agents/backend/fm-tool-update-check.sh +898 -0
  176. package/.agents/backend/fm-trace-context-lib.sh +227 -0
  177. package/.agents/backend/fm-transition-lib.sh +103 -0
  178. package/.agents/backend/fm-turnend-guard-cursor.sh +391 -0
  179. package/.agents/backend/fm-turnend-guard-grok.sh +90 -0
  180. package/.agents/backend/fm-turnend-guard.sh +432 -0
  181. package/.agents/backend/fm-update.sh +110 -0
  182. package/.agents/backend/fm-vendor-auth-probe.sh +190 -0
  183. package/.agents/backend/fm-voice-client.py +1373 -0
  184. package/.agents/backend/fm-voice-relay.py +1256 -0
  185. package/.agents/backend/fm-wake-drain.sh +592 -0
  186. package/.agents/backend/fm-wake-grant.sh +127 -0
  187. package/.agents/backend/fm-wake-lib.sh +1849 -0
  188. package/.agents/backend/fm-watch-arm.sh +602 -0
  189. package/.agents/backend/fm-watch-checkpoint.sh +109 -0
  190. package/.agents/backend/fm-watch.sh +1962 -0
  191. package/.agents/backend/fm-x-dismiss.sh +116 -0
  192. package/.agents/backend/fm-x-followup.sh +286 -0
  193. package/.agents/backend/fm-x-lib.sh +1000 -0
  194. package/.agents/backend/fm-x-link.sh +234 -0
  195. package/.agents/backend/fm-x-poll.sh +185 -0
  196. package/.agents/backend/fm-x-reply.sh +385 -0
  197. package/.agents/backend/fm_voice_frame.py +166 -0
  198. package/.agents/backend/fm_voice_records.py +574 -0
  199. package/.agents/backend/model-bridge.py +360 -0
  200. package/.agents/backend/opencode-go-bridge.py +30 -0
  201. package/.agents/bus/README.md +12 -0
  202. package/.agents/bus/messages.json +1 -0
  203. package/.agents/config/agents.machine.example.yaml +16 -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 +11 -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/filebrowser/.filebrowser.json +6 -0
  211. package/.agents/filebrowser/README.md +11 -0
  212. package/.agents/gateway/README.md +12 -0
  213. package/.agents/github/README.md +15 -0
  214. package/.agents/github/webhooks/.gitkeep +0 -0
  215. package/.agents/github/workflows/.gitkeep +0 -0
  216. package/.agents/harness/opencode/plugins/lib/rodd-operational-input.js +37 -0
  217. package/.agents/harness/opencode/plugins/package.json +4 -0
  218. package/.agents/harness/opencode/plugins/saga-sessionstart.js +77 -0
  219. package/.agents/harness/opencode/plugins/syn-cd-check.js +61 -0
  220. package/.agents/harness/opencode/plugins/syn-pretool-check.js +68 -0
  221. package/.agents/harness/opencode/plugins/syn-turnend-guard.js +105 -0
  222. package/.agents/harness/opencode/plugins/syn-watch-arm.js +521 -0
  223. package/.agents/memory/README.md +46 -0
  224. package/.agents/memory/runes_audit.md +5 -0
  225. package/.agents/migrations/0001-hodd-layout.sh +38 -0
  226. package/.agents/migrations/0002-a2a-mcp.sh +27 -0
  227. package/.agents/migrations/0003-private-data-separation.sh +121 -0
  228. package/.agents/migrations/0004-hoard-and-realms.sh +104 -0
  229. package/.agents/migrations/0005-roots-out-of-tree.sh +158 -0
  230. package/.agents/sandbox/Dockerfile.utgard +19 -0
  231. package/.agents/sandbox/README.md +14 -0
  232. package/.agents/sandbox/utgard.config.json +14 -0
  233. package/.agents/skills/README.md +59 -0
  234. package/.agents/skills/bragi-marketing/README.md +3 -0
  235. package/.agents/skills/bragi-marketing/SKILL.md +82 -0
  236. package/.agents/skills/eindri-homes/README.md +3 -0
  237. package/.agents/skills/eindri-homes/SKILL.md +291 -0
  238. package/.agents/skills/eindri-homes/assets/control-plane.md +122 -0
  239. package/.agents/skills/eindri-homes/assets/dispatch.md +80 -0
  240. package/.agents/skills/frigg-consent/README.md +3 -0
  241. package/.agents/skills/frigg-consent/SKILL.md +56 -0
  242. package/.agents/skills/galdr-ymirsystem/README.md +3 -0
  243. package/.agents/skills/galdr-ymirsystem/SKILL.md +159 -0
  244. package/.agents/skills/galdr-ymirsystem/assets/README.md +74 -0
  245. package/.agents/skills/galdr-ymirsystem/assets/brokk-distro-runtime.md +390 -0
  246. package/.agents/skills/galdr-ymirsystem/assets/build-method.md +113 -0
  247. package/.agents/skills/galdr-ymirsystem/assets/build-tool-categories.md +178 -0
  248. package/.agents/skills/galdr-ymirsystem/assets/eindri-orchestration.md +518 -0
  249. package/.agents/skills/galdr-ymirsystem/assets/eindri-profiles.md +136 -0
  250. package/.agents/skills/galdr-ymirsystem/assets/harness-integration/README.md +736 -0
  251. package/.agents/skills/galdr-ymirsystem/assets/harness-integration/claude-code.md +197 -0
  252. package/.agents/skills/galdr-ymirsystem/assets/harness-integration/codex.md +191 -0
  253. package/.agents/skills/galdr-ymirsystem/assets/harness-integration/cursor.md +193 -0
  254. package/.agents/skills/galdr-ymirsystem/assets/harness-integration/opencode.md +262 -0
  255. package/.agents/skills/galdr-ymirsystem/assets/harness-integration/pi.md +295 -0
  256. package/.agents/skills/galdr-ymirsystem/assets/hlidskjalf-ui.md +539 -0
  257. package/.agents/skills/galdr-ymirsystem/assets/installation.md +763 -0
  258. package/.agents/skills/galdr-ymirsystem/assets/local-models/HOST-DATA.example.md +72 -0
  259. package/.agents/skills/galdr-ymirsystem/assets/local-models.md +274 -0
  260. package/.agents/skills/galdr-ymirsystem/assets/memory-well.md +163 -0
  261. package/.agents/skills/galdr-ymirsystem/assets/nornir-jobs.md +415 -0
  262. package/.agents/skills/galdr-ymirsystem/assets/norse-naming.md +325 -0
  263. package/.agents/skills/galdr-ymirsystem/assets/odrerir-hall.md +133 -0
  264. package/.agents/skills/galdr-ymirsystem/assets/pi-boot/einherjar-spawn.schema.json +81 -0
  265. package/.agents/skills/galdr-ymirsystem/assets/pi-boot/herdr-profile.toml +75 -0
  266. package/.agents/skills/galdr-ymirsystem/assets/pi-boot/pi-profile.yml +101 -0
  267. package/.agents/skills/galdr-ymirsystem/assets/pi-boot/supervision-tree.yml +163 -0
  268. package/.agents/skills/galdr-ymirsystem/assets/pi-boot-guide.md +58 -0
  269. package/.agents/skills/galdr-ymirsystem/assets/porting-upstream-to-norse.md +301 -0
  270. package/.agents/skills/galdr-ymirsystem/assets/principles.md +385 -0
  271. package/.agents/skills/galdr-ymirsystem/assets/reference-adoption.md +99 -0
  272. package/.agents/skills/galdr-ymirsystem/assets/registry.md +379 -0
  273. package/.agents/skills/galdr-ymirsystem/assets/runtime-compliance.md +463 -0
  274. package/.agents/skills/galdr-ymirsystem/assets/runtime-components.md +553 -0
  275. package/.agents/skills/galdr-ymirsystem/assets/smidja.md +180 -0
  276. package/.agents/skills/galdr-ymirsystem/schemas/toon-schemas.md +190 -0
  277. package/.agents/skills/galdr-ymirsystem/scripts/README.md +45 -0
  278. package/.agents/skills/galdr-ymirsystem/scripts/bench-one.sh +248 -0
  279. package/.agents/skills/galdr-ymirsystem/scripts/compliance-check.sh +503 -0
  280. package/.agents/skills/galdr-ymirsystem/scripts/gpu-sample.sh +43 -0
  281. package/.agents/skills/galdr-ymirsystem/scripts/stop-all.sh +34 -0
  282. package/.agents/skills/galdr-ymirsystem/scripts/toon-check.py +188 -0
  283. package/.agents/skills/gjallarhorn-relay/README.md +3 -0
  284. package/.agents/skills/gjallarhorn-relay/SKILL.md +283 -0
  285. package/.agents/skills/groa-update/SKILL.md +90 -0
  286. package/.agents/skills/hamr-adapters/README.md +3 -0
  287. package/.agents/skills/hamr-adapters/SKILL.md +123 -0
  288. package/.agents/skills/hamr-adapters/references/common/control-and-recovery.md +37 -0
  289. package/.agents/skills/hamr-adapters/references/common/dispatch.md +32 -0
  290. package/.agents/skills/hamr-adapters/references/common/model-and-effort.md +42 -0
  291. package/.agents/skills/hamr-adapters/references/common/primary-hooks.md +40 -0
  292. package/.agents/skills/hamr-adapters/references/harness/claude.md +55 -0
  293. package/.agents/skills/hamr-adapters/references/harness/codex.md +43 -0
  294. package/.agents/skills/hamr-adapters/references/harness/cursor.md +75 -0
  295. package/.agents/skills/hamr-adapters/references/harness/grok.md +69 -0
  296. package/.agents/skills/hamr-adapters/references/harness/kimi.md +51 -0
  297. package/.agents/skills/hamr-adapters/references/harness/muse.md +70 -0
  298. package/.agents/skills/hamr-adapters/references/harness/opencode.md +42 -0
  299. package/.agents/skills/hamr-adapters/references/harness/pi.md +56 -0
  300. package/.agents/skills/herdr-panes/README.md +3 -0
  301. package/.agents/skills/herdr-panes/SKILL.md +92 -0
  302. package/.agents/skills/herdr-panes/assets/herdr-backend.md +346 -0
  303. package/.agents/skills/herdr-panes/assets/tmux-backend.md +115 -0
  304. package/.agents/skills/hnoss-design/DESIGN.md +19 -0
  305. package/.agents/skills/hnoss-design/README.md +3 -0
  306. package/.agents/skills/hnoss-design/SKILL.md +83 -0
  307. package/.agents/skills/hvild-afk/README.md +3 -0
  308. package/.agents/skills/hvild-afk/SKILL.md +241 -0
  309. package/.agents/skills/jord-projects/README.md +3 -0
  310. package/.agents/skills/jord-projects/SKILL.md +92 -0
  311. package/.agents/skills/lifecycle/SKILL.md +56 -0
  312. package/.agents/skills/lifecycle/smoke_test.sh +57 -0
  313. package/.agents/skills/lifecycle/start.sh +21 -0
  314. package/.agents/skills/lifecycle/status.sh +35 -0
  315. package/.agents/skills/lifecycle/stop.sh +16 -0
  316. package/.agents/skills/muninn-stow/README.md +3 -0
  317. package/.agents/skills/muninn-stow/SKILL.md +309 -0
  318. package/.agents/skills/no-mistakes/SKILL.md +379 -0
  319. package/.agents/skills/nornir-schedule/README.md +3 -0
  320. package/.agents/skills/nornir-schedule/SKILL.md +25 -0
  321. package/.agents/skills/nornir-schedule/assets/events.md +137 -0
  322. package/.agents/skills/nornir-schedule/assets/quota.md +131 -0
  323. package/.agents/skills/nsr-compliance/README.md +3 -0
  324. package/.agents/skills/nsr-compliance/SKILL.md +29 -0
  325. package/.agents/skills/nsr-compliance/assets/nsr/README.md +40 -0
  326. package/.agents/skills/nsr-compliance/assets/nsr/assets/RULES/README.md +15 -0
  327. package/.agents/skills/nsr-compliance/assets/nsr/assets/RULES/git-workflow.md +18 -0
  328. package/.agents/skills/nsr-compliance/assets/nsr/assets/RULES/security.md +22 -0
  329. package/.agents/skills/nsr-compliance/assets/nsr/assets/RULES/tech-stack.md +8 -0
  330. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/SKILL.md +71 -0
  331. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/config/core_four.yaml +16 -0
  332. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/gates/check_danger.sh +102 -0
  333. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/gates/check_wiring.sh +69 -0
  334. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/gates/validate_code.sh +29 -0
  335. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/gates/verify_docs.py +66 -0
  336. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/generate.sh +109 -0
  337. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/harness/envelopes/result_envelope.json +14 -0
  338. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/harness/envelopes/task_envelope.json +20 -0
  339. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/harness/runner.py +303 -0
  340. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/telemetry/logger.py +112 -0
  341. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/README.md +18 -0
  342. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/config/README.md +10 -0
  343. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/gates/README.md +12 -0
  344. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/gates/check_env.sh +23 -0
  345. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/gates/check_paths.sh +20 -0
  346. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/gates/check_platform.sh +23 -0
  347. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/harness/README.md +11 -0
  348. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/harness/envelopes/README.md +10 -0
  349. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/installer/README.md +10 -0
  350. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/installer/install.sh +125 -0
  351. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/telemetry/README.md +11 -0
  352. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/README.md +20 -0
  353. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/features/README.md +36 -0
  354. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/features/SKILL-template.md +14 -0
  355. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/git_ops/README.md +25 -0
  356. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/git_ops/SKILL.md +13 -0
  357. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/git_ops/create_branch.sh +6 -0
  358. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/git_ops/safe_commit.sh +9 -0
  359. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/git_ops/sync_upstream.sh +6 -0
  360. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/README.md +27 -0
  361. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/SKILL.md +15 -0
  362. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/smoke_test.sh +12 -0
  363. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/start.sh +19 -0
  364. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/status.sh +12 -0
  365. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/stop.sh +15 -0
  366. package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/README.md +18 -0
  367. package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/config/README.md +10 -0
  368. package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/config/core_four.yaml +13 -0
  369. package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/README.md +12 -0
  370. package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/check_danger.sh +102 -0
  371. package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/check_env.sh +23 -0
  372. package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/check_paths.sh +20 -0
  373. package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/check_platform.sh +23 -0
  374. package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/check_wiring.sh +69 -0
  375. package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/harness/README.md +11 -0
  376. package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/harness/envelopes/README.md +10 -0
  377. package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/harness/envelopes/result_envelope.json +14 -0
  378. package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/harness/envelopes/task_envelope.json +20 -0
  379. package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/harness/runner.py +303 -0
  380. package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/installer/README.md +10 -0
  381. package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/installer/install.sh +125 -0
  382. package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/telemetry/README.md +11 -0
  383. package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/telemetry/logger.py +112 -0
  384. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/BEST_PRACTICES/README.md +14 -0
  385. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/BEST_PRACTICES/api.md +17 -0
  386. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/BEST_PRACTICES/compliance-wiring.md +155 -0
  387. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/BEST_PRACTICES/frontend.md +15 -0
  388. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/README.md +11 -0
  389. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/README.md +23 -0
  390. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/clients/README.md +16 -0
  391. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/clients/template-README.md +11 -0
  392. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/deploy.sh +49 -0
  393. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/envs/README.md +12 -0
  394. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/envs/development.env.example +17 -0
  395. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/envs/production.env.example +17 -0
  396. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/envs/staging.env.example +17 -0
  397. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/tenants/README.md +11 -0
  398. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/tenants/template.env.example +8 -0
  399. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/README.md +26 -0
  400. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/agent.md +7 -0
  401. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/developers/dev-1.md +20 -0
  402. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/linux.md +9 -0
  403. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/macos.md +10 -0
  404. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/shared.md +19 -0
  405. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/windows.md +14 -0
  406. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/HOSTING/README.md +25 -0
  407. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/HOSTING/_template.md +41 -0
  408. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/HOSTING/hosting-1.md +41 -0
  409. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/README.md +21 -0
  410. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/RUNBOOK/README.md +15 -0
  411. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/RUNBOOK/deployment.md +19 -0
  412. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/RUNBOOK/disaster-recovery.md +15 -0
  413. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/RUNBOOK/ops-tasks.md +14 -0
  414. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/features/README.md +16 -0
  415. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/project-skills.md +146 -0
  416. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/research/README.md +11 -0
  417. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/research/software-compliance-research.md +269 -0
  418. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/working-with-agents.md +260 -0
  419. package/.agents/skills/nsr-compliance/assets/nsr/assets/root/AGENTS.md +38 -0
  420. package/.agents/skills/nsr-compliance/assets/nsr/assets/root/ARCHITECTURE.md +36 -0
  421. package/.agents/skills/nsr-compliance/assets/nsr/assets/root/BEST_PRACTICES.md +27 -0
  422. package/.agents/skills/nsr-compliance/assets/nsr/assets/root/CI_CD.md +23 -0
  423. package/.agents/skills/nsr-compliance/assets/nsr/assets/root/FEATURES.md +15 -0
  424. package/.agents/skills/nsr-compliance/assets/nsr/assets/root/README.md +22 -0
  425. package/.agents/skills/nsr-compliance/assets/nsr/assets/root/RULES.md +37 -0
  426. package/.agents/skills/nsr-compliance/assets/nsr/assets/root/STRUCTURE.md +45 -0
  427. package/.agents/skills/nsr-compliance/assets/nsr/assets/root/TECH_STACK.md +28 -0
  428. package/.agents/skills/nsr-compliance/assets/nsr/scaffold-spec.md +63 -0
  429. package/.agents/skills/nsr-compliance/assets/nsr/scripts/scaffold.sh +103 -0
  430. package/.agents/skills/nsr-compliance/assets/nsr/scripts/validate.sh +52 -0
  431. package/.agents/skills/nsr-compliance/assets/nsrcompliance/SKILL.md +71 -0
  432. package/.agents/skills/nsr-compliance/assets/nsrcompliance/config/core_four.yaml +16 -0
  433. package/.agents/skills/nsr-compliance/assets/nsrcompliance/gates/check_danger.sh +102 -0
  434. package/.agents/skills/nsr-compliance/assets/nsrcompliance/gates/check_wiring.sh +69 -0
  435. package/.agents/skills/nsr-compliance/assets/nsrcompliance/gates/validate_code.sh +29 -0
  436. package/.agents/skills/nsr-compliance/assets/nsrcompliance/gates/verify_docs.py +66 -0
  437. package/.agents/skills/nsr-compliance/assets/nsrcompliance/generate.sh +109 -0
  438. package/.agents/skills/nsr-compliance/assets/nsrcompliance/harness/envelopes/result_envelope.json +14 -0
  439. package/.agents/skills/nsr-compliance/assets/nsrcompliance/harness/envelopes/task_envelope.json +20 -0
  440. package/.agents/skills/nsr-compliance/assets/nsrcompliance/harness/runner.py +303 -0
  441. package/.agents/skills/nsr-compliance/assets/nsrcompliance/telemetry/logger.py +112 -0
  442. package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/README.md +18 -0
  443. package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/config/README.md +10 -0
  444. package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/gates/README.md +12 -0
  445. package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/gates/check_env.sh +23 -0
  446. package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/gates/check_paths.sh +20 -0
  447. package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/gates/check_platform.sh +23 -0
  448. package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/harness/README.md +11 -0
  449. package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/harness/envelopes/README.md +10 -0
  450. package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/installer/README.md +10 -0
  451. package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/installer/install.sh +125 -0
  452. package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/telemetry/README.md +11 -0
  453. package/.agents/skills/pr-ops/README.md +3 -0
  454. package/.agents/skills/pr-ops/SKILL.md +109 -0
  455. package/.agents/skills/ratatoskr-a2a/README.md +3 -0
  456. package/.agents/skills/ratatoskr-a2a/SKILL.md +148 -0
  457. package/.agents/skills/rules-check-drift/SKILL.md +81 -0
  458. package/.agents/skills/saga-bearings/README.md +3 -0
  459. package/.agents/skills/saga-bearings/SKILL.md +26 -0
  460. package/.agents/skills/saga-bearings/assets/bearings.md +161 -0
  461. package/.agents/skills/saga-bearings/assets/board-template.html +731 -0
  462. package/.agents/skills/saga-bearings/assets/recap.md +56 -0
  463. package/.agents/skills/syn-recovery/README.md +3 -0
  464. package/.agents/skills/syn-recovery/SKILL.md +54 -0
  465. package/.agents/skills/tyr-check/README.md +3 -0
  466. package/.agents/skills/tyr-check/SKILL.md +218 -0
  467. package/.agents/skills/urdh-hold/README.md +3 -0
  468. package/.agents/skills/urdh-hold/SKILL.md +25 -0
  469. package/.agents/skills/urdh-hold/assets/decisions.md +15 -0
  470. package/.agents/skills/urdh-hold/assets/hold.md +54 -0
  471. package/.agents/skills/vor-diagnostics/README.md +3 -0
  472. package/.agents/skills/vor-diagnostics/SKILL.md +68 -0
  473. package/.agents/skills/ymir-host/README.md +3 -0
  474. package/.agents/skills/ymir-host/SKILL.md +35 -0
  475. package/.agents/skills/ymir-host/assets/desktop.md +36 -0
  476. package/.agents/skills/ymir-host/assets/install.md +69 -0
  477. package/.agents/skills/ymir-host/assets/omarchy.md +297 -0
  478. package/.agents/skills/ymir-host/assets/runbooks.md +15 -0
  479. package/.agents/skills/ymir-host/assets/thjazi.md +220 -0
  480. package/.agents/skills/ymir-host/assets/update.md +64 -0
  481. package/.agents/tests/assets/board-render-harness.mjs +117 -0
  482. package/.agents/tests/cmux-test-safety.sh +51 -0
  483. package/.agents/tests/fixtures.sh +291 -0
  484. package/.agents/tests/fm-afk-inject-e2e.test.sh +428 -0
  485. package/.agents/tests/fm-afk-inject-herdr-e2e.test.sh +536 -0
  486. package/.agents/tests/fm-afk-launch.test.sh +961 -0
  487. package/.agents/tests/fm-afk-pi-herdr-return-e2e.test.sh +297 -0
  488. package/.agents/tests/fm-afk-return.test.sh +283 -0
  489. package/.agents/tests/fm-arm-pretool-check.test.sh +482 -0
  490. package/.agents/tests/fm-ask-user-authority.test.sh +42 -0
  491. package/.agents/tests/fm-backend-autodetect-smoke.test.sh +176 -0
  492. package/.agents/tests/fm-backend-cmux-smoke.test.sh +188 -0
  493. package/.agents/tests/fm-backend-cmux.test.sh +1166 -0
  494. package/.agents/tests/fm-backend-herdr-eventwait-smoke.test.sh +136 -0
  495. package/.agents/tests/fm-backend-herdr-eventwait.test.py +106 -0
  496. package/.agents/tests/fm-backend-herdr-focus-flash-e2e.test.sh +409 -0
  497. package/.agents/tests/fm-backend-herdr-launcher-workspace-e2e.test.sh +437 -0
  498. package/.agents/tests/fm-backend-herdr-presentation-e2e.test.sh +1424 -0
  499. package/.agents/tests/fm-backend-herdr-prune-safety-e2e.test.sh +180 -0
  500. package/.agents/tests/fm-backend-herdr-respawn-idem-e2e.test.sh +182 -0
  501. package/.agents/tests/fm-backend-herdr-smoke.test.sh +355 -0
  502. package/.agents/tests/fm-backend-herdr-workspace-per-home-e2e.test.sh +251 -0
  503. package/.agents/tests/fm-backend-herdr.test.sh +4606 -0
  504. package/.agents/tests/fm-backend-orca.test.sh +1357 -0
  505. package/.agents/tests/fm-backend-tmux-smoke.test.sh +173 -0
  506. package/.agents/tests/fm-backend-zellij-smoke.test.sh +205 -0
  507. package/.agents/tests/fm-backend-zellij.test.sh +1360 -0
  508. package/.agents/tests/fm-backend.test.sh +1142 -0
  509. package/.agents/tests/fm-backlog-atomicity.test.sh +2302 -0
  510. package/.agents/tests/fm-backlog-handoff.test.sh +1360 -0
  511. package/.agents/tests/fm-bearings-board-render.test.sh +135 -0
  512. package/.agents/tests/fm-bearings-board.test.sh +414 -0
  513. package/.agents/tests/fm-bearings-snapshot.test.sh +1990 -0
  514. package/.agents/tests/fm-bootstrap-network-parallel.test.sh +316 -0
  515. package/.agents/tests/fm-bootstrap.test.sh +1178 -0
  516. package/.agents/tests/fm-branch-supervision.test.sh +552 -0
  517. package/.agents/tests/fm-brief.test.sh +785 -0
  518. package/.agents/tests/fm-busy-adapter-wiring.test.sh +324 -0
  519. package/.agents/tests/fm-busy-state.test.sh +465 -0
  520. package/.agents/tests/fm-calm-pi-extension.test.sh +3979 -0
  521. package/.agents/tests/fm-captain-hold-lifecycle.test.sh +1187 -0
  522. package/.agents/tests/fm-cd-pretool-check.test.sh +400 -0
  523. package/.agents/tests/fm-check-unregister.test.sh +198 -0
  524. package/.agents/tests/fm-classify-corr-token.test.sh +543 -0
  525. package/.agents/tests/fm-classify-decision-key.test.sh +340 -0
  526. package/.agents/tests/fm-claude-stop-autoarm-live-e2e.test.sh +164 -0
  527. package/.agents/tests/fm-claude-stop-autoarm.test.sh +1190 -0
  528. package/.agents/tests/fm-cmux-claude-composer-live-e2e.test.sh +110 -0
  529. package/.agents/tests/fm-codex-continuity-live-e2e.test.sh +55 -0
  530. package/.agents/tests/fm-composer-ghost.test.sh +716 -0
  531. package/.agents/tests/fm-composer-lib.test.sh +666 -0
  532. package/.agents/tests/fm-composer-matrix-live-e2e.test.sh +220 -0
  533. package/.agents/tests/fm-control-herdr-smoke.test.sh +149 -0
  534. package/.agents/tests/fm-control-relaunch.test.sh +1530 -0
  535. package/.agents/tests/fm-control.test.sh +910 -0
  536. package/.agents/tests/fm-crew-state.test.sh +1610 -0
  537. package/.agents/tests/fm-cursor-harness.test.sh +404 -0
  538. package/.agents/tests/fm-cursor-primary-live-e2e.test.sh +217 -0
  539. package/.agents/tests/fm-cursor-primary.test.sh +708 -0
  540. package/.agents/tests/fm-daemon.test.sh +2740 -0
  541. package/.agents/tests/fm-documentation-audiences.test.sh +141 -0
  542. package/.agents/tests/fm-ensure-agents-md.test.sh +371 -0
  543. package/.agents/tests/fm-extension-binding.test.sh +2187 -0
  544. package/.agents/tests/fm-fleet-snapshot-view.test.sh +816 -0
  545. package/.agents/tests/fm-fleet-sync.test.sh +721 -0
  546. package/.agents/tests/fm-gate-refuse.test.sh +356 -0
  547. package/.agents/tests/fm-gitignore-config.test.sh +89 -0
  548. package/.agents/tests/fm-gotmp.test.sh +230 -0
  549. package/.agents/tests/fm-grok-continuity-live-e2e.test.sh +112 -0
  550. package/.agents/tests/fm-grok-harness.test.sh +117 -0
  551. package/.agents/tests/fm-grok-stop-live-e2e.test.sh +219 -0
  552. package/.agents/tests/fm-guard-stale-banner.test.sh +709 -0
  553. package/.agents/tests/fm-harness-adapter-instructions-live-e2e.test.sh +134 -0
  554. package/.agents/tests/fm-harness-adapter-references.test.sh +30 -0
  555. package/.agents/tests/fm-harness-liveness-drift-live-e2e.test.sh +151 -0
  556. package/.agents/tests/fm-herdr-lab.test.sh +243 -0
  557. package/.agents/tests/fm-herdr-session-cleanup-e2e.test.sh +146 -0
  558. package/.agents/tests/fm-herdr-session-cleanup.test.sh +329 -0
  559. package/.agents/tests/fm-herdr-submit-confirm-live-e2e.test.sh +125 -0
  560. package/.agents/tests/fm-herdr-version-floor-live-e2e.test.sh +144 -0
  561. package/.agents/tests/fm-home-summary-refresh.test.sh +971 -0
  562. package/.agents/tests/fm-inactive-reconcile.test.sh +485 -0
  563. package/.agents/tests/fm-kimi-harness.test.sh +687 -0
  564. package/.agents/tests/fm-lint-workflows.test.sh +532 -0
  565. package/.agents/tests/fm-lint.test.sh +1023 -0
  566. package/.agents/tests/fm-muse-harness.test.sh +932 -0
  567. package/.agents/tests/fm-muse-signals-live-e2e.test.sh +205 -0
  568. package/.agents/tests/fm-no-mistakes-required.test.sh +72 -0
  569. package/.agents/tests/fm-on.test.sh +507 -0
  570. package/.agents/tests/fm-opencode-primary-live-e2e.test.sh +357 -0
  571. package/.agents/tests/fm-operational-input.test.sh +160 -0
  572. package/.agents/tests/fm-peek-remote.test.sh +110 -0
  573. package/.agents/tests/fm-pending-reply.test.sh +1288 -0
  574. package/.agents/tests/fm-pi-branch-extension.test.sh +3182 -0
  575. package/.agents/tests/fm-pi-branch-live-e2e.test.sh +527 -0
  576. package/.agents/tests/fm-pi-primary-live-e2e.test.sh +345 -0
  577. package/.agents/tests/fm-pi-primary-types.test.sh +68 -0
  578. package/.agents/tests/fm-pi-watch-extension.test.sh +2843 -0
  579. package/.agents/tests/fm-pr-check-security.test.sh +2140 -0
  580. package/.agents/tests/fm-pr-merge.test.sh +2135 -0
  581. package/.agents/tests/fm-procevent-quota.test.sh +225 -0
  582. package/.agents/tests/fm-procevent-when.test.sh +406 -0
  583. package/.agents/tests/fm-procevent.test.sh +1745 -0
  584. package/.agents/tests/fm-project-origin.test.sh +110 -0
  585. package/.agents/tests/fm-public-followup.test.sh +2272 -0
  586. package/.agents/tests/fm-quota-array-dispatch-live-e2e.test.sh +526 -0
  587. package/.agents/tests/fm-quota-choose.test.sh +626 -0
  588. package/.agents/tests/fm-remote-backlog-handoff.test.sh +453 -0
  589. package/.agents/tests/fm-remote-doctor.test.sh +625 -0
  590. package/.agents/tests/fm-remote-entrypoint.test.sh +59 -0
  591. package/.agents/tests/fm-remote-job-orphan-reap.test.sh +205 -0
  592. package/.agents/tests/fm-remote-job.test.sh +768 -0
  593. package/.agents/tests/fm-remote-reply.test.sh +520 -0
  594. package/.agents/tests/fm-remote-secondmate-lifecycle-e2e.test.sh +1256 -0
  595. package/.agents/tests/fm-remote-secondmate-parent-binding.test.sh +326 -0
  596. package/.agents/tests/fm-remote-secondmate-trace-context.test.sh +310 -0
  597. package/.agents/tests/fm-remote-transport-lanes.test.sh +431 -0
  598. package/.agents/tests/fm-review-diff.test.sh +176 -0
  599. package/.agents/tests/fm-secondmate-harness.test.sh +2600 -0
  600. package/.agents/tests/fm-secondmate-lifecycle-e2e.test.sh +259 -0
  601. package/.agents/tests/fm-secondmate-liveness.test.sh +559 -0
  602. package/.agents/tests/fm-secondmate-reconcile.test.sh +732 -0
  603. package/.agents/tests/fm-secondmate-safety.test.sh +2972 -0
  604. package/.agents/tests/fm-secondmate-sync.test.sh +913 -0
  605. package/.agents/tests/fm-send-inbox-doorbell-live-e2e.test.sh +206 -0
  606. package/.agents/tests/fm-send-inbox.test.sh +352 -0
  607. package/.agents/tests/fm-send-popup-settle.test.sh +167 -0
  608. package/.agents/tests/fm-send-remote-delivery.test.sh +796 -0
  609. package/.agents/tests/fm-send-resolve-key.test.sh +551 -0
  610. package/.agents/tests/fm-send-secondmate-marker-herdr-e2e.test.sh +187 -0
  611. package/.agents/tests/fm-send-secondmate-marker.test.sh +278 -0
  612. package/.agents/tests/fm-send-settle.test.sh +147 -0
  613. package/.agents/tests/fm-send-strict.test.sh +241 -0
  614. package/.agents/tests/fm-session-lock-ancestry.test.sh +365 -0
  615. package/.agents/tests/fm-session-start.test.sh +2515 -0
  616. package/.agents/tests/fm-sessionstart-hook-live-e2e.test.sh +631 -0
  617. package/.agents/tests/fm-sessionstart-instruction-refresh-live-e2e.test.sh +230 -0
  618. package/.agents/tests/fm-sessionstart-nudge.test.sh +1039 -0
  619. package/.agents/tests/fm-shared-captain-inheritance.test.sh +404 -0
  620. package/.agents/tests/fm-spawn-batch.test.sh +148 -0
  621. package/.agents/tests/fm-spawn-dispatch-profile.test.sh +827 -0
  622. package/.agents/tests/fm-spawn-pool-base-freshen.test.sh +440 -0
  623. package/.agents/tests/fm-spawn-worktree-settle.test.sh +147 -0
  624. package/.agents/tests/fm-startup-memory-budget.test.sh +333 -0
  625. package/.agents/tests/fm-startup-network.test.sh +712 -0
  626. package/.agents/tests/fm-stow-cascade.test.sh +370 -0
  627. package/.agents/tests/fm-subagent-pretool-check.test.sh +291 -0
  628. package/.agents/tests/fm-supervision-events.test.sh +156 -0
  629. package/.agents/tests/fm-supervision-instructions.test.sh +189 -0
  630. package/.agents/tests/fm-tangle-guard.test.sh +277 -0
  631. package/.agents/tests/fm-task-delivery.test.sh +420 -0
  632. package/.agents/tests/fm-task-inbox.test.sh +513 -0
  633. package/.agents/tests/fm-teardown-endpoint-safety.test.sh +374 -0
  634. package/.agents/tests/fm-teardown.test.sh +2665 -0
  635. package/.agents/tests/fm-test-fixture-cleanup.test.sh +172 -0
  636. package/.agents/tests/fm-test-fixtures.test.sh +132 -0
  637. package/.agents/tests/fm-test-isolation-proof.test.sh +278 -0
  638. package/.agents/tests/fm-test-run.test.sh +1196 -0
  639. package/.agents/tests/fm-tmux-agent-liveness.test.sh +354 -0
  640. package/.agents/tests/fm-tmux-submit-busy.test.sh +340 -0
  641. package/.agents/tests/fm-tool-update-check.test.sh +1044 -0
  642. package/.agents/tests/fm-trace-context-lib.test.sh +253 -0
  643. package/.agents/tests/fm-trace-context-spawn.test.sh +581 -0
  644. package/.agents/tests/fm-transition-lib.test.sh +54 -0
  645. package/.agents/tests/fm-turnend-guard.test.sh +1822 -0
  646. package/.agents/tests/fm-update.test.sh +304 -0
  647. package/.agents/tests/fm-vendor-auth-probe.test.sh +395 -0
  648. package/.agents/tests/fm-voice-relay.test.sh +4741 -0
  649. package/.agents/tests/fm-wake-daemon-lifecycle-e2e.test.sh +171 -0
  650. package/.agents/tests/fm-wake-drain-open-decisions-cursor.test.sh +356 -0
  651. package/.agents/tests/fm-wake-drain-open-decisions.test.sh +226 -0
  652. package/.agents/tests/fm-wake-drain-unread-status.test.sh +379 -0
  653. package/.agents/tests/fm-wake-queue.test.sh +1224 -0
  654. package/.agents/tests/fm-watch-arm.test.sh +821 -0
  655. package/.agents/tests/fm-watch-checkpoint.test.sh +87 -0
  656. package/.agents/tests/fm-watch-recovery-loop.test.sh +223 -0
  657. package/.agents/tests/fm-watch-triage.test.sh +3889 -0
  658. package/.agents/tests/fm-watcher-lock.test.sh +1133 -0
  659. package/.agents/tests/fm-x-mode.test.sh +3042 -0
  660. package/.agents/tests/gleipnir-guard-pretool-check.test.sh +51 -0
  661. package/.agents/tests/gleipnir-machine-lock.test.sh +130 -0
  662. package/.agents/tests/herdr-test-safety.sh +42 -0
  663. package/.agents/tests/lib.sh +315 -0
  664. package/.agents/tests/remote-herdr-fixture.sh +125 -0
  665. package/.agents/tests/secondmate-helpers.sh +193 -0
  666. package/.agents/tests/smoke.test.sh +93 -0
  667. package/.agents/tests/wake-helpers.sh +338 -0
  668. package/.agents/tests/zellij-test-safety.sh +60 -0
  669. package/.agents/tools/README.md +10 -0
  670. package/.agents/tools/bin/tasks-cli +267 -0
  671. package/.agents/tools/tasks-cli.ts +216 -0
  672. package/AGENTS.md +498 -0
  673. package/CHANGELOG.md +1913 -0
  674. package/LICENSE +1 -1
  675. package/NOTICE +63 -0
  676. package/README.md +114 -60
  677. package/RULES/01-domains.md +51 -0
  678. package/RULES/02-agents.md +78 -0
  679. package/RULES/03-houses.md +61 -0
  680. package/RULES/04-hoard.md +97 -0
  681. package/RULES/05-platforms.md +67 -0
  682. package/RULES/06-append-only.md +108 -0
  683. package/RULES/07-config.md +101 -0
  684. package/RULES/08-delivery-gate.md +75 -0
  685. package/RULES/09-electron.md +58 -0
  686. package/RULES/README.md +22 -0
  687. package/bin/README.md +107 -0
  688. package/bin/a2a-mcp.sh +133 -0
  689. package/bin/a2a-serve.py +103 -0
  690. package/bin/a2a-serve.sh +8 -0
  691. package/bin/a2a-talk.sh +50 -0
  692. package/bin/a2abridge-ensure.sh +108 -0
  693. package/bin/agent-run.sh +43 -0
  694. package/bin/agents-config.sh +256 -0
  695. package/bin/apodex-smoke-test.sh +105 -0
  696. package/bin/bifrost-bridge.sh +131 -0
  697. package/bin/bifrost-ingress.sh +77 -0
  698. package/bin/bootstrap-macos.sh +112 -0
  699. package/bin/bootstrap-windows.ps1 +112 -0
  700. package/bin/branch-guard.sh +64 -0
  701. package/bin/brokk +73 -0
  702. package/bin/brokk-classify-lib.sh +1770 -0
  703. package/bin/brokk-lease-lib.sh +222 -0
  704. package/bin/brokk-lease.sh +193 -0
  705. package/bin/brokk-lint.sh +65 -0
  706. package/bin/brokk-send.sh +51 -0
  707. package/bin/brokk-update.sh +9 -0
  708. package/bin/brokk-wake-grant.sh +127 -0
  709. package/bin/brokk-wake-lib.sh +1849 -0
  710. package/bin/changelog-assemble.sh +154 -0
  711. package/bin/changelog-guard.sh +197 -0
  712. package/bin/crash-sense.sh +173 -0
  713. package/bin/design-check.sh +80 -0
  714. package/bin/design-icon.sh +153 -0
  715. package/bin/desktop-place.sh +224 -0
  716. package/bin/docs-guard.sh +39 -0
  717. package/bin/editor-place.sh +225 -0
  718. package/bin/eindri-acclaim.sh +47 -0
  719. package/bin/eindri-control.sh +28 -0
  720. package/bin/eindri-role.sh +83 -0
  721. package/bin/eindri-seat.sh +83 -0
  722. package/bin/eindri-seen.sh +54 -0
  723. package/bin/eindri-send.sh +15 -0
  724. package/bin/eindri-start.sh +98 -0
  725. package/bin/eindri-watch.sh +57 -0
  726. package/bin/einherjar-spawn.sh +576 -0
  727. package/bin/eir-doctor.sh +158 -0
  728. package/bin/erindi-brief.sh +271 -0
  729. package/bin/feature-inventory.sh +73 -0
  730. package/bin/fleet-apply.sh +81 -0
  731. package/bin/github-deploy.sh +94 -0
  732. package/bin/gjallarhorn-expose.sh +136 -0
  733. package/bin/gjallarhorn-notify.sh +71 -0
  734. package/bin/gjallarhorn-purge.sh +67 -0
  735. package/bin/gjallarhorn-tunnel.sh +85 -0
  736. package/bin/gleipnir-lock-lib.sh +284 -0
  737. package/bin/groa-update.sh +130 -0
  738. package/bin/hall-snapshot.sh +111 -0
  739. package/bin/hamr-harness.sh +246 -0
  740. package/bin/heimdall-ssh-keys.sh +374 -0
  741. package/bin/herdr-agents.py +44 -0
  742. package/bin/herdr-ensure.sh +104 -0
  743. package/bin/herdr-run.sh +452 -0
  744. package/bin/hermes-ensure.sh +88 -0
  745. package/bin/hlidskjalf-agents.sh +172 -0
  746. package/bin/hlidskjalf-usage.sh +196 -0
  747. package/bin/hoard-guard.sh +135 -0
  748. package/bin/hoard-lib.sh +105 -0
  749. package/bin/hodd.sh +102 -0
  750. package/bin/host-sense.sh +199 -0
  751. package/bin/huginn-research-worker.sh +121 -0
  752. package/bin/local-model-lock.sh +70 -0
  753. package/bin/mimir-bridge.py +259 -0
  754. package/bin/mimir-bridge.sh +100 -0
  755. package/bin/mimir-ingest.sh +131 -0
  756. package/bin/mimir-reflect.sh +27 -0
  757. package/bin/mimir.sh +113 -0
  758. package/bin/mjollnir-webhook.sh +72 -0
  759. package/bin/mjollnir.sh +104 -0
  760. package/bin/model-hardware.sh +96 -0
  761. package/bin/model-resolve.sh +160 -0
  762. package/bin/models-detect.sh +178 -0
  763. package/bin/nornir-cron-start.sh +162 -0
  764. package/bin/nornir-job-daily-briefing.sh +191 -0
  765. package/bin/nornir-job-git-sync.sh +152 -0
  766. package/bin/nornir-job-hall-snapshot.sh +28 -0
  767. package/bin/nornir-job-memory-housekeeping.sh +114 -0
  768. package/bin/nornir-job-nsr-compliance.sh +54 -0
  769. package/bin/nornir-job-observer.sh +166 -0
  770. package/bin/nornir-job-skillopt-sleep.sh +76 -0
  771. package/bin/npm-publish.sh +136 -0
  772. package/bin/omarchy-hook-install.sh +60 -0
  773. package/bin/omarchy-install.sh +161 -0
  774. package/bin/omarchy-plugins.sh +187 -0
  775. package/bin/omarchy-sense.sh +162 -0
  776. package/bin/perm-guard.sh +30 -0
  777. package/bin/pi-agent.sh +68 -0
  778. package/bin/pi-ensure.sh +77 -0
  779. package/bin/pi-local.sh +37 -0
  780. package/bin/pi-model-agnostic.sh +71 -0
  781. package/bin/pi-seat.sh +63 -0
  782. package/bin/prereq-ensure.sh +166 -0
  783. package/bin/private-guard.sh +58 -0
  784. package/bin/project-git.sh +69 -0
  785. package/bin/public-guard.sh +71 -0
  786. package/bin/ratatoskr.sh +49 -0
  787. package/bin/realm-lib.sh +32 -0
  788. package/bin/repo-scrub.sh +62 -0
  789. package/bin/rodd-operational-input.sh +250 -0
  790. package/bin/runes-append.sh +198 -0
  791. package/bin/saga-session-start.sh +172 -0
  792. package/bin/saga-sessionstart-run.sh +79 -0
  793. package/bin/saga-wake-drain.sh +41 -0
  794. package/bin/secret-guard.sh +63 -0
  795. package/bin/sessrumnir-ensure.sh +100 -0
  796. package/bin/sessrumnir-sync.sh +237 -0
  797. package/bin/sessrumnir.sh +104 -0
  798. package/bin/skillopt-setup.sh +76 -0
  799. package/bin/skuld-branch-outcome.sh +203 -0
  800. package/bin/skuld-branch-prompt.sh +101 -0
  801. package/bin/smidja-bootstrap.sh +94 -0
  802. package/bin/smidja-observe.sh +86 -0
  803. package/bin/syn-arm-pretool-check.sh +57 -0
  804. package/bin/syn-asset-pretool-check.sh +89 -0
  805. package/bin/syn-cd-pretool-check.sh +28 -0
  806. package/bin/syn-guard-pretool-check.sh +83 -0
  807. package/bin/syn-spawn-pretool-check.sh +58 -0
  808. package/bin/syn-turnend-guard.sh +36 -0
  809. package/bin/syn-watch-arm.sh +99 -0
  810. package/bin/tailscale-sync.sh +203 -0
  811. package/bin/telegram-bot.sh +82 -0
  812. package/bin/toolchain.sh +74 -0
  813. package/bin/ui-truth-check.sh +75 -0
  814. package/bin/utgard.sh +111 -0
  815. package/bin/valhalla.sh +115 -0
  816. package/bin/valknut-load.sh +298 -0
  817. package/bin/vor-crew-state.sh +124 -0
  818. package/bin/wedge-notify.sh +60 -0
  819. package/bin/workspace-provision.sh +80 -0
  820. package/bin/workspace-rag.sh +163 -0
  821. package/bin/wyrd-db.sh +47 -0
  822. package/bin/yggdrasil.sh +152 -0
  823. package/bin/ymir-edit.sh +145 -0
  824. package/bin/ymir-install.sh +806 -0
  825. package/bin/ymir-invite.sh +93 -0
  826. package/bin/ymir-isolation.sh +88 -0
  827. package/bin/ymir-migrate.sh +61 -0
  828. package/bin/ymir-plan.sh +356 -0
  829. package/bin/ymir-platform.sh +348 -0
  830. package/bin/ymir-say.sh +110 -0
  831. package/bin/ymir-setup-auth.sh +119 -0
  832. package/bin/ymir-validate.sh +193 -0
  833. package/bin/ymir.js +74 -16
  834. package/docs/Architecture.md +339 -0
  835. package/docs/design.md +351 -0
  836. package/docs/installations/README.md +63 -0
  837. package/docs/installations/ymir-home.md +93 -0
  838. package/docs/integration.md +105 -0
  839. package/docs/lore.md +1060 -0
  840. package/docs/research/agent-harnesses.md +290 -0
  841. package/docs/runbooks/README.md +19 -0
  842. package/docs/runbooks/a2a.md +91 -0
  843. package/docs/runbooks/agent-permissions.md +99 -0
  844. package/docs/runbooks/agents.md +57 -0
  845. package/docs/runbooks/models.md +69 -0
  846. package/docs/runbooks/realm-onboarding.md +60 -0
  847. package/docs/runbooks/secrets-and-hoard.md +60 -0
  848. package/docs/runbooks/updates-and-migrations.md +110 -0
  849. package/docs/runbooks/worktrees-isolation.md +72 -0
  850. package/docs/session-start.md +105 -0
  851. package/docs/skillopt-integration.md +321 -0
  852. package/docs/sync-system.md +66 -0
  853. package/docs/workspaces.md +104 -0
  854. package/docs/ymir-rut.md +260 -0
  855. package/package.json +54 -14
  856. package/packaging/build.sh +74 -0
  857. package/packaging/macos/Ymir Installer.command +43 -0
  858. package/packaging/windows/ymir-setup.nsi +74 -0
  859. package/scripts/README.md +22 -0
  860. package/scripts/electron.sh +269 -0
  861. package/scripts/lower.sh +34 -0
  862. package/scripts/raise.sh +42 -0
  863. package/scripts/start.sh +217 -0
  864. package/scripts/stop.sh +113 -0
  865. package/install.sh +0 -35
@@ -0,0 +1,518 @@
1
+ # Eindri Orchestration — worker spawn, brief, state, isolation, and supervision
2
+
3
+ Purpose: the complete, production-grade reference for how Brokk gathers an **Eindri** worker
4
+ (Einherjar → Erindi → Vör → Yggdrasil → Utgard → Valhalla) from dispatch to delivery.
5
+
6
+ > **One worker, one brief, one worktree.** Every Eindri is gathered by
7
+ > `bin/einherjar-spawn.sh`, reads exactly one brief at `data/<task-id>/brief.md`, and runs in
8
+ > exactly one Yggdrasil worktree at `.yggdrasil/<task-id>`. The brief and the recorded task
9
+ > cannot drift: both carry the same `Delivery contract: mode=<mode>` line.
10
+ >
11
+ > Provenance: the upstream agent-distro spawn/brief/state pattern
12
+ > (`$BROKK_UPSTREAM/bin/fm-spawn.sh`, `fm-brief.sh`, `fm-crew-state.sh`) is the source
13
+ > of the pattern; Ymir's runtime is `bin/einherjar-spawn.sh`, `bin/erindi-brief.sh`, and
14
+ > `bin/vor-crew-state.sh`, retargeted for plan 29. Upstream nautical labels are provenance
15
+ > only — the Ymir names are Norse.
16
+
17
+ ---
18
+
19
+ ## 1. The orchestration chain
20
+
21
+ | Stage | Norse name | Owner artifact | Lives at |
22
+ |---|---|---|---|
23
+ | Dispatch decision | **Brokk** | `config/eindri-dispatch.json` | repo config |
24
+ | Harness detection | **Hamr** | `bin/hamr-harness.sh` | repo bin |
25
+ | Worker gather | **Einherjar** | `bin/einherjar-spawn.sh` | repo bin |
26
+ | Worker brief | **Erindi** | `bin/erindi-brief.sh` → `data/<id>/brief.md` | private `data/` |
27
+ | Worktree isolation | **Yggdrasil** | `.yggdrasil/<id>` (git worktree) | private `.yggdrasil/` |
28
+ | Sandbox seal | **Utgard** | `.agents/sandbox/Dockerfile.utgard` | repo `.agents/` |
29
+ | State reconciliation | **Vör** | `bin/vor-crew-state.sh` | repo bin |
30
+ | Status event log | (Eindri writes) | `state/<id>.status` | private `state/` |
31
+ | Steering inbox | (Brokk writes) | `state/<id>.inbox/*.msg` | private `state/` |
32
+ | Record | (spawn writes) | `state/<id>.meta` | private `state/` |
33
+ | Supervision | **Valhalla** | tmux/herdr pane or supervision tree | backend |
34
+ | Human merge gate | **Glitnir** | PR review card in Hlidskjalf | portal |
35
+
36
+ `DATA`, `STATE`, and `CONFIG` default to `$BROKK_HOME/data`, `$BROKK_HOME/state`, and
37
+ `$BROKK_HOME/config`. They are gitignored (`.gitignore:59-63`) and are the only writable
38
+ surface outside the worktree.
39
+
40
+ ---
41
+
42
+ ## 2. Spawn interface — `bin/einherjar-spawn.sh`
43
+
44
+ ### 2.1 Usage forms
45
+
46
+ ```
47
+ einherjar-spawn.sh <task-id> <project-dir> --mode <direct-PR|local-only|no-mistakes>
48
+ [--yolo on|off] [--harness <name>] [--model <name>]
49
+ [--effort <low|medium|high|xhigh|max>] [--backend tmux|herdr]
50
+ [--isolation on|off|auto]
51
+
52
+ einherjar-spawn.sh <task-id> <project-dir> --scout
53
+ [--harness <name>] [--model <name>] [--effort <...>]
54
+ [--backend <...>] [--isolation <...>]
55
+
56
+ einherjar-spawn.sh <task-id> --relaunch
57
+ [--harness <name>] [--model <name>] [--effort <...>] [--isolation <...>]
58
+ ```
59
+
60
+ Every spawn prints exactly one record line to stdout:
61
+
62
+ ```
63
+ spawned <id> harness=<h> kind=<kind> mode=<m> yolo=<y> backend=<b> target=<t> worktree=<wt> isolation=<on|off>
64
+ ```
65
+
66
+ (`--scout` omits `mode=`/`yolo=`; the output shape is defined at
67
+ `bin/einherjar-spawn.sh:550-554`.)
68
+
69
+ ### 2.2 Flag reference
70
+
71
+ | Flag | Values | Default | Meaning / failure mode |
72
+ |---|---|---|---|
73
+ | `<task-id>` (positional 1) | `[A-Za-z0-9._-]+` | required | No `/`, no leading `.`, no spaces; else exit 2. |
74
+ | `<project-dir>` (positional 2) | path | required for fresh spawn | Must be a git working tree; else error. Resolved absolute. |
75
+ | `--mode` | `direct-PR`, `local-only`, `no-mistakes` | — | **Required for ship spawns.** Refused with `--scout` and `--relaunch`. |
76
+ | `--scout` | flag | off | Deliverable is `data/<id>/report.md`; no branch, no push, no PR. |
77
+ | `--relaunch` | flag | off | Reuse recorded worktree/kind/mode from `state/<id>.meta`; only harness/model/effort/isolation may change. |
78
+ | `--yolo` | `on`, `off` | `off` | Merge posture recorded in the meta for a ship task; not a brief input. |
79
+ | `--harness` | name **or** raw command | detected | Verified: `opencode pi pi-signed`. A value containing whitespace is a raw launch escape hatch. |
80
+ | `--model` | token | harness default | Passed through as `--model` (opencode/pi). |
81
+ | `--effort` | `low`, `medium`, `high`, `xhigh`, `max` | harness default | Passed to `pi` as `--thinking`; opencode ignores it. |
82
+ | `--backend` | `tmux`, `herdr` | resolved | tmux window `eindri-<id>` or herdr workspace `eindri-<id>`. |
83
+ | `--isolation` | `on`, `off`, `auto` | `auto` | `auto` seals only when the Utgard image is present, and reports the decision. |
84
+
85
+ ### 2.3 Environment overrides
86
+
87
+ | Variable | Effect |
88
+ |---|---|
89
+ | `BROKK_ROOT_OVERRIDE` | Root used when `BROKK_HOME` is unset. |
90
+ | `BROKK_HOME` | Home owning `data/ state/ config/`; defaults to repo root. |
91
+ | `BROKK_STATE_OVERRIDE` | Override `state/` (metas, status, launch scripts). |
92
+ | `BROKK_DATA_OVERRIDE` | Override `data/` (briefs, reports). |
93
+ | `BROKK_CONFIG_OVERRIDE` | Override `config/` (dispatch, harness, backend). |
94
+ | `BROKK_BACKEND` | Force `tmux` or `herdr` when `--backend` is absent. |
95
+ | `BROKK_TMUX_SESSION` | tmux session name when not already inside tmux (default `brokk`). |
96
+ | `TMUX` / `HERDR_ENV` | Runtime detection of the active multiplexer. |
97
+ | `BROKK_PI_HARNESS` | `pi-signed` selects the signed pi adapter in Hamr. |
98
+
99
+ ### 2.4 Harness resolution and the fail-closed law
100
+
101
+ `bin/einherjar-spawn.sh:166-237` resolves the harness in this order:
102
+
103
+ 1. **Explicit `--harness <name>`** → verified against `VERIFIED_HARNESSES='opencode pi pi-signed'`.
104
+ 2. **Explicit `--harness '<raw command>'`** (contains whitespace) → the raw-launch escape hatch;
105
+ prints a warning and names the derived harness. Use only to trial a new adapter.
106
+ 3. **`config/eindri-dispatch.json` present** → a fresh spawn with no explicit `--harness`
107
+ is **refused** (consultation backstop: the dispatch profiles must be read, never skipped).
108
+ 4. **`bin/hamr-harness.sh crew`** when executable, else an inline detector
109
+ (`config/eindri-harness` → env markers → process ancestry → `opencode`).
110
+
111
+ Fail-closed rules:
112
+
113
+ - An unverified harness is refused with a plain reason, never silently downgraded.
114
+ - A verified harness whose executable is not on `PATH` is refused.
115
+ - `--relaunch` re-verifies the recorded harness (or recorded raw command) the same way.
116
+
117
+ ---
118
+
119
+ ## 3. Erindi — the worker brief
120
+
121
+ `bin/erindi-brief.sh` scaffolds `data/<id>/brief.md`. It **refuses to overwrite** an existing
122
+ brief unless `--relaunch` is given.
123
+
124
+ ### 3.1 Usage
125
+
126
+ ```
127
+ erindi-brief.sh <task-id> <repo-name> --mode <no-mistakes|direct-PR|local-only>
128
+ erindi-brief.sh <task-id> <repo-name> --scout
129
+ erindi-brief.sh <task-id> --relaunch
130
+ ```
131
+
132
+ `--relaunch` regenerates from `state/<id>.meta` so a replacement Eindri receives the **same**
133
+ delivery contract; it re-derives the mode and refuses `--mode`. `--yolo` is rejected here — it
134
+ belongs to spawn (`bin/erindi-brief.sh:70`).
135
+
136
+ ### 3.2 Brief structure (ship)
137
+
138
+ | Section | Content |
139
+ |---|---|
140
+ | Role line | "You are an Eindri: an autonomous worker agent managed by Brokk. Work on your own; do not wait for the Allfather." |
141
+ | `# Task` | `{TASK}` placeholder Brokk replaces at dispatch. |
142
+ | `# Delivery contract` | The fixed machine-readable line `Delivery contract: mode=<mode>`. |
143
+ | `# Setup` | Disposable worktree of `<repo>` at `.yggdrasil/<id>` (or `/sandbox/workspace` under Utgard), detached HEAD. Isolation assertion first: `pwd -P` + `git rev-parse --show-toplevel` must resolve to the worktree. |
144
+ | Branch step | `git checkout -b eindri/<id>` (plus `no-mistakes doctor`/`init` for `no-mistakes`). |
145
+ | `# Rules` | Never push default branch / never merge; stay inside the worktree; status protocol; block after two failures; escalate product decisions. |
146
+ | Brokk instruction inbox | Read `state/<id>.inbox/*.msg` in numeric order; acknowledge by moving to `handled/`. |
147
+ | `# Definition of done` | Mode-specific terminal action and status line. |
148
+
149
+ ### 3.3 The `Delivery contract:` line
150
+
151
+ - Written only for ship briefs, as `Delivery contract: mode=<mode>`
152
+ (`bin/erindi-brief.sh:245`).
153
+ - Read by `bin/einherjar-spawn.sh:327-335`: if present and it disagrees with the explicit
154
+ `--mode`, the launch is **refused**. A missing line warns but launches on `--mode`.
155
+ - Scout briefs carry `Delivery contract: mode=scout` (`bin/erindi-brief.sh:183`) and are not
156
+ mode-checked at launch.
157
+
158
+ ### 3.4 Delivery modes
159
+
160
+ | Mode | Branch/push | Pipeline | Terminal status | Merge owner |
161
+ |---|---|---|---|---|
162
+ | `no-mistakes` | push `eindri/<id>`, open the pipeline PR | `no-mistakes` | `done: <PR url> (pipeline <status>)` | Glitnir human gate |
163
+ | `direct-PR` | push `eindri/<id>`, open PR via `gh` | none | `done: opened PR <url>` | Glitnir human gate |
164
+ | `local-only` | `eindri/<id>` only, no push/PR | none | `done: ready in branch eindri/<id>` | Brokk merges local `main` after Allfather approval |
165
+ | `scout` | none | none | `done: {conclusion}` with report at `data/<id>/report.md` | n/a (report only) |
166
+
167
+ ### 3.5 Status protocol (the event log)
168
+
169
+ The brief instructs the worker to append one line to `state/<id>.status`:
170
+
171
+ ```
172
+ echo "{state}: {one short line}" >> 'state/<id>.status'
173
+ ```
174
+
175
+ | State | Meaning |
176
+ |---|---|
177
+ | `working` | Non-terminal phase change; do not end the turn on it. |
178
+ | `needs-decision` | A choice belongs to the Allfather; Brokk replies. |
179
+ | `blocked` | The worker is stuck and needs Brokk to act. |
180
+ | `paused` | Deliberately idling on a known external wait expected to clear (differs from `blocked`). |
181
+ | `done` | A Definition-of-done gate is met. |
182
+ | `failed` | The task cannot complete. |
183
+ | `resolved` | Closes a decision/blocker by exact key; **not** a state. |
184
+
185
+ A decision/blocker stays open until a `resolved` line carrying its exact key lands; a later
186
+ `done:`/`working:` never closes it.
187
+
188
+ ### 3.6 Steering inbox
189
+
190
+ `state/<id>.inbox/*.msg` is Brokk's durable channel into a running worker. The worker lists
191
+ `*.msg`, reads in numeric order, acts, then moves each handled message to
192
+ `state/<id>.inbox/handled/`. **The move is the acknowledgement** — without it Brokk rings
193
+ again and eventually treats the worker as stuck.
194
+
195
+ ---
196
+
197
+ ## 4. Vör — deterministic state reconciliation
198
+
199
+ `bin/vor-crew-state.sh <task-id>` reads the current state without a model and without trusting
200
+ a `tail -1` of the append-only log. Output is one stable line:
201
+
202
+ ```
203
+ state: <working|parked|done|blocked|paused|failed|unknown> · source: <backend|status-log|none> · <detail>
204
+ ```
205
+
206
+ The separator is a middle dot surrounded by spaces (` · `). Exit code is **0** on any
207
+ successful read regardless of state; **2** on a usage error (no id).
208
+
209
+ ### 4.1 Reconciliation order (`bin/vor-crew-state.sh:40-124`)
210
+
211
+ 1. Read `worktree`, `kind`, `backend`, `window` from `state/<id>.meta`.
212
+ 2. Missing/gone worktree → `state: unknown · source: none · worktree gone (torn down?)`.
213
+ 3. No recorded backend target:
214
+ - a log verb mapping to a recognized run-state → `source: status-log`;
215
+ - otherwise → `state: unknown · source: none · no backend target recorded`.
216
+ 4. Backend target **alive** (`tmux display-message -p -t <t> '#{pane_id}'` / `herdr pane get <t>`):
217
+ - terminal log verdict (`done`/`failed`) → `source: status-log`;
218
+ - working/parked/blocked/paused → `source: status-log`;
219
+ - otherwise → `state: working · source: backend · endpoint alive: <t>`.
220
+ 5. Backend target **gone**: a terminal log verdict is durable truth; otherwise
221
+ `state: unknown · source: none · backend target gone: <t>`.
222
+
223
+ ### 4.2 Verb → state map (`bin/vor-crew-state.sh:71-81`)
224
+
225
+ | Log verb | Canonical state |
226
+ |---|---|
227
+ | `working` | `working` |
228
+ | `needs-decision` | `parked` |
229
+ | `blocked` | `blocked` |
230
+ | `done` | `done` |
231
+ | `failed` | `failed` |
232
+ | `paused` (configurable verb) | `paused` |
233
+ | anything else, incl. `resolved` | `unknown` (never emitted as state) |
234
+
235
+ `BROKK_PAUSED_VERB` (default `paused`) retargets the paused verb consistently across brief,
236
+ state, and reconciliation.
237
+
238
+ ---
239
+
240
+ ## 5. Dispatch profiles and harness override
241
+
242
+ ### 5.1 `config/eindri-dispatch.json`
243
+
244
+ Brokk reads the dispatch rules **before** dispatching and passes concrete flags. Schema:
245
+ `version`, `platform`, `notes`, `rules[]` (`when`, `use[]`, `why`), `default[]`.
246
+
247
+ | Rule (`when`) | Harness | Model | Effort |
248
+ |---|---|---|---|
249
+ | General implementation, refactoring, bug fixes | `opencode` | `opencode-go/deepseek-v4.1-flash` | `medium` |
250
+ | Deep investigation, diagnosis, planning, design | `opencode` | `opencode-go/deepseek-v4.1-flash` | `xhigh` |
251
+ | Trivial mechanical edits / file gathering | `opencode` | `opencode-go/deepseek-v4.1-flash` | `low` |
252
+ | Long-running autonomous / background execution | `pi` | (Pi default) | `medium` |
253
+ | **default** | `opencode` | `opencode-go/deepseek-v4.1-flash` | `medium` |
254
+
255
+ Because this file exists, a fresh spawn without an explicit `--harness` is refused — the agent
256
+ must consult the rules and pass the resolved harness. Validate it with:
257
+
258
+ ```bash
259
+ python3 -c "import json;json.load(open('config/eindri-dispatch.json'))"
260
+ ```
261
+
262
+ ### 5.2 `config/eindri-harness` (harness override)
263
+
264
+ Single first non-empty, non-comment line: `<harness> [<model>] [<effort>]`
265
+ (`bin/hamr-harness.sh:21-24`). Today's file is just `opencode` (harness-only).
266
+
267
+ ```bash
268
+ bin/hamr-harness.sh eindri # effective Eindri harness
269
+ bin/hamr-harness.sh eindri-model # optional model token (empty when absent)
270
+ bin/hamr-harness.sh eindri-effort # optional effort token (empty when absent)
271
+ ```
272
+
273
+ Model/effort come **only** from this file. `default` or absent resolves to Brokk's own harness.
274
+
275
+ ---
276
+
277
+ ## 6. Yggdrasil — worktree isolation
278
+
279
+ `bin/einherjar-spawn.sh` creates or reuses the worktree at `$BROKK_HOME/.yggdrasil/<id>`:
280
+
281
+ - Base ref: `origin/HEAD` when resolvable, else `HEAD`; created `--detach` so the worker's
282
+ branch is its own (`bin/einherjar-spawn.sh:373-386`).
283
+ - A pre-existing directory that is not a worktree root is refused (no silent reuse).
284
+ - A relaunch reuses the exact recorded `worktree` and **refuses if it is gone**.
285
+ - The linked worktree's `.git` file points at the project's common git dir; that dir's path is
286
+ recorded (`GIT_COMMON`) so Utgard can mount it at the same path.
287
+
288
+ Manual equivalents (for inspection/repair):
289
+
290
+ ```bash
291
+ git -C <project-dir> worktree add --detach .yggdrasil/<id> HEAD
292
+ git -C .yggdrasil/<id> rev-parse --show-toplevel
293
+ git -C <project-dir> worktree list
294
+ git -C <project-dir> worktree remove .yggdrasil/<id> # teardown
295
+ ```
296
+
297
+ > **Isolation assertion is authoritative.** The brief makes the worker prove
298
+ > `pwd -P` and `git rev-parse --show-toplevel` are the worktree, not the primary checkout. If
299
+ > they are not, the worker must append `blocked: launched in primary checkout, not an isolated
300
+ > worktree` and stop.
301
+
302
+ ---
303
+
304
+ ## 7. Utgard — Docker sealing
305
+
306
+ `--isolation auto` seals when `docker` is on `PATH` **and** `utgard-runner:latest` exists;
307
+ otherwise it runs in the worktree and reports the decision. `--isolation on` fails closed if
308
+ either is missing.
309
+
310
+ Build the image:
311
+
312
+ ```bash
313
+ docker build -f .agents/sandbox/Dockerfile.utgard -t utgard-runner:latest .agents/sandbox
314
+ ```
315
+
316
+ The exact launch line emitted by `bin/einherjar-spawn.sh:471` (real flags):
317
+
318
+ ```bash
319
+ docker run --rm -it --network none --cpus 1.0 --memory 512m \
320
+ --security-opt no-new-privileges --user "$(id -u):$(id -g)" -e HOME=/tmp \
321
+ -v "<worktree>:/sandbox/workspace" \
322
+ [-v "<git-common-dir>:<git-common-dir>"] \
323
+ -v "<STATE>:<STATE>" -v "<DATA>:<DATA>" \
324
+ -w /sandbox/workspace utgard-runner:latest bash "<state>/<id>.launch.sh"
325
+ ```
326
+
327
+ | Flag | Why it is there |
328
+ |---|---|
329
+ | `--rm` | No residue; a failed run never accumulates containers. |
330
+ | `--network none` | No network by law (`.agents/sandbox/README.md`). |
331
+ | `--cpus 1.0 --memory 512m` | Hard CPU/RAM caps mirroring `sandcastle.config.json`. |
332
+ | `--security-opt no-new-privileges` | No privilege escalation. |
333
+ | `--user "$(id -u):$(id -g)"` | **The host UID/GID fix.** Without it the worker writes files owned by `agentuser`/root and the host cannot manage them. |
334
+ | `-e HOME=/tmp` | The image's `HOME` is read-only/absent for the mounted user; `/tmp` keeps tool caches writable. |
335
+ | `-v <worktree>:/sandbox/workspace` | The worktree is the only working surface. |
336
+ | `-v <git-common-dir>:<same path>` | **The `.git` fix.** A linked worktree's `.git` is a file pointing at the common git dir; mounting it at the identical path lets git resolve inside the container. Without it every git command fails with "not a git repository". |
337
+ | `-v <STATE>:<STATE>` / `-v <DATA>:<DATA>` | The brief's status, inbox, meta, and report paths resolve identically inside and outside. |
338
+ | `-w /sandbox/workspace` | Working directory matches the brief's under-Utgard path. |
339
+
340
+ The sidecar `state/<id>.utgard` records the effective seal:
341
+
342
+ ```
343
+ image=utgard-runner:latest
344
+ network=none
345
+ cpus=1.0
346
+ memory=512m
347
+ security_opt=no-new-privileges
348
+ user=<uid>:<gid>
349
+ worktree_mount=<wt>:/sandbox/workspace
350
+ git_common_mount=<path>:<path>|none
351
+ state_mount=<STATE>:<STATE>
352
+ data_mount=<DATA>:<DATA>
353
+ launch=<state>/<id>.launch.sh
354
+ ```
355
+
356
+ `--isolation off` removes `state/<id>.utgard` and launches `bash <state>/<id>.launch.sh` in
357
+ the worktree.
358
+
359
+ ---
360
+
361
+ ## 8. Valhalla — supervision
362
+
363
+ - **tmux**: creates/detaches window `eindri-<id>` in the current or `brokk` session, disables
364
+ auto-rename, sends the launch command. A duplicate window name is refused
365
+ (`bin/einherjar-spawn.sh:478-499`).
366
+ - **herdr**: creates workspace `eindri-<id>` with `--cwd <worktree> --no-focus`, then sends
367
+ the launch command to its pane (`bin/einherjar-spawn.sh:501-516`).
368
+ - **Skill assets**: `assets/pi-boot/supervision-tree.yml` defines the Valhalla supervision
369
+ branch (brokk-primary, three Eindri workers, herdr, Mimirsbrunn, Ratatoskr) and
370
+ `assets/pi-boot/herdr-profile.toml` the pane layout. These are reference configurations;
371
+ apply them through the process supervisor, do not hand-run panes.
372
+
373
+ Inspect a worker:
374
+
375
+ ```bash
376
+ bin/vor-crew-state.sh <id>
377
+ tmux list-windows -t brokk -F '#{window_name}'
378
+ tmux capture-pane -pt brokk:eindri-<id> | tail -40
379
+ herdr pane list --workspace <ws>
380
+ ```
381
+
382
+ ---
383
+
384
+ ## 9. Worked examples
385
+
386
+ ### 9.1 Ship a direct PR
387
+
388
+ ```bash
389
+ # 1. Brief (mode resolved at intake)
390
+ bin/erindi-brief.sh W0123 my-repo --mode direct-PR
391
+ # 2. Brokk replaces {TASK} in data/W0123/brief.md
392
+ # 3. Spawn with an explicit dispatch-resolved harness
393
+ bin/einherjar-spawn.sh W0123 /home/<user>/repos/my-repo \
394
+ --mode direct-PR --harness opencode \
395
+ --model opencode-go/deepseek-v4.1-flash --effort medium \
396
+ --backend tmux --isolation auto
397
+ # 4. Watch state
398
+ bin/vor-crew-state.sh W0123
399
+ ```
400
+
401
+ ### 9.2 Scout a codebase (report only)
402
+
403
+ ```bash
404
+ bin/erindi-brief.sh W0124 my-repo --scout
405
+ bin/einherjar-spawn.sh W0124 /home/<user>/repos/my-repo --scout \
406
+ --harness opencode --effort xhigh
407
+ ```
408
+
409
+ Report lands at `data/W0124/report.md`; the worktree is scratch.
410
+
411
+ ### 9.3 Relaunch after a crash
412
+
413
+ ```bash
414
+ bin/erindi-brief.sh W0123 --relaunch # same delivery contract
415
+ bin/einherjar-spawn.sh W0123 --relaunch --harness pi --effort high
416
+ ```
417
+
418
+ Worktree, kind, and mode come from `state/W0123.meta`; only harness/model/effort/isolation may
419
+ change. If the worktree is gone, the relaunch is refused — recover it first.
420
+
421
+ ### 9.4 Sealed run (Utgard)
422
+
423
+ ```bash
424
+ docker build -f .agents/sandbox/Dockerfile.utgard -t utgard-runner:latest .agents/sandbox
425
+ bin/einherjar-spawn.sh W0125 my-repo --mode local-only --harness opencode --isolation on
426
+ cat state/W0125.utgard
427
+ ```
428
+
429
+ ### 9.5 Steer a running worker
430
+
431
+ ```bash
432
+ mkdir -p state/W0123.inbox
433
+ printf 'Use the v2 API; the v1 endpoint is deprecated.\n' > state/W0123.inbox/001.msg
434
+ # worker reads, acts, then acknowledges:
435
+ # mv state/W0123.inbox/001.msg state/W0123.inbox/handled/
436
+ ```
437
+
438
+ ---
439
+
440
+ ## 10. The record — `state/<id>.meta`
441
+
442
+ Line-oriented `key=value` written atomically by spawn:
443
+
444
+ | Key | Meaning |
445
+ |---|---|
446
+ | `id`, `kind` | Task id; `ship` or `scout`. |
447
+ | `mode`, `yolo` | Ship only: the delivery mode and merge posture. |
448
+ | `harness`, `raw_launch` | Adapter name; raw command when the escape hatch was used. |
449
+ | `model`, `effort` | Resolved model/effort (may be empty). |
450
+ | `backend`, `window` | `tmux`/`herdr` and the target id. |
451
+ | `worktree`, `project` | The isolated worktree and its source repo. |
452
+ | `brief`, `launch` | Paths to `brief.md` and the generated `.launch.sh`. |
453
+ | `isolation` | `on`/`off` effective seal. |
454
+ | `spawn_gen` | Unique spawn generation (`s<epoch>.<pid>.<rand>`). |
455
+
456
+ `meta_value` reads the **last** matching key (`grep ... | tail -1`), so a torn write can never
457
+ shadow a completed record once the atomic `mv` lands.
458
+
459
+ ---
460
+
461
+ ## 11. Verification
462
+
463
+ ```bash
464
+ # 1. Scripts parse
465
+ for f in bin/einherjar-spawn.sh bin/erindi-brief.sh bin/vor-crew-state.sh \
466
+ bin/hamr-harness.sh bin/gleipnir-lock-lib.sh; do bash -n "$f" && echo "OK $f"; done
467
+
468
+ # 2. Dispatch config parses
469
+ python3 -c "import json;json.load(open('config/eindri-dispatch.json'))"
470
+
471
+ # 3. Harness detection answers
472
+ bin/hamr-harness.sh
473
+ bin/hamr-harness.sh eindri
474
+
475
+ # 4. Help/usage renders (exit 0)
476
+ bin/einherjar-spawn.sh --help >/dev/null && echo "spawn help OK"
477
+ bin/erindi-brief.sh --help >/dev/null && echo "brief help OK"
478
+
479
+ # 5. Fail-closed on a fresh spawn without an explicit harness (dispatch active)
480
+ bin/einherjar-spawn.sh demo /tmp/not-a-repo --mode local-only; echo "exit=$?"
481
+
482
+ # 6. Worktree isolation for a real git repo
483
+ git -C <project-dir> worktree list | grep .yggdrasil/<id>
484
+ ```
485
+
486
+ ---
487
+
488
+ ## 12. Gotchas
489
+
490
+ - **Ymir itself is not a git repo.** `git -C $YMIR_ROOT rev-parse` fails; a spawn's
491
+ `<project-dir>` must be a real git working tree or Yggdrasil cannot create the worktree.
492
+ - **`config/eindri-dispatch.json` active ⇒ no implicit harness.** Omitting `--harness` is a
493
+ hard error, not a fallback.
494
+ - **Verified set is small.** `opencode pi pi-signed` only. `claude`/`codex`/`cursor` are
495
+ **detected** but not launch-verified; pass a raw `--harness` command to trial one.
496
+ - **Brief must exist before spawn.** Spawn refuses with the exact regeneration command in the
497
+ error.
498
+ - **Mode drift is refused.** If `Delivery contract: mode=` ≠ `--mode`, spawn exits 1.
499
+ - **tmux window collision.** `brokk:eindri-<id>` already existing aborts the spawn; tear it
500
+ down or relaunch.
501
+ - **`--relaunch` refuses a vanished worktree.** Recover or recreate it; do not delete the meta.
502
+ - **Docker UID/GID and `.git` mount are mandatory** for a sealed run; see §7.
503
+ - **`resolved` is never a state.** Vör explicitly maps it to `unknown`/non-state so a closed
504
+ decision cannot masquerade as current work.
505
+ - **`paused` ≠ `blocked`.** Paused = known external wait expected to clear; blocked = Brokk
506
+ must act.
507
+ - **Status is an event log, not state.** Always reconcile with `vor-crew-state.sh`, not `tail`.
508
+
509
+ ## 13. Maintaining this
510
+
511
+ - When a spawn flag or the printed `spawned` line changes, update §2 and the compiled example
512
+ in the plan (`docs/plans/29-brokk-distro-runtime.md`).
513
+ - When a delivery mode is added, update the brief (`bin/erindi-brief.sh`), the dispatch rules,
514
+ and the tables in §3.4 in the same change.
515
+ - When the Utgard `docker run` line changes (`bin/einherjar-spawn.sh:451-475`), re-run §11 and
516
+ update §7 verbatim.
517
+ - Keep `VERIFIED_HARNESSES`, the dispatch profiles, and `bin/hamr-harness.sh`'s adapter set in
518
+ agreement; a mismatch is a compliance failure (see `runtime-compliance.md`).
@@ -0,0 +1,136 @@
1
+ # Galdr Assets — Build Tools & Worker References
2
+
3
+ This directory contains the assets that Galdr needs to understand about different build tools and their requirements, including worker profiles and tool-specific configurations.
4
+
5
+ ## The Einherjar — Agent Fleet
6
+
7
+ Eight specialists, one primary. Each is named for the figure whose role matches its work.
8
+
9
+ | Agent | Norse | Role | Domain | File |
10
+ |-------|-------|------|--------|------|
11
+ | **Brokk** | Brokk | Primary agent — forge-master, dispatcher, supervisor | All | `.agents/agents/brokk.md` |
12
+ | **Sindri** | Sindri (smith) | Code synthesis, refactoring, tests, CLI tools | Development | `.agents/agents/sindri-developer.md` |
13
+ | **Bragi** | Bragi (skald) | Marketing, content, SEO, social copy | Marketing | `.agents/agents/bragi-marketer.md` |
14
+ | **Huginn** | Huginn (sage) | Research, web search, analysis, knowledge discovery | Research | `.agents/agents/huginn-researcher.md` |
15
+ | **Mimir** | Mimir | Planner — memory, recall, architecture sequencing | Planning | `.agents/agents/mimir-planner.md` |
16
+ | **Kvasir** | Kvasir (wisest) | Scout — reconnaissance, investigation | Scout | `.agents/agents/kvasir-scout.md` |
17
+ | **Forseti** | Forseti (reconciler) | Reviewer — QA, acceptance, compliance | Review | `.agents/agents/forseti-reviewer.md` |
18
+ | **Snotra** | Snotra (modest) | Documenter — docs, changelogs, runbooks | Docs | `.agents/agents/snotra-documenter.md` |
19
+
20
+ **Rule:** Every agent carries its rune of introduction (Agent Card). Every agent
21
+ reports to Brokk. Brokk reports to the Allfather.
22
+
23
+ ## Legacy Sub-Agent Profiles (`.agents/subagents/*.md` — superseded)
24
+
25
+ These profiles were superseded by the Einherjar fleet above. They remain for
26
+ historical reference only.
27
+
28
+ Each worker operates inside Utgard containers on Yggdrasil worktrees with specific specializations:
29
+
30
+ ### developer (`.agents/subagents/developer.md`)
31
+ - **Role**: Code synthesis, refactoring, test writing, CLI tools, package management
32
+ - **Capabilities**: code_synthesis, refactoring, test_writing, cli_tools, package_management
33
+ - **Tools**: yggdrasil, herder, hermes_runner, vector_db, supabase
34
+ - **Workspace patterns**: development/, .agents/tools/, .agents/skills/
35
+ - **Security**: runs_in_utgard: true, utgard_network: none, utgard_resource_caps: true, yggdrasil_worktree: true, sandboxed: true
36
+
37
+ ### marketer (`.agents/subagents/marketer.md`)
38
+ - **Role**: Content creation, SEO, social copy, marketing campaigns
39
+ - **Capabilities**: content_creation, seo_optimization, social_copy, campaign_planning, market_research
40
+ - **Tools**: vector_db, supabase, hermes_runner, herder, yggdrasil
41
+ - **Workspace patterns**: marketing/, .agents/assets/templates/, .agents/skills/
42
+ - **Security**: runs_in_utgard: true, utgard_network: none, utgard_resource_caps: true, yggdrasil_worktree: true, sandboxed: true
43
+
44
+ ### researcher (`.agents/subagents/researcher.md`)
45
+ - **Role**: RAG, web search, analysis, knowledge discovery
46
+ - **Capabilities**: rag_search, web_search, analysis, summarization, entity_extraction
47
+ - **Tools**: vector_db, hermes_runner, herder, yggdrasil, supabase
48
+ - **Workspace patterns**: development/, .agents/memory/, .agents/assets/templates/
49
+ - **Security**: runs_in_utgard: true, utgard_network: none, utgard_resource_caps: true, yggdrasil_worktree: true, sandboxed: true
50
+
51
+ ## Build Tool Categories
52
+
53
+ Galdr needs to know about these build tool categories and their asset requirements:
54
+
55
+ ### 1. Python Smíðja Tools
56
+ - **Location**: `templates/smidja/` (deterministic Python scripts)
57
+ - **Key files**: `smidja_*.py` orchestrator scripts, `smidja_modules/*.py`
58
+ - **Data contracts**: Pydantic v2 data types in `smidja_modules/data_types.py`
59
+ - **Agent runtime**: `agent_pi.py` (Pi), `agent_opencode.py` (opencode)
60
+ - **Tracing**: SQLite WAL + JSONL events in `smidja_modules/tracer.py`
61
+ - **Quality gates**: Deterministic subprocess runs in `smidja_modules/quality.py`
62
+ - **Permissions**: Path-based write enforcement in `smidja_modules/permissions.py`
63
+ - **Context handoff**: File-based `context_handoff/` dir in `smidja_modules/agents.py`
64
+ - **Sub-agents**: Task-tool lane materialization (G2) in `smidja_modules/agents.py`
65
+
66
+ ### 2. Command-Smíðja (Skill-based)
67
+ - **Location**: Reuse `smidja` validated OSS project
68
+ - **Features**: Smíðja: deterministic Python owns graph, agents bounded nodes, typed JSON envelopes, SQLite telemetry, Vue visualizer (`apps/visualizer/`, served at port 8437)
69
+ - **Assets**: Smíðja scripts, roster/config, visualizer
70
+
71
+ ### 3. Brokk Crew Orchestration
72
+ - **Location**: External agent distro by kunchenguid
73
+ - **Features**: One Allfather talks to first mate running autonomous coding agents in tmux panes on git worktrees
74
+ - **Project modes**: no-mistakes/direct-PR/local-only/+yolo
75
+ - **Assets**: Crew orchestration, worktree isolation (yggdrasil/orca), restart-proof disk state, supervision watcher, X/Discord Relay, eindri-homes
76
+
77
+ ### 4. Galdr Skill Assets
78
+ - **Location**: `.agents/skills/galdr-ymirsystem/assets/`
79
+ - **Purpose**: Reference data for skill synthesis and compliance checking
80
+ - **Contents**: Tool schemas, template patterns, Eindri profile references
81
+
82
+ ## Tool-Specific Asset Requirements
83
+
84
+ ### TOON Output Format
85
+ - All Galdr-generated CLI tools must output in TOON (Token-Oriented Object Notation) format
86
+ - ~40% token savings over equivalent JSON
87
+ - Convert to TOON at the output boundary — keep internal logic on JSON
88
+ - Minimal default schemas: 3-4 fields per list item, not 10+
89
+
90
+ ### Norse Naming Convention
91
+ - All new skills must follow Norse mythology naming (aett pattern)
92
+ - galdr aett: incantation / chant standards
93
+ - Examples: galdr, tyr-check, smidja-factory, valhalla, skrymir, bifrost, heimdall
94
+
95
+ ### Utgard Sandbox Requirements
96
+ - All agent-facing tools must specify: runs_in_utgard: true
97
+ - Network: utgard_network: none (no network access)
98
+ - Resource caps: utgard_resource_caps: true
99
+ - Worktree integration: yggdrasil_worktree: true
100
+ - Sandboxed execution: sandboxed: true
101
+
102
+ ### Session Integration
103
+ - Primary: session hook (installs/plugin after user intent is clear)
104
+ - Secondary: installable Agent Skill (loads on demand, no per-session token cost)
105
+ - Recommended: hook first (ambient context plus live state), skill second (lower overhead, broader support)
106
+
107
+ ## Compliance Gates
108
+
109
+ Before a new Galdr skill is considered "forged", it must pass:
110
+
111
+ 1. **TOON output test** — all stdout output uses TOON format, measured ~40% smaller than equivalent JSON across 3 sample outputs
112
+ 2. **Principle compliance** — all 10 design principles assessed via tyr-check
113
+ 3. **Norse name validity** — skill name follows the aett pattern, not a random label
114
+ 4. **Frame integration** — SKILL.md placed in `.agents/skills/<name>/`, referenced in `.agents/skills/README.md`
115
+ 5. **Mimirsbrunn observation** — the skill's creation is observed into the well (`POST /observe`) before it is deemed "live"
116
+ 6. **Eindri worker compatibility** — skill declares workspace patterns compatible with Eindri sub-agent profiles
117
+ 7. **Utgard sandbox validation** — skill specifies: runs_in_utgard: true, utgard_network: none, utgard_resource_caps: true, yggdrasil_worktree: true, sandboxed: true
118
+
119
+ ## Asset Reference Files
120
+
121
+ | File | Purpose | Reference |
122
+ |------|---------|-----------|
123
+ | `eindri-profiles.md` | Eindri sub-agent role profiles | `.agents/subagents/` |
124
+ | `build-tool-categories.md` | Build tool category definitions | This file |
125
+ | `tool-schemas/` | JSON/TON schemas for different tool types | `tool-schemas/` directory |
126
+ | `workspace-patterns.md` | Workspace pattern conventions | `workspace-patterns.md` |
127
+ | `compliance-requirements.md` | Compliance gate requirements | `compliance-requirements.md` |
128
+
129
+ ## Usage
130
+
131
+ Galdr references these assets when:
132
+ - Synthesizing new skills via `brokk-craft` (planned) against `galdr`'s build-method
133
+ - Validating existing skills via `tyr-check`
134
+ - Ensuring new CLI tools adhere to Ymir ergonomic standards
135
+ - Maintaining Norse naming convention and aett pattern consistency
136
+ - Verifying Utgard sandbox compliance for all agent-facing tools