@aitne-sh/aitne 0.1.11 → 0.1.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (151) hide show
  1. package/README.md +4 -0
  2. package/agent-assets/agent-profiles/background-task.md +8 -1
  3. package/agent-assets/agent-profiles/routine-fetch-window.md +11 -0
  4. package/agent-assets/agents/evening-review/agent.md +6 -2
  5. package/agent-assets/agents/lesson-maintenance/agent.md +56 -0
  6. package/agent-assets/agents/morning-routine/agent.md +10 -6
  7. package/agent-assets/agents/source-librarian/agent.md +51 -0
  8. package/agent-assets/docs/concepts/agent-day.md +15 -15
  9. package/agent-assets/docs/concepts/auth-health.md +10 -7
  10. package/agent-assets/docs/concepts/backends-and-tiers.md +34 -23
  11. package/agent-assets/docs/concepts/costs-and-quotas.md +10 -10
  12. package/agent-assets/docs/concepts/delegated-mode.md +18 -18
  13. package/agent-assets/docs/concepts/memory-model.md +25 -24
  14. package/agent-assets/docs/concepts/observations.md +27 -19
  15. package/agent-assets/docs/concepts/process-keys.md +25 -26
  16. package/agent-assets/docs/concepts/routines.md +18 -17
  17. package/agent-assets/docs/concepts/safety-and-execution.md +20 -17
  18. package/agent-assets/docs/concepts/safety-model.md +16 -15
  19. package/agent-assets/docs/concepts/skills.md +7 -4
  20. package/agent-assets/docs/features/integrations/browser-history.md +52 -47
  21. package/agent-assets/docs/features/integrations/calendar.md +7 -7
  22. package/agent-assets/docs/features/integrations/git.md +15 -13
  23. package/agent-assets/docs/features/integrations/github.md +12 -10
  24. package/agent-assets/docs/features/integrations/mail.md +47 -45
  25. package/agent-assets/docs/features/integrations/notion.md +15 -11
  26. package/agent-assets/docs/features/integrations/obsidian.md +27 -23
  27. package/agent-assets/docs/features/lifestyle/git.md +7 -8
  28. package/agent-assets/docs/features/lifestyle/reading.md +11 -8
  29. package/agent-assets/docs/features/lifestyle/receipts.md +21 -22
  30. package/agent-assets/docs/features/lifestyle/travel-bookings.md +9 -9
  31. package/agent-assets/docs/features/memory-files/agent-journal.md +12 -10
  32. package/agent-assets/docs/features/memory-files/agent-lessons.md +46 -21
  33. package/agent-assets/docs/features/memory-files/projects.md +13 -14
  34. package/agent-assets/docs/features/memory-files/roadmap.md +16 -15
  35. package/agent-assets/docs/features/memory-files/schedule.md +10 -10
  36. package/agent-assets/docs/features/memory-files/today.md +18 -18
  37. package/agent-assets/docs/features/memory-files/user-profile.md +17 -17
  38. package/agent-assets/docs/features/messaging/bang-commands.md +15 -15
  39. package/agent-assets/docs/features/messaging/dashboard-chat.md +8 -7
  40. package/agent-assets/docs/features/messaging/discord.md +7 -5
  41. package/agent-assets/docs/features/messaging/overview.md +14 -14
  42. package/agent-assets/docs/features/messaging/pairing-and-magic-phrase.md +12 -12
  43. package/agent-assets/docs/features/messaging/slack.md +9 -8
  44. package/agent-assets/docs/features/messaging/telegram.md +7 -7
  45. package/agent-assets/docs/features/messaging/whatsapp.md +6 -6
  46. package/agent-assets/docs/features/operations/activity-and-conversations.md +9 -9
  47. package/agent-assets/docs/features/operations/approvals.md +13 -12
  48. package/agent-assets/docs/features/operations/backend-routing.md +38 -37
  49. package/agent-assets/docs/features/operations/browser-tasks.md +63 -57
  50. package/agent-assets/docs/features/operations/cost-tracking.md +5 -5
  51. package/agent-assets/docs/features/operations/managed-chromium.md +23 -22
  52. package/agent-assets/docs/features/operations/notifications.md +15 -15
  53. package/agent-assets/docs/features/operations/quiet-hours.md +14 -15
  54. package/agent-assets/docs/features/operations/schedule-approaching.md +16 -14
  55. package/agent-assets/docs/features/routines/activity-scan.md +14 -11
  56. package/agent-assets/docs/features/routines/custom-routines.md +9 -7
  57. package/agent-assets/docs/features/routines/evening-review.md +6 -7
  58. package/agent-assets/docs/features/routines/morning-routine.md +23 -22
  59. package/agent-assets/docs/features/routines/weekly-review.md +57 -51
  60. package/agent-assets/docs/features/wiki/commands.md +28 -22
  61. package/agent-assets/docs/features/wiki/cost-and-approval.md +28 -23
  62. package/agent-assets/docs/features/wiki/dashboard.md +22 -24
  63. package/agent-assets/docs/features/wiki/overview.md +17 -25
  64. package/agent-assets/docs/features/wiki/search.md +15 -17
  65. package/agent-assets/docs/features/wiki/workspaces.md +55 -56
  66. package/agent-assets/docs/getting-started/01-what-is-this.md +4 -5
  67. package/agent-assets/docs/getting-started/02-first-steps.md +12 -13
  68. package/agent-assets/docs/getting-started/03-what-can-this-do.md +7 -7
  69. package/agent-assets/docs/getting-started/04-first-day.md +4 -5
  70. package/agent-assets/docs/glossary.md +21 -19
  71. package/agent-assets/docs/guides/add-a-custom-routine.md +17 -12
  72. package/agent-assets/docs/guides/backup-and-restore.md +19 -16
  73. package/agent-assets/docs/guides/budget-and-cost-for-wiki.md +57 -62
  74. package/agent-assets/docs/guides/build-your-wiki.md +11 -12
  75. package/agent-assets/docs/guides/change-which-model-handles-x.md +30 -28
  76. package/agent-assets/docs/guides/connect-a-new-mail-account.md +30 -29
  77. package/agent-assets/docs/guides/explore-with-trace-and-connect.md +30 -32
  78. package/agent-assets/docs/guides/import-knowledge-file.md +9 -10
  79. package/agent-assets/docs/guides/install-and-run.md +9 -10
  80. package/agent-assets/docs/guides/maintain-wiki-health.md +10 -10
  81. package/agent-assets/docs/guides/migrate-machines.md +16 -14
  82. package/agent-assets/docs/guides/multiple-wikis-for-multiple-domains.md +12 -13
  83. package/agent-assets/docs/guides/pause-the-agent.md +25 -25
  84. package/agent-assets/docs/guides/reinstall-cleanly.md +13 -12
  85. package/agent-assets/docs/guides/setup-wizard.md +10 -12
  86. package/agent-assets/docs/guides/switch-default-backend.md +9 -9
  87. package/agent-assets/docs/guides/use-an-existing-obsidian-vault.md +9 -11
  88. package/agent-assets/docs/pages/activity.md +76 -0
  89. package/agent-assets/docs/pages/agents.md +78 -0
  90. package/agent-assets/docs/pages/analytics.md +70 -0
  91. package/agent-assets/docs/pages/browser.md +73 -0
  92. package/agent-assets/docs/pages/chat.md +67 -0
  93. package/agent-assets/docs/pages/connections.md +78 -0
  94. package/agent-assets/docs/pages/git.md +73 -0
  95. package/agent-assets/docs/pages/knowledge.md +75 -0
  96. package/agent-assets/docs/pages/overview.md +90 -0
  97. package/agent-assets/docs/pages/reading.md +65 -0
  98. package/agent-assets/docs/pages/settings.md +77 -0
  99. package/agent-assets/docs/pages/tasks.md +74 -0
  100. package/agent-assets/docs/pages/wiki.md +73 -0
  101. package/agent-assets/docs/reference/api.md +18 -17
  102. package/agent-assets/docs/reference/cli-commands.md +13 -10
  103. package/agent-assets/docs/reference/config.md +40 -35
  104. package/agent-assets/docs/reference/disallowed-tools.md +18 -17
  105. package/agent-assets/docs/reference/keyboard-shortcuts.md +6 -8
  106. package/agent-assets/docs/reference/knowledge-layout.md +10 -10
  107. package/agent-assets/docs/reference/process-keys.md +20 -22
  108. package/agent-assets/docs/reference/skills.md +18 -16
  109. package/agent-assets/docs/troubleshooting/auth-failed.md +13 -11
  110. package/agent-assets/docs/troubleshooting/dashboard-shows-degraded.md +10 -10
  111. package/agent-assets/docs/troubleshooting/fallback-keeps-firing.md +26 -24
  112. package/agent-assets/docs/troubleshooting/messaging-not-pairing.md +8 -9
  113. package/agent-assets/docs/troubleshooting/morning-routine-didnt-run.md +19 -18
  114. package/agent-assets/docs/troubleshooting/observation-not-detected.md +14 -15
  115. package/agent-assets/docs/troubleshooting/quota-exhausted.md +28 -26
  116. package/agent-assets/docs/troubleshooting/wiki-ingest-full-blocked.md +35 -34
  117. package/agent-assets/docs/troubleshooting/wiki-write-failed.md +21 -24
  118. package/agent-assets/playbooks/markdown-note.md +43 -0
  119. package/agent-assets/playbooks/monitoring.md +29 -0
  120. package/agent-assets/playbooks/research.md +47 -0
  121. package/agent-assets/skills/agent-create/SKILL.md +71 -32
  122. package/agent-assets/skills/agent-create/references/prompt-frame-extended.md +132 -0
  123. package/agent-assets/skills/agent-create/references/prompt-frame.md +125 -0
  124. package/agent-assets/skills/background-task/SKILL.md +13 -8
  125. package/agent-assets/skills/background-task-reply/SKILL.md +2 -2
  126. package/agent-assets/skills/board/SKILL.md +92 -0
  127. package/agent-assets/skills/browser-history/SKILL.md +3 -3
  128. package/agent-assets/skills/browser-history-respond/SKILL.md +3 -3
  129. package/agent-assets/skills/browser-task/SKILL.md +4 -2
  130. package/agent-assets/skills/context/seeds/file-responsibilities.seed.json +2 -1
  131. package/agent-assets/skills/schedule/SKILL.md +21 -18
  132. package/agent-assets/skills/schedule/references/batch.md +1 -1
  133. package/agent-assets/skills/schedule/references/model-selection.md +1 -1
  134. package/agent-assets/skills/schedule/references/prompt-frame.md +125 -0
  135. package/agent-assets/skills/sources/SKILL.md +68 -0
  136. package/agent-assets/skills/sources/curation.json +21 -0
  137. package/agent-assets/skills/sources/seeds/filing-rules.seed.json +25 -0
  138. package/agent-assets/skills/sources/seeds/source-collections.seed.json +20 -0
  139. package/agent-assets/skills/task/SKILL.md +82 -0
  140. package/agent-assets/task-flows/background_task.md +29 -3
  141. package/agent-assets/task-flows/message.received.dm.md +1 -1
  142. package/agent-assets/task-flows/routine.activity_scan.md +17 -2
  143. package/agent-assets/task-flows/routine.evening_review.md +72 -11
  144. package/agent-assets/task-flows/routine.fetch_window.md +21 -0
  145. package/agent-assets/task-flows/routine.monthly_review.md +3 -1
  146. package/agent-assets/task-flows/routine.morning_routine_today.md +26 -7
  147. package/agent-assets/task-flows/routine.source_maintenance.md +50 -0
  148. package/agent-assets/task-flows/scheduled.dm.md +29 -16
  149. package/agent-assets/templates/_manifest.json +1 -0
  150. package/agent-assets/templates/knowledge/sources/_index.md +19 -0
  151. package/package.json +4 -4
@@ -15,8 +15,6 @@ summary: |
15
15
  and pointers to the canonical key tuples in shared/.
16
16
  section: config
17
17
  tags:
18
- - core
19
- - reference
20
18
  - config
21
19
  - operations
22
20
  - backends
@@ -78,7 +76,7 @@ ui_anchors:
78
76
  - /settings/infrastructure
79
77
  - /settings/models
80
78
  created: 2026-04-25
81
- updated: 2026-06-08
79
+ updated: 2026-07-01
82
80
  related:
83
81
  - reference/api
84
82
  - reference/cli-commands
@@ -89,21 +87,24 @@ related:
89
87
  # Config Reference
90
88
 
91
89
  The full `AgentConfig` schema lives in
92
- `packages/daemon/src/config.ts`. Three canonical tuples in
93
- `packages/shared/src/editable-config-keys.ts` govern what is editable
94
- and when:
95
-
96
- - **`EDITABLE_RUNTIME_KEY_TUPLE`** — the ~130 keys mutable at runtime
97
- via `PATCH /api/config`. Both the daemon and the dashboard import
98
- from this tuple so the accepted-key set is enforced at compile time
99
- in both packages.
100
- - **`RESTART_REQUIRED_KEY_TUPLE`** — runtime-editable keys whose
101
- change does not apply to a running worker (the dashboard renders a
102
- restart-required badge for these).
103
- - **`EDITABLE_BOOTSTRAP_KEY_TUPLE`** `apiPort` only, written to
104
- `.env` because it's read before the daemon binds.
105
-
106
- Anything not in those tuples must be set via env or restart.
90
+ `packages/daemon/src/config.ts`. Three fixed lists of key names
91
+ (TypeScript tuples) in `packages/shared/src/editable-config-keys.ts`
92
+ decide which keys you can change, and when:
93
+
94
+ - **`EDITABLE_RUNTIME_KEY_TUPLE`** — the ~130 keys you can change while
95
+ the daemon is running, via `PATCH /api/config`. Both the daemon and
96
+ the dashboard import this list, so the set of accepted keys is checked
97
+ at compile time in both packages.
98
+ - **`RESTART_REQUIRED_KEY_TUPLE`** — keys you can edit at runtime, but
99
+ the new value only reaches a worker after a restart; it does not apply
100
+ to a worker that is already running. The dashboard shows a
101
+ restart-required badge for these.
102
+ - **`EDITABLE_BOOTSTRAP_KEY_TUPLE`** only `apiPort`. It is written to
103
+ `.env` because the daemon reads it before it starts listening on the
104
+ network (binds to a port).
105
+
106
+ Any key that is not in one of these three lists can only be set through
107
+ an environment variable or by restarting.
107
108
 
108
109
  ## Where Each Field Comes From
109
110
 
@@ -116,9 +117,9 @@ Anything not in those tuples must be set via env or restart.
116
117
 
117
118
  ## Selected Keys
118
119
 
119
- A representative slice of `EDITABLE_RUNTIME_KEY_TUPLE` the full list
120
- of ~130 keys is in `editable-config-keys.ts`. Names below are exact and
121
- case-sensitive.
120
+ A representative sample of `EDITABLE_RUNTIME_KEY_TUPLE`; the full list
121
+ of ~130 keys is in `editable-config-keys.ts`. The names below are exact
122
+ and case-sensitive.
122
123
 
123
124
  ### Identity and timezone
124
125
 
@@ -127,18 +128,19 @@ case-sensitive.
127
128
  | `agentDisplayName` | string | What the agent calls itself in DMs. |
128
129
  | `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
130
  | `timezone` | IANA tz | Empty falls back to the system tz. |
130
- | `dayBoundaryHour` | 0–9 | Default `4`. Controls the agent-day rollover (must be an early-morning hour). |
131
+ | `dayBoundaryHour` | 0–9 | Default `4`. Sets the agent-day boundary — the moment "today" rolls over for the agent (must be an early-morning hour). |
131
132
  | `primaryLanguage` | BCP-47 | Output language for DMs, journal, and Obsidian writes. Templates stay English-headered. |
132
133
  | `vaultMode` | enum | Where context lives — `plain` (default; `<dataDir>/context`) or `obsidian` (an external Obsidian vault). |
133
134
 
134
135
  ### Activity scan and gate
135
136
 
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 keybuilt-in default.
137
+ The first five keys are **deprecated fallbacks**. The activity-scan
138
+ cadence (how often it runs), active window, minimum-observations
139
+ threshold, and enable switch now live on the activity-scan agent
140
+ (`/agents/activity-scan`, Definition tab → Cadence card; Enable/Disable).
141
+ `PATCH /api/config` still accepts these keys, but the dashboard no longer
142
+ shows them. A value resolves in this order: agent override legacy
143
+ config key → built-in default.
142
144
 
143
145
  | Key | Type | Notes |
144
146
  |---|---|---|
@@ -247,7 +249,7 @@ resolve agent override → legacy config key → built-in default.
247
249
  ### Feedback learning
248
250
 
249
251
  The feedback learning loop (capture → nightly consolidation → injection of
250
- durable lessons). All six knobs are runtime-editable via `PATCH /api/config`,
252
+ durable lessons). All knobs are runtime-editable via `PATCH /api/config`,
251
253
  surfaced by `GET /config`, and tunable from the dashboard `/settings/lessons`
252
254
  page. Defaults and ranges below are enforced in
253
255
  `packages/daemon/src/settings/runtime-settings.ts`.
@@ -255,12 +257,15 @@ page. Defaults and ranges below are enforced in
255
257
  | Key | Type | Notes |
256
258
  |---|---|---|
257
259
  | `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). |
260
+ | `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); the daemon DMs you once when 3 consecutive shadow cycles were fully approved (graduation). |
259
261
  | `feedbackPromotionThreshold` | 1–10 | Default `2` (env `FEEDBACK_PROMOTION_THRESHOLD`). Weighted-evidence threshold a behavioral / self-critique lesson must clear before it becomes injectable. |
260
262
  | `feedbackLessonMaxBytesGlobal` | 1024–32768 | Default `8192` (env `FEEDBACK_LESSON_MAX_BYTES_GLOBAL`). Byte cap for `policies/agent-lessons.md`. |
261
263
  | `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). |
264
+ | `feedbackLessonStaleDays` | 7–365 | Default `60` (env `FEEDBACK_LESSON_STALE_DAYS`). Staleness horizon for the graduated expiration lifecycle: an active lesson past the horizon whose time-decayed confidence is below the floor demotes to provisional (reversible); a provisional lesson uncorroborated for twice the horizon is archived. `kind=constraint` lessons are durable and never expire. |
263
265
  | `feedbackSignalRetentionDays` | 30–365 | Default `180` (env `FEEDBACK_SIGNAL_RETENTION_DAYS`). Consumed `feedback_signals` rows older than this are swept. |
266
+ | `feedbackLessonConfidenceFloor` | 0–1 | Default `0.25` (env `FEEDBACK_LESSON_CONFIDENCE_FLOOR`). Inferred lessons whose effective (time-decayed) confidence `cf` falls below this floor are dropped from injection; also the demote test in the expiration lifecycle. Durable `constraint` lessons are exempt from the injection filter, and explicit owner corrections are floor-tested on their undecayed `cf` (an obeyed directive produces no corroborating signals, so decay alone must not silently un-bind it). `0` disables the filter. |
267
+ | `feedbackContradictionGuardCf` | 0–1 | Default `0.6` (env `FEEDBACK_CONTRADICTION_GUARD_CF`). Anti-whiplash guard: a new candidate contradicting an established lesson with `cf` at or above this value is held provisional until it accumulates 1.5x the usual evidence. Explicit owner corrections always win immediately. |
268
+ | `feedbackOutcomeLearningEnabled` | boolean | Default `true` (env `FEEDBACK_OUTCOME_LEARNING_ENABLED`). Includes the per-notification-type outcome rollup (replied / corrected / ignored, correction rate) in the nightly consolidation worksheet so lesson promotions weigh real reactions. |
264
269
 
265
270
  ## Routine Schedule Times Are Not Configurable
266
271
 
@@ -284,10 +289,10 @@ cadence and active window — edited on the activity-scan agent's page
284
289
 
285
290
  ## Restart-Required Keys
286
291
 
287
- The `RESTART_REQUIRED_KEY_TUPLE` covers fields whose new value is
288
- written through `applyConfigUpdates` but does not apply to a running
289
- worker — the dashboard renders a badge prompting an `aitne restart`.
290
- The current list:
292
+ The `RESTART_REQUIRED_KEY_TUPLE` covers fields whose new value is saved
293
+ through `applyConfigUpdates` but does not reach a worker that is already
294
+ running — the dashboard shows a badge prompting an `aitne restart`. The
295
+ current list:
291
296
 
292
297
  - `apiPort` (env-only)
293
298
  - `externalObsidianVaultName` / `externalObsidianVaultPath` / `externalObsidianWatch`
@@ -14,9 +14,7 @@ summary: |
14
14
  by skill-level allow-lists. Mirrors src/safety/always-disallowed.ts.
15
15
  section: reference
16
16
  tags:
17
- - reference
18
17
  - safety
19
- - core
20
18
  - audit
21
19
  status: stable
22
20
  ask_examples:
@@ -25,7 +23,7 @@ ask_examples:
25
23
  - Why can't the agent read my .env or SSH keys?
26
24
  locale: en-US
27
25
  created: 2026-04-25
28
- updated: 2026-06-07
26
+ updated: 2026-07-01
29
27
  keywords:
30
28
  - disallowedTools
31
29
  - deniedTools
@@ -41,16 +39,18 @@ related:
41
39
 
42
40
  # Disallowed Tools
43
41
 
44
- There are two distinct deny layers the **absolute-block layer**
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`).
42
+ The agent keeps two separate lists of tools it refuses to run. The
43
+ first is the **absolute-block layer**, which nothing can turn off —
44
+ not your config, not a skill's allow-list. The second is the
45
+ **default strict-mode list** (`DEFAULT_DISALLOWED_TOOLS` in
46
+ `src/settings/runtime-settings.ts`), which you *can* relax by
47
+ switching to Allow mode or by setting `allowedToolsOverride`.
48
48
 
49
49
  ## Absolute-block layer (cannot be widened past)
50
50
 
51
- These patterns are denied unconditionally regardless of execution mode
52
- or `allowedToolsOverride`. Source of truth:
53
- `packages/daemon/src/safety/always-disallowed.ts`.
51
+ The agent always refuses these patterns no matter which execution
52
+ mode it is in, and no matter what you put in `allowedToolsOverride`.
53
+ Source of truth: `packages/daemon/src/safety/always-disallowed.ts`.
54
54
 
55
55
  | Category | Examples |
56
56
  |---|---|
@@ -79,13 +79,14 @@ managed-Chromium chokepoints above).
79
79
 
80
80
  ## Default strict-mode list (relaxable)
81
81
 
82
- `DEFAULT_DISALLOWED_TOOLS` (in `src/settings/runtime-settings.ts`, the
83
- seed for `config.disallowedTools`) ships with additional defaults that the
84
- operator can widen out of via `allowedToolsOverride` or by switching
85
- to Allow mode. These include `Bash(chmod *)`, `Bash(chown *)`,
86
- `Bash(git push --force *)`, `Bash(git reset --hard *)` and a handful
87
- of other footgun patterns. They are **not** in the absolute-block
88
- layer Allow mode permits them.
82
+ `DEFAULT_DISALLOWED_TOOLS` (in `src/settings/runtime-settings.ts`)
83
+ seeds `config.disallowedTools` with a few extra blocks you can lift —
84
+ either by setting `allowedToolsOverride` or by switching to Allow
85
+ mode. These include `Bash(chmod *)`, `Bash(chown *)`,
86
+ `Bash(git push --force *)`, `Bash(git reset --hard *)`, and a handful
87
+ of other patterns that are easy to run by accident and hard to undo.
88
+ Because they are **not** part of the absolute-block layer, Allow mode
89
+ permits them.
89
90
 
90
91
  ## Audit log
91
92
 
@@ -9,13 +9,11 @@ aliases:
9
9
  - key bindings
10
10
  category: reference
11
11
  summary: |
12
- Keyboard shortcuts available in the dashboard. The set is small by
13
- design — the dashboard is a low-cognition surface.
12
+ Keyboard shortcuts available in the dashboard. The set is small on
13
+ purpose — the dashboard is meant to stay calm and easy to scan.
14
14
  section: reference
15
15
  tags:
16
- - reference
17
16
  - dashboard
18
- - core
19
17
  status: stable
20
18
  ask_examples:
21
19
  - What keyboard shortcuts work in the dashboard?
@@ -23,7 +21,7 @@ ask_examples:
23
21
  - What does pressing "?" do in the dashboard?
24
22
  locale: en-US
25
23
  created: 2026-04-25
26
- updated: 2026-06-10
24
+ updated: 2026-07-01
27
25
  keywords:
28
26
  - shortcut
29
27
  - hotkey
@@ -42,9 +40,9 @@ related:
42
40
 
43
41
  # Keyboard Shortcuts
44
42
 
45
- The dashboard ships a deliberately small set of shortcuts — it is a
46
- low-cognition surface, not a power-user IDE. These work from any
47
- dashboard screen.
43
+ The dashboard ships a deliberately small set of shortcuts — it is built
44
+ to stay calm and easy to scan, not to be a power-user IDE. These work
45
+ from any dashboard screen.
48
46
 
49
47
  | Keys | Action |
50
48
  |---|---|
@@ -19,8 +19,6 @@ summary: |
19
19
  api/routes/context/permissions.ts.
20
20
  section: knowledge-layout
21
21
  tags:
22
- - reference
23
- - core
24
22
  - memory
25
23
  - knowledge
26
24
  - operations
@@ -34,7 +32,7 @@ ask_examples:
34
32
  - Which files can the agent write to?
35
33
  locale: en-US
36
34
  created: 2026-05-18
37
- updated: 2026-06-08
35
+ updated: 2026-07-01
38
36
  keywords:
39
37
  - context
40
38
  - knowledge
@@ -87,15 +85,17 @@ knowledge of you. Every file lives under `PA_DATA_DIR/context/`
87
85
  (default `~/.personal-agent/context/`) as plain Markdown that you can read,
88
86
  edit, version, and back up with ordinary tools.
89
87
 
90
- The vault is partitioned into **six authority classes** — `identity/`, `state/`,
91
- `plans/`, `journal/`, `knowledge/`, and `policies/`. Each top-level directory
92
- carries a distinct authority + lifecycle contract; the daemon enforces those
93
- contracts via the file's YAML frontmatter (advisory in this release; strict in
94
- the next phase). This shape landed in the context-vault v2 restructure
88
+ The vault is split into **six authority classes** — `identity/`, `state/`,
89
+ `plans/`, `journal/`, `knowledge/`, and `policies/`. An authority class is
90
+ simply a top-level directory with its own rules for who may write to it and
91
+ how long its files are kept. The daemon enforces those rules through each
92
+ file's YAML frontmatter (advisory in this release; strict in the next
93
+ phase). This shape landed in the context-vault v2 restructure
95
94
  (migration `0004-context-vault-restructure`); legacy pre-v2 paths such as <!-- drift-allow -->
96
95
  `today.md`, `user/profile`, `rules/management`, `agent/journal`, etc. continue to work <!-- drift-allow -->
97
- because the daemon normalizes them in-process — never via HTTP 3xx — for one
98
- minor release while shipped skills and task-flows are updated.
96
+ because the daemon rewrites them to the new paths in-process — never via an
97
+ HTTP 3xx redirect — for one minor release while the shipped skills and
98
+ task-flows are updated.
99
99
 
100
100
  The layout below is the canonical source-of-truth. It mirrors
101
101
  `packages/daemon/src/core/context-paths.ts` (`CONTEXT_RELATIVE_PATHS`) and
@@ -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