@aitne-sh/aitne 0.1.8 → 0.1.9

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 (276) hide show
  1. package/README.md +218 -161
  2. package/agent-assets/agent-profiles/_safety.md +3 -3
  3. package/agent-assets/agent-profiles/browser-task.md +108 -0
  4. package/agent-assets/agent-profiles/conversational.md +3 -3
  5. package/agent-assets/agent-profiles/profile-importer.md +2 -2
  6. package/agent-assets/agent-profiles/routine-fetch-window.md +30 -19
  7. package/agent-assets/agents/context-index-reconcile/agent.md +52 -0
  8. package/agent-assets/agents/evening-review/agent.md +53 -0
  9. package/agent-assets/agents/hourly-check/agent.md +62 -0
  10. package/agent-assets/agents/monthly-review/agent.md +55 -0
  11. package/agent-assets/agents/morning-routine/agent.md +78 -0
  12. package/agent-assets/agents/roadmap-maintenance/agent.md +52 -0
  13. package/agent-assets/agents/skill-curation/agent.md +52 -0
  14. package/agent-assets/agents/user-profile-sweep-evening/agent.md +48 -0
  15. package/agent-assets/agents/user-profile-sweep-morning/agent.md +53 -0
  16. package/agent-assets/agents/weekly-review/agent.md +51 -0
  17. package/agent-assets/docs/concepts/agent-day.md +13 -11
  18. package/agent-assets/docs/concepts/auth-health.md +47 -10
  19. package/agent-assets/docs/concepts/backends-and-tiers.md +66 -31
  20. package/agent-assets/docs/concepts/costs-and-quotas.md +50 -15
  21. package/agent-assets/docs/concepts/delegated-mode.md +52 -13
  22. package/agent-assets/docs/concepts/memory-model.md +72 -32
  23. package/agent-assets/docs/concepts/observations.md +49 -11
  24. package/agent-assets/docs/concepts/process-keys.md +56 -22
  25. package/agent-assets/docs/concepts/routines.md +60 -33
  26. package/agent-assets/docs/concepts/safety-and-execution.md +50 -21
  27. package/agent-assets/docs/concepts/safety-model.md +42 -34
  28. package/agent-assets/docs/concepts/skills.md +33 -17
  29. package/agent-assets/docs/features/integrations/browser-history.md +195 -0
  30. package/agent-assets/docs/features/integrations/calendar.md +39 -29
  31. package/agent-assets/docs/features/integrations/git.md +18 -7
  32. package/agent-assets/docs/features/integrations/github.md +84 -33
  33. package/agent-assets/docs/features/integrations/mail.md +59 -16
  34. package/agent-assets/docs/features/integrations/notion.md +18 -6
  35. package/agent-assets/docs/features/integrations/obsidian.md +28 -5
  36. package/agent-assets/docs/features/lifestyle/git.md +42 -38
  37. package/agent-assets/docs/features/lifestyle/reading.md +50 -22
  38. package/agent-assets/docs/features/lifestyle/receipts.md +51 -21
  39. package/agent-assets/docs/features/lifestyle/travel-bookings.md +76 -14
  40. package/agent-assets/docs/features/memory-files/agent-journal.md +111 -50
  41. package/agent-assets/docs/features/memory-files/projects.md +71 -17
  42. package/agent-assets/docs/features/memory-files/roadmap.md +50 -10
  43. package/agent-assets/docs/features/memory-files/schedule.md +113 -70
  44. package/agent-assets/docs/features/memory-files/today.md +46 -21
  45. package/agent-assets/docs/features/memory-files/user-profile.md +63 -33
  46. package/agent-assets/docs/features/messaging/bang-commands.md +113 -36
  47. package/agent-assets/docs/features/messaging/dashboard-chat.md +43 -21
  48. package/agent-assets/docs/features/messaging/discord.md +35 -4
  49. package/agent-assets/docs/features/messaging/overview.md +37 -19
  50. package/agent-assets/docs/features/messaging/pairing-and-magic-phrase.md +94 -27
  51. package/agent-assets/docs/features/messaging/slack.md +67 -14
  52. package/agent-assets/docs/features/messaging/telegram.md +18 -5
  53. package/agent-assets/docs/features/messaging/whatsapp.md +71 -17
  54. package/agent-assets/docs/features/operations/activity-and-conversations.md +44 -15
  55. package/agent-assets/docs/features/operations/approvals.md +48 -16
  56. package/agent-assets/docs/features/operations/backend-routing.md +68 -16
  57. package/agent-assets/docs/features/operations/cost-tracking.md +84 -17
  58. package/agent-assets/docs/features/operations/managed-chromium.md +221 -0
  59. package/agent-assets/docs/features/operations/notifications.md +52 -11
  60. package/agent-assets/docs/features/operations/quiet-hours.md +63 -40
  61. package/agent-assets/docs/features/operations/schedule-approaching.md +54 -24
  62. package/agent-assets/docs/features/routines/custom-routines.md +88 -20
  63. package/agent-assets/docs/features/routines/evening-review.md +74 -21
  64. package/agent-assets/docs/features/routines/hourly-check.md +149 -29
  65. package/agent-assets/docs/features/routines/morning-routine.md +53 -35
  66. package/agent-assets/docs/features/routines/weekly-review.md +40 -21
  67. package/agent-assets/docs/features/wiki/commands.md +26 -16
  68. package/agent-assets/docs/features/wiki/cost-and-approval.md +240 -0
  69. package/agent-assets/docs/features/wiki/dashboard.md +255 -0
  70. package/agent-assets/docs/features/wiki/overview.md +68 -10
  71. package/agent-assets/docs/features/wiki/search.md +248 -0
  72. package/agent-assets/docs/features/wiki/workspaces.md +254 -0
  73. package/agent-assets/docs/getting-started/01-what-is-this.md +34 -23
  74. package/agent-assets/docs/getting-started/02-first-steps.md +13 -8
  75. package/agent-assets/docs/getting-started/03-what-can-this-do.md +25 -14
  76. package/agent-assets/docs/getting-started/04-first-day.md +38 -20
  77. package/agent-assets/docs/glossary.md +235 -24
  78. package/agent-assets/docs/guides/add-a-custom-routine.md +63 -23
  79. package/agent-assets/docs/guides/backup-and-restore.md +80 -16
  80. package/agent-assets/docs/guides/budget-and-cost-for-wiki.md +56 -25
  81. package/agent-assets/docs/guides/build-your-wiki.md +22 -9
  82. package/agent-assets/docs/guides/change-which-model-handles-x.md +64 -10
  83. package/agent-assets/docs/guides/connect-a-new-mail-account.md +64 -15
  84. package/agent-assets/docs/guides/explore-with-trace-and-connect.md +28 -11
  85. package/agent-assets/docs/guides/import-knowledge-file.md +50 -40
  86. package/agent-assets/docs/guides/install-and-run.md +48 -19
  87. package/agent-assets/docs/guides/maintain-wiki-health.md +35 -10
  88. package/agent-assets/docs/guides/migrate-machines.md +74 -18
  89. package/agent-assets/docs/guides/multiple-wikis-for-multiple-domains.md +111 -60
  90. package/agent-assets/docs/guides/pause-the-agent.md +65 -24
  91. package/agent-assets/docs/guides/reinstall-cleanly.md +88 -18
  92. package/agent-assets/docs/guides/setup-wizard.md +113 -54
  93. package/agent-assets/docs/guides/switch-default-backend.md +62 -16
  94. package/agent-assets/docs/guides/use-an-existing-obsidian-vault.md +26 -10
  95. package/agent-assets/docs/reference/api.md +143 -32
  96. package/agent-assets/docs/reference/cli-commands.md +38 -17
  97. package/agent-assets/docs/reference/config.md +224 -49
  98. package/agent-assets/docs/reference/disallowed-tools.md +29 -10
  99. package/agent-assets/docs/reference/keyboard-shortcuts.md +34 -10
  100. package/agent-assets/docs/reference/knowledge-layout.md +620 -0
  101. package/agent-assets/docs/reference/process-keys.md +61 -5
  102. package/agent-assets/docs/reference/skills.md +38 -12
  103. package/agent-assets/docs/troubleshooting/auth-failed.md +48 -19
  104. package/agent-assets/docs/troubleshooting/dashboard-shows-degraded.md +90 -28
  105. package/agent-assets/docs/troubleshooting/fallback-keeps-firing.md +86 -22
  106. package/agent-assets/docs/troubleshooting/messaging-not-pairing.md +68 -24
  107. package/agent-assets/docs/troubleshooting/morning-routine-didnt-run.md +80 -20
  108. package/agent-assets/docs/troubleshooting/observation-not-detected.md +73 -21
  109. package/agent-assets/docs/troubleshooting/quota-exhausted.md +29 -5
  110. package/agent-assets/docs/troubleshooting/wiki-ingest-full-blocked.md +126 -54
  111. package/agent-assets/docs/troubleshooting/wiki-write-failed.md +29 -12
  112. package/agent-assets/optimizer-skills/drift-analysis/SKILL.md +1 -1
  113. package/agent-assets/optimizer-skills/knowledge-map/SKILL.md +1 -1
  114. package/agent-assets/optimizer-skills/skill-curation/SKILL.md +1 -1
  115. package/agent-assets/sandbox/linux/aitne-chromium.apparmor +91 -0
  116. package/agent-assets/sandbox/macos/aitne-chromium.sb +156 -0
  117. package/agent-assets/skills/agent-actions/SKILL.md +2 -2
  118. package/agent-assets/skills/agent-create/SKILL.md +149 -0
  119. package/agent-assets/skills/attach/SKILL.md +2 -2
  120. package/agent-assets/skills/browser-history/SKILL.md +198 -0
  121. package/agent-assets/skills/browser-history-respond/SKILL.md +106 -0
  122. package/agent-assets/skills/browser-task/SKILL.md +169 -0
  123. package/agent-assets/skills/context/SKILL.md +12 -12
  124. package/agent-assets/skills/context/curation.json +2 -2
  125. package/agent-assets/skills/context/references/api.md +43 -31
  126. package/agent-assets/skills/context/references/required-frontmatter.md +3 -3
  127. package/agent-assets/skills/context/references/snapshot-files.md +6 -6
  128. package/agent-assets/skills/context/seeds/file-responsibilities.seed.json +3 -3
  129. package/agent-assets/skills/docs-search/SKILL.md +4 -3
  130. package/agent-assets/skills/external-services/SKILL.delegated.claude.md +11 -21
  131. package/agent-assets/skills/external-services/SKILL.delegated.codex.md +11 -21
  132. package/agent-assets/skills/external-services/SKILL.delegated.gemini.md +11 -21
  133. package/agent-assets/skills/external-services/SKILL.md +3 -3
  134. package/agent-assets/skills/external-services/SKILL.native.claude.md +5 -5
  135. package/agent-assets/skills/external-services/SKILL.native.codex.md +7 -7
  136. package/agent-assets/skills/external-services/SKILL.native.gemini.md +4 -4
  137. package/agent-assets/skills/external-services/references/calendar-apple.md +2 -2
  138. package/agent-assets/skills/external-services/references/calendar-outlook.md +1 -1
  139. package/agent-assets/skills/external-services/references/obsidian.md +2 -2
  140. package/agent-assets/skills/gmail-lifestyle/SKILL.md +9 -82
  141. package/agent-assets/skills/mail/SKILL.delegated.claude.md +14 -5
  142. package/agent-assets/skills/mail/SKILL.delegated.codex.md +8 -4
  143. package/agent-assets/skills/mail/SKILL.delegated.gemini.md +8 -4
  144. package/agent-assets/skills/mail/references/api.md +4 -2
  145. package/agent-assets/skills/mail/references/providers.md +1 -1
  146. package/agent-assets/skills/managed-tasks/SKILL.md +9 -9
  147. package/agent-assets/skills/managed-tasks/references/errors.md +9 -6
  148. package/agent-assets/skills/managed-tasks/references/recurrence-rule.md +1 -1
  149. package/agent-assets/skills/management-policy/SKILL.md +32 -31
  150. package/agent-assets/skills/management-policy/curation.json +1 -1
  151. package/agent-assets/skills/management-policy/references/policy-workflow.md +9 -9
  152. package/agent-assets/skills/management-policy/seeds/policy-file-shape.seed.json +1 -1
  153. package/agent-assets/skills/notify/SKILL.md +4 -4
  154. package/agent-assets/skills/notify/references/priority.md +9 -4
  155. package/agent-assets/skills/notion/SKILL.delegated.claude.md +1 -1
  156. package/agent-assets/skills/notion/SKILL.delegated.codex.md +1 -1
  157. package/agent-assets/skills/notion/SKILL.delegated.gemini.md +1 -1
  158. package/agent-assets/skills/notion/SKILL.native.claude.md +10 -6
  159. package/agent-assets/skills/notion/SKILL.native.codex.md +9 -4
  160. package/agent-assets/skills/notion/SKILL.native.gemini.md +9 -4
  161. package/agent-assets/skills/observations/SKILL.md +24 -8
  162. package/agent-assets/skills/project-doc/SKILL.md +1 -1
  163. package/agent-assets/skills/project-doc/curation.json +3 -3
  164. package/agent-assets/skills/project-doc/seeds/project-shape.seed.json +7 -4
  165. package/agent-assets/skills/project-doc/seeds/slug-grammar.seed.json +3 -3
  166. package/agent-assets/skills/reading/SKILL.md +10 -0
  167. package/agent-assets/skills/reading/references/reading-taste.md +2 -2
  168. package/agent-assets/skills/roadmap/SKILL.md +5 -5
  169. package/agent-assets/skills/roadmap/curation.json +1 -1
  170. package/agent-assets/skills/roadmap/references/api.md +7 -7
  171. package/agent-assets/skills/roadmap/references/cross-check.md +15 -8
  172. package/agent-assets/skills/roadmap/references/migration.md +4 -4
  173. package/agent-assets/skills/roadmap/seeds/entry-types.seed.json +1 -1
  174. package/agent-assets/skills/schedule/SKILL.md +42 -34
  175. package/agent-assets/skills/schedule/references/batch.md +2 -2
  176. package/agent-assets/skills/schedule/references/errors.md +7 -4
  177. package/agent-assets/skills/schedule/references/model-selection.md +3 -3
  178. package/agent-assets/skills/schedule/references/recurrence-rule.md +1 -1
  179. package/agent-assets/skills/scheduled-managed-task/SKILL.md +46 -36
  180. package/agent-assets/skills/today/SKILL.md +9 -9
  181. package/agent-assets/skills/today/curation.json +3 -3
  182. package/agent-assets/skills/today/references/agent-plan-lifecycle.md +6 -5
  183. package/agent-assets/skills/today/seeds/section-shape.seed.json +1 -1
  184. package/agent-assets/skills/user-interview/SKILL.md +12 -9
  185. package/agent-assets/skills/user-interview/references/op-briefing.md +2 -2
  186. package/agent-assets/skills/user-interview/references/sweep-and-fallback.md +8 -0
  187. package/agent-assets/skills/user-profile/SKILL.md +17 -17
  188. package/agent-assets/skills/user-profile/curation.json +2 -2
  189. package/agent-assets/skills/user-profile/references/character-preferences.md +2 -2
  190. package/agent-assets/skills/user-profile/seeds/routing-table.seed.json +8 -8
  191. package/agent-assets/skills/user-profile/seeds/topic-files.seed.json +6 -6
  192. package/agent-assets/skills/wiki/wiki-compile/SKILL.md +4 -4
  193. package/agent-assets/system-prompts/routine-fetch-window.md +22 -12
  194. package/agent-assets/task-flows/_partials/calendar-acquire.google_calendar.md +4 -2
  195. package/agent-assets/task-flows/_partials/calendar-acquire.outlook_calendar.md +4 -2
  196. package/agent-assets/task-flows/_partials/capture-user-info.md +2 -2
  197. package/agent-assets/task-flows/_partials/dm-intent.long-horizon.md +1 -1
  198. package/agent-assets/task-flows/_partials/dm-intent.project.md +9 -9
  199. package/agent-assets/task-flows/_partials/mail-acquire.outlook_mail.md +3 -2
  200. package/agent-assets/task-flows/_partials/notion-acquire.notion.md +10 -5
  201. package/agent-assets/task-flows/browser_task.md +84 -0
  202. package/agent-assets/task-flows/github.assigned.md +1 -1
  203. package/agent-assets/task-flows/github.pull_request.review_requested.md +2 -2
  204. package/agent-assets/task-flows/github.workflow_run.failed.md +2 -2
  205. package/agent-assets/task-flows/knowledge.import.md +14 -14
  206. package/agent-assets/task-flows/message.received.dm.md +9 -4
  207. package/agent-assets/task-flows/message.received.dm_first.md +3 -3
  208. package/agent-assets/task-flows/routine.custom.md +3 -3
  209. package/agent-assets/task-flows/routine.evening_review.md +8 -8
  210. package/agent-assets/task-flows/routine.fetch_window.md +2 -2
  211. package/agent-assets/task-flows/routine.hourly_check.md +16 -12
  212. package/agent-assets/task-flows/routine.monthly_review.md +21 -21
  213. package/agent-assets/task-flows/routine.morning_routine_journal.md +119 -97
  214. package/agent-assets/task-flows/routine.morning_routine_today.md +43 -43
  215. package/agent-assets/task-flows/routine.research_cluster_update.md +35 -0
  216. package/agent-assets/task-flows/routine.research_dispatch.md +38 -0
  217. package/agent-assets/task-flows/routine.research_offer_dm.md +125 -0
  218. package/agent-assets/task-flows/routine.research_wiki_summary.md +53 -0
  219. package/agent-assets/task-flows/routine.roadmap_refresh.md +10 -10
  220. package/agent-assets/task-flows/routine.today_refresh.md +4 -4
  221. package/agent-assets/task-flows/routine.user_profile_sweep.md +10 -10
  222. package/agent-assets/task-flows/routine.weekly_review.md +93 -24
  223. package/agent-assets/task-flows/schedule.approaching.md +0 -1
  224. package/agent-assets/task-flows/scheduled.dm.md +5 -5
  225. package/agent-assets/task-flows/scheduled.task.md +4 -4
  226. package/agent-assets/task-flows/setup.initial.md +21 -21
  227. package/agent-assets/task-flows/setup.update.md +2 -2
  228. package/agent-assets/templates/README.md +27 -20
  229. package/agent-assets/templates/_index.md +42 -26
  230. package/agent-assets/templates/_manifest.json +34 -99
  231. package/agent-assets/templates/{user → identity}/_index.md +1 -1
  232. package/agent-assets/templates/{user → identity}/profile.md +2 -2
  233. package/agent-assets/templates/{dossiers → knowledge/dossiers}/_index.md +1 -1
  234. package/agent-assets/templates/{projects → plans/projects}/_active.base +1 -1
  235. package/agent-assets/templates/policies/_index.md +21 -0
  236. package/agent-assets/templates/{rules → policies}/journal-export.md +1 -1
  237. package/agent-assets/templates/{rules → policies}/journal-format.md +5 -5
  238. package/agent-assets/templates/{rules/policies → policies/management-captures}/_index.md +2 -2
  239. package/agent-assets/templates/{rules → policies}/management.md +3 -3
  240. package/agent-assets/templates/{rules → policies}/mcp.md +1 -1
  241. package/agent-assets/templates/{rules → policies}/redaction.md +1 -1
  242. package/agent-assets/templates/{routines → policies/routines}/_index.md +1 -1
  243. package/agent-assets/templates/{routines → policies/routines}/evening.md +2 -2
  244. package/agent-assets/templates/{routines → policies/routines}/hourly.md +1 -1
  245. package/agent-assets/templates/{routines → policies/routines}/monthly.md +2 -2
  246. package/bin/aitne.mjs +13 -4
  247. package/package.json +5 -4
  248. package/scripts/commands/doctor.mjs +14 -8
  249. package/scripts/commands/run-now.mjs +6 -21
  250. package/scripts/lib/ports.d.mts +27 -0
  251. package/scripts/lib/ports.mjs +36 -0
  252. package/scripts/lib/read-api-token.mjs +176 -0
  253. package/scripts/start.mjs +2 -1
  254. package/agent-assets/docs/features/lifestyle/travel-time.md +0 -58
  255. package/agent-assets/skills/gmail-lifestyle/references/travel-time-api.md +0 -59
  256. package/agent-assets/skills/schedule/references/recurring.md +0 -185
  257. package/agent-assets/templates/context-index.md +0 -42
  258. package/agent-assets/templates/rules/_index.md +0 -19
  259. /package/agent-assets/templates/{user → identity}/expertise.md +0 -0
  260. /package/agent-assets/templates/{user → identity}/goals.md +0 -0
  261. /package/agent-assets/templates/{user → identity}/people.md +0 -0
  262. /package/agent-assets/templates/{user → identity}/personal.md +0 -0
  263. /package/agent-assets/templates/{user → identity}/work.md +0 -0
  264. /package/agent-assets/templates/{agent/journal.md → journal/agent.md} +0 -0
  265. /package/agent-assets/templates/{dossiers → knowledge/dossiers}/evening.md +0 -0
  266. /package/agent-assets/templates/{dossiers → knowledge/dossiers}/hourly.md +0 -0
  267. /package/agent-assets/templates/{dossiers → knowledge/dossiers}/monthly.md +0 -0
  268. /package/agent-assets/templates/{dossiers → knowledge/dossiers}/morning.md +0 -0
  269. /package/agent-assets/templates/{dossiers → knowledge/dossiers}/roadmap.md +0 -0
  270. /package/agent-assets/templates/{dossiers → knowledge/dossiers}/weekly.md +0 -0
  271. /package/agent-assets/templates/{projects → plans/projects}/_index.md +0 -0
  272. /package/agent-assets/templates/{roadmap.md → plans/roadmap.md} +0 -0
  273. /package/agent-assets/templates/{routines → policies/routines}/morning.md +0 -0
  274. /package/agent-assets/templates/{routines → policies/routines}/weekly.md +0 -0
  275. /package/agent-assets/templates/{agent → state}/profile-questions.md +0 -0
  276. /package/agent-assets/templates/{today.md → state/today.md} +0 -0
@@ -17,8 +17,9 @@ section: memory
17
17
  tags:
18
18
  - core
19
19
  - memory
20
- - storage
21
20
  - knowledge
21
+ - context
22
+ - safety
22
23
  status: stable
23
24
  ask_examples:
24
25
  - Where are my context files stored?
@@ -28,20 +29,21 @@ ask_examples:
28
29
  - How does the daemon prevent the agent from writing to disk directly?
29
30
  locale: en-US
30
31
  created: 2026-04-25
31
- updated: 2026-05-15
32
+ updated: 2026-05-28
32
33
  keywords:
33
34
  - context
34
35
  - markdown
35
36
  - SQLite
36
- - today.md
37
- - user/profile.md
38
- - roadmap.md
39
- - rules/management.md
40
- - rules/policies
41
- - agent journal
37
+ - state/today.md
38
+ - identity/profile.md
39
+ - plans/roadmap.md
40
+ - policies/management.md
41
+ - policies/management-captures
42
+ - journal/agent.md
42
43
  - context API
43
44
  - AgentWriteTracker
44
45
  - durable memory
46
+ - context-vault v2
45
47
  related:
46
48
  - features/memory-files/today
47
49
  - features/memory-files/user-profile
@@ -53,15 +55,23 @@ ui_anchors:
53
55
  - /knowledge
54
56
  - /connections/knowledge
55
57
  context_files:
56
- - today.md
57
- - user/profile.md
58
- - roadmap.md
59
- - agent/journal.md
60
- - daily/<date>.md
61
- - projects/<slug>.md
62
- - rules/management.md
63
- - rules/policies/<slug>.md
64
- - rules/policies/_index.md
58
+ - state/today.md
59
+ - identity/profile.md
60
+ - plans/roadmap.md
61
+ - journal/agent.md
62
+ - journal/daily/<date>.md
63
+ - plans/projects/<slug>.md
64
+ - policies/management.md
65
+ - policies/management-captures/<slug>.md
66
+ - policies/management-captures/_index.md
67
+ config_keys:
68
+ - dayBoundaryHour
69
+ - dataDir
70
+ api_endpoints:
71
+ - GET /api/context/*
72
+ - PUT /api/context/*
73
+ - PATCH /api/context/*
74
+ - DELETE /api/context/*
65
75
  ---
66
76
 
67
77
  # Memory Model
@@ -72,7 +82,11 @@ Aitne treats Markdown files in `~/.personal-agent/context/`
72
82
  as its long-term memory and SQLite
73
83
  (`~/.personal-agent/data/personal_agent.db`) as session-scoped state.
74
84
  Anything you want the agent to remember between runs lives in an MD
75
- file you can read, diff, and edit by hand.
85
+ file you can read, diff, and edit by hand. The vault is partitioned
86
+ into six authority classes — `identity/`, `state/`, `plans/`, `journal/`,
87
+ `knowledge/`, and `policies/` — each carrying its own authority and
88
+ lifecycle contract. See [Knowledge Layout](../reference/knowledge-layout.md)
89
+ for the canonical map.
76
90
 
77
91
  ## Why This Concept Exists
78
92
 
@@ -98,27 +112,52 @@ indexes, and configuration.
98
112
  legal write path. The agent does not have direct `Edit` / `Write`
99
113
  permissions on the filesystem; it must go through the daemon.
100
114
 
115
+ ## How the Agent Writes
116
+
117
+ The agent has no `Edit` or `Write` tool. To change a context file it
118
+ calls the daemon over HTTP, and every write funnels through one
119
+ endpoint family so the daemon can validate, hold locks, and snapshot a
120
+ backup before touching disk. Paths are class-prefixed
121
+ (`/api/context/<class>/<path>`):
122
+
123
+ ```bash
124
+ # Append a section to today.md
125
+ curl -X PATCH http://localhost:8321/api/context/state/today.md \
126
+ -H 'Content-Type: application/json' \
127
+ -d '{"mode":"append","section":"Notes","content":"Booked the dentist."}'
128
+ ```
129
+
130
+ - `PUT /api/context/*` replaces a whole file; `PATCH` does a section op
131
+ (`append`, `replace`, `clear`, `clear_before`, `append_to_file`);
132
+ `DELETE` removes a file (permitted only for custom routines).
133
+ - Legacy bare paths (`/api/context/today.md`) still resolve — the daemon
134
+ rewrites them to the canonical class-prefixed form in process, so a
135
+ plain `curl -X PATCH` without `-L` keeps working — but new writes
136
+ emit the class-prefixed path.
137
+ - `state/today.md` and `plans/roadmap.md` are serialized behind
138
+ dedicated write locks, so two flows can't clobber each other.
139
+
101
140
  ## Concrete Examples
102
141
 
103
- - `today.md` — rewritten by the morning routine.
104
- - `user/profile.md` — your profile, hand-edited or appended by the
142
+ - `state/today.md` — rewritten by the morning routine.
143
+ - `identity/profile.md` — your profile, hand-edited or appended by the
105
144
  agent on request. Topic-shaped slices live alongside it
106
- (`user/people.md`, `user/work.md`, `user/expertise.md`,
107
- `user/personal.md`, `user/goals.md`). See
145
+ (`identity/people.md`, `identity/work.md`, `identity/expertise.md`,
146
+ `identity/personal.md`, `identity/goals.md`). See
108
147
  [User Profile](../features/memory-files/user-profile.md).
109
- - `roadmap.md` — long-running goals + Preparation Timeline rows that
148
+ - `plans/roadmap.md` — long-running goals + Preparation Timeline rows that
110
149
  fire daily during the morning routine.
111
- - `agent/journal.md` — the agent's own running log of decisions,
150
+ - `journal/agent.md` — the agent's own running log of decisions,
112
151
  retros, and judgement calls.
113
- - `daily/2026-04-25.md` — per-date archive of that day's plan,
152
+ - `journal/daily/2026-04-25.md` — per-date archive of that day's plan,
114
153
  synthesized by the morning routine.
115
- - `projects/<slug>.md` — one file per active project.
116
- - `rules/management.md` — the umbrella registry: Source-of-Truth
154
+ - `plans/projects/<slug>.md` — one file per active project.
155
+ - `policies/management.md` — the umbrella registry: Source-of-Truth
117
156
  bindings, Managed Tasks, an Active Policies summary. Always
118
157
  injected into every flow.
119
- - `rules/policies/<slug>.md` — one file per durable management rule
158
+ - `policies/management-captures/<slug>.md` — one file per durable management rule
120
159
  ("from now on, do X"). The daemon auto-maintains a slug index at
121
- `rules/policies/_index.md`.
160
+ `policies/management-captures/_index.md`.
122
161
 
123
162
  ## Where You See It in the Dashboard
124
163
 
@@ -129,8 +168,9 @@ indexes, and configuration.
129
168
 
130
169
  ## Related
131
170
 
132
- - [today.md](../features/memory-files/today.md)
133
- - [user/profile.md](../features/memory-files/user-profile.md)
134
- - [roadmap.md](../features/memory-files/roadmap.md)
171
+ - [Knowledge Layout](../reference/knowledge-layout.md) — canonical map of every vault file
172
+ - [state/today.md](../features/memory-files/today.md)
173
+ - [identity/profile.md](../features/memory-files/user-profile.md)
174
+ - [plans/roadmap.md](../features/memory-files/roadmap.md)
135
175
  - [Skills](skills.md) — the per-skill SKILL.md files that tell the
136
176
  agent how to read and write each context file.
@@ -29,7 +29,7 @@ ask_examples:
29
29
  - Where does the routine pre-pass write observations?
30
30
  locale: en-US
31
31
  created: 2026-04-25
32
- updated: 2026-05-15
32
+ updated: 2026-05-28
33
33
  keywords:
34
34
  - observation
35
35
  - observations
@@ -40,11 +40,31 @@ keywords:
40
40
  - pre-pass
41
41
  - AgentWriteTracker
42
42
  - contentHash
43
+ - recordObservation
44
+ - observation queue
45
+ - dedupe
43
46
  related:
44
47
  - features/routines/hourly-check
45
48
  - features/routines/morning-routine
46
49
  - concepts/process-keys
47
50
  - concepts/routines
51
+ - features/integrations/git
52
+ - features/integrations/obsidian
53
+ ui_anchors:
54
+ - /activity
55
+ process_keys:
56
+ - routine.hourly_check
57
+ - routine.fetch_window
58
+ config_keys:
59
+ - hourlyCheckIntervalMinutes
60
+ - hourlyCheckPrePassFreshnessMinutes
61
+ api_endpoints:
62
+ - POST /api/observations
63
+ - GET /api/observations
64
+ - POST /api/observations/consume
65
+ context_files:
66
+ - packages/daemon/src/core/routine-windows.ts
67
+ - packages/daemon/src/api/routes/observations.ts
48
68
  ---
49
69
 
50
70
  # Observations
@@ -57,13 +77,15 @@ SQLite. A single `routine.hourly_check` consumes the queue and decides
57
77
  what is worth surfacing.
58
78
 
59
79
  Since 2026-05, observations have a **second writer**: every main
60
- routine (morning, today_refresh, hourly_check, evening, weekly) is
61
- preceded by a lite-tier `routine.fetch_window` pre-pass that fetches
62
- mail / calendar / Notion windows and POSTs them to
63
- `/api/observations`. The main routine then reads them via the same
64
- `pending=true` queue that the polling path feeds. Observation rows
65
- look identical regardless of which writer produced them — the
66
- distinction is invisible to downstream consumers.
80
+ routine (`routine.morning_routine`, `routine.today_refresh`,
81
+ `routine.hourly_check`, `routine.evening_review`,
82
+ `routine.weekly_review`) is preceded by a lite-tier
83
+ `routine.fetch_window` pre-pass that fetches mail / calendar / Notion
84
+ windows and POSTs them to `/api/observations`.
85
+ (`routine.monthly_review` has no pre-pass window.) The main routine
86
+ then reads them via the same `pending=true` queue that the polling
87
+ path feeds. Observation rows look identical regardless of which writer
88
+ produced them — the distinction is invisible to downstream consumers.
67
89
 
68
90
  ## Why This Concept Exists
69
91
 
@@ -75,6 +97,18 @@ up to something the operator should hear about.
75
97
 
76
98
  ## Definitions
77
99
 
100
+ **Two writer paths feed one queue.** Observations enter the
101
+ `observations` table from two places, and downstream consumers cannot
102
+ tell them apart:
103
+
104
+ 1. **Background pollers** (Obsidian, Git, GitHub, Notion, Calendar,
105
+ Mail) call `recordObservation` when they detect a change.
106
+ 2. **The pre-pass** — the lite-tier `routine.fetch_window` session
107
+ spawned ahead of each main routine — POSTs mail / calendar / Notion
108
+ windows to `/api/observations`.
109
+
110
+ Both write rows of the same shape; the consumer reads the merged queue.
111
+
78
112
  - **Observation**: one row in the `observations` table.
79
113
  - **Actor**: who caused the change. `actor='agent'` rows are filtered
80
114
  out by the consumer (anti-loop).
@@ -88,9 +122,10 @@ up to something the operator should hear about.
88
122
  session spawned by each main routine's dispatcher. Fetches a
89
123
  per-routine window (`ROUTINE_WINDOWS` in
90
124
  `packages/daemon/src/core/routine-windows.ts`) for each enabled
91
- mail / calendar / Notion integration and POSTs observations. The
92
- server computes `contentHash` from `(source, payload)`, so an
93
- unchanged item written twice in the same cadence dedupes to a 409.
125
+ mail / calendar / Notion integration and POSTs the results to
126
+ `/api/observations`. The server computes `contentHash` from
127
+ `(source, payload)`, so an unchanged item written twice in the same
128
+ cadence dedupes to a 409.
94
129
 
95
130
  ## Concrete Examples
96
131
 
@@ -106,5 +141,8 @@ up to something the operator should hear about.
106
141
  ## Related
107
142
 
108
143
  - [Hourly Check](../features/routines/hourly-check.md)
144
+ - [Morning Routine](../features/routines/morning-routine.md)
145
+ - [Process Keys](./process-keys.md)
146
+ - [Routines](./routines.md)
109
147
  - [Git](../features/integrations/git.md)
110
148
  - [Obsidian](../features/integrations/obsidian.md)
@@ -26,14 +26,17 @@ ask_examples:
26
26
  - What is the difference between configurable and fixed ProcessKeys?
27
27
  locale: en-US
28
28
  created: 2026-04-25
29
- updated: 2026-05-15
29
+ updated: 2026-05-28
30
30
  keywords:
31
31
  - process key
32
32
  - ProcessKey
33
33
  - dispatch
34
34
  - routing
35
+ - tier
35
36
  - CONFIGURABLE_PROCESS_KEYS
36
37
  - DEFAULT_PROCESS_TIERS
38
+ - REACTIVE_PROCESS_KEYS
39
+ - TIER_LOCKED_PROCESS_KEYS
37
40
  - PROCESS_TO_EVENT_TYPE
38
41
  - routine.morning_routine
39
42
  - message.dm
@@ -42,6 +45,25 @@ related:
42
45
  - concepts/backends-and-tiers
43
46
  - concepts/skills
44
47
  - reference/process-keys
48
+ - features/operations/backend-routing
49
+ process_keys:
50
+ - routine.morning_routine
51
+ - routine.morning_routine_today
52
+ - routine.morning_routine_journal
53
+ - routine.evening_review
54
+ - routine.hourly_check
55
+ - routine.fetch_window
56
+ - routine.hourly_check.triage
57
+ - message.dm
58
+ - message.mention
59
+ - dashboard.chat
60
+ - dashboard.docs_qa
61
+ - agent.task
62
+ - agent.dm_task
63
+ - delegated_task
64
+ - delegated_task_heavy
65
+ ui_anchors:
66
+ - /settings/models
45
67
  ---
46
68
 
47
69
  # ProcessKeys
@@ -64,37 +86,49 @@ those subsystems.
64
86
  ## Definitions
65
87
 
66
88
  - **CONFIGURABLE_PROCESS_KEYS**: the set the operator can override per
67
- backend on `/settings/models`.
68
- - **REACTIVE_PROCESS_KEYS**: those tied to in-the-loop events (DMs,
69
- dashboard chat, docs QA).
70
- - **DEFAULT_PROCESS_TIERS**: the per-key default (`lite`, `medium`, or
71
- `high`).
89
+ backend on `/settings/models`. The rest (`delegated_task`, `setup`,
90
+ `schedule.approaching`, …) use fixed defaults and are not surfaced
91
+ there.
92
+ - **REACTIVE_PROCESS_KEYS**: those tied to in-the-loop events
93
+ (`message.dm`, `message.mention`, `dashboard.chat`,
94
+ `dashboard.docs_qa`, `setup`, `knowledge.import`). Everything else is
95
+ autonomous.
96
+ - **DEFAULT_PROCESS_TIERS**: the per-key default model size — `lite`
97
+ (Haiku-class), `medium` (Sonnet-class), or `high` (Opus-class).
98
+ Unknown keys (including `routine.custom.<slug>`) default to `medium`.
99
+ - **TIER_LOCKED_PROCESS_KEYS**: keys whose tier is hard-locked and
100
+ cannot be overridden by an operator pin. Today this is just
101
+ `dashboard.docs_qa`, locked to `medium`.
72
102
  - **PROCESS_TO_EVENT_TYPE**: maps a ProcessKey to the skill manifest
73
- key.
103
+ key, so the skills compiler can pick the right tool set.
74
104
 
75
105
  ## Concrete Examples
76
106
 
77
- - Routines: `routine.morning_routine` (parent envelope read by the
78
- pre-routine gate, plus the Phase 5 split keys
79
- `routine.morning_routine_today` and `routine.morning_routine_journal`),
107
+ - **Routines:** `routine.morning_routine` is the parent envelope read by
108
+ the pre-routine gate; the actual work runs as two parallel split keys
109
+ `routine.morning_routine_today` (Stage A, today.md, medium) and
110
+ `routine.morning_routine_journal` (Stage B, daily journal, lite). Also
80
111
  `routine.evening_review`, `routine.weekly_review`,
81
- `routine.hourly_check`,
82
- `routine.roadmap_refresh`, `routine.today_refresh`,
83
- `routine.user_profile_sweep`. `routine.morning_routine_initial` was
84
- retired by morning-routine-optimization.md Phase 7 (2026-05-16) the
85
- first-run branch routes through `routine.morning_routine`.
86
- - Routine sub-jobs (lite tier, dispatcher-spawned, not user-facing):
112
+ `routine.hourly_check`, `routine.roadmap_refresh`,
113
+ `routine.today_refresh`, `routine.user_profile_sweep`.
114
+ `routine.morning_routine_initial` was retired (2026-05-16) — the
115
+ first-run branch now routes through `routine.morning_routine`.
116
+ - **Routine sub-jobs** (lite tier, dispatcher-spawned, not user-facing):
87
117
  `routine.fetch_window` (pre-pass mail/calendar/Notion fetcher that
88
118
  runs before each main routine and POSTs observations) and
89
119
  `routine.hourly_check.triage` (Stage 2 escalate-vs-log-only gate
90
120
  inside the hourly check).
91
- - Custom routines: `routine.custom.<slug>` (kebab-case slug)
92
- - Messaging: `message.dm`, `message.mention`
93
- - Dashboard: `dashboard.chat`, `dashboard.docs_qa`
94
- - Scheduled / external: `agent.task` (recurring schedules),
121
+ - **Custom routines:** `routine.custom.<slug>` (kebab-case slug;
122
+ defaults to medium tier).
123
+ - **Messaging:** `message.dm`, `message.mention`
124
+ - **Dashboard:** `dashboard.chat`, `dashboard.docs_qa`
125
+ - **Scheduled / external:** `agent.task` (recurring schedules),
95
126
  `agent.dm_task` (DM-tone scheduled briefings),
96
- `schedule.approaching`, `calendar.change`, `gmail_classify`,
97
- `setup`
127
+ `schedule.approaching`, `calendar.change`, `gmail_classify`, `setup`
128
+ - **Delegated work:** `delegated_task` (lite) and `delegated_task_heavy`
129
+ — the only high-tier key, opt-in via the `delegatedTaskHeavyEnabled`
130
+ config flag. No install-time surface defaults to `high`; operators
131
+ pin high per-row on `/settings/models`.
98
132
 
99
133
  ## Where You See It in the Dashboard
100
134
 
@@ -30,7 +30,7 @@ ask_examples:
30
30
  - Which routine uses the high tier by default?
31
31
  locale: en-US
32
32
  created: 2026-04-25
33
- updated: 2026-05-15
33
+ updated: 2026-05-28
34
34
  keywords:
35
35
  - routine
36
36
  - routines
@@ -52,6 +52,25 @@ related:
52
52
  ui_anchors:
53
53
  - /connections/routines
54
54
  - /settings/routines
55
+ process_keys:
56
+ - routine.morning_routine
57
+ - routine.morning_routine_today
58
+ - routine.morning_routine_journal
59
+ - routine.evening_review
60
+ - routine.weekly_review
61
+ - routine.monthly_review
62
+ - routine.hourly_check
63
+ - routine.today_refresh
64
+ - routine.fetch_window
65
+ - routine.hourly_check.triage
66
+ config_keys:
67
+ - dayBoundaryHour
68
+ - hourlyCheckEnabled
69
+ - hourlyCheckIntervalMinutes
70
+ - hourlyCheckActiveStartHour
71
+ - hourlyCheckActiveEndHour
72
+ - hourlyCheckPrePassFreshnessMinutes
73
+ - monthlyReviewEnabled
55
74
  ---
56
75
 
57
76
  # Routines
@@ -60,8 +79,9 @@ ui_anchors:
60
79
 
61
80
  A routine is a unit of agent work that runs on a schedule, not in
62
81
  response to a message. The morning routine fires once per agent day at
63
- `dayBoundaryHour`; evening and weekly retros fire on fixed schedules
64
- in code; the hourly check coalesces accumulated observations on a
82
+ `dayBoundaryHour`; the evening review (18:00 daily), weekly review
83
+ (Friday 19:00), and optional monthly review fire on fixed schedules in
84
+ code; the hourly check coalesces accumulated observations on a
65
85
  configurable cadence.
66
86
 
67
87
  ## Why This Concept Exists
@@ -82,51 +102,58 @@ DM is who fired the event.
82
102
  a ProcessKey starting with `routine.`.
83
103
  - **Agent day**: the 24-hour window starting at `dayBoundaryHour`
84
104
  (default 04:00) — see [Agent Day](agent-day.md).
85
- - **Catch-up**: if the daemon was offline at the trigger time, the
86
- scheduler re-fires the routine on next launch when it is still in
87
- the same agent day.
88
- - **Tier policy**: no routine runs heavy by default. The morning
89
- routine's first-run branch ran on heavy until
90
- `docs/design/appendices/morning-routine-optimization.md` Phase 7
91
- (2026-05-16) retired `routine.morning_routine_initial`; the
92
- first-run branch now uses the medium-tier parent
93
- `routine.morning_routine` with a daemon-prepared
94
- `<roadmap_skeleton>` block. Every recurring routine morning,
95
- evening, weekly, hourly check defaults to **medium**
96
- (Sonnet on Claude). The morning routine itself is a two-stage
97
- pipeline: Stage A `routine.morning_routine_today` (medium) runs
98
- in parallel with Stage B `routine.morning_routine_journal` (lite).
99
- The lite (Haiku) tier is reserved for Stage B plus mechanical
100
- sub-jobs (the hourly-check triage gate and the pre-pass fetcher).
101
- See [Backends and Tiers](backends-and-tiers.md).
105
+ - **Catch-up**: if the daemon was offline at the trigger time, a
106
+ boot-time check re-fires any routine whose window has already
107
+ opened but never ran (morning routine within the agent day; evening
108
+ review once it is past 18:00; weekly review across Fri–Sun). It never
109
+ double-fires a routine that already succeeded.
110
+ - **Tier policy**: **no routine runs the high tier by default.** Every
111
+ recurring routine — morning, evening, weekly, hourly check —
112
+ defaults to **medium** (Sonnet on Claude). The **lite** (Haiku) tier
113
+ is reserved for the morning routine's Stage B and for mechanical
114
+ sub-jobs (the hourly-check triage gate and the pre-pass fetcher). The
115
+ only high-tier ProcessKey in the whole system is `delegated_task_heavy`,
116
+ which is opt-in and not a routine. See
117
+ [Backends and Tiers](backends-and-tiers.md).
118
+ - **Two-stage morning routine**: the morning routine runs as a parent
119
+ envelope `routine.morning_routine` (medium) that fans out two stages
120
+ in parallel Stage A `routine.morning_routine_today` (medium, builds
121
+ `state/today.md`) and Stage B `routine.morning_routine_journal` (lite,
122
+ authors the previous day's journal). The legacy heavy-tier
123
+ `routine.morning_routine_initial` first-run branch was retired in
124
+ Phase 7 (2026-05-16); a first run is now detected inline from a
125
+ missing `state/yesterday.md` and handled by the same medium-tier
126
+ parent with a daemon-prepared `<roadmap_skeleton>` block.
102
127
  - **Pre-pass fetcher**: each main routine that needs fresh mail /
103
128
  calendar / Notion data is preceded by a lite-tier
104
129
  `routine.fetch_window` session that fetches the relevant window and
105
- POSTs observations. The main routine consumes the resulting
106
- `<fetch_report>` block plus pending observations instead of
107
- fetching upstream APIs itself. This is the cost-savings split
108
- introduced in 2026-05.
130
+ POSTs observations. The main routine then consumes the resulting
131
+ `<fetch_report>` block plus pending observations instead of hitting
132
+ upstream APIs itself a cost-savings split introduced in 2026-05.
109
133
 
110
134
  ## Concrete Examples
111
135
 
112
136
  | ProcessKey | When | Tier |
113
137
  |---|---|---|
114
- | `routine.morning_routine` | `dayBoundaryHour` daily (parent envelope; first-run branch detected inline from missing `yesterday.md`) | medium |
138
+ | `routine.morning_routine` | `dayBoundaryHour` daily (parent envelope; first-run branch detected inline from missing `state/yesterday.md`) | medium |
115
139
  | `routine.morning_routine_today` | Stage A of every morning routine (today.md synthesis + roadmap maintenance + schedule fan-out) | medium |
116
- | `routine.morning_routine_journal` | Stage B of every morning routine (daily/<yesterday>.md authoring) | lite |
117
- | `routine.today_refresh` | Every 4h inside the active window | medium |
140
+ | `routine.morning_routine_journal` | Stage B of every morning routine (`journal/daily/<yesterday>.md` authoring) | lite |
118
141
  | `routine.evening_review` | 18:00 daily (fixed) | medium |
142
+ | `routine.weekly_review` | Friday 19:00 (fixed, one hour after evening review) | medium |
143
+ | `routine.monthly_review` | Last day of month at 18:00, **default off** (`monthlyReviewEnabled`) | medium |
119
144
  | `routine.hourly_check` | Every `hourlyCheckIntervalMinutes` (default 60) inside the active window | medium |
120
- | `routine.weekly_review` | Friday 18:00 (fixed) | medium |
121
- | `routine.fetch_window` | Spawned before each routine above | lite |
145
+ | `routine.today_refresh` | On calendar drift or a dashboard "refresh today" request (not a fixed cron) | medium |
146
+ | `routine.fetch_window` | Spawned before each routine above that needs fresh upstream data | lite |
122
147
  | `routine.hourly_check.triage` | Stage 2 gate of every hourly check | lite |
123
- | `routine.custom.<slug>` | Operator-defined recurrence | configurable |
148
+ | `routine.custom.<slug>` | Operator-defined recurrence | medium (override per routine via `backend_tier`) |
124
149
 
125
150
  ## Where You See It in the Dashboard
126
151
 
127
- - **Settings → Routines** is where the hourly check active window, the
128
- hourly check cadence, and any custom routines live. Morning, evening,
129
- and weekly fire times are fixed in code and not surfaced here.
152
+ - **Settings → Routines** is where the hourly check active window
153
+ (`hourlyCheckActiveStartHour` / `hourlyCheckActiveEndHour`), the
154
+ hourly check cadence (`hourlyCheckIntervalMinutes`), and any custom
155
+ routines live. Morning, evening, weekly, and monthly fire times are
156
+ fixed in code and not surfaced here.
130
157
  - **Connections → Routines** is the unified view of next-fire times.
131
158
  - **Activity** logs each routine run with its outcome.
132
159
 
@@ -19,7 +19,8 @@ section: safety
19
19
  tags:
20
20
  - core
21
21
  - safety
22
- - cost
22
+ - operations
23
+ - backends
23
24
  status: stable
24
25
  ask_examples:
25
26
  - What is the difference between Safe and Allow mode?
@@ -27,7 +28,7 @@ ask_examples:
27
28
  - How do I see what tools the agent is allowed to use?
28
29
  locale: en-US
29
30
  created: 2026-04-25
30
- updated: 2026-04-25
31
+ updated: 2026-05-28
31
32
  keywords:
32
33
  - safety
33
34
  - safe mode
@@ -35,18 +36,23 @@ keywords:
35
36
  - absolute block
36
37
  - disallowed tools
37
38
  - approval
39
+ - execution mode
40
+ - risk tier
38
41
  related:
42
+ - concepts/safety-model
39
43
  - concepts/skills
40
44
  - features/operations/approvals
41
45
  - reference/disallowed-tools
42
46
  ui_anchors:
43
47
  - /settings/advanced
48
+ - /settings/models
44
49
  config_keys:
45
50
  - disallowedTools
46
51
  - allowedToolsOverride
47
52
  - claudeExecutionPermissionMode
48
53
  - codexExecutionPermissionMode
49
54
  - geminiExecutionPermissionMode
55
+ - opencodeExecutionPermissionMode
50
56
  ---
51
57
 
52
58
  # Safety and Execution Modes
@@ -57,10 +63,13 @@ Three layers gate what the agent can do:
57
63
 
58
64
  1. **Skill `allowed-tools`** — the visible toolset for that session.
59
65
  2. **Execution mode** — Safe (strict permission checks, sandboxes)
60
- or Allow (SDK bypass, sandbox off). Per-backend.
61
- 3. **Always-disallowed** — a hard floor. Recursive deletes, sudo,
66
+ or Allow (SDK bypass, sandbox off). Set per-backend.
67
+ 3. **Always-disallowed** — a hard floor. Recursive deletes, `sudo`,
62
68
  secret-file reads / writes are denied unconditionally regardless
63
- of mode.
69
+ of mode, and neither a skill nor Allow mode can widen past it.
70
+
71
+ A fourth idea — the **risk tier** — sits on top of the daemon API and
72
+ decides whether a *write* runs on its own or waits for your approval.
64
73
 
65
74
  ## Why This Concept Exists
66
75
 
@@ -72,37 +81,57 @@ disallowed-tools floor.
72
81
 
73
82
  ## Definitions
74
83
 
75
- - **Safe mode**: the default. Strict permission checks, Claude curl/jq
76
- hooks, Codex workspace-write sandbox, Gemini whitelist TOML.
84
+ - **Safe mode**: the default. Strict permission checks, plus a
85
+ backend-specific enforcement layer — Claude curl/jq hooks, the Codex
86
+ workspace-write sandbox, the Gemini whitelist TOML, and the OpenCode
87
+ permission block.
77
88
  - **Allow mode**: the looser posture. SDK bypass, sandbox off, minimal
78
- TOML. The absolute-block layer still holds.
89
+ TOML. The absolute-block layer still holds in Allow mode, so the
90
+ destructive-ops floor never opens. Set independently per backend, so
91
+ one backend can run Allow while the others stay Safe.
79
92
  - **Absolute block**: the unconditional layer. `ALWAYS_DISALLOWED_TOOLS`
80
93
  in `src/safety/always-disallowed.ts`. Cannot be widened by skills,
81
94
  by config, or by allow-mode.
82
- - **Risk tier**: `read`, `notify`, `approve`. Read = autonomous. Notify
83
- = the agent proceeds after DMing the operator. Approve = blocked
84
- until the operator clicks approve in the dashboard.
95
+ - **Risk tier**: every daemon-API operation carries one of three tiers —
96
+ `autonomous`, `read_sensitive`, or `approve`. *Autonomous* runs without a
97
+ prompt. *Read-sensitive* reads (email, calendar, notes, context files) are
98
+ the same blast radius as autonomous but are gated by a read token when
99
+ `enforceReadToken` is on. *Approve* is blocked until you confirm with a
100
+ bearer token (the dashboard does this when you click Approve). There is no
101
+ separate "notify" tier — that behaviour now lives in the skill prompts: for
102
+ potentially destructive actions the agent DMs you first, then proceeds. See
103
+ [Safety model](safety-model.md) for the full taxonomy.
85
104
 
86
105
  ## Concrete Examples
87
106
 
88
- | Action | Risk tier |
107
+ The daemon API is the agent's only write path, so most of its own writes are
108
+ `autonomous` (the memory chokepoint validates and snapshots them). The
109
+ absolute-block layer and Approve tier are where the agent is actually stopped.
110
+
111
+ | Action | What gates it |
89
112
  |---|---|
90
- | Read `today.md` | read |
91
- | Append to `agent/journal.md` | notify |
92
- | Send a DM | notify |
93
- | Update `roadmap.md` | approve |
94
- | Recursive delete | absolute-block (refused) |
95
- | `chmod` on a daemon-owned file | absolute-block |
113
+ | Read `state/today.md` | `read_sensitive` (read token if `enforceReadToken`) |
114
+ | Append to `journal/agent.md` | `autonomous` — daemon API write |
115
+ | Update `plans/roadmap.md` | `autonomous`, plus a roadmap write-lock |
116
+ | Send a DM | `autonomous`; destructive follow-ups DM you first |
117
+ | Configure an automation trigger | `approve` needs a bearer token |
118
+ | `chmod` on a daemon-owned file | Safe-mode disallowed (allowed in Allow mode) |
119
+ | Recursive delete (`rm -rf`), `sudo`, secret-file read | absolute-block (refused in both modes) |
96
120
 
97
121
  ## Where You See It in the Dashboard
98
122
 
99
- - **Settings → Advanced** holds `disallowedTools`, `allowedToolsOverride`,
100
- and the per-backend execution mode switch.
101
- - **Activity** logs every blocked tool call as `action_type='blocked_absolute'`.
123
+ - **Settings → Advanced** holds the `disallowedTools` and
124
+ `allowedToolsOverride` tool-policy lists.
125
+ - **Settings → Models & Cost** holds the per-backend Safe / Allow
126
+ **Execution Mode** switch (you can also set it in the setup wizard).
127
+ - **Activity** logs every absolute-blocked tool call as
128
+ `action_type='blocked_absolute'`.
102
129
  - **Approvals** is where Approve-tier actions queue when they fire.
103
130
 
104
131
  ## Related
105
132
 
133
+ - [Safety model](safety-model.md) — the full risk-tier taxonomy and where
134
+ each API endpoint is classified.
106
135
  - [Skills](skills.md) — where each session's per-task `allowed-tools` lives.
107
136
  - [Approvals](../features/operations/approvals.md) — the operator-side
108
137
  surface for Approve-tier actions.