@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
@@ -31,7 +31,7 @@ ask_examples:
31
31
  - How does Gemini's per-day quota work?
32
32
  locale: en-US
33
33
  created: 2026-04-25
34
- updated: 2026-05-28
34
+ updated: 2026-06-07
35
35
  keywords:
36
36
  - cost
37
37
  - budget
@@ -58,7 +58,7 @@ config_keys:
58
58
  process_keys:
59
59
  - routine.morning_routine
60
60
  - routine.fetch_window
61
- - routine.hourly_check
61
+ - routine.activity_scan
62
62
  ---
63
63
 
64
64
  # Costs and Quotas
@@ -100,7 +100,7 @@ costs so you can re-pin tiers if a routine has gotten too expensive.
100
100
  The autonomous daily-cost cap (`autonomousDailyCostCapUsd`) is a
101
101
  bumper, not a budget — once the day's autonomous spend crosses it the
102
102
  dispatcher starts shedding the *lowest-priority* routines first
103
- (hourly check), and only escalates to higher-priority ones as spend
103
+ (activity scan), and only escalates to higher-priority ones as spend
104
104
  climbs further; the morning routine is the last to be cut. Reactive
105
105
  (in-the-loop) DMs and dashboard chat always pass through. A separate
106
106
  `autonomousMonthlyCostCapUsd` is a notifications-only soft cap — it
@@ -127,7 +127,7 @@ Concretely:
127
127
  against your provider account.
128
128
  - **Subscription is fallback only.** If you skip the key, the
129
129
  daemon runs against whatever local CLI login is present
130
- (`claude`, `codex login`, `gemini auth`). The dashboard surfaces
130
+ (`claude`, `codex login`, `gemini`). The dashboard surfaces
131
131
  a `SubscriptionAuthWarning` banner whenever any backend is on
132
132
  this path because most provider policies for headless /
133
133
  programmatic agents do not extend to personal subscriptions —
@@ -145,12 +145,12 @@ register an API key on `/settings/models`.
145
145
  `ANTHROPIC_API_KEY` / `OPENAI_API_KEY` / `GEMINI_API_KEY` /
146
146
  `GOOGLE_API_KEY`.
147
147
  - **Subscription fallback**: the CLI's local login (`claude`,
148
- `codex login`, `gemini auth`). Used only when no API key is
148
+ `codex login`, `gemini`). Used only when no API key is
149
149
  configured. Cost behaviour then matches whatever the subscription
150
150
  enforces (e.g. Claude's rolling 5-hour Opus window on a Max plan).
151
151
  - **Daily cost cap**: `autonomousDailyCostCapUsd` (default unset) —
152
152
  once the day's autonomous spend crosses it, lower-priority routines
153
- are skipped first (hourly check at 100% of the cap, the morning
153
+ are skipped first (activity scan at 100% of the cap, the morning
154
154
  routine only at 200%). Reactive DMs / dashboard chat keep running;
155
155
  you can always reach the agent. Distinct from the removed
156
156
  `maxDailyCostUsd`, which used to blanket-block reactive traffic too.
@@ -182,7 +182,7 @@ register an API key on `/settings/models`.
182
182
  and the first-run branch runs on the parent
183
183
  `routine.morning_routine` envelope (medium tier) with a
184
184
  daemon-prepared `<roadmap_skeleton>` block.
185
- - Gemini hourly check on Flash via `GEMINI_API_KEY` = ~$0.0005 per
185
+ - Gemini activity scan on Flash via `GEMINI_API_KEY` = ~$0.0005 per
186
186
  fire on the paid tier; the free tier instead consumes one of a
187
187
  fixed per-day request budget (Aitne caps Gemini at 450 requests/day
188
188
  to match Google's free-tier daily limit — this ceiling is
@@ -196,10 +196,11 @@ register an API key on `/settings/models`.
196
196
 
197
197
  In the dashboard:
198
198
 
199
- - **Analytics** (`/analytics`) rolls today's cost by backend, by
200
- ProcessKey, and by hour. When a backend is running on the
201
- subscription fallback, remaining-window math is shown there too.
202
- - **Sidebar footer** shows the day's running total.
199
+ - **Analytics** (`/analytics`) rolls cost by backend, by ProcessKey
200
+ (event type), by model, and over daily / weekly / monthly periods,
201
+ plus a today total.
202
+ - **Sidebar** shows the day's running total next to the Analytics
203
+ entry.
203
204
  - **Activity** event details include the per-execute cost.
204
205
  - **Settings → Models** (`/settings/models`) exposes the per-backend
205
206
  API-key panel and a warning banner whenever a backend is running on
@@ -207,7 +208,8 @@ In the dashboard:
207
208
 
208
209
  From a DM or the terminal:
209
210
 
210
- - **`!cost`** (and `!cost claude` / `!cost codex` / `!cost gemini`)
211
+ - **`!cost`** (and `!cost claude` / `!cost codex` / `!cost gemini` /
212
+ `!cost opencode`)
211
213
  DM the agent for trailing-7-day spend, broken down or per-backend.
212
214
  - **`aitne status`** prints today's action count and spend;
213
215
  **`aitne audit`** lists the action log (filter with `--since`,
@@ -36,7 +36,7 @@ ask_examples:
36
36
  - Why don't I see a SKILL.md for Gmail in my Codex session?
37
37
  locale: en-US
38
38
  created: 2026-04-26
39
- updated: 2026-05-28
39
+ updated: 2026-06-07
40
40
  keywords:
41
41
  - delegated mode
42
42
  - direct mode
@@ -100,8 +100,8 @@ backend is the same as the integration's `delegatedBackend`:
100
100
  for the task-mode body shape.
101
101
 
102
102
  `native` has no sub-cases. The integration's `nativeBackend` must equal
103
- the main DM backend — `BackendRouter.setMainBackend` cascades unmatched
104
- `native` rows to `disabled`. From the agent's call-site view, `native`
103
+ the main DM backend — `cascadeNativeBindingsOnMainSwitch` cascades
104
+ unmatched `native` rows to `disabled`. From the agent's call-site view, `native`
105
105
  is indistinguishable from `delegated` same-backend (both are in-session
106
106
  MCP); the difference is who polls (no one, for `native`).
107
107
 
@@ -115,9 +115,9 @@ MCP); the difference is who polls (no one, for `native`).
115
115
 
116
116
  The setup tax for direct mode (OAuth client setup in a vendor console, then
117
117
  JSON download, then keychain seeding) is the single biggest blocker for
118
- non-technical operators. Every supported backend — Claude Code, Codex,
119
- Gemini CLI — already ships first-party connectors to Gmail, Calendar,
120
- Drive, and more. When the operator is signed into claude.ai or ChatGPT,
118
+ non-technical operators. Claude Code, Codex, and Gemini CLI all ship
119
+ first-party connectors to Gmail, Calendar, Drive, and more (OpenCode
120
+ ships none). When the operator is signed into claude.ai or ChatGPT,
121
121
  the agent can reach those services through the backend's own MCP tools,
122
122
  zero daemon credentials required.
123
123
 
@@ -139,9 +139,9 @@ that case the daemon spawns the other backend per call.
139
139
  `/exec` proxy (cross-backend).
140
140
  - **`native`** — daemon holds nothing AND runs no poller. The main
141
141
  backend's MCP connector reaches the integration on-demand within the
142
- agent's own turn (DM, hourly_check, routine pre-pass). The agent
142
+ agent's own turn (DM, activity_scan, routine pre-pass). The agent
143
143
  POSTs results to `/api/observations/batch` so the rest of the
144
- observation pipeline (summarizer, hourly check) still operates. See
144
+ observation pipeline (summarizer, activity scan) still operates. See
145
145
  `docs/design/appendices/native-integration-mode.md` for the full
146
146
  spec, including the per-key `runtime_state.integration_flip_lock:<key>`
147
147
  drain protocol.
@@ -152,8 +152,8 @@ that case the daemon spawns the other backend per call.
152
152
  - **`nativeBackend`** — when native, which backend's connector is
153
153
  expected. Must equal the main DM backend; changing the main backend
154
154
  cascades unmatched `native` rows to `disabled` (the cascade is
155
- triggered by `BackendRouter.setMainBackend` /
156
- `PUT /api/backends/main`).
155
+ performed by `cascadeNativeBindingsOnMainSwitch` from the
156
+ `PUT /api/backends/main` handler).
157
157
  - **Same-backend** — DM session backend matches `delegatedBackend` /
158
158
  `nativeBackend`. The daemon is not in the loop; the agent calls
159
159
  native MCP directly. No skill body is materialized for the
@@ -193,10 +193,10 @@ When you pick `delegated`, also pick `delegatedBackend`:
193
193
  is your preferred DM driver (e.g. Claude).
194
194
 
195
195
  When you pick `native`, `nativeBackend` is fixed to your main DM
196
- backend. Flipping the main backend re-targets every `native` row; rows
197
- whose new `nativeBackend` has no descriptor connector for the
198
- integration (e.g. `gmail` native on a backend that doesn't ship a Gmail
199
- connector) cascade to `disabled` and the operator gets a DM.
196
+ backend. Flipping the main backend never re-targets `native` rows:
197
+ every row whose `nativeBackend` no longer matches the new main backend
198
+ cascades to `disabled` and the operator gets a DM re-enabling
199
+ requires an explicit re-flip (with its live probe) on the new backend.
200
200
 
201
201
  ## Concrete Examples
202
202
 
@@ -226,7 +226,7 @@ curl -X POST http://localhost:8321/api/integrations/gmail/exec \
226
226
  ```
227
227
 
228
228
  The daemon spawns a Codex subprocess with the `proxy.md` profile, the
229
- task-mode planner picks `_search_emails` from the registered
229
+ task-mode planner picks `search_emails` from the registered
230
230
  `capabilityTools`, runs it, and returns a structured `{messages:[…]}`
231
231
  conforming to `outputSchema`.
232
232
 
@@ -283,8 +283,9 @@ the agent consults at session-init. It is rendered as a Markdown table:
283
283
  The "Backend" column surfaces whichever binding is active for the row —
284
284
  `delegatedBackend` for `delegated`, `nativeBackend` for `native`. For
285
285
  `direct` and `disabled` rows it is `—`. The "Sub-tier" column annotates
286
- delegated Gmail rows (`draft-only` for Claude, `full-auto` for Codex)
287
- and is `—` for everything else. The file also includes the per-backend
286
+ delegated Gmail rows (`draft-only` for Claude, `full-auto` for Codex);
287
+ other delegated rows show `full`, and non-delegated rows show `—`. The
288
+ file also includes the per-backend
288
289
  connector support matrix and the `deniedTools` block; both are rendered
289
290
  by `renderManagementMd` (`packages/daemon/src/core/management-md.ts`).
290
291
 
@@ -29,7 +29,7 @@ ask_examples:
29
29
  - How does the daemon prevent the agent from writing to disk directly?
30
30
  locale: en-US
31
31
  created: 2026-04-25
32
- updated: 2026-05-28
32
+ updated: 2026-06-11
33
33
  keywords:
34
34
  - context
35
35
  - markdown
@@ -53,7 +53,7 @@ related:
53
53
  - features/memory-files/projects
54
54
  ui_anchors:
55
55
  - /knowledge
56
- - /connections/knowledge
56
+ - /settings
57
57
  context_files:
58
58
  - state/today.md
59
59
  - identity/profile.md
@@ -129,7 +129,8 @@ curl -X PATCH http://localhost:8321/api/context/state/today.md \
129
129
 
130
130
  - `PUT /api/context/*` replaces a whole file; `PATCH` does a section op
131
131
  (`append`, `replace`, `clear`, `clear_before`, `append_to_file`);
132
- `DELETE` removes a file (permitted only for custom routines).
132
+ `DELETE` removes a file (permitted only on a few paths — user Agent
133
+ definitions, inbox/scratch notes, and legacy custom-routine files).
133
134
  - Legacy bare paths (`/api/context/today.md`) still resolve — the daemon
134
135
  rewrites them to the canonical class-prefixed form in process, so a
135
136
  plain `curl -X PATCH` without `-L` keeps working — but new writes
@@ -153,18 +154,24 @@ curl -X PATCH http://localhost:8321/api/context/state/today.md \
153
154
  synthesized by the morning routine.
154
155
  - `plans/projects/<slug>.md` — one file per active project.
155
156
  - `policies/management.md` — the umbrella registry: Source-of-Truth
156
- bindings, Managed Tasks, an Active Policies summary. Always
157
- injected into every flow.
157
+ bindings, Managed Tasks, an Active Policies summary. Injected as
158
+ `<management_rules>` on the wide-path flows (DMs, mentions, the
159
+ morning routine); a few narrow routines (the journal stage, activity
160
+ scan, today refresh, observer events, scheduled tasks) opt out to
161
+ save budget.
158
162
  - `policies/management-captures/<slug>.md` — one file per durable management rule
159
163
  ("from now on, do X"). The daemon auto-maintains a slug index at
160
164
  `policies/management-captures/_index.md`.
161
165
 
162
166
  ## Where You See It in the Dashboard
163
167
 
164
- - **Knowledge → Context Files** lists every file with its size, last
165
- modified time, and a preview.
166
- - **ConnectionsKnowledge** is where vault integrations (Obsidian,
167
- Notion) attach.
168
+ - **Knowledge → Context Files** lists every file with its last
169
+ modified time and a preview.
170
+ - **SettingsManagement Mode** shows where the vault lives (this app
171
+ or an Obsidian-style directory), relocates it, and surfaces vault
172
+ health.
173
+ - **Connections → Notes** is where personal note sources (your external
174
+ Obsidian vault, Notion) attach.
168
175
 
169
176
  ## Related
170
177
 
@@ -6,13 +6,13 @@ id: observations
6
6
  aliases:
7
7
  - observation
8
8
  - polling
9
- - hourly check
9
+ - activity scan
10
10
  - observation queue
11
11
  - phase 9
12
12
  category: concepts
13
13
  summary: |
14
14
  Observations are change records the polling integrations write into
15
- SQLite. The hourly check consumes them — there is no per-change
15
+ SQLite. The activity scan consumes them — there is no per-change
16
16
  notification. This pivot was the Phase 9 polling change.
17
17
  section: observations
18
18
  tags:
@@ -25,16 +25,16 @@ status: stable
25
25
  ask_examples:
26
26
  - What is an observation?
27
27
  - Why doesn't the agent message me on every git commit?
28
- - How does the hourly check use observations?
28
+ - How does the activity scan use observations?
29
29
  - Where does the routine pre-pass write observations?
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
  - observation
35
35
  - observations
36
36
  - polling
37
- - hourly check
37
+ - activity scan
38
38
  - phase 9
39
39
  - routine.fetch_window
40
40
  - pre-pass
@@ -44,7 +44,7 @@ keywords:
44
44
  - observation queue
45
45
  - dedupe
46
46
  related:
47
- - features/routines/hourly-check
47
+ - features/routines/activity-scan
48
48
  - features/routines/morning-routine
49
49
  - concepts/process-keys
50
50
  - concepts/routines
@@ -53,13 +53,14 @@ related:
53
53
  ui_anchors:
54
54
  - /activity
55
55
  process_keys:
56
- - routine.hourly_check
56
+ - routine.activity_scan
57
57
  - routine.fetch_window
58
58
  config_keys:
59
- - hourlyCheckIntervalMinutes
60
- - hourlyCheckPrePassFreshnessMinutes
59
+ - activityScanIntervalMinutes
60
+ - activityScanPrePassFreshnessMinutes
61
61
  api_endpoints:
62
62
  - POST /api/observations
63
+ - POST /api/observations/batch
63
64
  - GET /api/observations
64
65
  - POST /api/observations/consume
65
66
  context_files:
@@ -73,15 +74,15 @@ context_files:
73
74
 
74
75
  Polling integrations (Obsidian, Git, Notion, Calendar) **do not emit
75
76
  events** when they detect changes. They write observation rows to
76
- SQLite. A single `routine.hourly_check` consumes the queue and decides
77
+ SQLite. A single `routine.activity_scan` consumes the queue and decides
77
78
  what is worth surfacing.
78
79
 
79
80
  Since 2026-05, observations have a **second writer**: every main
80
81
  routine (`routine.morning_routine`, `routine.today_refresh`,
81
- `routine.hourly_check`, `routine.evening_review`,
82
+ `routine.activity_scan`, `routine.evening_review`,
82
83
  `routine.weekly_review`) is preceded by a lite-tier
83
84
  `routine.fetch_window` pre-pass that fetches mail / calendar / Notion
84
- windows and POSTs them to `/api/observations`.
85
+ windows and POSTs them to `/api/observations/batch`.
85
86
  (`routine.monthly_review` has no pre-pass window.) The main routine
86
87
  then reads them via the same `pending=true` queue that the polling
87
88
  path feeds. Observation rows look identical regardless of which writer
@@ -105,14 +106,17 @@ tell them apart:
105
106
  Mail) call `recordObservation` when they detect a change.
106
107
  2. **The pre-pass** — the lite-tier `routine.fetch_window` session
107
108
  spawned ahead of each main routine — POSTs mail / calendar / Notion
108
- windows to `/api/observations`.
109
+ windows to `/api/observations/batch`.
109
110
 
110
111
  Both write rows of the same shape; the consumer reads the merged queue.
111
112
 
112
113
  - **Observation**: one row in the `observations` table.
113
- - **Actor**: who caused the change. `actor='agent'` rows are filtered
114
- out by the consumer (anti-loop).
115
- - **Hourly check**: the consumer routine. Medium tier by default
114
+ - **Actor**: who caused the change (`user`, `agent`, or `system`). The
115
+ activity-scan gate filters pending rows by source, not actor —
116
+ pre-pass and delegated-sync rows arrive as `actor='agent'` and count
117
+ as real activity. The anti-loop guard lives at write time instead,
118
+ via `AgentWriteTracker` (below).
119
+ - **Activity scan**: the consumer routine. Medium tier by default
116
120
  (Sonnet); fed by both the background polling path and the pre-pass
117
121
  fetcher.
118
122
  - **`AgentWriteTracker`**: the daemon component that tags
@@ -123,9 +127,9 @@ Both write rows of the same shape; the consumer reads the merged queue.
123
127
  per-routine window (`ROUTINE_WINDOWS` in
124
128
  `packages/daemon/src/core/routine-windows.ts`) for each enabled
125
129
  mail / calendar / Notion integration and POSTs the results to
126
- `/api/observations`. The server computes `contentHash` from
130
+ `/api/observations/batch`. The server computes `contentHash` from
127
131
  `(source, payload)`, so an unchanged item written twice in the same
128
- cadence dedupes to a 409.
132
+ cadence dedupes as a `duplicate` instead of writing a second row.
129
133
 
130
134
  ## Concrete Examples
131
135
 
@@ -135,12 +139,12 @@ Both write rows of the same shape; the consumer reads the merged queue.
135
139
 
136
140
  ## Where You See It in the Dashboard
137
141
 
138
- - **Activity** logs hourly-check fires; the detail shows how many
142
+ - **Activity** logs activity-scan fires; the detail shows how many
139
143
  observations were consumed.
140
144
 
141
145
  ## Related
142
146
 
143
- - [Hourly Check](../features/routines/hourly-check.md)
147
+ - [Activity Scan](../features/routines/activity-scan.md)
144
148
  - [Morning Routine](../features/routines/morning-routine.md)
145
149
  - [Process Keys](./process-keys.md)
146
150
  - [Routines](./routines.md)
@@ -10,7 +10,7 @@ aliases:
10
10
  category: concepts
11
11
  summary: |
12
12
  A ProcessKey is the agent's dispatch identity for one kind of work
13
- ("morning routine", "DM", "hourly check"). The router resolves it
13
+ ("morning routine", "DM", "activity scan"). The router resolves it
14
14
  to a backend + tier binding; the manifest map resolves it to skills.
15
15
  section: process-keys
16
16
  tags:
@@ -51,9 +51,9 @@ process_keys:
51
51
  - routine.morning_routine_today
52
52
  - routine.morning_routine_journal
53
53
  - routine.evening_review
54
- - routine.hourly_check
54
+ - routine.activity_scan
55
55
  - routine.fetch_window
56
- - routine.hourly_check.triage
56
+ - routine.activity_scan.triage
57
57
  - message.dm
58
58
  - message.mention
59
59
  - dashboard.chat
@@ -95,7 +95,7 @@ those subsystems.
95
95
  autonomous.
96
96
  - **DEFAULT_PROCESS_TIERS**: the per-key default model size — `lite`
97
97
  (Haiku-class), `medium` (Sonnet-class), or `high` (Opus-class).
98
- Unknown keys (including `routine.custom.<slug>`) default to `medium`.
98
+ Unknown keys default to `medium`.
99
99
  - **TIER_LOCKED_PROCESS_KEYS**: keys whose tier is hard-locked and
100
100
  cannot be overridden by an operator pin. Today this is just
101
101
  `dashboard.docs_qa`, locked to `medium`.
@@ -109,17 +109,18 @@ those subsystems.
109
109
  — `routine.morning_routine_today` (Stage A, today.md, medium) and
110
110
  `routine.morning_routine_journal` (Stage B, daily journal, lite). Also
111
111
  `routine.evening_review`, `routine.weekly_review`,
112
- `routine.hourly_check`, `routine.roadmap_refresh`,
112
+ `routine.activity_scan`, `routine.roadmap_refresh`,
113
113
  `routine.today_refresh`, `routine.user_profile_sweep`.
114
114
  `routine.morning_routine_initial` was retired (2026-05-16) — the
115
115
  first-run branch now routes through `routine.morning_routine`.
116
116
  - **Routine sub-jobs** (lite tier, dispatcher-spawned, not user-facing):
117
117
  `routine.fetch_window` (pre-pass mail/calendar/Notion fetcher that
118
118
  runs before each main routine and POSTs observations) and
119
- `routine.hourly_check.triage` (Stage 2 escalate-vs-log-only gate
120
- inside the hourly check).
121
- - **Custom routines:** `routine.custom.<slug>` (kebab-case slug;
122
- defaults to medium tier).
119
+ `routine.activity_scan.triage` (Stage 2 escalate-vs-log-only gate
120
+ inside the activity scan).
121
+ - **Custom routines (retired):** `routine.custom.<slug>` appears only
122
+ in historical Activity rows — operator-defined recurring work now
123
+ runs as user Agents under `agent.task`.
123
124
  - **Messaging:** `message.dm`, `message.mention`
124
125
  - **Dashboard:** `dashboard.chat`, `dashboard.docs_qa`
125
126
  - **Scheduled / external:** `agent.task` (recurring schedules),
@@ -13,8 +13,8 @@ aliases:
13
13
  category: concepts
14
14
  summary: |
15
15
  Routines are the autonomous, scheduled tasks Aitne runs on
16
- its own — morning routine, evening review, hourly check, weekly
17
- retro, plus any custom routines you define.
16
+ its own — morning routine, evening review, activity scan, weekly
17
+ retro, plus any recurring user Agents you define.
18
18
  section: routines
19
19
  tags:
20
20
  - core
@@ -30,7 +30,7 @@ ask_examples:
30
30
  - Which routine uses the high tier by default?
31
31
  locale: en-US
32
32
  created: 2026-04-25
33
- updated: 2026-05-28
33
+ updated: 2026-06-07
34
34
  keywords:
35
35
  - routine
36
36
  - routines
@@ -40,18 +40,18 @@ keywords:
40
40
  - routine.fetch_window
41
41
  - pre-pass
42
42
  - dayBoundaryHour
43
- - hourly check
43
+ - activity scan
44
44
  related:
45
45
  - features/routines/morning-routine
46
46
  - features/routines/evening-review
47
47
  - features/routines/weekly-review
48
- - features/routines/hourly-check
49
- - features/routines/custom-routines
48
+ - features/routines/activity-scan
49
+ - guides/add-a-custom-routine
50
50
  - concepts/process-keys
51
51
  - concepts/observations
52
52
  ui_anchors:
53
- - /connections/routines
54
- - /settings/routines
53
+ - /agents
54
+ - /agents/activity-scan
55
55
  process_keys:
56
56
  - routine.morning_routine
57
57
  - routine.morning_routine_today
@@ -59,17 +59,18 @@ process_keys:
59
59
  - routine.evening_review
60
60
  - routine.weekly_review
61
61
  - routine.monthly_review
62
- - routine.hourly_check
62
+ - routine.activity_scan
63
63
  - routine.today_refresh
64
64
  - routine.fetch_window
65
- - routine.hourly_check.triage
65
+ - routine.activity_scan.triage
66
66
  config_keys:
67
67
  - dayBoundaryHour
68
- - hourlyCheckEnabled
69
- - hourlyCheckIntervalMinutes
70
- - hourlyCheckActiveStartHour
71
- - hourlyCheckActiveEndHour
72
- - hourlyCheckPrePassFreshnessMinutes
68
+ - activityScanEnabled
69
+ - activityScanIntervalMinutes
70
+ - activityScanActiveStartHour
71
+ - activityScanActiveEndHour
72
+ - activityScanPrePassFreshnessMinutes
73
+ - activityScanStage2Enabled
73
74
  - monthlyReviewEnabled
74
75
  ---
75
76
 
@@ -81,7 +82,7 @@ A routine is a unit of agent work that runs on a schedule, not in
81
82
  response to a message. The morning routine fires once per agent day at
82
83
  `dayBoundaryHour`; the evening review (18:00 daily), weekly review
83
84
  (Friday 19:00), and optional monthly review fire on fixed schedules in
84
- code; the hourly check coalesces accumulated observations on a
85
+ code; the activity scan coalesces accumulated observations on a
85
86
  configurable cadence.
86
87
 
87
88
  ## Why This Concept Exists
@@ -92,7 +93,7 @@ up without being asked: it builds today, it logs to the journal, it
92
93
  files a retro for the week. They are the proactive surface.
93
94
 
94
95
  Each routine is a single ProcessKey — `routine.morning_routine`,
95
- `routine.hourly_check`, `routine.weekly_review`, etc. The dispatcher
96
+ `routine.activity_scan`, `routine.weekly_review`, etc. The dispatcher
96
97
  treats them as just another event class; the only difference from a
97
98
  DM is who fired the event.
98
99
 
@@ -108,10 +109,10 @@ DM is who fired the event.
108
109
  review once it is past 18:00; weekly review across Fri–Sun). It never
109
110
  double-fires a routine that already succeeded.
110
111
  - **Tier policy**: **no routine runs the high tier by default.** Every
111
- recurring routine — morning, evening, weekly, hourly check
112
+ recurring routine — morning, evening, weekly, activity scan
112
113
  defaults to **medium** (Sonnet on Claude). The **lite** (Haiku) tier
113
114
  is reserved for the morning routine's Stage B and for mechanical
114
- sub-jobs (the hourly-check triage gate and the pre-pass fetcher). The
115
+ sub-jobs (the activity-scan triage gate and the pre-pass fetcher). The
115
116
  only high-tier ProcessKey in the whole system is `delegated_task_heavy`,
116
117
  which is opt-in and not a routine. See
117
118
  [Backends and Tiers](backends-and-tiers.md).
@@ -140,26 +141,28 @@ DM is who fired the event.
140
141
  | `routine.morning_routine_journal` | Stage B of every morning routine (`journal/daily/<yesterday>.md` authoring) | lite |
141
142
  | `routine.evening_review` | 18:00 daily (fixed) | medium |
142
143
  | `routine.weekly_review` | Friday 19:00 (fixed, one hour after evening review) | medium |
143
- | `routine.monthly_review` | Last day of month at 18:00, **default off** (`monthlyReviewEnabled`) | medium |
144
- | `routine.hourly_check` | Every `hourlyCheckIntervalMinutes` (default 60) inside the active window | medium |
144
+ | `routine.monthly_review` | Last day of month at 18:00, **default off** — opt in by enabling the monthly-review agent at `/agents/monthly-review` | medium |
145
+ | `routine.activity_scan` | Every N interval minutes (default 60) inside the active window — cadence set on `/agents/activity-scan` | medium |
145
146
  | `routine.today_refresh` | On calendar drift or a dashboard "refresh today" request (not a fixed cron) | medium |
146
147
  | `routine.fetch_window` | Spawned before each routine above that needs fresh upstream data | lite |
147
- | `routine.hourly_check.triage` | Stage 2 gate of every hourly check | lite |
148
- | `routine.custom.<slug>` | Operator-defined recurrence | medium (override per routine via `backend_tier`) |
148
+ | `routine.activity_scan.triage` | Stage 2 of the activity-scan gate on low-signal ticks — runs only when `activityScanStage2Enabled` is on (default off; disabled ticks escalate straight to the full check) | lite |
149
+ | `routine.custom.<slug>` | Legacy custom-routine recurrence custom routines are now user Agents created on `/agents`; existing specs were converted at upgrade | medium |
149
150
 
150
151
  ## Where You See It in the Dashboard
151
152
 
152
- - **Settings Routines** is where the hourly check active window
153
- (`hourlyCheckActiveStartHour` / `hourlyCheckActiveEndHour`), the
154
- hourly check cadence (`hourlyCheckIntervalMinutes`), and any custom
155
- routines live. Morning, evening, weekly, and monthly fire times are
156
- fixed in code and not surfaced here.
157
- - **Connections Routines** is the unified view of next-fire times.
153
+ - **Agents** (`/agents`) is the hub: every routine is an agent card
154
+ showing its schedule, status, and last run. The activity scan's
155
+ cadence and active window are edited on `/agents/activity-scan`
156
+ (Definition tab Cadence card); each routine's rulebook is edited
157
+ on its Rulebook tab; custom recurring work is a user agent created
158
+ from the same page's New Agent dialog. Morning, evening, weekly, and
159
+ monthly fire times are fixed in code and not editable there.
158
160
  - **Activity** logs each routine run with its outcome.
159
161
 
160
162
  ## Related
161
163
 
162
164
  - [Morning Routine](../features/routines/morning-routine.md)
163
165
  - [Evening Review](../features/routines/evening-review.md)
164
- - [Hourly Check](../features/routines/hourly-check.md)
165
- - [Custom Routines](../features/routines/custom-routines.md)
166
+ - [Activity Scan](../features/routines/activity-scan.md)
167
+ - [Create a Recurring Agent](../guides/add-a-custom-routine.md)
168
+ - [Custom Routines (Retired)](../features/routines/custom-routines.md)
@@ -28,7 +28,7 @@ ask_examples:
28
28
  - How do I see what tools the agent is allowed to use?
29
29
  locale: en-US
30
30
  created: 2026-04-25
31
- updated: 2026-05-28
31
+ updated: 2026-06-07
32
32
  keywords:
33
33
  - safety
34
34
  - safe mode
@@ -44,7 +44,7 @@ related:
44
44
  - features/operations/approvals
45
45
  - reference/disallowed-tools
46
46
  ui_anchors:
47
- - /settings/advanced
47
+ - /settings/safety
48
48
  - /settings/models
49
49
  config_keys:
50
50
  - disallowedTools
@@ -86,9 +86,12 @@ disallowed-tools floor.
86
86
  workspace-write sandbox, the Gemini whitelist TOML, and the OpenCode
87
87
  permission block.
88
88
  - **Allow mode**: the looser posture. SDK bypass, sandbox off, minimal
89
- TOML. The absolute-block layer still holds in Allow mode, so the
90
- destructive-ops floor never opens. Set independently per backend, so
91
- one backend can run Allow while the others stay Safe.
89
+ TOML. The absolute-block layer still holds in Allow mode on Claude,
90
+ Gemini, and OpenCode Codex is the documented exception: its Allow
91
+ mode is a binary sandbox-off switch with no hook layer the daemon can
92
+ attach the block list to, so the dashboard warns you before you flip
93
+ it. Set independently per backend, so one backend can run Allow while
94
+ the others stay Safe.
92
95
  - **Absolute block**: the unconditional layer. `ALWAYS_DISALLOWED_TOOLS`
93
96
  in `src/safety/always-disallowed.ts`. Cannot be widened by skills,
94
97
  by config, or by allow-mode.
@@ -120,13 +123,14 @@ absolute-block layer and Approve tier are where the agent is actually stopped.
120
123
 
121
124
  ## Where You See It in the Dashboard
122
125
 
123
- - **Settings → Advanced** holds the `disallowedTools` and
126
+ - **Settings → Safety** holds the `disallowedTools` and
124
127
  `allowedToolsOverride` tool-policy lists.
125
128
  - **Settings → Models & Cost** holds the per-backend Safe / Allow
126
129
  **Execution Mode** switch (you can also set it in the setup wizard).
127
130
  - **Activity** logs every absolute-blocked tool call as
128
131
  `action_type='blocked_absolute'`.
129
- - **Approvals** is where Approve-tier actions queue when they fire.
132
+ - The **Overview** page shows an approval card where Approve-tier
133
+ actions queue when they fire.
130
134
 
131
135
  ## Related
132
136