The agent-run work-unit CLI: capability-scoped agents driving each work unit through one signed, content-addressed pipeline to a merged PR — git-writes signed and verified against their owner.
prx — the agent-run PR contract / work-unit CLI, plus the @bounded-systems/*
libraries it builds on. A Bun + TypeScript monorepo.
packages/prx/— The agent-run PR contract / work-unit CLIpackages/*— the@bounded-systems/*libraries it builds on, workspace-internal viaworkspace:*:prx-config— TUI configuration schema parser/emitter for L1 Claude and L2 Warp tools
spec/— the prx effect/contract spec (schema.cue)
bun install
bun test
bun run typecheck
bun run prx:build # → dist/prx (self-contained binary)prx ships as a released binary (per platform) attached to each GitHub
release, plus a container image at ghcr.io/bounded-systems/prx. Distribution
is the binary — nix is one install path among several.
This repo doubles as a tap (it has a Formula/), so:
brew tap bounded-systems/prx https://github.com/bounded-systems/prx
brew install prx(The explicit tap URL is needed because the repo is prx, not homebrew-prx.)
The flake's packages are the released binaries fetched via fetchurl, so they
build under sandbox = true with no nix.conf changes:
nix run github:bounded-systems/prx -- --version
nix build github:bounded-systems/prx#prx # → result/bin/prxAny home-manager config can install prx via the exported module:
{
inputs.prx.url = "github:bounded-systems/prx";
# in your home-manager configuration's modules list:
modules = [ prx.homeManagerModules.default ];
}# then, in a home-manager module:
programs.prx = {
enable = true;
# optional consumer wiring the released binary does not bake:
aiHomeRoot = "${config.home.homeDirectory}/.config/ai-home"; # PRX_AI_HOME_ROOT
claudePath = "${config.home.homeDirectory}/.local/bin/claude"; # BAKED_CLAUDE_CODE_PATH
installWt = true; # also install the `wt` worktree wrapper
};This installs prx (and optionally wt) into
~/.local/bin. The per-release sha256s live in release-hashes.json, updated
automatically by the release-binary workflow on each tag.
Public @bounded-systems/* leaves (e.g. cas) are published to npm via
changesets + .github/workflows/release.yml (SLSA provenance). See
docs/companion-repos.md.
LICENSE— see belowCONTRIBUTING.md— how to build, test, and propose changesCODE_OF_CONDUCT.md— Contributor Covenant 2.1SECURITY.md— report vulnerabilities privately
These files, the .github/ issue + pull-request templates, and their shared
facts (project, copyright, security contact, supported versions) are
generated from packages/prx/community/ — edit community.json (validated
against a JSON Schema with ajv) or the pinned templates, then
bun run community:render. bun run community:check (and the test suite) fail
on drift, so the governance docs can't fall out of sync.
This README is generated the same way: community.json and each package's
description are first projected into prx.jsonld — a hostable
schema.org JSON-LD @graph of the project, its packages, and its governance
facts (packages/prx/src/graph/). bun run readme:render then reads the
README's tokens out of that graph and renders this template;
bun run jsonld:render / bun run readme:render (and their :check variants,
run in CI) keep the graph, the README, and the sources in lockstep.
prx is source-available, not OSI open-source. It is licensed under the
PolyForm Noncommercial License 1.0.0
(PolyForm-Noncommercial-1.0.0): free for any noncommercial use, with all
commercial rights reserved to the copyright holder. For a commercial license,
contact the maintainer at https://github.com/bdelanghe. See LICENSE.