OPENPROGRAM / ATTACHMENT FEATURE DISCUSSION

Five attachment features and selected options

The five features reflect your recorded choices. Each comparison retains current OpenProgram behavior and alternatives, with the selected option marked. This document covers attachment use in the existing desktop and web interfaces.

Chinese

All panels illustrate behavior; they are not product screenshots. Framework labels indicate verified similarities in processing, not identical UI or retention. “Selected” marks the feature design you confirmed, not an implemented app capability.

Composer attachments: images and files in one row

Redesigning the composer shown in the supplied screenshots: images no longer occupy a separate row, and document tiles lose their empty space. All items share one height and follow insertion order, with a name, format, and size.

New visual proposal, not implemented. These HTML illustrations use example filenames and sizes; controls are not live uploads. The five selected processing rules remain unchanged.

Image, PDF, and spreadsheet together

Same height, insertion order, and information structure
▣ Local▱ fzkuji
Screenshot 2026-09-09 at 3.43.11 PM.png
PNG · 1.3 MB
Scholarships and Financial Aid Records.pdf
PDF · 842 KB
Annual Report 2026.xlsx
XLSX · 126 KB

Use the screenshot and both files to list the application materials.

+
Ask permissionsCurrent model · Medium

Images use a 40 × 40 thumbnail. Each item is about 248 × 60, allowing images and documents side by side. Format remains visible even when a filename is truncated.

More attachments wrap as one group

Insertion order, without type grouping
▣ Local▱ fzkuji
Screenshot 2026-09-09 at 3.43.11 PM.png
PNG · 1.3 MB
Scholarships and Financial Aid Records.pdf
PDF · 842 KB
Annual Report 2026.xlsx
XLSX · 126 KB
sales.csv
CSV · 18 KB
project/
FOLDER · Folder

Check these materials for missing items.

+
Ask permissionsCurrent model · Medium

Reading and failure states stay on the affected item

Item height stays unchanged
▣ Local▱ fzkuji
Screenshot 2026-09-09 at 3.43.11 PM.png
PNG · 1.3 MB
Annual Report 2026.xlsx
XLSX · 126 KB · Reading…
report.pdf
PDF · 842 KB · Read failed

Summarize the key information in these files.

Cannot read report.pdf. Add it again or remove it.

+
Ask permissionsCurrent model · Medium

Appearance and interaction

Issue in the screenshotsProposed change
Images and files occupy separate regionsOne compact group in insertion order
Oversized images and mostly empty document tiles32 px icons/thumbnails and 46 px item height
Wrapping filenames and inconsistent format labelsSingle-line names, separate format and size

Image proposals assume a model that supports image input. Current OpenAI Responses handling may remove image content for a model without that capability, with no automatic tool fallback. The proposed behavior should prompt a model switch, or explicitly use a configured image tool and explain that processing.

01

Paste a screenshot

Should the model see the image immediately or ask a tool to open it?

Paste a screenshot — Selected option and reference
Previous OpenProgram behavior

Today: send and save the image

OpenProgramIllustration
After adding · Composer
Image preview

What does this error mean?

After sending · How the model uses it
Full image sent to vision-capable models; large input can be rejected
Reopening later: Image saved, but failed submission may leave no visible message

Outgoing images are not resized to model requirements; failure can clear input.

Based on current source; illustration labels are not existing UI copy. Source
Current behavior, for comparison
Selected design

A · See the image and save it with chat

OpenProgramIllustration
After adding · Composer
Image · Saved with chat

What does this error mean?

After sending · How the model uses it
Model receives image content; resize only when needed
Reopening later: Reopen the chat to view the same screenshot

Keep direct image input; add image processing and reliable send confirmation.

Codex / OpenCode share direct image input; retention is not established as identical. Source

Your choice is recorded; request changes in chat.

Alternative for reference

B · Save it for on-demand tool reading

OpenProgramIllustration
After adding · Composer
Screenshot file · Not yet read

What does this error mean?

After sending · How the model uses it
Assistant gets a path, then invokes an image tool
Reopening later: Keep a chat copy and open it when needed

Defers image reading but requires a tool step; unavailable tools prevent analysis.

Alternative proposed here; not verified as the default pasted-image flow in these tools.

Selected: A · See the image and save it with chat. Acceptance status is listed at the end of this page.

02

Drag in an existing image

With a vision-capable model, both options send image content; the choice is whether to copy the original.

Drag in an existing image — Selected option and reference
Previous OpenProgram behavior

Today: retain a source path and a copy

OpenProgramIllustration
After adding · Composer
comparison.png · Image preview

Compare the two versions in this image.

After sending · How the model uses it
Image content goes directly to vision-capable models
Reopening later: Retain source path and automatically save an attachment copy for previews

There is currently no user choice about copying.

Based on current source; illustration labels are not existing UI copy. Source
Current behavior, for comparison
Alternative for reference

A · Reference the original; copy on request

OpenProgramIllustration
After adding · Composer
Reference original · comparison.png

Compare the two versions in this image.

After sending · How the model uses it
See the image now; do not copy the original by default
Reopening later: Moving or deleting the original may prevent reopening

Offer “Save a copy to chat”; later reads reflect edits to the original.

Codex public terminal supports local image input; its complete retention policy is unverified. Source
Selected design

B · Always save a chat copy

OpenProgramIllustration
After adding · Composer
Copy saved · comparison.png

Compare the two versions in this image.

After sending · How the model uses it
See the image immediately
Reopening later: View the sent version even if the original changes or disappears

Keep automatic copying, but make the version used for viewing and analysis explicit; uses extra storage.

OpenProgram already saves automatically; this adds explicit version selection. Source

Your choice is recorded; request changes in chat.

Selected: B · Always save a chat copy. Acceptance status is listed at the end of this page.

03

Drag in text, code, or data

Pass a path by default, or include the text as soon as it is attached?

Drag in text, code, or data — Selected option and reference
Previous OpenProgram behavior

Today: path, head preview, and a copy

OpenProgramIllustration
After adding · Composer
sales.csv · File attachment

Calculate monthly sales totals.

After sending · How the model uses it
Source path + head text; read the rest as needed
Reopening later: The uploaded file also gets a saved copy

Existing local files are uploaded and saved too; this is not a path-only reference.

Based on current source; illustration labels are not existing UI copy. Source
Current behavior, for comparison
Selected design

A · Reference it and read for the task

OpenProgramIllustration
After adding · Composer
Reference original · sales.csv

Calculate monthly sales totals.

After sending · How the model uses it
Read sales.csv → calculate from relevant data
Reopening later: Read current original contents by default; copying is optional

No automatic upload, copy, or text inclusion. Report missing files clearly.

Codex public terminal inserts a path for ordinary file selection; similar behavior. Source

Your choice is recorded; request changes in chat.

Alternative for reference

B · Include the text directly

OpenProgramIllustration
After adding · Composer
Include content · sales.csv

Calculate monthly sales totals.

After sending · How the model uses it
The current request includes the file text
month,sales Jan,1200 Feb,1800
Reopening later: Record the supplied text; this is not a copy of the original file

Avoids an initial read; suits short files. Long input needs a limit or on-demand reading.

OpenCode V2 includes the contents of supported text attachments. Source

Selected: A · Reference it and read for the task. Acceptance status is listed at the end of this page.

04

Drag in PDF, Word, or Excel

Let the assistant choose a reading tool, or prepare a preview automatically?

Drag in PDF, Word, or Excel — Selected option and reference
Previous OpenProgram behavior

Today: save files; preview some formats

OpenProgramIllustration
After adding · Composer
report.pdf · Document attachment

Summarize the conclusions of this report.

After sending · How the model uses it
PDF may yield first-page text and an outline; tools read the rest
Reopening later: Retain source path and automatically save the upload

Binary Word / Excel files do not automatically become readable text; extraction may yield no preview.

Based on current source; illustration labels are not existing UI copy. Source
Current behavior, for comparison
Selected design

A · Reference it, then choose how to read

OpenProgramIllustration
After adding · Composer
Reference original · report.pdf

Summarize the conclusions of this report.

After sending · How the model uses it
Assistant chooses pages, paragraph extraction, or spreadsheet analysis
Reopening later: No default copy; save one to retain a fixed version

No automatic parsing on attach. Explain missing tools or unreadable scans.

Codex ordinary-file paths are the reference; this does not imply native support for every format. Source

Your choice is recorded; request changes in chat.

Alternative for reference

B · Prepare a preview, then read further

OpenProgramIllustration
After adding · Composer
report.pdf · Partial text extracted

Summarize the conclusions of this report.

After sending · How the model uses it
Start with extracted text; scan handling can use page recognition
Read: page 1 Not read: remaining pages
Reopening later: Local files may remain references; uploads need storage

Convenient but adds processing time. Show partial reads and failures; not every format is supported.

OpenClaw has extraction and configured scan fallback; OpenProgram already provides some PDF previews. Source

Selected: A · Reference it, then choose how to read. Acceptance status is listed at the end of this page.

05

Drag in a folder

Provide only the folder path, or include its immediate listing?

Drag in a folder — Selected option and reference
Previous OpenProgram behavior

Today: folder drop is unverified

OpenProgramIllustration
After adding · Composer
project/ · Not interaction-tested

Find the code responsible for sign-in.

After sending · How the model uses it
Current drop handling operates on file lists
Reopening later: This does not establish a working folder attachment flow

No dedicated directory handling was found; this illustrates an evidence gap, not an actual error screenshot.

Based on current source; illustration labels are not existing UI copy. Source
Current behavior, for comparison
Alternative for reference

A · Add the folder path

OpenProgramIllustration
After adding · Composer
Reference folder · project/

Find the code responsible for sign-in.

After sending · How the model uses it
List directory → locate relevant files → read
Reopening later: Later reads use the folder’s current contents

No recursive copy or upload; the task determines what gets read.

Proposed option; no unverified folder-drop behavior is attributed to another tool.
Selected design

B · Include the immediate listing

OpenProgramIllustration
After adding · Composer
project/ · Immediate listing

Find the code responsible for sign-in.

After sending · How the model uses it
Model sees immediate entries, then opens files as needed
src/ tests/ README.md
Reopening later: The message retains listing text, not a copy of the folder

Avoids an initial listing call; deeper files still need inspection.

OpenCode V2 directory attachments include a non-recursive listing. Source

Your choice is recorded; request changes in chat.

Selected: B · Include the immediate listing. Acceptance status is listed at the end of this page.

Rules shared by all scenarios

Does the image need processing?

Process the sending version using known model requirements and preserve an available original. Use explicit rules for unknown limits; not every model exposes them.

Keep input after failure

Keep text and attachments until confirmed. Explain upload, read, or send failures; check the previous result after a disconnect to avoid duplicates.

Will the sent version remain available?

References are affected by edits, moves, and deletion. A saved copy preserves the version; listings and text excerpts are not original-file copies.

Recorded choices

The first five choices are saved in this document and persist on reload. This records design only and does not change the app.

Framework evidence and current implementation

OpenProgram file handling

When a file is added through the web interface, the backend receives and saves it for the assistant to read. The desktop interface references ordinary files at their original paths. Images retain a chat copy. Users add a file and state their task; they do not choose between upload and path handling.

Adding files · Storage and previews

Codex: public terminal behavior, not desktop UI

Verified: ordinary file selection inserts a path, decodable images become image input, and clipboard images are written to temporary PNG files. This does not establish the desktop app’s complete long-term copying policy. Copy controls and status labels in the panels are OpenProgram proposals.

File selection · Clipboard images · Official image guide · Image preparation

OpenCode V2

Supported text attachments include their text; directories include an immediate listing; PNG/JPEG/GIF/WebP become image media. SVG is text; PDF, audio, video, and other binary attachments currently do not directly enter model requests. Server-accessible files can be referenced. Configurable resizing does not guarantee compliance with every model.

Official attachment guide

OpenClaw

Channel media is downloaded to the runtime. Vision-capable primary models can receive images; other configurations can generate descriptions. Documents can yield text, with configured page-image fallback for scanned PDFs. Tool handoff requires an accessible saved path. Channel reception is not treated as equivalent to local desktop drag-and-drop.

Media reception · Document and media understanding

Evidence and development notes

How current OpenProgram behavior differs

The current upload flow saves ordinary files too; path-only reference is not the current default. Image thumbnails do not resize outgoing images. Full image encoding counts toward the execution-input limit and can be rejected before the user message is saved. The composer clears before durable confirmation, which can leave a chat with only a title.

The target chat log records oversized input. The full original request is unavailable, so the responsible field is not established. A minimal local request reproduced image encoding exceeding the execution-input limit without a model call.

Handle chat persistence, image delivery, and file reading separately. Shrinking every image to fit the execution-input limit is insufficient; copying every local file should not become the default fix. Treat attachment text as supplied material, not automatically as new user instructions.

Attachment storage and message submission · Execution-input checks · Composer submission

Limits of image-processing and retention evidence

Public Codex code supports several image-processing modes selected by capabilities and configuration. A utility’s default dimension is not every model’s limit. OpenCode’s configurable resizing does not guarantee compliance with every model. OpenClaw channel reception limits are not universal model limits.

Temporary storage, upload to a runtime, and long-term chat retention are different promises. Retention periods not established by the sources are not inferred here. Image copies are selected for OpenProgram; implementation must specify copy handling for chat deletion, export, and migration in development notes.

Codex image preparation · Codex image input

Compact queued messages and attachment editing

Messages waiting for the current turn are grouped immediately above the composer, outside the scrolling transcript. Each message keeps its own compact bubble, previewable attachments, delivery status, Edit and Remove actions. The group has a bounded height and can collapse to a message count. It does not merge message identity or order.

Queue submission captures text, expanded paste content, attachment bytes or original paths, and send settings. Attachments can be queued without starting another execution. A queue editor holds that message until Save or Cancel; it supports text, file picking, file drop, previews and individual attachment removal. Save retains the queue position and original settings; Cancel keeps the previous payload. In-flight or receipt-pending steering commands cannot be edited or removed. Attachment messages wait for a normal turn because the steer API accepts text only.

Draining uses the ordinary chat sender and attachment envelope. Transport failure or rejection keeps the complete queued message; acceptance releases it. Queue content remains local to this open App window and is not promised to survive a reload. Unsent previews use captured local content, including native paths outside the session workdir: images and text render directly, and bounded PDF files use a local Blob URL. Native documents remain path references when sent; preview bytes do not widen backend file access. Persisted attachments retain the existing read-only document viewer. Missing or unsupported previews report their limitation without discarding the attachment.

User messages in the transcript retain individual identity, controls and bubbles with reduced vertical spacing. History editing retains its existing fork-and-resend semantics. This change does not delete persisted history, change model behavior, combine separate instructions, or modify approval decisions.

Reference and choices

The user's Codex interaction description is the layout reference: retained messages near the input with a small footprint. Existing OpenProgram queue, composer attachment processing and DocumentWindow are the implementation reference. No undocumented Codex storage or editing behavior is assumed. A bounded group is adopted; merging instructions and transferring queued files through text-only steering are rejected.

Acceptance and implementation status

Verify through composer submission that mixed attachments remain previewable in the queue, editing and removal affect only the chosen message, editing blocks drain, send failure retains bytes, and ordered draining uses the exact edited payload. Verify native App queue positioning, compact spacing, preview dismissal and session isolation. The implementation uses QueuedMessages in the composer, attachment snapshots in the existing send queue, a transient instance of the shared attachment editor, and local attachment previews. Release requires independent specification and quality review, the full verification manifest, and installed-App acceptance; evidence is recorded separately.