@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
package/LICENSE CHANGED
@@ -187,7 +187,7 @@
187
187
  same "printed page" as the copyright notice for easier
188
188
  identification within third-party archives.
189
189
 
190
- Copyright [yyyy] [name of copyright owner]
190
+ Copyright 2026 zerwiz
191
191
 
192
192
  Licensed under the Apache License, Version 2.0 (the "License");
193
193
  you may not use this file except in compliance with the License.
package/NOTICE ADDED
@@ -0,0 +1,63 @@
1
+ Ymir
2
+ Copyright 2026 zerwiz
3
+
4
+ This product includes software developed by the Ymir project
5
+ (https://github.com/zerwiz/ymir).
6
+
7
+ Provenance — firstmate
8
+ Ymir is a Norse-named derivative of the "firstmate" agent distro
9
+ (https://github.com/kunchenguid/firstmate), Copyright (c) kunchenguid and
10
+ contributors, licensed under the MIT License
11
+ (https://github.com/kunchenguid/firstmate/blob/main/LICENSE). Portions of this
12
+ product are derived from firstmate; its copyright and permission notice are
13
+ retained here as that license requires. Firstmate's own names survive only as
14
+ provenance (see .agents/skills/galdr-ymirsystem/assets/porting-upstream-to-norse.md).
15
+
16
+ Licensed under the Apache License, Version 2.0 (see LICENSE).
17
+
18
+ --------------------------------------------------------------------------
19
+ Third-party components
20
+ --------------------------------------------------------------------------
21
+
22
+ Ymir adopts validated open-source engines under its own Norse shells. Each
23
+ component below remains under its own licence; its copyright belongs to its
24
+ authors. Ymir does not relicense them.
25
+
26
+ MIT
27
+ treehouse https://github.com/kunchenguid/treehouse
28
+ powers Yggdrasil (git worktrees)
29
+ sandcastle https://github.com/mattpocock/sandcastle
30
+ powers Utgard (ephemeral sandboxes)
31
+ no-mistakes https://github.com/kunchenguid/no-mistakes
32
+ powers the clean-PR gate
33
+ hermes-agent https://github.com/NousResearch/hermes-agent
34
+ the Hermes worker runtime
35
+ pi https://github.com/earendil-works/pi
36
+ the coding harness surface
37
+ oh-my-pi https://github.com/can1357/oh-my-pi
38
+ prior art for the pi surface (studied)
39
+
40
+ firstmate https://github.com/kunchenguid/firstmate
41
+ the fleet — one agent, a crew
42
+ axi https://github.com/kunchenguid/axi
43
+ agent-ergonomics design principles
44
+ lavish-axi https://github.com/kunchenguid/lavish-axi
45
+ the HTML-artifact editor (Lavish)
46
+ SkillOpt https://github.com/zerwiz/SkillOpt
47
+ **Gunnlöð** — skill optimization (MIT, © zerwiz)
48
+
49
+ Apache License 2.0
50
+ pi-desktop https://github.com/FaqFirebase/pi-desktop (v0.1.7-alpha,
51
+ commit 4a5601b)
52
+ vendored and re-themed as apps/sessrumnir (Sessrumnir).
53
+ Copyright 2026 Pi Desktop GUI Contributors.
54
+ This is a MODIFIED fork; the changes and the upstream
55
+ notice are recorded in apps/sessrumnir/NOTICE.
56
+ a2aproject/a2a https://github.com/a2aproject/a2a
57
+ the A2A 1.0 protocol (Apache-2.0); see its LICENSE.
58
+
59
+ Studied as reference only (no code shipped): oh-my-pi, microsoft/agent-framework,
60
+ langchain-ai/langgraph, crewAIInc/crewAI, anthropics/claude-code, openai/openai-python,
61
+ stanfordnlp/dspy.
62
+
63
+ Full licence texts and compliance status: THIRD-PARTY-LICENSES
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # @zerwiz/ymir
1
+ # YMIR — The Single-Tenant Agent Operating System
2
2
 
3
3
 
4
4
  ---
@@ -10,48 +10,6 @@
10
10
 
11
11
  ---
12
12
 
13
- > **The front door to Ymir** — a single-operator, self-hosted, multi-agent AI runtime.
14
- > One command stands it up on your own machine. No hosting, no accounts.
15
-
16
- ```bash
17
- # 1 · curl — fetch the bootstrap and run it
18
- curl -fsSL https://raw.githubusercontent.com/zerwiz/ymir-release/main/install.sh | bash
19
-
20
- # 2 · npx — no install, run once
21
- npx @zerwiz/ymir # add --check (report only) or --yes (unattended)
22
-
23
- # 3 · npm global — install the command, then run it
24
- npm i -g @zerwiz/ymir
25
- ymir
26
-
27
- # 4 · clone the distro and run its installer directly
28
- git clone https://github.com/zerwiz/ymir.git ~/.ymir
29
- bash ~/.ymir/bin/ymir-install.sh
30
- ```
31
-
32
- > All four run the **same installer**. It is idempotent — run it again and it heals
33
- > forward. `--check` shows the plan without writing anything.
34
-
35
- This npm package is only the **bootstrap** (install.sh + a thin `ymir` bin): it
36
- fetches the Ymir distro and runs its installer, which provisions, self-heals and
37
- **validates** what it claims is running. It carries no secrets.
38
-
39
- > **Alpha** — the forge is hot and the anvil works, but expect rough edges, and do
40
- > not expose it as a public service yet.
41
-
42
-
43
- ---
44
-
45
- > **Who can install this today.** The Ymir distro is **private** while it is young —
46
- > so `curl`, `npx` and `git clone` work for **the author and invited users**, not for
47
- > the public (an unknown clone returns 404). If you would like access, ask:
48
- > [zerwiz.org](https://zerwiz.org). When the distro opens, this note goes away and
49
- > the four commands above become open to everyone.
50
-
51
- ---
52
-
53
- # YMIR — The Single-Tenant Agent Operating System
54
-
55
13
  > **One operator. One repo. A whole business, run by a Norse-named agent fleet.**
56
14
 
57
15
  ![Ymir — the single-tenant agent OS](assets/ymir-banner-03.png)
@@ -219,10 +177,18 @@ installable by anyone running pi.
219
177
  | Issue→PR | **Mjollnir** | autonomous fixes & PRs |
220
178
  | Process monitor | **Valhalla** | PM2/Docker supervision |
221
179
  | Skill synthesis | **Gungnir** | dynamic skill creation |
180
+ | Skill optimization | **Gunnlöð** | trajectory-driven skill refinement |
181
+ | Smíðja | **Smíðja** | the smithy — roster, phases, trace |
222
182
  | Session digest | **Sága** | the context injected at session open |
223
183
  | Watch / supervision | **Sýn** | watcher, guard, seat continuity |
224
184
  | Session lock | **Gleipnir** | one live session per home |
225
185
  | Scheduled jobs | **Nornir** | the fates who govern time |
186
+ | Control-plane hub | **Vingólf** | coordination, identity, sync across substrates |
187
+ | Live hall board | **Óðrerir** | fleet planning glass (:4322) |
188
+ | Multi-tenant domains | **Svartalfaheim** | scoped tenant workspaces |
189
+ | Agent ergonomics | **Galdr** | TOON output, 10 design principles |
190
+ | Smíðja orchestrator | **Völundr** | runs Smíðja (Kaia's seat inside) |
191
+ | MCP/A2A composition | **Hermóðr** | MCP vertical (agent→tools) + A2A horizontal |
226
192
  | Host desktop (Omarchy) | **Omarchy** | the machine Ymir runs on: monitors, scale, themes, hooks |
227
193
  | Terminal backend | **Þjazi** | agent panes — herdr (protocol 14+) or tmux |
228
194
  | Harness surface | **pi** | extensions, skills, prompt templates, packages |
@@ -253,10 +219,11 @@ the master builder; Tyr judges compliance.
253
219
  | `syn-recovery` | Sýn | stuck-worker recovery playbook |
254
220
  | `ymir` | Ymir | operate the host: update · Omarchy · Þjazi |
255
221
  | `hamr` | Hamr | per-harness adapter reference (OpenCode, Pi, Claude, Cursor, Codex) |
222
+ | `gunnlod` | Gunnlöð | skill optimization — trajectory-driven refinement via SkillOpt |
256
223
 
257
224
  The Galdr family enforces the 10 ergonomic principles (TOON output, minimal schemas,
258
225
  self-correcting errors) and the runtime acceptance gates; run
259
- `bash .agents/skills/galdr-cli/scripts/compliance-check.sh` before claiming done.
226
+ `bash .agents/skills/galdr-ymirsystem/scripts/compliance-check.sh` before claiming done.
260
227
 
261
228
  ---
262
229
 
@@ -276,7 +243,7 @@ Utgard sandbox on a Yggdrasil worktree.
276
243
  | **Kvasir** | the knowing | scout | reconnaissance — changes nothing |
277
244
 
278
245
  Profiles live in [`.agents/agents/`](.agents/agents/) and are bound to each tool by
279
- `bin/valknut-load.sh` (OpenCode reads `.opencode/agent/`; Pi links resolve under
246
+ `bin/valknut-load.sh` (OpenCode reads `.opencode/agents/`; Pi links resolve under
280
247
  `.pi/agents/`).
281
248
 
282
249
  ---
@@ -363,7 +330,44 @@ freedom of being native to all three rather than portable to none.
363
330
 
364
331
  Point a harness (OpenCode, Pi, Claude Code, Cursor, Codex) at the repo and it takes
365
332
  the seat as **Brokk**. Read [`AGENTS.md`](AGENTS.md) for the operating laws and
366
- [`docs/masterplan.md`](docs/masterplan.md) for the forge orders.
333
+ `$YMIR_HOME/docs/masterplan.md` for the forge orders.
334
+
335
+ ### Bringing your own machine — Windows, macOS, Linux
336
+
337
+ Ymir is **Omarchy-first**: the Omarchy layer is first-class. But *first* is not
338
+ *only*. The core is portable, and every other host gets a layer of its own.
339
+ `bin/host-sense.sh` is the one place that looks before anything acts — distro,
340
+ kernel, session (Wayland/X11), desktop, and what that desktop can actually do:
341
+
342
+ ```bash
343
+ bin/host-sense.sh # THIS machine, as TOON
344
+ bin/host-sense.sh capability tray # yes | partial | no — for scripting
345
+ ```
346
+
347
+ ```
348
+ hosts[4]{host,how_you_get_it,what_it_is}:
349
+ "Omarchy","bin/ymir-install.sh","the first-class layer: numbered desktops, launcher entries, the post-update hook"
350
+ "other Linux (Ubuntu · Fedora · Debian · Arch)","bin/ymir-install.sh","the portable core; the Omarchy layer skips cleanly, never faked"
351
+ "Windows","Ymir-Setup.exe — or bin/bootstrap-windows.ps1","Ubuntu on WSL2 is the host; Ymir installs inside it"
352
+ "macOS","Ymir Installer.command (or the .pkg) — or bin/bootstrap-macos.sh","Ubuntu in a Lima VM is the host; Ymir installs inside it"
353
+ ```
354
+
355
+ Windows and macOS do not run Ymir natively: what Ymir installs is a Linux
356
+ runtime, so those layers raise a Linux host and hand the work to
357
+ `bin/ymir-install.sh` inside it. Each is gated on its host and skips cleanly
358
+ everywhere else — no layer asserts a machine it is not standing on.
359
+
360
+ **Build the installers** — neither needs a matching host:
361
+
362
+ ```bash
363
+ packaging/build.sh --check # what this machine can build, and with what
364
+ packaging/build.sh --exe # Ymir-Setup-<version>.exe (NSIS: apt-get install nsis)
365
+ packaging/build.sh --mac # Ymir-<version>.pkg (pkgbuild — Apple-only)
366
+ ```
367
+
368
+ CI builds both (`.github/workflows/ymir-installers.yml`): NSIS on an Ubuntu
369
+ runner, pkgbuild on a macOS runner. Signing and notarisation need the operator's
370
+ own Apple and Windows credentials, so the artefacts ship unsigned.
367
371
 
368
372
  ---
369
373
 
@@ -427,7 +431,7 @@ ymir/
427
431
  ├── svartalfaheim/ # company container root (zerwiz) — future multi-user
428
432
  ├── workspace/ # THE SINGLE TENANT: work/ · personal/ · companies/ ·
429
433
  │ # workspaces.yaml · projects.yaml · memory/ · INSTALL.md
430
- ├── smidja/ # the smithy engine + smidja.db (runs, stats, trace)
434
+ ├── apps/smidja/ # the smithy engine + smidja.db (runs, stats, trace)
431
435
  ├── state/ # runtime state: lock, chat/, bridges, cron
432
436
  ├── scripts/start.sh stop.sh # raise/lower the whole system
433
437
  ├── assets/ # art, the OS diagram, reference material
@@ -524,7 +528,17 @@ Every subsystem, component, and process is named for the figure whose role match
524
528
  its work; the operator is the **Allfather** (Odin). The house voice is Norse-natural;
525
529
  flavor may season a line, but an imported term never names a subsystem. The full
526
530
  component map lives in
527
- [`.agents/skills/galdr-cli/assets/norse-naming.md`](.agents/skills/galdr-cli/assets/norse-naming.md).
531
+ [`.agents/skills/galdr-ymirsystem/assets/norse-naming.md`](.agents/skills/galdr-ymirsystem/assets/norse-naming.md).
532
+
533
+ ---
534
+
535
+ ## Built on
536
+
537
+ Ymir is a Norse-named derivative of the **firstmate** agent distro
538
+ ([github.com/kunchenguid/firstmate](https://github.com/kunchenguid/firstmate),
539
+ MIT License, © kunchenguid). Ymir adopts and retargets firstmate's mechanism under
540
+ its open-source-first law; upstream names survive only as provenance. See
541
+ [`NOTICE`](NOTICE).
528
542
 
529
543
  ---
530
544
 
@@ -570,17 +584,6 @@ the full day's ledger.
570
584
 
571
585
  ---
572
586
 
573
- ---
574
-
575
- ## Contributing
576
-
577
- Ymir is a hobby project, and contributions are genuinely welcome — a bug report, a
578
- docs fix, a new skill, a whole adapter. **Please fork, branch, and open a Pull
579
- Request**: `main` is protected, so nothing lands without review. See
580
- [CONTRIBUTING.md](CONTRIBUTING.md) for the whole of it.
581
-
582
- *Be kind, keep it small, and name your subsystem true.*
583
-
584
587
  ## With gratitude — the people we stand on
585
588
 
586
589
  Ymir is a Norse shell over other people's excellent work. We did not build the
@@ -601,9 +604,10 @@ follow them, star them, learn from them.
601
604
  | [firstmate](https://github.com/kunchenguid/firstmate) | kunchenguid | MIT | the fleet |
602
605
  | [axi](https://github.com/kunchenguid/axi) | kunchenguid | MIT | agent-ergonomics principles |
603
606
  | [lavish-axi](https://github.com/kunchenguid/lavish-axi) | kunchenguid | MIT | the HTML-artifact editor |
607
+ | [SkillOpt](https://github.com/zerwiz/SkillOpt) | zerwiz | MIT | **Gunnlöð** — skill optimization (trajectory-driven refinement) |
604
608
 
605
609
  Their full licence texts are bundled in [THIRD-PARTY-LICENSES](THIRD-PARTY-LICENSES),
606
- and the audit of every demand is in [docs/third-party-audit.md](docs/third-party-audit.md).
610
+ and their attribution in [NOTICE](NOTICE).
607
611
  If we have benefited from your work and missed you here, tell us — we will fix it,
608
612
  loudly.
609
613
 
@@ -612,3 +616,53 @@ Thank you all. The forge is hot because you lit it.
612
616
  _Where a maker teaches on YouTube we link the channel — Matt Pocock's is
613
617
  [youtube.com/@mattpocockuk](https://www.youtube.com/@mattpocockuk). If you make a
614
618
  tutorial for a project we use, tell us and we will link yours too._
619
+
620
+ ---
621
+
622
+ ## GitHub
623
+
624
+ The public repository lives at **zerwiz/ymir** on GitHub:
625
+ [github.com/zerwiz/ymir](https://github.com/zerwiz/ymir).
626
+
627
+ - **Issues** — report bugs, request features, or ask questions.
628
+ - **Pull Requests** — all changes ship via PR; every PR requires
629
+ explicit Allfather approval before merge. No force-pushes. No auto-merge.
630
+ - **Projects** — the board tracks every workstream across the hall.
631
+ - **Actions** — CI runs `bin/secret-guard.sh` and `bin/docs-guard.sh`
632
+ on every push and PR. A violation blocks the build.
633
+
634
+ Your own login is always your own: **never** share a token, never
635
+ commit credentials, never use a shared account. All secrets are
636
+ resolved from `$YMIR_HOME/secrets/platform.env` at runtime.
637
+
638
+ ---
639
+
640
+ ## Install — the four doors
641
+
642
+ ```bash
643
+ curl -fsSL https://raw.githubusercontent.com/zerwiz/ymir/main/install.sh | bash
644
+ npx @zerwiz/ymir install # no global install
645
+ git clone https://github.com/zerwiz/ymir.git ~/Ymir && cd ~/Ymir && bin/ymir-install.sh
646
+ npm install -g @zerwiz/ymir # the CLI, global
647
+ ```
648
+
649
+ **Who can install this today.** The Ymir distro is private while it is young —
650
+ so `curl`, `npx` and `git clone` work for the author and invited users, not for
651
+ the public (an unknown clone returns 404). If you would like access, ask:
652
+ **zerwiz.org**. When the distro opens, this note goes away and the four commands
653
+ above become open to everyone.
654
+
655
+ **Early adopters and contributors can install now — but it is rough.** Expect
656
+ sharp edges: the installer is honest about what it cannot do, and says so rather
657
+ than pretending. Bring a Linux host (or let the Windows/macOS bootstraps give
658
+ you one — see *Bringing your own machine* above), and read what the installer
659
+ prints before you trust it.
660
+
661
+ The npm package carries the runtime's `bin/` scripts and the installer; every
662
+ `npm update -g @zerwiz/ymir` re-runs the same self-healing setup that provisions
663
+ prerequisites, engines, and the Hlidskjalf seat. `@zerwiz/*` are the app
664
+ packages (Hlidskjalf, Óðrerir, Sessrúmnir, Smíðja) — one per app.
665
+
666
+ Private data never touches npm — all user data lives at `$YMIR_HOME` (the hoard
667
+ at `hodd/` and the realms at `svartalfaheim/`) and syncs via the user's
668
+ **private** GitHub repo, never a public one.
@@ -0,0 +1,51 @@
1
+ # Rule 01 — Domains, Houses, and Eindri
2
+
3
+ **Status:** law. This rule governs every other: how the work of the house is
4
+ divided, and who does it.
5
+
6
+ ## 1. A house is a company — and only that
7
+
8
+ A **house** is a **company**. Nothing else is a house. **WayOf** is a house (a
9
+ company). Use "house" and "company" interchangeably; never use "house" for a
10
+ field of knowledge.
11
+
12
+ ## 2. A domain is a field of knowledge
13
+
14
+ A **domain** is an area of knowledge. The Norse word for a domain is **Grein**
15
+ (plural **Greinar**) — a *branch* or *discipline*; one grein, many greinar. Use
16
+ “domain” and “Grein” interchangeably. A domain is named for the figure whose
17
+ craft it is. There are eight Greinar:
18
+
19
+ | Domain | Id | Covers |
20
+ |---|---|---|
21
+ | **Ymir Labs** | `ymirlabs` | the system itself — agents knowledgeable about Ymir |
22
+ | **Brokk Forge** | `brokkforge` | engineering & build tooling |
23
+ | **Runestone Labs** | `runestone` | records & compliance |
24
+ | **Muninn Labs** | `muninn` | memory & knowledge |
25
+ | **Dvalin** | `dvalin` | crafted tools |
26
+ | **Utgard Studios** | `utgard` | creative |
27
+ | **Askr** | `askr` | human-centered products |
28
+ | **Mannheim** | `mannheim` | holding — allocated when a venture claims it |
29
+
30
+ A domain is **not** a company and **not** a workspace. Domains are the axes of
31
+ knowledge; workspaces (`personal` · `work`) are the scopes a person runs.
32
+
33
+ ## 3. Eindri are the specialists
34
+
35
+ **Eindri** are the workers — a marketer, a builder, a researcher, a planner, a
36
+ reviewer, a documenter, a scout, and their kin. Every Eindri names **two**
37
+ things: its **domain** (which field it belongs to) and its **craft** (what it
38
+ does). An Eindri is never a domain and never a house.
39
+
40
+ - Agents knowledgeable about the **system itself** belong to **Ymir Labs**.
41
+ - A marketer belongs to a knowledge/market domain; a builder to the forge; a
42
+ researcher to the well; and so on — by craft.
43
+
44
+ ## 4. The counting rule
45
+
46
+ ```
47
+ one_house = many companies? no — a house IS a company.
48
+ one_domain = many Eindri.
49
+ one_eindri = exactly one domain.
50
+ one_project = one workspace (company) + many domains.
51
+ ```
@@ -0,0 +1,78 @@
1
+ # Rule 02 — Agents (Brokk, the Eindri, and where they live)
2
+
3
+ **Status:** law. Read with Rule 01 (domains · houses · Eindri).
4
+
5
+ ## 1. One home for agents
6
+
7
+ Agent profiles live **only** in **`.agents/agents/*.md`**. That directory is the
8
+ source of truth; everything else binds to it.
9
+
10
+ - Harness directories are **symlinks**, never copies:
11
+ - OpenCode: `.opencode/agents/<name>.md` → `../../.agents/agents/<profile>.md`
12
+ - Pi: `.pi/agents/<profile>.md` → the same canonical files
13
+ - **Never edit** `.opencode/agents` or `.pi/agents` — they are links. Edit
14
+ `.agents/agents/<profile>.md` and re-run `bin/valknut-load.sh --all`.
15
+
16
+ ## 2. The two kinds of agent
17
+
18
+ | Kind | Who | Where |
19
+ |---|---|---|
20
+ | **Primary** | **Brokk** — the bellows; sole contact with the Allfather | `.agents/agents/brokk.md` |
21
+ | **Eindri** | the workers — isolated smiths in Utgard on Yggdrasil worktrees | `.agents/agents/<name>-<craft>.md` |
22
+
23
+ Every **Eindri** is a **specialist**: a marketer, a builder, a researcher, a
24
+ planner, a reviewer, a documenter, a scout, and their kin. An Eindri is never a
25
+ domain and never a house (Rule 01).
26
+
27
+ ## 3. The profile contract
28
+
29
+ Every profile carries, in frontmatter:
30
+
31
+ ```
32
+ name the agent id (short, lowercase) e.g. sindri
33
+ norse_name the figure the craft is named for e.g. Sindri
34
+ descriptor the craft in a word e.g. smith
35
+ domain the field it belongs to (Rule 01) e.g. brokkforge
36
+ role the functional role e.g. developer
37
+ capabilities the skills list
38
+ tools the allowed tools
39
+ mode/model/permission the harness binding (OpenCode) — from the canonical
40
+ ```
41
+
42
+ - **Name for the role, never the mood.** The Norse figure must match the craft
43
+ (Sindri smiths, Bragi sings, Mímir remembers, Förseti judges).
44
+ - **Domains:** agents knowledgeable about the **system itself** belong to
45
+ **Ymir Labs** (`ymirlabs`).
46
+ - The file name is `<name>-<craft>.md`; the harness link is `<name>.md`.
47
+
48
+ ## 4. No mock agents
49
+
50
+ - Agent ids, names, domains, models, and status must be **real** and sourced
51
+ (from the profile, the harness config, or live signals). **Never fabricate**
52
+ status, traceability, task counts, or uptime.
53
+ - The **demo** roster (`apps/hlidskjalf/src/data/mock.ts`) is the single, clearly
54
+ labelled mock and appears only in demo mode; it never stands in for live data.
55
+
56
+ ## 5. Changing an agent
57
+
58
+ 1. Edit `.agents/agents/<name>-<craft>.md`.
59
+ 2. Run `bin/valknut-load.sh --all` to rebind the harness symlinks.
60
+ 3. If a governed path changed, update the owning Galdr asset in the same change
61
+ (compliance gate `assets`).
62
+
63
+ ## Permissions — bash is the hole
64
+
65
+ - A profile's `permission:` block is law for that agent over the tools.
66
+ - **A flat `bash: allow` is a total shell and overrides every `edit`/`write`
67
+ deny.** A read-only agent with `edit: deny` but `bash: allow` can still write,
68
+ delete, and reach the network. Never give a read-only agent a flat
69
+ `bash: allow`; give it a **pattern map** — only the read commands it needs are
70
+ `allow`, everything else is `ask` or `deny`.
71
+ - Network commands (`curl`, `wget`, `ssh`, arbitrary binaries) are `ask` at
72
+ least. Code you do not fully trust belongs in **Utgard** (no host root, no
73
+ network), not on the host behind a permissive shell.
74
+ - `mode: all` (runnable) plus a full shell is the widest door — usually not what
75
+ you want.
76
+ - `bin/perm-guard.sh` flags any profile with a flat `bash: allow`
77
+ (`--strict` exits 1). Run it before claiming an agent change done; see the
78
+ runbook `docs/runbooks/agent-permissions.md`.
@@ -0,0 +1,61 @@
1
+ # Rule 03 — Houses (companies)
2
+
3
+ **Status:** law. Read with Rule 01 (domains · houses · Eindri).
4
+
5
+ ## 1. A house is a company — nothing else
6
+
7
+ A **house** is a **company**. The two words are the same thing; use them
8
+ interchangeably. **WayOf is a house (a company).**
9
+
10
+ A house is **not** a domain (Rule 01), **not** a workspace, and **not** a
11
+ subsystem. The eight “Labs” — Ymir Labs, Brokk Forge, Runestone Labs, Muninn
12
+ Labs, Dvalin, Utgard Studios, Askr, Mannheim — are **domains**, never houses.
13
+
14
+ ## 2. What a house owns
15
+
16
+ - A house **owns projects**. Every project belongs to exactly **one** house and
17
+ may span many **domains** (Rule 01).
18
+ - A house has **members**, each with a role: `owner` · `admin` · `member`.
19
+ - A house has **products** and a **repo** (a single master registry entry,
20
+ `workspace/projects.yaml`).
21
+
22
+ ## 3. The house record
23
+
24
+ Each house has one entity card:
25
+
26
+ ```
27
+ companies/<house>/entity.md
28
+ name the company name (the house) e.g. WayOf
29
+ type company | personal
30
+ owner the owning operator e.g. zerwiz
31
+ realm the scope it runs in
32
+ domains the fields it works across (Rule 01 ids)
33
+ products what it ships
34
+ repo git remote or local path
35
+ status active | holding | paused | retired
36
+ lore_line the one line that names the venture
37
+ ```
38
+
39
+ The card lives inside the company container (`svartalfaheim/<company>/`), which
40
+ becomes the company's Docker boundary. A work workspace mounts that container.
41
+
42
+ ## 4. Naming and boundaries
43
+
44
+ - A house is named for the **company** (WayOf). Never name a house after a
45
+ domain, a subsystem, or a person.
46
+ - **House boundaries are sacred.** A house's data never reaches across to
47
+ another house without explicit Allfather approval.
48
+ - Single tenant today: the **Allfather** owns the house (WayOf); the eight
49
+ domains are how its knowledge is divided, not extra companies.
50
+
51
+ ## 5. Do not conflate
52
+
53
+ ```
54
+ house = company (WayOf)
55
+ domain = field of knowledge, a Grein (the eight Labs)
56
+ workspace = a running scope (personal | work)
57
+ brand = a domain's label (Ymir Labs, Brokk Forge, …)
58
+ ```
59
+
60
+ Anything that treats a domain as a house, or a house as a domain, is a
61
+ violation and must be corrected here first.
@@ -0,0 +1,97 @@
1
+ # Rule 04 — Hodd, the private hoard, and YMIR_HOME
2
+
3
+ Every private thing the Allfather holds lives in **one** place: **Hodd**
4
+ (`hodd/`) at the repo, and **YMIR_HOME** (`$HOME/Documents/Ymir/`) as the
5
+ shareable private repo. *Hodd* is Old Norse for a hoard — guarded, and
6
+ never shown. The repo holds the **framework** (scaffolds, guards,
7
+ templates); the data lives at **YMIR_HOME**, committed and pushed to a
8
+ private GitHub repo so it can be shared between machines.
9
+
10
+ ## What belongs in Hodd (at the repo)
11
+
12
+ Only **scaffolds and guards** live at the repo path `hodd/`:
13
+
14
+ - **Guards** — `hodd/.gitignore` (inner ward, tracks only itself, README,
15
+ and `*.example` shapes)
16
+ - **README** — `hodd/README.md` (this map of the hoard)
17
+ - **Scaffolds** — `hodd/AGENTS.example.md`, `hodd/**/*.example` (templates
18
+ so a new operator knows what belongs)
19
+
20
+ ## What lives at YMIR_HOME (the real hoard)
21
+
22
+ All private data is committed to the **private YMIR_HOME git repo** and
23
+ pushed to a **private GitHub repo** for multi-machine sync. It is **NOT**
24
+ gitignored — the user owns it and shares it between computers:
25
+
26
+ | Repo location | YMIR_HOME location |
27
+ |---|---|
28
+ | `hodd/docs/` | `$YMIR_HOME/docs/` |
29
+ | `hodd/secrets/` | `$YMIR_HOME/secrets/` |
30
+ | `hodd/identity/` | `$YMIR_HOME/identity/` |
31
+ | `hodd/tenants/` | `$YMIR_HOME/tenants/` |
32
+ | `data/` | `$YMIR_HOME/data/` |
33
+ | `memory/kaia.engram*` | `$YMIR_HOME/memory/` |
34
+
35
+ ## The law
36
+
37
+ - **Hodd at the repo is untracked.** `hodd/.gitignore` tracks only the guard
38
+ and the README; everything beneath is private on every clone. A clone
39
+ must never inherit another operator's hoard.
40
+ - **YMIR_HOME is committed.** All private data at YMIR_HOME is committed
41
+ to the user's **private** git repo and pushed to a private GitHub repo
42
+ for sync between machines. It is never gitignored (except runtime
43
+ ephemera like `*.wal`, `*.shm`, `smidja/`, `state/`).
44
+ - **Secrets are referenced, never inlined.** Read them by path — `YMIR_HOARD`
45
+ (default `$YMIR_HOME`), `bin/hodd.sh emit <file>` to set them in a shell. A
46
+ value never enters a tracked file, a commit, or a document.
47
+ - **Two wards.** `bin/secret-guard.sh` is the outer ward (pre-commit + CI);
48
+ `hodd/.gitignore` is the inner one. Nothing leaves without passing both.
49
+ - **Realm boundaries are sacred.** Private data at YMIR_HOME is
50
+ scoped per operator; a clone must never inherit another's hoard.
51
+ - **The public tree keeps only the framework** (lore, architecture, scaffold)
52
+ and `*.example` shapes.
53
+ - A change that contradicts this rule must change the rule first (append-only;
54
+ never silently rewritten).
55
+
56
+ ## docs/ is public — plans are not
57
+
58
+ `docs/` is the **public, user-facing** tree: it holds what a user of Ymir may
59
+ read. Operator-private documents — plans, strategy, roadmaps, the masterplan,
60
+ `append-only-log`, and project planning — belong in `hodd/docs/` at the repo
61
+ (never `docs/`), or live at `$YMIR_HOME/docs/` in the private repo.
62
+
63
+ `bin/docs-guard.sh` blocks a commit that stages such a document under `docs/`
64
+ (wired into the pre-commit hook beside `secret-guard.sh`). When it fires, move
65
+ the file to `$YMIR_HOME/docs/` in the private repo.
66
+
67
+ ---
68
+
69
+ ## Correction — 2026-09-17: hodd/ *is* the YMIR_HOME data path
70
+
71
+ *Appended, citing the sections above; nothing above is rewritten.*
72
+
73
+ The mapping table above ("What lives at YMIR_HOME") implies a **flat** layout —
74
+ `hodd/identity/` → `$YMIR_HOME/identity/`, `data/` → `$YMIR_HOME/data/` — i.e.
75
+ that the repo-side `hodd/` and the data path are two different locations. On a
76
+ real home that reading produced **two parallel stores**: a flat
77
+ `$YMIR_HOME/identity/` and `$YMIR_HOME/data/` alongside `$YMIR_HOME/hodd/identity/`
78
+ and `$YMIR_HOME/hodd/data/`. They drifted, and the flat pair went stale.
79
+
80
+ The truth on a live home, and the intent of this rule:
81
+
82
+ - **`$YMIR_HOME/hodd/` *is* the private data path.** There is no second, flat
83
+ copy. `identity/`, `data/`, `docs/`, `secrets/`, `tenants/`, and the memory
84
+ well live **under `hodd/`**.
85
+ - **`bin/hoard-lib.sh` is the single source of truth** for that path: it
86
+ resolves `${YMIR_HOARD:-${YMIR_HOME:-$HOME/Documents/Ymir}/hodd}`. A script
87
+ that needs the hoard calls `hoard_root`, never a hardcoded path.
88
+ - **`.ymir-layout.yaml` records the real layout** and must name only paths that
89
+ exist. A layout entry pointing at a nonexistent directory is stale, and a
90
+ stale map is what let private work land outside the hoard.
91
+ - The three-way reading in the section above (`hodd/x/` → `$YMIR_HOME/x/`) is
92
+ **superseded**: read every row as `$YMIR_HOME/hodd/x/`.
93
+ - The "docs/ is public" section's closing line ("move the file to
94
+ `$YMIR_HOME/docs/`") is likewise read as **`$YMIR_HOME/hodd/docs/`**.
95
+
96
+ Confirmed by the Allfather 2026-09-17. Drift of this kind is caught by
97
+ `bin/eir-doctor.sh`'s hoard placement check.