@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.
Files changed (139) hide show
  1. package/agent-assets/agent-profiles/background-task.md +8 -1
  2. package/agent-assets/agent-profiles/routine-fetch-window.md +11 -0
  3. package/agent-assets/agents/evening-review/agent.md +6 -2
  4. package/agent-assets/agents/lesson-maintenance/agent.md +56 -0
  5. package/agent-assets/agents/morning-routine/agent.md +7 -2
  6. package/agent-assets/agents/source-librarian/agent.md +51 -0
  7. package/agent-assets/docs/concepts/agent-day.md +15 -15
  8. package/agent-assets/docs/concepts/auth-health.md +10 -7
  9. package/agent-assets/docs/concepts/backends-and-tiers.md +21 -13
  10. package/agent-assets/docs/concepts/costs-and-quotas.md +10 -10
  11. package/agent-assets/docs/concepts/delegated-mode.md +18 -18
  12. package/agent-assets/docs/concepts/memory-model.md +25 -24
  13. package/agent-assets/docs/concepts/observations.md +27 -19
  14. package/agent-assets/docs/concepts/process-keys.md +25 -26
  15. package/agent-assets/docs/concepts/routines.md +18 -17
  16. package/agent-assets/docs/concepts/safety-and-execution.md +20 -17
  17. package/agent-assets/docs/concepts/safety-model.md +16 -15
  18. package/agent-assets/docs/concepts/skills.md +7 -4
  19. package/agent-assets/docs/features/integrations/browser-history.md +52 -47
  20. package/agent-assets/docs/features/integrations/calendar.md +7 -7
  21. package/agent-assets/docs/features/integrations/git.md +15 -13
  22. package/agent-assets/docs/features/integrations/github.md +12 -10
  23. package/agent-assets/docs/features/integrations/mail.md +47 -45
  24. package/agent-assets/docs/features/integrations/notion.md +15 -11
  25. package/agent-assets/docs/features/integrations/obsidian.md +27 -23
  26. package/agent-assets/docs/features/lifestyle/git.md +7 -8
  27. package/agent-assets/docs/features/lifestyle/reading.md +11 -8
  28. package/agent-assets/docs/features/lifestyle/receipts.md +21 -22
  29. package/agent-assets/docs/features/lifestyle/travel-bookings.md +9 -9
  30. package/agent-assets/docs/features/memory-files/agent-journal.md +12 -10
  31. package/agent-assets/docs/features/memory-files/agent-lessons.md +46 -21
  32. package/agent-assets/docs/features/memory-files/projects.md +13 -14
  33. package/agent-assets/docs/features/memory-files/roadmap.md +16 -15
  34. package/agent-assets/docs/features/memory-files/schedule.md +10 -10
  35. package/agent-assets/docs/features/memory-files/today.md +18 -18
  36. package/agent-assets/docs/features/memory-files/user-profile.md +17 -17
  37. package/agent-assets/docs/features/messaging/bang-commands.md +15 -15
  38. package/agent-assets/docs/features/messaging/dashboard-chat.md +7 -6
  39. package/agent-assets/docs/features/messaging/discord.md +7 -5
  40. package/agent-assets/docs/features/messaging/overview.md +14 -14
  41. package/agent-assets/docs/features/messaging/pairing-and-magic-phrase.md +12 -12
  42. package/agent-assets/docs/features/messaging/slack.md +9 -8
  43. package/agent-assets/docs/features/messaging/telegram.md +7 -7
  44. package/agent-assets/docs/features/messaging/whatsapp.md +6 -6
  45. package/agent-assets/docs/features/operations/activity-and-conversations.md +9 -9
  46. package/agent-assets/docs/features/operations/approvals.md +13 -12
  47. package/agent-assets/docs/features/operations/backend-routing.md +38 -37
  48. package/agent-assets/docs/features/operations/browser-tasks.md +63 -57
  49. package/agent-assets/docs/features/operations/cost-tracking.md +5 -5
  50. package/agent-assets/docs/features/operations/managed-chromium.md +23 -22
  51. package/agent-assets/docs/features/operations/notifications.md +15 -15
  52. package/agent-assets/docs/features/operations/quiet-hours.md +14 -15
  53. package/agent-assets/docs/features/operations/schedule-approaching.md +16 -14
  54. package/agent-assets/docs/features/routines/activity-scan.md +14 -11
  55. package/agent-assets/docs/features/routines/custom-routines.md +9 -7
  56. package/agent-assets/docs/features/routines/evening-review.md +6 -7
  57. package/agent-assets/docs/features/routines/morning-routine.md +22 -21
  58. package/agent-assets/docs/features/routines/weekly-review.md +57 -51
  59. package/agent-assets/docs/features/wiki/commands.md +27 -21
  60. package/agent-assets/docs/features/wiki/cost-and-approval.md +28 -23
  61. package/agent-assets/docs/features/wiki/dashboard.md +21 -23
  62. package/agent-assets/docs/features/wiki/overview.md +17 -25
  63. package/agent-assets/docs/features/wiki/search.md +15 -17
  64. package/agent-assets/docs/features/wiki/workspaces.md +55 -56
  65. package/agent-assets/docs/getting-started/01-what-is-this.md +3 -4
  66. package/agent-assets/docs/getting-started/02-first-steps.md +12 -13
  67. package/agent-assets/docs/getting-started/03-what-can-this-do.md +7 -7
  68. package/agent-assets/docs/getting-started/04-first-day.md +4 -5
  69. package/agent-assets/docs/glossary.md +17 -16
  70. package/agent-assets/docs/guides/add-a-custom-routine.md +17 -12
  71. package/agent-assets/docs/guides/backup-and-restore.md +19 -16
  72. package/agent-assets/docs/guides/budget-and-cost-for-wiki.md +55 -62
  73. package/agent-assets/docs/guides/build-your-wiki.md +11 -12
  74. package/agent-assets/docs/guides/change-which-model-handles-x.md +30 -28
  75. package/agent-assets/docs/guides/connect-a-new-mail-account.md +30 -29
  76. package/agent-assets/docs/guides/explore-with-trace-and-connect.md +30 -32
  77. package/agent-assets/docs/guides/import-knowledge-file.md +9 -10
  78. package/agent-assets/docs/guides/install-and-run.md +9 -10
  79. package/agent-assets/docs/guides/maintain-wiki-health.md +10 -10
  80. package/agent-assets/docs/guides/migrate-machines.md +16 -14
  81. package/agent-assets/docs/guides/multiple-wikis-for-multiple-domains.md +11 -12
  82. package/agent-assets/docs/guides/pause-the-agent.md +25 -25
  83. package/agent-assets/docs/guides/reinstall-cleanly.md +13 -12
  84. package/agent-assets/docs/guides/setup-wizard.md +9 -11
  85. package/agent-assets/docs/guides/switch-default-backend.md +9 -9
  86. package/agent-assets/docs/guides/use-an-existing-obsidian-vault.md +9 -11
  87. package/agent-assets/docs/pages/activity.md +76 -0
  88. package/agent-assets/docs/pages/agents.md +78 -0
  89. package/agent-assets/docs/pages/analytics.md +70 -0
  90. package/agent-assets/docs/pages/browser.md +73 -0
  91. package/agent-assets/docs/pages/chat.md +67 -0
  92. package/agent-assets/docs/pages/connections.md +78 -0
  93. package/agent-assets/docs/pages/git.md +73 -0
  94. package/agent-assets/docs/pages/knowledge.md +75 -0
  95. package/agent-assets/docs/pages/overview.md +90 -0
  96. package/agent-assets/docs/pages/reading.md +65 -0
  97. package/agent-assets/docs/pages/settings.md +77 -0
  98. package/agent-assets/docs/pages/tasks.md +74 -0
  99. package/agent-assets/docs/pages/wiki.md +73 -0
  100. package/agent-assets/docs/reference/api.md +18 -17
  101. package/agent-assets/docs/reference/cli-commands.md +13 -10
  102. package/agent-assets/docs/reference/config.md +40 -35
  103. package/agent-assets/docs/reference/disallowed-tools.md +18 -17
  104. package/agent-assets/docs/reference/keyboard-shortcuts.md +6 -8
  105. package/agent-assets/docs/reference/knowledge-layout.md +10 -10
  106. package/agent-assets/docs/reference/process-keys.md +20 -22
  107. package/agent-assets/docs/reference/skills.md +18 -16
  108. package/agent-assets/docs/troubleshooting/auth-failed.md +13 -11
  109. package/agent-assets/docs/troubleshooting/dashboard-shows-degraded.md +10 -10
  110. package/agent-assets/docs/troubleshooting/fallback-keeps-firing.md +26 -24
  111. package/agent-assets/docs/troubleshooting/messaging-not-pairing.md +8 -9
  112. package/agent-assets/docs/troubleshooting/morning-routine-didnt-run.md +19 -18
  113. package/agent-assets/docs/troubleshooting/observation-not-detected.md +14 -15
  114. package/agent-assets/docs/troubleshooting/quota-exhausted.md +28 -26
  115. package/agent-assets/docs/troubleshooting/wiki-ingest-full-blocked.md +35 -34
  116. package/agent-assets/docs/troubleshooting/wiki-write-failed.md +21 -24
  117. package/agent-assets/skills/agent-create/SKILL.md +39 -5
  118. package/agent-assets/skills/background-task/SKILL.md +9 -4
  119. package/agent-assets/skills/board/SKILL.md +8 -9
  120. package/agent-assets/skills/browser-task/SKILL.md +2 -0
  121. package/agent-assets/skills/context/seeds/file-responsibilities.seed.json +2 -1
  122. package/agent-assets/skills/schedule/SKILL.md +6 -5
  123. package/agent-assets/skills/sources/SKILL.md +68 -0
  124. package/agent-assets/skills/sources/curation.json +21 -0
  125. package/agent-assets/skills/sources/seeds/filing-rules.seed.json +25 -0
  126. package/agent-assets/skills/sources/seeds/source-collections.seed.json +20 -0
  127. package/agent-assets/skills/task/SKILL.md +5 -2
  128. package/agent-assets/task-flows/background_task.md +29 -3
  129. package/agent-assets/task-flows/message.received.dm.md +1 -1
  130. package/agent-assets/task-flows/routine.activity_scan.md +17 -2
  131. package/agent-assets/task-flows/routine.evening_review.md +72 -11
  132. package/agent-assets/task-flows/routine.fetch_window.md +21 -0
  133. package/agent-assets/task-flows/routine.monthly_review.md +3 -1
  134. package/agent-assets/task-flows/routine.morning_routine_today.md +26 -7
  135. package/agent-assets/task-flows/routine.source_maintenance.md +50 -0
  136. package/agent-assets/task-flows/scheduled.dm.md +8 -3
  137. package/agent-assets/templates/_manifest.json +1 -0
  138. package/agent-assets/templates/knowledge/sources/_index.md +19 -0
  139. 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-06-07
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** identifies the kind of work being dispatched (an owner DM,
65
- the morning routine, an activity scan, …). The dispatcher passes a ProcessKey
66
- to the `BackendRouter`, which resolves it to a `{ main, fallback }` backend
67
- plus an execution tier the dispatcher never picks a model directly.
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
- "Configurable" = the operator can override the backend / tier on
132
- `/settings/models` (i.e. the key appears in `CONFIGURABLE_PROCESS_KEYS`).
133
- "no" means the binding is fixed and uses the corresponding tier's
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
- The set `REACTIVE_PROCESS_KEYS` (owner currently in the loop) is:
142
- `message.dm`, `message.mention`, `dashboard.chat`, `dashboard.docs_qa`,
143
- `setup`, `knowledge.import`. Every other key is autonomous and runs
144
- under the tighter Approve-tier MCP tool-stripping that B-003 Phase 3
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
- …); the caps above bound a prompt-injected caller regardless of the
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-06-07
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
- Aitne ships a fixed set of built-in skills the agent loads per session. Most
60
- are always available; a few are **conditional** loaded only when a gating
61
- flag is set (`gmail-lifestyle`, `managed-tasks`) or only for a specific event
62
- type (`browser-task` / `background-task` / `background-task-reply`, on owner
63
- DMs). The table below is the canonical roster.
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
- The source of truth is each skill's `SKILL.md` under
98
- `agent-assets/skills/<slug>/`. The `description` field in that file's
99
- frontmatter is what the dispatcher uses for runtime skill selection.
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
- A subset of these skills' sections (knowledge layout, routing tables, search
104
- recipes, etc.) is refined at runtime through JSON **overlays** maintained by
105
- the skill-curation loop. The seed files in `agent-assets/skills/` are never
106
- rewritten — overlays are applied at session-init by the `SkillsCompiler` and
107
- live under `<dataDir>/skill-curation-overlays/<slug>/<section-id>.json`.
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-06-07
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** the most common cause
60
- on a healthy install. Re-paste the key on `/settings/models`.
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 (the daemon was running on the CLI's local login —
63
- `claude auth login`, `codex login`, `gemini` — and that session
64
- timed out). The recommended fix is to register an API key.
65
- 3. **Account-level scope change** at the provider (key disabled,
66
- project deleted, billing suspended). For cloud-provider auth
67
- (Bedrock / Vertex / Foundry for Claude, Vertex AI for Gemini),
68
- IAM-role / service-account changes show up the same way.
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-06-07
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 context file fails: while degraded the
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`) so the agent never reads or writes a
67
- stale fallback location.
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
- Degraded mode is set by the daemon's vault-health probe, which re-runs every
72
- 30 seconds. It is **not** about backend auth, message delivery, or a stuck
73
- write lock it is specifically about the daemon being unable to safely write
74
- your memory files.
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 doesn't carry the expected vault markers (it was never seeded / restructured). |
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-05-28
55
+ updated: 2026-07-01
57
56
  ---
58
57
 
59
58
  # Fallback Keeps Firing
60
59
 
61
- The backend router resolves every run to a `{ main, fallback }` pair. When
62
- the main backend can't take the work, the router transparently switches to
63
- the fallback so the run still completes. If that happens once, it's normal.
64
- If it happens run after run, the main backend has a persistent problem.
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. **Main backend's auth has expired.** The most common cause — the CLI
74
- credentials (or API key) for the main backend are no longer valid, so
75
- every run raises a `BackendDecisiveFailure("auth")` and the router falls
76
- over.
77
- 2. **Main backend's usage window is exhausted.** Claude and Codex meter
78
- usage per rolling window; Gemini also hits its per-day free-tier cap.
79
- When the limit is reached the backend raises a `BackendQuotaError` and
80
- the router falls over until the window resets.
81
- 3. **A repeating `BackendDecisiveFailure` from a config issue** — e.g. the
82
- main backend's CLI isn't installed, a pinned model id no longer
83
- resolves, or execution-mode settings reject the run.
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; one of them is firing on every attempt.
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/spend on `/analytics` (Cost tab).** Look at the main
94
- backend's recent spend. A flat ceiling or a depleted window points to
95
- cause 2. If you set `autonomousDailyCostCapUsd`, autonomous runs also
96
- stop once the daily cap is hit (reactive DMs are never blocked by it).
97
- 3. **Read the failure detail in `/activity`.** Open the offending row to
98
- see the exact error. From the CLI you can do the same:
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-06-07
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 the typed phrase, so the fix depends on the
57
- platform:
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
- matcher requires the four words to be the **only** content of the
74
- message. Sending "my phrase is apple-banana-cherry-date" is rejected
75
- by design, and the agent replies asking you to send the phrase on its
76
- own. Matching otherwise ignores case, punctuation, and emoji.
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
- - dispatch
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-06-10
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 cron fire is silently lost —
78
- cron never replays missed ticks. The daemon detects the wall-clock
79
- gap when the machine wakes and queues the morning routine itself,
80
- along with any missed evening/weekly reviews.
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 with an
87
- exponential back-off (5, then 10, then 15 minutes). After 3 failed
88
- attempts it sends you a DM asking you to regenerate manually.
89
- - **Hung-run recovery.** If a run starts and then wedges (typically a
90
- sleep mid-run that kills the backend connection), the self-heal
91
- check re-queues it once the run has been silent past the stall
92
- threshold (~2 hours by default) — at most twice per day, after which
93
- it alerts instead of re-running. Either way you get an owner DM so
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 `dayBoundaryHour` (default 04:00),
115
- the routine still "belongs to" yesterday see
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-06-10
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 per
68
- change. They poll on a cadence and call `recordObservation(...)`, which
69
- appends a row to the `observations` table. The activity scan later reads those
70
- rows in a single batch. So a "missing" observation is usually a row that was
71
- never written, or one that was written but filtered.
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 `actor='user'`.
74
- Changes the agent itself wrote are tagged `actor='agent'` and skipped by the
75
- activity scan this is the deliberate anti-loop filter that stops the agent
76
- from observing its own output.
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 when at least the activity-scan agent's **min observations**
89
- threshold (default `1`; legacy key `activityScanMinObservations`) of
90
- pending observations exists. A single low-signal change can be held back.
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-06-07
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
- - Fallback ran the next routine instead of main.
55
- - Or: an autonomous run was skipped with reason
56
- `autonomous_cost_cap_exceeded` this is a *separate* safety net
57
- (`autonomousDailyCostCapUsd`, default off) that skips only autonomous
58
- work, never reactive DMs. (`autonomousMonthlyCostCapUsd`, also default
59
- off, is notifications-only it never skips a run, just alerts.)
60
- It is not a provider quota error; raise the cap on `/settings/models`
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) the supported path. Check the provider console for the
67
- per-minute / per-day caps tied to your billing.
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 (a conservative fraction
70
- of Google's free-tier daily limit on `GEMINI_API_KEY` /
71
- `GOOGLE_API_KEY` without billing). This ceiling is Gemini-only and
72
- model-agnostic it is not tied to any one model id. The error reads
73
- "Gemini daily-request ceiling reached" and resets at the next
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 surfaces the same way as a direct-API quota.
78
- 4. **Subscription fallback exhausted** — no API key registered, so
79
- the backend is running on the CLI's local subscription login.
80
- The underlying provider's subscription limits then apply (e.g.
81
- Claude's rolling 5-hour Opus window on a Max plan login). The
82
- recommended fix is to register an API key on `/settings/models`;
83
- the fallback is not provider-supported for automated agent use.
84
- See [Costs and Quotas](../concepts/costs-and-quotas.md).
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