@aitne-sh/aitne 0.1.10 → 0.1.12

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 (149) hide show
  1. package/README.md +12 -8
  2. package/agent-assets/agent-profiles/background-task.md +53 -0
  3. package/agent-assets/agent-profiles/conversational.md +1 -0
  4. package/agent-assets/agent-profiles/routine-fetch-window.md +14 -75
  5. package/agent-assets/agent-profiles/routine.md +1 -1
  6. package/agent-assets/agents/{hourly-check → activity-scan}/agent.md +22 -17
  7. package/agent-assets/agents/monthly-review/agent.md +6 -5
  8. package/agent-assets/agents/morning-routine/agent.md +3 -4
  9. package/agent-assets/docs/concepts/agent-day.md +4 -5
  10. package/agent-assets/docs/concepts/auth-health.md +23 -20
  11. package/agent-assets/docs/concepts/backends-and-tiers.md +25 -18
  12. package/agent-assets/docs/concepts/costs-and-quotas.md +11 -10
  13. package/agent-assets/docs/concepts/delegated-mode.md +13 -12
  14. package/agent-assets/docs/concepts/memory-model.md +13 -9
  15. package/agent-assets/docs/concepts/observations.md +24 -20
  16. package/agent-assets/docs/concepts/process-keys.md +10 -9
  17. package/agent-assets/docs/concepts/routines.md +34 -31
  18. package/agent-assets/docs/concepts/safety-and-execution.md +11 -7
  19. package/agent-assets/docs/concepts/safety-model.md +19 -8
  20. package/agent-assets/docs/concepts/skills.md +10 -8
  21. package/agent-assets/docs/features/integrations/browser-history.md +14 -10
  22. package/agent-assets/docs/features/integrations/calendar.md +24 -13
  23. package/agent-assets/docs/features/integrations/git.md +13 -11
  24. package/agent-assets/docs/features/integrations/github.md +22 -14
  25. package/agent-assets/docs/features/integrations/mail.md +22 -20
  26. package/agent-assets/docs/features/integrations/notion.md +35 -11
  27. package/agent-assets/docs/features/integrations/obsidian.md +8 -8
  28. package/agent-assets/docs/features/lifestyle/git.md +24 -20
  29. package/agent-assets/docs/features/lifestyle/reading.md +5 -3
  30. package/agent-assets/docs/features/lifestyle/receipts.md +11 -10
  31. package/agent-assets/docs/features/memory-files/agent-journal.md +25 -16
  32. package/agent-assets/docs/features/memory-files/agent-lessons.md +7 -6
  33. package/agent-assets/docs/features/memory-files/projects.md +5 -4
  34. package/agent-assets/docs/features/memory-files/schedule.md +6 -3
  35. package/agent-assets/docs/features/memory-files/today.md +10 -7
  36. package/agent-assets/docs/features/memory-files/user-profile.md +14 -9
  37. package/agent-assets/docs/features/messaging/bang-commands.md +21 -6
  38. package/agent-assets/docs/features/messaging/dashboard-chat.md +1 -1
  39. package/agent-assets/docs/features/messaging/overview.md +12 -9
  40. package/agent-assets/docs/features/operations/activity-and-conversations.md +1 -1
  41. package/agent-assets/docs/features/operations/browser-tasks.md +184 -0
  42. package/agent-assets/docs/features/operations/cost-tracking.md +11 -1
  43. package/agent-assets/docs/features/operations/managed-chromium.md +1 -0
  44. package/agent-assets/docs/features/operations/notifications.md +11 -1
  45. package/agent-assets/docs/features/operations/quiet-hours.md +41 -12
  46. package/agent-assets/docs/features/operations/schedule-approaching.md +2 -2
  47. package/agent-assets/docs/features/routines/activity-scan.md +220 -0
  48. package/agent-assets/docs/features/routines/custom-routines.md +82 -138
  49. package/agent-assets/docs/features/routines/evening-review.md +14 -12
  50. package/agent-assets/docs/features/routines/morning-routine.md +5 -4
  51. package/agent-assets/docs/features/routines/weekly-review.md +18 -3
  52. package/agent-assets/docs/features/wiki/commands.md +1 -1
  53. package/agent-assets/docs/features/wiki/dashboard.md +1 -1
  54. package/agent-assets/docs/getting-started/01-what-is-this.md +4 -4
  55. package/agent-assets/docs/getting-started/04-first-day.md +27 -30
  56. package/agent-assets/docs/glossary.md +8 -7
  57. package/agent-assets/docs/guides/add-a-custom-routine.md +122 -68
  58. package/agent-assets/docs/guides/budget-and-cost-for-wiki.md +5 -3
  59. package/agent-assets/docs/guides/change-which-model-handles-x.md +1 -1
  60. package/agent-assets/docs/guides/multiple-wikis-for-multiple-domains.md +1 -1
  61. package/agent-assets/docs/guides/pause-the-agent.md +22 -20
  62. package/agent-assets/docs/guides/reinstall-cleanly.md +2 -0
  63. package/agent-assets/docs/guides/setup-wizard.md +13 -10
  64. package/agent-assets/docs/reference/api.md +11 -0
  65. package/agent-assets/docs/reference/config.md +30 -20
  66. package/agent-assets/docs/reference/keyboard-shortcuts.md +2 -2
  67. package/agent-assets/docs/reference/knowledge-layout.md +14 -10
  68. package/agent-assets/docs/reference/process-keys.md +7 -7
  69. package/agent-assets/docs/reference/skills.md +5 -2
  70. package/agent-assets/docs/troubleshooting/morning-routine-didnt-run.md +32 -16
  71. package/agent-assets/docs/troubleshooting/observation-not-detected.md +26 -24
  72. package/agent-assets/docs/troubleshooting/wiki-ingest-full-blocked.md +1 -1
  73. package/agent-assets/docs/troubleshooting/wiki-write-failed.md +3 -3
  74. package/agent-assets/playbooks/markdown-note.md +43 -0
  75. package/agent-assets/playbooks/monitoring.md +29 -0
  76. package/agent-assets/playbooks/research.md +47 -0
  77. package/agent-assets/skills/agent-create/SKILL.md +45 -29
  78. package/agent-assets/skills/agent-create/references/prompt-frame-extended.md +132 -0
  79. package/agent-assets/skills/agent-create/references/prompt-frame.md +125 -0
  80. package/agent-assets/skills/background-task/SKILL.md +184 -0
  81. package/agent-assets/skills/background-task-reply/SKILL.md +100 -0
  82. package/agent-assets/skills/board/SKILL.md +93 -0
  83. package/agent-assets/skills/browser-history/SKILL.md +34 -16
  84. package/agent-assets/skills/browser-history-respond/SKILL.md +3 -3
  85. package/agent-assets/skills/browser-task/SKILL.md +14 -7
  86. package/agent-assets/skills/context/SKILL.md +4 -3
  87. package/agent-assets/skills/context/references/api.md +5 -3
  88. package/agent-assets/skills/context/references/snapshot-files.md +4 -4
  89. package/agent-assets/skills/external-services/SKILL.native.claude.md +13 -7
  90. package/agent-assets/skills/external-services/SKILL.native.codex.md +11 -5
  91. package/agent-assets/skills/external-services/SKILL.native.gemini.md +11 -5
  92. package/agent-assets/skills/mail/SKILL.md +2 -2
  93. package/agent-assets/skills/mail/SKILL.native.claude.md +16 -9
  94. package/agent-assets/skills/mail/SKILL.native.codex.md +15 -8
  95. package/agent-assets/skills/mail/SKILL.native.gemini.md +11 -5
  96. package/agent-assets/skills/managed-tasks/references/recurrence-rule.md +20 -12
  97. package/agent-assets/skills/management-policy/SKILL.md +26 -17
  98. package/agent-assets/skills/management-policy/curation.json +1 -1
  99. package/agent-assets/skills/management-policy/references/policy-workflow.md +26 -13
  100. package/agent-assets/skills/notify/SKILL.md +10 -5
  101. package/agent-assets/skills/notify/references/priority.md +30 -17
  102. package/agent-assets/skills/notion/SKILL.md +1 -1
  103. package/agent-assets/skills/notion/SKILL.native.claude.md +3 -3
  104. package/agent-assets/skills/notion/SKILL.native.codex.md +2 -2
  105. package/agent-assets/skills/notion/SKILL.native.gemini.md +2 -2
  106. package/agent-assets/skills/observations/SKILL.md +5 -5
  107. package/agent-assets/skills/roadmap/references/api.md +7 -2
  108. package/agent-assets/skills/schedule/SKILL.md +26 -15
  109. package/agent-assets/skills/schedule/references/batch.md +1 -1
  110. package/agent-assets/skills/schedule/references/model-selection.md +1 -1
  111. package/agent-assets/skills/schedule/references/prompt-frame.md +125 -0
  112. package/agent-assets/skills/schedule/references/recurrence-rule.md +20 -12
  113. package/agent-assets/skills/scheduled-managed-task/SKILL.md +12 -9
  114. package/agent-assets/skills/task/SKILL.md +79 -0
  115. package/agent-assets/skills/today/SKILL.md +19 -3
  116. package/agent-assets/skills/today/references/agent-plan-lifecycle.md +9 -4
  117. package/agent-assets/skills/today/references/agent-plan-revision.md +28 -0
  118. package/agent-assets/skills/today/references/today-skeleton.md +5 -5
  119. package/agent-assets/skills/user-interview/references/op-morning.md +1 -1
  120. package/agent-assets/system-prompts/routine-research-cluster-update.md +71 -0
  121. package/agent-assets/task-flows/_partials/notion-acquire.notion.md +47 -21
  122. package/agent-assets/task-flows/background_task.md +81 -0
  123. package/agent-assets/task-flows/git.local_ahead.stale.md +1 -1
  124. package/agent-assets/task-flows/git.push.detected.md +1 -1
  125. package/agent-assets/task-flows/git.tag.created.md +1 -1
  126. package/agent-assets/task-flows/github.assigned.md +1 -1
  127. package/agent-assets/task-flows/github.pull_request.review_requested.md +2 -2
  128. package/agent-assets/task-flows/github.security_alert.md +1 -1
  129. package/agent-assets/task-flows/message.received.dm.md +7 -3
  130. package/agent-assets/task-flows/message.received.dm_first.md +4 -2
  131. package/agent-assets/task-flows/{routine.hourly_check.md → routine.activity_scan.md} +31 -23
  132. package/agent-assets/task-flows/{routine.hourly_check.triage.md → routine.activity_scan.triage.md} +3 -3
  133. package/agent-assets/task-flows/routine.monthly_review.md +9 -8
  134. package/agent-assets/task-flows/routine.research_cluster_update.md +33 -19
  135. package/agent-assets/task-flows/routine.roadmap_refresh.md +2 -2
  136. package/agent-assets/task-flows/routine.today_refresh.md +1 -1
  137. package/agent-assets/task-flows/routine.weekly_review.md +103 -4
  138. package/agent-assets/task-flows/schedule.approaching.md +2 -2
  139. package/agent-assets/task-flows/scheduled.dm.md +96 -12
  140. package/agent-assets/task-flows/scheduled.task.md +7 -1
  141. package/agent-assets/templates/_manifest.json +2 -2
  142. package/agent-assets/templates/knowledge/dossiers/_index.md +1 -1
  143. package/agent-assets/templates/knowledge/dossiers/{hourly.md → activity-scan.md} +1 -1
  144. package/agent-assets/templates/policies/journal-format.md +1 -1
  145. package/agent-assets/templates/policies/mcp.md +1 -1
  146. package/agent-assets/templates/policies/routines/_index.md +1 -1
  147. package/agent-assets/templates/policies/routines/{hourly.md → activity-scan.md} +5 -5
  148. package/package.json +6 -5
  149. package/agent-assets/docs/features/routines/hourly-check.md +0 -205
@@ -1,46 +1,54 @@
1
1
  ---
2
2
  schema_version: 1
3
3
  slug: guides/add-a-custom-routine
4
- title: Add a Custom Routine
4
+ title: Create a Recurring Agent
5
5
  id: add-a-custom-routine
6
6
  aliases:
7
+ - recurring agent
8
+ - new agent
9
+ - user agent
7
10
  - custom routine
8
- - user-defined routine
9
11
  - add a routine
10
12
  - scheduled task
11
13
  category: guides
12
14
  summary: |
13
- Define a new autonomous routine slug, cron expression, model tier, and
14
- budget cap — via /settings/routines. The form writes a vault file at
15
- policies/routines/custom/<slug>.md; saving it registers the cron job.
15
+ Make the agent run a prompt you write on a schedule you pick by
16
+ creating a user Agent — via the "New Agent" form on /agents or
17
+ POST /api/agents. The Markdown body (the prompt) becomes the task
18
+ prompt for every run; runs appear on the Agent's detail page.
16
19
  section: add-a-custom-routine
17
20
  tags:
18
21
  - guides
22
+ - agents
19
23
  - routines
20
24
  - scheduler
21
25
  - autonomous
22
26
  - core
23
27
  status: stable
24
28
  ask_examples:
25
- - How do I add a custom routine?
26
- - What can a custom routine do?
29
+ - How do I create a recurring agent?
27
30
  - How do I schedule the agent to run on a cron?
31
+ - How do I add a custom routine?
32
+ - Where do I see my agent's runs?
28
33
  locale: en-US
29
34
  created: 2026-04-25
30
- updated: 2026-05-28
35
+ updated: 2026-06-10
31
36
  keywords:
32
- - custom routine
33
- - schedule
37
+ - recurring agent
38
+ - new agent
34
39
  - cron
40
+ - schedule
35
41
  - recurrence
36
- - backend_tier
37
- - process_key
42
+ - task prompt
43
+ - agent.task
38
44
  ui_anchors:
39
- - /settings/routines
45
+ - /agents
40
46
  api_endpoints:
41
- - PUT /api/context/*
47
+ - POST /api/agents
48
+ - GET /api/agents/{slug}/executions
49
+ - POST /api/agents/{slug}/run-now
42
50
  context_files:
43
- - policies/routines/custom/<slug>.md
51
+ - policies/agents/<slug>/agent.md
44
52
  related:
45
53
  - features/routines/custom-routines
46
54
  - concepts/routines
@@ -48,76 +56,122 @@ related:
48
56
  - concepts/backends-and-tiers
49
57
  ---
50
58
 
51
- # Add a Custom Routine
59
+ # Create a Recurring Agent
52
60
 
53
61
  ## Goal
54
62
 
55
- Make the agent fire a particular kind of work on a schedule you pick.
63
+ Make the agent fire a particular kind of work on a schedule you pick
64
+ as a user **Agent** you can watch, tune, and toggle from `/agents`.
56
65
 
57
66
  ## Prerequisites
58
67
 
59
68
  - Daemon running.
60
69
 
61
- ## Steps
62
-
63
- 1. Open `/settings/routines` (the older `/connections/routines` URL
64
- redirects here).
65
- 2. Click **Add**. The "New custom routine" dialog opens.
66
- 3. Fill the form:
67
- - **Slug** — lowercase kebab-case, 1–64 chars, no leading/trailing
68
- hyphen (e.g. `tuesday-notion-sweep`). It becomes the ProcessKey
69
- `routine.custom.<slug>` and the file name
70
- `policies/routines/custom/<slug>.md`.
71
- - **Cron expression** — standard 5-field cron in the daemon's
72
- timezone (e.g. `0 11 * * 2` for 11:00 every Tuesday). The dialog
73
- previews the next three fire times.
74
- - **Backend tier** — `lite` (Haiku), `medium` (Sonnet), or `high`
75
- (Opus). Default is `medium`. Custom routines have no concrete
76
- model picker; the tier is written to the file's `backend_tier`
77
- frontmatter, and the BackendRouter resolves the actual model at
78
- fire time. (See [Backends and tiers](../concepts/backends-and-tiers.md).)
79
- - **Max budget (USD)** — per-execute cap (default `0.05`; must be a
80
- positive number).
81
- - **Description** optional free text. It becomes the body of the
82
- generated vault file, above an empty `## Checks` section seeded
83
- with a `### First check` placeholder. Edit the file later on the
84
- same page to flesh out the check list.
85
- 4. Click **Create**. The dashboard writes the vault file via the
86
- context API (`PUT /api/context/policies/routines/custom/<slug>`).
87
- Because the file ships with `enabled: true` and a `cron:` field,
88
- saving it registers (or refreshes) the cron job, and the next-fire
89
- timestamp appears in the routine list.
90
-
91
- The generated file looks roughly like this:
92
-
93
- ```yaml
94
- ---
95
- type: rule
96
- slug: tuesday-notion-sweep
97
- cron: "0 11 * * 2"
98
- process_key: routine.custom.tuesday-notion-sweep
99
- enabled: true
100
- backend_tier: medium
101
- max_budget_usd: 0.05
102
- ---
70
+ ## Steps (dashboard)
71
+
72
+ 1. Open **Agents** (`/agents`) and click **New Agent**.
73
+ 2. Fill the form:
74
+ - **Name** the human label in the agents list (e.g. "Daily
75
+ Digest").
76
+ - **ID** — lowercase kebab-case slug. It becomes the URL
77
+ (`/agents/<id>`) and the definition file
78
+ `policies/agents/<id>/agent.md`. Must not collide with an
79
+ existing Agent (built-in slugs are reserved too).
80
+ - **Schedule** — pick a frequency (hourly / daily / weekly /
81
+ monthly) and its fields, e.g. weekly on Tuesday at 11:00. An
82
+ optional toggle defers runs that land inside your quiet hours.
83
+ - **Backend engine / Model tier** — `lite` (Haiku-class), `medium`
84
+ (Sonnet-class), or `high` (Opus-class). See
85
+ [Backends and tiers](../concepts/backends-and-tiers.md).
86
+ - **Limits** — max turns, max budget (USD) per run, and timeout
87
+ (minutes).
88
+ - **Task prompt** — what the agent should do on each run. This text
89
+ becomes the Markdown body of `agent.md` and is the prompt the
90
+ agent receives every time it fires.
91
+ - An **Advanced (YAML)** toggle reveals the raw `agent.md` editor
92
+ for long-tail fields the form doesn't expose (tags, tools,
93
+ success criteria, error handling).
94
+ 3. Save. The dashboard writes `policies/agents/<slug>/agent.md`
95
+ through the context vault and opens the new Agent's detail page;
96
+ the daemon imports the file without a restart.
97
+
98
+ ## Steps (API)
99
+
100
+ `POST /api/agents` is the programmatic counterpart:
101
+
102
+ ```bash
103
+ curl -X POST http://localhost:8321/api/agents \
104
+ -H "Content-Type: application/json" \
105
+ -d '{
106
+ "slug": "tuesday-notion-sweep",
107
+ "name": "Tuesday Notion Sweep",
108
+ "description": "Weekly Notion inbox cleanup",
109
+ "schedule": { "kind": "cron", "expression": "0 11 * * 2" },
110
+ "backend": { "tier": "medium" },
111
+ "limits": { "max_budget_usd": 0.10 },
112
+ "prompt": "- Review my Notion inbox for items older than a week.\n- File or archive each one.\n- DM me a one-paragraph summary."
113
+ }'
103
114
  ```
104
115
 
105
- To stop a routine without deleting it, set `enabled: false` in the
106
- file and save that unregisters the cron job.
116
+ - **`prompt` becomes the Agent's task prompt** — it is stored as the
117
+ Markdown body of `agent.md` and sent to the agent on every run.
118
+ - **`schedule`** takes one of two forms: a raw 5-field cron
119
+ (`{ "kind": "cron", "expression": "0 11 * * 2" }`, interpreted in
120
+ the daemon's timezone unless `schedule.timezone` is set) or a
121
+ structured rule (`{ "kind": "recurring", "recurrence": { "frequency":
122
+ "weekly", "daysOfWeek": ["tuesday"], "time": "11:00" } }`).
123
+ `/agents` is recurring-only — a one-time task belongs on
124
+ `POST /api/schedule` instead.
125
+ - **`backend.tier`** is optional; omitted, the Agent inherits the
126
+ `agent.task` process default (medium). `backend.process_key`
127
+ defaults to `agent.task` — you don't need to set it.
128
+ - **`limits`** defaults: 20 turns, $0.25 per run, 10-minute timeout.
129
+ - Success returns `201 { "status": "created", "slug": ... }`. A taken
130
+ slug returns `409 slug_collision`; validation failures return `400`
131
+ with a field-level `issues` list.
132
+
133
+ ## Where to See Runs
134
+
135
+ - **`/agents`** lists every Agent with its schedule, enable toggle,
136
+ 7-day metrics, and last run.
137
+ - **`/agents/<slug>`** is the detail page: the full definition, recent
138
+ execution history with results and cost, and a **Run now** button
139
+ (`POST /api/agents/<slug>/run-now`).
140
+ - **Activity** logs each run alongside everything else the agent does.
141
+ - Programmatically: `GET /api/agents/<slug>/executions`.
107
142
 
108
143
  ## Verification
109
144
 
110
- - Wait for the cron to fire; check Activity for the row tagged
111
- `routine.custom.<slug>`.
145
+ - Click **Run now** on the detail page (or wait for the schedule); an
146
+ execution row should appear with its result and cost.
112
147
 
113
148
  ## If It Fails
114
149
 
115
- - A cron that resolves to "never" (or is otherwise invalid): the
116
- dialog shows the preview error and refuses to save it.
117
- - A prompt that hits the absolute-block guardrails: the routine fires
118
- but the offending tool call is logged as `blocked_absolute` in the
150
+ - `409 slug_collision` pick a different ID; built-in Agent slugs are
151
+ reserved.
152
+ - `400 invalid_definition` fix the fields listed in `issues`.
153
+ - `400 one_shot_not_supported` `/agents` is recurring-only; use
154
+ `POST /api/schedule` for one-time work.
155
+ - A prompt that hits the absolute-block guardrails: the run fires but
156
+ the offending tool call is logged as `blocked_absolute` in the
119
157
  action log.
120
158
 
159
+ ## Migrating From Custom Routines
160
+
161
+ The legacy custom-routine format —
162
+ `policies/routines/custom/<slug>.md` files with `cron:` frontmatter
163
+ and a `## Checks` body — is retired and those files no longer fire.
164
+ At the first daemon start after the upgrade, each valid file was
165
+ converted **once** into a user Agent with the same cron, tier, budget,
166
+ and enabled state; the `## Checks` body became the Agent's task
167
+ prompt, and the source file was kept but marked inert
168
+ (`enabled: false` plus a `migrated_to_agent: <slug>` marker). See
169
+ [Custom Routines (Retired)](../features/routines/custom-routines.md)
170
+ for collision and invalid-file handling.
171
+
121
172
  ## Related
122
173
 
123
- - [Custom Routines](../features/routines/custom-routines.md)
174
+ - [Custom Routines (Retired)](../features/routines/custom-routines.md)
175
+ - [Routines](../concepts/routines.md)
176
+ - [ProcessKeys](../concepts/process-keys.md)
177
+ - [Backends and tiers](../concepts/backends-and-tiers.md)
@@ -91,9 +91,11 @@ Per-file token approximation is script-aware: ~4 characters per token
91
91
  for Latin/prose, ~1.5 for majority-CJK files, with a 200-token floor
92
92
  per file so empty or one-line stubs still account for the fixed
93
93
  per-call overhead (system prompt, skills bundle, tool docs). The unit
94
- cost (`$0.003` per 1k tokens) matches Claude Sonnet 4.6's ~$3 /
95
- Mtoken input price. The bracket lets you see a worst case before
96
- approving.
94
+ cost (`$0.003` per 1k tokens) matches Claude Sonnet 5's ~$3 /
95
+ Mtoken standard input price. (An introductory $2 / Mtoken rate runs
96
+ through 2026-08-31; the estimate lists the standard rate, while the
97
+ SDK's billed `total_cost_usd` reflects the intro price during the
98
+ window.) The bracket lets you see a worst case before approving.
97
99
 
98
100
  > The dashboard surfaces the top raw files by estimated token count,
99
101
  > so you can see which sources dominate the bill before approving.
@@ -76,7 +76,7 @@ delegated routine onto Gemini to save Claude quota.
76
76
 
77
77
  To give the evening review deeper reasoning, set
78
78
  `routine.evening_review` → main `claude`, tier `high`. The next evening
79
- run resolves to **Opus 4.8** instead of the default Sonnet 4.6. The
79
+ run resolves to **Opus 4.8** instead of the default Sonnet 5. The
80
80
  execution budget for that run also scales with the tier (high tier
81
81
  carries a larger turn / cost envelope than medium).
82
82
 
@@ -196,7 +196,7 @@ vault on Opus 4.8 and a parenting journal on Haiku 4.5 at the same
196
196
  time, you cannot — the `wiki.ask` row resolves to one backend/model for
197
197
  every workspace. The pragmatic shape is:
198
198
 
199
- - Bind `wiki.ask` to its medium-tier default (Sonnet 4.6), a sensible
199
+ - Bind `wiki.ask` to its medium-tier default (Sonnet 5), a sensible
200
200
  cross-workspace balance of cost and quality.
201
201
  - Keep cost differences per workspace through each workspace's own
202
202
  full-compile approval threshold (see above).
@@ -23,7 +23,7 @@ ask_examples:
23
23
  - Can I disable everything for a week?
24
24
  locale: en-US
25
25
  created: 2026-04-25
26
- updated: 2026-06-07
26
+ updated: 2026-06-10
27
27
  keywords:
28
28
  - pause agent
29
29
  - stop agent
@@ -36,11 +36,10 @@ related:
36
36
  - features/messaging/bang-commands
37
37
  - concepts/routines
38
38
  ui_anchors:
39
- - /settings/schedule
40
- - /settings/routines
39
+ - /settings/hours
41
40
  - /agents
42
41
  config_keys:
43
- - hourlyCheckEnabled
42
+ - activityScanEnabled
44
43
  - monthlyReviewEnabled
45
44
  - quietHoursStart
46
45
  - quietHoursEnd
@@ -63,7 +62,7 @@ DM `!stop` to the agent on any paired messaging app. This is the
63
62
  recommended way to go silent and the only one you need for most cases:
64
63
 
65
64
  - It pauses **every** cron-driven routine — morning, evening, weekly,
66
- monthly, and the hourly check — not just one of them.
65
+ monthly, and the activity scan — not just one of them.
67
66
  - Non-command DMs are declined with a paused notice (no LLM cost)
68
67
  until you resume.
69
68
  - The paused state is persisted, so a daemon restart does **not**
@@ -76,26 +75,29 @@ Resume with `!start` whenever you want the agent active again. See
76
75
 
77
76
  ## Finer-grained control from the dashboard
78
77
 
79
- If you want to mute specific behaviour rather than pause everything, use
80
- `/settings/schedule`:
81
-
82
- 1. **Disable the hourly check** toggle `hourlyCheckEnabled` off. This
83
- leaves the morning, evening, weekly, and monthly routines running.
84
- 2. **Disable the monthly review** toggle `monthlyReviewEnabled` off
85
- (it ships off by default).
86
- 3. **Silence notifications without pausing work** set an extended
87
- quiet hours window: e.g. `quietHoursStart: "00:00"`,
88
- `quietHoursEnd: "23:59"`. Both fields take an `HH:MM` string.
89
- Routines still run; they just don't notify you.
78
+ If you want to mute specific behaviour rather than pause everything:
79
+
80
+ 1. **Disable the activity scan** — open `/agents/activity-scan` and click
81
+ **Disable**. This leaves the morning, evening, weekly, and monthly
82
+ routines running. (The agent's enable switch replaced the legacy
83
+ `activityScanEnabled` config key, now a deprecated fallback.)
84
+ 2. **Disable the monthly review** — open `/agents/monthly-review` and
85
+ click **Disable** (it ships disabled by default; the agent's enable
86
+ switch replaced the legacy `monthlyReviewEnabled` config key).
87
+ 3. **Silence notifications without pausing work** — on `/settings/hours`
88
+ ("Hours & Notifications"), set an extended quiet hours window: e.g.
89
+ `quietHoursStart: "00:00"`, `quietHoursEnd: "23:59"`. Both fields
90
+ take an `HH:MM` string. Routines still run; they just don't notify
91
+ you.
90
92
 
91
93
  Morning (fires at the day boundary, default 04:00), evening (18:00),
92
94
  and weekly (Fri 19:00) reviews each have a per-routine Enable/Disable
93
95
  toggle on the `/agents` page — open `/agents/<slug>` (e.g.
94
96
  `/agents/weekly-review`) and click Disable (a stop-warning confirmation
95
97
  appears for these system agents). To halt all of them at once, use
96
- `!stop` above instead. You can still edit each routine's instructions
97
- on `/settings/routines`, but that page does not turn the built-in
98
- reviews on or off.
98
+ `!stop` above instead. Each routine's instructions (its rulebook) are
99
+ edited on the same page's **Rulebook** tab
100
+ (`/agents/<slug>?tab=rulebook`).
99
101
 
100
102
  ## Last resort: stop the daemon
101
103
 
@@ -115,7 +117,7 @@ temporary pause that survives across days, prefer `!stop`. Restart with
115
117
 
116
118
  - A routine still fires after `!stop`: confirm the pause registered by
117
119
  checking `!help` or the dashboard banner; re-send `!stop`.
118
- - A toggle on `/settings/schedule` did not take effect: confirm it
120
+ - A setting on `/settings/hours` did not take effect: confirm it
119
121
  saved — the dashboard's "Save" button must be clicked.
120
122
 
121
123
  ## Related
@@ -46,6 +46,8 @@ related:
46
46
  - guides/migrate-machines
47
47
  - guides/pause-the-agent
48
48
  - glossary
49
+ ui_anchors:
50
+ - /settings/danger-zone
49
51
  ---
50
52
 
51
53
  # Reinstall Cleanly
@@ -29,7 +29,7 @@ ask_examples:
29
29
  - Where do I paste my API key?
30
30
  locale: en-US
31
31
  created: 2026-04-25
32
- updated: 2026-06-07
32
+ updated: 2026-06-10
33
33
  keywords:
34
34
  - setup
35
35
  - wizard
@@ -57,8 +57,8 @@ ui_anchors:
57
57
  - /setup
58
58
  - /settings/models
59
59
  - /connections
60
- - /settings/routines
61
- - /settings/schedule
60
+ - /agents
61
+ - /settings/hours
62
62
  ---
63
63
 
64
64
  # Setup Wizard Walkthrough
@@ -143,7 +143,7 @@ subscription. Anthropic in particular currently prohibits using the
143
143
  Claude Agent SDK with a Claude Pro / Max subscription.
144
144
 
145
145
  Per-process model bindings are seeded with fixed defaults: **Claude
146
- Sonnet 4.6** (`claude-sonnet-4-6`) for owner-facing work and **Claude
146
+ Sonnet 5** (`claude-sonnet-5`) for owner-facing work and **Claude
147
147
  Haiku 4.5** (`claude-haiku-4-5-20251001`) for delegated/simple
148
148
  polling. Opus (`claude-opus-4-8`) is registered but not seeded — opt
149
149
  in per row. There are no subscription-plan questions. Change the
@@ -188,12 +188,15 @@ character prompt referenced in Step 1 actually gets written.
188
188
 
189
189
  ## After the wizard
190
190
 
191
- Routines are **not** configured in the wizard. Edit the per-cadence
192
- rulebooks (morning / evening / weekly / hourly) and register custom cron
193
- routines post-setup on `/settings/routines`; the hourly-check master
194
- switch, active / quiet hours, and the monthly review live on
195
- `/settings/schedule`. Repositories are also added after setup, from
196
- Connections Repositories.
191
+ Routines are **not** configured in the wizard. Post-setup, each routine
192
+ is an agent under `/agents`: edit the per-cadence rulebooks (morning /
193
+ evening / weekly / activity scan) on the agent's Rulebook tab, create custom
194
+ recurring agents from the New Agent dialog, set the activity-scan switch
195
+ and cadence on `/agents/activity-scan`, and opt into the monthly review
196
+ by enabling `/agents/monthly-review`. Quiet hours, timezone, and
197
+ notification caps live on `/settings/hours` ("Hours & Notifications").
198
+ Repositories are also added after setup, from Connections →
199
+ Repositories.
197
200
 
198
201
  ## Verification
199
202
 
@@ -139,6 +139,17 @@ All three routes are `RiskTier.Autonomous`. `POST /api/feedback` server-restrict
139
139
  | Feedback consume | `POST /api/feedback/consume` | `feedback.ts` | `{ids: number[], lessonRef?}` → `{consumed, notFound}`. Marks signals consumed after a consolidation pass. |
140
140
  | Feedback lessons | `GET /api/feedback/lessons` | `feedback.ts` | Read-only lesson-store overview for the dashboard — global `agent` store plus every per-agent store on disk, with cap-utilisation metrics. |
141
141
 
142
+ ### Self-tuning
143
+
144
+ Both routes are `RiskTier.Autonomous`. The weekly review's Recommend pre-step generates at most 3 bounded recommendations per cycle; verdicts may only reference the single-use ids the daemon generated for the **current** cycle (the pending blob is overwritten — and prior ids expired — every weekly run). Verdicts are always recorded and audited as `agent_actions.action_type='self_tuning.verdict'`, and rejections become `self_critique` feedback signals server-side.
145
+
146
+ While `selfTuningEnabled=false` (the shipped default) the loop runs in **shadow mode**: nothing is ever actuated and responses carry `shadow: true` with an empty `applied` array. With the flag on (**live mode**), newly-recorded `apply` verdicts actuate per key namespace: config knobs go through the `applyConfigUpdates` chokepoint (bounds enforced there), write a `runtime_state.self_tuning:<key>` ledger entry, audit `self_tuning.applied`, and DM the owner one line with the `!revert tuning` undo hint; `notification:<type>` (R2) applies are recorded as lesson guidance only; `recurring_schedules:<id>` (R4) applies become an owner DM suggestion — never an automatic flip. Retried POSTs are `duplicate` per id and never re-actuate. A daily auto-revert monitor re-measures each applied change after its 7-day verify window and reverts on regression (audit `self_tuning.reverted`, 28-day re-proposal cool-down); clean windows are stamped `self_tuning.verified`.
147
+
148
+ | Group | Path | Source | Purpose |
149
+ |---|---|---|---|
150
+ | Tuning verdicts | `POST /api/tuning/verdicts` | `tuning.ts` | `{cycleId, verdicts: [{id, verdict: apply\|reject\|defer, reason}]}` → per-id `recorded`/`duplicate`/`conflict` results plus `shadow`, `applied[]`, and `actuationFailures[]`. Idempotent per id (first verdict wins); 400 atomically on any unknown id; 409 on a missing or expired cycle. |
151
+ | Tuning pending | `GET /api/tuning/pending` | `tuning.ts` | The current cycle's recommendations + recorded verdicts, for the owner's validation and the dashboard. `shadow` reflects the live flag. |
152
+
142
153
  ### Docs and wiki
143
154
 
144
155
  | Group | Path | Source | Purpose |
@@ -36,14 +36,14 @@ keywords:
36
36
  - EDITABLE_RUNTIME_KEY_TUPLE
37
37
  - RESTART_REQUIRED_KEY_TUPLE
38
38
  - dayBoundaryHour
39
- - hourlyCheckIntervalMinutes
39
+ - activityScanIntervalMinutes
40
40
  - quietHoursStart
41
41
  - quietHoursEnd
42
42
  - executeTimeoutMinutes
43
43
  - autonomousDailyCostCapUsd
44
44
  - allowedToolsOverride
45
45
  - voiceTranscriptionEnabled
46
- - hourlyCheckPrePassFreshnessMinutes
46
+ - activityScanPrePassFreshnessMinutes
47
47
  - vaultMode
48
48
  - PA_DATA_DIR
49
49
  - PA_API_PORT
@@ -52,9 +52,9 @@ config_keys:
52
52
  - timezone
53
53
  - primaryLanguage
54
54
  - vaultMode
55
- - hourlyCheckEnabled
56
- - hourlyCheckIntervalMinutes
57
- - hourlyCheckPrePassFreshnessMinutes
55
+ - activityScanEnabled
56
+ - activityScanIntervalMinutes
57
+ - activityScanPrePassFreshnessMinutes
58
58
  - quietHoursStart
59
59
  - quietHoursEnd
60
60
  - maxNotificationsPerHour
@@ -75,7 +75,7 @@ api_endpoints:
75
75
  - PATCH /api/config
76
76
  - POST /api/voice/install
77
77
  ui_anchors:
78
- - /settings/advanced
78
+ - /settings/infrastructure
79
79
  - /settings/models
80
80
  created: 2026-04-25
81
81
  updated: 2026-06-08
@@ -131,19 +131,26 @@ case-sensitive.
131
131
  | `primaryLanguage` | BCP-47 | Output language for DMs, journal, and Obsidian writes. Templates stay English-headered. |
132
132
  | `vaultMode` | enum | Where context lives — `plain` (default; `<dataDir>/context`) or `obsidian` (an external Obsidian vault). |
133
133
 
134
- ### Hourly check and gate
134
+ ### Activity scan and gate
135
+
136
+ The first five keys are **deprecated fallbacks**: the activity-scan
137
+ cadence, active window, min-observations threshold, and enable switch
138
+ moved onto the activity-scan agent (`/agents/activity-scan`, Definition
139
+ tab → Cadence card; Enable/Disable). The keys are still accepted by
140
+ `PATCH /api/config` but no longer surfaced in the dashboard; values
141
+ resolve agent override → legacy config key → built-in default.
135
142
 
136
143
  | Key | Type | Notes |
137
144
  |---|---|---|
138
- | `hourlyCheckEnabled` | boolean | Default `true`. |
139
- | `hourlyCheckIntervalMinutes` | number | Default `60`. |
140
- | `hourlyCheckActiveStartHour` | 0–23 | Default `4`. |
141
- | `hourlyCheckActiveEndHour` | 1–24 | End-exclusive; `24` ≡ midnight. |
142
- | `hourlyCheckMinObservations` | number | Default `1`. |
143
- | `hourlyCheckStage2Enabled` | boolean | cost-reduction-structural §B Stage 2 toggle. |
144
- | `hourlyCheckHeartbeatHours` | number | Quiet-day heartbeat cadence. |
145
- | `hourlyCheckLowSignalPendingCeiling` | number | Low-signal ceiling before forcing dispatch. |
146
- | `hourlyCheckPrePassFreshnessMinutes` | number | Layer-1 freshness window — `harvestForGate` skips a per-integration fetch if `runtime_state.pre_pass_last_run:<key>` is fresher. |
145
+ | `activityScanEnabled` | boolean | **Deprecated fallback** — the agent's enable switch on `/agents/activity-scan` is the source of truth. Default `true`. |
146
+ | `activityScanIntervalMinutes` | number | **Deprecated fallback** — edit on `/agents/activity-scan`. Default `60`. |
147
+ | `activityScanActiveStartHour` | 0–23 | **Deprecated fallback** — edit on `/agents/activity-scan`. Default `4`. |
148
+ | `activityScanActiveEndHour` | 1–24 | **Deprecated fallback** — edit on `/agents/activity-scan`. End-exclusive; `24` ≡ midnight. |
149
+ | `activityScanMinObservations` | number | **Deprecated fallback** — edit on `/agents/activity-scan`. Default `1`. |
150
+ | `activityScanStage2Enabled` | boolean | cost-reduction-structural §B Stage 2 toggle. |
151
+ | `activityScanHeartbeatHours` | number | Quiet-day heartbeat cadence. |
152
+ | `activityScanLowSignalPendingCeiling` | number | Low-signal ceiling before forcing dispatch. |
153
+ | `activityScanPrePassFreshnessMinutes` | 0–480 | Default `30`. Layer-1 freshness window — `harvestForGate` skips a per-integration fetch if `runtime_state.pre_pass_last_run:<key>` is fresher. Cap widened 240 → 480 for the self-tuning R1 ladder (120/240/360/480). |
147
154
 
148
155
  ### Notifications and quiet hours
149
156
 
@@ -248,6 +255,7 @@ page. Defaults and ranges below are enforced in
248
255
  | Key | Type | Notes |
249
256
  |---|---|---|
250
257
  | `feedbackLearningEnabled` | boolean | Default `true` (env `FEEDBACK_LEARNING_ENABLED`). Master kill-switch for the whole loop — capture, consolidation, and injection. |
258
+ | `selfTuningEnabled` | boolean | Default `false` (env `SELF_TUNING_ENABLED`). Actuation gate for the self-tuning review cycle. While `false`, the loop runs in shadow mode: the weekly review still receives `<tuning_recommendations>` and records verdicts via `POST /api/tuning/verdicts`, but no config change is ever applied. With the flag on, apply verdicts for config knobs actuate through the bounded config chokepoint — one owner DM per applied change, `!revert tuning` undoes the latest, and a daily monitor auto-reverts any change whose 7-day verify metrics regressed. Flip only after ≥2 clean shadow cycles (SELF_TUNING_REVIEW_CYCLE_DESIGN.md §7 shadow→live gate). |
251
259
  | `feedbackPromotionThreshold` | 1–10 | Default `2` (env `FEEDBACK_PROMOTION_THRESHOLD`). Weighted-evidence threshold a behavioral / self-critique lesson must clear before it becomes injectable. |
252
260
  | `feedbackLessonMaxBytesGlobal` | 1024–32768 | Default `8192` (env `FEEDBACK_LESSON_MAX_BYTES_GLOBAL`). Byte cap for `policies/agent-lessons.md`. |
253
261
  | `feedbackLessonMaxBytesPerAgent` | 512–16384 | Default `4096` (env `FEEDBACK_LESSON_MAX_BYTES_PER_AGENT`). Byte cap for each `policies/agents/<slug>/lessons.md`. |
@@ -266,11 +274,13 @@ shift the whole day, change `dayBoundaryHour` instead.
266
274
  | `routine.morning_routine` | Daily at `dayBoundaryHour` (default 04:00). |
267
275
  | `routine.evening_review` | Daily at `18:00` local. |
268
276
  | `routine.weekly_review` | Friday `19:00` local (one hour after the evening review). |
269
- | `routine.monthly_review` | Last day of the month at `18:00` local, but **disabled by default** (`monthlyReviewEnabled = false`). |
277
+ | `routine.monthly_review` | Last day of the month at `18:00` local, but **disabled by default** — opt in by enabling the monthly-review agent at `/agents/monthly-review` (`agents.enabled` is the single switch; the legacy `monthlyReviewEnabled` config key is a deprecated fallback, carried forward once by a boot-time reconcile). |
270
278
 
271
- The hourly check is the one autonomous routine with a configurable
272
- cadence (`hourlyCheckIntervalMinutes`) and active window
273
- (`hourlyCheckActiveStartHour` / `…ActiveEndHour`).
279
+ The activity scan is the one autonomous routine with a configurable
280
+ cadence and active window — edited on the activity-scan agent's page
281
+ (`/agents/activity-scan`, Definition tab → Cadence card); the legacy
282
+ `activityScanIntervalMinutes` / `activityScanActiveStartHour` /
283
+ `…ActiveEndHour` keys remain as deprecated fallbacks.
274
284
 
275
285
  ## Restart-Required Keys
276
286
 
@@ -23,7 +23,7 @@ ask_examples:
23
23
  - What does pressing "?" do in the dashboard?
24
24
  locale: en-US
25
25
  created: 2026-04-25
26
- updated: 2026-05-28
26
+ updated: 2026-06-10
27
27
  keywords:
28
28
  - shortcut
29
29
  - hotkey
@@ -65,7 +65,7 @@ regardless of where focus sits.
65
65
  ## Examples
66
66
 
67
67
  - Press `Cmd+K`, type "timezone", and hit Enter to jump straight to the
68
- Timezone field on `/settings/schedule`.
68
+ Timezone field on `/settings/hours`.
69
69
  - On any screen, press `?` to ask a question about what you are looking
70
70
  at; the help slide-over opens pre-scoped to that page's doc.
71
71
  - While drafting a message in `/chat`, press `Cmd+Enter` to send without