Skip to content

Compose dock & file attachments ​

The web and desktop shells show a right-hand compose dock when the agent edits files or drafts email. You can also attach any file type to the chat composer (not only images).

Compose dock ​

When the harness streams a compose-related tool, the UI opens the dock immediately:

TriggerDock shows
write_file / edit_fileLive file content (compose_preview + tool_delta)
gmail_* / outlook_* composeHTML or plain email preview
StreamingContent updates until tool_result; panel can persist through turn_end

Email HTML is sanitized the same way as send path (extract <body>, no raw monospace HTML dump).

Implementation:

  • Web: compose rail in packages/web/client/
  • Desktop: compose dock in apps/liminal_desktop/lib/ui/

See Rich message rendering for assistant-side HTML/markdown (separate from the compose dock).

Chat file attachments ​

Drag, drop, or paste files into the message composer on web and desktop. Attachments are persisted under:

text
<workspace>/.agent_artifacts/uploads/

The agent receives paths it can pass to read_file, vision tools (images), or email attach fields.

Limits (defaults) ​

From DEFAULT_CHAT_ATTACHMENT_LIMITS in packages/core/src/chat_attachments.ts:

LimitValue
Max images4
Max non-image files8
Max total attachments12
Max image size4 MB each
Max file size25 MB each
Max total payload64 MB

Images may also flow through the vision path ( ```attached_images block). Non-image files are referenced by workspace path in the user turn.

Wire protocol ​

  • Web: POST /api/message with attachments[] (data URLs). See Web API.
  • Desktop: send_message over @liminal/protocol WebSocket with the same attachment shape.

Audio clips use a separate upload path — see Voice.

Receipt workflow ​

The inbox watcher can persist receipt attachments from mail into the workspace for bookkeeping flows (packages/core/src/receipt_workflow.ts). See Inbox watcher.

Liminal AI · Beta docs (v0.1.2) · Marketing: vireondynamics.com/liminal · Compare: vireondynamics.com/liminal/compare