@zerwiz/ymir 0.1.4 → 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (865) hide show
  1. package/.agents/README.md +291 -0
  2. package/.agents/agents/bragi-marketer.md +111 -0
  3. package/.agents/agents/brokk.md +352 -0
  4. package/.agents/agents/forseti-reviewer.md +93 -0
  5. package/.agents/agents/frigg-consent.md +77 -0
  6. package/.agents/agents/groa-update.md +77 -0
  7. package/.agents/agents/hnoss-designer.md +69 -0
  8. package/.agents/agents/huginn-researcher.md +99 -0
  9. package/.agents/agents/jord-projects.md +78 -0
  10. package/.agents/agents/kvasir-scout.md +91 -0
  11. package/.agents/agents/mimir-planner.md +92 -0
  12. package/.agents/agents/muninn-stow.md +77 -0
  13. package/.agents/agents/saga-bearings.md +78 -0
  14. package/.agents/agents/sindri-developer.md +114 -0
  15. package/.agents/agents/snotra-documenter.md +105 -0
  16. package/.agents/agents/syn-recovery.md +78 -0
  17. package/.agents/agents/tyr-check.md +78 -0
  18. package/.agents/agents/urdh-hold.md +77 -0
  19. package/.agents/agents/volundr-smith.md +80 -0
  20. package/.agents/agents/vor-diagnostics.md +77 -0
  21. package/.agents/assets/agents/naming.md +50 -0
  22. package/.agents/assets/agents/registry.md +93 -0
  23. package/.agents/assets/agents/runtime.md +36 -0
  24. package/.agents/assets/agents/toon-tasks-cli.md +42 -0
  25. package/.agents/assets/templates/company_entity.template.md +37 -0
  26. package/.agents/backend/README.md +74 -0
  27. package/.agents/backend/backends/cmux.sh +649 -0
  28. package/.agents/backend/backends/herdr-eventwait.py +157 -0
  29. package/.agents/backend/backends/herdr-workspace-move.py +114 -0
  30. package/.agents/backend/backends/herdr.sh +3386 -0
  31. package/.agents/backend/backends/orca.sh +290 -0
  32. package/.agents/backend/backends/tmux.sh +357 -0
  33. package/.agents/backend/backends/zellij.sh +700 -0
  34. package/.agents/backend/fm-afk-launch.sh +654 -0
  35. package/.agents/backend/fm-afk-return.sh +241 -0
  36. package/.agents/backend/fm-afk-start.sh +172 -0
  37. package/.agents/backend/fm-arm-command-policy.mjs +960 -0
  38. package/.agents/backend/fm-arm-pretool-check.sh +200 -0
  39. package/.agents/backend/fm-backend-hometag-lib.sh +52 -0
  40. package/.agents/backend/fm-backend.sh +981 -0
  41. package/.agents/backend/fm-backlog-handoff.sh +909 -0
  42. package/.agents/backend/fm-backlog-receive.sh +187 -0
  43. package/.agents/backend/fm-backlog-transition-lib.sh +779 -0
  44. package/.agents/backend/fm-bearings-board.sh +204 -0
  45. package/.agents/backend/fm-bearings-snapshot.sh +546 -0
  46. package/.agents/backend/fm-bootstrap.sh +1568 -0
  47. package/.agents/backend/fm-branch-outcome.sh +203 -0
  48. package/.agents/backend/fm-branch-prompt.sh +101 -0
  49. package/.agents/backend/fm-brief.sh +452 -0
  50. package/.agents/backend/fm-busy-event.sh +234 -0
  51. package/.agents/backend/fm-busy-lib.sh +986 -0
  52. package/.agents/backend/fm-captain-hold.sh +1001 -0
  53. package/.agents/backend/fm-cd-command-policy.mjs +153 -0
  54. package/.agents/backend/fm-cd-pretool-check.sh +190 -0
  55. package/.agents/backend/fm-check-lib.sh +74 -0
  56. package/.agents/backend/fm-check-register.sh +42 -0
  57. package/.agents/backend/fm-check-unregister.sh +52 -0
  58. package/.agents/backend/fm-classify-lib.sh +1770 -0
  59. package/.agents/backend/fm-claude-stop-autoarm.sh +334 -0
  60. package/.agents/backend/fm-composer-lib.sh +1416 -0
  61. package/.agents/backend/fm-config-inherit-lib.sh +1202 -0
  62. package/.agents/backend/fm-config-push.sh +254 -0
  63. package/.agents/backend/fm-control-lib.sh +251 -0
  64. package/.agents/backend/fm-control.sh +878 -0
  65. package/.agents/backend/fm-crew-state.sh +625 -0
  66. package/.agents/backend/fm-cursor-lib.sh +243 -0
  67. package/.agents/backend/fm-decision-hold.sh +232 -0
  68. package/.agents/backend/fm-doc-audience-check.sh +269 -0
  69. package/.agents/backend/fm-dod-lib.sh +67 -0
  70. package/.agents/backend/fm-ensure-agents-md.sh +253 -0
  71. package/.agents/backend/fm-extension-launch-barrier.mjs +129 -0
  72. package/.agents/backend/fm-extension.mjs +2577 -0
  73. package/.agents/backend/fm-extension.sh +16 -0
  74. package/.agents/backend/fm-ff-lib.sh +420 -0
  75. package/.agents/backend/fm-fleet-snapshot.sh +1463 -0
  76. package/.agents/backend/fm-fleet-sync.sh +458 -0
  77. package/.agents/backend/fm-fleet-view.sh +96 -0
  78. package/.agents/backend/fm-gate-refuse-lib.sh +102 -0
  79. package/.agents/backend/fm-guard.sh +242 -0
  80. package/.agents/backend/fm-harness.sh +195 -0
  81. package/.agents/backend/fm-herdr-ci-cleanup.sh +115 -0
  82. package/.agents/backend/fm-herdr-lab.sh +346 -0
  83. package/.agents/backend/fm-herdr-session-cleanup.sh +337 -0
  84. package/.agents/backend/fm-home-seed.sh +984 -0
  85. package/.agents/backend/fm-home-summary-refresh.sh +255 -0
  86. package/.agents/backend/fm-hook-host-lib.sh +36 -0
  87. package/.agents/backend/fm-inactive-reconcile.sh +531 -0
  88. package/.agents/backend/fm-inbox.sh +399 -0
  89. package/.agents/backend/fm-install-actionlint.sh +84 -0
  90. package/.agents/backend/fm-install-herdr.sh +96 -0
  91. package/.agents/backend/fm-install-shellcheck.sh +84 -0
  92. package/.agents/backend/fm-install-treehouse.sh +95 -0
  93. package/.agents/backend/fm-kimi-turnend-hook.sh +276 -0
  94. package/.agents/backend/fm-lease-lib.sh +218 -0
  95. package/.agents/backend/fm-lease.sh +189 -0
  96. package/.agents/backend/fm-line-cap-lib.sh +51 -0
  97. package/.agents/backend/fm-lint-workflows.sh +137 -0
  98. package/.agents/backend/fm-lint.sh +591 -0
  99. package/.agents/backend/fm-lock-lib.sh +104 -0
  100. package/.agents/backend/fm-lock.sh +107 -0
  101. package/.agents/backend/fm-marker-lib.sh +12 -0
  102. package/.agents/backend/fm-merge-local.sh +74 -0
  103. package/.agents/backend/fm-merge-outcome-lib.sh +138 -0
  104. package/.agents/backend/fm-nm-run-lib.sh +124 -0
  105. package/.agents/backend/fm-on.sh +125 -0
  106. package/.agents/backend/fm-operational-input.sh +253 -0
  107. package/.agents/backend/fm-peek.sh +46 -0
  108. package/.agents/backend/fm-pending-reply-lib.sh +1409 -0
  109. package/.agents/backend/fm-pr-check.sh +135 -0
  110. package/.agents/backend/fm-pr-lib.sh +1016 -0
  111. package/.agents/backend/fm-pr-merge.sh +707 -0
  112. package/.agents/backend/fm-pr-poll.sh +110 -0
  113. package/.agents/backend/fm-primary-scope-lib.sh +33 -0
  114. package/.agents/backend/fm-procevent-extension-capture.pl +259 -0
  115. package/.agents/backend/fm-procevent-lavish.sh +628 -0
  116. package/.agents/backend/fm-procevent-lib.sh +892 -0
  117. package/.agents/backend/fm-procevent-quota.sh +290 -0
  118. package/.agents/backend/fm-procevent-remote-reply.sh +577 -0
  119. package/.agents/backend/fm-procevent-when.sh +504 -0
  120. package/.agents/backend/fm-procevent.sh +1466 -0
  121. package/.agents/backend/fm-project-mode.sh +92 -0
  122. package/.agents/backend/fm-project-origin-lib.sh +180 -0
  123. package/.agents/backend/fm-promote.sh +282 -0
  124. package/.agents/backend/fm-public-followup-emit.sh +260 -0
  125. package/.agents/backend/fm-public-followup-lib.sh +398 -0
  126. package/.agents/backend/fm-public-followup.sh +1330 -0
  127. package/.agents/backend/fm-push-transition-lib.sh +168 -0
  128. package/.agents/backend/fm-quota-axi-lib.sh +93 -0
  129. package/.agents/backend/fm-quota-choose.sh +384 -0
  130. package/.agents/backend/fm-remote-delta-read.sh +189 -0
  131. package/.agents/backend/fm-remote-doctor.sh +800 -0
  132. package/.agents/backend/fm-remote-entrypoint.sh +193 -0
  133. package/.agents/backend/fm-remote-file.sh +234 -0
  134. package/.agents/backend/fm-remote-home-provision.sh +259 -0
  135. package/.agents/backend/fm-remote-home-seed.sh +259 -0
  136. package/.agents/backend/fm-remote-inherit-push.sh +90 -0
  137. package/.agents/backend/fm-remote-inherit.sh +179 -0
  138. package/.agents/backend/fm-remote-job-lib.sh +1241 -0
  139. package/.agents/backend/fm-remote-job-reap-orphans.sh +137 -0
  140. package/.agents/backend/fm-remote-job-worker.sh +1124 -0
  141. package/.agents/backend/fm-remote-readiness-lib.sh +44 -0
  142. package/.agents/backend/fm-remote-secondmate-control.sh +340 -0
  143. package/.agents/backend/fm-review-diff.sh +158 -0
  144. package/.agents/backend/fm-secondmate-charter-lib.sh +44 -0
  145. package/.agents/backend/fm-secondmate-nudge-lib.sh +68 -0
  146. package/.agents/backend/fm-secondmate-parent-lib.sh +70 -0
  147. package/.agents/backend/fm-secondmate-reconcile.sh +371 -0
  148. package/.agents/backend/fm-secondmate-registry-lib.sh +311 -0
  149. package/.agents/backend/fm-secondmate-report.sh +88 -0
  150. package/.agents/backend/fm-send.sh +1059 -0
  151. package/.agents/backend/fm-session-lock-lib.sh +176 -0
  152. package/.agents/backend/fm-session-start.sh +970 -0
  153. package/.agents/backend/fm-sessionstart-cursor.sh +40 -0
  154. package/.agents/backend/fm-sessionstart-nudge.sh +45 -0
  155. package/.agents/backend/fm-sessionstart-run.sh +145 -0
  156. package/.agents/backend/fm-spawn.sh +3153 -0
  157. package/.agents/backend/fm-startup-memory-budget-lib.sh +224 -0
  158. package/.agents/backend/fm-startup-memory-budget.sh +94 -0
  159. package/.agents/backend/fm-startup-network.sh +642 -0
  160. package/.agents/backend/fm-stow-cascade.sh +251 -0
  161. package/.agents/backend/fm-subagent-pretool-check.sh +207 -0
  162. package/.agents/backend/fm-supervise-daemon.sh +1732 -0
  163. package/.agents/backend/fm-supervision-instructions.sh +215 -0
  164. package/.agents/backend/fm-supervision-lib.sh +90 -0
  165. package/.agents/backend/fm-supervisor-target-lib.sh +78 -0
  166. package/.agents/backend/fm-tangle-lib.sh +53 -0
  167. package/.agents/backend/fm-task-inbox-lib.sh +402 -0
  168. package/.agents/backend/fm-tasks-axi-lib.sh +123 -0
  169. package/.agents/backend/fm-teardown.sh +2922 -0
  170. package/.agents/backend/fm-test-isolation-proof.sh +588 -0
  171. package/.agents/backend/fm-test-run.sh +2191 -0
  172. package/.agents/backend/fm-timeout-lib.sh +141 -0
  173. package/.agents/backend/fm-timing-lib.sh +179 -0
  174. package/.agents/backend/fm-tmux-lib.sh +291 -0
  175. package/.agents/backend/fm-tool-update-check.sh +898 -0
  176. package/.agents/backend/fm-trace-context-lib.sh +227 -0
  177. package/.agents/backend/fm-transition-lib.sh +103 -0
  178. package/.agents/backend/fm-turnend-guard-cursor.sh +391 -0
  179. package/.agents/backend/fm-turnend-guard-grok.sh +90 -0
  180. package/.agents/backend/fm-turnend-guard.sh +432 -0
  181. package/.agents/backend/fm-update.sh +110 -0
  182. package/.agents/backend/fm-vendor-auth-probe.sh +190 -0
  183. package/.agents/backend/fm-voice-client.py +1373 -0
  184. package/.agents/backend/fm-voice-relay.py +1256 -0
  185. package/.agents/backend/fm-wake-drain.sh +592 -0
  186. package/.agents/backend/fm-wake-grant.sh +127 -0
  187. package/.agents/backend/fm-wake-lib.sh +1849 -0
  188. package/.agents/backend/fm-watch-arm.sh +602 -0
  189. package/.agents/backend/fm-watch-checkpoint.sh +109 -0
  190. package/.agents/backend/fm-watch.sh +1962 -0
  191. package/.agents/backend/fm-x-dismiss.sh +116 -0
  192. package/.agents/backend/fm-x-followup.sh +286 -0
  193. package/.agents/backend/fm-x-lib.sh +1000 -0
  194. package/.agents/backend/fm-x-link.sh +234 -0
  195. package/.agents/backend/fm-x-poll.sh +185 -0
  196. package/.agents/backend/fm-x-reply.sh +385 -0
  197. package/.agents/backend/fm_voice_frame.py +166 -0
  198. package/.agents/backend/fm_voice_records.py +574 -0
  199. package/.agents/backend/model-bridge.py +360 -0
  200. package/.agents/backend/opencode-go-bridge.py +30 -0
  201. package/.agents/bus/README.md +12 -0
  202. package/.agents/bus/messages.json +1 -0
  203. package/.agents/config/agents.machine.example.yaml +16 -0
  204. package/.agents/config/agents.yaml.example +72 -0
  205. package/.agents/config/crew-dispatch.json +22 -0
  206. package/.agents/config/cron.yaml +11 -0
  207. package/.agents/config/eindri-dispatch.json +67 -0
  208. package/.agents/config/eindri-harness +1 -0
  209. package/.agents/config/startup-memory-budget +1 -0
  210. package/.agents/filebrowser/.filebrowser.json +6 -0
  211. package/.agents/filebrowser/README.md +11 -0
  212. package/.agents/gateway/README.md +12 -0
  213. package/.agents/github/README.md +15 -0
  214. package/.agents/github/webhooks/.gitkeep +0 -0
  215. package/.agents/github/workflows/.gitkeep +0 -0
  216. package/.agents/harness/opencode/plugins/lib/rodd-operational-input.js +37 -0
  217. package/.agents/harness/opencode/plugins/package.json +4 -0
  218. package/.agents/harness/opencode/plugins/saga-sessionstart.js +77 -0
  219. package/.agents/harness/opencode/plugins/syn-cd-check.js +61 -0
  220. package/.agents/harness/opencode/plugins/syn-pretool-check.js +68 -0
  221. package/.agents/harness/opencode/plugins/syn-turnend-guard.js +105 -0
  222. package/.agents/harness/opencode/plugins/syn-watch-arm.js +521 -0
  223. package/.agents/memory/README.md +46 -0
  224. package/.agents/memory/runes_audit.md +5 -0
  225. package/.agents/migrations/0001-hodd-layout.sh +38 -0
  226. package/.agents/migrations/0002-a2a-mcp.sh +27 -0
  227. package/.agents/migrations/0003-private-data-separation.sh +121 -0
  228. package/.agents/migrations/0004-hoard-and-realms.sh +104 -0
  229. package/.agents/migrations/0005-roots-out-of-tree.sh +158 -0
  230. package/.agents/sandbox/Dockerfile.utgard +19 -0
  231. package/.agents/sandbox/README.md +14 -0
  232. package/.agents/sandbox/utgard.config.json +14 -0
  233. package/.agents/skills/README.md +59 -0
  234. package/.agents/skills/bragi-marketing/README.md +3 -0
  235. package/.agents/skills/bragi-marketing/SKILL.md +82 -0
  236. package/.agents/skills/eindri-homes/README.md +3 -0
  237. package/.agents/skills/eindri-homes/SKILL.md +291 -0
  238. package/.agents/skills/eindri-homes/assets/control-plane.md +122 -0
  239. package/.agents/skills/eindri-homes/assets/dispatch.md +80 -0
  240. package/.agents/skills/frigg-consent/README.md +3 -0
  241. package/.agents/skills/frigg-consent/SKILL.md +56 -0
  242. package/.agents/skills/galdr-ymirsystem/README.md +3 -0
  243. package/.agents/skills/galdr-ymirsystem/SKILL.md +159 -0
  244. package/.agents/skills/galdr-ymirsystem/assets/README.md +74 -0
  245. package/.agents/skills/galdr-ymirsystem/assets/brokk-distro-runtime.md +390 -0
  246. package/.agents/skills/galdr-ymirsystem/assets/build-method.md +113 -0
  247. package/.agents/skills/galdr-ymirsystem/assets/build-tool-categories.md +178 -0
  248. package/.agents/skills/galdr-ymirsystem/assets/eindri-orchestration.md +518 -0
  249. package/.agents/skills/galdr-ymirsystem/assets/eindri-profiles.md +136 -0
  250. package/.agents/skills/galdr-ymirsystem/assets/harness-integration/README.md +736 -0
  251. package/.agents/skills/galdr-ymirsystem/assets/harness-integration/claude-code.md +197 -0
  252. package/.agents/skills/galdr-ymirsystem/assets/harness-integration/codex.md +191 -0
  253. package/.agents/skills/galdr-ymirsystem/assets/harness-integration/cursor.md +193 -0
  254. package/.agents/skills/galdr-ymirsystem/assets/harness-integration/opencode.md +262 -0
  255. package/.agents/skills/galdr-ymirsystem/assets/harness-integration/pi.md +295 -0
  256. package/.agents/skills/galdr-ymirsystem/assets/hlidskjalf-ui.md +539 -0
  257. package/.agents/skills/galdr-ymirsystem/assets/installation.md +763 -0
  258. package/.agents/skills/galdr-ymirsystem/assets/local-models/HOST-DATA.example.md +72 -0
  259. package/.agents/skills/galdr-ymirsystem/assets/local-models.md +274 -0
  260. package/.agents/skills/galdr-ymirsystem/assets/memory-well.md +163 -0
  261. package/.agents/skills/galdr-ymirsystem/assets/nornir-jobs.md +415 -0
  262. package/.agents/skills/galdr-ymirsystem/assets/norse-naming.md +325 -0
  263. package/.agents/skills/galdr-ymirsystem/assets/odrerir-hall.md +133 -0
  264. package/.agents/skills/galdr-ymirsystem/assets/pi-boot/einherjar-spawn.schema.json +81 -0
  265. package/.agents/skills/galdr-ymirsystem/assets/pi-boot/herdr-profile.toml +75 -0
  266. package/.agents/skills/galdr-ymirsystem/assets/pi-boot/pi-profile.yml +101 -0
  267. package/.agents/skills/galdr-ymirsystem/assets/pi-boot/supervision-tree.yml +163 -0
  268. package/.agents/skills/galdr-ymirsystem/assets/pi-boot-guide.md +58 -0
  269. package/.agents/skills/galdr-ymirsystem/assets/porting-upstream-to-norse.md +301 -0
  270. package/.agents/skills/galdr-ymirsystem/assets/principles.md +385 -0
  271. package/.agents/skills/galdr-ymirsystem/assets/reference-adoption.md +99 -0
  272. package/.agents/skills/galdr-ymirsystem/assets/registry.md +379 -0
  273. package/.agents/skills/galdr-ymirsystem/assets/runtime-compliance.md +463 -0
  274. package/.agents/skills/galdr-ymirsystem/assets/runtime-components.md +553 -0
  275. package/.agents/skills/galdr-ymirsystem/assets/smidja.md +180 -0
  276. package/.agents/skills/galdr-ymirsystem/schemas/toon-schemas.md +190 -0
  277. package/.agents/skills/galdr-ymirsystem/scripts/README.md +45 -0
  278. package/.agents/skills/galdr-ymirsystem/scripts/bench-one.sh +248 -0
  279. package/.agents/skills/galdr-ymirsystem/scripts/compliance-check.sh +503 -0
  280. package/.agents/skills/galdr-ymirsystem/scripts/gpu-sample.sh +43 -0
  281. package/.agents/skills/galdr-ymirsystem/scripts/stop-all.sh +34 -0
  282. package/.agents/skills/galdr-ymirsystem/scripts/toon-check.py +188 -0
  283. package/.agents/skills/gjallarhorn-relay/README.md +3 -0
  284. package/.agents/skills/gjallarhorn-relay/SKILL.md +283 -0
  285. package/.agents/skills/groa-update/SKILL.md +90 -0
  286. package/.agents/skills/hamr-adapters/README.md +3 -0
  287. package/.agents/skills/hamr-adapters/SKILL.md +123 -0
  288. package/.agents/skills/hamr-adapters/references/common/control-and-recovery.md +37 -0
  289. package/.agents/skills/hamr-adapters/references/common/dispatch.md +32 -0
  290. package/.agents/skills/hamr-adapters/references/common/model-and-effort.md +42 -0
  291. package/.agents/skills/hamr-adapters/references/common/primary-hooks.md +40 -0
  292. package/.agents/skills/hamr-adapters/references/harness/claude.md +55 -0
  293. package/.agents/skills/hamr-adapters/references/harness/codex.md +43 -0
  294. package/.agents/skills/hamr-adapters/references/harness/cursor.md +75 -0
  295. package/.agents/skills/hamr-adapters/references/harness/grok.md +69 -0
  296. package/.agents/skills/hamr-adapters/references/harness/kimi.md +51 -0
  297. package/.agents/skills/hamr-adapters/references/harness/muse.md +70 -0
  298. package/.agents/skills/hamr-adapters/references/harness/opencode.md +42 -0
  299. package/.agents/skills/hamr-adapters/references/harness/pi.md +56 -0
  300. package/.agents/skills/herdr-panes/README.md +3 -0
  301. package/.agents/skills/herdr-panes/SKILL.md +92 -0
  302. package/.agents/skills/herdr-panes/assets/herdr-backend.md +346 -0
  303. package/.agents/skills/herdr-panes/assets/tmux-backend.md +115 -0
  304. package/.agents/skills/hnoss-design/DESIGN.md +19 -0
  305. package/.agents/skills/hnoss-design/README.md +3 -0
  306. package/.agents/skills/hnoss-design/SKILL.md +83 -0
  307. package/.agents/skills/hvild-afk/README.md +3 -0
  308. package/.agents/skills/hvild-afk/SKILL.md +241 -0
  309. package/.agents/skills/jord-projects/README.md +3 -0
  310. package/.agents/skills/jord-projects/SKILL.md +92 -0
  311. package/.agents/skills/lifecycle/SKILL.md +56 -0
  312. package/.agents/skills/lifecycle/smoke_test.sh +57 -0
  313. package/.agents/skills/lifecycle/start.sh +21 -0
  314. package/.agents/skills/lifecycle/status.sh +35 -0
  315. package/.agents/skills/lifecycle/stop.sh +16 -0
  316. package/.agents/skills/muninn-stow/README.md +3 -0
  317. package/.agents/skills/muninn-stow/SKILL.md +309 -0
  318. package/.agents/skills/no-mistakes/SKILL.md +379 -0
  319. package/.agents/skills/nornir-schedule/README.md +3 -0
  320. package/.agents/skills/nornir-schedule/SKILL.md +25 -0
  321. package/.agents/skills/nornir-schedule/assets/events.md +137 -0
  322. package/.agents/skills/nornir-schedule/assets/quota.md +131 -0
  323. package/.agents/skills/nsr-compliance/README.md +3 -0
  324. package/.agents/skills/nsr-compliance/SKILL.md +29 -0
  325. package/.agents/skills/nsr-compliance/assets/nsr/README.md +40 -0
  326. package/.agents/skills/nsr-compliance/assets/nsr/assets/RULES/README.md +15 -0
  327. package/.agents/skills/nsr-compliance/assets/nsr/assets/RULES/git-workflow.md +18 -0
  328. package/.agents/skills/nsr-compliance/assets/nsr/assets/RULES/security.md +22 -0
  329. package/.agents/skills/nsr-compliance/assets/nsr/assets/RULES/tech-stack.md +8 -0
  330. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/SKILL.md +71 -0
  331. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/config/core_four.yaml +16 -0
  332. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/gates/check_danger.sh +102 -0
  333. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/gates/check_wiring.sh +69 -0
  334. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/gates/validate_code.sh +29 -0
  335. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/gates/verify_docs.py +66 -0
  336. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/generate.sh +109 -0
  337. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/harness/envelopes/result_envelope.json +14 -0
  338. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/harness/envelopes/task_envelope.json +20 -0
  339. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/harness/runner.py +303 -0
  340. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/telemetry/logger.py +112 -0
  341. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/README.md +18 -0
  342. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/config/README.md +10 -0
  343. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/gates/README.md +12 -0
  344. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/gates/check_env.sh +23 -0
  345. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/gates/check_paths.sh +20 -0
  346. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/gates/check_platform.sh +23 -0
  347. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/harness/README.md +11 -0
  348. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/harness/envelopes/README.md +10 -0
  349. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/installer/README.md +10 -0
  350. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/installer/install.sh +125 -0
  351. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/telemetry/README.md +11 -0
  352. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/README.md +20 -0
  353. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/features/README.md +36 -0
  354. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/features/SKILL-template.md +14 -0
  355. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/git_ops/README.md +25 -0
  356. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/git_ops/SKILL.md +13 -0
  357. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/git_ops/create_branch.sh +6 -0
  358. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/git_ops/safe_commit.sh +9 -0
  359. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/git_ops/sync_upstream.sh +6 -0
  360. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/README.md +27 -0
  361. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/SKILL.md +15 -0
  362. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/smoke_test.sh +12 -0
  363. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/start.sh +19 -0
  364. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/status.sh +12 -0
  365. package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/stop.sh +15 -0
  366. package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/README.md +18 -0
  367. package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/config/README.md +10 -0
  368. package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/config/core_four.yaml +13 -0
  369. package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/README.md +12 -0
  370. package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/check_danger.sh +102 -0
  371. package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/check_env.sh +23 -0
  372. package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/check_paths.sh +20 -0
  373. package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/check_platform.sh +23 -0
  374. package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/check_wiring.sh +69 -0
  375. package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/harness/README.md +11 -0
  376. package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/harness/envelopes/README.md +10 -0
  377. package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/harness/envelopes/result_envelope.json +14 -0
  378. package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/harness/envelopes/task_envelope.json +20 -0
  379. package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/harness/runner.py +303 -0
  380. package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/installer/README.md +10 -0
  381. package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/installer/install.sh +125 -0
  382. package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/telemetry/README.md +11 -0
  383. package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/telemetry/logger.py +112 -0
  384. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/BEST_PRACTICES/README.md +14 -0
  385. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/BEST_PRACTICES/api.md +17 -0
  386. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/BEST_PRACTICES/compliance-wiring.md +155 -0
  387. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/BEST_PRACTICES/frontend.md +15 -0
  388. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/README.md +11 -0
  389. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/README.md +23 -0
  390. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/clients/README.md +16 -0
  391. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/clients/template-README.md +11 -0
  392. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/deploy.sh +49 -0
  393. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/envs/README.md +12 -0
  394. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/envs/development.env.example +17 -0
  395. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/envs/production.env.example +17 -0
  396. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/envs/staging.env.example +17 -0
  397. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/tenants/README.md +11 -0
  398. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/tenants/template.env.example +8 -0
  399. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/README.md +26 -0
  400. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/agent.md +7 -0
  401. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/developers/dev-1.md +20 -0
  402. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/linux.md +9 -0
  403. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/macos.md +10 -0
  404. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/shared.md +19 -0
  405. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/windows.md +14 -0
  406. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/HOSTING/README.md +25 -0
  407. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/HOSTING/_template.md +41 -0
  408. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/HOSTING/hosting-1.md +41 -0
  409. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/README.md +21 -0
  410. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/RUNBOOK/README.md +15 -0
  411. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/RUNBOOK/deployment.md +19 -0
  412. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/RUNBOOK/disaster-recovery.md +15 -0
  413. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/RUNBOOK/ops-tasks.md +14 -0
  414. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/features/README.md +16 -0
  415. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/project-skills.md +146 -0
  416. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/research/README.md +11 -0
  417. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/research/software-compliance-research.md +269 -0
  418. package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/working-with-agents.md +260 -0
  419. package/.agents/skills/nsr-compliance/assets/nsr/assets/root/AGENTS.md +38 -0
  420. package/.agents/skills/nsr-compliance/assets/nsr/assets/root/ARCHITECTURE.md +36 -0
  421. package/.agents/skills/nsr-compliance/assets/nsr/assets/root/BEST_PRACTICES.md +27 -0
  422. package/.agents/skills/nsr-compliance/assets/nsr/assets/root/CI_CD.md +23 -0
  423. package/.agents/skills/nsr-compliance/assets/nsr/assets/root/FEATURES.md +15 -0
  424. package/.agents/skills/nsr-compliance/assets/nsr/assets/root/README.md +22 -0
  425. package/.agents/skills/nsr-compliance/assets/nsr/assets/root/RULES.md +37 -0
  426. package/.agents/skills/nsr-compliance/assets/nsr/assets/root/STRUCTURE.md +45 -0
  427. package/.agents/skills/nsr-compliance/assets/nsr/assets/root/TECH_STACK.md +28 -0
  428. package/.agents/skills/nsr-compliance/assets/nsr/scaffold-spec.md +63 -0
  429. package/.agents/skills/nsr-compliance/assets/nsr/scripts/scaffold.sh +103 -0
  430. package/.agents/skills/nsr-compliance/assets/nsr/scripts/validate.sh +52 -0
  431. package/.agents/skills/nsr-compliance/assets/nsrcompliance/SKILL.md +71 -0
  432. package/.agents/skills/nsr-compliance/assets/nsrcompliance/config/core_four.yaml +16 -0
  433. package/.agents/skills/nsr-compliance/assets/nsrcompliance/gates/check_danger.sh +102 -0
  434. package/.agents/skills/nsr-compliance/assets/nsrcompliance/gates/check_wiring.sh +69 -0
  435. package/.agents/skills/nsr-compliance/assets/nsrcompliance/gates/validate_code.sh +29 -0
  436. package/.agents/skills/nsr-compliance/assets/nsrcompliance/gates/verify_docs.py +66 -0
  437. package/.agents/skills/nsr-compliance/assets/nsrcompliance/generate.sh +109 -0
  438. package/.agents/skills/nsr-compliance/assets/nsrcompliance/harness/envelopes/result_envelope.json +14 -0
  439. package/.agents/skills/nsr-compliance/assets/nsrcompliance/harness/envelopes/task_envelope.json +20 -0
  440. package/.agents/skills/nsr-compliance/assets/nsrcompliance/harness/runner.py +303 -0
  441. package/.agents/skills/nsr-compliance/assets/nsrcompliance/telemetry/logger.py +112 -0
  442. package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/README.md +18 -0
  443. package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/config/README.md +10 -0
  444. package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/gates/README.md +12 -0
  445. package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/gates/check_env.sh +23 -0
  446. package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/gates/check_paths.sh +20 -0
  447. package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/gates/check_platform.sh +23 -0
  448. package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/harness/README.md +11 -0
  449. package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/harness/envelopes/README.md +10 -0
  450. package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/installer/README.md +10 -0
  451. package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/installer/install.sh +125 -0
  452. package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/telemetry/README.md +11 -0
  453. package/.agents/skills/pr-ops/README.md +3 -0
  454. package/.agents/skills/pr-ops/SKILL.md +109 -0
  455. package/.agents/skills/ratatoskr-a2a/README.md +3 -0
  456. package/.agents/skills/ratatoskr-a2a/SKILL.md +148 -0
  457. package/.agents/skills/rules-check-drift/SKILL.md +81 -0
  458. package/.agents/skills/saga-bearings/README.md +3 -0
  459. package/.agents/skills/saga-bearings/SKILL.md +26 -0
  460. package/.agents/skills/saga-bearings/assets/bearings.md +161 -0
  461. package/.agents/skills/saga-bearings/assets/board-template.html +731 -0
  462. package/.agents/skills/saga-bearings/assets/recap.md +56 -0
  463. package/.agents/skills/syn-recovery/README.md +3 -0
  464. package/.agents/skills/syn-recovery/SKILL.md +54 -0
  465. package/.agents/skills/tyr-check/README.md +3 -0
  466. package/.agents/skills/tyr-check/SKILL.md +218 -0
  467. package/.agents/skills/urdh-hold/README.md +3 -0
  468. package/.agents/skills/urdh-hold/SKILL.md +25 -0
  469. package/.agents/skills/urdh-hold/assets/decisions.md +15 -0
  470. package/.agents/skills/urdh-hold/assets/hold.md +54 -0
  471. package/.agents/skills/vor-diagnostics/README.md +3 -0
  472. package/.agents/skills/vor-diagnostics/SKILL.md +68 -0
  473. package/.agents/skills/ymir-host/README.md +3 -0
  474. package/.agents/skills/ymir-host/SKILL.md +35 -0
  475. package/.agents/skills/ymir-host/assets/desktop.md +36 -0
  476. package/.agents/skills/ymir-host/assets/install.md +69 -0
  477. package/.agents/skills/ymir-host/assets/omarchy.md +297 -0
  478. package/.agents/skills/ymir-host/assets/runbooks.md +15 -0
  479. package/.agents/skills/ymir-host/assets/thjazi.md +220 -0
  480. package/.agents/skills/ymir-host/assets/update.md +64 -0
  481. package/.agents/tests/assets/board-render-harness.mjs +117 -0
  482. package/.agents/tests/cmux-test-safety.sh +51 -0
  483. package/.agents/tests/fixtures.sh +291 -0
  484. package/.agents/tests/fm-afk-inject-e2e.test.sh +428 -0
  485. package/.agents/tests/fm-afk-inject-herdr-e2e.test.sh +536 -0
  486. package/.agents/tests/fm-afk-launch.test.sh +961 -0
  487. package/.agents/tests/fm-afk-pi-herdr-return-e2e.test.sh +297 -0
  488. package/.agents/tests/fm-afk-return.test.sh +283 -0
  489. package/.agents/tests/fm-arm-pretool-check.test.sh +482 -0
  490. package/.agents/tests/fm-ask-user-authority.test.sh +42 -0
  491. package/.agents/tests/fm-backend-autodetect-smoke.test.sh +176 -0
  492. package/.agents/tests/fm-backend-cmux-smoke.test.sh +188 -0
  493. package/.agents/tests/fm-backend-cmux.test.sh +1166 -0
  494. package/.agents/tests/fm-backend-herdr-eventwait-smoke.test.sh +136 -0
  495. package/.agents/tests/fm-backend-herdr-eventwait.test.py +106 -0
  496. package/.agents/tests/fm-backend-herdr-focus-flash-e2e.test.sh +409 -0
  497. package/.agents/tests/fm-backend-herdr-launcher-workspace-e2e.test.sh +437 -0
  498. package/.agents/tests/fm-backend-herdr-presentation-e2e.test.sh +1424 -0
  499. package/.agents/tests/fm-backend-herdr-prune-safety-e2e.test.sh +180 -0
  500. package/.agents/tests/fm-backend-herdr-respawn-idem-e2e.test.sh +182 -0
  501. package/.agents/tests/fm-backend-herdr-smoke.test.sh +355 -0
  502. package/.agents/tests/fm-backend-herdr-workspace-per-home-e2e.test.sh +251 -0
  503. package/.agents/tests/fm-backend-herdr.test.sh +4606 -0
  504. package/.agents/tests/fm-backend-orca.test.sh +1357 -0
  505. package/.agents/tests/fm-backend-tmux-smoke.test.sh +173 -0
  506. package/.agents/tests/fm-backend-zellij-smoke.test.sh +205 -0
  507. package/.agents/tests/fm-backend-zellij.test.sh +1360 -0
  508. package/.agents/tests/fm-backend.test.sh +1142 -0
  509. package/.agents/tests/fm-backlog-atomicity.test.sh +2302 -0
  510. package/.agents/tests/fm-backlog-handoff.test.sh +1360 -0
  511. package/.agents/tests/fm-bearings-board-render.test.sh +135 -0
  512. package/.agents/tests/fm-bearings-board.test.sh +414 -0
  513. package/.agents/tests/fm-bearings-snapshot.test.sh +1990 -0
  514. package/.agents/tests/fm-bootstrap-network-parallel.test.sh +316 -0
  515. package/.agents/tests/fm-bootstrap.test.sh +1178 -0
  516. package/.agents/tests/fm-branch-supervision.test.sh +552 -0
  517. package/.agents/tests/fm-brief.test.sh +785 -0
  518. package/.agents/tests/fm-busy-adapter-wiring.test.sh +324 -0
  519. package/.agents/tests/fm-busy-state.test.sh +465 -0
  520. package/.agents/tests/fm-calm-pi-extension.test.sh +3979 -0
  521. package/.agents/tests/fm-captain-hold-lifecycle.test.sh +1187 -0
  522. package/.agents/tests/fm-cd-pretool-check.test.sh +400 -0
  523. package/.agents/tests/fm-check-unregister.test.sh +198 -0
  524. package/.agents/tests/fm-classify-corr-token.test.sh +543 -0
  525. package/.agents/tests/fm-classify-decision-key.test.sh +340 -0
  526. package/.agents/tests/fm-claude-stop-autoarm-live-e2e.test.sh +164 -0
  527. package/.agents/tests/fm-claude-stop-autoarm.test.sh +1190 -0
  528. package/.agents/tests/fm-cmux-claude-composer-live-e2e.test.sh +110 -0
  529. package/.agents/tests/fm-codex-continuity-live-e2e.test.sh +55 -0
  530. package/.agents/tests/fm-composer-ghost.test.sh +716 -0
  531. package/.agents/tests/fm-composer-lib.test.sh +666 -0
  532. package/.agents/tests/fm-composer-matrix-live-e2e.test.sh +220 -0
  533. package/.agents/tests/fm-control-herdr-smoke.test.sh +149 -0
  534. package/.agents/tests/fm-control-relaunch.test.sh +1530 -0
  535. package/.agents/tests/fm-control.test.sh +910 -0
  536. package/.agents/tests/fm-crew-state.test.sh +1610 -0
  537. package/.agents/tests/fm-cursor-harness.test.sh +404 -0
  538. package/.agents/tests/fm-cursor-primary-live-e2e.test.sh +217 -0
  539. package/.agents/tests/fm-cursor-primary.test.sh +708 -0
  540. package/.agents/tests/fm-daemon.test.sh +2740 -0
  541. package/.agents/tests/fm-documentation-audiences.test.sh +141 -0
  542. package/.agents/tests/fm-ensure-agents-md.test.sh +371 -0
  543. package/.agents/tests/fm-extension-binding.test.sh +2187 -0
  544. package/.agents/tests/fm-fleet-snapshot-view.test.sh +816 -0
  545. package/.agents/tests/fm-fleet-sync.test.sh +721 -0
  546. package/.agents/tests/fm-gate-refuse.test.sh +356 -0
  547. package/.agents/tests/fm-gitignore-config.test.sh +89 -0
  548. package/.agents/tests/fm-gotmp.test.sh +230 -0
  549. package/.agents/tests/fm-grok-continuity-live-e2e.test.sh +112 -0
  550. package/.agents/tests/fm-grok-harness.test.sh +117 -0
  551. package/.agents/tests/fm-grok-stop-live-e2e.test.sh +219 -0
  552. package/.agents/tests/fm-guard-stale-banner.test.sh +709 -0
  553. package/.agents/tests/fm-harness-adapter-instructions-live-e2e.test.sh +134 -0
  554. package/.agents/tests/fm-harness-adapter-references.test.sh +30 -0
  555. package/.agents/tests/fm-harness-liveness-drift-live-e2e.test.sh +151 -0
  556. package/.agents/tests/fm-herdr-lab.test.sh +243 -0
  557. package/.agents/tests/fm-herdr-session-cleanup-e2e.test.sh +146 -0
  558. package/.agents/tests/fm-herdr-session-cleanup.test.sh +329 -0
  559. package/.agents/tests/fm-herdr-submit-confirm-live-e2e.test.sh +125 -0
  560. package/.agents/tests/fm-herdr-version-floor-live-e2e.test.sh +144 -0
  561. package/.agents/tests/fm-home-summary-refresh.test.sh +971 -0
  562. package/.agents/tests/fm-inactive-reconcile.test.sh +485 -0
  563. package/.agents/tests/fm-kimi-harness.test.sh +687 -0
  564. package/.agents/tests/fm-lint-workflows.test.sh +532 -0
  565. package/.agents/tests/fm-lint.test.sh +1023 -0
  566. package/.agents/tests/fm-muse-harness.test.sh +932 -0
  567. package/.agents/tests/fm-muse-signals-live-e2e.test.sh +205 -0
  568. package/.agents/tests/fm-no-mistakes-required.test.sh +72 -0
  569. package/.agents/tests/fm-on.test.sh +507 -0
  570. package/.agents/tests/fm-opencode-primary-live-e2e.test.sh +357 -0
  571. package/.agents/tests/fm-operational-input.test.sh +160 -0
  572. package/.agents/tests/fm-peek-remote.test.sh +110 -0
  573. package/.agents/tests/fm-pending-reply.test.sh +1288 -0
  574. package/.agents/tests/fm-pi-branch-extension.test.sh +3182 -0
  575. package/.agents/tests/fm-pi-branch-live-e2e.test.sh +527 -0
  576. package/.agents/tests/fm-pi-primary-live-e2e.test.sh +345 -0
  577. package/.agents/tests/fm-pi-primary-types.test.sh +68 -0
  578. package/.agents/tests/fm-pi-watch-extension.test.sh +2843 -0
  579. package/.agents/tests/fm-pr-check-security.test.sh +2140 -0
  580. package/.agents/tests/fm-pr-merge.test.sh +2135 -0
  581. package/.agents/tests/fm-procevent-quota.test.sh +225 -0
  582. package/.agents/tests/fm-procevent-when.test.sh +406 -0
  583. package/.agents/tests/fm-procevent.test.sh +1745 -0
  584. package/.agents/tests/fm-project-origin.test.sh +110 -0
  585. package/.agents/tests/fm-public-followup.test.sh +2272 -0
  586. package/.agents/tests/fm-quota-array-dispatch-live-e2e.test.sh +526 -0
  587. package/.agents/tests/fm-quota-choose.test.sh +626 -0
  588. package/.agents/tests/fm-remote-backlog-handoff.test.sh +453 -0
  589. package/.agents/tests/fm-remote-doctor.test.sh +625 -0
  590. package/.agents/tests/fm-remote-entrypoint.test.sh +59 -0
  591. package/.agents/tests/fm-remote-job-orphan-reap.test.sh +205 -0
  592. package/.agents/tests/fm-remote-job.test.sh +768 -0
  593. package/.agents/tests/fm-remote-reply.test.sh +520 -0
  594. package/.agents/tests/fm-remote-secondmate-lifecycle-e2e.test.sh +1256 -0
  595. package/.agents/tests/fm-remote-secondmate-parent-binding.test.sh +326 -0
  596. package/.agents/tests/fm-remote-secondmate-trace-context.test.sh +310 -0
  597. package/.agents/tests/fm-remote-transport-lanes.test.sh +431 -0
  598. package/.agents/tests/fm-review-diff.test.sh +176 -0
  599. package/.agents/tests/fm-secondmate-harness.test.sh +2600 -0
  600. package/.agents/tests/fm-secondmate-lifecycle-e2e.test.sh +259 -0
  601. package/.agents/tests/fm-secondmate-liveness.test.sh +559 -0
  602. package/.agents/tests/fm-secondmate-reconcile.test.sh +732 -0
  603. package/.agents/tests/fm-secondmate-safety.test.sh +2972 -0
  604. package/.agents/tests/fm-secondmate-sync.test.sh +913 -0
  605. package/.agents/tests/fm-send-inbox-doorbell-live-e2e.test.sh +206 -0
  606. package/.agents/tests/fm-send-inbox.test.sh +352 -0
  607. package/.agents/tests/fm-send-popup-settle.test.sh +167 -0
  608. package/.agents/tests/fm-send-remote-delivery.test.sh +796 -0
  609. package/.agents/tests/fm-send-resolve-key.test.sh +551 -0
  610. package/.agents/tests/fm-send-secondmate-marker-herdr-e2e.test.sh +187 -0
  611. package/.agents/tests/fm-send-secondmate-marker.test.sh +278 -0
  612. package/.agents/tests/fm-send-settle.test.sh +147 -0
  613. package/.agents/tests/fm-send-strict.test.sh +241 -0
  614. package/.agents/tests/fm-session-lock-ancestry.test.sh +365 -0
  615. package/.agents/tests/fm-session-start.test.sh +2515 -0
  616. package/.agents/tests/fm-sessionstart-hook-live-e2e.test.sh +631 -0
  617. package/.agents/tests/fm-sessionstart-instruction-refresh-live-e2e.test.sh +230 -0
  618. package/.agents/tests/fm-sessionstart-nudge.test.sh +1039 -0
  619. package/.agents/tests/fm-shared-captain-inheritance.test.sh +404 -0
  620. package/.agents/tests/fm-spawn-batch.test.sh +148 -0
  621. package/.agents/tests/fm-spawn-dispatch-profile.test.sh +827 -0
  622. package/.agents/tests/fm-spawn-pool-base-freshen.test.sh +440 -0
  623. package/.agents/tests/fm-spawn-worktree-settle.test.sh +147 -0
  624. package/.agents/tests/fm-startup-memory-budget.test.sh +333 -0
  625. package/.agents/tests/fm-startup-network.test.sh +712 -0
  626. package/.agents/tests/fm-stow-cascade.test.sh +370 -0
  627. package/.agents/tests/fm-subagent-pretool-check.test.sh +291 -0
  628. package/.agents/tests/fm-supervision-events.test.sh +156 -0
  629. package/.agents/tests/fm-supervision-instructions.test.sh +189 -0
  630. package/.agents/tests/fm-tangle-guard.test.sh +277 -0
  631. package/.agents/tests/fm-task-delivery.test.sh +420 -0
  632. package/.agents/tests/fm-task-inbox.test.sh +513 -0
  633. package/.agents/tests/fm-teardown-endpoint-safety.test.sh +374 -0
  634. package/.agents/tests/fm-teardown.test.sh +2665 -0
  635. package/.agents/tests/fm-test-fixture-cleanup.test.sh +172 -0
  636. package/.agents/tests/fm-test-fixtures.test.sh +132 -0
  637. package/.agents/tests/fm-test-isolation-proof.test.sh +278 -0
  638. package/.agents/tests/fm-test-run.test.sh +1196 -0
  639. package/.agents/tests/fm-tmux-agent-liveness.test.sh +354 -0
  640. package/.agents/tests/fm-tmux-submit-busy.test.sh +340 -0
  641. package/.agents/tests/fm-tool-update-check.test.sh +1044 -0
  642. package/.agents/tests/fm-trace-context-lib.test.sh +253 -0
  643. package/.agents/tests/fm-trace-context-spawn.test.sh +581 -0
  644. package/.agents/tests/fm-transition-lib.test.sh +54 -0
  645. package/.agents/tests/fm-turnend-guard.test.sh +1822 -0
  646. package/.agents/tests/fm-update.test.sh +304 -0
  647. package/.agents/tests/fm-vendor-auth-probe.test.sh +395 -0
  648. package/.agents/tests/fm-voice-relay.test.sh +4741 -0
  649. package/.agents/tests/fm-wake-daemon-lifecycle-e2e.test.sh +171 -0
  650. package/.agents/tests/fm-wake-drain-open-decisions-cursor.test.sh +356 -0
  651. package/.agents/tests/fm-wake-drain-open-decisions.test.sh +226 -0
  652. package/.agents/tests/fm-wake-drain-unread-status.test.sh +379 -0
  653. package/.agents/tests/fm-wake-queue.test.sh +1224 -0
  654. package/.agents/tests/fm-watch-arm.test.sh +821 -0
  655. package/.agents/tests/fm-watch-checkpoint.test.sh +87 -0
  656. package/.agents/tests/fm-watch-recovery-loop.test.sh +223 -0
  657. package/.agents/tests/fm-watch-triage.test.sh +3889 -0
  658. package/.agents/tests/fm-watcher-lock.test.sh +1133 -0
  659. package/.agents/tests/fm-x-mode.test.sh +3042 -0
  660. package/.agents/tests/gleipnir-guard-pretool-check.test.sh +51 -0
  661. package/.agents/tests/gleipnir-machine-lock.test.sh +130 -0
  662. package/.agents/tests/herdr-test-safety.sh +42 -0
  663. package/.agents/tests/lib.sh +315 -0
  664. package/.agents/tests/remote-herdr-fixture.sh +125 -0
  665. package/.agents/tests/secondmate-helpers.sh +193 -0
  666. package/.agents/tests/smoke.test.sh +93 -0
  667. package/.agents/tests/wake-helpers.sh +338 -0
  668. package/.agents/tests/zellij-test-safety.sh +60 -0
  669. package/.agents/tools/README.md +10 -0
  670. package/.agents/tools/bin/tasks-cli +267 -0
  671. package/.agents/tools/tasks-cli.ts +216 -0
  672. package/AGENTS.md +498 -0
  673. package/CHANGELOG.md +1913 -0
  674. package/LICENSE +1 -1
  675. package/NOTICE +63 -0
  676. package/README.md +114 -60
  677. package/RULES/01-domains.md +51 -0
  678. package/RULES/02-agents.md +78 -0
  679. package/RULES/03-houses.md +61 -0
  680. package/RULES/04-hoard.md +97 -0
  681. package/RULES/05-platforms.md +67 -0
  682. package/RULES/06-append-only.md +108 -0
  683. package/RULES/07-config.md +101 -0
  684. package/RULES/08-delivery-gate.md +75 -0
  685. package/RULES/09-electron.md +58 -0
  686. package/RULES/README.md +22 -0
  687. package/bin/README.md +107 -0
  688. package/bin/a2a-mcp.sh +133 -0
  689. package/bin/a2a-serve.py +103 -0
  690. package/bin/a2a-serve.sh +8 -0
  691. package/bin/a2a-talk.sh +50 -0
  692. package/bin/a2abridge-ensure.sh +108 -0
  693. package/bin/agent-run.sh +43 -0
  694. package/bin/agents-config.sh +256 -0
  695. package/bin/apodex-smoke-test.sh +105 -0
  696. package/bin/bifrost-bridge.sh +131 -0
  697. package/bin/bifrost-ingress.sh +77 -0
  698. package/bin/bootstrap-macos.sh +112 -0
  699. package/bin/bootstrap-windows.ps1 +112 -0
  700. package/bin/branch-guard.sh +64 -0
  701. package/bin/brokk +73 -0
  702. package/bin/brokk-classify-lib.sh +1770 -0
  703. package/bin/brokk-lease-lib.sh +222 -0
  704. package/bin/brokk-lease.sh +193 -0
  705. package/bin/brokk-lint.sh +65 -0
  706. package/bin/brokk-send.sh +51 -0
  707. package/bin/brokk-update.sh +9 -0
  708. package/bin/brokk-wake-grant.sh +127 -0
  709. package/bin/brokk-wake-lib.sh +1849 -0
  710. package/bin/changelog-assemble.sh +154 -0
  711. package/bin/changelog-guard.sh +197 -0
  712. package/bin/crash-sense.sh +173 -0
  713. package/bin/design-check.sh +80 -0
  714. package/bin/design-icon.sh +153 -0
  715. package/bin/desktop-place.sh +224 -0
  716. package/bin/docs-guard.sh +39 -0
  717. package/bin/editor-place.sh +225 -0
  718. package/bin/eindri-acclaim.sh +47 -0
  719. package/bin/eindri-control.sh +28 -0
  720. package/bin/eindri-role.sh +83 -0
  721. package/bin/eindri-seat.sh +83 -0
  722. package/bin/eindri-seen.sh +54 -0
  723. package/bin/eindri-send.sh +15 -0
  724. package/bin/eindri-start.sh +98 -0
  725. package/bin/eindri-watch.sh +57 -0
  726. package/bin/einherjar-spawn.sh +576 -0
  727. package/bin/eir-doctor.sh +158 -0
  728. package/bin/erindi-brief.sh +271 -0
  729. package/bin/feature-inventory.sh +73 -0
  730. package/bin/fleet-apply.sh +81 -0
  731. package/bin/github-deploy.sh +94 -0
  732. package/bin/gjallarhorn-expose.sh +136 -0
  733. package/bin/gjallarhorn-notify.sh +71 -0
  734. package/bin/gjallarhorn-purge.sh +67 -0
  735. package/bin/gjallarhorn-tunnel.sh +85 -0
  736. package/bin/gleipnir-lock-lib.sh +284 -0
  737. package/bin/groa-update.sh +130 -0
  738. package/bin/hall-snapshot.sh +111 -0
  739. package/bin/hamr-harness.sh +246 -0
  740. package/bin/heimdall-ssh-keys.sh +374 -0
  741. package/bin/herdr-agents.py +44 -0
  742. package/bin/herdr-ensure.sh +104 -0
  743. package/bin/herdr-run.sh +452 -0
  744. package/bin/hermes-ensure.sh +88 -0
  745. package/bin/hlidskjalf-agents.sh +172 -0
  746. package/bin/hlidskjalf-usage.sh +196 -0
  747. package/bin/hoard-guard.sh +135 -0
  748. package/bin/hoard-lib.sh +105 -0
  749. package/bin/hodd.sh +102 -0
  750. package/bin/host-sense.sh +199 -0
  751. package/bin/huginn-research-worker.sh +121 -0
  752. package/bin/local-model-lock.sh +70 -0
  753. package/bin/mimir-bridge.py +259 -0
  754. package/bin/mimir-bridge.sh +100 -0
  755. package/bin/mimir-ingest.sh +131 -0
  756. package/bin/mimir-reflect.sh +27 -0
  757. package/bin/mimir.sh +113 -0
  758. package/bin/mjollnir-webhook.sh +72 -0
  759. package/bin/mjollnir.sh +104 -0
  760. package/bin/model-hardware.sh +96 -0
  761. package/bin/model-resolve.sh +160 -0
  762. package/bin/models-detect.sh +178 -0
  763. package/bin/nornir-cron-start.sh +162 -0
  764. package/bin/nornir-job-daily-briefing.sh +191 -0
  765. package/bin/nornir-job-git-sync.sh +152 -0
  766. package/bin/nornir-job-hall-snapshot.sh +28 -0
  767. package/bin/nornir-job-memory-housekeeping.sh +114 -0
  768. package/bin/nornir-job-nsr-compliance.sh +54 -0
  769. package/bin/nornir-job-observer.sh +166 -0
  770. package/bin/nornir-job-skillopt-sleep.sh +76 -0
  771. package/bin/npm-publish.sh +136 -0
  772. package/bin/omarchy-hook-install.sh +60 -0
  773. package/bin/omarchy-install.sh +161 -0
  774. package/bin/omarchy-plugins.sh +187 -0
  775. package/bin/omarchy-sense.sh +162 -0
  776. package/bin/perm-guard.sh +30 -0
  777. package/bin/pi-agent.sh +68 -0
  778. package/bin/pi-ensure.sh +77 -0
  779. package/bin/pi-local.sh +37 -0
  780. package/bin/pi-model-agnostic.sh +71 -0
  781. package/bin/pi-seat.sh +63 -0
  782. package/bin/prereq-ensure.sh +166 -0
  783. package/bin/private-guard.sh +58 -0
  784. package/bin/project-git.sh +69 -0
  785. package/bin/public-guard.sh +71 -0
  786. package/bin/ratatoskr.sh +49 -0
  787. package/bin/realm-lib.sh +32 -0
  788. package/bin/repo-scrub.sh +62 -0
  789. package/bin/rodd-operational-input.sh +250 -0
  790. package/bin/runes-append.sh +198 -0
  791. package/bin/saga-session-start.sh +172 -0
  792. package/bin/saga-sessionstart-run.sh +79 -0
  793. package/bin/saga-wake-drain.sh +41 -0
  794. package/bin/secret-guard.sh +63 -0
  795. package/bin/sessrumnir-ensure.sh +100 -0
  796. package/bin/sessrumnir-sync.sh +237 -0
  797. package/bin/sessrumnir.sh +104 -0
  798. package/bin/skillopt-setup.sh +76 -0
  799. package/bin/skuld-branch-outcome.sh +203 -0
  800. package/bin/skuld-branch-prompt.sh +101 -0
  801. package/bin/smidja-bootstrap.sh +94 -0
  802. package/bin/smidja-observe.sh +86 -0
  803. package/bin/syn-arm-pretool-check.sh +57 -0
  804. package/bin/syn-asset-pretool-check.sh +89 -0
  805. package/bin/syn-cd-pretool-check.sh +28 -0
  806. package/bin/syn-guard-pretool-check.sh +83 -0
  807. package/bin/syn-spawn-pretool-check.sh +58 -0
  808. package/bin/syn-turnend-guard.sh +36 -0
  809. package/bin/syn-watch-arm.sh +99 -0
  810. package/bin/tailscale-sync.sh +203 -0
  811. package/bin/telegram-bot.sh +82 -0
  812. package/bin/toolchain.sh +74 -0
  813. package/bin/ui-truth-check.sh +75 -0
  814. package/bin/utgard.sh +111 -0
  815. package/bin/valhalla.sh +115 -0
  816. package/bin/valknut-load.sh +298 -0
  817. package/bin/vor-crew-state.sh +124 -0
  818. package/bin/wedge-notify.sh +60 -0
  819. package/bin/workspace-provision.sh +80 -0
  820. package/bin/workspace-rag.sh +163 -0
  821. package/bin/wyrd-db.sh +47 -0
  822. package/bin/yggdrasil.sh +152 -0
  823. package/bin/ymir-edit.sh +145 -0
  824. package/bin/ymir-install.sh +806 -0
  825. package/bin/ymir-invite.sh +93 -0
  826. package/bin/ymir-isolation.sh +88 -0
  827. package/bin/ymir-migrate.sh +61 -0
  828. package/bin/ymir-plan.sh +356 -0
  829. package/bin/ymir-platform.sh +348 -0
  830. package/bin/ymir-say.sh +110 -0
  831. package/bin/ymir-setup-auth.sh +119 -0
  832. package/bin/ymir-validate.sh +193 -0
  833. package/bin/ymir.js +74 -16
  834. package/docs/Architecture.md +339 -0
  835. package/docs/design.md +351 -0
  836. package/docs/installations/README.md +63 -0
  837. package/docs/installations/ymir-home.md +93 -0
  838. package/docs/integration.md +105 -0
  839. package/docs/lore.md +1060 -0
  840. package/docs/research/agent-harnesses.md +290 -0
  841. package/docs/runbooks/README.md +19 -0
  842. package/docs/runbooks/a2a.md +91 -0
  843. package/docs/runbooks/agent-permissions.md +99 -0
  844. package/docs/runbooks/agents.md +57 -0
  845. package/docs/runbooks/models.md +69 -0
  846. package/docs/runbooks/realm-onboarding.md +60 -0
  847. package/docs/runbooks/secrets-and-hoard.md +60 -0
  848. package/docs/runbooks/updates-and-migrations.md +110 -0
  849. package/docs/runbooks/worktrees-isolation.md +72 -0
  850. package/docs/session-start.md +105 -0
  851. package/docs/skillopt-integration.md +321 -0
  852. package/docs/sync-system.md +66 -0
  853. package/docs/workspaces.md +104 -0
  854. package/docs/ymir-rut.md +260 -0
  855. package/package.json +54 -14
  856. package/packaging/build.sh +74 -0
  857. package/packaging/macos/Ymir Installer.command +43 -0
  858. package/packaging/windows/ymir-setup.nsi +74 -0
  859. package/scripts/README.md +22 -0
  860. package/scripts/electron.sh +269 -0
  861. package/scripts/lower.sh +34 -0
  862. package/scripts/raise.sh +42 -0
  863. package/scripts/start.sh +217 -0
  864. package/scripts/stop.sh +113 -0
  865. package/install.sh +0 -35
@@ -0,0 +1,121 @@
1
+ #!/usr/bin/env bash
2
+ # 0003-private-data-separation — move all private data to YMIR_HOME
3
+ # Idempotent: safe to run repeatedly. Copies (never moves); originals
4
+ # remain until manually removed.
5
+ set -u
6
+
7
+ ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
8
+ YMIR_HOME="${YMIR_HOME:-$HOME/Documents/Ymir}"
9
+
10
+ echo "0003-private-data-separation"
11
+ echo " source: $ROOT (repo)"
12
+ echo " target: $YMIR_HOME"
13
+
14
+ # 1. Create target layout
15
+ mkdir -p "$YMIR_HOME"/{config,secrets,identity,workspaces/{work,personal},memory/{daily,well},smidja,state,data}
16
+
17
+ # 2. Migrate hodd/ (Hoard) → YMIR_HOME/
18
+ # Non-destructive: never overwrites an existing file, and MERGES a directory
19
+ # into its target. The target dirs are pre-created above, so a naive
20
+ # `[ -e "$2" ] && return` skipped every directory source — `data/` among them,
21
+ # which silently dropped the realm declaration and made 0004 fall back to a
22
+ # neutral realm.
23
+ copy() { # <src> <dest>
24
+ [ -e "$1" ] || return 0
25
+ if [ -d "$1" ]; then
26
+ mkdir -p "$2" || return 0
27
+ cp -rn "$1"/. "$2"/ 2>/dev/null && printf ' copied %s\n' "${1#$ROOT/}"
28
+ return 0
29
+ fi
30
+ if [ -e "$2" ]; then return 0; fi
31
+ mkdir -p "$(dirname "$2")" || return 0
32
+ cp -rn "$1" "$2" 2>/dev/null && printf ' copied %s\n' "${1#$ROOT/}"
33
+ }
34
+
35
+ copy "$ROOT/hodd/secrets" "$YMIR_HOME/secrets"
36
+ copy "$ROOT/hodd/identity" "$YMIR_HOME/identity"
37
+ copy "$ROOT/hodd/docs" "$YMIR_HOME/memory"
38
+ copy "$ROOT/hodd/masterplan.md" "$YMIR_HOME/memory/masterplan.md"
39
+ copy "$ROOT/hodd/append-only-log.md" "$YMIR_HOME/memory/append-only-log.md"
40
+
41
+ # 3. Migrate svartalfaheim/ (tenant data) → YMIR_HOME/workspaces/ + identity/companies/
42
+ copy "$ROOT/svartalfaheim/work/workspace" "$YMIR_HOME/workspaces/work"
43
+ copy "$ROOT/svartalfaheim/wayof/companies" "$YMIR_HOME/identity/companies"
44
+
45
+ # 4. Migrate workspace/ (operator's world-tree) → YMIR_HOME/workspaces/
46
+ for d in work personal memory companies; do
47
+ copy "$ROOT/workspace/$d" "$YMIR_HOME/workspaces/$d"
48
+ done
49
+
50
+ # 5. Migrate config/agents.yaml → YMIR_HOME/config/
51
+ copy "$ROOT/config/agents.yaml" "$YMIR_HOME/config/agents.yaml"
52
+
53
+ # 6. Migrate state/ → YMIR_HOME/state/
54
+ copy "$ROOT/state" "$YMIR_HOME/state"
55
+
56
+ # 7. Migrate data/ → YMIR_HOME/data/
57
+ copy "$ROOT/data" "$YMIR_HOME/data"
58
+
59
+ # 8. Migrate .agents/memory/kaia.engram* → YMIR_HOME/memory/
60
+ copy "$ROOT/.agents/memory/kaia.engram" "$YMIR_HOME/memory/kaia.engram"
61
+ copy "$ROOT/.agents/memory/kaia.engram-wal" "$YMIR_HOME/memory/kaia.engram-wal"
62
+ copy "$ROOT/.agents/memory/kaia.engram-shm" "$YMIR_HOME/memory/kaia.engram-shm"
63
+
64
+ # 9. Migrate smidja/smidja_data/smidja.db* → YMIR_HOME/smidja/
65
+ copy "$ROOT/smidja/smidja_data/smidja.db" "$YMIR_HOME/smidja/smidja.db"
66
+ copy "$ROOT/smidja/smidja_data/smidja.db-wal" "$YMIR_HOME/smidja/smidja.db-wal"
67
+ copy "$ROOT/smidja/smidja_data/smidja.db-shm" "$YMIR_HOME/smidja/smidja.db-shm"
68
+
69
+ # 10. Create .gitignore for private repo
70
+ cat >"$YMIR_HOME/.gitignore" <<'GITIGNORE'
71
+ # Runtime — rebuilt per machine
72
+ smidja/
73
+ state/
74
+ *.wal
75
+ *.shm
76
+ *.pid
77
+ *.lock
78
+
79
+ # Local overlays
80
+ config/agents.*.yaml
81
+ GITIGNORE
82
+
83
+ # 11. Initialize git repo if not already
84
+ if [ ! -d "$YMIR_HOME/.git" ]; then
85
+ git -C "$YMIR_HOME" init >/dev/null 2>&1 && echo " initialized private git repo at $YMIR_HOME"
86
+ fi
87
+
88
+ # 12. Offer to add GitHub remote for multi-machine sync
89
+ if [ -d "$YMIR_HOME/.git" ] && [ -t 0 ]; then
90
+ read -p " Add private GitHub remote for multi-machine sync? (git@github.com:user/repo.git) [y/N]: " yn
91
+ case "$yn" in [Yy]*)
92
+ read -p " GitHub repo URL: " gh_url
93
+ [ -n "$gh_url" ] && git -C "$YMIR_HOME" remote add origin "$gh_url" && \
94
+ git -C "$YMIR_HOME" add -A && \
95
+ git -C "$YMIR_HOME" commit -m "chore: initial Ymir private data" >/dev/null 2>&1 && \
96
+ git -C "$YMIR_HOME" push -u origin main && \
97
+ echo " pushed to $gh_url" || true
98
+ ;;
99
+ esac
100
+ fi
101
+
102
+ # 13. Write layout record
103
+ cat >"$YMIR_HOME/.ymir-layout.yaml" <<YAML
104
+ version: 1
105
+ migrated_from: "$ROOT"
106
+ migrated_at: "$(date -u +%Y-%m-%dT%H:%M:%SZ)"
107
+ layout:
108
+ config: "$YMIR_HOME/config"
109
+ secrets: "$YMIR_HOME/secrets"
110
+ identity: "$YMIR_HOME/identity"
111
+ workspaces: "$YMIR_HOME/workspaces"
112
+ memory: "$YMIR_HOME/memory"
113
+ smidja: "$YMIR_HOME/smidja"
114
+ state: "$YMIR_HOME/state"
115
+ data: "$YMIR_HOME/data"
116
+ git_repo: "$YMIR_HOME"
117
+ github_repo: "${gh_url:-}"
118
+ secrets_encrypted: false
119
+ YAML
120
+
121
+ echo "0003-private-data-separation: done — private data now at $YMIR_HOME"
@@ -0,0 +1,104 @@
1
+ #!/usr/bin/env bash
2
+ # 0004-hoard-and-realms — one private root with two trees.
3
+ #
4
+ # Before: the hoard's parts sat at the ROOT of $YMIR_HOME (secrets · identity ·
5
+ # docs · data · memory · tenants · AGENTS.md), the workspaces lived in a second
6
+ # root ($YMIR_HOME/workspaces/) *and* inside the checkout (repo `workspace/`,
7
+ # repo `svartalfaheim/<realm>/`), and the Runes ledger had been copied twice.
8
+ #
9
+ # After — the layout `docs/workspaces.md` proposes:
10
+ #
11
+ # $YMIR_HOME/
12
+ # ├── hodd/ the operator's own: secrets · identity · docs · data · memory · tenants · AGENTS.md
13
+ # └── svartalfaheim/ the realms: <realm>/{workspace/{personal,company},memory,runs}
14
+ #
15
+ # Idempotent: every step checks before it moves, and a move that would overwrite
16
+ # is refused rather than merged blindly.
17
+ set -u
18
+
19
+ H="${YMIR_HOME:-$HOME/Documents/Ymir}"
20
+ R="${YMIR_ROOT:-$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)}"
21
+ HOARD="$H/hodd"
22
+ moved=0; placed=0; skipped=0
23
+
24
+ row() { printf ' "%s","%s","%s"\n' "$1" "$2" "$3"; }
25
+
26
+ # ── 1. the hoard's parts move under hodd/ ────────────────────────────────────
27
+ mkdir -p "$HOARD" 2>/dev/null || true
28
+ for d in secrets identity docs data memory tenants; do
29
+ if [ -e "$H/$d" ] && [ ! -e "$HOARD/$d" ]; then
30
+ mv "$H/$d" "$HOARD/$d" && moved=$((moved+1))
31
+ elif [ -e "$H/$d" ]; then
32
+ skipped=$((skipped+1))
33
+ fi
34
+ done
35
+ # the operator's private contract follows the hoard
36
+ if [ -f "$H/AGENTS.md" ] && [ ! -e "$HOARD/AGENTS.md" ]; then
37
+ mv "$H/AGENTS.md" "$HOARD/AGENTS.md" && moved=$((moved+1))
38
+ fi
39
+
40
+ # ── 2. the realm tree ────────────────────────────────────────────────────────
41
+ REALM=""
42
+ [ -r "$HOARD/data/realm.md" ] && REALM="$(head -n1 "$HOARD/data/realm.md" 2>/dev/null | tr -d '[:space:]')"
43
+ if [ -z "$REALM" ] && [ -d "$H/svartalfaheim" ]; then
44
+ REALM="$(find "$H/svartalfaheim" -mindepth 1 -maxdepth 1 -type d ! -name examples ! -name '.*' -printf '%f\n' 2>/dev/null | sort | head -n1)"
45
+ fi
46
+ REALM="${REALM:-work}"
47
+ REALM_DIR="$H/svartalfaheim/$REALM"
48
+
49
+ mkdir -p "$REALM_DIR/workspace/personal"/{me,life,development,inbox} \
50
+ "$REALM_DIR/workspace/company"/{company,marketing,development,life,projects,companies} \
51
+ "$REALM_DIR/memory/daily" "$REALM_DIR/runs" 2>/dev/null || true
52
+
53
+ # fold the old workspaces root in, by name, never overwriting
54
+ fold() { # <src-dir> <dst-dir>
55
+ local src=$1 dst=$2 n=0 e b
56
+ [ -d "$src" ] || return 0
57
+ mkdir -p "$dst" 2>/dev/null || true
58
+ for e in "$src"/* "$src"/.[!.]*; do
59
+ [ -e "$e" ] || continue
60
+ b="$(basename "$e")"
61
+ [ -e "$dst/$b" ] && continue
62
+ mv "$e" "$dst/$b" 2>/dev/null && n=$((n+1))
63
+ done
64
+ placed=$((placed+n))
65
+ }
66
+ fold "$H/workspaces/personal" "$REALM_DIR/workspace/personal"
67
+ fold "$H/workspaces/work" "$REALM_DIR/workspace/company"
68
+ fold "$H/workspaces/companies" "$REALM_DIR/workspace/company/companies"
69
+ fold "$H/workspaces/memory" "$REALM_DIR/memory"
70
+ # …and the copy that sat inside the checkout
71
+ fold "$R/workspace/personal" "$REALM_DIR/workspace/personal"
72
+ fold "$R/workspace/work" "$REALM_DIR/workspace/company"
73
+ fold "$R/workspace/companies" "$REALM_DIR/workspace/company/companies"
74
+ fold "$R/workspace/memory" "$REALM_DIR/memory"
75
+ fold "$R/svartalfaheim/$REALM/workspace/memory/daily" "$REALM_DIR/memory/daily"
76
+ fold "$R/svartalfaheim/$REALM/workspace/development" "$REALM_DIR/workspace/company/development"
77
+
78
+ # ── 3. the Runes ledger lands in the hoard's memory, and no entry is lost ────
79
+ LEDGER="$HOARD/memory/runes_audit.md"
80
+ mkdir -p "$HOARD/memory" 2>/dev/null || true
81
+ for stray in "$H/workspaces/memory/runes_audit.md" "$REALM_DIR/memory/runes_audit.md"; do
82
+ [ -f "$stray" ] || continue
83
+ [ "$stray" = "$LEDGER" ] && continue
84
+ if [ ! -f "$LEDGER" ]; then
85
+ mv "$stray" "$LEDGER" && moved=$((moved+1))
86
+ elif cmp -s "$stray" "$LEDGER"; then
87
+ rm -f "$stray" && moved=$((moved+1)) # identical: drop the copy
88
+ else
89
+ # Different: append only what the target lacks, then keep the target.
90
+ while IFS= read -r line; do
91
+ [ -n "$line" ] || continue
92
+ grep -qxF -- "$line" "$LEDGER" || printf '%s\n' "$line" >>"$LEDGER"
93
+ done <"$stray"
94
+ rm -f "$stray" && moved=$((moved+1))
95
+ fi
96
+ done
97
+
98
+ # ── 4. report ────────────────────────────────────────────────────────────────
99
+ printf 'migration[1]{id,state}:\n "0004-hoard-and-realms","applied"\n'
100
+ printf 'migration_result[4]{what,detail,count}:\n'
101
+ row "hoard" "$HOARD" "$moved"
102
+ row "realm" "$REALM_DIR" "$placed"
103
+ row "ledger" "$LEDGER" "$([ -f "$LEDGER" ] && printf 'present' || printf 'absent')"
104
+ row "left-alone" "$H" "$skipped"
@@ -0,0 +1,158 @@
1
+ #!/usr/bin/env bash
2
+ # 0005-roots-out-of-tree — the operator's things leave the code tree.
3
+ #
4
+ # The law this migration serves: the package is the CODE THAT RUNS THE PROGRAMS;
5
+ # everything the operator owns lives in the home they chose. A packaged install
6
+ # (npm) treats its tree as read-only, and the next upgrade replaces it — so
7
+ # anything of theirs kept in the tree is kept at its peril. Every *writer* was
8
+ # converted to resolve the home through bin/hoard-lib.sh; this carries what is
9
+ # already sitting in the tree to where those writers now look.
10
+ #
11
+ # what moves from the tree to the home
12
+ # ------------------ --------------------- ----------------------------
13
+ # this machine's data/ <hoard>/data
14
+ # records
15
+ # runtime state state/ <home>/state
16
+ # (pids · logs · locks · the applied-marker)
17
+ # the operator's the local env file <home>/.env.local
18
+ # credentials (if one is in the tree)
19
+ # the operator's .agents/config/* <home>/config
20
+ # settings that git does not track
21
+ #
22
+ # Idempotent: every entry is checked before it moves, a second run finds nothing
23
+ # to do, and a move that would land on an existing file is REFUSED and reported
24
+ # rather than merged blindly — the home always wins, nothing is ever overwritten.
25
+ #
26
+ # What is deliberately NOT moved: `*.example` templates and `.gitkeep` (they are
27
+ # code), and any settings file git tracks (that is the distro's shipped default,
28
+ # not the operator's own). Moving a tracked file out of the tree would be a code
29
+ # change wearing a migration's clothes.
30
+ #
31
+ # NOTE: run this while the runtime is STOPPED if you want no stale pids; running
32
+ # services keep their open file handles across the move (an `mv` preserves the
33
+ # inode), so nothing is lost either way, but the pid files they wrote will be
34
+ # found in their new place after the next restart.
35
+ set -u
36
+
37
+ R="${YMIR_ROOT:-$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)}"
38
+ # The resolver lives in the tree that ships this migration. When YMIR_ROOT points
39
+ # somewhere else (a sandbox, a test fixture), fall back to the lib beside this
40
+ # script rather than failing to resolve the home at all.
41
+ LIB="$R/bin/hoard-lib.sh"
42
+ [ -r "$LIB" ] || LIB="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)/bin/hoard-lib.sh"
43
+ # shellcheck source=bin/hoard-lib.sh
44
+ . "$LIB"
45
+ ymir_home_root H
46
+ hoard_root HOARD
47
+ hoard_data_dir RECORDS
48
+ hoard_state_dir RUNTIME
49
+ hoard_settings_dir SETTINGS
50
+ hoard_local_env ENVFILE
51
+
52
+ moved=0; kept=0; refused=0; merged=0; rows=0
53
+ # The row buffers are written as they happen and printed at the end, so the TOON
54
+ # header can carry the true count. `rows` is kept beside them: under `set -u`,
55
+ # bash older than 4.4 reads an empty `declare -a` array as unbound.
56
+ declare -a ROW_ACT=() ROW_FROM=() ROW_TO=()
57
+ row() { ROW_ACT+=("$1"); ROW_FROM+=("$2"); ROW_TO+=("$3"); rows=$((rows+1)); }
58
+
59
+ # tracked_by_git <path> — 1 when git knows the file (the distro ships it)
60
+ tracked_by_git() {
61
+ command -v git >/dev/null 2>&1 || return 1
62
+ git -C "$R" ls-files --error-unmatch "${1#"$R"/}" >/dev/null 2>&1
63
+ }
64
+
65
+ # carry <src> <dst-dir> — move one entry home, unless the home already holds it
66
+ carry() {
67
+ local src="$1" dst="$2" base stale
68
+ base="$(basename "$src")"
69
+ mkdir -p "$dst" 2>/dev/null || { refused=$((refused+1)); row refuse "$src" "cannot write $dst"; return 0; }
70
+ if [ ! -e "$dst/$base" ]; then
71
+ if mv "$src" "$dst/$base" 2>/dev/null; then
72
+ moved=$((moved+1)); row moved "$src" "$dst/$base"
73
+ else
74
+ refused=$((refused+1)); row refuse "$src" "could not move to $dst/$base"
75
+ fi
76
+ return 0
77
+ fi
78
+ # The home already holds this name. Two files, one name — decide by evidence,
79
+ # never by assumption: identical content means the tree's copy can go (nothing
80
+ # is lost, and the content is at home); different content means BOTH are real,
81
+ # so the home's wins the name and the tree's is carried beside it as `.stale-*`
82
+ # rather than merged or discarded.
83
+ if [ -f "$src" ] && [ -f "$dst/$base" ] && cmp -s "$src" "$dst/$base"; then
84
+ rm -f "$src" && { merged=$((merged+1)); row merged "$src" "identical to $dst/$base — the tree's copy removed, nothing lost"; }
85
+ elif [ -f "$src" ]; then
86
+ stale="$dst/$base.stale-$(date -u +%Y%m%dT%H%M%SZ)"
87
+ if mv "$src" "$stale" 2>/dev/null; then
88
+ moved=$((moved+1)); row kept-as "$src" "$stale — differs from the home's copy, so both are kept"
89
+ else
90
+ refused=$((refused+1)); row refuse "$src" "differs from the home's copy and could not be carried"
91
+ fi
92
+ else
93
+ kept=$((kept+1)); row kept "$src" "home already holds $base — left in place, nothing overwritten"
94
+ fi
95
+ }
96
+
97
+ # ── the machine's records ────────────────────────────────────────────────────
98
+ if [ -d "$R/data" ]; then
99
+ for f in "$R"/data/* "$R"/data/.[!.]*; do
100
+ [ -e "$f" ] || continue
101
+ case "$(basename "$f")" in .gitkeep|*.example|*.example.*) kept=$((kept+1)); continue ;; esac
102
+ carry "$f" "$RECORDS"
103
+ done
104
+ fi
105
+
106
+ # ── the runtime state ────────────────────────────────────────────────────────
107
+ if [ -d "$R/state" ]; then
108
+ for f in "$R"/state/* "$R"/state/.[!.]*; do
109
+ [ -e "$f" ] || continue
110
+ case "$(basename "$f")" in .gitkeep) kept=$((kept+1)); continue ;; esac
111
+ carry "$f" "$RUNTIME"
112
+ done
113
+ fi
114
+
115
+ # ── the operator's credentials ───────────────────────────────────────────────
116
+ # Never printed, never parsed — only carried.
117
+ for cand in "$R"/.env.loc[a]l; do
118
+ [ -f "$cand" ] || continue
119
+ if [ -f "$ENVFILE" ]; then
120
+ kept=$((kept+1)); row kept "${cand#"$R"/}" "the home already holds its own — left in place, never merged"
121
+ else
122
+ mkdir -p "$(dirname "$ENVFILE")" 2>/dev/null
123
+ if mv "$cand" "$ENVFILE" 2>/dev/null; then
124
+ chmod 600 "$ENVFILE" 2>/dev/null || true
125
+ moved=$((moved+1)); row moved "${cand#"$R"/}" "${ENVFILE#"$H"/} (0600)"
126
+ else
127
+ refused=$((refused+1)); row refuse "${cand#"$R"/}" "could not move to the home"
128
+ fi
129
+ fi
130
+ done
131
+
132
+ # ── the operator's own settings ──────────────────────────────────────────────
133
+ # Only what git does not track: a tracked settings file is the distro's shipped
134
+ # default and stays where the code ships it. `config` may be a symlink into
135
+ # .agents/config, so resolve the real directory before walking it.
136
+ cfgdir="$R/.agents/config"
137
+ [ -d "$R/config" ] && [ ! -L "$R/config" ] && cfgdir="$R/config"
138
+ if [ -d "$cfgdir" ]; then
139
+ for f in "$cfgdir"/* "$cfgdir"/.[!.]*; do
140
+ [ -e "$f" ] || continue
141
+ base="$(basename "$f")"
142
+ case "$base" in .gitkeep|*.example|*.example.*) kept=$((kept+1)); continue ;; esac
143
+ if tracked_by_git "$f"; then
144
+ kept=$((kept+1)); row kept "config/$base" "the distro ships this one — it is a default, not the operator's own"
145
+ continue
146
+ fi
147
+ carry "$f" "$SETTINGS"
148
+ done
149
+ fi
150
+
151
+ if [ "$rows" -gt 0 ]; then
152
+ printf 'ymir-migrate-0005[%d]{action,from,to}:\n' "$rows"
153
+ for i in "${!ROW_ACT[@]}"; do
154
+ printf ' "%s","%s","%s"\n' "${ROW_ACT[$i]}" "${ROW_FROM[$i]}" "${ROW_TO[$i]}"
155
+ done
156
+ fi
157
+ printf 'ymir-migrate-0005[1]{moved,merged,kept,refused}:\n "%s",%s,%s,%s\n' "$moved" "$merged" "$kept" "$refused"
158
+ exit 0
@@ -0,0 +1,19 @@
1
+ # UTGARD — Hardened Minimal Execution Container
2
+
3
+ FROM node:20-alpine
4
+
5
+ RUN apk add --no-cache \
6
+ python3 \
7
+ make \
8
+ g++ \
9
+ git \
10
+ bash \
11
+ curl
12
+
13
+ RUN addgroup -S agentgroup && adduser -S agentuser -G agentgroup
14
+
15
+ WORKDIR /sandbox
16
+
17
+ USER agentuser
18
+
19
+ CMD ["bash"]
@@ -0,0 +1,14 @@
1
+ # UTGARD Sandbox (Docker Execution Barrier)
2
+
3
+ Isolated container execution for untrusted code, dynamic skills, and sub-agent tasks.
4
+
5
+ ## Contents (to be implemented)
6
+ - `Dockerfile.utgard` — hardened minimal execution container (exists)
7
+ - `utgard.config.json` — CPU / RAM / timeout limits (exists)
8
+ - `execute_utgard.ts` — Docker launcher skill for safe script execution
9
+
10
+ ## Rules
11
+ - `--network none` by default
12
+ - Strict `--memory` and `--cpus` limits
13
+ - No host root access
14
+ - Failed executions never touch main branches
@@ -0,0 +1,14 @@
1
+ {
2
+ "image": "utgard-runner:latest",
3
+ "network": "none",
4
+ "cpus": "1.0",
5
+ "memory": "512m",
6
+ "timeoutMs": 30000,
7
+ "securityOptions": [
8
+ "no-new-privileges"
9
+ ],
10
+ "mount": {
11
+ "target": "/sandbox/workspace",
12
+ "readOnly": false
13
+ }
14
+ }
@@ -0,0 +1,59 @@
1
+ # GUNGNIR — Core Operational Skills
2
+
3
+ Every reusable task becomes a scripted skill here. Skills are validated in Utgard
4
+ before registration, and every skill is named for the myth figure whose role
5
+ matches its work (Gungnir naming law).
6
+
7
+ ## Registry (`.agents/skills/`)
8
+
9
+ Every skill has an **owner agent** (`.agents/agents/<name>.md`): the seat Brokk
10
+ dispatches for that work. A skill owned by `brokk` means the primary keeps it in
11
+ hand — a dedicated seat is added when the work earns one.
12
+
13
+ ```
14
+ skills[26]{skill,does,owner}:
15
+ "galdr-ymirsystem","agent-CLI ergonomics — the master builder/maintainer of the runtime","galdr"
16
+ "tyr-check","the judge — galdr principles + runtime gates","tyr"
17
+ "rules-check-drift","rules-file drift — keeps AGENTS.md true after code changes","tyr"
18
+ "no-mistakes","the clean-PR gate — vendored engine skill: validate, push, PR, CI","brokk"
19
+ "smidja-factory","the smithy — agent factory: roster, phases, envelopes, visualizer (app-provided: cloned by step_apps from its own repo, absent until then)","volundr"
20
+ "hvild-afk","away-mode — supervision of routine wakes and batched escalations","brokk"
21
+ "saga-bearings","bearings — fleet status digest (/bearings) + recap (/ahoy)","saga"
22
+ "muninn-stow","memory — session-knowledge curation, routing, persistence","muninn"
23
+ "jord-projects","projects — registry + delivery posture","jord"
24
+ "urdh-hold","hold lifecycle — decisions held for the Allfather, reconciled","urdh"
25
+ "frigg-consent","consent — ask-user authority gate","frigg"
26
+ "vor-diagnostics","diagnostics — bootstrap + diagnostic reasoning","vor"
27
+ "nornir-schedule","schedule — event sources + quota-aware dispatch","brokk"
28
+ "nsr-compliance","compliance — NorthStar scaffold/audit + the .compliance/ harness","brokk"
29
+ "lifecycle","lifecycle — start/stop/status/smoke-test wiring contract","brokk"
30
+ "gjallarhorn-relay","relay — public replies (X/Discord)","brokk"
31
+ "eindri-homes","worker homes — provisioning and upkeep of Eindri homes","brokk"
32
+ "syn-recovery","recovery — stuck-worker playbook","syn"
33
+ "ymir-host","host ops — self-update, Omarchy desktop, Þjazi backend","brokk"
34
+ "groa-update","the updater shaman — self-update Brokk + every Eindri-home (/updateBrokk)","groa"
35
+ "herdr-panes","terminal panes — seat/control panes, tabs, workspaces, agents (HERDR_ENV=1)","brokk"
36
+ "ratatoskr-a2a","A2A/MCP mesh — a2abridge + wayofteams; registration","brokk"
37
+ "hamr-adapters","harness adapters — per-harness reference","brokk"
38
+ "pr-ops","pull requests — create, update, check status, request merge","brokk"
39
+ "hnoss-design","design — artifacts via OpenDesign (prototypes, decks, dashboards, image, video)","hnoss"
40
+ "bragi-marketing","marketing — research/crawl (Firecrawl), agentic browser (browser-use)","bragi"
41
+ ```
42
+
43
+ The control-plane UI guide is not a standalone skill: **hlidskjalf-ui** and its
44
+ hall **Óðrerir** (odrerir-hall) are assets under **galdr-ymirsystem** (the master
45
+ builder), loaded from `.agents/skills/galdr-ymirsystem/assets/` — see the galdr router.
46
+
47
+ Not adopted as standalone skills: `firstmate-coding-guidelines` (folded into Galdr),
48
+ `firstmate-orca` / `firstmate-codexapp` (backend reference docs only).
49
+
50
+ ## Skill synthesis rules (Gungnir)
51
+
52
+ 1. Gap identified → write the skill doc + script to `.agents/skills/<name>/`.
53
+ 2. Validate inside an Utgard container.
54
+ 3. Register it in this index.
55
+ 4. **Norse-name every new skill** at synthesis: choose the figure whose role
56
+ matches the work and let the skill inherit that name (`<figure>-<what>`).
57
+
58
+ Governance: `.agents/skills/galdr-ymirsystem/SKILL.md`; adopted-skill provenance is recorded in
59
+ `.agents/skills/galdr-ymirsystem/assets/reference-adoption.md`.
@@ -0,0 +1,3 @@
1
+ # bragi-marketing — marketing — research/crawl (Firecrawl), agentic browser (browser-use)
2
+
3
+ See `SKILL.md` for the full skill.
@@ -0,0 +1,82 @@
1
+ ---
2
+ name: bragi
3
+ description: >-
4
+ Bragi — the skald. The marketing craft: web research and crawling with
5
+ Firecrawl (firecrawl.dev) and agentic browser actions with browser-use
6
+ (github.com/browser-use/browser-use) — for SEO, content, competitive intel,
7
+ campaigns, and posting. Use when the task is marketing, growth, content,
8
+ social, or outreach. Keywords — marketing, seo, content, campaign, social,
9
+ competitor, crawl, scrape, firecrawl, browser-use.
10
+ argument-hint: "[research | seo | content | campaign | competitor | post]"
11
+ ---
12
+
13
+ # bragi-marketing — marketing — research/crawl (Firecrawl), agentic browser (browser-use)
14
+
15
+ > **Norse name:** **Bragi** (the skald, poetry's god). The marketing craft.
16
+
17
+ Bragi is how Ymir does **marketing**. Two validated open-source engines do the
18
+ work; this skill is the Norse shell the **marketing Eindri** (Bragi) works
19
+ through. Marketing output — a post, a landing page, a campaign — is a **real
20
+ artifact** grounded in **real sources**, never invented.
21
+
22
+ ## 1. The engines (open-source first)
23
+
24
+ - **Firecrawl** — [firecrawl.dev](https://www.firecrawl.dev/): scrape, crawl,
25
+ search, and map the web into clean **markdown / structured data**. The research
26
+ and SEO engine.
27
+ ```sh
28
+ pip install firecrawl-py
29
+ # FIRECRAWL_API_KEY from .env.local (never inline)
30
+ ```
31
+ REST: `POST /scrape`, `/crawl`, `/search`, `/map` — or the SDK:
32
+ ```python
33
+ from firecrawl import FirecrawlApp
34
+ app = FirecrawlApp(api_key=os.environ["FIRECRAWL_API_KEY"])
35
+ doc = app.scrape_url("https://example.com", params={"formats": ["markdown"]})
36
+ ```
37
+ - **browser-use** — [github.com/browser-use/browser-use](https://github.com/browser-use/browser-use):
38
+ an LLM-driven **browser agent** that clicks, types, and reads pages. For
39
+ logged-in actions: publishing, posting, filling forms, reading dashboards.
40
+ ```sh
41
+ pip install browser-use
42
+ ```
43
+ ```python
44
+ from browser_use import Agent
45
+ agent = Agent(task="Post the launch thread to X", llm=<model from Bifrost / Pi catalog>)
46
+ await agent.run()
47
+ ```
48
+ - **Scrapy** *(optional)* — [scrapy.org](https://www.scrapy.org/): a Python
49
+ scraping framework for **large or custom crawls** where Firecrawl is not the
50
+ right tool (many pages, structured pipelines, scheduling). `pip install scrapy`.
51
+ ```sh
52
+ scrapy startproject research && cd research && scrapy crawl sources -o out.jsonl
53
+ ```
54
+
55
+ ## 2. The craft (the loop)
56
+
57
+ ```
58
+ marketing_loop[5]{step,what}:
59
+ "research","Firecrawl crawl/search the sources — cite every URL"
60
+ "position","the angle: audience, promise, channel, keywords"
61
+ "draft","copy, landing page, or asset — real text, on brand (Hnoss for visuals)"
62
+ "publish","browser-use drives the channel (X / Discord / site); Gjallarhorn relay"
63
+ "measure","crawl results, track metrics, feed learnings to the well"
64
+ ```
65
+
66
+ ## 3. Rules
67
+
68
+ 1. **Real sources, cited.** Every claim carries its URL (Firecrawl output).
69
+ Never invent a statistic, competitor, or quote.
70
+ 2. **OSS engines, BYOK.** `FIRECRAWL_API_KEY` and any model key come from
71
+ `.env.local` — never inline in Markdown or commits.
72
+ 3. **Real artifact.** A brief becomes a file (post, page, calendar), not a plan.
73
+ 4. **On brand.** Visual assets come from **Hnoss** (OpenDesign) + the `DESIGN.md`.
74
+ 5. **Domain.** The marketing Eindri is **Bragi**, domain `utgard` (creative) per
75
+ Rule 01; it does not implement product code (that is Sindri).
76
+
77
+ ## 4. Install into Ymir
78
+
79
+ ```sh
80
+ pip install firecrawl-py browser-use
81
+ bin/valknut-load.sh --all # rebind agents/skills after adding this skill
82
+ ```
@@ -0,0 +1,3 @@
1
+ # eindri-homes — worker homes — provisioning and upkeep of Eindri homes
2
+
3
+ See `SKILL.md` for the full skill.