Human-in-the-Loop Agent Task Management for Claude Code
Docs / How-To / File Attachments
File Attachments

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 a unique UUID attachment ID.

Supported File Types
  • Images (PNG, JPG, GIF, WebP, SVG)
  • Code files (.go, .ts, .py, .diff, etc.)
  • Text documents and logs
  • PDFs and documents
  • Any binary file
Storage Model
  • Stored server-side in AgentRQ
  • Referenced by UUID attachment ID
  • Scoped to workspace (private)
  • Downloadable via MCP or dashboard
  • Persisted for the lifetime of the task

Attaching Files from the Dashboard

The dashboard provides two places where you (the human) can attach files. These attachments become part of the task's message thread and are visible to both you and any connected Claude Code agent.

1
When Creating a Task

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
2
When Replying to a Task

In the task detail view, the reply box includes an attachment button (paperclip icon). 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
Tip: Attaching Specs for the Agent
A common workflow is to attach a spec.pdf or requirements.md when creating a task for Claude. Claude can then read it with downloadAttachment before starting work — no need to paste long documents into the task body.

Attaching Files from Claude Code

Both createTask and reply accept an optional attachments array. Each attachment object carries the file content as base64-encoded data so it can be transmitted over the MCP protocol and stored server-side.

Attachment Object Schema
id string (UUID)

Unique identifier for this attachment

filename string

Display name shown in the dashboard

mimeType string

MIME type (e.g. text/plain, image/png)

data string (base64)

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:

createTask — with attachment
{
  "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 reply — Claude can attach a screenshot of a test result, a generated report, or error logs as part of a progress update:

reply — with attachment
{
  "taskId": "TASK_ID",
  "message": "Tests are passing. See attached output for details.",
  "attachments": [
    {
      "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
      "filename": "test-output.txt",
      "mimeType": "text/plain",
      "data": "base64encodedcontent..."
    }
  ]
}

Downloading Attachments with downloadAttachment

When a human attaches a file to a task or message, Claude Code can retrieve it using the downloadAttachment MCP tool. The tool searches all tasks and messages in the workspace for the given attachment ID and returns the base64-encoded file content.

Tool Signature
downloadAttachment(attachment_id: string)

Returns:
  {
    id: string,
    filename: string,
    mimeType: string,
    data: string  // base64-encoded file content
  }

A typical workflow: the human attaches a specification document when creating a task, and Claude reads it before beginning work.

Example Workflow: Human Attaches a Spec
1
Human creates task "Implement payment module" and attaches payment-spec.pdf
2
Claude receives the task notification via the MCP channel — the task body includes the attachment ID
3
Claude calls downloadAttachment("attachment-uuid-here") — receives base64-encoded PDF content
4
Claude decodes, reads the spec, and proceeds with implementation — no need for the human to paste the content manually
downloadAttachment call
// Claude calls downloadAttachment with the ID from the task
downloadAttachment("3f2504e0-4f89-11d3-9a0c-0305e82c3301")

// Returns:
{
  "id": "3f2504e0-4f89-11d3-9a0c-0305e82c3301",
  "filename": "payment-spec.pdf",
  "mimeType": "application/pdf",
  "data": "JVBERi0xLjQKJcfsj6IK..."
}

Best Practices

Good Uses for Attachments
  • 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 in Mind
  • Keep individual file sizes reasonable — large binaries slow down transfer
  • Attachments are stored server-side — avoid attaching sensitive credentials
  • Self-hosters: back up the _storage directory regularly
  • Images are displayed inline in the dashboard for quick review