@aitne-sh/aitne 0.1.9 → 0.1.11

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 (218) hide show
  1. package/README.md +41 -11
  2. package/agent-assets/agent-profiles/background-task.md +53 -0
  3. package/agent-assets/agent-profiles/conversational.md +1 -0
  4. package/agent-assets/agent-profiles/routine-fetch-window.md +14 -75
  5. package/agent-assets/agent-profiles/routine.md +1 -1
  6. package/agent-assets/agents/{hourly-check → activity-scan}/agent.md +22 -17
  7. package/agent-assets/agents/monthly-review/agent.md +6 -5
  8. package/agent-assets/docs/concepts/agent-day.md +6 -7
  9. package/agent-assets/docs/concepts/auth-health.md +23 -20
  10. package/agent-assets/docs/concepts/backends-and-tiers.md +13 -9
  11. package/agent-assets/docs/concepts/costs-and-quotas.md +14 -12
  12. package/agent-assets/docs/concepts/delegated-mode.md +18 -17
  13. package/agent-assets/docs/concepts/memory-model.md +16 -9
  14. package/agent-assets/docs/concepts/observations.md +24 -20
  15. package/agent-assets/docs/concepts/process-keys.md +10 -9
  16. package/agent-assets/docs/concepts/routines.md +34 -31
  17. package/agent-assets/docs/concepts/safety-and-execution.md +11 -7
  18. package/agent-assets/docs/concepts/safety-model.md +39 -25
  19. package/agent-assets/docs/concepts/skills.md +12 -10
  20. package/agent-assets/docs/features/integrations/browser-history.md +23 -18
  21. package/agent-assets/docs/features/integrations/calendar.md +28 -17
  22. package/agent-assets/docs/features/integrations/git.md +13 -11
  23. package/agent-assets/docs/features/integrations/github.md +22 -14
  24. package/agent-assets/docs/features/integrations/mail.md +25 -22
  25. package/agent-assets/docs/features/integrations/notion.md +35 -11
  26. package/agent-assets/docs/features/integrations/obsidian.md +8 -8
  27. package/agent-assets/docs/features/lifestyle/git.md +27 -23
  28. package/agent-assets/docs/features/lifestyle/reading.md +20 -11
  29. package/agent-assets/docs/features/lifestyle/receipts.md +11 -10
  30. package/agent-assets/docs/features/lifestyle/travel-bookings.md +4 -3
  31. package/agent-assets/docs/features/memory-files/agent-journal.md +53 -26
  32. package/agent-assets/docs/features/memory-files/agent-lessons.md +178 -0
  33. package/agent-assets/docs/features/memory-files/projects.md +11 -8
  34. package/agent-assets/docs/features/memory-files/roadmap.md +17 -14
  35. package/agent-assets/docs/features/memory-files/schedule.md +6 -3
  36. package/agent-assets/docs/features/memory-files/today.md +10 -7
  37. package/agent-assets/docs/features/memory-files/user-profile.md +14 -9
  38. package/agent-assets/docs/features/messaging/bang-commands.md +21 -6
  39. package/agent-assets/docs/features/messaging/overview.md +17 -14
  40. package/agent-assets/docs/features/messaging/telegram.md +10 -9
  41. package/agent-assets/docs/features/operations/activity-and-conversations.md +6 -5
  42. package/agent-assets/docs/features/operations/approvals.md +6 -5
  43. package/agent-assets/docs/features/operations/browser-tasks.md +184 -0
  44. package/agent-assets/docs/features/operations/cost-tracking.md +11 -1
  45. package/agent-assets/docs/features/operations/managed-chromium.md +4 -2
  46. package/agent-assets/docs/features/operations/notifications.md +11 -1
  47. package/agent-assets/docs/features/operations/quiet-hours.md +41 -11
  48. package/agent-assets/docs/features/operations/schedule-approaching.md +2 -2
  49. package/agent-assets/docs/features/routines/activity-scan.md +220 -0
  50. package/agent-assets/docs/features/routines/custom-routines.md +82 -134
  51. package/agent-assets/docs/features/routines/evening-review.md +23 -13
  52. package/agent-assets/docs/features/routines/morning-routine.md +7 -5
  53. package/agent-assets/docs/features/routines/weekly-review.md +24 -3
  54. package/agent-assets/docs/features/wiki/commands.md +4 -4
  55. package/agent-assets/docs/features/wiki/cost-and-approval.md +4 -3
  56. package/agent-assets/docs/features/wiki/dashboard.md +7 -6
  57. package/agent-assets/docs/features/wiki/overview.md +3 -3
  58. package/agent-assets/docs/features/wiki/search.md +5 -5
  59. package/agent-assets/docs/features/wiki/workspaces.md +2 -2
  60. package/agent-assets/docs/getting-started/01-what-is-this.md +3 -3
  61. package/agent-assets/docs/getting-started/02-first-steps.md +5 -3
  62. package/agent-assets/docs/getting-started/04-first-day.md +27 -30
  63. package/agent-assets/docs/glossary.md +8 -8
  64. package/agent-assets/docs/guides/add-a-custom-routine.md +122 -68
  65. package/agent-assets/docs/guides/budget-and-cost-for-wiki.md +2 -2
  66. package/agent-assets/docs/guides/connect-a-new-mail-account.md +4 -2
  67. package/agent-assets/docs/guides/explore-with-trace-and-connect.md +5 -4
  68. package/agent-assets/docs/guides/install-and-run.md +2 -2
  69. package/agent-assets/docs/guides/maintain-wiki-health.md +2 -2
  70. package/agent-assets/docs/guides/pause-the-agent.md +27 -21
  71. package/agent-assets/docs/guides/reinstall-cleanly.md +2 -0
  72. package/agent-assets/docs/guides/setup-wizard.md +12 -6
  73. package/agent-assets/docs/guides/use-an-existing-obsidian-vault.md +6 -6
  74. package/agent-assets/docs/reference/api.md +26 -5
  75. package/agent-assets/docs/reference/cli-commands.md +3 -3
  76. package/agent-assets/docs/reference/config.md +51 -24
  77. package/agent-assets/docs/reference/disallowed-tools.md +6 -4
  78. package/agent-assets/docs/reference/keyboard-shortcuts.md +2 -2
  79. package/agent-assets/docs/reference/knowledge-layout.md +25 -12
  80. package/agent-assets/docs/reference/process-keys.md +9 -9
  81. package/agent-assets/docs/reference/skills.md +10 -6
  82. package/agent-assets/docs/troubleshooting/auth-failed.md +9 -8
  83. package/agent-assets/docs/troubleshooting/dashboard-shows-degraded.md +16 -9
  84. package/agent-assets/docs/troubleshooting/messaging-not-pairing.md +2 -2
  85. package/agent-assets/docs/troubleshooting/morning-routine-didnt-run.md +32 -16
  86. package/agent-assets/docs/troubleshooting/observation-not-detected.md +26 -24
  87. package/agent-assets/docs/troubleshooting/quota-exhausted.md +7 -6
  88. package/agent-assets/docs/troubleshooting/wiki-write-failed.md +3 -3
  89. package/agent-assets/skills/agent-actions/SKILL.md +23 -39
  90. package/agent-assets/skills/agent-create/SKILL.md +26 -6
  91. package/agent-assets/skills/attach/SKILL.md +8 -27
  92. package/agent-assets/skills/background-task/SKILL.md +184 -0
  93. package/agent-assets/skills/background-task-reply/SKILL.md +100 -0
  94. package/agent-assets/skills/browser-history/SKILL.md +60 -29
  95. package/agent-assets/skills/browser-history-respond/SKILL.md +6 -1
  96. package/agent-assets/skills/browser-task/SKILL.md +33 -31
  97. package/agent-assets/skills/context/SKILL.md +26 -34
  98. package/agent-assets/skills/context/curation.json +12 -12
  99. package/agent-assets/skills/context/references/api.md +22 -20
  100. package/agent-assets/skills/context/references/required-frontmatter.md +10 -9
  101. package/agent-assets/skills/context/references/snapshot-files.md +16 -15
  102. package/agent-assets/skills/context/seeds/file-responsibilities.seed.json +5 -5
  103. package/agent-assets/skills/context/seeds/frontmatter-requirements.seed.json +3 -3
  104. package/agent-assets/skills/docs-search/SKILL.md +19 -31
  105. package/agent-assets/skills/external-services/SKILL.delegated.claude.md +8 -95
  106. package/agent-assets/skills/external-services/SKILL.delegated.codex.md +8 -94
  107. package/agent-assets/skills/external-services/SKILL.delegated.gemini.md +8 -94
  108. package/agent-assets/skills/external-services/SKILL.native.claude.md +15 -9
  109. package/agent-assets/skills/external-services/SKILL.native.codex.md +11 -5
  110. package/agent-assets/skills/external-services/SKILL.native.gemini.md +11 -5
  111. package/agent-assets/skills/external-services/references/exec-errors.md +32 -0
  112. package/agent-assets/skills/external-services/references/skills-crud.md +5 -5
  113. package/agent-assets/skills/gmail-lifestyle/SKILL.md +3 -2
  114. package/agent-assets/skills/gmail-lifestyle/references/receipts-api.md +4 -0
  115. package/agent-assets/skills/gmail-lifestyle/references/travel-bookings-api.md +9 -0
  116. package/agent-assets/skills/mail/SKILL.delegated.claude.md +13 -25
  117. package/agent-assets/skills/mail/SKILL.delegated.codex.md +3 -2
  118. package/agent-assets/skills/mail/SKILL.delegated.gemini.md +3 -2
  119. package/agent-assets/skills/mail/SKILL.md +12 -20
  120. package/agent-assets/skills/mail/SKILL.native.claude.md +24 -16
  121. package/agent-assets/skills/mail/SKILL.native.codex.md +16 -9
  122. package/agent-assets/skills/mail/SKILL.native.gemini.md +12 -6
  123. package/agent-assets/skills/mail/references/api.md +6 -1
  124. package/agent-assets/skills/mail/references/examples.md +2 -1
  125. package/agent-assets/skills/managed-tasks/SKILL.md +44 -77
  126. package/agent-assets/skills/managed-tasks/references/errors.md +25 -14
  127. package/agent-assets/skills/managed-tasks/references/output-path.md +33 -17
  128. package/agent-assets/skills/managed-tasks/references/recurrence-rule.md +26 -16
  129. package/agent-assets/skills/management-policy/SKILL.md +36 -28
  130. package/agent-assets/skills/management-policy/curation.json +1 -1
  131. package/agent-assets/skills/management-policy/references/policy-workflow.md +30 -18
  132. package/agent-assets/skills/notify/SKILL.md +16 -13
  133. package/agent-assets/skills/notify/references/priority.md +42 -26
  134. package/agent-assets/skills/notion/SKILL.delegated.claude.md +1 -1
  135. package/agent-assets/skills/notion/SKILL.delegated.codex.md +1 -1
  136. package/agent-assets/skills/notion/SKILL.delegated.gemini.md +1 -1
  137. package/agent-assets/skills/notion/SKILL.md +18 -18
  138. package/agent-assets/skills/notion/SKILL.native.claude.md +4 -4
  139. package/agent-assets/skills/notion/SKILL.native.codex.md +3 -3
  140. package/agent-assets/skills/notion/SKILL.native.gemini.md +3 -3
  141. package/agent-assets/skills/observations/SKILL.md +9 -24
  142. package/agent-assets/skills/observations/references/fetch-fallback.md +22 -0
  143. package/agent-assets/skills/project-doc/SKILL.md +9 -6
  144. package/agent-assets/skills/project-doc/curation.json +3 -3
  145. package/agent-assets/skills/project-doc/seeds/project-shape.seed.json +2 -2
  146. package/agent-assets/skills/project-doc/seeds/slug-grammar.seed.json +3 -3
  147. package/agent-assets/skills/reading/SKILL.md +8 -42
  148. package/agent-assets/skills/reading/references/reading-taste.md +5 -5
  149. package/agent-assets/skills/roadmap/SKILL.md +3 -19
  150. package/agent-assets/skills/roadmap/references/api.md +23 -8
  151. package/agent-assets/skills/roadmap/references/horizon-tags.md +11 -0
  152. package/agent-assets/skills/roadmap/references/migration.md +8 -6
  153. package/agent-assets/skills/roadmap/references/retention.md +18 -0
  154. package/agent-assets/skills/schedule/SKILL.md +20 -28
  155. package/agent-assets/skills/schedule/references/importance.md +23 -0
  156. package/agent-assets/skills/schedule/references/recurrence-rule.md +26 -16
  157. package/agent-assets/skills/scheduled-managed-task/SKILL.md +46 -46
  158. package/agent-assets/skills/today/SKILL.md +38 -81
  159. package/agent-assets/skills/today/references/agent-plan-lifecycle.md +9 -4
  160. package/agent-assets/skills/today/references/agent-plan-revision.md +28 -0
  161. package/agent-assets/skills/today/references/today-skeleton.md +66 -0
  162. package/agent-assets/skills/today/seeds/agent-notes-flavors.seed.json +1 -1
  163. package/agent-assets/skills/today/seeds/section-shape.seed.json +6 -6
  164. package/agent-assets/skills/user-interview/SKILL.md +15 -90
  165. package/agent-assets/skills/user-interview/references/op-briefing.md +1 -1
  166. package/agent-assets/skills/user-interview/references/op-dm-handler.md +88 -0
  167. package/agent-assets/skills/user-interview/references/op-morning.md +2 -2
  168. package/agent-assets/skills/user-interview/references/sweep-and-fallback.md +1 -1
  169. package/agent-assets/skills/user-profile/SKILL.md +16 -26
  170. package/agent-assets/skills/user-profile/curation.json +3 -3
  171. package/agent-assets/skills/user-profile/references/character-preferences.md +3 -3
  172. package/agent-assets/skills/wiki/wiki-ask/SKILL.md +1 -1
  173. package/agent-assets/skills/wiki/wiki-compile/SKILL.md +5 -4
  174. package/agent-assets/skills/wiki/wiki-connect/SKILL.md +32 -5
  175. package/agent-assets/skills/wiki/wiki-ingest/SKILL.md +6 -50
  176. package/agent-assets/skills/wiki/wiki-ingest/references/curl-errors.md +58 -0
  177. package/agent-assets/skills/wiki/wiki-lint/SKILL.md +20 -14
  178. package/agent-assets/skills/wiki/wiki-trace/SKILL.md +10 -5
  179. package/agent-assets/skills/wiki/wiki-vault-rules/SKILL.md +2 -0
  180. package/agent-assets/system-prompts/routine-research-cluster-update.md +71 -0
  181. package/agent-assets/task-flows/_partials/feedback-capture.md +30 -0
  182. package/agent-assets/task-flows/_partials/notion-acquire.notion.md +47 -21
  183. package/agent-assets/task-flows/background_task.md +81 -0
  184. package/agent-assets/task-flows/git.local_ahead.stale.md +1 -1
  185. package/agent-assets/task-flows/git.push.detected.md +1 -1
  186. package/agent-assets/task-flows/git.tag.created.md +1 -1
  187. package/agent-assets/task-flows/github.assigned.md +1 -1
  188. package/agent-assets/task-flows/github.pull_request.review_requested.md +2 -2
  189. package/agent-assets/task-flows/github.security_alert.md +1 -1
  190. package/agent-assets/task-flows/message.received.dm.md +11 -3
  191. package/agent-assets/task-flows/message.received.dm_first.md +8 -2
  192. package/agent-assets/task-flows/{routine.hourly_check.md → routine.activity_scan.md} +31 -23
  193. package/agent-assets/task-flows/{routine.hourly_check.triage.md → routine.activity_scan.triage.md} +3 -3
  194. package/agent-assets/task-flows/routine.evening_review.md +80 -0
  195. package/agent-assets/task-flows/routine.monthly_review.md +81 -8
  196. package/agent-assets/task-flows/routine.research_cluster_update.md +33 -19
  197. package/agent-assets/task-flows/routine.roadmap_refresh.md +2 -2
  198. package/agent-assets/task-flows/routine.today_refresh.md +1 -1
  199. package/agent-assets/task-flows/routine.weekly_review.md +124 -4
  200. package/agent-assets/task-flows/schedule.approaching.md +2 -2
  201. package/agent-assets/task-flows/scheduled.dm.md +77 -1
  202. package/agent-assets/task-flows/scheduled.task.md +7 -1
  203. package/agent-assets/task-flows/wiki.trace.md +1 -1
  204. package/agent-assets/templates/_manifest.json +2 -2
  205. package/agent-assets/templates/knowledge/dossiers/_index.md +1 -1
  206. package/agent-assets/templates/knowledge/dossiers/{hourly.md → activity-scan.md} +1 -1
  207. package/agent-assets/templates/policies/journal-format.md +1 -1
  208. package/agent-assets/templates/policies/mcp.md +1 -1
  209. package/agent-assets/templates/policies/routines/_index.md +1 -1
  210. package/agent-assets/templates/policies/routines/{hourly.md → activity-scan.md} +5 -5
  211. package/bin/aitne.mjs +45 -11
  212. package/package.json +6 -5
  213. package/scripts/commands/doctor.mjs +11 -2
  214. package/scripts/lib/process-identity.d.mts +46 -0
  215. package/scripts/lib/process-identity.mjs +193 -0
  216. package/scripts/lib/read-api-token.mjs +1 -1
  217. package/scripts/start.mjs +14 -4
  218. package/agent-assets/docs/features/routines/hourly-check.md +0 -205
@@ -36,14 +36,14 @@ keywords:
36
36
  - EDITABLE_RUNTIME_KEY_TUPLE
37
37
  - RESTART_REQUIRED_KEY_TUPLE
38
38
  - dayBoundaryHour
39
- - hourlyCheckIntervalMinutes
39
+ - activityScanIntervalMinutes
40
40
  - quietHoursStart
41
41
  - quietHoursEnd
42
42
  - executeTimeoutMinutes
43
43
  - autonomousDailyCostCapUsd
44
44
  - allowedToolsOverride
45
45
  - voiceTranscriptionEnabled
46
- - hourlyCheckPrePassFreshnessMinutes
46
+ - activityScanPrePassFreshnessMinutes
47
47
  - vaultMode
48
48
  - PA_DATA_DIR
49
49
  - PA_API_PORT
@@ -52,9 +52,9 @@ config_keys:
52
52
  - timezone
53
53
  - primaryLanguage
54
54
  - vaultMode
55
- - hourlyCheckEnabled
56
- - hourlyCheckIntervalMinutes
57
- - hourlyCheckPrePassFreshnessMinutes
55
+ - activityScanEnabled
56
+ - activityScanIntervalMinutes
57
+ - activityScanPrePassFreshnessMinutes
58
58
  - quietHoursStart
59
59
  - quietHoursEnd
60
60
  - maxNotificationsPerHour
@@ -75,10 +75,10 @@ api_endpoints:
75
75
  - PATCH /api/config
76
76
  - POST /api/voice/install
77
77
  ui_anchors:
78
- - /settings/advanced
78
+ - /settings/infrastructure
79
79
  - /settings/models
80
80
  created: 2026-04-25
81
- updated: 2026-05-28
81
+ updated: 2026-06-08
82
82
  related:
83
83
  - reference/api
84
84
  - reference/cli-commands
@@ -93,7 +93,7 @@ The full `AgentConfig` schema lives in
93
93
  `packages/shared/src/editable-config-keys.ts` govern what is editable
94
94
  and when:
95
95
 
96
- - **`EDITABLE_RUNTIME_KEY_TUPLE`** — the ~80 keys mutable at runtime
96
+ - **`EDITABLE_RUNTIME_KEY_TUPLE`** — the ~130 keys mutable at runtime
97
97
  via `PATCH /api/config`. Both the daemon and the dashboard import
98
98
  from this tuple so the accepted-key set is enforced at compile time
99
99
  in both packages.
@@ -117,7 +117,7 @@ Anything not in those tuples must be set via env or restart.
117
117
  ## Selected Keys
118
118
 
119
119
  A representative slice of `EDITABLE_RUNTIME_KEY_TUPLE` — the full list
120
- of ~80 keys is in `editable-config-keys.ts`. Names below are exact and
120
+ of ~130 keys is in `editable-config-keys.ts`. Names below are exact and
121
121
  case-sensitive.
122
122
 
123
123
  ### Identity and timezone
@@ -125,25 +125,32 @@ case-sensitive.
125
125
  | Key | Type | Notes |
126
126
  |---|---|---|
127
127
  | `agentDisplayName` | string | What the agent calls itself in DMs. |
128
- | `character` | string | Persona key (one of the entries in `agent-assets/agent-profiles/`). |
128
+ | `character` | string | Free-text user-defined communication style / persona (max 1000 chars). When non-empty, rendered as a `## Character (user-defined)` block into each backend's instruction file. The agent profile itself is selected by ProcessKey, not by this key. |
129
129
  | `timezone` | IANA tz | Empty falls back to the system tz. |
130
130
  | `dayBoundaryHour` | 0–9 | Default `4`. Controls the agent-day rollover (must be an early-morning hour). |
131
131
  | `primaryLanguage` | BCP-47 | Output language for DMs, journal, and Obsidian writes. Templates stay English-headered. |
132
132
  | `vaultMode` | enum | Where context lives — `plain` (default; `<dataDir>/context`) or `obsidian` (an external Obsidian vault). |
133
133
 
134
- ### Hourly check and gate
134
+ ### Activity scan and gate
135
+
136
+ The first five keys are **deprecated fallbacks**: the activity-scan
137
+ cadence, active window, min-observations threshold, and enable switch
138
+ moved onto the activity-scan agent (`/agents/activity-scan`, Definition
139
+ tab → Cadence card; Enable/Disable). The keys are still accepted by
140
+ `PATCH /api/config` but no longer surfaced in the dashboard; values
141
+ resolve agent override → legacy config key → built-in default.
135
142
 
136
143
  | Key | Type | Notes |
137
144
  |---|---|---|
138
- | `hourlyCheckEnabled` | boolean | Default `true`. |
139
- | `hourlyCheckIntervalMinutes` | number | Default `60`. |
140
- | `hourlyCheckActiveStartHour` | 0–23 | Default `4`. |
141
- | `hourlyCheckActiveEndHour` | 1–24 | End-exclusive; `24` ≡ midnight. |
142
- | `hourlyCheckMinObservations` | number | Default `1`. |
143
- | `hourlyCheckStage2Enabled` | boolean | cost-reduction-structural §B Stage 2 toggle. |
144
- | `hourlyCheckHeartbeatHours` | number | Quiet-day heartbeat cadence. |
145
- | `hourlyCheckLowSignalPendingCeiling` | number | Low-signal ceiling before forcing dispatch. |
146
- | `hourlyCheckPrePassFreshnessMinutes` | number | Layer-1 freshness window — `harvestForGate` skips a per-integration fetch if `runtime_state.pre_pass_last_run:<key>` is fresher. |
145
+ | `activityScanEnabled` | boolean | **Deprecated fallback** — the agent's enable switch on `/agents/activity-scan` is the source of truth. Default `true`. |
146
+ | `activityScanIntervalMinutes` | number | **Deprecated fallback** — edit on `/agents/activity-scan`. Default `60`. |
147
+ | `activityScanActiveStartHour` | 0–23 | **Deprecated fallback** — edit on `/agents/activity-scan`. Default `4`. |
148
+ | `activityScanActiveEndHour` | 1–24 | **Deprecated fallback** — edit on `/agents/activity-scan`. End-exclusive; `24` ≡ midnight. |
149
+ | `activityScanMinObservations` | number | **Deprecated fallback** — edit on `/agents/activity-scan`. Default `1`. |
150
+ | `activityScanStage2Enabled` | boolean | cost-reduction-structural §B Stage 2 toggle. |
151
+ | `activityScanHeartbeatHours` | number | Quiet-day heartbeat cadence. |
152
+ | `activityScanLowSignalPendingCeiling` | number | Low-signal ceiling before forcing dispatch. |
153
+ | `activityScanPrePassFreshnessMinutes` | 0–480 | Default `30`. Layer-1 freshness window — `harvestForGate` skips a per-integration fetch if `runtime_state.pre_pass_last_run:<key>` is fresher. Cap widened 240 → 480 for the self-tuning R1 ladder (120/240/360/480). |
147
154
 
148
155
  ### Notifications and quiet hours
149
156
 
@@ -237,6 +244,24 @@ case-sensitive.
237
244
  | `advisorEnabled` | boolean | SDK advisor toggle. |
238
245
  | `advisorModel` | string / null | Model id; default `null`. Validated against `ADVISOR_ALLOWED_MODELS`, which the SDK pins to `claude-sonnet-4-6` and `claude-opus-4-6` only. Newer Opus generations (`claude-opus-4-7`, `claude-opus-4-8`) are silently skipped by the SDK advisor path — see `docs/advisor.md`. |
239
246
 
247
+ ### Feedback learning
248
+
249
+ The feedback learning loop (capture → nightly consolidation → injection of
250
+ durable lessons). All six knobs are runtime-editable via `PATCH /api/config`,
251
+ surfaced by `GET /config`, and tunable from the dashboard `/settings/lessons`
252
+ page. Defaults and ranges below are enforced in
253
+ `packages/daemon/src/settings/runtime-settings.ts`.
254
+
255
+ | Key | Type | Notes |
256
+ |---|---|---|
257
+ | `feedbackLearningEnabled` | boolean | Default `true` (env `FEEDBACK_LEARNING_ENABLED`). Master kill-switch for the whole loop — capture, consolidation, and injection. |
258
+ | `selfTuningEnabled` | boolean | Default `false` (env `SELF_TUNING_ENABLED`). Actuation gate for the self-tuning review cycle. While `false`, the loop runs in shadow mode: the weekly review still receives `<tuning_recommendations>` and records verdicts via `POST /api/tuning/verdicts`, but no config change is ever applied. With the flag on, apply verdicts for config knobs actuate through the bounded config chokepoint — one owner DM per applied change, `!revert tuning` undoes the latest, and a daily monitor auto-reverts any change whose 7-day verify metrics regressed. Flip only after ≥2 clean shadow cycles (SELF_TUNING_REVIEW_CYCLE_DESIGN.md §7 shadow→live gate). |
259
+ | `feedbackPromotionThreshold` | 1–10 | Default `2` (env `FEEDBACK_PROMOTION_THRESHOLD`). Weighted-evidence threshold a behavioral / self-critique lesson must clear before it becomes injectable. |
260
+ | `feedbackLessonMaxBytesGlobal` | 1024–32768 | Default `8192` (env `FEEDBACK_LESSON_MAX_BYTES_GLOBAL`). Byte cap for `policies/agent-lessons.md`. |
261
+ | `feedbackLessonMaxBytesPerAgent` | 512–16384 | Default `4096` (env `FEEDBACK_LESSON_MAX_BYTES_PER_AGENT`). Byte cap for each `policies/agents/<slug>/lessons.md`. |
262
+ | `feedbackLessonStaleDays` | 7–365 | Default `60` (env `FEEDBACK_LESSON_STALE_DAYS`). Lessons whose `last=` date is older are pruned, except `kind=constraint` (durable). |
263
+ | `feedbackSignalRetentionDays` | 30–365 | Default `180` (env `FEEDBACK_SIGNAL_RETENTION_DAYS`). Consumed `feedback_signals` rows older than this are swept. |
264
+
240
265
  ## Routine Schedule Times Are Not Configurable
241
266
 
242
267
  The morning, evening, weekly, and monthly routines fire at fixed times
@@ -249,11 +274,13 @@ shift the whole day, change `dayBoundaryHour` instead.
249
274
  | `routine.morning_routine` | Daily at `dayBoundaryHour` (default 04:00). |
250
275
  | `routine.evening_review` | Daily at `18:00` local. |
251
276
  | `routine.weekly_review` | Friday `19:00` local (one hour after the evening review). |
252
- | `routine.monthly_review` | Last day of the month at `18:00` local, but **disabled by default** (`monthlyReviewEnabled = false`). |
277
+ | `routine.monthly_review` | Last day of the month at `18:00` local, but **disabled by default** — opt in by enabling the monthly-review agent at `/agents/monthly-review` (`agents.enabled` is the single switch; the legacy `monthlyReviewEnabled` config key is a deprecated fallback, carried forward once by a boot-time reconcile). |
253
278
 
254
- The hourly check is the one autonomous routine with a configurable
255
- cadence (`hourlyCheckIntervalMinutes`) and active window
256
- (`hourlyCheckActiveStartHour` / `…ActiveEndHour`).
279
+ The activity scan is the one autonomous routine with a configurable
280
+ cadence and active window — edited on the activity-scan agent's page
281
+ (`/agents/activity-scan`, Definition tab → Cadence card); the legacy
282
+ `activityScanIntervalMinutes` / `activityScanActiveStartHour` /
283
+ `…ActiveEndHour` keys remain as deprecated fallbacks.
257
284
 
258
285
  ## Restart-Required Keys
259
286
 
@@ -25,7 +25,7 @@ ask_examples:
25
25
  - Why can't the agent read my .env or SSH keys?
26
26
  locale: en-US
27
27
  created: 2026-04-25
28
- updated: 2026-05-28
28
+ updated: 2026-06-07
29
29
  keywords:
30
30
  - disallowedTools
31
31
  - deniedTools
@@ -42,8 +42,9 @@ related:
42
42
  # Disallowed Tools
43
43
 
44
44
  There are two distinct deny layers — the **absolute-block layer**
45
- (non-overridable) and the **default strict-mode list** (in `config.ts`,
46
- relaxable in Allow mode or via `allowedToolsOverride`).
45
+ (non-overridable) and the **default strict-mode list** (`DEFAULT_DISALLOWED_TOOLS`
46
+ in `src/settings/runtime-settings.ts`, relaxable in Allow mode or via
47
+ `allowedToolsOverride`).
47
48
 
48
49
  ## Absolute-block layer (cannot be widened past)
49
50
 
@@ -78,7 +79,8 @@ managed-Chromium chokepoints above).
78
79
 
79
80
  ## Default strict-mode list (relaxable)
80
81
 
81
- `config.ts > disallowedTools` ships with additional defaults that the
82
+ `DEFAULT_DISALLOWED_TOOLS` (in `src/settings/runtime-settings.ts`, the
83
+ seed for `config.disallowedTools`) ships with additional defaults that the
82
84
  operator can widen out of via `allowedToolsOverride` or by switching
83
85
  to Allow mode. These include `Bash(chmod *)`, `Bash(chown *)`,
84
86
  `Bash(git push --force *)`, `Bash(git reset --hard *)` and a handful
@@ -23,7 +23,7 @@ ask_examples:
23
23
  - What does pressing "?" do in the dashboard?
24
24
  locale: en-US
25
25
  created: 2026-04-25
26
- updated: 2026-05-28
26
+ updated: 2026-06-10
27
27
  keywords:
28
28
  - shortcut
29
29
  - hotkey
@@ -65,7 +65,7 @@ regardless of where focus sits.
65
65
  ## Examples
66
66
 
67
67
  - Press `Cmd+K`, type "timezone", and hit Enter to jump straight to the
68
- Timezone field on `/settings/schedule`.
68
+ Timezone field on `/settings/hours`.
69
69
  - On any screen, press `?` to ask a question about what you are looking
70
70
  at; the help slide-over opens pre-scoped to that page's doc.
71
71
  - While drafting a message in `/chat`, press `Cmd+Enter` to send without
@@ -34,7 +34,7 @@ ask_examples:
34
34
  - Which files can the agent write to?
35
35
  locale: en-US
36
36
  created: 2026-05-18
37
- updated: 2026-05-28
37
+ updated: 2026-06-08
38
38
  keywords:
39
39
  - context
40
40
  - knowledge
@@ -63,7 +63,7 @@ process_keys:
63
63
  - routine.evening_review
64
64
  - routine.weekly_review
65
65
  - routine.monthly_review
66
- - routine.hourly_check
66
+ - routine.activity_scan
67
67
  - routine.roadmap_refresh
68
68
  config_keys:
69
69
  - dayBoundaryHour
@@ -171,7 +171,7 @@ the write-permission whitelist in `packages/daemon/src/api/routes/context/permis
171
171
  │ │ └── <slug>.md
172
172
  │ └── dossiers/ Per-flow carry-forward state (agent-owned)
173
173
  │ ├── _index.md
174
- │ └── <flow>.md One per routine (hourly/morning/evening/…)
174
+ │ └── <flow>.md One per routine (activity-scan/morning/evening/…)
175
175
 
176
176
  └── policies/ USER-authored config + rules
177
177
  ├── _index.md
@@ -182,18 +182,23 @@ the write-permission whitelist in `packages/daemon/src/api/routes/context/permis
182
182
  ├── journal-export.md Inclusion / exclusion rules for exporting journal/daily/
183
183
  ├── integrations.md Integration-mode snapshot (daemon-rendered,
184
184
  │ chokidar-watched at this new path)
185
+ ├── agent-lessons.md Feedback Learning Loop global lessons (lazy)
186
+ ├── agents/ User-authored Agent definitions (lazy)
187
+ │ └── <slug>/
188
+ │ ├── agent.md
189
+ │ └── lessons.md Per-agent Feedback Learning Loop lessons (lazy)
185
190
  ├── management-captures/ One captured policy per file
186
191
  │ ├── _index.md
187
192
  │ └── <slug>.md
188
193
  ├── routines/ Per-cadence checklist rulebooks
189
194
  │ ├── _index.md
190
- │ ├── hourly.md Extension checks for routine.hourly_check
195
+ │ ├── activity-scan.md Extension checks for routine.activity_scan
191
196
  │ ├── morning.md …for routine.morning_routine
192
197
  │ ├── evening.md …for routine.evening_review
193
198
  │ ├── weekly.md …for routine.weekly_review
194
199
  │ ├── monthly.md …for routine.monthly_review
195
200
  │ └── custom/
196
- │ └── <slug>.md User-defined cron routines
201
+ │ └── <slug>.md Retired custom routines (inert; migrated to user Agents)
197
202
  └── skills/ User-registered skills (lazy directory)
198
203
  └── <slug>/
199
204
  └── SKILL.md Built-in skills stay in agent-assets/skills/ (read-only)
@@ -237,7 +242,8 @@ runner merges that file into the reconciler block.)
237
242
  The current agent-day's working view. Daemon-managed structure:
238
243
 
239
244
  ```
240
- # Today
245
+ # YYYY-MM-DD (day-of-week) — line 1 is the canonical agent-day date
246
+ > Day type: … — parsed by every event handler
241
247
  ## User Schedule — events for the day (from calendar observers)
242
248
  ## User Tasks — what you need to do today
243
249
  ## Agent Plan — what the agent intends to do today
@@ -380,15 +386,19 @@ the built-in steps.
380
386
  | File | Cadence | Process key |
381
387
  |---|---|---|
382
388
  | `_index.md` | — | (navigation) |
383
- | `hourly.md` | every hour (during active window) | `routine.hourly_check` |
389
+ | `activity-scan.md` | every 2 h default (during active window) | `routine.activity_scan` |
384
390
  | `morning.md` | 04:00 daily | `routine.morning_routine` |
385
391
  | `evening.md` | evening | `routine.evening_review` |
386
392
  | `weekly.md` | Friday | `routine.weekly_review` |
387
393
  | `monthly.md` | month-end | `routine.monthly_review` |
388
- | `custom/<slug>.md` | user cron | `routine.custom.<slug>` |
394
+ | `custom/<slug>.md` | (retired) | `routine.custom.<slug>` (historical) |
389
395
 
390
- `custom/<slug>.md` is the only routine path that supports `DELETE`
391
- when removed, the scheduler unregisters the cron job on the next reload.
396
+ `custom/<slug>.md` files no longer fire at the first start after the
397
+ upgrade each valid one was converted once into a user Agent at
398
+ `policies/agents/<slug>/agent.md`, and the source was marked inert
399
+ (`enabled: false` + `migrated_to_agent:`; see
400
+ [Custom Routines (Retired)](../features/routines/custom-routines.md)).
401
+ The path still supports `DELETE` so the inert files can be cleaned up.
392
402
 
393
403
  ---
394
404
 
@@ -424,7 +434,7 @@ routine to run without re-scanning the full vault.
424
434
  | File | Process key |
425
435
  |---|---|
426
436
  | `_index.md` | (navigation) |
427
- | `hourly.md` | `routine.hourly_check` |
437
+ | `activity-scan.md` | `routine.activity_scan` |
428
438
  | `morning.md` | `routine.morning_routine`, `routine.morning_routine_today` |
429
439
  | `evening.md` | `routine.evening_review` |
430
440
  | `weekly.md` | `routine.weekly_review` |
@@ -558,8 +568,10 @@ listed is read-only via the API.
558
568
  | `state/profile-questions` · `state/activity/*` | `PUT`, `PATCH` |
559
569
  | `identity/_index` · `identity/*` | `PUT`, `PATCH` |
560
570
  | `policies/_index` · `policies/*` (top-level files) | `PUT`, `PATCH` |
571
+ | `policies/agent-lessons` | `PUT`, `PATCH` (Feedback Learning Loop global lessons store) |
572
+ | `policies/agents/{slug}/{file}` | `PUT`, `PATCH`, `DELETE` (user-authored Agent definitions) |
561
573
  | `policies/routines/_index` · `policies/routines/*` | `PUT`, `PATCH` |
562
- | `policies/routines/custom/*` | `PUT`, `PATCH`, `DELETE` |
574
+ | `policies/routines/custom/*` | `PUT`, `PATCH`, `DELETE` (legacy — files are inert and no longer fire) |
563
575
  | `plans/projects/_index` · `plans/projects/*` | `PUT`, `PATCH` |
564
576
  | `plans/projects/_active` | `PUT` (the Obsidian Bases view) |
565
577
  | `knowledge/repos/{slug}/overview` · `journal/repos/{slug}/{date}` | `PUT`, `PATCH` |
@@ -570,6 +582,7 @@ listed is read-only via the API.
570
582
  | `state/inbox/*` · `state/scratch/*` | `PUT`, `PATCH`, `DELETE` |
571
583
  | `journal/agent` | `PUT` once (create-only), then `PATCH` (append) |
572
584
  | `policies/management-captures/_index` · `policies/management-captures/*` | `PUT`, `PATCH` |
585
+ | `research/*` | `PUT`, `PATCH` (browser-history research-cluster journals) |
573
586
 
574
587
  > Legacy URL forms (`/api/context/today.md`, `/api/context/user/profile`, `/api/context/rules/management`, `/api/context/agent/journal`, etc.) are normalized to the class-prefixed canonical paths in-process by `core/context-vault-aliases.ts` before any of the above checks run. Normalization is not a redirect (no HTTP 3xx) so legacy `curl -X PUT/PATCH` callers keep working. The alias bridge lives for one minor release after PR-6's content sweep lands. <!-- drift-allow -->
575
588
 
@@ -22,7 +22,7 @@ tags:
22
22
  status: stable
23
23
  ask_examples:
24
24
  - List all the ProcessKeys
25
- - What is the default tier for hourly check?
25
+ - What is the default tier for activity scan?
26
26
  - Which ProcessKeys are configurable from the dashboard?
27
27
  - What is routine.fetch_window used for?
28
28
  locale: en-US
@@ -41,11 +41,11 @@ keywords:
41
41
  - delegated_task
42
42
  - gmail_classify
43
43
  created: 2026-04-25
44
- updated: 2026-05-28
44
+ updated: 2026-06-07
45
45
  config_keys:
46
46
  - monthlyReviewEnabled
47
47
  - delegatedTaskHeavyEnabled
48
- - hourlyCheckIntervalMinutes
48
+ - activityScanIntervalMinutes
49
49
  - dayBoundaryHour
50
50
  api_endpoints:
51
51
  - POST /api/browser-task
@@ -62,7 +62,7 @@ related:
62
62
  # ProcessKeys
63
63
 
64
64
  A **ProcessKey** identifies the kind of work being dispatched (an owner DM,
65
- the morning routine, an hourly check, …). The dispatcher passes a ProcessKey
65
+ the morning routine, an activity scan, …). The dispatcher passes a ProcessKey
66
66
  to the `BackendRouter`, which resolves it to a `{ main, fallback }` backend
67
67
  plus an execution tier — the dispatcher never picks a model directly.
68
68
 
@@ -80,15 +80,15 @@ The **default tier** column maps to a model size, not a specific id:
80
80
  | `routine.morning_routine_journal` | Stage B of the morning-routine pipeline — authors `journal/daily/<yesterday>.md` from the daemon-prepared journal skeleton. | lite | yes |
81
81
  | `routine.today_refresh` | Calendar-drift-triggered (calendar change touching today's items; 5-min dedup, fires ~30s later) — drift-refresh of `state/today.md` | medium | yes |
82
82
  | `routine.evening_review` | Daily at 18:00 local (fixed) | medium | yes |
83
- | `routine.weekly_review` | Friday 18:00 local (fixed) | medium | yes |
84
- | `routine.monthly_review` | Monthly cadence (gated OFF by default — kill switch `monthlyReviewEnabled` in runtime settings). The routine itself is off by default, but its backend/tier binding is still configurable. | medium | yes |
85
- | `routine.hourly_check` | Every `hourlyCheckIntervalMinutes` (default 60) inside the active window | medium | yes |
86
- | `routine.hourly_check.triage` | Stage 2 triage gate of every hourly check | lite | yes |
83
+ | `routine.weekly_review` | Friday 19:00 local (fixed) | medium | yes |
84
+ | `routine.monthly_review` | Monthly cadence (gated OFF by default — opt in by enabling the monthly-review agent at `/agents/monthly-review`; the legacy `monthlyReviewEnabled` config key is a deprecated fallback). The routine itself is off by default, but its backend/tier binding is still configurable. | medium | yes |
85
+ | `routine.activity_scan` | Every N interval minutes (default 60) inside the active window — cadence set on `/agents/activity-scan`; legacy key `activityScanIntervalMinutes` is a deprecated fallback | medium | yes |
86
+ | `routine.activity_scan.triage` | Stage 2 triage gate of every activity scan | lite | yes |
87
87
  | `routine.fetch_window` | Pre-pass fetcher spawned before each main routine | lite | yes |
88
88
  | `routine.user_profile_sweep` | Periodic agent-day profile summarization pass | medium | no |
89
89
  | `routine.roadmap_refresh` | Periodic roadmap re-derivation (NOT in `ROUTINE_WINDOWS` — no `routine.fetch_window` pre-pass; the synthesis session itself drives the native-mode MCP fan-out) | medium | yes |
90
90
  | `routine.skill_curation` | Background skill-curation / overlay refinement loop (cron cadence picked at `/settings/self-learning`) | medium | yes |
91
- | `routine.custom.<slug>` | Operator-defined recurrence (see [Custom Routines](../features/routines/custom-routines.md)) | configurable | yes |
91
+ | `routine.custom.<slug>` | Retired legacy custom routines no longer fire; they were converted to user Agents running under `agent.task` (see [Custom Routines (Retired)](../features/routines/custom-routines.md)). Seen only in historical Activity rows. | | no |
92
92
  | `message.dm` | Owner DM | medium | yes |
93
93
  | `message.mention` | @-mention in a paired Slack channel where the agent is invited (DMs are `message.dm`; Telegram/WhatsApp groups are filtered out) | medium | yes |
94
94
  | `dashboard.chat` | `/chat` send | medium | yes |
@@ -34,7 +34,7 @@ keywords:
34
34
  - wiki skill
35
35
  - notify skill
36
36
  created: 2026-04-25
37
- updated: 2026-05-28
37
+ updated: 2026-06-07
38
38
  ui_anchors:
39
39
  - /knowledge?tab=skills
40
40
  process_keys:
@@ -59,12 +59,16 @@ related:
59
59
  Aitne ships a fixed set of built-in skills the agent loads per session. Most
60
60
  are always available; a few are **conditional** — loaded only when a gating
61
61
  flag is set (`gmail-lifestyle`, `managed-tasks`) or only for a specific event
62
- type (`browser-task`, on owner DMs). The table below is the canonical roster.
62
+ type (`browser-task` / `background-task` / `background-task-reply`, on owner
63
+ DMs). The table below is the canonical roster.
63
64
 
64
65
  | Slug | Purpose |
65
66
  |---|---|
66
- | `agent-actions` | Read the agent action log (`agent_actions` table) for retrospective audits. |
67
+ | `agent-actions` | Self-report structured metadata (dayType, anomalies, inbox stats, files-touched) into the session's own `agent_actions` row so daemon-side consumers read structured data instead of parsing prose. Loaded near the end of morning-routine / dispatcher sessions. |
68
+ | `agent-create` | Register a durable, named recurring Agent that fires on a cron cadence via `POST /api/agents`. For ongoing autonomous work (not one-time reminders → `schedule`, not background app-data fetches → `managed-tasks`). Conditional skill loaded on owner DMs / mentions when the message looks like a recurring-work request (gated by `agentCreateActiveForDm`). |
67
69
  | `attach` | Attach a generated or downloaded file to the agent's reply when the user expects a file artifact. |
70
+ | `background-task` | Hand a long-running / open-ended task (deep research, a multi-repo CI audit, "monitor X over time", a bulk compile) to the detached background runner via `POST /api/background-task`. Composes a self-contained brief, sets the notification policy (`always` / `if_significant` / `silent`), POSTs, acks, and ends the turn; reads `GET /api/background-task/:id` for follow-up detail. Loaded on `message.received.dm` + `message.received.dm_first`. |
71
+ | `background-task-reply` | Relay the owner's natural-language answer to a background task that parked on a clarifying question (`awaiting_user`) into a structured `POST /api/background-task/:id/clarify` call. No-op unless a task is parked and the conversation shows the question was asked. Loaded on `message.received.dm`. |
68
72
  | `browser-history` | Read normalised browser activity through `/api/browser-history/*`. Used by research-cluster journal updates, accept-path dispatches, owner pulls of shopping / reload traces, and the morning research summary. Never reads browser SQLite or profile dirs directly. |
69
73
  | `browser-history-respond` | Bridge the owner's natural-language reply to a research-offer DM ("dig deeper" / "summarise") into a structured `/api/browser-history/offers/<slug>/{accept,decline}` call. |
70
74
  | `browser-task` | Drive managed Chromium for open-ended browser tasks the user describes in DM. POSTs to `/api/browser-task` with a natural-language description; relays sub-agent clarifications back through DM. Loaded only on `message.received.dm`. |
@@ -83,10 +87,10 @@ type (`browser-task`, on owner DMs). The table below is the canonical roster.
83
87
  | `roadmap` | Read / write `plans/roadmap.md` (cross-request write lock). |
84
88
  | `schedule` | Schedule future agent wake-ups and DMs via the daemon (writes `agent_schedule` and `recurring_schedules` rows). |
85
89
  | `scheduled-managed-task` | Surface and act on Managed Tasks that are due now. |
86
- | `today` | Read or write `state/today.md` — morning routines, hourly checks, DMs that need a today snapshot. |
90
+ | `today` | Read or write `state/today.md` — morning routines, activity scans, DMs that need a today snapshot. |
87
91
  | `user-interview` | Manage the profile-interview queue at `state/profile-questions.md`; ask one question at a time. |
88
92
  | `user-profile` | Record user facts — identity, people, work, expertise, habits, goals — into the `identity/*` slices (`profile.md`, `people.md`, `work.md`, …). |
89
- | `wiki` | Build and maintain the personal wiki workspace — `!ingest` / `!compile` / `!ask` / `!lint` / `!trace` / `!connect`. |
93
+ | `wiki-*` | Build and maintain the personal wiki workspace — `!ingest` / `!compile` / `!ask` / `!lint` / `!trace` / `!connect`. Split into per-process sub-skills under `agent-assets/skills/wiki/` (`wiki-vault-rules`, `wiki-ingest`, `wiki-compile`, `wiki-ask`, `wiki-lint`, `wiki-trace`, `wiki-connect`, `wiki-graduate`), each loaded for its matching `wiki.*` ProcessKey. |
90
94
 
91
95
  ## How skills are sourced
92
96
 
@@ -100,4 +104,4 @@ A subset of these skills' sections (knowledge layout, routing tables, search
100
104
  recipes, etc.) is refined at runtime through JSON **overlays** maintained by
101
105
  the skill-curation loop. The seed files in `agent-assets/skills/` are never
102
106
  rewritten — overlays are applied at session-init by the `SkillsCompiler` and
103
- live under `<dataDir>/overlays/<skill>/<section-id>.json`.
107
+ live under `<dataDir>/skill-curation-overlays/<slug>/<section-id>.json`.
@@ -23,7 +23,7 @@ ask_examples:
23
23
  - The auth-health pill went red, what now?
24
24
  locale: en-US
25
25
  created: 2026-04-25
26
- updated: 2026-05-28
26
+ updated: 2026-06-07
27
27
  keywords:
28
28
  - auth failed
29
29
  - auth error
@@ -60,8 +60,8 @@ api_endpoints:
60
60
  on a healthy install. Re-paste the key on `/settings/models`.
61
61
  2. **Subscription-fallback login expired** when no API key was
62
62
  registered (the daemon was running on the CLI's local login —
63
- `claude`, `codex login`, `gemini auth` — and that session timed
64
- out). The recommended fix is to register an API key.
63
+ `claude auth login`, `codex login`, `gemini` — and that session
64
+ timed out). The recommended fix is to register an API key.
65
65
  3. **Account-level scope change** at the provider (key disabled,
66
66
  project deleted, billing suspended). For cloud-provider auth
67
67
  (Bedrock / Vertex / Foundry for Claude, Vertex AI for Gemini),
@@ -87,13 +87,14 @@ re-probes immediately — no restart needed.
87
87
  **If the backend is on the subscription fallback:** the recommended
88
88
  fix is to register an API key on `/settings/models`. The same picker
89
89
  also exposes cloud-provider auth — Bedrock / Vertex / Foundry for
90
- Claude, Vertex AI for Gemini. (Codex Azure OpenAI is not offered here;
91
- it needs a `~/.codex/config.toml` the env-mirroring path cannot write,
92
- so Codex stays direct-key only.)
90
+ Claude, Vertex AI for Gemini, and Azure OpenAI for Codex. (Codex Azure
91
+ OpenAI needs a `config.toml` in addition to env vars; the daemon writes
92
+ a managed one under `<dataDir>/codex-home/` and points `CODEX_HOME`
93
+ there, leaving your `~/.codex/` untouched.)
93
94
 
94
95
  If you cannot or do not want to register a key, re-run the
95
- corresponding CLI login (`claude`, `codex login`, `gemini auth`) and
96
- the daemon picks up the new credentials on the next probe. Some
96
+ corresponding CLI login (`claude auth login`, `codex login`, `gemini`)
97
+ and the daemon picks up the new credentials on the next probe. Some
97
98
  backends also expose an in-dashboard device-code recovery flow
98
99
  (`recovery/start` → `recovery/code`) reachable from the pill's
99
100
  recovery hint. Note that subscription auth is not provider-supported
@@ -13,9 +13,8 @@ category: troubleshooting
13
13
  summary: |
14
14
  A red "Daemon degraded" banner appears above every page when the daemon
15
15
  enters degraded mode. This almost always means your Obsidian-style primary
16
- vault is unreachable (path moved, drive unplugged, or not yet seeded), or a
17
- context migration is in progress. While degraded, every context write is
18
- refused with HTTP 503.
16
+ vault is unreachable (path moved, drive unplugged, or not yet seeded). While
17
+ degraded, every context read AND write is refused with HTTP 503.
19
18
  section: troubleshooting
20
19
  status: stable
21
20
  tags:
@@ -29,7 +28,7 @@ ask_examples:
29
28
  - Why are context writes being refused with 503?
30
29
  locale: en-US
31
30
  created: 2026-04-25
32
- updated: 2026-05-28
31
+ updated: 2026-06-07
33
32
  keywords:
34
33
  - degraded
35
34
  - degraded banner
@@ -62,8 +61,10 @@ related:
62
61
  followed by the offending path.
63
62
  - An **Open Management Mode** button on the right of the banner (links to
64
63
  Settings → Management Mode).
65
- - Any routine or skill that writes a context file fails: the context API
66
- returns **HTTP 503** for every `POST`/`PUT`/`PATCH`/`DELETE` while degraded.
64
+ - Any routine or skill that touches a context file fails: while degraded the
65
+ 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.
67
68
 
68
69
  ## What "Degraded" Actually Means
69
70
 
@@ -83,15 +84,21 @@ The `reason` in the banner is one of:
83
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). |
84
85
  | `primary_vault_not_configured` | Vault mode is Obsidian but no `primaryVaultPath` is set. |
85
86
  | `primary_vault_missing_content`| The path is reachable but doesn't carry the expected vault markers (it was never seeded / restructured). |
86
- | `migration_in_progress` | A context-vault migration (`/api/setup/migrate-context`) is running. Writes are gated until it finishes; reads still work. This one clears itself. |
87
+
88
+ A context-vault migration (`POST /api/setup/migrate-context`) is a **separate**
89
+ state, not a degraded reason — it does **not** raise this banner. During a
90
+ migration the daemon engages a context-write gate (`migration_in_progress`):
91
+ writes return HTTP 503 while reads still work, `/api/health` stays
92
+ `"status":"ok"`, and the gate clears itself when the migration finishes.
87
93
 
88
94
  ## Diagnostic Steps
89
95
 
90
96
  1. **Read the banner.** The `reason` and `path` tell you most of the story.
91
97
  2. `aitne logs` — look for `Vault health probe entered degraded mode`; the
92
98
  logged `reason` matches the banner.
93
- 3. If the reason is `migration_in_progress`, **wait** — the migration releases
94
- the write gate when it completes; do not restart mid-migration.
99
+ 3. If a context-vault migration is running (write-gate `migration_in_progress`
100
+ rather than the banner), **wait** the migration releases the write gate
101
+ when it completes; do not restart mid-migration.
95
102
  4. Otherwise the issue is your vault path. Confirm it exists and is writable:
96
103
  - `ls -ld "<path-from-banner>"` — the directory must exist.
97
104
  - `df -h "<path-from-banner>"` — confirm the volume is mounted with free
@@ -22,7 +22,7 @@ tags:
22
22
  status: stable
23
23
  locale: en-US
24
24
  created: 2026-04-25
25
- updated: 2026-05-28
25
+ updated: 2026-06-07
26
26
  keywords:
27
27
  - magic phrase
28
28
  - owner channel
@@ -85,7 +85,7 @@ All secrets are single-use and expire after **5 minutes**.
85
85
 
86
86
  ## Diagnostic steps
87
87
 
88
- 1. On `/connections/messaging`, click **Regenerate phrase** (Slack /
88
+ 1. On `/connections/messaging`, click **Generate pairing phrase** (Slack /
89
89
  Discord) or re-open the QR / deep link (Telegram / WhatsApp) so you
90
90
  start a fresh 5-minute window.
91
91
  2. For Slack / Discord, send **only** the four words — no surrounding