Getting started
Two ways in. Pick the one that matches what you are building, then run the refusal at the bottom so you have watched the boundary hold once.
Install umbra
umbra reads KDL policy plus committed locks and builds a standalone guarded
CLI, with no hand-written Go.
brew tap coilyco-flight-deck/tap https://forgejo.coilysiren.me/coilyco-flight-deck/homebrew-tap
brew install coilyco-flight-deck/tap/umbra
scoop bucket add coilyco-flight-deck https://forgejo.coilysiren.me/coilyco-flight-deck/scoop-bucket
scoop install coilyco-flight-deck/umbra
Tagged releases also publish raw binaries and SHA256SUMS for Linux, macOS, and
Windows on amd64 and arm64. umbra shells out to the Go toolchain to resolve
locks and build, so Go has to be present.
Or import the primitives
Every package stands alone if you are adding a boundary to an existing urfave/cli v3 app.
GOPRIVATE=forgejo.coilysiren.me go get forgejo.coilysiren.me/coilyco-flight-deck/umbra
See a refusal
umbra rejects a shell metacharacter before execve. The gate section of
guides/primitives.md runs it and shows the refusal
verbatim.
guides/ holds one walkthrough per surface, from the minimum
useful program up to the network gate.
Next
The no-code driver covers authoring the guardfile. Architecture covers the two surfaces underneath it.