Use a new thread for a separate task. Choose New worktree when its code changes need a separate branch and working directory.
Enable Environment pause button in Settings → LastCode for each environment where you want it. It is off by default. The sidebar control pauses only the environment running on this computer, so you can take it offline. To pause a remote environment, use its control in Settings → Connections. Each control shows that environment's own pause state. On mobile, use Connections.
If this computer also runs a WSL environment, pause it separately in Connections before taking the computer offline.
Confirm to send “pause to go offline” to that environment's active threads. The dialog counts down while the agents finish pausing and other thread work stops. If new work starts while you wait, choose Pause remaining threads to include it.
Automatic thread wake-ups are blocked until you resume, including after reconnecting or restarting. PR watches also stop polling while paused. Scheduled tasks keep their usual missed-run policy when you return.
Once the environment is quiet, leave the dialog available until you return, then choose Resume to send “resume” to the threads that received the pause request. You can reopen the dialog after closing it or reconnecting. Failed deliveries remain available to retry. A thread archived or deleted before receiving Pause no longer blocks the dialog once its work stops. Deleted or archived threads cannot receive Resume.
On web and desktop, a new thread keeps the current project and carries your model and mode selections, unless the destination project has its own model default. Its branch and workspace mode come from your configured defaults. To continue in an existing worktree, use New thread in this worktree from the branch toolbar.
When you change a new thread's project, T3 Code stays in the current environment if that project exists there. Otherwise it selects an environment that has it.
A thread does not need a project. To start one without a project, click or
start without a project under a new thread's heading, pick No project from
the project menu in that heading or from New thread in... in the command
palette, or press mod+alt+n. On mobile, pick No project from the project
list. It starts on your current machine; before sending, pick another machine
from the machine menu to move it there. To move a draft into a project, pick the
project in the heading.
Each thread without a project works in its own folder under ~/.t3/scratch (the
scratch folder of your T3 data directory), named after its date, the first words
of its first message, and a short id, like
2026-09-25-convert-these-pngs-to-webp-a1b2c3d4. Deleting a thread keeps its
folder, so the files the agent wrote stay until you delete them. Branch, worktree, and diff controls stay hidden because
these folders are not Git repositories. This is unavailable when the data
directory itself sits inside a Git checkout.
In a desktop browser or the desktop app, press Cmd+Enter on macOS or Ctrl+Enter
on Windows and Linux to start a new thread and immediately open another draft. The
next draft keeps the workspace mode and base branch you selected. With New
worktree, each background submission creates its own worktree.
To send the same prompt to several models on web or desktop, Shift-click models in a new thread's model picker to add or remove them. A regular click returns to a single model. Choose a base branch and send. Each selection starts a separate thread and worktree while you stay in the new thread composer. This requires a Git project.
On web and desktop, choose Open dashboard from a project or thread menu, or Open project dashboard in the command palette. Choose the project's environment in the dashboard's project picker when it exists on several machines.
The dashboard shows active and waiting threads alongside questions, reviews, QA, and progress reported by your agents. Threads with reported items have a small dashboard indicator in the sidebar. Each item links to its source thread and shows when it was raised or updated. Expand an item for context. Choose Message to send a text follow-up without leaving the dashboard; messages queue after any current turn. Drafts remain if delivery fails, and Retry send confirms the same message. Use Open thread for approvals, structured questions, full reviews, and QA. Sending a message does not resolve a reported dashboard item.
Quick and Focused describe effort; Computer describes a requirement. These filters can overlap. On my phone hides requests marked as requiring a computer. Opening a request does not resolve it or clear another request. Open items remain visible after their thread settles, and settled or snoozed contexts remain available under Parked contexts. A disconnected environment shows its last known state until it reconnects.
Pin a thread from its menu to keep it above your active work.
On web and desktop, unpinning, settling, snoozing, and archiving a thread each show
a notification with Undo for five seconds. Undo restores the thread's previous
state, including its pinned position, and reopens an archived thread you were
viewing. Discarding an unsent draft from the sidebar works the same way: Undo brings
back its text and attachments. mod+z triggers the most recent Undo when no text field is focused; see
Keybindings.
Archiving includes grouped interactive children and subagents, recursively. If any family member is working or has unread replies, a confirmation lists it. Stop active threads & archive stops unfinished work, cancels pending approvals and queued messages, and archives the family. Archive unread threads preserves replies in archived history. Cancel to inspect children or make eligible threads independent before archiving again. Forks and independent threads stay separate.
Persistent children must be made independent or have their protection removed before the family can be archived. If stopping fails, the family remains visible; some work may already have stopped. Undo or restoring the archived family brings its conversations back without restarting work. Promoted conversations remain independent.
On web and desktop, you can also drag files from your computer onto any thread row: the thread opens and the files are attached in its composer, ready for your next message. The same per-message file limits apply as when attaching files directly; see Attach files.
On web and desktop, pinning or unpinning a thread keeps the sidebar at your current scroll position instead of following the thread to its new place in the list.
Pinning does not prevent automatic settlement. Settling a thread removes its pin.
On web and desktop, drag a thread between sections to change its state. Drag a thread up into the pinned section to pin it at the spot you drop it; drag a pinned thread down into the active list to unpin it. Dragging a thread onto the Settled header settles it, and dragging a settled thread into the active list un-settles it. A snoozed thread can be dragged out of the snoozed shelf, which wakes it, but threads cannot be dragged into the shelf because snoozing needs a wake time. Dragging a pinned thread out of the pinned section does not ask for unpin confirmation. Pinned and active boundary labels appear only while dragging, without moving the rows. The other rows slide aside to show where the thread will land. When you cross into another section, the dragged thread shows the action the drop performs, with its icon: Pin, Unpin, Settle, Un-settle, or Wake. Its status and hover actions hide during the drag. A pinned thread keeps its pin only while it stays in the pinned section; once it leaves, the badge takes over. Reordering within the same section shows no badge. When there are no pins, drag to the top edge to pin a thread. Section labels stay readable for the whole drag, and the section the thread is over takes the accent color. Section labels also identify empty sections and a collapsed settled shelf.
Drag within the pinned or active section to change its order. Other rows slide aside to show the spot where the thread will land. Drops into either section keep the position you choose. On mobile, open a thread's menu and choose Arrange threads. Drag a handle within or between Pinned and Active to reorder, pin, or unpin. Drop onto the Settled divider to settle a thread. The dragged card shows the action before you release it. Expand Snoozed or Settled to drag a parked thread back into either live section. Each drop saves; close the sheet to return to the thread list. Move up and Move down are also available in the thread menu. The server saves the order, so it survives a refresh and appears on your other connected devices.
On web and desktop, the list also animates section changes made with thread actions such as Pin, Settle, and Snooze. These transitions respect your system's reduced-motion preference. While dragging, rows follow the insertion gap without replaying a second transition after the drop.
New threads appear above the active threads you have arranged. Settling clears a thread's active position, so using Un-settle returns it to the top. Pinning and snoozing preserve its active position until you move it again. Thread activity does not change the order. The settled shelf continues to use settlement time.
If dragging is unavailable for one environment, update the T3 Code server running in that environment. Pinned and active reordering require server support. Threads from older servers keep their default order until the server is updated.
To generate a fresh title from the conversation, open a thread's menu and choose Regenerate title. The action is unavailable while title generation is in progress or when the connected environment needs a server update.
Agents connected through T3 Code can use the same server-owned metadata workflow to rename a thread, regenerate its title, or link and unlink a pull request. These changes appear on web, desktop, and mobile without requiring the originating browser to remain open.
Turn on Settings → General → Working section (beta) on web and desktop, or Settings → Thread behavior → Working section on iOS and Android, to move threads that are working or monitoring into a collapsed Working section below the active list. A thread returns to the top of the active list when it finishes, fails, or needs an approval or answer. The Working section lists the thread you last sent work to first. Pinned threads stay in the pinned section. Each device keeps its own choice.
While this is on, the active list is ordered by when each thread last came back to you, so you cannot drag or move threads within it. Your saved order returns when you turn it off.
Choose Settle thread from its menu to move finished work out of the active list without deleting the conversation. Un-settle thread restores it to active work and prevents automatic settlement until new activity resumes the usual rules. Manually settling an idle thread dismisses unanswered async questions without sending an answer or restarting the agent. Settling also closes the thread's terminals that wait at an idle prompt, and keeps their output. A terminal that runs a command, such as a dev server, stays open.
To reclaim disk space from settled work, turn on Run in the thread's worktree when the
thread settles for one of the project's actions, or set "runOnSettle": true on a
t3.json script, for example cargo clean. It runs each time a thread in its own
worktree settles, manually or automatically, even if a terminal there still runs a
command such as a dev server. Threads in the project's main checkout skip it. Its terminal
closes when the command succeeds and stays open when it fails.
On web and desktop, press a thread's Settle button and drag up or down to
settle every thread in that section between it and the one you release on.
The Un-settle and Wake buttons work the same way in their sections.
Press Escape while dragging to cancel.
By default, environments settle inactive threads after three days and settle threads whose pull request merged. A closed pull request can also settle an idle thread. An empty thread's inactivity counts from when it was created. Work in progress, pending questions or approvals, and live background work prevent automatic settlement. An open pull request does not prevent inactivity settlement unless you turn on Keep threads with a PR in Settings → General, but an old closed or merged pull request does not settle work you resumed after it closed. Only your own messages count as resuming. A turn that finished background work or a pull request watch starts on its own does not.
To keep one thread out of the settled shelf no matter how long it sits idle, open its menu, choose Auto-settle behavior, and pick Disabled. The current option is checked. Pick Enabled to return to the usual rules. Manual settle, snooze, and archive still work while it is disabled.
Change these rules in Settings → General on web and desktop, or Settings → Thread behavior on mobile. They continue to run when your apps are closed. On web and desktop, choose an environment at the top to change only its rules, or All environments to update connected environments together. Mixed values show where the selected environments disagree. Mobile applies these rules to connected environments that support shared settings. Offline environments and older servers keep their previous values. Changing a rule does not reopen already settled threads.
The server finds the PR for each unsettled thread's saved branch, even when your apps are closed. Settled threads keep their saved links. Update the server if automatic branch links do not appear.
On web and desktop, right-click a pull request link in a thread and choose Link to thread to select a different PR. Use Unlink from thread on the same link to return to the branch PR, if one exists. The linked pull request participates in automatic settlement.
On web and desktop, open the command palette with Cmd/Ctrl+K to search threads
across connected environments. Message search starts after two characters and
includes your messages and final agent responses.
Use Settings → Keybindings to find or customize shortcuts for searching files and copying a thread reference. A copied reference uses the thread's pull request link when available, otherwise its thread ID. See keybindings for custom configuration.
On web and desktop, use Mark unread in a thread's menu to return to a completed reply later. Mark read acknowledges it without sending a message. Both actions also work on a selection; threads with no completed reply cannot be marked unread.
On web and desktop, enable Settings → LastCode → Appearance → LastCode sidebar for the LastCode project tree, annotations, and family controls. It is off by default. While enabled, use the tree button or the Sidebar: Toggle Presentation shortcut to switch between LastCode and the v2 sidebar without changing either saved sidebar preference. Turn it off to return to the sidebar selected by Settings → General → Legacy features → Sidebar (legacy). With LastCode off, the same control switches between the upstream legacy and v2 sidebars.
Family status subheaders, in the same Appearance settings, is on by default. Turn it off to show the family status and child count in the parent row while keeping the child tree.
A thread can have one Markdown annotation for notes, headings, lists, task lists, and tags. In the LastCode sidebar, open a thread's context menu and choose Annotate thread…. An active annotation adds a short dotted yellow underline to the thread timestamp; hover it to read, edit, or resolve the note without opening the thread.
Opening an annotated thread shows a compact yellow note above the composer, with its first line and edit timestamp. Expand it to read the full Markdown; your expanded or collapsed choice is remembered for that thread across navigation and reloads. Choose Edit to open the existing Markdown in the editor. You can dismiss the note for the current visit without deleting or resolving it. The conversation minimap marks the message that was newest when the annotation was created or last changed. Editing, resolving, or reopening the annotation moves that marker to the newest message. Resolved annotations disappear from the sidebar and composer but remain available from their yellow minimap marker, where they can be edited or reopened.
Threads with a running resumable Project Action keep a yellow waiting indicator beside any active Working status. When the agent becomes idle, the primary status changes to Waiting. Hover the indicator on web or desktop to see the Action name. See Resumable Project Actions in LastCode for the automatic follow-up behavior and the composer controls.
When you delete a thread and choose to delete its worktree, the thread stays in the sidebar until the server finishes that cleanup. Deleting means removal is active. Deleting (Queued) means another worktree from the same repository is being removed first; hover the row to see which thread it is waiting for. Cleanup for different repositories can proceed at the same time.
If cleanup fails, the row changes to Cleanup failed. Select anywhere on that row to see the error and choose Retry, Copy details, or Keep worktree. LastCode resumes unfinished cleanup after a server restart. On mobile, long-press a failed row to choose Retry or Keep worktree.
Dev and Nightly environments can identify themselves with artwork at the top of the sidebar and in the send button. Choose Artwork, Version pill, or None in Settings under environment identification. Artwork is recolored to match each built-in theme. Custom themes use the Version pill fallback because their colors are not controlled by T3 Code.
To generate a fresh title from the conversation, open a thread's context menu and choose Regenerate title. While T3 Code is generating it, the action reads Regenerating… and cannot be selected again. The option is hidden when the connected environment needs a server update.
When the LastCode sidebar is enabled, LastCode can make its project and thread rows more compact. Open Settings → LastCode → Appearance and adjust Scale LastCode sidebar from 50% through 100%. The 75% mark is labeled as a useful compact reference point. The default is 100%, and your selection is stored locally and retained when LastCode restarts.
This setting compacts project headings and thread rows while keeping project favicons, action or status icons, remote cloud indicators, and relative timestamps at their standard size. The LastCode header, Search field, Projects heading, drafts, status notices, and footer also stay at their standard size. On desktop, View → Actual Size, Zoom In, and Zoom Out continue to zoom the whole application and compose with the LastCode sidebar scale. To keep the same status colors while using less horizontal space, enable Compact status indicators in Settings → LastCode → Appearance. LastCode thread rows then show only the colored status icon; the full status remains available as a tooltip. This preference is off by default.
Use Status icons in the same settings section to choose a circle, square, diamond, triangle, or right-pointing triangle for each agent status. Each shape supports an outline, a solid fill, or an outline with a 50% fill. Colors and status meanings stay the same. New statuses use a solid circle until you choose another icon; resetting Status icons restores solid circles for all statuses.
To hide the worktree icon beside threads that use a dedicated worktree, turn off Show worktree indicators in Settings -> LastCode -> Appearance. The icon remains visible by default.
Open Settings → LastCode → Environments to choose the icon color for the primary machine and each saved remote environment. Default preserves the semantic icon treatment for each surface; a custom color is shown at full strength in sidebar rows, project headings, and thread details. The icon beside each environment name previews the selection.
Remote environments use a Server icon. The primary machine uses a Laptop icon, which can be shown or hidden in thread cards and LastCode thread rows with Show local icon. LastCode rows reserve the same icon space either way so their columns stay aligned. Mixed LastCode project groups always show one icon for every environment in the group, including the primary machine, with duplicate environments collapsed to one icon.
Limited means the provider stopped on a usage or rate limit. The conversation keeps the provider's explanation. Retry after the limit resets, or switch to another provider instance. On web and desktop, press Resume in an empty composer to continue a limited or interrupted turn manually. Queued messages stay saved while the limit blocks the thread. They run after the continuation finishes. If the queue was held by a restart, resume it then.
When the provider reports a reset time, choose Resume at reset to schedule a continuation. You can cancel it from the thread. Enable Auto-resume limited threads in Settings → General on web and desktop, or Settings → Thread behavior on mobile, to schedule limit stops by default. The environment must be running when the reset arrives; it resumes overdue continuations after a restart. Stopping the thread, sending a new message, archiving, or settling it prevents a pending continuation from starting.
Choose Snooze until reset to hide the thread until its allowance returns. Snooze and auto-resume are independent: snooze alone wakes the thread without sending a message; enabling both wakes and continues it. Wake now cancels the snooze. Enable Snooze limited threads in thread behavior settings to snooze limit stops by default. Providers without a reset time offer manual retry and the normal snooze choices.
On web and desktop, use Agents to follow work delegated to subagents. Stop on a thread also stops the subagents it delegated to.
Archiving a thread also archives its grouped children. Restoring the parent restores children archived with it, without restarting stopped work. Deleting the parent deletes its subagents too. Restore the parent before restoring children archived with it. Independent conversations stay separate.
Subagent threads started by the agent can't take messages; message the parent thread instead. When such a subagent needs an approval or an answer, the parent thread asks for it.
For providers that support it, choose Promote to interactive thread to continue a subagent's conversation yourself. If it is still working, promotion waits until it finishes; you can cancel the wait without stopping the subagent. Once ready, open the interactive thread from the same control. The original conversation stays available, and the parent is told to direct further messages to the new thread.
Expand a tool call in the conversation to see its full command and output. Summaries shorten shell wrappers and can still describe the latest call after it finishes; the call's own result shows its status.
Choose Snooze → Custom… from a thread's menu to pick a date and time in your local time zone, or a duration in minutes, hours, or days. Durations start when you confirm; one day means 24 hours. On web and desktop, you can also snooze several selected threads together. Choose Wake thread to bring a thread back early. A snoozed thread keeps working and stays hidden until its wake time, even while its agent wakes itself for background work. It comes back early only when it needs an approval or answer from you, when a run fails, or when you send it a message.
LastCode remembers links and file chips you explicitly open from chat into the right pane, and destinations opened there by an agent. Find them under Handoffs in the thread menu or the right-pane + menu. Each entry keeps its Markdown label and reopens in its usual file, browser, or pull-request tab. Files opened from the Files navigator are not added.
The menus show seven entries by default. Change Handoffs shown in menus in Settings → LastCode to show 1–50. When more entries exist, Show all… opens a searchable list; the menu limit does not delete older entries.
History stays on this client and survives closing tabs or archiving threads. Known local HTML files receive fresh preview authorization when reopened. A saved URL still needs its original server, and moved or deleted files must be restored before they can open again.