| name | notify |
| description | Inspect or configure OmA notification routing for approval gates, verification outcomes, blockers, and long-running sessions. |
Run OmA notification manager.
Input:
$ARGUMENTS
Protocol:
- Parse requested action:
status
off
profile <quiet|balanced|watchdog>
channel <desktop|terminal-bell|file|webhook>
events
template <compact|detailed|incident>
idle <minutes>
- Supported event groups (mapped to hooks):
SessionStart / SessionEnd (lifecycle)
agent-blocked (including approval-needed)
post-verify (outcome-based: passed/failed)
blocker-raised
checkpoint-save
loop-stall (high priority)
context-drift (high priority)
risk-spike (incident trigger)
idle-watchdog (timer-based)
- Supported channels:
desktop (host OS notification adapter)
terminal-bell
file (append summaries to .omg/state/notify.log)
webhook (external bridge managed outside OmA)
- Apply notification posture rules:
quiet: SessionEnd, agent-blocked, blocker-raised, loop-stall, risk-spike
balanced: quiet + post-verify (failed), checkpoint-save, context-drift
watchdog: balanced + post-verify (passed), idle-watchdog
- Enforce extension boundary:
- OmA manages trigger policy, templates, and state artifacts.
- Actual OS/webhook delivery must be handled by Gemini host hooks, shell scripts, or project-specific bridges.
- Worker/delegated sessions must stay read-only and must not dispatch external notifications.
- Enforce safety:
- external side-effect channels (
desktop, webhook) require explicit opt-in
webhook stays disabled if the bridge URL/secret is missing
- if approval posture is
suggest, recommend explicit confirmation before enabling external channels
- Read
.omg/state/session-lock.json before mutating shared notification state.
- If filesystem tools are available:
- if the current orchestration session owns the lock, write/update
.omg/state/notify.json, .omg/notify/README.md, and .omg/notify/templates/*
- otherwise write
.omg/state/sessions/[session-slug]/notify.json plus session-local notify notes under .omg/state/sessions/[session-slug]/notify/ and report the ownership conflict
Suggested notify.json shape:
{
"enabled": true,
"profile": "balanced",
"channels": {
"desktop": false,
"terminal-bell": true,
"file": true,
"webhook": false
},
"template": "compact",
"idle_watchdog_minutes": 15,
"events": {
"SessionEnd": ["terminal-bell", "file"],
"agent-blocked": ["terminal-bell", "file"],
"post-verify": ["file"],
"blocker-raised": ["terminal-bell", "file"],
"checkpoint-save": ["file"],
"loop-stall": ["terminal-bell", "file"],
"context-drift": ["file"],
"risk-spike": ["terminal-bell", "file"],
"idle-watchdog": []
},
"external_dispatch_requires_opt_in": true,
"worker_sessions_external_dispatch": false,
"updated_at": "",
"source": "oma:notify"
}
Response:
- Keep it concise and operator-facing.
- Include
Notification Status, Event Matrix, Extension Boundary, and Next Command.