AI TODO Hunter
Stop letting // TODO comments rot. Scan the whole workspace, pick one, and let an AI agent resolve it in-place.
By Ciro Cesar Maciel - one of a series of small, sharp VS Code tools.
AI TODO Hunter scans your workspace for every TODO, FIXME, XXX, and HACK comment, groups them in a dedicated VS Code side-bar view, and lets you resolve any item with an AI agent powered by OpenRouter.
It is not a chat window. It is not another vague "AI assistant" panel. It is a concrete workflow:
scan workspace -> choose TODO -> AI reads surrounding code -> preview -> apply
You keep control. The extension finds the debt. The model writes the patch. VS Code shows you the result before anything touches your file.
The problem
Every mature codebase has a hidden second backlog:
// TODO: handle empty state
// FIXME: this breaks when the token expires
// HACK: temporary workaround until billing v2
// XXX: this needs a proper parser
Those comments are usually honest. They point to real risk, missing behavior, rushed decisions, and unfinished cleanup.
The problem is that nobody comes back.
AI TODO Hunter turns those comments into an actionable queue.
What it does
- Scans the workspace for
TODO, FIXME, XXX, and HACK comments.
- Supports many file types: TypeScript, JavaScript, Python, Go, Rust, Ruby, PHP, Java, Kotlin, Swift, C/C++, C#, Scala, shell, SQL, Vue, Svelte, Astro, Markdown, and more.
- Groups findings in the Activity Bar so you can see technical debt by file.
- Jumps straight to source when you click a TODO in the tree.
- Resolves one TODO at a time by sending the relevant surrounding code to the model you choose.
- Works from the editor with
Resolve TODO at Cursor with AI.
- Shows confirmation before mutation: apply the result or inspect a diff first.
- Uses OpenRouter BYOK: one API key, hundreds of models, pay-per-token.
- Keeps scanning local: nothing leaves your machine until you explicitly ask AI to resolve an item.
Why it is different
| Usual AI assistant |
AI TODO Hunter |
| Starts with a blank chat box |
Starts with real TODOs in your code |
| You explain what to fix |
The comment already points to the work |
| Easy to forget context |
Pulls surrounding source automatically |
| Hard to track progress |
Side-bar list shows the actual queue |
| Can overwrite too much |
One TODO, one preview, one controlled apply |
This is not "ask the AI something." This is "clear the TODO backlog."
Core workflow
- Open the TODO Hunter icon in the Activity Bar.
- Click Scan Workspace for TODOs.
- Pick a TODO/FIXME from the tree.
- Click the sparkle action or run
Resolve TODO with AI.
- The extension sends the selected comment plus surrounding source to your chosen OpenRouter model.
- Review the generated change.
- Apply it, inspect the diff, or discard it.
Example
Before:
export function getDisplayName(user?: User) {
// TODO: handle empty user names
return user?.name.trim() || user?.email || 'Unknown';
}
Run TODO Hunter: Resolve TODO with AI.
Possible result:
export function getDisplayName(user?: User) {
const name = user?.name?.trim();
if (name) return name;
const email = user?.email?.trim();
if (email) return email;
return 'Unknown';
}
The exact patch depends on the model and surrounding code. You always review before applying.
By default, TODO Hunter tracks:
| Tag |
Meaning |
TODO |
Work intentionally left for later |
FIXME |
Known bug or broken behavior |
XXX |
Suspicious, risky, or needs attention |
HACK |
Temporary workaround that deserves cleanup |
You can customize the list with todoHunter.tags.
Supported files
The default scan includes common source and documentation files:
ts, tsx, js, jsx, mjs, cjs, py, go, rs, rb, php, java, kt, swift,
c, cc, cpp, h, hpp, cs, scala, sh, bash, zsh, sql, vue, svelte,
astro, md
It skips noisy generated folders by default:
node_modules, dist, build, out, .git, coverage, .next, .nuxt,
vendor, __pycache__
Both lists are configurable.
Bring your own model
TODO Hunter uses OpenRouter so you can choose the model that fits the task and budget.
Recommended starting points:
| Model |
Best for |
| Claude Sonnet 4.6 |
Default. Strong code reasoning and careful edits |
| GPT-5.1 Codex |
OpenAI-style coding, refactors, implementation details |
| Gemini 3.5 Flash |
Cheap, fast, good for simple TODOs |
| DeepSeek V3.2 |
Very low cost, solid for straightforward code changes |
| Qwen3 Coder Plus |
Code-heavy tasks and implementation cleanup |
The settings page includes a curated shortlist. The command TODO Hunter: Select Model opens the live model list from OpenRouter.
Commands
| Command |
What it does |
TODO Hunter: Scan Workspace for TODOs |
Rescans files matching todoHunter.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 editor line |
TODO Hunter: Select Model |
Opens the live OpenRouter model picker |
TODO Hunter: Set OpenRouter API Key |
Prompts for your sk-or-... key |
Settings
| Setting |
Default |
Description |
todoHunter.openRouterApiKey |
empty |
Your OpenRouter API key |
todoHunter.model |
anthropic/claude-sonnet-4.6 |
Model slug used for code generation |
todoHunter.includeGlobs |
common code/doc extensions |
Files to scan |
todoHunter.excludeGlobs |
generated/dependency folders |
Folders to skip |
todoHunter.tags |
["TODO", "FIXME", "XXX", "HACK"] |
Comment tags to track, case-insensitive |
todoHunter.contextLines |
60 |
Source lines sent before/after the selected TODO |
Privacy
Scanning is local.
Your code is sent to OpenRouter only when you explicitly ask TODO Hunter to resolve a specific item. The request includes:
- the TODO/FIXME comment;
- surrounding source code based on
todoHunter.contextLines;
- enough file context for the model to propose a patch.
From OpenRouter, the request is routed to the model provider you selected, such as Anthropic, OpenAI, Google, DeepSeek, Meta, Mistral, Qwen, or xAI.
Nothing is sent during normal scanning. Nothing is sent just because the side-bar is open.
Safety model
TODO Hunter is intentionally narrow:
- It works on one TODO at a time.
- It sends bounded context, not your whole repository.
- It asks before applying changes.
- It lets you inspect the result before accepting it.
- It is designed for cleanup tasks, missing edge cases, small implementations, and localized fixes.
For large architectural rewrites, use a full coding agent. For the TODO that has been sitting in one file for six months, use this.
Setup
- Install the extension.
- Create an OpenRouter API key.
- Run
TODO Hunter: Set OpenRouter API Key.
- Run
TODO Hunter: Select Model or keep the default.
- Open the TODO Hunter Activity Bar view and scan the workspace.
Development
From the repository root:
npm install
npm run build -w apps/todo-hunter
Debug from VS Code:
Run and Debug -> Debug: todo-hunter -> F5
Package locally:
npm run package -w apps/todo-hunter
Build every extension in the monorepo:
npm run build
npm run package:all
Publishing
This extension is packaged with vsce:
npm run package -w apps/todo-hunter
To publish from the app directory:
cd apps/todo-hunter
npx vsce publish --no-dependencies
The publisher is ciro-maciel. The Marketplace item ID is:
ciro-maciel.ciro-maciel-todo-hunter
| Field |
Value |
| Extension ID |
ciro-maciel.ciro-maciel-todo-hunter |
| Package name |
ciro-maciel-todo-hunter |
| Display name |
AI TODO Hunter - Resolve TODOs & FIXMEs with OpenRouter |
| Publisher |
ciro-maciel |
| Categories |
Machine Learning, AI, Linters, Other |
| License |
Proprietary |
| Runtime |
VS Code ^1.90.0 |
| Model provider |
OpenRouter |
License
See LICENSE.
Built by Ciro Cesar Maciel. Sibling extensions: AI Commit Message Generator, Env Var Detective, AI Error Message Humanizer, Regex Whisperer, Stack Trace Triage, Assistencia Dev Tracker.