C Tasks
daxaur/openpaw
Manage tasks across Todoist (todoist-cli), Things 3 (things-cli), and Taskwarrior (task).
Manage tasks using Taskwarrior (task CLI) - create, list, update, complete, annotate, and manage dependencies between tasks.
$ npx skills add meain/dotfiles --skill taskwarrior -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install meain/dotfiles taskwarrior --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/meain/dotfiles.git skills-src && mkdir -p .claude/skills && cp -r skills-src/agents/.agents/skills/taskwarrior .claude/skills/taskwarrior && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "taskwarrior" agent skill from https://github.com/meain/dotfiles/tree/master/agents/.agents/skills/taskwarrior into .claude/skills/taskwarrior/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "taskwarrior", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/meain/dotfiles/tree/master/agents/.agents/skills/taskwarriorType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add meain/dotfiles --skill taskwarrior -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install meain/dotfiles taskwarrior --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/meain/dotfiles.git skills-src && mkdir -p .agents/skills && cp -r skills-src/agents/.agents/skills/taskwarrior .agents/skills/taskwarrior && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "taskwarrior" agent skill from https://github.com/meain/dotfiles/tree/master/agents/.agents/skills/taskwarrior into .agents/skills/taskwarrior/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "taskwarrior", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add meain/dotfiles --skill taskwarrior -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install meain/dotfiles taskwarrior --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/meain/dotfiles.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/agents/.agents/skills/taskwarrior .cursor/skills/taskwarrior && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "taskwarrior" agent skill from https://github.com/meain/dotfiles/tree/master/agents/.agents/skills/taskwarrior into .cursor/skills/taskwarrior/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "taskwarrior", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/meain/dotfiles.git --path agents/.agents/skills/taskwarrior--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add meain/dotfiles --skill taskwarrior -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install meain/dotfiles taskwarrior --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/meain/dotfiles.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/agents/.agents/skills/taskwarrior .gemini/skills/taskwarrior && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "taskwarrior" agent skill from https://github.com/meain/dotfiles/tree/master/agents/.agents/skills/taskwarrior into .gemini/skills/taskwarrior/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "taskwarrior", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install meain/dotfiles taskwarriorInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add meain/dotfiles --skill taskwarrior -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/meain/dotfiles.git skills-src && mkdir -p .github/skills && cp -r skills-src/agents/.agents/skills/taskwarrior .github/skills/taskwarrior && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "taskwarrior" agent skill from https://github.com/meain/dotfiles/tree/master/agents/.agents/skills/taskwarrior into .github/skills/taskwarrior/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "taskwarrior", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add meain/dotfiles --skill taskwarrior -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install meain/dotfiles taskwarrior --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/meain/dotfiles.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/agents/.agents/skills/taskwarrior .opencode/skills/taskwarrior && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "taskwarrior" agent skill from https://github.com/meain/dotfiles/tree/master/agents/.agents/skills/taskwarrior into .opencode/skills/taskwarrior/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "taskwarrior", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
taskwarriorManage tasks using Taskwarrior (task CLI) - create, list, update, complete, annotate, and manage dependencies between tasks.
Taskwarrior is an agent skill from meain/dotfiles. Manage tasks using Taskwarrior (task CLI) - create, list, update, complete, annotate, and manage dependencies between tasks.
Its SKILL.md is about 2.9k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
The repository describes itself as: If there is a shell, there is a way! The licence is MIT.
2 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit f469fb6. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
ghFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use gh, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Taskwarrior loads about 2.9k tokens when it runs. Until then it costs about 34 tokens; SKILL.md has 1,159 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from meain/dotfiles at commit f469fb6, republished under its MIT licence (© meain). 1,159 words, ~2,922 tokens.
.claude/skills/taskwarrior/SKILL.md (or your agent's skills folder).Use the task CLI to manage issues with dependency tracking.
The task CLI needs read/write access to ~/.task/ which is typically outside the sandbox. Commands will fail with "unable to open database file" errors. Use dangerouslyDisableSandbox: true for all task commands.
Use rc.verbose=label on list/report commands to keep column headers but strip footer noise (task count, config overrides, sync messages). Prefer this over rc.verbose=nothing which strips headers too and makes output harder to parse.
For programmatic use or when you need structured data (e.g., to build a markdown table), use task export which outputs JSON. You can filter it the same way: task project:cpb export, task +BLOCKED export, etc.
IMPORTANT: Always use UUID (short prefix is fine) instead of numeric IDs when referencing tasks. Numeric IDs are unstable and shift when tasks are completed or deleted — never use numeric IDs in commands, even if they appear in the output. IDs are shown in reports for the user's convenience only. After creating a task, use rc.verbose=new-uuid to get the UUID directly (see Phase 2A).
| Intent | Operation |
|---|---|
| View task details | task <uuid> information |
| List/filter tasks | task list, task project:<name> list |
| See available work | task ready |
| Create a new task | task add |
| Update task fields | task <uuid> modify |
| Complete a task | task <uuid> done |
| Delete a task | task <uuid> delete |
| Add a comment/annotation | task <uuid> annotate "text" |
| Remove annotation | task <uuid> denotate "text" |
| Manage dependencies | task <uuid> modify depends:<other_uuid> |
| See blocked tasks | task blocked |
| See blocking tasks | task blocking |
| Project summary | task summary or task projects |
| Start working | task <uuid> start |
| Stop working | task <uuid> stop |
| Active tasks | task active |
Always use rc.verbose=new-uuid when creating tasks — this makes task add output the UUID directly instead of the unstable numeric ID.
Task titles: Write clean, concise descriptions — don't just copy-paste alert names or ticket titles verbatim. Distill the key info: service, symptom, environment. For example, instead of Elastic - [prod] [swedencentral] API Error - earn-svc - 5xx PrdeuswEARNQueryOrg, use Investigate earn-svc 5xx errors in prod swedencentral (PrdeuswEARNQueryOrg).
Tags and projects: Do NOT invent tags or projects. Only use tags and projects that already exist in the task database. Before creating a task, check existing tasks (task rc.verbose=label projects and task rc.verbose=label tags) to see what's in use. If no matching tag/project exists, create the task without tags/projects and let the user decide. The only exception is project:on-call and priority:H for on-call investigation tasks — these are always correct.
# Basic task with project
task rc.verbose=new-uuid add "Task description" project:cpb
# With priority (H=high, M=medium, L=low)
task rc.verbose=new-uuid add "Fix bug" project:cpb priority:H
# With due date
task rc.verbose=new-uuid add "Deploy" project:cpb due:friday
# With tags
task rc.verbose=new-uuid add "Review" project:cpb +urgent +review
# With dependencies (use UUID of the dependency)
task rc.verbose=new-uuid add "Deploy to prod" project:cpb depends:a1b2c3d4
# Sub-projects using dots
task rc.verbose=new-uuid add "Fix API" project:cpb.earnThe output will be like Created task a1b2c3d4-... — use that UUID for all subsequent operations.
# Add annotation (use UUID)
task a1b2c3d4 annotate "Spoke with Ryan, needs API change first"
task a1b2c3d4 annotate "See PR #1234 for context"
# Remove annotation
task a1b2c3d4 denotate "Spoke with Ryan"# Add dependency using UUIDs (task abc depends on tasks def and ghi)
task a1b2c3d4 modify depends:d5e6f7a8,b9c0d1e2
# Remove dependency
task a1b2c3d4 modify depends:-d5e6f7a8
# View blocked/blocking
task blocked
task blocking# By project
task project:cpb list
# By priority
task priority:H list
# By tag
task +urgent list
# By status
task +BLOCKED list
task +OVERDUE list
task +ACTIVE list
# Text search
task /deploy/ list
# Combined filters
task project:cpb priority:H due.before:eow listIMPORTANT: Always use tag: attribute syntax when adding tags — the +tag syntax is unreliable with modify and can be misinterpreted as a description. Use -tag to remove tags.
task a1b2c3d4 modify priority:H
task a1b2c3d4 modify project:cpb.earn
task a1b2c3d4 modify due:eow
task a1b2c3d4 modify tag:urgent # add/set tag
task a1b2c3d4 modify tag:on-call,prod # set multiple tags
task a1b2c3d4 modify -urgent # remove tag
task a1b2c3d4 modify depends:d5e6f7a8 # add dependencyDetailed notes for tasks live in /Users/meain/.local/share/tasknotes/. Each note is a markdown file named <uuid-prefix> - <task name>.md.
All task-related resources go here — not just notes, but also drafts, templates, support ticket messages, or any other artifacts tied to a task. Name them with the task UUID prefix for discoverability (e.g., <uuid> - Azure support ticket draft.md). Never save task-related files to /tmp or other locations.
When completing a task, always write detailed notes summarizing what was done, findings, and outcomes. If you learned something new during the task (new patterns, gotchas, field types, service behaviors, etc.), also create a separate learning note named <uuid-prefix> learning.md with bullet points of key learnings.
After writing notes, annotate the task with the filenames:
# Write the note file
# /Users/meain/.local/share/tasknotes/<uuid> - <task name>.md
# Annotate the task to reference the note
task a1b2c3d4 annotate "notes: <uuid> - <task name>.md"
# If there are learnings too
task a1b2c3d4 annotate "notes: <uuid> - <task name> - learning.md"Notes should include:
Learning notes should be concise bullet points covering:
task a1b2c3d4 done # mark complete
task a1b2c3d4 delete # mark deleted
task undo # revert most recent change
# Revert a completed task back to pending (works for any task, not just the last action)
task a1b2c3d4 modify status:pendingOn completion: Always write task notes (and learning notes if applicable) before marking done. See Phase 2F.
Use rc.verbose=label on all list/report commands for clean output with headers.
task rc.verbose=label list # pending tasks
task rc.verbose=label next # most urgent
task rc.verbose=label ready # actionable (not blocked/waiting)
task rc.verbose=label all # everything
task rc.verbose=label completed # done tasks
task rc.verbose=label summary # project summary
task rc.verbose=label projects # project list with countsUse task export for structured JSON output — useful for building markdown tables or programmatic processing. Supports the same filters as other commands.
task export # all as JSON
task project:cpb export # filtered by project
task +BLOCKED export # filtered by virtual tag
task status:pending export # filtered by status
task import tasks.json # importFor read operations, present as a markdown table when showing multiple tasks:
| # | UUID | Task | Status |
|---|---|---|---|
| 8 | 30bd26f9 | Check with Juan about schema validation | ready |
| 9 | 5466d0bb | Fix schema validation in dev | blocked by #8 |
Include relevant columns: UUID, description, status/blockers, priority, due date, project. For single tasks, a brief summary is fine.
For write operations, confirm what was done:
When the user references external links or identifiers in task arguments, look them up to extract context (title, status, summary) for use in task descriptions and annotations.
| Source | How to look up |
|---|---|
| GitHub PR/issue URL | GIT_DIR=$(jj git root 2>/dev/null || echo .git) gh pr view <number> --repo <owner/repo> --json title,state or gh issue view |
Jira ticket (e.g. PROJ-123) | jira issue view PROJ-123 |
| Confluence page URL | confluence page view --url <url> or use WebFetch |
| Generic webpage URL | Use WebFetch to retrieve the page title/summary |
After looking up, use the extracted info to:
on-call should always have priority:H — on-call items are top priorityproject:cpb as the default project for control-plane-backend workproject:cpb.earn)depends: instead)depends: for dependency chains, never annotationsdepends:task ready to find unblocked work (excludes blocked tasks)task next when the user asks "what should I work on"task blocked / task blocking to inspect dependency statetw:<uuid>list report shows dependencies in the Deps columnrc.confirmation=0 to suppress confirmation prompts on destructive operations (delete, done on multiple tasks)ARGUMENTS: $ARGUMENTS
© meain, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in agents/.agents/skills/taskwarrior of meain/dotfiles.
Open the folder on GitHubat commit f469fb6
daxaur/openpaw
Manage tasks across Todoist (todoist-cli), Things 3 (things-cli), and Taskwarrior (task).
meain/dotfiles
Search past Claude Code and Codex sessions. An agent skill from meain/dotfiles.
meain/dotfiles
Grilling session that challenges your plan against the existing domain model, sharpens terminology, and updates documentation (CONTEXT.md, ADRs) inline as decisions crystallise.
meain/dotfiles
Daily backlog management — full planning review OR add a single entry from a URL.
meain/dotfiles
Generate an interactive local HTML review page for a large PR or diff, grouping the changed files by logical concern (not just by file) so a reviewer can go through one theme at a time instead of a…
meain/dotfiles
Generate a concise weekly status update in team format. An agent skill from meain/dotfiles.
meain/dotfiles
Search the web using lynx and DuckDuckGo. An agent skill from meain/dotfiles.
Manage tasks using Taskwarrior (task CLI) - create, list, update, complete, annotate, and manage dependencies between tasks. Taskwarrior is an agent skill from meain/dotfiles. Manage tasks using Taskwarrior (task CLI) - create, list, update, complete, annotate, and manage dependencies between tasks.
Run `npx skills add meain/dotfiles --skill taskwarrior -a claude-code`. Or copy the skill folder (agents/.agents/skills/taskwarrior in meain/dotfiles) into .claude/skills/taskwarrior in your project. Claude Code loads it when a task matches its description.
Run `npx skills add meain/dotfiles --skill taskwarrior -a codex`. Or copy the skill folder (agents/.agents/skills/taskwarrior in meain/dotfiles) into .agents/skills/taskwarrior in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add meain/dotfiles --skill taskwarrior -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/taskwarrior, .gemini/skills/taskwarrior, .github/skills/taskwarrior and .opencode/skills/taskwarrior in your project.
Going by SKILL.md and its folder, Taskwarrior needs the command-line tools its instructions call (gh).
SKILL.md contains no URLs. Its commands use gh, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Taskwarrior is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.9k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Taskwarrior: C Tasks (daxaur/openpaw, 174 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
meain (a GitHub user) maintains it in meain/dotfiles, which has 285 GitHub stars. The repository holds 36 skills in this directory. The repository was last updated on September 5, 2026.
Source: meain/dotfiles on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.