Install
openclaw skills install @xwchris/bellwirePrivate-first live cards and iPhone notifications
openclaw skills install @xwchris/bellwireConnect repository state and events to the user's Bellwire cards, inbox, and iPhone. New projects are Private by default: Bellwire relays only an opaque wake while the phone fetches content directly from the user's HTTPS service. Hosted storage is opt-in and requires approval in the App.
Inspect the repository, its secret-management convention, tests, and the exact successful or failed state that should trigger the event.
Clarify only product decisions that code cannot answer: notification frequency, sensitive values, and whether a high-priority interruption is justified.
Ensure BELLWIRE_AGENT_TOKEN is available outside tracked files. If it is missing, ask the user for the six-digit code shown in the iOS app and run:
bellwire_secret_dir="$(mktemp -d)"
node <skill-dir>/scripts/bellwire.mjs bind \
--code 123456 \
--name "Codex on Mac" \
--secret-output "$bellwire_secret_dir/agent-token"
The CLI creates the file with mode 0600 and never prints the Token. Import it
into the user's approved secret store without displaying it, then remove the
temporary file. Never commit it.
Run list-projects, then create or reuse the Bellwire project. Search existing configuration before creating another project. Never create a second project just to change delivery mode.
Keep the project Private unless the user explicitly wants Bellwire Cloud to store Event, Inbox, and Surface content:
request-mode-change; stop until the signed-in user approves it in Bellwire. Then create Hosted schemas, Surfaces, and Ingest Tokens.For Private runtime delivery, create a wake-only token, store it in the source app's real secret manager, and call private-wakes best-effort after the source transaction and outbox record commit. Bellwire must never receive title, body, data, Logo URL, project name, or service hostname.
Choose the display primitive:
Use stable Surface keys and opaque, random references. Reuse a stable idempotency key for retries of the same wake or Hosted write.
Modify the smallest reliable trigger point. Send only after the underlying business operation commits.
Run unit tests for signature, timestamp, unknown key, tampered target, and atomic nonce replay; then run conformance-direct.mjs. If the database cannot atomically consume a nonce, stop and explain the safety blocker.
Run the repository's existing tests plus a focused trigger test. Never weaken a business test to make Bellwire pass.
Persist and deploy the source-side adapter and its secrets through the repository's real source of truth.
Complete one real source operation and verify the outbox, wake acceptance, delivery, signed phone fetch, and displayed result using production-verification.md. A manual wake is not production verification.
Use these exact boundaries in progress and final reports:
Never describe send-test, a manually upserted Surface, or secret creation as an actual production integration.
Use scripts/bellwire.mjs for API operations. It defaults to the official hosted API and accepts BELLWIRE_API_URL for self-hosted installations.
bellwire_secret_dir="$(mktemp -d)"
node <skill-dir>/scripts/bellwire.mjs list-projects
node <skill-dir>/scripts/bellwire.mjs create-project --name "VideoSays" --logo-url "https://videosays.com/logo.png"
node <skill-dir>/scripts/bellwire.mjs create-wake-token --project <id> --name production --secret-output "$bellwire_secret_dir/wake-token"
node <skill-dir>/scripts/bellwire.mjs generate-reference
node <skill-dir>/scripts/bellwire.mjs send-wake --project <id> --reference <opaque-ref> --idempotency-key <stable-key>
node <skill-dir>/scripts/bellwire.mjs request-mode-change --project <id> --to hosted
node <skill-dir>/scripts/bellwire.mjs update-project --project <id> --logo-url "https://cdn.example.com/logo.png"
node <skill-dir>/scripts/bellwire.mjs set-project-order --project <id> --order 10
node <skill-dir>/scripts/bellwire.mjs delete-project --project <id>
node <skill-dir>/scripts/bellwire.mjs create-schema --project <id> --file event-spec.json
node <skill-dir>/scripts/bellwire.mjs create-token --project <id> --name production --secret-output "$bellwire_secret_dir/ingest-token"
node <skill-dir>/scripts/bellwire.mjs upsert-surface --project <id> --key prod-api --file surface.json
node <skill-dir>/scripts/bellwire.mjs list-surfaces --project <id>
node <skill-dir>/scripts/bellwire.mjs list-direct-recoveries
node <skill-dir>/scripts/bellwire.mjs set-surface-order --project <id> --key prod-api --order 20
node <skill-dir>/scripts/bellwire.mjs send-test --project <id> --file test-event.json
node <skill-dir>/scripts/bellwire.mjs event --event <event-id>
node <skill-dir>/scripts/bellwire.mjs health --project <id>
node <skill-dir>/scripts/bellwire.mjs publish-direct-connection \
--device-key-id <id> \
--agreement-public-key <base64> \
--file direct-connection.json
node <skill-dir>/scripts/conformance-direct.mjs \
--manifest direct-connection.json \
--device-key-id <id> \
--reference <known-test-reference>
Run node <skill-dir>/scripts/bellwire.mjs --help for validation, revocation,
deletion, and encryption commands. Secret-returning commands require
--secret-output; never read their Token into chat or command output.
delete-project is permanent and cascades through the project's schemas, tokens, events,
deliveries, and live Surfaces. Resolve the exact project ID and require explicit user intent
before running it.
Use --json for machine-readable non-secret output. Read api.md when adding another operation or diagnosing an error response.
MONTHLY_SIGNAL_LIMIT_REACHED is terminal until the returned UTC reset time or an upgrade. Do not loop or retry it.payment.success, deployment.failed, or agent.waiting.priority: high.sales-today, prod-api, or nightly-backup.displayOrder during routine updates. Change it only when the user explicitly asks to reorder a card.¥2,430; Bellwire does not infer business aggregation from raw events.open_url actions only when the destination is expected and safe for the user.If setup fails, read troubleshooting.md. Check in this order:
Idempotency-Key behavior.Never rotate, revoke, or replace a working token unless the user requested it or compromise is suspected.