@zerwiz/ymir 0.1.4 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (850) hide show
  1. package/.agents/README.md +291 -0
  2. package/.agents/agents/bragi-marketer.md +111 -0
  3. package/.agents/agents/brokk.md +352 -0
  4. package/.agents/agents/forseti-reviewer.md +93 -0
  5. package/.agents/agents/frigg-consent.md +77 -0
  6. package/.agents/agents/groa-update.md +77 -0
  7. package/.agents/agents/hnoss-designer.md +69 -0
  8. package/.agents/agents/huginn-researcher.md +99 -0
  9. package/.agents/agents/jord-projects.md +78 -0
  10. package/.agents/agents/kvasir-scout.md +91 -0
  11. package/.agents/agents/mimir-planner.md +92 -0
  12. package/.agents/agents/muninn-stow.md +77 -0
  13. package/.agents/agents/saga-bearings.md +78 -0
  14. package/.agents/agents/sindri-developer.md +114 -0
  15. package/.agents/agents/snotra-documenter.md +105 -0
  16. package/.agents/agents/syn-recovery.md +78 -0
  17. package/.agents/agents/tyr-check.md +78 -0
  18. package/.agents/agents/urdh-hold.md +77 -0
  19. package/.agents/agents/volundr-smith.md +80 -0
  20. package/.agents/agents/vor-diagnostics.md +77 -0
  21. package/.agents/assets/agents/naming.md +50 -0
  22. package/.agents/assets/agents/registry.md +93 -0
  23. package/.agents/assets/agents/runtime.md +36 -0
  24. package/.agents/assets/agents/toon-tasks-cli.md +42 -0
  25. package/.agents/assets/templates/company_entity.template.md +37 -0
  26. package/.agents/backend/backends/cmux.sh +649 -0
  27. package/.agents/backend/backends/herdr-eventwait.py +157 -0
  28. package/.agents/backend/backends/herdr-workspace-move.py +114 -0
  29. package/.agents/backend/backends/herdr.sh +3386 -0
  30. package/.agents/backend/backends/orca.sh +290 -0
  31. package/.agents/backend/backends/tmux.sh +357 -0
  32. package/.agents/backend/backends/zellij.sh +700 -0
  33. package/.agents/backend/fm-afk-launch.sh +654 -0
  34. package/.agents/backend/fm-afk-return.sh +241 -0
  35. package/.agents/backend/fm-afk-start.sh +172 -0
  36. package/.agents/backend/fm-arm-command-policy.mjs +960 -0
  37. package/.agents/backend/fm-arm-pretool-check.sh +200 -0
  38. package/.agents/backend/fm-backend-hometag-lib.sh +52 -0
  39. package/.agents/backend/fm-backend.sh +981 -0
  40. package/.agents/backend/fm-backlog-handoff.sh +909 -0
  41. package/.agents/backend/fm-backlog-receive.sh +187 -0
  42. package/.agents/backend/fm-backlog-transition-lib.sh +779 -0
  43. package/.agents/backend/fm-bearings-board.sh +204 -0
  44. package/.agents/backend/fm-bearings-snapshot.sh +546 -0
  45. package/.agents/backend/fm-bootstrap.sh +1568 -0
  46. package/.agents/backend/fm-branch-outcome.sh +203 -0
  47. package/.agents/backend/fm-branch-prompt.sh +101 -0
  48. package/.agents/backend/fm-brief.sh +452 -0
  49. package/.agents/backend/fm-busy-event.sh +234 -0
  50. package/.agents/backend/fm-busy-lib.sh +986 -0
  51. package/.agents/backend/fm-captain-hold.sh +1001 -0
  52. package/.agents/backend/fm-cd-command-policy.mjs +153 -0
  53. package/.agents/backend/fm-cd-pretool-check.sh +190 -0
  54. package/.agents/backend/fm-check-lib.sh +74 -0
  55. package/.agents/backend/fm-check-register.sh +42 -0
  56. package/.agents/backend/fm-check-unregister.sh +52 -0
  57. package/.agents/backend/fm-classify-lib.sh +1770 -0
  58. package/.agents/backend/fm-claude-stop-autoarm.sh +334 -0
  59. package/.agents/backend/fm-composer-lib.sh +1416 -0
  60. package/.agents/backend/fm-config-inherit-lib.sh +1202 -0
  61. package/.agents/backend/fm-config-push.sh +254 -0
  62. package/.agents/backend/fm-control-lib.sh +251 -0
  63. package/.agents/backend/fm-control.sh +878 -0
  64. package/.agents/backend/fm-crew-state.sh +625 -0
  65. package/.agents/backend/fm-cursor-lib.sh +243 -0
  66. package/.agents/backend/fm-decision-hold.sh +232 -0
  67. package/.agents/backend/fm-doc-audience-check.sh +269 -0
  68. package/.agents/backend/fm-dod-lib.sh +67 -0
  69. package/.agents/backend/fm-ensure-agents-md.sh +253 -0
  70. package/.agents/backend/fm-extension-launch-barrier.mjs +129 -0
  71. package/.agents/backend/fm-extension.mjs +2577 -0
  72. package/.agents/backend/fm-extension.sh +16 -0
  73. package/.agents/backend/fm-ff-lib.sh +420 -0
  74. package/.agents/backend/fm-fleet-snapshot.sh +1463 -0
  75. package/.agents/backend/fm-fleet-sync.sh +458 -0
  76. package/.agents/backend/fm-fleet-view.sh +96 -0
  77. package/.agents/backend/fm-gate-refuse-lib.sh +102 -0
  78. package/.agents/backend/fm-guard.sh +242 -0
  79. package/.agents/backend/fm-harness.sh +195 -0
  80. package/.agents/backend/fm-herdr-ci-cleanup.sh +115 -0
  81. package/.agents/backend/fm-herdr-lab.sh +346 -0
  82. package/.agents/backend/fm-herdr-session-cleanup.sh +337 -0
  83. package/.agents/backend/fm-home-seed.sh +984 -0
  84. package/.agents/backend/fm-home-summary-refresh.sh +255 -0
  85. package/.agents/backend/fm-hook-host-lib.sh +36 -0
  86. package/.agents/backend/fm-inactive-reconcile.sh +531 -0
  87. package/.agents/backend/fm-inbox.sh +399 -0
  88. package/.agents/backend/fm-install-actionlint.sh +84 -0
  89. package/.agents/backend/fm-install-herdr.sh +96 -0
  90. package/.agents/backend/fm-install-shellcheck.sh +84 -0
  91. package/.agents/backend/fm-install-treehouse.sh +95 -0
  92. package/.agents/backend/fm-kimi-turnend-hook.sh +276 -0
  93. package/.agents/backend/fm-lease-lib.sh +218 -0
  94. package/.agents/backend/fm-lease.sh +189 -0
  95. package/.agents/backend/fm-line-cap-lib.sh +51 -0
  96. package/.agents/backend/fm-lint-workflows.sh +137 -0
  97. package/.agents/backend/fm-lint.sh +591 -0
  98. package/.agents/backend/fm-lock-lib.sh +104 -0
  99. package/.agents/backend/fm-lock.sh +107 -0
  100. package/.agents/backend/fm-marker-lib.sh +12 -0
  101. package/.agents/backend/fm-merge-local.sh +74 -0
  102. package/.agents/backend/fm-merge-outcome-lib.sh +138 -0
  103. package/.agents/backend/fm-nm-run-lib.sh +124 -0
  104. package/.agents/backend/fm-on.sh +125 -0
  105. package/.agents/backend/fm-operational-input.sh +253 -0
  106. package/.agents/backend/fm-peek.sh +46 -0
  107. package/.agents/backend/fm-pending-reply-lib.sh +1409 -0
  108. package/.agents/backend/fm-pr-check.sh +135 -0
  109. package/.agents/backend/fm-pr-lib.sh +1016 -0
  110. package/.agents/backend/fm-pr-merge.sh +707 -0
  111. package/.agents/backend/fm-pr-poll.sh +110 -0
  112. package/.agents/backend/fm-primary-scope-lib.sh +33 -0
  113. package/.agents/backend/fm-procevent-extension-capture.pl +259 -0
  114. package/.agents/backend/fm-procevent-lavish.sh +628 -0
  115. package/.agents/backend/fm-procevent-lib.sh +892 -0
  116. package/.agents/backend/fm-procevent-quota.sh +290 -0
  117. package/.agents/backend/fm-procevent-remote-reply.sh +577 -0
  118. package/.agents/backend/fm-procevent-when.sh +504 -0
  119. package/.agents/backend/fm-procevent.sh +1466 -0
  120. package/.agents/backend/fm-project-mode.sh +92 -0
  121. package/.agents/backend/fm-project-origin-lib.sh +180 -0
  122. package/.agents/backend/fm-promote.sh +282 -0
  123. package/.agents/backend/fm-public-followup-emit.sh +260 -0
  124. package/.agents/backend/fm-public-followup-lib.sh +398 -0
  125. package/.agents/backend/fm-public-followup.sh +1330 -0
  126. package/.agents/backend/fm-push-transition-lib.sh +168 -0
  127. package/.agents/backend/fm-quota-axi-lib.sh +93 -0
  128. package/.agents/backend/fm-quota-choose.sh +384 -0
  129. package/.agents/backend/fm-remote-delta-read.sh +189 -0
  130. package/.agents/backend/fm-remote-doctor.sh +800 -0
  131. package/.agents/backend/fm-remote-entrypoint.sh +193 -0
  132. package/.agents/backend/fm-remote-file.sh +234 -0
  133. package/.agents/backend/fm-remote-home-provision.sh +259 -0
  134. package/.agents/backend/fm-remote-home-seed.sh +259 -0
  135. package/.agents/backend/fm-remote-inherit-push.sh +90 -0
  136. package/.agents/backend/fm-remote-inherit.sh +179 -0
  137. package/.agents/backend/fm-remote-job-lib.sh +1241 -0
  138. package/.agents/backend/fm-remote-job-reap-orphans.sh +137 -0
  139. package/.agents/backend/fm-remote-job-worker.sh +1124 -0
  140. package/.agents/backend/fm-remote-readiness-lib.sh +44 -0
  141. package/.agents/backend/fm-remote-secondmate-control.sh +340 -0
  142. package/.agents/backend/fm-review-diff.sh +158 -0
  143. package/.agents/backend/fm-secondmate-charter-lib.sh +44 -0
  144. package/.agents/backend/fm-secondmate-nudge-lib.sh +68 -0
  145. package/.agents/backend/fm-secondmate-parent-lib.sh +70 -0
  146. package/.agents/backend/fm-secondmate-reconcile.sh +371 -0
  147. package/.agents/backend/fm-secondmate-registry-lib.sh +311 -0
  148. package/.agents/backend/fm-secondmate-report.sh +88 -0
  149. package/.agents/backend/fm-send.sh +1059 -0
  150. package/.agents/backend/fm-session-lock-lib.sh +176 -0
  151. package/.agents/backend/fm-session-start.sh +970 -0
  152. package/.agents/backend/fm-sessionstart-cursor.sh +40 -0
  153. package/.agents/backend/fm-sessionstart-nudge.sh +45 -0
  154. package/.agents/backend/fm-sessionstart-run.sh +145 -0
  155. package/.agents/backend/fm-spawn.sh +3153 -0
  156. package/.agents/backend/fm-startup-memory-budget-lib.sh +224 -0
  157. package/.agents/backend/fm-startup-memory-budget.sh +94 -0
  158. package/.agents/backend/fm-startup-network.sh +642 -0
  159. package/.agents/backend/fm-stow-cascade.sh +251 -0
  160. package/.agents/backend/fm-subagent-pretool-check.sh +207 -0
  161. package/.agents/backend/fm-supervise-daemon.sh +1732 -0
  162. package/.agents/backend/fm-supervision-instructions.sh +215 -0
  163. package/.agents/backend/fm-supervision-lib.sh +90 -0
  164. package/.agents/backend/fm-supervisor-target-lib.sh +78 -0
  165. package/.agents/backend/fm-tangle-lib.sh +53 -0
  166. package/.agents/backend/fm-task-inbox-lib.sh +402 -0
  167. package/.agents/backend/fm-tasks-axi-lib.sh +123 -0
  168. package/.agents/backend/fm-teardown.sh +2922 -0
  169. package/.agents/backend/fm-test-isolation-proof.sh +588 -0
  170. package/.agents/backend/fm-test-run.sh +2191 -0
  171. package/.agents/backend/fm-timeout-lib.sh +141 -0
  172. package/.agents/backend/fm-timing-lib.sh +179 -0
  173. package/.agents/backend/fm-tmux-lib.sh +291 -0
  174. package/.agents/backend/fm-tool-update-check.sh +898 -0
  175. package/.agents/backend/fm-trace-context-lib.sh +227 -0
  176. package/.agents/backend/fm-transition-lib.sh +103 -0
  177. package/.agents/backend/fm-turnend-guard-cursor.sh +391 -0
  178. package/.agents/backend/fm-turnend-guard-grok.sh +90 -0
  179. package/.agents/backend/fm-turnend-guard.sh +432 -0
  180. package/.agents/backend/fm-update.sh +110 -0
  181. package/.agents/backend/fm-vendor-auth-probe.sh +190 -0
  182. package/.agents/backend/fm-voice-client.py +1373 -0
  183. package/.agents/backend/fm-voice-relay.py +1256 -0
  184. package/.agents/backend/fm-wake-drain.sh +592 -0
  185. package/.agents/backend/fm-wake-grant.sh +127 -0
  186. package/.agents/backend/fm-wake-lib.sh +1849 -0
  187. package/.agents/backend/fm-watch-arm.sh +602 -0
  188. package/.agents/backend/fm-watch-checkpoint.sh +109 -0
  189. package/.agents/backend/fm-watch.sh +1962 -0
  190. package/.agents/backend/fm-x-dismiss.sh +116 -0
  191. package/.agents/backend/fm-x-followup.sh +286 -0
  192. package/.agents/backend/fm-x-lib.sh +1000 -0
  193. package/.agents/backend/fm-x-link.sh +234 -0
  194. package/.agents/backend/fm-x-poll.sh +185 -0
  195. package/.agents/backend/fm-x-reply.sh +385 -0
  196. package/.agents/backend/fm_voice_frame.py +166 -0
  197. package/.agents/backend/fm_voice_records.py +574 -0
  198. package/.agents/backend/model-bridge.py +290 -0
  199. package/.agents/backend/opencode-go-bridge.py +30 -0
  200. package/.agents/bus/README.md +12 -0
  201. package/.agents/bus/messages.json +1 -0
  202. package/.agents/config/agents.machine.example.yaml +16 -0
  203. package/.agents/config/agents.yaml +50 -0
  204. package/.agents/config/agents.yaml.example +72 -0
  205. package/.agents/config/crew-dispatch.json +22 -0
  206. package/.agents/config/cron.yaml +9 -0
  207. package/.agents/config/eindri-dispatch.json +67 -0
  208. package/.agents/config/eindri-harness +1 -0
  209. package/.agents/config/startup-memory-budget +1 -0
  210. package/.agents/config/tailscale-sync.yaml +27 -0
  211. package/.agents/filebrowser/.filebrowser.json +6 -0
  212. package/.agents/filebrowser/README.md +11 -0
  213. package/.agents/gateway/README.md +12 -0
  214. package/.agents/github/README.md +15 -0
  215. package/.agents/github/webhooks/.gitkeep +0 -0
  216. package/.agents/github/workflows/.gitkeep +0 -0
  217. package/.agents/harness/opencode/plugins/lib/rodd-operational-input.js +37 -0
  218. package/.agents/harness/opencode/plugins/package.json +4 -0
  219. package/.agents/harness/opencode/plugins/saga-sessionstart.js +77 -0
  220. package/.agents/harness/opencode/plugins/syn-cd-check.js +61 -0
  221. package/.agents/harness/opencode/plugins/syn-pretool-check.js +68 -0
  222. package/.agents/harness/opencode/plugins/syn-turnend-guard.js +105 -0
  223. package/.agents/harness/opencode/plugins/syn-watch-arm.js +521 -0
  224. package/.agents/memory/README.md +46 -0
  225. package/.agents/memory/kaia.engram +0 -0
  226. package/.agents/memory/kaia.engram-shm +0 -0
  227. package/.agents/memory/kaia.engram-wal +0 -0
  228. package/.agents/memory/runes_audit.md +5 -0
  229. package/.agents/memory/well/episodes.jsonl +367 -0
  230. package/.agents/memory/well/workspace.jsonl +27 -0
  231. package/.agents/migrations/0001-hodd-layout.sh +38 -0
  232. package/.agents/migrations/0002-a2a-mcp.sh +27 -0
  233. package/.agents/migrations/0003-private-data-separation.sh +111 -0
  234. package/.agents/migrations/0004-hoard-and-realms.sh +104 -0
  235. package/.agents/sandbox/Dockerfile.utgard +19 -0
  236. package/.agents/sandbox/README.md +14 -0
  237. package/.agents/sandbox/utgard.config.json +14 -0
  238. package/.agents/skills/README.md +59 -0
  239. package/.agents/skills/bragi-marketing/README.md +3 -0
  240. package/.agents/skills/bragi-marketing/SKILL.md +82 -0
  241. package/.agents/skills/eindri-homes/README.md +3 -0
  242. package/.agents/skills/eindri-homes/SKILL.md +291 -0
  243. package/.agents/skills/eindri-homes/assets/control-plane.md +122 -0
  244. package/.agents/skills/eindri-homes/assets/dispatch.md +80 -0
  245. package/.agents/skills/frigg-consent/README.md +3 -0
  246. package/.agents/skills/frigg-consent/SKILL.md +56 -0
  247. package/.agents/skills/galdr-ymirsystem/README.md +3 -0
  248. package/.agents/skills/galdr-ymirsystem/SKILL.md +158 -0
  249. package/.agents/skills/galdr-ymirsystem/assets/README.md +74 -0
  250. package/.agents/skills/galdr-ymirsystem/assets/brokk-distro-runtime.md +390 -0
  251. package/.agents/skills/galdr-ymirsystem/assets/build-method.md +113 -0
  252. package/.agents/skills/galdr-ymirsystem/assets/build-tool-categories.md +178 -0
  253. package/.agents/skills/galdr-ymirsystem/assets/eindri-orchestration.md +518 -0
  254. package/.agents/skills/galdr-ymirsystem/assets/eindri-profiles.md +136 -0
  255. package/.agents/skills/galdr-ymirsystem/assets/harness-integration/README.md +673 -0
  256. package/.agents/skills/galdr-ymirsystem/assets/harness-integration/claude-code.md +197 -0
  257. package/.agents/skills/galdr-ymirsystem/assets/harness-integration/codex.md +191 -0
  258. package/.agents/skills/galdr-ymirsystem/assets/harness-integration/cursor.md +193 -0
  259. package/.agents/skills/galdr-ymirsystem/assets/harness-integration/opencode.md +262 -0
  260. package/.agents/skills/galdr-ymirsystem/assets/harness-integration/pi.md +295 -0
  261. package/.agents/skills/galdr-ymirsystem/assets/hlidskjalf-ui.md +496 -0
  262. package/.agents/skills/galdr-ymirsystem/assets/installation.md +571 -0
  263. package/.agents/skills/galdr-ymirsystem/assets/local-models/HOST-DATA.example.md +72 -0
  264. package/.agents/skills/galdr-ymirsystem/assets/local-models.md +274 -0
  265. package/.agents/skills/galdr-ymirsystem/assets/memory-well.md +161 -0
  266. package/.agents/skills/galdr-ymirsystem/assets/nornir-jobs.md +377 -0
  267. package/.agents/skills/galdr-ymirsystem/assets/norse-naming.md +325 -0
  268. package/.agents/skills/galdr-ymirsystem/assets/odrerir-hall.md +129 -0
  269. package/.agents/skills/galdr-ymirsystem/assets/pi-boot/einherjar-spawn.schema.json +81 -0
  270. package/.agents/skills/galdr-ymirsystem/assets/pi-boot/herdr-profile.toml +75 -0
  271. package/.agents/skills/galdr-ymirsystem/assets/pi-boot/pi-profile.yml +96 -0
  272. package/.agents/skills/galdr-ymirsystem/assets/pi-boot/supervision-tree.yml +163 -0
  273. package/.agents/skills/galdr-ymirsystem/assets/pi-boot-guide.md +58 -0
  274. package/.agents/skills/galdr-ymirsystem/assets/porting-upstream-to-norse.md +301 -0
  275. package/.agents/skills/galdr-ymirsystem/assets/principles.md +385 -0
  276. package/.agents/skills/galdr-ymirsystem/assets/reference-adoption.md +99 -0
  277. package/.agents/skills/galdr-ymirsystem/assets/registry.md +379 -0
  278. package/.agents/skills/galdr-ymirsystem/assets/runtime-compliance.md +463 -0
  279. package/.agents/skills/galdr-ymirsystem/assets/runtime-components.md +553 -0
  280. package/.agents/skills/galdr-ymirsystem/assets/smidja.md +175 -0
  281. package/.agents/skills/galdr-ymirsystem/schemas/toon-schemas.md +190 -0
  282. package/.agents/skills/galdr-ymirsystem/scripts/README.md +45 -0
  283. package/.agents/skills/galdr-ymirsystem/scripts/bench-one.sh +248 -0
  284. package/.agents/skills/galdr-ymirsystem/scripts/compliance-check.sh +360 -0
  285. package/.agents/skills/galdr-ymirsystem/scripts/gpu-sample.sh +43 -0
  286. package/.agents/skills/galdr-ymirsystem/scripts/stop-all.sh +34 -0
  287. package/.agents/skills/galdr-ymirsystem/scripts/toon-check.py +188 -0
  288. package/.agents/skills/gjallarhorn-relay/README.md +3 -0
  289. package/.agents/skills/gjallarhorn-relay/SKILL.md +283 -0
  290. package/.agents/skills/groa-update/SKILL.md +70 -0
  291. package/.agents/skills/hamr-adapters/README.md +3 -0
  292. package/.agents/skills/hamr-adapters/SKILL.md +123 -0
  293. package/.agents/skills/hamr-adapters/references/common/control-and-recovery.md +37 -0
  294. package/.agents/skills/hamr-adapters/references/common/dispatch.md +32 -0
  295. package/.agents/skills/hamr-adapters/references/common/model-and-effort.md +42 -0
  296. package/.agents/skills/hamr-adapters/references/common/primary-hooks.md +40 -0
  297. package/.agents/skills/hamr-adapters/references/harness/claude.md +55 -0
  298. package/.agents/skills/hamr-adapters/references/harness/codex.md +43 -0
  299. package/.agents/skills/hamr-adapters/references/harness/cursor.md +75 -0
  300. package/.agents/skills/hamr-adapters/references/harness/grok.md +69 -0
  301. package/.agents/skills/hamr-adapters/references/harness/kimi.md +51 -0
  302. package/.agents/skills/hamr-adapters/references/harness/muse.md +70 -0
  303. package/.agents/skills/hamr-adapters/references/harness/opencode.md +42 -0
  304. package/.agents/skills/hamr-adapters/references/harness/pi.md +56 -0
  305. package/.agents/skills/herdr-panes/README.md +3 -0
  306. package/.agents/skills/herdr-panes/SKILL.md +92 -0
  307. package/.agents/skills/herdr-panes/assets/herdr-backend.md +346 -0
  308. package/.agents/skills/herdr-panes/assets/tmux-backend.md +115 -0
  309. package/.agents/skills/hnoss-design/DESIGN.md +19 -0
  310. package/.agents/skills/hnoss-design/README.md +3 -0
  311. package/.agents/skills/hnoss-design/SKILL.md +83 -0
  312. package/.agents/skills/hvild-afk/README.md +3 -0
  313. package/.agents/skills/hvild-afk/SKILL.md +241 -0
  314. package/.agents/skills/jord-projects/README.md +3 -0
  315. package/.agents/skills/jord-projects/SKILL.md +92 -0
  316. package/.agents/skills/lifecycle/SKILL.md +56 -0
  317. package/.agents/skills/lifecycle/smoke_test.sh +52 -0
  318. package/.agents/skills/lifecycle/start.sh +21 -0
  319. package/.agents/skills/lifecycle/status.sh +35 -0
  320. package/.agents/skills/lifecycle/stop.sh +16 -0
  321. package/.agents/skills/muninn-stow/README.md +3 -0
  322. package/.agents/skills/muninn-stow/SKILL.md +309 -0
  323. package/.agents/skills/no-mistakes/SKILL.md +379 -0
  324. package/.agents/skills/nornir-schedule/README.md +3 -0
  325. package/.agents/skills/nornir-schedule/SKILL.md +25 -0
  326. package/.agents/skills/nornir-schedule/assets/events.md +137 -0
  327. package/.agents/skills/nornir-schedule/assets/quota.md +131 -0
  328. package/.agents/skills/nsr-compliance/README.md +3 -0
  329. package/.agents/skills/nsr-compliance/SKILL.md +29 -0
  330. package/.agents/skills/nsr-compliance/assets/nsr/README.md +40 -0
  331. package/.agents/skills/nsr-compliance/assets/nsr/assets/RULES/README.md +15 -0
  332. package/.agents/skills/nsr-compliance/assets/nsr/assets/RULES/git-workflow.md +18 -0
  333. package/.agents/skills/nsr-compliance/assets/nsr/assets/RULES/security.md +22 -0
  334. package/.agents/skills/nsr-compliance/assets/nsr/assets/RULES/tech-stack.md +8 -0
  335. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/SKILL.md +71 -0
  336. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/config/core_four.yaml +16 -0
  337. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/gates/check_danger.sh +102 -0
  338. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/gates/check_wiring.sh +69 -0
  339. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/gates/validate_code.sh +29 -0
  340. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/gates/verify_docs.py +66 -0
  341. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/generate.sh +109 -0
  342. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/harness/envelopes/result_envelope.json +14 -0
  343. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/harness/envelopes/task_envelope.json +20 -0
  344. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/harness/runner.py +303 -0
  345. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/telemetry/logger.py +112 -0
  346. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/README.md +18 -0
  347. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/config/README.md +10 -0
  348. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/gates/README.md +12 -0
  349. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/gates/check_env.sh +23 -0
  350. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/gates/check_paths.sh +20 -0
  351. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/gates/check_platform.sh +23 -0
  352. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/harness/README.md +11 -0
  353. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/harness/envelopes/README.md +10 -0
  354. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/installer/README.md +10 -0
  355. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/installer/install.sh +125 -0
  356. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/telemetry/README.md +11 -0
  357. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/README.md +20 -0
  358. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/features/README.md +36 -0
  359. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/features/SKILL-template.md +14 -0
  360. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/git_ops/README.md +25 -0
  361. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/git_ops/SKILL.md +13 -0
  362. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/git_ops/create_branch.sh +6 -0
  363. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/git_ops/safe_commit.sh +9 -0
  364. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/git_ops/sync_upstream.sh +6 -0
  365. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/README.md +27 -0
  366. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/SKILL.md +15 -0
  367. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/smoke_test.sh +12 -0
  368. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/start.sh +19 -0
  369. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/status.sh +12 -0
  370. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/stop.sh +15 -0
  371. package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/README.md +18 -0
  372. package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/config/README.md +10 -0
  373. package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/config/core_four.yaml +13 -0
  374. package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/README.md +12 -0
  375. package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/check_danger.sh +102 -0
  376. package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/check_env.sh +23 -0
  377. package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/check_paths.sh +20 -0
  378. package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/check_platform.sh +23 -0
  379. package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/check_wiring.sh +69 -0
  380. package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/harness/README.md +11 -0
  381. package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/harness/envelopes/README.md +10 -0
  382. package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/harness/envelopes/result_envelope.json +14 -0
  383. package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/harness/envelopes/task_envelope.json +20 -0
  384. package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/harness/runner.py +303 -0
  385. package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/installer/README.md +10 -0
  386. package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/installer/install.sh +125 -0
  387. package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/telemetry/README.md +11 -0
  388. package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/telemetry/logger.py +112 -0
  389. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/BEST_PRACTICES/README.md +14 -0
  390. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/BEST_PRACTICES/api.md +17 -0
  391. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/BEST_PRACTICES/compliance-wiring.md +155 -0
  392. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/BEST_PRACTICES/frontend.md +15 -0
  393. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/README.md +11 -0
  394. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/README.md +23 -0
  395. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/clients/README.md +16 -0
  396. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/clients/template-README.md +11 -0
  397. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/deploy.sh +49 -0
  398. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/envs/README.md +12 -0
  399. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/envs/development.env.example +17 -0
  400. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/envs/production.env.example +17 -0
  401. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/envs/staging.env.example +17 -0
  402. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/tenants/README.md +11 -0
  403. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/tenants/template.env.example +8 -0
  404. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/README.md +26 -0
  405. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/agent.md +7 -0
  406. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/developers/dev-1.md +20 -0
  407. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/linux.md +9 -0
  408. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/macos.md +10 -0
  409. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/shared.md +19 -0
  410. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/windows.md +14 -0
  411. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/HOSTING/README.md +25 -0
  412. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/HOSTING/_template.md +41 -0
  413. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/HOSTING/hosting-1.md +41 -0
  414. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/README.md +21 -0
  415. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/RUNBOOK/README.md +15 -0
  416. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/RUNBOOK/deployment.md +19 -0
  417. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/RUNBOOK/disaster-recovery.md +15 -0
  418. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/RUNBOOK/ops-tasks.md +14 -0
  419. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/features/README.md +16 -0
  420. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/project-skills.md +146 -0
  421. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/research/README.md +11 -0
  422. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/research/software-compliance-research.md +269 -0
  423. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/working-with-agents.md +260 -0
  424. package/.agents/skills/nsr-compliance/assets/nsr/assets/root/AGENTS.md +38 -0
  425. package/.agents/skills/nsr-compliance/assets/nsr/assets/root/ARCHITECTURE.md +36 -0
  426. package/.agents/skills/nsr-compliance/assets/nsr/assets/root/BEST_PRACTICES.md +27 -0
  427. package/.agents/skills/nsr-compliance/assets/nsr/assets/root/CI_CD.md +23 -0
  428. package/.agents/skills/nsr-compliance/assets/nsr/assets/root/FEATURES.md +15 -0
  429. package/.agents/skills/nsr-compliance/assets/nsr/assets/root/README.md +22 -0
  430. package/.agents/skills/nsr-compliance/assets/nsr/assets/root/RULES.md +37 -0
  431. package/.agents/skills/nsr-compliance/assets/nsr/assets/root/STRUCTURE.md +45 -0
  432. package/.agents/skills/nsr-compliance/assets/nsr/assets/root/TECH_STACK.md +28 -0
  433. package/.agents/skills/nsr-compliance/assets/nsr/scaffold-spec.md +63 -0
  434. package/.agents/skills/nsr-compliance/assets/nsr/scripts/scaffold.sh +103 -0
  435. package/.agents/skills/nsr-compliance/assets/nsr/scripts/validate.sh +52 -0
  436. package/.agents/skills/nsr-compliance/assets/nsrcompliance/SKILL.md +71 -0
  437. package/.agents/skills/nsr-compliance/assets/nsrcompliance/config/core_four.yaml +16 -0
  438. package/.agents/skills/nsr-compliance/assets/nsrcompliance/gates/check_danger.sh +102 -0
  439. package/.agents/skills/nsr-compliance/assets/nsrcompliance/gates/check_wiring.sh +69 -0
  440. package/.agents/skills/nsr-compliance/assets/nsrcompliance/gates/validate_code.sh +29 -0
  441. package/.agents/skills/nsr-compliance/assets/nsrcompliance/gates/verify_docs.py +66 -0
  442. package/.agents/skills/nsr-compliance/assets/nsrcompliance/generate.sh +109 -0
  443. package/.agents/skills/nsr-compliance/assets/nsrcompliance/harness/envelopes/result_envelope.json +14 -0
  444. package/.agents/skills/nsr-compliance/assets/nsrcompliance/harness/envelopes/task_envelope.json +20 -0
  445. package/.agents/skills/nsr-compliance/assets/nsrcompliance/harness/runner.py +303 -0
  446. package/.agents/skills/nsr-compliance/assets/nsrcompliance/telemetry/logger.py +112 -0
  447. package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/README.md +18 -0
  448. package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/config/README.md +10 -0
  449. package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/gates/README.md +12 -0
  450. package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/gates/check_env.sh +23 -0
  451. package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/gates/check_paths.sh +20 -0
  452. package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/gates/check_platform.sh +23 -0
  453. package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/harness/README.md +11 -0
  454. package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/harness/envelopes/README.md +10 -0
  455. package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/installer/README.md +10 -0
  456. package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/installer/install.sh +125 -0
  457. package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/telemetry/README.md +11 -0
  458. package/.agents/skills/pr-ops/README.md +3 -0
  459. package/.agents/skills/pr-ops/SKILL.md +109 -0
  460. package/.agents/skills/ratatoskr-a2a/README.md +3 -0
  461. package/.agents/skills/ratatoskr-a2a/SKILL.md +148 -0
  462. package/.agents/skills/rules-check-drift/SKILL.md +81 -0
  463. package/.agents/skills/saga-bearings/README.md +3 -0
  464. package/.agents/skills/saga-bearings/SKILL.md +26 -0
  465. package/.agents/skills/saga-bearings/assets/bearings.md +161 -0
  466. package/.agents/skills/saga-bearings/assets/board-template.html +731 -0
  467. package/.agents/skills/saga-bearings/assets/recap.md +56 -0
  468. package/.agents/skills/syn-recovery/README.md +3 -0
  469. package/.agents/skills/syn-recovery/SKILL.md +54 -0
  470. package/.agents/skills/tyr-check/README.md +3 -0
  471. package/.agents/skills/tyr-check/SKILL.md +218 -0
  472. package/.agents/skills/urdh-hold/README.md +3 -0
  473. package/.agents/skills/urdh-hold/SKILL.md +25 -0
  474. package/.agents/skills/urdh-hold/assets/decisions.md +15 -0
  475. package/.agents/skills/urdh-hold/assets/hold.md +54 -0
  476. package/.agents/skills/vor-diagnostics/README.md +3 -0
  477. package/.agents/skills/vor-diagnostics/SKILL.md +68 -0
  478. package/.agents/skills/ymir-host/README.md +3 -0
  479. package/.agents/skills/ymir-host/SKILL.md +34 -0
  480. package/.agents/skills/ymir-host/assets/desktop.md +36 -0
  481. package/.agents/skills/ymir-host/assets/omarchy.md +297 -0
  482. package/.agents/skills/ymir-host/assets/runbooks.md +15 -0
  483. package/.agents/skills/ymir-host/assets/thjazi.md +220 -0
  484. package/.agents/skills/ymir-host/assets/update.md +64 -0
  485. package/.agents/tests/assets/board-render-harness.mjs +117 -0
  486. package/.agents/tests/cmux-test-safety.sh +51 -0
  487. package/.agents/tests/fixtures.sh +291 -0
  488. package/.agents/tests/fm-afk-inject-e2e.test.sh +428 -0
  489. package/.agents/tests/fm-afk-inject-herdr-e2e.test.sh +536 -0
  490. package/.agents/tests/fm-afk-launch.test.sh +961 -0
  491. package/.agents/tests/fm-afk-pi-herdr-return-e2e.test.sh +297 -0
  492. package/.agents/tests/fm-afk-return.test.sh +283 -0
  493. package/.agents/tests/fm-arm-pretool-check.test.sh +482 -0
  494. package/.agents/tests/fm-ask-user-authority.test.sh +42 -0
  495. package/.agents/tests/fm-backend-autodetect-smoke.test.sh +176 -0
  496. package/.agents/tests/fm-backend-cmux-smoke.test.sh +188 -0
  497. package/.agents/tests/fm-backend-cmux.test.sh +1166 -0
  498. package/.agents/tests/fm-backend-herdr-eventwait-smoke.test.sh +136 -0
  499. package/.agents/tests/fm-backend-herdr-eventwait.test.py +106 -0
  500. package/.agents/tests/fm-backend-herdr-focus-flash-e2e.test.sh +409 -0
  501. package/.agents/tests/fm-backend-herdr-launcher-workspace-e2e.test.sh +437 -0
  502. package/.agents/tests/fm-backend-herdr-presentation-e2e.test.sh +1424 -0
  503. package/.agents/tests/fm-backend-herdr-prune-safety-e2e.test.sh +180 -0
  504. package/.agents/tests/fm-backend-herdr-respawn-idem-e2e.test.sh +182 -0
  505. package/.agents/tests/fm-backend-herdr-smoke.test.sh +355 -0
  506. package/.agents/tests/fm-backend-herdr-workspace-per-home-e2e.test.sh +251 -0
  507. package/.agents/tests/fm-backend-herdr.test.sh +4606 -0
  508. package/.agents/tests/fm-backend-orca.test.sh +1357 -0
  509. package/.agents/tests/fm-backend-tmux-smoke.test.sh +173 -0
  510. package/.agents/tests/fm-backend-zellij-smoke.test.sh +205 -0
  511. package/.agents/tests/fm-backend-zellij.test.sh +1360 -0
  512. package/.agents/tests/fm-backend.test.sh +1142 -0
  513. package/.agents/tests/fm-backlog-atomicity.test.sh +2302 -0
  514. package/.agents/tests/fm-backlog-handoff.test.sh +1360 -0
  515. package/.agents/tests/fm-bearings-board-render.test.sh +135 -0
  516. package/.agents/tests/fm-bearings-board.test.sh +414 -0
  517. package/.agents/tests/fm-bearings-snapshot.test.sh +1990 -0
  518. package/.agents/tests/fm-bootstrap-network-parallel.test.sh +316 -0
  519. package/.agents/tests/fm-bootstrap.test.sh +1178 -0
  520. package/.agents/tests/fm-branch-supervision.test.sh +552 -0
  521. package/.agents/tests/fm-brief.test.sh +785 -0
  522. package/.agents/tests/fm-busy-adapter-wiring.test.sh +324 -0
  523. package/.agents/tests/fm-busy-state.test.sh +465 -0
  524. package/.agents/tests/fm-calm-pi-extension.test.sh +3979 -0
  525. package/.agents/tests/fm-captain-hold-lifecycle.test.sh +1187 -0
  526. package/.agents/tests/fm-cd-pretool-check.test.sh +400 -0
  527. package/.agents/tests/fm-check-unregister.test.sh +198 -0
  528. package/.agents/tests/fm-classify-corr-token.test.sh +543 -0
  529. package/.agents/tests/fm-classify-decision-key.test.sh +340 -0
  530. package/.agents/tests/fm-claude-stop-autoarm-live-e2e.test.sh +164 -0
  531. package/.agents/tests/fm-claude-stop-autoarm.test.sh +1190 -0
  532. package/.agents/tests/fm-cmux-claude-composer-live-e2e.test.sh +110 -0
  533. package/.agents/tests/fm-codex-continuity-live-e2e.test.sh +55 -0
  534. package/.agents/tests/fm-composer-ghost.test.sh +716 -0
  535. package/.agents/tests/fm-composer-lib.test.sh +666 -0
  536. package/.agents/tests/fm-composer-matrix-live-e2e.test.sh +220 -0
  537. package/.agents/tests/fm-control-herdr-smoke.test.sh +149 -0
  538. package/.agents/tests/fm-control-relaunch.test.sh +1530 -0
  539. package/.agents/tests/fm-control.test.sh +910 -0
  540. package/.agents/tests/fm-crew-state.test.sh +1610 -0
  541. package/.agents/tests/fm-cursor-harness.test.sh +404 -0
  542. package/.agents/tests/fm-cursor-primary-live-e2e.test.sh +217 -0
  543. package/.agents/tests/fm-cursor-primary.test.sh +708 -0
  544. package/.agents/tests/fm-daemon.test.sh +2740 -0
  545. package/.agents/tests/fm-documentation-audiences.test.sh +141 -0
  546. package/.agents/tests/fm-ensure-agents-md.test.sh +371 -0
  547. package/.agents/tests/fm-extension-binding.test.sh +2187 -0
  548. package/.agents/tests/fm-fleet-snapshot-view.test.sh +816 -0
  549. package/.agents/tests/fm-fleet-sync.test.sh +721 -0
  550. package/.agents/tests/fm-gate-refuse.test.sh +356 -0
  551. package/.agents/tests/fm-gitignore-config.test.sh +89 -0
  552. package/.agents/tests/fm-gotmp.test.sh +230 -0
  553. package/.agents/tests/fm-grok-continuity-live-e2e.test.sh +112 -0
  554. package/.agents/tests/fm-grok-harness.test.sh +117 -0
  555. package/.agents/tests/fm-grok-stop-live-e2e.test.sh +219 -0
  556. package/.agents/tests/fm-guard-stale-banner.test.sh +709 -0
  557. package/.agents/tests/fm-harness-adapter-instructions-live-e2e.test.sh +134 -0
  558. package/.agents/tests/fm-harness-adapter-references.test.sh +30 -0
  559. package/.agents/tests/fm-harness-liveness-drift-live-e2e.test.sh +151 -0
  560. package/.agents/tests/fm-herdr-lab.test.sh +243 -0
  561. package/.agents/tests/fm-herdr-session-cleanup-e2e.test.sh +146 -0
  562. package/.agents/tests/fm-herdr-session-cleanup.test.sh +329 -0
  563. package/.agents/tests/fm-herdr-submit-confirm-live-e2e.test.sh +125 -0
  564. package/.agents/tests/fm-herdr-version-floor-live-e2e.test.sh +144 -0
  565. package/.agents/tests/fm-home-summary-refresh.test.sh +971 -0
  566. package/.agents/tests/fm-inactive-reconcile.test.sh +485 -0
  567. package/.agents/tests/fm-kimi-harness.test.sh +687 -0
  568. package/.agents/tests/fm-lint-workflows.test.sh +532 -0
  569. package/.agents/tests/fm-lint.test.sh +1023 -0
  570. package/.agents/tests/fm-muse-harness.test.sh +932 -0
  571. package/.agents/tests/fm-muse-signals-live-e2e.test.sh +205 -0
  572. package/.agents/tests/fm-no-mistakes-required.test.sh +72 -0
  573. package/.agents/tests/fm-on.test.sh +507 -0
  574. package/.agents/tests/fm-opencode-primary-live-e2e.test.sh +357 -0
  575. package/.agents/tests/fm-operational-input.test.sh +160 -0
  576. package/.agents/tests/fm-peek-remote.test.sh +110 -0
  577. package/.agents/tests/fm-pending-reply.test.sh +1288 -0
  578. package/.agents/tests/fm-pi-branch-extension.test.sh +3182 -0
  579. package/.agents/tests/fm-pi-branch-live-e2e.test.sh +527 -0
  580. package/.agents/tests/fm-pi-primary-live-e2e.test.sh +345 -0
  581. package/.agents/tests/fm-pi-primary-types.test.sh +68 -0
  582. package/.agents/tests/fm-pi-watch-extension.test.sh +2843 -0
  583. package/.agents/tests/fm-pr-check-security.test.sh +2140 -0
  584. package/.agents/tests/fm-pr-merge.test.sh +2135 -0
  585. package/.agents/tests/fm-procevent-quota.test.sh +225 -0
  586. package/.agents/tests/fm-procevent-when.test.sh +406 -0
  587. package/.agents/tests/fm-procevent.test.sh +1745 -0
  588. package/.agents/tests/fm-project-origin.test.sh +110 -0
  589. package/.agents/tests/fm-public-followup.test.sh +2272 -0
  590. package/.agents/tests/fm-quota-array-dispatch-live-e2e.test.sh +526 -0
  591. package/.agents/tests/fm-quota-choose.test.sh +626 -0
  592. package/.agents/tests/fm-remote-backlog-handoff.test.sh +453 -0
  593. package/.agents/tests/fm-remote-doctor.test.sh +625 -0
  594. package/.agents/tests/fm-remote-entrypoint.test.sh +59 -0
  595. package/.agents/tests/fm-remote-job-orphan-reap.test.sh +205 -0
  596. package/.agents/tests/fm-remote-job.test.sh +768 -0
  597. package/.agents/tests/fm-remote-reply.test.sh +520 -0
  598. package/.agents/tests/fm-remote-secondmate-lifecycle-e2e.test.sh +1256 -0
  599. package/.agents/tests/fm-remote-secondmate-parent-binding.test.sh +326 -0
  600. package/.agents/tests/fm-remote-secondmate-trace-context.test.sh +310 -0
  601. package/.agents/tests/fm-remote-transport-lanes.test.sh +431 -0
  602. package/.agents/tests/fm-review-diff.test.sh +176 -0
  603. package/.agents/tests/fm-secondmate-harness.test.sh +2600 -0
  604. package/.agents/tests/fm-secondmate-lifecycle-e2e.test.sh +259 -0
  605. package/.agents/tests/fm-secondmate-liveness.test.sh +559 -0
  606. package/.agents/tests/fm-secondmate-reconcile.test.sh +732 -0
  607. package/.agents/tests/fm-secondmate-safety.test.sh +2972 -0
  608. package/.agents/tests/fm-secondmate-sync.test.sh +913 -0
  609. package/.agents/tests/fm-send-inbox-doorbell-live-e2e.test.sh +206 -0
  610. package/.agents/tests/fm-send-inbox.test.sh +352 -0
  611. package/.agents/tests/fm-send-popup-settle.test.sh +167 -0
  612. package/.agents/tests/fm-send-remote-delivery.test.sh +796 -0
  613. package/.agents/tests/fm-send-resolve-key.test.sh +551 -0
  614. package/.agents/tests/fm-send-secondmate-marker-herdr-e2e.test.sh +187 -0
  615. package/.agents/tests/fm-send-secondmate-marker.test.sh +278 -0
  616. package/.agents/tests/fm-send-settle.test.sh +147 -0
  617. package/.agents/tests/fm-send-strict.test.sh +241 -0
  618. package/.agents/tests/fm-session-lock-ancestry.test.sh +365 -0
  619. package/.agents/tests/fm-session-start.test.sh +2515 -0
  620. package/.agents/tests/fm-sessionstart-hook-live-e2e.test.sh +631 -0
  621. package/.agents/tests/fm-sessionstart-instruction-refresh-live-e2e.test.sh +230 -0
  622. package/.agents/tests/fm-sessionstart-nudge.test.sh +1039 -0
  623. package/.agents/tests/fm-shared-captain-inheritance.test.sh +404 -0
  624. package/.agents/tests/fm-spawn-batch.test.sh +148 -0
  625. package/.agents/tests/fm-spawn-dispatch-profile.test.sh +827 -0
  626. package/.agents/tests/fm-spawn-pool-base-freshen.test.sh +440 -0
  627. package/.agents/tests/fm-spawn-worktree-settle.test.sh +147 -0
  628. package/.agents/tests/fm-startup-memory-budget.test.sh +333 -0
  629. package/.agents/tests/fm-startup-network.test.sh +712 -0
  630. package/.agents/tests/fm-stow-cascade.test.sh +370 -0
  631. package/.agents/tests/fm-subagent-pretool-check.test.sh +291 -0
  632. package/.agents/tests/fm-supervision-events.test.sh +156 -0
  633. package/.agents/tests/fm-supervision-instructions.test.sh +189 -0
  634. package/.agents/tests/fm-tangle-guard.test.sh +277 -0
  635. package/.agents/tests/fm-task-delivery.test.sh +420 -0
  636. package/.agents/tests/fm-task-inbox.test.sh +513 -0
  637. package/.agents/tests/fm-teardown-endpoint-safety.test.sh +374 -0
  638. package/.agents/tests/fm-teardown.test.sh +2665 -0
  639. package/.agents/tests/fm-test-fixture-cleanup.test.sh +172 -0
  640. package/.agents/tests/fm-test-fixtures.test.sh +132 -0
  641. package/.agents/tests/fm-test-isolation-proof.test.sh +278 -0
  642. package/.agents/tests/fm-test-run.test.sh +1196 -0
  643. package/.agents/tests/fm-tmux-agent-liveness.test.sh +354 -0
  644. package/.agents/tests/fm-tmux-submit-busy.test.sh +340 -0
  645. package/.agents/tests/fm-tool-update-check.test.sh +1044 -0
  646. package/.agents/tests/fm-trace-context-lib.test.sh +253 -0
  647. package/.agents/tests/fm-trace-context-spawn.test.sh +581 -0
  648. package/.agents/tests/fm-transition-lib.test.sh +54 -0
  649. package/.agents/tests/fm-turnend-guard.test.sh +1822 -0
  650. package/.agents/tests/fm-update.test.sh +304 -0
  651. package/.agents/tests/fm-vendor-auth-probe.test.sh +395 -0
  652. package/.agents/tests/fm-voice-relay.test.sh +4741 -0
  653. package/.agents/tests/fm-wake-daemon-lifecycle-e2e.test.sh +171 -0
  654. package/.agents/tests/fm-wake-drain-open-decisions-cursor.test.sh +356 -0
  655. package/.agents/tests/fm-wake-drain-open-decisions.test.sh +226 -0
  656. package/.agents/tests/fm-wake-drain-unread-status.test.sh +379 -0
  657. package/.agents/tests/fm-wake-queue.test.sh +1224 -0
  658. package/.agents/tests/fm-watch-arm.test.sh +821 -0
  659. package/.agents/tests/fm-watch-checkpoint.test.sh +87 -0
  660. package/.agents/tests/fm-watch-recovery-loop.test.sh +223 -0
  661. package/.agents/tests/fm-watch-triage.test.sh +3889 -0
  662. package/.agents/tests/fm-watcher-lock.test.sh +1133 -0
  663. package/.agents/tests/fm-x-mode.test.sh +3042 -0
  664. package/.agents/tests/gleipnir-guard-pretool-check.test.sh +51 -0
  665. package/.agents/tests/gleipnir-machine-lock.test.sh +130 -0
  666. package/.agents/tests/herdr-test-safety.sh +42 -0
  667. package/.agents/tests/lib.sh +315 -0
  668. package/.agents/tests/remote-herdr-fixture.sh +125 -0
  669. package/.agents/tests/secondmate-helpers.sh +193 -0
  670. package/.agents/tests/smoke.test.sh +93 -0
  671. package/.agents/tests/wake-helpers.sh +338 -0
  672. package/.agents/tests/zellij-test-safety.sh +60 -0
  673. package/.agents/tools/README.md +10 -0
  674. package/.agents/tools/bin/tasks-cli +267 -0
  675. package/.agents/tools/tasks-cli.ts +216 -0
  676. package/AGENTS.md +454 -0
  677. package/CHANGELOG.md +881 -0
  678. package/LICENSE +1 -1
  679. package/NOTICE +63 -0
  680. package/README.md +113 -59
  681. package/RULES/01-domains.md +51 -0
  682. package/RULES/02-agents.md +78 -0
  683. package/RULES/03-houses.md +61 -0
  684. package/RULES/04-hoard.md +65 -0
  685. package/RULES/05-platforms.md +67 -0
  686. package/RULES/06-append-only.md +58 -0
  687. package/RULES/07-config.md +45 -0
  688. package/RULES/08-delivery-gate.md +75 -0
  689. package/RULES/README.md +20 -0
  690. package/bin/README.md +107 -0
  691. package/bin/a2a-mcp.sh +98 -0
  692. package/bin/a2a-serve.py +103 -0
  693. package/bin/a2a-serve.sh +8 -0
  694. package/bin/a2a-talk.sh +50 -0
  695. package/bin/a2abridge-ensure.sh +108 -0
  696. package/bin/agent-run.sh +43 -0
  697. package/bin/agents-config.sh +233 -0
  698. package/bin/apodex-smoke-test.sh +92 -0
  699. package/bin/bifrost-bridge.sh +112 -0
  700. package/bin/bifrost-ingress.sh +77 -0
  701. package/bin/bootstrap-macos.sh +107 -0
  702. package/bin/bootstrap-windows.ps1 +112 -0
  703. package/bin/branch-guard.sh +64 -0
  704. package/bin/brokk +73 -0
  705. package/bin/brokk-classify-lib.sh +1770 -0
  706. package/bin/brokk-lease-lib.sh +222 -0
  707. package/bin/brokk-lease.sh +193 -0
  708. package/bin/brokk-lint.sh +65 -0
  709. package/bin/brokk-send.sh +38 -0
  710. package/bin/brokk-update.sh +9 -0
  711. package/bin/brokk-wake-grant.sh +127 -0
  712. package/bin/brokk-wake-lib.sh +1849 -0
  713. package/bin/changelog-guard.sh +165 -0
  714. package/bin/crash-sense.sh +160 -0
  715. package/bin/desktop-place.sh +224 -0
  716. package/bin/docs-guard.sh +39 -0
  717. package/bin/editor-place.sh +207 -0
  718. package/bin/eindri-acclaim.sh +34 -0
  719. package/bin/eindri-control.sh +28 -0
  720. package/bin/eindri-role.sh +83 -0
  721. package/bin/eindri-seen.sh +41 -0
  722. package/bin/eindri-send.sh +15 -0
  723. package/bin/eindri-start.sh +85 -0
  724. package/bin/eindri-watch.sh +57 -0
  725. package/bin/einherjar-spawn.sh +576 -0
  726. package/bin/eir-doctor.sh +112 -0
  727. package/bin/erindi-brief.sh +271 -0
  728. package/bin/fleet-apply.sh +68 -0
  729. package/bin/github-deploy.sh +81 -0
  730. package/bin/gjallarhorn-expose.sh +102 -0
  731. package/bin/gjallarhorn-notify.sh +58 -0
  732. package/bin/gjallarhorn-purge.sh +54 -0
  733. package/bin/gjallarhorn-tunnel.sh +72 -0
  734. package/bin/gleipnir-lock-lib.sh +284 -0
  735. package/bin/groa-update.sh +122 -0
  736. package/bin/hall-snapshot.sh +92 -0
  737. package/bin/hamr-harness.sh +246 -0
  738. package/bin/heimdall-ssh-keys.sh +374 -0
  739. package/bin/herdr-agents.py +44 -0
  740. package/bin/herdr-ensure.sh +104 -0
  741. package/bin/herdr-run.sh +431 -0
  742. package/bin/hermes-ensure.sh +88 -0
  743. package/bin/hoard-lib.sh +25 -0
  744. package/bin/hodd.sh +78 -0
  745. package/bin/host-sense.sh +199 -0
  746. package/bin/huginn-research-worker.sh +108 -0
  747. package/bin/local-model-lock.sh +51 -0
  748. package/bin/mimir-bridge.py +226 -0
  749. package/bin/mimir-bridge.sh +87 -0
  750. package/bin/mimir-ingest.sh +131 -0
  751. package/bin/mimir.sh +113 -0
  752. package/bin/mjollnir-webhook.sh +59 -0
  753. package/bin/mjollnir.sh +85 -0
  754. package/bin/model-hardware.sh +82 -0
  755. package/bin/model-resolve.sh +147 -0
  756. package/bin/models-detect.sh +178 -0
  757. package/bin/nornir-cron-start.sh +162 -0
  758. package/bin/nornir-job-daily-briefing.sh +191 -0
  759. package/bin/nornir-job-git-sync.sh +152 -0
  760. package/bin/nornir-job-memory-housekeeping.sh +114 -0
  761. package/bin/nornir-job-observer.sh +166 -0
  762. package/bin/nornir-job-skillopt-sleep.sh +76 -0
  763. package/bin/omarchy-hook-install.sh +60 -0
  764. package/bin/omarchy-install.sh +148 -0
  765. package/bin/omarchy-plugins.sh +174 -0
  766. package/bin/omarchy-sense.sh +149 -0
  767. package/bin/perm-guard.sh +30 -0
  768. package/bin/pi-agent.sh +68 -0
  769. package/bin/pi-ensure.sh +77 -0
  770. package/bin/pi-local.sh +37 -0
  771. package/bin/pi-seat.sh +63 -0
  772. package/bin/prereq-ensure.sh +166 -0
  773. package/bin/private-guard.sh +38 -0
  774. package/bin/project-git.sh +55 -0
  775. package/bin/public-guard.sh +70 -0
  776. package/bin/ratatoskr.sh +49 -0
  777. package/bin/realm-lib.sh +32 -0
  778. package/bin/repo-scrub.sh +62 -0
  779. package/bin/rodd-operational-input.sh +250 -0
  780. package/bin/runes-append.sh +198 -0
  781. package/bin/saga-session-start.sh +172 -0
  782. package/bin/saga-sessionstart-run.sh +79 -0
  783. package/bin/saga-wake-drain.sh +41 -0
  784. package/bin/secret-guard.sh +63 -0
  785. package/bin/sessrumnir-ensure.sh +100 -0
  786. package/bin/sessrumnir-sync.sh +237 -0
  787. package/bin/sessrumnir.sh +91 -0
  788. package/bin/skillopt-setup.sh +76 -0
  789. package/bin/skuld-branch-outcome.sh +203 -0
  790. package/bin/skuld-branch-prompt.sh +101 -0
  791. package/bin/smidja-bootstrap.sh +90 -0
  792. package/bin/smidja-observe.sh +86 -0
  793. package/bin/syn-arm-pretool-check.sh +57 -0
  794. package/bin/syn-asset-pretool-check.sh +76 -0
  795. package/bin/syn-cd-pretool-check.sh +28 -0
  796. package/bin/syn-guard-pretool-check.sh +83 -0
  797. package/bin/syn-turnend-guard.sh +36 -0
  798. package/bin/syn-watch-arm.sh +99 -0
  799. package/bin/tailscale-sync.sh +190 -0
  800. package/bin/telegram-bot.sh +69 -0
  801. package/bin/toolchain.sh +74 -0
  802. package/bin/utgard.sh +111 -0
  803. package/bin/valhalla.sh +115 -0
  804. package/bin/valknut-load.sh +260 -0
  805. package/bin/vor-crew-state.sh +124 -0
  806. package/bin/wedge-notify.sh +47 -0
  807. package/bin/workspace-provision.sh +80 -0
  808. package/bin/workspace-rag.sh +150 -0
  809. package/bin/wyrd-db.sh +47 -0
  810. package/bin/yggdrasil.sh +152 -0
  811. package/bin/ymir-edit.sh +145 -0
  812. package/bin/ymir-install.sh +641 -0
  813. package/bin/ymir-invite.sh +93 -0
  814. package/bin/ymir-isolation.sh +88 -0
  815. package/bin/ymir-migrate.sh +61 -0
  816. package/bin/ymir-platform.sh +348 -0
  817. package/bin/ymir-say.sh +97 -0
  818. package/bin/ymir-setup-auth.sh +108 -0
  819. package/bin/ymir-validate.sh +173 -0
  820. package/bin/ymir.js +74 -16
  821. package/docs/Architecture.md +339 -0
  822. package/docs/design.md +351 -0
  823. package/docs/installations/README.md +63 -0
  824. package/docs/installations/ymir-home.md +93 -0
  825. package/docs/integration.md +105 -0
  826. package/docs/lore.md +1056 -0
  827. package/docs/research/agent-harnesses.md +290 -0
  828. package/docs/runbooks/README.md +19 -0
  829. package/docs/runbooks/a2a.md +91 -0
  830. package/docs/runbooks/agent-permissions.md +99 -0
  831. package/docs/runbooks/agents.md +57 -0
  832. package/docs/runbooks/models.md +69 -0
  833. package/docs/runbooks/realm-onboarding.md +60 -0
  834. package/docs/runbooks/secrets-and-hoard.md +60 -0
  835. package/docs/runbooks/updates-and-migrations.md +110 -0
  836. package/docs/runbooks/worktrees-isolation.md +72 -0
  837. package/docs/session-start.md +105 -0
  838. package/docs/skillopt-integration.md +321 -0
  839. package/docs/sync-system.md +66 -0
  840. package/docs/workspaces.md +104 -0
  841. package/docs/ymir-rut.md +260 -0
  842. package/package.json +44 -14
  843. package/packaging/build.sh +74 -0
  844. package/packaging/macos/Ymir Installer.command +43 -0
  845. package/packaging/windows/ymir-setup.nsi +74 -0
  846. package/scripts/README.md +22 -0
  847. package/scripts/electron.sh +210 -0
  848. package/scripts/start.sh +167 -0
  849. package/scripts/stop.sh +113 -0
  850. package/install.sh +0 -35
package/docs/design.md ADDED
@@ -0,0 +1,351 @@
1
+ # YMIR — Design Document
2
+
3
+ > **Status:** v1.1 · owner: Brokk · applies to Hlidskjalf (React), Smíðja's eye
4
+ > (Vue), Sessrúmnir (Electron/Tailwind), all Norse surfaces, and the houses.
5
+ > Sources: Ymir Rut v2.6 (`docs/ymir-rut.md` Part 3), the mythos (`docs/lore.md`),
6
+ > the UI/UX-is-a-differentiator doctrine (ENTRY-008), the stack ruling
7
+ > (ENTRY-009/010), and **the carved cloth of the halls** — the landing page's
8
+ > `:root` (`CodeP/ymir-homepage/src/lore.html`), which is the reference every
9
+ > value below is cut from.
10
+ > Implementation: design tokens live in `midgard/design-system/tokens.css`
11
+ > (consumed by React and Vue apps); Sessrúmnir carries the same values in its
12
+ > Tailwind `@theme` and in the `sessrumnir`/`fensalir` theme files.
13
+
14
+ ---
15
+
16
+ ## 0. The cloth — one look, one source
17
+
18
+ Every hall wears the same cloth: **stone and bone, bronze and blood**, with the
19
+ three faces **Cormorant** (display), **Newsreader** (body) and **IBM Plex Mono**
20
+ (data). The reference is the landing page's `:root`; the apps carry it through
21
+ thin adapters, never by hand-copying a colour:
22
+
23
+ | Surface | Adapter | Where the values live |
24
+ |---|---|---|
25
+ | Landing page | the source | `CodeP/ymir-homepage/src/lore.html` `:root` |
26
+ | Óðrerir (Live Hall) | locked copy | `apps/odrerir/src/styles/cloth.css` (extracted; stands alone) |
27
+ | Hlidskjalf | `--ymir-*` token names | `midgard/design-system/tokens.css` |
28
+ | Smíðja's eye | `--bg/--panel/--text/--accent…` | `apps/visualizer/src/style.css` (`:root`) |
29
+ | Sessrúmnir | semantic `--color-*` (pi-theme/v1) | `src/renderer/src/index.css` `@theme` + `themes/fensalir.json` |
30
+
31
+ Two rules hold the cloth honest:
32
+
33
+ 1. **The cloth is the default, not a cage.** A user theme, an accent preset, or
34
+ Smíðja's `data-theme="classic"` / `"high-contrast"` (WCAG AAA) always wins
35
+ when chosen. Sessrúmnir's `fensalir` and `sessrumnir` built-ins are the cloth
36
+ under two names, held identical by test.
37
+ 2. **Heraldry is not chrome.** House/domain seals (the eight accents) and the
38
+ Emblem keep their own colours — the landing page keeps its house seals too.
39
+ Chrome — canvas, text, borders, accent, state — is the cloth.
40
+
41
+ A colour is never written at a call site: components read tokens (or
42
+ `text-inverse` on a filled plate). Selection is part of the cloth too: the
43
+ landing's amber `#57411a` on pale bone `#f0e6cd`.
44
+
45
+ ---
46
+
47
+ ## 1. Philosophy — Carved, not skinned
48
+
49
+ Ymir's UI is not decoration bolted onto a system; it is **forged from the same
50
+ allegory the system runs on**. Every pixel should feel as if it were carved from
51
+ the giant's bones, hammered in a Svartalfaheim forge, lit by Bifrost transit
52
+ beams. The design behaves the way the system behaves:
53
+
54
+ - **Forged, not painted** — bevels, chiseled edges, material depth. Nothing
55
+ floats; everything sits.
56
+ - **The well is visible** — memory, telemetry, and audit are first-class surface,
57
+ never hidden behind "settings".
58
+ - **The forge stays hot** — status is instant, truthful, and always on screen.
59
+ - **Quiet strength** — high legibility, low noise. This is an instrument panel
60
+ for a single operator running everything.
61
+
62
+ Design decisions always answer: *"would a dwarf smith build it this way?"*
63
+
64
+ ---
65
+
66
+ ## 2. Brand Identity
67
+
68
+ ### 2.1 Emblem — the Ymir Root Mark
69
+
70
+ The mark combines two glyphs:
71
+
72
+ - **Algiz (ᛉ)** — the rune of protection and the branching *worker stems* of the
73
+ agent tree (also evokes Yggdrasil spreading from the root).
74
+ - **Blacksmith anvil base** — industrial strength, heavy compute, the forge from
75
+ which every artifact is shaped.
76
+
77
+ Construction rules:
78
+ - Dual-layer chiseled bevel: dark iron exterior `#334155`, luminous cyan inner
79
+ edge `#7dd3fc`. The **Emblem is brand, not cloth** — it keeps its own colours on
80
+ every surface, exactly as the landing page keeps it (a blue mark on the stone).
81
+ - One emblem per context; never gradient-bloated, never filled with imagery.
82
+ - On dark obsidian surfaces: cyan-lit variant. On light surfaces: steel variant
83
+ with indigo edge.
84
+ - Favicon = the rune alone, 24–32px, stroke weight 2.
85
+
86
+ ### 2.2 Houses — brands within the brand
87
+
88
+ Each house carries the myth that names it and a **house accent** for seals,
89
+ tags, and portal theming (proposed accents — ENTRY-004 mapping):
90
+
91
+ | House | Name-sake | House accent |
92
+ |---|---|---|
93
+ | Ymir Labs | the giant | cyan `#38bdf8` |
94
+ | Brokk Forge | the bellows-smith | forge amber `#f59e0b` |
95
+ | Runestone Labs (Runir) | the runes | rune crimson `#f43f5e` |
96
+ | Muninn Labs | the raven (memory) | raven violet `#8b5cf6` |
97
+ | Dvalin | the dwarf craftsman | cold steel `#94a3b8` |
98
+ | Utgard Studios | the giant-realm | jötun magenta `#d946ef` |
99
+ | Askr | the first man | ash green `#34d399` |
100
+ | Mannheim | *(reserved)* | slate `#64748b` |
101
+
102
+ House accents are **structural only** — tags, entity headers, chart series —
103
+ never the page chrome, and they are **heraldry, not cloth**: they keep their own
104
+ colours exactly as the landing page keeps its house seals, while the chrome
105
+ around them wears the cloth (§4.2). The same eight accents are the agent
106
+ **domains** in Hlidskjalf (`src/data/realms.ts` → `DOMAINS`).
107
+
108
+ ---
109
+
110
+ ## 3. Design Principles
111
+
112
+ 1. **The giant is the frame** — one body, many realms. One visual system across
113
+ every tenant; a realm is a *view*, not a redesign.
114
+ 2. **Truth over ornament** — telemetry and logs render exactly as they are. No
115
+ fake glow, no invented metrics. Traceability index is a real number on screen.
116
+ 3. **Status is ambient** — NOMINAL / DEGRADED / DOWN is readable at a glance
117
+ from across the room (color + glyph + text, never color alone).
118
+ 4. **The well is a first-class citizen** — recall results, episodes, and timeline
119
+ render inline, not in a hidden drawer.
120
+ 5. **Isolation by default** — realms are visually distinct (borders, subtle
121
+ tint), never commingled. A user must *feel* which realm they're in.
122
+ 6. **Motion explains, never decorates** — transitions trace real data flow
123
+ (task state changes, message hops). ~150–240ms, linear-ish, no bounce.
124
+ 7. **Dense but calm** — keyboard-first, mono for data, generous breathing room
125
+ for narrative text.
126
+
127
+ ---
128
+
129
+ ## 4. Visual Language
130
+
131
+ ### 4.1 Typography
132
+
133
+ | Role | Face | Use |
134
+ |---|---|---|
135
+ | Display & runes | **Cormorant** (runic glyphs fall through to **Noto Sans Runic**) | page titles, section headers, the emblem wordmark, runic seals |
136
+ | Code, telemetry, metrics | **IBM Plex Mono** | all data: logs, IDs, states, timestamps, task/agent names, CLI |
137
+ | Body & UI | **Newsreader** | description text, labels, buttons, body of narratives, docs |
138
+
139
+ Scale (reference — fluid via clamp()):
140
+
141
+ | Token | Size / Line-height | Used for |
142
+ |---|---|---|
143
+ | s-mono-s | 12 / 16 | timestamps, badges |
144
+ | s-mono-m | 14 / 20 | telemetry, task IDs |
145
+ | s-mono-l | 18 / 24 | hero metrics (traceability index) |
146
+ | s-display | 28–44 / 1.1 | realm/page titles |
147
+ | s-body | 15 / 22 | descriptions |
148
+ | s-caption | 13 / 18 | secondary notes |
149
+
150
+ Rules: metrics are **always** IBM Plex Mono (tabular numerals enabled);
151
+ runes/glyphs fall through to the rune family inside every stack; never mix faces
152
+ mid-line. Title case stays short — one lyric line, then the deck explains.
153
+
154
+ ### 4.2 Color system
155
+
156
+ The cloth (dark = the forge theme, canonical; values cut from the landing page's
157
+ `:root`):
158
+
159
+ **Canvas (the stone)**
160
+
161
+ | Token | Value | Role |
162
+ |---|---|---|
163
+ | `--ymir-bg-0` | `#0e0c09` | stone — deepest canvas, app shell |
164
+ | `--ymir-bg-1` | `#151209` | panel surface |
165
+ | `--ymir-bg-2` | `#1a1610` | elevated surface, cards |
166
+ | `--ymir-bg-3` | `#221d14` | hover, wells |
167
+
168
+ **Accents (the bronze light of the forge)**
169
+
170
+ | Token | Value | Role |
171
+ |---|---|---|
172
+ | `--ymir-cyan-1` | `#c9973f` | bronze — primary accent, active states, focus ring, links |
173
+ | `--ymir-cyan-2` | `#7d5f2a` | bronze-deep — hover/darker accent |
174
+ | `--ymir-violet-1` | `#96a0a8` | steel — realm identity, secondary accent |
175
+ | `--ymir-violet-2` | `#5f686e` | steel-dim |
176
+
177
+ **Structure (bone and brass)**
178
+
179
+ | Token | Value | Role |
180
+ |---|---|---|
181
+ | `--ymir-steel-1` | `#2b241a` | line — borders, bevel exteriors |
182
+ | `--ymir-steel-2` | `#7d5f2a` | bronze-deep — stronger rules, dividers |
183
+ | `--ymir-steel-3` | `#9a8f75` | bone-dim — secondary text, muted glyphs |
184
+ | `--ymir-chisel` | `#c9973f` | bronze — the lit chisel edge (emblem, focus) |
185
+
186
+ **Semantics (state of the forge)**
187
+
188
+ | Token | Value | Meaning |
189
+ |---|---|---|
190
+ | `--ymir-ok` | `#96a0a8` | NOMINAL (steel — the metal proved true) |
191
+ | `--ymir-warn` | `#c9973f` | DEGRADED (bronze — hot, heed it) |
192
+ | `--ymir-danger` | `#c2584a` | DOWN / sealed (blood-lit) |
193
+ | `--ymir-info` | `#9a8f75` | transit / neutral-inform (bone-dim) |
194
+ | `--ymir-ok-dim` | `rgba(150,160,168,.15)` | background wash of the above, same pattern for warn/danger/info |
195
+
196
+ **Text on stone**
197
+
198
+ | Token | Value | Role |
199
+ |---|---|---|
200
+ | `--ymir-text-0` | `#cfc3a9` | bone — primary text |
201
+ | `--ymir-text-1` | `rgba(207,195,169,.82)` | bone, blunted — secondary text |
202
+ | `--ymir-text-2` | `#9a8f75` | bone-dim — tertiary, disabled |
203
+ | `--ymir-text-3` | `#6b6250` | bone-faint — placeholder |
204
+
205
+ **Selection** (all surfaces): amber `#57411a` on pale bone `#f0e6cd` — the
206
+ landing's own selection. In Sessrúmnir it is a theme token
207
+ (`--color-selection-bg`/`-fg`), so a user theme derives its own tint from its
208
+ accent; the cloth themes pin the landing's amber.
209
+
210
+ Contrast: `--ymir-text-0` on `--ymir-bg-1` ≈ 10:1; body 15px meets WCAG AA
211
+ everywhere; never put bronze text on bronze.
212
+
213
+ ### 4.3 Space & grid
214
+
215
+ - Base unit **4px**; 8px rhythm for layout.
216
+ - Panel padding `--ymir-space-4: 16px`; page gutter 24–48.
217
+ - Max content width 1440; density slider for the data views (comfortable ↔ compact).
218
+ - Components: radius `--ymir-radius: 8px` (panels 12px), 1px line borders,
219
+ inset shadows to sell the carved edge: `inset 0 0 0 1px rgba(201,151,79,.12)`
220
+ (a brass hairline inside the stone).
221
+ - Geometry is unchanged by the cloth: the carved-slate **squaring** (radius 2–3px
222
+ across the apps and the seat) is an open question, not yet decided.
223
+
224
+ ### 4.4 Iconography & glyphs
225
+
226
+ - **Runecoded, not emoji.** A minimal, hand-drawn-style rune set replaces emoji
227
+ in all UI: 16×16 and 24×24 grid, 2px stroke, chisel bevel on primary.
228
+ - System subsystems each carry one rune-glyph (reuse Algiz-family geometry:
229
+ Bifrost gate, Ratatoskr squirrel, the Well). Map is in `midgard/design-system/icons.md` (TBD) — created from this doc.
230
+ - Status dot: filled rune ring (ok) / half-ring (warn) / broken ring (danger), never color-only.
231
+
232
+ ### 4.5 Surface & texture
233
+
234
+ - Background treatment: **hand-hammered steel** (very subtle noise/specular ~2%),
235
+ and the **crystalline icosahedral grid** for hero/brand areas only (3–5% opacity).
236
+ - Emblem renders with the chisel bevel; body surfaces stay flat — motif stops at
237
+ the chrome, never behind text.
238
+
239
+ ### 4.6 Motion
240
+
241
+ | Context | Pattern | Duration |
242
+ |---|---|---|
243
+ | Task state change | fade + 2px upward drift on the state chip | 180ms |
244
+ | Message hop (Ratatoskr) | light dash along the fleet edge | 220ms |
245
+ | Panel reveal | mask + slight scale 0.99→1 | 160ms |
246
+ | Metric tick | IBM Plex Mono numeric roll (monospace, tabular) | 240ms |
247
+ | Loading | screen of the forge (glowing ember + rune), not a spinner wheel | — |
248
+
249
+ Honor `prefers-reduced-motion`: all transforms collapse to fades ≤120ms.
250
+
251
+ ---
252
+
253
+ ## 5. UI System — Hlidskjalf (React/Vue)
254
+
255
+ ### 5.1 App shell
256
+
257
+ - Left rail: emblem + the **7 realm gates** (click = realm switch), collapsed to
258
+ rune-only at <900px.
259
+ - Top bar: current realm chip (house accent + tenant name), global search
260
+ (realm-scoped), traceability index chip (live), the three-hall switcher, the
261
+ **To the Hall** door to the Óðrerir Live Hall (new tab: local `:4322` when the
262
+ host starts with `localhost`/`127.0.0.1`, else the public hall), user menu.
263
+ - Main stage: modal-free; views are full panels with a persistent **bottom stream**:
264
+ Ratatoskr messages + Runes entries in one mono stream (pausable).
265
+
266
+ Views: **Fleet** (agents/cards) · **Tasks** (A2A lifecycle board) · **Well**
267
+ (memory recall/timeline/observe) · **Runes** (ledger) · **Reviews** (PR cards) ·
268
+ **Processes** (Valhalla) · **Files** (Skrymir) · **Chat** (OmniChat drawer).
269
+
270
+ ### 5.2 Reusable components (token-driver)
271
+
272
+ | Component | Spec |
273
+ |---|---|
274
+ | `RealmGate` | rune + label + subtle realm tint; active = bronze chisel ring |
275
+ | `AgentCard` | Agent Card JSON rendered: name, capabilities, skills, interface, status dot, house seal |
276
+ | `TaskChip` | A2A state: SUBMITTED→WORKING→terminal; color + rune + label (never color alone) |
277
+ | `TraceRow` | mono line: ts · agent · module · event · checksum |
278
+ | `RecallPanel` | query + ranked episodes (score bar = cyan), timeline view |
279
+ | `MetricTile` | mono number + delta + sparkline; beveled panel |
280
+ | `RuneTag` | house/label pills using house accents |
281
+ | `PRCard` | title, checklist progress, CI runes, review actions (Glitnir) |
282
+
283
+ All components read tokens from `tokens.css`; color-only states are forbidden
284
+ (append a rune glyph + text).
285
+
286
+ ### 5.3 Data visualization
287
+
288
+ - Charts: thin 2px bronze/steel lines, no 3D, no pie explosions; gridlines at
289
+ `--ymir-steel-2` 12% opacity.
290
+ - Series color order: bronze → steel → bone → blood-lit → bronze-deep.
291
+ - Fleet graph: nodes = Agent Cards, edges = A2A task hops; edge dashes animate on
292
+ activity; node ring = status.
293
+ - Trace/timeline: JetBrains Mono; branch/merge glyphs reused from Yggdrasil theme.
294
+
295
+ ### 5.4 Identity & accounts (the gate)
296
+
297
+ - The gate is closed by default once a credential or account exists: every
298
+ `/api/*` route (and the Smíðja host) needs an httpOnly `ymir_session` cookie.
299
+ Only `/api/login`, `/api/register`, `/api/session`, `/api/logout` and
300
+ `/api/health` ride outside it.
301
+ - **Operator credential** (`HLIDSKJALF_AUTH="user:pass"` from `.env.local`,
302
+ never inline) opens the gate and seeds the allfather account row.
303
+ - **Invite-gated registration** (`bin/ymir-invite.sh`): a code with a use-limit
304
+ is minted when nothing is live (idempotent) and printed at the end of an
305
+ install. `register` re-checks the invite under a re-read of the store, so two
306
+ simultaneous registrations cannot both spend the last use. Account passwords
307
+ are argon2id-hashed and land in `state/accounts.json` (mode 0600, gitignored).
308
+ **Sessions are in-memory only** (a `token → login` map) and exist solely as the
309
+ httpOnly `ymir_session` cookie — no session file and no header credential, so
310
+ there is no bearer at rest to replay and no file that can claim a session; a
311
+ gate restart ends them. Other surfaces verify live against the gate.
312
+ - **GitHub sign-in** is the same gate by another door, once
313
+ `GITHUB_CLIENT_ID`/`GITHUB_CLIENT_SECRET` are set (`ymir_oauth_state` cookie,
314
+ 10-minute window).
315
+ - Sessions are httpOnly `ymir_session` cookies, SameSite=Lax, 30-day Max-Age.
316
+ - Heimdall (oauth2-proxy) remains the production road: httpOnly session cookie
317
+ with the same shape, so the client swap is mechanical.
318
+
319
+ ---
320
+
321
+ ## 6. Content & voice
322
+
323
+ - **Short, operational, zero flair.** "Task failed. Diagnosis: json_contract.
324
+ Retried as 6f1a." — not "We encountered an unexpected issue."
325
+ - Headings read like commands; decks read like log lines.
326
+ - Rune labels double as keyboard hints (`ᛉ` = Algiz/protect, used for "seal/approve").
327
+
328
+ ---
329
+
330
+ ## 7. Accessibility & implementation notes
331
+
332
+ - AA contrast enforced (tokens guarantee it), focus = bronze chisel ring, target
333
+ size ≥44px, keyboard-first with all views reachable.
334
+ - React and Vue consume the **same cloth** — no per-framework color drift.
335
+ `tokens.css` is the single source for both; component styling via CSS vars,
336
+ not hardcoded hex. Sessrúmnir's equivalent is its `@theme` block plus
337
+ `themes/fensalir.json`, held identical by test.
338
+ - Agents (Brokk/Eindri) generate UI from **Agent Cards and task JSON** — the
339
+ design system guarantees any agent-produced surface is on-brand without a
340
+ designer in the loop.
341
+
342
+ ---
343
+
344
+ ## 8. Files
345
+
346
+ - `docs/design.md` — this document (master).
347
+ - `midgard/design-system/tokens.css` — the consumable design tokens.
348
+ - `midgard/design-system/icons.md` — rune-glyph map (to create).
349
+ - `docs/ymir-rut.md` Part 3 — the original Rut design-system specification this
350
+ document implements.
351
+ - `docs/lore.md` §VI — house lineage behind the house accents.
@@ -0,0 +1,63 @@
1
+ # Installations — the engines and tools Ymir adopts
2
+
3
+ Extra installations beyond the base runtime. **Open-source first:** every entry
4
+ is a validated OSS project (or SDK) under a Norse shell, or a first-party tool the
5
+ agents drive. Keys live at `$YMIR_HOME/secrets/platform.env` — **never inline**.
6
+
7
+ See [`ymir-home.md`](ymir-home.md) for the `$YMIR_HOME` data layout and env var contract.
8
+
9
+ ```
10
+ installations[15]{tool,role,oss,install,used_by}:
11
+ "treehouse","worktree pool (Yggdrasil)","kunchenguid/treehouse","curl -fsSL https://kunchenguid.github.io/treehouse/install.sh | sh","yggdrasil.sh · Eindri workers"
12
+ "sandcastle","sandbox engine (Utgard)","mattpocock/sandcastle","npm i @ai-hero/sandcastle","utgard.sh · einherjar-spawn"
13
+ "no-mistakes","clean-PR gate (Mjollnir/Glitnir)","kunchenguid/no-mistakes","curl -fsSL https://raw.githubusercontent.com/kunchenguid/no-mistakes/main/docs/install.sh | sh","mjollnir.sh (mode no-mistakes)"
14
+ "hermes","worker agent runtime","NousResearch/hermes-agent","curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash","bin/hermes-ensure.sh"
15
+ "opendesign","design engine (Hnoss)","nexu-io/open-design","od mcp install <agent>","skills/hnoss · design Eindri"
16
+ "firecrawl","web crawl/scrape","firecrawl.dev","pip install firecrawl-py","skills/bragi (research/SEO)"
17
+ "scrapy","optional scraper (large/custom crawls)","scrapy.org","pip install scrapy","skills/bragi (optional)"
18
+ "browser-use","agentic browser","browser-use/browser-use","pip install browser-use","skills/bragi (publish/post)"
19
+ "chrome-devtools","browser debugging","developer.chrome.com/docs/devtools","Chrome DevTools MCP / built-in","Sindri (developer craft)"
20
+ "engdbram","the well (Mimirsbrunn) — module name is engram","engdbram","bin/prereq-ensure.sh engram (pip install --user engdbram; NOT the PyPI 'engram', which is a renderer)","bin/mimir-bridge.py · well"
21
+ "mcp","MCP SDK (engram-mcp needs <2)","modelcontextprotocol","pip install --user --break-system-packages 'mcp<2'","engram MCP for all harnesses"
22
+ "electron","desktop shell","electron","npm i -D electron@^33","apps/hlidskjalf/electron · scripts/electron.sh"
23
+ "capacitor","mobile APK shell","capacitor","npm i @capacitor/core @capacitor/android @capacitor/cli","apps/hlidskjalf/android"
24
+ "cloudflared","tunnel (Gjallarhorn)","cloudflare/cloudflared","(system package)","bin/gjallarhorn-tunnel.sh"
25
+ "jdk17","Android build toolchain","Adoptium Temurin 17","user-space tarball → ~/.local/jdk-17","gradlew assembleDebug"
26
+ ```
27
+
28
+ ## Engine installs (one command)
29
+
30
+ ```sh
31
+ bin/ymir-install.sh # prereqs, tree, engines, hermes, sandbox, memory, loaders, services
32
+ ```
33
+
34
+ `bin/ymir-install.sh` self-heals the fixable gaps (`engram`, `mcp<2`, `treehouse`,
35
+ `no-mistakes`, **Hermes**) and reports the system-level ones (`git`, `python3`,
36
+ `bun`, `docker`, `gh`). See [`../.agents/skills/galdr-ymirsystem/assets/installation.md`].
37
+
38
+ ## Per-skill engines
39
+
40
+ - **Hnoss** (design) → **OpenDesign**: `od mcp install opencode` / `pi` / `hermes`.
41
+ - **Bragi** (marketing) → **Firecrawl** + **browser-use**:
42
+ `pip install firecrawl-py browser-use`; `FIRECRAWL_API_KEY` in `.env.local`.
43
+ - **Sindri** (developer) → **Chrome DevTools** — for inspecting, profiling, and
44
+ debugging the running app: [developer.chrome.com/docs/devtools](https://developer.chrome.com/docs/devtools)
45
+ (Elements, Network, Performance, Sources, Console, Application, Lighthouse,
46
+ and the Chrome DevTools **MCP** for agent-driven inspection).
47
+
48
+ ## Mobile / desktop / tunnel
49
+
50
+ - **Capacitor** wraps the Hlidskjalf SPA into an Android APK
51
+ (`apps/hlidskjalf/android`); rebuild with `./gradlew assembleDebug` (needs
52
+ JDK 17 + Android SDK — see `docs/installations/`).
53
+ - **Electron** is the desktop shell (`scripts/electron.sh`).
54
+ - **cloudflared** exposes Hlidskjalf at your own hostname (`YMIR_TUNNEL_HOST`)
55
+ (`bin/gjallarhorn-tunnel.sh`); cache purge needs `CLOUDFLARE_API_TOKEN`.
56
+
57
+ ## Rules
58
+
59
+ 1. **OSS first.** Adopt the validated engine; never rebuild what exists.
60
+ 2. **Keys via env.** `FIRECRAWL_API_KEY`, `OD_API_TOKEN`, `CLOUDFLARE_API_TOKEN`,
61
+ provider keys — `$YMIR_HOME/secrets/platform.env` only.
62
+ 3. **No mock.** A tool reported present must be real; `bin/ymir-install.sh --check`
63
+ tells the truth.
@@ -0,0 +1,93 @@
1
+ # YMIR_HOME — the private data root
2
+
3
+ All private user data lives at **`$YMIR_HOME`** (default `~/Documents/Ymir`).
4
+ The open-source repo contains **only** public artifacts (source code, docs,
5
+ examples). No secrets, no identity, no state.
6
+
7
+ ## Environment Variables
8
+
9
+ | Variable | Purpose | Default |
10
+ |----------|---------|---------|
11
+ | `YMIR_HOME` | Root of all private user data | `~/Documents/Ymir` |
12
+ | `YMIR_HOARD` | Alias for `$YMIR_HOME` (legacy compat) | `$YMIR_HOME` |
13
+ | `YMIR_AGENTS_YAML` | Path to agent/harness config | `$YMIR_HOME/config/agents.yaml` |
14
+ | `YMIR_SECRETS_DIR` | Path to secrets | `$YMIR_HOME/secrets` |
15
+ | `YMIR_IDENTITY_DIR` | Path to identity registries | `$YMIR_HOME/identity` |
16
+ | `YMIR_WORKSPACES_DIR` | Path to workspaces | `$YMIR_HOME/workspaces` |
17
+ | `YMIR_MEMORY_DIR` | Path to memory/well | `$YMIR_HOME/memory` |
18
+ | `YMIR_SMIDJA_DIR` | Path to smidja DB | `$YMIR_HOME/smidja` |
19
+ | `YMIR_STATE_DIR` | Path to runtime state | `$YMIR_HOME/state` |
20
+ | `YMIR_DATA_DIR` | Path to operational data | `$YMIR_HOME/data` |
21
+
22
+ ## Sourcing Convention
23
+
24
+ Every script that needs private paths declares YMIR_HOME at the top:
25
+
26
+ ```bash
27
+ YMIR_HOME="${YMIR_HOME:-$HOME/Documents/Ymir}"
28
+ [ -d "$YMIR_HOME" ] || { echo "error: YMIR_HOME not set or not a directory" >&2; exit 1; }
29
+ ```
30
+
31
+ Private paths then resolve as `${YMIR_HOME}/<subdir>` — no hardcoded paths.
32
+
33
+ ## Per-Machine Env Profile
34
+
35
+ The installer writes `$YMIR_HOME/env.sh` which users source in their shell:
36
+
37
+ ```bash
38
+ # $YMIR_HOME/env.sh — source this for Ymir CLI access
39
+ export YMIR_HOME="$HOME/Documents/Ymir"
40
+ export YMIR_HOARD="$YMIR_HOME"
41
+ export YMIR_AGENTS_YAML="$YMIR_HOME/config/agents.yaml"
42
+ export YMIR_SECRETS_DIR="$YMIR_HOME/secrets"
43
+ export YMIR_IDENTITY_DIR="$YMIR_HOME/identity"
44
+ export YMIR_WORKSPACES_DIR="$YMIR_HOME/workspaces"
45
+ export YMIR_MEMORY_DIR="$YMIR_HOME/memory"
46
+ export YMIR_SMIDJA_DIR="$YMIR_HOME/smidja"
47
+ export YMIR_STATE_DIR="$YMIR_HOME/state"
48
+ export YMIR_DATA_DIR="$YMIR_HOME/data"
49
+ ```
50
+
51
+ ## Layout
52
+
53
+ ```
54
+ $YMIR_HOME/
55
+ ├── config/
56
+ │ ├── agents.yaml # Private agent/harness/model config
57
+ │ └── agents.<host>.yaml # Per-machine overlay
58
+ ├── secrets/
59
+ │ └── platform.env # All .env.local values (referenced, never inlined)
60
+ ├── identity/
61
+ │ ├── workspaces.yaml # Workspace registry
62
+ │ ├── projects.yaml # Project registry (git{} blocks, auth refs)
63
+ │ └── companies/ # Company entities (private)
64
+ ├── workspaces/
65
+ │ ├── work/ # company, marketing, development, life
66
+ │ └── personal/ # me, life, development
67
+ ├── memory/
68
+ │ ├── daily/ # Daily briefings
69
+ │ └── well/ # Mimirsbrunn append log
70
+ ├── smidja/
71
+ │ └── smidja.db* # Smidja session database
72
+ ├── state/ # Runtime state (locks, pids, cron)
73
+ ├── data/ # Operational data (backlog, fleet, learnings)
74
+ ├── .gitignore # Ignores smidja/, state/, *.wal, *.shm
75
+ └── .ymir-layout.yaml # Layout record (migration origin, github_repo)
76
+ ```
77
+
78
+ ## Single Private Git Repo
79
+
80
+ The entire `$YMIR_HOME` is one git repo pushed to a **private GitHub repo**
81
+ for multi-machine sync. Secrets (`platform.env`) live in that private repo —
82
+ safe because only the user (and their authorized machines) can clone it.
83
+ No local encryption needed.
84
+
85
+ Smidja DB, runtime state, and local overlays are gitignored within the
86
+ private repo (rebuilt per machine).
87
+
88
+ ## Backwards Compatibility
89
+
90
+ Scripts fall back to `$ROOT/hodd` (legacy Hoard in repo) when
91
+ `YMIR_HOARD` and `YMIR_HOME` are both unset. The migration script
92
+ (`bin/ymir-migrate.sh private-data`) copies data to `$YMIR_HOME` and
93
+ writes `.ymir-layout.yaml`.
@@ -0,0 +1,105 @@
1
+ # Integrating Ymir into an existing harness workflow
2
+
3
+ > **Purpose:** add Ymir (Brokk, the memory well, the A2A mesh, the Hlidskjalf
4
+ > control plane) to a machine that already runs agent harnesses and other MCP
5
+ > servers — **without touching the global configuration** of those harnesses.
6
+ > Project-scoped, additive, one-command rollback. Obeys Rule 05 (portability) and
7
+ > Rule 07 (no hardcoded config).
8
+
9
+ ## The stance
10
+
11
+ Ymir's harness wiring lives **inside the checkout**: `.opencode/plugins/*.js` (the
12
+ Brokk adapters) and the project `opencode.json` / `.pi/mcp.json`. A harness that
13
+ merges project config with global config therefore gains Ymir **only when opened
14
+ in the Ymir directory**; every other project is untouched.
15
+
16
+ ## Three planes
17
+
18
+ | Plane | What | Where |
19
+ |---|---|---|
20
+ | Substrate | the runtime, services, cron | the box (bare, or a Quadlet/compose container) |
21
+ | MCP surfaces | the memory well (`engram`) + the mesh (`a2abridge`) | project config |
22
+ | Control plane | Hlidskjalf | the substrate's published port |
23
+
24
+ ## Wire it (project-scoped)
25
+
26
+ ```bash
27
+ cd <ymir-checkout>
28
+ bin/prereq-ensure.sh engram # the well engine (if absent)
29
+ bin/a2abridge-ensure.sh ensure --install # the A2A mesh engine + directory daemon
30
+ bin/a2a-mcp.sh install --project # writes THIS repo's config only: engram + a2abridge
31
+ bin/a2a-mcp.sh show --project # verify
32
+ bin/valknut-load.sh --opencode # bind Ymir's agents/skills into OpenCode
33
+ ```
34
+
35
+ `bin/a2a-mcp.sh install` (no `--project`) also writes Pi's **global**
36
+ `~/.pi/agent/mcp.json`. When Pi is used in other areas, prefer `--project`: it
37
+ writes the repo's `.pi/mcp.json` instead, and Pi picks it up only when launched
38
+ with `pi --mcp-config .pi/mcp.json`.
39
+
40
+ ### Order matters
41
+
42
+ `bin/valknut-load.sh --opencode` renders the project `opencode.json` from its
43
+ `.example`; run it **before** `bin/a2a-mcp.sh install --project` so the MCP block
44
+ is not overwritten. `bin/agents-config.sh apply` merges in local providers and
45
+ should also run before the MCP install.
46
+
47
+ ## Models
48
+
49
+ `config/agents.yaml` (private, gitignored) is the roster: local providers, the
50
+ default model, and per-agent `model:`/`harness:`. `bin/models-detect.sh` reports
51
+ what is running; `bin/agents-config.sh apply` writes the local providers into the
52
+ project `opencode.json` and the chosen `model:` into `.agents/agents/*.md`. Rule:
53
+ local models via `pi`, hosted via `opencode` — an agent may override `harness:`.
54
+
55
+ ## Seating Brokk
56
+
57
+ The adapters are **path-loaded**: open the harness with the checkout as the working
58
+ directory. OpenCode's `.opencode/plugins/` then seat Brokk (Sága's digest arrives
59
+ before the first turn), arm Sýn, guard the turn end, and enforce the PreToolUse
60
+ seatbelts. There is **no Brokk adapter for Zed** — Zed gets the memory plane only
61
+ (add the well as a context server, mirroring any other MCP entry).
62
+
63
+ ## Working across repositories
64
+
65
+ Ymir binds to **one home**, and the machine has **one Brokk primary**:
66
+
67
+ - The primary's helm is a **machine-global** lock
68
+ (`${XDG_STATE_HOME:-$HOME/.local/state}/ymir/brokk.lock`). A second Brokk session
69
+ anywhere is read-only; an *Eindri-home* (a worker home) keeps its own per-home
70
+ lock and runs beside the primary.
71
+ - A pane in another repository does **not** auto-seat Brokk — the adapter lives in
72
+ the Ymir checkout. Panes elsewhere are for observation and terminal work.
73
+ - To have Ymir **work** another project, dispatch it:
74
+ `bin/einherjar-spawn.sh <task-id> <project-dir>` creates an Yggdrasil worktree of
75
+ that project and seats the worker pane there. Herdr panes carry their own cwd
76
+ (`bin/herdr-run.sh seat_tab <name> <cwd>`), so the pane layout is unchanged.
77
+
78
+ Hlidskjalf is the Ymir home's control plane; other projects surface there through
79
+ the project registry and their worktrees.
80
+
81
+ ## Verification
82
+
83
+ ```bash
84
+ systemctl --user status ymir.service # substrate (Quadlet) — if containerised
85
+ bin/a2abridge-ensure.sh status # engine / directory / service
86
+ bin/a2a-mcp.sh show --project # MCP wiring in this repo
87
+ curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:4602/health # the well
88
+ ```
89
+
90
+ ## Rollback (nothing global was changed)
91
+
92
+ ```bash
93
+ rm -f .pi/mcp.json opencode.json # project wiring (private/generated)
94
+ git checkout -- .agents/agents/ # roster model lines, if applied
95
+ systemctl --user stop ymir.service # the substrate
96
+ ```
97
+
98
+ ## Cautions
99
+
100
+ - **Do not run `scripts/start.sh` on the host while a container runs the
101
+ substrate** — the ports collide.
102
+ - The **seatbelts** (`bin/syn-pretool-check.sh`, `syn-cd-check.sh`) refuse some
103
+ dangerous shell operations *inside the checkout*; that is the feature.
104
+ - One**helm per home**: a second session in the same checkout should use an
105
+ Yggdrasil worktree.