taskgun — A gun to shoot tasks for Taskwarrior
A Rust CLI that extends Taskwarrior with power-user workflows: bulk task generation, smart scheduling, and more.
Features
- Bulk task generation — Create numbered task series with a single command
- Flexible skip system — Skip time windows and days using presets or custom rules
- Smart scheduling — Day-based or hour-based scheduling
- Hierarchical tasks — Support for subsections (e.g., Video 1.1, 1.2, 2.1)
- Configurable presets — Define custom skip windows in .taskrc
- Zero runtime dependencies — Only requires Taskwarrior itself
Installation
From crates.io
From source
Requirements
- Taskwarrior 2.6.0 or later
- Rust 1.70+ (for building from source)
Usage
Basic task generation
Create 5 tasks without due dates:
Creates:
- Video 1
- Video 2
- Video 3
- Video 4
- Video 5
Day-based scheduling
Create 5 tasks with the first due in 5 days, then every 7 days:
Creates tasks due on:
- today+5d
- today+12d
- today+19d
- today+26d
- today+33d
Hour-based scheduling
Create 5 tasks with the first due in 2 hours, then every 6 hours:
Skip windows (bedtime, weekends, custom)
Skip specific time windows or days using the --skip option (can be used multiple times):
# Skip bedtime (22:00-06:00 by default)
# Skip weekends (Saturday and Sunday)
# Skip custom time range
# Skip specific days
# Combine multiple skip rules
Skip behavior:
- Tasks landing in skip windows are pushed forward to the next valid time
- In hour mode, subsequent tasks chain from the pushed time
- In day mode, each task is calculated independently
Built-in presets:
bedtime: 22:00-06:00 (nighttime hours)weekend: Saturday and Sunday
Hierarchical tasks with subsections
Create tasks with subsections (2 sections in chapter 1, 3 in chapter 2, 1 in chapter 3):
Creates:
- Video 1.1 (today+5d)
- Video 1.2 (today+12d)
- Video 2.1 (today+19d)
- Video 2.2 (today+26d)
- Video 2.3 (today+33d)
- Video 3.1 (today+40d)
Custom unit names
Use a different prefix instead of "Video":
Creates:
- Lecture 1.1, Lecture 1.2, Lecture 2.1, etc.
Custom skip windows in .taskrc
Define your own skip windows in ~/.taskrc:
# Define a lunch break
taskgun.skip.lunch=1200-1400
# Define a long weekend
taskgun.skip.longweekend=fri,sat,sun
# Override the bedtime preset
taskgun.skip.bedtime=2100-0500
Then use them:
Command Reference
taskgun create
Generate a series of numbered Taskwarrior tasks.
Syntax:
Arguments:
| Argument | Type | Description |
|---|---|---|
<PROJECT> |
String | Taskwarrior project name (required, positional) |
Options:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--count |
-n |
u32 | 10 | Number of chapters |
--unit |
-u |
String | "Video" | Task name prefix |
--offset |
-o |
String | — | Time until first task (e.g., "5d", "2h") |
--interval |
-i |
String | — | Time between tasks (e.g., "7d", "6h") |
--skip |
String | — | Skip window (can be used multiple times) | |
--subsections |
-s |
String | — | Comma-separated subsection counts |
Skip values:
- Named presets:
bedtime,weekend, or custom from .taskrc - Time ranges:
2200-0600,21:00-06:00,1200-1400 - Day names:
sat,sun,friday,saturday,sunday,mon,tue,wed,thu,fri
Notes:
--offsetand--intervalmust be provided together- Both must use the same unit (either "d" for days or "h" for hours)
- When
--subsectionsis given,--countis inferred from the number of chapters --skipcan be used multiple times to apply multiple skip rules
taskgun completions
Generate shell completion scripts:
# Bash
# Zsh
# Fish
How It Works
taskgun shells out to Taskwarrior's task add command for each task. It:
- Validates that Taskwarrior is installed
- Generates task names (simple or hierarchical)
- Calculates due dates if scheduling is requested
- Creates tasks one by one using
task add
All tasks are created in your Taskwarrior database and follow your configured workflows, hooks, and settings.
Development
# Run tests
# Run with logging
RUST_LOG=debug
# Check code
# Build release
License
Licensed under either of:
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Roadmap
- v0.1.0: Create subcommand with smart scheduling
- v0.2.0: Search subcommand with filters
- v0.3.0: Bulk modify subcommand
- v1.0.0: Stable release with comprehensive testing