Write what to run. Not how. Boku reads your YAML, runs your tasks, gets out of the way.
Boku (僕 — "servant") reads a YAML file and runs the tasks inside it. One after another. Variables, iteration, dependencies, conditions — all in YAML.
No #!/bin/bash. No tab-indentation rage. No
ifeq syntax. Just a list of things to do.
#!/bin/bash
for pkg in fzf eza bat; do
if command -v brew &>/dev/null; then
brew install "$pkg"
fi
done
variables:
packages: [fzf, eza, bat]
tasks:
install:
if: command -v brew
iterate: packages
run: brew install {}
variables:
vault: ~/Documents/Brain/
daily: ${vault}Daily/
tasks:
date:
run: date +%Y-%m-%d
save_output: date
suppress_output: true
daily_obsidian:
if: test -f ${daily}${date}.md
run: cat ${daily}${date}.md | grep -E '^- \[ \]'
save_output: daily_tasks
suppress_output: true
weather:
run: curl -s wttr.in/new-york?0T | base64
save_output: weather
suppress_output: true
day:
run: |
echo "## Weather"
echo "${weather}" | base64 -d
echo ""
echo "## Today's tasks"
echo "${daily_tasks}"
Fetches today's date, pulls Obsidian tasks, gets weather, renders a daily brief.
| iterate | Loop over lists. {} becomes each item. |
| depends_on | Control execution order. Tasks wait. |
| variables |
${var} normal · @{var} masked ·
${env:VAR} env.
|
| save_output | Capture output into a variable for later tasks. |
| if | Shell condition. Skip tasks that don't need to run. |
| on_success | Run a command when the task succeeds. |
| on_failure | Run a command when the task fails. |
| dry_run | boku run ‐d previews without executing. |
| fail_fast | Abort remaining tasks on first failure. |
Q: Why no [X] feature?
Most likely because I didn't see the need in it.
Q: Why not Taskfile?
Taskfile is great. It's also a bigger surface area – includes, templating, dotenv, remote schemas. Boku is smaller. If you need less, it's simpler.
Q: Why not just write a Python script?
You could. But then you're writing Python. Boku is for when you want to describe what to run, not how to run it.
Q: Why no parallel execution?
Because I didn't need it, and it would make boku more complex than
it needs to be. Sequential is predictable. You can always shell
out to & if you want background jobs.
Q: Is this serious?
It's a YAML file that runs commands. Take it as seriously as you take your shell aliases.
YAML is unambiguous. LLMs can read, write, and modify boku taskfiles
without guesswork. skills/ has step‐by‐step guides for
common patterns — give your agent the skills and a taskfile, and it
can add tasks, change dependencies, or create new workflows.
$ pipx install boku2
$ uv tool install boku2
$ pip install git+https://git.sr.ht/~hxii/boku