Agentbox is AGPL-3.0. Every first-party source file and every bundled component that carries a copyleft licence is AGPL-3.0 or a permissive licence compatible with it.
| Component | Licence | Linkage | Source pointer |
|---|---|---|---|
| agentbox (this repo) | AGPL-3.0 | — | LICENSE |
agentbox-vex |
MIT OR Apache-2.0 | Private host-side CLI; not published | services/agentbox-vex |
solid-pod-rs (dreamlab-AI) |
AGPL-3.0-only | Binary under supervisord — HTTP boundary only | github.com/DreamLab-AI/solid-pod-rs |
linkedobjects/browser |
AGPL-3.0 | Static assets served by management-api | github.com/linkedobjects/browser |
nostr-rs-relay (Scsibug) |
MIT | Binary from nixpkgs — HTTP boundary only | github.com/scsibug/nostr-rs-relay |
nagual-qe (proffesor-for-testing) |
MIT | Binary launched by supervisord | github.com/proffesor-for-testing/nagual-qe |
nostr-tools npm |
MIT | Library linked into management-api |
npm |
@noble/curves npm |
MIT | Library linked into management-api |
npm |
openai/privacy-filter weights |
Apache-2.0 | Model weights loaded by opf-router | Hugging Face |
dream-engine core crates (DreamLab-AI/dream-engine) |
MIT OR Apache-2.0 | Cargo dependency of services/dream-engine (path pin during development, git rev after push) |
github.com/DreamLab-AI/dream-engine |
codex binary (OpenAI) |
Apache-2.0 | Binary invoked as a subprocess | github.com/openai/codex |
All permissive (MIT, Apache-2.0) components are compatible with AGPL-3.0.
The Rust crates under services/ are first-party but licensed
MIT OR Apache-2.0 by their own manifests, and each package directory carries
the LICENSE-MIT and LICENSE-APACHE texts plus a README.md stating the dual
grant (services/LICENSING-NOTICE.md has the per-directory table), so they can
be published to crates.io and reused outside the AGPL service. The exceptions
are crates that link an AGPL library: nostr-pod-bridge links
solid-pod-rs-nostr, and the dream-engine adapter links nostr-bbs-core (operator
decision 2026-09-25, ADR-2115). Each declares AGPL-3.0-only, ships the full
AGPL text as LICENSE, and says in its README that it is not dual-licensed
(secret-backup is AGPL by choice; see the notice). The
aggregate hosted service remains AGPL-3.0; the permissive grant applies to each
crate on its own.
The dream engine is split along the licence line. The gate and the loop
mechanism (pairwise-gate, failure-fingerprint, dream-gate, dream-core
and the dream-cli) live in
DreamLab-AI/dream-engine, a
standalone repository licensed MIT OR Apache-2.0 and built clean-room with the
estate scrubbed out. services/dream-engine stays here as the AGPL-3.0-only
adapter: it links nostr-bbs-core, it holds the estate wiring (Z.AI and Loom,
the annexe, RuVector, the forum), and its zone_crypto module is never
published. The dependency runs one way: the adapter depends on the permissive
crates, never the reverse. The permissive crates are published to crates.io at 0.1.0
(pairwise-gate, failure-fingerprint, dream-gate, dream-core, dream-cli)
and the adapter pins dream-core and dream-gate with =0.1.0. The earlier TypeScript fork was renamed DreamLab-AI/dream-machine
and archived; the new repository takes the dream-engine name.
The sidestr-* crates are no longer in this repository: they moved with their
history to dreamlab-AI/sidestr-rs
on 2026-09-23 (ADR-2112), and crates/sidestr/README.md is only a pointer. The
licensing rule is unchanged. The crates are derivatives of Melvin Carvalho's siding
(github.com/sidestr/spec, AGPL-3.0) and are therefore AGPL-3.0-only, with
publish = true: they are published to crates.io case by case and consumed by
other estate repositories, which become AGPL-3.0 in effect and declare it. Each
crate names the upstream repository, author and ported commit in its README and
crate-level rustdoc. They were never under services/, so the services/
rule above does not apply to them, and no permissive crate may depend on them;
an agentbox component that links one (none does today) declares AGPL-3.0.
scripts/ci/check-crate-licensing.sh enforces this on every push and pull
request (a step in .github/workflows/invariants.yml): a services/ package
directory whose manifest declares a grant with no adjacent text, no README, or
a licence expression this gate does not recognise fails CI. Adding a crate with
a new licence expression is therefore a deliberate change to the gate.
Running agentbox as a hosted service — offering it to users over a network — triggers §13: you must make the full corresponding source available to those users, including any modifications you have made.
Self-hosted and internal use carry no additional obligations beyond the standard copyleft terms (preserve notices, make source available if you distribute binaries).
The management-api emits a Source-Code HTTP header on every response from
/lo/* (the linkedobjects/browser viewer mount path) pointing at the upstream
repository. This satisfies the AGPL §13 network-service disclosure requirement
for that component.
- Do not link
solid-pod-rsas a Rust library. Only thesolid-pod-rs-serverbinary is packaged. Communication happens overHTTP://127.0.0.1:8484; no shared address space. - Preserve
LICENSEfiles in derivation outputs.lib/solid-pod-rs.nix,lib/linkedobjects-browser.nix, andlib/nagual-qe.nixall copy upstreamLICENSEfiles into$out/share/doc/<component>/LICENSEinpostInstall. - New components must be licence-reviewed before merging. Add them to the matrix above. AGPL-3.0, MIT, Apache-2.0, and MPL-2.0 are all pre-approved. GPL-2.0-only is incompatible with AGPL-3.0 — raise an issue.
- No proprietary model weights in the image. Weights must be permissively licensed (Apache-2.0, MIT, or equivalent) to remain compatible.
flake.lock pins every Nix input by hash. lib/solid-pod-rs.nix and
lib/nagual-qe.nix pin a git rev plus srcHash and cargoHash. The Nix
sandbox guarantees that a build either produces the pinned hash or fails
loudly — there is no silent substitution of dependency content.
For image inventories, .#<variant>.securityEvidence enumerates the store
paths shipped in image.layers.paths. A builder closure also contains inputs
that never reach the image and must not be presented as the payload. The host
security report command uses that evidence to produce CycloneDX and SPDX
SBOMs plus image-scoped OpenVEX assessments. See image SBOMs and VEX.
The project-specific agentbox-vex emitter is private and dual-licensed; the
NixOS VEX module and its general feed are not imported or redistributed.
- AGPL-3.0 full text
- AGPL FAQ: network use is distribution
- ADR-010 — solid-pod-rs as first-class pod server
The 2026-09-04 inventory found eight manifests with the declared
seven-permissive/one-AGPL split and no adjacent licence texts or README
files. That gap is now closed on disk: every package directory carries the texts
its manifest declares, each manifest declares description, repository and
readme, and cargo package --list shows those files inside the package
payload for all eight crates. scripts/ci/check-crate-licensing.sh keeps it
closed.
What that does not establish: no registry lookup, archive creation or publication has run; no dependency graph has been reviewed for distribution licence compatibility; the prose-sanitiser and diagram-ir extraction account still needs separate source/package receipts. Files on disk are a packaging precondition, not a release. Metadata evidence does not certify a published archive, dependency compatibility or operator compliance. Complete release ownership, packaged contents and dependency review before claiming the package contract closed.