VCode home

VCode feature documentation

VCode drives claude, codex, opencode, cursor, devin, copilot and muse from a phone. This folder documents every feature, one file each, grouped by area.

New here? Read these in order: run it locally, reach it from a phone, start a thread, send a message, read the transcript. Keep navigation and commands open for the keys and gestures. Before you put it on a public hostname, read permission levels: a tab at Full runs anything as your user, and anyone who can log in can put a tab at Full.

Install and security

Get it running on a machine, reach it from a phone, keep it safe.

Feature What it does Status
Install VCode on Linux with one command curl -fsSL https://fezu.dev/install | sh installs the newest signed release on a Linux x86_64 or ARM64 machine, starts it, and links it to your fezu.dev account. beta
Install VCode on a Mac with one command The same curl -fsSL https://fezu.dev/install | sh, run in Terminal on an Apple silicon or Intel Mac, installs the newest signed release as a launch agent and links it to your fezu.dev account. beta
Install VCode on Windows irm https://fezu.dev/install.ps1 | iex in PowerShell installs VCode on Windows itself: no WSL, no administrator rights, no restart. beta
The VCode desktop app VCode in its own window on Windows, Linux and the Mac, with a tray icon, start at login and notifications; the install command puts it on any computer with a desktop, or alone with App only. beta
Install it as systemd user services bash install.sh install puts VCode on a machine as a systemd --user service, writes its env file with a fresh AUTH_TOKEN, and starts it. stable
Logs and troubleshooting Every unit logs to the journal. stable
Memory limits and parking idle tabs The VCode unit runs inside a cgroup with a hard memory ceiling. stable
Install counts The installer reports that an install started and finished, with the OS and version and no ID; V_CODE_NO_ANALYTICS turns it off. stable
App page views app.fezu.dev and the desktop app count each open with VCode's own analytics service, with no cookie and no ID. stable
Reach it from a phone A phone reaches a box through the app on app.fezu.dev: link the box, then log in to the app on the phone. stable
Run it locally for a first try Start VCode on your own machine with one command and open it in a browser. stable
Where state lives, and how to back it up Everything VCode remembers is plain files under one directory, VCODE_STATE. stable
The security model Anything that can log in to VCode runs code as your user, so a login is full trust. stable
The box updates itself A box installed from a release checks for a new one every hour, installs it even while a thread is working, and rolls back if it does not come up. beta
Update an installed machine bash install.sh update pulls the new code, reinstalls dependencies, migrates the env file, re-renders the units and restarts them. stable

Support

Report a problem you find in VCode.

Feature What it does Status
VCode report Run /vcode-report to send a private report, with up to 3 screenshots, to the VCode team; it appears under Reports on your account. beta

Remote access

Link the box to a fezu.dev account, pair a phone, and use VCode from app.fezu.dev.

Feature What it does Status
Add a workstation from fezu.dev Copy one command from fezu.dev/account; it installs the box and links it to your account, with no email prompt and no pairing code. beta
Link this box to your fezu.dev account Link the box from your browser with v-code box link; it connects out to the VCode router. beta
Open this box from a phone or another browser Sign in to app.fezu.dev and every box on the account opens; v-code box devices lists them, and the box can require a pairing code for new ones. beta
Keep a workstation awake Stops a workstation from sleeping while its agents work, or always; each workstation keeps its own mode. A closed lid still sleeps. beta
One set of settings for all your workstations Workstations linked to one account share the cog's settings and your system prompt; the default folder stays on each workstation. beta
See which account the app is on, and switch Opened from fezu.dev/account while on another account, the app asks before it opens anything; the cog says which account it is on. beta
Use VCode from app.fezu.dev Log in, pick a box, check its fingerprint, pair, and work through the router. beta
Work on several boxes in one app Every paired box opens at once: one strip with a badge per box, a box pick in New thread, and a box that is off marks only its own tabs. beta

Threads and tabs

Start work in a folder, group tabs by project, move between tabs, rename, reorder, close and reopen.

Feature What it does Status
The back button closes what is open The phone's back button closes the top open layer (a sheet, a drawer, a viewer, the shell) one press at a time. stable
Change keyboard shortcuts Give any shortcut a key of your own in settings, or take its key away; your keys follow the account. stable
Search settings Type a word at the top of settings and only the groups and settings that match it stay. stable
Close and reopen a tab Closing a tab stops its agent and takes it out of the strip. The conversation stays on disk, and the resume screen brings it back. stable
Navigation and commands Every way to move around and every command VCode runs, the phone way and the desktop way side by side. stable
Pin and mark tabs done Pin a tab to the left of the strip, or move it to Done; idle, merged and folderless tabs move to Done by themselves. beta
Open a tab from the composer with /new Type /new in the composer to open another tab without leaving the composer. stable
Projects and Worktop A project is a name and one or more folders on one computer; its tabs start in the first folder, the window shows one project at a time, and Worktop holds every tab started outside one. beta
The welcome line and tip on an empty tab A tab with nothing in it yet opens on the V mark, one short line and a tip on a VCode feature, each picked for that tab; the first message takes their place. stable
Pick the folder a tab works in The folder box in the new-thread form is a typeable list of your repos that also completes any path on the machine. stable
Browse for a folder and set the default The folder button walks the machine's folders; Set as default makes one the folder new threads start in. stable
Rename a tab Give a tab a name of your own by editing its strip label or folder line, using the Threads sheet, or typing /rename <name> in the composer. stable
Search your tabs Type into the field at the top of the tab bar (#tab-search) to narrow it to the open tabs whose name or messages hold every word. stable
Reorder tabs Drag a tab along the strip, or a row up and down in the drawer or the Threads sheet, to put the tabs in the order you want. stable
Start a new thread Open a new tab: pick which agent runs it and which folder it works in, then tap Start thread. stable
Swipe between tabs Swipe the transcript sideways to move to the next or previous tab, in strip order. stable
See which tabs finished or are waiting on you An orange ! on a tab whose agent stopped for you, a green tick on one that finished, and their count on the Tabs button. stable
Tap feedback One short vibration on every tap on a control. stable
Switch tabs from the strip The row of tabs across the top (#tabstrip) is every open thread of the active project. stable
Colour a tab /colour blue colours the selected tab's top and side edges, the shared rail beneath other tabs, its row's border in tab lists, and the composer's edge while you are in it. stable
The tab bar Tap Tabs or pull in from the left edge of the transcript for Worktop and your projects with their tabs (#drawer); a column on the left from 1080px. stable
A tab's working folder, and moving it Every tab is rooted in one directory, chosen when the tab is created. stable
The Threads sheet The full tab manager (#sessions), behind All threads in the new-thread card. stable

Composer

Write and send: queue or steer, slash commands, model and effort, attachments.

Feature What it does Status
Alt moves and deletes a word With a hardware keyboard, Alt in the composer does what Ctrl does: a word at a time. stable
Choose where your typing goes: Agent or Shell Two chips at the top of the screen decide who reads what you type: the agent, through the composer, or the tab's shell, through its terminal. stable
Send a photo or a file with your message The + under the composer attaches a screenshot. stable
Clear the context with /clear /clear starts the agent fresh in this tab. stable
Escape twice to clear the composer Press Escape twice in a row and the composer empties. Attachments stay where they are. stable
Each tab keeps its half-written message Swipe to another tab and back and the text you were typing is still there. stable
Turn on fast mode for a tab Fast mode asks the model for faster output, at a higher cost in usage. stable
Hold backspace to delete whole words Hold backspace in the composer and after two seconds it starts taking a whole word per repeat instead of one character. stable
Edit, drop or steer a queued message A message waiting to run has three buttons on its card: steer it into the running turn, pull it back into the composer to rewrite, or drop it. stable
Queue or steer while the agent works While a turn is running you can still type. stable
Send a message to the agent You type into the box at the bottom of the screen and send it to the agent running in the open tab. stable
Set how hard the agent thinks Effort is the reasoning dial: how long the agent is willing to think before it answers. stable
Ask without interrupting with /btw /btw asks the agent a quick question about the conversation so far. The running turn goes on, and the exchange stays out of the session. stable
Mention a file with @ Type @ in the composer to pick a file from the tab's folder; its path goes into your message. stable
The slash menu Type / in the composer and a list appears above it: the commands VCode runs itself, and the skills the agent can load. stable
Type to start a message With a hardware keyboard, start typing anywhere and the character goes into the composer. stable
Switch the model for a tab Each tab runs one model. stable
Plan on one model, edit on another with Fusion Fusion runs a Claude tab on two models you pick: an orchestrator that talks with you, plans and reviews, and an executor that makes each code edit. alpha
Open new tabs on a default model Tap the house beside one model in the model panel, and every tab you open starts on that agent, model and effort. stable
What the CLI's own slash commands do here A slash command typed here is not a slash command typed into the vendor's own terminal UI. stable
Walk back through the prompts you sent Press the up arrow in the composer to put the prompt you sent before back in it. stable

Transcript

What you read while the agent works: answers, tool output, plan, subagents, errors.

Feature What it does Status
See what the agent is doing right now While a turn runs, the last thing in the transcript is a live card that says what the agent is doing, how long the turn has been going, and gives you a way to stop it. stable
Copy a reply, a prompt or an output Each card has a copy button in its header, and each code block has one of its own. stable
Rewind the conversation Go back to one of the agent's replies: your later messages leave the conversation, the agent forgets them, and the first one comes back into the composer. stable
Comment on selected text Select words anywhere in the transcript, tap Comment, and write a comment on them under their card. stable
When the agent stops, and retrying A card at the end of the transcript when the agent process died, a turn logged an error, or the thread is waiting out a usage limit. stable
When the box cannot save a tab When the disk stops taking writes for long enough, VCode stops the tab's agent, says why, and holds your messages until the disk takes writes again. stable
Formatted answers and coloured code Replies render as markdown: headings, lists, tables, quotes and fenced code. stable
Screenshots inside the transcript An agent can show you a picture. stable
Jump back to the latest message Scroll up and a pill appears above the composer with a down arrow and a count of what arrived while you were away. stable
Page through the transcript PageUp and PageDown move the conversation a screen at a time, with the caret still in the composer. stable
Follow the plan strip A band above the transcript (#planstrip) showing the agent's steps: one dot per step, the step it is on, and how many are done. stable
Track steps with the todo CLI v-code todo is a command on every agent's PATH inside a thread. stable
Read the transcript The middle of the screen (#thread) is the conversation: your messages, the agent's replies, its thinking, every tool it ran and every file it edited, in the order they happened. stable
Run a command from a code block A bash code block carries a run control that sends the block to the tab's shell and runs it there. stable
Choose how much of each step shows The settings sheet sets how much of each step the agent takes shows in the transcript: thinking, tool calls, edits and system notes. stable
Watch the subagents A strip under the transcript (#subs) that appears when the agent launches subagents. stable
Terminal colour and one-tap links Command output keeps the colours the program printed, and every URL in it becomes a link with a copy button beside it. stable

Files and changes

Browse the folder, read and edit files, see what a turn changed, review and comment.

Feature What it does Status
Comment on a line of a file Right click or hold a line in the viewer, type what is wrong with it, and send it to the agent as a message that names the file, the line and quotes it. stable
Review a diff the way a pull request reads Every file a turn or a proof changed, in one scroll: the list of files on top, then each file's hunks under a header that stays in view. stable
Edit a file Tap Edit in the viewer, change the text, and save it to disk. beta
Language servers in the editor The box's TypeScript, Python, Go and Rust servers add their suggestions and colours while you edit; a missing one installs with one tap. beta
See which files changed, in the tree The explorer marks changes the way VS Code does: a changed file's name takes a colour and a letter (M, U, A, D), a folder above it the colour and a dot, and what git ignores is grey. stable
Browse the thread's folder A file tree of the folder the thread runs in. stable
Open a file One file from the explorer, in a sheet over the thread on a phone and in a tab of its own on a wide window; images show and videos play. stable
Files as tabs in panes On a wide window a file opens as a tab in a pane, beside its thread tabs, and drags and splits like one. stable
Find and replace in a file Search the file in the editor, step through the matches, and replace one or all. beta
Find a file by name Type part of a name into the explorer's filter and the whole folder is walked for matches. stable
Make, rename and delete files Right-click or long-press a row in the explorer for New file, New folder, Rename and Delete. beta
Open or download an attachment Files you sent with a message stay on the message. stable
See the proof a turn's work is done When the agent finishes a change to code, its last reply carries a Proof section: the screenshots it took, the checks it ran, and the full git diff of its work, one tap away. stable
Review code line by line Gather comments across several lines and several files, then send the lot as one message. stable
See every change this tab made The explorer's Changes tab lists the files this tab edited or named in a proof, under a heading per checkout; a row opens the diff sheet. stable
See the files a turn changed Every turn that edited files gets a summary: a count in the status bar for the latest turn and a footer under each turn's last reply. stable
See what changed in a file The open file is marked with what has changed since the last commit: new lines are highlighted, and lines that were taken out stand where they used to be. stable

Agents and sessions

claude, codex, opencode, cursor, devin, copilot and muse: differences, resume, handoff, usage limits, compaction.

Feature What it does Status
Log in to an agent from your phone A logged-out agent's tab offers a login in place of Retry, and the settings sheet lists each agent's login per workstation. stable
Install an agent from your phone An agent the workstation lacks reads Install <agent> in the new-thread card; one tap runs the vendor's installer there, then its login, then starts the thread. With none installed the card opens on that list. stable
Log in to Cursor from your phone Shows a browser login link in the new-thread card when Cursor is not authenticated. stable
See and fix a tab's MCP servers /mcp on a Claude, Codex or Devin tab lists the MCP servers its agent can use; log in, reconnect, turn one off or remove it, or ask the agent to add one. stable
Permission levels and Plan first Each tab runs at Ask, Auto or Full; at Ask the agent asks before it runs a command, and Plan first keeps it read-only until you press Build. stable
Let an agent drive the app An agent opens tabs on any of your computers, prompts them, waits for and reads them, splits panes and opens files in the app you have open. stable
Run your tabs with the Agent Commander One assistant behind the top bar's VCode icon: tell it what you want, and it starts tabs for the work, reads them and waits on them. beta
Watch a pull request and wake the agent /watch 12 in a tab: when a check fails, the branch conflicts or a reviewer asks for changes, the agent gets a message and fixes it. beta
Compact the context automatically When a turn ends with the context over a token mark, VCode runs a compaction turn of its own before the next message goes in. stable
Background and resumed subagents An agent can launch helpers that keep working after the call that started them returns, and can pick one back up later. stable
Hand a tab to another agent Change the agent on a tab and keep the conversation: same tab, same title, same history. stable
Memory headroom and parked agent processes Every agent runs inside VCode's cgroup. stable
A tab that hits its memory cap Each tab has its own memory cap. VCode warns the tab before it gets there, says so when the agent is killed at the cap, and does not start the agent again while the tab is still full. stable
Find and resume any session The resume screen finds any session on this box by what was said in it: open tabs, closed tabs and sessions started in a terminal. Reopen or fork it. stable
Update the agents automatically Turn on a switch per agent, and VCode runs that agent's own update once an hour on that computer. stable
Update the agents and VCode from a tab /update brings the machine up to date from your phone: the agents' command-line tools, their model lists, VCode itself, and then the app you are looking at. stable
Work carries on after VCode restarts When the VCode process goes down mid-turn, the tab does not sit frozen. stable
The status bar One line under the transcript with the facts about this tab right now: which branch, how much context, whether you are connected, and what is waiting. stable
Stop a running turn Cut the agent off mid-answer, with the Stop key in the composer or Escape. stable
The seven agents and what each one can do A tab runs one agent: claude, codex, opencode, cursor, devin, copilot or muse. stable
Run Devin in a tab The Devin CLI in a tab: its effort, steering, Stop, resume, adoption, fork, side questions, plan, approvals and /mcp, and what it does not do. stable
Run GitHub Copilot in a tab The Copilot CLI in a tab: its effort, steering, Stop, resume, adoption, plan, todos, approvals and login, and what it does not do. stable
Run Muse in a tab The Muse Code CLI in a tab: its model and effort, steering, Stop, resume, adoption, fork, side questions, plan, todos, approvals and /mcp, and what it does not do. stable
Wait out a usage limit and resume automatically When the agent's plan window is full, the tab pauses instead of failing. stable
Try again by itself after a temporary model error An overload, a server error or a dropped stream is tried again after 30 s, 1, 2 and 5 minutes. stable
Read your plan usage A row of meters above the transcript shows how much of each plan's quota you have spent, and when each window resets. stable
Your own system prompt Edit system prompt in settings opens system-prompt.md; Claude, Codex, OpenCode, Devin, Copilot and Muse get its text after VCode's own instructions when a thread starts. stable
Have agents work in worktrees Work on in settings: Worktree tells every agent to make each change in a git worktree under worktrees/ and remove it after the merge; Main tells it nothing. stable
What VCode tells every agent Every agent started in a tab gets the same short instruction block and the same four environment variables. stable

Voice dictation

Talk instead of typing: the mic, the waveform, installing the service.

Feature What it does Status
Dictate a message Speak into the composer instead of typing. optional
Dictate, then switch tabs before the words arrive The words belong to the tab you were on when you recorded. optional
When the mic button is missing or the microphone is refused Two different failures look alike on a phone: no mic button at all, and a mic button that cannot open the microphone. optional
Install the transcription service on the box bash install.sh voice builds a python venv, downloads a 482 MB speech model, starts v-code-voice.service on loopback, and points VCode at it. optional
Point dictation at another service, or turn it off VCODE_STT_URL is the only coupling between VCode and whatever transcribes a clip. optional
Retry a dictation that failed When a transcription fails, the clip you just recorded is kept in memory for five minutes. optional
Read a reply aloud The speaker on an agent's reply reads it out with your device's own voices. stable
Send after dictating A transcript can send itself after a one second wait with a Cancel. optional
Stop recording when you stop talking A recording ends by itself after a set number of seconds of quiet, so you do not have to reach back for the stop button. optional
What happens to the audio you record Every dictation goes to the VCode machine; the clip is not saved anywhere and the transcript is never written to a log. optional

Offline and notifications

Install on the phone, work offline, get told when a thread finishes.

Feature What it does Status
Install it on a phone Put VCode on your home screen so it opens in its own window, with its own icon, and keeps working when the server is out of reach. stable
Live updates and reconnect The open thread streams from the server as it happens, and so does the tab strip. stable
Open the app offline The app opens and shows your threads with no connection to the server. stable
Queue a message while offline Send a message with no connection. stable
The notification when a thread finishes With notifications on, the phone buzzes when a thread settles: the agent finished with nothing queued behind it, it crashed, it is blocked on an approval, or it is waiting out a usage limit. stable
Turn on notifications Tap the bell to have this device buzz when a thread finishes or needs you. stable
Update to a new build When the server has a newer version of the app, a button appears in the top bar, and the app reloads on its own once nothing you typed would be lost. stable
Where notifications work Which browsers can subscribe to push, which need something from you first, and where the bell is not offered at all. stable

Shell, machines and layout

Shell mode, the machine name, the wide layout, the icon legend.

Feature What it does Status
Run one command with ! Start a message with ! and it runs as a command instead of going to the agent; the card lands in the transcript. stable
Edit the command line with taps At a prompt in Shell mode, the line you are typing behaves like a text field: tap to put the caret anywhere in it, select a word and type over it, paste. stable
The screen on a phone Two bands of controls float over the conversation: everything above it in #overhead, everything below it in #underfoot. stable
What every icon means Most controls in the app are a drawing with no words. stable
Know which machine you are on Every tab ends its folder line with the machine it runs on. stable
Send a keystroke to the shell Keycaps for the keys a phone keyboard does not offer: Tab, Esc, ↑, ↓, ^C, ^L, ⏎ and ^D. stable
Run shell commands in the tab Switch the tab from the agent to a terminal. stable
Split the window into panes On a wide window the conversation area splits into panes, up to six across and six down, each holding some of your open tabs and its own status line, with the composer in whichever one has the focus, and you drag a tab from one pane, or from the Tabs column, to another. stable
The terminal on a wide window On a wide window the pane's terminal button or Ctrl+` switches the pane between the agent and the tab's terminal. stable
Preview a web page from your computer A dev server or an HTML file on your computer opens as a page: a preview tab in a pane on a wide window, the phone's own browser on a phone. beta
When the app talks back A short message slides in under the top band when something happened that you cannot already see. stable
The layout on a tablet or desktop Given a wide enough window the frame fills it, the whole app is scaled up, the tab strip becomes a desktop tab bar, and the file explorer becomes a column beside the conversation. stable
Zoom the window on a desktop On a desktop the zoom control beside the bell, Ctrl+plus, Ctrl+minus and Ctrl+0 make everything in the window bigger or smaller, from 67% to 200%, kept per browser. stable