Feature documentation
One file per capability. Each records what the feature does, how it is wired, the protocol facts it depends on, and the traps found while building it — so a future session does not have to re-derive them.
| Feature | Status | Code |
|---|---|---|
| Session transport | Implemented | Scripts/client.js |
| Conversation model | Implemented | Scripts/session.js |
| Transcript | Implemented | Scripts/transcript.js |
| Sidebar | Implemented | Scripts/sidebar.js |
| Tool approvals | Implemented | Scripts/permissions.js, Scripts/diff.js |
| Plan mode | Implemented | Scripts/permissions.js |
| Questions | Implemented | Scripts/permissions.js |
| Authentication | Implemented | Scripts/auth.js, Scripts/cli.js |
| Context and prompting | Implemented | Scripts/main.js |
| Session history | Implemented | Scripts/sessions-store.js |
| IDE bridge | Proposed — not built | — |
The one-paragraph architecture
The extension spawns one claude process per window and speaks its
newline-delimited JSON protocol over stdio. Session messages (assistant text,
tool calls, results) and control traffic (the initialize handshake, permission
prompts, interrupts) share that pipe. client.js owns the framing; session.js
turns messages into a conversation model; transcript.js, sidebar.js and
permissions.js are views over that model. Nothing else runs — no Node sidecar,
no bundled copy of Claude Code, no network access of the extension's own.