Skip to content

hk9890/task-manager

task-manager

CI Go Reference Latest release License: Apache-2.0

A lean, file-based task tracker — issues, dependencies, and ready-work, and nothing else. No database, no server: every task is a Markdown file with YAML frontmatter under a .tasks/ directory, versioned alongside your code. You work with it through taskmgr, the command-line tool, or embed the storage engine directly via the sdk/tasks Go module.

  • Plain files — every issue is one Markdown file you can read, grep, and diff.
  • Dependencies & ready-work — model blocked_by / parent / related edges and ask "what can I work on now?" with taskmgr ready.
  • Single writertaskmgr (and the SDK) is the only thing that writes the store; it validates every field and serializes concurrent writers with an advisory lock, so the on-disk state can never go malformed.
  • Machine-readable — add --json to any command for scripting and agents.

Install

# 1. Go toolchain (Go 1.26+) — installs the latest tagged release onto your $PATH
go install github.com/hk9890/task-manager/cmd/taskmgr@latest

# 2. Prebuilt binary — download an archive for your OS/arch from the Releases page:
#    https://github.com/hk9890/task-manager/releases
#    (each release ships linux/macOS/Windows × amd64/arm64 + a checksums.txt)

# 3. From a checkout (Go 1.26+)
make install      # builds `taskmgr` and puts it on your $PATH

Usage

cd your-project
taskmgr init --prefix proj                 # create .tasks/
taskmgr create --title "First task" --type task --priority 1
taskmgr create --title "Depends on it" --blocked-by proj-0001
taskmgr ready                              # what can I work on now?
taskmgr show proj-0001
taskmgr update proj-0001 --status in_progress
taskmgr close proj-0001 --reason "done"
taskmgr ready                              # the dependent is now ready

Add --json to any command for machine-readable output. Run taskmgr guide for a built-in how-to and taskmgr commands for the full machine-readable catalog.

Use as a Go library

The storage engine is an importable, dependency-light module (github.com/hk9890/task-manager/sdk/tasks — only depends on gopkg.in/yaml.v3):

go get github.com/hk9890/task-manager/sdk@latest
package main

import (
	"fmt"
	"log"

	"github.com/hk9890/task-manager/sdk/tasks"
)

func main() {
	store, err := tasks.Open("") // discover .tasks upward from the cwd
	if err != nil {
		log.Fatal(err)
	}

	res, err := store.Create(tasks.CreateInput{Title: "Fix nav", Type: tasks.TypeBug})
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println("created", res.Issue.ID)

	ready, err := store.Ready() // issues with no open blockers
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println("ready:", len(ready))
}

See the package reference on pkg.go.dev.

Documentation

License

Licensed under the Apache License, Version 2.0. See LICENSE.

About

taskmgr — a lean, file-based task tracker (issues, dependencies, ready-work as Markdown) with a Go CLI and an importable SDK.

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors