Give the agent a task in the composer. Add files, quote a previous response, or include a skill when the task needs more context.
Messages can contain up to 120,000 characters. Longer drafts stay in the composer so you can shorten them or split them into several messages.
Pasting 32 KiB or more of text adds that fragment as a text-file attachment so
the agent can inspect it without filling the model context. A smaller paste also
becomes an attachment when inserting it would exceed the message limit. On a
hardware keyboard, use Cmd+Shift+V on Apple devices or Ctrl+Shift+V elsewhere
to keep a large paste editable in the composer instead.
The composer writes Markdown and shows it styled as you type. Markers such as
** stay in the text and show beside the styled words when your cursor is on
them. Lines starting with - , 1. , - [ ] , > , # or --- become lists,
task lists, quotes, headings and rules; ``` followed by Enter opens a code
block. What you typed is what the agent receives, markers and numbering
included, and #1234 without a space still looks up a pull request.
Enter sends. In a list or quote, Shift+Enter continues it, and Shift+Enter
on an empty line moves out one level, then leaves it; Tab nests a list item
under the one above and Shift+Tab moves it back out. In a code block, Enter
starts a new line at the current indentation, Tab and Shift+Tab indent
the selected lines, and a closing ``` followed by Enter, or two blank lines
at the end, leave the block. Backspace at the start of a code block turns it
back into plain lines. Choose the language in a code block's corner to change
it. Very large code blocks are shown without syntax highlighting.
Attach up to 100 files per message. Each image can be up to 10 MiB, with at most 80 MiB of images in one message. Other files, including videos, can be up to 50 MiB each, subject to the environment's upload support and limit. The agent receives them on the environment's machine. Provider and model limits still apply, including images already in the conversation. A video attachment gives the agent a file path; only Antigravity sends supported videos to Gemini models as video.
Uploads begin when you add an attachment. All uploads must finish before the message can send. Retry or remove a failed upload. On web and desktop, reloading before an upload finishes requires you to attach that file again.
You can drag or paste images into the web or desktop composer. HEIC and HEIF photos are converted to JPEG there and when selected from the mobile photo library; photos over the image limit are also resized to fit. On mobile, you can also send files to T3 Code through another app's system share sheet. On Android, you can also drag images from another app into the message input in split screen.
See images and videos for previewing and saving media.
The paperclip also attaches a GitHub issue (see Attach a GitHub issue), a Linear issue once you connect Linear (see Linear), and a Slack message or thread once you connect Slack (see Slack), a Discord message or thread once you connect Discord (see Discord), a Notion page once you connect Notion (see Notion), and a Granola meeting note once you connect Granola (see Granola).
On web and desktop, choose Settings → Chat → Follow-up behavior to queue
new messages for a later turn or steer the running turn immediately. The setting
applies to this client; already queued messages keep their place. Queued messages
are saved on the server and can be edited or removed before they send.
When Enter sends, Cmd+Enter on macOS or Ctrl+Enter on Windows and Linux uses
the opposite action: it steers when your default is Queue and queues when your
default is Steer.
If your Send shortcut requires Cmd+Enter or Ctrl+Enter, that shortcut uses
your default follow-up behavior; add Shift to use the opposite action. This
applies only to multiline messages when you choose the multiline send option.
Use Cmd+Shift+Enter on macOS or Ctrl+Shift+Enter on Windows and Linux to send
the oldest queued message as a steer. This leaves the current draft intact and
requires an active turn that supports steering. If that shortcut sends the opposite
action for your draft, move focus outside the composer to steer the queued message. Change
thread.steerQueuedMessage in Settings → Keybindings to use another shortcut.
Press Option+Up on macOS or Alt+Up on Windows and Linux with the cursor at the
start of the composer to edit the most recently queued message. Change
thread.editQueuedMessage to use another shortcut.
Mobile has the same choice under Settings → Chat. While a turn is
running the send button shows which action it will take. Long-press it to use the
other action for a single message, or hold Cmd while sending from a hardware
keyboard. The button only offers Steer when the running agent supports it.
Mobile keeps local copies of draft attachments, so you can preview them and queue messages while disconnected. Uploads resume when you reconnect. Drafts and queued messages survive app restarts. Signing out of T3 Connect keeps that work on your device until you sign back into the same account.
On web and desktop, use Settings → Providers → Models to add an unlisted model with a custom name and options. Only options supported by the provider integration affect turns. Antigravity uses its account catalog and does not support custom models.
To rename a built-in model on every client, edit the server's settings.json in its userdata
directory. Add a custom model entry with the built-in model ID and a new name under that provider
instance:
{
"providerInstances": {
"codex": {
"driver": "codex",
"config": { "customModels": [{ "slug": "gpt-5.5", "name": "Team GPT" }] }
}
}
}T3 Code remembers your provider, model, and model options for new threads. A project's configured model takes precedence; resetting that project setting returns to the remembered selection.
Leaving reasoning level or service tier unset uses the provider's own configuration.
On web and desktop, select text within one assistant response and choose Cite in composer. You can add a comment about the quote and write instructions around it.
To quote more of the conversation, drag the selection from one message to another. The citation includes everything in between: your messages and the agent's tool calls as well as its responses. Tool calls can't be selected as text, so shift-click one to add it. Shift-clicking a tool call on its own cites just that call, and with text selected it extends the quote to the call. Keep shift-clicking tool calls or messages to move where the quote ends, then choose Cite at the bottom of the conversation. Press Escape or click elsewhere to start over.
Select the quote in a draft or sent message to return to its source. If the source is unavailable or has changed, the saved quote remains readable.
The chip shows your comment when it has one, or a short quote preview otherwise. Use the pencil button to add or change the comment, then Send to send the message straight away or Save to keep writing. The button remembers which you used last. To remove the citation, place the caret beside its chip and delete it like other inline context. Copying, reloading, and restoring a stashed prompt keep each comment with its quote, and sending tells the agent which words were quoted and which comment you wrote. The quoted text and comment count toward the message limit.
To use the quote somewhere else, pick a destination on the left of the comment panel before sending. It starts on This thread. New thread starts a thread with the quote as its first message, or Save opens one with the quote in its composer. It uses this thread's project and model unless you change them on the page New thread opens; another project starts at that project's root rather than this thread's checkout. Choosing another thread sends the quote there, queueing it if that thread is busy and you queue follow-ups. Save adds it to that thread's composer instead, and Save as draft keeps it there to send later. You stay where you are, and the confirmation has Open to go to the destination. Hovering a quote that came from another thread shows which thread it came from.
Mobile displays saved quotes and comments, but does not create citations or navigate to their sources.
Press ArrowUp in an empty composer to bring back the last prompt you sent in this thread. Press
ArrowUp again to go further back, and ArrowDown to come forward. Moving forward past the newest
prompt clears the composer. Recall walks the prompts loaded in the thread. Attachments, terminal
context, and other extras from the original message are not restored, only the text you typed. A
composer that holds an attachment or a picked element does not count as empty.
When the composer has text, the arrow keys move the caret as usual. Recall takes over only while
the text is an unedited recalled prompt, with the caret on the first visual line for ArrowUp or
the last visual line for ArrowDown, counting wrapped lines. Editing a recalled prompt turns it
into a normal draft.
On web and desktop, choose Edit from here beneath a sent message to rewind the conversation to before that message. Choose Revert and keep changes to leave workspace files as they are, or Revert files too to put the workspace back to its checkpoint from before that message. That also undoes edits you made yourself. File restore is only offered for threads running in a worktree, and it is refused when another thread or agent session also uses that directory, a folder inside it, or a folder that contains it, since restoring would erase their changes. A thread that works in the project directory rewinds the conversation only. The selected prompt and its attachments return to the composer for editing and resending. Any unsent draft stays above the restored prompt.
This removes the selected message and later conversation from the active thread and provider history. It does not undo external actions or separate provider memory. The action is available only when the provider supports rewind.
On web and desktop, press Cmd+S on macOS or Ctrl+S on Windows and Linux to save
the current prompt and its attachments for later. Wait for uploads to finish first.
With an empty composer, the same shortcut restores a single stash or opens the
stash menu when there are several.
Stashes containing uploaded files must be restored in their original environment. Those files are retained for 24 hours. After an upload expires, restore the prompt and use Attach again or remove the missing file before sending.
Save a message in a thread to send later. Right-click the send button (long-press on mobile) and choose Save as draft. The message, its attachments, and its context chips are kept with the thread on the server, so a draft saved on desktop also shows on your phone and in any browser connected to the same environment.
A thread's drafts sit above its composer. Open moves a draft into the composer for editing; if the composer already has text, that text is saved as a draft first. Send sends it straight away, queueing or steering the same way the send button would. Threads with drafts show a count in the sidebar.
The same menu appears on every send button: citation comments, pull request and diff comments,
plan follow-ups, and a queued message you are editing, which can be moved back to drafts. It
also offers the button's other actions, such as Steer now while a turn runs. On web and
desktop, the command palette has Save message as draft, and you can bind
composer.saveDraft to a key in Settings → Keybindings. A new thread's
composer has no Save as draft, because an unsent new thread is already kept as a draft.
Agents can create, send, and delete drafts through the t3_draft_* MCP tools, for example to
leave a follow-up for you to review.
On supported iPhones with iOS 26 or later, use the composer's microphone to record, then confirm to transcribe. Text is inserted where your selection was when recording started, ready for you to review and edit before sending.
Voice input depends on Apple's on-device speech transcription. On a device without it, the composer has no microphone button and Settings → Microphone says voice input isn't available.
The first use may download Apple's speech model and needs a network connection. Later transcription works offline for that language. Recordings can be up to five minutes long. Canceling, leaving the screen, or an audio interruption discards the recording and preserves your existing draft. While recording, the screen stays awake; it can sleep normally once recording stops.
Voice input records from the first connected microphone in Settings → Microphone. The list mixes kinds (built-in, other wired, other Bluetooth, CarPlay) with wired and Bluetooth devices you have dictated with, listed by name. Drag to rank them together: for example, put Other Bluetooth above your AirPods so a new headset is preferred while the AirPods microphone stays low. By default, CarPlay comes after the built-in microphone. Swipe a device left to forget it.
Transcription runs on your device. T3 Code deletes the temporary audio after transcription or cancellation; only the message text is sent when you submit.
On web and desktop, the composer shows Interrupt while the agent is working and the draft is
empty. Adding text or attachments replaces it with a send button that shows your
Follow-up behavior: a queue icon for Queue or a steer arrow for
Steer. Click it or press your send shortcut to use that action. Hold Cmd on macOS or Ctrl on
Windows and Linux to switch the button to the opposite action, then click, or use the opposite-action
shortcut described above.
On web and desktop, queued messages appear at the end of the thread as dashed messages that have not been sent yet. On mobile they appear above the composer. Each shows its text and any attached images. Send now sends a message right away, into the running turn if there is one. You can also edit or remove it.
If you stop the agent or the server restarts, queued messages keep their order and are held. Press Resume in an empty composer to continue. Resume also continues a stopped run 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 running. You can edit or remove held messages without starting them.
The pencil on a queued message opens it in the composer for editing. The original message stays in the queue until you save, and it is highlighted while you edit. The message's attachments appear above the text with a remove control, and new images can be added the usual way. The checkmark saves the queued message in place; Cancel next to it leaves it unchanged. Whatever you had typed in the composer before starting the edit is restored afterwards. If the queued message starts or is removed while you are editing, the edit ends: changed content moves into the composer when it is empty, and is discarded otherwise.
Type / for commands or $ to add a skill from the selected environment and
provider. On mobile, both are also available before starting a thread on
New task.
The slash menu also includes skills unless you turn off Settings → Chat → Show skills in slash menu, under Advanced. Only skills enabled for the provider are listed.
After you add or change skills, plugins, or MCP servers, use Restart agent session in the command palette on web and desktop. The conversation continues, and your next message starts the agent again with the new setup. To restart a chat tab, use the same item in the tab's menu or the sidebar's right-click menu; on mobile it is in the tab switcher.
Provider commands must start the message to run. T3 Code commands such as
/model and /plan, and skill mentions, work on any line.
Send /compact in an existing conversation to reduce context usage when the
provider supports it. Web and desktop also offer compaction from the context meter.
When reported context reaches 80%, a notice offers the available compaction action;
web and desktop can also continue from a summary in a new tab. On mobile, Use /compact
puts the command into an empty composer for you to send. Dismiss the notice to hide it
until reported usage falls below 80%. Mobile remembers dismissal while that thread view stays open.
Thread usage shows processed tokens separately from context usage. A + means the
main-turn total is incomplete. Reported subagent tokens are listed separately. A cost
appears only when the provider reports it, as a subtotal of reported session costs
in each currency. Sessions without cost reports are excluded; this is not a
subscription bill or an estimate based on model prices.
Claude instances can also compact idle threads for you. See compact long conversations.
With Codex and Claude, send /goal followed by what "done" means, for example
/goal all tests in packages/api pass. The agent keeps working across turns
until it judges the goal met. The thread shows Goal while it works, and a
line at the end of the thread (above the composer on mobile) shows the goal and
its progress.
/goalalone shows the current goal./goal clearremoves it.- Codex also supports
/goal pauseand/goal resume. Stopping a Codex goal pauses it, and so does Codex ending its work without meeting the goal. - Stopping Claude ends the current turn, but the goal stays set. Claude checks it again at the end of your next message.
- Sending a new goal, or
/goal resume, while the agent works stops the current turn and starts the goal, unless you queue it./goal clearand/goal pausestop the turn only when it is working on the goal. Other goal commands wait for the turn to end.
Reference a folder that is already on disk, or link it to the thread so later turns include it.
Type # and a folder name, and pick it from the Checkouts tab. Or choose Checkout from the
paperclip menu (the + menu on mobile). The list is project roots and T3 worktrees this
environment already knows, plus any path you paste. It does not search the disk.
Enter inserts a chip for this message. Command-Enter (Control-Enter on Windows and Linux) also links the checkout to the thread. The picker has the same choice. Linked checkouts are listed in Thread Details, where you can open, unlink, or locate one whose folder has moved. Unlinking stops later turns from including it and leaves earlier messages as they were.
A checkout on another connected machine is listed and cannot be selected. Claude is given the folder for the turn. Other providers receive the path in the message.
Give the agent another repository's source to read by attaching it: choose Repository from the
paperclip menu (the + menu on mobile), or Attach repository in the command palette. Add the
GitHub organizations and users you work with in Settings > Threads > Repository owners so the
list opens ready; owners higher in that list come first, and a repository name more than one owner
has shows its owner, like api (acme). Type another-org/ to list a different owner, or paste owner/repo or a clone URL. The list notes repositories already cloned
into this thread's workspace, with their branch and how far behind they are.
On web and desktop you can also type # and a repository's name in your message, then pick it from
the # menu's Repositories tab. #my-repo searches your repository owners and #another-org/repo
searches that owner. A name with a hyphen or slash opens the Repositories tab straight away; for a
one-word name, switch to the tab.
When you send, T3 Code clones each attached repository into the workspace's .context/ folder
before the agent starts. The folder can be changed in Settings > Threads > Repository folder.
On a new worktree the clone is a step of the setup progress. A repository that is already there is
left as it is and not pulled. A folder that belongs to something else is never overwritten. If a
clone fails, the agent still starts. Select the chip in the sent message to see what happened, and
the agent is told the same thing. Clones use the server machine's git and gh credentials, and
are not tracked by the workspace's own git.
To delete clones you no longer need, open the project's Settings > Worktrees on web or desktop and remove them under Context repositories. The confirmation warns about unpushed commits or changed files. Removal is refused while a turn in that checkout is running or waiting on you.
Context you attach lands where your cursor is, as a chip inside your text: a terminal excerpt, a review comment from a diff or file, a preview annotation, or a file. You can type before and after a chip, move it by cutting and pasting, and delete it like a character. Hover a chip for its brief details. Select a terminal excerpt to open its captured output, or select a review comment, picked element, or preview annotation to open its full details. Chips read as "Terminal excerpt, Terminal 1 lines 3-4" and similar to screen readers.
A pull request appears as its icon and number. Its color reflects whether it was open, draft,
merged, or closed when it was attached. Select it to inspect the captured title and branches,
then choose Open pull request to visit the pull request. On web and desktop, type # to browse the newest
pull requests in the current project's repository. Pull requests linked to the thread are included
from any repository and listed first, after any exact number match. Continue typing digits to filter the recent list
by any part of its pull request numbers. A complete number is also resolved directly, even when that
pull request is older than the recent list. On web, desktop, and mobile, numeric lookup also
checks repositories attached to the thread and repositories with a linked pull request. The
suggestions name the repository so matching numbers remain easy to tell apart. Type a single word after # to search pull requests in
the repository by text. Choose a result to insert it as a chip. To attach several at once, Cmd-click
(Ctrl-click on Windows and Linux) each one, across any of the # menu's tabs, then press Enter.
The # menu opens on the tab it expects you want: #ENG-123 or a Linear team key like #ENG opens
Linear issues, a path opens checkouts, #owner/repo opens repositories, and an empty # opens the
tab you insert from most. A folder name that matches a local checkout opens Checkouts.
Items you inserted recently are listed first and match as you type, without waiting for a search.
On web and desktop, pasting or typing a link to a Linear issue, project, document, or initiative, a GitHub issue, a pull request, a
GitHub repository, a Notion page, a Granola note, or a Slack or Discord message turns the link into the same chip attaching it would make. A T3 Code prompt link becomes a chip named after its prompt; hover it to read the prompt without decoding the URL. A GitHub release, branch, tag, or commit link becomes a chip such as repo@v1.2.0; the agent receives the release notes or the commit message, and hovering the chip shows them. Hovering any of these links in a message, including one an agent wrote, shows the same card its chip would. A typed link
converts when you type a space or new line after it. While the item loads, the link shows as a
dashed chip named from the link, such as owner/repo#162; Backspace removes it. The full chip
replaces it once the item loads, even if you switch threads meanwhile; sending or saving a draft waits until it does. A link to one comment on a pull request attaches that comment, with the replies before it
when it is part of a review thread. In the attach menu's pull request picker, right-click a pull
request and choose Attach a comment… to pick one of its comments instead. A link T3 Code tries and cannot read, or that takes more than 20 seconds to load, becomes a red
broken-link chip: a Linear issue or Slack message before you connect that service, or a pull request
comment the host does not return, rather than attaching the whole pull request in its place. The
agent receives the link itself. Hover the chip to see why, then choose Retry or Keep as
text. A link T3 Code does not try stays as text: one whose integration is turned off, or a pull
request from a host none of your projects is checked out from. Paste with
Cmd+Shift+V (Ctrl+Shift+V elsewhere) to keep a link as text. A link you turn back into text
with undo, or whose chip you delete, is not converted again as you keep typing.
Pasting a file path, or several on separate lines, turns each into a file chip, the same as
picking it with @. This works for paths outside the project too, such as /tmp/notes.md. A
paste that has other text around the path stays as text, as does one made with Cmd+Shift+V.
Another thread can be context too. Type @ and switch to the Chats tab to pick one from
the same server, newest first, or a linked machine, named in the list, or type part of its title (the menu opens on Chats when no file
matches), or on web and desktop drag a thread out of the sidebar and drop it on the
composer; a multi-selection drops together. The chip shows the thread's current title and
opens it when selected. Your prompt only carries a reference: the agent reads the thread's
history on demand, so attaching a long thread costs nothing until the agent looks. Attaching a
thread does not change it, and the agent cannot send messages to it unless you ask.
Agents a thread started can be attached too. Each agent has an @handle made from its title,
shown next to it in the Agents panel, its detail view and its own thread. Type @ and switch to
the Agents tab, or keep typing a handle, to pick one. Hover a row or the chip to preview the
agent. You can also right-click an agent and choose Attach to chat, Alt-click it in the
Agents panel, or use Attach to parent chat from the agent's own thread. The chip carries the
agent's task and result, and the agent you are talking to learns how to reach it. It can send follow-ups to agents T3 Code delegated
and to Claude subagents it started itself. Other providers' subagents cannot take messages, so they
come along as their task and result.
You can name a model in your message, such as the one subagents should use. Type @ and
switch to the Models tab, or keep typing a model's name (@grok, @opus), to pick one; the
buttons under the tabs narrow the list to one provider. On web and desktop you can also choose
Model from the attach (paperclip) menu, including in the desktop quick message composer. Click
the chip to set its effort, fast mode or other
options; the chip shows them as a brain with the effort's initial, a bolt and the context size.
Hovering the chip shows exactly what you asked for and when, and it never changes after you send.
The agent receives the provider instance, model and options in the form T3 Code's delegate_task
tool takes, so it can start subagents on that model directly.
Copy thread puts a thread on the clipboard that pastes into a composer as its chip. A thread from a linked machine stays a reference read on that machine. Dropping a thread from any other environment attaches a saved transcript file. The source environment must be connected and up to date. The transcript includes the visible history and saved text context at the time of the drop; later messages and the contents of attached files are not copied. The agent can read the saved transcript after the source disconnects. Normal file attachment limits apply.
Images keep their thumbnail shelf above the text and also get a chip at your cursor, so you can say exactly which image you mean. Deleting an image chip leaves the image on the shelf; removing the thumbnail asks first when the image is still mentioned in your text, then removes both. Files exist only as chips: deleting a file's last chip removes the file from the message.
Copy text that holds chips and paste it into another draft, in the same thread or another one, and the chips come along with what they point to. Images and files are fetched again from the environment they came from; while that happens the chip shows a dashed outline, and if it cannot complete T3 Code tells you and leaves the chip for you to remove or replace. A chip whose context is no longer available shows the same dashed outline; hover it for what to do.
Copying a message with the copy button, or copying text out of it, gives other apps readable Markdown with a link in place of each chip. Older messages that were sent before chips still show their context. Stashing a prompt keeps its chips and what they point to; restoring brings them back.
On mobile, tap a chip to inspect its content. File references open the current file; attached files show the copy that was attached to the message.
Select a file chip in your draft or a sent message to preview it. Code and JSON use syntax highlighting; Markdown, HTML, CSV, and TSV offer rendered and raw views. Audio files have playback controls. Large text files show a limited preview; save the file to read it in full.
On web and desktop, files open beside the conversation with the same controls as a workspace file: a header row with the view toggle, Copy contents and Save file. On mobile, documents open in the same file screen as workspace files; its menu holds Copy contents, Save or share and Open in file viewer. Pictures, videos and PDFs keep their native viewers, and other document formats such as Word or Pages open in the device's own viewer when it has one. If nothing on the device can show a format, save or share it to open it elsewhere. A ZIP up to 50 MB opens as a folder list on every surface; on mobile, select a file inside it to preview, save, or add it to chat.
Select an image or video attachment or link to preview it. Playback support depends on your browser or device; save an unsupported video to open it in another app.
On web and desktop, right-click media to save it or copy its path or URL. On mobile, touch and hold an image or video thumbnail and choose Save or share. On iOS, return to the thumbnail to open this menu after watching a full-screen video.
File links refer to the environment's machine, including when you connect remotely. Previews use the original file, even outside the workspace. Moving or deleting it can break the preview, so save a copy if you need to keep it.
Follow an agent's file link to read a report or other file outside the workspace. These files open read-only. An HTML file outside the workspace cannot load scripts, styles, or images from neighboring files.
On web and desktop, HTML and PDF files open as rendered pages. Switch an HTML file to source view to read its markup; a link to a specific line opens source automatically. HTML previews cannot access your T3 Code session.
The file viewer recognizes images, HTML, and PDF files by their filename extension,
including filenames or folders containing # or ?.
On mobile, select a PDF attachment or link to open it. iOS uses the native viewer; Android opens a compatible installed file viewer.
File links in chat open T3's file viewer by default. In Settings → Browser → Open in,
select one environment to choose another default or add rules for extensions such as .md.
Right-click a file link and choose Open in T3 file viewer to preview it without changing
its default.
Add a custom application with a name, executable command, and optional arguments, one per line.
Choose an Icon to identify it in the workspace Open button and picker; use Folder (default)
to restore the default icon. T3 appends the file path automatically. For Typora on macOS, use open
as the command and enter -a and Typora on separate argument lines, then save a .md rule
targeting Typora.
You can edit or remove an application later; removal resets its file rules to the default and
its default selection to the T3 viewer.
On macOS and Linux, turn on Run in my shell to use a shell function or alias, such as one
defined in your .zshrc. T3 runs the command in your interactive login shell and passes the
arguments and path to it unchanged.
Applications open on the computer hosting the file, including when you connect remotely. Custom applications are also available from the workspace Open in picker and file Open with menus. The workspace Open button uses your most recent pick on each device; choose an application under Workspace Open button to always use it instead. Mobile keeps its native file viewer.