A SQLite-driven command-line task management tool that follows the Getting Things Done (GTD) methodology. Built as a single static binary in Go with no external dependencies.
- INBOX-first workflow: All tasks start in INBOX for review before becoming actionable
- Hierarchical tasks: Support for parent tasks and subtasks with automatic dependency tracking
- Task states: NEW, IN_PROGRESS, DONE, CANCELLED, with proper state transitions
- Task types: BUG, FEATURE, REGRESSION for better categorization
- Priority levels: High, medium, low priority support
- Blocking relationships: Mark tasks as blocked by other tasks
- Rich metadata: Tags, source references (GitHub issues, file locations, etc.)
- Multiple output formats: Standard, oneline, JSON, CSV, Markdown
- Git integration: Automatically stores database at git repository root
- Search functionality: Full-text search across task titles and descriptions
# Install directly from GitHub
nix profile install github:zw3rk/gtd
# Or run without installing
nix run github:zw3rk/gtd -- --help
Download pre-built binaries from the releases page or from our Hydra CI.
git clone https://github.com/zw3rk/gtd.git
cd gtd
go build -o gtd
# Add a new task (starts in INBOX)
gtd add bug <<EOF
Fix memory leak in authentication
Memory usage grows over time in the auth service
EOF
# Review inbox items
gtd review
# Accept a task (move from INBOX to NEW)
gtd accept <task-id>
# Start working on a task
gtd in-progress <task-id>
# List current tasks
gtd list
# Mark task as done
gtd done <task-id>
# Search tasks
gtd search "memory leak"
This tool implements the core GTD principles:
All new tasks go into the INBOX state first:
gtd add bug <<EOF
Fix login bug
Users can't log in with special characters
EOF
gtd add feature <<EOF
Dark mode
Implement theme switching
EOF
Review inbox items and decide what to do with them:
# See what needs review
gtd review
# Accept important tasks (INBOX → NEW)
gtd accept abc1234
# Reject irrelevant tasks (INBOX → INVALID)
gtd reject def5678
Work on your committed tasks:
# See current workload
gtd list
# Start a task (NEW → IN_PROGRESS)
gtd in-progress abc1234
# Complete it (IN_PROGRESS → DONE)
gtd done abc1234
gtd add bug
- Add a bug reportgtd add feature
- Add a feature requestgtd add regression
- Add a regression reportgtd add-subtask <parent-id>
- Add a subtask to existing task
gtd review
- Review tasks in INBOXgtd accept <task-id>
- Accept task from INBOX (→ NEW)gtd reject <task-id>
- Reject task from INBOX (→ INVALID)gtd in-progress <task-id>
- Start working on task (→ IN_PROGRESS)gtd done <task-id>
- Mark task as completed (→ DONE)gtd cancel <task-id>
- Cancel task (→ CANCELLED)gtd reopen <task-id>
- Reopen cancelled task (CANCELLED → NEW)
gtd block <task-id> --by <blocking-task-id>
- Mark task as blockedgtd unblock <task-id>
- Remove blocking status
gtd list
- List active tasks (NEW, IN_PROGRESS)gtd list --all
- List all tasks including INBOX/INVALIDgtd list-done
- List completed tasksgtd list-cancelled
- List cancelled tasksgtd show <task-id>
- Show detailed task informationgtd summary
- Show task statistics
gtd search <query>
- Search tasks by title/descriptiongtd export --format json
- Export tasks to JSON/CSV/Markdown
📥 INBOX ─[accept]→ 🆕 NEW ─[in-progress]→ 🔄 IN_PROGRESS ─[done]→ ✅ DONE
│ │ └─[cancel]→ ❌ CANCELLED
│ └─[cancel]→ ❌ CANCELLED
└─[reject]→ ⛔ INVALID
- Database file:
claude-tasks.db
at git repository root - Pure SQLite - no external dependencies
- Automatic schema creation and migration
- Per-project task isolation
- Go 1.21+
- SQLite3 (for development/testing)
- Nix (optional, for reproducible builds)
# Standard build
make build
# Static build (Linux)
CGO_ENABLED=1 go build -ldflags="-s -w" -o gtd
# Run tests
make test
# Run linter
make lint
# Enter development shell
nix develop
# Build with nix
nix build
# Run tests in nix
nix develop -c make test
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature
) - Make your changes
- Add tests for new functionality
- Ensure all tests pass (
make test
) - Run the linter (
make lint
) - Commit your changes (
git commit -m 'Add amazing feature'
) - Push to the branch (
git push origin feature/amazing-feature
) - Open a Pull Request
- Single binary: No external runtime dependencies
- SQLite backend: Embedded database for reliability
- Git-aware: Automatically finds repository root
- Cross-platform: Linux, macOS, Windows support
- Static linking: Linux binaries are fully static
gtd/
├── cmd/ # CLI commands and UI logic
├── internal/
│ ├── database/ # SQLite database layer
│ ├── git/ # Git repository integration
│ ├── models/ # Core domain models and repository
│ ├── output/ # Output formatting and abstraction
│ └── services/ # Business logic and services
├── vendor/ # Go module dependencies
├── flake.nix # Nix build configuration
├── Makefile # Development tasks
└── README.md # This file
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.
GTD can be configured through environment variables. See Configuration Guide for details.
Common configurations:
export GTD_COLOR="false" # Disable colors
export GTD_PAGE_SIZE="50" # Show more tasks
export GTD_DEFAULT_PRIORITY="high" # Default to high priority
- 📖 User Guide - Detailed usage examples
- ⚙️ Configuration Guide - Environment variables and settings
- 📝 Command Reference - Complete command documentation
- 🤖 AI Agent Guide - Guide for AI assistants
- 🐛 Issues - Bug reports and feature requests
- Built with Cobra for CLI interface
- Uses go-sqlite3 for database access
- Inspired by the Getting Things Done methodology by David Allen
- Nix build system with flake-parts