simple sequential task runner written in Python.
Added global tasks; See CHANGELOG
Schema error fix
Updates to docs


browse  log 



You can also use your local clone with git send-email.

Boku Logo

boku (僕), servant in Japanese, is a simple sequential task runner written in Python with support for variables, dependencies, helpers and tasks.

I made it to automate simple, recurring tasks without having to touch code.

See some Example Tasks or read more about Tasks, Variables and Helpers.



#Install via pipx

Run pipx install git+https://git.sr.ht/~hxii/boku

#Running things

usage: boku [-h] [-c] [-V] [-v] [-q] [-d] [-t] taskfile

Simple, sequential task runner

positional arguments:
  taskfile          A valid YAML task file

  -h, --help        show this help message and exit
  -c, --check-only  Only validate YAML schema and exit.
  -V, --version     show program's version number and exit
  -v, --verbose     Verbose output.
  -q, --quiet       Do not output anything except errors.
  -d, --dry_run     Only show the intended command, without actually running anything.
  -t, --text-only   Only show task text, omitting the output.

#Example Output

~/d/boku main• 5m 8.2s ❱ boku lint
[boku 0.0.2]
Task File: /Users/Paul_Glushak/dev/boku/lint.yaml
YAML Valid: True
Tasks: 2
Dry Run: False
Started: 2024-05-09 16:33:07.734442
[1/2] TSK black()
[2/2] TSK ruff()
All checks passed!

Ended: 2024-05-09 16:33:08.447175
~/d/boku main• ❱

#Planned Features

While I do intend on keeping boku as simple as I can, I am planning on adding the following features:

  • [V] Lazy file name matching tasks -> tasks.yaml.
  • [V] Add option to load each from an external command, cat for example (or pipe).
  • [ ] Add option to SKIP tasks (in on_success or on_failure).
  • [ ] Allow passing arguments to a task file, e.g. boku lint.yaml ~/folder or boku clean --dest ..
  • [V] Global tasks - boku global tasks.yaml.
  • [V] Read a task from stdin - boku <(cat someremotefile.yaml).
  • [ ] Replace calling for variables and helpers, e.g. variables.variable with {variable}.