@aitne-sh/aitne 0.1.11 → 0.1.13

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 (151) hide show
  1. package/README.md +4 -0
  2. package/agent-assets/agent-profiles/background-task.md +8 -1
  3. package/agent-assets/agent-profiles/routine-fetch-window.md +11 -0
  4. package/agent-assets/agents/evening-review/agent.md +6 -2
  5. package/agent-assets/agents/lesson-maintenance/agent.md +56 -0
  6. package/agent-assets/agents/morning-routine/agent.md +10 -6
  7. package/agent-assets/agents/source-librarian/agent.md +51 -0
  8. package/agent-assets/docs/concepts/agent-day.md +15 -15
  9. package/agent-assets/docs/concepts/auth-health.md +10 -7
  10. package/agent-assets/docs/concepts/backends-and-tiers.md +34 -23
  11. package/agent-assets/docs/concepts/costs-and-quotas.md +10 -10
  12. package/agent-assets/docs/concepts/delegated-mode.md +18 -18
  13. package/agent-assets/docs/concepts/memory-model.md +25 -24
  14. package/agent-assets/docs/concepts/observations.md +27 -19
  15. package/agent-assets/docs/concepts/process-keys.md +25 -26
  16. package/agent-assets/docs/concepts/routines.md +18 -17
  17. package/agent-assets/docs/concepts/safety-and-execution.md +20 -17
  18. package/agent-assets/docs/concepts/safety-model.md +16 -15
  19. package/agent-assets/docs/concepts/skills.md +7 -4
  20. package/agent-assets/docs/features/integrations/browser-history.md +52 -47
  21. package/agent-assets/docs/features/integrations/calendar.md +7 -7
  22. package/agent-assets/docs/features/integrations/git.md +15 -13
  23. package/agent-assets/docs/features/integrations/github.md +12 -10
  24. package/agent-assets/docs/features/integrations/mail.md +47 -45
  25. package/agent-assets/docs/features/integrations/notion.md +15 -11
  26. package/agent-assets/docs/features/integrations/obsidian.md +27 -23
  27. package/agent-assets/docs/features/lifestyle/git.md +7 -8
  28. package/agent-assets/docs/features/lifestyle/reading.md +11 -8
  29. package/agent-assets/docs/features/lifestyle/receipts.md +21 -22
  30. package/agent-assets/docs/features/lifestyle/travel-bookings.md +9 -9
  31. package/agent-assets/docs/features/memory-files/agent-journal.md +12 -10
  32. package/agent-assets/docs/features/memory-files/agent-lessons.md +46 -21
  33. package/agent-assets/docs/features/memory-files/projects.md +13 -14
  34. package/agent-assets/docs/features/memory-files/roadmap.md +16 -15
  35. package/agent-assets/docs/features/memory-files/schedule.md +10 -10
  36. package/agent-assets/docs/features/memory-files/today.md +18 -18
  37. package/agent-assets/docs/features/memory-files/user-profile.md +17 -17
  38. package/agent-assets/docs/features/messaging/bang-commands.md +15 -15
  39. package/agent-assets/docs/features/messaging/dashboard-chat.md +8 -7
  40. package/agent-assets/docs/features/messaging/discord.md +7 -5
  41. package/agent-assets/docs/features/messaging/overview.md +14 -14
  42. package/agent-assets/docs/features/messaging/pairing-and-magic-phrase.md +12 -12
  43. package/agent-assets/docs/features/messaging/slack.md +9 -8
  44. package/agent-assets/docs/features/messaging/telegram.md +7 -7
  45. package/agent-assets/docs/features/messaging/whatsapp.md +6 -6
  46. package/agent-assets/docs/features/operations/activity-and-conversations.md +9 -9
  47. package/agent-assets/docs/features/operations/approvals.md +13 -12
  48. package/agent-assets/docs/features/operations/backend-routing.md +38 -37
  49. package/agent-assets/docs/features/operations/browser-tasks.md +63 -57
  50. package/agent-assets/docs/features/operations/cost-tracking.md +5 -5
  51. package/agent-assets/docs/features/operations/managed-chromium.md +23 -22
  52. package/agent-assets/docs/features/operations/notifications.md +15 -15
  53. package/agent-assets/docs/features/operations/quiet-hours.md +14 -15
  54. package/agent-assets/docs/features/operations/schedule-approaching.md +16 -14
  55. package/agent-assets/docs/features/routines/activity-scan.md +14 -11
  56. package/agent-assets/docs/features/routines/custom-routines.md +9 -7
  57. package/agent-assets/docs/features/routines/evening-review.md +6 -7
  58. package/agent-assets/docs/features/routines/morning-routine.md +23 -22
  59. package/agent-assets/docs/features/routines/weekly-review.md +57 -51
  60. package/agent-assets/docs/features/wiki/commands.md +28 -22
  61. package/agent-assets/docs/features/wiki/cost-and-approval.md +28 -23
  62. package/agent-assets/docs/features/wiki/dashboard.md +22 -24
  63. package/agent-assets/docs/features/wiki/overview.md +17 -25
  64. package/agent-assets/docs/features/wiki/search.md +15 -17
  65. package/agent-assets/docs/features/wiki/workspaces.md +55 -56
  66. package/agent-assets/docs/getting-started/01-what-is-this.md +4 -5
  67. package/agent-assets/docs/getting-started/02-first-steps.md +12 -13
  68. package/agent-assets/docs/getting-started/03-what-can-this-do.md +7 -7
  69. package/agent-assets/docs/getting-started/04-first-day.md +4 -5
  70. package/agent-assets/docs/glossary.md +21 -19
  71. package/agent-assets/docs/guides/add-a-custom-routine.md +17 -12
  72. package/agent-assets/docs/guides/backup-and-restore.md +19 -16
  73. package/agent-assets/docs/guides/budget-and-cost-for-wiki.md +57 -62
  74. package/agent-assets/docs/guides/build-your-wiki.md +11 -12
  75. package/agent-assets/docs/guides/change-which-model-handles-x.md +30 -28
  76. package/agent-assets/docs/guides/connect-a-new-mail-account.md +30 -29
  77. package/agent-assets/docs/guides/explore-with-trace-and-connect.md +30 -32
  78. package/agent-assets/docs/guides/import-knowledge-file.md +9 -10
  79. package/agent-assets/docs/guides/install-and-run.md +9 -10
  80. package/agent-assets/docs/guides/maintain-wiki-health.md +10 -10
  81. package/agent-assets/docs/guides/migrate-machines.md +16 -14
  82. package/agent-assets/docs/guides/multiple-wikis-for-multiple-domains.md +12 -13
  83. package/agent-assets/docs/guides/pause-the-agent.md +25 -25
  84. package/agent-assets/docs/guides/reinstall-cleanly.md +13 -12
  85. package/agent-assets/docs/guides/setup-wizard.md +10 -12
  86. package/agent-assets/docs/guides/switch-default-backend.md +9 -9
  87. package/agent-assets/docs/guides/use-an-existing-obsidian-vault.md +9 -11
  88. package/agent-assets/docs/pages/activity.md +76 -0
  89. package/agent-assets/docs/pages/agents.md +78 -0
  90. package/agent-assets/docs/pages/analytics.md +70 -0
  91. package/agent-assets/docs/pages/browser.md +73 -0
  92. package/agent-assets/docs/pages/chat.md +67 -0
  93. package/agent-assets/docs/pages/connections.md +78 -0
  94. package/agent-assets/docs/pages/git.md +73 -0
  95. package/agent-assets/docs/pages/knowledge.md +75 -0
  96. package/agent-assets/docs/pages/overview.md +90 -0
  97. package/agent-assets/docs/pages/reading.md +65 -0
  98. package/agent-assets/docs/pages/settings.md +77 -0
  99. package/agent-assets/docs/pages/tasks.md +74 -0
  100. package/agent-assets/docs/pages/wiki.md +73 -0
  101. package/agent-assets/docs/reference/api.md +18 -17
  102. package/agent-assets/docs/reference/cli-commands.md +13 -10
  103. package/agent-assets/docs/reference/config.md +40 -35
  104. package/agent-assets/docs/reference/disallowed-tools.md +18 -17
  105. package/agent-assets/docs/reference/keyboard-shortcuts.md +6 -8
  106. package/agent-assets/docs/reference/knowledge-layout.md +10 -10
  107. package/agent-assets/docs/reference/process-keys.md +20 -22
  108. package/agent-assets/docs/reference/skills.md +18 -16
  109. package/agent-assets/docs/troubleshooting/auth-failed.md +13 -11
  110. package/agent-assets/docs/troubleshooting/dashboard-shows-degraded.md +10 -10
  111. package/agent-assets/docs/troubleshooting/fallback-keeps-firing.md +26 -24
  112. package/agent-assets/docs/troubleshooting/messaging-not-pairing.md +8 -9
  113. package/agent-assets/docs/troubleshooting/morning-routine-didnt-run.md +19 -18
  114. package/agent-assets/docs/troubleshooting/observation-not-detected.md +14 -15
  115. package/agent-assets/docs/troubleshooting/quota-exhausted.md +28 -26
  116. package/agent-assets/docs/troubleshooting/wiki-ingest-full-blocked.md +35 -34
  117. package/agent-assets/docs/troubleshooting/wiki-write-failed.md +21 -24
  118. package/agent-assets/playbooks/markdown-note.md +43 -0
  119. package/agent-assets/playbooks/monitoring.md +29 -0
  120. package/agent-assets/playbooks/research.md +47 -0
  121. package/agent-assets/skills/agent-create/SKILL.md +71 -32
  122. package/agent-assets/skills/agent-create/references/prompt-frame-extended.md +132 -0
  123. package/agent-assets/skills/agent-create/references/prompt-frame.md +125 -0
  124. package/agent-assets/skills/background-task/SKILL.md +13 -8
  125. package/agent-assets/skills/background-task-reply/SKILL.md +2 -2
  126. package/agent-assets/skills/board/SKILL.md +92 -0
  127. package/agent-assets/skills/browser-history/SKILL.md +3 -3
  128. package/agent-assets/skills/browser-history-respond/SKILL.md +3 -3
  129. package/agent-assets/skills/browser-task/SKILL.md +4 -2
  130. package/agent-assets/skills/context/seeds/file-responsibilities.seed.json +2 -1
  131. package/agent-assets/skills/schedule/SKILL.md +21 -18
  132. package/agent-assets/skills/schedule/references/batch.md +1 -1
  133. package/agent-assets/skills/schedule/references/model-selection.md +1 -1
  134. package/agent-assets/skills/schedule/references/prompt-frame.md +125 -0
  135. package/agent-assets/skills/sources/SKILL.md +68 -0
  136. package/agent-assets/skills/sources/curation.json +21 -0
  137. package/agent-assets/skills/sources/seeds/filing-rules.seed.json +25 -0
  138. package/agent-assets/skills/sources/seeds/source-collections.seed.json +20 -0
  139. package/agent-assets/skills/task/SKILL.md +82 -0
  140. package/agent-assets/task-flows/background_task.md +29 -3
  141. package/agent-assets/task-flows/message.received.dm.md +1 -1
  142. package/agent-assets/task-flows/routine.activity_scan.md +17 -2
  143. package/agent-assets/task-flows/routine.evening_review.md +72 -11
  144. package/agent-assets/task-flows/routine.fetch_window.md +21 -0
  145. package/agent-assets/task-flows/routine.monthly_review.md +3 -1
  146. package/agent-assets/task-flows/routine.morning_routine_today.md +26 -7
  147. package/agent-assets/task-flows/routine.source_maintenance.md +50 -0
  148. package/agent-assets/task-flows/scheduled.dm.md +29 -16
  149. package/agent-assets/templates/_manifest.json +1 -0
  150. package/agent-assets/templates/knowledge/sources/_index.md +19 -0
  151. package/package.json +4 -4
@@ -14,7 +14,6 @@ summary: |
14
14
  main backend's session fails over to the fallback's mid-run.
15
15
  section: operations
16
16
  tags:
17
- - core
18
17
  - operations
19
18
  - backends
20
19
  - routing
@@ -25,7 +24,7 @@ ask_examples:
25
24
  - How do fallbacks work?
26
25
  locale: en-US
27
26
  created: 2026-04-25
28
- updated: 2026-05-28
27
+ updated: 2026-07-01
29
28
  keywords:
30
29
  - backend routing
31
30
  - BackendRouter
@@ -55,64 +54,66 @@ related:
55
54
 
56
55
  ## In One Sentence
57
56
 
58
- Every job carries a ProcessKey. The router resolves that key to a
59
- `(main, fallback)` backend pair plus a tier — and if the main backend
60
- hits a quota wall or a decisive failure, the dispatcher transitions to
61
- the fallback mid-run, then DMs you that it happened.
57
+ Every job carries a ProcessKey (a label saying what kind of work it is).
58
+ The router turns that key into a `(main, fallback)` backend pair plus a
59
+ tier and if the main backend runs out of quota or hits a decisive
60
+ failure, the dispatcher switches to the fallback partway through the run,
61
+ then DMs you that it happened.
62
62
 
63
63
  ## How It Resolves a Backend
64
64
 
65
- The router never picks a model itself. The dispatcher hands it a
66
- ProcessKey, and `BackendRouter` resolves the binding in this order:
65
+ The router never picks a model on its own. The dispatcher hands it a
66
+ ProcessKey, and `BackendRouter` works out the binding in this order:
67
67
 
68
- 1. Read the `process_backend_config` table for a per-key override
68
+ 1. Check the `process_backend_config` table for a per-key override
69
69
  (`main_backend` / `main_model` / `fallback_backend` / `fallback_model`).
70
- 2. If no override exists, fall back to the ProcessKey's **default tier**
71
- (`lite` → Haiku-class, `medium` → Sonnet-class, `high` → Opus-class)
72
- and the seeded backend for that tier.
73
- 3. `dashboard.docs_qa` is **tier-locked to `medium`** — an operator pin
74
- can't move it.
70
+ 2. If there is no override, use the ProcessKey's **default tier** (a
71
+ size band: `lite` → Haiku-class, `medium` → Sonnet-class, `high` →
72
+ Opus-class) and the backend seeded for that tier.
73
+ 3. `dashboard.docs_qa` is **tier-locked to `medium`** — pinning it in the
74
+ dashboard can't move it.
75
75
 
76
76
  Only one ProcessKey — `delegated_task_heavy` — defaults to the `high`
77
- tier, and it is opt-in (gated by the `delegatedTaskHeavyEnabled` flag).
78
- No install-time surface defaults to Opus.
77
+ tier, and it is opt-in (turned on by the `delegatedTaskHeavyEnabled`
78
+ flag). Nothing you get at install time defaults to Opus.
79
79
 
80
80
  ## What Happens on Failover
81
81
 
82
- The two failover signals are `BackendQuotaError` (the backend hit a
83
- usage/budget limit) and `BackendDecisiveFailure` (auth failure, model
84
- unavailable, policy-denied, timeout, or turn-limit). When the main
85
- backend raises either:
86
-
87
- - The router **re-materializes the session workdir** for the fallback
88
- backend — writing its instruction file (`AGENTS.md` for Codex,
89
- `GEMINI.md` for Gemini, etc.) and skill set into the shared dir. Without
90
- this step a Claude → Codex fallover would leave only `CLAUDE.md` and
91
- `.claude/skills/`, and the fallback would run blind.
92
- - The fallback then executes with the same prompt and any
93
- per-session tool overrides applied to the main run.
94
- - On success, you get a **low-priority DM** noting the main backend
95
- failed and the fallback served the turn.
82
+ Two signals trigger a failover: `BackendQuotaError` (the backend hit a
83
+ usage or budget limit) and `BackendDecisiveFailure` (an auth failure,
84
+ an unavailable model, a policy-denied request, a timeout, or a
85
+ turn-limit). When the main backend raises either one:
86
+
87
+ - The router **rebuilds the working directory** for the fallback
88
+ backend — writing that backend's instruction file (`AGENTS.md` for
89
+ Codex, `GEMINI.md` for Gemini, and so on) and its skill set into the
90
+ shared folder. Skip this step and a Claude → Codex failover would find
91
+ only `CLAUDE.md` and `.claude/skills/`, so the fallback would run
92
+ blind.
93
+ - The fallback then runs with the same prompt and any per-session tool
94
+ overrides that applied to the main run.
95
+ - If it succeeds, you get a **low-priority DM** noting that the main
96
+ backend failed and the fallback served the turn.
96
97
  - If the fallback *also* fails, you get a higher-priority notification:
97
98
  `Backend execution failed: <key> encountered <kind> on <main>, then
98
- <kind> on <fallback>.` This is usually a credentials problem on both
99
+ <kind> on <fallback>.` This usually means a credentials problem on both
99
100
  sides.
100
101
 
101
102
  ## Where in the Dashboard
102
103
 
103
- - **[Settings → Models](/settings/models)** is the unified surface for
104
- picking the main and fallback backend (and tier) per ProcessKey.
104
+ - **[Settings → Models](/settings/models)** is the one place to pick the
105
+ main and fallback backend (and tier) for each ProcessKey.
105
106
  - **[Activity](/activity)** rows show which backend actually served each
106
- turn after fallback resolution, so you can see when a fallover fired.
107
+ turn once fallback was resolved, so you can spot when a failover fired.
107
108
 
108
109
  ## When Something Goes Wrong
109
110
 
110
111
  - **A `Backend execution failed` notification** means both the main and
111
112
  the fallback rejected the run. Check authentication for both backends
112
- first re-authorize from the dashboard if needed.
113
- - **A routine ran on the "wrong" backend** is usually a fallover: the
113
+ first, and re-authorize from the dashboard if needed.
114
+ - **A routine ran on the "wrong" backend** is usually a failover: the
114
115
  main backend was over quota, so the fallback served it. The Activity
115
- row will confirm which backend ran.
116
+ row confirms which backend ran.
116
117
 
117
118
  ## Related
118
119
 
@@ -20,7 +20,6 @@ summary: |
20
20
  section: operations
21
21
  tags:
22
22
  - operations
23
- - browser-automation
24
23
  - safety
25
24
  status: beta
26
25
  ask_examples:
@@ -32,7 +31,7 @@ ask_examples:
32
31
  - Where do I see the screenshots from a browser task?
33
32
  locale: en-US
34
33
  created: 2026-06-16
35
- updated: 2026-06-16
34
+ updated: 2026-07-01
36
35
  keywords:
37
36
  - browser tasks
38
37
  - browser-task
@@ -73,46 +72,49 @@ api_endpoints:
73
72
  A **browser task** is an open-ended action you ask the agent to carry
74
73
  out on the web — "send a contact form on Amazon's contact-us page",
75
74
  "check the price of X", "fill in this signup". Each task runs in a
76
- sandboxed sub-agent with **one browser tab to itself**, under allowlist
77
- enforcement, a payment-path block, and a screenshot trace. The
78
- **Browser Tasks** page (`/browser-tasks`) is the operational surface
79
- where every run shows up — what is queued, running, waiting on you, or
80
- finished.
81
-
82
- This is different from two neighbouring surfaces:
83
-
84
- - **[Browser History](browser-history)** reads your *existing* Chrome
85
- passively (research clusters, revisit nudges). It never drives a
86
- browser.
87
- - **[Managed Chromium / B-4](managed-chromium)** is the heavily-gated,
88
- default-off *purchase-confirmation* flow. Browser tasks are the
89
- general-purpose, non-purchasing actions; a final purchase confirm is
90
- the one thing they hand off to the B-4 token primitive.
75
+ *sandboxed sub-agent* (an isolated, throwaway helper the agent spins
76
+ up) that gets **one browser tab to itself**, guarded by an allowlist, a
77
+ payment-path block, and a screenshot trace of every step. The **Browser
78
+ Tasks** page (`/browser-tasks`) is where every run shows up — what is
79
+ queued, running, waiting on you, or finished.
80
+
81
+ Browser tasks are different from two related features:
82
+
83
+ - **[Browser History](../integrations/browser-history.md)** only
84
+ *reads* your existing Chrome history, passively (research clusters,
85
+ revisit nudges). It never drives a browser.
86
+ - **[Managed Chromium / B-4](managed-chromium.md)** is the
87
+ heavily-gated, default-off flow for *confirming a purchase*. Browser
88
+ tasks handle the general-purpose, non-purchasing actions; the one
89
+ thing they hand off to the B-4 token flow is a final purchase
90
+ confirmation.
91
91
 
92
92
  ## Starting a Task
93
93
 
94
- You don't start a task from this page — you ask in **DM** or `/chat`:
94
+ You don't start a task from this page — you ask in a **DM** or in
95
+ `/chat`:
95
96
 
96
97
  > "Send a contact form on Amazon's contact-us page saying my order
97
98
  > #123 never arrived."
98
99
 
99
100
  The agent creates the task (`POST /api/browser-task`), opens a tab, and
100
- works the goal step by step. You can also **schedule** one to run later
101
- (it appears here when it fires). The page itself is a read + monitor
102
- surface: filter, search, open a run, or cancel it.
101
+ works toward the goal step by step. You can also **schedule** one to
102
+ run later — it shows up here when it fires. The page itself is just for
103
+ watching and managing runs: filter, search, open a run, or cancel it.
103
104
 
104
105
  ## Reading the Page
105
106
 
106
- - **Tasks awaiting you** — a strip pinned to the top that only appears
107
+ - **Tasks awaiting you** — a strip pinned to the top that appears only
107
108
  when one or more tasks are blocked on your input. It links straight
108
- to the run that needs you. The same signal drives the nav red-dot and
109
- the persistent shell banner, so they stay in lock-step.
110
- - **Filter chips** — narrow by state (`All`, `Active`, or a specific
111
- state) and by **site**. `Active` means any non-terminal task.
112
- - **Search** — free-text match over the task description.
109
+ to the run that needs you. The same signal drives the red dot in the
110
+ nav and the banner across the top of the app, so they always agree.
111
+ - **Filter chips** — narrow the list by state (`All`, `Active`, or one
112
+ specific state) and by **site**. `Active` means any task that hasn't
113
+ finished yet.
114
+ - **Search** — free-text match against the task description.
113
115
  - **Table** — one row per task: state, description (click to open the
114
- run), site, originating channel, created time, and duration. Active
115
- rows expose a **Cancel** button.
116
+ run), site, the channel it came from, created time, and duration.
117
+ Active rows show a **Cancel** button.
116
118
 
117
119
  Click any row to open the **run detail** (`/browser-tasks/:id`): the
118
120
  step-by-step event log and the **screenshot trace** the sub-agent
@@ -120,8 +122,9 @@ captured along the way.
120
122
 
121
123
  ## Task States
122
124
 
123
- A task moves through a small state machine. Non-terminal states are
124
- still in flight; terminal states are done.
125
+ A task moves through a small set of states. Some are *non-terminal*
126
+ (the task is still going); the rest are *terminal* (the task is
127
+ finished and won't change).
125
128
 
126
129
  | State | Meaning |
127
130
  | --- | --- |
@@ -135,50 +138,53 @@ still in flight; terminal states are done.
135
138
  | `timeout` | Exceeded its time budget. |
136
139
  | `abandoned` | A pending task expired in the queue before it could start (see `browserTaskPendingQueueTimeoutMinutes`). |
137
140
 
138
- When a task is `awaiting_user` or `final_confirm`, **answer in the DM
139
- the agent sent you** — that is the loop that unblocks it. The dashboard
140
- strip and banner are just where you notice it.
141
+ When a task is `awaiting_user` or `final_confirm`, **reply in the DM
142
+ the agent sent you** — that reply is what unblocks it. The dashboard
143
+ strip and banner are just where you notice it needs you.
141
144
 
142
145
  ## Cancelling
143
146
 
144
- Active tasks have a **Cancel** button (and `POST
147
+ Active tasks have a **Cancel** button (which calls `POST
145
148
  /api/browser-task/:id/cancel`). Cancelling releases the browser context
146
- immediately and DMs you a confirmation. Terminal tasks can't be
147
- cancelled — there is nothing left to stop.
149
+ (the task's tab) right away and DMs you a confirmation. A finished
150
+ (terminal) task can't be cancelled — there is nothing left to stop.
148
151
 
149
152
  ## Safety Model (why it's safe to let it drive)
150
153
 
151
- Browser tasks inherit the project's structural browser defences — there
152
- is **no hardcoded category/brand denylist**:
154
+ Browser tasks inherit the project's structural browser defenses. There
155
+ is **no hardcoded category or brand denylist** — the safety is built
156
+ into how a task runs, not a list of banned sites:
153
157
 
154
158
  1. **One sandboxed tab per task.** Tasks don't share a browser context,
155
159
  so one task can't read another's session.
156
- 2. **Allowlist enforcement + hostname denylist.** Navigation is
157
- constrained; you manage blocked hostnames via
160
+ 2. **Allowlist enforcement plus a hostname denylist.** Where a task may
161
+ navigate is restricted; you manage the blocked hostnames via
158
162
  `browserTaskHostnameDenylist`.
159
- 3. **IP egress layer (not configurable).** Navigations that resolve to
160
- private, loopback, link-local, or cloud-metadata addresses are
161
- denied at the egress chokepointdefence-in-depth against SSRF.
163
+ 3. **IP egress layer (not configurable).** If a navigation resolves to
164
+ a private, loopback, link-local, or cloud-metadata address, it is
165
+ blocked at the network exit point defense-in-depth against SSRF
166
+ (server-side request forgery, where a request is tricked into
167
+ reaching an internal address).
162
168
  4. **Payment-path block.** A URL-pattern matcher trips at form-submit
163
- time on payment-handoff paths, so a task can't silently push a
169
+ time on payment-handoff paths, so a task can't quietly push a
164
170
  transaction through. An actual purchase requires the separate,
165
- default-off [B-4 token flow](managed-chromium).
166
- 5. **Human-in-the-loop gates.** Anything ambiguous or consequential
167
- surfaces as `awaiting_user` / `final_confirm` and waits for your DM.
171
+ default-off [B-4 token flow](managed-chromium.md).
172
+ 5. **Human-in-the-loop gates.** Anything ambiguous or high-stakes
173
+ pauses as `awaiting_user` or `final_confirm` and waits for your DM.
168
174
 
169
- See **[Safety and Execution](../../concepts/safety-and-execution)** and
170
- the **[Safety Model](../../concepts/safety-model)** for the full
175
+ See **[Safety and Execution](../../concepts/safety-and-execution.md)**
176
+ and the **[Safety Model](../../concepts/safety-model.md)** for the full
171
177
  picture.
172
178
 
173
179
  ## Configuration
174
180
 
175
181
  These keys live in the editable config (Settings → Infrastructure):
176
182
 
177
- - `browserTaskMaxConcurrent` — how many tasks may run at once; the rest
178
- queue (`pending`).
183
+ - `browserTaskMaxConcurrent` — how many tasks may run at the same time;
184
+ any extras wait in the queue (`pending`).
179
185
  - `browserTaskPendingQueueTimeoutMinutes` — how long a `pending` task
180
- waits before it is `abandoned`.
181
- - `browserTaskRespectQuietHours` — when on, tasks defer during your
182
- quiet hours rather than running overnight.
183
- - `browserTaskHostnameDenylist` — hostnames a task may never navigate
184
- to (user-managed; there is no shipped default brand/category list).
186
+ waits in the queue before it is marked `abandoned`.
187
+ - `browserTaskRespectQuietHours` — when on, tasks hold off during your
188
+ quiet hours instead of running overnight.
189
+ - `browserTaskHostnameDenylist` — hostnames a task may never visit (you
190
+ manage this list; nothing is blocked here by default).
@@ -16,7 +16,6 @@ summary: |
16
16
  autonomous spend.
17
17
  section: operations
18
18
  tags:
19
- - core
20
19
  - cost
21
20
  - operations
22
21
  status: stable
@@ -27,7 +26,7 @@ ask_examples:
27
26
  - What is the difference between the daily and monthly cost cap?
28
27
  locale: en-US
29
28
  created: 2026-04-25
30
- updated: 2026-05-28
29
+ updated: 2026-07-01
31
30
  keywords:
32
31
  - cost tracking
33
32
  - analytics
@@ -97,9 +96,10 @@ Open **Analytics**. It has two tabs:
97
96
  - **Metrics** (`/analytics?tab=metrics`) — operational health: activity
98
97
  volume, execution breakdown, error rates, notification throughput.
99
98
 
100
- Note on delegated work: only **cross-backend** delegated calls show up as
101
- separate runs. Same-backend delegated/native calls roll up under the
102
- parent session's totals.
99
+ Note on delegated work (when a run hands part of its job to a helper
100
+ model): only **cross-backend** delegated calls show up as separate runs.
101
+ Same-backend delegated/native calls roll up under the parent session's
102
+ totals.
103
103
 
104
104
  ### Sidebar footer (running daily total)
105
105
 
@@ -20,8 +20,6 @@ section: operations
20
20
  tags:
21
21
  - operations
22
22
  - safety
23
- - browser-automation
24
- - experimental
25
23
  status: experimental
26
24
  ask_examples:
27
25
  - What is B-4?
@@ -31,7 +29,7 @@ ask_examples:
31
29
  - How do I block a site from managed Chromium?
32
30
  locale: en-US
33
31
  created: 2026-05-22
34
- updated: 2026-06-07
32
+ updated: 2026-07-01
35
33
  keywords:
36
34
  - managed chromium
37
35
  - browser automation
@@ -66,16 +64,18 @@ api_endpoints:
66
64
 
67
65
  # Managed Chromium (B-4)
68
66
 
69
- B-4 is the experimental purchase-confirmation flow. When you've asked
70
- the agent to "buy X" or "complete the checkout", and the vendor is on
71
- your B-4 allowlist, the daemon spawns a managed Chromium profile,
72
- fills the cart, and pauses for an explicit one-time token from your
73
- DM before clicking the final confirm. **It is default-off**, gated
74
- behind every safety check the project ships, and not surfaced in the
75
- public dashboard until the upstream B-3 surface (browser-history
76
- research) has been stable for six weeks.
77
-
78
- This page is written so it's safe to read whether you've enabled it
67
+ B-4 is the experimental purchase-confirmation flow. When you ask the
68
+ agent to "buy X" or "complete the checkout", and the vendor is on your
69
+ B-4 allowlist (the short list of sites you have explicitly approved),
70
+ the daemon (Aitne's always-on background service) opens a managed
71
+ Chromium profile, fills the cart, and then stops. It waits for a
72
+ one-time token that you send back in a DM (direct message) before it
73
+ clicks the final confirm button. **It is default-off**, sits behind
74
+ every safety check the project ships, and stays hidden in the public
75
+ dashboard until the upstream B-3 surface (browser-history research)
76
+ has run smoothly for six weeks.
77
+
78
+ This page is written so it's safe to read whether you've turned it on
79
79
  or not.
80
80
 
81
81
  ## What's Actually Gated
@@ -93,16 +93,15 @@ Before B-4 can run, every one of these must be true:
93
93
  3. At least one **primary DM channel** is set (Slack / Telegram /
94
94
  Discord / WhatsApp). The single-use token is delivered there; the
95
95
  dashboard never shows the raw token.
96
- 4. The **site is on your B-4 allowlist**. Per-site enablement happens
97
- via `PATCH /api/browser-automation/sites/:siteKey/b4-config`
98
- (Approve). Sites not in the allowlist cannot run a B-4 flow even
99
- if the master toggle is on.
96
+ 4. The **site is on your B-4 allowlist**. You enable each site one at
97
+ a time via `PATCH /api/browser-automation/sites/:siteKey/b4-config`
98
+ (Approve). A site that isn't on the allowlist can't run a B-4 flow,
99
+ even when the master toggle is on.
100
100
  5. The **site is signed in** through the B-2.5 per-site sign-in
101
101
  flow (`POST /api/browser-automation/sites/:siteKey/connect` →
102
102
  sign in by hand in the spawned UI Chromium →
103
- `POST .../finalize`). The daemon stores the profile in a
104
- restricted directory the absolute-block layer protects from any
105
- skill.
103
+ `POST .../finalize`). The daemon keeps the profile in a locked-down
104
+ directory that no skill can reach (the absolute-block layer).
106
105
 
107
106
  ## Structural Defences (no hardcoded category denylist)
108
107
 
@@ -117,8 +116,10 @@ category list:
117
116
  navigation that resolves to a private (RFC1918), loopback,
118
117
  link-local, multicast, cloud-metadata (`169.254.169.254`), or the
119
118
  IPv6 equivalents is denied at the egress chokepoint
120
- (`shouldDenyEgress` in `egress-denylist.ts`). This is the
121
- defence-in-depth against SSRF it cannot be turned off.
119
+ (`shouldDenyEgress` in `egress-denylist.ts`). This is the extra
120
+ layer of defence against SSRF (server-side request forgery, where a
121
+ request is tricked into reaching an internal address) — it cannot be
122
+ turned off.
122
123
  2. **Payment-path blocker.** A URL-pattern matcher
123
124
  (`payment-path-blocker.ts`) trips at form-submit time on
124
125
  payment-handoff paths so the agent can't silently push a
@@ -14,7 +14,6 @@ summary: |
14
14
  rate limits gate the flow.
15
15
  section: operations
16
16
  tags:
17
- - core
18
17
  - notifications
19
18
  - operations
20
19
  status: stable
@@ -23,7 +22,7 @@ ask_examples:
23
22
  - How do I limit how often it notifies me?
24
23
  locale: en-US
25
24
  created: 2026-04-25
26
- updated: 2026-06-10
25
+ updated: 2026-07-01
27
26
  keywords:
28
27
  - notification
29
28
  - notify
@@ -54,15 +53,16 @@ api_endpoints:
54
53
 
55
54
  ## In One Sentence
56
55
 
57
- Outbound DMs the agent sends through the paired messaging app, gated
58
- by quiet hours and rate limits.
56
+ Outbound DMs the agent sends you through your paired messaging app,
57
+ held back by quiet hours and capped by rate limits.
59
58
 
60
59
  ## What It Does
61
60
 
62
- - Routines, observations, and approvals enqueue notifications.
63
- - Quiet hours hold notifications until the window ends.
64
- - Per-hour and per-day rate limits cap the volume.
65
- - Batching folds multiple small alerts of the same event type into a
61
+ - Routines, observations, and approvals line up notifications to send.
62
+ - Quiet hours (your do-not-disturb window) hold notifications until the
63
+ window ends.
64
+ - Per-hour and per-day rate limits cap how many you get.
65
+ - Batching folds several small alerts of the same event type into a
66
66
  single message.
67
67
 
68
68
  ## How a Notification Flows
@@ -74,13 +74,13 @@ by quiet hours and rate limits.
74
74
  4. It is sent to the operator over `primaryPlatform` (or, when set, the
75
75
  exact channels in `defaultNotificationPlatforms`).
76
76
 
77
- Explicit agent notifications (`POST /api/notify`) ride the same gates
78
- with one difference: inside quiet hours they are **deferred, not
79
- dropped** — the full message is queued as a scheduled DM that fires
80
- when the window ends (visible under Schedule), and repeat sends from
81
- the same agent overnight coalesce into one combined DM. Outside quiet
82
- hours the per-hour / per-day caps apply; a capped call is rejected
83
- (`rate_limited`) rather than silently queued, so the agent can adapt.
77
+ Explicit agent notifications (`POST /api/notify`) go through the same
78
+ checks, with one difference: inside quiet hours they are **deferred,
79
+ not dropped** — the full message is queued as a scheduled DM that fires
80
+ when the window ends (visible under Schedule), and repeat sends from the
81
+ same agent overnight merge into one combined DM. Outside quiet hours the
82
+ per-hour / per-day caps apply; a capped call is rejected (`rate_limited`)
83
+ rather than silently queued, so the agent can adapt.
84
84
 
85
85
  ### Safety categories always get through
86
86
 
@@ -17,7 +17,6 @@ section: operations
17
17
  tags:
18
18
  - operations
19
19
  - notifications
20
- - core
21
20
  status: stable
22
21
  ask_examples:
23
22
  - How do I stop notifications at night?
@@ -25,7 +24,7 @@ ask_examples:
25
24
  - Will routines still run during quiet hours?
26
25
  locale: en-US
27
26
  created: 2026-04-25
28
- updated: 2026-06-10
27
+ updated: 2026-07-01
29
28
  keywords:
30
29
  - quiet hours
31
30
  - dnd
@@ -57,14 +56,14 @@ alerts still get through.
57
56
 
58
57
  ## What It Does
59
58
 
60
- Quiet hours only gate *agent-initiated* proactive notifications. During
59
+ Quiet hours only affect *proactive* notifications — the messages the
60
+ agent starts on its own. They do not touch replies you asked for. During
61
61
  the window:
62
62
 
63
63
  - **A normal proactive notification is suppressed.** If nothing of the
64
- same event type was sent recently, the message goes straight to the
65
- notification path, sees that it is quiet hours, and is logged as
66
- `suppressed` — it is **dropped, not held**. You will not receive it
67
- later.
64
+ same event type was sent recently, the message reaches the send step,
65
+ finds that quiet hours are active, and is logged as `suppressed` — it
66
+ is **dropped, not held**. You will not receive it later.
68
67
  - **An explicit agent notification (`POST /api/notify`) is deferred,
69
68
  not dropped.** When an agent session calls the notify endpoint inside
70
69
  the window, the full message is queued as a scheduled DM that fires
@@ -76,11 +75,11 @@ the window:
76
75
  end (or released immediately when the new window no longer covers
77
76
  the current time).
78
77
  - **A notification already in a batch queue is deferred, not dropped.**
79
- Aitne batches repeat notifications of the same event type within
80
- `batchIntervalMinutes`. When a batch is pending and quiet hours are
81
- active, the flush is pushed to the wall-clock moment the window ends,
82
- so that combined message arrives when you wake instead of being
83
- suppressed.
78
+ Aitne groups repeat notifications into batches (see
79
+ [Notifications](notifications.md) for how batching works). When a batch
80
+ is pending and quiet hours are active, its flush is pushed to the
81
+ wall-clock moment the window ends, so the combined message arrives when
82
+ you wake instead of being suppressed.
84
83
  - **Reactive DMs still respond.** A direct reply to your message
85
84
  bypasses quiet hours, rate limits, and batching entirely.
86
85
  - **Safety-category alerts still wake you.** Notifications tagged
@@ -111,9 +110,9 @@ the window:
111
110
 
112
111
  Continuously. Every proactive notification checks `quietHoursStart` and
113
112
  `quietHoursEnd` against the current local time (in the configured
114
- timezone) before sending. The window may wrap midnight — the default
115
- `22:00` → `08:00` is an overnight shape. Setting start equal to end
116
- (e.g. `00:00` / `00:00`) disables quiet hours.
113
+ timezone) before sending. The window may cross midnight — the default
114
+ `22:00` → `08:00` is an overnight window. Setting start equal to end
115
+ (e.g. `00:00` / `00:00`) turns quiet hours off.
117
116
 
118
117
  ## Where in the Dashboard
119
118
 
@@ -26,7 +26,7 @@ ask_examples:
26
26
  - Why didn't I get a reminder before my meeting?
27
27
  locale: en-US
28
28
  created: 2026-04-25
29
- updated: 2026-05-28
29
+ updated: 2026-07-01
30
30
  keywords:
31
31
  - schedule approaching
32
32
  - pre-event reminder
@@ -49,16 +49,17 @@ Pre-event reminders fire 15 minutes before each calendar event.
49
49
 
50
50
  ## What It Does
51
51
 
52
- - Watches upcoming calendar events and fires a notification ~15
52
+ - Watches upcoming calendar events and sends a notification ~15
53
53
  minutes before each one. The lead time is fixed in
54
- `imminent-event-scheduler.ts` (not a config key today).
55
- - Emits one `schedule.approaching` event per item via the EventBus
56
- when the event is `≤ 15 minutes` away. The event is handled at the
57
- `medium` tier.
58
- - Deduplicates via the `imminent_event_notifications` table, keyed on
59
- the provider's stable event id, so the same event never fires twice
60
- across reschedules, restarts, or repeated poll cycles. Rows are
61
- pruned after 24 hours.
54
+ `imminent-event-scheduler.ts` (there is no config key for it today).
55
+ - When an event is `≤ 15 minutes` away, it emits one
56
+ `schedule.approaching` event per item on the EventBus (the daemon's
57
+ internal message bus). That event is handled at the `medium` tier.
58
+ - To avoid duplicate reminders, it records each fired event in the
59
+ `imminent_event_notifications` table, keyed on the provider's stable
60
+ event id. The same event never fires twice across reschedules,
61
+ restarts, or repeated poll cycles, and rows are pruned after 24
62
+ hours.
62
63
 
63
64
  ## How It Is Triggered
64
65
 
@@ -71,10 +72,11 @@ integration mode:
71
72
  direct mode and the delegated-sync worker in delegated mode).
72
73
  - **`native` mode** — the daemon does not poll, so it reads
73
74
  `observations` rows instead. These are posted by the agent's
74
- native-mode `routine.fetch_window` pre-pass. Because that pre-pass
75
- refreshes on the activity-scan tick (~60-minute cadence), events
76
- scheduled with less than ~60 minutes of lead time may miss their
77
- reminder. Direct mode (5-minute poll) does not have this limit.
75
+ native-mode `routine.fetch_window` pre-pass (the pre-run scan that
76
+ gathers fresh context). Because that pre-pass only refreshes on the
77
+ activity-scan tick (~60-minute cadence), an event scheduled with
78
+ less than ~60 minutes of lead time can miss its reminder. Direct
79
+ mode, which polls every 5 minutes, does not have this limit.
78
80
 
79
81
  Cross-source dedup is automatic: snapshot and observation rows for the
80
82
  same event share the provider's event id, so they collapse into one