Skip to content

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 specgen

specgen 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/specgen
scoop bucket add coilyco-flight-deck https://forgejo.coilysiren.me/coilyco-flight-deck/scoop-bucket
scoop install coilyco-flight-deck/specgen

Tagged releases also publish raw binaries and SHA256SUMS for Linux, macOS, and Windows on amd64 and arm64. specgen 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

The shortest runnable example rejects a shell metacharacter before execve:

go run ./examples/policy unsafe 'foo; rm -rf /'

examples/ holds one app per primitive, and its README gives a reading order 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.