@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.
- package/README.md +4 -0
- package/agent-assets/agent-profiles/background-task.md +8 -1
- package/agent-assets/agent-profiles/routine-fetch-window.md +11 -0
- package/agent-assets/agents/evening-review/agent.md +6 -2
- package/agent-assets/agents/lesson-maintenance/agent.md +56 -0
- package/agent-assets/agents/morning-routine/agent.md +10 -6
- package/agent-assets/agents/source-librarian/agent.md +51 -0
- package/agent-assets/docs/concepts/agent-day.md +15 -15
- package/agent-assets/docs/concepts/auth-health.md +10 -7
- package/agent-assets/docs/concepts/backends-and-tiers.md +34 -23
- package/agent-assets/docs/concepts/costs-and-quotas.md +10 -10
- package/agent-assets/docs/concepts/delegated-mode.md +18 -18
- package/agent-assets/docs/concepts/memory-model.md +25 -24
- package/agent-assets/docs/concepts/observations.md +27 -19
- package/agent-assets/docs/concepts/process-keys.md +25 -26
- package/agent-assets/docs/concepts/routines.md +18 -17
- package/agent-assets/docs/concepts/safety-and-execution.md +20 -17
- package/agent-assets/docs/concepts/safety-model.md +16 -15
- package/agent-assets/docs/concepts/skills.md +7 -4
- package/agent-assets/docs/features/integrations/browser-history.md +52 -47
- package/agent-assets/docs/features/integrations/calendar.md +7 -7
- package/agent-assets/docs/features/integrations/git.md +15 -13
- package/agent-assets/docs/features/integrations/github.md +12 -10
- package/agent-assets/docs/features/integrations/mail.md +47 -45
- package/agent-assets/docs/features/integrations/notion.md +15 -11
- package/agent-assets/docs/features/integrations/obsidian.md +27 -23
- package/agent-assets/docs/features/lifestyle/git.md +7 -8
- package/agent-assets/docs/features/lifestyle/reading.md +11 -8
- package/agent-assets/docs/features/lifestyle/receipts.md +21 -22
- package/agent-assets/docs/features/lifestyle/travel-bookings.md +9 -9
- package/agent-assets/docs/features/memory-files/agent-journal.md +12 -10
- package/agent-assets/docs/features/memory-files/agent-lessons.md +46 -21
- package/agent-assets/docs/features/memory-files/projects.md +13 -14
- package/agent-assets/docs/features/memory-files/roadmap.md +16 -15
- package/agent-assets/docs/features/memory-files/schedule.md +10 -10
- package/agent-assets/docs/features/memory-files/today.md +18 -18
- package/agent-assets/docs/features/memory-files/user-profile.md +17 -17
- package/agent-assets/docs/features/messaging/bang-commands.md +15 -15
- package/agent-assets/docs/features/messaging/dashboard-chat.md +8 -7
- package/agent-assets/docs/features/messaging/discord.md +7 -5
- package/agent-assets/docs/features/messaging/overview.md +14 -14
- package/agent-assets/docs/features/messaging/pairing-and-magic-phrase.md +12 -12
- package/agent-assets/docs/features/messaging/slack.md +9 -8
- package/agent-assets/docs/features/messaging/telegram.md +7 -7
- package/agent-assets/docs/features/messaging/whatsapp.md +6 -6
- package/agent-assets/docs/features/operations/activity-and-conversations.md +9 -9
- package/agent-assets/docs/features/operations/approvals.md +13 -12
- package/agent-assets/docs/features/operations/backend-routing.md +38 -37
- package/agent-assets/docs/features/operations/browser-tasks.md +63 -57
- package/agent-assets/docs/features/operations/cost-tracking.md +5 -5
- package/agent-assets/docs/features/operations/managed-chromium.md +23 -22
- package/agent-assets/docs/features/operations/notifications.md +15 -15
- package/agent-assets/docs/features/operations/quiet-hours.md +14 -15
- package/agent-assets/docs/features/operations/schedule-approaching.md +16 -14
- package/agent-assets/docs/features/routines/activity-scan.md +14 -11
- package/agent-assets/docs/features/routines/custom-routines.md +9 -7
- package/agent-assets/docs/features/routines/evening-review.md +6 -7
- package/agent-assets/docs/features/routines/morning-routine.md +23 -22
- package/agent-assets/docs/features/routines/weekly-review.md +57 -51
- package/agent-assets/docs/features/wiki/commands.md +28 -22
- package/agent-assets/docs/features/wiki/cost-and-approval.md +28 -23
- package/agent-assets/docs/features/wiki/dashboard.md +22 -24
- package/agent-assets/docs/features/wiki/overview.md +17 -25
- package/agent-assets/docs/features/wiki/search.md +15 -17
- package/agent-assets/docs/features/wiki/workspaces.md +55 -56
- package/agent-assets/docs/getting-started/01-what-is-this.md +4 -5
- package/agent-assets/docs/getting-started/02-first-steps.md +12 -13
- package/agent-assets/docs/getting-started/03-what-can-this-do.md +7 -7
- package/agent-assets/docs/getting-started/04-first-day.md +4 -5
- package/agent-assets/docs/glossary.md +21 -19
- package/agent-assets/docs/guides/add-a-custom-routine.md +17 -12
- package/agent-assets/docs/guides/backup-and-restore.md +19 -16
- package/agent-assets/docs/guides/budget-and-cost-for-wiki.md +57 -62
- package/agent-assets/docs/guides/build-your-wiki.md +11 -12
- package/agent-assets/docs/guides/change-which-model-handles-x.md +30 -28
- package/agent-assets/docs/guides/connect-a-new-mail-account.md +30 -29
- package/agent-assets/docs/guides/explore-with-trace-and-connect.md +30 -32
- package/agent-assets/docs/guides/import-knowledge-file.md +9 -10
- package/agent-assets/docs/guides/install-and-run.md +9 -10
- package/agent-assets/docs/guides/maintain-wiki-health.md +10 -10
- package/agent-assets/docs/guides/migrate-machines.md +16 -14
- package/agent-assets/docs/guides/multiple-wikis-for-multiple-domains.md +12 -13
- package/agent-assets/docs/guides/pause-the-agent.md +25 -25
- package/agent-assets/docs/guides/reinstall-cleanly.md +13 -12
- package/agent-assets/docs/guides/setup-wizard.md +10 -12
- package/agent-assets/docs/guides/switch-default-backend.md +9 -9
- package/agent-assets/docs/guides/use-an-existing-obsidian-vault.md +9 -11
- package/agent-assets/docs/pages/activity.md +76 -0
- package/agent-assets/docs/pages/agents.md +78 -0
- package/agent-assets/docs/pages/analytics.md +70 -0
- package/agent-assets/docs/pages/browser.md +73 -0
- package/agent-assets/docs/pages/chat.md +67 -0
- package/agent-assets/docs/pages/connections.md +78 -0
- package/agent-assets/docs/pages/git.md +73 -0
- package/agent-assets/docs/pages/knowledge.md +75 -0
- package/agent-assets/docs/pages/overview.md +90 -0
- package/agent-assets/docs/pages/reading.md +65 -0
- package/agent-assets/docs/pages/settings.md +77 -0
- package/agent-assets/docs/pages/tasks.md +74 -0
- package/agent-assets/docs/pages/wiki.md +73 -0
- package/agent-assets/docs/reference/api.md +18 -17
- package/agent-assets/docs/reference/cli-commands.md +13 -10
- package/agent-assets/docs/reference/config.md +40 -35
- package/agent-assets/docs/reference/disallowed-tools.md +18 -17
- package/agent-assets/docs/reference/keyboard-shortcuts.md +6 -8
- package/agent-assets/docs/reference/knowledge-layout.md +10 -10
- package/agent-assets/docs/reference/process-keys.md +20 -22
- package/agent-assets/docs/reference/skills.md +18 -16
- package/agent-assets/docs/troubleshooting/auth-failed.md +13 -11
- package/agent-assets/docs/troubleshooting/dashboard-shows-degraded.md +10 -10
- package/agent-assets/docs/troubleshooting/fallback-keeps-firing.md +26 -24
- package/agent-assets/docs/troubleshooting/messaging-not-pairing.md +8 -9
- package/agent-assets/docs/troubleshooting/morning-routine-didnt-run.md +19 -18
- package/agent-assets/docs/troubleshooting/observation-not-detected.md +14 -15
- package/agent-assets/docs/troubleshooting/quota-exhausted.md +28 -26
- package/agent-assets/docs/troubleshooting/wiki-ingest-full-blocked.md +35 -34
- package/agent-assets/docs/troubleshooting/wiki-write-failed.md +21 -24
- package/agent-assets/playbooks/markdown-note.md +43 -0
- package/agent-assets/playbooks/monitoring.md +29 -0
- package/agent-assets/playbooks/research.md +47 -0
- package/agent-assets/skills/agent-create/SKILL.md +71 -32
- package/agent-assets/skills/agent-create/references/prompt-frame-extended.md +132 -0
- package/agent-assets/skills/agent-create/references/prompt-frame.md +125 -0
- package/agent-assets/skills/background-task/SKILL.md +13 -8
- package/agent-assets/skills/background-task-reply/SKILL.md +2 -2
- package/agent-assets/skills/board/SKILL.md +92 -0
- package/agent-assets/skills/browser-history/SKILL.md +3 -3
- package/agent-assets/skills/browser-history-respond/SKILL.md +3 -3
- package/agent-assets/skills/browser-task/SKILL.md +4 -2
- package/agent-assets/skills/context/seeds/file-responsibilities.seed.json +2 -1
- package/agent-assets/skills/schedule/SKILL.md +21 -18
- package/agent-assets/skills/schedule/references/batch.md +1 -1
- package/agent-assets/skills/schedule/references/model-selection.md +1 -1
- package/agent-assets/skills/schedule/references/prompt-frame.md +125 -0
- package/agent-assets/skills/sources/SKILL.md +68 -0
- package/agent-assets/skills/sources/curation.json +21 -0
- package/agent-assets/skills/sources/seeds/filing-rules.seed.json +25 -0
- package/agent-assets/skills/sources/seeds/source-collections.seed.json +20 -0
- package/agent-assets/skills/task/SKILL.md +82 -0
- package/agent-assets/task-flows/background_task.md +29 -3
- package/agent-assets/task-flows/message.received.dm.md +1 -1
- package/agent-assets/task-flows/routine.activity_scan.md +17 -2
- package/agent-assets/task-flows/routine.evening_review.md +72 -11
- package/agent-assets/task-flows/routine.fetch_window.md +21 -0
- package/agent-assets/task-flows/routine.monthly_review.md +3 -1
- package/agent-assets/task-flows/routine.morning_routine_today.md +26 -7
- package/agent-assets/task-flows/routine.source_maintenance.md +50 -0
- package/agent-assets/task-flows/scheduled.dm.md +29 -16
- package/agent-assets/templates/_manifest.json +1 -0
- package/agent-assets/templates/knowledge/sources/_index.md +19 -0
- 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-
|
|
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
|
|
59
|
-
`(main, fallback)` backend pair plus a
|
|
60
|
-
|
|
61
|
-
the
|
|
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
|
|
66
|
-
ProcessKey, and `BackendRouter`
|
|
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.
|
|
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
|
|
71
|
-
|
|
72
|
-
and the seeded
|
|
73
|
-
3. `dashboard.docs_qa` is **tier-locked to `medium`** —
|
|
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 (
|
|
78
|
-
|
|
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
|
-
|
|
83
|
-
usage
|
|
84
|
-
unavailable, policy-denied, timeout, or
|
|
85
|
-
backend raises either:
|
|
86
|
-
|
|
87
|
-
- The router **
|
|
88
|
-
backend — writing
|
|
89
|
-
`GEMINI.md` for Gemini,
|
|
90
|
-
this step a Claude → Codex
|
|
91
|
-
`.claude/skills/`,
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
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
|
|
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
|
|
104
|
-
|
|
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
|
|
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
|
|
113
|
-
- **A routine ran on the "wrong" backend** is usually a
|
|
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
|
|
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-
|
|
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
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
where every run shows up — what is
|
|
80
|
-
finished.
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
- **[Browser History](browser-history)**
|
|
85
|
-
passively (research clusters,
|
|
86
|
-
browser.
|
|
87
|
-
- **[Managed Chromium / B-4](managed-chromium)** is the
|
|
88
|
-
default-off
|
|
89
|
-
general-purpose, non-purchasing actions;
|
|
90
|
-
|
|
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
|
|
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
|
|
101
|
-
|
|
102
|
-
|
|
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
|
|
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
|
|
109
|
-
the
|
|
110
|
-
- **Filter chips** — narrow by state (`All`, `Active`, or
|
|
111
|
-
state) and by **site**. `Active` means any
|
|
112
|
-
|
|
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,
|
|
115
|
-
rows
|
|
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
|
|
124
|
-
still
|
|
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`, **
|
|
139
|
-
the agent sent you** — that is
|
|
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 (
|
|
147
|
+
Active tasks have a **Cancel** button (which calls `POST
|
|
145
148
|
/api/browser-task/:id/cancel`). Cancelling releases the browser context
|
|
146
|
-
|
|
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
|
|
152
|
-
is **no hardcoded category
|
|
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
|
|
157
|
-
|
|
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).**
|
|
160
|
-
private, loopback, link-local, or cloud-metadata
|
|
161
|
-
|
|
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
|
|
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
|
|
167
|
-
|
|
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)**
|
|
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
|
|
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
|
|
182
|
-
quiet hours
|
|
183
|
-
- `browserTaskHostnameDenylist` — hostnames a task may never
|
|
184
|
-
|
|
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-
|
|
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
|
|
101
|
-
|
|
102
|
-
parent session's
|
|
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-
|
|
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
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
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**.
|
|
97
|
-
via `PATCH /api/browser-automation/sites/:siteKey/b4-config`
|
|
98
|
-
(Approve).
|
|
99
|
-
|
|
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
|
|
104
|
-
|
|
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
|
|
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-
|
|
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
|
|
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
|
|
63
|
-
- Quiet hours hold notifications until the
|
|
64
|
-
|
|
65
|
-
-
|
|
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`)
|
|
78
|
-
with one difference: inside quiet hours they are **deferred,
|
|
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
|
-
|
|
82
|
-
|
|
83
|
-
|
|
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-
|
|
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
|
|
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
|
|
65
|
-
|
|
66
|
-
|
|
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
|
|
80
|
-
|
|
81
|
-
active,
|
|
82
|
-
so
|
|
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
|
|
115
|
-
`22:00` → `08:00` is an overnight
|
|
116
|
-
(e.g. `00:00` / `00:00`)
|
|
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-
|
|
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
|
|
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` (
|
|
55
|
-
-
|
|
56
|
-
|
|
57
|
-
`medium` tier.
|
|
58
|
-
-
|
|
59
|
-
the provider's stable
|
|
60
|
-
|
|
61
|
-
pruned after 24
|
|
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
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
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
|