@aitne-sh/aitne 0.1.12 → 0.1.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. package/agent-assets/agent-profiles/background-task.md +8 -1
  2. package/agent-assets/agent-profiles/routine-fetch-window.md +11 -0
  3. package/agent-assets/agents/evening-review/agent.md +6 -2
  4. package/agent-assets/agents/lesson-maintenance/agent.md +56 -0
  5. package/agent-assets/agents/morning-routine/agent.md +7 -2
  6. package/agent-assets/agents/source-librarian/agent.md +51 -0
  7. package/agent-assets/docs/concepts/agent-day.md +15 -15
  8. package/agent-assets/docs/concepts/auth-health.md +10 -7
  9. package/agent-assets/docs/concepts/backends-and-tiers.md +21 -13
  10. package/agent-assets/docs/concepts/costs-and-quotas.md +10 -10
  11. package/agent-assets/docs/concepts/delegated-mode.md +18 -18
  12. package/agent-assets/docs/concepts/memory-model.md +25 -24
  13. package/agent-assets/docs/concepts/observations.md +27 -19
  14. package/agent-assets/docs/concepts/process-keys.md +25 -26
  15. package/agent-assets/docs/concepts/routines.md +18 -17
  16. package/agent-assets/docs/concepts/safety-and-execution.md +20 -17
  17. package/agent-assets/docs/concepts/safety-model.md +16 -15
  18. package/agent-assets/docs/concepts/skills.md +7 -4
  19. package/agent-assets/docs/features/integrations/browser-history.md +52 -47
  20. package/agent-assets/docs/features/integrations/calendar.md +7 -7
  21. package/agent-assets/docs/features/integrations/git.md +15 -13
  22. package/agent-assets/docs/features/integrations/github.md +12 -10
  23. package/agent-assets/docs/features/integrations/mail.md +47 -45
  24. package/agent-assets/docs/features/integrations/notion.md +15 -11
  25. package/agent-assets/docs/features/integrations/obsidian.md +27 -23
  26. package/agent-assets/docs/features/lifestyle/git.md +7 -8
  27. package/agent-assets/docs/features/lifestyle/reading.md +11 -8
  28. package/agent-assets/docs/features/lifestyle/receipts.md +21 -22
  29. package/agent-assets/docs/features/lifestyle/travel-bookings.md +9 -9
  30. package/agent-assets/docs/features/memory-files/agent-journal.md +12 -10
  31. package/agent-assets/docs/features/memory-files/agent-lessons.md +46 -21
  32. package/agent-assets/docs/features/memory-files/projects.md +13 -14
  33. package/agent-assets/docs/features/memory-files/roadmap.md +16 -15
  34. package/agent-assets/docs/features/memory-files/schedule.md +10 -10
  35. package/agent-assets/docs/features/memory-files/today.md +18 -18
  36. package/agent-assets/docs/features/memory-files/user-profile.md +17 -17
  37. package/agent-assets/docs/features/messaging/bang-commands.md +15 -15
  38. package/agent-assets/docs/features/messaging/dashboard-chat.md +7 -6
  39. package/agent-assets/docs/features/messaging/discord.md +7 -5
  40. package/agent-assets/docs/features/messaging/overview.md +14 -14
  41. package/agent-assets/docs/features/messaging/pairing-and-magic-phrase.md +12 -12
  42. package/agent-assets/docs/features/messaging/slack.md +9 -8
  43. package/agent-assets/docs/features/messaging/telegram.md +7 -7
  44. package/agent-assets/docs/features/messaging/whatsapp.md +6 -6
  45. package/agent-assets/docs/features/operations/activity-and-conversations.md +9 -9
  46. package/agent-assets/docs/features/operations/approvals.md +13 -12
  47. package/agent-assets/docs/features/operations/backend-routing.md +38 -37
  48. package/agent-assets/docs/features/operations/browser-tasks.md +63 -57
  49. package/agent-assets/docs/features/operations/cost-tracking.md +5 -5
  50. package/agent-assets/docs/features/operations/managed-chromium.md +23 -22
  51. package/agent-assets/docs/features/operations/notifications.md +15 -15
  52. package/agent-assets/docs/features/operations/quiet-hours.md +14 -15
  53. package/agent-assets/docs/features/operations/schedule-approaching.md +16 -14
  54. package/agent-assets/docs/features/routines/activity-scan.md +14 -11
  55. package/agent-assets/docs/features/routines/custom-routines.md +9 -7
  56. package/agent-assets/docs/features/routines/evening-review.md +6 -7
  57. package/agent-assets/docs/features/routines/morning-routine.md +22 -21
  58. package/agent-assets/docs/features/routines/weekly-review.md +57 -51
  59. package/agent-assets/docs/features/wiki/commands.md +27 -21
  60. package/agent-assets/docs/features/wiki/cost-and-approval.md +28 -23
  61. package/agent-assets/docs/features/wiki/dashboard.md +21 -23
  62. package/agent-assets/docs/features/wiki/overview.md +17 -25
  63. package/agent-assets/docs/features/wiki/search.md +15 -17
  64. package/agent-assets/docs/features/wiki/workspaces.md +55 -56
  65. package/agent-assets/docs/getting-started/01-what-is-this.md +3 -4
  66. package/agent-assets/docs/getting-started/02-first-steps.md +12 -13
  67. package/agent-assets/docs/getting-started/03-what-can-this-do.md +7 -7
  68. package/agent-assets/docs/getting-started/04-first-day.md +4 -5
  69. package/agent-assets/docs/glossary.md +17 -16
  70. package/agent-assets/docs/guides/add-a-custom-routine.md +17 -12
  71. package/agent-assets/docs/guides/backup-and-restore.md +19 -16
  72. package/agent-assets/docs/guides/budget-and-cost-for-wiki.md +55 -62
  73. package/agent-assets/docs/guides/build-your-wiki.md +11 -12
  74. package/agent-assets/docs/guides/change-which-model-handles-x.md +30 -28
  75. package/agent-assets/docs/guides/connect-a-new-mail-account.md +30 -29
  76. package/agent-assets/docs/guides/explore-with-trace-and-connect.md +30 -32
  77. package/agent-assets/docs/guides/import-knowledge-file.md +9 -10
  78. package/agent-assets/docs/guides/install-and-run.md +9 -10
  79. package/agent-assets/docs/guides/maintain-wiki-health.md +10 -10
  80. package/agent-assets/docs/guides/migrate-machines.md +16 -14
  81. package/agent-assets/docs/guides/multiple-wikis-for-multiple-domains.md +11 -12
  82. package/agent-assets/docs/guides/pause-the-agent.md +25 -25
  83. package/agent-assets/docs/guides/reinstall-cleanly.md +13 -12
  84. package/agent-assets/docs/guides/setup-wizard.md +9 -11
  85. package/agent-assets/docs/guides/switch-default-backend.md +9 -9
  86. package/agent-assets/docs/guides/use-an-existing-obsidian-vault.md +9 -11
  87. package/agent-assets/docs/pages/activity.md +76 -0
  88. package/agent-assets/docs/pages/agents.md +78 -0
  89. package/agent-assets/docs/pages/analytics.md +70 -0
  90. package/agent-assets/docs/pages/browser.md +73 -0
  91. package/agent-assets/docs/pages/chat.md +67 -0
  92. package/agent-assets/docs/pages/connections.md +78 -0
  93. package/agent-assets/docs/pages/git.md +73 -0
  94. package/agent-assets/docs/pages/knowledge.md +75 -0
  95. package/agent-assets/docs/pages/overview.md +90 -0
  96. package/agent-assets/docs/pages/reading.md +65 -0
  97. package/agent-assets/docs/pages/settings.md +77 -0
  98. package/agent-assets/docs/pages/tasks.md +74 -0
  99. package/agent-assets/docs/pages/wiki.md +73 -0
  100. package/agent-assets/docs/reference/api.md +18 -17
  101. package/agent-assets/docs/reference/cli-commands.md +13 -10
  102. package/agent-assets/docs/reference/config.md +40 -35
  103. package/agent-assets/docs/reference/disallowed-tools.md +18 -17
  104. package/agent-assets/docs/reference/keyboard-shortcuts.md +6 -8
  105. package/agent-assets/docs/reference/knowledge-layout.md +10 -10
  106. package/agent-assets/docs/reference/process-keys.md +20 -22
  107. package/agent-assets/docs/reference/skills.md +18 -16
  108. package/agent-assets/docs/troubleshooting/auth-failed.md +13 -11
  109. package/agent-assets/docs/troubleshooting/dashboard-shows-degraded.md +10 -10
  110. package/agent-assets/docs/troubleshooting/fallback-keeps-firing.md +26 -24
  111. package/agent-assets/docs/troubleshooting/messaging-not-pairing.md +8 -9
  112. package/agent-assets/docs/troubleshooting/morning-routine-didnt-run.md +19 -18
  113. package/agent-assets/docs/troubleshooting/observation-not-detected.md +14 -15
  114. package/agent-assets/docs/troubleshooting/quota-exhausted.md +28 -26
  115. package/agent-assets/docs/troubleshooting/wiki-ingest-full-blocked.md +35 -34
  116. package/agent-assets/docs/troubleshooting/wiki-write-failed.md +21 -24
  117. package/agent-assets/skills/agent-create/SKILL.md +39 -5
  118. package/agent-assets/skills/background-task/SKILL.md +9 -4
  119. package/agent-assets/skills/board/SKILL.md +8 -9
  120. package/agent-assets/skills/browser-task/SKILL.md +2 -0
  121. package/agent-assets/skills/context/seeds/file-responsibilities.seed.json +2 -1
  122. package/agent-assets/skills/schedule/SKILL.md +6 -5
  123. package/agent-assets/skills/sources/SKILL.md +68 -0
  124. package/agent-assets/skills/sources/curation.json +21 -0
  125. package/agent-assets/skills/sources/seeds/filing-rules.seed.json +25 -0
  126. package/agent-assets/skills/sources/seeds/source-collections.seed.json +20 -0
  127. package/agent-assets/skills/task/SKILL.md +5 -2
  128. package/agent-assets/task-flows/background_task.md +29 -3
  129. package/agent-assets/task-flows/message.received.dm.md +1 -1
  130. package/agent-assets/task-flows/routine.activity_scan.md +17 -2
  131. package/agent-assets/task-flows/routine.evening_review.md +72 -11
  132. package/agent-assets/task-flows/routine.fetch_window.md +21 -0
  133. package/agent-assets/task-flows/routine.monthly_review.md +3 -1
  134. package/agent-assets/task-flows/routine.morning_routine_today.md +26 -7
  135. package/agent-assets/task-flows/routine.source_maintenance.md +50 -0
  136. package/agent-assets/task-flows/scheduled.dm.md +8 -3
  137. package/agent-assets/templates/_manifest.json +1 -0
  138. package/agent-assets/templates/knowledge/sources/_index.md +19 -0
  139. package/package.json +4 -4
@@ -16,7 +16,6 @@ summary: |
16
16
  notification. This pivot was the Phase 9 polling change.
17
17
  section: observations
18
18
  tags:
19
- - core
20
19
  - observations
21
20
  - polling
22
21
  - integrations
@@ -29,7 +28,7 @@ ask_examples:
29
28
  - Where does the routine pre-pass write observations?
30
29
  locale: en-US
31
30
  created: 2026-04-25
32
- updated: 2026-06-07
31
+ updated: 2026-07-01
33
32
  keywords:
34
33
  - observation
35
34
  - observations
@@ -50,6 +49,10 @@ related:
50
49
  - concepts/routines
51
50
  - features/integrations/git
52
51
  - features/integrations/obsidian
52
+ - features/integrations/calendar
53
+ - features/integrations/github
54
+ - features/integrations/notion
55
+ - features/integrations/browser-history
53
56
  ui_anchors:
54
57
  - /activity
55
58
  process_keys:
@@ -72,29 +75,30 @@ context_files:
72
75
 
73
76
  ## TL;DR
74
77
 
75
- Polling integrations (Obsidian, Git, Notion, Calendar) **do not emit
76
- events** when they detect changes. They write observation rows to
77
- SQLite. A single `routine.activity_scan` consumes the queue and decides
78
- what is worth surfacing.
78
+ Polling integrations (Obsidian, Git, Notion, Calendar) watch for
79
+ changes on a schedule. When they find one, they **do not emit an
80
+ event** or message you they write an *observation* row into SQLite.
81
+ A single `routine.activity_scan` reads that queue and decides what is
82
+ worth surfacing.
79
83
 
80
- Since 2026-05, observations have a **second writer**: every main
81
- routine (`routine.morning_routine`, `routine.today_refresh`,
84
+ Since 2026-05, observations have a **second writer**. Before each main
85
+ routine runs (`routine.morning_routine`, `routine.today_refresh`,
82
86
  `routine.activity_scan`, `routine.evening_review`,
83
- `routine.weekly_review`) is preceded by a lite-tier
84
- `routine.fetch_window` pre-pass that fetches mail / calendar / Notion
85
- windows and POSTs them to `/api/observations/batch`.
86
- (`routine.monthly_review` has no pre-pass window.) The main routine
87
- then reads them via the same `pending=true` queue that the polling
88
- path feeds. Observation rows look identical regardless of which writer
89
- produced them — the distinction is invisible to downstream consumers.
87
+ `routine.weekly_review`), a lite-tier `routine.fetch_window` pre-pass
88
+ fetches mail / calendar / Notion windows and POSTs them to
89
+ `/api/observations/batch`. (`routine.monthly_review` has no pre-pass
90
+ window.) The main routine then reads them through the same
91
+ `pending=true` queue that the polling path feeds. The rows look
92
+ identical no matter which writer produced them, so downstream consumers
93
+ cannot tell them apart.
90
94
 
91
95
  ## Why This Concept Exists
92
96
 
93
97
  Per-change notifications turned every routine commit, every saved
94
- note, every tiny calendar tweak into a paging event. The Phase 9
95
- pivot moved the agent away from that: changes accumulate, and once an
96
- hour the agent looks at the bag and decides whether the pattern adds
97
- up to something the operator should hear about.
98
+ note, every tiny calendar tweak into an interruption. The Phase 9
99
+ pivot moved the agent away from that: changes pile up quietly, and
100
+ once an hour the agent reviews the whole batch and decides whether the
101
+ pattern adds up to something you should hear about.
98
102
 
99
103
  ## Definitions
100
104
 
@@ -149,4 +153,8 @@ Both write rows of the same shape; the consumer reads the merged queue.
149
153
  - [Process Keys](./process-keys.md)
150
154
  - [Routines](./routines.md)
151
155
  - [Git](../features/integrations/git.md)
156
+ - [GitHub](../features/integrations/github.md)
152
157
  - [Obsidian](../features/integrations/obsidian.md)
158
+ - [Notion](../features/integrations/notion.md)
159
+ - [Calendar](../features/integrations/calendar.md)
160
+ - [Browser History](../features/integrations/browser-history.md)
@@ -14,10 +14,8 @@ summary: |
14
14
  to a backend + tier binding; the manifest map resolves it to skills.
15
15
  section: process-keys
16
16
  tags:
17
- - core
18
- - dispatch
19
- - backends
20
17
  - routing
18
+ - backends
21
19
  status: stable
22
20
  ask_examples:
23
21
  - What is a ProcessKey?
@@ -26,7 +24,7 @@ ask_examples:
26
24
  - What is the difference between configurable and fixed ProcessKeys?
27
25
  locale: en-US
28
26
  created: 2026-04-25
29
- updated: 2026-05-28
27
+ updated: 2026-07-01
30
28
  keywords:
31
29
  - process key
32
30
  - ProcessKey
@@ -70,36 +68,37 @@ ui_anchors:
70
68
 
71
69
  ## TL;DR
72
70
 
73
- A ProcessKey is a string like `routine.morning_routine` or `message.dm`
74
- that identifies one class of agent work. Every routine, every reactive
75
- event, every dashboard action is tagged with one. The router uses it
76
- to pick the backend; the skills compiler uses it to pick the tools.
71
+ A ProcessKey is a short string like `routine.morning_routine` or
72
+ `message.dm` that names one class of agent work. Every routine, every
73
+ event the agent reacts to, and every dashboard action carries one. The
74
+ router uses it to pick the backend; the skills compiler uses it to pick
75
+ the tools.
77
76
 
78
77
  ## Why This Concept Exists
79
78
 
80
- Without a stable identifier per task class, "the morning routine" and
81
- "a DM" would have to be hand-distinguished everywhere they were
82
- treated differently — pricing, retention, tool scope, auditability.
83
- The ProcessKey is the single coupling that ties dispatch to all of
84
- those subsystems.
79
+ Without a stable name for each class of task, "the morning routine" and
80
+ "a DM" would have to be told apart by hand everywhere they behave
81
+ differently — pricing, retention, tool scope, and auditing. The
82
+ ProcessKey is the one label that connects dispatch to all of those
83
+ subsystems.
85
84
 
86
85
  ## Definitions
87
86
 
88
- - **CONFIGURABLE_PROCESS_KEYS**: the set the operator can override per
87
+ - **CONFIGURABLE_PROCESS_KEYS**: the keys an operator can override per
89
88
  backend on `/settings/models`. The rest (`delegated_task`, `setup`,
90
- `schedule.approaching`, …) use fixed defaults and are not surfaced
89
+ `schedule.approaching`, …) use fixed defaults and do not appear
91
90
  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 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`.
102
- - **PROCESS_TO_EVENT_TYPE**: maps a ProcessKey to the skill manifest
91
+ - **REACTIVE_PROCESS_KEYS**: keys tied to events that happen while you
92
+ interact with the agent (`message.dm`, `message.mention`,
93
+ `dashboard.chat`, `dashboard.docs_qa`, `setup`, `knowledge.import`).
94
+ Everything else runs on its own (autonomous).
95
+ - **DEFAULT_PROCESS_TIERS**: the default model size for each key
96
+ `lite` (Haiku-class), `medium` (Sonnet-class), or `high`
97
+ (Opus-class). Unknown keys default to `medium`.
98
+ - **TIER_LOCKED_PROCESS_KEYS**: keys whose tier is hard-locked, so an
99
+ operator pin cannot change it. Today this is just `dashboard.docs_qa`,
100
+ locked to `medium`.
101
+ - **PROCESS_TO_EVENT_TYPE**: maps a ProcessKey to its skill manifest
103
102
  key, so the skills compiler can pick the right tool set.
104
103
 
105
104
  ## Concrete Examples
@@ -17,7 +17,6 @@ summary: |
17
17
  retro, plus any recurring user Agents you define.
18
18
  section: routines
19
19
  tags:
20
- - core
21
20
  - routines
22
21
  - autonomous
23
22
  - scheduler
@@ -30,7 +29,7 @@ ask_examples:
30
29
  - Which routine uses the high tier by default?
31
30
  locale: en-US
32
31
  created: 2026-04-25
33
- updated: 2026-06-07
32
+ updated: 2026-07-01
34
33
  keywords:
35
34
  - routine
36
35
  - routines
@@ -78,24 +77,26 @@ config_keys:
78
77
 
79
78
  ## TL;DR
80
79
 
81
- A routine is a unit of agent work that runs on a schedule, not in
82
- response to a message. The morning routine fires once per agent day at
83
- `dayBoundaryHour`; the evening review (18:00 daily), weekly review
84
- (Friday 19:00), and optional monthly review fire on fixed schedules in
85
- code; the activity scan coalesces accumulated observations on a
86
- configurable cadence.
80
+ A routine is a piece of agent work that runs on a schedule instead of
81
+ in reply to a message. The morning routine fires once per agent day
82
+ the 24-hour window that starts at `dayBoundaryHour` (04:00 by default).
83
+ The evening review (18:00 daily), weekly review (Friday 19:00), and
84
+ optional monthly review run on fixed schedules set in code. The
85
+ activity scan gathers up the observations that have piled up, on a
86
+ cadence you can configure.
87
87
 
88
88
  ## Why This Concept Exists
89
89
 
90
- The premise of Aitne is that the operator does not want to
91
- "prompt" their assistant every time. Routines are how the agent shows
92
- up without being asked: it builds today, it logs to the journal, it
93
- files a retro for the week. They are the proactive surface.
90
+ The whole idea of Aitne is that you should not have to "prompt" your
91
+ assistant every time. Routines are how the agent shows up without being
92
+ asked: it builds the day's plan, it writes to the journal, and it files
93
+ a weekly retrospective. This is the proactive side of the agent.
94
94
 
95
95
  Each routine is a single ProcessKey — `routine.morning_routine`,
96
- `routine.activity_scan`, `routine.weekly_review`, etc. The dispatcher
97
- treats them as just another event class; the only difference from a
98
- DM is who fired the event.
96
+ `routine.activity_scan`, `routine.weekly_review`, and so on. The
97
+ dispatcher treats a routine as just another kind of event; the only
98
+ thing that sets it apart from a direct message (DM) is what triggered
99
+ it — a schedule rather than you.
99
100
 
100
101
  ## Definitions
101
102
 
@@ -128,8 +129,8 @@ DM is who fired the event.
128
129
  - **Pre-pass fetcher**: each main routine that needs fresh mail /
129
130
  calendar / Notion data is preceded by a lite-tier
130
131
  `routine.fetch_window` session that fetches the relevant window and
131
- POSTs observations. The main routine then consumes the resulting
132
- `<fetch_report>` block plus pending observations instead of hitting
132
+ POSTs observations. The main routine then reads the resulting
133
+ `<fetch_report>` block plus pending observations instead of calling
133
134
  upstream APIs itself — a cost-savings split introduced in 2026-05.
134
135
 
135
136
  ## Concrete Examples
@@ -17,7 +17,6 @@ summary: |
17
17
  which actions are categorically refused.
18
18
  section: safety
19
19
  tags:
20
- - core
21
20
  - safety
22
21
  - operations
23
22
  - backends
@@ -28,7 +27,7 @@ ask_examples:
28
27
  - How do I see what tools the agent is allowed to use?
29
28
  locale: en-US
30
29
  created: 2026-04-25
31
- updated: 2026-06-07
30
+ updated: 2026-07-01
32
31
  keywords:
33
32
  - safety
34
33
  - safe mode
@@ -63,7 +62,9 @@ Three layers gate what the agent can do:
63
62
 
64
63
  1. **Skill `allowed-tools`** — the visible toolset for that session.
65
64
  2. **Execution mode** — Safe (strict permission checks, sandboxes)
66
- or Allow (SDK bypass, sandbox off). Set per-backend.
65
+ or Allow (the SDK's permission prompts are bypassed, sandbox off).
66
+ Set per backend (the underlying agent engine — Claude, Codex,
67
+ Gemini, or OpenCode).
67
68
  3. **Always-disallowed** — a hard floor. Recursive deletes, `sudo`,
68
69
  secret-file reads / writes are denied unconditionally regardless
69
70
  of mode, and neither a skill nor Allow mode can widen past it.
@@ -87,29 +88,31 @@ disallowed-tools floor.
87
88
  permission block.
88
89
  - **Allow mode**: the looser posture. SDK bypass, sandbox off, minimal
89
90
  TOML. The absolute-block layer still holds in Allow mode on Claude,
90
- Gemini, and OpenCode Codex is the documented exception: its Allow
91
- mode is a binary sandbox-off switch with no hook layer the daemon can
91
+ Gemini, and OpenCode. Codex is the documented exception. Its Allow
92
+ mode is a binary sandbox-off switch, with no hook layer the daemon can
92
93
  attach the block list to, so the dashboard warns you before you flip
93
- it. Set independently per backend, so one backend can run Allow while
94
- the others stay Safe.
94
+ it. You set the mode separately for each backend, so one backend can
95
+ run Allow while the others stay Safe.
95
96
  - **Absolute block**: the unconditional layer. `ALWAYS_DISALLOWED_TOOLS`
96
97
  in `src/safety/always-disallowed.ts`. Cannot be widened by skills,
97
98
  by config, or by allow-mode.
98
99
  - **Risk tier**: every daemon-API operation carries one of three tiers —
99
100
  `autonomous`, `read_sensitive`, or `approve`. *Autonomous* runs without a
100
- prompt. *Read-sensitive* reads (email, calendar, notes, context files) are
101
- the same blast radius as autonomous but are gated by a read token when
102
- `enforceReadToken` is on. *Approve* is blocked until you confirm with a
103
- bearer token (the dashboard does this when you click Approve). There is no
104
- separate "notify" tier — that behaviour now lives in the skill prompts: for
105
- potentially destructive actions the agent DMs you first, then proceeds. See
106
- [Safety model](safety-model.md) for the full taxonomy.
101
+ prompt. *Read-sensitive* reads (email, calendar, notes, context files) can
102
+ do no more harm than autonomous ones, but they are gated by a read token
103
+ when `enforceReadToken` is on. *Approve* actions are blocked until you
104
+ confirm with a bearer token (the dashboard does this when you click
105
+ Approve). There is no separate "notify" tier — that behaviour now lives in
106
+ the skill prompts: before a potentially destructive action the agent DMs
107
+ you first, then proceeds. See [Safety model](safety-model.md) for the full
108
+ taxonomy.
107
109
 
108
110
  ## Concrete Examples
109
111
 
110
- The daemon API is the agent's only write path, so most of its own writes are
111
- `autonomous` (the memory chokepoint validates and snapshots them). The
112
- absolute-block layer and Approve tier are where the agent is actually stopped.
112
+ The daemon API is the agent's only write path, so most of the writes it makes
113
+ are `autonomous` a single choke point validates and snapshots each one. The
114
+ places the agent is actually stopped are the absolute-block layer and the
115
+ Approve tier.
113
116
 
114
117
  | Action | What gates it |
115
118
  |---|---|
@@ -22,7 +22,6 @@ summary: |
22
22
  unchanged.)
23
23
  section: safety
24
24
  tags:
25
- - core
26
25
  - safety
27
26
  - integrations
28
27
  - audit
@@ -34,7 +33,7 @@ ask_examples:
34
33
  - Where do I see what the agent has been doing?
35
34
  locale: en-US
36
35
  created: 2026-04-26
37
- updated: 2026-06-07
36
+ updated: 2026-07-01
38
37
  keywords:
39
38
  - deniedTools
40
39
  - safety floor
@@ -73,9 +72,10 @@ The risk classifier has two write tiers, not three:
73
72
  every connector tool call (send mail, archive, label, create event,
74
73
  delete event, …) and for normal context writes.
75
74
  - **Approve** — agent must present a Bearer token issued through the
76
- dashboard. Reserved for posture-changing daemon configuration:
77
- flipping integration modes, swapping the main backend, enabling/
78
- disabling backends, wiping config.
75
+ dashboard. Reserved for posture-changing daemon configuration
76
+ (settings that change the safety setup itself): flipping integration
77
+ modes, swapping the main backend, enabling/disabling backends,
78
+ wiping config.
79
79
  - (`ReadSensitive` is the third tier, but it gates *reads* of personal
80
80
  data — orthogonal to write notifications. It is unchanged.)
81
81
 
@@ -95,22 +95,23 @@ actions are:
95
95
  ## Why This Concept Exists
96
96
 
97
97
  The previous Notify tier (3-tier model: Autonomous / Notify / Approve)
98
- gave a *false sense* of safety: the action completed regardless, the
99
- operator could miss the DM, and the middleware was structurally unable
100
- to intercept native MCP calls (the agent could reach Gmail through the
101
- backend's connector without ever touching the daemon). Curating a
102
- per-tool Notify policy across direct + cross-backend + same-backend +
103
- operator-installed MCPs was an ever-growing maintenance trap.
98
+ gave a *false sense* of safety. The action completed either way, the
99
+ operator could easily miss the DM, and the middleware simply could not
100
+ intercept native MCP calls the agent could reach Gmail through the
101
+ backend's own connector without ever passing through the daemon. On top
102
+ of that, hand-curating a per-tool Notify policy across every path
103
+ (direct, cross-backend, same-backend, and operator-installed MCPs) was
104
+ an ever-growing maintenance trap.
104
105
 
105
106
  The new model is honest: dangerous actions either (a) are denied at the
106
107
  chokepoint by the operator's `deniedTools`, (b) require explicit
107
108
  Approve (sparse, intentional, daemon-config only), or (c) happen
108
109
  autonomously and are auditable on demand.
109
110
 
110
- The *value proposition* — the agent manages the operator's life — is
111
- preserved. The operator should not have to manage the agent's calendar
112
- of "report to me" events. Information about what the agent did is
113
- **available on demand**, not pushed.
111
+ The core promise — the agent manages the operator's life — stays
112
+ intact. The operator should not have to manage the agent's own calendar
113
+ of "report back to me" events. Details of what the agent did are
114
+ **available on demand**, not pushed at you.
114
115
 
115
116
  ## Definitions
116
117
 
@@ -14,7 +14,6 @@ summary: |
14
14
  to load it, and pins the exact tools the session may use.
15
15
  section: skills
16
16
  tags:
17
- - core
18
17
  - skills
19
18
  - safety
20
19
  - knowledge
@@ -28,7 +27,7 @@ ask_examples:
28
27
  - Where do skill overlays live?
29
28
  locale: en-US
30
29
  created: 2026-04-25
31
- updated: 2026-06-07
30
+ updated: 2026-07-01
32
31
  keywords:
33
32
  - SKILL.md
34
33
  - allowed-tools
@@ -42,6 +41,7 @@ keywords:
42
41
  related:
43
42
  - concepts/safety-and-execution
44
43
  - concepts/process-keys
44
+ - concepts/delegated-mode
45
45
  - reference/skills
46
46
  ui_anchors:
47
47
  - /knowledge
@@ -66,14 +66,15 @@ A skill is a Markdown file the daemon copies into the agent's working
66
66
  directory before each session. Its frontmatter declares the skill's
67
67
  `name`, `description`, and the `allowed-tools` the session may use.
68
68
  The agent reads `SKILL.md` at the start of every session that loads
69
- that skill and follows it as a contract.
69
+ that skill and treats it as a contract — the rules it must follow
70
+ for that task.
70
71
 
71
72
  ## Why This Concept Exists
72
73
 
73
74
  The agent runs against a real machine. Without scoped permissions, a
74
75
  "please summarize my mail" turn could in principle invoke `Bash(rm)`,
75
76
  post to your social accounts, or rewrite arbitrary files. Skills fix
76
- that by making the available toolset task-shaped: the morning routine
77
+ that by fitting the available tools to the task: the morning routine
77
78
  loads the context/today/observations/schedule skills; a docs question
78
79
  loads only `docs-search`. Tools outside the allow-list aren't even
79
80
  visible to the model.
@@ -154,5 +155,7 @@ surfaced at **Settings → Self-learning** (`/settings/self-learning`).
154
155
  `allowed-tools` is too permissive.
155
156
  - [Process Keys](process-keys.md) — the dispatch identity that picks
156
157
  which skill manifest to load.
158
+ - [Delegated Mode](delegated-mode.md) — the run mode whose sessions
159
+ load these skills.
157
160
  - [Skills (Reference)](../reference/skills.md) — index of every
158
161
  built-in skill.
@@ -20,7 +20,6 @@ section: integrations
20
20
  tags:
21
21
  - integrations
22
22
  - observations
23
- - browser-history
24
23
  - polling
25
24
  - autonomous
26
25
  status: stable
@@ -32,7 +31,7 @@ ask_examples:
32
31
  - How do I opt out of browser history?
33
32
  locale: en-US
34
33
  created: 2026-05-22
35
- updated: 2026-06-07
34
+ updated: 2026-07-01
36
35
  keywords:
37
36
  - browser history
38
37
  - browser history poller
@@ -75,38 +74,41 @@ api_endpoints:
75
74
 
76
75
  # Browser History
77
76
 
78
- Aitne can read the SQLite history databases that Chrome, Chromium,
79
- Edge, Brave, Comet, and Atlas already maintain on disk, classify visits
80
- into categories, and use the result to notice what you've been
81
- researching, what you've been refreshing, and what comparison-shopping
82
- windows you're in. Everything stays local — no URLs, titles, or
83
- clicks leave the daemon.
77
+ Every browser keeps a local history file (a small SQLite database) of
78
+ the pages you visit. Aitne can read that file for Chrome, Chromium,
79
+ Edge, Brave, Comet, and Atlas, sort each visit into a category, and use
80
+ the result to notice what you've been researching, what pages you keep
81
+ refreshing, and when you're comparison-shopping. Everything stays on
82
+ your machine — no URLs, titles, or clicks leave the daemon.
84
83
 
85
84
  ## What It Does
86
85
 
87
- - **Reads visits** from the browser's own history DB on a 30-min
88
- cadence (per browser, per profile) and inserts them into the
86
+ - **Reads visits** from the browser's own history file every 30
87
+ minutes (per browser, per profile) and inserts them into the
89
88
  daemon's `browser_visits` table.
90
89
  - **Counts reloads** per `<domain>/<first-path>` into
91
- `browser_reload_signals`. Surfaced via [`!checks`](../messaging/bang-commands.md)
92
- for the agent-day and via the weekly review's "this week you
93
- checked" block.
94
- - **Derives research clusters** when a topic crosses meaningful-visits
95
- / foreground-time / distinct-domain thresholds. Clusters live in
96
- `browser_research_clusters` with a slug, display name, journal at
97
- `context/research/<slug>.md`, and a status (`active | dormant |
98
- muted | concluded`).
99
- - **Offers engagement DMs** via the Two-Option Offer pattern when a
100
- cluster qualifies: pick "research dive" (parallel web research +
101
- summary) or "wiki summary" (Obsidian / Notion / local context).
102
- Accept paths run through `routine.research_dispatch` /
103
- `routine.research_wiki_summary`; decline silences offers for 14
90
+ `browser_reload_signals` that is, how often you reopen the same
91
+ page. These show up via [`!checks`](../messaging/bang-commands.md)
92
+ for the current agent-day (Aitne's version of "today", which rolls
93
+ over in the early morning rather than at midnight) and in the weekly
94
+ review's "this week you checked" block.
95
+ - **Derives research clusters** when a topic passes the thresholds for
96
+ meaningful visits, foreground reading time, and distinct domains. A
97
+ cluster is a group of related pages Aitne thinks you're actively
98
+ researching. Clusters live in `browser_research_clusters` with a
99
+ slug, display name, journal at `context/research/<slug>.md`, and a
100
+ status (`active | dormant | muted | concluded`).
101
+ - **Offers a direct message** when a cluster qualifies, using the
102
+ Two-Option Offer pattern: pick "research dive" (parallel web research
103
+ plus a summary) or "wiki summary" (into Obsidian / Notion / local
104
+ context). Accepting runs `routine.research_dispatch` or
105
+ `routine.research_wiki_summary`; declining silences offers for 14
104
106
  days; mute / unmute / rename / conclude via [`!research`](../messaging/bang-commands.md).
105
- - **Detects shopping comparison windows** — 90-min sliding windows
106
- containing ≥3 distinct ASINs surface as comparison sessions the
107
- agent can summarise.
107
+ - **Detects comparison-shopping sessions** — a 90-min sliding window
108
+ holding ≥3 distinct ASINs (Amazon product IDs) surfaces as a session
109
+ the agent can summarize for you.
108
110
  - **Powers the pre-morning digest** — yesterday's reading and reload
109
- patterns feed the digest the morning routine reads.
111
+ patterns feed the digest that the morning routine reads.
110
112
 
111
113
  ## Privacy and Consent
112
114
 
@@ -116,9 +118,9 @@ clicks leave the daemon.
116
118
  (`/settings/integrations/browser-history`) page. The integration only
117
119
  supports `direct` (the daemon poller) or `disabled` — there is no
118
120
  delegated or native mode.
119
- - **Local-only.** No request leaves the daemon. The browser's
120
- history file is opened read-only; the daemon never reaches into
121
- cookies, login sessions, or profile dirs other than the history DB.
121
+ - **Local-only.** No request leaves the daemon. The history file is
122
+ opened read-only, and the daemon never touches cookies, login
123
+ sessions, or any profile file other than that history database.
122
124
  - **Per-browser opt-in.** `browserHistoryBrowserOverrides` lets you
123
125
  force each detected browser on or off independently
124
126
  (`auto` / `forced-on` / `forced-off`).
@@ -134,17 +136,20 @@ clicks leave the daemon.
134
136
 
135
137
  ## How Clusters Qualify
136
138
 
137
- A research cluster qualifies when the combination of meaningful visits,
138
- foreground time, and distinct domains crosses the thresholds in
139
- `DEFAULT_OFFER_THRESHOLDS` (fixed defaults — `browserHistoryLifecycle`
140
- tunes the poller's check cadence, not these thresholds).
141
- On each tick the poller evaluates the offer triggers per active cluster
142
- (`evaluateOfferTriggers`) — this is where the 14-day, per-slug offer
143
- re-fire window lives and the **offer rate-limit gate**
144
- (`gateOfferRateLimit`: daily offer cap, minimum gap between offers,
145
- quiet hours, and a 30-day decline backoff) must also approve before a
146
- Two-Option Offer DM is composed by the `routine.research_offer_dm`
147
- process key.
139
+ A cluster qualifies once its meaningful visits, foreground time, and
140
+ distinct-domain counts all cross the thresholds in
141
+ `DEFAULT_OFFER_THRESHOLDS`. Those thresholds are fixed defaults;
142
+ `browserHistoryLifecycle` tunes how often the poller checks, not the
143
+ thresholds themselves.
144
+
145
+ Qualifying does not guarantee a message. On each tick the poller runs
146
+ the offer triggers for every active cluster (`evaluateOfferTriggers`),
147
+ which hold the 14-day, per-slug window before the same cluster can be
148
+ offered again. The **offer rate-limit gate** (`gateOfferRateLimit`) must
149
+ then approve too — it enforces a daily offer cap, a minimum gap between
150
+ offers, quiet hours, and a 30-day backoff after a decline. Only then
151
+ does the `routine.research_offer_dm` process key compose the Two-Option
152
+ Offer DM.
148
153
 
149
154
  Accepting either path clears every pending-offer row for that slug, so a
150
155
  later tick cannot re-offer the same cluster.
@@ -179,15 +184,15 @@ later tick cannot re-offer the same cluster.
179
184
 
180
185
  - **The settings page shows no browsers.** Open
181
186
  `/settings/integrations/browser-history` and run `aitne doctor` — the
182
- platform detector might be failing to resolve the user's profile dir.
183
- The daemon log line will name the candidate paths it tried.
187
+ detector may be unable to locate your browser's profile folder. The
188
+ daemon log line lists the candidate paths it tried.
184
189
  - **A cluster keeps re-offering.** Check the `lastResearchOfferAt` /
185
- `lastWikiOfferAt` columns; the trigger evaluator uses those for the
186
- 14-day re-fire window (the rate-limit gate also reads them for its
190
+ `lastWikiOfferAt` columns; the trigger evaluator uses them for the
191
+ 14-day re-fire window (and the rate-limit gate reads them for its
187
192
  30-day decline backoff). `!research decline <slug>` stamps both
188
193
  fields.
189
- - **`!checks` is empty.** That's the common case for a quiet day —
190
- the reload signals are gated to the agent-day, not UTC.
194
+ - **`!checks` is empty.** That's normal for a quiet day — the reload
195
+ signals are counted per agent-day, not per UTC day.
191
196
 
192
197
  ## Related
193
198
 
@@ -19,7 +19,6 @@ section: integrations
19
19
  tags:
20
20
  - integrations
21
21
  - calendar
22
- - core
23
22
  - observations
24
23
  - polling
25
24
  status: stable
@@ -33,7 +32,7 @@ ask_examples:
33
32
  - Which model handles detected calendar changes?
34
33
  locale: en-US
35
34
  created: 2026-04-25
36
- updated: 2026-06-07
35
+ updated: 2026-07-01
37
36
  keywords:
38
37
  - calendar
39
38
  - google calendar
@@ -77,10 +76,11 @@ around them and DM you ahead of meetings that matter.
77
76
  - **Polls** Google Calendar on `calendarPollIntervalSeconds`; Outlook
78
77
  and Apple calendars are read on demand rather than polled.
79
78
  - **Records observations** when events change (add / move / remove),
80
- consumed by the activity scan.
79
+ which the activity scan then reads.
81
80
  - **Surfaces today's events** to the morning routine so they land in
82
81
  `state/today.md` and the day's schedule file.
83
- - **Reads** events on demand for reactive turns ("am I free at 3?").
82
+ - **Reads** events on demand when you ask a live question, such as
83
+ "am I free at 3?".
84
84
 
85
85
  The agent can create, move, or delete events when the operator asks
86
86
  (`POST`/`PATCH`/`DELETE /api/calendar/events`, all Autonomous-tier — no
@@ -108,9 +108,9 @@ an explicit request.
108
108
  ## Calendar Event Model
109
109
 
110
110
  The Calendar Event Model picker chooses the backend and model that
111
- runs when the **daemon-side poller detects a calendar change**. It binds
112
- the `calendar.change` ProcessKey. The poller's change detection reacts
113
- in two situations:
111
+ runs when the **daemon-side poller detects a calendar change**. It is
112
+ bound to the `calendar.change` ProcessKey (the internal name for this
113
+ change-handling job). The poller reacts to a change in two situations:
114
114
 
115
115
  - An event was added, moved, or deleted between polls (recorded as a
116
116
  change observation; the activity scan picks it up).