Gates
Gates are deterministic checks that run after a step completes. No LLM in the loop — gates use your project’s build tools and test runners.Declaring gates
Built-in gates
Shell aliases
These resolve automatically based on your project type, or you can override them ingump.toml.
| Gate | Go | Node | Rust |
|---|---|---|---|
compile | go build ./... | npm run build | cargo build |
test | go test ./... | npm test | cargo test |
lint | golangci-lint run | npm run lint | cargo clippy |
coverage: N | go test -cover | npm test -- --coverage | cargo tarpaulin |
compile and test fail if they can’t be resolved (no go.mod, package.json, or Cargo.toml found). lint and coverage are skipped silently if the tool isn’t available — they’re optional quality checks.
Structural gates
| Gate | What it checks |
|---|---|
schema | The plan output is valid JSON with the expected format (array of items with name and description) |
touched: "glob" | At least one file matching the glob was modified in the diff |
untouched: "glob" | No file matching the glob was modified in the diff |
tests_found | The test runner finds and recognizes tests to execute |
"*_test.*" matches pkg/auth/middleware_test.go.
Custom gates
Combining gates
Gates are a list. Use as many as you need:Overriding detection
If auto-detection picks the wrong commands, override ingump.toml:
What happens when a gate fails
Withouton_failure, a gate failure is fatal — the run stops. With on_failure, Gump retries, escalates, or restarts from an earlier step. See the Failure Handling page for details.
On retry, Gump injects the failed diff and the gate’s error output into the agent’s context via {error} and {diff}. The agent sees exactly what went wrong.