Ask for it
/file src/billing/retry.ts
/file report.pdf
/file
/file takes a path (relative to the working folder, or absolute) or just a name; it finds the closest match. A bare /file lists recent files with buttons to send one.
Or just ask in plain words: "send me the diff as a file", "screenshot the dashboard and send it". The agent writes the file to its outbox and it arrives when the run finishes.
What the agent produced
Every run gets an outbox folder. Anything an agent saves there is delivered to the thread when it finishes: reports, exports, screenshots, generated PDFs, browser downloads. Both agents are told where it is at the start of every run, and it is in $TWEETYBIRD_OUTBOX for scripts.
Long replies are handled for you. Replies are split on paragraph and code-block boundaries, and a very long reply or a huge code block arrives as a file instead of a wall of messages.
From the terminal or a script
tweetybird file ./coverage/index.html "coverage after the refactor"
Sends the file to your paired phone. Useful at the end of a long job, a build script, or a scheduled task.
From your phone
Send a file or photo to the thread and it lands in the working folder. Your next message tells the agent it is there, so "use this screenshot" or "the CSV I just sent" works.
What "the report" means
When you say "send me the report", the agent resolves it from context: the file it just wrote, the file the current task is about, or the newest matching file in the repo. If it is not sure, it asks which one.
Size limits
| App | Largest file |
|---|---|
| Telegram | 49MB |
| Slack | Your workspace's upload limit |
| Discord | Your server's upload limit (25MB without boosts) |
| iMessage, WhatsApp | The app's own attachment limit |
Bigger than that, ask the agent to zip it, split it, or upload it somewhere you choose and send the link.