Skip to content
AlphaCatMeowPublic
forked from yc-duan/incipit

About

A frontend rework of the official Claude Code VS Code extension — surface redrawn, engine untouched

Resources

Stars

0 stars

Watchers

0 watching

Forks

 
 

Repository files navigation

incipit

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.


A patch, not a standalone extension

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.


Install

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:

incipit CLI main menu: apply patch / restore official Claude Code / configure / manage targets / CLI language incipit configure submenu: math rendering, session usage, body font size, theme palette

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.


Interface

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.

incipit chat panel as a whole: warm-black background, cream serif body, bottom status line

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.

incipit tool-call expanded block: deep red / deep green diff backgrounds, restrained line numbers, inline character-level accents — same key as the body


Context and cache

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.

incipit context and cache badge: persistent numbers in the status line, and the session usage popover when expanded

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 cache-hit history: current cache, context, hit-rate chart, selected time range, and cache read / cache write / output / fresh input totals


Project activity

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.

incipit project activity view: current project added and removed lines, global Claude Code conversation statistics, and edit activity heatmap

These statistics also read local transcript files only. They do not upload project content or enter the model context.


diff

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.

incipit diff in warm-black: wine red / forest green backgrounds with character-level inline coloring incipit diff in warm-white: soft pink / soft green backgrounds with character-level inline coloring

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.


Math rendering

Complete math rendering, covering every complex case.

incipit math rendering: display blocks, sums / integrals / limits / products, matrices, and aligned equations incipit math rendering: inline and display math inside lists, blockquotes, and table cells

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.


Conversation history editing

  • Each user message has icons at the bottom: edit / rerun / fork / more.

incipit user-message action row: edit / rerun / fork / more — four restrained icons

  • 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.

incipit inline editor: in-place edit on a user message — chip strip at the top with image attachment chip and add button

  • 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.


Compliance

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.


Restore

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/.


Platforms

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.


Why not a VS Code extension

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.


Acknowledgements

Thanks to the linuxdo community for discussion, sharing, and feedback.


License

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.

Bundled syntax highlighting

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.

Bundled message formatting

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.

Bundled fonts

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.


About

A frontend rework of the official Claude Code VS Code extension — surface redrawn, engine untouched

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages