@aitne-sh/aitne 0.1.12 → 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/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 +7 -2
- 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 +21 -13
- 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 +7 -6
- 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 +22 -21
- package/agent-assets/docs/features/routines/weekly-review.md +57 -51
- package/agent-assets/docs/features/wiki/commands.md +27 -21
- package/agent-assets/docs/features/wiki/cost-and-approval.md +28 -23
- package/agent-assets/docs/features/wiki/dashboard.md +21 -23
- 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 +3 -4
- 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 +17 -16
- 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 +55 -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 +11 -12
- 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 +9 -11
- 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/skills/agent-create/SKILL.md +39 -5
- package/agent-assets/skills/background-task/SKILL.md +9 -4
- package/agent-assets/skills/board/SKILL.md +8 -9
- package/agent-assets/skills/browser-task/SKILL.md +2 -0
- package/agent-assets/skills/context/seeds/file-responsibilities.seed.json +2 -1
- package/agent-assets/skills/schedule/SKILL.md +6 -5
- 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 +5 -2
- 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 +8 -3
- package/agent-assets/templates/_manifest.json +1 -0
- package/agent-assets/templates/knowledge/sources/_index.md +19 -0
- package/package.json +4 -4
|
@@ -16,7 +16,6 @@ summary: |
|
|
|
16
16
|
agent uses the same channel to send notifications back.
|
|
17
17
|
section: messaging
|
|
18
18
|
tags:
|
|
19
|
-
- core
|
|
20
19
|
- messaging
|
|
21
20
|
- integrations
|
|
22
21
|
- pairing
|
|
@@ -29,7 +28,7 @@ ask_examples:
|
|
|
29
28
|
- Can I send the agent a voice note?
|
|
30
29
|
locale: en-US
|
|
31
30
|
created: 2026-04-25
|
|
32
|
-
updated: 2026-
|
|
31
|
+
updated: 2026-07-01
|
|
33
32
|
keywords:
|
|
34
33
|
- messaging
|
|
35
34
|
- dm
|
|
@@ -66,17 +65,17 @@ config_keys:
|
|
|
66
65
|
|
|
67
66
|
# Messaging Overview
|
|
68
67
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
notification fires. Voice notes are transcribed locally with Whisper
|
|
68
|
+
Direct messages (DMs) from a paired messaging app are Aitne's main way
|
|
69
|
+
to talk with you: you message it, it answers; it messages you back when
|
|
70
|
+
a notification fires. Voice notes are transcribed locally with Whisper,
|
|
72
71
|
so you can talk to the agent the same way you'd type.
|
|
73
72
|
|
|
74
73
|
## What It Does
|
|
75
74
|
|
|
76
75
|
- **Reactive DMs**: the agent answers every direct message you send.
|
|
77
76
|
- **@-mentions (Slack and Discord)**: @-mentioning the agent inside a
|
|
78
|
-
shared channel routes to the `message.mention`
|
|
79
|
-
answered the same way as a DM. Telegram and WhatsApp
|
|
77
|
+
shared channel routes to the `message.mention` process key and is
|
|
78
|
+
answered the same way as a DM. Telegram and WhatsApp ignore all non-DM
|
|
80
79
|
traffic (no group support).
|
|
81
80
|
- **Outbound notifications**: routines and observations fire alerts
|
|
82
81
|
back through the same channel.
|
|
@@ -94,16 +93,17 @@ so you can talk to the agent the same way you'd type.
|
|
|
94
93
|
|
|
95
94
|
Aitne serves exactly one owner. Any message that does not come from a
|
|
96
95
|
paired owner channel is dropped — group chats, multi-user Slack DMs
|
|
97
|
-
(`mpim`), and unrecognized senders never reach the agent.
|
|
98
|
-
defense in depth:
|
|
99
|
-
the owner channel
|
|
96
|
+
(`mpim`), and unrecognized senders never reach the agent. Two layers
|
|
97
|
+
enforce this independently (defense in depth): the messaging adapter
|
|
98
|
+
and the dispatcher each check the owner channel on their own.
|
|
100
99
|
|
|
101
100
|
## When It Runs / How It Is Triggered
|
|
102
101
|
|
|
103
|
-
- The messaging adapter for each connected platform
|
|
104
|
-
|
|
105
|
-
Discord, WhatsApp
|
|
106
|
-
-
|
|
102
|
+
- The messaging adapter for each connected platform watches for
|
|
103
|
+
incoming messages — Telegram by long-polling (repeatedly asking the
|
|
104
|
+
server for updates), Slack, Discord, and WhatsApp by holding an
|
|
105
|
+
always-open WebSocket connection.
|
|
106
|
+
- An incoming DM dispatches to the `message.dm` process key.
|
|
107
107
|
- An incoming mention dispatches to `message.mention`.
|
|
108
108
|
- Notifications fire as a side-effect of routines and observations
|
|
109
109
|
reaching the notifier (subject to quiet hours and rate limits).
|
|
@@ -17,7 +17,6 @@ summary: |
|
|
|
17
17
|
to your owner identity so nobody else can impersonate you.
|
|
18
18
|
section: messaging
|
|
19
19
|
tags:
|
|
20
|
-
- core
|
|
21
20
|
- messaging
|
|
22
21
|
- pairing
|
|
23
22
|
- safety
|
|
@@ -25,7 +24,7 @@ tags:
|
|
|
25
24
|
status: stable
|
|
26
25
|
locale: en-US
|
|
27
26
|
created: 2026-04-25
|
|
28
|
-
updated: 2026-
|
|
27
|
+
updated: 2026-07-01
|
|
29
28
|
keywords:
|
|
30
29
|
- pairing
|
|
31
30
|
- magic phrase
|
|
@@ -86,23 +85,24 @@ on the platform.
|
|
|
86
85
|
|
|
87
86
|
### The magic phrase (Slack, Discord)
|
|
88
87
|
|
|
89
|
-
The dashboard generates a short, memorable phrase
|
|
90
|
-
joined by hyphens, drawn from a 64-word list
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
88
|
+
The dashboard generates a short, memorable phrase: four lowercase words
|
|
89
|
+
joined by hyphens, drawn from a 64-word list. That makes it easy to type
|
|
90
|
+
but hard to guess (24 bits of entropy). You DM that exact phrase to the
|
|
91
|
+
bot. Matching is forgiving — it ignores case, punctuation, and emoji — but
|
|
92
|
+
you have to send the phrase **by itself**. If you wrap it in a sentence
|
|
93
|
+
("my phrase is apple-banana-cherry-date"), the agent replies asking you to
|
|
94
|
+
send just the phrase on its own.
|
|
95
95
|
|
|
96
|
-
The phrase
|
|
97
|
-
|
|
96
|
+
The phrase works once and expires after **5 minutes**. If it runs out,
|
|
97
|
+
generate a fresh one from the dashboard.
|
|
98
98
|
|
|
99
99
|
### Token pairing (Telegram, WhatsApp)
|
|
100
100
|
|
|
101
101
|
Telegram and WhatsApp don't use a typed phrase:
|
|
102
102
|
|
|
103
|
-
- **Telegram**
|
|
103
|
+
- **Telegram** hides a hard-to-guess, one-time token inside the QR / deep
|
|
104
104
|
link. Tapping **START** sends `/start <token>` to the bot, which
|
|
105
|
-
promotes you to owner. The token
|
|
105
|
+
promotes you to owner. The token has to match exactly and also expires
|
|
106
106
|
after 5 minutes.
|
|
107
107
|
- **WhatsApp** uses WhatsApp's own linked-device flow — you scan a QR from
|
|
108
108
|
your phone to attach the daemon as a device. Set the owner phone number
|
|
@@ -17,7 +17,6 @@ section: messaging
|
|
|
17
17
|
tags:
|
|
18
18
|
- messaging
|
|
19
19
|
- integrations
|
|
20
|
-
- slack
|
|
21
20
|
- pairing
|
|
22
21
|
status: stable
|
|
23
22
|
ask_examples:
|
|
@@ -26,7 +25,7 @@ ask_examples:
|
|
|
26
25
|
- Can the agent listen in shared channels?
|
|
27
26
|
locale: en-US
|
|
28
27
|
created: 2026-04-25
|
|
29
|
-
updated: 2026-
|
|
28
|
+
updated: 2026-07-01
|
|
30
29
|
keywords:
|
|
31
30
|
- slack
|
|
32
31
|
- socket mode
|
|
@@ -49,18 +48,20 @@ config_keys:
|
|
|
49
48
|
|
|
50
49
|
## In One Sentence
|
|
51
50
|
|
|
52
|
-
|
|
53
|
-
the
|
|
54
|
-
|
|
51
|
+
You add a Slack bot user to your workspace, and that bot is how you talk
|
|
52
|
+
to the agent: DMs you send the bot are treated as owner messages, and
|
|
53
|
+
`@`-mentions of the bot in channels are treated as mentions — but only
|
|
54
|
+
when they come from the one paired owner.
|
|
55
55
|
|
|
56
56
|
## What It Does
|
|
57
57
|
|
|
58
|
-
- Listens for **DMs** to the bot
|
|
58
|
+
- Listens for **DMs** to the bot — your direct messages to the agent.
|
|
59
59
|
- Listens for **`@`-mentions of the bot** in channels you've added it to.
|
|
60
60
|
- Sends notifications back to your owner DM.
|
|
61
61
|
|
|
62
|
-
The adapter
|
|
63
|
-
|
|
62
|
+
The adapter connects to Slack over **Socket Mode**, a WebSocket (a
|
|
63
|
+
persistent two-way link Slack opens to Aitne). Because Slack does the
|
|
64
|
+
reaching-out, Aitne needs no public inbound URL or webhook endpoint.
|
|
64
65
|
|
|
65
66
|
## Single-Owner Scope
|
|
66
67
|
|
|
@@ -13,7 +13,6 @@ section: messaging
|
|
|
13
13
|
tags:
|
|
14
14
|
- messaging
|
|
15
15
|
- integrations
|
|
16
|
-
- telegram
|
|
17
16
|
status: stable
|
|
18
17
|
config_keys:
|
|
19
18
|
- telegramOwnerChatId
|
|
@@ -24,7 +23,7 @@ ask_examples:
|
|
|
24
23
|
- Where do I get a Telegram bot token?
|
|
25
24
|
locale: en-US
|
|
26
25
|
created: 2026-04-25
|
|
27
|
-
updated: 2026-
|
|
26
|
+
updated: 2026-07-01
|
|
28
27
|
keywords:
|
|
29
28
|
- telegram
|
|
30
29
|
- telegram bot
|
|
@@ -45,14 +44,15 @@ token, scan the pairing QR code.
|
|
|
45
44
|
|
|
46
45
|
## What It Does
|
|
47
46
|
|
|
48
|
-
-
|
|
49
|
-
-
|
|
47
|
+
- Receives your incoming direct messages so the agent can react to them (owner DMs only — group chats are ignored).
|
|
48
|
+
- Sends the agent's notifications and replies back to the same Telegram chat.
|
|
50
49
|
|
|
51
50
|
## When It Runs / How It Is Triggered
|
|
52
51
|
|
|
53
|
-
Before pairing, nothing listens. Once you paste the bot token and
|
|
54
|
-
QR
|
|
55
|
-
direct
|
|
52
|
+
Before pairing, nothing listens. Once you paste the bot token and finish pairing
|
|
53
|
+
(scan the QR code or tap the deep link), Aitne continuously long-polls Telegram's
|
|
54
|
+
Bot API — it keeps an open request that returns the moment a new direct message
|
|
55
|
+
arrives.
|
|
56
56
|
|
|
57
57
|
## Where in the Dashboard
|
|
58
58
|
|
|
@@ -17,7 +17,6 @@ summary: |
|
|
|
17
17
|
section: messaging
|
|
18
18
|
tags:
|
|
19
19
|
- messaging
|
|
20
|
-
- whatsapp
|
|
21
20
|
- integrations
|
|
22
21
|
- pairing
|
|
23
22
|
status: stable
|
|
@@ -27,7 +26,7 @@ ask_examples:
|
|
|
27
26
|
- Why does WhatsApp say the device is unlinked?
|
|
28
27
|
locale: en-US
|
|
29
28
|
created: 2026-04-25
|
|
30
|
-
updated: 2026-
|
|
29
|
+
updated: 2026-07-01
|
|
31
30
|
keywords:
|
|
32
31
|
- whatsapp
|
|
33
32
|
- qr code
|
|
@@ -57,10 +56,11 @@ messages that flow exactly like Telegram.
|
|
|
57
56
|
|
|
58
57
|
## How It Works
|
|
59
58
|
|
|
60
|
-
Aitne connects to WhatsApp as a **linked device**
|
|
61
|
-
in the WhatsApp mobile app
|
|
62
|
-
bridge such as Twilio. There is no
|
|
63
|
-
inbound webhook
|
|
59
|
+
Aitne connects to WhatsApp as a **linked device** — the same "linked
|
|
60
|
+
devices" feature in the WhatsApp mobile app that powers WhatsApp Web. It does
|
|
61
|
+
not use the WhatsApp Cloud API or a paid bridge such as Twilio. There is no
|
|
62
|
+
business account, no bot token, and no inbound webhook (a public URL that
|
|
63
|
+
WhatsApp would call) to expose:
|
|
64
64
|
|
|
65
65
|
- You scan a QR code once to link the daemon as a device on your account.
|
|
66
66
|
- Incoming WhatsApp messages arrive over the linked-device connection.
|
|
@@ -15,7 +15,6 @@ summary: |
|
|
|
15
15
|
answer "what happened" and "what was said".
|
|
16
16
|
section: operations
|
|
17
17
|
tags:
|
|
18
|
-
- core
|
|
19
18
|
- operations
|
|
20
19
|
- audit
|
|
21
20
|
- dashboard
|
|
@@ -26,7 +25,7 @@ ask_examples:
|
|
|
26
25
|
- How do I find why a routine failed?
|
|
27
26
|
locale: en-US
|
|
28
27
|
created: 2026-04-25
|
|
29
|
-
updated: 2026-
|
|
28
|
+
updated: 2026-07-01
|
|
30
29
|
keywords:
|
|
31
30
|
- activity
|
|
32
31
|
- conversations
|
|
@@ -53,9 +52,9 @@ ui_anchors:
|
|
|
53
52
|
|
|
54
53
|
## In One Sentence
|
|
55
54
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
detail lives one click deeper under Conversations.
|
|
55
|
+
The agent logs every session, action, and outcome to a local SQLite
|
|
56
|
+
database and shows them as the Activity timeline; the matching
|
|
57
|
+
message-by-message detail lives one click deeper under Conversations.
|
|
59
58
|
|
|
60
59
|
## What It Does
|
|
61
60
|
|
|
@@ -71,10 +70,11 @@ Each row links to the underlying conversation when one exists.
|
|
|
71
70
|
|
|
72
71
|
## How It Works
|
|
73
72
|
|
|
74
|
-
Activity
|
|
75
|
-
Every other event in the system writes to
|
|
76
|
-
in three SQLite tables: `agent_actions`
|
|
77
|
-
`conversation_sessions`
|
|
73
|
+
Activity never runs anything on its own — it only mirrors what already
|
|
74
|
+
happened (a read-only view). Every other event in the system writes to
|
|
75
|
+
it as a side effect, landing in three SQLite tables: `agent_actions`
|
|
76
|
+
(what happened), plus `conversation_sessions` and `messages` (what was
|
|
77
|
+
said).
|
|
78
78
|
|
|
79
79
|
## What You See
|
|
80
80
|
|
|
@@ -9,12 +9,11 @@ aliases:
|
|
|
9
9
|
- human in the loop
|
|
10
10
|
category: features
|
|
11
11
|
summary: |
|
|
12
|
-
A few high-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
A few high-impact actions queue as approvals. The action blocks
|
|
13
|
+
until you click Approve on the dashboard Overview page; the
|
|
14
|
+
approval card stays visible there regardless of quiet hours.
|
|
15
15
|
section: operations
|
|
16
16
|
tags:
|
|
17
|
-
- core
|
|
18
17
|
- safety
|
|
19
18
|
- operations
|
|
20
19
|
status: stable
|
|
@@ -24,7 +23,7 @@ ask_examples:
|
|
|
24
23
|
- Where do I approve a pending action?
|
|
25
24
|
locale: en-US
|
|
26
25
|
created: 2026-04-25
|
|
27
|
-
updated: 2026-
|
|
26
|
+
updated: 2026-07-01
|
|
28
27
|
keywords:
|
|
29
28
|
- approval
|
|
30
29
|
- approve tier
|
|
@@ -47,9 +46,10 @@ api_endpoints:
|
|
|
47
46
|
|
|
48
47
|
## In One Sentence
|
|
49
48
|
|
|
50
|
-
A small set of high-
|
|
51
|
-
|
|
52
|
-
|
|
49
|
+
A small set of high-impact actions — the ones that could cause
|
|
50
|
+
real harm if they ran by mistake — queue as approvals. The agent
|
|
51
|
+
waits for you to click **Approve** on the dashboard before it runs
|
|
52
|
+
one.
|
|
53
53
|
|
|
54
54
|
## How It Works
|
|
55
55
|
|
|
@@ -84,10 +84,11 @@ Deny asks for confirmation before discarding the item.
|
|
|
84
84
|
## When Something Goes Wrong
|
|
85
85
|
|
|
86
86
|
- **A stale approval you never answered:** a pending approval is
|
|
87
|
-
discarded once the agent day rolls over
|
|
88
|
-
|
|
89
|
-
day turns. If that happens, redo
|
|
90
|
-
(for example, re-send the DM or
|
|
87
|
+
discarded once the agent day rolls over — the moment "today"
|
|
88
|
+
resets, at 04:00 local time by default. It is marked skipped
|
|
89
|
+
rather than replayed after the day turns. If that happens, redo
|
|
90
|
+
the request that triggered it (for example, re-send the DM or
|
|
91
|
+
re-run the routine).
|
|
91
92
|
|
|
92
93
|
## Related
|
|
93
94
|
|
|
@@ -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).
|