From ttal
Manages tasks via the taskwarrior CLI with annotations that reference markdown files, inline notes, and a Python script for opening task-related documents.
How this skill is triggered — by the user, by Claude, or both
Slash command
/ttal:taskwarriorThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
**Purpose:** Task management using taskwarrior with smart notifications and markdown context integration.
Purpose: Task management using taskwarrior with smart notifications and markdown context integration.
Philosophy: Minimal wrapper around taskwarrior CLI. Let taskwarrior do what it does best, add Python helpers only for custom workflows.
# Simple task
task add "Fix bug in worker status" project:clawd +bugfix priority:H due:tomorrow
# Task with inline notes
task add "Research taskwarrior hooks" project:clawd +research priority:M
task 1 annotate "Check: on-modify, on-exit hooks
Look at examples in taskwarrior docs
Test with simple echo script first"
# Task with external documentation
task add "Design OAuth refresh flow" project:clawd +design priority:H due:3days
task 1 annotate "Design: ~/clawd/docs/plans/2026-01-31-oauth-refresh-design.md"
# Mark as active
task 1 start
# Add notes
task 1 annotate "Additional context here"
# Complete task
task 1 done
# Delete task (no longer relevant)
task 1 delete
# Defer task for a week
task 1 modify wait:1week
# List all pending tasks
task
# List by project
task project:clawd list
# List by tag
task +bugfix list
# View specific task
task 1
# View task with markdown context
~/clawd/skills/taskwarrior/scripts/task-open.py 1
clawd, clawd.skills, guion.flicknote)+bugfix, +research, +implementation)Pattern 1: Simple tasks - No extra context needed
task add "Update README" project:clawd priority:L
Pattern 2: Tasks with inline notes - Context fits in annotations
task add "Investigate performance issue" project:clawd +bugfix priority:H
task 1 annotate "User reports slow response on large datasets
Check database query optimization
Profile API endpoint response times"
Pattern 3: Tasks with external docs - Complex planning needs separate file
task add "Design new feature architecture" project:clawd +design priority:H
task 1 annotate "Design: ~/clawd/docs/plans/2026-01-31-feature-design.md"
# View with: ~/clawd/skills/taskwarrior/scripts/task-open.py 1
The task-open.py script recognizes these annotation patterns:
Design: ~/clawd/docs/plans/2026-01-31-design.md
Doc: ~/clawd/docs/architecture.md
Reference: ~/clawd/docs/api-spec.md
File: ~/path/to/any-doc.md
All paths are expanded automatically (~ → home directory).
task N start when currently working on ittask N done when finishedtask N delete if no longer relevanttask N modify wait:1week to deferTaskwarrior has built-in dependency tracking. Never duplicate dependency information in descriptions or annotations.
# Create tasks
task add "Fix authentication bug" project:clawd +bugfix priority:H
task add "Deploy authentication fix" project:clawd +deployment priority:H
# Set dependency (task 2 depends on task 1)
task 2 modify depends:1
# Annotations should have context, not dependency info
task 2 annotate "Need staging environment approval before production deploy"
Result:
task list
# Shows:
# 1 [H] Fix authentication bug
# 2 [H] Deploy authentication fix (BLOCKED)
Task 2 automatically shows as BLOCKED until task 1 is completed.
# BAD: Putting dependency info in annotations
task 2 annotate "Blocked by: Task #1 (authentication bug fix)"
task 2 modify depends:1 # Already tracked by taskwarrior!
Why this is bad:
# View dependencies
task 2 info # Shows "Depends on: 1"
# Remove dependency
task 2 modify depends:
# Multiple dependencies
task 3 modify depends:1,2 # Task 3 depends on both 1 and 2
# View all blocked tasks
task +BLOCKED list
When working on a task, you can easily create a follow-up task that depends on the current one:
# From within a worker session:
create_dependent_task.py "Add timeouts to subprocess calls" --priority H
What it does:
$ZELLIJ_SESSION_NAMEExample workflow:
# Current task: "Migrate to taskwarrior UDAs"
create_dependent_task.py "Add error handling improvements" --priority M
# Output:
# ✓ Created dependent task: 040796ee...
# Description: Add error handling improvements
# Priority: M
# Depends on: e65b0ee5...
#
# The new task will be blocked until the current task completes.
This is much easier than manually querying the current task UUID and setting dependencies!
task 1 done
# Task 2 automatically becomes unblocked!
Rule: Use depends: for dependencies, use annotations for context that taskwarrior doesn't track.
Task IDs change, UUIDs are permanent.
depends:1)❌ Bad - Don't do this:
task add "Implement feature" project:clawd
task 5 annotate "Depends on task #3 to be completed first"
# ↑ If task 3 completes, it might become task 2, reference breaks!
✅ Good - Use depends: field:
task add "Implement feature" project:clawd
task 5 modify depends:3 # Uses UUID internally, safe!
task 5 annotate "Requires authentication system to be in place"
# ↑ Describes WHY, not WHAT task number
When referencing other tasks:
depends: field → Use task ID (converts to UUID)Two daily checks (8AM/2PM Asia/Taipei) via check-urgent-tasks.py:
Always shown if they exist:
Shown if nothing urgent:
Nothing urgent:
✅ No urgent tasks!
💡 Suggested tasks to consider:
HIGH VALUE:
#12 [H] Design caching layer (added yesterday)
QUICK WINS:
#23 [L] Update README with new examples (no dependencies)
FRESH IDEAS:
#25 [M] Explore Effect.ts error handling (added 1 day ago)
Has urgent:
🔴 Urgent Tasks Need Attention:
OVERDUE (1):
#5 [H] Fix authentication bug (due 2 days ago)
DUE TODAY:
#8 [M] Review PR #234
💡 Also consider:
#12 [H] Design caching layer (when you have time)
Taskwarrior has excellent built-in reporting:
# Task status breakdown by project
task summary
# Database statistics
task stats
# Visual burndown charts
task burndown.weekly
task burndown.monthly
# Task history over time
task history
tasktask N starttask N doneCreate task with external doc reference:
task add "Implement new feature" project:clawd +implementation priority:H
task annotate "Design: ~/clawd/docs/plans/2026-01-31-feature-design.md"
Write detailed design in markdown file
View complete context:
~/clawd/skills/taskwarrior/scripts/task-open.py 1
Start implementation:
task 1 start
# See what was completed this week
task end.after:today-7days completed
# Check summary by project
task summary
# Review burndown
task burndown.weekly
Purpose: Smart notification checker for cron
Usage:
~/clawd/skills/taskwarrior/scripts/check-urgent-tasks.py
Exit codes:
Run manually:
# Test notifications
~/clawd/skills/taskwarrior/scripts/check-urgent-tasks.py
echo $? # Check exit code
Purpose: Display task with inline markdown documentation
Usage:
~/clawd/skills/taskwarrior/scripts/task-open.py <task_id>
Example:
# View task #5 with all referenced documentation
~/clawd/skills/taskwarrior/scripts/task-open.py 5
Notifications run automatically twice daily:
Setup commands (already configured):
openclaw cron add "Morning task check" \
--cron "0 8 * * *" \
--session main \
--system-event "Run ~/clawd/skills/taskwarrior/scripts/check-urgent-tasks.py" \
--tz "Asia/Taipei"
openclaw cron add "Afternoon task check" \
--cron "0 14 * * *" \
--session main \
--system-event "Run ~/clawd/skills/taskwarrior/scripts/check-urgent-tasks.py" \
--tz "Asia/Taipei"
~/.task/~/.task/taskchampion.sqlite3~/.taskrc (uses defaults)Taskwarrior works out of the box, no custom configuration needed.
Good:
Bad:
Projects are hierarchical:
task add "..." project:clawd
task add "..." project:clawd.skills
task add "..." project:guion.flicknote
Tags are flat and combinable:
task add "..." +bugfix +urgent
task add "..." +research +documentation
Be realistic with due dates:
due:today
due:tomorrow
due:3days
due:1week
due:2026-02-15
Overuse of due dates leads to "due date fatigue". Only set when genuinely time-sensitive.
Multiline annotations work:
task 1 annotate "First line
Second line
Third line"
Link to files for complex context:
task 1 annotate "Design: ~/clawd/docs/plans/2026-01-31-design.md"
Automated worker management using taskwarrior hooks that integrate with OpenClaw agents.
When you start a task (task N start), a worker is automatically spawned. When you complete a task (task N done), the worker is automatically cleaned up based on PR status.
Task Start → Worker Spawn:
worker-lifecycle agentttal worker spawnWorker: <session-name>Task Complete → Auto Cleanup:
Worker: annotationThe hooks are managed by chezmoi in ~/clawd/dotfiles/dot_task/hooks/:
# Hooks are automatically applied by chezmoi
chezmoi apply ~/.task/hooks
# Verify hooks are installed
task diagnostics | grep hooks
# Should show: on-modify-worker-lifecycle
# To edit hooks:
# 1. Edit in dotfiles: ~/clawd/dotfiles/dot_task/hooks/
# 2. Apply changes: chezmoi apply ~/.task/hooks
# 3. Commit to dotfiles repo
Note: Hooks are no longer symlinked. They are real files managed by chezmoi, which allows for better version control and multi-machine sync.
The worker-lifecycle OpenClaw agent handles spawn decisions and cleanup.
# Check agent exists
openclaw agents list
# Should show: worker-lifecycle
# View agent workspace
ls ~/.openclaw/agents/worker-lifecycle/
Agent configuration in ~/.openclaw/agents/worker-lifecycle/SOUL.md defines:
# View hook logs
tail -f ~/.task/hooks.log
# Check worker tracking
cat ~/.clawd-zellij/worker-tracking.json
# Start a task
task add "Implement user profile" project:clawd +feature priority:H
task 1 start
# Hook automatically:
# - Calls worker-lifecycle agent
# - Agent spawns worker
# - Annotates task: "Worker: impl-user-profile-clawd"
# - Sends Telegram notification
# Work in spawned worker session...
# Create PR, get it merged...
# Complete the task
task 1 done
# Hook automatically:
# - Checks Worker annotation
# - Checks PR status → merged
# - Calls ttal worker close --cleanup
# - Removes session, worktree, branch
# - Sends Telegram notification
Hook not triggering:
# Check hook is executable
ls -l ~/.task/hooks/on-modify-worker-lifecycle
# Should show: -rwxr-xr-x
# Check hook detected
task diagnostics | grep hooks
# Check logs
tail ~/.task/hooks.log
Worker not spawning:
# Check agent exists
openclaw agents list
# Check Telegram chat ID in config
cat ~/.task/hooks/config.json
# Test agent manually
openclaw agent --message "Test" --agent worker-lifecycle --deliver
Cleanup not working:
# Check ttal is installed
which ttal
# List active workers
ttal worker list
# Manual cleanup
ttal worker close <session> --force
For detailed design and implementation: ~/clawd/docs/plans/2026-02-01-taskwarrior-hooks-design.md
Additional taskwarrior features available:
task add "..." recur:weekly due:mondaytask context define work project:work~/.taskrcSee Taskwarrior documentation for details.
# Check if taskwarrior is installed
which task
# Install if needed (macOS)
brew install task
chmod +x ~/clawd/skills/taskwarrior/scripts/*.py
# List configured cron jobs
openclaw cron list
# Check cron logs
openclaw gateway logs
npx claudepluginhub tta-lab/ttal-cli --plugin ttalGuides task management for complex multi-step projects: create fine-grained work items with dependencies, track progress using claude-reliability CLI commands like 'work next' and 'work create'.
Manages tasks using native Claude Code subagent tools (TaskCreate, TaskUpdate, TaskList, TaskGet). Tracks TODOs, checkpoints progress, and resumes work across sessions.
Guides users through task manager setup: pick manager (Linear/Jira/GitHub Issues/Notion), integration method (MCP/CLI/plugin/API), verify, and write helper skill. Part of /process-setup.