Skip to main content

Sovereignty by Deliverable — a static gate for agentic-system specifications. Checks owner, deliverable, projection contract, audit trace.

Project description

SvL — Sovereignty by Deliverable

CI SvL self-audit License: MIT

Most agentic systems fail because authority boundaries are implicit.

SvL audits authority, ownership, and mutation boundaries in agentic-system specs before runtime. It is a static gate — like ESLint or Spectral, but for AI agent specifications.

A system becomes governable when every critical authority carries an owner, a deliverable, a projection contract, and an audit trace.

If any of those four is missing, svl audit raises a finding. That is the whole product.

Related note: how SvL maps to governed AI sales agents.


30-second demo

A spec where authority is implicit:

# memory.yaml
agents:
  memory_writer:
    uses_llm: true
    mutates:
      - customer_memory

svl audit memory.yaml --format beginner:

memory.yaml — PASS  (3 warnings — exit 0 in default, exit 1 under --strict)
  0 blocking · 3 warning · 0 hint

! agents.memory_writer
  Component mutates state but produces no audit trace.
  fix: Add `audit_trace: <append-only log path>`.
  (SVL-AUDIT001)

! agents.memory_writer
  Authority-bearing component has no owner. Nobody is accountable.
  fix: Add `owner: <team-or-person>` naming the accountable party.
  (SVL-OWNER001)

! agents.memory_writer
  Authority-bearing component exposes no observable projection.
  fix: Add `projection_contract: <path>`.
  (SVL-PROJECTION001)

(The fourth invariant — deliverable — already passes here: in v2 doctrine, the mutates: [customer_memory] path is the deliverable. The rule fires only when no concrete artefact is named at all.)

The minimal fix — four primitives, declared explicitly:

agents:
  customer_memory_writer:
    owner: customer_memory_team
    deliverable: customer_memory_record
    projection_contract: memory/read_model.yaml
    audit_trace: traces/customer_memory_mutations.jsonl
    mutates:
      - customer_memory

Now svl audit --strict memory.yaml passes.


LLM usage does not define an agent

This is the single most useful idea in SvL:

An agent is not defined by use of an LLM. An agent is an entity that holds observable, auditable authority.

That means:

  • A prompt is not an agent.
  • A workflow is not an agent.
  • A tool is not an agent.
  • A skill is not an agent.

…unless that prompt / workflow / tool / skill carries the four invariants. If it does, it is an agent — whatever its implementation. If it doesn't, it is a piece of plumbing.

SvL does not care whether your "agent" runs on Claude, on Mistral, on a Python function, or on a human typing into a terminal. SvL cares whether the system can be audited.


What svl audit checks

For every authority declared in your spec, SvL looks for:

Invariant Question SvL asks
Owner Who signed this off? Who is accountable when it goes wrong?
Deliverable What concrete artefact does this produce?
Projection Contract What can an external observer see, read, or call?
Audit Trace What record proves the decision and survives a rollback?

When any of the four is missing, svl audit raises a finding. Findings are written in operational language, not doctrinal language.

# Not this
Violation of Sovereignty Projection Doctrine.

# But this
This component mutates persistent state but exposes no observable
projection. The system cannot audit its decisions.

What SvL is not

  • not a runtime
  • not an orchestrator
  • not a multi-agent platform
  • not an architectural cosmology
  • not a framework

SvL reads a spec. It returns findings. It exits. That is all.

If you want a runtime, write one. If you want an orchestrator, pick one. SvL audits whatever you produce, before you ship it.


Install

v1.x is on PyPI; v2.0.0 is not yet published. Pin to git while the v2 PR settles:

pip install "git+https://github.com/guillaume-hestia-projekt/svl.git@feat/v2-compression"

(Once v2 is tagged and released, pip install svl-cli will install v2 directly.)

svl --version
svl audit examples/v2/00_memory_writer_bad.yaml --format beginner
svl audit examples/v2/00_memory_writer_fixed.yaml --strict
svl autoplan "AI assistant that summarizes daily status notes" --project daily-status

The CLI has two commands. audit is the gate. autoplan is the recommender. autoplan accepts either a path (file or directory) or a one-line idea in quotes — useful for vibe-coder kickoff.


Commands

svl audit <path>

Static gate. Reads a YAML spec, a project directory, or an AGENTS.md file. Returns JSON by default, or a vibe-coder-friendly text format with --format beginner.

Flag Effect
--format beginner Plain-text PASS/FAIL with one finding per block.
--summary Counts only, skip findings list.
--strict Treat warnings and observations as blocking. Use this in CI.
--pack owasp-agentic-top10 Add the OWASP Agentic Top 10 advisory rules.
--explain SVL-OWNER001 Print the metadata for a rule ID (e.g. SVL-DELIVERABLE001, SVL-PROJECTION001, SVL-AUDIT001).
--type agentic Override contract-type inference.

Exit code is 0 if no errors, 1 if any error finding is present. Wire it into CI before runtime.

svl autoplan <path> --project <name>

Pattern recommender. Reads an intent description (YAML) or a project directory, returns architecture recommendations: agents to consider, memory strategies, runtime choices, ADR candidates, day-by-day build sequences.

Output is markdown by default, JSON with --format json. --list-profiles shows the available profiles.

The patterns surfaced here are advisory — they are not enforced by svl audit. They are observations from working systems: "this shape of project usually benefits from this kind of memory" / "this kind of orchestration tends to need a durable runtime".


Use it in CI (GitHub Action)

SvL ships a reusable composite action. Gate your agent specs on every pull request — the same way you'd gate on lint or type-checks:

# .github/workflows/svl.yml
name: SvL Audit
on: [pull_request]
jobs:
  audit:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: guillaume-hestia-projekt/svl@main
        with:
          paths: |
            specs/**/*.agentic.yaml
          pack: owasp-agentic-top10   # optional — OWASP Agentic Top 10 advisories
          strict: false               # set true to block on warnings too
Input Default Effect
paths (required) Glob(s) of spec files, space/newline-separated. ** recursion supported.
strict false Treat warnings and observations as blocking, not just errors.
pack "" Opt-in advisory pack. Supported: owasp-agentic-top10.
ref main Git ref of svl to install (svl is not yet on PyPI).
install git git installs svl at ref; skip uses a svl you installed yourself.
python-version 3.12 Python used to run svl.

The action writes a findings table to the GitHub step summary and exits non-zero when the gate fails. A glob that matches zero files fails loudly rather than passing silently. This repo dogfoods the action on its own example specs — see .github/workflows/svl-self-audit.yml.


Patterns frequently observed

Earlier versions of SvL (v1.x) treated several patterns as canonical doctrine. They are now demoted to patterns observed, surfaced by svl autoplan when relevant, but no longer required to pass svl audit:

  • The 10 system functions — memory kernel, runtime orchestrator, surface, policy engine, audit trail, etc. Useful as a checklist for large systems; not invariants.
  • The 3 system agents — scope / system / sub-agent taxonomy. Useful as a vocabulary; not a constraint.
  • Living projection plane — temporal contract between memory, runtime, and human gestures. Useful in real-time systems; folded into "projection contract" invariant.
  • Graph islands / memory blueprints / framework profiles — patterns for medium-to-large systems. Surface via svl autoplan when the intent matches.

If you read older SvL material and a term puzzles you, look at doctrine/legacy/ — every v1 doctrine document is preserved verbatim there.

The current minimal doctrine is in doctrine/CORE.md. It is two pages.


Recherche & journal

Bancs d'essai sur la mémoire atomique gouvernée — corpus clients anonymisés, seules les métriques agrégées et la mécanique sont publiées. Chaque dossier a un paper.md (technique) et un index.html (essai).

Construire un second cerveau — le journal build-in-public, en cinq chapitres : de Taskmind au noyau de mémoire gouvernée qui tourne en production. Version accessible : site/second-cerveau/.


Status

  • Version: 2.0.0 (post-compression). The pre-compression repo is tagged v1-archive-final on the same git history.
  • Tests: 1070 passing, 18 skipped. CI runs lint + tests on Python 3.11 and 3.12.
  • License: MIT.
  • PyPI: svl-cli (v1.x). v2.0.0 has not yet been published — pin to git for now.

Project name

SvLSovereignty by Deliverable. Sovereignty is owning the deliverable that proves what you decided. SvL audits whether your spec actually says who owns what, and whether the audit can verify it.

There is no nicer way to say it. That's the whole framework.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

svl_cli-2.0.0.tar.gz (202.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

svl_cli-2.0.0-py3-none-any.whl (234.6 kB view details)

Uploaded Python 3

File details

Details for the file svl_cli-2.0.0.tar.gz.

File metadata

  • Download URL: svl_cli-2.0.0.tar.gz
  • Upload date:
  • Size: 202.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for svl_cli-2.0.0.tar.gz
Algorithm Hash digest
SHA256 2fa5188f51d8a592a2eec09f32ba98cddc5baa747314be6d2b1d6bb694dfcfbb
MD5 b9f418cb0d21026cef24dffe1d5c2d43
BLAKE2b-256 6f2d42225a65c73dfe76b79b5e1535120d03719379b04b1690570a538dc158d7

See more details on using hashes here.

File details

Details for the file svl_cli-2.0.0-py3-none-any.whl.

File metadata

  • Download URL: svl_cli-2.0.0-py3-none-any.whl
  • Upload date:
  • Size: 234.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for svl_cli-2.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6e074a48f215577f9a3031788f7e3a76ce2050dda100f7586b013ea0124e9142
MD5 ecccc7cf48da4134e10236630571c70e
BLAKE2b-256 11b881dbb91a553fdbefb04fc0d4c1359cdfb0f3aee65ec4806d3fb2ef31c5e2

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page