JACS - JSON AI Communication Standard: Cryptographic signing and verification for AI agents.
Project description
JACS Python Library
Cryptographic identity, signing, and verification for AI agents from Python.
pip install jacs
Prebuilt native bindings are distributed via maturin. A normal install does not require compiling Rust.
Full documentation | Quick Start
Quick start
import jacs.simple as jacs
info = jacs.quickstart(name="my-agent", domain="my-agent.example.com")
signed = jacs.sign_message({"action": "approve", "amount": 100})
result = jacs.verify(signed.raw)
print(f"Valid: {result.valid}, Signer: {result.signer_id}")
quickstart() creates a persistent agent with keys on disk. If jacs.config.json exists, it loads it; otherwise it creates a new agent.
Core operations
| Operation | Description |
|---|---|
quickstart(name, domain) |
Create or load a persistent agent |
load() |
Load an existing agent from config |
sign_message() |
Sign JSON-serializable data |
sign_file() |
Sign a file with optional embedding |
verify() |
Verify a signed document |
verify_standalone() |
Verify without loading an agent |
export_agent() |
Export agent JSON for sharing |
audit() |
Run a security audit |
Text and image provenance
Python exposes the same inline text and image signing surface as the CLI:
import jacs.simple as jacs
from jacs import MissingSignatureError
jacs.load("./jacs.config.json")
# Markdown/text: append and verify an inline signature block.
jacs.sign_text("README.md")
text = jacs.verify_text("README.md")
print(text.status) # 'signed' | 'missing_signature' | 'malformed'
try:
jacs.verify_text("README.md", strict=True)
except MissingSignatureError:
print("not signed")
jacs.verify_text("README.md", key_dir="./trusted-keys/")
# Images: embed and verify a signature in PNG, JPEG, or WebP metadata.
jacs.sign_image("photo.png", out="signed.png")
image = jacs.verify_image("signed.png")
print(image.status) # 'valid'
payload = jacs.extract_media_signature("signed.png")
The same methods are available on the instance-based JacsClient for multi-agent processes. These signatures prove that an agent signed specific canonical bytes at its claimed time; they do not prove first creation or legal ownership.
Verify without an agent
result = jacs.verify_standalone(signed_json, key_directory="./keys")
Cross-language interop is tested on every commit. Documents signed in Rust or Node.js verify in Python, and Python-signed documents verify in the other bindings.
Framework adapters
pip install jacs[langchain] # LangChain / LangGraph
pip install jacs[fastapi] # FastAPI / Starlette
pip install jacs[crewai] # CrewAI
pip install jacs[anthropic] # Anthropic / Claude SDK
pip install jacs[a2a] # A2A protocol
pip install jacs[all] # Everything
Instance-based API
For multiple agents in one process:
from jacs.client import JacsClient
client = JacsClient.quickstart(name="my-agent", domain="example.com")
signed = client.sign_message({"action": "approve"})
See DEVELOPMENT.md for the full API reference, advanced usage, framework adapter examples, and testing utilities.
Links
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file jacs-0.10.1.tar.gz.
File metadata
- Download URL: jacs-0.10.1.tar.gz
- Upload date:
- Size: 1.2 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a67dac691afdb1bf9c81fcffcd5451969d369f4245031bb7a2e70c6a3972ec65
|
|
| MD5 |
7ee9da09914a6fa5a6fca07b5ad51964
|
|
| BLAKE2b-256 |
334a0e6d332105d699215e16fe98e051f41c41c6eddeee600119e23e71196670
|
Provenance
The following attestation bundles were made for jacs-0.10.1.tar.gz:
Publisher:
release-pypi.yml on HumanAssisted/JACS
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
jacs-0.10.1.tar.gz -
Subject digest:
a67dac691afdb1bf9c81fcffcd5451969d369f4245031bb7a2e70c6a3972ec65 - Sigstore transparency entry: 1431796487
- Sigstore integration time:
-
Permalink:
HumanAssisted/JACS@0b481eb0a39d55cce2c083d26f41738211563e47 -
Branch / Tag:
refs/tags/pypi/v0.10.1 - Owner: https://github.com/HumanAssisted
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-pypi.yml@0b481eb0a39d55cce2c083d26f41738211563e47 -
Trigger Event:
push
-
Statement type:
File details
Details for the file jacs-0.10.1-cp310-abi3-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: jacs-0.10.1-cp310-abi3-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 8.4 MB
- Tags: CPython 3.10+, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
19690a75eaccc1389185d881a64d58a5a02722e06e85bc6802bf90ddf3527391
|
|
| MD5 |
808d1b6e90ca00ad40efa8a1cc31f760
|
|
| BLAKE2b-256 |
ac29a596eadc9c21f0e4adf9593f1df4fc028767de2f33c669bfefc3910d93a2
|
Provenance
The following attestation bundles were made for jacs-0.10.1-cp310-abi3-musllinux_1_2_x86_64.whl:
Publisher:
release-pypi.yml on HumanAssisted/JACS
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
jacs-0.10.1-cp310-abi3-musllinux_1_2_x86_64.whl -
Subject digest:
19690a75eaccc1389185d881a64d58a5a02722e06e85bc6802bf90ddf3527391 - Sigstore transparency entry: 1431797722
- Sigstore integration time:
-
Permalink:
HumanAssisted/JACS@0b481eb0a39d55cce2c083d26f41738211563e47 -
Branch / Tag:
refs/tags/pypi/v0.10.1 - Owner: https://github.com/HumanAssisted
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-pypi.yml@0b481eb0a39d55cce2c083d26f41738211563e47 -
Trigger Event:
push
-
Statement type:
File details
Details for the file jacs-0.10.1-cp310-abi3-manylinux_2_38_x86_64.whl.
File metadata
- Download URL: jacs-0.10.1-cp310-abi3-manylinux_2_38_x86_64.whl
- Upload date:
- Size: 9.5 MB
- Tags: CPython 3.10+, manylinux: glibc 2.38+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e46e8428f6bae32e5ade89749f0276d84afd3a6c8b0181c6a3afab06f68a582b
|
|
| MD5 |
8d607e10163225661905fc7c3c548393
|
|
| BLAKE2b-256 |
5dc487c2f7092f8a312b4d58129aeb733ae172ffae48ef7f87812274dc51d889
|
Provenance
The following attestation bundles were made for jacs-0.10.1-cp310-abi3-manylinux_2_38_x86_64.whl:
Publisher:
release-pypi.yml on HumanAssisted/JACS
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
jacs-0.10.1-cp310-abi3-manylinux_2_38_x86_64.whl -
Subject digest:
e46e8428f6bae32e5ade89749f0276d84afd3a6c8b0181c6a3afab06f68a582b - Sigstore transparency entry: 1431797242
- Sigstore integration time:
-
Permalink:
HumanAssisted/JACS@0b481eb0a39d55cce2c083d26f41738211563e47 -
Branch / Tag:
refs/tags/pypi/v0.10.1 - Owner: https://github.com/HumanAssisted
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-pypi.yml@0b481eb0a39d55cce2c083d26f41738211563e47 -
Trigger Event:
push
-
Statement type:
File details
Details for the file jacs-0.10.1-cp310-abi3-manylinux_2_38_aarch64.whl.
File metadata
- Download URL: jacs-0.10.1-cp310-abi3-manylinux_2_38_aarch64.whl
- Upload date:
- Size: 9.4 MB
- Tags: CPython 3.10+, manylinux: glibc 2.38+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
98d533cc102e193f064b1009417aa88cebe073f2fa5e596de301e75cd01c800c
|
|
| MD5 |
a13d2bc97304edce4e5088bc8da62b3e
|
|
| BLAKE2b-256 |
22992f453891b96529835ae94e684a68be5b58621d83fec8d28420af56ed083c
|
Provenance
The following attestation bundles were made for jacs-0.10.1-cp310-abi3-manylinux_2_38_aarch64.whl:
Publisher:
release-pypi.yml on HumanAssisted/JACS
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
jacs-0.10.1-cp310-abi3-manylinux_2_38_aarch64.whl -
Subject digest:
98d533cc102e193f064b1009417aa88cebe073f2fa5e596de301e75cd01c800c - Sigstore transparency entry: 1431798194
- Sigstore integration time:
-
Permalink:
HumanAssisted/JACS@0b481eb0a39d55cce2c083d26f41738211563e47 -
Branch / Tag:
refs/tags/pypi/v0.10.1 - Owner: https://github.com/HumanAssisted
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-pypi.yml@0b481eb0a39d55cce2c083d26f41738211563e47 -
Trigger Event:
push
-
Statement type:
File details
Details for the file jacs-0.10.1-cp310-abi3-macosx_11_0_arm64.whl.
File metadata
- Download URL: jacs-0.10.1-cp310-abi3-macosx_11_0_arm64.whl
- Upload date:
- Size: 8.7 MB
- Tags: CPython 3.10+, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
49a9b8d52abf20a307064cb5c5d66288cdddbd7d51fcca0f03a07afb7c89ca7b
|
|
| MD5 |
e512e808f622dc0c5cc295a0d2975046
|
|
| BLAKE2b-256 |
652b29e60b21ce82687a479ad098ec7ac5a53b54eb9b5c81e680fa4a78ab5967
|
Provenance
The following attestation bundles were made for jacs-0.10.1-cp310-abi3-macosx_11_0_arm64.whl:
Publisher:
release-pypi.yml on HumanAssisted/JACS
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
jacs-0.10.1-cp310-abi3-macosx_11_0_arm64.whl -
Subject digest:
49a9b8d52abf20a307064cb5c5d66288cdddbd7d51fcca0f03a07afb7c89ca7b - Sigstore transparency entry: 1431796588
- Sigstore integration time:
-
Permalink:
HumanAssisted/JACS@0b481eb0a39d55cce2c083d26f41738211563e47 -
Branch / Tag:
refs/tags/pypi/v0.10.1 - Owner: https://github.com/HumanAssisted
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-pypi.yml@0b481eb0a39d55cce2c083d26f41738211563e47 -
Trigger Event:
push
-
Statement type:
File details
Details for the file jacs-0.10.1-cp310-abi3-macosx_10_12_x86_64.whl.
File metadata
- Download URL: jacs-0.10.1-cp310-abi3-macosx_10_12_x86_64.whl
- Upload date:
- Size: 8.9 MB
- Tags: CPython 3.10+, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0f8a501f93d58ec765fe8e9febd8bae60b24fb5458985709d3094d31cd09cc0b
|
|
| MD5 |
9de869ed0d0eb304978e716d857426b7
|
|
| BLAKE2b-256 |
f744b1b96e525dfbb24c5bf406429ccdbe35c0f3f47d07a4d0bb84400913e32b
|
Provenance
The following attestation bundles were made for jacs-0.10.1-cp310-abi3-macosx_10_12_x86_64.whl:
Publisher:
release-pypi.yml on HumanAssisted/JACS
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
jacs-0.10.1-cp310-abi3-macosx_10_12_x86_64.whl -
Subject digest:
0f8a501f93d58ec765fe8e9febd8bae60b24fb5458985709d3094d31cd09cc0b - Sigstore transparency entry: 1431798145
- Sigstore integration time:
-
Permalink:
HumanAssisted/JACS@0b481eb0a39d55cce2c083d26f41738211563e47 -
Branch / Tag:
refs/tags/pypi/v0.10.1 - Owner: https://github.com/HumanAssisted
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-pypi.yml@0b481eb0a39d55cce2c083d26f41738211563e47 -
Trigger Event:
push
-
Statement type: