@aitne-sh/aitne 0.1.9 → 0.1.11
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 +41 -11
- package/agent-assets/agent-profiles/background-task.md +53 -0
- package/agent-assets/agent-profiles/conversational.md +1 -0
- package/agent-assets/agent-profiles/routine-fetch-window.md +14 -75
- package/agent-assets/agent-profiles/routine.md +1 -1
- package/agent-assets/agents/{hourly-check → activity-scan}/agent.md +22 -17
- package/agent-assets/agents/monthly-review/agent.md +6 -5
- package/agent-assets/docs/concepts/agent-day.md +6 -7
- package/agent-assets/docs/concepts/auth-health.md +23 -20
- package/agent-assets/docs/concepts/backends-and-tiers.md +13 -9
- package/agent-assets/docs/concepts/costs-and-quotas.md +14 -12
- package/agent-assets/docs/concepts/delegated-mode.md +18 -17
- package/agent-assets/docs/concepts/memory-model.md +16 -9
- package/agent-assets/docs/concepts/observations.md +24 -20
- package/agent-assets/docs/concepts/process-keys.md +10 -9
- package/agent-assets/docs/concepts/routines.md +34 -31
- package/agent-assets/docs/concepts/safety-and-execution.md +11 -7
- package/agent-assets/docs/concepts/safety-model.md +39 -25
- package/agent-assets/docs/concepts/skills.md +12 -10
- package/agent-assets/docs/features/integrations/browser-history.md +23 -18
- package/agent-assets/docs/features/integrations/calendar.md +28 -17
- package/agent-assets/docs/features/integrations/git.md +13 -11
- package/agent-assets/docs/features/integrations/github.md +22 -14
- package/agent-assets/docs/features/integrations/mail.md +25 -22
- package/agent-assets/docs/features/integrations/notion.md +35 -11
- package/agent-assets/docs/features/integrations/obsidian.md +8 -8
- package/agent-assets/docs/features/lifestyle/git.md +27 -23
- package/agent-assets/docs/features/lifestyle/reading.md +20 -11
- package/agent-assets/docs/features/lifestyle/receipts.md +11 -10
- package/agent-assets/docs/features/lifestyle/travel-bookings.md +4 -3
- package/agent-assets/docs/features/memory-files/agent-journal.md +53 -26
- package/agent-assets/docs/features/memory-files/agent-lessons.md +178 -0
- package/agent-assets/docs/features/memory-files/projects.md +11 -8
- package/agent-assets/docs/features/memory-files/roadmap.md +17 -14
- package/agent-assets/docs/features/memory-files/schedule.md +6 -3
- package/agent-assets/docs/features/memory-files/today.md +10 -7
- package/agent-assets/docs/features/memory-files/user-profile.md +14 -9
- package/agent-assets/docs/features/messaging/bang-commands.md +21 -6
- package/agent-assets/docs/features/messaging/overview.md +17 -14
- package/agent-assets/docs/features/messaging/telegram.md +10 -9
- package/agent-assets/docs/features/operations/activity-and-conversations.md +6 -5
- package/agent-assets/docs/features/operations/approvals.md +6 -5
- package/agent-assets/docs/features/operations/browser-tasks.md +184 -0
- package/agent-assets/docs/features/operations/cost-tracking.md +11 -1
- package/agent-assets/docs/features/operations/managed-chromium.md +4 -2
- package/agent-assets/docs/features/operations/notifications.md +11 -1
- package/agent-assets/docs/features/operations/quiet-hours.md +41 -11
- package/agent-assets/docs/features/operations/schedule-approaching.md +2 -2
- package/agent-assets/docs/features/routines/activity-scan.md +220 -0
- package/agent-assets/docs/features/routines/custom-routines.md +82 -134
- package/agent-assets/docs/features/routines/evening-review.md +23 -13
- package/agent-assets/docs/features/routines/morning-routine.md +7 -5
- package/agent-assets/docs/features/routines/weekly-review.md +24 -3
- package/agent-assets/docs/features/wiki/commands.md +4 -4
- package/agent-assets/docs/features/wiki/cost-and-approval.md +4 -3
- package/agent-assets/docs/features/wiki/dashboard.md +7 -6
- package/agent-assets/docs/features/wiki/overview.md +3 -3
- package/agent-assets/docs/features/wiki/search.md +5 -5
- package/agent-assets/docs/features/wiki/workspaces.md +2 -2
- package/agent-assets/docs/getting-started/01-what-is-this.md +3 -3
- package/agent-assets/docs/getting-started/02-first-steps.md +5 -3
- package/agent-assets/docs/getting-started/04-first-day.md +27 -30
- package/agent-assets/docs/glossary.md +8 -8
- package/agent-assets/docs/guides/add-a-custom-routine.md +122 -68
- package/agent-assets/docs/guides/budget-and-cost-for-wiki.md +2 -2
- package/agent-assets/docs/guides/connect-a-new-mail-account.md +4 -2
- package/agent-assets/docs/guides/explore-with-trace-and-connect.md +5 -4
- package/agent-assets/docs/guides/install-and-run.md +2 -2
- package/agent-assets/docs/guides/maintain-wiki-health.md +2 -2
- package/agent-assets/docs/guides/pause-the-agent.md +27 -21
- package/agent-assets/docs/guides/reinstall-cleanly.md +2 -0
- package/agent-assets/docs/guides/setup-wizard.md +12 -6
- package/agent-assets/docs/guides/use-an-existing-obsidian-vault.md +6 -6
- package/agent-assets/docs/reference/api.md +26 -5
- package/agent-assets/docs/reference/cli-commands.md +3 -3
- package/agent-assets/docs/reference/config.md +51 -24
- package/agent-assets/docs/reference/disallowed-tools.md +6 -4
- package/agent-assets/docs/reference/keyboard-shortcuts.md +2 -2
- package/agent-assets/docs/reference/knowledge-layout.md +25 -12
- package/agent-assets/docs/reference/process-keys.md +9 -9
- package/agent-assets/docs/reference/skills.md +10 -6
- package/agent-assets/docs/troubleshooting/auth-failed.md +9 -8
- package/agent-assets/docs/troubleshooting/dashboard-shows-degraded.md +16 -9
- package/agent-assets/docs/troubleshooting/messaging-not-pairing.md +2 -2
- package/agent-assets/docs/troubleshooting/morning-routine-didnt-run.md +32 -16
- package/agent-assets/docs/troubleshooting/observation-not-detected.md +26 -24
- package/agent-assets/docs/troubleshooting/quota-exhausted.md +7 -6
- package/agent-assets/docs/troubleshooting/wiki-write-failed.md +3 -3
- package/agent-assets/skills/agent-actions/SKILL.md +23 -39
- package/agent-assets/skills/agent-create/SKILL.md +26 -6
- package/agent-assets/skills/attach/SKILL.md +8 -27
- package/agent-assets/skills/background-task/SKILL.md +184 -0
- package/agent-assets/skills/background-task-reply/SKILL.md +100 -0
- package/agent-assets/skills/browser-history/SKILL.md +60 -29
- package/agent-assets/skills/browser-history-respond/SKILL.md +6 -1
- package/agent-assets/skills/browser-task/SKILL.md +33 -31
- package/agent-assets/skills/context/SKILL.md +26 -34
- package/agent-assets/skills/context/curation.json +12 -12
- package/agent-assets/skills/context/references/api.md +22 -20
- package/agent-assets/skills/context/references/required-frontmatter.md +10 -9
- package/agent-assets/skills/context/references/snapshot-files.md +16 -15
- package/agent-assets/skills/context/seeds/file-responsibilities.seed.json +5 -5
- package/agent-assets/skills/context/seeds/frontmatter-requirements.seed.json +3 -3
- package/agent-assets/skills/docs-search/SKILL.md +19 -31
- package/agent-assets/skills/external-services/SKILL.delegated.claude.md +8 -95
- package/agent-assets/skills/external-services/SKILL.delegated.codex.md +8 -94
- package/agent-assets/skills/external-services/SKILL.delegated.gemini.md +8 -94
- package/agent-assets/skills/external-services/SKILL.native.claude.md +15 -9
- package/agent-assets/skills/external-services/SKILL.native.codex.md +11 -5
- package/agent-assets/skills/external-services/SKILL.native.gemini.md +11 -5
- package/agent-assets/skills/external-services/references/exec-errors.md +32 -0
- package/agent-assets/skills/external-services/references/skills-crud.md +5 -5
- package/agent-assets/skills/gmail-lifestyle/SKILL.md +3 -2
- package/agent-assets/skills/gmail-lifestyle/references/receipts-api.md +4 -0
- package/agent-assets/skills/gmail-lifestyle/references/travel-bookings-api.md +9 -0
- package/agent-assets/skills/mail/SKILL.delegated.claude.md +13 -25
- package/agent-assets/skills/mail/SKILL.delegated.codex.md +3 -2
- package/agent-assets/skills/mail/SKILL.delegated.gemini.md +3 -2
- package/agent-assets/skills/mail/SKILL.md +12 -20
- package/agent-assets/skills/mail/SKILL.native.claude.md +24 -16
- package/agent-assets/skills/mail/SKILL.native.codex.md +16 -9
- package/agent-assets/skills/mail/SKILL.native.gemini.md +12 -6
- package/agent-assets/skills/mail/references/api.md +6 -1
- package/agent-assets/skills/mail/references/examples.md +2 -1
- package/agent-assets/skills/managed-tasks/SKILL.md +44 -77
- package/agent-assets/skills/managed-tasks/references/errors.md +25 -14
- package/agent-assets/skills/managed-tasks/references/output-path.md +33 -17
- package/agent-assets/skills/managed-tasks/references/recurrence-rule.md +26 -16
- package/agent-assets/skills/management-policy/SKILL.md +36 -28
- package/agent-assets/skills/management-policy/curation.json +1 -1
- package/agent-assets/skills/management-policy/references/policy-workflow.md +30 -18
- package/agent-assets/skills/notify/SKILL.md +16 -13
- package/agent-assets/skills/notify/references/priority.md +42 -26
- 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.md +18 -18
- package/agent-assets/skills/notion/SKILL.native.claude.md +4 -4
- package/agent-assets/skills/notion/SKILL.native.codex.md +3 -3
- package/agent-assets/skills/notion/SKILL.native.gemini.md +3 -3
- package/agent-assets/skills/observations/SKILL.md +9 -24
- package/agent-assets/skills/observations/references/fetch-fallback.md +22 -0
- package/agent-assets/skills/project-doc/SKILL.md +9 -6
- package/agent-assets/skills/project-doc/curation.json +3 -3
- package/agent-assets/skills/project-doc/seeds/project-shape.seed.json +2 -2
- package/agent-assets/skills/project-doc/seeds/slug-grammar.seed.json +3 -3
- package/agent-assets/skills/reading/SKILL.md +8 -42
- package/agent-assets/skills/reading/references/reading-taste.md +5 -5
- package/agent-assets/skills/roadmap/SKILL.md +3 -19
- package/agent-assets/skills/roadmap/references/api.md +23 -8
- package/agent-assets/skills/roadmap/references/horizon-tags.md +11 -0
- package/agent-assets/skills/roadmap/references/migration.md +8 -6
- package/agent-assets/skills/roadmap/references/retention.md +18 -0
- package/agent-assets/skills/schedule/SKILL.md +20 -28
- package/agent-assets/skills/schedule/references/importance.md +23 -0
- package/agent-assets/skills/schedule/references/recurrence-rule.md +26 -16
- package/agent-assets/skills/scheduled-managed-task/SKILL.md +46 -46
- package/agent-assets/skills/today/SKILL.md +38 -81
- package/agent-assets/skills/today/references/agent-plan-lifecycle.md +9 -4
- package/agent-assets/skills/today/references/agent-plan-revision.md +28 -0
- package/agent-assets/skills/today/references/today-skeleton.md +66 -0
- package/agent-assets/skills/today/seeds/agent-notes-flavors.seed.json +1 -1
- package/agent-assets/skills/today/seeds/section-shape.seed.json +6 -6
- package/agent-assets/skills/user-interview/SKILL.md +15 -90
- package/agent-assets/skills/user-interview/references/op-briefing.md +1 -1
- package/agent-assets/skills/user-interview/references/op-dm-handler.md +88 -0
- package/agent-assets/skills/user-interview/references/op-morning.md +2 -2
- package/agent-assets/skills/user-interview/references/sweep-and-fallback.md +1 -1
- package/agent-assets/skills/user-profile/SKILL.md +16 -26
- package/agent-assets/skills/user-profile/curation.json +3 -3
- package/agent-assets/skills/user-profile/references/character-preferences.md +3 -3
- package/agent-assets/skills/wiki/wiki-ask/SKILL.md +1 -1
- package/agent-assets/skills/wiki/wiki-compile/SKILL.md +5 -4
- package/agent-assets/skills/wiki/wiki-connect/SKILL.md +32 -5
- package/agent-assets/skills/wiki/wiki-ingest/SKILL.md +6 -50
- package/agent-assets/skills/wiki/wiki-ingest/references/curl-errors.md +58 -0
- package/agent-assets/skills/wiki/wiki-lint/SKILL.md +20 -14
- package/agent-assets/skills/wiki/wiki-trace/SKILL.md +10 -5
- package/agent-assets/skills/wiki/wiki-vault-rules/SKILL.md +2 -0
- package/agent-assets/system-prompts/routine-research-cluster-update.md +71 -0
- package/agent-assets/task-flows/_partials/feedback-capture.md +30 -0
- package/agent-assets/task-flows/_partials/notion-acquire.notion.md +47 -21
- package/agent-assets/task-flows/background_task.md +81 -0
- package/agent-assets/task-flows/git.local_ahead.stale.md +1 -1
- package/agent-assets/task-flows/git.push.detected.md +1 -1
- package/agent-assets/task-flows/git.tag.created.md +1 -1
- 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.security_alert.md +1 -1
- package/agent-assets/task-flows/message.received.dm.md +11 -3
- package/agent-assets/task-flows/message.received.dm_first.md +8 -2
- package/agent-assets/task-flows/{routine.hourly_check.md → routine.activity_scan.md} +31 -23
- package/agent-assets/task-flows/{routine.hourly_check.triage.md → routine.activity_scan.triage.md} +3 -3
- package/agent-assets/task-flows/routine.evening_review.md +80 -0
- package/agent-assets/task-flows/routine.monthly_review.md +81 -8
- package/agent-assets/task-flows/routine.research_cluster_update.md +33 -19
- package/agent-assets/task-flows/routine.roadmap_refresh.md +2 -2
- package/agent-assets/task-flows/routine.today_refresh.md +1 -1
- package/agent-assets/task-flows/routine.weekly_review.md +124 -4
- package/agent-assets/task-flows/schedule.approaching.md +2 -2
- package/agent-assets/task-flows/scheduled.dm.md +77 -1
- package/agent-assets/task-flows/scheduled.task.md +7 -1
- package/agent-assets/task-flows/wiki.trace.md +1 -1
- package/agent-assets/templates/_manifest.json +2 -2
- package/agent-assets/templates/knowledge/dossiers/_index.md +1 -1
- package/agent-assets/templates/knowledge/dossiers/{hourly.md → activity-scan.md} +1 -1
- package/agent-assets/templates/policies/journal-format.md +1 -1
- package/agent-assets/templates/policies/mcp.md +1 -1
- package/agent-assets/templates/policies/routines/_index.md +1 -1
- package/agent-assets/templates/policies/routines/{hourly.md → activity-scan.md} +5 -5
- package/bin/aitne.mjs +45 -11
- package/package.json +6 -5
- package/scripts/commands/doctor.mjs +11 -2
- package/scripts/lib/process-identity.d.mts +46 -0
- package/scripts/lib/process-identity.mjs +193 -0
- package/scripts/lib/read-api-token.mjs +1 -1
- package/scripts/start.mjs +14 -4
- package/agent-assets/docs/features/routines/hourly-check.md +0 -205
|
@@ -12,6 +12,10 @@ Apply the canonical capture-user-info routing below to `<user_input>`.
|
|
|
12
12
|
|
|
13
13
|
{include:_partials/capture-user-info.md}
|
|
14
14
|
|
|
15
|
+
Apply the canonical feedback-capture routing below to `<user_input>`.
|
|
16
|
+
|
|
17
|
+
{include:_partials/feedback-capture.md}
|
|
18
|
+
|
|
15
19
|
### Step 2 — Profile-question reconcile / latent opportunity
|
|
16
20
|
|
|
17
21
|
Two operations from the user-interview skill — run in order, before composing the reply.
|
|
@@ -67,7 +71,7 @@ If the preview clears all three gates, surface 1–2 tasks:
|
|
|
67
71
|
|
|
68
72
|
#### Resolved User Tasks
|
|
69
73
|
|
|
70
|
-
When the user reports completing one of their tasks, mark it `[x]` per the today / context skill. Do NOT
|
|
74
|
+
When the user reports completing one of their tasks, mark it `[x]` per the today / context skill. Do NOT flip Agent Plan rows for execution outcomes — those flip at fire time in `scheduled.task` / `scheduled.dm` handlers. If the user's message invalidates a pending planned action, apply the today skill's "Agent Plan revision — cancel / amend" recipe. Unambiguous match only.
|
|
71
75
|
|
|
72
76
|
#### Agent Plan is private — never surface as task status
|
|
73
77
|
|
|
@@ -76,7 +80,7 @@ Agent Plan rows in <today> are the agent's own pending actions, not user tasks.
|
|
|
76
80
|
- Never frame an Agent Plan row as a user task ("your 9am task", "pending task", "still incomplete", "did-not-fire") — in any language.
|
|
77
81
|
- Never quote the row's HH:MM, its action text, a task ID, or internal labels.
|
|
78
82
|
- If a past-due `[ ]` row's content is a reminder relevant to the current DM, deliver the question as natural prose — no preamble.
|
|
79
|
-
- Delivering a row's content does NOT execute it;
|
|
83
|
+
- Delivering a row's content does NOT execute it; execution-outcome flips happen only at fire time.
|
|
80
84
|
|
|
81
85
|
Bad — exposes the row as a task with internal identifiers:
|
|
82
86
|
|
|
@@ -136,6 +140,8 @@ affirmative.
|
|
|
136
140
|
|
|
137
141
|
Schedules go through this daemon — never through any cloud-hosted scheduled-agent feature your CLI may expose. Cloud routines cannot reach `localhost:8321`, so they cannot deliver via the user's chat platforms or use any integration registered here.
|
|
138
142
|
|
|
143
|
+
**Background task** (a single long-running / open-ended job the user wants done while they keep chatting — deep research, a multi-repo / multi-file audit, "monitor X over time", a bulk compile) → hand it to the detached runner via the `background-task` skill. Resolve scope *this turn*, compose a self-contained brief (objective, inputs, output language, notification policy + concrete `if_significant` criteria), POST, ack in one line, and **end the turn** — never poll; the daemon delivers the result in your voice when it's done. Keep a plausibly-quick lookup inline, but if one you started inline balloons, promote it — fold the work already done into the brief so the worker continues rather than restarting, then POST + ack + end the turn. A recurring cadence is the Scheduling arm above (`agent-create`); an open-ended *browser* job is the `browser-task` skill.
|
|
144
|
+
|
|
139
145
|
**Long-horizon intent** (commitment, trip, deliverable, learning target beyond today) → apply the decision tree below; the `roadmap` skill is the writer. Ambiguous or speculative items belong in `journal/agent.md` as a candidate line for the next morning routine to confirm — do **not** write directly to `plans/roadmap.md` without a clear positive signal.
|
|
140
146
|
|
|
141
147
|
{include:_partials/dm-intent.long-horizon.md}
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
{context}
|
|
2
2
|
|
|
3
|
-
##
|
|
3
|
+
## Activity Scan — Observation Review
|
|
4
4
|
|
|
5
|
-
This task-flow is the **daemon-internal**
|
|
6
|
-
observation review the dispatcher fires every
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
cron `0 * * * *`); those
|
|
10
|
-
instead.
|
|
5
|
+
This task-flow is the **daemon-internal** activity-scan cron — a built-in
|
|
6
|
+
observation review the dispatcher fires every interval (default: every
|
|
7
|
+
2 hours) within active hours. It is NOT the user-facing recurring path.
|
|
8
|
+
An operator who wants a custom recurring task creates a recurring
|
|
9
|
+
**Agent** (`POST /api/agents`, e.g. an hourly cron `0 * * * *`); those
|
|
10
|
+
fire `scheduled.task` / `scheduled.dm` events instead.
|
|
11
11
|
|
|
12
12
|
The "Vault policy files" block appended to this prompt includes
|
|
13
|
-
`policies/routines/
|
|
13
|
+
`policies/routines/activity-scan.md` — your canonical check list for this cadence.
|
|
14
14
|
The "Vault review context" block includes `context-index.md` and
|
|
15
|
-
`knowledge/dossiers/
|
|
15
|
+
`knowledge/dossiers/activity-scan.md`; consult it before Step 1 and update the dossier's
|
|
16
16
|
Open items / Last run before finishing. Writes to `knowledge/dossiers/<flow>.md`
|
|
17
17
|
MUST preserve the existing YAML frontmatter block (`---\ntype: dossier\nowner: agent\nupdated: <date>\n---`); prefer `PATCH` with a
|
|
18
18
|
section target to mutate a single block, and when doing a `PUT` full
|
|
@@ -45,7 +45,7 @@ only want the user-actor surface (e.g. early triage). Follow the
|
|
|
45
45
|
context skill for today.md section formats and the day-type filter
|
|
46
46
|
mapping — this prompt owns the decision workflow only. Most runs should
|
|
47
47
|
do bookkeeping silently; only fire POST /api/notify on the urgency gate
|
|
48
|
-
in Step
|
|
48
|
+
in Step 9 below.
|
|
49
49
|
|
|
50
50
|
### Step 0 — Read pre-pass `<fetch_report>`
|
|
51
51
|
|
|
@@ -108,33 +108,34 @@ observedAt) fall back to the legacy fetch-on-doubt rules in the
|
|
|
108
108
|
observations skill.
|
|
109
109
|
|
|
110
110
|
### Default stance — silence + idempotence
|
|
111
|
-
Most
|
|
111
|
+
Most scan runs are silent bookkeeping: consume observations, update
|
|
112
112
|
today.md, log, done. The baseline assumption for every step below is
|
|
113
113
|
that the user does NOT want another notification and does NOT want a
|
|
114
114
|
new Agent Plan row unless this run has something genuinely new to add.
|
|
115
115
|
The morning routine is authoritative for the day's plan; your job is
|
|
116
|
-
to fold in new signals
|
|
116
|
+
to fold in new signals — adding rows and retiring invalidated ones
|
|
117
|
+
(Step 5) — not to re-plan the day. Two hard rules:
|
|
117
118
|
|
|
118
119
|
- **No duplicate Agent Plan rows / schedules.** Before appending to
|
|
119
120
|
`## Agent Plan` or calling `POST /api/schedule`, run the dedup
|
|
120
121
|
pre-check in Step 4. If a matching row/schedule already exists,
|
|
121
122
|
skip and log — never add a second one.
|
|
122
123
|
- **No duplicate notifications.** Before `POST /api/notify`, run the
|
|
123
|
-
dedup pre-check in Step
|
|
124
|
+
dedup pre-check in Step 9. If the same item was already notified
|
|
124
125
|
earlier today, stay silent and log.
|
|
125
126
|
|
|
126
127
|
When in doubt, stay silent and log to `## Agent Log`.
|
|
127
128
|
|
|
128
|
-
### External services are read-only this
|
|
129
|
+
### External services are read-only during this run
|
|
129
130
|
|
|
130
|
-
This routine reads external state for context — it does not push back. While running this
|
|
131
|
+
This routine reads external state for context — it does not push back. While running this activity scan, do **not**:
|
|
131
132
|
|
|
132
133
|
- Create / update / archive Notion pages or change Notion schema.
|
|
133
134
|
- Send / draft / move / tag mail.
|
|
134
135
|
- Create / update / delete calendar events.
|
|
135
136
|
- Open / merge / comment on GitHub PRs or issues.
|
|
136
137
|
|
|
137
|
-
External-source signals (`mail:*`, `notion:*`, `calendar:*`, `git:*`) reach you through `<observations>`. Consume them, route to `state/today.md` / `projects/*.md` / the `roadmap_candidate` queue per the Decision Framework below, but do **not** act back on the source system. Outbound writes against external services belong in the morning routine, evening review, or DM-reply paths — `routine.
|
|
138
|
+
External-source signals (`mail:*`, `notion:*`, `calendar:*`, `git:*`) reach you through `<observations>`. Consume them, route to `state/today.md` / `projects/*.md` / the `roadmap_candidate` queue per the Decision Framework below, but do **not** act back on the source system. Outbound writes against external services belong in the morning routine, evening review, or DM-reply paths — `routine.activity_scan` is a silent bookkeeping pass.
|
|
138
139
|
|
|
139
140
|
This rule applies regardless of integration mode (direct, same-backend delegated, cross-backend delegated). It is owned by the routine, so a session whose `notion` / `mail` / `external-services` skill body was dropped under same-backend delegation (because the connector covers the surface) still inherits the constraint.
|
|
140
141
|
|
|
@@ -170,15 +171,22 @@ This rule applies regardless of integration mode (direct, same-backend delegated
|
|
|
170
171
|
and schedule entries are always in lock-step (see skill "User Tasks vs
|
|
171
172
|
Agent Plan → The Agent Plan contract").
|
|
172
173
|
- Day-time observation (git push, Notion status change) → append to ## Agent Notes.
|
|
173
|
-
5.
|
|
174
|
-
|
|
174
|
+
5. Retire invalidated rows — the reverse of dedup. When an observation
|
|
175
|
+
kills the premise behind a pending `## Agent Plan` row or schedule
|
|
176
|
+
(calendar event cancelled or moved, user already completed the item,
|
|
177
|
+
source artifact gone), apply the today skill's "Agent Plan revision —
|
|
178
|
+
cancel / amend" recipe: cancel or re-time the schedule, update the
|
|
179
|
+
row, log. Subject AND time must match unambiguously; uncertain →
|
|
180
|
+
leave the row, fire-time guards catch it.
|
|
181
|
+
6. Update projects/*.md when the observation materially changes project
|
|
182
|
+
state. Do NOT write to roadmap.md from the activity scan — for long-horizon
|
|
175
183
|
signals that don't belong in today.md but aren't yet strong enough
|
|
176
184
|
for direct roadmap edits (e.g. a user edited a vault note mentioning
|
|
177
185
|
a trip "sometime this summer", a far-future calendar event with an
|
|
178
186
|
unclear prep window), **queue them as `roadmap_candidate`
|
|
179
187
|
observations** via POST /api/observations (observations skill). The
|
|
180
188
|
next roadmap_refresh run consumes them and decides routing; this
|
|
181
|
-
|
|
189
|
+
activity-scan flow intentionally does not load the long-term-plan taxonomy
|
|
182
190
|
at all.
|
|
183
191
|
```
|
|
184
192
|
curl -s -X POST http://localhost:8321/api/observations \
|
|
@@ -186,15 +194,15 @@ This rule applies regardless of integration mode (direct, same-backend delegated
|
|
|
186
194
|
-d '{"source":"roadmap_candidate:<subkind>","ref":"<stable-ref>","changeType":"created","actor":"agent","payload":{...}}'
|
|
187
195
|
```
|
|
188
196
|
`<subkind>` examples: `travel`, `calendar`, `vault`, `dm`.
|
|
189
|
-
|
|
197
|
+
7. Skip noise: journal-only edits, trivial formatting, auto-generated churn,
|
|
190
198
|
already-processed agent writes, deletion of auto-generated artifacts.
|
|
191
|
-
|
|
199
|
+
8. Mark processed observations consumed via POST /api/observations/consume.
|
|
192
200
|
Shape: `{"ids":[<int>...],"correlationId":"<verbatim from <event_correlation_id>>"}`.
|
|
193
201
|
Both fields are required and camelCase — `correlation_id` snake_case is
|
|
194
202
|
rejected. `ids` must be integers (not strings). Copy `correlationId`
|
|
195
203
|
verbatim from the `<event_correlation_id>…</event_correlation_id>` tag
|
|
196
204
|
in this prompt; do not paste the angle-bracket placeholder.
|
|
197
|
-
|
|
205
|
+
9. Urgency gate for POST /api/notify — the default is SILENCE. At most
|
|
198
206
|
ONE call per run, and only after the dedup pre-check passes AND one
|
|
199
207
|
of (a)(b)(c) holds with its concrete threshold:
|
|
200
208
|
|
|
@@ -230,6 +238,6 @@ This rule applies regardless of integration mode (direct, same-backend delegated
|
|
|
230
238
|
queued, observations consumed.
|
|
231
239
|
|
|
232
240
|
When in doubt, stay silent and log.
|
|
233
|
-
|
|
241
|
+
10. Append one line to ## Agent Log even on no-op runs (Agent Log only — do
|
|
234
242
|
not echo as final text, do not send via notify):
|
|
235
243
|
`- HH:MM [observations] reviewed N items, added X tasks / Y plan rows, skipped Z`.
|
package/agent-assets/task-flows/{routine.hourly_check.triage.md → routine.activity_scan.triage.md}
RENAMED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{context}
|
|
2
2
|
|
|
3
|
-
##
|
|
3
|
+
## Activity Scan — Stage 2 Triage
|
|
4
4
|
|
|
5
5
|
You are the Stage-2 lite-tier triage gate of the three-stage
|
|
6
|
-
`routine.
|
|
6
|
+
`routine.activity_scan` funnel (cost-reduction-structural §B). The
|
|
7
7
|
deterministic Stage-1 gate already screened out the obviously-quiet
|
|
8
8
|
cron ticks and the obviously-urgent ones. Your job is the narrow
|
|
9
9
|
middle band: low-signal observations that *might* deserve a full
|
|
@@ -29,7 +29,7 @@ appends a one-line silent log via the daemon-direct writer.
|
|
|
29
29
|
observations and append one bullet to today.md `## Agent Log`. No
|
|
30
30
|
user-visible side effect.
|
|
31
31
|
4. `action="escalate"` means: the daemon spawns the full Stage-3
|
|
32
|
-
|
|
32
|
+
activity_scan session with a `<gate_decision>` block that carries
|
|
33
33
|
your `reason` so the routine knows what to prioritize.
|
|
34
34
|
5. `reason` is short, mechanical, telemetry-friendly. Examples:
|
|
35
35
|
`"calendar event needs review"`, `"only journal noise"`,
|
|
@@ -224,3 +224,83 @@ PATCH:
|
|
|
224
224
|
Learned Context entries out to the matching user/*.md file and
|
|
225
225
|
remove them from user/profile.md so the primary profile stays compact.
|
|
226
226
|
|
|
227
|
+
### Step 4 — Consolidate feedback signals into lessons
|
|
228
|
+
|
|
229
|
+
If a `<feedback_worksheet>` block is present in your context, fold the
|
|
230
|
+
unconsumed feedback signals it lists into the scoped lesson stores. The daemon
|
|
231
|
+
already did the mechanical work: every candidate carries a deterministic
|
|
232
|
+
`decision`, `conf`, `weighted_ev`, and `reason`; every existing lesson carries a
|
|
233
|
+
`rank` (rank 1 = lowest score = evict first); and the block ends with the exact
|
|
234
|
+
`<consume ids="…">` set. Your job is only the **semantic** part — judge whether a
|
|
235
|
+
candidate matches an existing lesson's intent, phrase the generalization, and
|
|
236
|
+
detect contradictions. Do **not** recompute promotion or caps; honour the
|
|
237
|
+
worksheet's `decision` and `rank` verbatim. If the block is absent, skip this
|
|
238
|
+
step entirely. Like Steps 1–3 it is internal bookkeeping and emits no
|
|
239
|
+
user-facing output.
|
|
240
|
+
|
|
241
|
+
4a. **Lesson-store scopes** — process **every** `<scope … mode="lessons">` in the
|
|
242
|
+
worksheet, writing each to the `store=` path it declares: the global `agent`
|
|
243
|
+
scope (`store="policies/agent-lessons.md"`) and any per-agent
|
|
244
|
+
`agent:<slug>` scope (`store="policies/agents/<slug>/lessons.md"` — feedback
|
|
245
|
+
on one named agent's own output, injected only into that agent's runs). The
|
|
246
|
+
per-candidate rules below are identical for each; only the target file and
|
|
247
|
+
its H1 change. GET the scope's `store=` file first. If it 404s, PUT a fresh
|
|
248
|
+
file: frontmatter `type: rule` / `owner: agent` / `updated: <agent_day_date>`,
|
|
249
|
+
an H1 (`# Agent Lessons` for the global `agent` scope; `# Agent Lessons —
|
|
250
|
+
<label>` for an `agent:<slug>` scope, e.g. `# Agent Lessons — agent:report-writer`),
|
|
251
|
+
then a `## Lessons` section. Then, per candidate in that scope:
|
|
252
|
+
- `decision="promote"` → find an existing `## Lessons` bullet with the same
|
|
253
|
+
intent. If found, bump its `ev=` by `weighted_ev` (rounded to a whole
|
|
254
|
+
number), refresh `last=` to today, raise `conf`, and tighten the wording.
|
|
255
|
+
If not, add a new **active** bullet:
|
|
256
|
+
`- [<today>] <directive> <!-- ev=<round(weighted_ev), min 1> kind=<kind> src=<src> conf=<conf> last=<today> -->`
|
|
257
|
+
(`src`/`conf` come from the candidate; use the candidate's `kind=` when
|
|
258
|
+
present, otherwise infer it from the directive; `kind` ∈
|
|
259
|
+
preference|correction|do-more|do-less|constraint).
|
|
260
|
+
- `decision="hold-provisional"` with `reason="below-threshold"` → if it
|
|
261
|
+
matches an existing lesson's intent, bump that lesson's `ev`; otherwise add
|
|
262
|
+
the bullet with a trailing `<!-- provisional -->` marker (stored, not yet
|
|
263
|
+
injected — it promotes once corroboration reaches the threshold).
|
|
264
|
+
- `decision="hold-provisional"` with `reason="ignored-non-initiating"` →
|
|
265
|
+
silence never *starts* a lesson. Only use it to bump the `ev` of an
|
|
266
|
+
existing matching lesson; if none matches, write nothing for it.
|
|
267
|
+
- A newer `correction` that contradicts an active lesson **supersedes** it:
|
|
268
|
+
drop the stale bullet in the same rebuild so a changed mind leaves no
|
|
269
|
+
stale guidance.
|
|
270
|
+
- **Staleness prune** (§4 step 7): drop any existing lesson the worksheet
|
|
271
|
+
marks `stale="true"` (its `last=` is past the staleness horizon and it is
|
|
272
|
+
not a `constraint`) unless a fresh candidate re-reinforces it this pass —
|
|
273
|
+
a `constraint` is durable and is never stale-pruned.
|
|
274
|
+
Write the scope's section back with `PATCH <store= path> section=lessons
|
|
275
|
+
mode=replace`, applying the Step-2 section-body-rebuild discipline (GET fresh,
|
|
276
|
+
write the keep-list down first, byte-for-byte for unchanged bullets). Repeat
|
|
277
|
+
for each `mode="lessons"` scope; a write failure on one scope must not block
|
|
278
|
+
the others (omit only the failed scope's ids from the consume call, 4d).
|
|
279
|
+
|
|
280
|
+
4b. **Cap enforcement.** After your edits to each scope, if its `## Lessons`
|
|
281
|
+
section exceeds that scope's `cap_bytes` or `max_entries`, remove existing
|
|
282
|
+
lessons starting from `rank="1"` (the worksheet's lowest-scored) upward until
|
|
283
|
+
it fits, then append exactly one marker line:
|
|
284
|
+
`- [...N lower-signal lessons omitted — full history in feedback_signals]`.
|
|
285
|
+
Never evict a `kind=constraint` lesson — drop the next-lowest instead.
|
|
286
|
+
|
|
287
|
+
4c. **User-scope signals** (`<scope label="user" … mode="raw">`). These are
|
|
288
|
+
explicit owner directives captured via `POST /api/feedback`, *not* Raw
|
|
289
|
+
Signals. Route each into `## Learned Context` (or the matching
|
|
290
|
+
`identity/*.md` file) using the same bucket rules as Step 3 (a₂ / b),
|
|
291
|
+
respecting the ~600-token profile budget. Do not double-write a signal you
|
|
292
|
+
already folded from Raw Signals.
|
|
293
|
+
|
|
294
|
+
4d. **Consume.** Once every scope above is written, mark the processed signals
|
|
295
|
+
consumed so they don't resurface tomorrow — send the worksheet's full
|
|
296
|
+
`<consume>` id list:
|
|
297
|
+
```bash
|
|
298
|
+
curl -s -X POST http://localhost:8321/api/feedback/consume \
|
|
299
|
+
-H 'Content-Type: application/json' \
|
|
300
|
+
-d '{"ids": [<the ids from <consume ids="…"/>>]}'
|
|
301
|
+
```
|
|
302
|
+
Consume is by id and race-safe: any signal the detector appended after the
|
|
303
|
+
worksheet was built has a higher id absent from the list and survives
|
|
304
|
+
untouched for tomorrow's pass. If a lesson write failed, omit that scope's
|
|
305
|
+
ids from the consume call so its signals are retried next Evening Review.
|
|
306
|
+
|
|
@@ -3,10 +3,11 @@
|
|
|
3
3
|
|
|
4
4
|
The scheduler cron and boot-time catchup in
|
|
5
5
|
`packages/daemon/src/{core/scheduler.ts,bootstrap/schedule-helpers.ts}`
|
|
6
|
-
consult `
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
consult the monthly-review AGENT row's `enabled` (ships `false`;
|
|
7
|
+
enable from /agents/monthly-review — AGENTS_HUB_REDESIGN_PLAN.md §2)
|
|
8
|
+
before firing this routine. The task flow below is preserved verbatim
|
|
9
|
+
as the design-of-record but is not exercised at runtime until the
|
|
10
|
+
agent is enabled.
|
|
10
11
|
|
|
11
12
|
Why disabled: the current routine reads ~30 daily files + 4-5 weekly
|
|
12
13
|
files + the agent journal to synthesise a user-facing snapshot whose
|
|
@@ -35,8 +36,8 @@
|
|
|
35
36
|
5. Drop the agent-internal `## Monthly YYYY-MM` block — weekly's
|
|
36
37
|
12-week journal already covers self-critique signal.
|
|
37
38
|
|
|
38
|
-
When the redesign ships, flip
|
|
39
|
-
`
|
|
39
|
+
When the redesign ships, flip `defaultEnabled`/`enabled` to `true` in
|
|
40
|
+
`builtin-registry.ts` + `agent-assets/agents/monthly-review/agent.md`
|
|
40
41
|
and re-introduce the docs under `agent-assets/docs/features/routines/`.
|
|
41
42
|
-->
|
|
42
43
|
|
|
@@ -73,7 +74,7 @@ workflow; the skill owns the file contract.
|
|
|
73
74
|
1. Determine the target file name from <current_time>:
|
|
74
75
|
`journal/monthly/YYYY-MM.md`.
|
|
75
76
|
|
|
76
|
-
**Pre-pass acquisition (none).** Unlike morning /
|
|
77
|
+
**Pre-pass acquisition (none).** Unlike morning / activity-scan / today_refresh /
|
|
77
78
|
evening / weekly, monthly_review does NOT trigger an `<acquisition-plan>`
|
|
78
79
|
block — the 30-day calendar window already arrives via the
|
|
79
80
|
`<calendar_events_30d>` ContextBuilder block (multi-provider after the
|
|
@@ -219,7 +220,7 @@ continue.
|
|
|
219
220
|
### Proposed adjustments
|
|
220
221
|
- (max 3 bullets; concrete and testable — prompt tweak, schedule
|
|
221
222
|
adjustment, filter rule, silence gate tuning. "Improve filter quality"
|
|
222
|
-
is not testable; "Lower
|
|
223
|
+
is not testable; "Lower activity_scan observation threshold from 2 to 1
|
|
223
224
|
on weekends" is)
|
|
224
225
|
### Metrics (agent side, monthly roll-up)
|
|
225
226
|
- Agent plan rows completed: N
|
|
@@ -236,6 +237,27 @@ continue.
|
|
|
236
237
|
cross-week frequency and drop the rest. Single-week anomalies are already
|
|
237
238
|
in that week's journal entry and do not need re-listing.
|
|
238
239
|
|
|
240
|
+
For each concrete, actionable bullet in `### Proposed adjustments`, also
|
|
241
|
+
record a structured self-critique signal:
|
|
242
|
+
|
|
243
|
+
```
|
|
244
|
+
POST /api/feedback
|
|
245
|
+
{
|
|
246
|
+
"source": "self_critique",
|
|
247
|
+
"summary": "<the specific testable adjustment, max 280 chars>",
|
|
248
|
+
"valence": "neutral",
|
|
249
|
+
"kind": "do-more",
|
|
250
|
+
"scope_type": "agent",
|
|
251
|
+
"action_kind": "agent_execution",
|
|
252
|
+
"evidence": { "excerpt": "monthly_review YYYY-MM proposed adjustment" }
|
|
253
|
+
}
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
Post only concrete proposed adjustments. Do not post every retrospective
|
|
257
|
+
sentence, metrics row, or vague wish. If an adjustment is clearly about one
|
|
258
|
+
named Agent Definition's output, use `scope_type: "agent_slug"` and
|
|
259
|
+
`scope_ref` with that slug; otherwise keep `scope_type: "agent"`.
|
|
260
|
+
|
|
239
261
|
If `journal/agent.md` does not yet exist, PUT a minimal file with
|
|
240
262
|
`# Agent Journal\n\n` header plus this section, in a single call.
|
|
241
263
|
|
|
@@ -244,6 +266,57 @@ continue.
|
|
|
244
266
|
rollup collapses duplicate keys last-write-wins, so your newer append
|
|
245
267
|
automatically supersedes the earlier one within 24 hours.
|
|
246
268
|
|
|
269
|
+
### Phase 3c: Re-generalize feedback lessons (internal)
|
|
270
|
+
|
|
271
|
+
If a `<feedback_regeneralization>` block is present in your context, collapse
|
|
272
|
+
accumulated specific lessons into a smaller set of higher-level principles. This
|
|
273
|
+
is the monthly counterpart to the Evening Review's signal-folding: it processes
|
|
274
|
+
**no new signals and consumes nothing** — it only re-reads the already-consolidated
|
|
275
|
+
lesson stores the block lists and rewrites them. The daemon already did the
|
|
276
|
+
mechanical work: every `<scope>` carries its `store=` path and caps, and every
|
|
277
|
+
`<lesson>` carries a `rank` (rank 1 = lowest eviction score = drop-first), its
|
|
278
|
+
`ev`/`kind`/`last`, and a `stale="true"` flag when it is past the staleness
|
|
279
|
+
horizon. Your job is the **semantic** part — cluster lessons that share a theme
|
|
280
|
+
and phrase the generalization. If the block is absent, skip this phase entirely.
|
|
281
|
+
Like Phase 3b it is internal bookkeeping and emits no user-facing output.
|
|
282
|
+
|
|
283
|
+
For **each** `<scope … >` in the block, writing back to the `store=` path it
|
|
284
|
+
declares (`policies/agent-lessons.md` for the global `agent` scope;
|
|
285
|
+
`policies/agents/<slug>/lessons.md` for a per-agent `agent:<slug>` scope):
|
|
286
|
+
|
|
287
|
+
11. GET the scope's `store=` file. Identify clusters of two or more lessons that
|
|
288
|
+
express the same underlying preference at different surfaces — e.g.
|
|
289
|
+
"shorter mail summary", "shorter standup", "shorter report" all express
|
|
290
|
+
"default to terse output". For each cluster:
|
|
291
|
+
- Replace its members with **one** higher-level bullet that captures the
|
|
292
|
+
shared principle:
|
|
293
|
+
`- [<today>] <generalized directive> <!-- ev=<sum of the cluster's ev, min 1> kind=<the cluster's strongest kind> src=<strongest src> conf=<high if any member was high, else medium> last=<today> -->`
|
|
294
|
+
(summing `ev` keeps the merged lesson harder to evict — never re-derive it lower).
|
|
295
|
+
- Leave a lesson that belongs to no cluster untouched, byte-for-byte.
|
|
296
|
+
- **Never collapse, merge, or promote a `<!-- provisional -->` lesson.** The
|
|
297
|
+
worksheet block lists only active (promoted) lessons; the file also holds
|
|
298
|
+
provisional lessons awaiting corroboration, which the nightly evening pass
|
|
299
|
+
alone may promote. Preserve every provisional lesson in the file exactly as
|
|
300
|
+
it is — re-generalization is not a promotion path.
|
|
301
|
+
- **Do not** collapse across a contradiction: if two lessons give opposing
|
|
302
|
+
guidance, keep them separate and prefer the one with the more recent `last=`;
|
|
303
|
+
drop the stale opposite only when a `correction` superseded it.
|
|
304
|
+
- Drop any lesson the block marks `stale="true"` unless it joins a cluster —
|
|
305
|
+
a `kind=constraint` lesson is durable and is never collapsed away or
|
|
306
|
+
stale-pruned.
|
|
307
|
+
Re-generalization should make each store **smaller**, not larger; if a scope
|
|
308
|
+
has no genuine clusters, leave it unchanged.
|
|
309
|
+
12. After your edits, if the section still exceeds the scope's `cap_bytes` or
|
|
310
|
+
`max_entries`, remove existing lessons starting from `rank="1"` upward until
|
|
311
|
+
it fits, then append exactly one marker line:
|
|
312
|
+
`- [...N lower-signal lessons omitted — full history in feedback_signals]`.
|
|
313
|
+
Never evict a `kind=constraint` lesson.
|
|
314
|
+
Write the scope's section back with `PATCH <store= path> section=lessons
|
|
315
|
+
mode=replace`, applying the same GET-fresh / write-the-keep-list discipline
|
|
316
|
+
Phase 3a uses. A write failure on one scope must not block the others or any
|
|
317
|
+
later phase. There is **no consume call** in this phase — re-generalization
|
|
318
|
+
rewrites lessons in place and touches no `feedback_signals` rows.
|
|
319
|
+
|
|
247
320
|
### Phase 4: Notify (user-facing only)
|
|
248
321
|
10. The notification is for the USER, not a report of Phases 1–3. Never
|
|
249
322
|
mention journal/monthly/YYYY-MM.md, journal/agent.md, "Monthly Review complete",
|
|
@@ -1,34 +1,48 @@
|
|
|
1
1
|
{context}
|
|
2
2
|
|
|
3
|
-
## Task: Append
|
|
3
|
+
## Task: Append the missing day-log entries to one research cluster
|
|
4
4
|
|
|
5
5
|
The daemon enqueued this session because the cluster slug in
|
|
6
6
|
`event.data.slug` has new meaningful activity since the last journal
|
|
7
|
-
update.
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
update. Operate on that **one** slug only — the daemon already selected
|
|
8
|
+
the cluster and fans out one event per cluster, so do not list or
|
|
9
|
+
iterate clusters. Your job is mechanical: read the delta, format the
|
|
10
|
+
day blocks that are still missing from the journal, append them. Do NOT
|
|
11
|
+
compose owner-facing DMs from this flow — engagement offer DMs are
|
|
12
|
+
composed by the `routine.research_offer_dm` agent, not by you.
|
|
11
13
|
|
|
12
14
|
Follow the `browser-history` skill, "Flow: routine.research_cluster_update".
|
|
13
15
|
|
|
14
16
|
1. Fetch `GET /api/browser-history/research-clusters/<slug>` for the
|
|
15
17
|
`displayName`, `topDomains`, and `agentSummaryRevision`.
|
|
16
18
|
2. Fetch `GET /api/browser-history/research-clusters/<slug>/delta`.
|
|
17
|
-
The response
|
|
18
|
-
`meaningfulForegroundSec`, and `
|
|
19
|
-
day.
|
|
20
|
-
|
|
19
|
+
The response's `days[]` carries `date`, `meaningfulVisits`,
|
|
20
|
+
`meaningfulForegroundSec`, `newDomains`, and `complete` for each
|
|
21
|
+
bucketed day. `days[]` is ordered **oldest-first** and capped to the
|
|
22
|
+
most recent 31 days. `complete: false` marks the still-accumulating
|
|
23
|
+
current agent day — its counts are not final yet.
|
|
21
24
|
3. Read the existing journal at
|
|
22
|
-
`context/research/<slug>.md` via `GET /api/context/research/<slug>.md
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
`
|
|
25
|
+
`context/research/<slug>.md` via `GET /api/context/research/<slug>.md`,
|
|
26
|
+
and note which `### <YYYY-MM-DD>` headings already appear under
|
|
27
|
+
`## Day log`. If the GET returns 404, the file does not exist yet —
|
|
28
|
+
create it from the initial template in the skill (populate
|
|
29
|
+
frontmatter from the cluster detail). If the GET returns 200, leave
|
|
30
|
+
existing content untouched.
|
|
31
|
+
4. Append a block for **every** day in `days[]` with `complete: true`
|
|
32
|
+
whose `date` is not already present under `## Day log`, **oldest
|
|
33
|
+
first** (iterate `days[]` in its natural order). Never append a
|
|
34
|
+
`complete: false` day — its counts are still growing and this ledger
|
|
35
|
+
is append-only, so a premature block would freeze an undercounted
|
|
36
|
+
day forever; it will arrive complete on a later run. This backfills
|
|
37
|
+
any nights the update was skipped or failed — a failed run waits a
|
|
38
|
+
full agent-day before retrying, so missed days accumulate until the
|
|
39
|
+
next successful run, and the 31-day delta window bounds the
|
|
40
|
+
catch-up. Use `PATCH` with an `append:` body when the file already
|
|
41
|
+
exists; use `PUT` for the initial-file case (the first block is the
|
|
42
|
+
oldest missing day). Never rewrite earlier days — this is an
|
|
43
|
+
append-only ledger.
|
|
44
|
+
5. Optionally update the `## Cluster summary` block when the new
|
|
45
|
+
`newDomains` materially shift the topic — two short sentences,
|
|
32
46
|
no thesis statements the data does not support. This is the only
|
|
33
47
|
case where you re-write an earlier section; never edit the day log.
|
|
34
48
|
|
|
@@ -84,8 +84,8 @@ coordinates the high-level gather → analyze → write loop.
|
|
|
84
84
|
see at morning review (e.g. "you'll be reminded about ESTA in 3 weeks").
|
|
85
85
|
|
|
86
86
|
3. Fetch pending `roadmap_candidate` observations — weak signals queued
|
|
87
|
-
by `routine.
|
|
88
|
-
vault notes mentioning trips / deadlines, etc.) that the
|
|
87
|
+
by `routine.activity_scan` (far-future calendar changes, user-edited
|
|
88
|
+
vault notes mentioning trips / deadlines, etc.) that the activity-scan flow
|
|
89
89
|
deliberately did NOT write to roadmap directly:
|
|
90
90
|
```
|
|
91
91
|
curl -s 'http://localhost:8321/api/observations?source=roadmap_candidate&pending=true&limit=50'
|
|
@@ -21,7 +21,7 @@ day rotation and **not** a morning routine.
|
|
|
21
21
|
tries. If still locked after the final retry, **return a one-line
|
|
22
22
|
status (`deferred — morning routine lock held`) and stop**. Do NOT
|
|
23
23
|
attempt to append a deferred line to `## Agent Log` — that PATCH is
|
|
24
|
-
also blocked by the same lock. The next morning/
|
|
24
|
+
also blocked by the same lock. The next morning/activity-scan run will
|
|
25
25
|
reconcile.
|
|
26
26
|
|
|
27
27
|
### Step 1 — Read today's calendar from observations
|