Treat your AI as a coworker — ask questions about its changes in the same session that wrote the code.
/askdiff from inside any Claude Code session opens a GitHub-style diff
viewer in your browser. Hover a line, click +, type a question. The
answer streams back inline — and because each ask resumes the same
Claude Code session that wrote the code, the model already remembers
the file, the conversation, and why it made the change.
# 1. One-time skill install
npx -y askdiff install-skill
# 2. From any Claude Code session
/askdiffThat's it. No API key, no global install, no config. The browser opens to a syntax-highlighted diff of your working tree; comments stream back as the model thinks.
Developers often prompt AIs to write the code, then, if the diff becomes large enough, open draft GitHub PRs in order to review it better. Then, if there are any questions, take the diff back to the terminal, ask questions about it, and repeat.
Askdiff simplifies this process by combining the diff viewer and the Q&A interface into one seamless experience, directly integrated with the very same Claude Code session that wrote the code. It makes you treat the model truly as a coworker who already knows the entire context and the reasoning behind every single line of the diff.
Each ask spawns the claude CLI with --resume <your-session-id>.
So your question becomes a real turn in the running session's transcript:
- No diff sent to the model. The resumed session already has the full context that wrote the code; the prompt is just your question.
- No Anthropic API key needed. askdiff doesn't talk to the API —
it shells out to the
claudeCLI you've already auth'd via subscription or whatever. - No process cleanup. The server self-exits after 5 minutes of inactivity — close the browser tab and forget about it.
| Inline comments | Click the + gutter button to comment on any line. Drag to comment on a range. |
| Streaming answers | Tokens stream in as Claude generates them — same model context that wrote the code. |
| Threaded discussions | Multiple asks per line, each its own thread, all anchored to the diff. |
Hover any line in the diff. A + button appears in the gutter.
Click it for a single-line question, or click and drag to range over
multiple lines. The comment widget renders below the selected lines;
type a question and hit Cmd/Ctrl+Enter (or click Send).
Tokens stream in as the model generates them — usually starting within
~1 second, typing speed-of-thought. Click Stop mid-stream to abort.
Markdown is rendered live, including syntax-highlighted code blocks
in any of 30+ languages.
Each line can have multiple ask/answer pairs. They render as a threaded conversation inline with the diff, so you can ask a follow-up without losing context.
All optional. Set as env vars before running npx -y askdiff — or
let the skill resolve them automatically.
| Variable | Default | Notes |
|---|---|---|
PORT |
7837 |
Auto-bumps if taken. |
ASKDIFF_SESSION_ID |
(resolved from $PPID) |
Force a specific Claude Code session UUID. |
ASKDIFF_PROJECT_CWD |
(parent CC manifest, then process.cwd()) |
Project directory to diff. |
ASKDIFF_MODEL |
(inherits resumed session's model) | Override the Claude model for asks. |
CLAUDE_CONFIG_DIR |
~/.claude |
Where Claude Code stores sessions/, projects/. |
CLI flags also work (askdiff --port 7838 --no-open --session <uuid>).
Run askdiff --help for the full list.
When you next run /askdiff and a newer version is on npm, the skill
prints UPDATE_AVAILABLE: pinned=X latest=Y and asks whether to
upgrade or proceed. Upgrade is one command:
npx -y askdiff@latest install-skill --forceThis rewrites the skill to pin to the new version. The first
subsequent /askdiff runs the upgraded CLI.
install-skill writes one file: ~/.claude/skills/askdiff/SKILL.md.
That's the entire surface area in your CC config.
In this repo (for contributors) there are two more:
/askdiff-dev— local Vite dev server with HMR + tsx-run WS server. Use when editingpackages/ui-browser./askdiff-stop— kill everything/askdiffand/askdiff-devstarted.
The npm package (packages/cli) is a single esbuild-bundled Node
binary that hosts an HTTP server (serving the prebuilt UI bundle in
dist/ui/) and a WebSocket on the same port at /ws. The CLI
imports startServer from @askdiff/server, which spawns
claude --resume per ask and forwards text_delta events to the
client. The browser UI (packages/ui-browser) is React 19 + Vite +
Tailwind v4 + zustand, with react-diff-view for rendering and
refractor for syntax highlighting.
git clone https://github.com/narghev/askdiff
cd askdiff
pnpm install
pnpm test
pnpm lint
pnpm run buildFrom a Claude Code session in this repo:
/askdiff-dev # Vite + WS server with HMR
/askdiff-stop # tear it down
To exercise the production-shaped binary locally:
pnpm run build
node packages/cli/dist/index.js --port 7838"Claude session: (none — set ASKDIFF_SESSION_ID or use --session)"
The skill couldn't read the parent CC manifest. You're either running
askdiff from outside a Claude Code session (no $PPID.json in
~/.claude/sessions/), or CLAUDE_CONFIG_DIR points somewhere
else. Pass --session <uuid> explicitly to override.
"Port 7837 is already in use"
Another askdiff is running, or something else grabbed the port. Run
/askdiff-stop (in-repo), or pass --port 7838.
Browser opens, UI loads, but never connects
The WS upgrade is failing. Check /tmp/askdiff.log — usually it's an
old version of the UI cached against a new server (run
/askdiff-stop and reload the browser tab) or a hung
claude --resume subprocess (check ps aux | grep claude).
/askdiff doesn't appear in Claude Code's skill picker
Run npx -y askdiff install-skill to write
~/.claude/skills/askdiff/SKILL.md. If it's there but still missing,
restart Claude Code or run /reload-plugins.
