Tweety Bird
Install

Docs

Permission policy

What runs unattended and what waits for a tap. The default table, and editing it per repo.

How approvals reach your phone

Claude Code and Codex each have their own permission system. Tweety Bird plugs into both: every permission request either agent raises comes to your Mac's Tweety Bird first. It checks the repo's policy. If the policy says it can run, it runs with no message. If not, your phone gets the request with the command or the diff and three buttons:

  • Approve runs it this once.
  • Deny stops it, and the agent is told you said no.
  • Always runs it now and approves the same command in this repo from then on.

On apps without buttons, reply "yes", "no", or "always". Only a paired account can approve. A request with no answer for 30 minutes is denied.

The three modes

ModeWhat runs on its ownWhat waits for your tap
askReads: files, search, git status and log, listing.Every edit, every command, every network call.
safe (default)Reads, tests, lint, builds, local edits, branch pushes and PRs, browsing.Money, prod, messaging, deletes, publishing, secrets.
openEverything.Nothing. Only for repos where that is truly fine.

What "safe" always holds for your tap

  • Deletes: rm -r, rm -f, patches that delete files, git reset --hard, git clean -f, git branch -D, destructive SQL (DROP, TRUNCATE, DELETE FROM).
  • Prod and publishing: pushes to main, master, production, or release, force pushes, npm publish, Vercel, Netlify, Wrangler, gcloud, AWS, Fly, Heroku deploys, kubectl and helm changes, terraform apply, docker push, gh pr merge, gh release create.
  • Money: anything touching Stripe, PayPal, Braintree, or Plaid. In the browser, clicks and typing on buttons or fields labelled pay, buy, checkout, send, post, delete, and similar.
  • Messaging people: mail, Twilio, iMessage, Slack and Discord webhooks, Telegram bot calls.
  • Everything with elevated reach: sudo, curl | sh, POST, PUT, PATCH, or DELETE with curl, keychain access, unloading launch agents.

Change it per repo

From the thread, in the repo you want to change:

/policy          shows the current mode and what each one means
/policy ask
/policy safe
/policy open

Policy is stored per working folder. The default for new folders is safe.

How each agent is run

  • Claude Code runs headless with Tweety Bird as its permission-prompt tool, so each permission request is routed through the policy above.
  • Codex runs through its app server with its sandbox on (read-only in ask, workspace-write otherwise) and asks before leaving the sandbox. Those requests go through the same policy.

The flag we do not use

Tweety Bird never runs an agent with --dangerously-skip-permissions or Codex's bypass flag. A phone bridge running with that flag turns every text into unrestricted code execution on your Mac. open mode is the closest thing, it is per repo, and you choose it on purpose.