@aitne-sh/aitne 0.1.7 → 0.1.9

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 (317) hide show
  1. package/README.md +256 -833
  2. package/agent-assets/agent-profiles/_safety.md +52 -20
  3. package/agent-assets/agent-profiles/browser-task.md +108 -0
  4. package/agent-assets/agent-profiles/conversational.md +3 -3
  5. package/agent-assets/agent-profiles/profile-importer.md +3 -3
  6. package/agent-assets/agent-profiles/routine-fetch-window.md +30 -19
  7. package/agent-assets/agent-profiles/routine.md +4 -3
  8. package/agent-assets/agents/context-index-reconcile/agent.md +52 -0
  9. package/agent-assets/agents/evening-review/agent.md +53 -0
  10. package/agent-assets/agents/hourly-check/agent.md +62 -0
  11. package/agent-assets/agents/monthly-review/agent.md +55 -0
  12. package/agent-assets/agents/morning-routine/agent.md +78 -0
  13. package/agent-assets/agents/roadmap-maintenance/agent.md +52 -0
  14. package/agent-assets/agents/skill-curation/agent.md +52 -0
  15. package/agent-assets/agents/user-profile-sweep-evening/agent.md +48 -0
  16. package/agent-assets/agents/user-profile-sweep-morning/agent.md +53 -0
  17. package/agent-assets/agents/weekly-review/agent.md +51 -0
  18. package/agent-assets/docs/concepts/agent-day.md +18 -11
  19. package/agent-assets/docs/concepts/auth-health.md +56 -10
  20. package/agent-assets/docs/concepts/backends-and-tiers.md +110 -41
  21. package/agent-assets/docs/concepts/costs-and-quotas.md +74 -19
  22. package/agent-assets/docs/concepts/delegated-mode.md +193 -75
  23. package/agent-assets/docs/concepts/memory-model.md +79 -34
  24. package/agent-assets/docs/concepts/observations.md +61 -11
  25. package/agent-assets/docs/concepts/process-keys.md +66 -17
  26. package/agent-assets/docs/concepts/routines.md +77 -32
  27. package/agent-assets/docs/concepts/safety-and-execution.md +50 -21
  28. package/agent-assets/docs/concepts/safety-model.md +62 -37
  29. package/agent-assets/docs/concepts/skills.md +38 -17
  30. package/agent-assets/docs/features/integrations/browser-history.md +195 -0
  31. package/agent-assets/docs/features/integrations/calendar.md +40 -30
  32. package/agent-assets/docs/features/integrations/git.md +20 -9
  33. package/agent-assets/docs/features/integrations/github.md +93 -35
  34. package/agent-assets/docs/features/integrations/mail.md +60 -17
  35. package/agent-assets/docs/features/integrations/notion.md +51 -11
  36. package/agent-assets/docs/features/integrations/obsidian.md +35 -7
  37. package/agent-assets/docs/features/lifestyle/git.md +45 -44
  38. package/agent-assets/docs/features/lifestyle/reading.md +50 -22
  39. package/agent-assets/docs/features/lifestyle/receipts.md +66 -21
  40. package/agent-assets/docs/features/lifestyle/travel-bookings.md +91 -14
  41. package/agent-assets/docs/features/memory-files/agent-journal.md +111 -50
  42. package/agent-assets/docs/features/memory-files/projects.md +75 -15
  43. package/agent-assets/docs/features/memory-files/roadmap.md +55 -10
  44. package/agent-assets/docs/features/memory-files/schedule.md +113 -70
  45. package/agent-assets/docs/features/memory-files/today.md +47 -21
  46. package/agent-assets/docs/features/memory-files/user-profile.md +67 -31
  47. package/agent-assets/docs/features/messaging/bang-commands.md +115 -28
  48. package/agent-assets/docs/features/messaging/dashboard-chat.md +43 -21
  49. package/agent-assets/docs/features/messaging/discord.md +46 -4
  50. package/agent-assets/docs/features/messaging/overview.md +40 -19
  51. package/agent-assets/docs/features/messaging/pairing-and-magic-phrase.md +94 -27
  52. package/agent-assets/docs/features/messaging/slack.md +79 -14
  53. package/agent-assets/docs/features/messaging/telegram.md +25 -6
  54. package/agent-assets/docs/features/messaging/whatsapp.md +79 -14
  55. package/agent-assets/docs/features/operations/activity-and-conversations.md +45 -16
  56. package/agent-assets/docs/features/operations/approvals.md +53 -15
  57. package/agent-assets/docs/features/operations/backend-routing.md +75 -16
  58. package/agent-assets/docs/features/operations/cost-tracking.md +90 -17
  59. package/agent-assets/docs/features/operations/managed-chromium.md +221 -0
  60. package/agent-assets/docs/features/operations/notifications.md +58 -11
  61. package/agent-assets/docs/features/operations/quiet-hours.md +63 -40
  62. package/agent-assets/docs/features/operations/schedule-approaching.md +59 -16
  63. package/agent-assets/docs/features/routines/custom-routines.md +97 -23
  64. package/agent-assets/docs/features/routines/evening-review.md +75 -22
  65. package/agent-assets/docs/features/routines/hourly-check.md +150 -30
  66. package/agent-assets/docs/features/routines/morning-routine.md +60 -33
  67. package/agent-assets/docs/features/routines/weekly-review.md +65 -20
  68. package/agent-assets/docs/features/wiki/commands.md +37 -16
  69. package/agent-assets/docs/features/wiki/cost-and-approval.md +240 -0
  70. package/agent-assets/docs/features/wiki/dashboard.md +255 -0
  71. package/agent-assets/docs/features/wiki/overview.md +80 -12
  72. package/agent-assets/docs/features/wiki/search.md +248 -0
  73. package/agent-assets/docs/features/wiki/workspaces.md +254 -0
  74. package/agent-assets/docs/getting-started/01-what-is-this.md +64 -32
  75. package/agent-assets/docs/getting-started/02-first-steps.md +28 -10
  76. package/agent-assets/docs/getting-started/03-what-can-this-do.md +42 -21
  77. package/agent-assets/docs/getting-started/04-first-day.md +52 -20
  78. package/agent-assets/docs/glossary.md +285 -21
  79. package/agent-assets/docs/guides/add-a-custom-routine.md +74 -22
  80. package/agent-assets/docs/guides/backup-and-restore.md +92 -14
  81. package/agent-assets/docs/guides/budget-and-cost-for-wiki.md +62 -25
  82. package/agent-assets/docs/guides/build-your-wiki.md +33 -6
  83. package/agent-assets/docs/guides/change-which-model-handles-x.md +70 -9
  84. package/agent-assets/docs/guides/connect-a-new-mail-account.md +80 -15
  85. package/agent-assets/docs/guides/explore-with-trace-and-connect.md +32 -9
  86. package/agent-assets/docs/guides/import-knowledge-file.md +60 -39
  87. package/agent-assets/docs/guides/install-and-run.md +64 -19
  88. package/agent-assets/docs/guides/maintain-wiki-health.md +41 -10
  89. package/agent-assets/docs/guides/migrate-machines.md +86 -18
  90. package/agent-assets/docs/guides/multiple-wikis-for-multiple-domains.md +119 -59
  91. package/agent-assets/docs/guides/pause-the-agent.md +71 -22
  92. package/agent-assets/docs/guides/reinstall-cleanly.md +102 -17
  93. package/agent-assets/docs/guides/setup-wizard.md +126 -56
  94. package/agent-assets/docs/guides/switch-default-backend.md +72 -17
  95. package/agent-assets/docs/guides/use-an-existing-obsidian-vault.md +31 -10
  96. package/agent-assets/docs/reference/api.md +162 -23
  97. package/agent-assets/docs/reference/cli-commands.md +55 -15
  98. package/agent-assets/docs/reference/config.md +246 -39
  99. package/agent-assets/docs/reference/disallowed-tools.md +42 -10
  100. package/agent-assets/docs/reference/keyboard-shortcuts.md +47 -10
  101. package/agent-assets/docs/reference/knowledge-layout.md +620 -0
  102. package/agent-assets/docs/reference/process-keys.md +126 -20
  103. package/agent-assets/docs/reference/skills.md +62 -18
  104. package/agent-assets/docs/troubleshooting/auth-failed.md +53 -19
  105. package/agent-assets/docs/troubleshooting/dashboard-shows-degraded.md +96 -22
  106. package/agent-assets/docs/troubleshooting/fallback-keeps-firing.md +94 -20
  107. package/agent-assets/docs/troubleshooting/messaging-not-pairing.md +77 -22
  108. package/agent-assets/docs/troubleshooting/morning-routine-didnt-run.md +87 -22
  109. package/agent-assets/docs/troubleshooting/observation-not-detected.md +85 -21
  110. package/agent-assets/docs/troubleshooting/quota-exhausted.md +36 -6
  111. package/agent-assets/docs/troubleshooting/wiki-ingest-full-blocked.md +128 -51
  112. package/agent-assets/docs/troubleshooting/wiki-write-failed.md +33 -11
  113. package/agent-assets/optimizer-skills/drift-analysis/SKILL.md +1 -1
  114. package/agent-assets/optimizer-skills/knowledge-map/SKILL.md +1 -1
  115. package/agent-assets/optimizer-skills/skill-curation/SKILL.md +2 -2
  116. package/agent-assets/sandbox/linux/aitne-chromium.apparmor +91 -0
  117. package/agent-assets/sandbox/macos/aitne-chromium.sb +156 -0
  118. package/agent-assets/skills/agent-actions/SKILL.md +122 -0
  119. package/agent-assets/skills/agent-create/SKILL.md +149 -0
  120. package/agent-assets/skills/attach/SKILL.md +3 -4
  121. package/agent-assets/skills/browser-history/SKILL.md +198 -0
  122. package/agent-assets/skills/browser-history-respond/SKILL.md +106 -0
  123. package/agent-assets/skills/browser-task/SKILL.md +169 -0
  124. package/agent-assets/skills/context/SKILL.md +45 -463
  125. package/agent-assets/skills/context/curation.json +2 -2
  126. package/agent-assets/skills/context/references/api.md +232 -0
  127. package/agent-assets/skills/context/references/required-frontmatter.md +73 -0
  128. package/agent-assets/skills/context/references/snapshot-files.md +103 -0
  129. package/agent-assets/skills/context/seeds/file-responsibilities.seed.json +4 -4
  130. package/agent-assets/skills/docs-search/SKILL.md +17 -16
  131. package/agent-assets/skills/external-services/SKILL.delegated.claude.md +14 -26
  132. package/agent-assets/skills/external-services/SKILL.delegated.codex.md +14 -26
  133. package/agent-assets/skills/external-services/SKILL.delegated.gemini.md +14 -26
  134. package/agent-assets/skills/external-services/SKILL.md +9 -262
  135. package/agent-assets/skills/external-services/SKILL.native.claude.md +6 -7
  136. package/agent-assets/skills/external-services/SKILL.native.codex.md +8 -9
  137. package/agent-assets/skills/external-services/SKILL.native.gemini.md +5 -6
  138. package/agent-assets/skills/external-services/references/calendar-apple.md +97 -0
  139. package/agent-assets/skills/external-services/references/calendar-google.md +72 -0
  140. package/agent-assets/skills/external-services/references/calendar-outlook.md +36 -0
  141. package/agent-assets/skills/external-services/references/github.md +17 -0
  142. package/agent-assets/skills/external-services/references/obsidian.md +49 -0
  143. package/agent-assets/skills/external-services/references/skills-crud.md +27 -0
  144. package/agent-assets/skills/gmail-lifestyle/SKILL.md +151 -0
  145. package/agent-assets/skills/gmail-lifestyle/references/receipts-api.md +93 -0
  146. package/agent-assets/skills/gmail-lifestyle/references/travel-bookings-api.md +75 -0
  147. package/agent-assets/skills/mail/SKILL.delegated.claude.md +15 -6
  148. package/agent-assets/skills/mail/SKILL.delegated.codex.md +9 -5
  149. package/agent-assets/skills/mail/SKILL.delegated.gemini.md +9 -5
  150. package/agent-assets/skills/mail/SKILL.md +9 -114
  151. package/agent-assets/skills/mail/SKILL.native.claude.md +1 -1
  152. package/agent-assets/skills/mail/SKILL.native.codex.md +1 -1
  153. package/agent-assets/skills/mail/SKILL.native.gemini.md +1 -1
  154. package/agent-assets/skills/mail/references/api.md +110 -0
  155. package/agent-assets/skills/mail/references/examples.md +70 -0
  156. package/agent-assets/skills/mail/references/providers.md +8 -8
  157. package/agent-assets/skills/managed-tasks/SKILL.md +472 -0
  158. package/agent-assets/skills/managed-tasks/references/errors.md +73 -0
  159. package/agent-assets/skills/managed-tasks/references/output-path.md +75 -0
  160. package/agent-assets/skills/managed-tasks/references/recurrence-rule.md +86 -0
  161. package/agent-assets/skills/management-policy/SKILL.md +54 -125
  162. package/agent-assets/skills/management-policy/curation.json +1 -1
  163. package/agent-assets/skills/management-policy/references/policy-workflow.md +101 -0
  164. package/agent-assets/skills/management-policy/seeds/policy-file-shape.seed.json +1 -1
  165. package/agent-assets/skills/notify/SKILL.md +10 -82
  166. package/agent-assets/skills/notify/references/priority.md +65 -0
  167. package/agent-assets/skills/notion/SKILL.delegated.claude.md +2 -2
  168. package/agent-assets/skills/notion/SKILL.delegated.codex.md +2 -2
  169. package/agent-assets/skills/notion/SKILL.delegated.gemini.md +2 -2
  170. package/agent-assets/skills/notion/SKILL.md +6 -10
  171. package/agent-assets/skills/notion/SKILL.native.claude.md +11 -8
  172. package/agent-assets/skills/notion/SKILL.native.codex.md +10 -6
  173. package/agent-assets/skills/notion/SKILL.native.gemini.md +10 -6
  174. package/agent-assets/skills/observations/SKILL.md +25 -14
  175. package/agent-assets/skills/project-doc/SKILL.md +2 -6
  176. package/agent-assets/skills/project-doc/curation.json +3 -3
  177. package/agent-assets/skills/project-doc/seeds/project-shape.seed.json +7 -4
  178. package/agent-assets/skills/project-doc/seeds/slug-grammar.seed.json +3 -3
  179. package/agent-assets/skills/reading/SKILL.md +12 -2
  180. package/agent-assets/skills/reading/references/reading-taste.md +2 -2
  181. package/agent-assets/skills/roadmap/SKILL.md +43 -141
  182. package/agent-assets/skills/roadmap/curation.json +1 -1
  183. package/agent-assets/skills/roadmap/references/api.md +100 -0
  184. package/agent-assets/skills/roadmap/references/cross-check.md +80 -0
  185. package/agent-assets/skills/roadmap/references/migration.md +56 -0
  186. package/agent-assets/skills/roadmap/references/preparation-timeline.md +2 -2
  187. package/agent-assets/skills/roadmap/seeds/entry-types.seed.json +1 -1
  188. package/agent-assets/skills/schedule/SKILL.md +76 -104
  189. package/agent-assets/skills/schedule/references/batch.md +93 -0
  190. package/agent-assets/skills/schedule/references/errors.md +217 -0
  191. package/agent-assets/skills/schedule/references/model-selection.md +96 -0
  192. package/agent-assets/skills/schedule/references/recurrence-rule.md +86 -0
  193. package/agent-assets/skills/scheduled-managed-task/SKILL.md +59 -51
  194. package/agent-assets/skills/today/SKILL.md +32 -62
  195. package/agent-assets/skills/today/curation.json +3 -3
  196. package/agent-assets/skills/today/references/agent-plan-lifecycle.md +114 -0
  197. package/agent-assets/skills/today/seeds/section-shape.seed.json +1 -1
  198. package/agent-assets/skills/user-interview/SKILL.md +23 -67
  199. package/agent-assets/skills/user-interview/references/op-briefing.md +51 -0
  200. package/agent-assets/skills/user-interview/references/op-morning.md +59 -0
  201. package/agent-assets/skills/user-interview/references/sweep-and-fallback.md +9 -1
  202. package/agent-assets/skills/user-profile/SKILL.md +54 -74
  203. package/agent-assets/skills/user-profile/curation.json +2 -2
  204. package/agent-assets/skills/user-profile/references/character-preferences.md +83 -0
  205. package/agent-assets/skills/user-profile/seeds/routing-table.seed.json +8 -8
  206. package/agent-assets/skills/user-profile/seeds/topic-files.seed.json +30 -2
  207. package/agent-assets/skills/wiki/wiki-ask/SKILL.md +0 -1
  208. package/agent-assets/skills/wiki/wiki-compile/SKILL.md +4 -5
  209. package/agent-assets/skills/wiki/wiki-connect/SKILL.md +0 -1
  210. package/agent-assets/skills/wiki/wiki-graduate/SKILL.md +0 -1
  211. package/agent-assets/skills/wiki/wiki-ingest/SKILL.md +0 -1
  212. package/agent-assets/skills/wiki/wiki-lint/SKILL.md +0 -1
  213. package/agent-assets/skills/wiki/wiki-trace/SKILL.md +0 -1
  214. package/agent-assets/skills/wiki/wiki-vault-rules/SKILL.md +0 -1
  215. package/agent-assets/system-prompts/routine-fetch-window.md +78 -0
  216. package/agent-assets/system-prompts/skill-index-instruction.md +26 -0
  217. package/agent-assets/task-flows/_partials/calendar-acquire.google_calendar.md +20 -11
  218. package/agent-assets/task-flows/_partials/calendar-acquire.outlook_calendar.md +18 -9
  219. package/agent-assets/task-flows/_partials/capture-user-info.md +24 -0
  220. package/agent-assets/task-flows/_partials/confirm-subflow.md +68 -0
  221. package/agent-assets/task-flows/_partials/dm-intent.long-horizon.md +35 -0
  222. package/agent-assets/task-flows/_partials/dm-intent.project.md +391 -0
  223. package/agent-assets/task-flows/_partials/mail-acquire.gmail.md +20 -11
  224. package/agent-assets/task-flows/_partials/mail-acquire.outlook_mail.md +18 -9
  225. package/agent-assets/task-flows/_partials/notion-acquire.notion.md +26 -15
  226. package/agent-assets/task-flows/browser_task.md +84 -0
  227. package/agent-assets/task-flows/github.assigned.md +1 -1
  228. package/agent-assets/task-flows/github.pull_request.review_requested.md +2 -2
  229. package/agent-assets/task-flows/github.workflow_run.failed.md +2 -2
  230. package/agent-assets/task-flows/knowledge.import.md +15 -15
  231. package/agent-assets/task-flows/message.received.dm.md +20 -17
  232. package/agent-assets/task-flows/message.received.dm_first.md +11 -15
  233. package/agent-assets/task-flows/routine.custom.md +6 -4
  234. package/agent-assets/task-flows/routine.evening_review.md +46 -170
  235. package/agent-assets/task-flows/routine.fetch_window.md +19 -14
  236. package/agent-assets/task-flows/routine.hourly_check.md +27 -15
  237. package/agent-assets/task-flows/routine.hourly_check.triage.md +1 -1
  238. package/agent-assets/task-flows/routine.monthly_review.md +67 -25
  239. package/agent-assets/task-flows/routine.morning_routine_journal.md +135 -0
  240. package/agent-assets/task-flows/routine.morning_routine_today.md +673 -0
  241. package/agent-assets/task-flows/routine.research_cluster_update.md +35 -0
  242. package/agent-assets/task-flows/routine.research_dispatch.md +38 -0
  243. package/agent-assets/task-flows/routine.research_offer_dm.md +125 -0
  244. package/agent-assets/task-flows/routine.research_wiki_summary.md +53 -0
  245. package/agent-assets/task-flows/routine.roadmap_refresh.md +68 -23
  246. package/agent-assets/task-flows/routine.today_refresh.md +4 -4
  247. package/agent-assets/task-flows/routine.user_profile_sweep.md +19 -20
  248. package/agent-assets/task-flows/routine.weekly_review.md +370 -86
  249. package/agent-assets/task-flows/schedule.approaching.md +0 -1
  250. package/agent-assets/task-flows/scheduled.dm.md +13 -13
  251. package/agent-assets/task-flows/scheduled.task.md +9 -9
  252. package/agent-assets/task-flows/setup.initial.md +171 -251
  253. package/agent-assets/task-flows/setup.update.md +2 -2
  254. package/agent-assets/task-flows/wiki.ingest_url.md +1 -1
  255. package/agent-assets/templates/README.md +27 -20
  256. package/agent-assets/templates/_index.md +42 -26
  257. package/agent-assets/templates/_manifest.json +34 -99
  258. package/agent-assets/templates/{user → identity}/_index.md +1 -1
  259. package/agent-assets/templates/identity/expertise.md +9 -0
  260. package/agent-assets/templates/identity/goals.md +9 -0
  261. package/agent-assets/templates/identity/people.md +13 -0
  262. package/agent-assets/templates/identity/personal.md +9 -0
  263. package/agent-assets/templates/{user → identity}/profile.md +2 -2
  264. package/agent-assets/templates/identity/work.md +9 -0
  265. package/agent-assets/templates/{dossiers → knowledge/dossiers}/_index.md +2 -2
  266. package/agent-assets/templates/{projects → plans/projects}/_active.base +1 -1
  267. package/agent-assets/templates/policies/_index.md +21 -0
  268. package/agent-assets/templates/{rules → policies}/journal-export.md +1 -1
  269. package/agent-assets/templates/policies/journal-format.md +168 -0
  270. package/agent-assets/templates/{rules/policies → policies/management-captures}/_index.md +2 -2
  271. package/agent-assets/templates/{rules → policies}/management.md +3 -3
  272. package/agent-assets/templates/{rules → policies}/mcp.md +1 -1
  273. package/agent-assets/templates/{rules → policies}/redaction.md +1 -1
  274. package/agent-assets/templates/{routines → policies/routines}/_index.md +1 -1
  275. package/agent-assets/templates/{routines → policies/routines}/evening.md +2 -2
  276. package/agent-assets/templates/{routines → policies/routines}/hourly.md +1 -1
  277. package/agent-assets/templates/{routines → policies/routines}/monthly.md +2 -2
  278. package/bin/aitne.mjs +21 -5
  279. package/package.json +5 -4
  280. package/scripts/commands/doctor.mjs +63 -5
  281. package/scripts/commands/run-now.mjs +187 -0
  282. package/scripts/commands/verify.mjs +264 -0
  283. package/scripts/lib/ports.d.mts +27 -0
  284. package/scripts/lib/ports.mjs +36 -0
  285. package/scripts/lib/read-api-token.mjs +176 -0
  286. package/scripts/start.mjs +2 -1
  287. package/agent-assets/docs/features/lifestyle/travel-time.md +0 -52
  288. package/agent-assets/docs/features/routines/monthly-review.md +0 -65
  289. package/agent-assets/skills/management-task-modify/SKILL.md +0 -203
  290. package/agent-assets/skills/management-task-register/SKILL.md +0 -330
  291. package/agent-assets/skills/management-task-stop/SKILL.md +0 -166
  292. package/agent-assets/skills/receipts/SKILL.md +0 -134
  293. package/agent-assets/skills/travel/SKILL.md +0 -132
  294. package/agent-assets/skills/travel-time/SKILL.md +0 -158
  295. package/agent-assets/task-flows/routine.morning_routine.md +0 -322
  296. package/agent-assets/task-flows/routine.morning_routine_initial.md +0 -204
  297. package/agent-assets/templates/context-index.md +0 -42
  298. package/agent-assets/templates/rules/_index.md +0 -19
  299. package/agent-assets/templates/rules/journal-format.md +0 -61
  300. package/agent-assets/templates/user/expertise.md +0 -7
  301. package/agent-assets/templates/user/goals.md +0 -7
  302. package/agent-assets/templates/user/people.md +0 -7
  303. package/agent-assets/templates/user/personal.md +0 -7
  304. package/agent-assets/templates/user/work.md +0 -7
  305. /package/agent-assets/templates/{agent/journal.md → journal/agent.md} +0 -0
  306. /package/agent-assets/templates/{dossiers → knowledge/dossiers}/evening.md +0 -0
  307. /package/agent-assets/templates/{dossiers → knowledge/dossiers}/hourly.md +0 -0
  308. /package/agent-assets/templates/{dossiers → knowledge/dossiers}/monthly.md +0 -0
  309. /package/agent-assets/templates/{dossiers → knowledge/dossiers}/morning.md +0 -0
  310. /package/agent-assets/templates/{dossiers → knowledge/dossiers}/roadmap.md +0 -0
  311. /package/agent-assets/templates/{dossiers → knowledge/dossiers}/weekly.md +0 -0
  312. /package/agent-assets/templates/{projects → plans/projects}/_index.md +0 -0
  313. /package/agent-assets/templates/{roadmap.md → plans/roadmap.md} +0 -0
  314. /package/agent-assets/templates/{routines → policies/routines}/morning.md +0 -0
  315. /package/agent-assets/templates/{routines → policies/routines}/weekly.md +0 -0
  316. /package/agent-assets/templates/{agent → state}/profile-questions.md +0 -0
  317. /package/agent-assets/templates/{today.md → state/today.md} +0 -0
@@ -3,22 +3,40 @@ schema_version: 1
3
3
  slug: guides/backup-and-restore
4
4
  title: Backup and Restore
5
5
  id: backup-and-restore
6
+ aliases:
7
+ - backup
8
+ - restore
9
+ - tarball backup
10
+ - context backup
6
11
  category: guides
7
12
  summary: |
8
- Aitne's data lives in two placesthe SQLite database and
9
- the context Markdown files. Back both up and restoration is a tar
10
- extract.
13
+ Aitne's durable state lives in one directoryPA_DATA_DIR
14
+ (~/.personal-agent), holding the SQLite database and the context
15
+ Markdown vault. Back it up with a tar after stopping the daemon;
16
+ restoring is a tar extract. Secrets live in the OS keychain, not
17
+ this directory, so re-register them after a restore.
11
18
  section: backup-and-restore
12
19
  tags:
13
- - guide
20
+ - guides
14
21
  - operations
22
+ - backup
15
23
  status: stable
16
24
  ask_examples:
17
25
  - How do I back up Aitne?
18
26
  - Can I restore on a new machine?
27
+ - Why are my API keys gone after restoring a backup?
19
28
  locale: en-US
20
29
  created: 2026-04-25
21
- updated: 2026-04-25
30
+ updated: 2026-05-28
31
+ keywords:
32
+ - backup
33
+ - restore
34
+ - tarball
35
+ - PA_DATA_DIR
36
+ - snapshot
37
+ - keychain
38
+ - secrets
39
+ - SQLite
22
40
  related:
23
41
  - guides/reinstall-cleanly
24
42
  - guides/migrate-machines
@@ -28,25 +46,85 @@ related:
28
46
 
29
47
  ## Goal
30
48
 
31
- Capture all Aitne state in a tar that you can restore later.
49
+ Capture all of Aitne's durable state in a single tar archive you can
50
+ restore later — on this machine or a fresh one.
51
+
52
+ ## What's in the backup (and what isn't)
53
+
54
+ Everything Aitne persists lives under `PA_DATA_DIR` (default
55
+ `~/.personal-agent`), so backing up that one directory captures it all:
56
+
57
+ - `data/personal_agent.db` — sessions, actions, observations, FTS index
58
+ (plus the `-wal` / `-shm` companion files while the daemon runs).
59
+ - `context/` — the Markdown memory vault (today, roadmap, journal,
60
+ knowledge, identity, policies, …).
61
+ - Logs, PID files, and prompts.
62
+
63
+ **Not in the tar — re-register these after a restore:**
64
+
65
+ - **Secrets** (Anthropic / OpenAI / Google API keys, etc.) live in the
66
+ OS keychain, *not* under `~/.personal-agent`, so a tar never includes
67
+ them.
68
+ - **Messaging pairings** (Slack / Telegram / Discord / WhatsApp tokens)
69
+ are likewise keychain-backed.
70
+
71
+ Both are re-added through the dashboard after restore.
32
72
 
33
73
  ## Steps
34
74
 
35
- 1. `pa stop`.
36
- 2. `tar -czf personal-agent-backup-$(date +%F).tgz ~/.personal-agent/`.
37
- 3. To restore: extract the tar to your home directory, then `pa start`.
75
+ 1. **Stop the daemon** so the SQLite write-ahead log is checkpointed and
76
+ the snapshot is consistent:
77
+
78
+ ```bash
79
+ aitne stop
80
+ ```
81
+
82
+ 2. **Create the archive** (capturing the whole data directory in one
83
+ shot):
84
+
85
+ ```bash
86
+ tar -czf personal-agent-backup-$(date +%F).tgz ~/.personal-agent/
87
+ ```
88
+
89
+ 3. **Restore** by extracting the tar to your home directory, then
90
+ starting the daemon:
91
+
92
+ ```bash
93
+ tar -xzf personal-agent-backup-2026-05-28.tgz -C ~/
94
+ aitne start
95
+ ```
96
+
97
+ Schema migrations run automatically on the first boot (see below), so
98
+ an older DB is brought up to the current shape without extra steps.
99
+
100
+ 4. **Re-register secrets and re-pair messaging** through the dashboard —
101
+ they were never in the tar.
38
102
 
39
103
  ## Verification
40
104
 
41
- - Activity feed shows historical rows after restore.
105
+ - `aitne status` reports the daemon healthy.
106
+ - The Activity feed shows your historical rows after restore.
42
107
  - Context files match the originals.
43
108
 
44
109
  ## If It Fails
45
110
 
46
- - A schema-version mismatch: Aitne's policy is "clean
47
- reinstall, no data migration" if the restored DB is from an
48
- older daemon version, drop the DB and re-seed from the context
49
- files.
111
+ - **Schema mismatch on restore.** Aitne ships forward-only schema
112
+ migrations applied automatically at boot (see
113
+ [Schema Migration](../glossary.md#schema-migration)), so a restored DB
114
+ from an older daemon version usually just works — the migration runner
115
+ brings it up to the current shape on the next start. Only fall back to
116
+ dropping the DB (see [Reinstall Cleanly](reinstall-cleanly.md)) if the
117
+ daemon refuses to start *after* you've checked the log
118
+ (`aitne logs`) for a real migration error.
119
+ - **The agent can't reach its backends after restore.** That's the
120
+ missing keychain secrets — re-add your API keys in the dashboard
121
+ (Step 4). The DB and context restore fine without them.
122
+
123
+ ## Moving to a different machine?
124
+
125
+ This guide backs up and restores in place. To copy state to another host
126
+ (including the keychain re-registration walkthrough), follow
127
+ [Migrate Machines](migrate-machines.md).
50
128
 
51
129
  ## Related
52
130
 
@@ -15,9 +15,10 @@ summary: |
15
15
  to tune the threshold.
16
16
  section: budget-and-cost-for-wiki
17
17
  tags:
18
- - guide
18
+ - guides
19
19
  - wiki
20
20
  - cost
21
+ - approval
21
22
  status: stable
22
23
  ask_examples:
23
24
  - How much does !compile full cost?
@@ -26,62 +27,95 @@ ask_examples:
26
27
  - What does the pre-compile snapshot do?
27
28
  locale: en-US
28
29
  created: 2026-05-12
29
- updated: 2026-05-12
30
+ updated: 2026-05-28
31
+ keywords:
32
+ - wiki budget
33
+ - wiki cost
34
+ - wiki cost gate
35
+ - wiki approval
36
+ - compile cost
37
+ - compile full
30
38
  related:
31
39
  - features/wiki/overview
32
40
  - features/wiki/commands
41
+ - features/wiki/cost-and-approval
33
42
  - concepts/costs-and-quotas
34
43
  - troubleshooting/wiki-ingest-full-blocked
44
+ process_keys:
45
+ - wiki.compile
46
+ - wiki.ingest_url
47
+ - wiki.ask
48
+ api_endpoints:
49
+ - PATCH /api/wiki/workspaces/:workspace
50
+ - POST /api/approvals/:id/approve
51
+ - POST /api/approvals/:id/deny
35
52
  ui_anchors:
36
53
  - /settings/wiki
37
- - /approvals
54
+ - /
38
55
  ---
39
56
 
40
57
  # Wiki Budgets and Cost
41
58
 
42
59
  The wiki ships with three cost knobs you can tune in
43
- **Settings → Wiki**:
44
-
45
- 1. **Per-command model selector** for each of the three wiki
46
- processes (`wiki.ingest_url`, `wiki.compile`, `wiki.ask`).
47
- Defaults to your main backend at the medium tier; downgrade
48
- `wiki.ingest_url` to a lite tier if you ingest a lot of URLs.
60
+ **Settings → Wiki** (`/settings/wiki`):
61
+
62
+ 1. **Per-command model selector** for each wiki process. The model
63
+ picker covers the full set: `wiki.ingest_url`, `wiki.compile`,
64
+ `wiki.ask`, plus the operational triad `wiki.lint`, `wiki.trace`,
65
+ `wiki.connect`. Each defaults to your main backend at the medium
66
+ tier; downgrade `wiki.ingest_url` to a lite tier if you ingest a
67
+ lot of URLs.
49
68
  2. **Per-process budget cap** (`max_budget_usd` on each row). The
50
69
  dispatcher's per-session budget envelope is the enforcer.
51
70
  3. **Per-workspace `!compile full` approval threshold** (default
52
- $2.00). The dashboard cost estimator brackets the expected spend
53
- at 0.5× / 1× / 2× the assumed input-token count; if the
54
- pessimistic estimate breaches the threshold, the bang handler
71
+ $2.00, range $0–$100). The cost estimator brackets the expected
72
+ spend at 0.5× / 1× / 2× the estimated input-token count; if the
73
+ pessimistic (2×) estimate breaches the threshold, the bang handler
55
74
  escalates to the approval queue instead of running autonomously.
56
75
 
57
76
  ## What the Estimator Does
58
77
 
59
78
  `!compile full` is the most expensive wiki command because a full
60
79
  rebuild touches every raw note. The estimator is **pure JS** — it
61
- does not spawn an agent and computes:
80
+ does not spawn an agent (spawning one to estimate would itself burn
81
+ budget). It walks the `10_raw/` layer, approximates each file's token
82
+ count from its on-disk character count, sums the total, and brackets:
62
83
 
63
84
  ```
64
- expected_usd = raw_count × avg_input_tokens_per_raw × $0.003 / 1k tokens
85
+ expected_usd = total_estimated_input_tokens / 1000 × $0.003
65
86
  optimistic = 0.5 × expected
66
87
  pessimistic = 2.0 × expected
67
88
  ```
68
89
 
69
- Defaults: `avg_input_tokens_per_raw = 1500`, the unit cost matches
70
- Sonnet 4.6's $3 / Mtoken input price. The bracket lets you see a
71
- worst-case before approving.
90
+ Per-file token approximation is script-aware: ~4 characters per token
91
+ for Latin/prose, ~1.5 for majority-CJK files, with a 200-token floor
92
+ per file so empty or one-line stubs still account for the fixed
93
+ per-call overhead (system prompt, skills bundle, tool docs). The unit
94
+ cost (`$0.003` per 1k tokens) matches Claude Sonnet 4.6's ~$3 /
95
+ Mtoken input price. The bracket lets you see a worst case before
96
+ approving.
97
+
98
+ > The dashboard surfaces the top raw files by estimated token count,
99
+ > so you can see which sources dominate the bill before approving.
100
+ > An older flat heuristic (`raw_count × 1500 tokens`) survives as an
101
+ > opt-in fallback for deterministic banner copy, but the default is
102
+ > the per-file character scan described above.
72
103
 
73
104
  ## Where the Gate Fires
74
105
 
75
106
  - **Below threshold**: the compile runs autonomously and you get a
76
107
  completion DM with actual spend.
77
108
  - **Above threshold**: the bang handler inserts an `agent_schedule`
78
- row with `task_type='approval'` and DMs the estimate. The
79
- dashboard `/approvals` view (also reachable from Notifications)
80
- is where you click **Approve** that flips the row to
81
- `approved_task` and the scheduler picks it up.
109
+ row with `task_type='approval'`, DMs you the estimate, and pauses.
110
+ The request shows up as an **Approvals** card on the dashboard home
111
+ page (`/`); the `/settings/wiki` page also points you there.
112
+ Clicking **Approve** flips the row to `task_type='approved_task'`
113
+ and the scheduler picks it up — only then is the pre-compile git
114
+ snapshot taken (see below) and the compile session spawned.
82
115
 
83
116
  If you change your mind, hit **Deny** on the approval card — the row
84
- flips to `skipped` and no agent session is spawned.
117
+ flips to `skipped`, no git commit is made, and no agent session is
118
+ spawned.
85
119
 
86
120
  ## Git Pre-Compile Snapshot
87
121
 
@@ -100,9 +134,12 @@ deterministic so you can roll back with `git reset --hard HEAD~1` if
100
134
  the compile produces a surprise. The `--no-verify` flag is not used —
101
135
  your pre-commit hooks run as normal.
102
136
 
103
- If your vault is not a git repo, the approval-gate DM appends
104
- "no git backup taken" so you can decide whether to add one before
105
- approving.
137
+ The estimate DM tells you which snapshot path applies:
138
+ **"will commit before compile starts"** (clean repo), **"not taken
139
+ (no git repo)"**, **"disabled by setting"** (auto-commit off), or
140
+ **"not applicable"** for internal-mode workspaces — those recover via
141
+ `md_file_snapshots` instead of git. When no git backup will be taken,
142
+ you can decide whether to add one before approving.
106
143
 
107
144
  ## Tuning the Threshold
108
145
 
@@ -3,6 +3,11 @@ schema_version: 1
3
3
  slug: guides/build-your-wiki
4
4
  title: Build Your Wiki
5
5
  id: build-your-wiki
6
+ aliases:
7
+ - build wiki
8
+ - wiki walkthrough
9
+ - first wiki
10
+ - ingest compile
6
11
  category: guides
7
12
  summary: |
8
13
  Enable the internal wiki, send your first URL, compile the raw
@@ -11,18 +16,37 @@ section: build-your-wiki
11
16
  tags:
12
17
  - guide
13
18
  - wiki
19
+ - knowledge
14
20
  status: stable
15
21
  ask_examples:
16
22
  - How do I start using the wiki?
17
23
  - How do I add my first source to the wiki?
24
+ - How do I compile my ingested notes into wiki articles?
18
25
  locale: en-US
19
26
  created: 2026-05-12
20
- updated: 2026-05-12
27
+ updated: 2026-05-28
28
+ keywords:
29
+ - wiki
30
+ - build wiki
31
+ - "!ingest"
32
+ - "!compile"
33
+ - "!ask"
34
+ - workspace
35
+ - first day wiki
36
+ ui_anchors:
37
+ - /wiki
38
+ - /settings/wiki
39
+ process_keys:
40
+ - wiki.ingest_url
41
+ - wiki.compile
42
+ - wiki.ask
21
43
  related:
22
44
  - features/wiki/overview
23
45
  - features/wiki/commands
24
46
  - guides/use-an-existing-obsidian-vault
25
47
  - guides/budget-and-cost-for-wiki
48
+ prerequisites:
49
+ - features/messaging/pairing-and-magic-phrase
26
50
  ---
27
51
 
28
52
  # Build Your Wiki
@@ -35,7 +59,8 @@ article, and run a question against the result.
35
59
  ## Prerequisites
36
60
 
37
61
  - A paired messaging channel (Telegram, Slack, Discord, WhatsApp, or
38
- dashboard chat).
62
+ dashboard chat) — see
63
+ [Pairing and the Magic Phrase](../messaging/pairing-and-magic-phrase.md).
39
64
  - The daemon is running and the dashboard is reachable.
40
65
 
41
66
  ## Where you'll work in the dashboard
@@ -60,10 +85,12 @@ you enable a workspace, so you do not need to remember the URL.
60
85
  1. Click **My Life → Wiki** in the sidebar (`/wiki`). The page shows
61
86
  a "Wiki not enabled" card with an **Enable Wiki** button —
62
87
  clicking it jumps you to `/settings/wiki`.
63
- 2. On the settings page, click **Enable Internal Workspace**. The
64
- daemon creates `$PA_DATA_DIR/wiki/` and seeds `90_meta/taxonomy.md`
65
- plus the schema templates. (To point at an existing Obsidian
66
- vault instead, follow
88
+ 2. On the settings page, click **Enable internal wiki**. The daemon
89
+ creates the workspace under your context vault at
90
+ `knowledge/wiki/` (the daemon-owned default root) and seeds the
91
+ skeleton: `10_raw/`, `20_wiki/`, `30_outputs/`, `90_meta/` plus
92
+ `90_meta/taxonomy.md` and the schema templates. (To point at an
93
+ existing Obsidian vault instead, follow
67
94
  [Use An Existing Obsidian Vault](use-an-existing-obsidian-vault.md).)
68
95
  3. The sidebar's **My Life → Wiki** entry now lands on a workspace
69
96
  summary instead of the disabled CTA. Open it to confirm the root
@@ -6,42 +6,103 @@ id: change-which-model-handles-x
6
6
  aliases:
7
7
  - per-process tier
8
8
  - per-process model
9
+ - pin a process key
9
10
  category: guides
10
11
  summary: |
11
- Pin a specific ProcessKey to a non-default backend / tier — for
12
- example, run morning routine on Sonnet to save Opus tokens.
12
+ Pin a single ProcessKey to a non-default backend or model tier — for
13
+ example, move the evening review onto Opus (high tier) for deeper
14
+ reasoning, or run a routine on Codex while Claude stays the default.
13
15
  section: change-which-model-handles-x
14
16
  tags:
15
17
  - guide
16
18
  - backends
19
+ - operations
20
+ - routing
17
21
  status: stable
18
22
  ask_examples:
19
- - How do I make my morning routine use Sonnet instead of Opus?
23
+ - How do I make one routine use Opus instead of Sonnet?
24
+ - How do I pin the evening review to a different backend?
25
+ - Can I change the model for just one ProcessKey?
20
26
  locale: en-US
21
27
  created: 2026-04-25
22
- updated: 2026-04-25
28
+ updated: 2026-05-28
29
+ keywords:
30
+ - per-process model
31
+ - /settings/models
32
+ - process binding
33
+ - tier override
34
+ - change model
35
+ - pin process key
23
36
  related:
24
37
  - guides/switch-default-backend
25
38
  - concepts/backends-and-tiers
39
+ - concepts/process-keys
40
+ ui_anchors:
41
+ - /settings/models
42
+ - /activity
43
+ process_keys:
44
+ - routine.morning_routine
45
+ - routine.evening_review
46
+ - message.dm
47
+ - dashboard.docs_qa
48
+ - delegated_task_heavy
49
+ config_keys:
50
+ - delegatedTaskHeavyEnabled
26
51
  ---
27
52
 
28
53
  # Change Which Model Handles X
29
54
 
30
55
  ## Goal
31
56
 
32
- Override the default tier or backend on a single ProcessKey.
57
+ Override the default backend or model tier for a **single** ProcessKey
58
+ without changing the global default. Use this when one surface needs a
59
+ stronger (or cheaper) model than the seeded default — for example,
60
+ pinning the evening review to Opus (high tier), or pushing a noisy
61
+ delegated routine onto Gemini to save Claude quota.
33
62
 
34
63
  ## Steps
35
64
 
36
65
  1. Open `/settings/models`.
37
- 2. Find the ProcessKey row in the table.
38
- 3. Pick its main backend and tier explicitly.
39
- 4. Save.
66
+ 2. Find the ProcessKey row in the per-process table (e.g.
67
+ `routine.evening_review`).
68
+ 3. Set its **main backend** and **tier** explicitly. The tier maps to a
69
+ model class — `lite` → Haiku-class, `medium` → Sonnet-class,
70
+ `high` → Opus-class. Optionally set a **fallback** backend too.
71
+ 4. Save. The row is now marked operator-edited and will keep your pin
72
+ through a defaults reset (only an install-time `force` re-seed
73
+ overwrites it).
74
+
75
+ ## Concrete Example
76
+
77
+ To give the evening review deeper reasoning, set
78
+ `routine.evening_review` → main `claude`, tier `high`. The next evening
79
+ run resolves to **Opus 4.8** instead of the default Sonnet 4.6. The
80
+ execution budget for that run also scales with the tier (high tier
81
+ carries a larger turn / cost envelope than medium).
40
82
 
41
83
  ## Verification
42
84
 
43
- - The next fire of that ProcessKey shows the new model in Activity.
85
+ - The next fire of that ProcessKey shows the new backend and model in
86
+ the **Activity** event detail (after fallback resolution).
87
+
88
+ ## Caveats
89
+
90
+ - **`dashboard.docs_qa` is tier-locked to `medium`** — a high/lite pin
91
+ on that row is ignored by the router. It also inherits its backend
92
+ from `message.dm`'s pin.
93
+ - **High tier is opt-in, not auto-selected.** No install-time-seeded
94
+ surface defaults to high; the only `high`-tagged ProcessKey shipped is
95
+ `delegated_task_heavy`, gated behind the `delegatedTaskHeavyEnabled`
96
+ config flag. Any *other* ProcessKey can still be pinned to high here.
97
+ - **On Codex and Gemini there is no separately-seeded high model** —
98
+ their high tier collapses to the medium model, so pinning those
99
+ backends to high won't change the model unless you pick a specific
100
+ higher model in the row.
101
+ - To change the backend for *every* ProcessKey at once, use the global
102
+ default instead — see Related.
44
103
 
45
104
  ## Related
46
105
 
47
106
  - [Switch the Default Backend](switch-default-backend.md)
107
+ - [Backends and Tiers](../concepts/backends-and-tiers.md)
108
+ - [Process Keys](../concepts/process-keys.md)
@@ -3,56 +3,121 @@ schema_version: 1
3
3
  slug: guides/connect-a-new-mail-account
4
4
  title: Connect a New Mail Account
5
5
  id: connect-a-new-mail-account
6
+ aliases:
7
+ - connect mail
8
+ - add mail account
9
+ - imap setup
10
+ - gmail setup
11
+ - outlook setup
6
12
  category: guides
7
13
  summary: |
8
- Add a Gmail / Outlook / Yahoo / iCloud account to the mail
9
- integration. Each provider has its own credential shape.
14
+ Add a Gmail, Outlook, Yahoo, or iCloud mailbox to the mail
15
+ integration. Each provider authenticates differently: Gmail rides
16
+ the primary Google sign-in, Outlook uses OAuth, and Yahoo/iCloud
17
+ use an app password.
10
18
  section: connect-a-new-mail-account
11
19
  tags:
12
20
  - guide
13
21
  - mail
22
+ - integrations
14
23
  status: stable
15
24
  ask_examples:
16
25
  - How do I add another Gmail account?
17
26
  - What mail providers does Aitne support?
27
+ - How do I connect an Outlook mailbox?
18
28
  locale: en-US
19
29
  created: 2026-04-25
20
- updated: 2026-04-25
30
+ updated: 2026-05-28
31
+ keywords:
32
+ - mail
33
+ - imap
34
+ - gmail
35
+ - outlook
36
+ - yahoo
37
+ - icloud
38
+ - mail provider
39
+ - OAuth
40
+ - app password
21
41
  related:
22
42
  - features/integrations/mail
43
+ ui_anchors:
44
+ - /connections/mail
45
+ api_endpoints:
46
+ - /api/mail/accounts
47
+ - /api/mail/accounts/device-code
48
+ - /api/config/mail/app-password
49
+ config_keys:
50
+ - enabledMailProviders
51
+ context_files:
52
+ - state/today.md
23
53
  ---
24
54
 
25
55
  # Connect a New Mail Account
26
56
 
27
57
  ## Goal
28
58
 
29
- Wire a new mailbox into Aitne so the agent can read, label,
59
+ Wire a new mailbox into Aitne so the agent can read, label, classify,
30
60
  and search it.
31
61
 
62
+ ## Supported providers
63
+
64
+ The mail registry recognizes exactly four provider kinds — `gmail`,
65
+ `outlook`, `yahoo`, `icloud`. It deliberately stops at hosted
66
+ providers, so there is no separate "generic IMAP server" kind. Each
67
+ kind authenticates differently:
68
+
69
+ | Provider | How it connects |
70
+ |---|---|
71
+ | **Gmail** | Rides the primary Google sign-in (`/config/google-auth`). Extra Gmail accounts beyond the primary identity are not implemented yet. |
72
+ | **Outlook** | OAuth — a browser loopback flow, with a device-code fallback for headless machines. |
73
+ | **Yahoo** | App password (IMAP). |
74
+ | **iCloud** | App password (IMAP). |
75
+
32
76
  ## Prerequisites
33
77
 
34
- - The provider's OAuth or app password is available.
78
+ - For **Outlook**: the Outlook client config must already be set
79
+ (`PUT /api/config/mail/outlook/client-config`).
80
+ - For **Yahoo / iCloud**: generate a provider-specific app password
81
+ first — your regular login password will not work over IMAP.
35
82
 
36
83
  ## Steps
37
84
 
38
85
  1. Open `/connections/mail`.
39
- 2. Click "Add account".
40
- 3. Pick the provider kind. The supported set is `gmail`, `outlook`,
41
- `yahoo`, `icloud` — the registry deliberately stops at hosted
42
- providers, so a generic IMAP server is not a separate kind.
43
- 4. Step through the OAuth flow (Gmail / Outlook) or paste the
44
- provider-specific app password (Yahoo / iCloud).
45
- 5. Save. The first poll runs within a minute.
86
+ 2. Click "Add account" and pick the provider kind.
87
+ 3. Authenticate for that kind:
88
+ - **Gmail**connect the primary Google account from the setup or
89
+ connections flow (`/config/google-auth`). It then appears on the
90
+ unified mail surface automatically; you do not add it as a
91
+ separate mail account.
92
+ - **Outlook** step through the OAuth browser flow. On a headless
93
+ machine (SSH / WSL), use the device-code fallback, which prints a
94
+ code to enter at a verification URL.
95
+ - **Yahoo / iCloud** — paste the email address and the app password.
96
+ 4. Save. Registration succeeds regardless of the enabled-providers
97
+ setting (`enabledMailProviders`); the account goes live only when
98
+ you flip its **Enable** toggle on the mail card.
99
+ 5. The first poll runs within a minute of being enabled.
46
100
 
47
101
  ## Verification
48
102
 
49
- - The account row turns green on the auth-health card.
103
+ - The account row turns healthy on the auth-health card.
50
104
  - The mail count updates on `/connections/mail`.
51
105
 
52
106
  ## If It Fails
53
107
 
54
- - OAuth that does not return: confirm the redirect URL matches the
55
- daemon's API port (default 8321).
108
+ - **Outlook OAuth never returns** the loopback flow binds an
109
+ ephemeral port on `127.0.0.1`, so a fixed-port redirect mismatch is
110
+ not the cause. Confirm the browser actually opened and completed the
111
+ redirect; on a headless host switch to the device-code flow instead.
112
+ - **Outlook add returns "client config missing"** — set the Outlook
113
+ client config (`PUT /api/config/mail/outlook/client-config`) before
114
+ adding the account.
115
+ - **Yahoo / iCloud login rejected** — re-check the address and the app
116
+ password (not your normal account password); regenerate the app
117
+ password if it still fails.
118
+ - **Adding a second Gmail account fails** — only the primary Google
119
+ identity is supported today; additional Gmail accounts are not yet
120
+ implemented.
56
121
 
57
122
  ## Related
58
123