00Widget

Widgets for all your agents.

A reusable Apple-platform companion app and Cloudflare Worker backend that gives Claude, ChatGPT, automations, and software you build a native output channel through widgets, Live Activities, the Dynamic Island, and Apple TV dashboards.

The server never sends UI — only structured state conforming to a small set of templates. The Apple apps render that state through predefined SwiftUI views.

Connect Claude, ChatGPT, or another MCP host

Publish directly from a conversation with no integration code. Add this URL as a custom connector:

https://api.00widget.com/mcp

The host will ask you to sign in with the Apple ID you use in the 00Widget app; approving mints an API token scoped to your account. For clients configured from a file rather than a URL, /mcp.json is the same thing in config form.

Integrate an app, script, or automation

If you're inside another repo (a CI pipeline, a home-automation script, a server-side agent) and want Claude Code / Codex to publish state here, paste this into the agent — it's self-contained:

Integrate this project with 00Widget so its state shows up on iOS widgets and Live Activities.

Read the integration contract: https://api.00widget.com/llms.md
That single document is everything you need — don't pull in the rest of the 00Widget repo.

Operator-supplied env vars:
  00WIDGET_BASE_URL=https://api.00widget.com
  00WIDGET_API_KEY=<bearer token>

Verify both work with `curl $00WIDGET_BASE_URL/health` and an authenticated `GET /v1/cards` before writing any code.

Then:
1. Identify the surfaces in this project that an iOS widget should reflect (status, build state, queue depth, in-progress jobs, etc.).
2. For each, pick a template (`summary`, `progress`, `list`, or `action`) per llms.md's decision matrix.
3. Add the smallest possible publish path — a single function that POSTs to /v1/cards/upsert with a stable `id`. No SDK, no class hierarchy.
4. If something is time-bounded with a clear end (a build, a charge cycle, a delivery), use a Live Activity instead of a card.

Constraints:
- Use a stable `id` per logical thing — never embed timestamps or run ids.
- Never put secrets or PII in card fields. They render on the Lock Screen.
- Always end Live Activities. Never make destructive actions auto-run from widgets.
- Don't publish more than ~once a minute per card unless the value actually changed.

If this project is itself a Cloudflare Worker, see the "Notes for Cloudflare Workers callers" section in llms.md — same-account integrations should use a Service Binding instead of a public HTTPS fetch.

The API contract is also available at /llms.md.

API endpoints

All /v1/* endpoints require Authorization: Bearer <api-token>. Tokens are issued from the operator's /admin dashboard.