Skip to content

Latest commit

 

History

History
146 lines (120 loc) · 8.84 KB

licensing.md

File metadata and controls

146 lines (120 loc) · 8.84 KB

Licensing

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 matrix

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 services/ subtree is permissive (ADR-2030)

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 licence boundary (ADR-2141)

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 AGPL-3.0-only, published, and live in sidestr-rs (ADR-2106, ADR-2112)

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.

AGPL-3.0 obligations for operators

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).

Source-Code headers

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.

AGPL-3.0 compliance rules for contributors

  1. Do not link solid-pod-rs as a Rust library. Only the solid-pod-rs-server binary is packaged. Communication happens over HTTP://127.0.0.1:8484; no shared address space.
  2. Preserve LICENSE files in derivation outputs. lib/solid-pod-rs.nix, lib/linkedobjects-browser.nix, and lib/nagual-qe.nix all copy upstream LICENSE files into $out/share/doc/<component>/LICENSE in postInstall.
  3. 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.
  4. No proprietary model weights in the image. Weights must be permissively licensed (Apache-2.0, MIT, or equivalent) to remain compatible.

Supply-chain attestation

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.

Further reading

Package evidence qualification — 2026-09-05

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.