1# Messages and context
2
3Give the agent a task in the composer. Add files, quote a previous response, or
4include a skill when the task needs more context.
5
6Messages can contain up to 120,000 characters. Longer drafts stay in the composer
7so you can shorten them or split them into several messages.
8
9Pasting 32 KiB or more of text adds that fragment as a text-file attachment so
10the agent can inspect it without filling the model context. A smaller paste also
11becomes an attachment when inserting it would exceed the message limit. On a
12hardware keyboard, use `Cmd+Shift+V` on Apple devices or `Ctrl+Shift+V` elsewhere
13to keep a large paste editable in the composer instead.
14
15## Formatting
16
17The composer writes Markdown and shows it styled as you type. When your cursor
18is on styled text, its Markdown shows instead, such as `**bold**`, and the
19markers edit like any other text: delete them to remove the style, or change
20`**` to `*` for italic. The style updates when your cursor leaves. To write
21plain Markdown with no styling, turn off **Settings → Chat → Rich text
22composer**. Lines starting with `- `, `1. `, `- [ ] `, `> `, `# ` or `---`
23become lists, task lists, quotes, headings and rules; ` ``` ` followed by Enter
24opens a code block. What you typed is what the agent receives, markers and
25numbering included, and `#1234` without a space still looks up a pull request.
26
27Some styled text containing or touching literal Markdown characters, such as a
28bold `path\` or `2*3`, keeps its styling without showing markers. Use formatting
29shortcuts or turn off rich text to edit the formatting of those ranges.
30
31Enter sends. In a list or quote, **Shift+Enter** continues it, and Shift+Enter
32on an empty line moves out one level, then leaves it; **Tab** nests a list item
33under the one above and **Shift+Tab** moves it back out. In a code block, Enter
34starts a new line at the current indentation, **Tab** and **Shift+Tab** indent
35the selected lines, and a closing ` ``` ` followed by Enter, or two blank lines
36at the end, leave the block. **Backspace** at the start of a code block turns it
37back into plain lines. Choose the language in a code block's corner to change
38it. Very large code blocks are shown without syntax highlighting.
39
40## Attach files
41
42Attach up to 100 files per message. Each image can be up to 10 MiB, with at most
4380 MiB of images in one message. Other files, including videos, can be up to
4450 MiB each, subject to the environment's upload support and limit. The agent
45receives them on the environment's machine. Provider and model limits still
46apply, including images already in the conversation. A video attachment gives
47the agent a file path; only [Antigravity](./providers-antigravity.md#skills-and-attachments)
48sends supported videos to Gemini models as video.
49
50Uploads begin when you add an attachment. All uploads must finish before the
51message can send. Retry or remove a failed upload. On web and desktop, reloading
52before an upload finishes requires you to attach that file again.
53
54You can drag or paste images into the web or desktop composer. HEIC and HEIF
55photos are converted to JPEG there and when selected from the mobile photo
56library; photos over the image limit are also resized to fit. On mobile, you can
57also send files to T3 Code through another app's system share sheet.
58On Android, you can also drag images from another app into the message input
59in split screen.
60
61See [images and videos](#images-and-videos-in-messages) for previewing and saving media.
62
63## Send while the agent is working
64
65On web and desktop, choose **Settings → Chat → Follow-up behavior** to queue
66new messages for a later turn or steer the running turn immediately. The setting
67applies to this client; already queued messages keep their place. Queued messages
68are saved on the server and can be edited or removed before they send.
69When Enter sends, `Cmd+Enter` on macOS or `Ctrl+Enter` on Windows and Linux uses
70the opposite action: it steers when your default is Queue and queues when your
71default is Steer.
72If your **Send shortcut** requires `Cmd+Enter` or `Ctrl+Enter`, that shortcut uses
73your default follow-up behavior; add **Shift** to use the opposite action. This
74applies only to multiline messages when you choose the multiline send option.
75
76Use `Cmd+Shift+Enter` on macOS or `Ctrl+Shift+Enter` on Windows and Linux to send
77the oldest queued message as a steer. This leaves the current draft intact and
78requires an active turn that supports steering. If that shortcut sends the opposite
79action for your draft, move focus outside the composer to steer the queued message. Change
80`thread.steerQueuedMessage` in **Settings → Keybindings** to use another shortcut.
81
82Press `Option+Up` on macOS or `Alt+Up` on Windows and Linux with the cursor at the
83start of the composer to edit the most recently queued message. Change
84`thread.editQueuedMessage` to use another shortcut.
85
86Mobile has the same choice under **Settings → Chat**. While a turn is
87running the send button shows which action it will take. Long-press it to use the
88other action for a single message. From a hardware keyboard, `Cmd+Return`
89(`Ctrl+Return` on Android) uses the other action, or `Cmd+Shift+Return`
90(`Ctrl+Shift+Return`) when Return inserts a new line. The button only offers
91Steer when the running agent supports it.
92
93## Queue messages offline on mobile
94
95Mobile keeps local copies of draft attachments, so you can preview them and queue
96messages while disconnected. Uploads resume when you reconnect. Drafts and queued
97messages survive app restarts. Signing out of T3 Connect keeps that work on your
98device until you sign back into the same account.
99
100## Custom models
101
102On web and desktop, use Settings → Providers → **Models** to add an unlisted model with a custom
103name and options. Only options supported by the provider integration affect turns. Antigravity
104uses its account catalog and does not support custom models.
105
106To rename a built-in model on every client, edit the server's `settings.json` in its `userdata`
107directory. Add a custom model entry with the built-in model ID and a new name under that provider
108instance:
109
110```json
111{
112 "providerInstances": {
113 "codex": {
114 "driver": "codex",
115 "config": { "customModels": [{ "slug": "gpt-5.5", "name": "Team GPT" }] }
116 }
117 }
118}
119```
120
121## Model defaults
122
123T3 Code remembers your provider, model, and model options for new threads. A
124project's configured model takes precedence; resetting that project setting
125returns to the remembered selection.
126
127Leaving reasoning level or service tier unset uses the provider's own configuration.
128
129## Quote an assistant response
130
131On web and desktop, select text within one assistant response and choose
132**Cite in composer**. You can add a comment about the quote and write instructions
133around it.
134
135Select the quote in a draft or sent message to return to its source. If the source
136is unavailable or has changed, the saved quote remains readable.
137
138The chip shows your comment when it has one, or a short quote preview otherwise. Use the pencil
139button to add or change the comment. To remove the citation, place the caret beside its chip and
140delete it like other inline context. Copying, reloading, and restoring a
141[stashed prompt](#prompt-stash) keep each comment
142with its quote, and sending tells the agent which words were quoted and which comment you wrote.
143The quoted text and comment count toward the message limit.
144
145Mobile displays saved quotes and comments, but does not create citations or
146navigate to their sources.
147
148## Recall a sent prompt
149
150Press `ArrowUp` in an empty composer to bring back the last prompt you sent in this thread. Press
151`ArrowUp` again to go further back, and `ArrowDown` to come forward. Moving forward past the newest
152prompt clears the composer. Recall walks the prompts loaded in the thread. Attachments, terminal
153context, and other extras from the original message are not restored, only the text you typed. A
154composer that holds an attachment or a picked element does not count as empty.
155
156When the composer has text, the arrow keys move the caret as usual. Recall takes over only while
157the text is an unedited recalled prompt, with the caret on the first visual line for `ArrowUp` or
158the last visual line for `ArrowDown`, counting wrapped lines. Editing a recalled prompt turns it
159into a normal draft.
160
161## Suggested next prompt
162
163Turn on **Suggest next prompt** in Settings > Labs. After a Claude or Codex turn completes, the
164empty composer shows a predicted next message. Press `Tab` to fill it in, then edit or send it, or
165press `Escape` to dismiss it. Each suggestion is one extra request that reuses the turn's prompt
166cache, so it uses a little of your plan's usage. Claude skips suggestions on the first turn of a
167thread and near usage limits. Codex needs version 0.165 or later; if T3 Code manages
168Codex, update it in Settings > Providers. Codex follows a change to the setting at once; open Claude
169threads follow it after they restart. Suggestions show on web and desktop.
170
171## Edit an earlier prompt
172
173On web and desktop, choose **Edit from here** beneath a sent message to rewind
174the conversation to before that message. Choose **Revert and keep changes** to
175leave workspace files as they are, or **Revert files too** to put the workspace back
176to its checkpoint from before that message. That also undoes edits you made yourself.
177File restore is only offered for threads running in a worktree, and it is
178refused when another thread or agent session also uses that directory, a folder
179inside it, or a folder that contains it, since
180restoring would erase their changes. A thread that works in the project directory
181rewinds the conversation only. The selected prompt and its attachments return to the composer for editing and
182resending. Any unsent draft stays above the restored prompt.
183
184This removes the selected message and later conversation from the active thread
185and provider history. It does not undo external actions or separate provider
186memory. The action is available only when the provider supports rewind.
187
188## Prompt stash
189
190On web and desktop, press `Cmd+S` on macOS or `Ctrl+S` on Windows and Linux to save
191the current prompt and its attachments for later. Wait for uploads to finish first.
192With an empty composer, the same shortcut restores a single stash or opens the
193stash menu when there are several.
194
195Stashes containing uploaded files must be restored in their original environment.
196Those files are retained for 24 hours. After an upload expires, restore the prompt
197and use **Attach again** or remove the missing file before sending.
198
199## Voice input on web and desktop
200
201Use the composer's microphone or `mod+shift+d` to dictate into your draft. Audio
202is transcribed on an environment you choose in **Settings → Voice**; nothing is
203sent until you choose one. See [Voice input](./voice-input.md).
204
205## Voice input on mobile
206
207Use the composer's microphone to record, then confirm to transcribe. Text is
208inserted where your selection was when recording started, ready for you to review
209and edit before sending.
210
211By default, audio stays on the phone. Local transcription needs a supported iPhone
212with iOS 26 or later, or Android 12 or later with compatible Google speech services.
213To use a paired environment instead, open **Settings → Voice → Transcribe on**,
214choose the environment, and confirm. Finished recordings go only to that environment,
215even when a draft belongs to another one. This also works on phones without local
216speech recognition. If the chosen environment disconnects, dictation stops; it never
217switches hosts. Choose **This device** to revoke access and discard pending audio.
218For [cloud dictation](./voice-input.md#choose-where-audio-goes), open **Cloud providers**
219under the environment in **Settings → Voice** and confirm which provider may receive recordings.
220On Android, keep T3 Code open while recording and transcribing.
221
222On-device dictation may need a network connection to download a speech model the
223first time. After that it works offline for that language. iPhone dictates in the
224first of your preferred languages (**Settings → General → Language & Region**)
225that Apple’s speech model supports. If none is supported, it tries the app’s
226language. Android transcribes on the device while you
227record and finishes after you stop. Recordings can be up to five
228minutes long. Canceling or an audio interruption discards the recording and
229preserves your existing draft. Navigating to another screen keeps dictation active;
230use the floating controls to finish or cancel. While recording, the screen stays
231awake; it can sleep normally once recording stops.
232
233Choose a preferred order in **Settings → Voice**. Voice input requests the first
234connected microphone in the list. The list mixes kinds (built-in, other wired, other
235Bluetooth, and CarPlay on iOS) with wired and Bluetooth devices you have dictated
236with, listed by name. Drag to rank them together:
237for example, put **Other Bluetooth** above your AirPods so a new headset is preferred
238while the AirPods microphone stays low. By default, CarPlay comes after the built-in
239microphone on iOS. Swipe a device left to forget it. Android may use another input
240when the preferred microphone cannot be routed. Devices with the same name may share
241a saved preference, but simultaneous same-name inputs remain separately selectable.
242
243T3 Code deletes the temporary recording from your phone after transcription or
244cancellation. The transcript stays in your draft until you send the message to the agent.
245
246## Queued messages
247
248On web and desktop, the composer shows **Interrupt** while the agent is working and the draft is
249empty. Adding text or attachments replaces it with a send button that shows your
250[Follow-up behavior](#send-while-the-agent-is-working): a queue icon for Queue or a steer arrow for
251Steer. Click it or press your send shortcut to use that action. Hold `Cmd` on macOS or `Ctrl` on
252Windows and Linux to switch the button to the opposite action, then click, or use the opposite-action
253shortcut described above.
254
255On web and desktop, queued messages appear at the end of the thread as dashed messages that have
256not been sent yet. On mobile they appear above the composer. Each shows its text and any attached
257images. **Send now** sends a message right away, into the running turn if there is one. You can
258also edit or remove it.
259
260If you stop the agent or the server restarts, queued messages keep their order and are held.
261Press **Resume** in an empty composer to continue. **Resume** also continues a stopped
262run or one that hit a usage limit, even with nothing queued. Sending a new message also resumes the queue, unless it steers a turn that is already
263running. You can edit or remove held messages without starting them.
264
265The pencil on a queued message opens it in the composer for editing. The original message
266stays in the queue until you save, and it is highlighted while you edit. The message's
267attachments appear above the text with a remove control, and new images can be added the usual way.
268The checkmark saves the queued message in place; **Cancel** next to it leaves it unchanged. Whatever
269you had typed in the composer before starting the edit is restored afterwards. If the queued
270message starts or is removed while you are editing, the edit ends: changed content moves into the
271composer when it is empty, and is discarded otherwise.
272
273## Commands and skills
274
275Type `/` for commands or `$` to add a skill from the selected environment and
276provider. On mobile, both are also available before starting a thread on
277**New task**.
278
279The slash menu also includes skills unless you turn off **Settings → Chat →
280Show skills in slash menu**, under Advanced. Only skills enabled for the provider are listed.
281
282After you add or change skills, plugins, or MCP servers, use **Restart agent
283session** in the command palette on web and desktop. The conversation continues,
284and your next message starts the agent again with the new setup.
285
286Provider commands must start the message to run. T3 Code commands such as
287`/model` and skill mentions work on any line.
288
289Send `/compact` in an existing conversation to reduce context usage when the
290provider supports it.
291
292Send `/clear` on its own, or pick it from the slash menu, to start a fresh session
293in the same thread. Your next message goes to a new provider session that doesn't see the
294earlier messages, and the thread marks where it began with **New session**.
295Earlier messages and diffs stay in the thread. Dismiss the notice above the
296composer to keep the current session instead.
297
298On web and desktop, turn on **Context window** in **Settings → Appearance →
299Thread details** to see context usage in the thread details card. It appears
300once the provider reports usage.
301
302Claude instances can also compact idle threads for you. See
303[compact long conversations](./providers-claude.md#compact-long-conversations).
304
305## Goals
306
307With Codex, Claude, and OpenCode 2.2.5 or later, send `/goal` followed by what "done" means, for example
308`/goal all tests in packages/api pass`. The agent keeps working across turns
309until it judges the goal met. The thread shows **Goal** while it works, and a
310line at the end of the thread (above the composer on mobile) shows the goal and
311its progress.
312
313- `/goal` alone shows the current goal. `/goal clear` removes it.
314- Codex and OpenCode also support `/goal pause` and `/goal resume`. Stopping
315 their goal pauses it. Codex also pauses when its work ends without meeting the goal.
316- Stopping Claude ends the current turn, but the goal stays set. Claude checks it
317 again at the end of your next message.
318- Sending a new goal, or `/goal resume`, while the agent works stops the current
319 turn and starts the goal, unless you queue it. `/goal clear` and `/goal pause`
320 stop the turn only when it is working on the goal. Other goal commands wait for
321 the turn to end.
322
323## Context in your message
324
325Context you attach lands where your cursor is, as a chip inside your text: a terminal excerpt,
326a review comment from a diff or file, a preview annotation, or a file. You can type before and
327after a chip, move it by cutting and pasting, and delete it like a character. Hover a chip for
328its brief details. Select a terminal excerpt to open its captured output, or select a review
329comment, picked element, or preview annotation to open its full details. Chips read as "Terminal
330excerpt, Terminal 1 lines 3-4" and similar to screen readers.
331
332A pull request appears as its icon and number. Its color reflects whether it was open, draft,
333merged, or closed when it was attached. Select it to inspect the captured title and branches,
334then choose **Open pull request** to visit the pull request. On web and desktop, type `#` to browse the newest
335pull requests in the current project's repository. Pull requests linked to the thread are included
336from any repository and listed first, after any exact number match. Continue typing digits to filter the recent list
337by any part of its pull request numbers. A complete number is also resolved directly, even when that
338pull request is older than the recent list. Type a single word after `#` to search pull requests in
339the repository by text. Choose a result to insert it as a chip.
340
341Another thread can be context too. Type `@` followed by part of its title to pick one from
342the same server, or from a machine it links to while the Linked environments beta is on; those
343show the machine's name. On web and desktop you can also drag a thread out of the sidebar and
344drop it on the composer; a multi-selection drops together. On any client, **Copy thread** copies a
345link to the thread that pastes into a composer as its chip. The chip shows the thread's
346current title and opens it when selected. Your prompt only carries a reference: the agent reads the thread's
347history on demand, so attaching a long thread costs nothing until the agent looks. Attaching a
348thread does not change it, and the agent cannot send messages to it unless you ask.
349
350A thread from a linked machine, picked, pasted or dropped, stays a reference that the agent reads
351on that machine. A pasted link to a thread on any other machine stays a link. Dropping a thread
352from any other environment attaches a saved transcript file. The source
353environment must be connected and up to date. The transcript includes the visible history and
354saved text context at the time of the drop; later messages and the contents of attached files
355are not copied. The agent can read the saved transcript after the source disconnects. Normal
356file attachment limits apply.
357
358Type `@` and part of a model or provider name, such as `@opus`, to name that model for the
359agent, for example when delegating. It does not change the thread's model. Join words with
360`:`, `/` or `-`, as in `@opus:opencode`.
361
362Images keep their thumbnail shelf above the text and also get a chip at your cursor, so you can
363say exactly which image you mean. Deleting an image chip leaves the image on the shelf; removing
364the thumbnail asks first when the image is still mentioned in your text, then removes both. Files
365exist only as chips: deleting a file's last chip removes the file from the message.
366
367Copy text that holds chips and paste it into another draft, in the same thread or another one,
368and the chips come along with what they point to. Images and files are fetched again from the
369environment they came from; while that happens the chip shows a dashed outline, and if it cannot
370complete T3 Code tells you and leaves the chip for you to remove or replace. A chip whose
371context is no longer available shows the same dashed outline; hover it for what to do.
372
373Copying a message with the copy button, or copying text out of it, gives other apps readable
374Markdown with a link in place of each chip. Older messages that were sent before chips still
375show their context. Stashing a prompt keeps its chips and what they point to; restoring brings
376them back.
377
378On mobile, tap a chip to inspect its content. File references open the current file; attached
379files show the copy that was attached to the message.
380
381## Attached files
382
383Select a file chip in your draft or a sent message to preview it. Code and JSON use syntax
384highlighting; Markdown, HTML, CSV, and TSV offer rendered and raw views. Audio files have
385playback controls. Large text files show a limited preview; save the file to read it in full.
386
387On web and desktop, files open beside the conversation with the same controls as a workspace
388file: a header row with the view toggle, **Copy contents** and **Save file**. On mobile, documents
389open in the same file screen as workspace files; its menu holds **Copy contents**, **Save or
390share** and **Open in file viewer**. Pictures, videos and PDFs keep their native viewers, and
391other document formats such as Word or Pages open in the device's own viewer when it has one.
392If nothing on the device can show a format, save or share it to open it elsewhere. A ZIP up to
39350 MB opens as a folder list on every surface; on mobile, select a file inside it to preview,
394save, or add it to chat.
395
396## Images and videos in messages
397
398Select an image or video attachment or link to preview it. Playback support depends
399on your browser or device; save an unsupported video to open it in another app.
400
401On web and desktop, right-click media to save it or copy its path or URL. On mobile,
402touch and hold an image or video thumbnail and choose **Save or share**. On iOS,
403return to the thumbnail to open this menu after watching a full-screen video.
404
405File links refer to the environment's machine, including when you connect remotely.
406Previews use the original file, even outside the workspace. Moving or deleting it
407can break the preview, so save a copy if you need to keep it.
408
409## Files outside the workspace
410
411Follow an agent's file link to read a report or other file outside the workspace.
412These files open read-only. An HTML file outside the workspace cannot load scripts,
413styles, or images from neighboring files.
414
415## HTML and PDF files in the file viewer
416
417On web and desktop, HTML and PDF files open as rendered pages. Switch an HTML
418file to source view to read its markup; a link to a specific line opens source
419automatically. HTML previews cannot access your T3 Code session.
420
421The file viewer recognizes images, HTML, and PDF files by their filename extension,
422including filenames or folders containing `#` or `?`.
423
424On mobile, select a PDF attachment or link to open it. iOS uses the native viewer;
425Android opens a compatible installed file viewer.