@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,69 @@
1
+ # Install & plan the host — what this machine will become, and where its things live
2
+
3
+ > **Purpose:** the host-side door to the install. Galdr's
4
+ > `assets/installation.md` is the map of every step; this page is what the
5
+ > *operator of the machine* needs: read the plan before anything changes, and know
6
+ > which root holds what.
7
+
8
+ ## Read the plan before the install touches anything
9
+
10
+ The install no longer asks with a recited paragraph — it prints a plan **probed on
11
+ this host**, one row per step, each with its state and the reason for it.
12
+
13
+ ```bash
14
+ bin/ymir-plan.sh # the plan (TOON)
15
+ bin/ymir-plan.sh --blocked # only what cannot proceed, and why
16
+ bin/ymir-plan.sh --json # for automation
17
+ bin/ymir-install.sh --plan # the same, through the installer's door
18
+ ```
19
+
20
+ ```
21
+ plan_states[5]{state,means}:
22
+ "DO","a change will be made"
23
+ "SKIP","already satisfied — nothing to do"
24
+ "INFO","a fact about this host, discovered"
25
+ "BLOCKED","cannot run — the reason names what is missing"
26
+ "CONSENT","needs the operator's word"
27
+ ```
28
+
29
+ A `BLOCKED` row is a fact, not a failure: the plan exits 0 and prints it. The
30
+ phase-1 `purity` row is the one to read first on a packaged install — it names
31
+ anything of the operator's left in the code tree.
32
+
33
+ ## The home is the operator's to choose
34
+
35
+ A real interactive install asks once, and records the answer as machine state:
36
+
37
+ ```bash
38
+ ~/.config/ymir/home # the home chosen at installation (a path)
39
+ ```
40
+
41
+ Resolution order, always through `bin/hoard-lib.sh`:
42
+ `$YMIR_HOME` → the recorded choice → `$HOME/Documents/Ymir` (the one documented
43
+ default). `--check` never writes. `--yes` takes what is recorded, else the default.
44
+
45
+ To move an existing home to a new place, re-run the install with the new value:
46
+
47
+ ```bash
48
+ YMIR_HOME=/path/to/new-home bin/ymir-install.sh
49
+ ```
50
+
51
+ ## Which root holds what
52
+
53
+ ```
54
+ roots[6]{root,resolver,holds}:
55
+ "home","ymir_home_root","everything the operator owns"
56
+ "hoard","hoard_root","docs · secrets · identity · tenants · memory"
57
+ "records","hoard_data_dir","operator · fleet · machines · the host profile"
58
+ "state","hoard_state_dir","pids · logs · locks · caches (ephemeral)"
59
+ "settings","hoard_settings_dir","agents.yaml · cron.yaml · tailscale-sync · the wedge channel"
60
+ "credentials","hoard_local_env","$YMIR_HOME/.env.local — auth, OAuth keys, tokens"
61
+ ```
62
+
63
+ **The law:** the package is the **code that runs the programs**. Everything the
64
+ operator owns lives in the home. A packaged install replaces its tree on upgrade —
65
+ so anything of theirs kept in the tree is kept at its peril, which is exactly what
66
+ the plan's `purity` row exists to catch.
67
+
68
+ **Rule for a new host feature:** resolve every path through `bin/hoard-lib.sh`;
69
+ never name `$ROOT/data`, `$ROOT/state`, `$ROOT/config` or `$ROOT/.env.local`.
@@ -0,0 +1,297 @@
1
+ ---
2
+ name: ymir-omarchy
3
+ description: >-
4
+ Omarchy-native operation for Ymir. REQUIRED whenever the task touches the host
5
+ desktop: Hyprland, the Omarchy shell/bar, themes, monitors, window rules,
6
+ keybindings, idle/lock, night light, screenshots, reminders, or any file under
7
+ ~/.config/hypr/ or ~/.config/omarchy/. Also use when placing the Ymir desktop
8
+ apps (Hlidskjalf / Smíðja) on a screen, when a native crash involves the GPU or
9
+ Wayland, and to help the Allfather set up or tune the Omarchy machine Ymir runs
10
+ on. Load this before editing any ~/.config/ file on an Omarchy host.
11
+ allowed-tools: read,write,bash,glob,grep
12
+ ---
13
+
14
+ # Ymir on Omarchy
15
+
16
+ Ymir runs *on* Omarchy — an opinionated Arch Linux + Hyprland distribution. On an
17
+ Omarchy host, the desktop is not a detail: it decides where our windows land, how
18
+ they render, and whether the GPU process survives. This skill is how Ymir is a
19
+ good citizen of that machine.
20
+
21
+ **Router:** `.agents/skills/galdr-ymirsystem/SKILL.md`. **Upstream skill (authoritative for
22
+ Omarchy itself):** `/usr/share/omarchy/default/agents/skills/omarchy/SKILL.md` and
23
+ `~/.pi/agent/skills/omarchy/`. Read that one for pure Omarchy work; this one adds
24
+ the Ymir integration and the hard-won facts below.
25
+
26
+ ## The two laws
27
+
28
+ ```
29
+ omarchy_laws[2]{id,law}:
30
+ "1","Never edit anything under /usr/share/omarchy/ — it is package-owned and overwritten on update. Reading it is safe and encouraged. Edit ~/.config/ instead."
31
+ "2","Hyprland owns window placement, not the app. Let the compositor place windows; the app must not fight it."
32
+ ```
33
+
34
+ ## Detecting the host
35
+
36
+ ```bash
37
+ # Are we on Omarchy at all? (never assume)
38
+ [ -d /usr/share/omarchy ] && echo "Omarchy host"
39
+ omarchy version 2>/dev/null || true
40
+ hyprctl monitors -j 2>/dev/null | head -c 200
41
+ ```
42
+
43
+ Ymir must work on a non-Omarchy host too. Every Omarchy-specific behaviour is
44
+ gated on `[ -d /usr/share/omarchy ]`; nothing here may break a plain Arch box.
45
+
46
+ ## Monitors, scale, and the coordinate trap
47
+
48
+ **The fact that costs the most time:** on Omarchy the panel may run at a
49
+ fractional scale (e.g. a 1920×1200 panel at `scale 1.5` is a **1280×800 logical**
50
+ desktop). An app that computes window geometry from *physical* pixels will be
51
+ wrong by the scale factor and will fill the whole screen.
52
+
53
+ ```bash
54
+ hyprctl monitors -j # name, id, width, height, scale, focused, x, y
55
+ ```
56
+
57
+ - `hyprctl` reports **physical** width/height **and** `scale`.
58
+ - Electron's `screen` API reports **logical** (already-scaled) bounds.
59
+ - Logical = physical / scale. Never mix the two.
60
+
61
+ ### Placing the Ymir desktop apps
62
+
63
+ Hlidskjalf and Smíðja are dashboards the Allfather keeps *beside* his work, so
64
+ they belong on a **non-primary** display when one is attached, and on the primary
65
+ when it is not (the laptop case). Two rules:
66
+
67
+ 1. **Prefer a secondary display**, never the focused/primary one, when
68
+ `screen.getAllDisplays().length > 1`.
69
+ 2. **Clamp to the display's work area** in *logical* units, and center there. A
70
+ window wider than the logical desktop must be shrunk, not pushed off-screen.
71
+
72
+ Identity of a display is its `id`; `screen.getPrimaryDisplay()` is the one to
73
+ avoid. If only one display exists, do nothing clever — center it and move on.
74
+
75
+ ## The GPU / Wayland crash (amdgpu)
76
+
77
+ Observed on this class of machine (AMD Cezanne iGPU with a **512 MB** VRAM
78
+ carve-out, plus a discrete NVIDIA card):
79
+
80
+ ```
81
+ kernel: amdgpu 0000:08:00.0: [drm] *ERROR* Not enough memory for command submission!
82
+ electron[PID]: segfault at 0 error 4 in electron
83
+ ```
84
+
85
+ Electron's `--type=gpu-process` dies with `SIGSEGV` when the iGPU cannot satisfy a
86
+ command submission. It is **not** an Electron bug in our code and **not** an OOM
87
+ (it happens with plenty of system RAM). Diagnose it properly:
88
+
89
+ ```bash
90
+ coredumpctl list | grep electron # a pattern, or a one-off?
91
+ journalctl --since "<t-1min>" --until "<t+1min>" | grep -i 'amdgpu\|drm\|segfault'
92
+ cat /sys/class/drm/card*/device/mem_info_vram_used # VRAM actually in use
93
+ ```
94
+
95
+ **Mitigation for dashboards** (they are not 3D apps):
96
+
97
+ ```bash
98
+ YMIR_DESKTOP_DISABLE_GPU=1 scripts/electron.sh start --both # software rendering
99
+ ```
100
+
101
+ `scripts/electron.sh` reads that variable and adds `--disable-gpu
102
+ --disable-gpu-compositing`. Use it on a small-VRAM iGPU; leave GPU on where the
103
+ discrete card drives the display.
104
+
105
+ ## Starting the Ymir apps
106
+
107
+ ```bash
108
+ scripts/electron.sh start --both # Hlidskjalf + Smíðja, separate apps
109
+ scripts/electron.sh status # is each one REALLY running?
110
+ scripts/electron.sh stop
111
+ ```
112
+
113
+ **Do not track an Electron app by the pid returned from `.bin/electron`** — that
114
+ is a node shim which *spawns* the real binary, so the pid is wrong and a second
115
+ launch will stack on the first. Track it by its own command line (the per-view
116
+ `--user-data-dir` is the stable identity), which is what `electron.sh` does.
117
+
118
+ ## Safe customisation (the short version)
119
+
120
+ | Want | Do |
121
+ |---|---|
122
+ | Bar / widgets / idle | edit `~/.config/omarchy/shell.json`, then `omarchy restart shell` |
123
+ | Keybindings, gaps, monitors | edit `~/.config/hypr/*.lua`, then `hyprctl reload` + `hyprctl configerrors` |
124
+ | Theme | `omarchy theme set <name>`; customise in `~/.config/omarchy/themes/<name>/` |
125
+ | Reminder | `omarchy reminder <minutes> "text"` |
126
+ | Screenshot / record | `omarchy capture screenshot` · `omarchy screenrecord --fullscreen` |
127
+ | Night light | `omarchy toggle nightlight` |
128
+ | Lock after idle | `idle.lock` in `~/.config/omarchy/shell.json` |
129
+ | Install a package | `omarchy pkg add <pkg>` (AUR: `omarchy pkg aur add <pkg>`) |
130
+ | Debug | `omarchy debug --no-sudo --print` (always these flags) |
131
+
132
+ Always back up a config before editing it: `cp f f.bak.$(date +%s)`.
133
+
134
+ ## Discovery
135
+
136
+ ```bash
137
+ omarchy commands # every documented command
138
+ omarchy <group> --help # omarchy theme|refresh|restart|toggle|bar|...
139
+ omarchy commands --json # machine-readable
140
+ cat $(which omarchy-theme-set) # read a command's source (safe)
141
+ ```
142
+
143
+ ## Being useful to an Omarchy user
144
+
145
+ When the Allfather wants his machine set up or tuned, Ymir should *help* rather
146
+ than merely not-break: report the monitor layout and scale, propose a sane window
147
+ placement for the dashboards, offer the GPU mitigation when the iGPU is small,
148
+ and use `omarchy` commands rather than raw edits wherever one exists. Offer a
149
+ backup before every config change, and never run `omarchy refresh <x>` (which
150
+ resets config) without explicit confirmation.
151
+
152
+ ## The editor (Pi's `/edit`)
153
+
154
+ Pi ships a user-facing **Open Editor** extension (`.pi/extensions/open-editor.ts`) that
155
+ opens files from the working directory in the Allfather's own editor. It is
156
+ **strictly his** — no LLM tool is registered, because agents already have `read`
157
+ and `edit`. Know it, name it when he would reach for it, and never try to drive it
158
+ yourself.
159
+
160
+ ```
161
+ editor_surface[2]{key,what}:
162
+ "/edit [path]","slash command with tab-completion over cwd files; no path opens the directory itself"
163
+ "ctrl+shift+e","file picker over cwd"
164
+ ```
165
+
166
+ **How the editor resolves:** `$VISUAL` → `$EDITOR` → **the first editor that
167
+ actually exists** on the host, tried in this order: `code cursor zed subl nvim vim
168
+ hx helix nano micro emacs vi`. A **terminal** editor (nvim, vim, helix, nano,
169
+ emacs) blocks Pi while open — the TUI suspends and resumes on exit. A **GUI**
170
+ editor (code, cursor, zed, subl) launches detached, so Pi stays interactive.
171
+
172
+ **Why the existence check matters off Omarchy:** the old fallback was a bare `vi`,
173
+ and `vi` is **absent on this very machine** — as it is on many minimal hosts. A
174
+ configured editor that is not installed no longer poisons the chain: the extension
175
+ probes `$PATH` and falls through to one that is real. So `/edit` works on a plain
176
+ Arch box, a Debian box, or anything else where Omarchy's launcher does not exist.
177
+
178
+ ### Choosing the editor (Omarchy forces its own)
179
+
180
+ Omarchy **hard-sets** `EDITOR` twice — `${EDITOR:-omarchy-launch-editor --inline}`
181
+ in `default/bash/envs`, and a forced value in `default/uwsm/default`. A user
182
+ override therefore goes in the uwsm user dir, which is sourced **after** the
183
+ defaults:
184
+
185
+ ```
186
+ ~/.config/uwsm/env.d/10-ymir-editor:
187
+ export EDITOR="code" # a GUI editor, so no --wait: it launches detached
188
+ export VISUAL="code"
189
+ ```
190
+
191
+ (`--wait` is wrong for a GUI editor — VS Code hands the file to the running
192
+ instance and exits, so waiting holds nothing.) Changes need a session restart.
193
+
194
+ ### The editor gets its own desktop
195
+
196
+ The editor must not open on the desktop the Allfather is reading. Hyprland applies
197
+ window rules **at map time**, so the window never appears there at all:
198
+
199
+ ```
200
+ bin/editor-place.sh plan # which desktop it would take
201
+ bin/editor-place.sh apply # write the rule + hyprctl reload
202
+ ```
203
+
204
+ It writes into the SAME `~/.config/hypr/ymir-desktops.lua` the apps use (so one
205
+ file owns every Ymir window placement) and re-derives the app rules rather than
206
+ clobbering them:
207
+
208
+ ```lua
209
+ o.window({ class = "^code$" }, { workspace = "7", no_focus = true })
210
+ ```
211
+
212
+ **`no_focus = true` is the load-bearing half.** Without it the window is placed on
213
+ the right desktop but **the focus follows it** — the Allfather is dragged off his
214
+ own desk. Omarchy's own `default/hypr/windows.lua` uses the same idiom. Always
215
+ verify with `hyprctl configerrors` (must be empty) after a reload.
216
+
217
+ **The dispatch road does NOT work here.** This Hyprland (0.56) replaced the classic
218
+ dispatch interface with a Lua API: `hyprctl dispatch movetoworkspacesilent
219
+ 5,class:...` fails outright, and `keyword` reports "can't work with non-legacy
220
+ parsers — use eval". The map-time rule file is the road that holds.
221
+
222
+ When the Allfather wants to *look at* a file rather than have it read aloud, the
223
+ answer is `/edit <path>` — say so plainly instead of pasting its contents.
224
+
225
+ ## Ymir speaks on the desktop
226
+
227
+ Ymir works for hours unwatched, so when something is worth knowing it says so
228
+ where the Allfather already is. `bin/ymir-say.sh` is the **single owner** of that
229
+ manner — anything with news calls it, so the voice cannot drift.
230
+
231
+ ```
232
+ bin/ymir-say.sh "<headline>" ["<body>"] # a plain note
233
+ bin/ymir-say.sh --mark-done "<what>" ["<detail>"] # a job finished (low urgency)
234
+ bin/ymir-say.sh --mark-alarm "<what>" ["<detail>"] # needs his word (critical)
235
+ bin/ymir-say.sh --mark-fail "<what>" ["<detail>"] # something broke (critical)
236
+ bin/ymir-say.sh status # what has been said
237
+ ```
238
+
239
+ It speaks through Omarchy's own notifier (`omarchy-notification-send`) when
240
+ present, else `notify-send`, and always records the line in
241
+ `state/ymir-said.log` — so a popup missed is a line still found. On a host with
242
+ neither, the line is recorded and it says "record only"; a silent host is never a
243
+ lost message.
244
+
245
+ **Who speaks through it:** the wedge alarm (`bin/wedge-notify.sh`, when an
246
+ escalation cannot reach a wedged pane) and the crash watcher (`bin/crash-sense.sh`, a
247
+ new `coredumpctl` entry). Both route to `ymir-say.sh` so urgency, glyph, and app
248
+ identity stay one voice.
249
+
250
+ ## Maintaining this
251
+
252
+ - **Owner:** Brokk. **Router:** `.agents/skills/galdr-ymirsystem/SKILL.md`.
253
+ - Upstream Omarchy skill is authoritative for Omarchy itself; keep only Ymir's
254
+ integration facts and this machine's hard-won lessons here.
255
+ - When the desktop behaviour changes, update this asset and
256
+ `assets/hlidskjalf-ui.md` together.
257
+
258
+ ## Platform layers (Rule 05)
259
+
260
+ Ymir is **Omarchy-first**, not Omarchy-only. The core is portable; Omarchy is the
261
+ first-class installation layer on top of it. Anything below that assumes Hyprland
262
+ or `/usr/share/omarchy` is this layer's business and is gated on the host — on a
263
+ Mac or on WSL those steps report a clean skip and the core still runs.
264
+
265
+ When a core feature changes, this layer is updated in the same change
266
+ (`RULES/05-platforms.md`). Details: `galdr-ymirsystem/assets/installation.md`.
267
+
268
+ ### Electron GPU-process crashes on the shared-memory iGPU
269
+
270
+ Both dashboards can look healthy while `coredumpctl` fills with SIGSEGV cores
271
+ from `electron --type=gpu-process` and the kernel logs `amdgpu … Not enough
272
+ memory for command submission`. Only the GPU process dies, so the failure is
273
+ easy to miss.
274
+
275
+ The iGPU backs its graphics memory with system RAM (GTT), and a local model
276
+ served on that same iGPU holds several GiB of it — after which the driver fails
277
+ the desktop's command submissions. `scripts/electron.sh` now detects a small VRAM
278
+ carve-out (`igpu_vram_small()`, threshold `YMIR_IGPU_VRAM_SMALL_MIB`, default
279
+ 2048) and runs the dashboards on software rendering; `YMIR_DESKTOP_DISABLE_GPU`
280
+ forces either path. Detail and the evidence: `galdr-ymirsystem/assets/hlidskjalf-ui.md`.
281
+
282
+ ### Speed-starts for the Ymir apps
283
+
284
+ The launcher entries alone are not a speed start: reaching Hlidskjalf meant
285
+ opening the app menu. Two keys now raise them, generated by
286
+ `bin/desktop-place.sh apply` into `~/.config/hypr/ymir-launchers.lua` and
287
+ required from `hyprland.lua` like the placement rules:
288
+
289
+ | Key | App |
290
+ |---|---|
291
+ | **SUPER + Y** | Ymir Hlidskjalf |
292
+ | **SUPER + M** | Ymir Smiðja |
293
+
294
+ They live in their own file on purpose: `editor-place.sh` regenerates
295
+ `ymir-desktops.lua` and preserves only window rules, so binds placed there would
296
+ be dropped. Both keys were verified free before use (`omarchy menu keybindings
297
+ --print`), and the behaviour is a plain Omarchy `o.bind(label, command)`.
@@ -0,0 +1,15 @@
1
+ # Operator runbooks
2
+
3
+ Task-oriented guides under `docs/runbooks/`, written for the operator:
4
+
5
+ ```
6
+ runbooks[5]{path,load_when}:
7
+ "docs/runbooks/models.md","choose models per agent; local vs hosted; per-machine overlays"
8
+ "docs/runbooks/agents.md","Eindri profiles: home, add, run, dispatch"
9
+ "docs/runbooks/tailscale-sync.md","sync pi data across your own machines over Tailscale"
10
+ "docs/runbooks/updates-and-migrations.md","update the runtime; heal old homes (ymir-migrate)"
11
+ "docs/runbooks/secrets-and-hoard.md","Hodd: secrets by path, secret-guard, rotation + scrub"
12
+ ```
13
+
14
+ Index: `docs/runbooks/README.md`. When a host task has an operator-facing
15
+ procedure, add a runbook there and a row here.
@@ -0,0 +1,220 @@
1
+ ---
2
+ name: ymir-thjazi
3
+ description: >-
4
+ Þjazi — the terminal backend that hosts Ymir's agent panes. Use when spawning,
5
+ supervising, or debugging Eindri workers and presentation spaces, when choosing
6
+ or verifying the herdr/tmux backend, when herdr is missing or too old to install
7
+ or upgrade it, or when presentation spaces (herdr 0.8.0+) are involved. Load
8
+ before changing backend selection, pane layout, or spawn behaviour.
9
+ allowed-tools: read,write,bash,glob,grep
10
+ ---
11
+
12
+ # Þjazi — the terminal backend
13
+
14
+ Þjazi is the giant who carries the gods' errands across the mountains; the backend
15
+ that carries Ymir's agents across terminal panes. In the code it is **herdr** (and
16
+ its verified reference sibling **tmux**). This skill is how Ymir is a
17
+ herdr-first system without breaking on a tmux-only host.
18
+
19
+ **Router:** `.agents/skills/galdr-ymirsystem/SKILL.md`.
20
+
21
+ ## Raising an Eindri (the two roads)
22
+
23
+ An **Eindri** is a delegated hand (AGENTS.md; `docs/lore.md` §II — Brokk works the
24
+ bellows, Eitri/Eindri works the craft). Two roads seat one, and each fits its own
25
+ country. `bin/herdr-run.sh` is the runner; `bin/eindri-role.sh` names the smith.
26
+
27
+ ```
28
+ herdr_roads[2]{road,shape,use_when}:
29
+ "tab","one tab in this home's workspace (durable, the default)","the work outlasts the moment — a task with an artifact"
30
+ "space","a disposable workspace holding exactly this one errand, gone when it ends","the errand should leave no trace in the workspace you are living in"
31
+ ```
32
+
33
+ **A tab is a tab, not a pane split.** Brokk's grain — and now ours — is that a
34
+ worker takes its **own tab in the home's workspace**, never a slice of yours. Your
35
+ pane keeps its width; the smith sits beside your tabs, reachable with a tab switch.
36
+
37
+ ```
38
+ bin/herdr-run.sh available # reach herdr? which session/workspace?
39
+ bin/herdr-run.sh worth-a-smith "<errand>" # THE FIRST LAW (see below)
40
+ bin/herdr-run.sh eindri -- "<task>" # the RIGHT smith, seated in a TAB
41
+ bin/herdr-run.sh eindri --space -- "<task>" # ...or in a disposable WORKSPACE
42
+ bin/herdr-run.sh eindri sindri -- "<task>" # name the smith explicitly
43
+ bin/herdr-run.sh eindri --role huginn -- "<task>"
44
+ bin/herdr-run.sh run <name> -- <command...> # a command in a tab (not an agent)
45
+ bin/herdr-run.sh agent-status # who stands, and in what state
46
+ bin/herdr-run.sh status # what seats we recorded
47
+ bin/herdr-run.sh close-all # clear the tabs/workspaces we made
48
+ ```
49
+
50
+ **Quoting into a pane.** A pane runs its command through a *shell*, so `run`
51
+ quotes every argument on the way in (`printf '%q'`). Without that, an argument
52
+ containing spaces reached the pane as separate words and the command died on its
53
+ own second word — `--brief "the whole task"` arrived as `--brief the whole task`
54
+ and the worker answered `error: unknown arg: the`. Quote normally at the call
55
+ site; the bridge preserves it.
56
+
57
+ ### The first law — a short errand is done in hand
58
+
59
+ A smith costs a context, a seat, and the Allfather's attention. So an errand is
60
+ weighed before it is seated:
61
+
62
+ - **A question is answered in hand.** "What is the pid?" "Why did it fail?" —
63
+ answered directly, never seated.
64
+ - **A one-line check is done in hand.** Brevity is not a task.
65
+ - **A task earns a smith** — work with an artifact: build, fix, implement, port,
66
+ research, audit, plan, document, review.
67
+
68
+ `worth-a-smith` decides, and `eindri` refuses to seat a smith for a question or a
69
+ trifle. Ask it first when you are unsure.
70
+
71
+ ### The projection floor
72
+
73
+ A disposable workspace needs **herdr 0.8.0+** (protocol 19). Below that floor a
74
+ workspace-emptying close can steal the active workspace, so `--space` falls back
75
+ to a tab and says so, rather than risking your focus. `available` reports
76
+ `space_ok` for the running release.
77
+
78
+ ### The law of the runner
79
+
80
+ Inside herdr the work is shown in its own tab or workspace; outside herdr it runs
81
+ **inline — the same result, no seats** — and if a seat cannot be raised the
82
+ command runs in place, so no work is ever lost to the theatre.
83
+ `YMIR_HERDR_PANES=0` forces inline anywhere.
84
+
85
+ ### Session routing (a trap worth naming)
86
+
87
+ `HERDR_SESSION` alone is **not** a reliable router: with another herdr server
88
+ bound on the machine, a command silently reaches the wrong one. The runner always
89
+ passes the trailing `--session <name>` flag, which routes correctly. (Brokk's
90
+ `docs/herdr-backend.md` owns the evidence.)
91
+
92
+ ## The right smith for the right task
93
+
94
+ An Eindri is a delegated hand (AGENTS.md; `docs/lore.md` §II: Brokk works the
95
+ bellows, Eitri/Eindri works the craft). The wrong smith for the metal produces
96
+ bad work, so the role is chosen deliberately:
97
+
98
+ ```
99
+ eindri_roles[8]{role,craft}:
100
+ "sindri","code — build, refactor, fix, test"
101
+ "bragi","content — marketing, SEO, social"
102
+ "huginn","research — search, analyse, discover"
103
+ "kvasir","scout — recon a codebase before work"
104
+ "mimir","plan — design the approach"
105
+ "snotra","document — prose, guides, references"
106
+ "forseti","review — judge the work"
107
+ "galdr","runtime — the Ymir distro itself"
108
+ ```
109
+
110
+ ```
111
+ bin/eindri-role.sh list # the roster
112
+ bin/eindri-role.sh choose "<task text>" # the craft that fits
113
+ bin/eindri-role.sh for <role> # exact lookup
114
+ ```
115
+
116
+ A named role wins; otherwise the craft is read from the errand itself ("write a
117
+ blog post" → `bragi`; "fix the login bug" → `sindri`). Several may stand at once.
118
+
119
+ ## Ymir is herdr-first
120
+
121
+ At install, Ymir guarantees a terminal backend exists. The order is:
122
+
123
+ ```
124
+ backend_priority[3]{rank,backend,note}:
125
+ "1","herdr","Þjazi — preferred; carries protocol + presentation spaces"
126
+ "2","tmux","the verified reference backend; always acceptable"
127
+ "3","none","spawn is refused with a plain reason — never a silent fallback"
128
+ ```
129
+
130
+ Selection is by config/env, in this order:
131
+
132
+ ```bash
133
+ config/backend # repo-level choice, if present
134
+ BROKK_BACKEND # env override
135
+ HERDR_ENV=1 # set inside a herdr pane
136
+ # else: tmux when available
137
+ ```
138
+
139
+ ## Verify before you trust
140
+
141
+ ```bash
142
+ command -v herdr && herdr --version # e.g. herdr 0.8.2
143
+ echo "$BROKK_BACKEND" # explicit choice, if any
144
+ ```
145
+
146
+ **Protocol floors** — check the version, not just the presence:
147
+
148
+ | Capability | Minimum |
149
+ |---|---|
150
+ | Agent panes (spawn/supervise) | Þjazi protocol **14+** |
151
+ | Presentation spaces | herdr **0.8.0+** |
152
+
153
+ A present-but-too-old herdr is a **failure**, not a fallback: refuse the capability
154
+ with a plain reason rather than degrading silently.
155
+
156
+ ## Installing and upgrading
157
+
158
+ `bin/herdr-ensure.sh` (when present) is the single owner of provisioning; it
159
+ detects, installs when absent, and verifies the reported version. The pinned,
160
+ SHA-verified installer for the CI lane is `.agents/backend/fm-install-herdr.sh`
161
+ — it installs an **exact** version from official release assets, verifies SHA-256,
162
+ and refuses to finish unless the binary reports the pinned version and the
163
+ required protocol. Never install a floating "latest" for the pinned lane.
164
+
165
+ ```bash
166
+ # CI/pinned lane (exact version + protocol check) — signature: <destination-dir>
167
+ .agents/backend/fm-install-herdr.sh "$HOME/.local/bin"
168
+
169
+ # User-space, if the helper is present
170
+ bin/herdr-ensure.sh status
171
+ bin/herdr-ensure.sh ensure --install
172
+ ```
173
+
174
+ Opting out of presentation spaces (they are presentation-only, never correctness)
175
+ is done with `config/herdr-presentation-spaces` — see AGENTS.md.
176
+
177
+ ## What the backend actually does
178
+
179
+ - **Spawn** carries an Eindri into an isolated pane, on top of an isolated
180
+ Yggdrasil worktree, optionally inside Utgard. It prints one line:
181
+ `spawned <id> harness=<h> kind=<ship|scout> [mode=<m> yolo=<y>] backend=<b> target=<t> worktree=<wt> isolation=<on|off>`
182
+ - **Supervision** keeps one pane per worker and observes it; the Pi/OpenCode
183
+ extensions own continuity — never background the watcher arm by hand.
184
+ - **Presentation spaces** (herdr 0.8.0+) give a worker a shareable view; they are
185
+ presentation, not a control channel.
186
+
187
+ ## Debugging
188
+
189
+ ```bash
190
+ scripts/electron.sh status # if the app surface is the question
191
+ bin/backend/* or bin/einherjar-spawn.sh --help # spawn contract
192
+ # one pane, one worker: a second spawn for the same id must be refused
193
+ ```
194
+
195
+ If workers vanish, compare the spawn line's `backend=` against the intended
196
+ backend selection above — a tmux fallback on a herdr-first host is a
197
+ misconfiguration, not a mystery.
198
+
199
+ ## Maintaining this
200
+
201
+ - **Owner:** Brokk. **Router:** `.agents/skills/galdr-ymirsystem/SKILL.md`.
202
+ - Source of truth for the backend spec: `assets/brokk-distro-runtime.md` (backends)
203
+ and `assets/pi-boot-guide.md` (pane supervision). Keep this skill's floors in
204
+ sync with those when the protocol advances.
205
+
206
+ ## The seat hierarchy (panes · tabs · spaces)
207
+
208
+ herdr is `Session > Workspace > Tab > Pane`. An Eindri can be seated at each rung,
209
+ chosen by `bin/eindri-start.sh` / `bin/herdr-run.sh eindri`:
210
+
211
+ | flag | rung | road | when |
212
+ |------|------|------|------|
213
+ | *(default)* | **pane** | `herdr pane split <pane> --direction right` | the companion — an Eindri beside the work; splits the current pane inside herdr, else this home's active pane |
214
+ | `--tab` | **tab** | `herdr tab create` | a separate view in this workspace |
215
+ | `--space` | **workspace** | `herdr workspace create` | a disposable space for one errand (needs the 0.8.0 floor) |
216
+
217
+ All three roads then `herdr agent start <name> --kind <kind> --pane <pane>` and
218
+ `herdr agent prompt`. Use panes by default so agents are visible side by side,
219
+ tabs to group parallel work, spaces to isolate an errand. `herdr-run.sh close-all`
220
+ tears the recorded seats down.
@@ -0,0 +1,64 @@
1
+ ---
2
+ name: ymir-update
3
+ description: >-
4
+ Self-update a running Brokk and its eindri-homes to the latest from origin.
5
+ Use when the Allfather invokes /updateBrokk (e.g. "/updateBrokk", "update Brokk", "pull the latest Brokk").
6
+ Fast-forwards this Brokk repo's default branch and every local or remote Eindri-home through its guarded update path (never forced, never disruptive), then re-reads AGENTS.md and nudges each updated Eindri-home to do the same, so the whole tree runs the latest bin/ and instructions.
7
+ user-invocable: true
8
+ metadata:
9
+ internal: true
10
+ ---
11
+
12
+ # updateBrokk
13
+
14
+ Self-update Brokk in place.
15
+ Brokk is its own repo, behind the same no-mistakes gate as any project, so new tracked material (`AGENTS.md`, `bin/`, `.agents/skills/`, and public `skills/`) reaches `main` and then sits there until each running Brokk pulls it.
16
+ Only `AGENTS.md`, `bin/`, and `.agents/skills/` are a running Brokk instruction surface; public `skills/` is installer-facing and is not loaded by Brokk.
17
+ This skill performs that pull for the running main Brokk and every Eindri-home, without disturbing any in-flight work.
18
+
19
+ The update is **fast-forward only** - the same sanctioned self-write as the fleet sync Brokk already runs.
20
+ For a remote route, it updates the configured Brokk code root on that host from its own origin, then guardedly fast-forwards the persistent home to that code-root commit.
21
+ It never forces, never creates a merge commit, never stashes, and advances a target only on a clean fast-forward; anything dirty, diverged, offline, or on the wrong branch is skipped and reported.
22
+ A tracked-files fast-forward leaves the gitignored operational dirs (data/, state/, config/, projects/, .no-mistakes/) untouched, so a Eindri-home's in-flight work is never disrupted.
23
+ This touches only the Brokk repo and its own worktrees, never anything under `projects/`.
24
+
25
+ ## What it does
26
+
27
+ 1. **Run the updater:**
28
+ ```sh
29
+ bin/brokk-update.sh
30
+ ```
31
+ It fast-forwards this Brokk repo's default branch from origin, then updates every registered local or remote Eindri-home home through its placement-specific guarded path.
32
+ It prints one status line per target (`updated <old>..<new>` / `already current` / `skipped: <reason>`), followed by two action lines that tell you exactly what to do next:
33
+ - `reread-Brokk: yes|no`
34
+ - `nudge-eindri-homes: <id> ...|none`
35
+
36
+ 2. **Re-read AGENTS.md if your own instructions changed.**
37
+ When the updater printed `reread-Brokk: yes`, the tracked instruction surface (`AGENTS.md`, `bin/`, or `.agents/skills/`) just advanced under you.
38
+ **Read `AGENTS.md` now** (CLAUDE.md is a real `@AGENTS.md` pointer to it) to refresh your operating instructions before doing anything else, so you are acting on the new instructions rather than the stale ones you were started with.
39
+ When it printed `reread-Brokk: no`, nothing changed for you - skip the re-read.
40
+
41
+ 3. **Nudge each updated live Eindri-home.**
42
+ For every target listed on the `nudge-eindri-homes:` line (do nothing when it says `none`), send a one-line re-read nudge so that Eindri-home picks up its new instructions too:
43
+ ```sh
44
+ BROKK_HOME=<this-Brokk-home> bin/brokk-send.sh <id> 'Brokk was updated to the latest - please re-read your AGENTS.md to pick up the new instructions.'
45
+ ```
46
+ Include `BROKK_HOME=<this-Brokk-home>` unless `BROKK_HOME` is already set to the active Brokk home.
47
+ This is a gentle steer, not an interruption: the Eindri-home already got a safe tracked-files fast-forward, and the nudge never forces, tears down, or discards its work.
48
+ A Eindri-home that was skipped, already current, or has no live metadata is not on the list and needs no nudge.
49
+
50
+ 4. **Report to the Allfather in plain outcomes.**
51
+ Summarize what landed under `AGENTS.md` section 9 without Brokk's internal vocabulary: which parts of the fleet are now on the latest, and which were left as-is and why.
52
+ For example: "Allfather, Brokk and both Eindri-homes are now on the latest."
53
+ Surface any skipped target whose reason needs the Allfather's attention - for instance a home with its own un-landed changes (diverged) or local edits (dirty), which were left untouched on purpose.
54
+
55
+ ## Safety
56
+
57
+ - **Fast-forward only.**
58
+ A target that has diverged, is dirty, is offline, or is on a non-default branch is skipped and reported, never forced or stashed.
59
+ Nothing with unlanded work is ever discarded - this is prime directive #3.
60
+ - **Only the Brokk repo and its worktrees** are touched, never `projects/`.
61
+ It is the same sanctioned self-write as the fleet sync.
62
+ - **Eindri-homes are never disrupted.**
63
+ A local or remote Eindri-home gets a tracked-files fast-forward only when its own checkout is safe to advance, plus a gentle re-read nudge when it changed.
64
+ It is never torn down, interrupted, or forced.