Skills you hand to your AI go dull.
Whetstone is a private practice space that runs on your machine. Your own coding agent writes real-world problems around your work, real tests grade them, and every idea you solve comes back before it fades.
Learn what you don't know.
Pick a system you want to understand, or a topic your next role needs. Your agent writes it as a series of steps, each a little harder than the last, starting from what you already know.
Relearn what you do.
The things you learned years ago, or now hand to your AI, fade quietly. Whetstone brings them back as fresh problems, so you find out what is still there.
Keep every skill sharp.
Each skill shows how sharp it is today. Solved ideas return on a new surface after 3 days, 3 weeks, 3 months, 6 months and a year.
Built to sit beside Claude.
Whetstone is written for the built-in browser of Claude's desktop app. The app runs in the side pane, your Claude session runs next to it, and the session watches you work and answers in your editor's margin. It works just as well with any coding agent that can run commands in a folder, such as Codex or Cursor.
You choose how much it says.
The pair mode sits under your editor. Your session follows it.
- Sized for the pane
- Designed at 820 pixels wide, in Claude's own neutral colours, light and dark, so it reads as part of Claude. It also works full screen and on a phone.
- Buttons that reach your session
- Prepare, Ask for review and Follow this path queue work for your agent. Prepare turns into Start when the question is ready.
- A session that starts itself
- Opening Claude Code in the folder shows what is due today. The optional mod keeps the watch running and puts your reviews in the status line.
- It tutors, it doesn't type
- A guard hook stops your agent before it writes to your progress or to a solo question's folder.
- Not only Claude
- Every agent drives the same plain command line, on the subscription you already have, and the app opens in any browser tab.
One idea, set in the world you work in.
Three engineers ask their agents for the next question in the rate limiter module. Each one practices the same idea in the world they already know. Pick an engineer.
Nothing to fill in.
Your agent already knows you from the work you've done together: what you build, your stack, where you're headed, and what it now writes for you. It drafts your profile from that, and from your GitHub activity if you agree. You only check the draft.
Or set it in a company's world.
Press Prepare and choose your own work, a company you're preparing for, or a domain. Before an interview at Uber, the same rate limiter question can come back built on the questions Uber candidates report. Both versions stay, each with its own progress.


The question bank is grounded in 2,500+ interview reports from ~400 companies, organised into 250+ modules and ~80 systems to build.
Systems, not puzzles.
A learning path is an ordered list of modules toward one system. Ledgers that must balance, retries that must not charge twice, rate limiters, caches and schedulers.
- Payments and fintech
- payment processor, checkout, wallet, crypto exchange
- Trading and markets
- high-frequency trading, matching engine, risk, backtesting
- Marketplaces and mobility
- taxi booking, meal delivery, hotel booking, flash-sale tickets
- Social and media
- news feed, short-video feed, video and music streaming
- Messaging
- chat, video calls, collaborative docs, email
- AI and developer platforms
- an LLM gateway, LLM serving, RAG, CI, SSO
- Data and infrastructure
- data warehouse, Kafka-style log, object storage, databases
- And further out
- search, maps, CRM, payroll, vehicle updates, fab scheduling




Practice exactly what your AI now does for you.
Building from a blank file is one question type among eight. The rest train what assisted work wears down: reading, predicting, debugging and judging generated code.
| What your AI does for you | What you practice in Whetstone |
|---|---|
| Writes the code | BuildThe problem comes first. The lesson opens after your first try. |
| Explains code you didn't write | PredictRead working code and say what it does before you run it. |
| Finds the bug | FixA bug report with symptoms, never the cause. |
| Reviews its own pull request | ReviewFind the defects planted in plausible AI-written code. |
| Writes the tests | TestsYour tests must catch hidden bugs you never see. |
| Sketches the architecture | DesignDraw it on a whiteboard. Your agent grades it against a rubric. |
| Works through a whole task with you | AI-allowed roundsA small codebase, solved in stages with the AI tool you use at work. Then, with the AI closed, you say what your code returns. |
| Writes the one-liner | TerminalText pipelines, jq and git rescues in a sealed shell. Your script is replayed on scenarios you never saw. |
Nine finished questions ship in the repo.
They set the quality bar your agent writes to. Each opens on GitHub, with its problem, hints, tests and the wrong solutions the tests must catch.
- BuildStop paying twice for a slow lookupWrap a slow, pure function so each unique input is computed only once.about 15 min
- PredictWhich webhooks get throughRead a rate limiter and predict what it does on three scripted runs, without running it.about 15 min
- FixPayment run charged a customer twiceCustomer 42 was charged twice, about a second apart. The logs show one timeout.about 25 min
- ReviewReview the nightly payout jobYour AI assistant wrote it. The style is clean and the names are good. Find what you would block the pull request for.about 20 min
- TestsProve the retry helper worksWrite the tests for a retry with exponential backoff. Every promise in its docstring is something a test can check.about 25 min
- DesignShort links for a launch campaignDesign the short link service behind a campaign on TV, email, SMS and printed QR codes. Finance pays partners from the click counts.about 45 min
- AI-allowed roundRefunds for the wrong ordersCustomers whose orders arrived early are getting late-delivery refunds. Work it in stages with the AI tool you use at work.about 60 min
- TerminalWhich endpoints keep failingThe 5xx alert fired at 09:10 and the dashboard can't say which requests. Find the endpoints in the nginx logs.about 30 min
- TerminalTwo commits gone before standupA reset on main dropped two finished commits that nobody pushed. Get them back, in order.about 30 min

One question, four moments.




Help climbs one rung at a time.
The same agent that writes your questions tutors you without giving the answer away. The next rung unlocks only after a new test run.
- A question about the failing behaviour.
- The concept behind it.
- A concrete next step, tied to a named test.
- A skeleton with the key lines blank.
Graded by tests that were tested.
Before a question reaches you, Whetstone checks that its reference solution passes, its starter fails, and every wrong version of the solution is caught. Visible tests check the basics. Hidden tests check the edge cases.
Before your first run you guess which tests will pass. After a solve you explain one hidden case in your own words.
Talk to your agent in plain words.
- "What should I practice next?"
- It reads your progress and offers two choices. Reviews that are due come first.
- "Make me a path to build a checkout system."
- It proposes an ordered list of modules, or finds a shipped path that fits.
- "I'm stuck on rate-limiter/02."
- It runs your code, then helps one step at a time. It doesn't write your solution.
- "Pair with me as an interviewer."
- It watches you work and asks one question at a time in your editor's margin.
- "Review my solution."
- Up to three comments, most severe first, each with the principle, the evidence and a next step.
- "Interview me on system design."
- It runs a mock interview and scores you against a rubric.
System design, on a real whiteboard.
Write the design, draw it with boxes and arrows, and ask for a review. Your agent grades each rubric point with a quote from your own design. A missed point shows only a question until you pass.




Every solved idea comes back.
Not the same question. A variant: the same idea on a new surface, 3 days later, then 3 weeks, 3 months, 6 months and a year. Drag through the year to see what that does to an edge.
The curve is an illustration of spacing, not a measurement of you. The schedule is the real one. A clean review lengthens the gap; a failed one shortens it to 2 days.
Grit ranks, like the stones.
The game layer rewards mastery, never volume. No points, no leaderboards, and you can hide it.
- 220Started.
- 1000Solved.
- 3000Solved on your own, no last hint, no peeking.
- 6000Mastered: a spaced variant also passed when it came due.
- 8000Still sharp after a long review.
The weekly streak asks for 3 practice days and forgives a missed week. When it breaks you see your total practice days, never "streak lost".


Built on evidence, and it says how strong.
Thirteen teaching rules sit behind every question: problem before lesson, a gated hint ladder, feedback on the work and never the person, deterministic concurrency tests. Each one cites its studies and rates the evidence as strong, moderate or weak.
Yours, on your machine.
No account and no telemetry. Whetstone has no AI of its own: your agent writes the questions on the subscription you already pay for, and Whetstone checks and grades them locally.
Quick start
You need Docker and an AI coding agent that can run commands in a folder: Claude Code, Codex, Cursor or another.
git clone https://github.com/boffti/whetstone && cd whetstone cp .env.example .env docker compose up -d --build # then open http://localhost:8000 claude # or codex, or open the folder in Cursor
Then tell your agent: "Set up my Whetstone profile." If something doesn't work, bin/whetstone doctor checks the setup and says how to fix each problem. Exercises are Python 3.12 today.
Your work never leaves my/.
Your questions can mention your job, so they stay with you. A git pull brings new paths and research without touching them.
whetstone/ bin/ | committed | The app and the command line |
content/ | committed | The shared catalog and learning paths |
examples/ | committed | Finished questions that set the quality bar |
my/ | never | Your profile, questions, paths, drafts and progress |
What's next
- Build, predict, fix, review, tests and design questions, with mutation-checked tests
- Requests from the app to your agent, and live pairing in the editor's margin
- System design on a whiteboard, graded against a rubric
- Terminal questions in a sealed shell, graded by replaying your script
- More tool packs: sqlite3, kubectl, Terraform and the AWS CLI on a local fake
- More languages: TypeScript and Go, chosen from your profile
Open source, and open to you.
New learning paths, modules, paraphrased interview research and app improvements are all welcome. Questions themselves are personal, so they stay out of the repo.