@aitne-sh/aitne 0.1.9 → 0.1.11

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 (218) hide show
  1. package/README.md +41 -11
  2. package/agent-assets/agent-profiles/background-task.md +53 -0
  3. package/agent-assets/agent-profiles/conversational.md +1 -0
  4. package/agent-assets/agent-profiles/routine-fetch-window.md +14 -75
  5. package/agent-assets/agent-profiles/routine.md +1 -1
  6. package/agent-assets/agents/{hourly-check → activity-scan}/agent.md +22 -17
  7. package/agent-assets/agents/monthly-review/agent.md +6 -5
  8. package/agent-assets/docs/concepts/agent-day.md +6 -7
  9. package/agent-assets/docs/concepts/auth-health.md +23 -20
  10. package/agent-assets/docs/concepts/backends-and-tiers.md +13 -9
  11. package/agent-assets/docs/concepts/costs-and-quotas.md +14 -12
  12. package/agent-assets/docs/concepts/delegated-mode.md +18 -17
  13. package/agent-assets/docs/concepts/memory-model.md +16 -9
  14. package/agent-assets/docs/concepts/observations.md +24 -20
  15. package/agent-assets/docs/concepts/process-keys.md +10 -9
  16. package/agent-assets/docs/concepts/routines.md +34 -31
  17. package/agent-assets/docs/concepts/safety-and-execution.md +11 -7
  18. package/agent-assets/docs/concepts/safety-model.md +39 -25
  19. package/agent-assets/docs/concepts/skills.md +12 -10
  20. package/agent-assets/docs/features/integrations/browser-history.md +23 -18
  21. package/agent-assets/docs/features/integrations/calendar.md +28 -17
  22. package/agent-assets/docs/features/integrations/git.md +13 -11
  23. package/agent-assets/docs/features/integrations/github.md +22 -14
  24. package/agent-assets/docs/features/integrations/mail.md +25 -22
  25. package/agent-assets/docs/features/integrations/notion.md +35 -11
  26. package/agent-assets/docs/features/integrations/obsidian.md +8 -8
  27. package/agent-assets/docs/features/lifestyle/git.md +27 -23
  28. package/agent-assets/docs/features/lifestyle/reading.md +20 -11
  29. package/agent-assets/docs/features/lifestyle/receipts.md +11 -10
  30. package/agent-assets/docs/features/lifestyle/travel-bookings.md +4 -3
  31. package/agent-assets/docs/features/memory-files/agent-journal.md +53 -26
  32. package/agent-assets/docs/features/memory-files/agent-lessons.md +178 -0
  33. package/agent-assets/docs/features/memory-files/projects.md +11 -8
  34. package/agent-assets/docs/features/memory-files/roadmap.md +17 -14
  35. package/agent-assets/docs/features/memory-files/schedule.md +6 -3
  36. package/agent-assets/docs/features/memory-files/today.md +10 -7
  37. package/agent-assets/docs/features/memory-files/user-profile.md +14 -9
  38. package/agent-assets/docs/features/messaging/bang-commands.md +21 -6
  39. package/agent-assets/docs/features/messaging/overview.md +17 -14
  40. package/agent-assets/docs/features/messaging/telegram.md +10 -9
  41. package/agent-assets/docs/features/operations/activity-and-conversations.md +6 -5
  42. package/agent-assets/docs/features/operations/approvals.md +6 -5
  43. package/agent-assets/docs/features/operations/browser-tasks.md +184 -0
  44. package/agent-assets/docs/features/operations/cost-tracking.md +11 -1
  45. package/agent-assets/docs/features/operations/managed-chromium.md +4 -2
  46. package/agent-assets/docs/features/operations/notifications.md +11 -1
  47. package/agent-assets/docs/features/operations/quiet-hours.md +41 -11
  48. package/agent-assets/docs/features/operations/schedule-approaching.md +2 -2
  49. package/agent-assets/docs/features/routines/activity-scan.md +220 -0
  50. package/agent-assets/docs/features/routines/custom-routines.md +82 -134
  51. package/agent-assets/docs/features/routines/evening-review.md +23 -13
  52. package/agent-assets/docs/features/routines/morning-routine.md +7 -5
  53. package/agent-assets/docs/features/routines/weekly-review.md +24 -3
  54. package/agent-assets/docs/features/wiki/commands.md +4 -4
  55. package/agent-assets/docs/features/wiki/cost-and-approval.md +4 -3
  56. package/agent-assets/docs/features/wiki/dashboard.md +7 -6
  57. package/agent-assets/docs/features/wiki/overview.md +3 -3
  58. package/agent-assets/docs/features/wiki/search.md +5 -5
  59. package/agent-assets/docs/features/wiki/workspaces.md +2 -2
  60. package/agent-assets/docs/getting-started/01-what-is-this.md +3 -3
  61. package/agent-assets/docs/getting-started/02-first-steps.md +5 -3
  62. package/agent-assets/docs/getting-started/04-first-day.md +27 -30
  63. package/agent-assets/docs/glossary.md +8 -8
  64. package/agent-assets/docs/guides/add-a-custom-routine.md +122 -68
  65. package/agent-assets/docs/guides/budget-and-cost-for-wiki.md +2 -2
  66. package/agent-assets/docs/guides/connect-a-new-mail-account.md +4 -2
  67. package/agent-assets/docs/guides/explore-with-trace-and-connect.md +5 -4
  68. package/agent-assets/docs/guides/install-and-run.md +2 -2
  69. package/agent-assets/docs/guides/maintain-wiki-health.md +2 -2
  70. package/agent-assets/docs/guides/pause-the-agent.md +27 -21
  71. package/agent-assets/docs/guides/reinstall-cleanly.md +2 -0
  72. package/agent-assets/docs/guides/setup-wizard.md +12 -6
  73. package/agent-assets/docs/guides/use-an-existing-obsidian-vault.md +6 -6
  74. package/agent-assets/docs/reference/api.md +26 -5
  75. package/agent-assets/docs/reference/cli-commands.md +3 -3
  76. package/agent-assets/docs/reference/config.md +51 -24
  77. package/agent-assets/docs/reference/disallowed-tools.md +6 -4
  78. package/agent-assets/docs/reference/keyboard-shortcuts.md +2 -2
  79. package/agent-assets/docs/reference/knowledge-layout.md +25 -12
  80. package/agent-assets/docs/reference/process-keys.md +9 -9
  81. package/agent-assets/docs/reference/skills.md +10 -6
  82. package/agent-assets/docs/troubleshooting/auth-failed.md +9 -8
  83. package/agent-assets/docs/troubleshooting/dashboard-shows-degraded.md +16 -9
  84. package/agent-assets/docs/troubleshooting/messaging-not-pairing.md +2 -2
  85. package/agent-assets/docs/troubleshooting/morning-routine-didnt-run.md +32 -16
  86. package/agent-assets/docs/troubleshooting/observation-not-detected.md +26 -24
  87. package/agent-assets/docs/troubleshooting/quota-exhausted.md +7 -6
  88. package/agent-assets/docs/troubleshooting/wiki-write-failed.md +3 -3
  89. package/agent-assets/skills/agent-actions/SKILL.md +23 -39
  90. package/agent-assets/skills/agent-create/SKILL.md +26 -6
  91. package/agent-assets/skills/attach/SKILL.md +8 -27
  92. package/agent-assets/skills/background-task/SKILL.md +184 -0
  93. package/agent-assets/skills/background-task-reply/SKILL.md +100 -0
  94. package/agent-assets/skills/browser-history/SKILL.md +60 -29
  95. package/agent-assets/skills/browser-history-respond/SKILL.md +6 -1
  96. package/agent-assets/skills/browser-task/SKILL.md +33 -31
  97. package/agent-assets/skills/context/SKILL.md +26 -34
  98. package/agent-assets/skills/context/curation.json +12 -12
  99. package/agent-assets/skills/context/references/api.md +22 -20
  100. package/agent-assets/skills/context/references/required-frontmatter.md +10 -9
  101. package/agent-assets/skills/context/references/snapshot-files.md +16 -15
  102. package/agent-assets/skills/context/seeds/file-responsibilities.seed.json +5 -5
  103. package/agent-assets/skills/context/seeds/frontmatter-requirements.seed.json +3 -3
  104. package/agent-assets/skills/docs-search/SKILL.md +19 -31
  105. package/agent-assets/skills/external-services/SKILL.delegated.claude.md +8 -95
  106. package/agent-assets/skills/external-services/SKILL.delegated.codex.md +8 -94
  107. package/agent-assets/skills/external-services/SKILL.delegated.gemini.md +8 -94
  108. package/agent-assets/skills/external-services/SKILL.native.claude.md +15 -9
  109. package/agent-assets/skills/external-services/SKILL.native.codex.md +11 -5
  110. package/agent-assets/skills/external-services/SKILL.native.gemini.md +11 -5
  111. package/agent-assets/skills/external-services/references/exec-errors.md +32 -0
  112. package/agent-assets/skills/external-services/references/skills-crud.md +5 -5
  113. package/agent-assets/skills/gmail-lifestyle/SKILL.md +3 -2
  114. package/agent-assets/skills/gmail-lifestyle/references/receipts-api.md +4 -0
  115. package/agent-assets/skills/gmail-lifestyle/references/travel-bookings-api.md +9 -0
  116. package/agent-assets/skills/mail/SKILL.delegated.claude.md +13 -25
  117. package/agent-assets/skills/mail/SKILL.delegated.codex.md +3 -2
  118. package/agent-assets/skills/mail/SKILL.delegated.gemini.md +3 -2
  119. package/agent-assets/skills/mail/SKILL.md +12 -20
  120. package/agent-assets/skills/mail/SKILL.native.claude.md +24 -16
  121. package/agent-assets/skills/mail/SKILL.native.codex.md +16 -9
  122. package/agent-assets/skills/mail/SKILL.native.gemini.md +12 -6
  123. package/agent-assets/skills/mail/references/api.md +6 -1
  124. package/agent-assets/skills/mail/references/examples.md +2 -1
  125. package/agent-assets/skills/managed-tasks/SKILL.md +44 -77
  126. package/agent-assets/skills/managed-tasks/references/errors.md +25 -14
  127. package/agent-assets/skills/managed-tasks/references/output-path.md +33 -17
  128. package/agent-assets/skills/managed-tasks/references/recurrence-rule.md +26 -16
  129. package/agent-assets/skills/management-policy/SKILL.md +36 -28
  130. package/agent-assets/skills/management-policy/curation.json +1 -1
  131. package/agent-assets/skills/management-policy/references/policy-workflow.md +30 -18
  132. package/agent-assets/skills/notify/SKILL.md +16 -13
  133. package/agent-assets/skills/notify/references/priority.md +42 -26
  134. package/agent-assets/skills/notion/SKILL.delegated.claude.md +1 -1
  135. package/agent-assets/skills/notion/SKILL.delegated.codex.md +1 -1
  136. package/agent-assets/skills/notion/SKILL.delegated.gemini.md +1 -1
  137. package/agent-assets/skills/notion/SKILL.md +18 -18
  138. package/agent-assets/skills/notion/SKILL.native.claude.md +4 -4
  139. package/agent-assets/skills/notion/SKILL.native.codex.md +3 -3
  140. package/agent-assets/skills/notion/SKILL.native.gemini.md +3 -3
  141. package/agent-assets/skills/observations/SKILL.md +9 -24
  142. package/agent-assets/skills/observations/references/fetch-fallback.md +22 -0
  143. package/agent-assets/skills/project-doc/SKILL.md +9 -6
  144. package/agent-assets/skills/project-doc/curation.json +3 -3
  145. package/agent-assets/skills/project-doc/seeds/project-shape.seed.json +2 -2
  146. package/agent-assets/skills/project-doc/seeds/slug-grammar.seed.json +3 -3
  147. package/agent-assets/skills/reading/SKILL.md +8 -42
  148. package/agent-assets/skills/reading/references/reading-taste.md +5 -5
  149. package/agent-assets/skills/roadmap/SKILL.md +3 -19
  150. package/agent-assets/skills/roadmap/references/api.md +23 -8
  151. package/agent-assets/skills/roadmap/references/horizon-tags.md +11 -0
  152. package/agent-assets/skills/roadmap/references/migration.md +8 -6
  153. package/agent-assets/skills/roadmap/references/retention.md +18 -0
  154. package/agent-assets/skills/schedule/SKILL.md +20 -28
  155. package/agent-assets/skills/schedule/references/importance.md +23 -0
  156. package/agent-assets/skills/schedule/references/recurrence-rule.md +26 -16
  157. package/agent-assets/skills/scheduled-managed-task/SKILL.md +46 -46
  158. package/agent-assets/skills/today/SKILL.md +38 -81
  159. package/agent-assets/skills/today/references/agent-plan-lifecycle.md +9 -4
  160. package/agent-assets/skills/today/references/agent-plan-revision.md +28 -0
  161. package/agent-assets/skills/today/references/today-skeleton.md +66 -0
  162. package/agent-assets/skills/today/seeds/agent-notes-flavors.seed.json +1 -1
  163. package/agent-assets/skills/today/seeds/section-shape.seed.json +6 -6
  164. package/agent-assets/skills/user-interview/SKILL.md +15 -90
  165. package/agent-assets/skills/user-interview/references/op-briefing.md +1 -1
  166. package/agent-assets/skills/user-interview/references/op-dm-handler.md +88 -0
  167. package/agent-assets/skills/user-interview/references/op-morning.md +2 -2
  168. package/agent-assets/skills/user-interview/references/sweep-and-fallback.md +1 -1
  169. package/agent-assets/skills/user-profile/SKILL.md +16 -26
  170. package/agent-assets/skills/user-profile/curation.json +3 -3
  171. package/agent-assets/skills/user-profile/references/character-preferences.md +3 -3
  172. package/agent-assets/skills/wiki/wiki-ask/SKILL.md +1 -1
  173. package/agent-assets/skills/wiki/wiki-compile/SKILL.md +5 -4
  174. package/agent-assets/skills/wiki/wiki-connect/SKILL.md +32 -5
  175. package/agent-assets/skills/wiki/wiki-ingest/SKILL.md +6 -50
  176. package/agent-assets/skills/wiki/wiki-ingest/references/curl-errors.md +58 -0
  177. package/agent-assets/skills/wiki/wiki-lint/SKILL.md +20 -14
  178. package/agent-assets/skills/wiki/wiki-trace/SKILL.md +10 -5
  179. package/agent-assets/skills/wiki/wiki-vault-rules/SKILL.md +2 -0
  180. package/agent-assets/system-prompts/routine-research-cluster-update.md +71 -0
  181. package/agent-assets/task-flows/_partials/feedback-capture.md +30 -0
  182. package/agent-assets/task-flows/_partials/notion-acquire.notion.md +47 -21
  183. package/agent-assets/task-flows/background_task.md +81 -0
  184. package/agent-assets/task-flows/git.local_ahead.stale.md +1 -1
  185. package/agent-assets/task-flows/git.push.detected.md +1 -1
  186. package/agent-assets/task-flows/git.tag.created.md +1 -1
  187. package/agent-assets/task-flows/github.assigned.md +1 -1
  188. package/agent-assets/task-flows/github.pull_request.review_requested.md +2 -2
  189. package/agent-assets/task-flows/github.security_alert.md +1 -1
  190. package/agent-assets/task-flows/message.received.dm.md +11 -3
  191. package/agent-assets/task-flows/message.received.dm_first.md +8 -2
  192. package/agent-assets/task-flows/{routine.hourly_check.md → routine.activity_scan.md} +31 -23
  193. package/agent-assets/task-flows/{routine.hourly_check.triage.md → routine.activity_scan.triage.md} +3 -3
  194. package/agent-assets/task-flows/routine.evening_review.md +80 -0
  195. package/agent-assets/task-flows/routine.monthly_review.md +81 -8
  196. package/agent-assets/task-flows/routine.research_cluster_update.md +33 -19
  197. package/agent-assets/task-flows/routine.roadmap_refresh.md +2 -2
  198. package/agent-assets/task-flows/routine.today_refresh.md +1 -1
  199. package/agent-assets/task-flows/routine.weekly_review.md +124 -4
  200. package/agent-assets/task-flows/schedule.approaching.md +2 -2
  201. package/agent-assets/task-flows/scheduled.dm.md +77 -1
  202. package/agent-assets/task-flows/scheduled.task.md +7 -1
  203. package/agent-assets/task-flows/wiki.trace.md +1 -1
  204. package/agent-assets/templates/_manifest.json +2 -2
  205. package/agent-assets/templates/knowledge/dossiers/_index.md +1 -1
  206. package/agent-assets/templates/knowledge/dossiers/{hourly.md → activity-scan.md} +1 -1
  207. package/agent-assets/templates/policies/journal-format.md +1 -1
  208. package/agent-assets/templates/policies/mcp.md +1 -1
  209. package/agent-assets/templates/policies/routines/_index.md +1 -1
  210. package/agent-assets/templates/policies/routines/{hourly.md → activity-scan.md} +5 -5
  211. package/bin/aitne.mjs +45 -11
  212. package/package.json +6 -5
  213. package/scripts/commands/doctor.mjs +11 -2
  214. package/scripts/lib/process-identity.d.mts +46 -0
  215. package/scripts/lib/process-identity.mjs +193 -0
  216. package/scripts/lib/read-api-token.mjs +1 -1
  217. package/scripts/start.mjs +14 -4
  218. package/agent-assets/docs/features/routines/hourly-check.md +0 -205
@@ -27,7 +27,7 @@ ask_examples:
27
27
  - How do I add a second mail account?
28
28
  locale: en-US
29
29
  created: 2026-04-25
30
- updated: 2026-05-28
30
+ updated: 2026-06-07
31
31
  keywords:
32
32
  - mail
33
33
  - gmail
@@ -60,8 +60,8 @@ context_files:
60
60
 
61
61
  # Mail
62
62
 
63
- Connect one or more mailboxes (Gmail, Outlook, Yahoo, iCloud, or any
64
- IMAP server) and Aitne polls them, classifies incoming threads, and
63
+ Connect one or more mailboxes (Gmail, Outlook, Yahoo, or iCloud) and
64
+ Aitne polls them, classifies incoming threads, and
65
65
  lets the agent search / label / read via the `mail` skill. Search is
66
66
  local — backed by SQLite FTS5 — so the agent doesn't need to round-trip
67
67
  the provider for every query.
@@ -69,8 +69,8 @@ the provider for every query.
69
69
  ## What It Does
70
70
 
71
71
  - **Read & search** existing threads (FTS5-backed local index).
72
- - **Classify** incoming messages — does this need owner attention,
73
- is it a marketing list, is it a receipt.
72
+ - **Classify** incoming messages — is it a travel booking, a receipt
73
+ attachment, a Kindle notebook export.
74
74
  - **Label** threads so the operator and the agent agree on triage state.
75
75
  - **Surface** the small set of mail items in the morning routine that
76
76
  actually need owner action.
@@ -81,15 +81,15 @@ yourself. Direct send (`POST /mail/:account/messages/send`) is *not*
81
81
  blocked — it is classified as an autonomous action, so the daemon does
82
82
  not DM you for approval first. The agent only sends directly when it
83
83
  judges you'd clearly want it to, and it tells you afterward; during the
84
- hourly check the `mail` skill is hard read-only (no sending, drafting,
84
+ activity scan the `mail` skill is hard read-only (no sending, drafting,
85
85
  labeling, or filing).
86
86
 
87
87
  ## When It Runs / How It Is Triggered
88
88
 
89
89
  - In `direct` mode a poller pulls new messages on a cadence. Gmail uses
90
- `gmailPollIntervalSeconds` (default 600); IMAP-backed accounts (Yahoo,
91
- iCloud, generic IMAP) use `mailPollIntervalSeconds` (default 180).
92
- Adjust both under **Settings → Advanced**.
90
+ `gmailPollIntervalSeconds` (default 600); all other accounts (Outlook,
91
+ Yahoo, iCloud) use `mailPollIntervalSeconds` (default 180).
92
+ The Gmail cadence is adjustable under **Settings → Infrastructure**.
93
93
  - The morning routine reads the labeled queue and decides which need
94
94
  surfacing.
95
95
  - Reactive turns (you DM "what's in my mail?") use the `mail` skill on
@@ -97,17 +97,17 @@ labeling, or filing).
97
97
 
98
98
  ## Integration Modes
99
99
 
100
- Mail supports all four integration modes
101
- (`direct | delegated | native | disabled`); each provider may sit in a
102
- different mode.
100
+ Gmail and Outlook support all four integration modes
101
+ (`direct | delegated | native | disabled`); each may sit in a
102
+ different mode. Yahoo and iCloud have no integration-registry entry —
103
+ they are direct-only by design.
103
104
 
104
105
  | Provider | Direct | Delegated | Native | Notes |
105
106
  |---|---|---|---|---|
106
- | Gmail | ✓ | ✓ | ✓ (descriptor-driven) | Native mode uses Google's official Gmail MCP connector on the main backend; the connector POSTs observations back via `/api/observations`. |
107
+ | Gmail | ✓ | ✓ | ✓ (descriptor-driven) | Native mode uses the main backend's own Gmail MCP connector (Claude's hosted connector, the Codex apps connector, or Gemini's google-workspace extension); the backend POSTs observations back via `/api/observations`. |
107
108
  | Outlook | ✓ | ✓ | ✓ (user-managed) | Native mode requires you to install your own MCP / skill harness on the main backend (`userManagedConnector: true`); the probe synthesises a user-managed result and skips the missing-variant gate. |
108
- | Yahoo | ✓ | | — | IMAP transport. No native MCP variant. |
109
- | iCloud | ✓ | | — | IMAP transport. No native MCP variant. |
110
- | Generic IMAP | ✓ | ✓ | — | IMAP transport. No native MCP variant. |
109
+ | Yahoo | ✓ | | — | IMAP transport. Direct-only; never enters the delegated surface. |
110
+ | iCloud | ✓ | | — | IMAP transport. Direct-only; never enters the delegated surface. |
111
111
 
112
112
  Mode flips run through the §14.7 live probe + the per-key
113
113
  `runtime_state.integration_flip_lock:<key>`. Changing the main
@@ -118,19 +118,22 @@ mode lifecycle.
118
118
 
119
119
  ## What It Outputs
120
120
 
121
- - New threads land in the local `messages` table (FTS-indexed).
122
- - Classification labels are written via the provider API.
121
+ - New threads land in the local `mail_messages_index` table
122
+ (FTS-indexed via `fts_mail_messages`).
123
+ - Labels/tags are written via the provider API when the agent applies
124
+ them (`POST /mail/:account/messages/:id/tags`).
123
125
  - A short "mail" section in `state/today.md` when items qualified.
124
126
 
125
127
  ## Where in the Dashboard
126
128
 
127
129
  - **Connections → Mail** is the per-account configuration: providers,
128
- credentials, polling, label setup.
130
+ credentials, per-account active toggles, and the Gmail classification
131
+ model.
129
132
 
130
133
  ## Configuration
131
134
 
132
135
  Per account you choose a provider kind (`gmail` / `outlook` / `yahoo` /
133
- `icloud`) plus credentials, label conventions, and polling interval. You
136
+ `icloud`) plus credentials and an optional display label. You
134
137
  pick the kind, not the transport — Yahoo and iCloud connect over IMAP
135
138
  under the hood, but that is an implementation detail. The set of enabled
136
139
  providers is `enabledMailProviders` (default `["gmail"]`).
@@ -139,8 +142,8 @@ providers is `enabledMailProviders` (default `["gmail"]`).
139
142
 
140
143
  - An **auth failure** points at expired credentials. The dashboard's
141
144
  auth-health card flips to a warning. See [Auth Failed](../../troubleshooting/auth-failed.md).
142
- - A **classifier that misses** a sender consistently — add a manual
143
- label rule on `/connections/mail`.
145
+ - A **classifier that misses** consistently — switch the model behind
146
+ it via the Gmail Classification Model card on `/connections/mail`.
144
147
 
145
148
  ## Related
146
149
 
@@ -8,8 +8,8 @@ aliases:
8
8
  - notion integration
9
9
  category: features
10
10
  summary: |
11
- Watch a Notion database (or a curated set of pages) for changes.
12
- Changes record observations consumed by the hourly check.
11
+ Watch one or more configured Notion databases for changes.
12
+ Changes record observations consumed by the activity scan.
13
13
  section: integrations
14
14
  tags:
15
15
  - integrations
@@ -21,9 +21,10 @@ ask_examples:
21
21
  - How do I connect Notion?
22
22
  - Will Notion notify me on every page change?
23
23
  - What does Notion native mode do?
24
+ - Why are my Notion routine fetches skipped?
24
25
  locale: en-US
25
26
  created: 2026-04-25
26
- updated: 2026-05-28
27
+ updated: 2026-06-11
27
28
  keywords:
28
29
  - notion
29
30
  - page
@@ -33,11 +34,11 @@ keywords:
33
34
  - integration modes
34
35
  related:
35
36
  - features/integrations/obsidian
36
- - features/routines/hourly-check
37
+ - features/routines/activity-scan
37
38
  - concepts/delegated-mode
38
39
  - concepts/observations
39
40
  ui_anchors:
40
- - /connections/knowledge
41
+ - /connections/notes
41
42
  config_keys:
42
43
  - notionPollIntervalSeconds
43
44
  api_endpoints:
@@ -47,8 +48,8 @@ api_endpoints:
47
48
 
48
49
  # Notion
49
50
 
50
- Aitne polls a configured Notion database or page set, records an
51
- observation on change, and the hourly check decides whether anything
51
+ Aitne polls the configured Notion databases, records an
52
+ observation on change, and the activity scan decides whether anything
52
53
  warrants surfacing. The agent can also read pages on demand through
53
54
  the `notion` skill.
54
55
 
@@ -66,10 +67,10 @@ modes the poller does not run — see Integration Modes below.
66
67
  ## Integration Modes
67
68
 
68
69
  Notion supports all four integration modes (`direct` / `delegated` /
69
- `native` / `disabled`), selected from **Connections → Knowledge**.
70
+ `native` / `disabled`), selected from **Connections → Notes**.
70
71
 
71
72
  - **`direct`** — the daemon polls Notion itself, records change
72
- observations, and the hourly check consumes them.
73
+ observations, and the activity scan consumes them.
73
74
  - **`delegated`** — a delegated-sync worker runs on opt-in cadences;
74
75
  observations are recorded the same way but on a different
75
76
  schedule (see [Delegated Mode](../../concepts/delegated-mode.md)).
@@ -86,10 +87,30 @@ Notion supports all four integration modes (`direct` / `delegated` /
86
87
  Switching modes requires the integration flip-lock probe to pass
87
88
  (connector reachable, capabilities reported). See `POST /api/integrations/notion/probe`.
88
89
 
90
+ ## Routine Fetch Targets
91
+
92
+ Autonomous routine fetches (the `routine.fetch_window` pre-pass that
93
+ feeds the morning routine and activity scan) are limited to an explicit
94
+ allowlist of pages you configure under **Connections → Notes →
95
+ Routine fetch targets**. This prevents the agent from searching the
96
+ whole workspace on every pass — workspace-wide scans were the dominant
97
+ cost driver before the allowlist existed.
98
+
99
+ - Each target is a Notion page URL, page ID, or page title. Prefer a
100
+ URL or ID; titles are matched best-effort and can be ambiguous.
101
+ - **Until at least one target is listed, routine Notion fetches are
102
+ skipped entirely** (recorded as a `plan_drop:no_fetch_targets` skip in
103
+ the activity log). On-demand reads in DMs are unaffected.
104
+ - Routine passes fetch at most 10 targets per window; extra entries are
105
+ skipped each pass.
106
+ - The allowlist applies in every mode (`direct` / `delegated` /
107
+ `native`) and survives mode switches and main-backend changes.
108
+
89
109
  ## Where in the Dashboard
90
110
 
91
- - **Connections → Knowledge** holds the integration token, target
92
- databases, and the mode picker.
111
+ - **Connections → Notes** holds the integration token, target
112
+ databases, the routine fetch target allowlist, and the mode picker.
113
+ The same Notion settings body appears in the setup wizard's Notes step.
93
114
 
94
115
  ## Configuration
95
116
 
@@ -103,6 +124,9 @@ Switching modes requires the integration flip-lock probe to pass
103
124
  ≥ 300 seconds.
104
125
  - "No observations" in `native` mode is expected — observations flow
105
126
  only when the main backend POSTs them during a session.
127
+ - Routine fetches silently absent? Check that **Routine fetch targets**
128
+ is non-empty — an empty allowlist skips Notion in every routine pass
129
+ (the activity log shows `plan_drop:no_fetch_targets`).
106
130
 
107
131
  ## Related
108
132
 
@@ -9,7 +9,7 @@ aliases:
9
9
  category: features
10
10
  summary: |
11
11
  Watch an Obsidian vault for new and changed notes. Changes record
12
- observations the hourly check consumes; the agent can also read
12
+ observations the activity scan consumes; the agent can also read
13
13
  notes on demand.
14
14
  section: integrations
15
15
  tags:
@@ -24,7 +24,7 @@ ask_examples:
24
24
  - Why didn't the agent see my new note?
25
25
  locale: en-US
26
26
  created: 2026-04-25
27
- updated: 2026-05-28
27
+ updated: 2026-06-11
28
28
  keywords:
29
29
  - obsidian
30
30
  - vault
@@ -32,10 +32,10 @@ keywords:
32
32
  - obsidian observer
33
33
  related:
34
34
  - features/integrations/notion
35
- - features/routines/hourly-check
35
+ - features/routines/activity-scan
36
36
  - concepts/observations
37
37
  ui_anchors:
38
- - /connections/knowledge
38
+ - /connections/notes
39
39
  config_keys:
40
40
  - externalObsidianVaultPath
41
41
  - externalObsidianVaultName
@@ -46,7 +46,7 @@ config_keys:
46
46
  # Obsidian
47
47
 
48
48
  Point Aitne at your Obsidian vault directory; new and changed notes
49
- record observations the hourly check consumes. The agent can read and
49
+ record observations the activity scan consumes. The agent can read and
50
50
  write vault notes through the `external-services` skill.
51
51
 
52
52
  Reads and writes go through the Obsidian app's CLI — the Obsidian app
@@ -72,18 +72,18 @@ its own output.
72
72
  Continuously — the watcher runs as long as the daemon is up and a vault
73
73
  path is configured (`externalObsidianWatch=true`). Saves are debounced
74
74
  by `obsidianDebounceSeconds` before an observation is recorded; the
75
- [hourly check](../routines/hourly-check.md) later consumes those
75
+ [activity scan](../routines/activity-scan.md) later consumes those
76
76
  observations.
77
77
 
78
78
  ## Where in the Dashboard
79
79
 
80
- - **Connections → Knowledge** to point at the vault directory.
80
+ - **Connections → Notes** to point at the vault directory.
81
81
 
82
82
  ## Configuration
83
83
 
84
84
  | Setting | Default | Notes |
85
85
  |---|---|---|
86
- | `externalObsidianVaultPath` | unset | Vault directory; set in Connections → Knowledge. |
86
+ | `externalObsidianVaultPath` | unset | Vault directory; set in Connections → Notes. |
87
87
  | `externalObsidianWatch` | true | Set false to keep the path but stop recording changes (large-vault churn control). |
88
88
  | `obsidianDebounceSeconds` | 5 | How long to wait after a save before recording. |
89
89
 
@@ -46,7 +46,7 @@ ask_examples:
46
46
  - How much does one Architecture refresh cost?
47
47
  locale: en-US
48
48
  created: 2026-05-05
49
- updated: 2026-05-28
49
+ updated: 2026-06-07
50
50
  keywords:
51
51
  - my life
52
52
  - git
@@ -62,7 +62,7 @@ keywords:
62
62
  related:
63
63
  - features/integrations/git
64
64
  - features/integrations/github
65
- - features/routines/hourly-check
65
+ - features/routines/activity-scan
66
66
  - concepts/observations
67
67
  ui_anchors:
68
68
  - /git
@@ -110,11 +110,11 @@ per repo (all open by default so the controls are visible at a glance):
110
110
  2. **Triggers** — fire when matching Git or GitHub events arrive on
111
111
  this repository. Triggers run **alongside** the project-wide
112
112
  task-flow defaults, not in place of them. Each trigger has a
113
- workdir mode (`local-clone` or `ephemeral`); local-clone triggers
113
+ workdir mode (`local-clone` or `temp`); local-clone triggers
114
114
  require the repository to have a `localPath`.
115
115
  3. **Daily git management** — opt-in per repo. Enabling it does three
116
116
  distinct kinds of work, on different cadences:
117
- - On the first **Run init now** click, writes the curated
117
+ - On the first **Generate overview** click, writes the curated
118
118
  `knowledge/repos/<slug>/overview.md` skeleton, mirrors the source
119
119
  `README.*` to `knowledge/repos/<slug>/README.md`, and
120
120
  **automatically queues a one-shot Architecture refresh** so the AI
@@ -143,7 +143,7 @@ a Sonnet-class agent that reads the actual code.
143
143
  **When it's generated**
144
144
 
145
145
  - **First time** — automatically queued the moment you click
146
- **Run init now**. Returns immediately with `architectureScheduleId`;
146
+ **Generate overview**. Returns immediately with `architectureScheduleId`;
147
147
  the agent runs in the background (typically 30 s – 2 min) and
148
148
  replaces the placeholder block with real analysis.
149
149
  - **On demand** — click **Refresh architecture** any time. The daemon
@@ -171,7 +171,7 @@ new Architecture body via the chokepoint
171
171
  `PUT /api/repositories/:id/architecture-section`; the daemon performs
172
172
  the marker-bracketed replacement so other sections (Notable Changes,
173
173
  Daily Activity Log, Open Threads) are preserved verbatim. Every write
174
- also snapshots the previous Architecture body to `md_file_snapshots`
174
+ also snapshots the previous `overview.md` to `md_file_snapshots`
175
175
  for recovery.
176
176
 
177
177
  ## README Mirror
@@ -180,7 +180,7 @@ for recovery.
180
180
  the repository's `README.*` (whichever extension exists, with `.md`
181
181
  preferred). It is refreshed on:
182
182
 
183
- - Every **Run init now** (initial mirror).
183
+ - Every **Generate overview** click (initial mirror).
184
184
  - Every **Refresh architecture** click (so the mirror tracks what the
185
185
  agent just analyzed).
186
186
 
@@ -197,21 +197,24 @@ README is rewritten.
197
197
  ## When It Runs / How It Is Triggered
198
198
 
199
199
  - **Polling** runs continuously on the per-repo cadence (or the global
200
- default). Observations land in the `observations` table; the hourly
201
- check coalesces them.
200
+ default). Observations land in the `observations` table; the activity
201
+ scan coalesces them.
202
202
  - **Triggers** fire when the matching event arrives on the EventBus.
203
203
  - **Daily git management** is dispatched by `RepositoryManagementCron`,
204
204
  which iterates the `repository_management` table once an hour and
205
- emits a `scheduled.task` (`git.project.update`) for any enabled row
206
- whose `last_scan_at` is more than 24 hours old.
205
+ runs the scan writer directly (an in-process daemon write — no agent
206
+ session) for any enabled row whose `last_scan_at` is more than
207
+ 24 hours old.
207
208
  - **Architecture refresh** (`git.project.refresh_architecture`) is
208
209
  enqueued only on:
209
- - Manual **Run init now** (auto-enqueue, first time only).
210
+ - **Generate overview** (auto-enqueue skipped when a previous
211
+ analysis already landed, re-queued when the Architecture section
212
+ is still pending).
210
213
  - Manual **Refresh architecture** click.
214
+ - A scan (cron or manual) that finds `overview.md` missing and
215
+ re-creates the skeleton via the implicit init.
211
216
 
212
- No cron, no observer fires this. The cron-driven implicit init
213
- (when daily scan creates a missing skeleton) deliberately does NOT
214
- auto-enqueue.
217
+ There is no recurring cron that re-runs the analysis on a timer.
215
218
 
216
219
  ## What It Outputs
217
220
 
@@ -231,8 +234,8 @@ trigger's process key.
231
234
 
232
235
  - **My Life → Git** (`/git`) — this page. Polling, Triggers, and Daily
233
236
  git management are all expanded by default. The Daily-git-management
234
- panel's buttons appear in lifecycle order — **Run init now Refresh
235
- architecture → Run today's scan now** — and each surfaces an inline
237
+ panel's buttons appear in lifecycle order — **Generate overview
238
+ Refresh architecture → Run today's scan now** — and each surfaces an inline
236
239
  green confirmation on success or a red error message on failure.
237
240
  - **Connections → Repositories** (`/connections/repositories`) —
238
241
  register a repo (link a `localPath` and/or `owner/repo`), rename,
@@ -272,7 +275,7 @@ repository has a `localPath`:
272
275
  - **Triggers** with `workdirMode: "local-clone"` require a `localPath`
273
276
  on the parent repository (enforced when the trigger is created and
274
277
  again if you try to clear `localPath` while such a trigger exists).
275
- Triggers with `workdirMode: "ephemeral"` work without a local clone.
278
+ Triggers with `workdirMode: "temp"` work without a local clone.
276
279
  - **Daily git management** is **local-clone-bound for v1**. The
277
280
  toggle is disabled and the dashboard surfaces "No local clone — link
278
281
  one to enable this feature." Internally the
@@ -289,9 +292,10 @@ repository has a `localPath`:
289
292
  - **The toggle is greyed out with "No local clone".** Add a
290
293
  `localPath` on **Connections → Repositories**, then return.
291
294
  - **`Last status` shows `failed` and `Failure streak` keeps climbing.**
292
- The cron still iterates but the dispatched session is failing —
293
- open the latest conversation under that repo's tile, or check
294
- **Activity** for the `git.project.update` run. A high streak does
295
+ The cron still iterates but the in-process scan writer is failing —
296
+ check the daemon logs (`aitne logs`) for "Failed to run repository
297
+ management scan", or click **Run today's scan now** to surface the
298
+ error inline. A high streak does
295
299
  not prevent further scans (the cron retries on the next interval).
296
300
  - **`Last scan` is "never" but the row is enabled.** Either the cron
297
301
  has not ticked yet (default tick is 1 hour) or the row has no local
@@ -313,7 +317,7 @@ repository has a `localPath`:
313
317
  before clicking again.
314
318
  - **The README mirror went out of date** after the source repo's
315
319
  README was rewritten. Click **Refresh architecture** (which also
316
- re-copies the README) or **Run init now** on the repo.
320
+ re-copies the README) or **Generate overview** on the repo.
317
321
 
318
322
  ## Related
319
323
 
@@ -322,5 +326,5 @@ repository has a `localPath`:
322
326
  - [GitHub integration](../integrations/github.md) — remote-side data
323
327
  (notifications, workflow runs) reachable via `gh` even without a
324
328
  local clone.
325
- - [Hourly check](../routines/hourly-check.md) — the routine that
329
+ - [Activity scan](../routines/activity-scan.md) — the routine that
326
330
  consumes the observations this page's polling generates.
@@ -26,7 +26,7 @@ ask_examples:
26
26
  - Where do reading-list items get stored?
27
27
  locale: en-US
28
28
  created: 2026-04-25
29
- updated: 2026-05-28
29
+ updated: 2026-06-07
30
30
  keywords:
31
31
  - reading
32
32
  - books
@@ -65,12 +65,15 @@ at `/reading`.
65
65
  "Export Notebook" email.
66
66
  - **List** the library on `/reading` or via `GET /api/books`
67
67
  (filterable by `status` and `source`, paginated to 200 rows per call).
68
- - **Mark complete or abandoned** — the agent updates an existing row via
69
- `PATCH /api/books/:id`. Setting `status` to `completed` stamps
70
- `completed_at` automatically; you can also set a 1–5 `rating` or
71
- `notes`.
68
+ - **Mark complete or abandoned** — an existing row is updated via
69
+ `PATCH /api/books/:id`. This is an **Approve-tier** write that requires
70
+ an operator `Authorization: Bearer` token, so it is driven from the
71
+ dashboard, not autonomously by the agent (an unauthenticated agent curl
72
+ is rejected with **401** before the handler runs). Setting `status` to
73
+ `completed` stamps `completed_at` automatically; you can also set a 1–5
74
+ `rating` or `notes`.
72
75
  - **Recommend** from the list during reactive turns, and refresh the
73
- reading-taste profile during weekly and monthly reviews.
76
+ reading-taste profile during the weekly review.
74
77
 
75
78
  There is **no bare "add a book" endpoint** — new books arrive through the
76
79
  two Kindle import pipelines above (or are created internally during an
@@ -90,8 +93,10 @@ drives the list shape. The reading skill loads in two situations:
90
93
 
91
94
  - **Reactively**, when you mention a book or highlight in a DM.
92
95
  - **From existing routines** — the morning routine can mention what
93
- you're currently reading, and the weekly and monthly reviews pull
94
- reading progress and refresh the reading-taste profile.
96
+ you're currently reading, the weekly review refreshes the
97
+ reading-taste profile, and the monthly review pulls reading progress
98
+ for its reading report (it reads the existing taste profile but does
99
+ not re-derive it).
95
100
 
96
101
  ## What It Outputs
97
102
 
@@ -111,9 +116,13 @@ drives the list shape. The reading skill loads in two situations:
111
116
  network error there surfaces in the audit log even when the chat reply
112
117
  looked fine. A common cause is pasting a partial or non-Kindle
113
118
  clippings file, which yields zero parsed books.
114
- - **An edit that didn't stick**: `PATCH /api/books/:id` returns 404 if
115
- the id doesn't exist and 400 for an invalid `status` (only `reading`,
116
- `completed`, `abandoned`) or an out-of-range `rating` (must be 1–5).
119
+ - **An edit that didn't stick**: `PATCH /api/books/:id` is Approve-tier,
120
+ so a request without a valid operator Bearer token is rejected with 401
121
+ before the handler runs book status/rating/notes corrections are made
122
+ from the dashboard, not by an autonomous agent. Once authenticated, it
123
+ returns 404 if the id doesn't exist and 400 for an invalid `status`
124
+ (only `reading`, `completed`, `abandoned`) or an out-of-range `rating`
125
+ (must be 1–5).
117
126
 
118
127
  ## Related
119
128
 
@@ -10,7 +10,7 @@ aliases:
10
10
  - receipt files
11
11
  category: features
12
12
  summary: |
13
- A SQLite-backed log of receipt and invoice attachments the Gmail
13
+ A SQLite-backed log of receipt and invoice attachments the mail
14
14
  observer detects, plus an export path that saves them into the
15
15
  operator's external Obsidian vault for tax / reimbursement tracking.
16
16
  section: lifestyle
@@ -27,7 +27,7 @@ ask_examples:
27
27
  - What receipts haven't I saved yet?
28
28
  locale: en-US
29
29
  created: 2026-04-25
30
- updated: 2026-05-28
30
+ updated: 2026-06-07
31
31
  keywords:
32
32
  - receipt
33
33
  - invoice
@@ -50,20 +50,21 @@ related:
50
50
 
51
51
  ## In One Sentence
52
52
 
53
- Receipts are PDF / image attachments the Gmail observer detects while
54
- scanning your mail; their metadata lives in the `receipts` SQLite
55
- table, and the agent can save the original file into your external
56
- Obsidian vault on request.
53
+ Receipts are attachments (typically PDFs or images) the mail observer
54
+ detects while scanning your mail; their metadata lives in the
55
+ `receipts` SQLite table, and the agent can save the original file into
56
+ your external Obsidian vault on request.
57
57
 
58
58
  ## How Detection Works
59
59
 
60
- The Gmail observer scans travel-booking emails for PDF / image
61
- attachments and retains other generic documents it finds. Each detected
60
+ The mail observer scans travel-booking emails across every connected
61
+ mail account and records each attachment it finds. Each detected
62
62
  attachment inserts a row into the `receipts` table, keyed uniquely on
63
63
  `(account_id, provider_msg_id, attachment_id)` so re-scans are
64
64
  idempotent. Columns:
65
65
 
66
- - `category` — `document` or `travel` (nullable until classified)
66
+ - `category` — `travel` at detection time; reclassify to `document`
67
+ via PATCH (nullable on legacy rows)
67
68
  - `provider_msg_id`, `attachment_id`, `account_id` — locate the source
68
69
  attachment in the unified mail registry
69
70
  - `filename`, `mime_type`, `size_bytes` — attachment metadata
@@ -105,7 +106,7 @@ is documented in
105
106
 
106
107
  ## Configuration
107
108
 
108
- Detection runs as part of the Gmail observer; see
109
+ Detection runs as part of the mail observer; see
109
110
  [Mail](../integrations/mail.md). The save target follows the external
110
111
  vault convention `receipts/YYYY/MM/<merchant>-<date>.<ext>`.
111
112
 
@@ -27,7 +27,7 @@ ask_examples:
27
27
  - Where are my travel bookings stored?
28
28
  locale: en-US
29
29
  created: 2026-04-25
30
- updated: 2026-05-28
30
+ updated: 2026-06-07
31
31
  keywords:
32
32
  - flight
33
33
  - hotel
@@ -99,8 +99,9 @@ classifier do the rest. The flow is:
99
99
 
100
100
  ## API
101
101
 
102
- Read-only and status-update access (read endpoints are autonomous; the
103
- PATCH endpoint follows the standard write-safety tier):
102
+ Read-only and status-update access (read endpoints are read-sensitive
103
+ they expose personal travel data; the PATCH endpoint follows the standard
104
+ write-safety tier and requires approval):
104
105
 
105
106
  ```bash
106
107
  # All bookings (optionally filter by type/status/date range)