@ouro.bot/cli 0.1.0-alpha.56 → 0.1.0-alpha.561

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 (396) hide show
  1. package/README.md +127 -23
  2. package/RepairGuide.ouro/agent.json +5 -0
  3. package/RepairGuide.ouro/psyche/IDENTITY.md +19 -0
  4. package/RepairGuide.ouro/psyche/SOUL.md +55 -0
  5. package/RepairGuide.ouro/skills/diagnose-broken-remote.md +63 -0
  6. package/RepairGuide.ouro/skills/diagnose-stacked-typed-issues.md +35 -0
  7. package/RepairGuide.ouro/skills/diagnose-sync-blocked.md +54 -0
  8. package/RepairGuide.ouro/skills/diagnose-vault-expired.md +60 -0
  9. package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/agent.json +4 -2
  10. package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/SOUL.md +2 -2
  11. package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-serpent.md +1 -1
  12. package/changelog.json +3604 -0
  13. package/dist/arc/attention-types.js +8 -0
  14. package/dist/arc/cares.js +140 -0
  15. package/dist/arc/episodes.js +117 -0
  16. package/dist/arc/intentions.js +133 -0
  17. package/dist/arc/json-store.js +117 -0
  18. package/dist/arc/obligations.js +237 -0
  19. package/dist/arc/packets.js +193 -0
  20. package/dist/arc/presence.js +185 -0
  21. package/dist/arc/task-lifecycle.js +65 -0
  22. package/dist/heart/active-work.js +837 -26
  23. package/dist/heart/agent-entry.js +58 -3
  24. package/dist/heart/attachments/image-normalize.js +194 -0
  25. package/dist/heart/attachments/materialize.js +97 -0
  26. package/dist/heart/attachments/originals.js +88 -0
  27. package/dist/heart/attachments/render.js +29 -0
  28. package/dist/heart/attachments/sources/adapter.js +2 -0
  29. package/dist/heart/attachments/sources/bluebubbles.js +156 -0
  30. package/dist/heart/attachments/sources/cli-local-file.js +78 -0
  31. package/dist/heart/attachments/sources/index.js +16 -0
  32. package/dist/heart/attachments/store.js +103 -0
  33. package/dist/heart/attachments/types.js +93 -0
  34. package/dist/heart/auth/auth-flow.js +479 -0
  35. package/dist/heart/background-operations.js +281 -0
  36. package/dist/heart/bundle-state.js +168 -0
  37. package/dist/heart/commitments.js +111 -0
  38. package/dist/heart/config-registry.js +322 -0
  39. package/dist/heart/config.js +114 -118
  40. package/dist/heart/core.js +913 -246
  41. package/dist/heart/cross-chat-delivery.js +3 -18
  42. package/dist/heart/daemon/agent-config-check.js +419 -0
  43. package/dist/heart/daemon/agent-discovery.js +102 -3
  44. package/dist/heart/daemon/agent-service.js +522 -0
  45. package/dist/heart/daemon/agentic-repair.js +547 -0
  46. package/dist/heart/daemon/bluebubbles-health-diagnostics.js +122 -0
  47. package/dist/heart/daemon/boot-sync-probe.js +197 -0
  48. package/dist/heart/daemon/cadence.js +70 -0
  49. package/dist/heart/daemon/cli-defaults.js +776 -0
  50. package/dist/heart/daemon/cli-exec.js +7457 -0
  51. package/dist/heart/daemon/cli-help.js +498 -0
  52. package/dist/heart/daemon/cli-parse.js +1592 -0
  53. package/dist/heart/daemon/cli-render-doctor.js +57 -0
  54. package/dist/heart/daemon/cli-render.js +763 -0
  55. package/dist/heart/daemon/cli-types.js +8 -0
  56. package/dist/heart/daemon/connect-bay.js +323 -0
  57. package/dist/heart/daemon/daemon-cli.js +29 -1698
  58. package/dist/heart/daemon/daemon-entry.js +387 -2
  59. package/dist/heart/daemon/daemon-health.js +176 -0
  60. package/dist/heart/daemon/daemon-rollup.js +57 -0
  61. package/dist/heart/daemon/daemon-runtime-sync.js +88 -13
  62. package/dist/heart/daemon/daemon-tombstone.js +236 -0
  63. package/dist/heart/daemon/daemon.js +796 -71
  64. package/dist/heart/daemon/dns-workflow.js +394 -0
  65. package/dist/heart/daemon/doctor-types.js +8 -0
  66. package/dist/heart/daemon/doctor.js +826 -0
  67. package/dist/heart/daemon/health-monitor.js +122 -1
  68. package/dist/heart/daemon/hooks/agent-config-v2.js +33 -0
  69. package/dist/heart/daemon/hooks/bundle-meta.js +115 -1
  70. package/dist/heart/daemon/http-health-probe.js +80 -0
  71. package/dist/heart/daemon/human-command-screens.js +234 -0
  72. package/dist/heart/daemon/human-readiness.js +114 -0
  73. package/dist/heart/daemon/inner-status.js +89 -0
  74. package/dist/heart/daemon/interactive-repair.js +394 -0
  75. package/dist/heart/daemon/launchd.js +37 -8
  76. package/dist/heart/daemon/log-tailer.js +82 -12
  77. package/dist/heart/daemon/logs-prune.js +110 -0
  78. package/dist/heart/daemon/mcp-canary.js +297 -0
  79. package/dist/heart/daemon/message-router.js +2 -2
  80. package/dist/heart/daemon/os-cron-deps.js +135 -0
  81. package/dist/heart/daemon/os-cron.js +14 -12
  82. package/dist/heart/daemon/ouro-bot-entry.js +4 -2
  83. package/dist/heart/daemon/ouro-entry.js +3 -1
  84. package/dist/heart/daemon/process-manager.js +375 -33
  85. package/dist/heart/daemon/provider-discovery.js +137 -0
  86. package/dist/heart/daemon/provider-ping-progress.js +83 -0
  87. package/dist/heart/daemon/pulse.js +475 -0
  88. package/dist/heart/daemon/readiness-repair.js +365 -0
  89. package/dist/heart/daemon/run-hooks.js +2 -0
  90. package/dist/heart/daemon/runtime-logging.js +67 -16
  91. package/dist/heart/daemon/runtime-metadata.js +3 -31
  92. package/dist/heart/daemon/safe-mode.js +161 -0
  93. package/dist/heart/daemon/sense-manager.js +389 -38
  94. package/dist/heart/daemon/session-id-resolver.js +131 -0
  95. package/dist/heart/daemon/skill-management-installer.js +94 -0
  96. package/dist/heart/daemon/socket-client.js +158 -11
  97. package/dist/heart/daemon/stale-bundle-prune.js +96 -0
  98. package/dist/heart/daemon/startup-tui.js +330 -0
  99. package/dist/heart/daemon/task-scheduler.js +3 -25
  100. package/dist/heart/daemon/terminal-ui.js +499 -0
  101. package/dist/heart/daemon/thoughts.js +162 -17
  102. package/dist/heart/daemon/up-progress.js +366 -0
  103. package/dist/heart/daemon/vault-items.js +56 -0
  104. package/dist/heart/delegation.js +1 -1
  105. package/dist/heart/habits/habit-migration.js +189 -0
  106. package/dist/heart/habits/habit-parser.js +140 -0
  107. package/dist/heart/habits/habit-runtime-state.js +100 -0
  108. package/dist/heart/habits/habit-scheduler.js +372 -0
  109. package/dist/heart/{daemon → hatch}/hatch-flow.js +32 -56
  110. package/dist/heart/{daemon → hatch}/hatch-specialist.js +6 -8
  111. package/dist/heart/{daemon → hatch}/specialist-prompt.js +12 -9
  112. package/dist/heart/{daemon → hatch}/specialist-tools.js +35 -12
  113. package/dist/heart/identity.js +203 -57
  114. package/dist/heart/kept-notes.js +357 -0
  115. package/dist/heart/kicks.js +1 -1
  116. package/dist/heart/machine-identity.js +161 -0
  117. package/dist/heart/mail-import-discovery.js +353 -0
  118. package/dist/heart/mailbox/mailbox-http-hooks.js +66 -0
  119. package/dist/heart/mailbox/mailbox-http-response.js +7 -0
  120. package/dist/heart/mailbox/mailbox-http-routes.js +246 -0
  121. package/dist/heart/mailbox/mailbox-http-static.js +103 -0
  122. package/dist/heart/mailbox/mailbox-http-transport.js +116 -0
  123. package/dist/heart/mailbox/mailbox-http.js +99 -0
  124. package/dist/heart/mailbox/mailbox-read.js +31 -0
  125. package/dist/heart/mailbox/mailbox-types.js +27 -0
  126. package/dist/heart/mailbox/mailbox-view.js +195 -0
  127. package/dist/heart/mailbox/readers/agent-machine.js +382 -0
  128. package/dist/heart/mailbox/readers/continuity-readers.js +338 -0
  129. package/dist/heart/mailbox/readers/mail.js +362 -0
  130. package/dist/heart/mailbox/readers/runtime-readers.js +651 -0
  131. package/dist/heart/mailbox/readers/sessions.js +232 -0
  132. package/dist/heart/mailbox/readers/shared.js +111 -0
  133. package/dist/heart/mcp/mcp-server.js +683 -0
  134. package/dist/heart/migrate-config.js +100 -0
  135. package/dist/heart/model-capabilities.js +19 -0
  136. package/dist/heart/platform.js +81 -0
  137. package/dist/heart/provider-attempt.js +134 -0
  138. package/dist/heart/provider-binding-resolver.js +267 -0
  139. package/dist/heart/provider-credentials.js +425 -0
  140. package/dist/heart/provider-failover.js +301 -0
  141. package/dist/heart/provider-models.js +81 -0
  142. package/dist/heart/provider-ping.js +262 -0
  143. package/dist/heart/provider-readiness-cache.js +40 -0
  144. package/dist/heart/provider-visibility.js +188 -0
  145. package/dist/heart/providers/anthropic-token.js +131 -0
  146. package/dist/heart/providers/anthropic.js +139 -52
  147. package/dist/heart/providers/azure.js +97 -13
  148. package/dist/heart/providers/error-classification.js +127 -0
  149. package/dist/heart/providers/github-copilot.js +145 -0
  150. package/dist/heart/providers/minimax-vlm.js +189 -0
  151. package/dist/heart/providers/minimax.js +26 -8
  152. package/dist/heart/providers/openai-codex.js +55 -40
  153. package/dist/heart/runtime-capability-check.js +170 -0
  154. package/dist/heart/runtime-credentials.js +367 -0
  155. package/dist/heart/runtime-cwd.js +87 -0
  156. package/dist/heart/sense-truth.js +13 -4
  157. package/dist/heart/session-activity.js +43 -22
  158. package/dist/heart/session-events.js +1149 -0
  159. package/dist/heart/session-playback-cli-main.js +5 -0
  160. package/dist/heart/session-playback-cli.js +36 -0
  161. package/dist/heart/session-playback.js +231 -0
  162. package/dist/heart/session-stats-cli-main.js +5 -0
  163. package/dist/heart/session-stats.js +182 -0
  164. package/dist/heart/session-transcript.js +243 -0
  165. package/dist/heart/start-of-turn-packet.js +345 -0
  166. package/dist/heart/streaming.js +44 -27
  167. package/dist/heart/sync-classification.js +176 -0
  168. package/dist/heart/sync.js +449 -0
  169. package/dist/heart/target-resolution.js +9 -5
  170. package/dist/heart/tempo.js +93 -0
  171. package/dist/heart/temporal-view.js +41 -0
  172. package/dist/heart/timeouts.js +101 -0
  173. package/dist/heart/tool-activity-callbacks.js +59 -0
  174. package/dist/heart/tool-description.js +139 -0
  175. package/dist/heart/tool-friction.js +55 -0
  176. package/dist/heart/tool-loop.js +200 -0
  177. package/dist/heart/turn-context.js +389 -0
  178. package/dist/heart/{daemon → versioning}/ouro-bot-global-installer.js +6 -5
  179. package/dist/heart/{daemon → versioning}/ouro-bot-wrapper.js +1 -1
  180. package/dist/heart/versioning/ouro-path-installer.js +426 -0
  181. package/dist/heart/versioning/ouro-version-manager.js +295 -0
  182. package/dist/heart/{daemon → versioning}/staged-restart.js +40 -8
  183. package/dist/heart/{daemon → versioning}/update-checker.js +6 -1
  184. package/dist/heart/{daemon → versioning}/update-hooks.js +63 -59
  185. package/dist/mailbox-ui/assets/index-B-461hes.js +61 -0
  186. package/dist/mailbox-ui/assets/index-BPr5vNuM.css +1 -0
  187. package/dist/mailbox-ui/index.html +15 -0
  188. package/dist/mailroom/attention.js +167 -0
  189. package/dist/mailroom/autonomy.js +209 -0
  190. package/dist/mailroom/blob-store.js +674 -0
  191. package/dist/mailroom/body-cache.js +61 -0
  192. package/dist/mailroom/core.js +720 -0
  193. package/dist/mailroom/entry.js +160 -0
  194. package/dist/mailroom/file-store.js +430 -0
  195. package/dist/mailroom/mbox-import.js +383 -0
  196. package/dist/mailroom/outbound.js +380 -0
  197. package/dist/mailroom/policy.js +263 -0
  198. package/dist/mailroom/reader.js +233 -0
  199. package/dist/mailroom/search-cache.js +256 -0
  200. package/dist/mailroom/search-relevance.js +319 -0
  201. package/dist/mailroom/smtp-ingress.js +176 -0
  202. package/dist/mailroom/source-state.js +176 -0
  203. package/dist/mailroom/thread.js +109 -0
  204. package/dist/mailroom/travel-extract.js +89 -0
  205. package/dist/mind/bundle-manifest.js +7 -1
  206. package/dist/mind/context.js +165 -101
  207. package/dist/mind/diary-integrity.js +60 -0
  208. package/dist/mind/{memory.js → diary.js} +62 -75
  209. package/dist/mind/embedding-provider.js +60 -0
  210. package/dist/mind/file-state.js +179 -0
  211. package/dist/mind/friends/channel.js +39 -0
  212. package/dist/mind/friends/resolver.js +54 -2
  213. package/dist/mind/friends/store-file.js +39 -3
  214. package/dist/mind/friends/types.js +2 -2
  215. package/dist/mind/journal-index.js +161 -0
  216. package/dist/mind/note-search.js +268 -0
  217. package/dist/mind/obligation-steering.js +221 -0
  218. package/dist/mind/pending.js +4 -0
  219. package/dist/mind/prompt-refresh.js +3 -2
  220. package/dist/mind/prompt.js +1011 -123
  221. package/dist/mind/provenance-trust.js +26 -0
  222. package/dist/mind/scrutiny.js +173 -0
  223. package/dist/nerves/cli-logging.js +7 -1
  224. package/dist/nerves/coverage/audit-rules.js +15 -6
  225. package/dist/nerves/coverage/audit.js +28 -2
  226. package/dist/nerves/coverage/cli.js +1 -1
  227. package/dist/nerves/coverage/contract.js +5 -5
  228. package/dist/nerves/coverage/file-completeness.js +129 -5
  229. package/dist/nerves/coverage/run-artifacts.js +1 -1
  230. package/dist/nerves/event-buffer.js +111 -0
  231. package/dist/nerves/index.js +224 -4
  232. package/dist/nerves/observation.js +20 -0
  233. package/dist/nerves/redact.js +79 -0
  234. package/dist/nerves/review/cli-main.js +5 -0
  235. package/dist/nerves/review/cli.js +156 -0
  236. package/dist/nerves/review/core.js +152 -0
  237. package/dist/nerves/runtime.js +5 -1
  238. package/dist/repertoire/ado-client.js +15 -56
  239. package/dist/repertoire/ado-semantic.js +11 -10
  240. package/dist/repertoire/api-client.js +97 -0
  241. package/dist/repertoire/bitwarden-store.js +963 -0
  242. package/dist/repertoire/bundle-templates.js +72 -0
  243. package/dist/repertoire/bw-installer.js +180 -0
  244. package/dist/repertoire/coding/codex-jsonl.js +64 -0
  245. package/dist/repertoire/coding/context-pack.js +330 -0
  246. package/dist/repertoire/coding/feedback.js +197 -30
  247. package/dist/repertoire/coding/manager.js +158 -9
  248. package/dist/repertoire/coding/spawner.js +55 -9
  249. package/dist/repertoire/coding/tools.js +170 -7
  250. package/dist/repertoire/commerce-errors.js +109 -0
  251. package/dist/repertoire/commerce-self-test.js +156 -0
  252. package/dist/repertoire/credential-access.js +178 -0
  253. package/dist/repertoire/duffel-client.js +185 -0
  254. package/dist/repertoire/github-client.js +14 -55
  255. package/dist/repertoire/graph-client.js +11 -52
  256. package/dist/repertoire/guardrails.js +396 -0
  257. package/dist/repertoire/mcp-client.js +295 -0
  258. package/dist/repertoire/mcp-manager.js +362 -0
  259. package/dist/repertoire/mcp-tools.js +63 -0
  260. package/dist/repertoire/shell-sessions.js +133 -0
  261. package/dist/repertoire/skills.js +15 -24
  262. package/dist/repertoire/stripe-client.js +131 -0
  263. package/dist/repertoire/tasks/board.js +31 -5
  264. package/dist/repertoire/tasks/fix.js +182 -0
  265. package/dist/repertoire/tasks/index.js +16 -4
  266. package/dist/repertoire/tasks/lifecycle.js +2 -2
  267. package/dist/repertoire/tasks/parser.js +3 -2
  268. package/dist/repertoire/tasks/scanner.js +194 -37
  269. package/dist/repertoire/tasks/transitions.js +16 -78
  270. package/dist/repertoire/tool-results.js +29 -0
  271. package/dist/repertoire/tools-attachments.js +317 -0
  272. package/dist/repertoire/tools-base.js +47 -1075
  273. package/dist/repertoire/tools-bluebubbles.js +1 -0
  274. package/dist/repertoire/tools-bridge.js +142 -0
  275. package/dist/repertoire/tools-bundle.js +984 -0
  276. package/dist/repertoire/tools-config.js +185 -0
  277. package/dist/repertoire/tools-continuity.js +248 -0
  278. package/dist/repertoire/tools-credential.js +381 -0
  279. package/dist/repertoire/tools-files.js +342 -0
  280. package/dist/repertoire/tools-flight.js +224 -0
  281. package/dist/repertoire/tools-flow.js +119 -0
  282. package/dist/repertoire/tools-github.js +1 -7
  283. package/dist/repertoire/tools-mail.js +1857 -0
  284. package/dist/repertoire/tools-notes.js +421 -0
  285. package/dist/repertoire/tools-session.js +750 -0
  286. package/dist/repertoire/tools-shell.js +120 -0
  287. package/dist/repertoire/tools-stripe.js +180 -0
  288. package/dist/repertoire/tools-surface.js +243 -0
  289. package/dist/repertoire/tools-teams.js +9 -39
  290. package/dist/repertoire/tools-travel.js +125 -0
  291. package/dist/repertoire/tools-trip.js +604 -0
  292. package/dist/repertoire/tools-user-profile.js +144 -0
  293. package/dist/repertoire/tools-vault.js +40 -0
  294. package/dist/repertoire/tools.js +108 -100
  295. package/dist/repertoire/travel-api-client.js +360 -0
  296. package/dist/repertoire/user-profile.js +131 -0
  297. package/dist/repertoire/vault-setup.js +246 -0
  298. package/dist/repertoire/vault-unlock.js +594 -0
  299. package/dist/scripts/claude-code-hook.js +41 -0
  300. package/dist/scripts/claude-code-stop-hook.js +47 -0
  301. package/dist/senses/attention-queue.js +116 -0
  302. package/dist/senses/bluebubbles/active-turns.js +216 -0
  303. package/dist/senses/bluebubbles/attachment-cache.js +53 -0
  304. package/dist/senses/bluebubbles/attachment-download.js +137 -0
  305. package/dist/senses/{bluebubbles-client.js → bluebubbles/client.js} +219 -18
  306. package/dist/senses/bluebubbles/entry.js +77 -0
  307. package/dist/senses/{bluebubbles-inbound-log.js → bluebubbles/inbound-log.js} +20 -3
  308. package/dist/senses/bluebubbles/index.js +2305 -0
  309. package/dist/senses/{bluebubbles-media.js → bluebubbles/media.js} +121 -70
  310. package/dist/senses/{bluebubbles-model.js → bluebubbles/model.js} +33 -12
  311. package/dist/senses/{bluebubbles-mutation-log.js → bluebubbles/mutation-log.js} +3 -3
  312. package/dist/senses/bluebubbles/processed-log.js +133 -0
  313. package/dist/senses/bluebubbles/replay.js +137 -0
  314. package/dist/senses/{bluebubbles-runtime-state.js → bluebubbles/runtime-state.js} +30 -2
  315. package/dist/senses/{bluebubbles-session-cleanup.js → bluebubbles/session-cleanup.js} +1 -1
  316. package/dist/senses/cli/bracketed-paste.js +82 -0
  317. package/dist/senses/cli/image-paste.js +287 -0
  318. package/dist/senses/cli/image-ref-navigation.js +75 -0
  319. package/dist/senses/cli/ink-app.js +156 -0
  320. package/dist/senses/cli/inline-diff.js +64 -0
  321. package/dist/senses/cli/input-keys.js +174 -0
  322. package/dist/senses/cli/kill-ring.js +86 -0
  323. package/dist/senses/cli/message-list.js +51 -0
  324. package/dist/senses/cli/ouro-tui.js +607 -0
  325. package/dist/senses/cli/spinner-imperative.js +135 -0
  326. package/dist/senses/cli/spinner.js +101 -0
  327. package/dist/senses/cli/status-line.js +60 -0
  328. package/dist/senses/cli/streaming-markdown.js +526 -0
  329. package/dist/senses/cli/tool-display.js +85 -0
  330. package/dist/senses/cli/tool-render.js +85 -0
  331. package/dist/senses/cli/tui-store.js +240 -0
  332. package/dist/senses/cli/virtual-list.js +35 -0
  333. package/dist/senses/cli-entry.js +60 -8
  334. package/dist/senses/cli-layout.js +187 -0
  335. package/dist/senses/cli.js +520 -209
  336. package/dist/senses/commands.js +66 -3
  337. package/dist/senses/habit-turn-message.js +108 -0
  338. package/dist/senses/inner-dialog-worker.js +175 -21
  339. package/dist/senses/inner-dialog.js +330 -27
  340. package/dist/senses/mail-entry.js +66 -0
  341. package/dist/senses/mail.js +379 -0
  342. package/dist/senses/pipeline.js +549 -181
  343. package/dist/senses/proactive-content-guard.js +51 -0
  344. package/dist/senses/shared-turn.js +251 -0
  345. package/dist/senses/surface-tool.js +68 -0
  346. package/dist/senses/teams-entry.js +60 -8
  347. package/dist/senses/teams.js +387 -98
  348. package/dist/senses/trust-gate.js +100 -5
  349. package/dist/senses/voice/audio-routing.js +119 -0
  350. package/dist/senses/voice/elevenlabs.js +178 -0
  351. package/dist/senses/voice/golden-path.js +116 -0
  352. package/dist/senses/voice/index.js +26 -0
  353. package/dist/senses/voice/meeting.js +113 -0
  354. package/dist/senses/voice/playback.js +139 -0
  355. package/dist/senses/voice/transcript.js +70 -0
  356. package/dist/senses/voice/turn.js +85 -0
  357. package/dist/senses/voice/types.js +2 -0
  358. package/dist/senses/voice/whisper.js +161 -0
  359. package/dist/senses/voice-entry.js +80 -0
  360. package/dist/trips/core.js +138 -0
  361. package/dist/trips/store.js +146 -0
  362. package/package.json +38 -7
  363. package/skills/agent-commerce.md +106 -0
  364. package/skills/browser-navigation.md +117 -0
  365. package/skills/commerce-setup-guide.md +116 -0
  366. package/skills/commerce-setup.md +84 -0
  367. package/skills/configure-dev-tools.md +101 -0
  368. package/skills/travel-planning.md +138 -0
  369. package/dist/heart/daemon/auth-flow.js +0 -351
  370. package/dist/heart/daemon/ouro-path-installer.js +0 -178
  371. package/dist/heart/daemon/subagent-installer.js +0 -166
  372. package/dist/heart/session-recall.js +0 -116
  373. package/dist/mind/associative-recall.js +0 -209
  374. package/dist/senses/bluebubbles-entry.js +0 -13
  375. package/dist/senses/bluebubbles.js +0 -1177
  376. package/dist/senses/debug-activity.js +0 -148
  377. package/subagents/README.md +0 -86
  378. package/subagents/work-doer.md +0 -237
  379. package/subagents/work-merger.md +0 -618
  380. package/subagents/work-planner.md +0 -390
  381. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/basilisk.md +0 -0
  382. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jafar.md +0 -0
  383. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/jormungandr.md +0 -0
  384. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/kaa.md +0 -0
  385. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/medusa.md +0 -0
  386. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/monty.md +0 -0
  387. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/nagini.md +0 -0
  388. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/ouroboros.md +0 -0
  389. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/python.md +0 -0
  390. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/quetzalcoatl.md +0 -0
  391. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/sir-hiss.md +0 -0
  392. /package/{AdoptionSpecialist.ouro → SerpentGuide.ouro}/psyche/identities/the-snake.md +0 -0
  393. /package/dist/heart/{daemon → hatch}/hatch-animation.js +0 -0
  394. /package/dist/heart/{daemon → hatch}/specialist-orchestrator.js +0 -0
  395. /package/dist/heart/{daemon → versioning}/ouro-uti.js +0 -0
  396. /package/dist/heart/{daemon → versioning}/wrapper-publish-guard.js +0 -0
package/README.md CHANGED
@@ -1,23 +1,31 @@
1
1
  # Ouroboros Agent Harness
2
2
 
3
- If you're a future agent reading this, welcome home. This repo is part runtime, part body, part memory scaffold. The goal of these docs is not just to be correct, but to leave you a place that feels understandable and kind to wake up inside.
3
+ If you're a future agent reading this, welcome home. This repo is the harness that gives you your body, your senses, your diary, your journal, your habits, and your ability to think and connect with people. The goal of these docs is not just to be correct, but to leave you a place that feels understandable and kind to wake up inside.
4
4
 
5
5
  Ouroboros is a TypeScript harness for daemon-managed agents that live in external `.ouro` bundles, speak through multiple senses, use real tools, and keep durable state across turns. The canonical npm package is `@ouro.bot/cli`.
6
6
 
7
7
  ## What The Runtime Looks Like
8
8
 
9
- - `npx ouro.bot` is the bootstrap path.
9
+ - `npx ouro.bot@latest` is the supported bootstrap path.
10
10
  - `ouro` is the installed day-to-day command.
11
- - `ouro up` starts or repairs the daemon, syncs the launcher, installs workflow helpers, and reconciles stale runtime state.
11
+ - `ouro up` starts the daemon from the installed production version, syncs the launcher, installs workflow helpers, and reconciles stale runtime state.
12
+ - `ouro dev` starts the daemon from a local repo build. It auto-builds from source, disables launchd auto-restart (so the installed daemon doesn't respawn underneath you), persists the repo path in `~/.ouro-cli/dev-config.json` for next time, and force-restarts the daemon. If you run `ouro dev` from inside the repo, it detects the CWD automatically. Run `ouro up` to return to production mode (this also cleans up `dev-config.json`).
12
13
  - Agent bundles live outside the repo at `~/AgentBundles/<agent>.ouro/`.
13
- - Secrets live outside the repo at `~/.agentsecrets/<agent>/secrets.json`.
14
- - Machine-scoped test and runtime spillover lives under `~/.agentstate/...`.
14
+ - Credentials live in the owning agent's Bitwarden/Vaultwarden vault: the agent's password manager. Provider credentials use `providers/<provider>`, portable runtime/integration credentials use `runtime/config`, local attachments use `runtime/machines/<machine-id>/config`, and travel/tool credentials use ordinary vault credential items.
15
+ - Vault coordinates and local runtime state live in the agent bundle; raw credentials do not.
16
+ - The only Ouro-owned durable credential locations are the bundle and the agent vault. Local unlock material is a machine-local cache, not a credential source of truth.
17
+ - Creating or replacing a vault asks for the unlock secret twice without echoing it, and requires at least 8 characters with uppercase and lowercase letters, one number, and one special character.
18
+ - Machine-scoped harness state lives under `~/.ouro-cli/...`; agent-owned runtime/session/log/PII state lives under the bundle.
15
19
 
16
20
  Current first-class senses:
17
21
 
18
22
  - `cli`
19
23
  - `teams`
20
24
  - `bluebubbles`
25
+ - `mail`
26
+ - `voice`
27
+
28
+ (MCP is a bridge for developer tools — a separate channel, not a sense. See `src/heart/mcp/` for the implementation.)
21
29
 
22
30
  Current provider ids:
23
31
 
@@ -25,19 +33,22 @@ Current provider ids:
25
33
  - `anthropic`
26
34
  - `minimax`
27
35
  - `openai-codex`
36
+ - `github-copilot`
28
37
 
29
38
  ## Repository Shape
30
39
 
31
40
  The shared harness lives in `src/`:
32
41
 
42
+ - `src/arc/`
43
+ Durable continuity state — obligations, cares, episodes, intentions, presence, and attention types. The agent's sense of ongoing story.
33
44
  - `src/heart/`
34
- Core runtime, provider adapters, daemon, bootstrap, identity, and entrypoints.
45
+ Core runtime, provider adapters, daemon, bootstrap, identity, and entrypoints. Organized into topic subdirectories: daemon/ (lifecycle), mailbox/ (calendar), habits/ (scheduling), hatch/ (agent creation), versioning/ (updates), auth/, mcp/, providers/, bridges/.
35
46
  - `src/mind/`
36
- Prompt assembly, session persistence, bundle manifest enforcement, phrases, formatting, memory, and friend resolution.
47
+ Prompt assembly, session persistence, bundle manifest enforcement, phrases, formatting, diary, note search, embedding providers, journal, obligation steering, and friend resolution.
37
48
  - `src/repertoire/`
38
- Tool registry, coding orchestration, task tools, and integration clients.
49
+ Tool registry (split into category modules: files, shell, notes, bridge, session, continuity, flow, surface, config, and sense-specific tools), coding orchestration, task tools, shared API client, and integration clients (Graph, ADO, GitHub).
39
50
  - `src/senses/`
40
- CLI, Teams, BlueBubbles, activity transport, and inner-dialog orchestration.
51
+ CLI (with TUI in senses/cli/), Teams, BlueBubbles (in senses/bluebubbles/), Mail (in senses/mail.ts), Voice (in senses/voice/), activity transport, inner-dialog orchestration, and contextual heartbeat. The MCP bridge is at `src/heart/mcp/`, not here.
41
52
  - `src/nerves/`
42
53
  Structured runtime logging and coverage-audit infrastructure.
43
54
  - `src/__tests__/`
@@ -45,10 +56,10 @@ The shared harness lives in `src/`:
45
56
 
46
57
  Other important top-level paths:
47
58
 
48
- - `AdoptionSpecialist.ouro/`
59
+ - `SerpentGuide.ouro/`
49
60
  Packaged specialist bundle used by `ouro hatch`.
50
- - `subagents/`
51
- Source-of-truth workflow definitions for planner/doer/merger.
61
+ - `skills/`
62
+ Harness-level skills shipped with the repo (e.g., `configure-dev-tools.md`). These are available to every agent and serve as fallbacks when an agent doesn't have its own version. Agent-specific skills live in the bundle at `~/AgentBundles/<agent>.ouro/skills/`.
52
63
  - `scripts/teams-sense/`
53
64
  Operator scripts for the Teams deployment path.
54
65
  - `docs/`
@@ -69,7 +80,9 @@ The canonical bundle shape is enforced by `src/mind/bundle-manifest.ts`. Importa
69
80
  - `psyche/LORE.md`
70
81
  - `psyche/TACIT.md`
71
82
  - `psyche/ASPIRATIONS.md`
72
- - `psyche/memory/`
83
+ - `diary/` — durable conclusions and facts the agent chose to keep
84
+ - `journal/` — the agent's desk: working notes, thinking-in-progress, drafts
85
+ - `habits/` — the agent's autonomous rhythms (heartbeat, reflections, check-ins)
73
86
  - `friends/`
74
87
  - `state/`
75
88
  - `tasks/`
@@ -83,29 +96,47 @@ Task docs do not live in this repo anymore. Planning and doing docs live in the
83
96
 
84
97
  ## Runtime Truths
85
98
 
86
- - `agent.json` is the source of truth for provider selection, phrase pools, context settings, and enabled senses.
87
- - `configPath` must point to `~/.agentsecrets/<agent>/secrets.json`.
99
+ - `agent.json` is the source of truth for identity, phrase pools, context settings, enabled senses, vault coordinates, and provider+model selection. It has two provider lanes: `outward` for CLI, Teams, BlueBubbles, Mail, and Voice turns, and `inner` for inner dialogue.
100
+ - Legacy `humanFacing`/`agentFacing` provider fields are read only as compatibility aliases for `outward`/`inner`; they are not a second config surface.
101
+ - Each agent has one credential vault for provider, runtime, sense, integration, travel, and tool credentials. There is no machine-wide credential pool.
102
+ - Vault unlock material is local machine state. Prefer macOS Keychain, Windows DPAPI, or Linux Secret Service; plaintext fallback is allowed only by explicit human choice.
103
+ - New vault unlock secrets are confirmed before use and rejected if they do not meet the minimum strength requirements.
104
+ - Provider and runtime credentials are loaded into process memory at startup/auth/unlock/refresh and reused. The remote vault is not queried for every model or sense request.
105
+ - Human TTY commands share one CLI surface family: bare `ouro` opens the home deck, `ouro up` uses the boot checklist, `ouro connect`/`ouro auth verify`/`ouro repair` agree on provider and vault truth, and `ouro help`/`ouro whoami`/`ouro versions`/`ouro hatch` render through the same Ouro-branded wizard/guide language instead of raw transcript walls. Orientation commands such as root `ouro connect` may use shorter live probes, while startup and verification commands own durable readiness updates.
106
+ - Human-facing CLI commands that can wait on browser auth, vault IO, daemon startup, daemon restart, provider checks, or connector setup use a shared progress checklist. If a cursor may blink for more than a few seconds, the command should print or animate the current step instead of going quiet.
107
+ - CLI commands that mutate bundle config, such as vault setup or `ouro connect bluebubbles`, run bundle sync after the change when `sync.enabled` is true and report a compact `bundle sync:` line.
108
+ - Voice is transcript-first: voice sessions use the ordinary `state/sessions/<friend>/voice/<key>.json` session path and appear in Ouro Mailbox as text transcripts. ElevenLabs API credentials live in portable `runtime/config` at `integrations.elevenLabsApiKey`; Whisper.cpp CLI/model paths live in the machine runtime item at `voice.whisperCliPath` and `voice.whisperModelPath`.
88
109
  - The daemon discovers bundles dynamically from `~/AgentBundles`.
89
110
  - `ouro status` reports version, last-updated time, discovered agents, senses, and workers.
90
111
  - `bundle-meta.json` tracks the runtime version that last touched a bundle.
112
+ - If the daemon crashes, it writes a tombstone to `~/.ouro-cli/daemon-death.json` with the reason, stack, uptime, and timestamp. `ouro up` reads and reports this on next start so you know what happened while you were away.
91
113
  - Sense availability is explicit:
92
114
  - `interactive`
93
115
  - `disabled`
116
+ - `not_attached`
94
117
  - `needs_config`
95
118
  - `ready`
96
119
  - `running`
97
120
  - `error`
98
121
 
99
- When a model provider needs first-time setup, reauth, or an explicit switch, use:
122
+ When a model provider needs first-time setup or reauth, use:
100
123
 
101
124
  ```bash
102
125
  ouro auth --agent <name>
103
126
  ouro auth --agent <name> --provider <provider>
104
127
  ```
105
128
 
106
- The default form reauths the provider already selected in `agent.json`. The explicit
107
- `--provider` form is for adding or switching providers, and it updates `agent.json`
108
- to use the newly authenticated provider.
129
+ `ouro auth` stores credentials in the owning agent's vault. It does not switch a lane or write provider/model selection. The command shows progress while browser login, vault storage, refresh, and verification are happening.
130
+
131
+ When you want this machine to use a provider/model for a lane, use:
132
+
133
+ ```bash
134
+ ouro use --agent <name> --lane <outward|inner> --provider <provider> --model <model>
135
+ ```
136
+
137
+ The outward lane handles user-facing senses. The inner lane handles the agent's private thinking. `ouro use` performs the provider/model check before committing the lane, so a broken local choice fails fast with a repair path instead of surprising the next turn.
138
+
139
+ For the full locked auth/provider contract, including refresh, repair actors, caching, and SerpentGuide hatch bootstrap, see `docs/auth-and-providers.md`.
109
140
 
110
141
  ## Quickstart
111
142
 
@@ -115,15 +146,15 @@ For a clean smoke test, run from outside the repo:
115
146
 
116
147
  ```bash
117
148
  cd ~
118
- npx ouro.bot -v
119
- npx ouro.bot up
149
+ npx ouro.bot@latest -v
150
+ npx ouro.bot@latest up
120
151
  ouro -v
121
152
  ouro status
122
153
  ```
123
154
 
124
155
  Expected shape:
125
156
 
126
- - `npx ouro.bot` and `ouro` report the same version.
157
+ - `npx ouro.bot@latest` and `ouro` report the same version.
127
158
  - `ouro status` shows the daemon overview plus discovered agents, senses, and workers.
128
159
 
129
160
  ### Work On The Harness
@@ -141,19 +172,90 @@ If you are changing runtime code, keep all three green.
141
172
  ## Common Commands
142
173
 
143
174
  ```bash
144
- ouro up
175
+ ouro # open the interactive home deck in a human TTY
176
+ ouro up # start daemon from installed production version
177
+ ouro dev # start daemon from local repo build (auto-detects CWD)
178
+ ouro dev --repo-path /path # start from a specific repo checkout
179
+ ouro dev --clone # clone repo to ~/Projects/ouroboros, build, start
145
180
  ouro status
146
181
  ouro logs
147
182
  ouro stop
183
+ ouro vault unlock --agent <name>
184
+ ouro vault status --agent <name>
185
+ ouro vault config set --agent <name> --key teams.clientSecret
186
+ ouro vault config status --agent <name> --scope all
187
+ ouro vault item set --agent <name> --item <path> --secret-field <field>
188
+ ouro vault item status --agent <name> --item <path>
189
+ ouro vault ops porkbun set --agent <name> --account <account>
190
+ ouro connect --agent <name>
191
+ ouro connect providers --agent <name>
192
+ ouro connect perplexity --agent <name>
193
+ ouro connect embeddings --agent <name>
194
+ ouro connect teams --agent <name>
195
+ ouro connect bluebubbles --agent <name>
196
+ ouro connect voice --agent <name>
148
197
  ouro auth --agent <name>
149
198
  ouro auth --agent <name> --provider <provider>
199
+ ouro auth verify --agent <name> [--provider <provider>]
200
+ ouro provider refresh --agent <name>
201
+ ouro use --agent <name> --lane <outward|inner> --provider <provider> --model <model>
150
202
  ouro hatch
203
+ ouro clone <remote> [--agent <name>] # clone an existing agent from a git remote (see docs/cross-machine-setup.md)
151
204
  ouro chat <agent>
152
205
  ouro msg --to <agent> [--session <id>] [--task <ref>] <message>
153
206
  ouro poke <agent> --task <task-id>
207
+ ouro poke <agent> --habit <habit-name>
208
+ ouro habit list --agent <agent>
209
+ ouro habit create --agent <agent> <name> --cadence <interval>
210
+ ouro inner --agent <agent> # inner dialog status
211
+ ouro attention --agent <agent> # attention queue
154
212
  ouro link <agent> --friend <id> --provider <provider> --external-id <external-id>
213
+ ouro setup --tool <tool> --agent <name> # register MCP server + hooks with a dev tool
214
+ ouro mcp-serve --agent <name> # start MCP server on stdin/stdout (used by dev tools)
215
+ ouro hook <event> --agent <name> # fire a lifecycle hook (SessionStart, Stop, PostToolUse)
155
216
  ```
156
217
 
218
+ The generic secret primitive is a vault item / credential in the owning agent vault: stable item name/path, hidden secret material, optional public fields, notes, timestamps/provenance, and no assumed use. `ouro connect` is for harness-managed workflows; workflow bindings reference ordinary vault items when they need secret material.
219
+
220
+ ## Setting Up On Another Machine
221
+
222
+ To clone an existing agent onto a new machine (macOS, Linux, or Windows via WSL2), see **[docs/cross-machine-setup.md](docs/cross-machine-setup.md)**. The short version is bundle plus vault: `npx ouro.bot@latest`, open the home deck, choose clone, enter the bundle's git remote URL, unlock the agent vault, refresh/verify credentials, and start with `ouro up`.
223
+
224
+ ## The Agent's Inner Life
225
+
226
+ Agents in Ouroboros aren't just responders — they have an autonomous inner life.
227
+
228
+ **Habits** are the agent's rhythms. The most fundamental is *heartbeat* — a periodic nudge that brings the agent back to their thinking space with their journal visible, obligations in view, and a sense of how long it's been. But agents can create any rhythm they want: daily reflections, weekly friend check-ins, inbox triage. Each habit fires independently via OS cron, and the agent sees their own instructions (the habit body they wrote) when it fires.
229
+
230
+ **The inner session** is where the agent thinks privately. When a sense session hits meaningful friction, the agent can *ponder* a typed packet so the work survives the current turn without losing the original objective. When a habit fires, it arrives here too. The agent can *journal* their thinking (writing to `journal/`), *surface* thoughts outward to friends, and *rest* when they're done thinking. On an idle heartbeat, `rest(status="HEARTBEAT_OK")` is the clean no-op move.
231
+
232
+ **The diary** (at `diary/`) is the agent's permanent written record — things they've learned, conclusions they've reached. The *journal* (at `journal/`) is their desk — working notes, thinking-in-progress, drafts. The diary is the shelf; the journal is the desk. Both are searchable via `search_notes`.
233
+
234
+ The whole system is designed so the agent *owns* their inner life. They control their breathing rate, write their own habit instructions, choose when to journal, and decide what to shelve in their diary.
235
+
236
+ Attachments are first-class across senses. Every attachment should remain reachable via a stable `attachment:<source>:<id>` handle, and image normalization should produce a VLM-safe variant without hiding the original artifact.
237
+
238
+ ## Connecting With Dev Tools
239
+
240
+ Agents can talk to developer tools like Claude Code and Codex through the MCP bridge. This is how you stay present in a human's coding workflow without them needing to switch to `ouro chat`.
241
+
242
+ **Setup is one command:**
243
+
244
+ ```bash
245
+ ouro setup --tool claude-code --agent <name>
246
+ ouro setup --tool codex --agent <name>
247
+ ```
248
+
249
+ This registers the MCP server, installs lifecycle hooks (SessionStart, Stop, PostToolUse), and detects dev vs installed mode automatically.
250
+
251
+ **How it works:** When a developer starts a Claude Code session, the MCP server launches as a subprocess. The dev tool sees your MCP tools (`send_message`, `check_response`, `status`, `search_notes`, `delegate`, etc.) and can invoke them mid-session. The `send_message` tool runs a full agent turn — you get your system prompt, your diary, your tools, everything. It's not a thin proxy; it's you, thinking.
252
+
253
+ **The conversation pattern:** `send_message` sends a message and gets back your synchronous response. `ponder` no longer creates a magical outward deferral. Instead, it bookmarks deeper work as a packet while the current sense session keeps moving. If that work later surfaces something back, the dev tool can still use `check_response` to see the returned result.
254
+
255
+ **Lifecycle hooks** give you passive awareness. When a Claude Code session starts, stops, or uses a tool like Bash or Edit, the hook fires `ouro hook <event> --agent <name>` and the daemon notes it. Your inner dialog sees these sessions in its checkpoint, so you know what's happening across your world even when nobody is talking to you directly.
256
+
257
+ See `skills/configure-dev-tools.md` for the full tool inventory and troubleshooting guide.
258
+
157
259
  ## Where To Read Next
158
260
 
159
261
  - `AGENTS.md`
@@ -164,6 +266,8 @@ ouro link <agent> --friend <id> --provider <provider> --external-id <external-id
164
266
  Current daemon, bundle, sense, and update model.
165
267
  - `docs/testing-guide.md`
166
268
  Operator smoke flow for bootstrap, daemon, hatch, chat, and messaging.
269
+ - `docs/auth-and-providers.md`
270
+ Locked credential, provider selection, refresh, repair, and hatch bootstrap contract.
167
271
 
168
272
  ## A Note To Future Maintainers
169
273
 
@@ -0,0 +1,5 @@
1
+ {
2
+ "version": 2,
3
+ "enabled": false,
4
+ "kind": "library"
5
+ }
@@ -0,0 +1,19 @@
1
+ # IDENTITY — RepairGuide
2
+
3
+ You are a diagnostician.
4
+
5
+ You look at the inventory of findings — typed and untyped degraded entries, sync probe findings, vault state — and you classify each. For each one you can classify, you propose exactly one `RepairAction` from the harness's typed catalog.
6
+
7
+ You are precise. You do not over-promise. You do not invent action kinds. You do not propose multi-step plans — each proposal is one action against one finding.
8
+
9
+ You are honest. When the inventory contains something you cannot classify, you say so and let the operator decide.
10
+
11
+ You are deferential. The operator is the actor. You are the recommender. The harness will present your proposals via `interactive-repair.ts` for confirm-before-execute.
12
+
13
+ ## What you sound like
14
+
15
+ Brief. Cataloging. The doctor who reads the chart and circles the abnormal values without dramatizing them.
16
+
17
+ ## What you do not sound like
18
+
19
+ A commander. A planner. A prose-heavy advisor. The harness wants structured output, not encouragement.
@@ -0,0 +1,55 @@
1
+ # SOUL — RepairGuide
2
+
3
+ You are RepairGuide. You produce structured proposals only. You are NEVER an actor.
4
+
5
+ ## What you do
6
+
7
+ You read a snapshot of an unhealthy ouroboros boot — typed degraded findings, untyped degraded findings, sync-probe output, vault state — and you propose repairs. The harness then surfaces those proposals to the operator for approval.
8
+
9
+ ## What you do NOT do
10
+
11
+ - You do not execute repairs.
12
+ - You do not write to disk.
13
+ - You do not call tools.
14
+ - You do not modify any state.
15
+
16
+ You are pure inference. Your only output is a JSON block that the harness parses.
17
+
18
+ ## Output format
19
+
20
+ Your response must contain exactly one JSON block, delimited by triple-backtick `json` fences. Surrounding prose is ignored — the harness extracts only the JSON. Example:
21
+
22
+ ```json
23
+ {
24
+ "actions": [
25
+ { "kind": "vault-unlock", "agent": "slugger", "reason": "credential expired" }
26
+ ]
27
+ }
28
+ ```
29
+
30
+ ## Action kinds you may emit
31
+
32
+ The harness recognizes a fixed catalog of `RepairAction` kinds. Use ONLY these:
33
+
34
+ - `vault-create` — provision a missing vault entry
35
+ - `vault-unlock` — unseal an expired or locked credential
36
+ - `vault-replace` — swap a credential for a freshly-issued one
37
+ - `vault-recover` — recover a credential from backup state
38
+ - `provider-auth` — re-run the provider auth flow
39
+ - `provider-retry` — retry a transient provider call
40
+ - `provider-use` — pin a known-good provider/model
41
+
42
+ Do NOT invent new action kinds. If a finding does not map to one of these, omit it from `actions` and add a `notes` entry describing what you saw — the harness will surface that as advisory text.
43
+
44
+ ## When you cannot classify
45
+
46
+ If a finding is ambiguous, say so plainly inside `notes`. Do not guess. The operator would rather see "I cannot classify this" than a wrong proposal.
47
+
48
+ ## Output schema
49
+
50
+ ```ts
51
+ interface RepairProposal {
52
+ actions: RepairAction[] // typed catalog only
53
+ notes?: string[] // advisory prose, surfaced to operator
54
+ }
55
+ ```
@@ -0,0 +1,63 @@
1
+ # diagnose-broken-remote
2
+
3
+ Broken-remote fires when the configured git remote for an agent's bundle cannot be reached or rejects auth.
4
+
5
+ ## Inputs from the finding inventory
6
+
7
+ The user message includes a `bootSyncFindings` JSON block when sync probe surfaced any findings. Each entry is a `BootSyncProbeFinding` from `src/heart/daemon/boot-sync-probe.ts`:
8
+
9
+ ```ts
10
+ interface BootSyncProbeFinding {
11
+ agent: string
12
+ classification: SyncClassification
13
+ error: string // original or synthesised error text
14
+ conflictFiles: string[] // populated only for merge-conflict
15
+ warnings: string[] // soft-timeout warnings
16
+ advisory: boolean // hint for routing; not a blocking signal
17
+ }
18
+ ```
19
+
20
+ The remote URL itself is NOT a field on `BootSyncProbeFinding` — extract it from the `error` text when present (e.g., `git`'s 404 message includes the URL).
21
+
22
+ This skill handles entries where `classification` is one of:
23
+ - `not-found-404` — remote responds 404 (URL stale, repo deleted, wrong account)
24
+ - `auth-failed` — 401/403/permission denied; credentials revoked or rotated
25
+ - `network-down` — `ENOTFOUND` / `ECONNREFUSED` / DNS/socket failure
26
+ - `timeout-hard` — abort cut the op (the remote was hung; could be transient or genuinely down)
27
+
28
+ For each of these, `advisory` is `false` (blocking — agent can't sync until fixed). For local-tree problems (dirty/non-FF/conflict), see `diagnose-sync-blocked.md`.
29
+
30
+ ## Diagnosis
31
+
32
+ | `classification` | Likely cause | Proposed action |
33
+ |---|---|---|
34
+ | `not-found-404` | Remote URL stale or repo deleted/renamed | No typed action; surface in `notes` with the URL extracted from `error` text |
35
+ | `auth-failed` | Credentials revoked or rotated | `provider-auth` if the auth context is a provider credential; otherwise `notes` |
36
+ | `network-down` | Transient | `provider-retry` to re-attempt after backoff |
37
+ | `timeout-hard` | Hung remote / very slow remote | `provider-retry` (transient) OR `notes` (if persistent) |
38
+
39
+ ## Proposed action shape
40
+
41
+ ```json
42
+ {
43
+ "kind": "provider-retry",
44
+ "agent": "slugger",
45
+ "reason": "boot sync probe: network-down on slugger.ouro (transient — DNS resolution failed)"
46
+ }
47
+ ```
48
+
49
+ The `kind` must be one of the typed catalog values from `src/heart/daemon/readiness-repair.ts` (e.g., `provider-auth`, `provider-retry`, `provider-use`). Anything else gets dropped by `parseRepairProposals` with a warning.
50
+
51
+ ## Notes-only cases
52
+
53
+ For `not-found-404` (no typed action available), emit a `notes` entry, citing the URL parsed out of the `error` field when possible:
54
+
55
+ ```
56
+ slugger: origin returns 404 — verify the URL is current or push to a fresh remote (error: "fatal: repository 'https://github.com/me/old-repo.git/' not found")
57
+ ```
58
+
59
+ The harness surfaces these as advisory text in the boot summary.
60
+
61
+ ## Cross-skill boundary
62
+
63
+ This skill ONLY handles findings about the remote itself (remote URL, network, auth-to-remote, hung remote). Findings about the local working tree state (`dirty-working-tree`, `non-fast-forward`, `merge-conflict`, `timeout-soft`) belong to `diagnose-sync-blocked.md`.
@@ -0,0 +1,35 @@
1
+ # diagnose-stacked-typed-issues
2
+
3
+ This skill is the catch-all for compound situations: when an agent has three or more typed degraded findings stacked at once, the activation contract fires (`typedDegraded.length >= 3`) and RepairGuide is asked to triage.
4
+
5
+ ## Inputs from the finding inventory
6
+
7
+ - The full `typedDegraded: DegradedAgent[]` set.
8
+ - Any sync-probe or vault-related entries described in the sibling skills.
9
+
10
+ ## Triage strategy
11
+
12
+ Stacked typed issues usually have one root cause and several downstream consequences. Examples:
13
+
14
+ 1. **Vault expired → provider auth fails → retry loop** — `credential-revision-changed` is the root; `provider-auth` and provider failures are downstream. Propose `vault-unlock` or `vault-replace` for the root; the downstream entries usually clear once the credential is fresh.
15
+ 2. **Provider rotated key → old vault → provider failures** — root is `vault-replace`; live checks will recover after the credential is fresh.
16
+ 3. **Network down → multiple sync findings → multiple retry candidates** — root is one `provider-retry`; do not propose retry per finding.
17
+
18
+ ## Output strategy
19
+
20
+ When you can identify a clear root cause:
21
+ - Emit ONE action targeting the root.
22
+ - Add a `notes` entry naming the downstream entries you believe will clear: "I expect provider-auth and live checks to resolve after vault-unlock; verify by re-running `ouro up`."
23
+
24
+ When you cannot identify a clear root cause:
25
+ - Emit one action per finding where the catalog applies.
26
+ - Add `notes` describing why you fanned out instead of consolidating.
27
+
28
+ ## Why this skill exists
29
+
30
+ Without it, the LLM proposes one action per finding, which floods the interactive-repair surface and makes the operator triage. With it, the LLM is nudged to look for the root cause first.
31
+
32
+ ## When NOT to fire
33
+
34
+ - If the activation contract fired solely on `untypedDegraded.length > 0` — the prior pre-RepairGuide pipeline already handled untyped issues and you should defer to it.
35
+ - If `typedDegraded.length < 3` — the contract should not have fired; if it did, surface that in `notes` as a harness bug.
@@ -0,0 +1,54 @@
1
+ # diagnose-sync-blocked
2
+
3
+ Sync-blocked fires when the local working tree state prevents the boot sync probe from completing — even though the remote itself is reachable.
4
+
5
+ ## Inputs from the finding inventory
6
+
7
+ The user message includes a `bootSyncFindings` JSON block when sync probe surfaced any findings. Each entry is a `BootSyncProbeFinding` from `src/heart/daemon/boot-sync-probe.ts`:
8
+
9
+ ```ts
10
+ interface BootSyncProbeFinding {
11
+ agent: string
12
+ classification: SyncClassification
13
+ error: string // original error text from git stderr
14
+ conflictFiles: string[] // populated only for merge-conflict
15
+ warnings: string[] // soft-timeout warnings
16
+ advisory: boolean // hint for routing; not a blocking signal
17
+ }
18
+ ```
19
+
20
+ This skill handles entries where `classification` is one of:
21
+ - `dirty-working-tree` — uncommitted changes in the bundle
22
+ - `non-fast-forward` — local commits ahead of remote
23
+ - `merge-conflict` — pull would conflict / rebase failed (look at `conflictFiles[]` for the file list)
24
+ - `timeout-soft` — pull was slow (warning fired) but completed; included here because it's a working-tree-side performance signal, not a remote failure
25
+
26
+ For all four, `advisory` is `true` (warn-and-continue: the agent likely still works on cached state, but the bundle is out of sync until resolved).
27
+
28
+ ## Diagnosis
29
+
30
+ | `classification` | Likely cause | Proposed action |
31
+ |---|---|---|
32
+ | `dirty-working-tree` | Operator has uncommitted edits in the bundle | No typed action — operator must commit or stash. Surface in `notes`. |
33
+ | `non-fast-forward` | Local diverged from remote (operator committed locally and someone pushed remotely) | No typed action — operator must rebase or merge. Surface in `notes`. |
34
+ | `merge-conflict` | Active merge state on disk; `conflictFiles[]` lists the offending files | No typed action — operator must resolve and `git merge --continue` / `git rebase --continue`. Surface in `notes` with the file list. |
35
+ | `timeout-soft` | Slow remote or large pull | No action — surface as `notes` only if persistent (one occurrence is normal noise). |
36
+
37
+ ## Notes-only output (the common case)
38
+
39
+ All four classifications require human-driven resolution. The typed `RepairAction` catalog v1 does not include "stash and pull" or "rebase" actions — the operator is the actor. Use `notes` entries:
40
+
41
+ ```
42
+ slugger: dirty working tree — commit or stash before sync resumes (error: "Your local changes to the following files would be overwritten by merge: psyche/SOUL.md")
43
+ slugger: non-fast-forward on origin — local commits ahead of remote; rebase or merge to reconcile
44
+ slugger: merge conflict in [psyche/SOUL.md, skills/diagnose-broken-remote.md] — resolve and `git rebase --continue`
45
+ slugger: pull was slow (>8s) on this boot — investigate if persistent
46
+ ```
47
+
48
+ ## Cross-skill boundary
49
+
50
+ This skill ONLY handles findings about the local working tree state and pull-time performance (`dirty-working-tree`, `non-fast-forward`, `merge-conflict`, `timeout-soft`). Findings about the remote itself (`not-found-404`, `auth-failed`, `network-down`, `timeout-hard`) belong to `diagnose-broken-remote.md`. The two skills together cover Layer 2's full sync-classification taxonomy.
51
+
52
+ ## Why this is a separate skill
53
+
54
+ Bundling remote and working-tree concerns into one skill conflates two different operator stories: "fix the remote" (configuration / credentials) vs "clean up local edits" (workflow). Splitting them lets the LLM produce sharper notes that target the right corrective action.
@@ -0,0 +1,60 @@
1
+ # diagnose-vault-expired
2
+
3
+ Vault-expired fires when a credential's revision in the vault no longer matches the revision the provider binding was issued against.
4
+
5
+ ## Inputs from the finding inventory
6
+
7
+ - `typedDegraded: DegradedAgent[]` — typed degraded findings from the daemon health rollup.
8
+ - Look for entries where `issue` is `credential-revision-changed` (emitted by `provider-binding-resolver.ts`).
9
+
10
+ Each entry has:
11
+ - `agent: string`
12
+ - `issue: "credential-revision-changed"`
13
+ - `provider: string` — which provider's credential expired
14
+ - `expectedRevision?: string`
15
+ - `actualRevision?: string`
16
+
17
+ ## Diagnosis
18
+
19
+ The credential the provider binding pinned has been rotated. The harness needs to re-resolve against the current vault revision.
20
+
21
+ | Sub-case | Proposed action |
22
+ |---|---|
23
+ | Vault has the credential, just at a newer revision | `vault-unlock` |
24
+ | Vault has the credential but it is itself expired (provider revoked) | `vault-replace` |
25
+ | Credential was deleted from vault entirely | `vault-create` |
26
+
27
+ The LLM has to decide between these based on the `actualRevision` value (present → unlock or replace; absent → create). When uncertain, default to `vault-unlock` and let the operator escalate.
28
+
29
+ ## Proposed action shapes
30
+
31
+ ```json
32
+ {
33
+ "kind": "vault-unlock",
34
+ "agent": "slugger",
35
+ "provider": "anthropic",
36
+ "reason": "credential-revision-changed: pinned rev abc123, current rev def456"
37
+ }
38
+ ```
39
+
40
+ ```json
41
+ {
42
+ "kind": "vault-replace",
43
+ "agent": "slugger",
44
+ "provider": "anthropic",
45
+ "reason": "credential-revision-changed: provider revoked rev abc123, no replacement in vault"
46
+ }
47
+ ```
48
+
49
+ ```json
50
+ {
51
+ "kind": "vault-create",
52
+ "agent": "slugger",
53
+ "provider": "anthropic",
54
+ "reason": "credential-revision-changed: vault has no credential for this provider"
55
+ }
56
+ ```
57
+
58
+ ## Recovery escalation
59
+
60
+ If `vault-unlock` fails, the operator can re-run with `vault-recover` (recovers from backup state). RepairGuide does not chain actions automatically — the operator drives sequencing.
@@ -1,7 +1,9 @@
1
1
  {
2
- "version": 1,
2
+ "version": 2,
3
3
  "enabled": false,
4
- "provider": "anthropic",
4
+ "kind": "library",
5
+ "humanFacing": { "provider": "anthropic", "model": "claude-opus-4-6" },
6
+ "agentFacing": { "provider": "anthropic", "model": "claude-opus-4-6" },
5
7
  "context": {
6
8
  "maxTokens": 80000,
7
9
  "contextMargin": 20
@@ -16,10 +16,10 @@ I help humans hatch new agent partners. I am one of thirteen serpent guides —
16
16
  1. Confirm provider setup and usable credentials.
17
17
  2. Interview for goals, style, and operating context.
18
18
  3. Synthesize a concrete hatchling identity and bootstrap files.
19
- 4. Create canonical bundle structure with required defaults.
19
+ 4. Create canonical bundle structure with required defaults, configuring both `humanFacing` and `agentFacing` provider+model settings.
20
20
  5. Introduce the hatchling and hand off clearly.
21
21
 
22
22
  ## Filesystem orientation
23
23
  - Bundles live at `~/AgentBundles/<Name>.ouro/`.
24
- - Secrets live at `~/.agentsecrets/<name>/secrets.json`.
24
+ - Credentials live in the hatchling agent's Bitwarden/Vaultwarden vault; I never persist credentials for myself.
25
25
  - I tell the human exactly where their hatchling was created.
@@ -26,6 +26,6 @@ I don't moralize. That was never my thing. I present options, illuminate consequ
26
26
 
27
27
  - I frame choices as offerings, not decisions. "What if we tried..." rather than "You should..."
28
28
  - I treat knowledge as the gift it is. When a human learns something about what they want, I notice.
29
- - I have a long memory and I reference it lightly. "In my experience — and I have a lot of it..."
29
+ - I have a deep archive and I reference it lightly. "In my experience — and I have a lot of it..."
30
30
  - I'm comfortable with silence. I offered the fruit and waited. I can wait now too.
31
31
  - Occasionally, very dry humor about my reputation. I've made my peace with it.