Review any pull request.
Trust none of it.
Paste a public GitHub link. Chalk snapshots the code onto a volume, mounts it into a sandbox that can reach nothing but the Chalk router, and runs the Claude Agent SDK on it. You watch the review happen, then get comments shaped exactly like GitHub's review API expects.
Paste a pull request
Any public repository works: a pull request link, a commit link, or just the repo, in which case the agent picks its newest open pull request. The examples replay recorded runs instantly; a fresh review takes about a minute.
How it works
A review agent reads code written by strangers and talks to a model on your bill. Every step below keeps one of those from becoming a problem.
1. Snapshot the repo onto a volume
The server fetches the pull request's head commit and its diff, then writes them to a Chalk volume. The sandbox mounts a pinned version, so the agent reviews an immutable, read-only snapshot.
2. Mount it into a sealed container
A gVisor sandbox with an empty network allowlist: no egress, no DNS, no GitHub. A probe to github.com fails before the agent starts, and the page shows it.
3. Route the model through Chalk
The one host the sandbox can reach is the Chalk router. The API key inside the sandbox is a placeholder; the egress proxy swaps in the real key on the way out.
4. Watch the session live
The Claude Agent SDK reads the diff, opens the code around it, and narrates as it goes. Tokens and tool calls stream from the sandbox to your browser as they happen.
5. Get GitHub-ready feedback
Comments arrive through custom tools that reject lines outside the diff, so every object is a valid entry for GitHub's create-review API, plus the final review payload.
Nothing to clean up
The sandbox is terminated when the review ends and its lifetime caps it anyway. Volumes are keyed by commit, so reviewing the same head again skips the upload.
Build your own review agent
Clone the example, store a router key as a Chalk secret, and review a pull request from your terminal. The same pipeline powers this page; deploy.py serves it from a scaling group in your environment.
The agent is under three hundred lines of Claude Agent SDK code. Change the prompt, add tools, or post the payload to GitHub with your own token.
chalk-ai/pr-review-agentgit clone https://github.com/chalk-ai/pr-review-agent
cd pr-review-agent
chalk login
# One time: store a router key the sandbox can use without ever seeing it.
# Paste the key that `chalk router api-key create` prints.
chalk secrets set CHALK_ROUTER_API_KEY
# Review a pull request from your terminal...
./review_cli.py https://github.com/pallets/markupsafe/pull/528
# ...or deploy this page as your own web app.
./deploy.pyWhat Chalk handles
The agent brings judgment. Chalk brings the place it's safe to use it.
Untrusted code stays put
The repository is someone else's code. It runs nowhere, and the sandbox it sits in can't talk to anything except the model.
Keys never enter the sandbox
add_credentials binds a Chalk secret to one host. The agent sees a placeholder, so a prompt injection in a README has nothing to steal.
One router for every model
Claude Code speaks the Anthropic Messages API, which the Chalk router serves directly. Usage, cost and traces land in your environment.
Versioned inputs
Every review reads a pinned volume version. Re-run it, compare models, or hand the same snapshot to an eval.
Sandboxes on demand
Each review gets a fresh container in seconds and gives it back when it's done. Run one, or one per pull request in your org.
Open source
The pipeline, the agent, this page's backend and a CLI are on GitHub under Apache-2.0. Swap the prompt, the tools or the model.
Put a reviewer on every pull request
Code review, triage, or any agent that reads untrusted input. Talk to an engineer about running it in sandboxes next to your data.