Stop memorizing commands: the task menu
Every repo accumulates a pile of scripts nobody can remember the names of. `orchstep menu` turns your tasks into a fuzzy picker with single-key hotkeys — and stays out of the way in CI.
blog/task-menuYou've been on the project six months and you still cat Makefile to remember whether it's make test, make tests, or make check. The new hire opened the repo this morning and has no idea any of it exists. The tasks are right there — they're just undiscoverable. The interface to your own automation is "go read the source and guess."
Discoverability is a feature, and most task runners don't ship it. OrchStep does: orchstep menu reads your tasks and their descriptions and hands you a fuzzy picker. No new config, no extra file — the menu is your workflow.
Write descriptions, get a menu
The only thing the menu needs is a desc: on each task. That one field is the label in the picker — so it doubles as documentation:
name: dev
tasks:
test:
desc: "Run the test suite"
steps:
- { name: run, func: shell, do: echo "go test ./..." }
lint:
desc: "Lint and vet the codebase"
steps:
- { name: run, func: shell, do: echo "golangci-lint run" }
build:
desc: "Compile the binary"
steps:
- { name: run, func: shell, do: echo "go build ./..." }
serve:
desc: "Start the dev server on :8080"
steps:
- { name: run, func: shell, do: echo "starting dev server on :8080" }Now nobody has to know the task names:
orchstep menuYou get a fuzzy-searchable list — type se and serve floats up — with single-key hotkeys to fire a task without even hitting Enter. The descriptions you wrote are the menu text, so the picker explains itself. When you do know what you want, the direct form still works:
orchstep run testThe part that matters in CI
A common reason task runners avoid interactive menus: they hang a pipeline. An interactive prompt with no terminal attached waits forever, and your CI job times out at the 60-minute mark having done nothing.
orchstep menu refuses to do that. When stdin isn't a terminal — exactly the CI case — it doesn't block waiting for a keypress. So you can keep one entry point in your docs and your muscle memory without booby-trapping automation. Humans get the picker; pipelines call orchstep run <task> directly and are never ambushed by a menu.
Onboarding, for free
The quiet win is the new hire. "How do I run things here?" stops being a Slack question and becomes one command:
orchstep menuEvery task, every description, in a searchable list. The menu is the README for your automation — and unlike a README, it can't drift out of date, because it's generated from the tasks that actually exist.
What you actually gained
| Concern | Bare scripts / Makefile | orchstep menu |
|---|---|---|
| Remembering task names | cat the file, guess | fuzzy-search the picker |
| Knowing what a task does | read the source | the desc: is the label |
| Firing a task | type it exactly | single-key hotkey |
| Safe in CI | interactive prompts hang | non-interactive, never blocks |
| Onboarding | "ask someone" | one command |
Where OrchStep is not the answer
If your repo has exactly two scripts and the whole team has them memorized, a menu is overkill — orchstep run test is already fine. The menu pays off the moment the task list outgrows what one person can hold in their head, or the moment someone new has to find their way around.
Where to go next
- Quick Start — your first workflow in two minutes
- Git hooks that don't fight you — tasks the menu surfaces, wired into hooks
- Run your tests the same way everywhere — one of the tasks you'd reach for in the menu
- Composition — building bigger tasks out of smaller ones
Still cat-ing the Makefile to remember a command? Give your tasks descriptions and run orchstep menu. Install the binary and start with the demo above.
curl -fsSL https://orchstep.dev/install.sh | sh