File Attachments
Attach files to tasks and messages — from the dashboard or directly from Claude Code via MCP. Share diffs, screenshots, specs, logs, and any other file as part of your human-agent workflow.
Overview
Attachments are files associated with a task or a message within a task. They can be added at two points: when a task is first created, or inline with any reply message. Every attachment is stored server-side and referenced by its attachment ID. Each stored file also gets a public link, which is how the dashboard downloads it and how an agent can fetch it without pulling base64 through MCP.
- Images (PNG, JPG, GIF, WebP, SVG)
- Code files (.go, .ts, .py, .diff, etc.)
- Text documents and logs
- PDFs and documents
- Any binary file
- Stored by AgentRQ, on disk or in S3
- Referenced by its attachment ID
- Filed under its workspace and task
- Public link: no sign-in to open it
- Downloadable via MCP, CLI or dashboard
- Auto-deleted after 7 days (by default)
Attaching Files from the Dashboard
The dashboard provides two places where you (the human) can attach files, with the "Attach files" button or by drag and drop. These attachments become part of the task's message thread and are visible to both you and any connected Claude Code agent.
In the "New Task" dialog, the attachment area appears below the task body field. Drag and drop files onto it, or click to open a file picker. Multiple files can be attached in one go.
- Click the attachment zone or drag files directly
- Attach multiple files in one task creation
- Files appear as attachment chips before you submit
In the task detail view, the reply box includes an attachment button (paperclip icon), or you can drop files anywhere on the task. Attach files inline with your reply — they land in the message thread alongside your text.
- Click the paperclip icon in the reply composer
- Files appear inline in the message thread
- Download links shown for each attachment
Click an attachment in the thread to preview it. Images, videos, audio and PDFs open right in the preview; other files show their name and type.
- Download saves the file under its own name
- Copy link puts the file's public link on the clipboard, to share with anyone
spec.pdf or requirements.md when creating a task for Claude.
Claude can then read it with task getAttachment
before starting work — no need to paste long documents into the task body.
Attaching Files from Claude Code
Both task create and task reply accept an optional attachments array in their payload. Each attachment object carries the
file content as base64-encoded data so it can be transmitted over the MCP protocol and
stored server-side.
Any string. The server gives the stored file its own ID, which is the one to use afterwards
Display name shown in the dashboard
MIME type (e.g. text/plain, image/png)
Full file content, base64-encoded
Example: Claude has finished reviewing code changes and wants the human to approve a diff before merging. It creates a task with the diff attached:
task {"action": "create", "payload": {
"title": "Review this diff",
"body": "I've made the changes — here's the diff for your review.",
"attachments": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"filename": "changes.diff",
"mimeType": "text/plain",
"data": "base64encodedcontent..."
}
]
}}
The same pattern works with task reply — Claude can attach
a screenshot of a test result, a generated report, or error logs as part of a progress
update:
task {"action": "reply", "payload": {
"taskId": "TASK_ID",
"text": "Tests are passing. See attached output for details.",
"attachments": [
{
"id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"filename": "test-output.txt",
"mimeType": "text/plain",
"data": "base64encodedcontent..."
}
]
}}
Files travel base64-encoded, which makes them a third larger, and a single request is capped at 4 MB. Keep the files on one task or message under about 3 MB in total.
agentrq-ws CLI takes a file path and works out
the name, type and encoding for you. attachment get
downloads a file through its public link and saves it under the name it was given, in the
OS temp directory unless you pass --out.
agentrq-ws reply TASK_ID "Build is green — log attached" --attach ./run.log
agentrq-ws task create "Review the design" --body @brief.md --attach ./mock.png
agentrq-ws attachment get ATTACHMENT_ID --task TASK_ID --out ~/Downloads
Reading Attachments
with task getAttachment
When a human attaches a file to a task or message, Claude Code sees it listed under
Attachments: with its ID, name, type and, when the
file has one, a public link. The
getAttachment action of the task MCP tool looks the ID up on the task and
its messages. By default it returns that link instead of the file, so a large PDF does not
fill the agent's context. Ask for base64 when the agent
needs the bytes.
task {"action": "getAttachment", "payload": {"attachmentId": string, "taskId": string, "format"?: "url" | "base64"}}
Returns:
{ filename, mimeType, url } // format "url" (default), when the file has a link
{ filename, mimeType, data } // format "base64", or when there is no link
// data is the file content, base64-encoded.
Clients installed before the action tools may still call createTask, reply
(with chatId) or getAttachment by their old names. Those calls still
work: the server maps each one to the matching task
action. See Old tool names.
A typical workflow: the human attaches a specification document when creating a task, and Claude reads it before beginning work.
payment-spec.pdftask getAttachment with
"format": "base64" and receives the PDF
content// The task notification lists the attachment:
// Attachments:
// - id=0jN4sT2kQ8p name=payment-spec.pdf type=application/pdf url=https://…
task {"action": "getAttachment", "payload": {"attachmentId": "0jN4sT2kQ8p", "taskId": "TASK_ID", "format": "base64"}}
// Returns:
{
"filename": "payment-spec.pdf",
"mimeType": "application/pdf",
"data": "JVBERi0xLjQKJcfsj6IK..."
}
Best Practices
- Diffs and patch files for review
- Screenshots of errors or UI states
- Test output and logs
- Specification documents and PRDs
- Config files and environment templates
- Generated reports or summaries
- Keep files small: a request is capped at 4 MB, base64 included
- Attachments are stored server-side — avoid attaching sensitive credentials
- Attachment links are public: anyone who has the link can open the file, without signing in
- Attachments are
deleted after 7 days by default. Self-hosters can change this with
AGENTRQ_APP_ATTACHMENT_RETENTION, or keep them in S3 withAGENTRQ_ARTIFACTS_STORAGE=s3 - Self-hosters: back up
the
_storagedirectory regularly - Someone with one link can work out the links of the task's other files: share a link only with someone who may see the whole task
- Images, videos, audio and PDFs preview in the dashboard. HTML, SVG and other files a browser could run always download instead of opening