Comment Tasks
June 12, 2026 ยท View on GitHub
A universal Neovim plugin that bridges 10+ task management systems with code comments across multiple programming languages. Create, update, and manage tasks directly from your comments without leaving your editor.
๐ Rendered documentation: docs.georgeharker.com/comment-tasks.nvim
๐ Features
Manage tasks from code without losing focus. Maintain task references in code.
Transform your TODO comments into actionable tasks across 10+ platforms while keeping task URLs embedded in your codebase for perfect traceability.
- ๐ Universal Multi-Provider Support: Works with 10+ task management systems
- ๐ฏ Custom Status System: Configurable workflows for each provider
- ๐ Multi-Language Support: Works with 15+ programming languages using Tree-sitter
- โจ Smart Comment Detection: Handles single-line, block comments, and docstrings
- ๐ Intelligent URL Insertion: Context-aware URL placement
- โก Unified Command Interface: Same commands work across all providers
- ๐ File Reference Management: Structured file associations with tasks
- ๐งน Comment Prefix Trimming: Automatically clean TODO, FIXME, and other prefixes
- ๐จ Language Override: Force specific language detection when needed
- ๐ง Modular Architecture: Extensible system for easy provider addition
๐ Supported Providers
| Provider | Type | Custom Status | Bulk Operations | File References |
|---|---|---|---|---|
| ๐ฏ ClickUp | Full | โ | โ | โ |
| ๐ Asana | Full | โ | โ | โ |
| โก Linear | Full | โ | โ | โ |
| ๐ข Jira | Full | โ | โ | โ |
| ๐ Notion | Full | โ | โ | โ |
| ๐ Monday.com | Full | โ | โ | โ |
| ๐ GitHub Issues | Basic | โ | โ | โ |
| ๐ฆ GitLab Issues | Basic | โ | โ | โ |
| ๐ฆ Trello | Basic | โ | โ | โ |
| โ Todoist | Basic | โ | โ | โ |
Full: Complete workflow customization with any status names
Basic: Open/closed or list-based status management
๐ Supported Languages
Works with 15+ programming languages including: Python โข JavaScript/TypeScript โข Lua โข Rust โข C/C++ โข Go โข Java โข Ruby โข PHP โข CSS โข HTML โข Bash โข Vim Script โข YAML โข JSON
๐ฆ Installation
Using lazy.nvim
{
"georgeharker/comment-tasks.nvim",
config = function()
require("comment-tasks").setup({
default_provider = "clickup", -- Choose your preferred provider
providers = {
clickup = {
enabled = true,
api_key_env = "CLICKUP_API_KEY",
list_id = "your_clickup_list_id",
statuses = {
new = "To Do",
in_progress = "In Progress",
review = "Code Review",
completed = "Complete",
}
},
-- Add other providers as needed
},
})
end
}
Environment Setup:
export CLICKUP_API_KEY="your_api_key_here"
๐ Detailed Installation: docs/installation.md
๐ Quick Start
- Install the plugin with your preferred package manager
- Configure your task management provider(s)
- Set environment variables for API authentication
- Create tasks from comments using commands
Example Workflow
# TODO: Implement user authentication system
# This needs proper validation and error handling
Place cursor on the comment and run :ClickUpTask new โ
# TODO: Implement user authentication system
# This needs proper validation and error handling
# https://app.clickup.com/t/task_id
Update task status as you progress:
:ClickUpTask in_progress " When you start working
:ClickUpTask review " When ready for code review
:ClickUpTask close " When finished (uses completed status)
โก Core Commands
Provider-Specific Commands (Recommended)
" ClickUp (Full custom status support)
:ClickUpTask " Create task (default)
:ClickUpTask new " Create task (explicit)
:ClickUpTask in_progress " Update to 'In Progress' status
:ClickUpTask review " Update to 'Code Review' status
:ClickUpTask close " Complete task (uses completed status)
:ClickUpTask addfile " Add current file to task
" GitHub Issues (Basic support)
:GitHubTask " Create issue (default)
:GitHubTask new " Create issue (explicit)
:GitHubTask close " Close issue
:GitHubTask addfile " Add file reference
" Asana (Full custom status support)
:AsanaTask " Create task (default)
:AsanaTask new " Create task (explicit)
:AsanaTask blocked " Update to 'Blocked' status
:AsanaTask close " Complete task
Generic Commands (Uses default_provider)
:CommentTask " Create task with default provider (default)
:CommentTask new " Create task with default provider (explicit)
:CommentTask close " Complete task with default provider
:CommentTask addfile " Add file reference with default provider
:CommentTaskClose " Complete task with default provider
:CommentTaskAddFile " Add file reference with default provider
Available commands are generated dynamically from your status configuration.
โ๏ธ Configuration
Basic Setup
require("comment-tasks").setup({
default_provider = "clickup", -- Provider for generic commands
providers = {
clickup = {
enabled = true,
api_key_env = "CLICKUP_API_KEY",
list_id = "123456789",
statuses = {
new = "To Do", -- Special: creates tasks
completed = "Complete", -- Special: completes tasks
review = "Code Review", -- Custom: creates :ClickUpTask review
blocked = "Blocked", -- Custom: creates :ClickUpTask blocked
}
}
}
})
Status System
Commands are automatically generated from your status configuration:
statuses = {
new = "Backlog", -- โ :ClickUpTask new (creates with "Backlog")
completed = "Done", -- โ :ClickUpTask completed (updates to "Done")
review = "In Review", -- โ :ClickUpTask review (updates to "In Review")
testing = "QA Testing", -- โ :ClickUpTask testing (updates to "QA Testing")
}
๐ Complete Configuration: docs/configuration.md
๐ Project-Level Configuration
Override provider settings per-project by placing a .comment-tasks.json file at your project root. This lets different repositories target different task lists, boards, or projects without changing your personal Neovim config.
How Root Detection Works
When a command runs, the plugin walks upward from the current file's directory:
.comment-tasks.jsonis checked first at every level โ if found, that directory is the project root- Root markers (
.git,pyproject.toml,package.json, etc.) act as a ceiling - If no marker is found, falls back to git worktree detection
This means .comment-tasks.json always wins as the root anchor, even if it lives in a subdirectory above nested package.json files.
Example .comment-tasks.json
{
"default_provider": "clickup",
"providers": {
"clickup": { "list_id": "9012345678", "team_id": "1234567" },
"github": { "repo_owner": "acme-corp", "repo_name": "backend-api" },
"jira": { "project_key": "BACKEND", "server_url": "https://acme.atlassian.net" }
}
}
Only project-targeting fields are overridden (list IDs, project keys, etc.). API keys and enabled flags always come from your Neovim config โ they are never read from the project file.
Customising Root Markers
The default root markers cover most ecosystems. Override them in setup():
require("comment-tasks").setup({
root_markers = { ".git", "pyproject.toml", "Cargo.toml", ".my-marker" },
-- ...
})
๐ Full details: docs/configuration.md
๐ Documentation
Setup Guides
- ๐ฆ Installation Guide - Complete installation instructions
- โ๏ธ Configuration Reference - All configuration options
Provider Guides
- ๐ฏ ClickUp Setup
- ๐ Asana Setup
- ๐ GitHub Issues Setup
- โก Linear Setup
- ๐ข Jira Setup
- ๐ Notion Setup
- ๐ Monday.com Setup
- ๐ฆ Trello Setup
- ๐ฆ GitLab Issues Setup
- โ Todoist Setup
Reference
- ๐ง API Reference - Lua API & keybinding examples
๐ง Keybinding Examples
vim.keymap.set("n", "<leader>tcc", function()
require("comment-tasks").create_clickup_task_from_comment()
end, { desc = "Create ClickUp task" })
vim.keymap.set("n", "<leader>tgh", function()
require("comment-tasks").create_github_task_from_comment()
end, { desc = "Create GitHub issue" })
vim.keymap.set("n", "<leader>tc", function()
require("comment-tasks").create_task_from_comment()
end, { desc = "Create task (default provider)" })
vim.keymap.set("n", "<leader>tu", function()
require("comment-tasks").update_task_status_from_comment("completed")
end, { desc = "Complete task" })
vim.keymap.set("n", "<leader>tx", function()
require("comment-tasks").close_task_from_comment()
end, { desc = "Close task" })
๐ค Contributing
We welcome contributions! See our Contributing Guide for:
- ๐ Adding new providers
- ๐ Bug reports and fixes
- ๐ Documentation improvements
- ๐ก Feature suggestions
Development Setup
git clone https://github.com/georgeharker/comment-tasks.nvim.git
cd comment-tasks.nvim
๐ License
MIT License - see LICENSE for details.
๐ Support
- ๐ Documentation: Check the Installation Guide and Configuration Reference for detailed guides
- ๐ Issues: Report bugs on GitHub Issues
- ๐ฌ Discussions: Ask questions in GitHub Discussions
Ready to get started? Check out the Installation Guide and choose your provider setup.