@aitne-sh/aitne 0.1.10 → 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 (130) hide show
  1. package/README.md +8 -8
  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 +4 -5
  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 +11 -10
  12. package/agent-assets/docs/concepts/delegated-mode.md +13 -12
  13. package/agent-assets/docs/concepts/memory-model.md +13 -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 +19 -8
  19. package/agent-assets/docs/concepts/skills.md +10 -8
  20. package/agent-assets/docs/features/integrations/browser-history.md +14 -10
  21. package/agent-assets/docs/features/integrations/calendar.md +24 -13
  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 +22 -20
  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 +24 -20
  28. package/agent-assets/docs/features/lifestyle/reading.md +5 -3
  29. package/agent-assets/docs/features/lifestyle/receipts.md +11 -10
  30. package/agent-assets/docs/features/memory-files/agent-journal.md +25 -16
  31. package/agent-assets/docs/features/memory-files/agent-lessons.md +7 -6
  32. package/agent-assets/docs/features/memory-files/projects.md +5 -4
  33. package/agent-assets/docs/features/memory-files/schedule.md +6 -3
  34. package/agent-assets/docs/features/memory-files/today.md +10 -7
  35. package/agent-assets/docs/features/memory-files/user-profile.md +14 -9
  36. package/agent-assets/docs/features/messaging/bang-commands.md +21 -6
  37. package/agent-assets/docs/features/messaging/overview.md +12 -9
  38. package/agent-assets/docs/features/operations/activity-and-conversations.md +1 -1
  39. package/agent-assets/docs/features/operations/browser-tasks.md +184 -0
  40. package/agent-assets/docs/features/operations/cost-tracking.md +11 -1
  41. package/agent-assets/docs/features/operations/managed-chromium.md +1 -0
  42. package/agent-assets/docs/features/operations/notifications.md +11 -1
  43. package/agent-assets/docs/features/operations/quiet-hours.md +41 -12
  44. package/agent-assets/docs/features/operations/schedule-approaching.md +2 -2
  45. package/agent-assets/docs/features/routines/activity-scan.md +220 -0
  46. package/agent-assets/docs/features/routines/custom-routines.md +82 -138
  47. package/agent-assets/docs/features/routines/evening-review.md +14 -12
  48. package/agent-assets/docs/features/routines/morning-routine.md +4 -3
  49. package/agent-assets/docs/features/routines/weekly-review.md +18 -3
  50. package/agent-assets/docs/getting-started/01-what-is-this.md +3 -3
  51. package/agent-assets/docs/getting-started/04-first-day.md +27 -30
  52. package/agent-assets/docs/glossary.md +4 -4
  53. package/agent-assets/docs/guides/add-a-custom-routine.md +122 -68
  54. package/agent-assets/docs/guides/pause-the-agent.md +22 -20
  55. package/agent-assets/docs/guides/reinstall-cleanly.md +2 -0
  56. package/agent-assets/docs/guides/setup-wizard.md +12 -9
  57. package/agent-assets/docs/reference/api.md +11 -0
  58. package/agent-assets/docs/reference/config.md +30 -20
  59. package/agent-assets/docs/reference/keyboard-shortcuts.md +2 -2
  60. package/agent-assets/docs/reference/knowledge-layout.md +14 -10
  61. package/agent-assets/docs/reference/process-keys.md +7 -7
  62. package/agent-assets/docs/reference/skills.md +5 -2
  63. package/agent-assets/docs/troubleshooting/morning-routine-didnt-run.md +32 -16
  64. package/agent-assets/docs/troubleshooting/observation-not-detected.md +26 -24
  65. package/agent-assets/docs/troubleshooting/wiki-write-failed.md +3 -3
  66. package/agent-assets/skills/agent-create/SKILL.md +11 -0
  67. package/agent-assets/skills/background-task/SKILL.md +184 -0
  68. package/agent-assets/skills/background-task-reply/SKILL.md +100 -0
  69. package/agent-assets/skills/browser-history/SKILL.md +31 -13
  70. package/agent-assets/skills/browser-task/SKILL.md +12 -5
  71. package/agent-assets/skills/context/SKILL.md +4 -3
  72. package/agent-assets/skills/context/references/api.md +5 -3
  73. package/agent-assets/skills/context/references/snapshot-files.md +4 -4
  74. package/agent-assets/skills/external-services/SKILL.native.claude.md +13 -7
  75. package/agent-assets/skills/external-services/SKILL.native.codex.md +11 -5
  76. package/agent-assets/skills/external-services/SKILL.native.gemini.md +11 -5
  77. package/agent-assets/skills/mail/SKILL.md +2 -2
  78. package/agent-assets/skills/mail/SKILL.native.claude.md +16 -9
  79. package/agent-assets/skills/mail/SKILL.native.codex.md +15 -8
  80. package/agent-assets/skills/mail/SKILL.native.gemini.md +11 -5
  81. package/agent-assets/skills/managed-tasks/references/recurrence-rule.md +20 -12
  82. package/agent-assets/skills/management-policy/SKILL.md +26 -17
  83. package/agent-assets/skills/management-policy/curation.json +1 -1
  84. package/agent-assets/skills/management-policy/references/policy-workflow.md +26 -13
  85. package/agent-assets/skills/notify/SKILL.md +10 -5
  86. package/agent-assets/skills/notify/references/priority.md +30 -17
  87. package/agent-assets/skills/notion/SKILL.md +1 -1
  88. package/agent-assets/skills/notion/SKILL.native.claude.md +3 -3
  89. package/agent-assets/skills/notion/SKILL.native.codex.md +2 -2
  90. package/agent-assets/skills/notion/SKILL.native.gemini.md +2 -2
  91. package/agent-assets/skills/observations/SKILL.md +5 -5
  92. package/agent-assets/skills/roadmap/references/api.md +7 -2
  93. package/agent-assets/skills/schedule/SKILL.md +11 -2
  94. package/agent-assets/skills/schedule/references/recurrence-rule.md +20 -12
  95. package/agent-assets/skills/scheduled-managed-task/SKILL.md +12 -9
  96. package/agent-assets/skills/today/SKILL.md +19 -3
  97. package/agent-assets/skills/today/references/agent-plan-lifecycle.md +9 -4
  98. package/agent-assets/skills/today/references/agent-plan-revision.md +28 -0
  99. package/agent-assets/skills/today/references/today-skeleton.md +5 -5
  100. package/agent-assets/skills/user-interview/references/op-morning.md +1 -1
  101. package/agent-assets/system-prompts/routine-research-cluster-update.md +71 -0
  102. package/agent-assets/task-flows/_partials/notion-acquire.notion.md +47 -21
  103. package/agent-assets/task-flows/background_task.md +81 -0
  104. package/agent-assets/task-flows/git.local_ahead.stale.md +1 -1
  105. package/agent-assets/task-flows/git.push.detected.md +1 -1
  106. package/agent-assets/task-flows/git.tag.created.md +1 -1
  107. package/agent-assets/task-flows/github.assigned.md +1 -1
  108. package/agent-assets/task-flows/github.pull_request.review_requested.md +2 -2
  109. package/agent-assets/task-flows/github.security_alert.md +1 -1
  110. package/agent-assets/task-flows/message.received.dm.md +7 -3
  111. package/agent-assets/task-flows/message.received.dm_first.md +4 -2
  112. package/agent-assets/task-flows/{routine.hourly_check.md → routine.activity_scan.md} +31 -23
  113. package/agent-assets/task-flows/{routine.hourly_check.triage.md → routine.activity_scan.triage.md} +3 -3
  114. package/agent-assets/task-flows/routine.monthly_review.md +9 -8
  115. package/agent-assets/task-flows/routine.research_cluster_update.md +33 -19
  116. package/agent-assets/task-flows/routine.roadmap_refresh.md +2 -2
  117. package/agent-assets/task-flows/routine.today_refresh.md +1 -1
  118. package/agent-assets/task-flows/routine.weekly_review.md +103 -4
  119. package/agent-assets/task-flows/schedule.approaching.md +2 -2
  120. package/agent-assets/task-flows/scheduled.dm.md +77 -1
  121. package/agent-assets/task-flows/scheduled.task.md +7 -1
  122. package/agent-assets/templates/_manifest.json +2 -2
  123. package/agent-assets/templates/knowledge/dossiers/_index.md +1 -1
  124. package/agent-assets/templates/knowledge/dossiers/{hourly.md → activity-scan.md} +1 -1
  125. package/agent-assets/templates/policies/journal-format.md +1 -1
  126. package/agent-assets/templates/policies/mcp.md +1 -1
  127. package/agent-assets/templates/policies/routines/_index.md +1 -1
  128. package/agent-assets/templates/policies/routines/{hourly.md → activity-scan.md} +5 -5
  129. package/package.json +6 -5
  130. package/agent-assets/docs/features/routines/hourly-check.md +0 -205
@@ -74,9 +74,10 @@ around them and DM you ahead of meetings that matter.
74
74
 
75
75
  ## What It Does
76
76
 
77
- - **Polls** the connected calendar(s) on `calendarPollIntervalSeconds`.
77
+ - **Polls** Google Calendar on `calendarPollIntervalSeconds`; Outlook
78
+ and Apple calendars are read on demand rather than polled.
78
79
  - **Records observations** when events change (add / move / remove),
79
- consumed by the hourly check.
80
+ consumed by the activity scan.
80
81
  - **Surfaces today's events** to the morning routine so they land in
81
82
  `state/today.md` and the day's schedule file.
82
83
  - **Reads** events on demand for reactive turns ("am I free at 3?").
@@ -99,18 +100,20 @@ an explicit request.
99
100
 
100
101
  ## Where in the Dashboard
101
102
 
102
- - **Connections → Calendar** holds OAuth, scope, and polling.
103
+ - **Connections → Calendar** holds OAuth, scope, and the integration
104
+ mode; the poll interval itself is edited on Settings → Infrastructure.
103
105
  - The same page hosts the **Calendar Event Model** card (see below)
104
- when Google Calendar is in direct mode.
106
+ unless Google Calendar runs in delegated mode.
105
107
 
106
108
  ## Calendar Event Model
107
109
 
108
110
  The Calendar Event Model picker chooses the backend and model that
109
111
  runs when the **daemon-side poller detects a calendar change**. It binds
110
- the `calendar.change` ProcessKey, which fires in two situations:
112
+ the `calendar.change` ProcessKey. The poller's change detection reacts
113
+ in two situations:
111
114
 
112
115
  - An event was added, moved, or deleted between polls (recorded as a
113
- change observation; the hourly check picks it up).
116
+ change observation; the activity scan picks it up).
114
117
  - An event was created far in advance (long-horizon events more than 14
115
118
  days out nudge the roadmap-refresh routine so `plans/roadmap.md` can
116
119
  build a preparation timeline).
@@ -127,22 +130,28 @@ different mix.
127
130
 
128
131
  The picker is **only meaningful when Google Calendar runs in direct
129
132
  mode.** In delegated mode the daemon hands off all Google Calendar
130
- work to the connector inside your agent's backend, so:
133
+ work to the connector inside your agent's backend, so, by default:
131
134
 
132
135
  - No approaching-event reminders fire from the daemon.
133
136
  - No change observations are recorded between polls.
134
- - The hourly check has no calendar-side observations to react to.
137
+ - The activity scan has no calendar-side observations to react to.
135
138
  - Long-horizon roadmap-refresh nudges from calendar do not fire.
136
139
 
137
140
  The agent only learns about calendar state in delegated mode when it
138
141
  asks the connector itself inside a session (for example, while
139
142
  running the morning routine). It is a pull-only model — the daemon
140
- does not push.
143
+ does not push. The exception is **Background Sync** (Settings → Hours
144
+ & Notifications): two opt-in cadences, off by default, poll the
145
+ calendar through the backend's connector while delegated — the
146
+ imminent cadence (next 1 h) restores the 15-minute reminders, and the
147
+ day-ahead cadence (next 24 h) restores change observations and
148
+ far-future roadmap-refresh detection.
141
149
 
142
150
  To avoid presenting a setting that does nothing, the dashboard hides
143
151
  the Calendar Event Model card whenever Google Calendar is delegated.
144
152
  If you want approaching-event reminders and change observations back,
145
- switch the integration mode to direct on the same page.
153
+ switch the integration mode to direct on the same page, or enable the
154
+ calendar Background Sync cadences.
146
155
 
147
156
  ## Configuration
148
157
 
@@ -158,10 +167,12 @@ rather than an env-style setting; the underlying state lives in the
158
167
 
159
168
  - A **stale calendar** in `/schedule` after a real-world add usually
160
169
  means the poll has not yet run. Check the next-fire timestamp.
161
- - An **OAuth-expired** state reports on the auth-health card.
170
+ - An **OAuth-expired** state reports on the Google card's connection
171
+ status on Connections → Calendar.
162
172
  - **No reminders or change observations** while in delegated mode is
163
- expected behavior, not a bug — switch to direct mode to restore the
164
- daemon-side flows. See "Calendar Event Model" above.
173
+ expected behavior, not a bug — switch to direct mode or enable the
174
+ Background Sync cadences to restore the daemon-side flows. See
175
+ "Calendar Event Model" above.
165
176
 
166
177
  ## Related
167
178
 
@@ -10,7 +10,7 @@ aliases:
10
10
  category: features
11
11
  summary: |
12
12
  Watch one or more git repositories for new commits. Changes record
13
- observations the hourly check coalesces — there is no per-commit
13
+ observations the activity scan coalesces — there is no per-commit
14
14
  notification spam.
15
15
  section: integrations
16
16
  tags:
@@ -26,7 +26,7 @@ ask_examples:
26
26
  - How often does the daemon poll my repos?
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
  - git
32
32
  - commit
@@ -35,10 +35,11 @@ keywords:
35
35
  - polling
36
36
  related:
37
37
  - features/integrations/github
38
- - features/routines/hourly-check
38
+ - features/routines/activity-scan
39
39
  - concepts/observations
40
40
  ui_anchors:
41
41
  - /connections/repositories
42
+ - /git
42
43
  config_keys:
43
44
  - gitPollIntervalSeconds
44
45
  process_keys:
@@ -53,7 +54,7 @@ api_endpoints:
53
54
  # Git
54
55
 
55
56
  Add local git repositories to a watched set; the daemon polls them
56
- and the hourly check decides whether the recent activity is worth
57
+ and the activity scan decides whether the recent activity is worth
57
58
  flagging.
58
59
 
59
60
  ## What It Does
@@ -71,19 +72,20 @@ by design.
71
72
  ## When It Runs / How It Is Triggered
72
73
 
73
74
  - The poller is continuous.
74
- - The hourly check consumes the accumulated observations.
75
+ - The activity scan consumes the accumulated observations.
75
76
 
76
77
  ## What It Outputs
77
78
 
78
79
  - An `observation` row per detected change set.
79
- - A summary in the hourly check's output when observations qualified.
80
+ - A summary in the activity scan's output when observations qualified.
80
81
 
81
82
  ## Where in the Dashboard
82
83
 
83
- - **Connections → Repositories** lists the watched paths and last-poll
84
- times. Git repos are managed as part of the unified Repositories
85
- surface (the same place that links a local checkout to its GitHub
86
- remote).
84
+ - **Connections → Repositories** lists the watched paths. Git repos are
85
+ managed as part of the unified Repositories surface (the same place
86
+ that links a local checkout to its GitHub remote).
87
+ - **My Life → Git** (`/git`) configures per-repo polling cadence,
88
+ automation triggers, and daily git management.
87
89
 
88
90
  ## Configuration
89
91
 
@@ -103,4 +105,4 @@ by design.
103
105
  ## Related
104
106
 
105
107
  - [GitHub](github.md) — separate integration for remote-side data.
106
- - [Hourly Check](../routines/hourly-check.md) — the consumer.
108
+ - [Activity Scan](../routines/activity-scan.md) — the consumer.
@@ -29,7 +29,7 @@ ask_examples:
29
29
  - Where do I add a GitHub repo to watch?
30
30
  locale: en-US
31
31
  created: 2026-04-25
32
- updated: 2026-05-28
32
+ updated: 2026-06-07
33
33
  keywords:
34
34
  - github
35
35
  - issue
@@ -63,7 +63,7 @@ context_files:
63
63
 
64
64
  The daemon polls GitHub via the local `gh` CLI: review requests, CI
65
65
  failures on the default branch, security alerts, and assignments
66
- become DMs; everything else is recorded for the hourly check.
66
+ become DMs; everything else is recorded for the activity scan.
67
67
 
68
68
  ## What It Does
69
69
 
@@ -77,16 +77,21 @@ become DMs; everything else is recorded for the hourly check.
77
77
  to the workflow-runs side; the notifications poll always runs at the
78
78
  global cadence.
79
79
  - **DMs the user** on the four high-priority triggers below; quieter
80
- signals are coalesced into the hourly check summary.
80
+ signals are coalesced into the activity scan summary.
81
81
 
82
82
  The agent never auto-comments, auto-merges, or pushes.
83
83
 
84
84
  ## High-priority events
85
85
 
86
- The agent will DM the user (priority `high`, can break quiet hours
87
- depending on your notify-skill settings) on:
86
+ The agent will DM the user (priority `high`; during quiet hours the DM
87
+ is deferred until they end rather than dropped — only `critical`
88
+ safety messages break through) on:
88
89
 
89
- - A teammate or bot **requested your review** on a PR.
90
+ - A teammate or bot **requested your review** on a PR — only when it
91
+ looks time-sensitive (release-blocker keywords in the title, or the
92
+ repo is already on your `state/today.md` plan or an active roadmap
93
+ milestone); otherwise it's noted in `state/today.md` and coalesced
94
+ into the activity scan.
90
95
  - You were **assigned** to an issue or PR.
91
96
  - A **Dependabot or code-scanning security alert** fired on a watched
92
97
  repository.
@@ -144,7 +149,9 @@ Watched repos are no longer config keys. The old `gitRepos` /
144
149
  cutover — repos now live in the `repositories` table and are managed on
145
150
  **Connections → Repositories**. Per-repo polling cadence is set on
146
151
  **My Life → Git** and overrides the global interval for that repo's
147
- workflow-runs poll.
152
+ workflow-runs poll. The global interval is the floor — a per-repo
153
+ cadence longer than it slows that repo down, while a shorter one
154
+ still polls at the global tick.
148
155
 
149
156
  ## When Something Goes Wrong
150
157
 
@@ -173,24 +180,25 @@ need a daemon-spawned poller's bookkeeping.
173
180
  - **direct** — the daemon's `GitHubPoller` runs as described above.
174
181
  Use this when you want the daemon to own the poll schedule and to
175
182
  emit DMs without the main backend having to wake up.
176
- - **delegated** — the delegated-sync worker invokes the chosen
177
- backend's read-only `gh` CLI surface on opt-in cadences (see
178
- [Delegated Mode](../../concepts/delegated-mode.md) and
179
- `docs/design/appendices/delegated-sync-opt-in.md`). The daemon
183
+ - **delegated** — a dedicated Git/GitHub cron queues a lite-tier
184
+ `git.lifecycle.poll` task on the `gitPollIntervalSeconds` cadence
185
+ (default hourly); that session uses the chosen backend's read-only
186
+ `gh` CLI surface (see
187
+ [Delegated Mode](../../concepts/delegated-mode.md)). The daemon
180
188
  poller stays off; the lite-tier delegated session takes the polling
181
189
  cost.
182
- - **disabled** — neither the poller nor the delegated worker runs;
190
+ - **disabled** — neither the poller nor the delegated cron runs;
183
191
  the integration is silent.
184
192
 
185
193
  Pick the mode from the GitHub card on **Connections → Repositories**.
186
194
  Mode changes go through the standard `PATCH /api/integrations/github`
187
- flip-lock so the poller and the delegated worker never run
195
+ flip-lock so the poller and the delegated cron never run
188
196
  simultaneously.
189
197
 
190
198
  ## Related
191
199
 
192
200
  - [Git](git.md) — local repo file watcher (separate observer).
193
- - [Hourly Check](../routines/hourly-check.md) — the consumer of
201
+ - [Activity Scan](../routines/activity-scan.md) — the consumer of
194
202
  non-DM-priority observations.
195
203
  - [Delegated Mode](../../concepts/delegated-mode.md) — how the
196
204
  `delegated` mode polls without a daemon poller.
@@ -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
@@ -120,18 +120,20 @@ mode lifecycle.
120
120
 
121
121
  - New threads land in the local `mail_messages_index` table
122
122
  (FTS-indexed via `fts_mail_messages`).
123
- - Classification labels are written via the provider API.
123
+ - Labels/tags are written via the provider API when the agent applies
124
+ them (`POST /mail/:account/messages/:id/tags`).
124
125
  - A short "mail" section in `state/today.md` when items qualified.
125
126
 
126
127
  ## Where in the Dashboard
127
128
 
128
129
  - **Connections → Mail** is the per-account configuration: providers,
129
- credentials, polling, label setup.
130
+ credentials, per-account active toggles, and the Gmail classification
131
+ model.
130
132
 
131
133
  ## Configuration
132
134
 
133
135
  Per account you choose a provider kind (`gmail` / `outlook` / `yahoo` /
134
- `icloud`) plus credentials, label conventions, and polling interval. You
136
+ `icloud`) plus credentials and an optional display label. You
135
137
  pick the kind, not the transport — Yahoo and iCloud connect over IMAP
136
138
  under the hood, but that is an implementation detail. The set of enabled
137
139
  providers is `enabledMailProviders` (default `["gmail"]`).
@@ -140,8 +142,8 @@ providers is `enabledMailProviders` (default `["gmail"]`).
140
142
 
141
143
  - An **auth failure** points at expired credentials. The dashboard's
142
144
  auth-health card flips to a warning. See [Auth Failed](../../troubleshooting/auth-failed.md).
143
- - A **classifier that misses** a sender consistently — add a manual
144
- 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`.
145
147
 
146
148
  ## Related
147
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
 
@@ -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
@@ -114,7 +114,7 @@ per repo (all open by default so the controls are visible at a glance):
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,
@@ -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.
@@ -73,7 +73,7 @@ at `/reading`.
73
73
  `completed` stamps `completed_at` automatically; you can also set a 1–5
74
74
  `rating` or `notes`.
75
75
  - **Recommend** from the list during reactive turns, and refresh the
76
- reading-taste profile during weekly and monthly reviews.
76
+ reading-taste profile during the weekly review.
77
77
 
78
78
  There is **no bare "add a book" endpoint** — new books arrive through the
79
79
  two Kindle import pipelines above (or are created internally during an
@@ -93,8 +93,10 @@ drives the list shape. The reading skill loads in two situations:
93
93
 
94
94
  - **Reactively**, when you mention a book or highlight in a DM.
95
95
  - **From existing routines** — the morning routine can mention what
96
- you're currently reading, and the weekly and monthly reviews pull
97
- 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).
98
100
 
99
101
  ## What It Outputs
100
102