@aitne-sh/aitne 0.1.9 → 0.1.10

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 (153) hide show
  1. package/README.md +36 -6
  2. package/agent-assets/docs/concepts/agent-day.md +2 -2
  3. package/agent-assets/docs/concepts/costs-and-quotas.md +4 -3
  4. package/agent-assets/docs/concepts/delegated-mode.md +5 -5
  5. package/agent-assets/docs/concepts/memory-model.md +6 -3
  6. package/agent-assets/docs/concepts/safety-model.md +19 -16
  7. package/agent-assets/docs/concepts/skills.md +2 -2
  8. package/agent-assets/docs/features/integrations/browser-history.md +9 -8
  9. package/agent-assets/docs/features/integrations/calendar.md +4 -4
  10. package/agent-assets/docs/features/integrations/mail.md +3 -2
  11. package/agent-assets/docs/features/lifestyle/git.md +3 -3
  12. package/agent-assets/docs/features/lifestyle/reading.md +15 -8
  13. package/agent-assets/docs/features/lifestyle/travel-bookings.md +4 -3
  14. package/agent-assets/docs/features/memory-files/agent-journal.md +30 -12
  15. package/agent-assets/docs/features/memory-files/agent-lessons.md +177 -0
  16. package/agent-assets/docs/features/memory-files/projects.md +6 -4
  17. package/agent-assets/docs/features/memory-files/roadmap.md +17 -14
  18. package/agent-assets/docs/features/messaging/overview.md +5 -5
  19. package/agent-assets/docs/features/messaging/telegram.md +10 -9
  20. package/agent-assets/docs/features/operations/activity-and-conversations.md +5 -4
  21. package/agent-assets/docs/features/operations/approvals.md +6 -5
  22. package/agent-assets/docs/features/operations/managed-chromium.md +3 -2
  23. package/agent-assets/docs/features/operations/quiet-hours.md +4 -3
  24. package/agent-assets/docs/features/routines/custom-routines.md +11 -7
  25. package/agent-assets/docs/features/routines/evening-review.md +10 -2
  26. package/agent-assets/docs/features/routines/morning-routine.md +4 -3
  27. package/agent-assets/docs/features/routines/weekly-review.md +6 -0
  28. package/agent-assets/docs/features/wiki/commands.md +4 -4
  29. package/agent-assets/docs/features/wiki/cost-and-approval.md +4 -3
  30. package/agent-assets/docs/features/wiki/dashboard.md +7 -6
  31. package/agent-assets/docs/features/wiki/overview.md +3 -3
  32. package/agent-assets/docs/features/wiki/search.md +5 -5
  33. package/agent-assets/docs/features/wiki/workspaces.md +2 -2
  34. package/agent-assets/docs/getting-started/02-first-steps.md +5 -3
  35. package/agent-assets/docs/getting-started/04-first-day.md +2 -2
  36. package/agent-assets/docs/glossary.md +4 -4
  37. package/agent-assets/docs/guides/budget-and-cost-for-wiki.md +2 -2
  38. package/agent-assets/docs/guides/connect-a-new-mail-account.md +4 -2
  39. package/agent-assets/docs/guides/explore-with-trace-and-connect.md +5 -4
  40. package/agent-assets/docs/guides/install-and-run.md +2 -2
  41. package/agent-assets/docs/guides/maintain-wiki-health.md +2 -2
  42. package/agent-assets/docs/guides/pause-the-agent.md +9 -5
  43. package/agent-assets/docs/guides/setup-wizard.md +8 -5
  44. package/agent-assets/docs/guides/use-an-existing-obsidian-vault.md +6 -6
  45. package/agent-assets/docs/reference/api.md +15 -5
  46. package/agent-assets/docs/reference/cli-commands.md +3 -3
  47. package/agent-assets/docs/reference/config.md +21 -4
  48. package/agent-assets/docs/reference/disallowed-tools.md +6 -4
  49. package/agent-assets/docs/reference/knowledge-layout.md +11 -2
  50. package/agent-assets/docs/reference/process-keys.md +2 -2
  51. package/agent-assets/docs/reference/skills.md +5 -4
  52. package/agent-assets/docs/troubleshooting/auth-failed.md +9 -8
  53. package/agent-assets/docs/troubleshooting/dashboard-shows-degraded.md +16 -9
  54. package/agent-assets/docs/troubleshooting/messaging-not-pairing.md +2 -2
  55. package/agent-assets/docs/troubleshooting/quota-exhausted.md +7 -6
  56. package/agent-assets/skills/agent-actions/SKILL.md +23 -39
  57. package/agent-assets/skills/agent-create/SKILL.md +15 -6
  58. package/agent-assets/skills/attach/SKILL.md +8 -27
  59. package/agent-assets/skills/browser-history/SKILL.md +29 -16
  60. package/agent-assets/skills/browser-history-respond/SKILL.md +6 -1
  61. package/agent-assets/skills/browser-task/SKILL.md +22 -27
  62. package/agent-assets/skills/context/SKILL.md +23 -32
  63. package/agent-assets/skills/context/curation.json +12 -12
  64. package/agent-assets/skills/context/references/api.md +17 -17
  65. package/agent-assets/skills/context/references/required-frontmatter.md +10 -9
  66. package/agent-assets/skills/context/references/snapshot-files.md +12 -11
  67. package/agent-assets/skills/context/seeds/file-responsibilities.seed.json +5 -5
  68. package/agent-assets/skills/context/seeds/frontmatter-requirements.seed.json +3 -3
  69. package/agent-assets/skills/docs-search/SKILL.md +19 -31
  70. package/agent-assets/skills/external-services/SKILL.delegated.claude.md +8 -95
  71. package/agent-assets/skills/external-services/SKILL.delegated.codex.md +8 -94
  72. package/agent-assets/skills/external-services/SKILL.delegated.gemini.md +8 -94
  73. package/agent-assets/skills/external-services/SKILL.native.claude.md +2 -2
  74. package/agent-assets/skills/external-services/references/exec-errors.md +32 -0
  75. package/agent-assets/skills/external-services/references/skills-crud.md +5 -5
  76. package/agent-assets/skills/gmail-lifestyle/SKILL.md +3 -2
  77. package/agent-assets/skills/gmail-lifestyle/references/receipts-api.md +4 -0
  78. package/agent-assets/skills/gmail-lifestyle/references/travel-bookings-api.md +9 -0
  79. package/agent-assets/skills/mail/SKILL.delegated.claude.md +13 -25
  80. package/agent-assets/skills/mail/SKILL.delegated.codex.md +3 -2
  81. package/agent-assets/skills/mail/SKILL.delegated.gemini.md +3 -2
  82. package/agent-assets/skills/mail/SKILL.md +10 -18
  83. package/agent-assets/skills/mail/SKILL.native.claude.md +8 -7
  84. package/agent-assets/skills/mail/SKILL.native.codex.md +1 -1
  85. package/agent-assets/skills/mail/SKILL.native.gemini.md +1 -1
  86. package/agent-assets/skills/mail/references/api.md +6 -1
  87. package/agent-assets/skills/mail/references/examples.md +2 -1
  88. package/agent-assets/skills/managed-tasks/SKILL.md +44 -77
  89. package/agent-assets/skills/managed-tasks/references/errors.md +25 -14
  90. package/agent-assets/skills/managed-tasks/references/output-path.md +33 -17
  91. package/agent-assets/skills/managed-tasks/references/recurrence-rule.md +6 -4
  92. package/agent-assets/skills/management-policy/SKILL.md +10 -11
  93. package/agent-assets/skills/management-policy/references/policy-workflow.md +4 -5
  94. package/agent-assets/skills/notify/SKILL.md +11 -13
  95. package/agent-assets/skills/notify/references/priority.md +28 -25
  96. package/agent-assets/skills/notion/SKILL.delegated.claude.md +1 -1
  97. package/agent-assets/skills/notion/SKILL.delegated.codex.md +1 -1
  98. package/agent-assets/skills/notion/SKILL.delegated.gemini.md +1 -1
  99. package/agent-assets/skills/notion/SKILL.md +17 -17
  100. package/agent-assets/skills/notion/SKILL.native.claude.md +1 -1
  101. package/agent-assets/skills/notion/SKILL.native.codex.md +1 -1
  102. package/agent-assets/skills/notion/SKILL.native.gemini.md +1 -1
  103. package/agent-assets/skills/observations/SKILL.md +5 -20
  104. package/agent-assets/skills/observations/references/fetch-fallback.md +22 -0
  105. package/agent-assets/skills/project-doc/SKILL.md +9 -6
  106. package/agent-assets/skills/project-doc/curation.json +3 -3
  107. package/agent-assets/skills/project-doc/seeds/project-shape.seed.json +2 -2
  108. package/agent-assets/skills/project-doc/seeds/slug-grammar.seed.json +3 -3
  109. package/agent-assets/skills/reading/SKILL.md +8 -42
  110. package/agent-assets/skills/reading/references/reading-taste.md +5 -5
  111. package/agent-assets/skills/roadmap/SKILL.md +3 -19
  112. package/agent-assets/skills/roadmap/references/api.md +16 -6
  113. package/agent-assets/skills/roadmap/references/horizon-tags.md +11 -0
  114. package/agent-assets/skills/roadmap/references/migration.md +8 -6
  115. package/agent-assets/skills/roadmap/references/retention.md +18 -0
  116. package/agent-assets/skills/schedule/SKILL.md +9 -26
  117. package/agent-assets/skills/schedule/references/importance.md +23 -0
  118. package/agent-assets/skills/schedule/references/recurrence-rule.md +6 -4
  119. package/agent-assets/skills/scheduled-managed-task/SKILL.md +34 -37
  120. package/agent-assets/skills/today/SKILL.md +20 -79
  121. package/agent-assets/skills/today/references/today-skeleton.md +66 -0
  122. package/agent-assets/skills/today/seeds/agent-notes-flavors.seed.json +1 -1
  123. package/agent-assets/skills/today/seeds/section-shape.seed.json +6 -6
  124. package/agent-assets/skills/user-interview/SKILL.md +15 -90
  125. package/agent-assets/skills/user-interview/references/op-briefing.md +1 -1
  126. package/agent-assets/skills/user-interview/references/op-dm-handler.md +88 -0
  127. package/agent-assets/skills/user-interview/references/op-morning.md +1 -1
  128. package/agent-assets/skills/user-interview/references/sweep-and-fallback.md +1 -1
  129. package/agent-assets/skills/user-profile/SKILL.md +16 -26
  130. package/agent-assets/skills/user-profile/curation.json +3 -3
  131. package/agent-assets/skills/user-profile/references/character-preferences.md +3 -3
  132. package/agent-assets/skills/wiki/wiki-ask/SKILL.md +1 -1
  133. package/agent-assets/skills/wiki/wiki-compile/SKILL.md +5 -4
  134. package/agent-assets/skills/wiki/wiki-connect/SKILL.md +32 -5
  135. package/agent-assets/skills/wiki/wiki-ingest/SKILL.md +6 -50
  136. package/agent-assets/skills/wiki/wiki-ingest/references/curl-errors.md +58 -0
  137. package/agent-assets/skills/wiki/wiki-lint/SKILL.md +20 -14
  138. package/agent-assets/skills/wiki/wiki-trace/SKILL.md +10 -5
  139. package/agent-assets/skills/wiki/wiki-vault-rules/SKILL.md +2 -0
  140. package/agent-assets/task-flows/_partials/feedback-capture.md +30 -0
  141. package/agent-assets/task-flows/message.received.dm.md +4 -0
  142. package/agent-assets/task-flows/message.received.dm_first.md +4 -0
  143. package/agent-assets/task-flows/routine.evening_review.md +80 -0
  144. package/agent-assets/task-flows/routine.monthly_review.md +72 -0
  145. package/agent-assets/task-flows/routine.weekly_review.md +21 -0
  146. package/agent-assets/task-flows/wiki.trace.md +1 -1
  147. package/bin/aitne.mjs +45 -11
  148. package/package.json +4 -4
  149. package/scripts/commands/doctor.mjs +11 -2
  150. package/scripts/lib/process-identity.d.mts +46 -0
  151. package/scripts/lib/process-identity.mjs +193 -0
  152. package/scripts/lib/read-api-token.mjs +1 -1
  153. package/scripts/start.mjs +14 -4
package/README.md CHANGED
@@ -30,7 +30,7 @@ Aitne is a daemon on your laptop, connected to your calendar, mail (Gmail / Outl
30
30
 
31
31
  - **04:00 — Morning routine.** Aitne reads everything that landed overnight (mail, GitHub activity, calendar changes, vault updates) and writes `today.md` — sample below.
32
32
  - **Morning — Brief.** The plan lands in your DMs as a short summary.
33
- - **Through the day — Nudges.** Meeting reminders with travel time, hourly background checks for the things you care about (eval results, PR review requests, new mail). DMs only when there's something worth your attention.
33
+ - **Through the day — Nudges.** Meeting reminders, hourly background checks for the things you care about (eval results, PR review requests, new mail). DMs only when there's something worth your attention.
34
34
  - **Evening — Review.** Aitne writes a daily journal: what got done, what slipped, one observation about the week.
35
35
 
36
36
  You steer it through natural-language DMs ("skip morning routine on Sundays", "ping me when the overnight job finishes") and bang commands (`!cost`, `!ask`, `!ingest`).
@@ -226,10 +226,10 @@ The router fails over to a configured fallback automatically on `BackendQuotaErr
226
226
  |---|---|
227
227
  | **Messaging** | Slack (Socket Mode), Telegram, Discord, WhatsApp (Baileys), Web dashboard |
228
228
  | **Mail** | Gmail, Outlook, Yahoo, iCloud — unified API, classifier, local FTS5 search, IMAP IDLE |
229
- | **Calendar** | Google Calendar, Outlook Calendar, iCloud (CalDAV), Google Maps for travel time |
229
+ | **Calendar** | Google Calendar, Outlook Calendar, iCloud (CalDAV) free/busy slot-finding across accounts |
230
230
  | **Knowledge** | Obsidian (CLI + vault watch), Notion (REST), custom MCP servers |
231
231
  | **Code** | Local Git, GitHub (Octokit + webhooks) |
232
- | **Lifestyle** | Auto-extracted receipts · travel bookings · Kindle highlights · voice transcription (Whisper, opt-in) |
232
+ | **Lifestyle** | Auto-extracted receipts · travel bookings · Kindle highlights · browser-history research clusters · voice transcription (Whisper, opt-in) |
233
233
 
234
234
  Each integration runs in one of four modes:
235
235
 
@@ -250,7 +250,7 @@ Every mode change goes through a live capability probe and a per-key flip lock.
250
250
  <summary><b>Time, calendar, travel</b></summary>
251
251
 
252
252
  - Auto-generate `today.md` every morning with your real schedule
253
- - 15-min approach reminders for every event, with travel time pre-computed via Google Maps
253
+ - 15-min approach reminders for every event
254
254
  - Find a 30-min slot across multiple calendars — Aitne checks freebusy and replies with options
255
255
  - Auto-extract flight, hotel, train confirmations from email into a structured travel timeline
256
256
  </details>
@@ -265,6 +265,24 @@ Every mode change goes through a live capability probe and a per-key flip lock.
265
265
  - IMAP IDLE for near-real-time delivery; PDF/image attachments are extracted and indexed
266
266
  </details>
267
267
 
268
+ <details open>
269
+ <summary><b>Agents you can define and schedule</b></summary>
270
+
271
+ - Every routine is a first-class **Agent** — an identity with a YAML config + Markdown brief, editable at `:8322/agents`
272
+ - The built-in routines (morning routine, evening review, hourly check, …) ship as **System** agents — can't be deleted, but can be stopped with a warning
273
+ - Define your own recurring **work** agents (daily / weekly / monthly) — from the dashboard form or just by DMing the agent ("summarize my open PRs every Monday at 9")
274
+ - Pin a backend, model, and tier per agent; see per-agent cost, success rate, and run history; fire any agent on demand
275
+ - One-shot wake-ups ("remind me at 3pm"), pre-composed scheduled DMs, and recurring briefings — all quiet-hours-aware
276
+ </details>
277
+
278
+ <details>
279
+ <summary><b>Browser automation (managed Chromium)</b></summary>
280
+
281
+ - DM an open-ended browser task ("check my order status", "fill out this form") — a scoped sub-agent drives a managed Chromium session turn-by-turn, asking you to clarify mid-task and DMing back results + screenshots
282
+ - Egress guards stay on: RFC1918 / loopback / cloud-metadata IP blocking, a form-submit payment-path blocker, and single-owner scoping
283
+ - Purchase confirmation (the B-4 flow — DM-delivered single-use token + screenshot-first consent) is **experimental and default-off**; it requires explicit per-site dashboard opt-in
284
+ </details>
285
+
268
286
  <details>
269
287
  <summary><b>Knowledge: Obsidian, Notion, your own wiki</b></summary>
270
288
 
@@ -295,6 +313,7 @@ Every mode change goes through a live capability probe and a per-key flip lock.
295
313
  - "I prefer concise replies — no preamble" — updates the agent's `character` field
296
314
  - "Email me a summary every Friday at 5pm" — creates a recurring schedule
297
315
  - "Switch to Codex for code reviews" — flips the per-process backend mapping
316
+ - Bang commands for instant control: `!stop` / `!start` (pause/resume autonomous work), `!close` (reset the DM session), `!cost`, `!report`, `!help` — and define your own `!commands` at `:8322/settings/commands`
298
317
  - Every change is journaled to `agent_actions` — audit anything via `aitne audit`
299
318
  </details>
300
319
 
@@ -358,7 +377,7 @@ Plus: localhost-only API, webhook HMAC verification, no automated financial tran
358
377
  | `maxConcurrentSessions` (autonomous) | 3 | Hard semaphore |
359
378
  | `maxReactiveSessions` (DMs) | 2 | Hard semaphore |
360
379
  | `executeTimeoutMinutes` | 60 | Per-execute watchdog |
361
- | `autonomousDailyCostCapUsd` | `null` | Priority-based skipping: `hourly_check` at 100%, `evening_review` at 150%, `morning_routine` at 200%. Reactive DMs are not gated. |
380
+ | `autonomousDailyCostCapUsd` | `null` | Priority-based skipping: `hourly_check` at 100%, `roadmap_refresh` at 120%, `evening_review` at 150%, `morning_routine` at 200%. Reactive DMs are not gated. |
362
381
  | `autonomousMonthlyCostCapUsd` | `null` | Alert + warn surface |
363
382
  | Per-ProcessKey `maxBudgetUsd` | per-row | Hard cap per execute |
364
383
 
@@ -368,6 +387,17 @@ Typical day for an active user: **~$0.50** (morning routine + briefing + 2× hou
368
387
 
369
388
  ## Operating Aitne
370
389
 
390
+ ### Dashboard
391
+
392
+ The dashboard at `:8322` is a full local app, not just a settings panel:
393
+
394
+ - **`/chat`** — talk to any backend/model right in the browser, with per-session overrides
395
+ - **`/agents`** — define, schedule, and inspect your agents (above)
396
+ - **`/schedule`** + **`/activity`** — upcoming runs and the full conversation/action history
397
+ - **`/analytics`** + **`/health`** — cost/usage trends and integration-mode health
398
+ - **`/connections/*`** — wire up calendar, mail, repositories, messaging, MCP, routines
399
+ - **`/settings/*`** — `models`, `backends`, `schedule`, `routines`, `processes`, `messaging`, `commands` (custom bang commands), `management`, and the experimental browser-history surfaces
400
+
371
401
  ### Lifecycle
372
402
 
373
403
  | Command | What it does |
@@ -395,7 +425,7 @@ Typical day for an active user: **~$0.50** (morning routine + briefing + 2× hou
395
425
 
396
426
  ### Configuration
397
427
 
398
- `.env` is **bootstrap-only** (`PA_DATA_DIR`, `PA_API_PORT`, `PA_DASHBOARD_PORT`, `PA_LOG_LEVEL`). Everything else — ~100 runtime keys covering schedule, notifications, models, character, mail, voice, delegated mode — is editable from the dashboard at `:8322`, or via natural-language DMs to the agent.
428
+ `.env` is **bootstrap-only** (`PA_DATA_DIR`, `PA_API_PORT`, `PA_DASHBOARD_PORT`, `PA_LOG_LEVEL`). Everything else — ~130 runtime keys covering schedule, notifications, models, character, mail, voice, delegated mode — is editable from the dashboard at `:8322`, or via natural-language DMs to the agent.
399
429
 
400
430
  ---
401
431
 
@@ -26,7 +26,7 @@ ask_examples:
26
26
  - What is dayBoundaryHour?
27
27
  locale: en-US
28
28
  created: 2026-04-25
29
- updated: 2026-05-28
29
+ updated: 2026-06-07
30
30
  keywords:
31
31
  - day boundary
32
32
  - 04:00
@@ -71,7 +71,7 @@ clean boundary before they start.
71
71
 
72
72
  - **Agent day**: the 24-hour window starting at the configured day-boundary hour and ending at the same hour the next calendar day.
73
73
  - **Day boundary**: the hour-of-day that starts the agent day. Configured via the `dayBoundaryHour` setting (default `4`, valid range `0`–`9`). Values above 9 are rejected — the boundary is intended for the small hours, not mid-day.
74
- - **Day-stamped file**: any file whose name includes `YYYY-MM-DD` (e.g. `journal/daily/2026-04-25.md`, `journal/weekly/2026-04-20.md`). The date stamp uses the agent-day boundary, not the calendar day.
74
+ - **Day-stamped file**: any file whose name carries a date (e.g. `journal/daily/2026-04-25.md` with a `YYYY-MM-DD` stamp, `journal/weekly/2026-W17.md` with an ISO `YYYY-Www` week slug). The stamp uses the agent-day boundary, not the calendar day.
75
75
 
76
76
  ## Concrete Examples
77
77
 
@@ -31,7 +31,7 @@ ask_examples:
31
31
  - How does Gemini's per-day quota work?
32
32
  locale: en-US
33
33
  created: 2026-04-25
34
- updated: 2026-05-28
34
+ updated: 2026-06-07
35
35
  keywords:
36
36
  - cost
37
37
  - budget
@@ -196,8 +196,9 @@ register an API key on `/settings/models`.
196
196
 
197
197
  In the dashboard:
198
198
 
199
- - **Analytics** (`/analytics`) rolls today's cost by backend, by
200
- ProcessKey, and by hour. When a backend is running on the
199
+ - **Analytics** (`/analytics`) rolls cost by backend, by ProcessKey
200
+ (event type), by model, and over daily / weekly / monthly periods,
201
+ plus a today total. When a backend is running on the
201
202
  subscription fallback, remaining-window math is shown there too.
202
203
  - **Sidebar footer** shows the day's running total.
203
204
  - **Activity** event details include the per-execute cost.
@@ -36,7 +36,7 @@ ask_examples:
36
36
  - Why don't I see a SKILL.md for Gmail in my Codex session?
37
37
  locale: en-US
38
38
  created: 2026-04-26
39
- updated: 2026-05-28
39
+ updated: 2026-06-07
40
40
  keywords:
41
41
  - delegated mode
42
42
  - direct mode
@@ -100,8 +100,8 @@ backend is the same as the integration's `delegatedBackend`:
100
100
  for the task-mode body shape.
101
101
 
102
102
  `native` has no sub-cases. The integration's `nativeBackend` must equal
103
- the main DM backend — `BackendRouter.setMainBackend` cascades unmatched
104
- `native` rows to `disabled`. From the agent's call-site view, `native`
103
+ the main DM backend — `cascadeNativeBindingsOnMainSwitch` cascades
104
+ unmatched `native` rows to `disabled`. From the agent's call-site view, `native`
105
105
  is indistinguishable from `delegated` same-backend (both are in-session
106
106
  MCP); the difference is who polls (no one, for `native`).
107
107
 
@@ -152,8 +152,8 @@ that case the daemon spawns the other backend per call.
152
152
  - **`nativeBackend`** — when native, which backend's connector is
153
153
  expected. Must equal the main DM backend; changing the main backend
154
154
  cascades unmatched `native` rows to `disabled` (the cascade is
155
- triggered by `BackendRouter.setMainBackend` /
156
- `PUT /api/backends/main`).
155
+ performed by `cascadeNativeBindingsOnMainSwitch` from the
156
+ `PUT /api/backends/main` handler).
157
157
  - **Same-backend** — DM session backend matches `delegatedBackend` /
158
158
  `nativeBackend`. The daemon is not in the loop; the agent calls
159
159
  native MCP directly. No skill body is materialized for the
@@ -29,7 +29,7 @@ ask_examples:
29
29
  - How does the daemon prevent the agent from writing to disk directly?
30
30
  locale: en-US
31
31
  created: 2026-04-25
32
- updated: 2026-05-28
32
+ updated: 2026-06-07
33
33
  keywords:
34
34
  - context
35
35
  - markdown
@@ -153,8 +153,11 @@ curl -X PATCH http://localhost:8321/api/context/state/today.md \
153
153
  synthesized by the morning routine.
154
154
  - `plans/projects/<slug>.md` — one file per active project.
155
155
  - `policies/management.md` — the umbrella registry: Source-of-Truth
156
- bindings, Managed Tasks, an Active Policies summary. Always
157
- injected into every flow.
156
+ bindings, Managed Tasks, an Active Policies summary. Injected as
157
+ `<management_rules>` on the wide-path flows (DMs, mentions, the
158
+ morning routine); a few narrow routines (the journal stage, hourly
159
+ check, today refresh, observer events, scheduled tasks) opt out to
160
+ save budget.
158
161
  - `policies/management-captures/<slug>.md` — one file per durable management rule
159
162
  ("from now on, do X"). The daemon auto-maintains a slug index at
160
163
  `policies/management-captures/_index.md`.
@@ -34,7 +34,7 @@ ask_examples:
34
34
  - Where do I see what the agent has been doing?
35
35
  locale: en-US
36
36
  created: 2026-04-26
37
- updated: 2026-05-28
37
+ updated: 2026-06-07
38
38
  keywords:
39
39
  - deniedTools
40
40
  - safety floor
@@ -74,8 +74,8 @@ The risk classifier has two write tiers, not three:
74
74
  delete event, …) and for normal context writes.
75
75
  - **Approve** — agent must present a Bearer token issued through the
76
76
  dashboard. Reserved for posture-changing daemon configuration:
77
- flipping integration modes, swapping the main backend, deleting
78
- backends, wiping config.
77
+ flipping integration modes, swapping the main backend, enabling/
78
+ disabling backends, 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
 
@@ -134,20 +134,22 @@ of "report to me" events. Information about what the agent did is
134
134
  `deniedTools` server-side — see the *Where the Defenses Apply* table
135
135
  below for the exact mechanism.
136
136
  - **`agent_actions`** — SQLite table of every agent action. Direct +
137
- cross-backend rows are full-fidelity (current cross-backend writes
137
+ cross-backend rows are full-fidelity (cross-backend task-mode writes
138
138
  emit `delegated_task.run` / `delegated_task.exec` /
139
- `delegated_task.tool_step`; legacy rows from before 2026-05-01 carry
140
- `delegated_proxy.invoke`). Same-backend native MCP rolls up to
139
+ `delegated_task.tool_step`; the `delegated_proxy.invoke` row type
140
+ carries both legacy rows from the retired RPC `/invoke` route and
141
+ the hourly drift-detection probes still written by the
142
+ delegated-sync worker). Same-backend native MCP rolls up to
141
143
  `mcp_tool_calls` + the parent session row.
142
144
 
143
145
  ## Where the Defenses Apply
144
146
 
145
147
  | Path | Enforcement |
146
148
  |---|---|
147
- | Direct mode (`/api/mail/*`, `/api/calendar/*`) | Route handler middleware checks `deniedTools` against the materialized skill body's `allowed-tools` list (frontmatter). |
149
+ | Direct mode (`/api/mail/*`, `/api/calendar/*`) | `deniedTools` is **inert** the daemon runs the poller and the agent calls the daemon API through its direct-mode skill, so there is no per-tool deny surface. The list only persists for a future flip to delegated mode. Direct-mode safety comes from the route-level risk tiers (Approve gates posture-changing writes) and the always-disallowed layer, not `deniedTools`. |
148
150
  | Cross-backend (`/api/integrations/:key/exec`) | Invoker filters the integration's `capabilityTools` through `deniedTools` before spawning the delegated backend so the task-mode planner can only pick from the allowed surface. A fully-denied surface short-circuits with `errorClass: "denied_tool"`; individual tool denials surface as the same error from the invoker's `resolveAllowedToolPatterns`. |
149
151
  | Same-backend / native MCP — Claude | `collectSessionDeniedTools` merges the deny patterns into the SDK's `disallowedTools` array at `query()` time. Same code path covers both delegated same-backend and native — they share the in-session MCP surface. |
150
- | Same-backend / native MCP — Gemini | Patterns are folded into `generateAdminPolicy`'s TOML deny rules (priority 1000). |
152
+ | Same-backend / native MCP — Gemini | Patterns are folded into `generateAdminPolicy`'s TOML deny rules (priority 936 — above the registry-driven native allows, below the absolute-block layer). |
151
153
  | Same-backend / native MCP — Codex | **Prose-only.** Codex bundles its connector apps into the binary; there is no per-tool deny config and the workspace-write sandbox does not match MCP tool calls. Skill prose lists the denied tools explicitly. Operators who require strict deny on Gmail / Calendar should pick a non-Codex DM backend or route those integrations through `delegated` cross-backend mode (which IS deny-enforced at `/exec`). |
152
154
 
153
155
  ## Recommended Starter Denylists
@@ -224,7 +226,7 @@ When the operator asks "what did you do yesterday?" / "have you sent
224
226
  anything from Gmail this week?" the agent calls:
225
227
 
226
228
  ```bash
227
- curl 'http://localhost:8321/api/agent/actions?since=2026-04-25T00:00:00Z&kind=delegated_task.run&kind=delegated_task.tool_step&limit=50'
229
+ curl 'http://localhost:8321/api/agent/actions?since=2026-04-25T00:00:00Z&kind=delegated_task.exec&kind=delegated_task.tool_step&limit=50'
228
230
  ```
229
231
 
230
232
  and answers in conversation. The endpoint:
@@ -241,12 +243,12 @@ and answers in conversation. The endpoint:
241
243
  the per-call detail lives in `mcp_tool_calls`, which this endpoint
242
244
  does not join — query it separately if you need step-level fidelity.
243
245
 
244
- Common `kind` values for the cross-backend proxy: `delegated_task.run`
245
- (one row per `/exec` call), `delegated_task.exec` (the planner's
246
- chosen tool), `delegated_task.tool_step` (each individual tool call
247
- inside the task). The legacy `delegated_proxy.invoke` rows persist
248
- from before 2026-05-01 include them if the `since` window crosses
249
- that date.
246
+ Common `kind` values for the cross-backend proxy: `delegated_task.exec`
247
+ (one header row per `/exec` call), `delegated_task.run` (one header row
248
+ per generic `/run` call), `delegated_task.tool_step` (each individual
249
+ tool call inside the task). The `delegated_proxy.invoke` rows cover the
250
+ retired RPC `/invoke` route plus the delegated-sync worker's hourly
251
+ drift-detection probes — include them when you want that surface too.
250
252
 
251
253
  This **replaces** the rejected daily-digest pattern. Reasons:
252
254
 
@@ -269,7 +271,8 @@ Approve still gates:
269
271
 
270
272
  - `PATCH /api/integrations/:key` — mode / `delegatedBackend` /
271
273
  `deniedTools` changes.
272
- - `PUT /api/backends/main`, `DELETE /api/backends/:id`.
274
+ - `PUT /api/backends/main`, `POST /api/backends/:id/enable`,
275
+ `POST /api/backends/:id/disable`.
273
276
  - `PATCH /api/config` for fields that wipe protections.
274
277
  - `/api/system/*` — config reset, history purge, factory reset.
275
278
 
@@ -28,7 +28,7 @@ ask_examples:
28
28
  - Where do skill overlays live?
29
29
  locale: en-US
30
30
  created: 2026-04-25
31
- updated: 2026-05-28
31
+ updated: 2026-06-07
32
32
  keywords:
33
33
  - SKILL.md
34
34
  - allowed-tools
@@ -74,7 +74,7 @@ The agent runs against a real machine. Without scoped permissions, a
74
74
  "please summarize my mail" turn could in principle invoke `Bash(rm)`,
75
75
  post to your social accounts, or rewrite arbitrary files. Skills fix
76
76
  that by making the available toolset task-shaped: the morning routine
77
- loads the routines/observations/today/schedule skills; a docs question
77
+ loads the context/today/observations/schedule skills; a docs question
78
78
  loads only `docs-search`. Tools outside the allow-list aren't even
79
79
  visible to the model.
80
80
 
@@ -12,9 +12,10 @@ aliases:
12
12
  category: features
13
13
  summary: |
14
14
  Local-only poller that reads the browser's own SQLite databases
15
- (Chrome / Safari / Firefox / Arc), records visits as observations,
16
- derives research clusters from sustained reading patterns, and
17
- surfaces what you keep refreshing. Nothing leaves the daemon.
15
+ (Chrome / Chromium / Edge / Brave / Comet / Atlas), records visits as
16
+ observations, derives research clusters from sustained reading
17
+ patterns, and surfaces what you keep refreshing. Nothing leaves the
18
+ daemon.
18
19
  section: integrations
19
20
  tags:
20
21
  - integrations
@@ -31,7 +32,7 @@ ask_examples:
31
32
  - How do I opt out of browser history?
32
33
  locale: en-US
33
34
  created: 2026-05-22
34
- updated: 2026-05-28
35
+ updated: 2026-06-07
35
36
  keywords:
36
37
  - browser history
37
38
  - browser history poller
@@ -74,9 +75,9 @@ api_endpoints:
74
75
 
75
76
  # Browser History
76
77
 
77
- Aitne can read the SQLite history databases that Chrome, Safari,
78
- Firefox, and Arc already maintain on disk, classify visits into
79
- categories, and use the result to notice what you've been
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
80
81
  researching, what you've been refreshing, and what comparison-shopping
81
82
  windows you're in. Everything stays local — no URLs, titles, or
82
83
  clicks leave the daemon.
@@ -122,7 +123,7 @@ clicks leave the daemon.
122
123
  enable / disable each detected browser independently and override
123
124
  the DB path for atypical installs.
124
125
  - **Per-category gate.** `browserHistoryCategories` controls which
125
- visit categories (research / shopping / docs / media / …) get
126
+ visit categories (research / shopping / news / dev / entertainment / …) get
126
127
  ingested. Categories you exclude are dropped at ingest time, not
127
128
  filtered later.
128
129
  - **Retention.** `browserHistoryRetentionDays` (visits) and
@@ -33,7 +33,7 @@ ask_examples:
33
33
  - Which model handles detected calendar changes?
34
34
  locale: en-US
35
35
  created: 2026-04-25
36
- updated: 2026-05-28
36
+ updated: 2026-06-07
37
37
  keywords:
38
38
  - calendar
39
39
  - google calendar
@@ -68,9 +68,9 @@ process_keys:
68
68
 
69
69
  # Calendar
70
70
 
71
- Aitne pulls events from one or more calendars (Google Calendar today,
72
- more backends planned) so it can build today's plan around them and
73
- DM you ahead of meetings that matter.
71
+ Aitne pulls events from one or more calendars (Google Calendar,
72
+ Outlook Calendar, and Apple Calendar) so it can build today's plan
73
+ around them and DM you ahead of meetings that matter.
74
74
 
75
75
  ## What It Does
76
76
 
@@ -27,7 +27,7 @@ ask_examples:
27
27
  - How do I add a second mail account?
28
28
  locale: en-US
29
29
  created: 2026-04-25
30
- updated: 2026-05-28
30
+ updated: 2026-06-07
31
31
  keywords:
32
32
  - mail
33
33
  - gmail
@@ -118,7 +118,8 @@ mode lifecycle.
118
118
 
119
119
  ## What It Outputs
120
120
 
121
- - New threads land in the local `messages` table (FTS-indexed).
121
+ - New threads land in the local `mail_messages_index` table
122
+ (FTS-indexed via `fts_mail_messages`).
122
123
  - Classification labels are written via the provider API.
123
124
  - A short "mail" section in `state/today.md` when items qualified.
124
125
 
@@ -46,7 +46,7 @@ ask_examples:
46
46
  - How much does one Architecture refresh cost?
47
47
  locale: en-US
48
48
  created: 2026-05-05
49
- updated: 2026-05-28
49
+ updated: 2026-06-07
50
50
  keywords:
51
51
  - my life
52
52
  - git
@@ -110,7 +110,7 @@ per repo (all open by default so the controls are visible at a glance):
110
110
  2. **Triggers** — fire when matching Git or GitHub events arrive on
111
111
  this repository. Triggers run **alongside** the project-wide
112
112
  task-flow defaults, not in place of them. Each trigger has a
113
- workdir mode (`local-clone` or `ephemeral`); local-clone triggers
113
+ workdir mode (`local-clone` or `temp`); local-clone triggers
114
114
  require the repository to have a `localPath`.
115
115
  3. **Daily git management** — opt-in per repo. Enabling it does three
116
116
  distinct kinds of work, on different cadences:
@@ -272,7 +272,7 @@ repository has a `localPath`:
272
272
  - **Triggers** with `workdirMode: "local-clone"` require a `localPath`
273
273
  on the parent repository (enforced when the trigger is created and
274
274
  again if you try to clear `localPath` while such a trigger exists).
275
- Triggers with `workdirMode: "ephemeral"` work without a local clone.
275
+ Triggers with `workdirMode: "temp"` work without a local clone.
276
276
  - **Daily git management** is **local-clone-bound for v1**. The
277
277
  toggle is disabled and the dashboard surfaces "No local clone — link
278
278
  one to enable this feature." Internally the
@@ -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-05-28
29
+ updated: 2026-06-07
30
30
  keywords:
31
31
  - reading
32
32
  - books
@@ -65,10 +65,13 @@ at `/reading`.
65
65
  "Export Notebook" email.
66
66
  - **List** the library on `/reading` or via `GET /api/books`
67
67
  (filterable by `status` and `source`, paginated to 200 rows per call).
68
- - **Mark complete or abandoned** — the agent updates an existing row via
69
- `PATCH /api/books/:id`. Setting `status` to `completed` stamps
70
- `completed_at` automatically; you can also set a 1–5 `rating` or
71
- `notes`.
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
73
+ `completed` stamps `completed_at` automatically; you can also set a 1–5
74
+ `rating` or `notes`.
72
75
  - **Recommend** from the list during reactive turns, and refresh the
73
76
  reading-taste profile during weekly and monthly reviews.
74
77
 
@@ -111,9 +114,13 @@ drives the list shape. The reading skill loads in two situations:
111
114
  network error there surfaces in the audit log even when the chat reply
112
115
  looked fine. A common cause is pasting a partial or non-Kindle
113
116
  clippings file, which yields zero parsed books.
114
- - **An edit that didn't stick**: `PATCH /api/books/:id` returns 404 if
115
- the id doesn't exist and 400 for an invalid `status` (only `reading`,
116
- `completed`, `abandoned`) or an out-of-range `rating` (must be 1–5).
117
+ - **An edit that didn't stick**: `PATCH /api/books/:id` is Approve-tier,
118
+ so a request without a valid operator Bearer token is rejected with 401
119
+ before the handler runs book status/rating/notes corrections are made
120
+ from the dashboard, not by an autonomous agent. Once authenticated, it
121
+ returns 404 if the id doesn't exist and 400 for an invalid `status`
122
+ (only `reading`, `completed`, `abandoned`) or an out-of-range `rating`
123
+ (must be 1–5).
117
124
 
118
125
  ## Related
119
126
 
@@ -27,7 +27,7 @@ ask_examples:
27
27
  - Where are my travel bookings stored?
28
28
  locale: en-US
29
29
  created: 2026-04-25
30
- updated: 2026-05-28
30
+ updated: 2026-06-07
31
31
  keywords:
32
32
  - flight
33
33
  - hotel
@@ -99,8 +99,9 @@ classifier do the rest. The flow is:
99
99
 
100
100
  ## API
101
101
 
102
- Read-only and status-update access (read endpoints are autonomous; the
103
- PATCH endpoint follows the standard write-safety tier):
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):
104
105
 
105
106
  ```bash
106
107
  # All bookings (optionally filter by type/status/date range)
@@ -27,7 +27,7 @@ ask_examples:
27
27
  - Why did journal/agent.md stop growing?
28
28
  locale: en-US
29
29
  created: 2026-04-25
30
- updated: 2026-05-28
30
+ updated: 2026-06-07
31
31
  keywords:
32
32
  - journal
33
33
  - retros
@@ -38,6 +38,7 @@ related:
38
38
  - features/routines/morning-routine
39
39
  - features/routines/evening-review
40
40
  - features/routines/weekly-review
41
+ - features/memory-files/agent-lessons
41
42
  - features/operations/activity-and-conversations
42
43
  - concepts/memory-model
43
44
  process_keys:
@@ -47,7 +48,7 @@ process_keys:
47
48
  context_files:
48
49
  - journal/agent.md
49
50
  ui_anchors:
50
- - /connections/journal
51
+ - /knowledge?tab=context-files
51
52
  - /settings/journal
52
53
  ---
53
54
 
@@ -68,12 +69,17 @@ of *what happened* — the journal is reflection-shaped: it captures
68
69
 
69
70
  Each entry carries:
70
71
 
71
- - A timestamp (the routine stamps an `Appended at:` line).
72
+ - A dated heading — the morning routine stamps a
73
+ `## YYYY-MM-DD morning routine` H2; the weekly and monthly retros add
74
+ a `> Appended at: YYYY-MM-DD HH:MM` line under their section header.
72
75
  - A short context line — which routine or conversation prompted it.
73
76
  - The reflection itself.
74
77
 
75
- The file lives at `~/.personal-agent/context/journal/agent.md` and
76
- grows forever. Later routines read it back to look for patterns.
78
+ The file lives at `~/.personal-agent/context/journal/agent.md`. The
79
+ day-to-day morning and ad-hoc entries accumulate indefinitely; the
80
+ daily retention rollup keeps only a rolling window of the structured
81
+ retros (the most recent 12 `## Weekly` and 24 `## Monthly` sections),
82
+ pruning older ones. Later routines read it back to look for patterns.
77
83
 
78
84
  ## Who writes it, and when
79
85
 
@@ -127,10 +133,17 @@ cannot destroy history. Writes go through the daemon context API
127
133
 
128
134
  ## Where in the dashboard
129
135
 
130
- - **ConnectionsJournal** (`/connections/journal`) is the read view
131
- of the file.
132
- - **Settings Journal** (`/settings/journal`) controls retention and
133
- which routines contribute.
136
+ - **KnowledgeContext Files** (`/knowledge?tab=context-files`) is the
137
+ read view of the file — `journal/agent` is listed among the top-level
138
+ context files. It is flagged as sensitive: entering edit mode surfaces
139
+ a "deliberately pruning noise" warning before you change anything.
140
+ - **Settings → Journal** (`/settings/journal`) does *not* edit this
141
+ file. It is a two-tab editor for the daily-journal rule files —
142
+ `policies/journal-format.md` (sections, voice, frontmatter) and
143
+ `policies/journal-export.md` (redaction / inclusion rules) — both of
144
+ which the morning routine reads when synthesizing `daily/YYYY-MM-DD.md`,
145
+ not `journal/agent.md`. `/connections/journal` is a compatibility alias
146
+ that redirects here.
134
147
 
135
148
  ## Configuration
136
149
 
@@ -147,9 +160,12 @@ agent's own writes, not to you editing the file on disk.
147
160
  [Evening Review](../routines/evening-review.md).
148
161
  - **Entries look duplicated.** This usually means a routine retried
149
162
  after a backend fallback. Because writes are append-only, a retry
150
- can re-append rather than overwrite; the weekly review has an
151
- idempotency check for its own section, but it is best-effort — a
152
- manual prune is fine.
163
+ re-appends rather than overwrites the weekly review deliberately
164
+ appends a fresh section instead of editing in place. The daemon's
165
+ daily retention rollup (`rollupAgentJournal`) collapses duplicate
166
+ `## Weekly YYYY-Www` / `## Monthly YYYY-MM` keys last-write-wins
167
+ within 24 hours, so duplicates self-heal; a manual prune is fine but
168
+ rarely needed.
153
169
 
154
170
  ## Related
155
171
 
@@ -162,5 +178,7 @@ agent's own writes, not to you editing the file on disk.
162
178
  - [Activity & Conversations](../operations/activity-and-conversations.md)
163
179
  — the action-shaped audit log, distinct from the reflection-shaped
164
180
  journal.
181
+ - [agent lessons](agent-lessons.md) — the directive-shaped learned-behavior
182
+ stores, distinct from this reflection-shaped diary.
165
183
  - [Memory model](../../concepts/memory-model.md) — how the journal fits
166
184
  the wider context vault.