Uploading & Previewing Files
How to upload files into the Hub or attach them to a chat message, what formats are supported, and how previews work.
Uploading to a workspace
In an open workspace, click Upload (or drag files onto a workspace tile in the Hub) to add a file as an artifact. You can drop files directly onto a workspace card in the Hub, or use the file picker from inside a workspace.
Each file is checked before upload:
- Supported types: text (
.txt,.md,.csv,.json,.js,.ts,.tsx,.html,.css,.yaml,.xml), images (.png,.jpg,.gif,.svg),.pdf,.docx/.doc,.xlsx/.xls. Unsupported types (e.g..pptxin the Hub) are rejected with a message naming the file. - Size limit: files over 40 MB are rejected before upload, with a clear error naming the oversized file and its actual size.
- Integrity check: binary files are checked against their expected file signature — a renamed or corrupted file (e.g. a
.txtfile renamed to.png) is rejected rather than silently uploaded.
The same 40 MB limit applies to the Hub upload paths — the workspace file picker and drag-and-drop onto a workspace tile — and it is enforced again below the UI (at the app's internal boundary and on the server) rather than only in the interface. Binary files are encoded for transfer, which makes them about a third larger than on disk; the 40 MB file limit is set so that an accepted file always fits within the server's request limit once encoded, instead of failing partway through the upload.
Chat attachments have a tighter limit (see below), because an attached file is sent to the AI model along with your message.
A second, larger limit — 54 MB of transferred content — bounds what is sent rather than what is on disk, so you may occasionally see it named instead of the 40 MB one. Text files are the case where the two can disagree: a text file is converted to a standard encoding on upload, and characters outside plain English can take more space afterwards than they did on disk, so a file that passed the 40 MB check can exceed the transfer limit. The error names the actual transferred size, so the amount to trim is always visible.
If a file fails any of these checks, or fails to upload for another reason, an error message naming the file and the reason appears — uploads are never silently dropped. In a multi-file upload each file is attempted independently: one rejected file does not cancel the others, and every failure is reported by name.
File names longer than 255 characters
A file name over 255 characters — the limit operating systems themselves put on a file name, so it is rare — does not block the upload — the file is
stored under a shortened name instead, keeping its extension (so
a-very-long-name….xlsx stays an .xlsx file and still previews and downloads
correctly). A message names any file this happened to, so the name you see in
the artifact list is never a surprise.
Renaming an artifact in the Hub is held to the same 255-character limit, and the rename box says "Name cannot exceed 255 characters." once you reach it. Other names — workspaces, teams, connector account labels — stay at 100 characters.
Attaching files to a chat message
Click the paperclip icon in the chat input, or drag a file onto the chat panel, to attach it to your next message. Chat attachments accept the same formats as the Hub, but are limited to about 15 MB per message in total, since they are sent to the AI model with your message. To work with a larger file, upload it to a workspace and ask about it by name.
There is also a 15.3 MB total limit per message, since every attachment travels inside the one message you send. If you attach more than that, the files that fit are attached and the rest are skipped with a message naming them — send those in a follow-up message instead.
PDFs and images share a separate combined limit of 100 pages and images per message — a limit of the AI model itself, not of Cosmo, and counted across PDF pages and images together rather than per file. Attaching, say, a 90-page PDF plus 15 photos goes over it even though neither alone would. If your attachments would put you over this limit, an error appears stating the total and the 100 allowed; remove a few large attachments, or send the rest in a separate message.
When you send a message with an attachment:
- Text files are inlined directly into the message.
- Word/Excel files (
.doc,.docx,.xlsx,.xls) have their text extracted and inlined, so the assistant can read and reference the content. - Images and PDFs are sent as-is so the assistant can view them directly.
Attachments in a long conversation
Images and PDFs are large, and a chat request carries the whole conversation so far. To keep long conversations working, the app keeps an image or PDF fully in view for the turn you attach it in and for a short while after, then replaces older ones with a reference to the saved artifact.
This is invisible in normal use: every chat attachment is also saved as an artifact in the workspace, so the assistant can re-open any earlier file on its own when it needs to look again. The practical effect is that a conversation with many attachments keeps working instead of failing once enough files have accumulated.
If a file could not be saved to the workspace — you are chatting outside a workspace, or the save failed — the app tells you so when you send it. The file still goes to the assistant with that message and it can read it there, but because there is no saved copy to point at, the assistant will not be able to open it again later in the conversation. Re-attach it if you need it again.
When a conversation gets too large to send
A very long conversation, especially one with several attachments, can eventually outgrow how much the AI model can read in a single request. If that happens, sending your next message shows an error near the message box instead of failing silently or partway through a reply:
- With an attachment in that message — "This conversation is too large to include the attached file. Start a new conversation and try again." The attachment on its own is fine; it's the conversation around it that's grown too big.
- Without one — "This conversation is too large to send. Please remove some attachments and try again."
Either way, your message is not lost or partially sent — start a new conversation, or trim older attachments from this one, and try again.
Previewing artifacts in the Hub
Opening an artifact in the Hub renders it inline:
- Images display directly.
- PDFs render in an embedded viewer.
- Word documents render as formatted HTML.
- Excel spreadsheets render as a table per sheet, with a tab strip to switch between sheets.
- CSV files render as a table.
- Markdown files (
.md) render as a formatted document — headings, lists, tables and links. HTML inside a markdown file is never run, and images are shown as links rather than loaded, so opening a document never contacts a server you didn't choose to visit. - Plain text and code files render as-is.
Spreadsheet and CSV previews
Both render as scrollable tables with a sticky header row and row numbers down the left.
- Delimiters are detected, so a
.csvthat is actually semicolon-, tab- or pipe-separated (Excel writes;in locales where,is the decimal separator) still renders as columns rather than one column of raw text. - Large files are capped at 2,000 rows and 200 columns per sheet. When a file is bigger than that, a note under the table says how much you're seeing — for example "Showing 2,000 of 84,120 rows". Download the file to work with all of it.
- Rows with missing trailing values still line up with their column headings.
Files that can't be previewed
Word/Excel parsing happens outside the browser-facing part of the app, so opening an untrusted spreadsheet or document for preview doesn't run parsing code in the same process that renders the rest of the UI. Spreadsheet previews go one step further: the app sends cell text to the interface, never generated markup, so nothing inside a spreadsheet can affect how the page behaves.
If a spreadsheet can't be opened, the placeholder says which of these it was, rather than implying the format is unsupported:
- Password-protected — remove the password and upload it again.
- Damaged — try re-saving it from Excel.
- Not actually a spreadsheet — a file renamed to
.xlsxisn't read as one. - Too large to open safely — the file's contents expand far beyond its stored size.
Formats with no inline preview at all (e.g. PowerPoint) show "Preview not available" and name the format. In every case the file is still stored and downloadable as an artifact.