@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
  autonomous spend.
17
17
  section: operations
18
18
  tags:
19
- - core
20
19
  - cost
21
20
  - operations
22
21
  status: stable
@@ -27,7 +26,7 @@ ask_examples:
27
26
  - What is the difference between the daily and monthly cost cap?
28
27
  locale: en-US
29
28
  created: 2026-04-25
30
- updated: 2026-05-28
29
+ updated: 2026-07-01
31
30
  keywords:
32
31
  - cost tracking
33
32
  - analytics
@@ -97,9 +96,10 @@ Open **Analytics**. It has two tabs:
97
96
  - **Metrics** (`/analytics?tab=metrics`) — operational health: activity
98
97
  volume, execution breakdown, error rates, notification throughput.
99
98
 
100
- Note on delegated work: only **cross-backend** delegated calls show up as
101
- separate runs. Same-backend delegated/native calls roll up under the
102
- parent session's totals.
99
+ Note on delegated work (when a run hands part of its job to a helper
100
+ model): only **cross-backend** delegated calls show up as separate runs.
101
+ Same-backend delegated/native calls roll up under the parent session's
102
+ totals.
103
103
 
104
104
  ### Sidebar footer (running daily total)
105
105
 
@@ -20,8 +20,6 @@ section: operations
20
20
  tags:
21
21
  - operations
22
22
  - safety
23
- - browser-automation
24
- - experimental
25
23
  status: experimental
26
24
  ask_examples:
27
25
  - What is B-4?
@@ -31,7 +29,7 @@ ask_examples:
31
29
  - How do I block a site from managed Chromium?
32
30
  locale: en-US
33
31
  created: 2026-05-22
34
- updated: 2026-06-07
32
+ updated: 2026-07-01
35
33
  keywords:
36
34
  - managed chromium
37
35
  - browser automation
@@ -66,16 +64,18 @@ api_endpoints:
66
64
 
67
65
  # Managed Chromium (B-4)
68
66
 
69
- B-4 is the experimental purchase-confirmation flow. When you've asked
70
- the agent to "buy X" or "complete the checkout", and the vendor is on
71
- your B-4 allowlist, the daemon spawns a managed Chromium profile,
72
- fills the cart, and pauses for an explicit one-time token from your
73
- DM before clicking the final confirm. **It is default-off**, gated
74
- behind every safety check the project ships, and not surfaced in the
75
- public dashboard until the upstream B-3 surface (browser-history
76
- research) has been stable for six weeks.
77
-
78
- This page is written so it's safe to read whether you've enabled it
67
+ B-4 is the experimental purchase-confirmation flow. When you ask the
68
+ agent to "buy X" or "complete the checkout", and the vendor is on your
69
+ B-4 allowlist (the short list of sites you have explicitly approved),
70
+ the daemon (Aitne's always-on background service) opens a managed
71
+ Chromium profile, fills the cart, and then stops. It waits for a
72
+ one-time token that you send back in a DM (direct message) before it
73
+ clicks the final confirm button. **It is default-off**, sits behind
74
+ every safety check the project ships, and stays hidden in the public
75
+ dashboard until the upstream B-3 surface (browser-history research)
76
+ has run smoothly for six weeks.
77
+
78
+ This page is written so it's safe to read whether you've turned it on
79
79
  or not.
80
80
 
81
81
  ## What's Actually Gated
@@ -93,16 +93,15 @@ Before B-4 can run, every one of these must be true:
93
93
  3. At least one **primary DM channel** is set (Slack / Telegram /
94
94
  Discord / WhatsApp). The single-use token is delivered there; the
95
95
  dashboard never shows the raw token.
96
- 4. The **site is on your B-4 allowlist**. Per-site enablement happens
97
- via `PATCH /api/browser-automation/sites/:siteKey/b4-config`
98
- (Approve). Sites not in the allowlist cannot run a B-4 flow even
99
- if the master toggle is on.
96
+ 4. The **site is on your B-4 allowlist**. You enable each site one at
97
+ a time via `PATCH /api/browser-automation/sites/:siteKey/b4-config`
98
+ (Approve). A site that isn't on the allowlist can't run a B-4 flow,
99
+ even when the master toggle is on.
100
100
  5. The **site is signed in** through the B-2.5 per-site sign-in
101
101
  flow (`POST /api/browser-automation/sites/:siteKey/connect` →
102
102
  sign in by hand in the spawned UI Chromium →
103
- `POST .../finalize`). The daemon stores the profile in a
104
- restricted directory the absolute-block layer protects from any
105
- skill.
103
+ `POST .../finalize`). The daemon keeps the profile in a locked-down
104
+ directory that no skill can reach (the absolute-block layer).
106
105
 
107
106
  ## Structural Defences (no hardcoded category denylist)
108
107
 
@@ -117,8 +116,10 @@ category list:
117
116
  navigation that resolves to a private (RFC1918), loopback,
118
117
  link-local, multicast, cloud-metadata (`169.254.169.254`), or the
119
118
  IPv6 equivalents is denied at the egress chokepoint
120
- (`shouldDenyEgress` in `egress-denylist.ts`). This is the
121
- defence-in-depth against SSRF it cannot be turned off.
119
+ (`shouldDenyEgress` in `egress-denylist.ts`). This is the extra
120
+ layer of defence against SSRF (server-side request forgery, where a
121
+ request is tricked into reaching an internal address) — it cannot be
122
+ turned off.
122
123
  2. **Payment-path blocker.** A URL-pattern matcher
123
124
  (`payment-path-blocker.ts`) trips at form-submit time on
124
125
  payment-handoff paths so the agent can't silently push a
@@ -14,7 +14,6 @@ summary: |
14
14
  rate limits gate the flow.
15
15
  section: operations
16
16
  tags:
17
- - core
18
17
  - notifications
19
18
  - operations
20
19
  status: stable
@@ -23,7 +22,7 @@ ask_examples:
23
22
  - How do I limit how often it notifies me?
24
23
  locale: en-US
25
24
  created: 2026-04-25
26
- updated: 2026-06-10
25
+ updated: 2026-07-01
27
26
  keywords:
28
27
  - notification
29
28
  - notify
@@ -54,15 +53,16 @@ api_endpoints:
54
53
 
55
54
  ## In One Sentence
56
55
 
57
- Outbound DMs the agent sends through the paired messaging app, gated
58
- by quiet hours and rate limits.
56
+ Outbound DMs the agent sends you through your paired messaging app,
57
+ held back by quiet hours and capped by rate limits.
59
58
 
60
59
  ## What It Does
61
60
 
62
- - Routines, observations, and approvals enqueue notifications.
63
- - Quiet hours hold notifications until the window ends.
64
- - Per-hour and per-day rate limits cap the volume.
65
- - Batching folds multiple small alerts of the same event type into a
61
+ - Routines, observations, and approvals line up notifications to send.
62
+ - Quiet hours (your do-not-disturb window) hold notifications until the
63
+ window ends.
64
+ - Per-hour and per-day rate limits cap how many you get.
65
+ - Batching folds several small alerts of the same event type into a
66
66
  single message.
67
67
 
68
68
  ## How a Notification Flows
@@ -74,13 +74,13 @@ by quiet hours and rate limits.
74
74
  4. It is sent to the operator over `primaryPlatform` (or, when set, the
75
75
  exact channels in `defaultNotificationPlatforms`).
76
76
 
77
- Explicit agent notifications (`POST /api/notify`) ride the same gates
78
- with one difference: inside quiet hours they are **deferred, not
79
- dropped** — the full message is queued as a scheduled DM that fires
80
- when the window ends (visible under Schedule), and repeat sends from
81
- the same agent overnight coalesce into one combined DM. Outside quiet
82
- hours the per-hour / per-day caps apply; a capped call is rejected
83
- (`rate_limited`) rather than silently queued, so the agent can adapt.
77
+ Explicit agent notifications (`POST /api/notify`) go through the same
78
+ checks, with one difference: inside quiet hours they are **deferred,
79
+ not dropped** — the full message is queued as a scheduled DM that fires
80
+ when the window ends (visible under Schedule), and repeat sends from the
81
+ same agent overnight merge into one combined DM. Outside quiet hours the
82
+ per-hour / per-day caps apply; a capped call is rejected (`rate_limited`)
83
+ rather than silently queued, so the agent can adapt.
84
84
 
85
85
  ### Safety categories always get through
86
86
 
@@ -17,7 +17,6 @@ section: operations
17
17
  tags:
18
18
  - operations
19
19
  - notifications
20
- - core
21
20
  status: stable
22
21
  ask_examples:
23
22
  - How do I stop notifications at night?
@@ -25,7 +24,7 @@ ask_examples:
25
24
  - Will routines still run during quiet hours?
26
25
  locale: en-US
27
26
  created: 2026-04-25
28
- updated: 2026-06-10
27
+ updated: 2026-07-01
29
28
  keywords:
30
29
  - quiet hours
31
30
  - dnd
@@ -57,14 +56,14 @@ alerts still get through.
57
56
 
58
57
  ## What It Does
59
58
 
60
- Quiet hours only gate *agent-initiated* proactive notifications. During
59
+ Quiet hours only affect *proactive* notifications — the messages the
60
+ agent starts on its own. They do not touch replies you asked for. During
61
61
  the window:
62
62
 
63
63
  - **A normal proactive notification is suppressed.** If nothing of the
64
- same event type was sent recently, the message goes straight to the
65
- notification path, sees that it is quiet hours, and is logged as
66
- `suppressed` — it is **dropped, not held**. You will not receive it
67
- later.
64
+ same event type was sent recently, the message reaches the send step,
65
+ finds that quiet hours are active, and is logged as `suppressed` — it
66
+ is **dropped, not held**. You will not receive it later.
68
67
  - **An explicit agent notification (`POST /api/notify`) is deferred,
69
68
  not dropped.** When an agent session calls the notify endpoint inside
70
69
  the window, the full message is queued as a scheduled DM that fires
@@ -76,11 +75,11 @@ the window:
76
75
  end (or released immediately when the new window no longer covers
77
76
  the current time).
78
77
  - **A notification already in a batch queue is deferred, not dropped.**
79
- Aitne batches repeat notifications of the same event type within
80
- `batchIntervalMinutes`. When a batch is pending and quiet hours are
81
- active, the flush is pushed to the wall-clock moment the window ends,
82
- so that combined message arrives when you wake instead of being
83
- suppressed.
78
+ Aitne groups repeat notifications into batches (see
79
+ [Notifications](notifications.md) for how batching works). When a batch
80
+ is pending and quiet hours are active, its flush is pushed to the
81
+ wall-clock moment the window ends, so the combined message arrives when
82
+ you wake instead of being suppressed.
84
83
  - **Reactive DMs still respond.** A direct reply to your message
85
84
  bypasses quiet hours, rate limits, and batching entirely.
86
85
  - **Safety-category alerts still wake you.** Notifications tagged
@@ -111,9 +110,9 @@ the window:
111
110
 
112
111
  Continuously. Every proactive notification checks `quietHoursStart` and
113
112
  `quietHoursEnd` against the current local time (in the configured
114
- timezone) before sending. The window may wrap midnight — the default
115
- `22:00` → `08:00` is an overnight shape. Setting start equal to end
116
- (e.g. `00:00` / `00:00`) disables quiet hours.
113
+ timezone) before sending. The window may cross midnight — the default
114
+ `22:00` → `08:00` is an overnight window. Setting start equal to end
115
+ (e.g. `00:00` / `00:00`) turns quiet hours off.
117
116
 
118
117
  ## Where in the Dashboard
119
118
 
@@ -26,7 +26,7 @@ ask_examples:
26
26
  - Why didn't I get a reminder before my meeting?
27
27
  locale: en-US
28
28
  created: 2026-04-25
29
- updated: 2026-05-28
29
+ updated: 2026-07-01
30
30
  keywords:
31
31
  - schedule approaching
32
32
  - pre-event reminder
@@ -49,16 +49,17 @@ Pre-event reminders fire 15 minutes before each calendar event.
49
49
 
50
50
  ## What It Does
51
51
 
52
- - Watches upcoming calendar events and fires a notification ~15
52
+ - Watches upcoming calendar events and sends a notification ~15
53
53
  minutes before each one. The lead time is fixed in
54
- `imminent-event-scheduler.ts` (not a config key today).
55
- - Emits one `schedule.approaching` event per item via the EventBus
56
- when the event is `≤ 15 minutes` away. The event is handled at the
57
- `medium` tier.
58
- - Deduplicates via the `imminent_event_notifications` table, keyed on
59
- the provider's stable event id, so the same event never fires twice
60
- across reschedules, restarts, or repeated poll cycles. Rows are
61
- pruned after 24 hours.
54
+ `imminent-event-scheduler.ts` (there is no config key for it today).
55
+ - When an event is `≤ 15 minutes` away, it emits one
56
+ `schedule.approaching` event per item on the EventBus (the daemon's
57
+ internal message bus). That event is handled at the `medium` tier.
58
+ - To avoid duplicate reminders, it records each fired event in the
59
+ `imminent_event_notifications` table, keyed on the provider's stable
60
+ event id. The same event never fires twice across reschedules,
61
+ restarts, or repeated poll cycles, and rows are pruned after 24
62
+ hours.
62
63
 
63
64
  ## How It Is Triggered
64
65
 
@@ -71,10 +72,11 @@ integration mode:
71
72
  direct mode and the delegated-sync worker in delegated mode).
72
73
  - **`native` mode** — the daemon does not poll, so it reads
73
74
  `observations` rows instead. These are posted by the agent's
74
- native-mode `routine.fetch_window` pre-pass. Because that pre-pass
75
- refreshes on the activity-scan tick (~60-minute cadence), events
76
- scheduled with less than ~60 minutes of lead time may miss their
77
- reminder. Direct mode (5-minute poll) does not have this limit.
75
+ native-mode `routine.fetch_window` pre-pass (the pre-run scan that
76
+ gathers fresh context). Because that pre-pass only refreshes on the
77
+ activity-scan tick (~60-minute cadence), an event scheduled with
78
+ less than ~60 minutes of lead time can miss its reminder. Direct
79
+ mode, which polls every 5 minutes, does not have this limit.
78
80
 
79
81
  Cross-source dedup is automatic: snapshot and observation rows for the
80
82
  same event share the provider's event id, so they collapse into one
@@ -20,7 +20,6 @@ tags:
20
20
  - autonomous
21
21
  - observations
22
22
  - polling
23
- - activity-scan
24
23
  status: stable
25
24
  ui_anchors:
26
25
  - /agents/activity-scan
@@ -34,7 +33,7 @@ ask_examples:
34
33
  - How do I tune the gate's freshness window?
35
34
  locale: en-US
36
35
  created: 2026-04-25
37
- updated: 2026-06-10
36
+ updated: 2026-07-01
38
37
  keywords:
39
38
  - hourly
40
39
  - observations
@@ -70,11 +69,13 @@ config_keys:
70
69
 
71
70
  # Activity Scan
72
71
 
73
- A medium-tier routine that drains the observations queue every interval
74
- during active hours and decides whether the accumulated change
75
- pattern warrants notifying you or appending to `state/today.md`. The
76
- "decide" step is a four-layer gate designed to keep quiet days quiet
77
- without missing the moment when something piles up.
72
+ A medium-tier routine that runs every interval during your active
73
+ hours (the daily window when the agent is allowed to work). Each run
74
+ empties the pending observations queue and decides whether the changes
75
+ that piled up are worth notifying you about or just worth logging to
76
+ `state/today.md`. That "decide" step is a four-layer gate, built to
77
+ keep quiet days quiet without missing the moment something actually
78
+ matters.
78
79
 
79
80
  ## When It Runs
80
81
 
@@ -89,7 +90,8 @@ The legacy `activityScan*` config keys are deprecated fallbacks (see
89
90
  (recoverable — the dispatcher enqueues a `queueMorningRoutineWake`
90
91
  self-recovery and the activity scan resumes after the morning
91
92
  routine succeeds).
92
- - **Skips** when another activity scan is in flight (atomic flag).
93
+ - **Skips** when another activity scan is already running (an atomic
94
+ in-flight flag stops two runs from overlapping).
93
95
  - **Skips** when accumulated signal is below the agent's **min
94
96
  observations** threshold and the heartbeat window
95
97
  (`activityScanHeartbeatHours`) hasn't elapsed.
@@ -119,9 +121,10 @@ Telemetry: `agent_actions.detail.harvest_ran` /
119
121
 
120
122
  ### Layer 2 — Signal compute
121
123
 
122
- `computeActivityScanSignals` reads the observation table mode-blind
123
- it filters by source-prefix sets derived from
124
- `INTEGRATION_DESCRIPTORS`, never by `actor`. Signal categories
124
+ `computeActivityScanSignals` reads the observation table mode-blind
125
+ (it does not care which integration mode wrote a row) — it filters by
126
+ source-prefix sets derived from `INTEGRATION_DESCRIPTORS`, never by
127
+ `actor`. Signal categories
125
128
  include unread-mail / event-change / repo-change / browser-history
126
129
  clusters; each category produces a (count, last-seen, summary)
127
130
  tuple. The pre-pass freshness gate from Layer 1 is what guarantees
@@ -22,7 +22,6 @@ tags:
22
22
  - agents
23
23
  - autonomous
24
24
  - scheduler
25
- - advanced
26
25
  status: deprecated
27
26
  ask_examples:
28
27
  - What happened to my custom routines?
@@ -31,7 +30,7 @@ ask_examples:
31
30
  - How do I create a recurring task now?
32
31
  locale: en-US
33
32
  created: 2026-04-25
34
- updated: 2026-06-10
33
+ updated: 2026-07-01
35
34
  keywords:
36
35
  - custom routine
37
36
  - routine.custom.<slug>
@@ -73,19 +72,21 @@ once, at the first daemon start after the upgrade.
73
72
  - Recurring work you define is now an **Agent**: a
74
73
  `policies/agents/<slug>/agent.md` file that appears on the
75
74
  **Agents** page (`/agents`) with its schedule, an enable toggle, run
76
- metrics, execution history, and a **Run now** button — surfaces
75
+ metrics, execution history, and a **Run now** button — features
77
76
  custom routines never had. See
78
77
  [Create a Recurring Agent](../../guides/add-a-custom-routine.md).
79
78
 
80
79
  ## The One-Time Migration
81
80
 
82
- At the first daemon start after the upgrade and only once, guarded
83
- by a persisted flag every file under `policies/routines/custom/` is
81
+ The first time the daemon (Aitne's background service) starts after
82
+ the upgrade — and only that once, guarded by a saved flag so it can
83
+ never run twice — every file under `policies/routines/custom/` is
84
84
  examined:
85
85
 
86
86
  - A **valid routine becomes a user Agent** at
87
87
  `policies/agents/<slug>/agent.md` carrying over:
88
- - the same **cron expression** (pinned to your configured timezone),
88
+ - the same **cron expression** (the schedule rule, pinned to your
89
+ configured timezone),
89
90
  - the same **model tier** (`backend_tier` → the Agent's tier),
90
91
  - the same **per-run budget** (`max_budget_usd`),
91
92
  - the same **enabled state** — a disabled routine migrates disabled.
@@ -95,7 +96,8 @@ examined:
95
96
  it came from (`Migrated from custom routine "<slug>".`).
96
97
  - The **source file is never deleted.** It is rewritten in place with
97
98
  `enabled: false` and a `migrated_to_agent: <slug>` marker in its
98
- frontmatter, so it is visibly inert while your content is preserved.
99
+ frontmatter, so you can plainly see it no longer runs while your
100
+ original content is preserved.
99
101
 
100
102
  ### Collisions and invalid files
101
103
 
@@ -17,8 +17,6 @@ section: routines
17
17
  tags:
18
18
  - routines
19
19
  - autonomous
20
- - daily
21
- - core
22
20
  status: stable
23
21
  ask_examples:
24
22
  - When does the evening review run?
@@ -27,7 +25,7 @@ ask_examples:
27
25
  - How do I disable the evening review?
28
26
  locale: en-US
29
27
  created: 2026-04-25
30
- updated: 2026-06-10
28
+ updated: 2026-07-01
31
29
  keywords:
32
30
  - evening review
33
31
  - retro
@@ -89,10 +87,11 @@ rather than producing a chatty end-of-day report.
89
87
 
90
88
  ## When It Runs / How It Is Triggered
91
89
 
92
- Every day at **18:00 local time**, exactly once. The cron expression
93
- (`0 18 * * *`) is fixed in `packages/daemon/src/core/scheduler.ts`; the
94
- fire time is not operator-configurable. Like every autonomous cron, the
95
- run is skipped while the agent is paused (`!stop`) or setup is incomplete.
90
+ Every day at **18:00 local time**, exactly once. The schedule — a cron
91
+ expression (`0 18 * * *`, the standard five-field way to write "18:00 every
92
+ day") is fixed in `packages/daemon/src/core/scheduler.ts`, so you can't
93
+ change the fire time. Like every autonomous routine, the run is skipped
94
+ while the agent is paused (`!stop`) or setup is not finished.
96
95
 
97
96
  ## What It Outputs
98
97
 
@@ -16,8 +16,7 @@ section: routines
16
16
  tags:
17
17
  - routines
18
18
  - autonomous
19
- - daily
20
- - core
19
+ - scheduler
21
20
  status: stable
22
21
  ask_examples:
23
22
  - When does morning routine run?
@@ -26,7 +25,7 @@ ask_examples:
26
25
  - What model does morning routine use?
27
26
  locale: en-US
28
27
  created: 2026-04-25
29
- updated: 2026-06-10
28
+ updated: 2026-07-01
30
29
  keywords:
31
30
  - morning
32
31
  - day plan
@@ -63,9 +62,10 @@ context_files:
63
62
 
64
63
  ## In One Sentence
65
64
 
66
- Once per agent day, at `dayBoundaryHour` local time, Aitne
67
- rebuilds `state/today.md` and the day's schedule from your calendar, mail,
68
- roadmap, and recent observations.
65
+ Once per agent day (the daily window that starts when "today" rolls
66
+ over), at `dayBoundaryHour` local time, Aitne rebuilds `state/today.md`
67
+ and the day's schedule from your calendar, mail, roadmap, and recent
68
+ observations.
69
69
 
70
70
  ## What It Does
71
71
 
@@ -74,16 +74,17 @@ It runs as a **two-stage pipeline**, with both stages dispatched in
74
74
  parallel:
75
75
 
76
76
  - **Stage A** (`routine.morning_routine_today`, medium tier) rebuilds
77
- `state/today.md`, walks the roadmap, fans out the day's schedule, and
78
- self-reports structured metadata.
79
- - **Stage B** (`routine.morning_routine_journal`, lite tier) authors
77
+ `state/today.md`, walks the roadmap, fans out the day's schedule (queues
78
+ each of today's scheduled tasks), and reports structured metadata about
79
+ the run.
80
+ - **Stage B** (`routine.morning_routine_journal`, lite tier) writes
80
81
  yesterday's daily journal at `journal/daily/<yesterday>.md` from a
81
- daemon-prepared skeleton, then drops the run's audit-trail paragraph
82
- into `journal/agent.md`.
82
+ daemon-prepared skeleton, then appends the run's audit-trail paragraph
83
+ to `journal/agent.md`.
83
84
 
84
- Every downstream routine for the next 24 hours reads Stage A's output,
85
- so a bad morning briefing degrades the entire day hence the
86
- medium-tier ceiling on Stage A even after the split.
85
+ Every routine that runs over the next 24 hours reads Stage A's output, so
86
+ a bad morning briefing drags down the whole day. That is why Stage A stays
87
+ capped at the medium tier even after the split.
87
88
 
88
89
  Within Stage A, the work proceeds in this order:
89
90
 
@@ -103,12 +104,12 @@ so a post-midnight install does not run two morning routines back-to-back.
103
104
  There is no separate `morningRoutineHour` — the morning routine and the
104
105
  agent-day rollover are the same instant.
105
106
 
106
- There is no separate "initial" process key. The first morning after
107
- setup is detected inline by Stage A from the absence of `state/yesterday.md`;
108
- the daemon injects a `<roadmap_skeleton>` block carrying the pre-aggregated
109
- Annual Goals / Quarterly Focus / Preparation Timeline facts so Stage A
110
- can populate the wizard's placeholder roadmap on medium tier instead of
111
- paying for a one-shot high-tier session. (The dedicated
107
+ There is no separate "initial" process key. Stage A detects the first
108
+ morning after setup on its own, from the missing `state/yesterday.md` file.
109
+ The daemon then injects a `<roadmap_skeleton>` block carrying the
110
+ pre-aggregated Annual Goals / Quarterly Focus / Preparation Timeline facts,
111
+ so Stage A can fill in the wizard's placeholder roadmap on the medium tier
112
+ instead of paying for a one-shot high-tier session. (The dedicated
112
113
  `routine.morning_routine_initial` process key — along with its high-tier
113
114
  seed — was retired in Phase 7, 2026-05-16; the first-run branch now flows
114
115
  through the parent `routine.morning_routine` envelope.)
@@ -135,7 +136,7 @@ through the parent `routine.morning_routine` envelope.)
135
136
  | `dayBoundaryHour` | `4` | Both the agent-day boundary and the morning-routine fire time. See [Agent Day](../../concepts/agent-day.md). |
136
137
  | Stage A tier (`routine.morning_routine_today`) | medium (Sonnet 5) | Synthesises `state/today.md` + the day's roadmap fan-out. Adjustable per-row in Settings → Models. |
137
138
  | Stage B tier (`routine.morning_routine_journal`) | lite (Haiku 4.5) | Authors `journal/daily/<date>.md` and the `journal/agent.md` audit paragraph. |
138
- | Stage A max turns / budget | 50 turns / $1.50 | Per-execute envelope for `routine.morning_routine_today`. Adjustable in Settings → Models. |
139
+ | Stage A max turns / budget | 50 turns / $2.00 | Per-execute envelope for `routine.morning_routine_today`. Adjustable in Settings → Models. |
139
140
  | Stage B max turns / budget | 20 turns / $0.30 | Per-execute envelope for `routine.morning_routine_journal`. |
140
141
 
141
142
  The parent `routine.morning_routine` key keeps its own envelope (50 turns / $2.00) for the pipeline entry point. Codex and Gemini backends scale the dollar caps by a per-tier factor (lite ×2.5, medium ×1.5); the router enforces the cap before token costs accumulate.