MultiTool Checks
How to use MultiTool Checks
This guide takes you from nothing to running your first checks on a small sample project. By the end you'll have installed the CLI, validated two requirements, watched one pass and one fail, and learned how to read the report. It takes about ten minutes.
This is the shortest path to a working result. For the full list of available options, see the Reference.
Prerequisites
You'll need:
- macOS or Linux. MultiTool Checks runs on macOS and Linux; Windows isn't supported yet.
- An API key from one supported model provider: Anthropic, OpenAI, or Gemini. This guide uses Anthropic. Checks are evaluated by that provider's model, so usage is billed to your own account.
MultiTool Checks only reads your code, it never modifies or runs it.
Step 1: Install the CLI
Install with Homebrew:
brew install wack/tap/multi
(No Homebrew? Download a binary from the Releases page instead.)
Step 2: Add your API key
MultiTool Checks reads your key from an environment variable. Create a key in the Anthropic Console, then export it in your terminal:
export ANTHROPIC_API_KEY="sk-ant-..."
This lasts for the current terminal session. To keep it set across sessions, add the same line to your shell profile (~/.zshrc for zsh, ~/.bashrc for Bash, or ~/.config/fish/config.fish for Fish).
Using OpenAI or Gemini instead? Export OPENAI_API_KEY or GOOGLE_API_KEY (or GEMINI_API_KEY) in place of the Anthropic key, and add --provider openai (or --provider gemini) plus --model <id> to the multi check command in Step 5. The Reference covers provider and model configuration.
Step 3: Create a sample project
Create a small throwaway folder so you can reproduce a clear pass and a clear fail:
mkdir checks-demo && cd checks-demo
Add a README; this will satisfy a check later.
cat > README.md <<'MD'
# Demo Project
A tiny project for trying MultiTool Checks.
MD
Add a stylesheet with a deliberate problem. In this example, we'll use a yellow text color:
cat > styles.css <<'CSS'
body { color: black; }
.warning { color: yellow; }
CSS
Step 4: Declare your requirements
Requirements live in a file named CHECKS.md. Create one at the root of checks-demo:
cat > CHECKS.md <<'MD'
# Requirement Documentation exists
The project contains a README file, and it is not empty.
# Requirement No yellow text
Scan every CSS file in this project. For each rule that sets `color`,
confirm the value is not `yellow`.
MD
Two things to notice:
- Each
# Requirement <title>line declares one requirement. - Neither requirement here has a
## Checksubheading, so its prose body is its single check. You add## Check <title>subheadings only when one requirement needs several checks (all of which must pass). The full syntax is in the Reference.
Step 5: Run the checks
From inside checks-demo:
multi check
MultiTool Checks finds your CHECKS.md, evaluates each check with an AI agent, and prints a report. (On OpenAI or Gemini, run multi check --provider openai --model <id> instead.)
Step 6: Read the report
Your output will look similar to this. The exact wording of the evidence varies between runs, but the structure is stable:
✓ Documentation exists
✗ No yellow text
.warning sets color: yellow (styles.css:2)
How to read it:
- A green ✓ means the requirement passed; a red ✗ means it failed.
- Beneath a failed requirement, MultiTool Checks shows the evidence — here, the exact rule and line that broke it. Passing checks are left out to keep the report focused.
Now fix the problem. Open styles.css, change yellow to a non-yellow color such as orange, and run multi check again. Both requirements should pass:
✓ Documentation exists
✓ No yellow text
You've now written a requirement, watched it fail on a real problem, and confirmed the fix.
Step 7: Gate CI on your checks (optional)
multi check exits 0 when every requirement passes and 1 when any fails, so you can fail a CI job on unmet requirements:
multi check || echo "requirements not met"
Drop that into your pipeline to block a merge whenever a requirement regresses.