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.
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
| 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
Works with 15+ programming languages including: Python β’ JavaScript/TypeScript β’ Lua β’ Rust β’ C/C++ β’ Go β’ Java β’ Ruby β’ PHP β’ CSS β’ HTML β’ Bash β’ Vim Script β’ YAML β’ JSON
Using lazy.nvim
{
"georgeharker/comment-tasks.nvim",
dependencies = {
"nvim-lua/plenary.nvim", -- Required for HTTP requests
},
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
- 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
# TODO: Implement user authentication system
# This needs proper validation and error handlingPlace 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_idUpdate 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)" ClickUp (Full custom status support)
:ClickUpTask " Create task (default)
:ClickUpTask create " Create task (explicit)
:ClickUpTask in_progress " Update to 'In Progress' status
:ClickUpTask close " Complete task (uses completed status)
:ClickUpTask addfile " Add current file to task
" GitHub Issues (Basic support)
:GitHubTask " Create issue (default)
:GitHubTask create " Create issue (explicit)
:GitHubTask close " Close issue
:GitHubTask addfile " Add file reference
" Asana (Full custom status support)
:AsanaTask " Create task (default)
:AsanaTask create " Create task (explicit)
:AsanaTask blocked " Update to 'Blocked' status
:AsanaTask close " Complete task
:ClickUpTask review " Update to 'Code Review' status
:ClickUpTask completed " Complete task
:ClickUpTask addfile " Add current file to task
" GitHub Issues (Basic support)
:GitHubTask new " Create issue
:GitHubTask close " Close issue
:GitHubTask addfile " Add file reference
" Asana (Full custom status support)
:AsanaTask new " Create task
:AsanaTask blocked " Update to 'Blocked' status
:AsanaTask completed " Complete task:CommentTask new " Create task with default provider
:CommentTask completed " Complete task with default provider
:CommentTask " Create task with default provider (default)
:CommentTask create " Create task with default provider (explicit)
:CommentTask close " Complete task with default provider
:CommentTaskAddFile " Add file reference with default providerAvailable commands are generated dynamically from your status configuration.
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
}
}
}
})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
- π¦ Installation Guide - Complete installation instructions
- βοΈ Configuration Reference - All configuration options
- π― ClickUp Setup
- π Asana Setup
- π GitHub Issues Setup
- β‘ Linear Setup
- π’ Jira Setup
- π Notion Setup
- π Monday.com Setup
- π¦ Trello Setup
- π¦ GitLab Issues Setup
- β Todoist Setup
- π§ API Reference - Lua API & 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" })We welcome contributions! See our Contributing Guide for:
- π Adding new providers
- π Bug reports and fixes
- π Documentation improvements
- π‘ Feature suggestions
git clone https://github.com/georgeharker/comment-tasks.nvim.git
cd comment-tasks.nvimMIT License - see LICENSE for details.
- π Documentation: Check docs/ 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.