@aitne-sh/aitne 0.1.6 → 0.1.8

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 (222) hide show
  1. package/README.md +195 -1029
  2. package/agent-assets/agent-profiles/_safety.md +49 -17
  3. package/agent-assets/agent-profiles/profile-importer.md +1 -1
  4. package/agent-assets/agent-profiles/routine.md +4 -3
  5. package/agent-assets/docs/concepts/agent-day.md +6 -1
  6. package/agent-assets/docs/concepts/auth-health.md +10 -1
  7. package/agent-assets/docs/concepts/backends-and-tiers.md +74 -40
  8. package/agent-assets/docs/concepts/costs-and-quotas.md +25 -5
  9. package/agent-assets/docs/concepts/delegated-mode.md +147 -68
  10. package/agent-assets/docs/concepts/memory-model.md +9 -4
  11. package/agent-assets/docs/concepts/observations.md +13 -1
  12. package/agent-assets/docs/concepts/process-keys.md +20 -5
  13. package/agent-assets/docs/concepts/routines.md +38 -20
  14. package/agent-assets/docs/concepts/safety-model.md +30 -13
  15. package/agent-assets/docs/concepts/skills.md +12 -7
  16. package/agent-assets/docs/features/integrations/calendar.md +1 -1
  17. package/agent-assets/docs/features/integrations/git.md +2 -2
  18. package/agent-assets/docs/features/integrations/github.md +9 -2
  19. package/agent-assets/docs/features/integrations/mail.md +1 -1
  20. package/agent-assets/docs/features/integrations/notion.md +34 -6
  21. package/agent-assets/docs/features/integrations/obsidian.md +7 -2
  22. package/agent-assets/docs/features/lifestyle/git.md +4 -7
  23. package/agent-assets/docs/features/lifestyle/receipts.md +17 -2
  24. package/agent-assets/docs/features/lifestyle/travel-bookings.md +15 -0
  25. package/agent-assets/docs/features/lifestyle/travel-time.md +7 -1
  26. package/agent-assets/docs/features/memory-files/agent-journal.md +2 -2
  27. package/agent-assets/docs/features/memory-files/projects.md +6 -0
  28. package/agent-assets/docs/features/memory-files/roadmap.md +5 -0
  29. package/agent-assets/docs/features/memory-files/today.md +1 -0
  30. package/agent-assets/docs/features/memory-files/user-profile.md +6 -0
  31. package/agent-assets/docs/features/messaging/bang-commands.md +20 -10
  32. package/agent-assets/docs/features/messaging/discord.md +12 -1
  33. package/agent-assets/docs/features/messaging/overview.md +10 -7
  34. package/agent-assets/docs/features/messaging/slack.md +13 -1
  35. package/agent-assets/docs/features/messaging/telegram.md +7 -1
  36. package/agent-assets/docs/features/messaging/whatsapp.md +12 -1
  37. package/agent-assets/docs/features/operations/activity-and-conversations.md +2 -2
  38. package/agent-assets/docs/features/operations/approvals.md +6 -0
  39. package/agent-assets/docs/features/operations/backend-routing.md +7 -0
  40. package/agent-assets/docs/features/operations/cost-tracking.md +6 -0
  41. package/agent-assets/docs/features/operations/notifications.md +6 -0
  42. package/agent-assets/docs/features/operations/schedule-approaching.md +22 -9
  43. package/agent-assets/docs/features/routines/custom-routines.md +10 -4
  44. package/agent-assets/docs/features/routines/evening-review.md +1 -1
  45. package/agent-assets/docs/features/routines/hourly-check.md +1 -1
  46. package/agent-assets/docs/features/routines/morning-routine.md +24 -15
  47. package/agent-assets/docs/features/routines/weekly-review.md +38 -12
  48. package/agent-assets/docs/features/wiki/commands.md +11 -0
  49. package/agent-assets/docs/features/wiki/overview.md +13 -3
  50. package/agent-assets/docs/getting-started/01-what-is-this.md +32 -11
  51. package/agent-assets/docs/getting-started/02-first-steps.md +17 -4
  52. package/agent-assets/docs/getting-started/03-what-can-this-do.md +21 -11
  53. package/agent-assets/docs/getting-started/04-first-day.md +14 -0
  54. package/agent-assets/docs/glossary.md +65 -12
  55. package/agent-assets/docs/guides/add-a-custom-routine.md +12 -0
  56. package/agent-assets/docs/guides/backup-and-restore.md +16 -2
  57. package/agent-assets/docs/guides/budget-and-cost-for-wiki.md +6 -0
  58. package/agent-assets/docs/guides/build-your-wiki.md +14 -0
  59. package/agent-assets/docs/guides/change-which-model-handles-x.md +7 -0
  60. package/agent-assets/docs/guides/connect-a-new-mail-account.md +16 -0
  61. package/agent-assets/docs/guides/explore-with-trace-and-connect.md +6 -0
  62. package/agent-assets/docs/guides/import-knowledge-file.md +11 -0
  63. package/agent-assets/docs/guides/install-and-run.md +20 -4
  64. package/agent-assets/docs/guides/maintain-wiki-health.md +6 -0
  65. package/agent-assets/docs/guides/migrate-machines.md +13 -1
  66. package/agent-assets/docs/guides/multiple-wikis-for-multiple-domains.md +9 -0
  67. package/agent-assets/docs/guides/pause-the-agent.md +12 -4
  68. package/agent-assets/docs/guides/reinstall-cleanly.md +19 -4
  69. package/agent-assets/docs/guides/setup-wizard.md +20 -9
  70. package/agent-assets/docs/guides/switch-default-backend.md +10 -1
  71. package/agent-assets/docs/guides/use-an-existing-obsidian-vault.md +5 -0
  72. package/agent-assets/docs/reference/api.md +29 -1
  73. package/agent-assets/docs/reference/cli-commands.md +22 -3
  74. package/agent-assets/docs/reference/config.md +37 -5
  75. package/agent-assets/docs/reference/disallowed-tools.md +13 -0
  76. package/agent-assets/docs/reference/keyboard-shortcuts.md +13 -0
  77. package/agent-assets/docs/reference/process-keys.md +70 -20
  78. package/agent-assets/docs/reference/skills.md +27 -9
  79. package/agent-assets/docs/troubleshooting/auth-failed.md +7 -2
  80. package/agent-assets/docs/troubleshooting/dashboard-shows-degraded.md +13 -1
  81. package/agent-assets/docs/troubleshooting/fallback-keeps-firing.md +10 -0
  82. package/agent-assets/docs/troubleshooting/messaging-not-pairing.md +11 -0
  83. package/agent-assets/docs/troubleshooting/morning-routine-didnt-run.md +9 -4
  84. package/agent-assets/docs/troubleshooting/observation-not-detected.md +12 -0
  85. package/agent-assets/docs/troubleshooting/quota-exhausted.md +7 -1
  86. package/agent-assets/docs/troubleshooting/wiki-ingest-full-blocked.md +5 -0
  87. package/agent-assets/docs/troubleshooting/wiki-write-failed.md +5 -0
  88. package/agent-assets/optimizer-skills/drift-analysis/SKILL.md +1 -1
  89. package/agent-assets/optimizer-skills/skill-curation/SKILL.md +2 -2
  90. package/agent-assets/skills/agent-actions/SKILL.md +122 -0
  91. package/agent-assets/skills/attach/SKILL.md +1 -2
  92. package/agent-assets/skills/context/SKILL.md +36 -454
  93. package/agent-assets/skills/context/references/api.md +220 -0
  94. package/agent-assets/skills/context/references/required-frontmatter.md +73 -0
  95. package/agent-assets/skills/context/references/snapshot-files.md +103 -0
  96. package/agent-assets/skills/context/seeds/file-responsibilities.seed.json +1 -1
  97. package/agent-assets/skills/docs-search/SKILL.md +13 -13
  98. package/agent-assets/skills/external-services/SKILL.delegated.claude.md +5 -7
  99. package/agent-assets/skills/external-services/SKILL.delegated.codex.md +5 -7
  100. package/agent-assets/skills/external-services/SKILL.delegated.gemini.md +5 -7
  101. package/agent-assets/skills/external-services/SKILL.md +6 -259
  102. package/agent-assets/skills/external-services/SKILL.native.claude.md +1 -2
  103. package/agent-assets/skills/external-services/SKILL.native.codex.md +1 -2
  104. package/agent-assets/skills/external-services/SKILL.native.gemini.md +1 -2
  105. package/agent-assets/skills/external-services/references/calendar-apple.md +97 -0
  106. package/agent-assets/skills/external-services/references/calendar-google.md +72 -0
  107. package/agent-assets/skills/external-services/references/calendar-outlook.md +36 -0
  108. package/agent-assets/skills/external-services/references/github.md +17 -0
  109. package/agent-assets/skills/external-services/references/obsidian.md +49 -0
  110. package/agent-assets/skills/external-services/references/skills-crud.md +27 -0
  111. package/agent-assets/skills/gmail-lifestyle/SKILL.md +224 -0
  112. package/agent-assets/skills/gmail-lifestyle/references/receipts-api.md +93 -0
  113. package/agent-assets/skills/gmail-lifestyle/references/travel-bookings-api.md +75 -0
  114. package/agent-assets/skills/gmail-lifestyle/references/travel-time-api.md +59 -0
  115. package/agent-assets/skills/mail/SKILL.delegated.claude.md +1 -1
  116. package/agent-assets/skills/mail/SKILL.delegated.codex.md +1 -1
  117. package/agent-assets/skills/mail/SKILL.delegated.gemini.md +1 -1
  118. package/agent-assets/skills/mail/SKILL.md +9 -114
  119. package/agent-assets/skills/mail/SKILL.native.claude.md +1 -1
  120. package/agent-assets/skills/mail/SKILL.native.codex.md +1 -1
  121. package/agent-assets/skills/mail/SKILL.native.gemini.md +1 -1
  122. package/agent-assets/skills/mail/references/api.md +108 -0
  123. package/agent-assets/skills/mail/references/examples.md +70 -0
  124. package/agent-assets/skills/mail/references/providers.md +8 -8
  125. package/agent-assets/skills/managed-tasks/SKILL.md +472 -0
  126. package/agent-assets/skills/managed-tasks/references/errors.md +70 -0
  127. package/agent-assets/skills/managed-tasks/references/output-path.md +75 -0
  128. package/agent-assets/skills/managed-tasks/references/recurrence-rule.md +86 -0
  129. package/agent-assets/skills/management-policy/SKILL.md +33 -105
  130. package/agent-assets/skills/management-policy/references/policy-workflow.md +101 -0
  131. package/agent-assets/skills/notify/SKILL.md +6 -78
  132. package/agent-assets/skills/notify/references/priority.md +60 -0
  133. package/agent-assets/skills/notion/SKILL.delegated.claude.md +1 -1
  134. package/agent-assets/skills/notion/SKILL.delegated.codex.md +1 -1
  135. package/agent-assets/skills/notion/SKILL.delegated.gemini.md +1 -1
  136. package/agent-assets/skills/notion/SKILL.md +6 -10
  137. package/agent-assets/skills/notion/SKILL.native.claude.md +1 -2
  138. package/agent-assets/skills/notion/SKILL.native.codex.md +1 -2
  139. package/agent-assets/skills/notion/SKILL.native.gemini.md +1 -2
  140. package/agent-assets/skills/observations/SKILL.md +1 -6
  141. package/agent-assets/skills/project-doc/SKILL.md +1 -5
  142. package/agent-assets/skills/reading/SKILL.md +2 -2
  143. package/agent-assets/skills/roadmap/SKILL.md +37 -135
  144. package/agent-assets/skills/roadmap/references/api.md +100 -0
  145. package/agent-assets/skills/roadmap/references/cross-check.md +73 -0
  146. package/agent-assets/skills/roadmap/references/migration.md +56 -0
  147. package/agent-assets/skills/roadmap/references/preparation-timeline.md +2 -2
  148. package/agent-assets/skills/schedule/SKILL.md +52 -88
  149. package/agent-assets/skills/schedule/references/batch.md +93 -0
  150. package/agent-assets/skills/schedule/references/errors.md +214 -0
  151. package/agent-assets/skills/schedule/references/model-selection.md +96 -0
  152. package/agent-assets/skills/schedule/references/recurrence-rule.md +86 -0
  153. package/agent-assets/skills/schedule/references/recurring.md +185 -0
  154. package/agent-assets/skills/scheduled-managed-task/SKILL.md +13 -15
  155. package/agent-assets/skills/today/SKILL.md +27 -57
  156. package/agent-assets/skills/today/references/agent-plan-lifecycle.md +113 -0
  157. package/agent-assets/skills/user-interview/SKILL.md +12 -59
  158. package/agent-assets/skills/user-interview/references/op-briefing.md +51 -0
  159. package/agent-assets/skills/user-interview/references/op-morning.md +59 -0
  160. package/agent-assets/skills/user-interview/references/sweep-and-fallback.md +1 -1
  161. package/agent-assets/skills/user-profile/SKILL.md +43 -63
  162. package/agent-assets/skills/user-profile/references/character-preferences.md +83 -0
  163. package/agent-assets/skills/user-profile/seeds/topic-files.seed.json +28 -0
  164. package/agent-assets/skills/wiki/wiki-ask/SKILL.md +0 -1
  165. package/agent-assets/skills/wiki/wiki-compile/SKILL.md +0 -1
  166. package/agent-assets/skills/wiki/wiki-connect/SKILL.md +0 -1
  167. package/agent-assets/skills/wiki/wiki-graduate/SKILL.md +0 -1
  168. package/agent-assets/skills/wiki/wiki-ingest/SKILL.md +0 -1
  169. package/agent-assets/skills/wiki/wiki-lint/SKILL.md +0 -1
  170. package/agent-assets/skills/wiki/wiki-trace/SKILL.md +0 -1
  171. package/agent-assets/skills/wiki/wiki-vault-rules/SKILL.md +0 -1
  172. package/agent-assets/system-prompts/routine-fetch-window.md +68 -0
  173. package/agent-assets/system-prompts/skill-index-instruction.md +26 -0
  174. package/agent-assets/task-flows/_partials/calendar-acquire.google_calendar.md +18 -11
  175. package/agent-assets/task-flows/_partials/calendar-acquire.outlook_calendar.md +16 -9
  176. package/agent-assets/task-flows/_partials/capture-user-info.md +24 -0
  177. package/agent-assets/task-flows/_partials/confirm-subflow.md +68 -0
  178. package/agent-assets/task-flows/_partials/dm-intent.long-horizon.md +35 -0
  179. package/agent-assets/task-flows/_partials/dm-intent.project.md +391 -0
  180. package/agent-assets/task-flows/_partials/mail-acquire.gmail.md +20 -11
  181. package/agent-assets/task-flows/_partials/mail-acquire.outlook_mail.md +17 -9
  182. package/agent-assets/task-flows/_partials/notion-acquire.notion.md +18 -12
  183. package/agent-assets/task-flows/knowledge.import.md +1 -1
  184. package/agent-assets/task-flows/message.received.dm.md +13 -15
  185. package/agent-assets/task-flows/message.received.dm_first.md +10 -14
  186. package/agent-assets/task-flows/routine.custom.md +3 -1
  187. package/agent-assets/task-flows/routine.evening_review.md +39 -163
  188. package/agent-assets/task-flows/routine.fetch_window.md +17 -12
  189. package/agent-assets/task-flows/routine.hourly_check.md +16 -8
  190. package/agent-assets/task-flows/routine.hourly_check.triage.md +1 -1
  191. package/agent-assets/task-flows/routine.monthly_review.md +46 -4
  192. package/agent-assets/task-flows/routine.morning_routine_journal.md +113 -0
  193. package/agent-assets/task-flows/routine.morning_routine_today.md +673 -0
  194. package/agent-assets/task-flows/routine.roadmap_refresh.md +60 -15
  195. package/agent-assets/task-flows/routine.user_profile_sweep.md +9 -10
  196. package/agent-assets/task-flows/routine.weekly_review.md +285 -70
  197. package/agent-assets/task-flows/scheduled.dm.md +8 -8
  198. package/agent-assets/task-flows/scheduled.task.md +5 -5
  199. package/agent-assets/task-flows/setup.initial.md +165 -245
  200. package/agent-assets/task-flows/wiki.ingest_url.md +1 -1
  201. package/agent-assets/templates/_manifest.json +7 -7
  202. package/agent-assets/templates/dossiers/_index.md +1 -1
  203. package/agent-assets/templates/rules/journal-format.md +145 -38
  204. package/agent-assets/templates/user/expertise.md +4 -2
  205. package/agent-assets/templates/user/goals.md +4 -2
  206. package/agent-assets/templates/user/people.md +8 -2
  207. package/agent-assets/templates/user/personal.md +4 -2
  208. package/agent-assets/templates/user/work.md +4 -2
  209. package/bin/aitne.mjs +8 -1
  210. package/package.json +4 -4
  211. package/scripts/commands/doctor.mjs +52 -0
  212. package/scripts/commands/run-now.mjs +202 -0
  213. package/scripts/commands/verify.mjs +264 -0
  214. package/agent-assets/docs/features/routines/monthly-review.md +0 -65
  215. package/agent-assets/skills/management-task-modify/SKILL.md +0 -203
  216. package/agent-assets/skills/management-task-register/SKILL.md +0 -330
  217. package/agent-assets/skills/management-task-stop/SKILL.md +0 -166
  218. package/agent-assets/skills/receipts/SKILL.md +0 -134
  219. package/agent-assets/skills/travel/SKILL.md +0 -132
  220. package/agent-assets/skills/travel-time/SKILL.md +0 -158
  221. package/agent-assets/task-flows/routine.morning_routine.md +0 -322
  222. package/agent-assets/task-flows/routine.morning_routine_initial.md +0 -204
package/README.md CHANGED
@@ -2,1216 +2,382 @@
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 gets smarter about *you* every day.**
5
+ **A local-first, proactive personal AI agent.**
6
+ A long-running TypeScript daemon watches your calendar, mail, repos, and notes — and acts on its own. Your AI of choice (Claude / Codex / Gemini; OpenCode coming soon) is the brain; Aitne is the nervous system.
8
7
 
9
8
  [![npm version](https://img.shields.io/npm/v/@aitne-sh/aitne.svg)](https://www.npmjs.com/package/@aitne-sh/aitne)
10
9
  [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](./LICENSE)
11
10
  [![Node](https://img.shields.io/badge/node-%E2%89%A522-brightgreen)](https://nodejs.org)
11
+ [![Status](https://img.shields.io/badge/status-pre--1.0-orange)](#status)
12
12
  [![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)
14
13
 
15
14
  ```bash
16
15
  npm install -g @aitne-sh/aitne@latest
17
16
  aitne start
18
17
  ```
19
18
 
20
- </div>
21
-
22
- ---
23
-
24
- ## The concept
25
-
26
- ChatGPT and Claude are *reactive* — they wait for you to type. **Aitne is proactive.** It's a tiny daemon that lives on your laptop, watches your calendar, mail, repos 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 a Markdown journal you actually own.
27
-
28
- ```mermaid
29
- flowchart LR
30
- subgraph WORLD["Your digital life"]
31
- direction TB
32
- W1["💬 Messages"]
33
- W2["📅 Calendar"]
34
- W3["📧 Mail"]
35
- W4["📦 Git"]
36
- W5["📓 Notes"]
37
- end
38
-
39
- subgraph LOCAL["💻 Your laptop — Aitne"]
40
- direction TB
41
- DAEMON["⚙️ Daemon<br/>(always-on)"]
42
- BRAIN["🧠 Your AI<br/>(Claude · Codex · Gemini)"]
43
- MEMORY["📝 Markdown memory<br/>(plain files you own)"]
44
- DAEMON <--> BRAIN
45
- BRAIN <--> MEMORY
46
- DAEMON <--> MEMORY
47
- end
48
-
49
- YOU["📱 You<br/>Slack · Telegram · Discord<br/>WhatsApp · Web chat"]
50
-
51
- WORLD <--> DAEMON
52
- DAEMON <--> YOU
53
- ```
54
-
55
- Three things make Aitne different:
19
+ ![Aitne setup and dashboard walkthrough](./docs/assets/aitne-demo.gif)
56
20
 
57
- | | |
58
- |---|---|
59
- | 🌱 **It compounds.** | Every day, every DM, every reaction emoji shapes the agent's understanding of *you*. After a month it sounds like you. After a year it knows what you forgot last quarter. |
60
- | 🗣️ **You manage it in plain language.** | "Don't ping me before 9am." "Remember my partner's birthday." "Stop running hourly checks on weekends." Aitne maps your words to settings, schedules, and profile updates — automatically. |
61
- | 🔌 **It rides on what you already have.** | Your Claude Code skills, your Codex config, your Gemini settings, your custom MCP servers — Aitne loads them into every session. No re-configuring. No re-buying. |
21
+ </div>
62
22
 
63
23
  ---
64
24
 
65
- ## A day with Aitne
66
-
67
- > A real walkthrough of one user's Tuesday.
68
-
69
- **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.
70
-
71
- **07:30 — Slack DM lands as you grab coffee:**
72
- > Good morning. 3 things to flag:
73
- > • **Sarah's PR (#487)** needs your review — she's been blocked since Friday
74
- > • **Sales call with Acme @ 14:00** — leaving home by 13:25 (12-min commute)
75
- > • **IRS reminder from Friday** — deadline is *tomorrow*
76
- >
77
- > Today: 2 meetings, 4 tasks. Light day. Reply `end` to close, or just talk to me.
78
-
79
- **09:15 — You DM Aitne:** *"Tell Sarah I'll review by 11. And book lunch with Mark on Thursday — somewhere near his office."*
80
- 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. Done.
81
-
82
- **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 `Agent Notes` on `today.md` and DMs once: *"⚠️ Heads up — `auth.ts:84` was just changed by @Yuki. Want me to summarize the diff?"*
83
-
84
- **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`."*
85
-
86
- **15:45 — You forward a hotel confirmation email to Aitne.** It extracts dates, address, 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.
87
-
88
- **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.
89
-
90
- **Friday 18:30 — Weekly review.**
91
- > 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?
25
+ ## Why Aitne
92
26
 
93
- That's a normal Tuesday. The point isn't any single trick it's that **all of this happens without you opening an app.**
27
+ - **Proactive, not reactive.** Drafts your morning plan at 04:00. Surfaces the email you forgot. Nudges you about the PR your teammate is waiting on. You don't have to open an app.
28
+ - **Local-first.** Daemon binds to `127.0.0.1` only. Secrets in the OS keychain. Memory in plain Markdown under `~/.personal-agent/`. No telemetry, no cloud state.
29
+ - **Multi-backend.** Bring Claude Code, Codex CLI, or Gemini CLI — or all three. Per-task tier routing decides which one runs for each kind of work. (OpenCode is wired internally and ships as preview-only in this release.)
30
+ - **Compounds.** Every DM, every correction shapes how Aitne thinks about you. The model doesn't change — the context does.
94
31
 
95
32
  ---
96
33
 
97
- ## What you can do with it
98
-
99
- A non-exhaustive list. Click any group to expand.
34
+ ## Highlights
100
35
 
101
36
  <details>
102
- <summary><b>📅 Time, calendar, travel</b></summary>
37
+ <summary><b>Time, calendar, travel</b></summary>
103
38
 
104
39
  - Auto-generate `today.md` every morning with your real schedule
105
- - 15-min approach reminders for every calendar event, with travel time pre-computed via Google Maps
106
- - "Find me a 30-min slot with Sarah and Mark next week" — Aitne checks freebusy across calendars
107
- - Auto-extract flight, hotel, restaurant, train confirmations from email into a structured travel timeline
108
- - Surface tomorrow's itinerary in the morning briefing
109
- - "What time should I leave for my next meeting?" — answers with live traffic
40
+ - 15-min approach reminders for every event, with travel time pre-computed via Google Maps
41
+ - Find a 30-min slot across multiple calendars — Aitne checks freebusy and replies with options
42
+ - Auto-extract flight, hotel, train confirmations from email into a structured travel timeline
110
43
  </details>
111
44
 
112
45
  <details>
113
- <summary><b>📧 Mail across all your accounts</b></summary>
46
+ <summary><b>Mail across every account</b></summary>
114
47
 
115
48
  - Unified inbox across Gmail, Outlook, Yahoo, and iCloud (OAuth or app-password / IMAP)
116
- - Local FTS5 full-text search across **every** account ("find emails about acme last quarter")
117
- - Auto-classify, label, and archive (Gmail) full filter rules across all providers
118
- - Draft replies in your style ("draft a polite no to this conference invite")
119
- - Forwarded receipts → auto-extracted to a structured `receipts` table tagged with category, vendor, amount
120
- - Daily digest of unread mail in the morning briefing
49
+ - Local FTS5 full-text search across every account
50
+ - Auto-classify, label, archive, and draft replies in your style
51
+ - Forwarded receipts auto-extract into a structured receipts table
121
52
  - IMAP IDLE for near-real-time delivery; PDF/image attachments are extracted and indexed
122
53
  </details>
123
54
 
124
55
  <details>
125
- <summary><b>📓 Knowledge: Obsidian, Notion, your own notes</b></summary>
56
+ <summary><b>Knowledge: Obsidian, Notion, your own wiki</b></summary>
126
57
 
127
58
  - Use your existing Obsidian vault as Aitne's primary memory store — wiki-links keep working
128
- - Append to your daily note via the official Obsidian CLI (`obsidian create` / `daily:append`)
129
- - Full Notion page & database CRUD — query, create, update, archive
130
- - "Summarize what I wrote about this project last month" across vault layers
131
- - Auto-link new notes to existing concepts ("this is related to your `agent-architecture.md` from March")
132
- </details>
133
-
134
- <details>
135
- <summary><b>🧠 Build a personal wiki from anything you DM</b></summary>
136
-
137
- - Send a URL with `!ingest https://...` — the agent fetches, summarises, and saves a raw note in `10_raw/`
138
- - Run `!compile` to synthesise raw notes into linked wiki articles in `20_wiki/` with an auto-maintained `_index.md`
139
- - `!compile --preview` shows added / modified / unchanged pages plus cost and ETA *before* you spend tokens
140
- - `!compile full` rebuilds everything — cost-gated, with a dashboard approval queue and an optional git pre-compile snapshot for external vaults
59
+ - Append to your daily note via the official Obsidian CLI
60
+ - Full Notion page and database CRUD
61
+ - DM `!ingest <url>` to capture a source, `!compile` to synthesize raw notes into linked wiki articles
141
62
  - `!ask <question>` answers from your own wiki and writes the cited reply to `30_outputs/`
142
- - `!lint` audits for orphans, broken links, schema drift, and taxonomy candidates → dated health report
143
- - `!trace <topic>` and `!connect A B` reconstruct how an idea evolved and find shared structure across domains
144
- - Run multiple workspaces (`!ingest @research ...`, `!compile @ops full`) — the default workspace falls through when the `@` token is omitted
145
- - Workspaces can be internal (`~/.personal-agent/wiki/`) or an external Obsidian vault you already keep
63
+ - `!lint`, `!trace`, `!connect` for vault health, idea evolution, cross-domain bridges
64
+ - Multiple workspaces (`!ingest @research ...`) internal or any number of external Obsidian vaults
146
65
  </details>
147
66
 
148
67
  <details>
149
- <summary><b>📦 Code, Git, GitHub</b></summary>
68
+ <summary><b>Code, Git, GitHub</b></summary>
150
69
 
151
70
  - Local Git: `git log`, `git diff`, `git show` exposed via daemon proxy
152
- - GitHub: PR lists, comments, issues, webhook receivers (HMAC-verified)
71
+ - GitHub: PR lists, comments, issues, webhook receivers (HMAC-SHA256 verified)
153
72
  - Per-repo cron triggers — "every Monday at 09:00, summarize merged PRs into `projects/<repo>.md`"
154
- - "Why did this build break?" — agent reads CI status + diff + traces
155
73
  - Auto-detect when a coworker modified a file you're about to ship
156
74
  - Unified Repositories: one row pairs a local clone with a GitHub remote; the doctor flags drift
157
75
  </details>
158
76
 
159
77
  <details>
160
- <summary><b>✅ Tasks, projects, life admin</b></summary>
161
-
162
- - Unified task view across GitHub Issues, mail-derived TODOs, and your own `today.md`
163
- - Per-project Markdown files with auto-maintained status, deadlines, and people
164
- - Long-term roadmap with quarterly milestones
165
- - "Carry this to tomorrow" — handoff between `today.md`, `daily/`, `weekly/`, `monthly/`
166
- - Auto-detect recurring chores and set up reminders
167
- </details>
168
-
169
- <details>
170
- <summary><b>📚 Reading, lifestyle, voice</b></summary>
171
-
172
- - Import Kindle highlights, build a reading-taste profile
173
- - Friday book recommendation DM based on your taste
174
- - Receipts auto-organized by month into your vault
175
- - Travel itinerary roll-up surfaced before each trip
176
- - **Voice attachments** — send a voice memo, get a Whisper-transcribed message (opt-in, runs locally)
177
- </details>
178
-
179
- <details>
180
- <summary><b>🤖 Self-management & automation</b></summary>
181
-
182
- - Tell it to remember things in plain language ("I'm allergic to nuts")
183
- - Tell it to forget things ("delete that note about my old job")
184
- - Tell it to change schedules ("don't run hourly checks on weekends")
185
- - Tell it to change tone ("be more concise, no preamble")
186
- - Custom routines on any cron schedule with free-form prompts
187
- - Self-scheduled wakeups — agent decides when to check on something
78
+ <summary><b>Self-management via natural language</b></summary>
79
+
80
+ - "Don't run hourly checks on weekends" patches the cron window
81
+ - "Remember my partner's birthday is March 14" appends to `user/profile.md`
82
+ - "I prefer concise replies — no preamble" — updates the agent's `character` field
83
+ - "Email me a summary every Friday at 5pm" — creates a recurring schedule
84
+ - "Switch to Codex for code reviews" — flips the per-process backend mapping
85
+ - Every change is journaled to `agent_actions` — audit anything via `aitne audit`
188
86
  </details>
189
87
 
190
88
  <details>
191
- <summary><b>🔧 Run your own tools</b></summary>
89
+ <summary><b>Bring your own toolkit</b></summary>
192
90
 
193
- - Bring your own MCP servers they materialize into every session
194
- - Bring your own Claude Code skills they show up wherever the agent runs
195
- - Bring your own Codex / Gemini config Aitne reads it on session init
196
- - Custom skills via the `/api/skills` endpoint drop a `SKILL.md` and it's live
91
+ - Your `~/.claude/skills`, `~/.codex/config.toml`, and `~/.gemini/` settings are loaded on session init (`~/.opencode/` is recognised but its executor is coming soon)
92
+ - Custom MCP servers materialize into every per-session workdir
93
+ - Aitne layers its persona on top of your existing config nothing gets overwritten
94
+ - Voice attachments opt-in local Whisper transcription via `ffmpeg-static` + `@huggingface/transformers`
197
95
  </details>
198
96
 
199
97
  ---
200
98
 
201
- ## How Aitne accumulates knowledge about you
202
-
203
- Every signal Aitne sees flows through the same pipeline: capture → short-term → long-term → injected back into every future conversation.
204
-
205
- ```mermaid
206
- flowchart TB
207
- subgraph SOURCES["📥 Sources"]
208
- direction LR
209
- S1["💬 messages"]
210
- S2["📅 calendar"]
211
- S3["📧 mail"]
212
- S4["📦 git/github"]
213
- S5["📓 obsidian/notion"]
214
- S6["✋ you editing<br/>files by hand"]
215
- end
216
-
217
- OB["⚙️ Observers & adapters<br/>(WebSocket · IDLE · polling)"]
218
-
219
- subgraph SHORT["🟡 Short-term memory"]
220
- direction LR
221
- ST1[("SQLite<br/>observations<br/>messages<br/>actions")]
222
- ST2["today.md<br/>(working view,<br/>always injected)"]
223
- end
224
-
225
- subgraph LONG["🟢 Long-term memory (Markdown)"]
226
- direction TB
227
- LT1["user/profile.md<br/>work · expertise<br/>people · goals"]
228
- LT2["projects/*.md<br/>roadmap.md"]
229
- LT3["daily/YYYY-MM-DD.md<br/>↓<br/>weekly/YYYY-Www.md<br/>↓<br/>monthly/YYYY-MM.md"]
230
- end
231
-
232
- AI(("🧠 Next session<br/>(any backend,<br/>any platform)"))
233
-
234
- SOURCES --> OB
235
- OB --> ST1
236
- ST1 -- "hourly check<br/>aggregates" --> ST2
237
- ST2 -- "evening review<br/>condenses" --> LT3
238
- ST2 -- "patterns identified" --> LT1
239
- ST2 -- "project-tagged<br/>updates" --> LT2
240
- LT3 -- "Friday roll-up" --> LT3
241
- LT3 -- "month-end roll-up" --> LT3
242
-
243
- LT1 -. "always injected" .-> AI
244
- ST2 -. "always injected" .-> AI
245
- LT2 -. "morning + evening" .-> AI
246
- LT3 -. "recalled when relevant" .-> AI
247
- ```
248
-
249
- **Key properties:**
250
-
251
- - **Plain Markdown.** You can `cat`, `vim`, `obsidian`, or `cp` any of these files. There is no proprietary format. Uninstall and the memory is still yours.
252
- - **Layered retention.** `today.md` rotates to `yesterday.md` once per agent-day. `daily/` files are persistent by design (synthesized journal). `weekly/` is pruned after 1 year. `agent/journal.md` keeps the most recent ~12 weekly + 24 monthly sections. SQLite-backed history (messages, agent_actions) is pruned after 90 days.
253
- - **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."
254
- - **You can always intervene.** Edit any file by hand. The agent picks up your changes on the next routine.
255
-
256
- ---
257
-
258
- ## Compounding intelligence
259
-
260
- The longer you use it, the better it gets. Not because the model improves — because *the context does*.
261
-
262
- ```mermaid
263
- graph LR
264
- D1["📆 <b>Day 1</b><br/>Empty profile<br/>Generic answers<br/>Asks who's Sarah"]
265
- W1["📅 <b>Week 1</b><br/>Calendar synced<br/>People dictionary<br/>Mail patterns ID'd"]
266
- M1["🌙 <b>Month 1</b><br/>Profile auto-filled<br/>Tone matches you<br/>Recurring tasks tracked"]
267
- M3["📈 <b>Month 3</b><br/>Full project map<br/>Knows your peers<br/>Proactive nudges"]
268
- Y1["🎯 <b>Year 1</b><br/>Anticipates needs<br/>Recalls Q1 context<br/>You can't go back"]
269
-
270
- D1 -->|implicit feedback| W1
271
- W1 -->|evening review| M1
272
- M1 -->|project tracking| M3
273
- M3 -->|long-term memory| Y1
274
-
275
- style D1 fill:#fef3c7,stroke:#f59e0b,stroke-width:2px
276
- style W1 fill:#fef3c7,stroke:#f59e0b,stroke-width:2px
277
- style M1 fill:#dbeafe,stroke:#3b82f6,stroke-width:2px
278
- style M3 fill:#dcfce7,stroke:#22c55e,stroke-width:2px
279
- style Y1 fill:#dcfce7,stroke:#22c55e,stroke-width:3px
280
- ```
281
-
282
- ### The implicit feedback loop
283
-
284
- Every interaction shapes Aitne's understanding of you, *implicitly*. No buttons. No surveys. Just talk to it.
285
-
286
- 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 the raw signals on the next pass:
287
-
288
- - **Tone** → updates the `character` runtime-config field, applied to every backend's system prompt.
289
- - **Attribute** → updates `user/profile.md` Learned Context.
290
-
291
- The line between the two is enforced server-side: a signal like "I prefer concise replies" is *tone* (goes to character). A signal like "my flight is on Friday" is *attribute* (goes to profile).
292
-
293
- ---
294
-
295
- ## Talk to it like a person
296
-
297
- 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.**
298
-
299
- | You say (in any language) | Aitne does |
300
- |---|---|
301
- | *"Don't run the hourly check on weekends"* | Patches `hourlyCheckActiveStartHour/EndHour` per weekday |
302
- | *"Stop pinging me about Slack after 9pm"* | Updates `quietHoursStart/End` and per-platform notify policy |
303
- | *"Always check Sarah's calendar before scheduling with her"* | Adds a rule to `rules/management.md` |
304
- | *"Remember my partner's birthday is March 14"* | Appends to `user/profile.md` Learned Context |
305
- | *"I prefer concise replies — no preamble"* | Updates `character` field |
306
- | *"Move all my React work into one project file"* | Refactors `projects/*.md` and re-indexes |
307
- | *"Cancel tomorrow's morning briefing"* | Removes the agent_schedule row |
308
- | *"Forget what I said about my old job"* | Surgically edits `user/work.md` |
309
- | *"Email me a summary every Friday at 5pm"* | Creates a recurring schedule with a free-form prompt |
310
- | *"Switch to Codex for code reviews from now on"* | Updates `process_backend_config` mapping |
311
-
312
- Behind the scenes, the agent maps natural language to one of:
313
-
314
- - `PATCH /api/config` — runtime config (~100 keys)
315
- - `PUT /api/context/*` — Markdown memory (locked, validated, snapshotted)
316
- - `DELETE /api/schedule/:id` / `POST /api/recurring-schedules` — scheduling
317
- - `PATCH /api/config/character` — tone
318
- - `POST /api/triggers` — cron-driven custom routines
319
-
320
- Every change is journaled to `agent_actions` with `source_kind=user_directive`. Audit anything you don't recognize via `aitne audit`.
321
-
322
- ---
323
-
324
- ## Bring your own harness (BYOH)
325
-
326
- Already invested in Claude Code skills? Custom MCP servers? A polished `~/.codex/config.toml`? **Aitne loads them all.** No re-configuring. No re-buying. No vendor lock.
327
-
328
- ```mermaid
329
- flowchart LR
330
- subgraph YOUR["🔵 Your existing setup"]
331
- direction TB
332
- Y1["~/.claude/<br/>· skills<br/>· slash commands<br/>· MCP servers"]
333
- Y2["~/.codex/<br/>· config<br/>· plugins"]
334
- Y3["~/.gemini/<br/>· config<br/>· tools"]
335
- Y4["Custom MCP servers<br/>(your data sources,<br/>internal tools)"]
336
- end
337
-
338
- subgraph AITNE_SKILLS["🟡 Aitne's built-ins"]
339
- direction TB
340
- A1["23 skills<br/>(Calendar, Mail, Notion,<br/>Roadmap, Schedule, ...)"]
341
- A2["Per-event task flows<br/>(morning, hourly,<br/>DM, mention, ...)"]
342
- A3["Persona MD<br/>(per-backend)"]
343
- end
344
-
345
- SESS["📦 Per-session workdir<br/>~/.personal-agent/agent-sessions/&lt;id&gt;/<br/>CLAUDE.md · AGENTS.md · GEMINI.md<br/>+ .claude/skills/ · .codex/skills/<br/>+ MCP config materialized"]
346
-
347
- RUN["🚀 Backend runs with<br/><b>your full toolkit + Aitne's</b>"]
348
-
349
- YOUR --> SESS
350
- AITNE_SKILLS --> SESS
351
- SESS --> RUN
352
-
353
- style YOUR fill:#dbeafe,stroke:#3b82f6
354
- style AITNE_SKILLS fill:#fef3c7,stroke:#f59e0b
355
- style SESS fill:#dcfce7,stroke:#22c55e
356
- style RUN fill:#fae8ff,stroke:#a855f7
357
- ```
358
-
359
- | You already have… | In Aitne it just works |
360
- |---|---|
361
- | A Claude Code MCP server connected to your company's internal API | Every Aitne session can use it. No code changes. |
362
- | Custom slash commands you built for `/review` or `/test` | They're available in every Aitne-spawned Claude Code session. |
363
- | A polished `AGENTS.md` for your Codex setup | Aitne layers its persona on top, keeping your config intact. |
364
- | Your Gemini auth + project preferences | Inherited automatically. |
365
- | Skills you wrote for `~/.claude/skills/` | Imported on demand. |
366
-
367
- **The growth flywheel:** Claude Code / Codex / Gemini ship a new connector → Aitne picks it up on next session → you get it for free.
368
-
369
- ---
370
-
371
- ## Multi-platform, multi-app
372
-
373
- One agent, every surface.
374
-
375
- ```mermaid
376
- flowchart TB
377
- subgraph IN["📥 Input surfaces"]
378
- direction LR
379
- I1["💬 Slack DM/mention"]
380
- I2["📲 Telegram"]
381
- I3["🎮 Discord"]
382
- I4["💚 WhatsApp"]
383
- I5["🌐 Web dashboard chat"]
384
- I6["✋ Manual file edits"]
385
- end
386
-
387
- subgraph SVC["🔌 Connected apps"]
388
- direction TB
389
- SV1["📅 Google Calendar · Outlook Calendar"]
390
- SV2["📧 Gmail · Outlook · Yahoo · iCloud"]
391
- SV3["📓 Notion · Obsidian"]
392
- SV4["📦 GitHub · local Git"]
393
- SV5["🗺️ Google Maps"]
394
- SV6["🔧 Custom MCP servers"]
395
- end
396
-
397
- AITNE(("🧠 Aitne"))
398
-
399
- IN --> AITNE
400
- AITNE <--> SVC
401
-
402
- subgraph OUT["📤 Output surfaces"]
403
- direction LR
404
- O1["💬 Same DM channel"]
405
- O2["📋 today.md<br/>updates"]
406
- O3["📅 Calendar<br/>actions"]
407
- O4["📧 Drafted emails"]
408
- O5["🔔 Proactive<br/>notifications"]
409
- end
410
-
411
- AITNE --> OUT
412
- ```
413
-
414
- **One conversation, every channel.** 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.
415
-
416
- ---
417
-
418
- ## Highlights
419
-
420
- | | |
421
- |---|---|
422
- | 🌅 **Proactive routines** | Morning · evening · weekly · monthly · hourly observation sweep |
423
- | 💬 **Reactive on every chat platform** | Slack · Telegram · Discord · WhatsApp · Web dashboard |
424
- | 🧠 **Multi-backend brain** | Claude (Opus 4.7 / Sonnet 4.6 / Haiku 4.5) · Codex CLI · Gemini CLI |
425
- | 📝 **MD-centric memory** | Plain Markdown you own — `today.md` · `roadmap.md` · `projects/*` · `daily/` · `weekly/` · `monthly/` |
426
- | 🔌 **23 built-in skills** | Calendar, mail, Notion, Obsidian, schedule, roadmap, receipts, travel, reading, voice, … |
427
- | 🧠 **Personal wiki builder** | DM `!ingest <url>` to capture, `!compile` to synthesise, `!ask` / `!lint` / `!trace` / `!connect` to operate — across one or many workspaces |
428
- | 🔁 **4-mode integration framework** | `direct` (daemon polls) · `delegated` (backend's connector) · `native` (main backend MCP on demand) · `disabled` |
429
- | 🛡️ **Four-layer safety** | SDK allowlist · PreToolUse hooks · daemon API risk tiers · absolute-block layer that holds even in Allow mode |
430
- | 🪪 **Local-first & private** | Binds to `127.0.0.1`. No telemetry. Secrets in OS Keychain. Zero cloud state. |
431
- | 🧰 **Production tooling** | Background daemon · `aitne doctor` · cost analytics · auth health monitor with auto-recovery |
432
- | 🌍 **Speak any language** | The LLM handles it — talk to Aitne in Japanese, English, German, anything. `primaryLanguage` config nudges its outputs too. |
99
+ ## Status
433
100
 
434
- ---
435
-
436
- ## Table of contents
437
-
438
- 1. [Quick start](#quick-start)
439
- 2. [Setup guide](#setup-guide)
440
- 3. [CLI reference](#cli-reference)
441
- 4. [Architecture](#architecture)
442
- 5. [Memory layout](#memory-layout)
443
- 6. [Multi-backend](#multi-backend)
444
- 7. [Integrations](#integrations)
445
- 8. [Safety model](#safety-model)
446
- 9. [Cost & quotas](#cost--quotas)
447
- 10. [Configuration](#configuration)
448
- 11. [Platform support](#platform-support)
449
- 12. [Troubleshooting](#troubleshooting)
450
- 13. [Development](#development)
451
- 14. [FAQ](#faq)
452
- 15. [License](#license)
101
+ Pre-1.0. APIs, schema, and dashboard surfaces may still change. SQLite migrations are deliberately destructive ("clean reinstall, no data migration"); Markdown memory in `context/` is forward-compatible and safe to keep across upgrades.
453
102
 
454
103
  ---
455
104
 
456
- ## Quick start
457
-
458
- ### 1. Install
105
+ ## Install
459
106
 
460
107
  ```bash
461
108
  npm install -g @aitne-sh/aitne@latest
109
+ aitne start
462
110
  ```
463
111
 
464
- Installs the `aitne` CLI globally with the daemon, dashboard, and built-in agent assets.
465
-
466
- ### 2. Bring at least one AI backend
467
-
468
- Aitne is the nervous system; you bring the brain. Install **at least one** of:
469
-
470
- ```bash
471
- # Claude Code (recommended — full features, server-side advisor support)
472
- npm install -g @anthropic-ai/claude-code
473
-
474
- # OpenAI Codex CLI
475
- npm install -g @openai/codex
112
+ Then bring at least one AI backend. The documented operating mode is **provider API keys** — paste them into the setup wizard (they land in the OS keychain, never `.env`):
476
113
 
477
- # Google Gemini CLI
478
- npm install -g @google/gemini-cli
479
- ```
114
+ | Backend | Install | Auth |
115
+ |---|---|---|
116
+ | **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-driven sessions) |
117
+ | **OpenAI Codex CLI** | `npm install -g @openai/codex` | `OPENAI_API_KEY` in the wizard, or `codex login --device-auth` as fallback |
118
+ | **Google Gemini CLI** | `npm install -g @google/gemini-cli` | `GEMINI_API_KEY` / `GOOGLE_API_KEY`, or OAuth on first use |
119
+ | **OpenCode** (sst/opencode) | _coming soon_ — registered for preview; setup will open when the runtime executor lands | _coming soon_ |
480
120
 
481
- Login once with each CLI you intend to use Aitne auto-detects them.
121
+ The daemon listens on `:8321`, the dashboard on `:3000`. After `aitne start`, the browser opens to a 9-step setup wizard.
482
122
 
483
- ### 3. Start
123
+ ### Verify the install
484
124
 
485
125
  ```bash
486
- aitne start
126
+ aitne status # PIDs, uptime, connected platforms, today's spend
127
+ aitne doctor # 10-check install diagnostic
128
+ aitne logs -f # tail the daemon log
487
129
  ```
488
130
 
489
- The daemon (`:8321`) and dashboard (`:3000`) launch in the background and your browser opens to the setup wizard.
131
+ ### From source
490
132
 
491
- ### 4. Confirm
133
+ For contributors, or to hack on the daemon directly. Requires Node ≥ 22 and pnpm 10.x.
492
134
 
493
135
  ```bash
494
- aitne status
495
- ```
496
-
497
- ```
498
- Aitne status:
499
-
500
- Daemon: running (PID 12345)
501
- Uptime: 1m 23s
502
- API: http://127.0.0.1:8321
503
- Platforms: slack, dashboard
504
- Backends: claude
505
- Dashboard: running (PID 12346)
506
- URL: http://localhost:3000
507
-
508
- Last action: 2026-05-11T07:30:14Z (routine.morning_routine)
509
- Today: 6 action(s) · $0.043 spent
510
- Next: 2026-05-11T18:00:00Z routine.evening_review
136
+ git clone https://github.com/Aitne-sh/Aitne.git aitne
137
+ cd aitne
138
+ corepack enable
139
+ pnpm install
140
+ pnpm dev # foreground mode with full stdio
511
141
  ```
512
142
 
513
- That's it. Open `http://localhost:3000` and finish the wizard.
143
+ See [docs/setup-guide.md](docs/setup-guide.md) for the full installation walkthrough.
514
144
 
515
145
  ---
516
146
 
517
- ## Setup guide
518
-
519
- ### Prerequisites
520
-
521
- | Requirement | Version | Why |
522
- |---|---|---|
523
- | **Node.js** | ≥ 22.0.0 | Daemon runtime (LTS) |
524
- | **At least one AI backend** | — | Claude Code, Codex CLI, or Gemini CLI |
525
- | **OS Keychain** | macOS / libsecret on Linux / DPAPI on Windows | Secret storage (file-based fallback available) |
526
-
527
- ### Step 1 — Install Aitne
528
-
529
- ```bash
530
- npm install -g @aitne-sh/aitne@latest
531
- ```
532
-
533
- > Want to hack on the source? See [Development](#development).
534
-
535
- ### Step 2 — Install at least one backend CLI
536
-
537
- #### Claude Code (recommended)
538
-
539
- ```bash
540
- npm install -g @anthropic-ai/claude-code
541
- claude --version
542
- claude auth login # uses your Claude subscription
543
- ```
544
-
545
- #### OpenAI Codex CLI
546
-
547
- ```bash
548
- npm install -g @openai/codex
549
- codex --version
550
- codex login --device-auth # device-flow OAuth
551
- ```
147
+ ## How it works
552
148
 
553
- #### Google Gemini CLI
149
+ A long-running daemon receives signals from every channel you've connected, parks short-term state in SQLite, and spawns an AI session whenever it needs to think. The session reads your Markdown memory, calls a curated set of skills, and writes results back through the daemon API.
554
150
 
555
- ```bash
556
- npm install -g @google/gemini-cli
557
- gemini --version
558
- # OAuth handled automatically on first use
559
- ```
151
+ ```mermaid
152
+ flowchart LR
153
+ subgraph WORLD["Your digital life"]
154
+ direction TB
155
+ W1["Messages"]
156
+ W2["Calendar"]
157
+ W3["Mail"]
158
+ W4["Git / GitHub"]
159
+ W5["Notes"]
160
+ end
560
161
 
561
- You can install all three. Per-process tier routing lets you mix-and-match: Sonnet for routines and DMs, Haiku for delegated/polling, Codex for code-heavy work, Gemini for free-tier headroom — and Opus only on the keys that genuinely need it (first-day morning routine, knowledge import, opt-in heavy task mode).
162
+ subgraph LOCAL["Your laptop"]
163
+ direction TB
164
+ DAEMON["Aitne daemon<br/>(always on, 127.0.0.1)"]
165
+ BRAIN["AI session<br/>Claude / Codex / Gemini<br/>(OpenCode coming soon)"]
166
+ MEMORY["Markdown memory<br/>plain files you own"]
167
+ DAEMON --- BRAIN
168
+ BRAIN --- MEMORY
169
+ DAEMON --- MEMORY
170
+ end
562
171
 
563
- ### Step 3 Launch and run the wizard
172
+ YOU["You<br/>Slack · Telegram · Discord<br/>WhatsApp · Web dashboard"]
564
173
 
565
- ```bash
566
- aitne start
174
+ WORLD --- DAEMON
175
+ DAEMON --- YOU
567
176
  ```
568
177
 
569
- Aitne builds (if needed), launches both processes, and opens `http://localhost:3000/setup`. The wizard walks 9 screens:
570
-
571
- | # | Step | What it asks |
572
- |---|---|---|
573
- | 1 | **Basics** | Agent display name + primary language |
574
- | 2 | **Vault** | Plain (`~/.personal-agent/context/`) or your existing Obsidian vault path |
575
- | 3 | **AI Backend** | Pick the main backend (Claude / Codex / Gemini), authenticate (API key or CLI login), choose execution mode (Safe vs. Allow) |
576
- | 4 | **Mail** | Gmail (OAuth) · Outlook (OAuth) · Yahoo / iCloud (IMAP + app password) — each card sets `direct` / `delegated` / `native` mode where supported |
577
- | 5 | **Calendar** | Google Calendar (OAuth) · Outlook Calendar (OAuth or user-managed MCP) — same mode picker per card |
578
- | 6 | **Note** | Notion (OAuth) and an optional secondary Obsidian vault path to watch |
579
- | 7 | **Messaging** | Slack · Telegram · Discord · WhatsApp pairing |
580
- | 8 | **Rules** | A short conversation with the agent — it interviews you and stages a `character` block + a `management-rules` block, which you confirm before saving |
581
- | 9 | **Done** | Summary; agent runs its first `setup` session |
178
+ Two execution paths run in parallel:
582
179
 
583
- Required steps: Basics, Vault, AI Backend, Rules. Everything else exposes a **Skip** button you can come back later from `/connections/*` or `/settings/*`.
180
+ - **Reactive path** owner DMs/mentions, cron routines (morning / evening / weekly), calendar approach events. Event priority heap dispatcher → backend session.
181
+ - **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 worth surfacing was found.
584
182
 
585
- ### Step 4 Verify
586
-
587
- ```bash
588
- aitne status # PIDs, uptime, connected platforms, backends, today's spend
589
- aitne doctor # install diagnostic
590
- aitne logs -f # tail the daemon log
591
- ```
183
+ 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.
592
184
 
593
185
  ---
594
186
 
595
- ## CLI reference
187
+ ## CLI
596
188
 
597
189
  ### Lifecycle
598
190
 
599
191
  | Command | What it does |
600
192
  |---|---|
601
- | `aitne start [--no-open]` | Build if stale, launch daemon + dashboard in background. Opens browser unless `--no-open`. |
602
- | `aitne stop` | Graceful shutdown (SIGTERM → SIGKILL after 10 s). |
603
- | `aitne restart [--no-open] [--clean-context]` | Stop then start. `--clean-context` wipes `context/` after a tarball backup. |
604
- | `aitne status` | PIDs, uptime, connected platforms, backends, today's spend, last action, next scheduled item. |
605
- | `aitne logs [-f] [-n N] [-d]` | Tail the daemon log. `-d` = dashboard log. `-f` = follow. `-n N` = last N lines. |
606
- | `aitne dev` | Foreground mode (full stdio, useful for debugging). |
607
- | `aitne build` | Force a build (skip the mtime gate). |
193
+ | `aitne start [--no-open]` | Build if stale, launch daemon + dashboard in background |
194
+ | `aitne stop` | Graceful shutdown (SIGTERM → SIGKILL after 10 s) |
195
+ | `aitne restart [--clean-context]` | Stop then start. `--clean-context` wipes `context/` after a tarball backup |
196
+ | `aitne status` | PIDs, uptime, platforms, backends, today's spend |
197
+ | `aitne logs [-f] [-n N] [-d]` | Tail daemon log (`-d` = dashboard log, `-f` = follow) |
198
+ | `aitne dev` | Foreground mode (full stdio) |
608
199
 
609
200
  ### Operations
610
201
 
611
202
  | Command | What it does |
612
203
  |---|---|
613
- | `aitne setup` | Re-open the dashboard `/setup` wizard. Auto-starts the daemon if needed. |
614
- | `aitne open` | Open the dashboard in your browser. |
615
- | `aitne doctor [--json]` | 9 install checks; the repository-drift check expands into one extra row per repo whose `origin` no longer matches its registered slug. |
616
- | `aitne audit [flags]` | Read the agent action log directly from SQLite. |
617
- | `aitne version [--json]` | Version, Node, install path, last build time. |
618
- | `aitne update [--check]` | Print the npm command to upgrade. `--check` makes one network call. |
619
- | `aitne uninstall [--keep-data\|--wipe-data]` | Stop the daemon and offer to wipe `~/.personal-agent`. |
620
- | `aitne help [cmd]` | Help (or per-command help). |
621
-
622
- ### `aitne audit` flags
623
-
624
- | Flag | Default | Description |
625
- |---|---|---|
626
- | `--since <duration>` | `24h` | Time window (e.g. `1h`, `7d`, `2026-04-20`). |
627
- | `--type <pattern>` | — | `action_type` filter (`%` for LIKE matching). |
628
- | `--result <value>` | — | `success` / `failed` / `partial` / `skipped`. |
629
- | `--backend <name>` | — | `claude` / `codex` / `gemini`. |
630
- | `--limit <N>` | 50 | Row cap. |
631
- | `--detail` | off | Expand the `detail` JSON column under each row. |
632
- | `--json` | off | Machine-readable JSON output. |
633
-
634
- ### `aitne doctor` checks
635
-
636
- 1. Node version ≥ 22.0.0
637
- 2. Daemon port (`PA_API_PORT`, default 8321) is bindable
638
- 3. Dashboard port (`PA_DASHBOARD_PORT`, default 3000) is bindable
639
- 4. OS secret store usable (`security` / `secret-tool` / `PA_MASTER_PASSWORD`)
640
- 5. At least one backend CLI (`claude`, `codex`, or `gemini`) responds
641
- 6. `~/.personal-agent` exists and is writable
642
- 7. `better-sqlite3` native binding loads
643
- 8. `agent-assets/skills/` is reachable
644
- 9. Repository drift — one row per paired-local + GitHub repo whose `origin` no longer matches the registered `<owner>/<repo>`
645
-
646
- ---
647
-
648
- ## Architecture
649
-
650
- ```mermaid
651
- flowchart TB
652
- subgraph PLAT["📱 Input platforms"]
653
- direction LR
654
- P1[Slack]
655
- P2[Telegram]
656
- P3[Discord]
657
- P4[WhatsApp]
658
- P5[Dashboard]
659
- end
660
-
661
- subgraph DAEMON["⚙️ Aitne daemon (Hono :8321)"]
662
- direction TB
663
- EB[EventBus<br/>priority heap]
664
- DI[Dispatcher<br/>semaphores: 2 reactive +<br/>3 autonomous]
665
- BR[BackendRouter<br/>ProcessKey → tier → backend<br/>+ fallback]
666
- AC[Agent Core<br/>IAgentCore interface]
667
- OB[Observers<br/>Git · GitHub · Obsidian ·<br/>Notion · Calendar · Mail]
668
- SC[Scheduler<br/>node-cron + agent_schedule]
669
- end
670
-
671
- subgraph BACKENDS["🧠 AI runtimes"]
672
- direction LR
673
- BC[Claude Code SDK]
674
- BX[Codex CLI subprocess]
675
- BG[Gemini CLI subprocess]
676
- end
677
-
678
- subgraph DATA["💾 Local data"]
679
- direction LR
680
- SQL[(SQLite<br/>WAL + FTS5)]
681
- MD["📝 Markdown memory<br/>~/.personal-agent/context/"]
682
- KC[OS Keychain]
683
- end
684
-
685
- PLAT --> EB
686
- SC --> EB
687
- OB --> SQL
688
- SQL -- "hourly check pulls" --> EB
689
- EB --> DI
690
- DI --> BR
691
- BR --> AC
692
- AC --> BC
693
- AC --> BX
694
- AC --> BG
695
- AC <-->|curl localhost API| DAEMON
696
- DAEMON <--> SQL
697
- DAEMON <--> MD
698
- DAEMON <--> KC
699
- ```
700
-
701
- ### Two execution paths
702
-
703
- **Reactive path** — owner DMs/mentions, cron routines, calendar approach events, scheduled tasks
704
- → Event source → EventBus → Dispatcher → BackendRouter → Agent → output to user.
705
-
706
- **Polling path** — Obsidian, Git, GitHub, Notion, Calendar, Mail change detection
707
- → Observer → `observations` table (UPSERT, with `actor='user'|'agent'`)
708
- … time passes …
709
- → 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.
710
-
711
- `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.
712
-
713
- ### Repo layout
714
-
715
- ```
716
- packages/
717
- ├── daemon/ # Hono server, EventBus, Dispatcher, BackendRouter, observers, SQLite layer, integration SDK wrappers
718
- ├── dashboard/ # Next.js 16 + React 19 + Tailwind 4 + shadcn/ui
719
- └── shared/ # Types, Zod schemas, ProcessKey enum, branding constants
720
-
721
- agent-assets/ # Read by the daemon at session-init time
722
- ├── agent-profiles/ # Persona MD per backend (CLAUDE.md / AGENTS.md / GEMINI.md)
723
- ├── skills/ # 23 built-in skills (context, calendar, mail, notion, …)
724
- ├── task-flows/ # Per-event prompt templates (one per event type)
725
- └── templates/ # Scaffold MD copied to context/ on first run
726
-
727
- bin/aitne.mjs # CLI entry — lifecycle + ops
728
- scripts/ # Build/run helpers and per-command modules
729
- docs/design/ # Architecture & design docs (v4.16) — source of truth
730
- ```
731
-
732
- ---
733
-
734
- ## Memory layout
735
-
736
- Everything the agent writes lives under `PA_DATA_DIR` (default `~/.personal-agent`):
204
+ | `aitne doctor [--json]` | 10 install-health checks + repo-drift expansion |
205
+ | `aitne audit [flags]` | Read the agent action log from SQLite — `--since`, `--type`, `--result`, `--backend`, `--detail`, `--json` |
206
+ | `aitne setup` | Re-open the dashboard `/setup` wizard |
207
+ | `aitne open` | Open the dashboard in your browser |
208
+ | `aitne run-now <job>` | Fire a maintenance job on demand (currently `roadmap_maintenance`) |
209
+ | `aitne verify <target>` | Read-only post-launch verification of a shipped design surface |
210
+ | `aitne version` / `update` / `uninstall` | Self-explanatory |
737
211
 
738
- ```
739
- ~/.personal-agent/
740
- ├── context/ # Markdown memory — edit any file by hand at any time
741
- │ ├── _index.md # Navigation hub
742
- │ ├── today.md # Today's working view (always injected)
743
- │ ├── yesterday.md # Daemon-rotated archive
744
- │ ├── roadmap.md # Long-term goals (Morning + Evening injection)
745
- │ ├── context-index.md # Auto-maintained index
746
- │ ├── user/
747
- │ │ ├── profile.md # ~600 tokens, always injected
748
- │ │ ├── people.md # Relationship dictionary
749
- │ │ ├── work.md, expertise.md, personal.md, goals.md
750
- │ ├── rules/ # Policy files (management, redaction, journal)
751
- │ ├── routines/ # Per-cadence checklist rulebooks
752
- │ ├── dossiers/ # Carry-forward state per routine
753
- │ ├── projects/ # One file per active project + Obsidian Bases view
754
- │ ├── daily/<YYYY-MM-DD>.md # Synthesized daily journal (persistent by design)
755
- │ ├── weekly/<YYYY-Www>.md # Weekly review (1 yr file retention)
756
- │ ├── monthly/<YYYY-MM>.md # Monthly review (persistent by design)
757
- │ ├── inbox/ # Optional paste bucket
758
- │ └── agent/
759
- │ ├── journal.md # Private agent self-reflection
760
- │ └── scratch/ # 48-h TTL temp files
761
- ├── data/personal_agent.db # SQLite (WAL + FTS5)
762
- ├── logs/{daemon,dashboard}.log
763
- ├── prompts/ # Editable prompt templates
764
- ├── attachments/ # Chat attachments
765
- ├── agent-sessions/<id>/ # Per-session backend workdir
766
- ├── secrets/ # File-fallback secret store (`<name>.enc`); empty when OS keychain is used
767
- └── run/ # PID files for daemon + dashboard
768
- ```
769
-
770
- ### Write chokepoint
771
-
772
- 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).
212
+ `aitne help [cmd]` for per-command details.
773
213
 
774
214
  ---
775
215
 
776
- ## Multi-backend
216
+ ## Backends
777
217
 
778
- Aitne abstracts three AI runtimes behind a single `IAgentCore` interface:
218
+ Aitne abstracts four AI runtimes behind a single `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.7**.
779
219
 
780
- | Backend | Implementation | Session resume | Strengths |
220
+ | Backend | Implementation | Resume | Strengths |
781
221
  |---|---|---|---|
782
- | **Claude Code** | `@anthropic-ai/claude-agent-sdk` | Full session resume | Best for routines, deep context, server-side advisor |
783
- | **Codex CLI** | OpenAI Codex CLI subprocess + JSONL stream | New session each time | Best for code-heavy tasks, fast iteration |
784
- | **Gemini CLI** | Google Gemini CLI subprocess + JSONL stream | New session each time | Best for free-tier, large-context summarization |
785
-
786
- ### Per-process tier routing
222
+ | **Claude Code** | `@anthropic-ai/claude-agent-sdk` | | Best for routines, deep context, server-side advisor |
223
+ | **Codex CLI** | OpenAI Codex CLI subprocess + JSONL stream | | Code-heavy tasks, fast iteration |
224
+ | **Gemini CLI** | Google Gemini CLI subprocess + JSONL stream | | Free-tier headroom, large-context summarization |
225
+ | **OpenCode** _(coming soon)_ | `opencode-ai` HTTP server + SDK client | ✓ | Multi-provider — routes to any `opencode auth login` provider. Preview-only in this release; the dashboard selectors are disabled until the runtime executor ships. |
787
226
 
788
- 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.
227
+ The router fails over to a configured fallback backend automatically on `BackendQuotaError` or decisive failure, re-materializing the fallback's instruction file and skill directories into the session workdir.
789
228
 
790
- | ProcessKey | Default tier | What runs there |
791
- |---|---|---|
792
- | `routine.morning_routine_initial` | **high** | First-day plan generation (one-shot, sets up profile) |
793
- | `routine.morning_routine` | medium | Daily plan generation — the highest-value recurring process |
794
- | `routine.evening_review` | medium | Today wrap-up |
795
- | `routine.weekly_review`, `routine.monthly_review` | medium | Cadence summaries |
796
- | `routine.hourly_check` | medium | Stage 3 observation aggregation |
797
- | `routine.hourly_check.triage` | lite | Stage 2 escalate-vs-log-only gate |
798
- | `routine.fetch_window` | lite | Pre-pass fan-out fetcher for routines |
799
- | `message.dm`, `message.mention` | medium | DM and channel response |
800
- | `dashboard.chat` | medium | Web chat |
801
- | `dashboard.docs_qa` | medium (tier-locked) | Docs panel — never burns Opus quota |
802
- | `agent.task`, `agent.dm_task` | medium | Scheduled wakeups |
803
- | `knowledge.import` | high | One-shot knowledge ingestion |
804
- | `calendar.change`, `gmail_classify` | lite | Polling-derived events |
805
- | `git.*`, `github.*` (event triage) | lite | Git/GitHub event triage |
806
- | `delegated_task` | lite | Delegated subprocess task mode |
807
- | `delegated_task_heavy` | high | Opt-in destructive-write task mode |
808
- | `observation.summarize` | lite | Per-observation classification |
809
-
810
- Configure each ProcessKey's backend & 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.
229
+ Per-process tier defaults and the routing table are editable from the dashboard at `:3000/settings/models`.
811
230
 
812
231
  ---
813
232
 
814
233
  ## Integrations
815
234
 
816
- ### Messaging
817
-
818
- | Platform | Library | Mode | Setup |
819
- |---|---|---|---|
820
- | Slack | `@slack/bolt` | Socket Mode (WebSocket) | Bot + App tokens |
821
- | Telegram | `telegraf` | Long polling | Bot token |
822
- | Discord | `discord.js` | Gateway | Bot token |
823
- | WhatsApp | `baileys` | QR pairing | Scan QR from dashboard |
824
- | Web Dashboard | Hono SSE | Always on | None |
825
-
826
- ### Mail (multi-provider, unified API)
827
-
828
- | Provider | Auth | Features |
829
- |---|---|---|
830
- | **Gmail** | `googleapis` OAuth2 | Read · send · drafts · labels · IMAP IDLE · classifier · attachment extraction |
831
- | **Outlook** | `@azure/msal-node` Graph API | Read · send · drafts · folders |
832
- | **Yahoo** | IMAP + app password | Read · send · IMAP IDLE |
833
- | **iCloud** | IMAP + app password | Read · send · IMAP IDLE |
834
-
835
- 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.
836
-
837
- ### Knowledge & docs
838
-
839
- - **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
840
- - **Notion** — `@notionhq/client` REST API; full page + database CRUD
841
- - **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. See `agent-assets/docs/features/wiki/overview.md`.
842
- - **Custom MCP servers** — register via `/api/mcp/servers`; materialized into the per-session workdir so backends use them transparently
843
-
844
- ### Code
845
-
846
- - **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`
847
- - **GitHub** — `@octokit/rest` + webhooks; PR list & comment, issue ops, HMAC-SHA256 signature verification at `POST /webhook/github`
848
-
849
- ### Calendar & travel
850
-
851
- - **Google Calendar** — `googleapis` OAuth2; full event CRUD, freebusy, calendar list, 15-min approaching reminders
852
- - **Outlook Calendar** — Microsoft Graph via `@azure/msal-node` in direct mode, or user-managed MCP in delegated / native modes
853
- - **iCloud Calendar** — CalDAV via `tsdav` (Apple Calendar service; reachable from any platform)
854
- - **Google Maps** — Directions API for travel-time estimation tied to calendar events
855
-
856
- ### Lifestyle
857
-
858
- - **Receipts** — auto-extracts PDF/image attachments from mail with category detection
859
- - **Travel bookings** — auto-extracts flight, hotel, restaurant, train confirmations
860
- - **Reading** — Kindle My Clippings importer; reading-taste profile; weekly book recommendations
861
- - **Voice** — opt-in Whisper transcription (`ffmpeg-static` + `@huggingface/transformers`) runs locally on voice attachments. Install via `POST /api/voice/install`.
862
-
863
- ### Integration delegation modes
235
+ | Category | Providers |
236
+ |---|---|
237
+ | **Messaging** | Slack (Socket Mode), Telegram, Discord, WhatsApp (Baileys), Web dashboard |
238
+ | **Mail** | Gmail, Outlook, Yahoo, iCloud — unified API, classifier, local FTS5 search, IMAP IDLE |
239
+ | **Calendar** | Google Calendar, Outlook Calendar, iCloud (CalDAV), Google Maps for travel time |
240
+ | **Knowledge** | Obsidian (CLI + vault watch), Notion (REST), custom MCP servers |
241
+ | **Code** | Local Git, GitHub (Octokit + webhooks) |
242
+ | **Lifestyle** | Auto-extracted receipts · travel bookings · Kindle highlights · voice transcription (Whisper, opt-in) |
864
243
 
865
- Each integration runs in one of **four** modes:
244
+ ### Integration modes
866
245
 
867
- | Mode | Auth held by | Polling? | Setup cost | Capabilities |
868
- |---|---|---|---|---|
869
- | **`direct`** | Daemon (OAuth in OS Keychain) | Daemon poller | 5–6 vendor-console steps | Full feature set |
870
- | **`delegated`** | Main backend's connector | Cron `delegated-sync-worker` (per-cadence opt-in) | None — backend already authed | Reduced (whatever the connector exposes) |
871
- | **`native`** | Main backend's connector | No daemon polling — agent reaches the integration in-turn via MCP | None | On-demand only; observations posted via `/api/observations` |
872
- | **`disabled`** | — | No | — | Off |
246
+ Each integration runs in one of four modes:
873
247
 
874
- `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.
248
+ | Mode | Auth held by | Polling? | Capabilities |
249
+ |---|---|---|---|
250
+ | **`direct`** | Daemon (OAuth in OS Keychain) | Daemon poller | Full feature set |
251
+ | **`delegated`** | Main backend's connector | Cron worker (per-cadence opt-in) | Whatever the connector exposes |
252
+ | **`native`** | Main backend's connector | None — reached in-turn via MCP | On-demand only |
253
+ | **`disabled`** | — | — | Off |
875
254
 
876
- 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`.
255
+ Every mode change goes through a live capability probe and a per-key flip lock.
877
256
 
878
257
  ---
879
258
 
880
- ## Safety model
259
+ ## Memory
881
260
 
882
- Aitne stacks **four** independent safety layers. The bottom layer holds even when the upper layers are widened by the user.
261
+ Everything Aitne writes lives in `~/.personal-agent/context/*.md` plain Markdown you can `cat`, `vim`, `obsidian`, or `cp`:
883
262
 
884
- ### Layer 1 — SDK permission model
885
-
886
- ```typescript
887
- // Safe (strict) mode — claude-tool-collection.ts:CLAUDE_DEFAULT_ALLOWED_TOOLS
888
- permissionMode: "dontAsk"
889
- allowedTools: ["Read", "Glob", "Grep", "Write", "Edit", "Skill",
890
- "Bash(curl *)", "Bash(git *)", "Bash(jq *)"]
891
- disallowedTools: ALWAYS_DISALLOWED_TOOLS + dashboard overrides
263
+ ```
264
+ context/
265
+ ├── today.md # Working view, always injected
266
+ ├── yesterday.md # Daemon-rotated archive
267
+ ├── roadmap.md # Long-term goals
268
+ ├── user/ # profile.md, people.md, work.md,
269
+ ├── rules/ # Policy files (management, redaction)
270
+ ├── projects/ # One file per active project
271
+ ├── daily/YYYY-MM-DD.md # Synthesized daily journal
272
+ ├── weekly/ # Weekly retrospectives
273
+ └── agent/journal.md # Private agent self-reflection
892
274
  ```
893
275
 
894
- Allow mode swaps to `permissionMode: "bypassPermissions"` but the absolute-block layer below still applies.
895
-
896
- ### Layer 2 — PreToolUse hooks (Claude, Safe mode)
897
-
898
- 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.
899
-
900
- ### Layer 3 — Daemon API risk tiers
901
-
902
- | Tier | Examples | Auth required |
903
- |---|---|---|
904
- | **Autonomous** | `GET /api/context/*`, `POST /api/notify`, `POST /api/schedule`, `POST /api/observations` | None (localhost only) |
905
- | **ReadSensitive** | `GET /api/observations`, `GET /api/calendar/events`, `GET /api/mail/search` | `X-Read-Token` or Bearer |
906
- | **Approve** | `PATCH /api/config`, `POST /api/setup/*`, `POST /api/system/factory-reset`, `POST /api/triggers`, `/api/repositories`, `/api/mcp/servers`, `/api/integrations` | Bearer |
907
-
908
- ### Layer 4 — Absolute-block layer (`ALWAYS_DISALLOWED_TOOLS`)
276
+ Context writes flow through `curl http://localhost:8321/api/context/<path>`, 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.
909
277
 
910
- Hard-blocked in **both Safe and Allow** modes. `bypassPermissions` and `allowedToolsOverride` cannot widen past this:
278
+ ---
911
279
 
912
- - Recursive delete: `rm -rf *`, `rm -r *`, `rm --recursive*` (every flag-bundle variant)
913
- - Privilege escalation: `sudo *`, `doas *`, `su *`
914
- - Pipe-to-shell RCE: `curl * | sh`, `wget * | bash`, `bash <(...)`
915
- - Platform secret CLI: `security *`, `secret-tool *`, `cmdkey *`
916
- - Secret file reads/writes: `.env`, `~/.ssh/**`, `~/.gnupg/**`, `~/.aws/**`, `~/.config/gcloud/**`
917
- - Daemon-managed secrets: `~/.personal-agent/secrets/**`, `~/.personal-agent/whatsapp/auth/**`
280
+ ## Safety
918
281
 
919
- Every blocked attempt lands in `agent_actions` with `action_type='blocked_absolute'`.
282
+ Four independent layers, designed so that the bottom layer holds even when upper layers are widened:
920
283
 
921
- ### Other guarantees
284
+ 1. **SDK permission model** — strict `allowedTools` whitelist in Safe mode; `bypassPermissions` in Allow mode
285
+ 2. **PreToolUse hooks** (Claude, Safe mode) — `curl` parsed for hostname + port; daemon-API is the only legal write path
286
+ 3. **Daemon API risk tiers** — `Autonomous` / `ReadSensitive` (X-Read-Token) / `Approve` (Bearer token)
287
+ 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
922
288
 
923
- - **Localhost-only API** daemon binds to `127.0.0.1` only
924
- - **Bearer token** — required for all Approve-tier endpoints
925
- - **Webhook HMAC** — GitHub webhooks verified with `X-Hub-Signature-256`
926
- - **No automated financial transactions** — never trade, transfer, or pay
927
- - **No automated social posting** — never post publicly on your behalf
928
- - **Single-owner only** — group chats and multi-user channels are filtered at the adapter layer
929
- - **Auth Health Monitor** — hourly probe of every backend's auth state, with grace periods, escalating DMs, and auto-recovery flows for Claude / Codex / Gemini
289
+ 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.
930
290
 
931
291
  ---
932
292
 
933
- ## Cost & quotas
293
+ ## Cost
934
294
 
935
- ### Built-in controls
936
-
937
- | Control | Default | Configurable |
295
+ | Control | Default | Effect when set |
938
296
  |---|---|---|
939
- | `maxConcurrentSessions` (autonomous) | 3 | yes |
940
- | `maxReactiveSessions` (DMs) | 2 | yes |
941
- | `executeTimeoutMinutes` (per-execute watchdog) | 60 | yes |
942
- | `autonomousDailyCostCapUsd` | null (alert-only) | yes |
943
- | `autonomousMonthlyCostCapUsd` | null (alert-only) | yes |
944
- | Per-ProcessKey `maxBudgetUsd` (in `process_backend_config`) | per-row, set from `/settings/models` | yes |
945
- | `delegated_task` hard caps | `maxToolCalls=15` · `maxBudgetUsd=$0.50` · `timeoutMs=300_000` | no (compile-time) |
297
+ | `maxConcurrentSessions` (autonomous) | 3 | Hard semaphore |
298
+ | `maxReactiveSessions` (DMs) | 2 | Hard semaphore |
299
+ | `executeTimeoutMinutes` | 60 | Per-execute watchdog |
300
+ | `autonomousDailyCostCapUsd` | `null` | Priority-based skipping: `hourly_check` at 100%, `evening_review` at 150%, `morning_routine` at 200%. Reactive DMs are not gated. |
301
+ | `autonomousMonthlyCostCapUsd` | `null` | Alert + warn surface |
302
+ | Per-ProcessKey `maxBudgetUsd` | per-row | Hard cap per execute |
946
303
 
947
- ### Typical day's spend
948
-
949
- ```
950
- 04:00 Morning Routine (Sonnet) ~$0.15
951
- 07:00 Morning Briefing (Sonnet) ~$0.03
952
- 09:00 Hourly Check (Sonnet) ~$0.05
953
- 12:00 Hourly Check (Sonnet) ~$0.03
954
- 12:55 DM response (Sonnet) ~$0.08
955
- 18:00 Evening Review (Sonnet) ~$0.15
956
- ─────────────────────────────────────────────────
957
- Total ~$0.49
958
- ```
959
-
960
- 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.
304
+ 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.
961
305
 
962
306
  ---
963
307
 
964
308
  ## Configuration
965
309
 
966
- `.env` is **bootstrap-only**. Everything else is editable from the dashboard at runtime or via natural-language DMs to the agent.
967
-
968
- ### `.env` (bootstrap)
969
-
970
- ```bash
971
- PA_DATA_DIR=~/.personal-agent # macOS / Linux
972
- # PA_DATA_DIR=C:\Users\You\.personal-agent # Windows
973
- PA_API_PORT=8321
974
- PA_DASHBOARD_PORT=3000
975
- PA_LOG_LEVEL=info # trace | debug | info | warn | error
976
- ```
977
-
978
- ### Pre-seeding identifiers via env (optional)
979
-
980
- Bot **tokens and OAuth credentials** always live in the OS keychain — they're 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:
981
-
982
- ```bash
983
- # Owner identifiers (non-secret — let messaging adapters know who you are)
984
- PA_SLACK_OWNER_USER_ID=U...
985
- PA_TELEGRAM_OWNER_CHAT_ID=...
986
- PA_DISCORD_OWNER_USER_ID=...
987
- PA_WHATSAPP_ENABLED=true
988
- PA_WHATSAPP_OWNER_PHONE=...
989
-
990
- # Obsidian vault paths
991
- PA_PRIMARY_VAULT_PATH=~/Documents/MyVault
992
- PA_EXTERNAL_OBSIDIAN_VAULT_PATH=~/Documents/SecondaryVault
993
-
994
- # Notion default database routing
995
- PA_NOTION_DATABASE_IDS='{"tasks":"abc...","notes":"def..."}'
996
- ```
997
-
998
- 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.
999
-
1000
- ### Runtime settings
1001
-
1002
- The dashboard `/settings` tree exposes ~100 runtime keys. The headline ones:
310
+ `.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 `:3000`, or via natural-language DMs to the agent.
1003
311
 
1004
- - **Schedule** `timezone`, `dayBoundaryHour`, hourly check window & interval, cron schedules
1005
- - **Notifications** — `quietHoursStart/End`, `maxNotificationsPerHour`, `maxNotificationsPerDay`, `batchIntervalMinutes`
1006
- - **Sessions** — `sessionTimeoutDmMinutes`, `historyInjectionMaxMessages`, `historyInjectionMaxTokens`
1007
- - **Safety** — execution mode per backend, `disallowedTools` overrides
1008
- - **Models** — per-ProcessKey backend + tier, advisor on/off, advisor model
1009
- - **Cost** — daily / monthly soft caps with 80% and 100% alerts
1010
- - **Mail** — provider list, poll interval, IMAP IDLE on/off
1011
- - **Character** — 1,000-char free-form tone description
1012
- - **Language** — `primaryLanguage` nudges output language for DMs, knowledge, and vault writes
1013
- - **Voice** — `voiceTranscriptionEnabled`, `voiceTranscriptionModel`, `voiceTranscriptionPrimaryLanguage`
1014
- - **Delegated task mode** — kill switch, per-day quota, heavy-tier opt-in, cache / pool / structured-output toggles
1015
-
1016
- …or just DM the agent: *"Don't run hourly checks on weekends."*
312
+ Bot tokens and OAuth credentials always live in the OS keychain, never in environment variables.
1017
313
 
1018
314
  ---
1019
315
 
1020
316
  ## Platform support
1021
317
 
1022
- | Concern | macOS | Linux | Windows |
318
+ | | macOS | Linux | Windows |
1023
319
  |---|---|---|---|
1024
- | **Secret storage** | Keychain (`security`) | `secret-tool` (libsecret) → AES file fallback | DPAPI via `powershell.exe` → AES file fallback |
1025
- | **Folder picker** | `osascript` | `zenity` / `kdialog` / `yad` | `System.Windows.Forms.FolderBrowserDialog` |
320
+ | **Secret storage** | Keychain | `secret-tool` (libsecret) → AES file fallback | DPAPI → AES file fallback |
321
+ | **Folder picker** | `osascript` | `zenity` / `kdialog` / `yad` | `FolderBrowserDialog` |
1026
322
  | **Process tree kill** | POSIX process group | POSIX process group | `taskkill /T /F` |
1027
- | **Log tailing (`-f`)** | Built-in Node tailer | Built-in Node tailer | Built-in Node tailer (no `tail` binary needed) |
1028
- | **Console windows** | n/a | n/a | Background spawns hide the console window |
1029
-
1030
- ### WSL
1031
-
1032
- GNOME Keyring / D-Bus are typically unavailable. Aitne falls back to the encrypted file store. Set:
1033
323
 
1034
- ```bash
1035
- export PA_MASTER_PASSWORD='use-a-long-random-string'
1036
- ```
324
+ 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 `LongPathsEnabled=1` registry key.
1037
325
 
1038
- ### Linux secret-tool
1039
-
1040
- ```bash
1041
- sudo apt-get install libsecret-tools # Debian / Ubuntu
1042
- sudo dnf install libsecret # Fedora
1043
- sudo pacman -S libsecret # Arch
1044
- ```
1045
-
1046
- ### Windows long paths
1047
-
1048
- If `npm install` fails with `ENAMETOOLONG`, run from elevated PowerShell and reboot:
1049
-
1050
- ```powershell
1051
- Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" `
1052
- -Name "LongPathsEnabled" -Value 1
1053
- ```
326
+ Common gotchas: [docs/troubleshooting.md](docs/troubleshooting.md)
1054
327
 
1055
328
  ---
1056
329
 
1057
- ## Troubleshooting
1058
-
1059
- ### `aitne start` says "dist not found"
1060
-
1061
- The build did not complete. Run `aitne build` and check for TypeScript errors.
1062
-
1063
- ### Port already in use
1064
-
1065
- Change `PA_API_PORT` (or `PA_DASHBOARD_PORT`) in `.env`. To find the conflicting process:
1066
-
1067
- ```bash
1068
- # macOS / Linux
1069
- lsof -i :8321
1070
-
1071
- # Windows
1072
- netstat -ano | findstr :8321
1073
- ```
1074
-
1075
- ### `aitne` not found after `npm install -g`
1076
-
1077
- ```bash
1078
- npm config get prefix
1079
- # add the printed prefix's `bin/` (or its root on Windows) to your PATH
1080
- ```
330
+ ## Documentation
1081
331
 
1082
- ### SQLite errors on startup
1083
-
1084
- The DB can be reset safely — your Markdown memory in `context/` is untouched. The `*` clears the WAL + SHM companion files:
332
+ | Topic | Doc |
333
+ |---|---|
334
+ | Documentation index | [docs/index.md](docs/index.md) |
335
+ | Setup walkthrough | [docs/setup-guide.md](docs/setup-guide.md) |
336
+ | Troubleshooting | [docs/troubleshooting.md](docs/troubleshooting.md) |
337
+ | Maintenance playbook | [docs/maintenance.md](docs/maintenance.md) |
338
+ | Advisor model | [docs/advisor.md](docs/advisor.md) |
1085
339
 
1086
- ```bash
1087
- aitne stop
1088
- rm ~/.personal-agent/data/personal_agent.db*
1089
- # Remove-Item "$env:USERPROFILE\.personal-agent\data\personal_agent.db*" # Windows
1090
- aitne start
1091
- ```
340
+ ---
1092
341
 
1093
- ### Backend auth expired
342
+ ## Tech stack
1094
343
 
1095
- ```bash
1096
- aitne doctor # confirms which backend failed
1097
- claude auth login # re-auth Claude
1098
- codex login --device-auth # re-auth Codex
1099
- # Gemini re-auth happens automatically via the dashboard banner
1100
- ```
344
+ 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`
1101
345
 
1102
- ### Diagnostic dump
346
+ Dashboard: Next.js 16 · React 19 · Tailwind 4 · shadcn/ui · TanStack Query · Recharts · Monaco
1103
347
 
1104
- ```bash
1105
- aitne audit --since 24h --result failed --detail
1106
- ```
348
+ Monorepo: pnpm 10 workspaces · Turborepo · TypeScript 5.8 · Vitest 3 (100% coverage gate on a curated pure-logic subset)
1107
349
 
1108
350
  ---
1109
351
 
1110
- ## Development
1111
-
1112
- For contributors:
1113
-
1114
- ```bash
1115
- git clone https://github.com/Aitne-sh/Aitne.git aitne
1116
- cd aitne
1117
- corepack enable
1118
- pnpm install
1119
- pnpm start # build (if stale) + launch in background
1120
- pnpm dev # foreground mode with full stdio
1121
- pnpm test # vitest — unit tests across packages/*
1122
- pnpm test:watch
1123
- pnpm lint # turbo run lint
1124
- pnpm clean # remove all build artifacts and node_modules
1125
- ```
1126
-
1127
- ### Tech stack
352
+ ## Contributing
1128
353
 
1129
- | Layer | Stack |
1130
- |---|---|
1131
- | **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` |
1132
- | **Storage** | `better-sqlite3` (WAL + FTS5 trigram) · OS Keychain · plain Markdown |
1133
- | **Dashboard** | Next.js 16 (App Router) · React 19 · Tailwind CSS 4 · shadcn/ui · TanStack Query · Recharts · Monaco Editor |
1134
- | **Voice** | `ffmpeg-static` · `@huggingface/transformers` (Whisper, opt-in) |
1135
- | **Monorepo** | pnpm 10.x workspaces · Turborepo · TypeScript 5.8 · Vitest 3 |
1136
-
1137
- ### Conventions
354
+ Issues and PRs welcome. Conventions:
1138
355
 
1139
356
  - All code, comments, tests, and user-facing text are in **English**
1140
357
  - TypeScript throughout, camelCase, ESM with `.js` import extensions
1141
358
  - Tests colocated with source as `foo.ts` + `foo.test.ts`
1142
- - Vitest enforces **100% coverage** on a curated subset of pure-logic modules
1143
- - The `docs/design/` tree (v4.16) is the authoritative spec; `packages/daemon/src/` is the source of truth when they diverge
1144
-
1145
- ### Source-of-truth pointers
1146
-
1147
- | If you need to… | Start in |
1148
- |---|---|
1149
- | Understand startup order | `packages/daemon/src/index.ts` |
1150
- | Change event routing | `src/core/dispatcher.ts` + `src/core/event-bus.ts` |
1151
- | Add a backend or change tier mapping | `packages/shared/src/process-key.ts` + `src/core/backends/backend-router.ts` |
1152
- | Add an API route | `src/api/routes/` + register in `src/api/server.ts` |
1153
- | Add an integration | `packages/shared/src/integrations.ts` (registry) + `src/services/<name>/` + optional `src/observers/` |
1154
- | Edit a built-in skill | `agent-assets/skills/<slug>/SKILL.md` |
1155
- | Edit an event task flow | `agent-assets/task-flows/<eventType>.md` |
1156
- | Change risk classification | `src/safety/risk-classifier.ts` |
1157
- | Change the absolute-block layer | `src/safety/always-disallowed.ts` |
1158
- | Change auth health / recovery | `src/core/backends/auth-health-monitor.ts` + `auth-recovery.ts` |
359
+ - `packages/daemon/src/` is the source of truth
1159
360
 
1160
361
  ---
1161
362
 
1162
363
  ## FAQ
1163
364
 
1164
- **Is Aitne a chatbot?**
1165
- 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*.
1166
-
1167
- **Does it phone home?**
1168
- No. The daemon binds to `127.0.0.1` only. There is no telemetry. Verify with `lsof` and `nettop`.
1169
-
1170
- **Where do my secrets live?**
1171
- 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/`.
1172
-
1173
- **Can I bring my own AI?**
1174
- 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.
1175
-
1176
- **Do I need an API key?**
1177
- 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.
1178
-
1179
- **Can I edit the agent's memory directly?**
1180
- 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.
365
+ **Is Aitne a chatbot?** 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.
1181
366
 
1182
- **What about Obsidian?**
1183
- 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.
367
+ **Does it phone home?** No. The daemon binds to `127.0.0.1` only. No telemetry. Verify with `lsof` and `nettop`.
1184
368
 
1185
- **Can I run my own MCP servers?**
1186
- 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.
369
+ **Can I edit memory directly?** Yes. Open `~/.personal-agent/context/today.md`, change anything, save. The agent picks up your edits on the next routine.
1187
370
 
1188
- **Do my existing Claude Code / Codex / Gemini settings work?**
1189
- 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-byoh).
371
+ **Do my existing Claude Code / Codex / Gemini settings work?** Yes. Aitne reads `~/.claude/`, `~/.codex/`, and `~/.gemini/` on session init and layers its persona on top. (`~/.opencode/` is recognised but the OpenCode runtime is coming soon.)
1190
372
 
1191
- **Does it work without internet?**
1192
- 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.
373
+ **Is this for my team?** No — single-owner by design. Group chats and multi-user channels are filtered at the adapter layer.
1193
374
 
1194
- **Does it support languages other than English?**
1195
- Yes. Talk to it in your native language — Japanese, German, Spanish, anything. The LLM handles it; the `primaryLanguage` setting nudges DM / knowledge / vault outputs into that language too. Implementation code remains English-only.
375
+ **Does it work without internet?** Backends and reactive messaging need internet. The daemon, dashboard, observers, and Markdown memory are entirely offline.
1196
376
 
1197
- **Is this for my whole team?**
1198
- 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.
1199
-
1200
- **How do I uninstall?**
1201
- `aitne uninstall`. It will offer to wipe `~/.personal-agent` or keep it for re-installation.
377
+ **How do I uninstall?** `aitne uninstall` — offers to wipe `~/.personal-agent` or keep it for re-installation.
1202
378
 
1203
379
  ---
1204
380
 
1205
381
  ## License
1206
382
 
1207
- MIT — use, modify, and distribute freely. See [LICENSE](./LICENSE) for the full text.
1208
-
1209
- ---
1210
-
1211
- <div align="center">
1212
-
1213
- **Aitne — Always on. Always yours.**
1214
-
1215
- [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)
1216
-
1217
- </div>
383
+ MIT — see [LICENSE](./LICENSE).