A frontend rework of the official Claude Code VS Code extension — surface redrawn, engine untouched.
incipit redesigns Claude Code's entire VS Code frontend — body typography, math rendering, tool-call folding, diff, local history editing, context, and project activity views — in a literary style, with engineering surfaces folded into the same visual language. It does not touch model requests, authentication, tool schema, or the CLI spawn protocol; every byte sent to the server is identical before and after installation.
Run it once and reload VS Code — no extra dependencies. Each time Claude Code updates and overwrites the frontend files, run it again. incipit keeps a lightweight official restore point per target/version, so you can return the patched extension to stock Claude Code at any time.
incipit modifies the Claude Code official extension files on your disk. It is not a VS Code extension itself, and it does not replace the official one. Your Claude subscription, API key, login state, MCP configuration, tool schema, and permission settings — every piece of official logic — behave exactly as they would without it.
Remove it and the extension is back to its stock state.
Requires Node.js 16 or later.
npm install -g @alphacatmeow/incipit@latest
incipit is a terminal CLI; it must be installed globally. npm install @alphacatmeow/incipit (without -g) is npm's syntax for installing a local dependency, which drops the package into the current directory's node_modules/ — neither registered on your PATH nor runnable.
Then:
incipit
On first launch you'll choose a CLI language, then enter the interactive menu:
Menu actions:
- Apply / Restore: apply the patch, or restore the selected Claude Code target to its official files. The first clean apply for each target/version records one official restore point; later applies reuse it. Restore does not touch other VS Code settings.
- Configure: toggle math rendering and the session usage badge; switch body font size (12 / 13 / 14 / 15 / 16, default 13) and the palette (warm-black / ink-black / warm-white); replace the Claude app icon with your own SVG or transparent PNG.
- Manage Claude Code targets: auto-detects VS Code / Cursor / Insiders / VSCodium / Windsurf / Antigravity, and accepts manually specified extension directories.
- CLI language: switch between Chinese and English at any time.
Skip the menu and run directly:
incipit apply # apply directly
incipit restore # restore the current target to official Claude Code files
After every Claude Code update, the local patch is overwritten by the official files — run incipit again and re-apply. To upgrade incipit itself, use the same global install command.
What changed in each version is in the changelog.
To uninstall only the incipit CLI:
npm uninstall -g @alphacatmeow/incipit
This removes the incipit command itself. It does not restore a patched Claude Code extension or delete ~/.incipit/; run incipit restore first if you want to roll back the patch.
A literary-style interface — warm-black background, cream-toned serif type, color narrowed to lightness steps within a single hue, terracotta surfaced sparingly only on links, emphasis, and the bottom status line.
Three palettes ship together: the default warm-black, the light warm-white, and ink-black — an achromatic variant that trades the terracotta accent for a neutral grey scale. Switch under Configure, then apply again.
math rendered, tables in booktabs style, code-block syntax colors muted, tool calls collapsed to a single line, the expanded layer using deep red and deep green for diffs, and character-level differences traced inline in muted accents.
Engineering surfaces fold into the same literary style — tool calls, diffs, and the status line share the body's typeface, hue, and emphasis.
A persistent status line above the input box shows the current context size and cache hit rate, refreshing live with every send and reply. Click to expand a popover listing the per-turn token usage and cache ratios for the last few rounds, plus cumulative statistics for the whole session.
The data comes from Claude Code's local JSONL transcripts. No network calls, no model requests.
The detail view also charts cache-hit history over time. You can inspect how cache read, cache write, fresh input, and output shift across recent requests, or select a time range to see only that range's accumulated traffic.
incipit summarizes edit activity from local Claude Code transcripts into a project-level view. The current project shows added and removed lines; the global view shows recorded projects, conversation count, tool edits, active days, and a heatmap of editing density over time.
These statistics also read local transcript files only. They do not upload project content or enter the model context.
Tool calls read as an activity list in the manner of claude.ai: a glyph column with a connector line, tense-aware rows such as Edited tool_cards.js +3 −2 or Ran command, and a group summary (Read 7 files, edited 5 files · 1 failed) that collapses a whole run, thinking included. Whatever Claude says between tool calls stays ordinary prose and starts a new run. Carets fade in on hover, a running tool blinks in the glyph column, and a failed one turns red.
Edit / MultiEdit / Write previews start collapsed on their row. Expand a tool to see its historical patch with surrounding context, line numbers, whole-line change tints, and separate change sections in one scrollable viewport; a footer line carries notices, paging, and Full diff, which opens a searchable view with access to every changed line. Colors follow the selected theme, and long filenames shorten to fit without hiding their identity.
Historical context comes from the saved tool result. When it is unavailable, the preview identifies the known replacement fragments or requested contents instead of guessing from today's file. Large views render in pages and reuse bounded diff caches. The conversation, compact markers, change review, and composer share a reading column that adapts from a narrow sidebar to a wide editor panel.
File-change counts load while tool rows stay collapsed and recover from delayed history writes. When an execution ends—including a manual stop or a disconnected process—a change review appears after its last assistant activity. File diffs reconstruct the turn from saved tool operations; incomplete histories show the available operations with an explanation of their scope.
Agent and Task calls keep their own input, replies, thinking, and tool activity beneath a single collapsed row. Nested calls remain independently expandable, and parallel agents stay attached to their actual invocation. Running agents have an animated status icon; completed, failed, stopped, and unrecorded states remain distinct.
Workflow calls open into their recorded phases and agents, with per-agent activity, queued work, retries, cached results, and usage where Claude Code provides them. These views read official task events and local history only. Missing or unreadable records offer a retry and access to the source; long histories are paginated, and closing a view releases its readers.
Wine red / forest green under the warm-black theme; soft pink / soft green under the warm-white theme. Every element across the two themes is independently and consistently designed.
Complete math rendering, covering every complex case.
KaTeX is loaded on demand — when a reply contains no math, the math pipeline never starts. Font size is fixed at 1.21em, so stroke weight stays consistent with the serif body and CJK text in mixed runs. The over-stretched brackets in KaTeX's native rendering are fixed as well.
- Each user message has icons at the bottom: edit / rerun / fork / more.
-
Edit (inline editor): edit user messages in place, including their text, images, and IDE references. Assistant replies remain read-only; their copy menu and change review remain available. When later replies contain signed thinking, use Save and Rerun so the changed prompt is sent without replaying incompatible downstream thinking.
-
Attachment management: messages display the IDE file references, code selections, and images already attached. You can click to remove existing attachments, or drag-and-drop / paste to add new images. Local save: clicking save only rewrites the local JSONL conversation record file. No network requests are triggered. Resend logic: editing only modifies the local context state. To submit the modified content to the model, use Rerun after saving.
-
Rerun: available on user prompts throughout the conversation. It removes the selected prompt and its downstream context, then resends the prompt and supported attachments through Claude Code's native send and resume flow. Earlier model messages remain unchanged, keeping their prefix eligible for prompt-cache reuse. A cache hit is not guaranteed: expiry, available cache checkpoints, model/settings changes, and changes to text or images can affect it. The cache badge reports server usage for the current transcript; rebuilding its local statistics does not clear the server's prompt cache.
-
Fork: calls the host AppContext's forkConversation interface, copying the current and preceding context into a new session while leaving the original session intact.
-
More (dropdown menu): Includes Code rewind and its composite operations (Rewind and Rerun, Rewind and Fork). Rewind calls session.rewindCode to undo all subsequent disk-file changes. Includes Copy as text / markdown options.
incipit's local history capability follows a discipline: it does not fabricate model context, does not construct Claude Code's message tree on its own, and does not bypass Claude Code's session protocol. For rerun, edit, rewind, and fork, incipit performs only verifiable, minimal mutations on the local JSONL: when truncating history, it preserves a valid prefix, removes the user message and its downstream derivatives, and avoids leaving orphaned assistant / tool_use / tool_result fragments. Resend, code rewind, and conversation forking are all handed back to Claude Code's native interfaces — session.send, rewindCode, forkConversation.
To prevent irreversible disk writes from producing damaged states, incipit performs strict preflight before each operation: the current session id, the target JSONL, the host SessionState, and the relevant native interfaces must all be confirmed available, otherwise the operation is intercepted outright. After a rerun truncation, if the subsequent send fails, incipit will restore the original JSONL — provided it can confirm no new content has been appended to the transcript. The goal is to ensure local history mutations never produce contexts that violate the Claude Code / Anthropic messages structure: dangling tool results, wrong role ordering, misaligned conversation branches, or inconsistent file states.
This is a purely frontend project. It does not touch the model tool-calling layer or the network request layer.
The Claude provider's terms of service govern the relationship between you and their service: no API abuse, no rate-limit circumvention, no identity spoofing, no interference with server-side protocols. incipit lies entirely outside that scope — it only changes how things render on your local screen, with no connection to the model provider's servers. Every byte you send is identical before and after installation.
incipit restore
The CLI locks onto the current Claude Code target, confirms the action, then restores the official files saved for the same version and extension directory. Copied incipit resources under webview/ are removed too. Any other settings you've configured in VS Code are not affected.
For the 0.1.7 transition, incipit clean-backups is available to delete old named backup files under ~/.incipit-backup/. It does not delete the new official restore points under ~/.incipit/.
Fully tested and stable on Windows 11 for daily use.
Linux and macOS should work in theory, but have not been verified on actual hardware. If you run into problems, open an issue with your Claude Code extension version and the error message.
After every Claude Code update, the patch is overwritten alongside it. Run incipit again — usually done in under ten seconds.
VS Code enforces strict sandbox isolation between extensions — one extension cannot inject scripts or styles into another's interface. The only way to change how Claude Code's chat renders is to modify its files on local disk directly. That's why incipit takes the patching approach.
If Claude Code ever ships an official theming or style-injection API, this project will migrate to that path immediately, and the patching approach will be archived.
Thanks to the linuxdo community for discussion, sharing, and feedback.
incipit is distributed under the GNU Affero General Public License v3.0 or later, from 0.1.7 onward. Releases up to 0.1.6 were published under the MIT License and remain so. See LICENSE.
Prose code blocks and diffs share highlight.js 11.9.0, copyright © 2006 Ivan Sagalaev and contributors, under the BSD 3-Clause License. The full license is included in data/hljs/LICENSE. Additional core grammars load only when needed; their pinned sources and hashes are recorded in data/hljs/languages/sources.json.
The Vue single-file component grammar is adapted from highlightjs-vue, copyright © 2019 Sara Lissette Luis Ibáñez, under the BSD 3-Clause License. It supports Vue 3 script setup and flexible attribute order. The full license is included in data/hljs/LICENSE.vue.
Agent history uses markdown-it 15.0.1 under the MIT License. Full third-party notices are included in data/markdown/LICENSES.txt, with dependency licenses, the pinned package integrity, and the asset hash in data/markdown/source.json. The parser loads locally on demand; opening history does not load remote images.
incipit bundles the following webview fonts, each under the SIL Open Font License 1.1. The full license accompanies every family at data/fonts/<family>/OFL.txt:
| Font | Use | Copyright | Source |
|---|---|---|---|
| IBM Plex Serif | Latin reading + emphasis | © 2017 IBM Corp., Reserved Font Name "Plex" | IBM/plex |
| Noto Sans SC | CJK reading (default plex-hei preset) |
© 2014–2021 Adobe (Source Han Sans / Noto CJK) | notofonts/noto-cjk |
| LXGW WenKai 霞鹜文楷 | CJK reading (opt-in plex-serif kai preset) |
© 2021–2026 LXGW; © 2020 The Klee Project Authors | lxgw/LxgwWenKai |
| Recursive | Monospace (code / tool output) | © 2020 The Recursive Project Authors | arrowtype/recursive |
The OFL permits this bundling and redistribution; the fonts are subset (a permitted modification) and none is renamed in a way that uses a Reserved Font Name.












