@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
package/README.md CHANGED
@@ -2,108 +2,166 @@
2
2
 
3
3
  # Aitne
4
4
 
5
- ### Always on. Always yours.
6
-
7
- **A local-first, proactive personal AI agent that runs continuously on your own machine — and learns *you* every day.**
8
-
9
5
  [![npm version](https://img.shields.io/npm/v/@aitne-sh/aitne.svg)](https://www.npmjs.com/package/@aitne-sh/aitne)
10
6
  [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](./LICENSE)
11
7
  [![Node](https://img.shields.io/badge/node-%E2%89%A522-brightgreen)](https://nodejs.org)
12
8
  [![Platforms](https://img.shields.io/badge/platforms-macOS%20%7C%20Linux%20%7C%20Windows-blue)](#platform-support)
13
- [![Backends](https://img.shields.io/badge/backends-Claude%20%7C%20Codex%20%7C%20Gemini-purple)](#multi-backend)
9
+
10
+ **Wake up to a brief that was written for you, by you.**
11
+
12
+ At 04:00, Aitne reads your calendar, mail, GitHub, and notes — then drafts a one-page plan for the day ahead: today's meetings, the email thread you missed, the PR your teammate is waiting on. Before you've finished coffee, the summary is in your DMs. By evening it journals what actually happened.
13
+
14
+ All on your laptop. All Markdown you own. Bring your own AI (Claude Code / Codex / Gemini CLI) — Aitne is the part that watches, schedules, and remembers.
14
15
 
15
16
  ```bash
16
17
  npm install -g @aitne-sh/aitne@latest
17
18
  aitne start
18
19
  ```
19
20
 
21
+ ![Aitne setup and dashboard walkthrough](./docs/assets/aitne-demo.gif)
22
+
20
23
  </div>
21
24
 
22
25
  ---
23
26
 
24
- ## Overview
27
+ ## A day with Aitne
28
+
29
+ Aitne is a daemon on your laptop, connected to your calendar, mail (Gmail / Outlook / iCloud / Yahoo), GitHub, Obsidian, and Notion. You talk to it through DMs in Slack / Telegram / Discord / WhatsApp — or through a local dashboard at `:8322`.
30
+
31
+ - **04:00 — Morning routine.** Aitne reads everything that landed overnight (mail, GitHub activity, calendar changes, vault updates) and writes `today.md` — sample below.
32
+ - **Morning — Brief.** The plan lands in your DMs as a short summary.
33
+ - **Through the day — Nudges.** Meeting reminders with travel time, hourly background checks for the things you care about (eval results, PR review requests, new mail). DMs only when there's something worth your attention.
34
+ - **Evening — Review.** Aitne writes a daily journal: what got done, what slipped, one observation about the week.
25
35
 
26
- ChatGPT and Claude wait for you to type. **Aitne does not.** It's a tiny TypeScript daemon that lives on your laptop, watches your calendar, mail, repositories, and notes, and acts on its own — drafting your morning plan at 04:00, surfacing the email you forgot, nudging you about the PR your teammate is waiting on, and weaving everything into Markdown files *you* own.
36
+ You steer it through natural-language DMs ("skip morning routine on Sundays", "ping me when the overnight job finishes") and bang commands (`!cost`, `!ask`, `!ingest`).
27
37
 
28
- You bring the brain — Claude Code, OpenAI Codex CLI, or Google Gemini CLI. Aitne is the nervous system that schedules, routes, observes, and remembers.
38
+ ---
39
+
40
+ ## Aitne's plan for today
41
+
42
+ `today.md` — written each morning into `~/.personal-agent/context/state/`. Plain Markdown you can `cat`, `vim`, or sync to Obsidian. Sample:
43
+
44
+ ```text
45
+ 2026-05-20 (Wednesday)
46
+ Day type: Weekday | Work focus: on | Study focus: on | Personal focus: on
47
+
48
+ User Schedule
49
+ 10:00 — Team standup (#ml-platform)
50
+ 13:30 — RAG eval review with research team
51
+ 16:00 — 1:1 with manager (quarterly check-in)
52
+ 21:00 — Overnight training window opens (8xH100 reserved)
53
+
54
+ User Tasks
55
+ Land the embedding-index refactor PR — address review feedback [URGENT] [work]
56
+ Cancel unused GPU reservation before 18:00 — billing cutoff [work]
57
+ Skim 3 papers from yesterday's arxiv digest — pick one for Friday's reading group [study]
58
+ Renew gym membership before Friday [personal]
59
+ Reply to dentist about reschedule [personal]
60
+
61
+ Agent Plan
62
+ 09:45 Notify: standup in 15 min [work] →notify
63
+ 17:30 Notify: cancel GPU reservation by 18:00 to avoid overnight charges [work] →notify
64
+ 20:45 Notify: training window opens in 15 min — confirm dataset hash [work] →notify
65
+
66
+ Agent Notes
67
+ (HIGH) 2026-05-22 (Fri): Reading group at 16:00 — pick paper by Thu evening
68
+ (HIGH) 2026-05-23 (Sat): Friend's birthday dinner — gift not bought yet
69
+ (MED) 2026-05-25 (Mon): Quarterly OKR review — draft self-assessment by EOD Sun
70
+ Two coworkers pushed to feat/embedding-index since you last pulled [work]
71
+ Overnight eval run finished — accuracy +1.2pp, p95 latency +18ms [work]
72
+ Bank statement available — review when convenient [personal]
73
+ Weather: rain 06:00–10:00 — leave 10 min earlier [personal]
74
+
75
+ Agent Log
76
+ 04:12 Morning Routine completed — today.md drafted from 23 raw signals
77
+ 07:02 Sent morning brief to Slack DM (4 priorities, 2 timing alerts)
78
+ 12:38 Hourly check: 1 new GitHub review request, 0 calendar changes
79
+ 18:00 Evening Review completed — 3 of 5 tasks closed; 2 carried to tomorrow
80
+
81
+ Handoff
82
+ Tomorrow
83
+ Reply to dentist about reschedule [personal]
84
+ Pick reading-group paper [study]
85
+ Triage overnight training-run metrics [work]
86
+ Later
87
+ 2026-05-22 (Fri): Reading group at 16:00
88
+ 2026-05-23 (Sat): Friend's birthday dinner
89
+ 2026-05-25 (Mon): Quarterly OKR review
90
+ ```
29
91
 
30
92
  ---
31
93
 
32
- ## What makes Aitne different
94
+ ## Why Aitne
33
95
 
34
- **It compounds.** Every DM, every reaction, every implicit signal shapes how Aitne thinks about you. After a month it sounds like you. After a year it remembers what you forgot last quarter. The model never changes — *the context does*.
96
+ **You don't open it. It opens to you.**
97
+ Most AI tools wait for you to type. Aitne goes first — it watches all day and reaches out only when there's something worth acting on.
35
98
 
36
- **You manage it in plain language.** "Don't ping me before 9am." "Remember my partner's birthday." "Stop running hourly checks on weekends." A dedicated set of management skills (`management-task-register`, `management-policy`, `user-profile`, …) maps your words to settings, schedules, and profile updates. No 80-panel settings UI.
99
+ **Nothing leaves your laptop.**
100
+ The daemon binds to `127.0.0.1` only. Secrets sit in your OS keychain. Memory is plain Markdown under `~/.personal-agent/`. No vendor account, no remote sync, no telemetry — your AI provider's API is the only thing that talks to the network, on your own key.
37
101
 
38
- **It rides on what you already have.** Your `~/.claude/skills`, your `~/.codex/config.toml`, your `~/.gemini/` settings, your custom MCP servers — Aitne reads them on session init and layers its persona on top. Your existing toolkit shows up in every Aitne-spawned session. No re-configuring. No vendor lock.
102
+ **Bring your own model.**
103
+ Per-task routing assigns the right tier to the right backend, and the router fails over automatically on quota or auth issues. Run one backend or all of them — your choice.
39
104
 
40
- **Your memory is plain Markdown.** Everything Aitne writes lands in `~/.personal-agent/context/*.md`. You can `cat`, `vim`, `obsidian`, or `cp` any of it. Uninstall and the memory is still yours. No proprietary format. No migration headache.
105
+ **Memory compounds, the model doesn't have to.**
106
+ Every DM, every correction, every observation goes into your Markdown context. The model stays stateless — your story grows.
41
107
 
42
- **It runs entirely on your machine.** The daemon binds to `127.0.0.1` only. Secrets live in the OS keychain (macOS Keychain / libsecret / DPAPI). No telemetry. No cloud state. Verify with `lsof` and `nettop`.
108
+ Already running Claude Code in a terminal? Aitne is the part that wakes itself up before you do, watches your mail and calendar between your sessions, remembers what you told it last week, and reaches you in your DMs without a terminal open.
43
109
 
44
110
  ---
45
111
 
46
- ## Installation
112
+ ## Is this for you?
47
113
 
48
- ### From npm
114
+ **Aitne fits if you...**
115
+ - already use Claude Code, Codex CLI, or Gemini CLI daily
116
+ - want context that survives sessions, without uploading your life to someone's server
117
+ - are comfortable running a daemon on your laptop and pasting an API key
49
118
 
50
- The recommended path. Installs the `aitne` CLI globally with the daemon, dashboard, and built-in agent assets.
119
+ **You'll bounce off if you...**
120
+ - want a polished hosted chat UI — this isn't that
121
+ - don't have an API key for at least one provider (Aitne spawns sessions on your behalf; the cost lands on your account)
122
+ - expect zero setup — there's a 9-step wizard for integrations and channels
123
+
124
+ ---
125
+
126
+ ## Install
51
127
 
52
128
  ```bash
53
129
  npm install -g @aitne-sh/aitne@latest
54
130
  aitne start
55
131
  ```
56
132
 
57
- Then bring **at least one** AI backend:
133
+ The daemon listens on `:8321`, the dashboard on `:8322`. After `aitne start`, your browser opens to the setup wizard.
58
134
 
59
- ```bash
60
- # Claude Code — full feature support including server-side advisor
61
- npm install -g @anthropic-ai/claude-code
62
- claude auth login
135
+ You also need at least one AI backend installed and one API key. The documented operating mode is **provider API keys** — paste them into the wizard (they land in the OS keychain, never `.env`):
63
136
 
64
- # OpenAI Codex CLI
65
- npm install -g @openai/codex
66
- codex login --device-auth
137
+ | Backend | Install | Auth |
138
+ |---|---|---|
139
+ | **Claude Code** | `npm install -g @anthropic-ai/claude-code` | `ANTHROPIC_API_KEY` in the wizard (Anthropic's headless-agent policy disallows Pro/Max subscriptions for SDK sessions) |
140
+ | **OpenAI Codex CLI** | `npm install -g @openai/codex` | `OPENAI_API_KEY` in the wizard, or `codex login --device-auth` |
141
+ | **Google Gemini CLI** | `npm install -g @google/gemini-cli` | `GEMINI_API_KEY` / `GOOGLE_API_KEY`, or OAuth on first use |
142
+ | **OpenCode** (sst/opencode) | `npm install -g opencode-ai` | provider via `opencode auth login`, set in the wizard |
67
143
 
68
- # Google Gemini CLI
69
- npm install -g @google/gemini-cli
70
- # OAuth handled on first use
71
- ```
144
+ ### Verify
72
145
 
73
- Login once with each CLI you intend to use — Aitne auto-detects them on the next session.
146
+ ```bash
147
+ aitne status # PIDs, uptime, connected platforms, today's spend
148
+ aitne doctor # install-health diagnostic (Node, ports, keychain, CLIs, native bindings)
149
+ aitne logs -f # tail the daemon log
150
+ ```
74
151
 
75
- ### From source (git)
152
+ ### From source
76
153
 
77
- For contributors, or if you want to hack on the daemon directly. Requires Node ≥ 22 and pnpm 10.x.
154
+ Contributors and anyone hacking on the daemon directly. Requires Node ≥ 22 and pnpm 10.x.
78
155
 
79
156
  ```bash
80
157
  git clone https://github.com/Aitne-sh/Aitne.git aitne
81
158
  cd aitne
82
159
  corepack enable
83
160
  pnpm install
84
- pnpm start # build (if stale) + launch daemon and dashboard in background
85
- # or
86
- pnpm dev # foreground with full stdio for debugging
161
+ pnpm dev # foreground mode with full stdio
87
162
  ```
88
163
 
89
- Common workflows:
90
-
91
- ```bash
92
- pnpm test # vitest unit tests across packages/*
93
- pnpm test:watch
94
- pnpm lint # turbo run lint
95
- pnpm clean # turbo clean + remove node_modules and .buildstamp
96
- ```
97
-
98
- ### Verifying the install
99
-
100
- ```bash
101
- aitne status # PIDs, uptime, connected platforms, backends, today's spend
102
- aitne doctor # 9-check install diagnostic
103
- aitne logs -f # tail the daemon log
104
- ```
105
-
106
- The daemon listens on `:8321`, the dashboard on `:3000`. Open `http://localhost:3000` and finish the 9-step setup wizard.
164
+ Full walkthrough: [docs/setup-guide.md](docs/setup-guide.md).
107
165
 
108
166
  ---
109
167
 
@@ -124,8 +182,8 @@ flowchart LR
124
182
 
125
183
  subgraph LOCAL["Your laptop"]
126
184
  direction TB
127
- DAEMON["Aitne daemon<br/>(always on)"]
128
- BRAIN["AI session<br/>Claude / Codex / Gemini"]
185
+ DAEMON["Aitne daemon<br/>(always on, 127.0.0.1)"]
186
+ BRAIN["AI session<br/>Claude / Codex / Gemini / OpenCode"]
129
187
  MEMORY["Markdown memory<br/>plain files you own"]
130
188
  DAEMON --- BRAIN
131
189
  BRAIN --- MEMORY
@@ -138,62 +196,85 @@ flowchart LR
138
196
  DAEMON --- YOU
139
197
  ```
140
198
 
141
- The daemon runs two execution paths in parallel:
199
+ Two execution paths run in parallel:
142
200
 
143
- - **Reactive path** — owner DMs, mentions, cron-driven routines (morning, evening, weekly, monthly), and calendar-approach events flow through the EventBus into the Dispatcher, which spawns a backend session sized for the work.
144
- - **Polling path** — observers for Git, GitHub, Obsidian, Notion, Calendar, and mail write to an `observations` table without spawning sessions. A cron-driven hourly check triages those observations through a lite-tier session, then escalates to a full Sonnet-class session only if something worth surfacing was found.
201
+ - **Reactive path** — owner DMs/mentions, cron routines (morning / evening / weekly), calendar approach events. Event priority heap dispatcher backend session.
202
+ - **Polling path** — observers for Git, GitHub, Obsidian, Notion, Calendar, Mail write to an `observations` table without spawning sessions. An hourly cron triages those observations through a lite-tier session, then escalates to a full Sonnet-class session only if something is worth surfacing.
145
203
 
146
204
  A pre-pass `routine.fetch_window` session runs before each routine, fanning out per-account fetches (mail, calendar, Notion) into the `observations` table so the main session reads from a single source.
147
205
 
148
- ### What you can do with it
206
+ ---
207
+
208
+ ## Backends
149
209
 
150
- A non-exhaustive catalogue every entry below is backed by an implemented skill, route, or observer. Click to expand.
210
+ Aitne abstracts four AI runtimes behind one `IAgentCore` interface. Every kind of work has a `ProcessKey` mapped to a tier (`lite` / `medium` / `high`) and a backend; for Claude those tiers map to **Haiku 4.5 / Sonnet 4.6 / Opus 4.8**. The high tier is opt-in — no install-time surface defaults to it; pin it per row from `:8322/settings/models`.
151
211
 
152
- <details>
212
+ | Backend | Implementation | Resume | Strengths |
213
+ |---|---|---|---|
214
+ | **Claude Code** | `@anthropic-ai/claude-agent-sdk` | ✓ | Routines, deep context, server-side advisor |
215
+ | **Codex CLI** | OpenAI Codex CLI subprocess + JSONL stream | ✓ | Code-heavy tasks, fast iteration |
216
+ | **Gemini CLI** | Google Gemini CLI subprocess + JSONL stream | ✓ | Free-tier headroom, large-context summarization |
217
+ | **OpenCode** | `opencode-ai` HTTP server + SDK client | ✓ | Multi-provider — routes to any `opencode auth login` provider |
218
+
219
+ The router fails over to a configured fallback automatically on `BackendQuotaError` or decisive failure, re-materializing the fallback's instruction file and skill directories into the session workdir. Per-process tier defaults and routing are editable at `:8322/settings/models`.
220
+
221
+ ---
222
+
223
+ ## Integrations
224
+
225
+ | Category | Providers |
226
+ |---|---|
227
+ | **Messaging** | Slack (Socket Mode), Telegram, Discord, WhatsApp (Baileys), Web dashboard |
228
+ | **Mail** | Gmail, Outlook, Yahoo, iCloud — unified API, classifier, local FTS5 search, IMAP IDLE |
229
+ | **Calendar** | Google Calendar, Outlook Calendar, iCloud (CalDAV), Google Maps for travel time |
230
+ | **Knowledge** | Obsidian (CLI + vault watch), Notion (REST), custom MCP servers |
231
+ | **Code** | Local Git, GitHub (Octokit + webhooks) |
232
+ | **Lifestyle** | Auto-extracted receipts · travel bookings · Kindle highlights · voice transcription (Whisper, opt-in) |
233
+
234
+ Each integration runs in one of four modes:
235
+
236
+ | Mode | Auth held by | Polling? | Capabilities |
237
+ |---|---|---|---|
238
+ | **`direct`** | Daemon (OAuth in OS Keychain) | Daemon poller | Full feature set |
239
+ | **`delegated`** | Main backend's connector | Cron worker (per-cadence opt-in) | Whatever the connector exposes |
240
+ | **`native`** | Main backend's connector | None — reached in-turn via MCP | On-demand only |
241
+ | **`disabled`** | — | — | Off |
242
+
243
+ Every mode change goes through a live capability probe and a per-key flip lock.
244
+
245
+ ---
246
+
247
+ ## What you can do
248
+
249
+ <details open>
153
250
  <summary><b>Time, calendar, travel</b></summary>
154
251
 
155
252
  - Auto-generate `today.md` every morning with your real schedule
156
- - 15-min approach reminders for every calendar event, with travel time pre-computed via Google Maps
253
+ - 15-min approach reminders for every event, with travel time pre-computed via Google Maps
157
254
  - Find a 30-min slot across multiple calendars — Aitne checks freebusy and replies with options
158
- - Auto-extract flight, hotel, restaurant, train confirmations from email into a structured travel timeline
159
- - Surface tomorrow's itinerary in the morning briefing
160
- - "What time should I leave for my next meeting?" — answers with live traffic
255
+ - Auto-extract flight, hotel, train confirmations from email into a structured travel timeline
161
256
  </details>
162
257
 
163
- <details>
258
+ <details open>
164
259
  <summary><b>Mail across every account</b></summary>
165
260
 
166
261
  - Unified inbox across Gmail, Outlook, Yahoo, and iCloud (OAuth or app-password / IMAP)
167
- - Local FTS5 full-text search across every account ("find emails about acme last quarter")
168
- - Auto-classify, label, and archive (Gmail) filter rules across all providers
169
- - Draft replies in your style ("draft a polite no to this conference invite")
170
- - Forwarded receipts extract to a structured `receipts` table with category, vendor, amount
171
- - Daily digest of unread mail in the morning briefing
172
- - IMAP IDLE for near-real-time delivery; PDF and image attachments are extracted and indexed
262
+ - Local FTS5 full-text search across every account
263
+ - Auto-classify, label, archive, and draft replies in your style
264
+ - Forwarded receipts auto-extract into a structured receipts table
265
+ - IMAP IDLE for near-real-time delivery; PDF/image attachments are extracted and indexed
173
266
  </details>
174
267
 
175
268
  <details>
176
- <summary><b>Knowledge: Obsidian, Notion, your own notes</b></summary>
269
+ <summary><b>Knowledge: Obsidian, Notion, your own wiki</b></summary>
177
270
 
178
271
  - Use your existing Obsidian vault as Aitne's primary memory store — wiki-links keep working
179
- - Append to your daily note via the official Obsidian CLI (`obsidian create` / `daily:append`)
180
- - Full Notion page and database CRUD — query, create, update, archive
181
- - "Summarize what I wrote about this project last month" across vault layers
182
- - Auto-link new notes to existing concepts
183
- </details>
184
-
185
- <details>
186
- <summary><b>Build a personal wiki from anything you DM</b></summary>
187
-
188
- - DM `!ingest <url>` — the agent fetches, summarises, and saves a raw note in `10_raw/`
189
- - Run `!compile` to synthesise raw notes into linked wiki articles in `20_wiki/` with an auto-maintained `_index.md`
190
- - `!compile --preview` shows added / modified / unchanged pages plus cost and ETA before you spend tokens
191
- - `!compile full` rebuilds everything — cost-gated, with a dashboard approval queue and an optional git pre-compile snapshot for external vaults
272
+ - Append to your daily note via the official Obsidian CLI
273
+ - Full Notion page and database CRUD
274
+ - DM `!ingest <url>` to capture a source, `!compile` to synthesize raw notes into linked wiki articles
192
275
  - `!ask <question>` answers from your own wiki and writes the cited reply to `30_outputs/`
193
- - `!lint` audits for orphans, broken links, schema drift, and taxonomy candidates → dated health report
194
- - `!trace <topic>` and `!connect A B` reconstruct how an idea evolved and find shared structure across domains
195
- - Multiple workspaces (`!ingest @research ...`, `!compile @ops full`) — default workspace falls through when `@` is omitted
196
- - Workspaces can be internal (`~/.personal-agent/wiki/`) or any number of external Obsidian vaults
276
+ - `!lint`, `!trace`, `!connect` for vault health, idea evolution, cross-domain bridges
277
+ - Multiple workspaces (`!ingest @research ...`) internal or any number of external Obsidian vaults
197
278
  </details>
198
279
 
199
280
  <details>
@@ -201,817 +282,159 @@ A non-exhaustive catalogue — every entry below is backed by an implemented ski
201
282
 
202
283
  - Local Git: `git log`, `git diff`, `git show` exposed via daemon proxy
203
284
  - GitHub: PR lists, comments, issues, webhook receivers (HMAC-SHA256 verified)
204
- - Per-repo cron triggers — "every Monday at 09:00, summarize merged PRs into `projects/<repo>.md`"
205
- - "Why did this build break?" — agent reads CI status, diff, and traces
285
+ - Per-repo cron triggers — "every Monday at 09:00, summarize merged PRs into the repo's daily journal"
206
286
  - Auto-detect when a coworker modified a file you're about to ship
207
287
  - Unified Repositories: one row pairs a local clone with a GitHub remote; the doctor flags drift
208
288
  </details>
209
289
 
210
290
  <details>
211
- <summary><b>Tasks, projects, life admin</b></summary>
212
-
213
- - Unified task view across GitHub Issues, mail-derived TODOs, and your own `today.md`
214
- - Per-project Markdown files with auto-maintained status, deadlines, and people
215
- - Long-term roadmap with quarterly milestones
216
- - "Carry this to tomorrow" — handoff between `today.md`, `daily/`, `weekly/`, `monthly/`
217
- - Auto-detect recurring chores and set up reminders
291
+ <summary><b>Self-management via natural language</b></summary>
292
+
293
+ - "Don't run hourly checks on weekends" patches the cron window
294
+ - "Remember my partner's birthday is March 14" appends to `identity/profile.md`
295
+ - "I prefer concise replies — no preamble" — updates the agent's `character` field
296
+ - "Email me a summary every Friday at 5pm" — creates a recurring schedule
297
+ - "Switch to Codex for code reviews" — flips the per-process backend mapping
298
+ - Every change is journaled to `agent_actions` — audit anything via `aitne audit`
218
299
  </details>
219
300
 
220
301
  <details>
221
- <summary><b>Reading, lifestyle, voice</b></summary>
302
+ <summary><b>Bring your own toolkit</b></summary>
222
303
 
223
- - Import Kindle highlights, build a reading-taste profile
224
- - Friday book recommendation DM based on your taste
225
- - Receipts auto-organized by month into your vault
226
- - Travel itinerary roll-up surfaced before each trip
227
- - Voice attachments — send a voice memo, get a Whisper-transcribed message (opt-in, runs locally via `ffmpeg-static` + `@huggingface/transformers`)
228
- </details>
229
-
230
- <details>
231
- <summary><b>Self-management and automation</b></summary>
232
-
233
- - Tell it to remember things in plain language ("I'm allergic to nuts")
234
- - Tell it to forget things ("delete that note about my old job")
235
- - Tell it to change schedules ("don't run hourly checks on weekends")
236
- - Tell it to change tone ("be more concise, no preamble")
237
- - Custom routines on any cron schedule with free-form prompts
238
- - Self-scheduled wakeups — agent decides when to check on something
239
- </details>
240
-
241
- <details>
242
- <summary><b>Run your own tools</b></summary>
243
-
244
- - Bring your own MCP servers — they materialize into every session workdir
245
- - Bring your own Claude Code skills — they show up wherever the agent runs
246
- - Bring your own Codex / Gemini config — Aitne reads it on session init
247
- - Custom skills via the `/api/skills` endpoint — drop a `SKILL.md` and it's live
304
+ - Your `~/.claude/skills`, `~/.codex/config.toml`, and `~/.gemini/` settings are loaded on session init
305
+ - Custom MCP servers materialize into every per-session workdir
306
+ - Aitne layers its persona on top of your existing config — nothing gets overwritten
307
+ - Voice attachments — opt-in local Whisper transcription via `ffmpeg-static` + `@huggingface/transformers`
248
308
  </details>
249
309
 
250
310
  ---
251
311
 
252
- ## A day with Aitne
253
-
254
- A walkthrough of one user's Tuesday.
255
-
256
- **04:00 — While you sleep.** Aitne reads yesterday's handoff, your calendar for today, the last 24 hours of mail across your accounts, new commits in your repos, and the pending observations from Notion. It generates `today.md` and queues a Morning Briefing DM for after quiet hours end.
257
-
258
- **07:30 — Slack DM lands as you grab coffee:**
259
- > Good morning. 3 things to flag:
260
- > - **Sarah's PR (#487)** needs your review — she's been blocked since Friday
261
- > - **Sales call with Acme @ 14:00** — leaving home by 13:25 (12-min commute)
262
- > - **IRS reminder from Friday** — deadline is *tomorrow*
263
- >
264
- > Today: 2 meetings, 4 tasks. Light day. Reply `end` to close, or just talk to me.
265
-
266
- **09:15 — You DM Aitne:** *"Tell Sarah I'll review by 11. And book lunch with Mark on Thursday — somewhere near his office."*
267
-
268
- Aitne drafts the Slack reply to Sarah, finds 3 lunch slots Thursday, checks Mark's last 5 lunch venues from your `people.md`, suggests Tartine. You confirm.
269
-
270
- **11:30 — Hourly check fires.** A new commit in your repo modified the API contract you're about to ship. Aitne adds a note to `today.md` and DMs once: *"Heads up — `auth.ts:84` was just changed by @Yuki. Want me to summarize the diff?"*
271
-
272
- **13:45 — Calendar approach.** *"Sales call in 15 min. Acme is the warm lead from last Tuesday — they mentioned wanting webhook integration. Brief is in `projects/acme.md`."*
273
-
274
- **15:45 — You forward a hotel confirmation email.** Aitne extracts dates, address, and confirmation number into `travel_bookings`, saves the PDF to `~/.personal-agent/context/receipts/2026/05/`, and adds the trip to next week's morning briefing.
275
-
276
- **18:00 — Evening review.** Aitne notices you didn't reply to two emails from this morning. They get carried to tomorrow's `today.md`. It also sees you wrote *"shorter please"* twice today, classifies that as a tone-class signal, and silently shortens its replies going forward.
312
+ ## Memory
277
313
 
278
- **Friday 18:30 Weekly review.**
279
- > Week of 2026-05-04: shipped 3 PRs, 2 deferred. Open loops: hotel cancellation, Acme follow-up. Focus next week: launch prep. Heads up: you've worked past 22:00 every day this week — should I clear Friday afternoon?
314
+ Everything Aitne writes lives in `~/.personal-agent/context/`:
280
315
 
281
- The point isn't any single trick — it's that **all of this happens without you opening an app.**
282
-
283
- ---
284
-
285
- ## How Aitne accumulates knowledge
286
-
287
- Every signal flows through the same pipeline: capture → short-term → long-term → injected back into every future conversation.
288
-
289
- ```mermaid
290
- flowchart TB
291
- SOURCES["Sources: messages, calendar, mail,<br/>git, GitHub, Obsidian, Notion,<br/>your own manual edits"]
292
- OB["Observers and adapters<br/>(WebSocket, IDLE, polling)"]
293
- SQL["SQLite: observations,<br/>messages, agent_actions"]
294
- TODAY["today.md<br/>(working view, always injected)"]
295
- PROFILE["user/profile.md<br/>work, expertise,<br/>people, goals"]
296
- PROJECTS["projects/*.md<br/>roadmap.md"]
297
- JOURNAL["daily/YYYY-MM-DD.md<br/>weekly/YYYY-Www.md<br/>monthly/YYYY-MM.md"]
298
- AI["Next session<br/>any backend, any platform"]
299
-
300
- SOURCES --> OB
301
- OB --> SQL
302
- SQL --> TODAY
303
- TODAY --> JOURNAL
304
- TODAY --> PROFILE
305
- TODAY --> PROJECTS
306
-
307
- PROFILE -.-> AI
308
- TODAY -.-> AI
309
- PROJECTS -.-> AI
310
- JOURNAL -.-> AI
311
316
  ```
312
-
313
- **Key properties:**
314
-
315
- - **Plain Markdown.** `cat`, `vim`, `obsidian`, `cp` — there is no proprietary format. Uninstall and the memory stays yours.
316
- - **Layered retention.** `today.md` rotates to `yesterday.md` once per agent-day. `daily/` files are persistent by design (synthesized journal). `weekly/` is pruned after one year. `agent/journal.md` keeps the most recent ~12 weekly + 24 monthly sections. SQLite-backed history (messages, agent_actions) is pruned after 90 days.
317
- - **Always-injected context.** Every session starts with `user/profile.md` + `rules/management.md` + `today.md` already loaded — the agent never has to "search for context".
318
- - **You can always intervene.** Edit any file by hand. The agent picks up your changes on the next routine.
319
-
320
- ### Compounding intelligence
321
-
322
- The longer you use it, the better it gets. Not because the model improves — because the context does.
323
-
324
- ```mermaid
325
- flowchart LR
326
- D1["Day 1<br/>Empty profile<br/>Generic answers"]
327
- W1["Week 1<br/>Calendar synced<br/>People dictionary"]
328
- M1["Month 1<br/>Profile auto-filled<br/>Tone matches you"]
329
- M3["Month 3<br/>Full project map<br/>Proactive nudges"]
330
- Y1["Year 1<br/>Anticipates needs<br/>Recalls Q1 context"]
331
-
332
- D1 --> W1 --> M1 --> M3 --> Y1
317
+ context/
318
+ ├── state/
319
+ │ ├── today.md # Working view, always injected
320
+ │ ├── yesterday.md # Daemon-rotated archive
321
+ │ ├── inbox/ # Captured snippets
322
+ │ └── scratch/ # Short-lived agent notes (48h TTL)
323
+ ├── plans/
324
+ │ ├── roadmap.md # Long-term goals
325
+ │ └── projects/ # One file per active project
326
+ ├── identity/ # profile.md, people.md, work.md, …
327
+ ├── policies/ # Management rules, MCP config, redaction, routines
328
+ ├── journal/
329
+ │ ├── daily/YYYY-MM-DD.md # Synthesized daily journal
330
+ │ ├── weekly/ # Weekly retrospectives
331
+ │ └── agent.md # Private agent self-reflection
332
+ └── knowledge/ # wiki, per-repo overviews, entities, dossiers
333
333
  ```
334
334
 
335
- ### The implicit feedback loop
335
+ Context writes flow through `curl http://localhost:8321/api/context/<class>/<path>` — where `<class>` is one of `identity`, `state`, `plans`, `journal`, `knowledge`, `policies` — not the SDK's `Edit`/`Write` tools. This gives the daemon a single chokepoint for write locks, frontmatter validation, and 30-day snapshots. SQLite (`better-sqlite3` with FTS5) backs sessions, observations, agent actions, and history.
336
336
 
337
- Every interaction shapes Aitne's understanding of you implicitly. No buttons. No surveys.
338
-
339
- The Signal Detector tags each turn for **tone-class signals** (corrections like "be shorter", "no preamble") and **attribute-class signals** (durable facts like "I'm allergic to nuts"). The Evening Review interprets them:
340
-
341
- - **Tone** → updates the `character` runtime-config field, applied to every backend's system prompt.
342
- - **Attribute** → updates `user/profile.md` Learned Context.
343
-
344
- The line is enforced server-side: "I prefer concise replies" is tone (goes to character). "My flight is on Friday" is attribute (goes to profile).
337
+ Schema upgrades are forward-only and idempotent the migration runner preserves your SQLite history and Markdown context across releases. (`aitne update` prints the `npm install -g @aitne-sh/aitne@latest` command; there is no self-updater.)
345
338
 
346
339
  ---
347
340
 
348
- ## Talk to it like a person
341
+ ## Safety
349
342
 
350
- Aitne has a dedicated set of management skills `management-task-register`, `management-task-modify`, `management-task-stop`, `management-policy`, `user-profile`, `user-interview`. **You don't poke through 80 settings panels — you tell it.**
343
+ Four independent layers, designed so the bottom layer holds even when upper layers are widened:
351
344
 
352
- | You say (in any language) | Aitne does |
353
- |---|---|
354
- | *"Don't run the hourly check on weekends"* | Patches `hourlyCheckActiveStartHour/EndHour` per weekday |
355
- | *"Stop pinging me about Slack after 9pm"* | Updates `quietHoursStart/End` and per-platform notify policy |
356
- | *"Always check Sarah's calendar before scheduling with her"* | Adds a rule to `rules/management.md` |
357
- | *"Remember my partner's birthday is March 14"* | Appends to `user/profile.md` Learned Context |
358
- | *"I prefer concise replies — no preamble"* | Updates `character` field |
359
- | *"Move all my React work into one project file"* | Refactors `projects/*.md` and re-indexes |
360
- | *"Cancel tomorrow's morning briefing"* | Removes the `agent_schedule` row |
361
- | *"Forget what I said about my old job"* | Surgically edits `user/work.md` |
362
- | *"Email me a summary every Friday at 5pm"* | Creates a recurring schedule with a free-form prompt |
363
- | *"Switch to Codex for code reviews from now on"* | Updates `process_backend_config` mapping |
364
-
365
- Behind the scenes, the agent maps natural language to one of:
366
-
367
- - `PATCH /api/config` — runtime config (~100 keys)
368
- - `PUT /api/context/*` — Markdown memory (locked, validated, snapshotted)
369
- - `DELETE /api/schedule/:id` / `POST /api/recurring-schedules` — scheduling
370
- - `PATCH /api/config/character` — tone
371
- - `POST /api/triggers` — cron-driven custom routines
372
-
373
- Every change is journaled to `agent_actions` with `source_kind=user_directive`. Audit anything you don't recognize via `aitne audit`.
345
+ 1. **SDK permission model** — strict `allowedTools` whitelist in Safe mode; `bypassPermissions` in Allow mode
346
+ 2. **PreToolUse hooks** (Claude, Safe mode) — `curl` parsed for hostname + port; daemon-API is the only legal write path
347
+ 3. **Daemon API risk tiers** `Autonomous` / `ReadSensitive` (X-Read-Token) / `Approve` (Bearer token)
348
+ 4. **Absolute-block layer** recursive deletes, `sudo`, pipe-to-shell, secret-file reads/writes, Anthropic-cloud managed-agent tools hard-denied in **both** modes regardless of overrides
374
349
 
375
- ---
376
-
377
- ## Bring your own harness
378
-
379
- Already invested in Claude Code skills? Custom MCP servers? A polished `~/.codex/config.toml`? **Aitne loads them all.** No re-configuring. No vendor lock.
380
-
381
- ```mermaid
382
- flowchart LR
383
- Y1["~/.claude/<br/>skills, slash commands,<br/>MCP servers"]
384
- Y2["~/.codex/<br/>config, plugins"]
385
- Y3["~/.gemini/<br/>config, tools"]
386
- Y4["Your custom<br/>MCP servers"]
387
- A1["Aitne built-in skills<br/>(24 of them)"]
388
- A2["Per-event task flows"]
389
- A3["Persona MD per backend"]
390
- SESS["Per-session workdir<br/>~/.personal-agent/agent-sessions/[id]/<br/>CLAUDE.md, AGENTS.md, GEMINI.md<br/>plus .claude/skills, .codex/skills<br/>plus materialized MCP config"]
391
- RUN["Backend runs with<br/>your full toolkit plus Aitne's"]
392
-
393
- Y1 --> SESS
394
- Y2 --> SESS
395
- Y3 --> SESS
396
- Y4 --> SESS
397
- A1 --> SESS
398
- A2 --> SESS
399
- A3 --> SESS
400
- SESS --> RUN
401
- ```
402
-
403
- | You already have… | In Aitne it just works |
404
- |---|---|
405
- | A Claude Code MCP server connected to your company's internal API | Every Aitne session can use it. No code changes. |
406
- | Custom slash commands you built for `/review` or `/test` | Available in every Aitne-spawned Claude Code session. |
407
- | A polished `AGENTS.md` for your Codex setup | Aitne layers its persona on top, keeping your config intact. |
408
- | Your Gemini auth and project preferences | Inherited automatically. |
409
- | Skills you wrote for `~/.claude/skills/` | Imported on demand. |
410
-
411
- **The growth flywheel:** Claude Code, Codex, or Gemini ships a new connector → Aitne picks it up on next session → you get it for free.
350
+ Plus: localhost-only API, webhook HMAC verification, no automated financial transactions, no automated social posting, single-owner adapter filtering, hourly auth-health monitoring with auto-recovery.
412
351
 
413
352
  ---
414
353
 
415
- ## Multi-platform, multi-app
354
+ ## Cost
416
355
 
417
- One agent, every surface. A morning brief delivered to Slack, a follow-up via WhatsApp, an email draft from the dashboard — Aitne carries the same context across all of them.
356
+ | Control | Default | Effect when set |
357
+ |---|---|---|
358
+ | `maxConcurrentSessions` (autonomous) | 3 | Hard semaphore |
359
+ | `maxReactiveSessions` (DMs) | 2 | Hard semaphore |
360
+ | `executeTimeoutMinutes` | 60 | Per-execute watchdog |
361
+ | `autonomousDailyCostCapUsd` | `null` | Priority-based skipping: `hourly_check` at 100%, `evening_review` at 150%, `morning_routine` at 200%. Reactive DMs are not gated. |
362
+ | `autonomousMonthlyCostCapUsd` | `null` | Alert + warn surface |
363
+ | Per-ProcessKey `maxBudgetUsd` | per-row | Hard cap per execute |
418
364
 
419
- ```mermaid
420
- flowchart LR
421
- IN["Input surfaces:<br/>Slack DM, Telegram, Discord,<br/>WhatsApp, Web dashboard,<br/>manual file edits"]
422
- AITNE["Aitne daemon"]
423
- SVC["Connected apps:<br/>Google Calendar, Outlook Calendar,<br/>Gmail, Outlook, Yahoo, iCloud,<br/>Notion, Obsidian, GitHub,<br/>local Git, Google Maps,<br/>custom MCP servers"]
424
- OUT["Output surfaces:<br/>same DM channel,<br/>today.md updates,<br/>calendar actions,<br/>drafted emails,<br/>proactive notifications"]
425
-
426
- IN --> AITNE
427
- AITNE --- SVC
428
- AITNE --> OUT
429
- ```
365
+ Typical day for an active user: **~$0.50** (morning routine + briefing + 2× hourly check + 1 DM + evening review, all on Sonnet 4.6). Quota exhaustion is detected, dedupe-notified once per 2-hour window, and retried on the next tick.
430
366
 
431
367
  ---
432
368
 
433
- ## CLI reference
369
+ ## Operating Aitne
434
370
 
435
371
  ### Lifecycle
436
372
 
437
373
  | Command | What it does |
438
374
  |---|---|
439
- | `aitne start [--no-open]` | Build if stale, launch daemon + dashboard in background. Opens browser unless `--no-open`. |
440
- | `aitne stop` | Graceful shutdown (SIGTERM → SIGKILL after 10 s). |
441
- | `aitne restart [--no-open] [--clean-context]` | Stop then start. `--clean-context` wipes `context/` after a tarball backup. |
442
- | `aitne status` | PIDs, uptime, connected platforms, backends, today's spend, last action, next scheduled item. |
443
- | `aitne logs [-f] [-n N] [-d]` | Tail the daemon log. `-d` = dashboard log. `-f` = follow. `-n N` = last N lines. |
444
- | `aitne dev` | Foreground mode (full stdio, useful for debugging). |
445
- | `aitne build` | Force a build (skip the mtime gate). |
375
+ | `aitne start [--no-open]` | Build if stale, launch daemon + dashboard in background |
376
+ | `aitne stop` | Graceful shutdown (SIGTERM → SIGKILL after 10 s) |
377
+ | `aitne restart [--clean-context]` | Stop then start. `--clean-context` wipes `context/` after a tarball backup |
378
+ | `aitne status` | PIDs, uptime, platforms, backends, today's spend |
379
+ | `aitne logs [-f] [-n N] [-d]` | Tail daemon log (`-d` = dashboard, `-f` = follow) |
380
+ | `aitne dev` | Foreground mode (full stdio) |
446
381
 
447
382
  ### Operations
448
383
 
449
384
  | Command | What it does |
450
385
  |---|---|
451
- | `aitne setup` | Re-open the dashboard `/setup` wizard. Auto-starts the daemon if needed. |
452
- | `aitne open` | Open the dashboard in your browser. |
453
- | `aitne doctor [--json]` | 8 base install checks; the repository-drift check expands into one extra row per drifted repo. |
454
- | `aitne audit [flags]` | Read the agent action log directly from SQLite. |
455
- | `aitne version [--json]` | Version, Node, install path, last build time. |
456
- | `aitne update [--check]` | Print the npm command to upgrade. `--check` makes one network call. |
457
- | `aitne uninstall [--keep-data\|--wipe-data]` | Stop the daemon and offer to wipe `~/.personal-agent`. |
458
- | `aitne help [cmd]` | Help (or per-command help). |
459
-
460
- ### `aitne audit` flags
461
-
462
- | Flag | Default | Description |
463
- |---|---|---|
464
- | `--since <duration>` | `24h` | Time window (`1h`, `7d`, `2026-04-20`). |
465
- | `--type <pattern>` | — | `action_type` filter (`%` for LIKE matching). |
466
- | `--result <value>` | — | `success` / `failed` / `partial` / `skipped`. |
467
- | `--backend <name>` | — | `claude` / `codex` / `gemini`. |
468
- | `--limit <N>` | 50 | Row cap. |
469
- | `--detail` | off | Expand the `detail` JSON column. |
470
- | `--json` | off | Machine-readable output. |
471
-
472
- ### `aitne doctor` checks
473
-
474
- 1. Node version ≥ 22.0.0
475
- 2. Daemon port (`PA_API_PORT`, default 8321) is bindable
476
- 3. Dashboard port (`PA_DASHBOARD_PORT`, default 3000) is bindable
477
- 4. OS secret store usable (`security` / `secret-tool` / `PA_MASTER_PASSWORD`)
478
- 5. At least one backend CLI (`claude`, `codex`, or `gemini`) responds
479
- 6. `~/.personal-agent` exists and is writable
480
- 7. `better-sqlite3` native binding loads
481
- 8. `agent-assets/skills/` is reachable
482
- 9. Repository drift — one row per paired-local + GitHub repo whose `origin` no longer matches the registered `<owner>/<repo>`
386
+ | `aitne doctor [--json]` | Eight install-health checks + per-repo GitHub-link drift expansion |
387
+ | `aitne audit [flags]` | Read the agent action log `--since`, `--type`, `--result`, `--backend`, `--detail`, `--json` |
388
+ | `aitne setup` | Re-open the `/setup` wizard |
389
+ | `aitne open` | Open the dashboard in your browser |
390
+ | `aitne run-now <job>` | Fire a maintenance job on demand (currently `roadmap_maintenance`) |
391
+ | `aitne verify <target>` | Read-only post-launch verification of a shipped design surface |
392
+ | `aitne version` / `update` / `uninstall` | Self-explanatory |
483
393
 
484
- ---
394
+ `aitne help [cmd]` for per-command details.
485
395
 
486
- ## Architecture
396
+ ### Configuration
487
397
 
488
- ```mermaid
489
- flowchart TB
490
- PLAT["Input platforms:<br/>Slack, Telegram, Discord,<br/>WhatsApp, Web dashboard"]
491
-
492
- subgraph DAEMON["Aitne daemon (Hono on :8321)"]
493
- direction TB
494
- EB["EventBus<br/>(priority heap)"]
495
- DI["Dispatcher<br/>(2 reactive + 3 autonomous semaphores)"]
496
- BR["BackendRouter<br/>ProcessKey to tier and backend<br/>plus fallback"]
497
- AC["Agent Core<br/>(IAgentCore interface)"]
498
- OB["Observers:<br/>Git, GitHub, Obsidian,<br/>Notion, Calendar, Mail"]
499
- SC["Scheduler<br/>(node-cron + agent_schedule)"]
500
- end
501
-
502
- BACKENDS["AI runtimes:<br/>Claude Code SDK,<br/>Codex CLI subprocess,<br/>Gemini CLI subprocess"]
503
-
504
- DATA["Local data:<br/>SQLite (WAL + FTS5),<br/>Markdown memory,<br/>OS Keychain"]
505
-
506
- PLAT --> EB
507
- SC --> EB
508
- OB --> DATA
509
- DATA --> EB
510
- EB --> DI
511
- DI --> BR
512
- BR --> AC
513
- AC --> BACKENDS
514
- AC --> DATA
515
- ```
516
-
517
- ### Two execution paths
518
-
519
- **Reactive path** — owner DMs / mentions, cron routines, calendar approach events, scheduled tasks
520
- → Event source → EventBus → Dispatcher → BackendRouter → Agent → output to user.
521
-
522
- **Polling path** — Obsidian, Git, GitHub, Notion, Calendar, Mail change detection
523
- → Observer → `observations` table (UPSERT, with `actor='user'|'agent'`)
524
- … time passes …
525
- → Hourly cron → Stage 2 lite-tier triage → Stage 3 full `routine.hourly_check` (if escalated) → agent reads pending → updates `today.md` / `roadmap.md` → notifies if needed.
526
-
527
- `AgentWriteTracker` prevents agent → observer → agent loops by tagging the agent's own writes so the hourly check filters them out. A pre-pass `routine.fetch_window` session fans out per-account fetches into the `observations` table before each routine runs.
528
-
529
- ### Repo layout
530
-
531
- ```
532
- packages/
533
- ├── daemon/ # Hono server, EventBus, Dispatcher, BackendRouter, observers, SQLite layer, integration SDK wrappers
534
- ├── dashboard/ # Next.js 16 + React 19 + Tailwind 4 + shadcn/ui
535
- └── shared/ # Types, Zod schemas, ProcessKey enum, branding constants
536
-
537
- agent-assets/ # Read by the daemon at session-init time
538
- ├── agent-profiles/ # Persona MD per backend (CLAUDE.md / AGENTS.md / GEMINI.md)
539
- ├── skills/ # 24 built-in skills (context, calendar, mail, notion, …)
540
- ├── task-flows/ # Per-event prompt templates
541
- └── templates/ # Scaffold MD copied to context/ on first run
542
-
543
- bin/aitne.mjs # CLI entry — lifecycle + ops
544
- scripts/ # Build/run helpers and per-command modules
545
- docs/design/ # Architecture and design docs — source of truth
546
- ```
547
-
548
- ---
549
-
550
- ## Memory layout
551
-
552
- Everything the agent writes lives under `PA_DATA_DIR` (default `~/.personal-agent`):
553
-
554
- ```
555
- ~/.personal-agent/
556
- ├── context/ # Markdown memory — edit any file by hand at any time
557
- │ ├── _index.md # Navigation hub
558
- │ ├── today.md # Today's working view (always injected)
559
- │ ├── yesterday.md # Daemon-rotated archive
560
- │ ├── roadmap.md # Long-term goals (Morning + Evening injection)
561
- │ ├── context-index.md # Auto-maintained index
562
- │ ├── user/
563
- │ │ ├── profile.md # ~600 tokens, always injected
564
- │ │ ├── people.md # Relationship dictionary
565
- │ │ ├── work.md, expertise.md, personal.md, goals.md
566
- │ ├── rules/ # Policy files (management, redaction, journal)
567
- │ ├── routines/ # Per-cadence checklist rulebooks
568
- │ ├── dossiers/ # Carry-forward state per routine
569
- │ ├── projects/ # One file per active project + Obsidian Bases view
570
- │ ├── daily/YYYY-MM-DD.md # Synthesized daily journal (persistent by design)
571
- │ ├── weekly/YYYY-Www.md # Weekly review (1 yr file retention)
572
- │ ├── monthly/YYYY-MM.md # Monthly review (persistent by design)
573
- │ ├── inbox/ # Optional paste bucket
574
- │ └── agent/
575
- │ ├── journal.md # Private agent self-reflection
576
- │ └── scratch/ # 48-h TTL temp files
577
- ├── data/personal_agent.db # SQLite (WAL + FTS5)
578
- ├── logs/{daemon,dashboard}.log
579
- ├── prompts/ # Editable prompt templates
580
- ├── attachments/ # Chat attachments
581
- ├── agent-sessions/[id]/ # Per-session backend workdir
582
- ├── secrets/ # File-fallback secret store (empty when OS keychain is used)
583
- └── run/ # PID files for daemon + dashboard
584
- ```
585
-
586
- ### Write chokepoint
587
-
588
- Context-MD writes go through `curl http://localhost:8321/api/context/<path>` rather than the SDK's `Edit`/`Write` tools on those paths. This is enforced by **skill instructions** (the bundled skills only ever invoke the daemon API) plus the **absolute-block path globs** that hard-deny SDK writes to secret paths (`.env`, `~/.ssh`, `~/.aws`, `~/.gnupg`, `~/.personal-agent/secrets/**`, …). Routing context writes through the daemon API gives one chokepoint for locks (`today.md` write lock), frontmatter validation, and snapshots (30-day `md_file_snapshots` retention).
589
-
590
- ---
591
-
592
- ## Multi-backend
593
-
594
- Aitne abstracts three AI runtimes behind a single `IAgentCore` interface:
595
-
596
- | Backend | Implementation | Session resume | Strengths |
597
- |---|---|---|---|
598
- | **Claude Code** | `@anthropic-ai/claude-agent-sdk` | Yes (SDK `resume` option) | Best for routines, deep context, server-side advisor |
599
- | **Codex CLI** | OpenAI Codex CLI subprocess + JSONL stream | Yes (`--resume <session-id>`) | Best for code-heavy tasks, fast iteration |
600
- | **Gemini CLI** | Google Gemini CLI subprocess + JSONL stream | Yes (`--resume <session-id>`) | Best for free-tier headroom, large-context summarization |
601
-
602
- ### Per-process tier routing
603
-
604
- Every kind of work has a `ProcessKey` mapped to a tier (`lite` / `medium` / `high`) and a backend. For Claude, those tiers map to Haiku 4.5 / Sonnet 4.6 / Opus 4.7.
605
-
606
- | ProcessKey | Default tier | What runs there |
607
- |---|---|---|
608
- | `routine.morning_routine_initial` | **high** | First-day plan generation (one-shot, sets up profile) |
609
- | `routine.morning_routine` | medium | Daily plan generation — the highest-value recurring process |
610
- | `routine.evening_review` | medium | Today wrap-up |
611
- | `routine.weekly_review`, `routine.monthly_review` | medium | Cadence summaries |
612
- | `routine.hourly_check` | medium | Stage 3 observation aggregation |
613
- | `routine.hourly_check.triage` | lite | Stage 2 escalate-vs-log-only gate |
614
- | `routine.fetch_window` | lite | Pre-pass fan-out fetcher for routines |
615
- | `message.dm`, `message.mention` | medium | DM and channel response |
616
- | `dashboard.chat` | medium | Web chat |
617
- | `dashboard.docs_qa` | medium (tier-locked) | Docs panel — never burns Opus quota |
618
- | `agent.task`, `agent.dm_task` | medium | Scheduled wakeups |
619
- | `knowledge.import` | high | One-shot knowledge ingestion |
620
- | `calendar.change`, `gmail_classify` | lite | Polling-derived events |
621
- | `git.*`, `github.*` (event triage) | lite | Git/GitHub event triage |
622
- | `delegated_task` | lite | Delegated subprocess task mode |
623
- | `delegated_task_heavy` | high | Opt-in destructive-write task mode |
624
- | `observation.summarize` | lite | Per-observation classification |
625
- | `wiki.ingest_url`, `wiki.compile`, `wiki.ask`, `wiki.lint`, `wiki.trace`, `wiki.connect` | medium | Personal wiki surfaces |
626
-
627
- Configure each ProcessKey's backend and tier from the dashboard `/settings/models` page. The router fails over to a fallback backend automatically on `BackendQuotaError` or `BackendDecisiveFailure`, re-materializing the fallback's instruction file + skill directories into the session workdir.
628
-
629
- ---
630
-
631
- ## Integrations
632
-
633
- ### Messaging
634
-
635
- | Platform | Library | Mode | Setup |
636
- |---|---|---|---|
637
- | Slack | `@slack/bolt` | Socket Mode (WebSocket) | Bot + App tokens |
638
- | Telegram | `telegraf` | Long polling | Bot token |
639
- | Discord | `discord.js` | Gateway | Bot token |
640
- | WhatsApp | `@whiskeysockets/baileys` | QR pairing | Scan QR from dashboard |
641
- | Web Dashboard | Hono SSE | Always on | None |
642
-
643
- ### Mail (multi-provider, unified API)
644
-
645
- | Provider | Auth | Features |
646
- |---|---|---|
647
- | **Gmail** | `googleapis` OAuth2 | Read · send · drafts · labels · IMAP IDLE · classifier · attachment extraction |
648
- | **Outlook** | `@azure/msal-node` Graph API | Read · send · drafts · folders |
649
- | **Yahoo** | IMAP + app password | Read · send · IMAP IDLE |
650
- | **iCloud** | IMAP + app password | Read · send · IMAP IDLE |
651
-
652
- Local FTS5 full-text search runs across every account via `GET /api/mail/search?q=...`. The classifier (`mail-classifier`) tags messages across all providers; the Gmail-specific classifier auto-applies labels.
653
-
654
- ### Knowledge and docs
655
-
656
- - **Obsidian** — read directly via `Read`; write via the official Obsidian CLI (`obsidian create`, `obsidian append`, `obsidian daily:append`, …); `chokidar` watches the vault for user edits
657
- - **Notion** — `@notionhq/client` REST API; full page + database CRUD
658
- - **Wiki builder** — per-workspace ingest / compile / ask / lint / trace / connect surface backed by `packages/daemon/src/core/wiki/` (cost-gated full rebuilds, approval queue, compile preview, optional git pre-compile snapshot, dispatch-mode fan-out). One internal workspace or any number of external Obsidian vaults; addressed with `@<workspace>` on every bang command.
659
- - **Custom MCP servers** — register via `/api/mcp/servers`; materialized into the per-session workdir so backends use them transparently
660
-
661
- ### Code
662
-
663
- - **Git** (local) — daemon proxies `git log`, `git diff`, `git show`; cron-driven repository observer; `automation_triggers` table fires LLM prompts on `cron.daily` / `cron.weekly`
664
- - **GitHub** — `@octokit/rest` + webhooks; PR list and comment, issue ops, HMAC-SHA256 signature verification at `POST /webhook/github`
665
-
666
- ### Calendar and travel
667
-
668
- - **Google Calendar** — `googleapis` OAuth2; full event CRUD, freebusy, calendar list, 15-min approaching reminders
669
- - **Outlook Calendar** — Microsoft Graph via `@azure/msal-node` in direct mode, or user-managed MCP in delegated / native modes
670
- - **iCloud Calendar** — CalDAV via `tsdav`
671
- - **Google Maps** — Directions API for travel-time estimation tied to calendar events
672
-
673
- ### Lifestyle
674
-
675
- - **Receipts** — auto-extracts PDF / image attachments from mail with category detection
676
- - **Travel bookings** — auto-extracts flight, hotel, restaurant, train confirmations
677
- - **Reading** — Kindle My Clippings importer; reading-taste profile; weekly book recommendations
678
- - **Voice** — opt-in Whisper transcription (`ffmpeg-static` + `@huggingface/transformers`) runs locally on voice attachments. Install via `POST /api/voice/install`.
679
-
680
- ### Integration delegation modes
681
-
682
- Each integration runs in one of **four** modes:
683
-
684
- | Mode | Auth held by | Polling? | Setup cost | Capabilities |
685
- |---|---|---|---|---|
686
- | **`direct`** | Daemon (OAuth in OS Keychain) | Daemon poller | 5–6 vendor-console steps | Full feature set |
687
- | **`delegated`** | Main backend's connector | Cron `delegated-sync-worker` (per-cadence opt-in) | None — backend already authed | Reduced (whatever the connector exposes) |
688
- | **`native`** | Main backend's connector | None — agent reaches the integration in-turn via MCP | None | On-demand only; observations posted via `/api/observations` |
689
- | **`disabled`** | — | No | — | Off |
690
-
691
- `delegated` runs the backend's connector on a cron cadence (default-off, opt-in per cadence). `native` skips polling entirely and routes calls in-band during DMs / hourly checks. Outlook Mail and Outlook Calendar are user-managed-connector native: install the MCP yourself, Aitne synthesises a probe pass.
692
-
693
- Every mode change goes through `POST /api/integrations/:key/probe` and the per-key flip lock — a live capability check is mandatory before flipping to `delegated` or `native`.
694
-
695
- ---
696
-
697
- ## Safety model
698
-
699
- Aitne stacks **four** independent safety layers. The bottom layer holds even when the upper layers are widened by the user.
700
-
701
- ### Layer 1 — SDK permission model
702
-
703
- ```typescript
704
- // Safe (strict) mode — claude-tool-collection.ts:CLAUDE_DEFAULT_ALLOWED_TOOLS
705
- permissionMode: "dontAsk"
706
- allowedTools: ["Read", "Glob", "Grep", "Write", "Edit", "Skill",
707
- "Bash(curl *)", "Bash(git *)", "Bash(jq *)"]
708
- disallowedTools: ALWAYS_DISALLOWED_TOOLS + dashboard overrides
709
- ```
710
-
711
- Allow mode swaps to `permissionMode: "bypassPermissions"` but the absolute-block layer below still applies.
712
-
713
- ### Layer 2 — PreToolUse hooks (Claude, Safe mode)
714
-
715
- In Safe mode, every `Bash(curl ...)` invocation is parsed: the hostname must be `localhost` or `127.0.0.1` and the port must match the daemon's `apiPort`. Connection-override flags (`--connect-to`, `--resolve`, `--proxy`, `-x`, `--socks`, `-K`) are also rejected. A parallel `jq` hook blocks `--rawfile` / env-leak filters. In Allow mode the curl/jq pair is skipped, but the absolute-block hook (below) and the context-write attribution hook still run. Vault writes are attributed to the agent via `AgentWriteTracker` so they don't loop back as observations.
716
-
717
- ### Layer 3 — Daemon API risk tiers
718
-
719
- | Tier | Examples | Auth required |
720
- |---|---|---|
721
- | **Autonomous** | `GET /api/context/*`, `POST /api/notify`, `POST /api/schedule`, `POST /api/observations` | None (localhost only) |
722
- | **ReadSensitive** | `GET /api/observations`, `GET /api/calendar/events`, `GET /api/mail/search` | `X-Read-Token` or Bearer |
723
- | **Approve** | `PATCH /api/config`, `POST /api/setup/*`, `POST /api/system/factory-reset`, `POST /api/triggers`, `/api/repositories`, `/api/mcp/servers`, `/api/integrations` | Bearer |
724
-
725
- ### Layer 4 — Absolute-block layer (`ALWAYS_DISALLOWED_TOOLS`)
726
-
727
- Hard-blocked in **both Safe and Allow** modes. `bypassPermissions` and `allowedToolsOverride` cannot widen past this:
728
-
729
- - Recursive delete: `rm -rf *`, `rm -r *`, `rm --recursive*`, plus every common short-flag bundle (`-rfv`, `-fr`, `-vr`, `-R`, `-fR`, …)
730
- - Privilege escalation: `sudo *`, `doas *`, `su *`
731
- - Pipe-to-shell RCE: `curl * | sh`, `wget * | bash`, `bash <(...)`, `sh <(...)`, no-space `bash<...` / `sh<...`
732
- - Indirect-eval RCE: `eval *`, `source *` (no Aitne skill or task flow uses these)
733
- - Platform secret CLI: `security *` (macOS), `secret-tool *` (Linux), `cmdkey *` (Windows)
734
- - Secret file reads and writes: `.env`, `**/.env`, `id_rsa*`, `id_ed25519*`, `~/.ssh/**`, `~/.gnupg/**`, `~/.aws/**`, `~/.config/gcloud/**`, `~/.config/gh/hosts.yml`, `~/.netrc`, `~/Library/Keychains/**`, `~/.local/share/keyrings/**`
735
- - Daemon-managed secret surfaces: `~/.personal-agent/secrets/**`, `~/.personal-agent/whatsapp/auth/**`, `~/.personal-agent/backups/**`
736
- - Anthropic-cloud managed-agent tools: `CronCreate`, `CronList`, `CronDelete`, `RemoteTrigger`, `PushNotification` (would bypass the local audit log, MD memory, and cost telemetry)
737
-
738
- Every blocked attempt lands in `agent_actions` with `action_type='blocked_absolute'`.
739
-
740
- ### Other guarantees
741
-
742
- - **Localhost-only API** — daemon binds to `127.0.0.1` only
743
- - **Bearer token** — required for all Approve-tier endpoints
744
- - **Webhook HMAC** — GitHub webhooks verified with `X-Hub-Signature-256`
745
- - **No automated financial transactions** — never trade, transfer, or pay
746
- - **No automated social posting** — never post publicly on your behalf
747
- - **Single-owner only** — group chats and multi-user channels are filtered at the adapter layer
748
- - **Auth Health Monitor** — hourly probe of every backend's auth state, with grace periods, escalating DMs, and auto-recovery flows for Claude / Codex / Gemini
749
-
750
- ---
751
-
752
- ## Cost and quotas
753
-
754
- ### Built-in controls
755
-
756
- | Control | Default | Configurable |
757
- |---|---|---|
758
- | `maxConcurrentSessions` (autonomous) | 3 | yes |
759
- | `maxReactiveSessions` (DMs) | 2 | yes |
760
- | `executeTimeoutMinutes` (per-execute watchdog) | 60 | yes |
761
- | `autonomousDailyCostCapUsd` | null (alert-only) | yes |
762
- | `autonomousMonthlyCostCapUsd` | null (alert-only) | yes |
763
- | Per-ProcessKey `maxBudgetUsd` (in `process_backend_config`) | per-row, set from `/settings/models` | yes |
764
- | `delegated_task` hard caps | `maxToolCalls=15` · `maxBudgetUsd=$0.50` · `timeoutMs=300_000` | no (compile-time) |
765
-
766
- ### Typical day's spend
767
-
768
- ```
769
- 04:00 Morning Routine (Sonnet) ~$0.15
770
- 07:00 Morning Briefing (Sonnet) ~$0.03
771
- 09:00 Hourly Check (Sonnet) ~$0.05
772
- 12:00 Hourly Check (Sonnet) ~$0.03
773
- 12:55 DM response (Sonnet) ~$0.08
774
- 18:00 Evening Review (Sonnet) ~$0.15
775
- ─────────────────────────────────────────────────
776
- Total ~$0.49
777
- ```
778
-
779
- If you're on a Claude / Codex / Gemini subscription, none of this hits a metered API key — it consumes your subscription quota directly. Quota exhaustion is detected, dedupe-notified once per 2-hour window, and the next hourly tick retries automatically.
780
-
781
- ---
782
-
783
- ## Configuration
784
-
785
- `.env` is **bootstrap-only**. Everything else is editable from the dashboard at runtime — or via natural-language DMs.
786
-
787
- ### `.env` (bootstrap)
788
-
789
- ```bash
790
- PA_DATA_DIR=~/.personal-agent
791
- PA_API_PORT=8321
792
- PA_DASHBOARD_PORT=3000
793
- PA_LOG_LEVEL=info # trace | debug | info | warn | error
794
- ```
795
-
796
- ### Pre-seeding identifiers via env (optional)
797
-
798
- Bot tokens and OAuth credentials always live in the OS keychain — they are never read from environment variables. The wizard's Messaging step (or `/connections/*`) is the single entry point. The few non-secret identifiers you can pre-seed for fully scripted installs:
799
-
800
- ```bash
801
- PA_SLACK_OWNER_USER_ID=U...
802
- PA_TELEGRAM_OWNER_CHAT_ID=...
803
- PA_DISCORD_OWNER_USER_ID=...
804
- PA_WHATSAPP_ENABLED=true
805
- PA_WHATSAPP_OWNER_PHONE=...
806
-
807
- PA_PRIMARY_VAULT_PATH=~/Documents/MyVault
808
- PA_EXTERNAL_OBSIDIAN_VAULT_PATH=~/Documents/SecondaryVault
809
-
810
- PA_NOTION_DATABASE_IDS='{"tasks":"abc...","notes":"def..."}'
811
- ```
812
-
813
- Everything else — bot tokens, OAuth refresh tokens, Notion API key, GitHub token, Google Maps key, Apple Calendar credentials — is set from the dashboard `/connections` page (or via the setup wizard) and lives in the keychain.
814
-
815
- ### Runtime settings
816
-
817
- The dashboard `/settings` tree exposes ~100 runtime keys. Headline groups:
818
-
819
- - **Schedule** — `timezone`, `dayBoundaryHour`, hourly check window and interval, cron schedules
820
- - **Notifications** — `quietHoursStart/End`, `maxNotificationsPerHour`, `maxNotificationsPerDay`, `batchIntervalMinutes`
821
- - **Sessions** — `sessionTimeoutDmMinutes`, `historyInjectionMaxMessages`, `historyInjectionMaxTokens`
822
- - **Safety** — execution mode per backend, `disallowedTools` overrides
823
- - **Models** — per-ProcessKey backend + tier, advisor on/off, advisor model
824
- - **Cost** — daily / monthly soft caps with 80% and 100% alerts
825
- - **Mail** — provider list, poll interval, IMAP IDLE on/off
826
- - **Character** — 1,000-char free-form tone description
827
- - **Language** — `primaryLanguage` nudges output language for DMs, knowledge, and vault writes
828
- - **Voice** — `voiceTranscriptionEnabled`, `voiceTranscriptionPrimaryLanguage` (the model itself is set via `PA_VOICE_TRANSCRIPTION_MODEL` env-only)
829
- - **Delegated task mode** — kill switch, per-day quota, heavy-tier opt-in, cache / pool / structured-output toggles
830
-
831
- …or just DM the agent: *"Don't run hourly checks on weekends."*
398
+ `.env` is **bootstrap-only** (`PA_DATA_DIR`, `PA_API_PORT`, `PA_DASHBOARD_PORT`, `PA_LOG_LEVEL`). Everything else — ~100 runtime keys covering schedule, notifications, models, character, mail, voice, delegated mode — is editable from the dashboard at `:8322`, or via natural-language DMs to the agent.
832
399
 
833
400
  ---
834
401
 
835
402
  ## Platform support
836
403
 
837
- | Concern | macOS | Linux | Windows |
404
+ | | macOS | Linux | Windows |
838
405
  |---|---|---|---|
839
- | **Secret storage** | Keychain (`security`) | `secret-tool` (libsecret) → AES file fallback | DPAPI via `powershell.exe` → AES file fallback |
840
- | **Folder picker** | `osascript` | `zenity` / `kdialog` / `yad` | `System.Windows.Forms.FolderBrowserDialog` |
406
+ | **Secret storage** | Keychain | `secret-tool` (libsecret) → AES file fallback | DPAPI → AES file fallback |
407
+ | **Folder picker** | `osascript` | `zenity` / `kdialog` / `yad` | `FolderBrowserDialog` |
841
408
  | **Process tree kill** | POSIX process group | POSIX process group | `taskkill /T /F` |
842
- | **Log tailing (`-f`)** | Built-in Node tailer | Built-in Node tailer | Built-in Node tailer (no `tail` binary needed) |
843
- | **Console windows** | n/a | n/a | Background spawns hide the console window |
844
-
845
- ### WSL
846
-
847
- GNOME Keyring / D-Bus are typically unavailable. Aitne falls back to the encrypted file store. Set:
848
-
849
- ```bash
850
- export PA_MASTER_PASSWORD='use-a-long-random-string'
851
- ```
852
-
853
- ### Linux secret-tool
854
-
855
- ```bash
856
- sudo apt-get install libsecret-tools # Debian / Ubuntu
857
- sudo dnf install libsecret # Fedora
858
- sudo pacman -S libsecret # Arch
859
- ```
860
409
 
861
- ### Windows long paths
410
+ WSL falls back to the encrypted file store — set `PA_MASTER_PASSWORD` to a long random string. Windows users hitting `ENAMETOOLONG` on install should enable long paths via the `LongPathsEnabled=1` registry key.
862
411
 
863
- If `npm install` fails with `ENAMETOOLONG`, run from elevated PowerShell and reboot:
864
-
865
- ```powershell
866
- Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" `
867
- -Name "LongPathsEnabled" -Value 1
868
- ```
412
+ Common gotchas: [docs/troubleshooting.md](docs/troubleshooting.md).
869
413
 
870
414
  ---
871
415
 
872
- ## Troubleshooting
873
-
874
- ### `aitne start` says "dist not found"
875
-
876
- The build did not complete. Run `aitne build` and check for TypeScript errors.
877
-
878
- ### Port already in use
879
-
880
- Change `PA_API_PORT` (or `PA_DASHBOARD_PORT`) in `.env`. To find the conflicting process:
881
-
882
- ```bash
883
- # macOS / Linux
884
- lsof -i :8321
885
-
886
- # Windows
887
- netstat -ano | findstr :8321
888
- ```
889
-
890
- ### `aitne` not found after `npm install -g`
891
-
892
- ```bash
893
- npm config get prefix
894
- # add the printed prefix's `bin/` (or its root on Windows) to your PATH
895
- ```
896
-
897
- ### SQLite errors on startup
898
-
899
- The DB can be reset safely — your Markdown memory in `context/` is untouched. The `*` clears the WAL + SHM companion files:
900
-
901
- ```bash
902
- aitne stop
903
- rm ~/.personal-agent/data/personal_agent.db*
904
- # Remove-Item "$env:USERPROFILE\.personal-agent\data\personal_agent.db*" # Windows
905
- aitne start
906
- ```
907
-
908
- ### Backend auth expired
416
+ ## Documentation
909
417
 
910
- ```bash
911
- aitne doctor # confirms which backend failed
912
- claude auth login # re-auth Claude
913
- codex login --device-auth # re-auth Codex
914
- # Gemini re-auth happens automatically via the dashboard banner
915
- ```
916
-
917
- ### Diagnostic dump
918
-
919
- ```bash
920
- aitne audit --since 24h --result failed --detail
921
- ```
922
-
923
- ---
924
-
925
- ## Development
926
-
927
- ### Tech stack
928
-
929
- | Layer | Stack |
930
- |---|---|
931
- | **Daemon** | Node.js 22 · Hono · `@anthropic-ai/claude-agent-sdk` · `@slack/bolt` · `telegraf` · `discord.js` · `@whiskeysockets/baileys` · `googleapis` · `@azure/msal-node` · `@notionhq/client` · `@octokit/rest` · `tsdav` · `chokidar` · `node-cron` · `heap-js` · `pino` · `zod` |
932
- | **Storage** | `better-sqlite3` (WAL + FTS5 trigram) · OS Keychain · plain Markdown |
933
- | **Dashboard** | Next.js 16 (App Router) · React 19 · Tailwind CSS 4 · shadcn/ui · TanStack Query · Recharts · Monaco Editor |
934
- | **Voice** | `ffmpeg-static` · `@huggingface/transformers` (Whisper, opt-in) |
935
- | **Monorepo** | pnpm 10.x workspaces · Turborepo · TypeScript 5.8 · Vitest 3 |
936
-
937
- ### Conventions
938
-
939
- - All code, comments, tests, and user-facing text are in **English**
940
- - TypeScript throughout, camelCase, ESM with `.js` import extensions
941
- - Tests colocated with source as `foo.ts` + `foo.test.ts`
942
- - Vitest enforces **100% coverage** on a curated subset of pure-logic modules
943
- - The `docs/design/` tree is the authoritative spec; `packages/daemon/src/` is the source of truth when they diverge
944
-
945
- ### Source-of-truth pointers
946
-
947
- | If you need to… | Start in |
418
+ | Topic | Doc |
948
419
  |---|---|
949
- | Understand startup order | `packages/daemon/src/index.ts` |
950
- | Change event routing | `src/core/dispatcher.ts` + `src/core/event-bus.ts` |
951
- | Add a backend or change tier mapping | `packages/shared/src/process-key.ts` + `src/core/backends/backend-router.ts` |
952
- | Add an API route | `src/api/routes/` + register in `src/api/server.ts` |
953
- | Add an integration | `packages/shared/src/integrations.ts` (registry) + `src/services/<name>/` + optional `src/observers/` |
954
- | Edit a built-in skill | `agent-assets/skills/<slug>/SKILL.md` |
955
- | Edit an event task flow | `agent-assets/task-flows/<eventType>.md` |
956
- | Change risk classification | `src/safety/risk-classifier.ts` |
957
- | Change the absolute-block layer | `src/safety/always-disallowed.ts` |
958
- | Change auth health / recovery | `src/core/backends/auth-health-monitor.ts` + `auth-recovery.ts` |
420
+ | Documentation index | [docs/index.md](docs/index.md) |
421
+ | Setup walkthrough | [docs/setup-guide.md](docs/setup-guide.md) |
422
+ | Troubleshooting | [docs/troubleshooting.md](docs/troubleshooting.md) |
423
+ | Maintenance playbook | [docs/maintenance.md](docs/maintenance.md) |
424
+ | Advisor model | [docs/advisor.md](docs/advisor.md) |
959
425
 
960
426
  ---
961
427
 
962
- ## FAQ
963
-
964
- **Is Aitne a chatbot?**
965
- No. It's a daemon. It also responds to chat, but the more interesting half is what it does while you're not looking at it.
428
+ ## Tech stack
966
429
 
967
- **Does it phone home?**
968
- No. The daemon binds to `127.0.0.1` only. There is no telemetry. Verify with `lsof` and `nettop`.
430
+ Daemon: Node.js 22 · Hono · `@anthropic-ai/claude-agent-sdk` · `@slack/bolt` · `telegraf` · `discord.js` · `@whiskeysockets/baileys` · `googleapis` · `@azure/msal-node` · `@notionhq/client` · `@octokit/rest` · `tsdav` · `chokidar` · `node-cron` · `better-sqlite3` (FTS5) · `pino` · `zod`
969
431
 
970
- **Where do my secrets live?**
971
- In your OS-native credential store (macOS Keychain / libsecret / DPAPI). Never in `.env`. On systems without a credential store, in an AES-encrypted file under `~/.personal-agent/secrets/`.
432
+ Dashboard: Next.js 16 · React 19 · Tailwind 4 · shadcn/ui · TanStack Query · Recharts · Monaco
972
433
 
973
- **Can I bring my own AI?**
974
- Yes — Claude Code, OpenAI Codex, and Google Gemini CLI are all supported. Pick one or all three. Per-process tier routing lets you mix-and-match.
975
-
976
- **Do I need an API key?**
977
- No metered API key required — Aitne uses your subscription quota via the official CLIs (`claude auth login`, `codex login`, `gemini`). If you'd rather pay-as-you-go, supply `ANTHROPIC_API_KEY` / `OPENAI_API_KEY` / `GEMINI_API_KEY` in the wizard.
978
-
979
- **Can I edit the agent's memory directly?**
980
- Yes — that's the entire point. Open `~/.personal-agent/context/today.md` in your editor, change anything, save. The agent picks up your edits on the next routine. Any edit is just text in a file — no proprietary format, no migration headaches if you uninstall.
981
-
982
- **What about Obsidian?**
983
- Aitne can use your existing Obsidian vault as the primary memory store. The agent reads vault files directly and writes via the official Obsidian CLI. Your wiki links keep working. Your daily notes get appended to.
984
-
985
- **Can I run my own MCP servers?**
986
- Yes. Register them in the dashboard `/connections` page; the daemon writes the per-session MCP config into each backend's session workdir before launching, so all your MCP tools are available transparently.
987
-
988
- **Do my existing Claude Code / Codex / Gemini settings work?**
989
- Yes. Aitne reads your `~/.claude/`, `~/.codex/`, `~/.gemini/` configs on session init and layers its persona on top. Custom skills, slash commands, MCP servers, and plugins all carry over. See [Bring your own harness](#bring-your-own-harness).
990
-
991
- **Does it work without internet?**
992
- The AI backends and reactive messaging need internet (to hit those services). The daemon, dashboard, observers (Git, Obsidian local), and Markdown memory are entirely offline.
993
-
994
- **Does it support languages other than English?**
995
- Yes. Talk to it in your native language — Japanese, German, Spanish, anything. The LLM handles it; the `primaryLanguage` setting nudges DM, knowledge, and vault outputs into that language too. Implementation code remains English-only.
996
-
997
- **Is this for my whole team?**
998
- No — Aitne is **single-owner by design**. Group chats and multi-user channels are filtered at the adapter layer. If you want a team agent, run one Aitne per teammate.
999
-
1000
- **How do I uninstall?**
1001
- `aitne uninstall`. It will offer to wipe `~/.personal-agent` or keep it for re-installation.
434
+ Monorepo: pnpm 10 workspaces · Turborepo · TypeScript 5.8 · Vitest 3 (100% coverage gate on a curated pure-logic subset)
1002
435
 
1003
436
  ---
1004
437
 
1005
438
  ## License
1006
439
 
1007
- MIT — use, modify, and distribute freely. See [LICENSE](./LICENSE) for the full text.
1008
-
1009
- ---
1010
-
1011
- <div align="center">
1012
-
1013
- **Aitne — Always on. Always yours.**
1014
-
1015
- [Issues](https://github.com/Aitne-sh/Aitne/issues) · [Discussions](https://github.com/Aitne-sh/Aitne/discussions) · [npm](https://www.npmjs.com/package/@aitne-sh/aitne)
1016
-
1017
- </div>
440
+ MIT — see [LICENSE](./LICENSE).