A powerful task annotation opener for Taskwarrior, rewritten in Go for better performance and maintainability.
- π Fast: Startup time < 100ms, action matching < 10ms for 1000+ actions
- π Smart: Fuzzy search and interactive menus for quick action discovery
- π‘οΈ Secure: Process execution sandboxing and input validation
- π¨ Beautiful: Rich terminal output with accessibility support
- π§ Configurable: YAML configuration with schema validation and IDE support
- π§ͺ Tested: >90% test coverage with comprehensive integration tests
git clone https://github.com/johnconnor-sec/taskopen-go.git
cd taskopen-go/
make dev-setup
make build
sudo make install
go install github.com/johnconnor-sec/taskopen-go/cmd/taskopen@latest
Download pre-built binaries from Releases.
# Open annotations from selected tasks
taskopen
# Run diagnostics to verify setup
taskopen diagnostics
# Initialize configuration interactively
taskopen config init
# Show version and build info
taskopen version
-
Go 1.21+: Install Go
-
Taskwarrior: Required for integration tests
# Ubuntu/Debian sudo apt-get install taskwarrior # macOS brew install task
-
Development Tools (automatically installed with
make dev-setup
):- golangci-lint
- gosec
# Clone and setup
git clone https://github.com/johnconnor-sec/taskopen-go.git
cd taskopen-go
# Setup development environment
make dev-setup
# Run all quality checks
make quality
# Build and run
make run
taskopen-go/
βββ cmd/taskopen/ # CLI entry point
βββ internal/ # Private packages
β βββ types/ # Core types with validation
β βββ config/ # Configuration handling
β βββ exec/ # Process execution
β βββ output/ # Terminal output
β βββ core/ # Business logic
βββ pkg/ # Public APIs (future)
βββ test/ # Integration tests
βββ .github/workflows/ # CI/CD configuration
βββ docs/ # Documentation
# Build binary
make build
# Run tests
make test
# Run tests with coverage
make test-coverage
# Run integration tests (requires taskwarrior)
make test-integration
# Format code
make fmt
# Run linter
make lint
# Run security checks
make security
# Watch for changes and rebuild (requires entr)
make watch
# Prepare for release
make prepare-release
We maintain high code quality through:
- Testing: >90% coverage, unit + integration tests
- Linting: golangci-lint with strict configuration
- Security: gosec security scanning
- Formatting: gofmt + goimports
- Documentation: Comprehensive godoc comments
- Startup time: < 100ms (cold start)
- Action matching: < 10ms for 1000+ actions
- Memory usage: < 50MB for typical workflows
- Taskwarrior query time: < 2x current Nim implementation
The Go version is designed for seamless migration:
- Configuration: Automatic INI β YAML migration with
taskopen config migrate
- Actions: 100% compatibility with existing action definitions
- Performance: Significant improvements in startup and execution time
- Features: All Nim features plus new interactive capabilities
# Backup existing configuration
cp ~/.taskopenrc ~/.taskopenrc.backup
# Install Go version
make install
# Migrate configuration
taskopen config migrate
# Verify migration
taskopen diagnostics
# Test with existing workflows
taskopen
# ~/.config/taskopen/config.yml
general:
editor: "vim"
browser: "firefox"
actions:
- name: "edit"
target: "annotation"
regex: ".*"
command: "$EDITOR"
modes: ["batch", "interactive"]
- name: "open-url"
target: "annotation"
regex: "https?://.*"
command: "$BROWSER"
# ~/.taskopenrc (automatically migrated)
[general]
editor = vim
browser = firefox
[ACTION edit]
target = annotation
regex = .*
command = $EDITOR
make test
make test-integration
go test -bench=. ./internal/...
Contributions are welcome! Please see the Contributing Guide (TODO) for details.
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature
- Make your changes following our code standards
- Run quality checks:
make quality
- Commit your changes:
git commit -m 'Add amazing feature'
- Push to your fork:
git push origin feature/amazing-feature
- Open a Pull Request
- Follow Effective Go
- Use
make fmt
for consistent formatting - Write comprehensive tests for new features
- Document public APIs with godoc comments
The Go version uses a modern, modular architecture:
- Types: Strongly typed with validation
- Configuration: Schema-driven with helpful error messages
- Execution: Context-aware with cancellation support
- Output: Rich terminal UI with accessibility support
- Testing: Comprehensive unit and integration test coverage
This project is licensed under the GNU General Public License v2.0 - see the LICENSE (TODO) file for details.
- Original Nim implementation by Johannes Schlatow
- Taskwarrior project for the excellent task management foundation
- Go community for excellent tooling and libraries