@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
|
@@ -14,11 +14,8 @@ summary: |
|
|
|
14
14
|
tier. Mirrors packages/shared/src/process-key.ts.
|
|
15
15
|
section: process-keys
|
|
16
16
|
tags:
|
|
17
|
-
- core
|
|
18
|
-
- reference
|
|
19
|
-
- dispatch
|
|
20
|
-
- backends
|
|
21
17
|
- routing
|
|
18
|
+
- backends
|
|
22
19
|
status: stable
|
|
23
20
|
ask_examples:
|
|
24
21
|
- List all the ProcessKeys
|
|
@@ -41,7 +38,7 @@ keywords:
|
|
|
41
38
|
- delegated_task
|
|
42
39
|
- gmail_classify
|
|
43
40
|
created: 2026-04-25
|
|
44
|
-
updated: 2026-
|
|
41
|
+
updated: 2026-07-01
|
|
45
42
|
config_keys:
|
|
46
43
|
- monthlyReviewEnabled
|
|
47
44
|
- delegatedTaskHeavyEnabled
|
|
@@ -61,12 +58,13 @@ related:
|
|
|
61
58
|
|
|
62
59
|
# ProcessKeys
|
|
63
60
|
|
|
64
|
-
A **ProcessKey**
|
|
65
|
-
the morning routine, an activity scan,
|
|
66
|
-
|
|
67
|
-
|
|
61
|
+
A **ProcessKey** is a label for one kind of work the agent runs — an owner
|
|
62
|
+
DM, the morning routine, an activity scan, and so on. When a piece of work
|
|
63
|
+
starts, the dispatcher hands its ProcessKey to the `BackendRouter`, which
|
|
64
|
+
turns the key into a `{ main, fallback }` backend pair plus an execution
|
|
65
|
+
tier. The dispatcher itself never picks a model; the router does that.
|
|
68
66
|
|
|
69
|
-
The **default tier** column maps to a model size, not a specific id:
|
|
67
|
+
The **default tier** column maps to a model size, not to a specific id:
|
|
70
68
|
|
|
71
69
|
- `lite` → Haiku-class (cheap, fast, narrow)
|
|
72
70
|
- `medium` → Sonnet-class (the default for most owner-facing and routine work)
|
|
@@ -128,21 +126,21 @@ The **default tier** column maps to a model size, not a specific id:
|
|
|
128
126
|
| `routine.research_wiki_summary` | Accept path for the "wiki summary" option — writes a wiki note into Obsidian inbox / Notion / local context per integration availability | medium | yes |
|
|
129
127
|
| `browser_task` | Open-ended browser sub-agent (BROWSER_TASK_REDESIGN_PLAN.md §6.1). Claude-only backend floor; dispatched from `POST /api/browser-task` (DM, dashboard, or scheduler). | medium | yes |
|
|
130
128
|
|
|
131
|
-
|
|
132
|
-
`/settings/models`
|
|
133
|
-
|
|
134
|
-
global default.
|
|
129
|
+
**Configurable** means the operator can override the backend or tier for
|
|
130
|
+
that key on `/settings/models` — these are the keys listed in
|
|
131
|
+
`CONFIGURABLE_PROCESS_KEYS`. **no** means the binding is fixed and always
|
|
132
|
+
uses the global default for its tier.
|
|
135
133
|
|
|
136
134
|
This list mirrors `packages/shared/src/process-key.ts`. The codebase
|
|
137
135
|
is the source of truth.
|
|
138
136
|
|
|
139
137
|
## Reactive vs Autonomous
|
|
140
138
|
|
|
141
|
-
|
|
142
|
-
`message.dm`, `message.mention`,
|
|
143
|
-
`setup`, `knowledge.import`. Every
|
|
144
|
-
under the tighter Approve-tier
|
|
145
|
-
established.
|
|
139
|
+
Reactive keys run while the owner is in the loop, waiting on a reply.
|
|
140
|
+
`REACTIVE_PROCESS_KEYS` holds them: `message.dm`, `message.mention`,
|
|
141
|
+
`dashboard.chat`, `dashboard.docs_qa`, `setup`, `knowledge.import`. Every
|
|
142
|
+
other key is autonomous — it runs on its own, under the tighter Approve-tier
|
|
143
|
+
MCP tool-stripping that B-003 Phase 3 established.
|
|
146
144
|
|
|
147
145
|
## Tier Locks
|
|
148
146
|
|
|
@@ -160,6 +158,6 @@ by `DELEGATED_TASK_HARD_CAPS` (server-enforced, not user-tunable):
|
|
|
160
158
|
- `maxTimeoutMs` ≤ 300 000
|
|
161
159
|
- `maxSchemaBytes` ≤ 4096
|
|
162
160
|
|
|
163
|
-
`config.ts` holds the *defaults* (`delegatedTaskDefaultMaxToolCalls`,
|
|
164
|
-
|
|
165
|
-
per-request fields.
|
|
161
|
+
`config.ts` holds the *defaults* (`delegatedTaskDefaultMaxToolCalls`, …),
|
|
162
|
+
but the caps above bound the request even when a prompt-injected caller
|
|
163
|
+
tries to raise the per-request fields.
|
|
@@ -13,8 +13,6 @@ summary: |
|
|
|
13
13
|
a SKILL.md under agent-assets/skills/<slug>/.
|
|
14
14
|
section: skills
|
|
15
15
|
tags:
|
|
16
|
-
- core
|
|
17
|
-
- reference
|
|
18
16
|
- skills
|
|
19
17
|
status: stable
|
|
20
18
|
ask_examples:
|
|
@@ -34,7 +32,7 @@ keywords:
|
|
|
34
32
|
- wiki skill
|
|
35
33
|
- notify skill
|
|
36
34
|
created: 2026-04-25
|
|
37
|
-
updated: 2026-
|
|
35
|
+
updated: 2026-07-01
|
|
38
36
|
ui_anchors:
|
|
39
37
|
- /knowledge?tab=skills
|
|
40
38
|
process_keys:
|
|
@@ -56,11 +54,13 @@ related:
|
|
|
56
54
|
|
|
57
55
|
# Built-in Skills
|
|
58
56
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
57
|
+
A skill is a small instruction file that teaches the agent how to do one job.
|
|
58
|
+
Aitne ships a fixed set of built-in skills, and the agent loads the ones it
|
|
59
|
+
needs at the start of each session. Most are always available. A few are
|
|
60
|
+
**conditional** — the agent loads them only when a gating flag turns them on
|
|
61
|
+
(`gmail-lifestyle`, `managed-tasks`), or only for a specific event such as an
|
|
62
|
+
owner DM (`browser-task` / `background-task` / `background-task-reply`). The
|
|
63
|
+
table below is the full, authoritative roster.
|
|
64
64
|
|
|
65
65
|
| Slug | Purpose |
|
|
66
66
|
|---|---|
|
|
@@ -94,14 +94,16 @@ DMs). The table below is the canonical roster.
|
|
|
94
94
|
|
|
95
95
|
## How skills are sourced
|
|
96
96
|
|
|
97
|
-
|
|
98
|
-
`agent-assets/skills/<slug
|
|
99
|
-
|
|
97
|
+
Each skill is defined by its own `SKILL.md` file under
|
|
98
|
+
`agent-assets/skills/<slug>/` — that file is the single source of truth. The
|
|
99
|
+
`description` field at the top of that file (its frontmatter) is the text the
|
|
100
|
+
dispatcher reads when it decides which skills to load for a session.
|
|
100
101
|
|
|
101
102
|
## Runtime overlays
|
|
102
103
|
|
|
103
|
-
|
|
104
|
-
recipes,
|
|
105
|
-
the skill-curation loop. The seed files in
|
|
106
|
-
|
|
107
|
-
|
|
104
|
+
Some sections of these skills (knowledge layout, routing tables, search
|
|
105
|
+
recipes, and the like) can be refined at runtime through JSON **overlays** — small
|
|
106
|
+
patches maintained by the skill-curation loop. The shipped seed files in
|
|
107
|
+
`agent-assets/skills/` are never rewritten. Instead, the `SkillsCompiler`
|
|
108
|
+
applies the overlays when a session starts, reading them from
|
|
109
|
+
`<dataDir>/skill-curation-overlays/<slug>/<section-id>.json`.
|
|
@@ -12,7 +12,6 @@ summary: |
|
|
|
12
12
|
via the backend's CLI or paste a fresh API key.
|
|
13
13
|
section: troubleshooting
|
|
14
14
|
tags:
|
|
15
|
-
- troubleshooting
|
|
16
15
|
- safety
|
|
17
16
|
- backends
|
|
18
17
|
- health
|
|
@@ -23,7 +22,7 @@ ask_examples:
|
|
|
23
22
|
- The auth-health pill went red, what now?
|
|
24
23
|
locale: en-US
|
|
25
24
|
created: 2026-04-25
|
|
26
|
-
updated: 2026-
|
|
25
|
+
updated: 2026-07-01
|
|
27
26
|
keywords:
|
|
28
27
|
- auth failed
|
|
29
28
|
- auth error
|
|
@@ -56,16 +55,18 @@ api_endpoints:
|
|
|
56
55
|
|
|
57
56
|
## Most Likely Causes
|
|
58
57
|
|
|
59
|
-
1. **Provider API key revoked or rotated**
|
|
60
|
-
on a healthy install. Re-paste the key on
|
|
58
|
+
1. **Provider API key revoked or rotated** (replaced with a new one) —
|
|
59
|
+
the most common cause on a healthy install. Re-paste the key on
|
|
60
|
+
`/settings/models`.
|
|
61
61
|
2. **Subscription-fallback login expired** when no API key was
|
|
62
|
-
registered
|
|
63
|
-
`claude auth login`, `codex login`, `gemini` — and
|
|
64
|
-
timed out
|
|
65
|
-
3. **Account-level
|
|
66
|
-
|
|
67
|
-
(Bedrock / Vertex / Foundry for Claude, Vertex AI for Gemini),
|
|
68
|
-
IAM
|
|
62
|
+
registered. This means the daemon was signed in through the CLI's
|
|
63
|
+
local login — `claude auth login`, `codex login`, `gemini` — and
|
|
64
|
+
that session timed out. The recommended fix is to register an API key.
|
|
65
|
+
3. **Account-level change** at the provider (key disabled, project
|
|
66
|
+
deleted, billing suspended). If you use cloud-provider auth
|
|
67
|
+
(Bedrock / Vertex / Foundry for Claude, Vertex AI for Gemini), a
|
|
68
|
+
change to the underlying IAM role or service account shows up the
|
|
69
|
+
same way.
|
|
69
70
|
|
|
70
71
|
## Diagnostic Steps
|
|
71
72
|
|
|
@@ -109,3 +110,4 @@ probe (default 10 minutes).
|
|
|
109
110
|
## Related
|
|
110
111
|
|
|
111
112
|
- [Auth Health](../concepts/auth-health.md)
|
|
113
|
+
- [Dashboard Shows Degraded](./dashboard-shows-degraded.md)
|
|
@@ -18,7 +18,6 @@ summary: |
|
|
|
18
18
|
section: troubleshooting
|
|
19
19
|
status: stable
|
|
20
20
|
tags:
|
|
21
|
-
- troubleshooting
|
|
22
21
|
- operations
|
|
23
22
|
- health
|
|
24
23
|
- memory
|
|
@@ -28,7 +27,7 @@ ask_examples:
|
|
|
28
27
|
- Why are context writes being refused with 503?
|
|
29
28
|
locale: en-US
|
|
30
29
|
created: 2026-04-25
|
|
31
|
-
updated: 2026-
|
|
30
|
+
updated: 2026-07-01
|
|
32
31
|
keywords:
|
|
33
32
|
- degraded
|
|
34
33
|
- degraded banner
|
|
@@ -61,17 +60,18 @@ related:
|
|
|
61
60
|
followed by the offending path.
|
|
62
61
|
- An **Open Management Mode** button on the right of the banner (links to
|
|
63
62
|
Settings → Management Mode).
|
|
64
|
-
- Any routine or skill that touches a
|
|
63
|
+
- Any routine or skill that touches a memory file fails. While degraded, the
|
|
65
64
|
context API returns **HTTP 503** for every request — reads (`GET`) as well as
|
|
66
|
-
writes (`POST`/`PUT`/`PATCH`/`DELETE`)
|
|
67
|
-
|
|
65
|
+
writes (`POST`/`PUT`/`PATCH`/`DELETE`). This is on purpose: it stops the agent
|
|
66
|
+
from quietly falling back to the wrong, out-of-date location.
|
|
68
67
|
|
|
69
68
|
## What "Degraded" Actually Means
|
|
70
69
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
70
|
+
Every 30 seconds the daemon runs a vault-health probe — a quick background
|
|
71
|
+
check on the folder that holds your memory files. If that check fails, the
|
|
72
|
+
daemon switches to degraded mode. It is **not** about backend auth, message
|
|
73
|
+
delivery, or a stuck write lock — it means only one thing: the daemon can't
|
|
74
|
+
safely write your memory files right now.
|
|
75
75
|
|
|
76
76
|
You only see this banner if you switched memory to an **Obsidian-style vault**
|
|
77
77
|
(`vaultMode: "obsidian"`). The default `vaultMode: "plain"` stores memory under
|
|
@@ -83,7 +83,7 @@ The `reason` in the banner is one of:
|
|
|
83
83
|
|--------------------------------|---------|
|
|
84
84
|
| `primary_vault_unreachable` | The configured vault path doesn't exist, isn't a directory, or isn't writable (e.g. an external drive was unplugged). |
|
|
85
85
|
| `primary_vault_not_configured` | Vault mode is Obsidian but no `primaryVaultPath` is set. |
|
|
86
|
-
| `primary_vault_missing_content`| The path is reachable but
|
|
86
|
+
| `primary_vault_missing_content`| The path is reachable but is missing the marker files that identify a set-up vault (it was never seeded, or was moved/restructured). |
|
|
87
87
|
|
|
88
88
|
A context-vault migration (`POST /api/setup/migrate-context`) is a **separate**
|
|
89
89
|
state, not a degraded reason — it does **not** raise this banner. During a
|
|
@@ -17,7 +17,6 @@ summary: |
|
|
|
17
17
|
section: fallback-keeps-firing
|
|
18
18
|
status: stable
|
|
19
19
|
tags:
|
|
20
|
-
- troubleshooting
|
|
21
20
|
- backends
|
|
22
21
|
- routing
|
|
23
22
|
- health
|
|
@@ -53,15 +52,16 @@ related:
|
|
|
53
52
|
- concepts/backends-and-tiers
|
|
54
53
|
locale: en-US
|
|
55
54
|
created: 2026-04-25
|
|
56
|
-
updated: 2026-
|
|
55
|
+
updated: 2026-07-01
|
|
57
56
|
---
|
|
58
57
|
|
|
59
58
|
# Fallback Keeps Firing
|
|
60
59
|
|
|
61
|
-
|
|
62
|
-
the
|
|
63
|
-
the
|
|
64
|
-
|
|
60
|
+
For every run, the router picks two backends: a `main` and a `fallback`. (A
|
|
61
|
+
backend is the service that does the actual work — Claude, Codex, or Gemini.)
|
|
62
|
+
When the main backend can't take the job, the router quietly switches to the
|
|
63
|
+
fallback so the run still finishes. One switch now and then is normal. A
|
|
64
|
+
switch on run after run means the main backend has a lasting problem.
|
|
65
65
|
|
|
66
66
|
## What you see
|
|
67
67
|
|
|
@@ -70,32 +70,34 @@ If it happens run after run, the main backend has a persistent problem.
|
|
|
70
70
|
|
|
71
71
|
## Most likely causes
|
|
72
72
|
|
|
73
|
-
1. **
|
|
74
|
-
credentials (or API key) for the main backend are no longer
|
|
75
|
-
every run raises a `BackendDecisiveFailure("auth")` and the
|
|
76
|
-
over.
|
|
77
|
-
2. **
|
|
78
|
-
usage
|
|
79
|
-
|
|
80
|
-
the router falls over until the window
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
73
|
+
1. **The main backend's auth has expired.** This is the most common cause.
|
|
74
|
+
The CLI credentials (or API key) for the main backend are no longer
|
|
75
|
+
valid, so every run raises a `BackendDecisiveFailure("auth")` and the
|
|
76
|
+
router falls over.
|
|
77
|
+
2. **The main backend's usage window is used up.** Claude and Codex count
|
|
78
|
+
usage against a rolling window (a limit that refills over time); Gemini
|
|
79
|
+
also has a per-day free-tier cap. Once the limit is reached, the backend
|
|
80
|
+
raises a `BackendQuotaError` and the router falls over until the window
|
|
81
|
+
resets.
|
|
82
|
+
3. **A repeating `BackendDecisiveFailure` from a config problem** — for
|
|
83
|
+
example, the main backend's CLI isn't installed, a pinned model id no
|
|
84
|
+
longer resolves, or execution-mode settings reject the run.
|
|
84
85
|
|
|
85
86
|
`BackendQuotaError` and `BackendDecisiveFailure` are the two signals the
|
|
86
|
-
router watches
|
|
87
|
+
router watches, and one of them is firing on every attempt.
|
|
87
88
|
|
|
88
89
|
## Diagnose
|
|
89
90
|
|
|
90
91
|
1. **Check auth on `/settings/models`.** Each backend has a card showing
|
|
91
92
|
its auth status. If the main backend's card flags expired or failed
|
|
92
93
|
auth, that's your cause — re-verify or re-authenticate it there.
|
|
93
|
-
2. **Check quota
|
|
94
|
-
backend's recent spend.
|
|
95
|
-
cause 2. If you set
|
|
96
|
-
stop once the daily
|
|
97
|
-
|
|
98
|
-
|
|
94
|
+
2. **Check quota and spend on `/analytics` (Cost tab).** Look at the main
|
|
95
|
+
backend's recent spend. Spend that flattens against a ceiling, or a
|
|
96
|
+
window that has run dry, points to cause 2. If you set
|
|
97
|
+
`autonomousDailyCostCapUsd`, autonomous runs also stop once the daily
|
|
98
|
+
cap is hit (reactive DMs are never blocked by it).
|
|
99
|
+
3. **Read the failure detail in `/activity`.** Open the row that fell over
|
|
100
|
+
to see the exact error. You can do the same from the CLI:
|
|
99
101
|
|
|
100
102
|
```bash
|
|
101
103
|
# recent runs on the main backend that didn't succeed
|
|
@@ -16,13 +16,12 @@ summary: |
|
|
|
16
16
|
DM, or the message landed in a group instead of a direct channel.
|
|
17
17
|
section: messaging
|
|
18
18
|
tags:
|
|
19
|
-
- troubleshooting
|
|
20
19
|
- messaging
|
|
21
20
|
- pairing
|
|
22
21
|
status: stable
|
|
23
22
|
locale: en-US
|
|
24
23
|
created: 2026-04-25
|
|
25
|
-
updated: 2026-
|
|
24
|
+
updated: 2026-07-01
|
|
26
25
|
keywords:
|
|
27
26
|
- magic phrase
|
|
28
27
|
- owner channel
|
|
@@ -53,8 +52,8 @@ deep link (Telegram / WhatsApp), the pairing card on
|
|
|
53
52
|
|
|
54
53
|
## Know which secret your platform uses
|
|
55
54
|
|
|
56
|
-
Not every platform uses
|
|
57
|
-
|
|
55
|
+
Not every platform uses a typed phrase, so the right fix depends on which
|
|
56
|
+
one you are pairing:
|
|
58
57
|
|
|
59
58
|
| Platform | Secret | How you send it |
|
|
60
59
|
|---|---|---|
|
|
@@ -69,11 +68,11 @@ All secrets are single-use and expire after **5 minutes**.
|
|
|
69
68
|
|
|
70
69
|
1. **The secret expired.** The phrase or token is only valid for 5
|
|
71
70
|
minutes. If you took longer, it has lapsed — regenerate a fresh one.
|
|
72
|
-
2. **You wrapped the phrase in a sentence (Slack / Discord).** The
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
71
|
+
2. **You wrapped the phrase in a sentence (Slack / Discord).** The four
|
|
72
|
+
words have to be the **only** thing in the message. Sending "my phrase
|
|
73
|
+
is apple-banana-cherry-date" is turned down on purpose, and the agent
|
|
74
|
+
replies asking you to send the phrase on its own. Aside from that, the
|
|
75
|
+
check ignores capitalization, punctuation, and emoji.
|
|
77
76
|
3. **You sent it in a group or channel.** Pairing — and all agent
|
|
78
77
|
messaging — works only in a one-to-one DM. Group chats are out of
|
|
79
78
|
scope.
|
|
@@ -16,11 +16,10 @@ summary: |
|
|
|
16
16
|
boot/wake catch-up, the missed-fire self-heal, or the retry chain.
|
|
17
17
|
section: morning-routine-didnt-run
|
|
18
18
|
tags:
|
|
19
|
-
- troubleshooting
|
|
20
19
|
- routines
|
|
21
20
|
- autonomous
|
|
22
21
|
- scheduler
|
|
23
|
-
-
|
|
22
|
+
- routing
|
|
24
23
|
status: stable
|
|
25
24
|
ask_examples:
|
|
26
25
|
- Why didn't my morning routine fire?
|
|
@@ -28,7 +27,7 @@ ask_examples:
|
|
|
28
27
|
- How do I regenerate today.md by hand?
|
|
29
28
|
locale: en-US
|
|
30
29
|
created: 2026-04-25
|
|
31
|
-
updated: 2026-
|
|
30
|
+
updated: 2026-07-01
|
|
32
31
|
keywords:
|
|
33
32
|
- morning routine didn't run
|
|
34
33
|
- morning routine skipped
|
|
@@ -74,24 +73,25 @@ without any action from you:
|
|
|
74
73
|
So a missed routine often resolves itself on the next `aitne start`
|
|
75
74
|
or `aitne restart`.
|
|
76
75
|
- **Sleep wake catch-up.** If the machine was asleep at the trigger
|
|
77
|
-
minute (laptop lid closed at 04:00), the
|
|
78
|
-
cron never replays
|
|
79
|
-
|
|
80
|
-
along with any missed evening
|
|
76
|
+
minute (laptop lid closed at 04:00), the scheduled trigger is
|
|
77
|
+
silently lost — the scheduler (cron) never replays a tick it missed.
|
|
78
|
+
When the machine wakes, the daemon spots the gap in wall-clock time
|
|
79
|
+
and queues the morning routine itself, along with any missed evening
|
|
80
|
+
or weekly reviews.
|
|
81
81
|
- **Missed-fire self-heal.** A periodic check (every 10 minutes)
|
|
82
82
|
notices when the day is more than ~15 minutes old with no morning
|
|
83
83
|
attempt and nothing queued, and queues the routine. This covers
|
|
84
84
|
sleeps too short for the wake detector and any other lost trigger.
|
|
85
85
|
- **Retry on failure.** If the routine runs but fails to produce a
|
|
86
|
-
fresh `state/today.md`, the daemon retries up to 3 times
|
|
87
|
-
|
|
88
|
-
attempts it sends you a DM asking you to regenerate manually.
|
|
89
|
-
- **Hung-run recovery.** If a run starts and then
|
|
90
|
-
|
|
91
|
-
check re-queues it once the run has
|
|
92
|
-
threshold (~2 hours by default) — at most twice per day, after
|
|
93
|
-
it alerts instead of re-running. Either way you get an owner
|
|
94
|
-
the silence never goes unnoticed.
|
|
86
|
+
fresh `state/today.md`, the daemon retries up to 3 times, waiting a
|
|
87
|
+
little longer between each try (5, then 10, then 15 minutes). After 3
|
|
88
|
+
failed attempts it sends you a DM asking you to regenerate manually.
|
|
89
|
+
- **Hung-run recovery.** If a run starts and then gets stuck (usually
|
|
90
|
+
the machine sleeps mid-run and drops the backend connection), the
|
|
91
|
+
self-heal check re-queues it once the run has stayed silent past the
|
|
92
|
+
stall threshold (~2 hours by default) — at most twice per day, after
|
|
93
|
+
which it alerts you instead of re-running. Either way you get an owner
|
|
94
|
+
DM, so the silence never goes unnoticed.
|
|
95
95
|
|
|
96
96
|
Give it a few minutes, or restart the daemon, before digging deeper.
|
|
97
97
|
|
|
@@ -111,8 +111,9 @@ Give it a few minutes, or restart the daemon, before digging deeper.
|
|
|
111
111
|
run. See [Quota Exhausted](quota-exhausted.md).
|
|
112
112
|
4. **Mid-retry.** The routine threw and is in the 5/10/15-minute
|
|
113
113
|
retry window — the row may simply not have landed yet.
|
|
114
|
-
5. **Day-boundary subtlety.** Before
|
|
115
|
-
|
|
114
|
+
5. **Day-boundary subtlety.** Before the agent-day boundary (the moment
|
|
115
|
+
"today" rolls over, set by `dayBoundaryHour`, default 04:00), the
|
|
116
|
+
routine still "belongs to" yesterday — see
|
|
116
117
|
[Agent Day](../concepts/agent-day.md).
|
|
117
118
|
|
|
118
119
|
Note: the morning routine takes priority over the activity scan, not the
|
|
@@ -15,10 +15,8 @@ summary: |
|
|
|
15
15
|
watched, or a change the agent authored itself (filtered out).
|
|
16
16
|
section: troubleshooting
|
|
17
17
|
tags:
|
|
18
|
-
- troubleshooting
|
|
19
18
|
- observations
|
|
20
19
|
- polling
|
|
21
|
-
- activity-scan
|
|
22
20
|
status: stable
|
|
23
21
|
ask_examples:
|
|
24
22
|
- Why didn't the agent notice my new commit?
|
|
@@ -26,7 +24,7 @@ ask_examples:
|
|
|
26
24
|
- Why is the activity scan empty?
|
|
27
25
|
locale: en-US
|
|
28
26
|
created: 2026-04-25
|
|
29
|
-
updated: 2026-
|
|
27
|
+
updated: 2026-07-01
|
|
30
28
|
keywords:
|
|
31
29
|
- observation
|
|
32
30
|
- polling
|
|
@@ -64,16 +62,17 @@ gate. Work through them in that order.
|
|
|
64
62
|
|
|
65
63
|
## How detection actually works
|
|
66
64
|
|
|
67
|
-
Observers (Obsidian, Git, Notion, Calendar) do **not** fire an event
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
65
|
+
Observers (Obsidian, Git, Notion, Calendar) do **not** fire an event the
|
|
66
|
+
instant something changes. Instead they poll — check the source on a fixed
|
|
67
|
+
schedule — and each time they call `recordObservation(...)`, which appends a
|
|
68
|
+
row to the `observations` table. The activity scan later reads those rows in
|
|
69
|
+
one batch. So a "missing" observation is usually a row that was never written,
|
|
70
|
+
or one that was written but then filtered out.
|
|
72
71
|
|
|
73
|
-
`AgentWriteTracker` tags every change as `actor='agent'` or
|
|
74
|
-
Changes the agent itself
|
|
75
|
-
activity scan
|
|
76
|
-
from
|
|
72
|
+
`AgentWriteTracker` tags every change as either `actor='agent'` or
|
|
73
|
+
`actor='user'`. Changes the agent wrote itself are tagged `actor='agent'` and
|
|
74
|
+
skipped by the activity scan. This is a deliberate anti-loop filter: it keeps
|
|
75
|
+
the agent from reacting to its own output.
|
|
77
76
|
|
|
78
77
|
## Most likely causes
|
|
79
78
|
|
|
@@ -85,9 +84,9 @@ from observing its own output.
|
|
|
85
84
|
3. **The change was tagged `actor='agent'`.** If the agent (not you) authored
|
|
86
85
|
the commit or note, the anti-loop filter drops it.
|
|
87
86
|
4. **It was below the gate threshold.** The activity scan only runs its full
|
|
88
|
-
pass
|
|
89
|
-
threshold (default `1`; legacy key
|
|
90
|
-
|
|
87
|
+
pass once the number of pending observations reaches the activity-scan
|
|
88
|
+
agent's **min observations** threshold (default `1`; legacy key
|
|
89
|
+
`activityScanMinObservations`). A single low-signal change can be held back.
|
|
91
90
|
|
|
92
91
|
## Diagnostic steps
|
|
93
92
|
|
|
@@ -14,7 +14,6 @@ summary: |
|
|
|
14
14
|
spending limit, or pin a different model.
|
|
15
15
|
section: quota-exhausted
|
|
16
16
|
tags:
|
|
17
|
-
- troubleshooting
|
|
18
17
|
- cost
|
|
19
18
|
- backends
|
|
20
19
|
- quotas
|
|
@@ -26,7 +25,7 @@ ask_examples:
|
|
|
26
25
|
- Why did an autonomous run get skipped for the cost cap?
|
|
27
26
|
locale: en-US
|
|
28
27
|
created: 2026-04-25
|
|
29
|
-
updated: 2026-
|
|
28
|
+
updated: 2026-07-01
|
|
30
29
|
keywords:
|
|
31
30
|
- quota
|
|
32
31
|
- BackendQuotaError
|
|
@@ -51,37 +50,40 @@ related:
|
|
|
51
50
|
## What You See
|
|
52
51
|
|
|
53
52
|
- A `BackendQuotaError` row in Activity.
|
|
54
|
-
-
|
|
55
|
-
- Or: an autonomous run was skipped with reason
|
|
56
|
-
`autonomous_cost_cap_exceeded
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
or wait for the next agent day
|
|
53
|
+
- The fallback backend ran the next routine instead of the main one.
|
|
54
|
+
- Or: an autonomous run was skipped with the reason
|
|
55
|
+
`autonomous_cost_cap_exceeded`. This is a *separate* safety net, not a
|
|
56
|
+
provider quota error. It comes from `autonomousDailyCostCapUsd` (default
|
|
57
|
+
off), which skips only autonomous work and never touches reactive DMs.
|
|
58
|
+
Its sibling `autonomousMonthlyCostCapUsd` (also default off) only sends
|
|
59
|
+
a notification — it alerts you but never skips a run. To clear the skip,
|
|
60
|
+
raise the cap on `/settings/models` or wait for the next agent day (the
|
|
61
|
+
moment "today" rolls over, 04:00 local by default).
|
|
62
62
|
|
|
63
63
|
## Most Likely Causes
|
|
64
64
|
|
|
65
65
|
1. **Provider rate limit** on your API key (Anthropic / OpenAI /
|
|
66
|
-
Google)
|
|
67
|
-
per-minute / per-day caps tied to your
|
|
66
|
+
Google). Running on an API key is the supported path. Check the
|
|
67
|
+
provider console for the per-minute / per-day caps tied to your
|
|
68
|
+
billing.
|
|
68
69
|
2. **Gemini per-agent-day request ceiling** reached. Aitne caps
|
|
69
|
-
Gemini at 450 model requests per agent day
|
|
70
|
-
of Google's free-tier daily limit
|
|
71
|
-
`GOOGLE_API_KEY` without billing
|
|
72
|
-
model
|
|
73
|
-
"Gemini daily-request ceiling reached"
|
|
74
|
-
agent-day boundary (04:00 local).
|
|
70
|
+
Gemini at 450 model requests per agent day — a deliberately low
|
|
71
|
+
fraction of Google's free-tier daily limit for `GEMINI_API_KEY` /
|
|
72
|
+
`GOOGLE_API_KEY` keys without billing. This ceiling applies to Gemini
|
|
73
|
+
only and covers every Gemini model together, so it is not tied to any
|
|
74
|
+
one model id. The error reads "Gemini daily-request ceiling reached"
|
|
75
|
+
and resets at the next agent-day boundary (04:00 local).
|
|
75
76
|
3. **Cloud-provider quota** — Bedrock / Vertex / Foundry / Azure
|
|
76
77
|
OpenAI / Gemini-Vertex enforce their own per-region / per-model
|
|
77
|
-
quotas. The error
|
|
78
|
-
4. **Subscription fallback exhausted** — no API key
|
|
79
|
-
the backend is running on the CLI's local
|
|
80
|
-
The
|
|
81
|
-
Claude's rolling 5-hour Opus window on a Max plan
|
|
82
|
-
recommended fix is to register an API key on
|
|
83
|
-
the fallback is not provider-supported for
|
|
84
|
-
|
|
78
|
+
quotas. The error shows up the same way as a direct-API quota.
|
|
79
|
+
4. **Subscription fallback exhausted** — you have no API key
|
|
80
|
+
registered, so the backend is running on the CLI's local
|
|
81
|
+
subscription login. The provider's subscription limits then apply
|
|
82
|
+
(for example, Claude's rolling 5-hour Opus window on a Max plan
|
|
83
|
+
login). The recommended fix is to register an API key on
|
|
84
|
+
`/settings/models`; the fallback is not provider-supported for
|
|
85
|
+
automated agent use. See
|
|
86
|
+
[Costs and Quotas](../concepts/costs-and-quotas.md).
|
|
85
87
|
|
|
86
88
|
## Diagnostic Steps
|
|
87
89
|
|