@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
@@ -26,7 +26,7 @@ ask_examples:
26
26
  - How often does the daemon poll my repos?
27
27
  locale: en-US
28
28
  created: 2026-04-25
29
- updated: 2026-06-07
29
+ updated: 2026-07-01
30
30
  keywords:
31
31
  - git
32
32
  - commit
@@ -53,31 +53,33 @@ api_endpoints:
53
53
 
54
54
  # Git
55
55
 
56
- Add local git repositories to a watched set; the daemon polls them
57
- and the activity scan decides whether the recent activity is worth
58
- flagging.
56
+ Add local git repositories to a watched set. The daemon checks them
57
+ on a schedule (it polls them), and the activity scan decides whether
58
+ the recent activity is worth flagging.
59
59
 
60
60
  ## What It Does
61
61
 
62
- - **Polls** each watched repo every `gitPollIntervalSeconds`.
63
- - **Records observations** when new commits land between polls. The
64
- commit author is included so agent-originated commits do not
65
- re-surface to the agent (defended via `AgentWriteTracker`).
62
+ - **Checks (polls)** each watched repo every `gitPollIntervalSeconds`
63
+ seconds.
64
+ - **Records an observation** when new commits land between two checks.
65
+ It notes who authored each commit, so commits the agent made itself
66
+ are not shown back to it (enforced by `AgentWriteTracker`).
66
67
  - **Surfaces patterns**, not individual commits — three small commits
67
- in an hour will not page you.
68
+ in an hour will not each trigger a notification.
68
69
 
69
70
  The agent never pushes, never amends, never force-resets. Read-only
70
71
  by design.
71
72
 
72
73
  ## When It Runs / How It Is Triggered
73
74
 
74
- - The poller is continuous.
75
- - The activity scan consumes the accumulated observations.
75
+ - The poller runs continuously in the background.
76
+ - The activity scan reads the observations it has collected.
76
77
 
77
78
  ## What It Outputs
78
79
 
79
- - An `observation` row per detected change set.
80
- - A summary in the activity scan's output when observations qualified.
80
+ - One `observation` row for each detected set of changes.
81
+ - A summary in the activity scan's output when those observations are
82
+ worth reporting.
81
83
 
82
84
  ## Where in the Dashboard
83
85
 
@@ -29,7 +29,7 @@ ask_examples:
29
29
  - Where do I add a GitHub repo to watch?
30
30
  locale: en-US
31
31
  created: 2026-04-25
32
- updated: 2026-06-07
32
+ updated: 2026-07-01
33
33
  keywords:
34
34
  - github
35
35
  - issue
@@ -61,14 +61,16 @@ context_files:
61
61
 
62
62
  # GitHub
63
63
 
64
- The daemon polls GitHub via the local `gh` CLI: review requests, CI
65
- failures on the default branch, security alerts, and assignments
66
- become DMs; everything else is recorded for the activity scan.
64
+ The daemon polls GitHub through the local `gh` CLI. Four kinds of
65
+ signal turn into a direct message (DM): review requests, CI failures
66
+ on the default branch, security alerts, and assignments. Everything
67
+ else is recorded for the activity scan instead of pinging you.
67
68
 
68
69
  ## What It Does
69
70
 
70
71
  - **Polls Notifications** every `githubPollIntervalSeconds` (default
71
- 1800s / 30 min) using ETag caching 304 responses cost no
72
+ 1800s / 30 min) using ETag caching, so when nothing has changed
73
+ GitHub returns a 304 ("not modified") and that poll costs no
72
74
  rate-limit quota.
73
75
  - **Polls workflow_runs** per watched GitHub repository, filtered by
74
76
  `status=failure`. Each repo's GitHub side comes from a unified
@@ -84,8 +86,8 @@ The agent never auto-comments, auto-merges, or pushes.
84
86
  ## High-priority events
85
87
 
86
88
  The agent will DM the user (priority `high`; during quiet hours the DM
87
- is deferred until they end rather than dropped — only `critical`
88
- safety messages break through) on:
89
+ waits until quiet hours end rather than being dropped — only
90
+ `critical` safety messages break through) on:
89
91
 
90
92
  - A teammate or bot **requested your review** on a PR — only when it
91
93
  looks time-sensitive (release-blocker keywords in the title, or the
@@ -149,9 +151,9 @@ Watched repos are no longer config keys. The old `gitRepos` /
149
151
  cutover — repos now live in the `repositories` table and are managed on
150
152
  **Connections → Repositories**. Per-repo polling cadence is set on
151
153
  **My Life → Git** and overrides the global interval for that repo's
152
- workflow-runs poll. The global interval is the floor a per-repo
153
- cadence longer than it slows that repo down, while a shorter one
154
- still polls at the global tick.
154
+ workflow-runs poll. The global interval is the floor: a per-repo
155
+ cadence longer than the global one slows that repo down, but a shorter
156
+ one still only polls at the global tick.
155
157
 
156
158
  ## When Something Goes Wrong
157
159
 
@@ -19,7 +19,6 @@ section: integrations
19
19
  tags:
20
20
  - integrations
21
21
  - mail
22
- - core
23
22
  status: stable
24
23
  ask_examples:
25
24
  - How do I connect my Gmail to the agent?
@@ -27,7 +26,7 @@ ask_examples:
27
26
  - How do I add a second mail account?
28
27
  locale: en-US
29
28
  created: 2026-04-25
30
- updated: 2026-06-07
29
+ updated: 2026-07-01
31
30
  keywords:
32
31
  - mail
33
32
  - gmail
@@ -60,46 +59,46 @@ context_files:
60
59
 
61
60
  # Mail
62
61
 
63
- Connect one or more mailboxes (Gmail, Outlook, Yahoo, or iCloud) and
64
- Aitne polls them, classifies incoming threads, and
65
- lets the agent search / label / read via the `mail` skill. Search is
66
- local — backed by SQLite FTS5 so the agent doesn't need to round-trip
67
- the provider for every query.
62
+ Connect one or more mailboxes (Gmail, Outlook, Yahoo, or iCloud). Aitne
63
+ then polls them, sorts incoming threads, and lets the agent search,
64
+ label, and read your mail through the `mail` skill. Search runs locally,
65
+ backed by a SQLite full-text index (FTS5), so the agent doesn't have to
66
+ call the provider every time you ask about your inbox.
68
67
 
69
68
  ## What It Does
70
69
 
71
- - **Read & search** existing threads (FTS5-backed local index).
72
- - **Classify** incoming messages — is it a travel booking, a receipt
73
- attachment, a Kindle notebook export.
74
- - **Label** threads so the operator and the agent agree on triage state.
75
- - **Surface** the small set of mail items in the morning routine that
76
- actually need owner action.
70
+ - **Read & search** existing threads (from the local FTS5 index).
71
+ - **Classify** incoming messages — for example, a travel booking, a
72
+ receipt attachment, or a Kindle notebook export.
73
+ - **Label** threads so you and the agent agree on where each one stands.
74
+ - **Surface** the few mail items in the morning routine that actually
75
+ need your attention.
77
76
 
78
- The agent **prefers drafts** over sending. By convention it creates a
79
- draft (`POST /mail/:account/drafts`) and lets you review and hit send
77
+ The agent **prefers drafts** over sending. By default it writes a draft
78
+ (`POST /mail/:account/drafts`) and leaves it for you to review and send
80
79
  yourself. Direct send (`POST /mail/:account/messages/send`) is *not*
81
- blocked — it is classified as an autonomous action, so the daemon does
82
- not DM you for approval first. The agent only sends directly when it
83
- judges you'd clearly want it to, and it tells you afterward; during the
84
- activity scan the `mail` skill is hard read-only (no sending, drafting,
85
- labeling, or filing).
80
+ blocked — it counts as an autonomous action, so the daemon does not DM
81
+ you for approval first. The agent only sends on its own when it's clear
82
+ you'd want it to, and it tells you afterward. During the activity scan
83
+ the `mail` skill is strictly read-only: no sending, drafting, labeling,
84
+ or filing.
86
85
 
87
86
  ## When It Runs / How It Is Triggered
88
87
 
89
- - In `direct` mode a poller pulls new messages on a cadence. Gmail uses
90
- `gmailPollIntervalSeconds` (default 600); all other accounts (Outlook,
91
- Yahoo, iCloud) use `mailPollIntervalSeconds` (default 180).
92
- The Gmail cadence is adjustable under **Settings → Infrastructure**.
93
- - The morning routine reads the labeled queue and decides which need
94
- surfacing.
95
- - Reactive turns (you DM "what's in my mail?") use the `mail` skill on
96
- demand.
88
+ - In `direct` mode a poller checks for new messages on a set interval.
89
+ Gmail uses `gmailPollIntervalSeconds` (default 600); all other accounts
90
+ (Outlook, Yahoo, iCloud) use `mailPollIntervalSeconds` (default 180).
91
+ You can adjust the Gmail interval under **Settings → Infrastructure**.
92
+ - The morning routine reads the labeled queue and picks which threads to
93
+ bring to your attention.
94
+ - When you ask directly (you DM "what's in my mail?"), the agent uses the
95
+ `mail` skill on demand.
97
96
 
98
97
  ## Integration Modes
99
98
 
100
99
  Gmail and Outlook support all four integration modes
101
- (`direct | delegated | native | disabled`); each may sit in a
102
- different mode. Yahoo and iCloud have no integration-registry entry
100
+ (`direct | delegated | native | disabled`), and each account can sit in
101
+ a different mode. Yahoo and iCloud have no integration-registry entry, so
103
102
  they are direct-only by design.
104
103
 
105
104
  | Provider | Direct | Delegated | Native | Notes |
@@ -109,9 +108,10 @@ they are direct-only by design.
109
108
  | Yahoo | ✓ | — | — | IMAP transport. Direct-only; never enters the delegated surface. |
110
109
  | iCloud | ✓ | — | — | IMAP transport. Direct-only; never enters the delegated surface. |
111
110
 
112
- Mode flips run through the §14.7 live probe + the per-key
113
- `runtime_state.integration_flip_lock:<key>`. Changing the main
114
- backend cascades unmatched `native` rows to `disabled`.
111
+ Switching a provider between modes goes through the §14.7 live probe and
112
+ a per-key lock (`runtime_state.integration_flip_lock:<key>`). If you
113
+ change the main backend, any `native` rows it no longer matches fall back
114
+ to `disabled`.
115
115
 
116
116
  See [Delegated Mode](../../concepts/delegated-mode.md) for the full
117
117
  mode lifecycle.
@@ -119,10 +119,10 @@ mode lifecycle.
119
119
  ## What It Outputs
120
120
 
121
121
  - New threads land in the local `mail_messages_index` table
122
- (FTS-indexed via `fts_mail_messages`).
123
- - Labels/tags are written via the provider API when the agent applies
124
- them (`POST /mail/:account/messages/:id/tags`).
125
- - A short "mail" section in `state/today.md` when items qualified.
122
+ (full-text indexed via `fts_mail_messages`).
123
+ - Labels and tags are written back through the provider API when the
124
+ agent applies them (`POST /mail/:account/messages/:id/tags`).
125
+ - A short "mail" section in `state/today.md` when items qualify.
126
126
 
127
127
  ## Where in the Dashboard
128
128
 
@@ -132,18 +132,20 @@ mode lifecycle.
132
132
 
133
133
  ## Configuration
134
134
 
135
- Per account you choose a provider kind (`gmail` / `outlook` / `yahoo` /
136
- `icloud`) plus credentials and an optional display label. You
135
+ For each account you choose a provider kind (`gmail` / `outlook` /
136
+ `yahoo` / `icloud`), plus credentials and an optional display label. You
137
137
  pick the kind, not the transport — Yahoo and iCloud connect over IMAP
138
- under the hood, but that is an implementation detail. The set of enabled
139
- providers is `enabledMailProviders` (default `["gmail"]`).
138
+ behind the scenes, but that's an implementation detail you don't manage.
139
+ The list of enabled providers is `enabledMailProviders` (default
140
+ `["gmail"]`).
140
141
 
141
142
  ## When Something Goes Wrong
142
143
 
143
- - An **auth failure** points at expired credentials. The dashboard's
144
- auth-health card flips to a warning. See [Auth Failed](../../troubleshooting/auth-failed.md).
145
- - A **classifier that misses** consistently — switch the model behind
146
- it via the Gmail Classification Model card on `/connections/mail`.
144
+ - An **auth failure** usually means the credentials have expired. The
145
+ dashboard's auth-health card turns to a warning. See
146
+ [Auth Failed](../../troubleshooting/auth-failed.md).
147
+ - A **classifier that keeps guessing wrong** switch the model behind it
148
+ from the Gmail Classification Model card on `/connections/mail`.
147
149
 
148
150
  ## Related
149
151
 
@@ -13,7 +13,6 @@ summary: |
13
13
  section: integrations
14
14
  tags:
15
15
  - integrations
16
- - notion
17
16
  - knowledge
18
17
  - observations
19
18
  status: stable
@@ -24,7 +23,7 @@ ask_examples:
24
23
  - Why are my Notion routine fetches skipped?
25
24
  locale: en-US
26
25
  created: 2026-04-25
27
- updated: 2026-06-11
26
+ updated: 2026-07-01
28
27
  keywords:
29
28
  - notion
30
29
  - page
@@ -48,21 +47,25 @@ api_endpoints:
48
47
 
49
48
  # Notion
50
49
 
51
- Aitne polls the configured Notion databases, records an
52
- observation on change, and the activity scan decides whether anything
53
- warrants surfacing. The agent can also read pages on demand through
50
+ Aitne watches the Notion databases you configure. When a page changes,
51
+ it records an *observation* (a short note that something happened), and
52
+ the [activity scan](../routines/activity-scan.md) the routine that
53
+ periodically reviews recent activity — decides whether anything is worth
54
+ surfacing to you. The agent can also read Notion pages on demand through
54
55
  the `notion` skill.
55
56
 
56
57
  ## What It Does
57
58
 
58
- - Polls Notion via the official API at `notionPollIntervalSeconds`.
59
- - Records an observation per detected change.
59
+ - Checks Notion through the official API on the interval set by
60
+ `notionPollIntervalSeconds`.
61
+ - Records one observation for each change it detects.
60
62
  - Lets the agent read pages on demand.
61
63
 
62
64
  ## When It Runs / How It Is Triggered
63
65
 
64
- Continuous polling in `direct` mode. In `delegated` / `native` / `disabled`
65
- modes the poller does not run — see Integration Modes below.
66
+ The poller runs continuously, but only in `direct` mode. In the
67
+ `delegated`, `native`, and `disabled` modes it does not run — see
68
+ [Integration Modes](#integration-modes) below.
66
69
 
67
70
  ## Integration Modes
68
71
 
@@ -84,8 +87,9 @@ Notion supports all four integration modes (`direct` / `delegated` /
84
87
  `disabled`.
85
88
  - **`disabled`** — silence; no observations, no daemon access.
86
89
 
87
- Switching modes requires the integration flip-lock probe to pass
88
- (connector reachable, capabilities reported). See `POST /api/integrations/notion/probe`.
90
+ Switching modes requires the integration flip-lock probe to pass — a
91
+ quick check that the connector is reachable and reports its
92
+ capabilities. See `POST /api/integrations/notion/probe`.
89
93
 
90
94
  ## Routine Fetch Targets
91
95
 
@@ -8,15 +8,14 @@ aliases:
8
8
  - knowledge vault
9
9
  category: features
10
10
  summary: |
11
- Watch an Obsidian vault for new and changed notes. Changes record
12
- observations the activity scan consumes; the agent can also read
13
- notes on demand.
11
+ Watch an Obsidian vault for new and changed notes. Each change
12
+ records an observation that the activity scan later reviews; the
13
+ agent can also read notes on demand.
14
14
  section: integrations
15
15
  tags:
16
16
  - integrations
17
17
  - knowledge
18
18
  - observations
19
- - obsidian
20
19
  status: stable
21
20
  ask_examples:
22
21
  - How do I connect my Obsidian vault?
@@ -24,7 +23,7 @@ ask_examples:
24
23
  - Why didn't the agent see my new note?
25
24
  locale: en-US
26
25
  created: 2026-04-25
27
- updated: 2026-06-11
26
+ updated: 2026-07-01
28
27
  keywords:
29
28
  - obsidian
30
29
  - vault
@@ -45,18 +44,22 @@ config_keys:
45
44
 
46
45
  # Obsidian
47
46
 
48
- Point Aitne at your Obsidian vault directory; new and changed notes
49
- record observations the activity scan consumes. The agent can read and
50
- write vault notes through the `external-services` skill.
47
+ Point Aitne at your Obsidian vault folder (the directory where your
48
+ notes live). When you add or change a note, Aitne records an
49
+ observation a short note-to-self that the
50
+ [activity scan](../routines/activity-scan.md) reviews on its next run.
51
+ The agent can also read and write vault notes through the
52
+ `external-services` skill.
51
53
 
52
- Reads and writes go through the Obsidian app's CLI the Obsidian app
53
- must be running, or vault read/write calls fail.
54
+ Reads and writes go through the Obsidian app's own command-line tool
55
+ (CLI), so the Obsidian app must be running otherwise vault read and
56
+ write calls fail.
54
57
 
55
58
  ## What It Does
56
59
 
57
- - Watches the vault for filesystem changes.
58
- - Filters out agent-originated writes via `AgentWriteTracker`.
59
- - Records observations for genuine operator edits.
60
+ - Watches the vault folder for file changes.
61
+ - Ignores writes the agent made itself, using `AgentWriteTracker`.
62
+ - Records an observation for each edit you make by hand.
60
63
 
61
64
  ### Will it edit my notes?
62
65
 
@@ -70,10 +73,11 @@ its own output.
70
73
  ## When It Runs / How It Is Triggered
71
74
 
72
75
  Continuously — the watcher runs as long as the daemon is up and a vault
73
- path is configured (`externalObsidianWatch=true`). Saves are debounced
74
- by `obsidianDebounceSeconds` before an observation is recorded; the
75
- [activity scan](../routines/activity-scan.md) later consumes those
76
- observations.
76
+ path is configured (`externalObsidianWatch=true`). After you save,
77
+ Aitne waits `obsidianDebounceSeconds` before recording the change (a
78
+ short pause called debouncing), so a burst of quick saves is folded
79
+ into one observation. The [activity scan](../routines/activity-scan.md)
80
+ picks up those observations on its next run.
77
81
 
78
82
  ## Where in the Dashboard
79
83
 
@@ -84,15 +88,15 @@ observations.
84
88
  | Setting | Default | Notes |
85
89
  |---|---|---|
86
90
  | `externalObsidianVaultPath` | unset | Vault directory; set in Connections → Notes. |
87
- | `externalObsidianWatch` | true | Set false to keep the path but stop recording changes (large-vault churn control). |
88
- | `obsidianDebounceSeconds` | 5 | How long to wait after a save before recording. |
91
+ | `externalObsidianWatch` | true | Set false to keep the path but stop recording changes — handy for a large, busy vault. |
92
+ | `obsidianDebounceSeconds` | 5 | How many seconds to wait after a save before recording. |
89
93
 
90
94
  ## When Something Goes Wrong
91
95
 
92
- - A vault read or write that failed: the Obsidian app must be running,
93
- since reads and writes proxy through its CLI. Open Obsidian and retry.
94
- - A change that did not record: the debounce may have folded multiple
95
- saves; the next one will fire.
96
+ - A read or write failed: the Obsidian app must be running, because
97
+ reads and writes go through its CLI. Open Obsidian and try again.
98
+ - A change didn't show up: the debounce pause may have folded several
99
+ saves together; the next save will record it.
96
100
 
97
101
  ## Related
98
102
 
@@ -28,7 +28,6 @@ tags:
28
28
  - github
29
29
  - autonomous
30
30
  - observations
31
- - core
32
31
  status: stable
33
32
  ask_examples:
34
33
  - What is the My Life › Git page for?
@@ -46,7 +45,7 @@ ask_examples:
46
45
  - How much does one Architecture refresh cost?
47
46
  locale: en-US
48
47
  created: 2026-05-05
49
- updated: 2026-06-07
48
+ updated: 2026-07-01
50
49
  keywords:
51
50
  - my life
52
51
  - git
@@ -102,18 +101,18 @@ The page lists every repository registered on
102
101
  **Connections → Repositories** and exposes three collapsible sections
103
102
  per repo (all open by default so the controls are visible at a glance):
104
103
 
105
- 1. **Polling** — overrides the global `gitPollIntervalSeconds` for
106
- this repository alone. Useful when one repo is high-traffic and
107
- you want it scanned more aggressively (or vice-versa). Also shows
108
- the most recent observations gathered from that repo's polling
109
- sources.
104
+ 1. **Polling** — how often the agent checks this repo for new
105
+ activity. It overrides the global `gitPollIntervalSeconds` for
106
+ this repository alone, which is handy when one repo is busy and you
107
+ want it scanned more often (or the reverse). It also shows the most
108
+ recent observations gathered from that repo's polling sources.
110
109
  2. **Triggers** — fire when matching Git or GitHub events arrive on
111
110
  this repository. Triggers run **alongside** the project-wide
112
111
  task-flow defaults, not in place of them. Each trigger has a
113
112
  workdir mode (`local-clone` or `temp`); local-clone triggers
114
113
  require the repository to have a `localPath`.
115
114
  3. **Daily git management** — opt-in per repo. Enabling it does three
116
- distinct kinds of work, on different cadences:
115
+ distinct kinds of work, each on its own schedule:
117
116
  - On the first **Generate overview** click, writes the curated
118
117
  `knowledge/repos/<slug>/overview.md` skeleton, mirrors the source
119
118
  `README.*` to `knowledge/repos/<slug>/README.md`, and
@@ -26,7 +26,7 @@ ask_examples:
26
26
  - Where do reading-list items get stored?
27
27
  locale: en-US
28
28
  created: 2026-04-25
29
- updated: 2026-06-07
29
+ updated: 2026-07-01
30
30
  keywords:
31
31
  - reading
32
32
  - books
@@ -37,6 +37,7 @@ related:
37
37
  - features/memory-files/user-profile
38
38
  - features/lifestyle/receipts
39
39
  - features/lifestyle/travel-bookings
40
+ - pages/reading
40
41
  api_endpoints:
41
42
  - GET /api/books
42
43
  - PATCH /api/books/:id
@@ -52,7 +53,7 @@ ui_anchors:
52
53
 
53
54
  A reading list backed by the `books` and `reading_highlights` SQLite
54
55
  tables: imports your Kindle highlights, tracks each book's status
55
- (`reading`, `completed`, or `abandoned`), and surfaces the working set
56
+ (`reading`, `completed`, or `abandoned`), and shows your current list
56
57
  at `/reading`.
57
58
 
58
59
  ## What It Does
@@ -65,14 +66,15 @@ at `/reading`.
65
66
  "Export Notebook" email.
66
67
  - **List** the library on `/reading` or via `GET /api/books`
67
68
  (filterable by `status` and `source`, paginated to 200 rows per call).
68
- - **Mark complete or abandoned** — an existing row is updated via
69
- `PATCH /api/books/:id`. This is an **Approve-tier** write that requires
70
- an operator `Authorization: Bearer` token, so it is driven from the
71
- dashboard, not autonomously by the agent (an unauthenticated agent curl
72
- is rejected with **401** before the handler runs). Setting `status` to
69
+ - **Mark complete or abandoned** — `PATCH /api/books/:id` updates a book
70
+ that already exists. This is an **Approve-tier** write (a change that
71
+ needs your explicit sign-off), so it requires an operator
72
+ `Authorization: Bearer` token and runs from the dashboard rather than
73
+ on the agent's own initiative (an unauthenticated agent curl is
74
+ rejected with **401** before the handler runs). Setting `status` to
73
75
  `completed` stamps `completed_at` automatically; you can also set a 1–5
74
76
  `rating` or `notes`.
75
- - **Recommend** from the list during reactive turns, and refresh the
77
+ - **Recommend** from the list when you ask in a chat, and refresh the
76
78
  reading-taste profile during the weekly review.
77
79
 
78
80
  There is **no bare "add a book" endpoint** — new books arrive through the
@@ -126,5 +128,6 @@ drives the list shape. The reading skill loads in two situations:
126
128
 
127
129
  ## Related
128
130
 
131
+ - [Reading Page](../../pages/reading.md)
129
132
  - [Receipts](receipts.md)
130
133
  - [Travel Bookings](travel-bookings.md)
@@ -16,7 +16,6 @@ summary: |
16
16
  section: lifestyle
17
17
  tags:
18
18
  - lifestyle
19
- - receipts
20
19
  - mail
21
20
  - integrations
22
21
  status: stable
@@ -27,7 +26,7 @@ ask_examples:
27
26
  - What receipts haven't I saved yet?
28
27
  locale: en-US
29
28
  created: 2026-04-25
30
- updated: 2026-06-07
29
+ updated: 2026-07-01
31
30
  keywords:
32
31
  - receipt
33
32
  - invoice
@@ -58,10 +57,10 @@ your external Obsidian vault on request.
58
57
  ## How Detection Works
59
58
 
60
59
  The mail observer scans travel-booking emails across every connected
61
- mail account and records each attachment it finds. Each detected
62
- attachment inserts a row into the `receipts` table, keyed uniquely on
63
- `(account_id, provider_msg_id, attachment_id)` so re-scans are
64
- idempotent. Columns:
60
+ mail account and records each attachment it finds. Every detected
61
+ attachment becomes one row in the `receipts` table. Each row is keyed
62
+ uniquely on `(account_id, provider_msg_id, attachment_id)`, so
63
+ re-scanning the same mail never creates a duplicate. Columns:
65
64
 
66
65
  - `category` — `travel` at detection time; reclassify to `document`
67
66
  via PATCH (nullable on legacy rows)
@@ -72,22 +71,22 @@ idempotent. Columns:
72
71
  vault (see below)
73
72
  - `id`, `created_at` — row identity and detection time
74
73
 
75
- There is no Markdown context file for receipts; the durable record is
76
- the SQLite row plus the optional Obsidian copy.
74
+ There is no Markdown context file for receipts. The lasting record is
75
+ the SQLite row, plus the optional Obsidian copy you save yourself.
77
76
 
78
77
  ## Saving a Receipt to Your Vault
79
78
 
80
- Saving is a two-step flow the download endpoint never writes to the
81
- vault by itself:
79
+ Saving takes two steps. The download endpoint never writes to the vault
80
+ on its own:
82
81
 
83
- 1. The agent downloads the original bytes via
82
+ 1. The agent downloads the original bytes with
84
83
  `POST /api/receipts/:id/download`, which streams the raw attachment
85
- (resolved through the mail registry by `account_id`; oversized files
86
- over 100 MB and orphaned rows with a null `account_id` are rejected).
87
- 2. The agent writes the file into your **external** Obsidian vault — not
88
- the primary management vault — under the convention
89
- `receipts/YYYY/MM/<merchant>-<date>.<ext>` (e.g.
90
- `receipts/2026/04/amazon-2026-04-12.pdf`), then records that path
84
+ (found in the mail registry by `account_id`). Files larger than
85
+ 100 MB, and orphaned rows with a null `account_id`, are rejected.
86
+ 2. The agent writes the file into your **external** Obsidian vault —
87
+ not the primary management vault — using the naming convention
88
+ `receipts/YYYY/MM/<merchant>-<date>.<ext>` (for example,
89
+ `receipts/2026/04/amazon-2026-04-12.pdf`). It then records that path
91
90
  with `PATCH /api/receipts/:id` (body `{"obsidianPath": "..."}`),
92
91
  which also stamps `saved_at`.
93
92
 
@@ -96,11 +95,11 @@ To reclassify a receipt, the agent PATCHes `{"category": "travel"}`
96
95
 
97
96
  ## Where in the Dashboard
98
97
 
99
- There is no dedicated tab today. Receipts surface inline when you ask
100
- for them in chat (e.g. "what receipts haven't I saved yet?"). List and
101
- filter them with `GET /api/receipts` (`category`, `saved`, `limit`
102
- params) and pull totals from `GET /api/receipts/summary`. The full API
103
- is documented in
98
+ There is no dedicated tab yet. Receipts show up inline when you ask for
99
+ them in chat (for example, "what receipts haven't I saved yet?"). List
100
+ and filter them with `GET /api/receipts` (the `category`, `saved`, and
101
+ `limit` params) and pull totals from `GET /api/receipts/summary`. The
102
+ full API is documented in
104
103
  `agent-assets/skills/gmail-lifestyle/references/receipts-api.md`
105
104
  (loaded by the `gmail-lifestyle` skill).
106
105
 
@@ -17,7 +17,6 @@ summary: |
17
17
  section: lifestyle
18
18
  tags:
19
19
  - lifestyle
20
- - travel
21
20
  - mail
22
21
  - integrations
23
22
  status: stable
@@ -27,7 +26,7 @@ ask_examples:
27
26
  - Where are my travel bookings stored?
28
27
  locale: en-US
29
28
  created: 2026-04-25
30
- updated: 2026-06-07
29
+ updated: 2026-07-01
31
30
  keywords:
32
31
  - flight
33
32
  - hotel
@@ -76,10 +75,10 @@ confirmation email never creates a duplicate row.
76
75
 
77
76
  ## How Bookings Get Created
78
77
 
79
- Bookings are extracted from email only — there is no manual "log a
80
- flight" command or DM shortcut. To start capturing travel, connect a
81
- mail account (see [Mail](features/integrations/mail)) and let the
82
- classifier do the rest. The flow is:
78
+ Bookings come from email only — there is no manual "log a flight"
79
+ command or DM shortcut. To start capturing travel, connect a mail
80
+ account (see [Mail](../integrations/mail.md)) and let the classifier
81
+ do the rest. The flow is:
83
82
 
84
83
  1. The mail poller fetches new messages.
85
84
  2. The classifier (`gmail_classify`, lite tier) tags travel
@@ -99,9 +98,10 @@ classifier do the rest. The flow is:
99
98
 
100
99
  ## API
101
100
 
102
- Read-only and status-update access (read endpoints are read-sensitive —
103
- they expose personal travel data; the PATCH endpoint follows the standard
104
- write-safety tier and requires approval):
101
+ These endpoints give read and status-update access. The two read
102
+ endpoints are read-sensitive, because they expose personal travel data.
103
+ The `PATCH` endpoint follows the standard write-safety tier, so it
104
+ requires approval before it runs.
105
105
 
106
106
  ```bash
107
107
  # All bookings (optionally filter by type/status/date range)