AI TODO Hunter — Resolve TODOs & FIXMEs with AI in VS Code, Cursor and VSCodium
Every TODO, FIXME, XXX and HACK in your workspace, in one list. Click one, and a model writes the fix. You read it before it lands.
Built by Ciro Cesar Maciel — because every codebase I touch has a layer of TODOs nobody goes back to.
Every codebase I touch has a layer of // TODO: refactor later and // FIXME: this breaks for empty arrays that nobody ever goes back to. They are small, they are specific, and they are exactly the kind of work a model does well. What was missing was a way to see them all and say "yes, do that one."
I didn't want another chat. I wanted a list, a button, and a diff.
TODO Hunter scans your workspace, lists every TODO by file, and sends only the code around the one you pick to the model you choose on OpenRouter. Nothing changes in your file until you click Apply.
See it in action
A FIXME in a cart, one click on the sparkle, and the model's answer waits for you: Apply, Show diff or Cancel.
Show diff opens the proposed change side by side with your code. Here, Claude Sonnet 4.6 removed the FIXME and guarded the guest cart.
After Apply, save and a rescan, the FIXME is gone from the code and from the list: src/cart/totals.ts no longer appears.
The real output, before and after:
// Before
export function computeTotals(cart: Cart): CartTotals {
// FIXME: handle empty cart (lines is undefined for guest carts)
const subtotal = cart.lines.reduce((sum, line) => sum + lineTotal(line), 0);
// After (anthropic/claude-sonnet-4.6)
export function computeTotals(cart: Cart): CartTotals {
const lines = cart.lines ?? [];
const subtotal = lines.reduce((sum, line) => sum + lineTotal(line), 0);
Why this one?
- Finds them all.
TODO, FIXME, XXX and HACK after //, #, --, ;, /* or <!--, case-insensitive. Globs and tags are yours to change.
- A list, grouped by file. Each file shows its count, each item its line. Click to jump. The status bar keeps the total.
- One click to resolve. The sparkle on a list item sends the surrounding code to the model and comes back with an implementation.
- You approve every change. Apply, Show diff or Cancel. Nothing touches your file before you choose.
- Works at the cursor too. Right-click a TODO line in the editor → Resolve TODO at Cursor with AI.
- Only what's needed leaves your machine. Scanning is local. Resolving sends the lines around that one TODO (60 by default), nothing else.
- Bring your own model. Any of the 350+ models on OpenRouter, pay per token, no subscription.
How it compares
|
AI TODO Hunter |
Todo Tree |
TODO Highlight |
Better Comments |
| Lists every TODO in a side bar |
Yes |
Yes |
No |
No |
| Highlights tags in the editor |
No |
Yes |
Yes |
Yes |
| Writes the implementation with AI |
Yes |
No |
No |
No |
| Diff preview before changing code |
Yes |
— |
— |
— |
| Any model, pay per token |
Yes: OpenRouter |
— |
— |
— |
| Works in Cursor, VSCodium (Open VSX) |
Yes |
Yes |
Yes |
Yes |
They work well together: keep Todo Tree or Better Comments for highlighting, and use TODO Hunter to actually close the TODOs.
From each extension's public listing, September 2026. Something changed? Tell me at ciromaciel.click.
Setup
- Install AI TODO Hunter from the Extensions view.
- Get an OpenRouter API key (
sk-or-...). Pay per token, no subscription.
- Run
TODO Hunter: Set OpenRouter API Key, or just resolve a TODO: it asks for the key the first time.
- Optional:
TODO Hunter: Select Model shows the live OpenRouter list with context size and prices. The default is Claude Sonnet 4.6, because TODOs usually need real reasoning.
Use it
- Open the TODO Hunter icon in the activity bar. The workspace is scanned on startup; the refresh button rescans.
- Hover a TODO and click the sparkle, or right-click a TODO line in the editor → Resolve TODO at Cursor with AI.
- Choose Apply, Show diff or Cancel.
| Command |
What it does |
TODO Hunter: Scan Workspace for TODOs |
Rescans every file matching includeGlobs |
TODO Hunter: Resolve TODO with AI |
Resolves the TODO selected in the side bar |
TODO Hunter: Resolve TODO at Cursor with AI |
Resolves the TODO on the current line |
TODO Hunter: Select Model |
Picks an OpenRouter model from the live list |
TODO Hunter: Set OpenRouter API Key |
Prompts for your key |
Configuration
| Setting |
Default |
What it does |
todoHunter.openRouterApiKey |
— |
Your sk-or-... key. |
todoHunter.model |
anthropic/claude-sonnet-4.6 |
Any OpenRouter slug. |
todoHunter.includeGlobs |
common code and doc extensions |
Files to scan. |
todoHunter.excludeGlobs |
node_modules, dist, build, … |
Folders to skip. |
todoHunter.tags |
["TODO","FIXME","XXX","HACK"] |
Tags to track, case-insensitive. |
todoHunter.contextLines |
60 |
Surrounding lines sent to the model. |
Recommended models: Claude Sonnet 4.6 (default), GPT-5.1 Codex, Gemini 3.5 Flash for trivial TODOs, DeepSeek V3.2 for the cheapest runs.
FAQ
What is sent to the model?
Only the code around the TODO you chose (contextLines, 60 by default), and only when you click resolve. It goes to OpenRouter and then to the provider behind the model you picked. Scanning is local.
Will it change my files without asking?
No. Every change waits for Apply. Show diff lets you read it first.
What if the TODO is vague?
The model is told to pick the most likely intent from the surrounding code, and to return the code unchanged when it can't resolve it safely. You still see it before it lands.
Does it work in Cursor and VSCodium?
Yes. It is published on the VS Code Marketplace and on Open VSX.
About me
I'm a developer building tools I want to use. More of my stuff at ciromaciel.click.
If this closed a TODO older than your last job, send it to your team.
Proprietary — see LICENSE.
Keywords: todo, fixme, todo tree, todo list, todo highlight, hack, xxx, technical debt, ai refactor, resolve todo, ai agent, code comments, openrouter, claude, gpt, gemini, deepseek, copilot alternative, cursor, vscodium.