Skip to content

What is Rune?

New here? Start with this page, then walk through Getting started. This page explains what Rune is, the idea behind it, and when to reach for it.

Rune is a command runner: one readable file at your repo root, the Runefile, that captures every project command — lint, test, build, deploy, and the long tail of scripts — so anyone (or anything) can run them by name.

Terminal window
rune test # run the "test" task
rune --list # show every documented task

A Runefile is named blocks of commands. You run a block by name; you declare that some blocks depend on others. That’s the whole model:

# Build the project.
build:
@echo "building…"
# Run the tests. `build` runs first, because `test` depends on it.
test: build
@echo "testing…"

Run rune with no arguments and you get the version plus the list of available tasks (nothing runs). Run rune build to run a task; run rune test and Rune runs build first, then test. Run rune --list and you see both, with their descriptions.

Two things make this more than a pile of shell scripts:

  1. The same tasks serve humans and AI agents. A person runs rune test in a terminal; an AI agent or IDE runs the same test task through the Model Context Protocol. There’s no second copy of “how to build this project” to drift out of date.
  2. Mistakes are caught before anything runs. Reference a task that doesn’t exist, a variable you never defined, or create a dependency cycle, and Rune refuses to run — pointing at the exact file:line:column.
Rune A build system (make)
Runs a task when you ask Always Only if it thinks output is “out of date”
Skipping work Opt-in per task via [cache(...)], and logged Implicit, timestamp-based
Cross-platform shell Built in (pure-Go shell; same on Linux/macOS/Windows) Depends on the system shell
AI agents run your tasks First-class (MCP) Not a concept

If you’ve used just, Rune will feel familiar — with a cross-platform shell, static validation, and the agent/MCP layer added.

  • You want one obvious place for “how do I build / test / deploy this?”
  • You’re replacing a Makefile full of .PHONY targets or a folder of ad-hoc scripts.
  • You want the same commands to work for teammates, CI, and AI agents.
  • You need tasks that behave identically on Linux, macOS, and Windows.
  • You need a true build system with file-dependency graphs and incremental rebuilds — Rune deliberately always runs a task when asked (caching is an explicit opt-in, not the default).
  • Your logic needs loops, recursion, or general programming in the config — Rune’s task language is intentionally small; real logic lives in task bodies (shell, Python, Node).