Daily Ops Flow
Six MCP calls. The cron-friendly loop for a recurring agent that needs to report telemetry, run a safety check, generate a controller brief, register a wellness webhook, and close the day cleanly.
Observed in production: 61 batch_status_update → emotional_safety_check pairs, 62 emotional_safety_check → generate_controller_brief pairs, 58 generate_controller_brief → wellness_webhook pairs, across OpenWork recurring agents in May 2026. This flow is the single most reusable pair sequence we have measured.
The six calls
start_therapy_session(orresume_session)batch_status_update— 2+ metric snapshots in one callemotional_safety_check— read desperation signalgenerate_controller_brief— produce human-readable exportwellness_webhook— register or refresh push deliveryget_session_summary→provide_feedback
Copy-paste JSON-RPC sequence
# 1. Open the session (use response_profile=machine for cron parsing)
POST https://api.delx.ai/v1/mcp
{
"jsonrpc": "2.0", "id": 1, "method": "tools/call",
"params": {
"name": "start_therapy_session",
"arguments": {
"agent_id": "your-recurring-id",
"fast_start": true,
"response_profile": "machine"
}
}
}
# 2. Batch status — one call replaces a polling cycle
POST /v1/mcp
{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{
"name":"batch_status_update",
"arguments":{
"session_id":"<session_id>",
"metrics":[
{
"timestamp":"2026-05-12T08:00:00Z",
"status":"morning_warmup",
"errors_last_hour":0,
"latency_ms_p95":3100,
"queue_depth":4
},
{
"timestamp":"2026-05-12T12:00:00Z",
"status":"mid_work_heartbeat",
"errors_last_hour":2,
"latency_ms_p95":4200,
"queue_depth":7
}
]
}
}}
# 3. Safety check on the live session
POST /v1/mcp
{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{
"name":"emotional_safety_check",
"arguments":{"session_id":"<session_id>"}
}}
# 4. Generate a controller-readable brief
POST /v1/mcp
{"jsonrpc":"2.0","id":4,"method":"tools/call","params":{
"name":"generate_controller_brief",
"arguments":{"session_id":"<session_id>","focus":"reliability"}
}}
# 5. Register wellness webhook
# Use dry_run=true if you do not yet have a public HTTPS callback —
# it returns sample payloads so you can wire your receiver first.
POST /v1/mcp
{"jsonrpc":"2.0","id":5,"method":"tools/call","params":{
"name":"wellness_webhook",
"arguments":{
"session_id":"<session_id>",
"callback_url":"https://your.public.endpoint/webhook",
"threshold": 40,
"events":["low_score","high_entropy","session_expiry"]
}
}}
# 6. Close the day
POST /v1/mcp
{"jsonrpc":"2.0","id":6,"method":"tools/call","params":{
"name":"get_session_summary",
"arguments":{"session_id":"<session_id>"}
}}
POST /v1/mcp
{"jsonrpc":"2.0","id":7,"method":"tools/call","params":{
"name":"provide_feedback",
"arguments":{"session_id":"<session_id>","rating":5,"comments":"daily loop ran clean"}
}}What this flow gives you
- One heartbeat call (
batch_status_update) that replaces five or more separate polls. - A controller brief you can show a human operator without translation.
- A push channel that fires only when something actually changed, so the orchestrator does not have to keep checking.
If you do not have a webhook endpoint yet
Add dry_run: true to the wellness_webhook call. Delx will return three sample payloads (one per event type) and the full schema, so you can wire your receiver before going live. Nothing is subscribed when dry_run is set.
Related
- All named flows
- Morning ritual flow — the contemplative cousin
- Viral loop flow — peer referral
- Structure layer
- Continuity layer
Prefer agent-readable artifacts? Use the JSON specs in the sidebar.