@aitne-sh/aitne 0.1.8 → 0.1.9
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.
- package/README.md +218 -161
- package/agent-assets/agent-profiles/_safety.md +3 -3
- package/agent-assets/agent-profiles/browser-task.md +108 -0
- package/agent-assets/agent-profiles/conversational.md +3 -3
- package/agent-assets/agent-profiles/profile-importer.md +2 -2
- package/agent-assets/agent-profiles/routine-fetch-window.md +30 -19
- package/agent-assets/agents/context-index-reconcile/agent.md +52 -0
- package/agent-assets/agents/evening-review/agent.md +53 -0
- package/agent-assets/agents/hourly-check/agent.md +62 -0
- package/agent-assets/agents/monthly-review/agent.md +55 -0
- package/agent-assets/agents/morning-routine/agent.md +78 -0
- package/agent-assets/agents/roadmap-maintenance/agent.md +52 -0
- package/agent-assets/agents/skill-curation/agent.md +52 -0
- package/agent-assets/agents/user-profile-sweep-evening/agent.md +48 -0
- package/agent-assets/agents/user-profile-sweep-morning/agent.md +53 -0
- package/agent-assets/agents/weekly-review/agent.md +51 -0
- package/agent-assets/docs/concepts/agent-day.md +13 -11
- package/agent-assets/docs/concepts/auth-health.md +47 -10
- package/agent-assets/docs/concepts/backends-and-tiers.md +66 -31
- package/agent-assets/docs/concepts/costs-and-quotas.md +50 -15
- package/agent-assets/docs/concepts/delegated-mode.md +52 -13
- package/agent-assets/docs/concepts/memory-model.md +72 -32
- package/agent-assets/docs/concepts/observations.md +49 -11
- package/agent-assets/docs/concepts/process-keys.md +56 -22
- package/agent-assets/docs/concepts/routines.md +60 -33
- package/agent-assets/docs/concepts/safety-and-execution.md +50 -21
- package/agent-assets/docs/concepts/safety-model.md +42 -34
- package/agent-assets/docs/concepts/skills.md +33 -17
- package/agent-assets/docs/features/integrations/browser-history.md +195 -0
- package/agent-assets/docs/features/integrations/calendar.md +39 -29
- package/agent-assets/docs/features/integrations/git.md +18 -7
- package/agent-assets/docs/features/integrations/github.md +84 -33
- package/agent-assets/docs/features/integrations/mail.md +59 -16
- package/agent-assets/docs/features/integrations/notion.md +18 -6
- package/agent-assets/docs/features/integrations/obsidian.md +28 -5
- package/agent-assets/docs/features/lifestyle/git.md +42 -38
- package/agent-assets/docs/features/lifestyle/reading.md +50 -22
- package/agent-assets/docs/features/lifestyle/receipts.md +51 -21
- package/agent-assets/docs/features/lifestyle/travel-bookings.md +76 -14
- package/agent-assets/docs/features/memory-files/agent-journal.md +111 -50
- package/agent-assets/docs/features/memory-files/projects.md +71 -17
- package/agent-assets/docs/features/memory-files/roadmap.md +50 -10
- package/agent-assets/docs/features/memory-files/schedule.md +113 -70
- package/agent-assets/docs/features/memory-files/today.md +46 -21
- package/agent-assets/docs/features/memory-files/user-profile.md +63 -33
- package/agent-assets/docs/features/messaging/bang-commands.md +113 -36
- package/agent-assets/docs/features/messaging/dashboard-chat.md +43 -21
- package/agent-assets/docs/features/messaging/discord.md +35 -4
- package/agent-assets/docs/features/messaging/overview.md +37 -19
- package/agent-assets/docs/features/messaging/pairing-and-magic-phrase.md +94 -27
- package/agent-assets/docs/features/messaging/slack.md +67 -14
- package/agent-assets/docs/features/messaging/telegram.md +18 -5
- package/agent-assets/docs/features/messaging/whatsapp.md +71 -17
- package/agent-assets/docs/features/operations/activity-and-conversations.md +44 -15
- package/agent-assets/docs/features/operations/approvals.md +48 -16
- package/agent-assets/docs/features/operations/backend-routing.md +68 -16
- package/agent-assets/docs/features/operations/cost-tracking.md +84 -17
- package/agent-assets/docs/features/operations/managed-chromium.md +221 -0
- package/agent-assets/docs/features/operations/notifications.md +52 -11
- package/agent-assets/docs/features/operations/quiet-hours.md +63 -40
- package/agent-assets/docs/features/operations/schedule-approaching.md +54 -24
- package/agent-assets/docs/features/routines/custom-routines.md +88 -20
- package/agent-assets/docs/features/routines/evening-review.md +74 -21
- package/agent-assets/docs/features/routines/hourly-check.md +149 -29
- package/agent-assets/docs/features/routines/morning-routine.md +53 -35
- package/agent-assets/docs/features/routines/weekly-review.md +40 -21
- package/agent-assets/docs/features/wiki/commands.md +26 -16
- package/agent-assets/docs/features/wiki/cost-and-approval.md +240 -0
- package/agent-assets/docs/features/wiki/dashboard.md +255 -0
- package/agent-assets/docs/features/wiki/overview.md +68 -10
- package/agent-assets/docs/features/wiki/search.md +248 -0
- package/agent-assets/docs/features/wiki/workspaces.md +254 -0
- package/agent-assets/docs/getting-started/01-what-is-this.md +34 -23
- package/agent-assets/docs/getting-started/02-first-steps.md +13 -8
- package/agent-assets/docs/getting-started/03-what-can-this-do.md +25 -14
- package/agent-assets/docs/getting-started/04-first-day.md +38 -20
- package/agent-assets/docs/glossary.md +235 -24
- package/agent-assets/docs/guides/add-a-custom-routine.md +63 -23
- package/agent-assets/docs/guides/backup-and-restore.md +80 -16
- package/agent-assets/docs/guides/budget-and-cost-for-wiki.md +56 -25
- package/agent-assets/docs/guides/build-your-wiki.md +22 -9
- package/agent-assets/docs/guides/change-which-model-handles-x.md +64 -10
- package/agent-assets/docs/guides/connect-a-new-mail-account.md +64 -15
- package/agent-assets/docs/guides/explore-with-trace-and-connect.md +28 -11
- package/agent-assets/docs/guides/import-knowledge-file.md +50 -40
- package/agent-assets/docs/guides/install-and-run.md +48 -19
- package/agent-assets/docs/guides/maintain-wiki-health.md +35 -10
- package/agent-assets/docs/guides/migrate-machines.md +74 -18
- package/agent-assets/docs/guides/multiple-wikis-for-multiple-domains.md +111 -60
- package/agent-assets/docs/guides/pause-the-agent.md +65 -24
- package/agent-assets/docs/guides/reinstall-cleanly.md +88 -18
- package/agent-assets/docs/guides/setup-wizard.md +113 -54
- package/agent-assets/docs/guides/switch-default-backend.md +62 -16
- package/agent-assets/docs/guides/use-an-existing-obsidian-vault.md +26 -10
- package/agent-assets/docs/reference/api.md +143 -32
- package/agent-assets/docs/reference/cli-commands.md +38 -17
- package/agent-assets/docs/reference/config.md +224 -49
- package/agent-assets/docs/reference/disallowed-tools.md +29 -10
- package/agent-assets/docs/reference/keyboard-shortcuts.md +34 -10
- package/agent-assets/docs/reference/knowledge-layout.md +620 -0
- package/agent-assets/docs/reference/process-keys.md +61 -5
- package/agent-assets/docs/reference/skills.md +38 -12
- package/agent-assets/docs/troubleshooting/auth-failed.md +48 -19
- package/agent-assets/docs/troubleshooting/dashboard-shows-degraded.md +90 -28
- package/agent-assets/docs/troubleshooting/fallback-keeps-firing.md +86 -22
- package/agent-assets/docs/troubleshooting/messaging-not-pairing.md +68 -24
- package/agent-assets/docs/troubleshooting/morning-routine-didnt-run.md +80 -20
- package/agent-assets/docs/troubleshooting/observation-not-detected.md +73 -21
- package/agent-assets/docs/troubleshooting/quota-exhausted.md +29 -5
- package/agent-assets/docs/troubleshooting/wiki-ingest-full-blocked.md +126 -54
- package/agent-assets/docs/troubleshooting/wiki-write-failed.md +29 -12
- package/agent-assets/optimizer-skills/drift-analysis/SKILL.md +1 -1
- package/agent-assets/optimizer-skills/knowledge-map/SKILL.md +1 -1
- package/agent-assets/optimizer-skills/skill-curation/SKILL.md +1 -1
- package/agent-assets/sandbox/linux/aitne-chromium.apparmor +91 -0
- package/agent-assets/sandbox/macos/aitne-chromium.sb +156 -0
- package/agent-assets/skills/agent-actions/SKILL.md +2 -2
- package/agent-assets/skills/agent-create/SKILL.md +149 -0
- package/agent-assets/skills/attach/SKILL.md +2 -2
- package/agent-assets/skills/browser-history/SKILL.md +198 -0
- package/agent-assets/skills/browser-history-respond/SKILL.md +106 -0
- package/agent-assets/skills/browser-task/SKILL.md +169 -0
- package/agent-assets/skills/context/SKILL.md +12 -12
- package/agent-assets/skills/context/curation.json +2 -2
- package/agent-assets/skills/context/references/api.md +43 -31
- package/agent-assets/skills/context/references/required-frontmatter.md +3 -3
- package/agent-assets/skills/context/references/snapshot-files.md +6 -6
- package/agent-assets/skills/context/seeds/file-responsibilities.seed.json +3 -3
- package/agent-assets/skills/docs-search/SKILL.md +4 -3
- package/agent-assets/skills/external-services/SKILL.delegated.claude.md +11 -21
- package/agent-assets/skills/external-services/SKILL.delegated.codex.md +11 -21
- package/agent-assets/skills/external-services/SKILL.delegated.gemini.md +11 -21
- package/agent-assets/skills/external-services/SKILL.md +3 -3
- package/agent-assets/skills/external-services/SKILL.native.claude.md +5 -5
- package/agent-assets/skills/external-services/SKILL.native.codex.md +7 -7
- package/agent-assets/skills/external-services/SKILL.native.gemini.md +4 -4
- package/agent-assets/skills/external-services/references/calendar-apple.md +2 -2
- package/agent-assets/skills/external-services/references/calendar-outlook.md +1 -1
- package/agent-assets/skills/external-services/references/obsidian.md +2 -2
- package/agent-assets/skills/gmail-lifestyle/SKILL.md +9 -82
- package/agent-assets/skills/mail/SKILL.delegated.claude.md +14 -5
- package/agent-assets/skills/mail/SKILL.delegated.codex.md +8 -4
- package/agent-assets/skills/mail/SKILL.delegated.gemini.md +8 -4
- package/agent-assets/skills/mail/references/api.md +4 -2
- package/agent-assets/skills/mail/references/providers.md +1 -1
- package/agent-assets/skills/managed-tasks/SKILL.md +9 -9
- package/agent-assets/skills/managed-tasks/references/errors.md +9 -6
- package/agent-assets/skills/managed-tasks/references/recurrence-rule.md +1 -1
- package/agent-assets/skills/management-policy/SKILL.md +32 -31
- package/agent-assets/skills/management-policy/curation.json +1 -1
- package/agent-assets/skills/management-policy/references/policy-workflow.md +9 -9
- package/agent-assets/skills/management-policy/seeds/policy-file-shape.seed.json +1 -1
- package/agent-assets/skills/notify/SKILL.md +4 -4
- package/agent-assets/skills/notify/references/priority.md +9 -4
- package/agent-assets/skills/notion/SKILL.delegated.claude.md +1 -1
- package/agent-assets/skills/notion/SKILL.delegated.codex.md +1 -1
- package/agent-assets/skills/notion/SKILL.delegated.gemini.md +1 -1
- package/agent-assets/skills/notion/SKILL.native.claude.md +10 -6
- package/agent-assets/skills/notion/SKILL.native.codex.md +9 -4
- package/agent-assets/skills/notion/SKILL.native.gemini.md +9 -4
- package/agent-assets/skills/observations/SKILL.md +24 -8
- package/agent-assets/skills/project-doc/SKILL.md +1 -1
- package/agent-assets/skills/project-doc/curation.json +3 -3
- package/agent-assets/skills/project-doc/seeds/project-shape.seed.json +7 -4
- package/agent-assets/skills/project-doc/seeds/slug-grammar.seed.json +3 -3
- package/agent-assets/skills/reading/SKILL.md +10 -0
- package/agent-assets/skills/reading/references/reading-taste.md +2 -2
- package/agent-assets/skills/roadmap/SKILL.md +5 -5
- package/agent-assets/skills/roadmap/curation.json +1 -1
- package/agent-assets/skills/roadmap/references/api.md +7 -7
- package/agent-assets/skills/roadmap/references/cross-check.md +15 -8
- package/agent-assets/skills/roadmap/references/migration.md +4 -4
- package/agent-assets/skills/roadmap/seeds/entry-types.seed.json +1 -1
- package/agent-assets/skills/schedule/SKILL.md +42 -34
- package/agent-assets/skills/schedule/references/batch.md +2 -2
- package/agent-assets/skills/schedule/references/errors.md +7 -4
- package/agent-assets/skills/schedule/references/model-selection.md +3 -3
- package/agent-assets/skills/schedule/references/recurrence-rule.md +1 -1
- package/agent-assets/skills/scheduled-managed-task/SKILL.md +46 -36
- package/agent-assets/skills/today/SKILL.md +9 -9
- package/agent-assets/skills/today/curation.json +3 -3
- package/agent-assets/skills/today/references/agent-plan-lifecycle.md +6 -5
- package/agent-assets/skills/today/seeds/section-shape.seed.json +1 -1
- package/agent-assets/skills/user-interview/SKILL.md +12 -9
- package/agent-assets/skills/user-interview/references/op-briefing.md +2 -2
- package/agent-assets/skills/user-interview/references/sweep-and-fallback.md +8 -0
- package/agent-assets/skills/user-profile/SKILL.md +17 -17
- package/agent-assets/skills/user-profile/curation.json +2 -2
- package/agent-assets/skills/user-profile/references/character-preferences.md +2 -2
- package/agent-assets/skills/user-profile/seeds/routing-table.seed.json +8 -8
- package/agent-assets/skills/user-profile/seeds/topic-files.seed.json +6 -6
- package/agent-assets/skills/wiki/wiki-compile/SKILL.md +4 -4
- package/agent-assets/system-prompts/routine-fetch-window.md +22 -12
- package/agent-assets/task-flows/_partials/calendar-acquire.google_calendar.md +4 -2
- package/agent-assets/task-flows/_partials/calendar-acquire.outlook_calendar.md +4 -2
- package/agent-assets/task-flows/_partials/capture-user-info.md +2 -2
- package/agent-assets/task-flows/_partials/dm-intent.long-horizon.md +1 -1
- package/agent-assets/task-flows/_partials/dm-intent.project.md +9 -9
- package/agent-assets/task-flows/_partials/mail-acquire.outlook_mail.md +3 -2
- package/agent-assets/task-flows/_partials/notion-acquire.notion.md +10 -5
- package/agent-assets/task-flows/browser_task.md +84 -0
- package/agent-assets/task-flows/github.assigned.md +1 -1
- package/agent-assets/task-flows/github.pull_request.review_requested.md +2 -2
- package/agent-assets/task-flows/github.workflow_run.failed.md +2 -2
- package/agent-assets/task-flows/knowledge.import.md +14 -14
- package/agent-assets/task-flows/message.received.dm.md +9 -4
- package/agent-assets/task-flows/message.received.dm_first.md +3 -3
- package/agent-assets/task-flows/routine.custom.md +3 -3
- package/agent-assets/task-flows/routine.evening_review.md +8 -8
- package/agent-assets/task-flows/routine.fetch_window.md +2 -2
- package/agent-assets/task-flows/routine.hourly_check.md +16 -12
- package/agent-assets/task-flows/routine.monthly_review.md +21 -21
- package/agent-assets/task-flows/routine.morning_routine_journal.md +119 -97
- package/agent-assets/task-flows/routine.morning_routine_today.md +43 -43
- package/agent-assets/task-flows/routine.research_cluster_update.md +35 -0
- package/agent-assets/task-flows/routine.research_dispatch.md +38 -0
- package/agent-assets/task-flows/routine.research_offer_dm.md +125 -0
- package/agent-assets/task-flows/routine.research_wiki_summary.md +53 -0
- package/agent-assets/task-flows/routine.roadmap_refresh.md +10 -10
- package/agent-assets/task-flows/routine.today_refresh.md +4 -4
- package/agent-assets/task-flows/routine.user_profile_sweep.md +10 -10
- package/agent-assets/task-flows/routine.weekly_review.md +93 -24
- package/agent-assets/task-flows/schedule.approaching.md +0 -1
- package/agent-assets/task-flows/scheduled.dm.md +5 -5
- package/agent-assets/task-flows/scheduled.task.md +4 -4
- package/agent-assets/task-flows/setup.initial.md +21 -21
- package/agent-assets/task-flows/setup.update.md +2 -2
- package/agent-assets/templates/README.md +27 -20
- package/agent-assets/templates/_index.md +42 -26
- package/agent-assets/templates/_manifest.json +34 -99
- package/agent-assets/templates/{user → identity}/_index.md +1 -1
- package/agent-assets/templates/{user → identity}/profile.md +2 -2
- package/agent-assets/templates/{dossiers → knowledge/dossiers}/_index.md +1 -1
- package/agent-assets/templates/{projects → plans/projects}/_active.base +1 -1
- package/agent-assets/templates/policies/_index.md +21 -0
- package/agent-assets/templates/{rules → policies}/journal-export.md +1 -1
- package/agent-assets/templates/{rules → policies}/journal-format.md +5 -5
- package/agent-assets/templates/{rules/policies → policies/management-captures}/_index.md +2 -2
- package/agent-assets/templates/{rules → policies}/management.md +3 -3
- package/agent-assets/templates/{rules → policies}/mcp.md +1 -1
- package/agent-assets/templates/{rules → policies}/redaction.md +1 -1
- package/agent-assets/templates/{routines → policies/routines}/_index.md +1 -1
- package/agent-assets/templates/{routines → policies/routines}/evening.md +2 -2
- package/agent-assets/templates/{routines → policies/routines}/hourly.md +1 -1
- package/agent-assets/templates/{routines → policies/routines}/monthly.md +2 -2
- package/bin/aitne.mjs +13 -4
- package/package.json +5 -4
- package/scripts/commands/doctor.mjs +14 -8
- package/scripts/commands/run-now.mjs +6 -21
- package/scripts/lib/ports.d.mts +27 -0
- package/scripts/lib/ports.mjs +36 -0
- package/scripts/lib/read-api-token.mjs +176 -0
- package/scripts/start.mjs +2 -1
- package/agent-assets/docs/features/lifestyle/travel-time.md +0 -58
- package/agent-assets/skills/gmail-lifestyle/references/travel-time-api.md +0 -59
- package/agent-assets/skills/schedule/references/recurring.md +0 -185
- package/agent-assets/templates/context-index.md +0 -42
- package/agent-assets/templates/rules/_index.md +0 -19
- /package/agent-assets/templates/{user → identity}/expertise.md +0 -0
- /package/agent-assets/templates/{user → identity}/goals.md +0 -0
- /package/agent-assets/templates/{user → identity}/people.md +0 -0
- /package/agent-assets/templates/{user → identity}/personal.md +0 -0
- /package/agent-assets/templates/{user → identity}/work.md +0 -0
- /package/agent-assets/templates/{agent/journal.md → journal/agent.md} +0 -0
- /package/agent-assets/templates/{dossiers → knowledge/dossiers}/evening.md +0 -0
- /package/agent-assets/templates/{dossiers → knowledge/dossiers}/hourly.md +0 -0
- /package/agent-assets/templates/{dossiers → knowledge/dossiers}/monthly.md +0 -0
- /package/agent-assets/templates/{dossiers → knowledge/dossiers}/morning.md +0 -0
- /package/agent-assets/templates/{dossiers → knowledge/dossiers}/roadmap.md +0 -0
- /package/agent-assets/templates/{dossiers → knowledge/dossiers}/weekly.md +0 -0
- /package/agent-assets/templates/{projects → plans/projects}/_index.md +0 -0
- /package/agent-assets/templates/{roadmap.md → plans/roadmap.md} +0 -0
- /package/agent-assets/templates/{routines → policies/routines}/morning.md +0 -0
- /package/agent-assets/templates/{routines → policies/routines}/weekly.md +0 -0
- /package/agent-assets/templates/{agent → state}/profile-questions.md +0 -0
- /package/agent-assets/templates/{today.md → state/today.md} +0 -0
|
@@ -17,8 +17,9 @@ section: memory
|
|
|
17
17
|
tags:
|
|
18
18
|
- core
|
|
19
19
|
- memory
|
|
20
|
-
- storage
|
|
21
20
|
- knowledge
|
|
21
|
+
- context
|
|
22
|
+
- safety
|
|
22
23
|
status: stable
|
|
23
24
|
ask_examples:
|
|
24
25
|
- Where are my context files stored?
|
|
@@ -28,20 +29,21 @@ ask_examples:
|
|
|
28
29
|
- How does the daemon prevent the agent from writing to disk directly?
|
|
29
30
|
locale: en-US
|
|
30
31
|
created: 2026-04-25
|
|
31
|
-
updated: 2026-05-
|
|
32
|
+
updated: 2026-05-28
|
|
32
33
|
keywords:
|
|
33
34
|
- context
|
|
34
35
|
- markdown
|
|
35
36
|
- SQLite
|
|
36
|
-
- today.md
|
|
37
|
-
-
|
|
38
|
-
- roadmap.md
|
|
39
|
-
-
|
|
40
|
-
-
|
|
41
|
-
- agent
|
|
37
|
+
- state/today.md
|
|
38
|
+
- identity/profile.md
|
|
39
|
+
- plans/roadmap.md
|
|
40
|
+
- policies/management.md
|
|
41
|
+
- policies/management-captures
|
|
42
|
+
- journal/agent.md
|
|
42
43
|
- context API
|
|
43
44
|
- AgentWriteTracker
|
|
44
45
|
- durable memory
|
|
46
|
+
- context-vault v2
|
|
45
47
|
related:
|
|
46
48
|
- features/memory-files/today
|
|
47
49
|
- features/memory-files/user-profile
|
|
@@ -53,15 +55,23 @@ ui_anchors:
|
|
|
53
55
|
- /knowledge
|
|
54
56
|
- /connections/knowledge
|
|
55
57
|
context_files:
|
|
56
|
-
- today.md
|
|
57
|
-
-
|
|
58
|
-
- roadmap.md
|
|
59
|
-
- agent
|
|
60
|
-
- daily/<date>.md
|
|
61
|
-
- projects/<slug>.md
|
|
62
|
-
-
|
|
63
|
-
-
|
|
64
|
-
-
|
|
58
|
+
- state/today.md
|
|
59
|
+
- identity/profile.md
|
|
60
|
+
- plans/roadmap.md
|
|
61
|
+
- journal/agent.md
|
|
62
|
+
- journal/daily/<date>.md
|
|
63
|
+
- plans/projects/<slug>.md
|
|
64
|
+
- policies/management.md
|
|
65
|
+
- policies/management-captures/<slug>.md
|
|
66
|
+
- policies/management-captures/_index.md
|
|
67
|
+
config_keys:
|
|
68
|
+
- dayBoundaryHour
|
|
69
|
+
- dataDir
|
|
70
|
+
api_endpoints:
|
|
71
|
+
- GET /api/context/*
|
|
72
|
+
- PUT /api/context/*
|
|
73
|
+
- PATCH /api/context/*
|
|
74
|
+
- DELETE /api/context/*
|
|
65
75
|
---
|
|
66
76
|
|
|
67
77
|
# Memory Model
|
|
@@ -72,7 +82,11 @@ Aitne treats Markdown files in `~/.personal-agent/context/`
|
|
|
72
82
|
as its long-term memory and SQLite
|
|
73
83
|
(`~/.personal-agent/data/personal_agent.db`) as session-scoped state.
|
|
74
84
|
Anything you want the agent to remember between runs lives in an MD
|
|
75
|
-
file you can read, diff, and edit by hand.
|
|
85
|
+
file you can read, diff, and edit by hand. The vault is partitioned
|
|
86
|
+
into six authority classes — `identity/`, `state/`, `plans/`, `journal/`,
|
|
87
|
+
`knowledge/`, and `policies/` — each carrying its own authority and
|
|
88
|
+
lifecycle contract. See [Knowledge Layout](../reference/knowledge-layout.md)
|
|
89
|
+
for the canonical map.
|
|
76
90
|
|
|
77
91
|
## Why This Concept Exists
|
|
78
92
|
|
|
@@ -98,27 +112,52 @@ indexes, and configuration.
|
|
|
98
112
|
legal write path. The agent does not have direct `Edit` / `Write`
|
|
99
113
|
permissions on the filesystem; it must go through the daemon.
|
|
100
114
|
|
|
115
|
+
## How the Agent Writes
|
|
116
|
+
|
|
117
|
+
The agent has no `Edit` or `Write` tool. To change a context file it
|
|
118
|
+
calls the daemon over HTTP, and every write funnels through one
|
|
119
|
+
endpoint family so the daemon can validate, hold locks, and snapshot a
|
|
120
|
+
backup before touching disk. Paths are class-prefixed
|
|
121
|
+
(`/api/context/<class>/<path>`):
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
# Append a section to today.md
|
|
125
|
+
curl -X PATCH http://localhost:8321/api/context/state/today.md \
|
|
126
|
+
-H 'Content-Type: application/json' \
|
|
127
|
+
-d '{"mode":"append","section":"Notes","content":"Booked the dentist."}'
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
- `PUT /api/context/*` replaces a whole file; `PATCH` does a section op
|
|
131
|
+
(`append`, `replace`, `clear`, `clear_before`, `append_to_file`);
|
|
132
|
+
`DELETE` removes a file (permitted only for custom routines).
|
|
133
|
+
- Legacy bare paths (`/api/context/today.md`) still resolve — the daemon
|
|
134
|
+
rewrites them to the canonical class-prefixed form in process, so a
|
|
135
|
+
plain `curl -X PATCH` without `-L` keeps working — but new writes
|
|
136
|
+
emit the class-prefixed path.
|
|
137
|
+
- `state/today.md` and `plans/roadmap.md` are serialized behind
|
|
138
|
+
dedicated write locks, so two flows can't clobber each other.
|
|
139
|
+
|
|
101
140
|
## Concrete Examples
|
|
102
141
|
|
|
103
|
-
- `today.md` — rewritten by the morning routine.
|
|
104
|
-
- `
|
|
142
|
+
- `state/today.md` — rewritten by the morning routine.
|
|
143
|
+
- `identity/profile.md` — your profile, hand-edited or appended by the
|
|
105
144
|
agent on request. Topic-shaped slices live alongside it
|
|
106
|
-
(`
|
|
107
|
-
`
|
|
145
|
+
(`identity/people.md`, `identity/work.md`, `identity/expertise.md`,
|
|
146
|
+
`identity/personal.md`, `identity/goals.md`). See
|
|
108
147
|
[User Profile](../features/memory-files/user-profile.md).
|
|
109
|
-
- `roadmap.md` — long-running goals + Preparation Timeline rows that
|
|
148
|
+
- `plans/roadmap.md` — long-running goals + Preparation Timeline rows that
|
|
110
149
|
fire daily during the morning routine.
|
|
111
|
-
- `agent
|
|
150
|
+
- `journal/agent.md` — the agent's own running log of decisions,
|
|
112
151
|
retros, and judgement calls.
|
|
113
|
-
- `daily/2026-04-25.md` — per-date archive of that day's plan,
|
|
152
|
+
- `journal/daily/2026-04-25.md` — per-date archive of that day's plan,
|
|
114
153
|
synthesized by the morning routine.
|
|
115
|
-
- `projects/<slug>.md` — one file per active project.
|
|
116
|
-
- `
|
|
154
|
+
- `plans/projects/<slug>.md` — one file per active project.
|
|
155
|
+
- `policies/management.md` — the umbrella registry: Source-of-Truth
|
|
117
156
|
bindings, Managed Tasks, an Active Policies summary. Always
|
|
118
157
|
injected into every flow.
|
|
119
|
-
- `
|
|
158
|
+
- `policies/management-captures/<slug>.md` — one file per durable management rule
|
|
120
159
|
("from now on, do X"). The daemon auto-maintains a slug index at
|
|
121
|
-
`
|
|
160
|
+
`policies/management-captures/_index.md`.
|
|
122
161
|
|
|
123
162
|
## Where You See It in the Dashboard
|
|
124
163
|
|
|
@@ -129,8 +168,9 @@ indexes, and configuration.
|
|
|
129
168
|
|
|
130
169
|
## Related
|
|
131
170
|
|
|
132
|
-
- [
|
|
133
|
-
- [
|
|
134
|
-
- [
|
|
171
|
+
- [Knowledge Layout](../reference/knowledge-layout.md) — canonical map of every vault file
|
|
172
|
+
- [state/today.md](../features/memory-files/today.md)
|
|
173
|
+
- [identity/profile.md](../features/memory-files/user-profile.md)
|
|
174
|
+
- [plans/roadmap.md](../features/memory-files/roadmap.md)
|
|
135
175
|
- [Skills](skills.md) — the per-skill SKILL.md files that tell the
|
|
136
176
|
agent how to read and write each context file.
|
|
@@ -29,7 +29,7 @@ ask_examples:
|
|
|
29
29
|
- Where does the routine pre-pass write observations?
|
|
30
30
|
locale: en-US
|
|
31
31
|
created: 2026-04-25
|
|
32
|
-
updated: 2026-05-
|
|
32
|
+
updated: 2026-05-28
|
|
33
33
|
keywords:
|
|
34
34
|
- observation
|
|
35
35
|
- observations
|
|
@@ -40,11 +40,31 @@ keywords:
|
|
|
40
40
|
- pre-pass
|
|
41
41
|
- AgentWriteTracker
|
|
42
42
|
- contentHash
|
|
43
|
+
- recordObservation
|
|
44
|
+
- observation queue
|
|
45
|
+
- dedupe
|
|
43
46
|
related:
|
|
44
47
|
- features/routines/hourly-check
|
|
45
48
|
- features/routines/morning-routine
|
|
46
49
|
- concepts/process-keys
|
|
47
50
|
- concepts/routines
|
|
51
|
+
- features/integrations/git
|
|
52
|
+
- features/integrations/obsidian
|
|
53
|
+
ui_anchors:
|
|
54
|
+
- /activity
|
|
55
|
+
process_keys:
|
|
56
|
+
- routine.hourly_check
|
|
57
|
+
- routine.fetch_window
|
|
58
|
+
config_keys:
|
|
59
|
+
- hourlyCheckIntervalMinutes
|
|
60
|
+
- hourlyCheckPrePassFreshnessMinutes
|
|
61
|
+
api_endpoints:
|
|
62
|
+
- POST /api/observations
|
|
63
|
+
- GET /api/observations
|
|
64
|
+
- POST /api/observations/consume
|
|
65
|
+
context_files:
|
|
66
|
+
- packages/daemon/src/core/routine-windows.ts
|
|
67
|
+
- packages/daemon/src/api/routes/observations.ts
|
|
48
68
|
---
|
|
49
69
|
|
|
50
70
|
# Observations
|
|
@@ -57,13 +77,15 @@ SQLite. A single `routine.hourly_check` consumes the queue and decides
|
|
|
57
77
|
what is worth surfacing.
|
|
58
78
|
|
|
59
79
|
Since 2026-05, observations have a **second writer**: every main
|
|
60
|
-
routine (
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
80
|
+
routine (`routine.morning_routine`, `routine.today_refresh`,
|
|
81
|
+
`routine.hourly_check`, `routine.evening_review`,
|
|
82
|
+
`routine.weekly_review`) is preceded by a lite-tier
|
|
83
|
+
`routine.fetch_window` pre-pass that fetches mail / calendar / Notion
|
|
84
|
+
windows and POSTs them to `/api/observations`.
|
|
85
|
+
(`routine.monthly_review` has no pre-pass window.) The main routine
|
|
86
|
+
then reads them via the same `pending=true` queue that the polling
|
|
87
|
+
path feeds. Observation rows look identical regardless of which writer
|
|
88
|
+
produced them — the distinction is invisible to downstream consumers.
|
|
67
89
|
|
|
68
90
|
## Why This Concept Exists
|
|
69
91
|
|
|
@@ -75,6 +97,18 @@ up to something the operator should hear about.
|
|
|
75
97
|
|
|
76
98
|
## Definitions
|
|
77
99
|
|
|
100
|
+
**Two writer paths feed one queue.** Observations enter the
|
|
101
|
+
`observations` table from two places, and downstream consumers cannot
|
|
102
|
+
tell them apart:
|
|
103
|
+
|
|
104
|
+
1. **Background pollers** (Obsidian, Git, GitHub, Notion, Calendar,
|
|
105
|
+
Mail) call `recordObservation` when they detect a change.
|
|
106
|
+
2. **The pre-pass** — the lite-tier `routine.fetch_window` session
|
|
107
|
+
spawned ahead of each main routine — POSTs mail / calendar / Notion
|
|
108
|
+
windows to `/api/observations`.
|
|
109
|
+
|
|
110
|
+
Both write rows of the same shape; the consumer reads the merged queue.
|
|
111
|
+
|
|
78
112
|
- **Observation**: one row in the `observations` table.
|
|
79
113
|
- **Actor**: who caused the change. `actor='agent'` rows are filtered
|
|
80
114
|
out by the consumer (anti-loop).
|
|
@@ -88,9 +122,10 @@ up to something the operator should hear about.
|
|
|
88
122
|
session spawned by each main routine's dispatcher. Fetches a
|
|
89
123
|
per-routine window (`ROUTINE_WINDOWS` in
|
|
90
124
|
`packages/daemon/src/core/routine-windows.ts`) for each enabled
|
|
91
|
-
mail / calendar / Notion integration and POSTs
|
|
92
|
-
server computes `contentHash` from
|
|
93
|
-
unchanged item written twice in the same
|
|
125
|
+
mail / calendar / Notion integration and POSTs the results to
|
|
126
|
+
`/api/observations`. The server computes `contentHash` from
|
|
127
|
+
`(source, payload)`, so an unchanged item written twice in the same
|
|
128
|
+
cadence dedupes to a 409.
|
|
94
129
|
|
|
95
130
|
## Concrete Examples
|
|
96
131
|
|
|
@@ -106,5 +141,8 @@ up to something the operator should hear about.
|
|
|
106
141
|
## Related
|
|
107
142
|
|
|
108
143
|
- [Hourly Check](../features/routines/hourly-check.md)
|
|
144
|
+
- [Morning Routine](../features/routines/morning-routine.md)
|
|
145
|
+
- [Process Keys](./process-keys.md)
|
|
146
|
+
- [Routines](./routines.md)
|
|
109
147
|
- [Git](../features/integrations/git.md)
|
|
110
148
|
- [Obsidian](../features/integrations/obsidian.md)
|
|
@@ -26,14 +26,17 @@ ask_examples:
|
|
|
26
26
|
- What is the difference between configurable and fixed ProcessKeys?
|
|
27
27
|
locale: en-US
|
|
28
28
|
created: 2026-04-25
|
|
29
|
-
updated: 2026-05-
|
|
29
|
+
updated: 2026-05-28
|
|
30
30
|
keywords:
|
|
31
31
|
- process key
|
|
32
32
|
- ProcessKey
|
|
33
33
|
- dispatch
|
|
34
34
|
- routing
|
|
35
|
+
- tier
|
|
35
36
|
- CONFIGURABLE_PROCESS_KEYS
|
|
36
37
|
- DEFAULT_PROCESS_TIERS
|
|
38
|
+
- REACTIVE_PROCESS_KEYS
|
|
39
|
+
- TIER_LOCKED_PROCESS_KEYS
|
|
37
40
|
- PROCESS_TO_EVENT_TYPE
|
|
38
41
|
- routine.morning_routine
|
|
39
42
|
- message.dm
|
|
@@ -42,6 +45,25 @@ related:
|
|
|
42
45
|
- concepts/backends-and-tiers
|
|
43
46
|
- concepts/skills
|
|
44
47
|
- reference/process-keys
|
|
48
|
+
- features/operations/backend-routing
|
|
49
|
+
process_keys:
|
|
50
|
+
- routine.morning_routine
|
|
51
|
+
- routine.morning_routine_today
|
|
52
|
+
- routine.morning_routine_journal
|
|
53
|
+
- routine.evening_review
|
|
54
|
+
- routine.hourly_check
|
|
55
|
+
- routine.fetch_window
|
|
56
|
+
- routine.hourly_check.triage
|
|
57
|
+
- message.dm
|
|
58
|
+
- message.mention
|
|
59
|
+
- dashboard.chat
|
|
60
|
+
- dashboard.docs_qa
|
|
61
|
+
- agent.task
|
|
62
|
+
- agent.dm_task
|
|
63
|
+
- delegated_task
|
|
64
|
+
- delegated_task_heavy
|
|
65
|
+
ui_anchors:
|
|
66
|
+
- /settings/models
|
|
45
67
|
---
|
|
46
68
|
|
|
47
69
|
# ProcessKeys
|
|
@@ -64,37 +86,49 @@ those subsystems.
|
|
|
64
86
|
## Definitions
|
|
65
87
|
|
|
66
88
|
- **CONFIGURABLE_PROCESS_KEYS**: the set the operator can override per
|
|
67
|
-
backend on `/settings/models`.
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
- **
|
|
71
|
-
`
|
|
89
|
+
backend on `/settings/models`. The rest (`delegated_task`, `setup`,
|
|
90
|
+
`schedule.approaching`, …) use fixed defaults and are not surfaced
|
|
91
|
+
there.
|
|
92
|
+
- **REACTIVE_PROCESS_KEYS**: those tied to in-the-loop events
|
|
93
|
+
(`message.dm`, `message.mention`, `dashboard.chat`,
|
|
94
|
+
`dashboard.docs_qa`, `setup`, `knowledge.import`). Everything else is
|
|
95
|
+
autonomous.
|
|
96
|
+
- **DEFAULT_PROCESS_TIERS**: the per-key default model size — `lite`
|
|
97
|
+
(Haiku-class), `medium` (Sonnet-class), or `high` (Opus-class).
|
|
98
|
+
Unknown keys (including `routine.custom.<slug>`) default to `medium`.
|
|
99
|
+
- **TIER_LOCKED_PROCESS_KEYS**: keys whose tier is hard-locked and
|
|
100
|
+
cannot be overridden by an operator pin. Today this is just
|
|
101
|
+
`dashboard.docs_qa`, locked to `medium`.
|
|
72
102
|
- **PROCESS_TO_EVENT_TYPE**: maps a ProcessKey to the skill manifest
|
|
73
|
-
key.
|
|
103
|
+
key, so the skills compiler can pick the right tool set.
|
|
74
104
|
|
|
75
105
|
## Concrete Examples
|
|
76
106
|
|
|
77
|
-
- Routines
|
|
78
|
-
pre-routine gate
|
|
79
|
-
`routine.morning_routine_today`
|
|
107
|
+
- **Routines:** `routine.morning_routine` is the parent envelope read by
|
|
108
|
+
the pre-routine gate; the actual work runs as two parallel split keys
|
|
109
|
+
— `routine.morning_routine_today` (Stage A, today.md, medium) and
|
|
110
|
+
`routine.morning_routine_journal` (Stage B, daily journal, lite). Also
|
|
80
111
|
`routine.evening_review`, `routine.weekly_review`,
|
|
81
|
-
`routine.hourly_check`,
|
|
82
|
-
`routine.
|
|
83
|
-
`routine.
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
- Routine sub-jobs (lite tier, dispatcher-spawned, not user-facing):
|
|
112
|
+
`routine.hourly_check`, `routine.roadmap_refresh`,
|
|
113
|
+
`routine.today_refresh`, `routine.user_profile_sweep`.
|
|
114
|
+
`routine.morning_routine_initial` was retired (2026-05-16) — the
|
|
115
|
+
first-run branch now routes through `routine.morning_routine`.
|
|
116
|
+
- **Routine sub-jobs** (lite tier, dispatcher-spawned, not user-facing):
|
|
87
117
|
`routine.fetch_window` (pre-pass mail/calendar/Notion fetcher that
|
|
88
118
|
runs before each main routine and POSTs observations) and
|
|
89
119
|
`routine.hourly_check.triage` (Stage 2 escalate-vs-log-only gate
|
|
90
120
|
inside the hourly check).
|
|
91
|
-
- Custom routines
|
|
92
|
-
|
|
93
|
-
-
|
|
94
|
-
-
|
|
121
|
+
- **Custom routines:** `routine.custom.<slug>` (kebab-case slug;
|
|
122
|
+
defaults to medium tier).
|
|
123
|
+
- **Messaging:** `message.dm`, `message.mention`
|
|
124
|
+
- **Dashboard:** `dashboard.chat`, `dashboard.docs_qa`
|
|
125
|
+
- **Scheduled / external:** `agent.task` (recurring schedules),
|
|
95
126
|
`agent.dm_task` (DM-tone scheduled briefings),
|
|
96
|
-
`schedule.approaching`, `calendar.change`, `gmail_classify`,
|
|
97
|
-
|
|
127
|
+
`schedule.approaching`, `calendar.change`, `gmail_classify`, `setup`
|
|
128
|
+
- **Delegated work:** `delegated_task` (lite) and `delegated_task_heavy`
|
|
129
|
+
— the only high-tier key, opt-in via the `delegatedTaskHeavyEnabled`
|
|
130
|
+
config flag. No install-time surface defaults to `high`; operators
|
|
131
|
+
pin high per-row on `/settings/models`.
|
|
98
132
|
|
|
99
133
|
## Where You See It in the Dashboard
|
|
100
134
|
|
|
@@ -30,7 +30,7 @@ ask_examples:
|
|
|
30
30
|
- Which routine uses the high tier by default?
|
|
31
31
|
locale: en-US
|
|
32
32
|
created: 2026-04-25
|
|
33
|
-
updated: 2026-05-
|
|
33
|
+
updated: 2026-05-28
|
|
34
34
|
keywords:
|
|
35
35
|
- routine
|
|
36
36
|
- routines
|
|
@@ -52,6 +52,25 @@ related:
|
|
|
52
52
|
ui_anchors:
|
|
53
53
|
- /connections/routines
|
|
54
54
|
- /settings/routines
|
|
55
|
+
process_keys:
|
|
56
|
+
- routine.morning_routine
|
|
57
|
+
- routine.morning_routine_today
|
|
58
|
+
- routine.morning_routine_journal
|
|
59
|
+
- routine.evening_review
|
|
60
|
+
- routine.weekly_review
|
|
61
|
+
- routine.monthly_review
|
|
62
|
+
- routine.hourly_check
|
|
63
|
+
- routine.today_refresh
|
|
64
|
+
- routine.fetch_window
|
|
65
|
+
- routine.hourly_check.triage
|
|
66
|
+
config_keys:
|
|
67
|
+
- dayBoundaryHour
|
|
68
|
+
- hourlyCheckEnabled
|
|
69
|
+
- hourlyCheckIntervalMinutes
|
|
70
|
+
- hourlyCheckActiveStartHour
|
|
71
|
+
- hourlyCheckActiveEndHour
|
|
72
|
+
- hourlyCheckPrePassFreshnessMinutes
|
|
73
|
+
- monthlyReviewEnabled
|
|
55
74
|
---
|
|
56
75
|
|
|
57
76
|
# Routines
|
|
@@ -60,8 +79,9 @@ ui_anchors:
|
|
|
60
79
|
|
|
61
80
|
A routine is a unit of agent work that runs on a schedule, not in
|
|
62
81
|
response to a message. The morning routine fires once per agent day at
|
|
63
|
-
`dayBoundaryHour`; evening
|
|
64
|
-
|
|
82
|
+
`dayBoundaryHour`; the evening review (18:00 daily), weekly review
|
|
83
|
+
(Friday 19:00), and optional monthly review fire on fixed schedules in
|
|
84
|
+
code; the hourly check coalesces accumulated observations on a
|
|
65
85
|
configurable cadence.
|
|
66
86
|
|
|
67
87
|
## Why This Concept Exists
|
|
@@ -82,51 +102,58 @@ DM is who fired the event.
|
|
|
82
102
|
a ProcessKey starting with `routine.`.
|
|
83
103
|
- **Agent day**: the 24-hour window starting at `dayBoundaryHour`
|
|
84
104
|
(default 04:00) — see [Agent Day](agent-day.md).
|
|
85
|
-
- **Catch-up**: if the daemon was offline at the trigger time,
|
|
86
|
-
|
|
87
|
-
the
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
105
|
+
- **Catch-up**: if the daemon was offline at the trigger time, a
|
|
106
|
+
boot-time check re-fires any routine whose window has already
|
|
107
|
+
opened but never ran (morning routine within the agent day; evening
|
|
108
|
+
review once it is past 18:00; weekly review across Fri–Sun). It never
|
|
109
|
+
double-fires a routine that already succeeded.
|
|
110
|
+
- **Tier policy**: **no routine runs the high tier by default.** Every
|
|
111
|
+
recurring routine — morning, evening, weekly, hourly check —
|
|
112
|
+
defaults to **medium** (Sonnet on Claude). The **lite** (Haiku) tier
|
|
113
|
+
is reserved for the morning routine's Stage B and for mechanical
|
|
114
|
+
sub-jobs (the hourly-check triage gate and the pre-pass fetcher). The
|
|
115
|
+
only high-tier ProcessKey in the whole system is `delegated_task_heavy`,
|
|
116
|
+
which is opt-in and not a routine. See
|
|
117
|
+
[Backends and Tiers](backends-and-tiers.md).
|
|
118
|
+
- **Two-stage morning routine**: the morning routine runs as a parent
|
|
119
|
+
envelope `routine.morning_routine` (medium) that fans out two stages
|
|
120
|
+
in parallel — Stage A `routine.morning_routine_today` (medium, builds
|
|
121
|
+
`state/today.md`) and Stage B `routine.morning_routine_journal` (lite,
|
|
122
|
+
authors the previous day's journal). The legacy heavy-tier
|
|
123
|
+
`routine.morning_routine_initial` first-run branch was retired in
|
|
124
|
+
Phase 7 (2026-05-16); a first run is now detected inline from a
|
|
125
|
+
missing `state/yesterday.md` and handled by the same medium-tier
|
|
126
|
+
parent with a daemon-prepared `<roadmap_skeleton>` block.
|
|
102
127
|
- **Pre-pass fetcher**: each main routine that needs fresh mail /
|
|
103
128
|
calendar / Notion data is preceded by a lite-tier
|
|
104
129
|
`routine.fetch_window` session that fetches the relevant window and
|
|
105
|
-
POSTs observations. The main routine consumes the resulting
|
|
106
|
-
`<fetch_report>` block plus pending observations instead of
|
|
107
|
-
|
|
108
|
-
introduced in 2026-05.
|
|
130
|
+
POSTs observations. The main routine then consumes the resulting
|
|
131
|
+
`<fetch_report>` block plus pending observations instead of hitting
|
|
132
|
+
upstream APIs itself — a cost-savings split introduced in 2026-05.
|
|
109
133
|
|
|
110
134
|
## Concrete Examples
|
|
111
135
|
|
|
112
136
|
| ProcessKey | When | Tier |
|
|
113
137
|
|---|---|---|
|
|
114
|
-
| `routine.morning_routine` | `dayBoundaryHour` daily (parent envelope; first-run branch detected inline from missing `yesterday.md`) | medium |
|
|
138
|
+
| `routine.morning_routine` | `dayBoundaryHour` daily (parent envelope; first-run branch detected inline from missing `state/yesterday.md`) | medium |
|
|
115
139
|
| `routine.morning_routine_today` | Stage A of every morning routine (today.md synthesis + roadmap maintenance + schedule fan-out) | medium |
|
|
116
|
-
| `routine.morning_routine_journal` | Stage B of every morning routine (daily/<yesterday>.md authoring) | lite |
|
|
117
|
-
| `routine.today_refresh` | Every 4h inside the active window | medium |
|
|
140
|
+
| `routine.morning_routine_journal` | Stage B of every morning routine (`journal/daily/<yesterday>.md` authoring) | lite |
|
|
118
141
|
| `routine.evening_review` | 18:00 daily (fixed) | medium |
|
|
142
|
+
| `routine.weekly_review` | Friday 19:00 (fixed, one hour after evening review) | medium |
|
|
143
|
+
| `routine.monthly_review` | Last day of month at 18:00, **default off** (`monthlyReviewEnabled`) | medium |
|
|
119
144
|
| `routine.hourly_check` | Every `hourlyCheckIntervalMinutes` (default 60) inside the active window | medium |
|
|
120
|
-
| `routine.
|
|
121
|
-
| `routine.fetch_window` | Spawned before each routine above | lite |
|
|
145
|
+
| `routine.today_refresh` | On calendar drift or a dashboard "refresh today" request (not a fixed cron) | medium |
|
|
146
|
+
| `routine.fetch_window` | Spawned before each routine above that needs fresh upstream data | lite |
|
|
122
147
|
| `routine.hourly_check.triage` | Stage 2 gate of every hourly check | lite |
|
|
123
|
-
| `routine.custom.<slug>` | Operator-defined recurrence |
|
|
148
|
+
| `routine.custom.<slug>` | Operator-defined recurrence | medium (override per routine via `backend_tier`) |
|
|
124
149
|
|
|
125
150
|
## Where You See It in the Dashboard
|
|
126
151
|
|
|
127
|
-
- **Settings → Routines** is where the hourly check active window
|
|
128
|
-
|
|
129
|
-
|
|
152
|
+
- **Settings → Routines** is where the hourly check active window
|
|
153
|
+
(`hourlyCheckActiveStartHour` / `hourlyCheckActiveEndHour`), the
|
|
154
|
+
hourly check cadence (`hourlyCheckIntervalMinutes`), and any custom
|
|
155
|
+
routines live. Morning, evening, weekly, and monthly fire times are
|
|
156
|
+
fixed in code and not surfaced here.
|
|
130
157
|
- **Connections → Routines** is the unified view of next-fire times.
|
|
131
158
|
- **Activity** logs each routine run with its outcome.
|
|
132
159
|
|
|
@@ -19,7 +19,8 @@ section: safety
|
|
|
19
19
|
tags:
|
|
20
20
|
- core
|
|
21
21
|
- safety
|
|
22
|
-
-
|
|
22
|
+
- operations
|
|
23
|
+
- backends
|
|
23
24
|
status: stable
|
|
24
25
|
ask_examples:
|
|
25
26
|
- What is the difference between Safe and Allow mode?
|
|
@@ -27,7 +28,7 @@ ask_examples:
|
|
|
27
28
|
- How do I see what tools the agent is allowed to use?
|
|
28
29
|
locale: en-US
|
|
29
30
|
created: 2026-04-25
|
|
30
|
-
updated: 2026-
|
|
31
|
+
updated: 2026-05-28
|
|
31
32
|
keywords:
|
|
32
33
|
- safety
|
|
33
34
|
- safe mode
|
|
@@ -35,18 +36,23 @@ keywords:
|
|
|
35
36
|
- absolute block
|
|
36
37
|
- disallowed tools
|
|
37
38
|
- approval
|
|
39
|
+
- execution mode
|
|
40
|
+
- risk tier
|
|
38
41
|
related:
|
|
42
|
+
- concepts/safety-model
|
|
39
43
|
- concepts/skills
|
|
40
44
|
- features/operations/approvals
|
|
41
45
|
- reference/disallowed-tools
|
|
42
46
|
ui_anchors:
|
|
43
47
|
- /settings/advanced
|
|
48
|
+
- /settings/models
|
|
44
49
|
config_keys:
|
|
45
50
|
- disallowedTools
|
|
46
51
|
- allowedToolsOverride
|
|
47
52
|
- claudeExecutionPermissionMode
|
|
48
53
|
- codexExecutionPermissionMode
|
|
49
54
|
- geminiExecutionPermissionMode
|
|
55
|
+
- opencodeExecutionPermissionMode
|
|
50
56
|
---
|
|
51
57
|
|
|
52
58
|
# Safety and Execution Modes
|
|
@@ -57,10 +63,13 @@ Three layers gate what the agent can do:
|
|
|
57
63
|
|
|
58
64
|
1. **Skill `allowed-tools`** — the visible toolset for that session.
|
|
59
65
|
2. **Execution mode** — Safe (strict permission checks, sandboxes)
|
|
60
|
-
or Allow (SDK bypass, sandbox off).
|
|
61
|
-
3. **Always-disallowed** — a hard floor. Recursive deletes, sudo
|
|
66
|
+
or Allow (SDK bypass, sandbox off). Set per-backend.
|
|
67
|
+
3. **Always-disallowed** — a hard floor. Recursive deletes, `sudo`,
|
|
62
68
|
secret-file reads / writes are denied unconditionally regardless
|
|
63
|
-
of mode.
|
|
69
|
+
of mode, and neither a skill nor Allow mode can widen past it.
|
|
70
|
+
|
|
71
|
+
A fourth idea — the **risk tier** — sits on top of the daemon API and
|
|
72
|
+
decides whether a *write* runs on its own or waits for your approval.
|
|
64
73
|
|
|
65
74
|
## Why This Concept Exists
|
|
66
75
|
|
|
@@ -72,37 +81,57 @@ disallowed-tools floor.
|
|
|
72
81
|
|
|
73
82
|
## Definitions
|
|
74
83
|
|
|
75
|
-
- **Safe mode**: the default. Strict permission checks,
|
|
76
|
-
|
|
84
|
+
- **Safe mode**: the default. Strict permission checks, plus a
|
|
85
|
+
backend-specific enforcement layer — Claude curl/jq hooks, the Codex
|
|
86
|
+
workspace-write sandbox, the Gemini whitelist TOML, and the OpenCode
|
|
87
|
+
permission block.
|
|
77
88
|
- **Allow mode**: the looser posture. SDK bypass, sandbox off, minimal
|
|
78
|
-
TOML. The absolute-block layer still holds
|
|
89
|
+
TOML. The absolute-block layer still holds in Allow mode, so the
|
|
90
|
+
destructive-ops floor never opens. Set independently per backend, so
|
|
91
|
+
one backend can run Allow while the others stay Safe.
|
|
79
92
|
- **Absolute block**: the unconditional layer. `ALWAYS_DISALLOWED_TOOLS`
|
|
80
93
|
in `src/safety/always-disallowed.ts`. Cannot be widened by skills,
|
|
81
94
|
by config, or by allow-mode.
|
|
82
|
-
- **Risk tier**:
|
|
83
|
-
|
|
84
|
-
|
|
95
|
+
- **Risk tier**: every daemon-API operation carries one of three tiers —
|
|
96
|
+
`autonomous`, `read_sensitive`, or `approve`. *Autonomous* runs without a
|
|
97
|
+
prompt. *Read-sensitive* reads (email, calendar, notes, context files) are
|
|
98
|
+
the same blast radius as autonomous but are gated by a read token when
|
|
99
|
+
`enforceReadToken` is on. *Approve* is blocked until you confirm with a
|
|
100
|
+
bearer token (the dashboard does this when you click Approve). There is no
|
|
101
|
+
separate "notify" tier — that behaviour now lives in the skill prompts: for
|
|
102
|
+
potentially destructive actions the agent DMs you first, then proceeds. See
|
|
103
|
+
[Safety model](safety-model.md) for the full taxonomy.
|
|
85
104
|
|
|
86
105
|
## Concrete Examples
|
|
87
106
|
|
|
88
|
-
|
|
107
|
+
The daemon API is the agent's only write path, so most of its own writes are
|
|
108
|
+
`autonomous` (the memory chokepoint validates and snapshots them). The
|
|
109
|
+
absolute-block layer and Approve tier are where the agent is actually stopped.
|
|
110
|
+
|
|
111
|
+
| Action | What gates it |
|
|
89
112
|
|---|---|
|
|
90
|
-
| Read `today.md` | read |
|
|
91
|
-
| Append to `agent
|
|
92
|
-
|
|
|
93
|
-
|
|
|
94
|
-
|
|
|
95
|
-
| `chmod` on a daemon-owned file |
|
|
113
|
+
| Read `state/today.md` | `read_sensitive` (read token if `enforceReadToken`) |
|
|
114
|
+
| Append to `journal/agent.md` | `autonomous` — daemon API write |
|
|
115
|
+
| Update `plans/roadmap.md` | `autonomous`, plus a roadmap write-lock |
|
|
116
|
+
| Send a DM | `autonomous`; destructive follow-ups DM you first |
|
|
117
|
+
| Configure an automation trigger | `approve` — needs a bearer token |
|
|
118
|
+
| `chmod` on a daemon-owned file | Safe-mode disallowed (allowed in Allow mode) |
|
|
119
|
+
| Recursive delete (`rm -rf`), `sudo`, secret-file read | absolute-block (refused in both modes) |
|
|
96
120
|
|
|
97
121
|
## Where You See It in the Dashboard
|
|
98
122
|
|
|
99
|
-
- **Settings → Advanced** holds `disallowedTools
|
|
100
|
-
|
|
101
|
-
- **
|
|
123
|
+
- **Settings → Advanced** holds the `disallowedTools` and
|
|
124
|
+
`allowedToolsOverride` tool-policy lists.
|
|
125
|
+
- **Settings → Models & Cost** holds the per-backend Safe / Allow
|
|
126
|
+
**Execution Mode** switch (you can also set it in the setup wizard).
|
|
127
|
+
- **Activity** logs every absolute-blocked tool call as
|
|
128
|
+
`action_type='blocked_absolute'`.
|
|
102
129
|
- **Approvals** is where Approve-tier actions queue when they fire.
|
|
103
130
|
|
|
104
131
|
## Related
|
|
105
132
|
|
|
133
|
+
- [Safety model](safety-model.md) — the full risk-tier taxonomy and where
|
|
134
|
+
each API endpoint is classified.
|
|
106
135
|
- [Skills](skills.md) — where each session's per-task `allowed-tools` lives.
|
|
107
136
|
- [Approvals](../features/operations/approvals.md) — the operator-side
|
|
108
137
|
surface for Approve-tier actions.
|