Track tasks directly in your code comments. Reference tasks with TASK(<ID>) in any comment, and each task lives as a versioned markdown file in your repository under tasks/<ID>/index.md.
- Inline task references — Write
TASK(<ID>)in any code comment to link to a task - Task sidebar — Browse all tasks grouped by status (Doing, ToDo, Done) with sorting by priority or date
- CodeLens — See task title, status and priority inline above each reference
- Hover tooltips — Hover over a task reference to see full details
- IntelliSense for task references — Type
TASK(and pick from a list of tasks by title instead of memorizing IDs - IntelliSense for task frontmatter — Get completions for keys and values when editing task markdown files
- Quick fixes — Press
Ctrl+.on a task reference to start or complete it, or on a comment to convert it into a task - Diagnostics — Warnings for referenced tasks that don't have a task folder yet
- File references in sidebar — Expand any task to see all code locations that reference it, click to navigate
- Status derived from timestamps — No manual status field;
created,started, andcompleteddates determine whether a task is todo, doing, or done - Multi-root workspace support — Works correctly across all folders in a
.code-workspacefile; tasks are created in the repo of the active file and the sidebar merges tasks from every folder
Tasks are stored as markdown files with YAML frontmatter:
---
title: Implement refresh token rotation
priority: 8
assignee: dan
created: 2026-03-20T10:00:00Z
started: 2026-03-25T09:00:00Z
---
On every token refresh, invalidate the old refresh token and issue a new one.| Setting | Default | Description |
|---|---|---|
inlineTaskTracker.pattern |
TASK\(([A-Za-z0-9_-]+)\) |
Regex pattern to find task references (must have one capture group) |
inlineTaskTracker.tasksDir |
tasks |
Path to the tasks directory, relative to workspace folder root. Supports per-folder overrides in .code-workspace files |
inlineTaskTracker.fileGlob |
**/*.{ts,js,tsx,jsx,...} |
Glob pattern for files to scan |
inlineTaskTracker.commentTemplate |
TASK({{id}}) |
Template for generated task comments |
Open a .code-workspace file with multiple repositories and the extension handles each folder independently. Tasks are always created in the tasks/ folder of whichever repo contains the active editor, and the sidebar shows a merged view of all repos' tasks.
Each folder can override inlineTaskTracker.tasksDir independently:
| Command | Description |
|---|---|
| Task Tracker: Create Task | Create a new task and optionally insert a reference at cursor |
| Task Tracker: Convert Comment to Task | Turn an existing comment into a tracked task |
| Task Tracker: Refresh Tasks | Rescan the workspace for task references |
| Task Tracker: Open Task | Open a task's markdown file |
| Task Tracker: Copy Task ID | Copy a task ID to clipboard |
- The extension scans your workspace for
TASK(<ID>)patterns in code comments - It correlates each reference to a task folder at
tasks/<ID>/index.md - Task metadata (title, priority, assignee, dates) is parsed from YAML frontmatter
- Status is derived automatically: has
completed= done, hasstarted= doing, otherwise = todo - All providers (CodeLens, hover, tree view, diagnostics) update live as you edit
Either you build and package the extension yourself via running npm run package, see package.json, or you use a prebuilt archive in the releases-folder.
VSIX archives can be installed either through the UI or CLI.
For the CLI just run:
# Replace the path with your desired version
code --install-extension releases/inline-task-tracker-example.vsix
# Use the same command for updating to a newer versionFor the UI open the extensions-sidebar, click the three little dots at the top of the sidebar and click "Install from VSIX"
I am not interested in jumping through Microsofts hoops, I am tired enough as it is.
I am using this myself on a multi-root workspace and want to first see how the experience is once the task/issue count reaches triple digits.
That will most likely lead to some changes and improvements and after I feel like the extension has seen some battles I'll stabilize to v1.
{ "folders": [ { "path": "./repo-a" }, { "path": "./repo-b", "settings": { "inlineTaskTracker.tasksDir": "my-tasks" } } ] }