A config driven occlusion framework for your CLIs and APIs
  • Go 99.4%
  • Shell 0.5%
  • Makefile 0.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Kai Siren 524a809272
All checks were successful
ci / secrets (push) Successful in 13s
ci / lint (push) Successful in 40s
ci / test (push) Successful in 58s
promote / gate-and-promote (push) Successful in 1m3s
release / release (push) Successful in 1m11s
docs: add umbra banner
2026-08-21 15:35:21 -07:00
.agents/skills/repo-umbra chore(skills): regenerate the repo pointer skill from Forgejo metadata 2026-08-20 00:37:51 -07:00
.forgejo/workflows chore: drop CODEOWNERS so agents stop reading a review request as a gate 2026-08-20 02:13:11 -07:00
.github chore: drop CODEOWNERS so agents stop reading a review request as a gate 2026-08-20 02:13:11 -07:00
.ward chore(just): drop the empty ward commands block 2026-08-17 13:40:18 -07:00
assets docs: add umbra banner 2026-08-21 15:35:21 -07:00
cli docs(band): finish the small-band migration 2026-08-16 20:47:37 -07:00
cmd chore!: rename the Go module path to umbra 2026-08-13 19:55:30 -07:00
docs feat(opcore): let a mapped body carry pinned constants 2026-08-19 09:32:09 -07:00
examples chore!: rename the Go module path to umbra 2026-08-13 19:55:30 -07:00
http feat(opcore): let a mapped body carry pinned constants 2026-08-19 09:32:09 -07:00
internal/specgencli chore!: rename the Go module path to umbra 2026-08-13 19:55:30 -07:00
pkg feat(tokenmint): mint OAuth client_credentials tokens as a value provider 2026-08-19 02:47:58 -07:00
scripts chore(just): drop the empty ward commands block 2026-08-17 13:40:18 -07:00
.agentic-os.toml chore!: rename the Go module path to umbra 2026-08-13 19:55:30 -07:00
.gitattributes feat(passthrough): add WithEnvFunc for exec-time env injection 2026-05-29 14:36:30 -07:00
.gitignore Repository hygiene sweep: tier-A + CONTRIBUTING + godoc-current + auto-merge 2026-05-13 05:47:10 -07:00
.golangci.yaml chore(code-comments): clean comment-discipline violations; pin agentic-os v0.16.0 2026-06-08 16:58:27 -07:00
.pre-commit-config.yaml ward-container: residual claude work on coilyco-flight-deck/cli-guard 2026-06-24 07:08:57 +00:00
AGENTS.md chore(just): drop the empty ward commands block 2026-08-17 13:40:18 -07:00
CLAUDE.md chore(pre-commit): adopt context-load-points hook (v0.11.1) 2026-05-29 22:45:41 -07:00
CODE_OF_CONDUCT.md Adopt Contributor Covenant 2.1 as Code of Conduct 2026-05-13 05:31:35 -07:00
CONTRIBUTING.md chore!: rename the Go module path to umbra 2026-08-13 19:55:30 -07:00
go.mod feat(tokenmint): mint OAuth client_credentials tokens as a value provider 2026-08-19 02:47:58 -07:00
go.sum feat(tokenmint): mint OAuth client_credentials tokens as a value provider 2026-08-19 02:47:58 -07:00
godoc-current.txt feat(opcore): let a mapped body carry pinned constants 2026-08-19 09:32:09 -07:00
LICENSE Scaffold cli-guard: extract framework primitives from coily/pkg/ 2026-05-13 04:25:19 -07:00
Makefile feat(specgen): publish Homebrew and Scoop packages 2026-07-23 11:37:00 -07:00
mkdocs-requirements.txt Add mkdocs (urfave palette) + docs CI verification 2026-05-13 05:28:44 -07:00
mkdocs.yml docs(band): finish the small-band migration 2026-08-16 20:47:37 -07:00
pyproject.toml chore(docs): declare the small documentation band 2026-08-16 18:08:59 -07:00
README.md docs: add umbra banner 2026-08-21 15:35:21 -07:00
SECURITY.md feat!: remove the namespace sandbox 2026-08-13 22:25:10 -07:00
staticcheck.conf Adopt urfave-shaped README + trifecta + staticcheck.conf 2026-05-13 05:23:19 -07:00

umbra

a config driven occlusion framework for your CLIs and APIs

umbra - a config driven occlusion framework

About

Designed to sit between AI agents (or any semi-trusted automation) and the host system, featuring:

  • argv validation rejecting shell metacharacters before they reach execve
  • append-only JSONL audit log with lumberjack rotation
  • read / write / delete scope tokens, validated per verb
  • best-effort RepoRoot stamping that records each audit row's git toplevel (empty outside any repo)
  • clean+synced gate refusing repo-shaped verbs on a dirty tree
  • per-repo config loaded from a consumer-chosen YAML filename (e.g. .<app>/<app>.yaml)
  • thin pass-through wrapper for embedding existing CLIs as audited subcommands
  • per-invocation CONNECT proxy with consumer-supplied egress allowlist
  • public exit-code taxonomy for orchestrators

The repository also ships specgen, an installable no-code driver that turns KDL policy plus committed locks into standalone guarded CLIs without hand-written Go. It discovers .specgen/ and can generate, lock, check skew, build, and run. An explicit --skills-out path also renders a concise native agent skill plus a lazy command index from the merged command tree.

Install specgen

Homebrew users on macOS or Linux can install from the coilyco tap:

brew tap coilyco-flight-deck/tap https://forgejo.coilysiren.me/coilyco-flight-deck/homebrew-tap.git
brew install coilyco-flight-deck/tap/specgen

Scoop users on Windows can install from the coilyco bucket:

scoop bucket add coilyco https://forgejo.coilysiren.me/coilyco-flight-deck/scoop-bucket.git
scoop install coilyco/specgen

Tagged Forgejo releases also publish raw specgen binaries for Linux, macOS, and Windows on amd64 and arm64, plus SHA256SUMS. Go users can install directly:

GOPRIVATE=forgejo.coilysiren.me go install forgejo.coilysiren.me/coilyco-flight-deck/umbra/cmd/specgen@vX.Y.Z

specgen --version reports both the installed driver version and the umbra module ref that lock will freeze by default. The driver invokes the Go toolchain when it resolves locks and builds generated CLIs.

Documentation

See the specgen guide, docs/FEATURES.md for a feature inventory, and examples/ for runnable demos one per primitive. make docs-serve renders the documentation and CLI reference locally. Other development verbs also run through the Makefile.

Support

If you found a bug or have a feature request, create a new issue. Participation in this community is governed by the Code of Conduct. Security disclosures go through SECURITY.md.

Sibling repo: mcp-beaver.

License

See LICENSE.

See also

Cross-reference convention from the shared repo-pointer rule in the agentic-os docs.