VCode home

Formatted answers and coloured code

Agents: claude, codex, opencode · On: phone, desktop

Replies render as markdown: headings, lists, tables, quotes and fenced code. Code is syntax coloured, and so are shell commands in a tool card's header and the lines of a diff.

Why you would use it

A phone screen is small. A wall of unrendered markdown with ** and backticks in it costs more to read than the answer is worth, and a 40-line file printed by Read is unusable without a gutter and colour.

How to use it

Nothing to switch on. It applies to every reply, every tool output and every patch.

  1. Read the reply.

    A reply rendered as markdown: a heading, a three-column table, a numbered list, a fenced JS block with its language label and copy button, a blockquote, and a bare URL turned into a link

  2. Tap the copy icon in a code block's header bar to copy just that block.

  3. Tap a link to open it in a new tab.

An edit renders the same way, as a patch:

An EDIT card opened: line numbers down the left, a + and a − column, and the JavaScript coloured on green and red rows

What you see

Rendered from an answer: headings (four levels), bullet and numbered lists including nested ones, tables (a wide one scrolls sideways inside the card), blockquotes, horizontal rules, **bold**, *italic*, ~~strike~~, inline code, and links. A bare URL becomes a link, and so does a bare host:port — the shape a dev server prints.

A fenced code block gets a header bar showing the language (or text) and a copy button. A fence with no language is guessed: shell when the content is commands, otherwise from the content.

Tool output is decided in this order: an MCP envelope is unwrapped, real escape bytes claim the terminal renderer, then structure — a numbered Read listing keeps its line-number gutter, grep hits keep theirs, fenced blocks are split out — and only then language, taken from the title's extension when the body could plausibly be that file.

A diff renders as three columns: line number, +/− marker, and the content coloured as the language of the file being changed. Line numbers appear only when the patch carries an @@ header; claude reports edits as old/new strings, so its synthesized patches have none.

Options and settings

Option Default What it changes
fence language guessed the label on the block and the lexer used

Languages with a grammar: JavaScript and TypeScript (js, ts, jsx, tsx, mjs, cjs), shell (sh, bash, zsh, console, terminal), Python, JSON, CSS and SCSS, HTML and XML and SVG, diff and patch, YAML, SQL, Markdown, and INI-shaped files (ini, toml, env, systemd, service). Anything else renders as one plain block.

Limits and known gaps