@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
@@ -13,9 +13,7 @@ summary: |
13
13
  Single flat term list for Aitne vocabulary. Cross-references
14
14
  link to a single canonical anchor here so concept docs do not drift.
15
15
  tags:
16
- - core
17
- - reference
18
- - glossary
16
+ - knowledge
19
17
  status: stable
20
18
  ask_examples:
21
19
  - What is a ProcessKey?
@@ -35,7 +33,7 @@ ask_examples:
35
33
  - What is an observation?
36
34
  locale: en-US
37
35
  created: 2026-04-25
38
- updated: 2026-06-07
36
+ updated: 2026-07-01
39
37
  keywords:
40
38
  - terminology
41
39
  - vocabulary
@@ -102,7 +100,7 @@ and rationale.
102
100
 
103
101
  ## Backend
104
102
 
105
- One of the model providers Aitne can dispatch to: `claude`
103
+ One of the AI model providers Aitne can send work to: `claude`
106
104
  (Claude Code SDK), `codex` (Codex CLI), `gemini` (Gemini CLI), or
107
105
  `opencode` (`@opencode-ai/sdk` HTTP server). Each backend is configured
108
106
  per-installation; one is the **main backend**, and the others can be
@@ -110,12 +108,13 @@ enabled as fallbacks.
110
108
 
111
109
  ## Browser History (B-3)
112
110
 
113
- Local-only history poller that reads the browser's own SQLite database
111
+ A local-only poller that reads the browser's own SQLite history database
114
112
  (Chromium-based browsers — Chrome, Chromium, Edge, Brave, Comet, Atlas)
115
- and records page visits as observations. Drives the **research cluster** derivation, the weekly
116
- reload-memory block, and the [`!checks`](features/messaging/bang-commands.md)
117
- on-demand reload tally. No content is uploaded; only URLs, titles, and
118
- visit timings the browser itself recorded. See
113
+ and records page visits as observations. It feeds the **research cluster**
114
+ derivation, the weekly reload-memory block, and the
115
+ [`!checks`](features/messaging/bang-commands.md) on-demand reload tally.
116
+ Nothing is uploaded — only the URLs, titles, and visit timings the browser
117
+ itself already recorded. See
119
118
  [Browser History](features/integrations/browser-history.md).
120
119
 
121
120
  ## Managed Chromium (B-4)
@@ -146,8 +145,9 @@ enabled custom commands appear in `!help`. See
146
145
 
147
146
  ## Backend Router
148
147
 
149
- The component that resolves a `ProcessKey` to a concrete `(backend,
150
- model, maxTurns, maxBudgetUsd)` binding at dispatch time. Lives in
148
+ The component that turns a `ProcessKey` into a concrete `(backend,
149
+ model, maxTurns, maxBudgetUsd)` binding at dispatch time (the moment an
150
+ invocation is handed to a backend). Lives in
151
151
  `packages/daemon/src/core/backends/backend-router.ts`. Routing reads
152
152
  `process_backend_config` (per-process pins) layered over
153
153
  `backend_global_defaults` (installation-wide defaults).
@@ -160,8 +160,8 @@ matching anchor.
160
160
 
161
161
  ## Day Boundary
162
162
 
163
- The hour-of-day at which the agent day rolls over. Configured via
164
- `dayBoundaryHour` (default `4`).
163
+ The hour of the day when the agent day rolls over (when "today" starts
164
+ fresh). Configured via `dayBoundaryHour` (default `4`).
165
165
 
166
166
  ## deniedTools
167
167
 
@@ -228,10 +228,11 @@ dashboard page.
228
228
 
229
229
  Operator-facing umbrella for the two non-heavy lanes on each backend:
230
230
 
231
- - **Medium / Main** (Claude Sonnet 4.6, `gpt-5.4` on Codex,
232
- `gemini-3.1-pro-preview` on Gemini, Sonnet 4.6 via OpenCode) —
231
+ - **Medium / Main** (Claude Sonnet 5, `gpt-5.4` on Codex,
232
+ `gemini-3.1-pro-preview` on Gemini, Sonnet 5 via OpenCode) —
233
233
  default for owner DMs, dashboard chat, the activity scan, and the
234
- morning / evening / weekly review routines.
234
+ morning / evening / weekly review routines. (Sonnet 4.6 became a
235
+ `(legacy)` pin when Sonnet 5 shipped on 2026-06-30.)
235
236
  - **Lite / Delegated** (Claude Haiku 4.5, `gpt-5.4-mini` on Codex,
236
237
  `gemini-3.1-flash-lite-preview` on Gemini, Haiku 4.5 via OpenCode) —
237
238
  reserved for mechanical / delegated surfaces: Gmail classification,
@@ -261,7 +262,7 @@ in 2026-05 to trim morning-routine input tokens by ~24%.
261
262
 
262
263
  ## Observation
263
264
 
264
- One row in the `observations` table. A change record a polling
265
+ One row in the `observations` table. A change record that a polling
265
266
  integration (Obsidian, Git, Notion, calendar, mail, browser history)
266
267
  or a `routine.fetch_window` pre-pass wrote into SQLite. The
267
268
  `routine.activity_scan` is the consumer — there is no per-change
@@ -271,7 +272,8 @@ to break the agent-observing-its-own-writes loop. See
271
272
 
272
273
  ## ProcessKey
273
274
 
274
- The branded string identifier for a class of agent invocation, e.g.
275
+ The typed string identifier (a "branded" string in the TypeScript code)
276
+ for a class of agent invocation, e.g.
275
277
  `routine.morning_routine`, `message.dm`, `dashboard.docs_qa`. Drives
276
278
  backend selection, skill manifest, agent profile, and task-flow
277
279
  template lookup. Defined in `packages/shared/src/process-key.ts`.
@@ -18,12 +18,10 @@ summary: |
18
18
  prompt for every run; runs appear on the Agent's detail page.
19
19
  section: add-a-custom-routine
20
20
  tags:
21
- - guides
22
21
  - agents
23
22
  - routines
24
23
  - scheduler
25
24
  - autonomous
26
- - core
27
25
  status: stable
28
26
  ask_examples:
29
27
  - How do I create a recurring agent?
@@ -32,7 +30,7 @@ ask_examples:
32
30
  - Where do I see my agent's runs?
33
31
  locale: en-US
34
32
  created: 2026-04-25
35
- updated: 2026-06-10
33
+ updated: 2026-07-01
36
34
  keywords:
37
35
  - recurring agent
38
36
  - new agent
@@ -60,8 +58,8 @@ related:
60
58
 
61
59
  ## Goal
62
60
 
63
- Make the agent fire a particular kind of work on a schedule you pick
64
- as a user **Agent** you can watch, tune, and toggle from `/agents`.
61
+ Run a task you write on a schedule you pick, packaged as a user
62
+ **Agent** you can watch, tune, and toggle from `/agents`.
65
63
 
66
64
  ## Prerequisites
67
65
 
@@ -89,7 +87,7 @@ as a user **Agent** you can watch, tune, and toggle from `/agents`.
89
87
  becomes the Markdown body of `agent.md` and is the prompt the
90
88
  agent receives every time it fires.
91
89
  - An **Advanced (YAML)** toggle reveals the raw `agent.md` editor
92
- for long-tail fields the form doesn't expose (tags, tools,
90
+ for the extra fields the form doesn't expose (tags, tools,
93
91
  success criteria, error handling).
94
92
  3. Save. The dashboard writes `policies/agents/<slug>/agent.md`
95
93
  through the context vault and opens the new Agent's detail page;
@@ -114,7 +112,10 @@ curl -X POST http://localhost:8321/api/agents \
114
112
  ```
115
113
 
116
114
  - **`prompt` becomes the Agent's task prompt** — it is stored as the
117
- Markdown body of `agent.md` and sent to the agent on every run.
115
+ Markdown body of `agent.md` and sent to the agent on every run. It
116
+ must be a real task definition: an empty body or a stand-in like
117
+ `"placeholder"`/`"TODO"` is rejected as `400 invalid_definition`
118
+ (the agent would skip every run as too ambiguous to act on).
118
119
  - **`schedule`** takes one of two forms: a raw 5-field cron
119
120
  (`{ "kind": "cron", "expression": "0 11 * * 2" }`, interpreted in
120
121
  the daemon's timezone unless `schedule.timezone` is set) or a
@@ -122,8 +123,8 @@ curl -X POST http://localhost:8321/api/agents \
122
123
  "weekly", "daysOfWeek": ["tuesday"], "time": "11:00" } }`).
123
124
  `/agents` is recurring-only — a one-time task belongs on
124
125
  `POST /api/schedule` instead.
125
- - **`backend.tier`** is optional; omitted, the Agent inherits the
126
- `agent.task` process default (medium). `backend.process_key`
126
+ - **`backend.tier`** is optional; if you omit it, the Agent inherits
127
+ the `agent.task` process default (medium). `backend.process_key`
127
128
  defaults to `agent.task` — you don't need to set it.
128
129
  - **`limits`** defaults: 20 turns, $0.25 per run, 10-minute timeout.
129
130
  - Success returns `201 { "status": "created", "slug": ... }`. A taken
@@ -152,9 +153,13 @@ curl -X POST http://localhost:8321/api/agents \
152
153
  - `400 invalid_definition` — fix the fields listed in `issues`.
153
154
  - `400 one_shot_not_supported` — `/agents` is recurring-only; use
154
155
  `POST /api/schedule` for one-time work.
155
- - A prompt that hits the absolute-block guardrails: the run fires but
156
- the offending tool call is logged as `blocked_absolute` in the
157
- action log.
156
+ - **Run now** returns `409 agent_prompt_placeholder` the Agent's
157
+ stored prompt is empty or still a placeholder stub (possible for
158
+ Agents created before this was validated); write the real task into
159
+ its `agent.md` and try again.
160
+ - A prompt that trips the absolute-block guardrails — the run still
161
+ executes, but the offending tool call is logged as `blocked_absolute`
162
+ in the action log.
158
163
 
159
164
  ## Migrating From Custom Routines
160
165
 
@@ -17,7 +17,6 @@ summary: |
17
17
  this directory, so re-register them after a restore.
18
18
  section: backup-and-restore
19
19
  tags:
20
- - guides
21
20
  - operations
22
21
  - backup
23
22
  status: stable
@@ -27,7 +26,7 @@ ask_examples:
27
26
  - Why are my API keys gone after restoring a backup?
28
27
  locale: en-US
29
28
  created: 2026-04-25
30
- updated: 2026-05-28
29
+ updated: 2026-07-01
31
30
  keywords:
32
31
  - backup
33
32
  - restore
@@ -46,12 +45,12 @@ related:
46
45
 
47
46
  ## Goal
48
47
 
49
- Capture all of Aitne's durable state in a single tar archive you can
50
- restore later — on this machine or a fresh one.
48
+ Save everything Aitne keeps on disk into a single tar archive (a `.tgz`
49
+ file) that you can restore later — on this machine or a new one.
51
50
 
52
51
  ## What's in the backup (and what isn't)
53
52
 
54
- Everything Aitne persists lives under `PA_DATA_DIR` (default
53
+ Everything Aitne saves lives under `PA_DATA_DIR` (default
55
54
  `~/.personal-agent`), so backing up that one directory captures it all:
56
55
 
57
56
  - `data/personal_agent.db` — sessions, actions, observations, FTS index
@@ -72,8 +71,9 @@ Both are re-added through the dashboard after restore.
72
71
 
73
72
  ## Steps
74
73
 
75
- 1. **Stop the daemon** so the SQLite write-ahead log is checkpointed and
76
- the snapshot is consistent:
74
+ 1. **Stop the daemon** (Aitne's background service). This flushes any
75
+ pending database writes to disk — the SQLite write-ahead log is
76
+ checkpointed — so your snapshot is a clean, consistent copy:
77
77
 
78
78
  ```bash
79
79
  aitne stop
@@ -95,7 +95,8 @@ Both are re-added through the dashboard after restore.
95
95
  ```
96
96
 
97
97
  Schema migrations run automatically on the first boot (see below), so
98
- an older DB is brought up to the current shape without extra steps.
98
+ Aitne upgrades an older database to the current shape without extra
99
+ steps.
99
100
 
100
101
  4. **Re-register secrets and re-pair messaging** through the dashboard —
101
102
  they were never in the tar.
@@ -109,16 +110,18 @@ Both are re-added through the dashboard after restore.
109
110
  ## If It Fails
110
111
 
111
112
  - **Schema mismatch on restore.** Aitne ships forward-only schema
112
- migrations applied automatically at boot (see
113
- [Schema Migration](../glossary.md#schema-migration)), so a restored DB
114
- from an older daemon version usually just works — the migration runner
115
- brings it up to the current shape on the next start. Only fall back to
116
- dropping the DB (see [Reinstall Cleanly](reinstall-cleanly.md)) if the
117
- daemon refuses to start *after* you've checked the log
118
- (`aitne logs`) for a real migration error.
113
+ migrations they only ever upgrade a database, never downgrade it —
114
+ and applies them automatically at boot (see
115
+ [Schema Migration](../glossary.md#schema-migration)), so a restored
116
+ database from an older daemon version usually just works: the migration
117
+ runner brings it up to the current shape on the next start. Only fall
118
+ back to dropping the database (see
119
+ [Reinstall Cleanly](reinstall-cleanly.md)) if the daemon refuses to
120
+ start *after* you've checked the log (`aitne logs`) for a real
121
+ migration error.
119
122
  - **The agent can't reach its backends after restore.** That's the
120
123
  missing keychain secrets — re-add your API keys in the dashboard
121
- (Step 4). The DB and context restore fine without them.
124
+ (Step 4). The database and context restore fine without them.
122
125
 
123
126
  ## Moving to a different machine?
124
127
 
@@ -15,7 +15,6 @@ summary: |
15
15
  to tune the threshold.
16
16
  section: budget-and-cost-for-wiki
17
17
  tags:
18
- - guides
19
18
  - wiki
20
19
  - cost
21
20
  - approval
@@ -27,7 +26,7 @@ ask_examples:
27
26
  - What does the pre-compile snapshot do?
28
27
  locale: en-US
29
28
  created: 2026-05-12
30
- updated: 2026-06-07
29
+ updated: 2026-07-01
31
30
  keywords:
32
31
  - wiki budget
33
32
  - wiki cost
@@ -56,90 +55,86 @@ ui_anchors:
56
55
 
57
56
  # Wiki Budgets and Cost
58
57
 
59
- The wiki ships with three cost knobs you can tune in
60
- **Settings Wiki** (`/settings/wiki`):
58
+ This is the operator's walkthrough for keeping wiki spending under
59
+ control. For the deep mechanics — exactly how the estimate is
60
+ computed and how the approval gate decides — see
61
+ [features/wiki/cost-and-approval](../features/wiki/cost-and-approval.md).
61
62
 
62
- 1. **Per-command model selector** for each wiki process. The model
63
- picker covers the full set: `wiki.ingest_url`, `wiki.compile`,
64
- `wiki.ask`, plus the operational triad `wiki.lint`, `wiki.trace`,
65
- `wiki.connect`. Each defaults to your main backend at the medium
66
- tier; downgrade `wiki.ingest_url` to a lite tier if you ingest a
67
- lot of URLs.
63
+ The wiki gives you three cost knobs, all in **Settings → Wiki**
64
+ (`/settings/wiki`):
65
+
66
+ 1. **Per-command model picker** one model per wiki process. The
67
+ picker covers `wiki.ingest_url`, `wiki.compile`, and `wiki.ask`,
68
+ plus the operational trio `wiki.lint`, `wiki.trace`, and
69
+ `wiki.connect`. Each starts on your main backend at the medium
70
+ tier. If you ingest a lot of URLs, drop `wiki.ingest_url` to a lite
71
+ tier to save money.
68
72
  2. **Per-process budget cap** (`max_budget_usd` on each row). The
69
- dispatcher's per-session budget envelope is the enforcer.
73
+ dispatcher's per-session budget envelope enforces it.
70
74
  3. **Per-workspace `!compile full` approval threshold** (default
71
- $2.00, range $0–$100). The cost estimator brackets the expected
72
- spend at 0.5× / 1× / 2× the estimated input-token count; if the
73
- pessimistic (2×) estimate breaches the threshold, the bang handler
74
- escalates to the approval queue instead of running autonomously.
75
+ $2.00, range $0–$100). The estimator brackets the likely spend at
76
+ 0.5× / 1× / 2× the estimated input-token count; if the worst-case
77
+ (2×) number crosses the threshold, `!compile full` asks for
78
+ approval instead of running on its own.
75
79
 
76
80
  ## What the Estimator Does
77
81
 
78
82
  `!compile full` is the most expensive wiki command because a full
79
- rebuild touches every raw note. The estimator is **pure JS** it
80
- does not spawn an agent (spawning one to estimate would itself burn
81
- budget). It walks the `10_raw/` layer, approximates each file's token
82
- count from its on-disk character count, sums the total, and brackets:
83
-
84
- ```
85
- expected_usd = total_estimated_input_tokens / 1000 × $0.003
86
- optimistic = 0.5 × expected
87
- pessimistic = 2.0 × expected
88
- ```
89
-
90
- Per-file token approximation is script-aware: ~4 characters per token
91
- for Latin/prose, ~1.5 for majority-CJK files, with a 200-token floor
92
- per file so empty or one-line stubs still account for the fixed
93
- per-call overhead (system prompt, skills bundle, tool docs). The unit
94
- cost (`$0.003` per 1k tokens) matches Claude Sonnet 4.6's ~$3 /
95
- Mtoken input price. The bracket lets you see a worst case before
96
- approving.
83
+ rebuild touches every raw note. Before it runs, a small piece of
84
+ plain JavaScript estimates the cost it never spawns an agent, since
85
+ spawning one just to estimate would itself burn budget. It walks the
86
+ `10_raw/` layer, approximates each file's token count from its size on
87
+ disk, and reports a low/high bracket so you can weigh a worst case
88
+ before you approve. For the exact character-to-token ratios and the
89
+ 0.5× / bracket math, see
90
+ [features/wiki/cost-and-approval](../features/wiki/cost-and-approval.md).
91
+
92
+ The unit cost (`$0.003` per 1k tokens) matches Claude Sonnet 5's ~$3
93
+ / Mtoken standard input price. (An introductory $2 / Mtoken rate runs
94
+ through 2026-08-31; the estimate lists the standard rate, while the
95
+ SDK's billed `total_cost_usd` reflects the intro price during the
96
+ window.)
97
97
 
98
98
  > The dashboard surfaces the top raw files by estimated token count,
99
99
  > so you can see which sources dominate the bill before approving.
100
- > An older flat heuristic (`raw_count × 1500 tokens`) survives as an
101
- > opt-in fallback for deterministic banner copy, but the default is
102
- > the per-file character scan described above.
103
100
 
104
101
  ## Where the Gate Fires
105
102
 
106
- - **Below threshold**: the compile runs autonomously and you get a
107
- completion DM with actual spend.
108
- - **Above threshold**: the bang handler inserts an `agent_schedule`
109
- row with `task_type='approval'`, DMs you the estimate, and pauses.
110
- The request shows up as an **Approvals** card on the dashboard home
111
- page (`/`); the `/settings/wiki` page also points you there.
112
- Clicking **Approve** flips the row to `task_type='approved_task'`
113
- and the scheduler picks it up — only then is the pre-compile git
114
- snapshot taken (see below) and the compile session spawned.
103
+ - **Below threshold**: the compile runs on its own, and you get a
104
+ completion DM with the actual spend.
105
+ - **Above threshold**: the compile pauses. It inserts an
106
+ `agent_schedule` row with `task_type='approval'`, DMs you the
107
+ estimate, and waits. The request shows up as an **Approvals** card
108
+ on the dashboard home page (`/`); the `/settings/wiki` page also
109
+ points you there. When you click **Approve**, the row flips to
110
+ `task_type='approved_task'` and the scheduler picks it up — only
111
+ then does Aitne take the pre-compile git snapshot (see below) and
112
+ start the compile session.
115
113
 
116
- If you change your mind, hit **Deny** on the approval card the row
117
- flips to `skipped`, no git commit is made, and no agent session is
118
- spawned.
114
+ Changed your mind? Click **Deny** on the approval card. The row flips
115
+ to `skipped`, no git commit is made, and no agent session runs.
119
116
 
120
117
  ## Git Pre-Compile Snapshot
121
118
 
122
119
  On an external workspace that is a git repo and has **Auto-commit
123
- before `!compile full`** enabled, Aitne runs:
124
-
125
- ```
126
- git -C <vault> status --porcelain
127
- # must be emptydirty trees refuse the operation entirely
128
- git -C <vault> add -A
129
- git -C <vault> commit --allow-empty -m "aitne wiki: pre-compile snapshot <ISO-8601-ts>"
130
- ```
131
-
132
- before the compile session starts. The commit message is
133
- deterministic so you can roll back with `git reset --hard HEAD~1` if
134
- the compile produces a surprise. The `--no-verify` flag is not used —
135
- your pre-commit hooks run as normal.
120
+ before `!compile full`** enabled, Aitne commits the vault
121
+ (`git add -A && git commit`) just before the compile session starts,
122
+ giving you a rollback point. If the compile produces a surprise,
123
+ `git reset --hard HEAD~1` puts the vault back. A dirty working tree
124
+ refuses the operation entirelycommit or stash first, then re-run.
125
+ The commit runs your normal pre-commit hooks (the `--no-verify` flag
126
+ is not used).
136
127
 
137
128
  The estimate DM tells you which snapshot path applies:
138
129
  **"will commit before compile starts"** (clean repo), **"not taken
139
130
  (no git repo)"**, **"disabled by setting"** (auto-commit off), or
140
131
  **"not applicable"** for internal-mode workspaces — those recover via
141
132
  `md_file_snapshots` instead of git. When no git backup will be taken,
142
- you can decide whether to add one before approving.
133
+ you can add one yourself before approving.
134
+
135
+ For the full state-by-state table of what the snapshot gate does in
136
+ each workspace configuration, see
137
+ [features/wiki/cost-and-approval](../features/wiki/cost-and-approval.md).
143
138
 
144
139
  ## Tuning the Threshold
145
140
 
@@ -14,7 +14,6 @@ summary: |
14
14
  notes, and ask a question against the vault.
15
15
  section: build-your-wiki
16
16
  tags:
17
- - guide
18
17
  - wiki
19
18
  - knowledge
20
19
  status: stable
@@ -24,7 +23,7 @@ ask_examples:
24
23
  - How do I compile my ingested notes into wiki articles?
25
24
  locale: en-US
26
25
  created: 2026-05-12
27
- updated: 2026-05-28
26
+ updated: 2026-07-01
28
27
  keywords:
29
28
  - wiki
30
29
  - build wiki
@@ -53,14 +52,14 @@ prerequisites:
53
52
 
54
53
  ## Goal
55
54
 
56
- Stand up the internal wiki, capture a URL, compile it into a wiki
57
- article, and run a question against the result.
55
+ Turn on the internal wiki, capture a URL, compile it into a wiki
56
+ article, and ask a question about the result.
58
57
 
59
58
  ## Prerequisites
60
59
 
61
60
  - A paired messaging channel (Telegram, Slack, Discord, WhatsApp, or
62
61
  dashboard chat) — see
63
- [Pairing and the Magic Phrase](../messaging/pairing-and-magic-phrase.md).
62
+ [Pairing and the Magic Phrase](../features/messaging/pairing-and-magic-phrase.md).
64
63
  - The daemon is running and the dashboard is reachable.
65
64
 
66
65
  ## Where you'll work in the dashboard
@@ -71,8 +70,8 @@ browsing lives under **My Life**.
71
70
 
72
71
  - **My Life → Wiki** (`/wiki`) — your main entry point. Shows
73
72
  workspace stats, the compiled `_index.md`, and recent activity. When
74
- the wiki is not enabled yet, this page renders an **Enable Wiki**
75
- call-to-action.
73
+ the wiki is not enabled yet, this page shows an **Enable Wiki**
74
+ button instead.
76
75
  - **Setup → Settings → Wiki** (`/settings/wiki`) — workspace creation,
77
76
  internal/external mode, per-command model selectors, budgets,
78
77
  archive / delete.
@@ -101,8 +100,8 @@ you enable a workspace, so you do not need to remember the URL.
101
100
  number of URLs queued.
102
101
  5. Wait for the per-URL completion DMs (parallel mode) or the single
103
102
  summary reply (serial mode).
104
- 6. Run `!compile` to compile raw captures into wiki articles. The
105
- compile session synthesises `20_wiki/<slug>.md` files and updates
103
+ 6. Run `!compile` to turn your raw captures into wiki articles. The
104
+ compile session writes `20_wiki/<slug>.md` files and updates
106
105
  `20_wiki/_index.md`.
107
106
  7. Ask a question: `!ask What did this source say about X?`. The
108
107
  answer is written to `30_outputs/<YYYY-MM-DD>-<slug>.md` with
@@ -115,9 +114,9 @@ returns the command list.
115
114
  ## What to Try Next
116
115
 
117
116
  - **Send multiple URLs at once**: `!ingest https://a.com, https://b.com`
118
- fans out in parallel by default. Switch to serial mode on
119
- `/settings/wiki` when you care about ordering and rate
120
- predictability.
117
+ processes them in parallel (all at once) by default. Switch to serial
118
+ mode on `/settings/wiki` when you want them handled one at a time, for
119
+ predictable ordering and request pacing.
121
120
  - **Point at an existing Obsidian vault** instead of the daemon-owned
122
121
  root — see [Use An Existing Obsidian Vault](use-an-existing-obsidian-vault.md).
123
122
  - **Tune the budget** for `wiki.compile` and `wiki.ingest_url` from
@@ -14,7 +14,6 @@ summary: |
14
14
  reasoning, or run a routine on Codex while Claude stays the default.
15
15
  section: change-which-model-handles-x
16
16
  tags:
17
- - guide
18
17
  - backends
19
18
  - operations
20
19
  - routing
@@ -25,7 +24,7 @@ ask_examples:
25
24
  - Can I change the model for just one ProcessKey?
26
25
  locale: en-US
27
26
  created: 2026-04-25
28
- updated: 2026-05-28
27
+ updated: 2026-07-01
29
28
  keywords:
30
29
  - per-process model
31
30
  - /settings/models
@@ -54,50 +53,53 @@ config_keys:
54
53
 
55
54
  ## Goal
56
55
 
57
- Override the default backend or model tier for a **single** ProcessKey
58
- without changing the global default. Use this when one surface needs a
59
- stronger (or cheaper) model than the seeded default for example,
60
- pinning the evening review to Opus (high tier), or pushing a noisy
61
- delegated routine onto Gemini to save Claude quota.
56
+ Change the backend or model tier for a **single** ProcessKey — the label
57
+ the agent gives to one kind of work, such as `routine.evening_review`
58
+ without touching the global default. Reach for this when one job needs a
59
+ stronger (or cheaper) model than the shipped default: pin the evening
60
+ review to Opus (high tier), or push a noisy delegated routine onto Gemini
61
+ to save your Claude quota.
62
62
 
63
63
  ## Steps
64
64
 
65
65
  1. Open `/settings/models`.
66
66
  2. Find the ProcessKey row in the per-process table (e.g.
67
67
  `routine.evening_review`).
68
- 3. Set its **main backend** and **tier** explicitly. The tier maps to a
68
+ 3. Set its **main backend** and **tier** explicitly. Each tier picks a
69
69
  model class — `lite` → Haiku-class, `medium` → Sonnet-class,
70
- `high` → Opus-class. Optionally set a **fallback** backend too.
71
- 4. Save. The row is now marked operator-edited and will keep your pin
72
- through a defaults reset (only an install-time `force` re-seed
73
- overwrites it).
70
+ `high` → Opus-class. You can also set a **fallback** backend to use if
71
+ the main one is unavailable.
72
+ 4. Save. The row is now marked operator-edited, so it keeps your pin
73
+ through a defaults reset — only an install-time `force` re-seed
74
+ overwrites it.
74
75
 
75
76
  ## Concrete Example
76
77
 
77
78
  To give the evening review deeper reasoning, set
78
79
  `routine.evening_review` → main `claude`, tier `high`. The next evening
79
- run resolves to **Opus 4.8** instead of the default Sonnet 4.6. The
80
- execution budget for that run also scales with the tier (high tier
81
- carries a larger turn / cost envelope than medium).
80
+ run then uses **Opus 4.8** instead of the default Sonnet 5. The run's
81
+ budget scales with the tier too — high tier carries a larger turn and
82
+ cost envelope than medium.
82
83
 
83
84
  ## Verification
84
85
 
85
- - The next fire of that ProcessKey shows the new backend and model in
86
- the **Activity** event detail (after fallback resolution).
86
+ - The next time that ProcessKey runs, its **Activity** event detail
87
+ shows the new backend and model (after fallback resolution).
87
88
 
88
89
  ## Caveats
89
90
 
90
- - **`dashboard.docs_qa` is tier-locked to `medium`** — a high/lite pin
91
- on that row is ignored by the router. It also inherits its backend
92
- from `message.dm`'s pin.
93
- - **High tier is opt-in, not auto-selected.** No install-time-seeded
94
- surface defaults to high; the only `high`-tagged ProcessKey shipped is
95
- `delegated_task_heavy`, gated behind the `delegatedTaskHeavyEnabled`
96
- config flag. Any *other* ProcessKey can still be pinned to high here.
97
- - **On Codex and Gemini there is no separately-seeded high model** —
98
- their high tier collapses to the medium model, so pinning those
99
- backends to high won't change the model unless you pick a specific
100
- higher model in the row.
91
+ - **`dashboard.docs_qa` is tier-locked to `medium`** — the router
92
+ ignores a high or lite pin on that row. It also takes its backend from
93
+ whatever `message.dm` is pinned to.
94
+ - **High tier is opt-in, never auto-selected.** No shipped surface
95
+ defaults to high. The only `high`-tagged ProcessKey out of the box is
96
+ `delegated_task_heavy`, and that stays behind the
97
+ `delegatedTaskHeavyEnabled` config flag. You can still pin any *other*
98
+ ProcessKey to high here.
99
+ - **Codex and Gemini ship no separate high model.** On those backends
100
+ the high tier falls back to the medium model, so pinning them to high
101
+ changes nothing unless you also pick a specific higher model in the
102
+ row.
101
103
  - To change the backend for *every* ProcessKey at once, use the global
102
104
  default instead — see Related.
103
105