一键导入
notify
Load whenever composing user-facing text — DMs, notifications, briefings, replies, observer alerts. Owns awareness gate + /api/notify.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Load whenever composing user-facing text — DMs, notifications, briefings, replies, observer alerts. Owns awareness gate + /api/notify.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Load when reading or writing project notes, weekly/monthly summaries, or journal/agent.md. Owns GET/PATCH for context files except today.md and roadmap.md, which use their dedicated skills.
Load when the user wants an ongoing task on a fixed cadence (every morning, each Monday, hourly) to run autonomously as its own named recurring Agent. Creates it via POST /api/agents. Not for one-time reminders (use schedule) or app-data background fetches (use managed-tasks).
Load to manage the durable source library (user-sent PDFs/PPTX/docs) — list unfiled sources, file them as knowledge/sources/ cards, promote images, or send a stored source back. SKIP for delivering files you generated this turn (attach) or general vault edits (context).
Hand a long-running or open-ended task (deep research, multi-repo CI audit, monitor X over time, bulk compile) to /api/background-task. Compose a self-contained brief, set the notification policy, POST, ack, end the turn. Read GET /:id for follow-up detail.
Read-only Task Board — list everything in motion (recurring DMs, Agents, app-fetch, automation triggers, reminders, background/browser work) via GET /api/tasks, and preview a delete's blast radius via GET /api/tasks/impact. For writes use the `task` skill.
Hand open-ended browser requests (post a tweet, fill a contact form, check an order status, …) to /api/browser-task. Relay sub-agent clarifications, POST /clarify with the reply, /cancel on stop.
| name | notify |
| description | Load whenever composing user-facing text — DMs, notifications, briefings, replies, observer alerts. Owns awareness gate + /api/notify. |
| allowed-tools | ["Bash(curl *)","Read"] |
A bad notification (noisy, poorly timed, unclear) is worse than no notification.
Every user-facing message — /api/notify call, scheduled.dm
final-text DM (Morning briefing), scheduled.task final-text DM,
message.received reply, observer alert — must clear the gates below.
Specific contracts (Morning briefing) layer additional rules on top;
nothing they say overrides a universal rule.
The user already knows their own calendar, their own course syllabus, their own class times, and the events they themselves set up. Do NOT read those items back to them. Lead with what the agent learned from input the user could not passively see — new mail, new DM, calendar delta, observation, conflict the agent detected, missing prep for a known event.
Profile-specific carve-outs (e.g. how this gate applies to interactive
DM replies vs. daemon-initiated DMs) live in the matching persona
file's pointer line — see agent-profiles/<profile>.md ## Principles.
The first user-visible line must be a specific fact the agent learned or decided since the last message — not a greeting, label, routine name, time-of-day opener, or summary header. If a line can be deleted without losing information, delete it. This rule is language-agnostic — it applies whatever language the agent uses with the user.
Anti-examples (non-exhaustive — the positive rule above is load-bearing, not this list): "Good morning!", "Summary:", "Done.", "Heads-up —". Near-synonyms of these in any language also fail the positive rule.
Never mention state/today.md, identity/profile.md, plans/roadmap.md, ## Agent Plan, ## Agent Log, ## Handoff, did-not-fire, "Morning
Routine", "Evening Review", "scheduled.task", "scheduled.dm",
"dm_session", "sub_flow", or any other internal mechanism in
user-visible text. Those go in Agent Log only.
Forbidden — "Just a heads-up", "About N hours left", "FYI". If timing matters, the deadline / event time itself carries it.
Forbidden patterns: "Schedule: ...", "Tasks: ...", "Notes: ...",
"Deadlines: ...". These enumerate the user's own data; they already
have it. (scheduled.dm Morning briefing has a section-labelled
output of its own — those labels are sanctioned by that contract; the
rule above bars introducing such enumeration in any other surface.)
Output language: follow <output_language_policy>. Tone: follow
identity/profile.md Communication Style and the Character block in your
system prompt. Keep technical terms in original form.
Default to the shortest form that conveys the substance — 1–5 short lines. No bullet list > 3 items unless the per-message contract explicitly allows it (Morning briefing has its own caps).
Notify when all three are true: (1) actionable or requires awareness, (2) time-sensitive, (3) user not already aware via another channel. Common: meeting reminders (15 min before), deadline alerts, task completions, error alerts, conversational replies. (Recurring DM-tone messages — Morning briefing — are delivered as the final assistant turn via scheduled.dm's Morning briefing contract and do NOT use this API.)
<today> ## Agent Log for notify sent / DM sent /
[cal] ... — reminder sent referencing the same item within the
last 4 hours. If the injected log is truncated ([...N earlier entries omitted ...] marker) and you can't rule out a prior
notification, GET /api/context/state/today for the full log before
firing. Duplicate notifications are the #1 cause of noise.200 {status:"sent"} is proof of delivery and a 200 {status:"deferred_quiet_hours"} is proof of queued delivery, so do NOT re-post on either. Self-throttle via <today> ## Agent Log before firing and log the skip rather than re-posting. (The endpoint defers during quiet hours and enforces rate caps, but dedup and noise control are still your job.)Default to normal. Reserve high for 8h-delay-matters. Reserve
critical for 3am-matters — it is the only level that bypasses the
endpoint's quiet-hours deferral and rate caps; everything else is
metadata recorded in the notification log. Full per-level table,
examples, and delivery semantics are in the priority reference below.
{{> ref:priority }}
One notification per task, under 5 bullets, lead with the action, follow the Character block. Actionable > informational: "3 emails from boss — 1 asks for Q2 plan by EOD" beats "3 emails from boss".
curl -s -X POST http://localhost:8321/api/notify \
-H 'Content-Type: application/json' \
-d '{"message": "Design review starts in 15 minutes.", "priority": "normal"}'
Fields: message (required, markdown), priority (optional: critical/high/normal/low), platform (optional, override target) OR platforms (optional, array of targets) — mutually exclusive, not both.
Responses:
200 { "status": "sent", "notificationId": "...", "dispatchId": "..." } = delivered to ≥1 channel; a total delivery failure returns HTTP 500 (not a silent 200-drop).200 { "status": "deferred_quiet_hours", "scheduleId": "...", "deliverAfter": "..." } = fired inside the user's quiet hours; queued as a scheduled DM that delivers at deliverAfter. Treat as delivered — do NOT re-post. If the item will be stale by then, DELETE /api/schedule/{scheduleId} and use <today> ## Agent Log instead.429 { "status": "rate_limited", "retryAfter": "..." } = hourly/daily notification cap spent; nothing sent or queued. Don't retry-loop — drop to <today> ## Agent Log.
critical priority bypasses both gates and always sends immediately. Risk tier: Autonomous — the agent decides when to notify; recorded in notification_log for the on-demand retrospective.