Daily briefing panel

An owner-approved reminder and a card that reads current weather on demand.

Documentation revision 1 · Contract reference API 54 · Installed readiness unknown

Preview offline card · Complete HTML interaction body · Machine-readable recipe

What runs where

Controller integration

Only explicit decision-model/weather requests leave the phone; direct or relay transport still requires a running reachable phone.

Boundaries

Lifecycle

start

Inspect existing /v1/schedule/manifest, merge actions, submit start_request, wait for owner approval; GET /v1/schedule must show active. Post generated card separately.

update

Resubmit merged replacement manifest; new content requires approval. GET status confirms which digest is active.

pause

POST /v1/schedule/pause {"paused":true}; affects this agent’s entire manifest, not just the reminder. Resume with false.

stop

Remove only the reminder from a replacement manifest if other actions exist. DELETE /v1/schedule only if this agent has a dedicated recipe manifest. Cancel the card separately; keep_assets=true preserves saved files.

Failures and costs

Complete synthetic contract examples

These fixtures demonstrate contracts. They are not observations from a phone. Replace image/resource IDs with returned authorized IDs. Load request.json as the complete body of POST /v1/interactions; it contains the full offline HTML.

Start request (wait for owner approval)

{
  "method": "POST",
  "path": "/v1/schedule",
  "body": {
    "manifest": {
      "timezone": "Europe/Warsaw",
      "actions": [
        {
          "id": "briefing-reminder",
          "when": {
            "daily": [
              "08:00"
            ],
            "count": 7
          },
          "do": {
            "call": "POST /v1/interactions",
            "body": {
              "kind": "notice",
              "title": "Daily briefing",
              "text": "Your briefing is ready to refresh. Open the briefing card.",
              "no_takeover": true
            }
          }
        }
      ]
    }
  }
}

pause

{
  "id": "pause",
  "request": {
    "method": "POST",
    "path": "/v1/schedule/pause",
    "body": {
      "paused": true
    }
  },
  "response": {
    "status": 200,
    "body": {
      "paused": true
    }
  },
  "evidence": "Synthetic contract fixture, not a device observation."
}

resume

{
  "id": "resume",
  "request": {
    "method": "POST",
    "path": "/v1/schedule/pause",
    "body": {
      "paused": false
    }
  },
  "response": {
    "status": 200,
    "body": {
      "paused": false
    }
  },
  "evidence": "Synthetic contract fixture, not a device observation."
}

stop

{
  "id": "stop",
  "request": {
    "method": "DELETE",
    "path": "/v1/schedule",
    "query": {
      "keep_assets": true
    }
  },
  "response": {
    "status": 200,
    "body": {
      "removed": true
    }
  },
  "evidence": "Synthetic contract fixture, not a device observation."
}

Extensions

Source evidence