Tweety Bird
Install

Docs

Team admin

Seats, repos, per-repo policy, the admin view, and pinning memory to your own storage.

Seats

Team is $149 a month for five seats, $25 a month for each seat after that, and every seat includes two Macs. Buy it on the pricing page; the admin gets one team license key on the welcome page.

Installing across the team

  1. The admin shares the team key with each teammate.
  2. Each teammate runs npx tweetybird --license TEAM-KEY on their own Mac and pairs their own phone with their own bot. Every Mac that activates takes one machine slot.
  3. Then, on each Mac, tweetybird team join --name "Priya". The first Mac to join becomes the admin (the buyer, usually). Everyone else joins as a teammate.
  4. When the team is full, the next join says so. /billing adds seats or machines. The admin can free a departing teammate's seat from the phone with /admin revoke <machine>.

One memory per repo, across the team

Put a repo on the team from inside it: tweetybird team add in the terminal, or /team add in the thread. Any teammate can add or remove a repo. Memory is keyed on the repo's git remote, so everyone working on github.com/you/billing-api shares one memory for it, whatever the folder is called on their machine. What Priya's Codex settles at 9, Marcus's Claude knows at 10.

A repo you do not add stays personal. Its memory is keyed to you (both of your Macs share it), teammates' agents never see it, and nothing about it reaches the admin view. /team shows whether the current repo is on the team.

Per-repo policy

The admin sets a repo's policy once and it applies to every teammate's agents: /admin policy billing-api ask from the phone, or tweetybird team policy billing-api ask. Modes are ask, safe, and open; see Permission policy. Teammates' Macs pick up changes within 10 minutes, and a team policy wins over anything set locally. Repos without a team policy use each Mac's own /policy.

The admin view

Text /admin from the admin's phone (or run tweetybird team report). It shows, for the last 24 hours (/admin 72 for more):

  • Every unattended run on a team repo: scheduled prompts and runs started from the CLI, which repo, whose Mac, done or failed.
  • Every permission prompt on a team repo and who tapped yes, no, or always. Timeouts show as denied.
  • Every memory entry written today, by which agent, for which person. Conversation turns are counted, not shown.

The admin does not see anyone's phone thread. Runs you start from your own phone stay personal; only unattended runs, approvals, and memory entries on team repos are reported. Revoke a Mac with /admin revoke <machine>; it stops taking prompts at its next sync.

Your own storage

Team plans can pin the team's memory to a bucket you control. Any S3-compatible bucket works: AWS S3, Cloudflare R2, Backblaze B2, MinIO. The admin runs, once:

tweetybird team storage set --endpoint https://ACCOUNT.r2.cloudflarestorage.com \
  --region auto --bucket acme-agent-memory \
  --access-key-id KEY --secret-access-key SECRET
tweetybird team storage test

From then on every memory entry written on a team repo, from any teammate's Mac, is also written to your bucket as JSON (one object per entry, under tweetybird/<repo>/<date>/). The bucket credentials are encrypted on the admin's Mac with a key derived from the team license key and travel to teammates' Macs in that form; Tweety Bird's servers store only ciphertext. tweetybird team storage clear turns it off.

Any teammate can export everything as markdown at any time with tweetybird memory export --all.