@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
@@ -9,8 +9,9 @@ aliases:
9
9
  - human in the loop
10
10
  category: features
11
11
  summary: |
12
- Approve-tier actions block until the operator clicks approve in
13
- the dashboard. They bypass quiet hours.
12
+ A few high-blast-radius actions queue as approvals. The action
13
+ blocks until you click Approve on the dashboard Overview page;
14
+ the approval card stays visible there regardless of quiet hours.
14
15
  section: operations
15
16
  tags:
16
17
  - core
@@ -20,18 +21,26 @@ status: stable
20
21
  ask_examples:
21
22
  - What is an approval?
22
23
  - Why is the agent waiting for me?
24
+ - Where do I approve a pending action?
23
25
  locale: en-US
24
26
  created: 2026-04-25
25
- updated: 2026-04-25
27
+ updated: 2026-05-28
26
28
  keywords:
27
29
  - approval
28
30
  - approve tier
29
- - /dashboard/approvals
31
+ - approval queue
30
32
  - agent approval queue
31
33
  - approve before action
34
+ - deny approval
32
35
  related:
33
36
  - concepts/safety-and-execution
34
37
  - features/operations/notifications
38
+ ui_anchors:
39
+ - /
40
+ api_endpoints:
41
+ - GET /api/approvals
42
+ - POST /api/approvals/:id/approve
43
+ - POST /api/approvals/:id/deny
35
44
  ---
36
45
 
37
46
  # Approvals
@@ -39,26 +48,49 @@ related:
39
48
  ## In One Sentence
40
49
 
41
50
  A small set of high-blast-radius actions queue as approvals; the
42
- agent waits for an operator click before proceeding.
51
+ agent waits for you to click **Approve** on the dashboard before it
52
+ proceeds.
53
+
54
+ ## How It Works
55
+
56
+ A few actions are classified as *Approve* tier (see
57
+ [Safety and Execution](../../concepts/safety-and-execution.md)).
58
+ When the agent reaches one, instead of running it the daemon parks
59
+ the request in the approval queue:
43
60
 
44
- ## What It Does
61
+ 1. The action **blocks** — nothing runs while it waits.
62
+ 2. It appears in the **approval card** on the dashboard Overview
63
+ page (`/`).
64
+ 3. You click **Approve** to let it run, or **Deny** to discard it.
65
+ 4. On Approve, the queued action resumes and the agent continues.
45
66
 
46
- - Blocks the action.
47
- - Shows it on the Overview page's approval card.
48
- - Sends a notification (bypasses quiet hours by design).
49
- - Resumes when the operator approves.
67
+ The approval card is always shown on the Overview page while items
68
+ are pending it does not respect quiet hours, so you can clear it
69
+ whenever you next open the dashboard.
50
70
 
51
71
  ## Where in the Dashboard
52
72
 
53
- - **Overview** shows the count badge.
54
- - The approvals card lists pending items with diff previews.
73
+ The Overview page (`/`) shows an amber **approval card** whenever
74
+ something is pending. The card header reports the count
75
+ ("2 pending approvals") and each row lists:
76
+
77
+ - the action description,
78
+ - a badge with its type,
79
+ - when it was queued,
80
+ - **Approve** and **Deny** buttons.
81
+
82
+ Deny asks for confirmation before discarding the item.
55
83
 
56
84
  ## When Something Goes Wrong
57
85
 
58
- - An approval that hangs: the agent's session may have timed out.
59
- The action expires when the session does; the operator must redo
60
- the request that produced it.
86
+ - **An approval that never clears:** the agent session that produced
87
+ it may have timed out. The action expires with the session redo
88
+ the request that triggered it (for example, re-send the DM or
89
+ re-run the routine).
61
90
 
62
91
  ## Related
63
92
 
64
- - [Safety and Execution](../../concepts/safety-and-execution.md)
93
+ - [Safety and Execution](../../concepts/safety-and-execution.md)
94
+ how the agent decides an action needs approval.
95
+ - [Notifications](notifications.md) — how the agent reaches you
96
+ outside the dashboard.
@@ -11,12 +11,13 @@ category: features
11
11
  summary: |
12
12
  BackendRouter resolves each ProcessKey to a (main, fallback) backend
13
13
  pair and a tier. On BackendQuotaError or BackendDecisiveFailure, the
14
- main backend's session fails over to the fallback's.
14
+ main backend's session fails over to the fallback's mid-run.
15
15
  section: operations
16
16
  tags:
17
17
  - core
18
18
  - operations
19
19
  - backends
20
+ - routing
20
21
  status: stable
21
22
  ask_examples:
22
23
  - What happens when my Claude quota is exhausted?
@@ -24,7 +25,7 @@ ask_examples:
24
25
  - How do fallbacks work?
25
26
  locale: en-US
26
27
  created: 2026-04-25
27
- updated: 2026-04-25
28
+ updated: 2026-05-28
28
29
  keywords:
29
30
  - backend routing
30
31
  - BackendRouter
@@ -32,8 +33,21 @@ keywords:
32
33
  - main fallback
33
34
  - BackendQuotaError
34
35
  - BackendDecisiveFailure
36
+ - process_backend_config
37
+ process_keys:
38
+ - message.dm
39
+ - agent.task
40
+ - delegated_task_heavy
41
+ ui_anchors:
42
+ - /settings/models
43
+ - /activity
44
+ api_endpoints:
45
+ - GET /api/process-config
46
+ - PUT /api/process-config/:processKey
47
+ - PUT /api/backends/main
35
48
  related:
36
49
  - concepts/backends-and-tiers
50
+ - concepts/process-keys
37
51
  - features/operations/cost-tracking
38
52
  ---
39
53
 
@@ -41,29 +55,67 @@ related:
41
55
 
42
56
  ## In One Sentence
43
57
 
44
- Each ProcessKey resolves to a `(main, fallback)` pair and a tier; on
45
- quota or decisive failure, the dispatcher transitions to the fallback
46
- mid-run.
58
+ Every job carries a ProcessKey. The router resolves that key to a
59
+ `(main, fallback)` backend pair plus a tier and if the main backend
60
+ hits a quota wall or a decisive failure, the dispatcher transitions to
61
+ the fallback mid-run, then DMs you that it happened.
47
62
 
48
- ## What It Does
63
+ ## How It Resolves a Backend
49
64
 
50
- - Reads the `process_backend_config` table to find the binding.
51
- - Falls back to the default tier map when no override exists.
52
- - Re-materializes the session workdir for the fallback backend's
53
- instruction file and skill set.
65
+ The router never picks a model itself. The dispatcher hands it a
66
+ ProcessKey, and `BackendRouter` resolves the binding in this order:
67
+
68
+ 1. Read the `process_backend_config` table for a per-key override
69
+ (`main_backend` / `main_model` / `fallback_backend` / `fallback_model`).
70
+ 2. If no override exists, fall back to the ProcessKey's **default tier**
71
+ (`lite` → Haiku-class, `medium` → Sonnet-class, `high` → Opus-class)
72
+ and the seeded backend for that tier.
73
+ 3. `dashboard.docs_qa` is **tier-locked to `medium`** — an operator pin
74
+ can't move it.
75
+
76
+ Only one ProcessKey — `delegated_task_heavy` — defaults to the `high`
77
+ tier, and it is opt-in (gated by the `delegatedTaskHeavyEnabled` flag).
78
+ No install-time surface defaults to Opus.
79
+
80
+ ## What Happens on Failover
81
+
82
+ The two failover signals are `BackendQuotaError` (the backend hit a
83
+ usage/budget limit) and `BackendDecisiveFailure` (auth failure, model
84
+ unavailable, policy-denied, timeout, or turn-limit). When the main
85
+ backend raises either:
86
+
87
+ - The router **re-materializes the session workdir** for the fallback
88
+ backend — writing its instruction file (`AGENTS.md` for Codex,
89
+ `GEMINI.md` for Gemini, etc.) and skill set into the shared dir. Without
90
+ this step a Claude → Codex fallover would leave only `CLAUDE.md` and
91
+ `.claude/skills/`, and the fallback would run blind.
92
+ - The fallback then executes with the same prompt and any
93
+ per-session tool overrides applied to the main run.
94
+ - On success, you get a **low-priority DM** noting the main backend
95
+ failed and the fallback served the turn.
96
+ - If the fallback *also* fails, you get a higher-priority notification:
97
+ `Backend execution failed: <key> encountered <kind> on <main>, then
98
+ <kind> on <fallback>.` This is usually a credentials problem on both
99
+ sides.
54
100
 
55
101
  ## Where in the Dashboard
56
102
 
57
- - **Settings → Models** is the unified surface for picking main and
58
- fallback per ProcessKey.
59
- - **Activity** rows show which backend actually served each turn after
60
- fallback resolution.
103
+ - **[Settings → Models](/settings/models)** is the unified surface for
104
+ picking the main and fallback backend (and tier) per ProcessKey.
105
+ - **[Activity](/activity)** rows show which backend actually served each
106
+ turn after fallback resolution, so you can see when a fallover fired.
61
107
 
62
108
  ## When Something Goes Wrong
63
109
 
64
- - A `fallback-failed` notification: both backends rejected the run.
65
- Most often a credentials issue on both sides.
110
+ - **A `Backend execution failed` notification** means both the main and
111
+ the fallback rejected the run. Check authentication for both backends
112
+ first — re-authorize from the dashboard if needed.
113
+ - **A routine ran on the "wrong" backend** is usually a fallover: the
114
+ main backend was over quota, so the fallback served it. The Activity
115
+ row will confirm which backend ran.
66
116
 
67
117
  ## Related
68
118
 
69
119
  - [Backends and Tiers](../../concepts/backends-and-tiers.md)
120
+ - [Process Keys](../../concepts/process-keys.md)
121
+ - [Cost Tracking](./cost-tracking.md)
@@ -6,10 +6,14 @@ id: cost-tracking
6
6
  aliases:
7
7
  - analytics
8
8
  - cost rollup
9
+ - spend tracking
9
10
  category: features
10
11
  summary: |
11
- The Analytics page rolls cost up by ProcessKey, by backend, and by
12
- agent day. The sidebar footer shows the running daily total.
12
+ Aitne records the USD cost of every run into the local SQLite database
13
+ and rolls it up on the Analytics page by backend, by event type, and
14
+ over daily / weekly / monthly windows. The sidebar footer shows today's
15
+ running total, and two optional caps (daily and monthly) guard
16
+ autonomous spend.
13
17
  section: operations
14
18
  tags:
15
19
  - core
@@ -20,46 +24,109 @@ ask_examples:
20
24
  - How much did the agent cost me today?
21
25
  - Which routines are the most expensive?
22
26
  - How do I cap autonomous spending?
27
+ - What is the difference between the daily and monthly cost cap?
23
28
  locale: en-US
24
29
  created: 2026-04-25
25
- updated: 2026-04-25
30
+ updated: 2026-05-28
26
31
  keywords:
27
32
  - cost tracking
28
33
  - analytics
29
34
  - spend
30
35
  - per-process cost
31
36
  - rollup
37
+ - cost cap
38
+ - guardrails
32
39
  related:
33
40
  - concepts/costs-and-quotas
41
+ - concepts/process-keys
42
+ - features/operations/backend-routing
43
+ ui_anchors:
44
+ - /analytics
45
+ - /analytics?tab=metrics
46
+ - /settings/models
34
47
  config_keys:
35
48
  - autonomousDailyCostCapUsd
49
+ - autonomousMonthlyCostCapUsd
50
+ api_endpoints:
51
+ - GET /api/metrics
52
+ - GET /api/health
36
53
  ---
37
54
 
38
55
  # Cost Tracking
39
56
 
40
57
  ## In One Sentence
41
58
 
42
- A rolling rollup of token-cost per session, indexed by ProcessKey,
43
- backend, and agent day.
59
+ Aitne meters the USD cost of every run, stores it locally, and rolls it
60
+ up on the Analytics page so you can see where your spend goes — and cap it
61
+ if you want.
44
62
 
45
- ## What It Does
63
+ ## How It Works
46
64
 
47
- - Records per-execute cost into `agent_actions`.
48
- - Aggregates into the Analytics page's charts.
49
- - Surfaces the running daily total in the sidebar footer.
65
+ - Each agent run writes its estimated cost into the `cost_usd` column of
66
+ the `agent_actions` table. The estimate is `token count × backend
67
+ pricing` Aitne's best guess, never a bill.
68
+ - All data is derived from the daemon's local SQLite database and is never
69
+ sent anywhere external.
70
+ - The day boundary for "today" is the agent day (04:00 local by default),
71
+ not midnight.
50
72
 
51
- ## Where in the Dashboard
73
+ ## Where to Look in the Dashboard
52
74
 
53
- - **Analytics** is the rollup.
54
- - **Settings → Models → Cost Guardrails** holds
55
- `autonomousDailyCostCapUsd`.
75
+ ### Analytics page (the rollup)
56
76
 
57
- ## When Something Goes Wrong
77
+ Open **Analytics**. It has two tabs:
58
78
 
59
- - A cost number that looks wrong: cross-check against the backend's
60
- own dashboard. Aitne's count is its best estimate from
61
- per-call token math.
79
+ - **Cost** per-run USD spend. A period selector switches between
80
+ **Daily**, **Weekly**, and **Monthly** windows, with summary cards for
81
+ **Today**, **Last 7 Days**, and **Last 30 Days**. Inside Cost:
82
+ - **Overview** — a cost-trend chart over the selected period plus a
83
+ **By Event Type** breakdown (which process keys cost the most).
84
+ - **By Backend** — totals and a trend chart split by the backend that
85
+ *actually executed* each run. This reflects fallbacks and Gemini
86
+ auto-routing, not just your configured preferred backend.
87
+ - **Metrics** (`/analytics?tab=metrics`) — operational health: activity
88
+ volume, execution breakdown, error rates, notification throughput.
89
+
90
+ Note on delegated work: only **cross-backend** delegated calls show up as
91
+ separate runs. Same-backend delegated/native calls roll up under the
92
+ parent session's totals.
93
+
94
+ ### Sidebar footer (running daily total)
95
+
96
+ The left sidebar footer shows today's running spend (`health.todayCostUsd`
97
+ — `SUM(cost_usd)` over the current agent day). It updates as runs complete.
98
+
99
+ ## Capping Autonomous Spend
100
+
101
+ **Settings → Models → Cost guardrails** holds two optional caps. Both are
102
+ disabled (blank) by default and apply only to **autonomous** work —
103
+ reactive work such as DMs and mentions always runs.
104
+
105
+ - **`autonomousDailyCostCapUsd`** (Autonomous Daily Cost Cap) — when
106
+ today's autonomous spend reaches the cap, the dispatcher skips
107
+ lower-priority routines first, using priority-based degradation:
108
+ - `hourly_check` — skipped at 100% of the cap
109
+ - `roadmap_refresh` — skipped at 120%
110
+ - `evening_review` — skipped at 150%
111
+ - `morning_routine` — last to be cut, only at 200%
112
+
113
+ This leaves headroom for the morning briefing even when you're over
114
+ budget.
115
+
116
+ - **`autonomousMonthlyCostCapUsd`** (Autonomous Monthly Cost Cap — alert
117
+ only) — a notification threshold for rolling 30-day spend. It surfaces a
118
+ warning at 80% and an error at 100% in the Notifications panel but does
119
+ **not** stop any work. Pair it with the daily cap if you want a hard
120
+ guardrail.
121
+
122
+ ## When a Cost Number Looks Wrong
123
+
124
+ Aitne's count is its best estimate from per-call token math, not the
125
+ provider's invoice. If a number looks off, cross-check it against the
126
+ backend's own usage dashboard.
62
127
 
63
128
  ## Related
64
129
 
65
130
  - [Costs and Quotas](../../concepts/costs-and-quotas.md)
131
+ - [Process Keys](../../concepts/process-keys.md)
132
+ - [Backend Routing](./backend-routing.md)
@@ -0,0 +1,221 @@
1
+ ---
2
+ schema_version: 1
3
+ slug: features/operations/managed-chromium
4
+ title: Managed Chromium (B-4)
5
+ id: managed-chromium
6
+ aliases:
7
+ - managed chromium
8
+ - B-4
9
+ - purchase confirmation
10
+ - browser automation
11
+ - chromium automation
12
+ category: features
13
+ summary: |
14
+ Experimental, default-off purchase-confirmation flow. The daemon
15
+ spawns a managed Chromium profile to complete a vendor checkout the
16
+ agent has already prepared, after the operator approves with a
17
+ single-use DM token. Heavily gated; designed to be safe to read about
18
+ before you ever turn it on.
19
+ section: operations
20
+ tags:
21
+ - operations
22
+ - safety
23
+ - browser-automation
24
+ - experimental
25
+ status: experimental
26
+ ask_examples:
27
+ - What is B-4?
28
+ - Can Aitne buy things for me?
29
+ - What is the !~ token in my DM?
30
+ - How do I enable managed Chromium purchases?
31
+ - How do I block a site from managed Chromium?
32
+ locale: en-US
33
+ created: 2026-05-22
34
+ updated: 2026-05-28
35
+ keywords:
36
+ - managed chromium
37
+ - browser automation
38
+ - purchase token
39
+ - B-4
40
+ - "!~xxxxxxxx"
41
+ - per-site opt-in
42
+ - experimental danger
43
+ - hostname denylist
44
+ related:
45
+ - features/integrations/browser-history
46
+ - features/operations/approvals
47
+ - concepts/safety-model
48
+ - concepts/safety-and-execution
49
+ - reference/disallowed-tools
50
+ ui_anchors:
51
+ - /settings/integrations/browser-history-managed
52
+ - /settings/integrations/browser-history-managed/b4
53
+ process_keys:
54
+ - browser_task
55
+ - message.dm
56
+ config_keys:
57
+ - browserTaskHostnameDenylist
58
+ api_endpoints:
59
+ - POST /api/browser-automation/b4/enabled
60
+ - PATCH /api/browser-automation/sites/:siteKey/b4-config
61
+ - GET /api/browser-automation/purchase-tokens
62
+ - POST /api/browser-automation/sites/:siteKey/connect
63
+ - POST /api/browser-task
64
+ ---
65
+
66
+ # Managed Chromium (B-4)
67
+
68
+ B-4 is the experimental purchase-confirmation flow. When you've asked
69
+ the agent to "buy X" or "complete the checkout", and the vendor is on
70
+ your B-4 allowlist, the daemon spawns a managed Chromium profile,
71
+ fills the cart, and pauses for an explicit one-time token from your
72
+ DM before clicking the final confirm. **It is default-off**, gated
73
+ behind every safety check the project ships, and not surfaced in the
74
+ public dashboard until the upstream B-3 surface (browser-history
75
+ research) has been stable for six weeks.
76
+
77
+ This page is written so it's safe to read whether you've enabled it
78
+ or not.
79
+
80
+ ## What's Actually Gated
81
+
82
+ Before B-4 can run, every one of these must be true:
83
+
84
+ 1. The **master toggle** `runtime_state.managed_chromium.b4_enabled`
85
+ is `true`. Default is `false`, set via
86
+ `POST /api/browser-automation/b4/enabled` with body
87
+ `{ enabled: true, acknowledge: true }` (Approve-tier).
88
+ 2. You've acknowledged the **experimental-danger modal** on
89
+ `/settings/integrations/browser-history-managed/b4`. The modal
90
+ lists the failure modes and warns that the guard is bypassable if
91
+ the daemon or messaging platform is compromised.
92
+ 3. At least one **primary DM channel** is set (Slack / Telegram /
93
+ Discord / WhatsApp). The single-use token is delivered there; the
94
+ dashboard never shows the raw token.
95
+ 4. The **site is on your B-4 allowlist**. Per-site enablement happens
96
+ via `PATCH /api/browser-automation/sites/:siteKey/b4-config`
97
+ (Approve). Sites not in the allowlist cannot run a B-4 flow even
98
+ if the master toggle is on.
99
+ 5. The **site is signed in** through the B-2.5 per-site sign-in
100
+ flow (`POST /api/browser-automation/sites/:siteKey/connect` →
101
+ sign in by hand in the spawned UI Chromium →
102
+ `POST .../finalize`). The daemon stores the profile in a
103
+ restricted directory the absolute-block layer protects from any
104
+ skill.
105
+
106
+ ## Structural Defences (no hardcoded category denylist)
107
+
108
+ Earlier builds hardcoded a category denylist (banking, brokerages,
109
+ government, healthcare, identity / legal, payment processors). **That
110
+ framework-level category denylist was removed on 2026-05-27** — Aitne
111
+ is not a Japan-specific product and does not ship an opinionated brand
112
+ or category blocklist. What protects you now is structural, not a
113
+ category list:
114
+
115
+ 1. **IP CIDR egress layer (hardcoded, not configurable).** Any
116
+ navigation that resolves to a private (RFC1918), loopback,
117
+ link-local, multicast, cloud-metadata (`169.254.169.254`), or the
118
+ IPv6 equivalents is denied at the egress chokepoint
119
+ (`shouldDenyEgress` in `egress-denylist.ts`). This is the
120
+ defence-in-depth against SSRF — it cannot be turned off.
121
+ 2. **Payment-path blocker.** A URL-pattern matcher
122
+ (`payment-path-blocker.ts`) trips at form-submit time on
123
+ payment-handoff paths so the agent can't silently push a
124
+ transaction through.
125
+ 3. **The B-4 token primitive itself** — no final confirm without a
126
+ live, matched, single-use token (see below).
127
+
128
+ **Domain-level deny is now user-managed.** If you want to keep B-4 (or
129
+ any browser task) away from specific hostnames, add them to
130
+ `browserTaskHostnameDenylist` (default empty, up to 500 entries) from
131
+ Dashboard → `/settings/integrations/browser-history-managed`. The list
132
+ ships empty.
133
+
134
+ ## The Token Flow
135
+
136
+ 1. The agent prepares the checkout in a managed Chromium tab and
137
+ pauses at the final confirm step.
138
+ 2. The daemon mints a single-use token with the prefix `!~` followed
139
+ by 8 random hex characters (e.g. `!~3a1f9c7b`), inserts a
140
+ `browser_automation_purchase_tokens` row keyed on a server-side
141
+ `jti`, and DMs the token to a primary channel together with a
142
+ screenshot of the exact cart state.
143
+ 3. You reply with the token on the same DM channel. The daemon
144
+ matches inbound text against pending tokens; a match advances the
145
+ flow and the agent clicks confirm.
146
+ 4. **5-minute timeout.** If no match arrives in 5 minutes, the token
147
+ expires, the tab closes, and the agent reports back that the
148
+ purchase was abandoned.
149
+ 5. **Raw token never leaves the table.** The dashboard's audit views
150
+ show `jti` + delivery state only — even a brief credential
151
+ compromise can't extract live tokens.
152
+
153
+ `GET /api/browser-automation/purchase-tokens` lists pending +
154
+ recent (Approve-tier); `DELETE
155
+ /api/browser-automation/purchase-tokens/:jti` cancels a pending
156
+ token before its timeout.
157
+
158
+ ## Site Bootstrap (B-2.5)
159
+
160
+ The same site infrastructure powers anonymous reads (B-2),
161
+ authenticated reads (B-2.5), and B-4. Per-site state is managed by
162
+ `managed-chromium-sites-store.ts`; the bootstrap UI flow is:
163
+
164
+ | Step | Route |
165
+ |---|---|
166
+ | Spawn a UI Chromium window to sign in by hand | `POST /api/browser-automation/sites/:siteKey/connect` |
167
+ | Poll progress | `GET /api/browser-automation/sites/:siteKey/status` |
168
+ | Confirm signed-in, close UI window | `POST /api/browser-automation/sites/:siteKey/finalize` |
169
+ | Re-spawn UI Chromium reusing the profile (re-auth) | `POST /api/browser-automation/sites/:siteKey/reauth` |
170
+ | Kill processes + delete the profile dir | `POST /api/browser-automation/sites/:siteKey/disconnect` |
171
+
172
+ ## When It Runs
173
+
174
+ | Surface | Source |
175
+ |---|---|
176
+ | Operator asks the agent to "buy X" / "checkout" via DM | `message.dm` → checkout path |
177
+ | Open-ended browser request (DM, dashboard, or scheduler) | `browser_task` (medium tier, Claude-only) — see `BROWSER_TASK_REDESIGN_PLAN.md` |
178
+
179
+ Proactive re-auth DMs come from the `reauth-detector` in
180
+ `managed-chromium-supervisor.ts`.
181
+
182
+ ## Why You'd Turn It On
183
+
184
+ You wouldn't, yet. Until B-3 has been stable for six weeks, B-4 is
185
+ gated to project-owner self-testing. Once it opens, the typical
186
+ use case is recurring small purchases at vendors you trust (groceries,
187
+ specific subscriptions, narrow shopping windows) where the agent has
188
+ the cart context and you want a single tap to confirm rather than a
189
+ full hand-off.
190
+
191
+ ## Why You Might Not
192
+
193
+ - The guard is **experimental and bypassable** if the daemon process
194
+ or any of your messaging platforms is compromised. A high-privilege
195
+ attacker on either side can pretend to be you and complete a
196
+ purchase.
197
+ - Vendor flows change. A working B-4 site today can break tomorrow if
198
+ the vendor restructures the checkout DOM — the agent's recovery
199
+ story is "abandon and DM you", but you'll still see a partial cart.
200
+ - There is no built-in category guard. Aitne will not refuse a
201
+ high-stakes site for you (banks, brokerages, government, healthcare)
202
+ — those decisions are yours. If you don't trust B-4 with a site,
203
+ simply don't add it to the per-site allowlist, or add its hostname
204
+ to `browserTaskHostnameDenylist`.
205
+
206
+ ## Related
207
+
208
+ - [Approvals](approvals.md) — the broader Approve-tier model that
209
+ governs everything B-4 routes through.
210
+ - [Safety Model](../../concepts/safety-model.md) — the categorical
211
+ rules. B-4 narrows the "no financial transactions" rule to a
212
+ gated, screenshot-first, token-bound exception.
213
+ - [Safety and Execution](../../concepts/safety-and-execution.md) — Safe
214
+ / Allow modes and the absolute-block layer that protects the
215
+ managed-Chromium profile dir from any skill.
216
+ - [Browser History](../integrations/browser-history.md) — separate
217
+ read-only integration (B-3); B-4 builds on the same site
218
+ registry but is a distinct surface.
219
+ - [Disallowed Tools](../../reference/disallowed-tools.md) — the
220
+ absolute-block matchers that cover managed-Chromium profile
221
+ directories.