cotask is a command-line task manager built in Rust that works like a simplified Git. Instead of tracking files, it tracks tasks with full version history. Every change creates a new snapshot (commit). You can branch, merge, rebase, tag releases, stash changes, and even export the entire repository state.
.
├── Cargo.lock
├── Cargo.toml
├── README.md
├── x.sh # Installation script
├── src
│ ├── bin
│ │ └── cli.rs # CLI entry point
│ ├── lib.rs # Library root
│ ├── main.rs # Main binary entry
│ ├── logic # Core business logic
│ │ ├── add_task.rs
│ │ ├── branch.rs
│ │ ├── checkout.rs
│ │ ├── diff.rs
│ │ ├── export.rs
│ │ ├── gc.rs
│ │ ├── import.rs
│ │ ├── init_repo.rs
│ │ ├── list_task.rs
│ │ ├── merge.rs
│ │ ├── mod.rs
│ │ ├── rand_hash.rs
│ │ ├── rebase.rs
│ │ ├── resolve.rs
│ │ ├── revert.rs
│ │ ├── show_help.rs
│ │ ├── show_log.rs
│ │ ├── stash.rs
│ │ └── tag.rs
│ ├── models # Data structures
│ │ ├── commit_model.rs
│ │ ├── export_model.rs
│ │ ├── mod.rs
│ │ └── task_model.rs
│ └── storage # Persistence layer
│ ├── commit.rs
│ ├── head.rs
│ └── mod.rs
.cotask/
├── commits/ # Commit snapshots (JSON)
├── refs/ # Branch pointers
├── tags/ # Release tags
├── stash/ # Temporary saved states
└── HEAD # Current branch or detached commit
- Add tasks
- Mark tasks complete
- Snapshot history automatically
- Commit log
- Checkout commit, branch, or tag
- Diff between commits
- Create/delete branches
- Merge branches
- Rebase branches
- Tags (fixed references to commits)
- Detect merge conflicts
- Manual resolution
- Garbage collection (remove unreachable commits)
- Stash system (temporary state save)
- Export/import full repository state
- Rust toolchain (rustc, cargo)
- Unix-like system (Linux, macOS) for the installation script
git clone https://github.com/BartSimpson2911/CoTask
cd CoTask
chmod +x x.sh
./x.shWhat the script does:
- Builds the project in release mode (
cargo build --release) - Installs the binary globally (
cargo install --path .) - Makes
cotaskavailable system-wide
| Command | Description |
|---|---|
cotask init |
Initialize a new task repository |
cotask export |
Backup repository state to JSON |
cotask import <file> |
Restore repository from backup |
cotask gc |
Clean unused commits |
| Command | Description |
|---|---|
cotask add "task" |
Add a new task |
cotask list |
List all current tasks |
cotask done <id> |
Mark a task as complete |
| Command | Description |
|---|---|
cotask log |
Show commit history |
cotask checkout <ref> |
Switch branch/tag/commit |
cotask diff <c1> <c2> |
Compare two commits |
cotask revert <commit> |
Revert state |
| Command | Description |
|---|---|
cotask branch <name> |
Create branch |
cotask merge <branch> |
Merge |
cotask rebase <branch> |
Rebase |
cotask branches |
List branches |
cotask branch-delete <name> |
Delete branch |
| Command | Description |
|---|---|
cotask tag <name> |
Create tag |
cotask tags |
List tags |
| Command | Description |
|---|---|
cotask stash |
Save state |
cotask stash-pop |
Restore stash |
cotask init
cotask add "Learn Rust"
cotask add "Build CLI"
cotask done 1
cotask log- Commits → Snapshot of task state
- Branches → Pointers in
.cotask/refs/ - Tags → Fixed commit references
- HEAD → Current position
- DAG → Commit graph like Git
- Rust
- Serde
- Standard Library
- Bisect
- Commit signing
- Storage compression
- Remote sync
- Interactive rebase
- Hooks
- Web UI
- Fork
- Create branch
- Make changes
- Submit PR
MIT LICENSE