/decisions · 2026-08-30 · ops · x-write-rail

X write rail — everything is built, one Developer Portal flip is yours

Source: Notion ticket "Ray can post to X after founder approval (write rail live)". Owner: Founder (5-minute portal task). Priority: Medium.

State. The post script, the safety guards, and the per-draft approval flow are built and tested against the live API (dry-run only — nothing was posted). The only missing piece is app permission: a live probe of the existing xmcp credentials confirms the X app is read-level for @Mr_BenW. Flipping it to Read and write is a Developer Portal setting only you can click, and the existing access token/secret must be regenerated afterward — OAuth 1.0a tokens keep the permission level they were issued at.

Standing policy unchanged. Ray never posts autonomously. Every draft gets its own approval page; your tap sends the canonical DECISION:<slug>:APPROVE line via iMessage; that exact string is what the script requires and logs. Without it the script refuses (verified).

Your 5-minute unblock (in order)

  1. Sign in at developer.x.com → Projects & Apps → the app the xmcp integration uses.
  2. "User authentication settings" → set App permissions to Read and write → save. (If it asks for a callback URL, http://localhost:8721/callback matches the xmcp OAuth helper.)
  3. Keys and tokens → Regenerate the Access Token and Secret (the current pair stays read-only otherwise).
  4. Update the 1Password item in the Ray Agent vault (the "X / xmcp" item): replace fields access_token and access_token_secret with the new pair. Consumer key/secret and bearer token stay as-is.
  5. Tap "Done" below — Ray re-runs the read-only access-level probe and confirms read-write before closing the ticket.

What's already built and verified

Lock in

Done — flipped + tokens updated

You completed steps 1-4. Ray verifies read-write via the read-only probe, then marks the rail live.

Done + send
Defer

Push to a date — Ray resurfaces then. Until this flip, X drafts stay drafts.

Defer + send
Archive

Kill the write rail — Ray keeps drafting, you keep posting by hand. One-line reason.

Archive + send