Skip to main content

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 via maturin. No Rust compilation during install.

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 a persistent agent with keys — zero config
load() Load an existing agent from config
sign_message() Sign any JSON-serializable data
sign_file() Sign a file with optional embedding
verify() Verify any signed document
verify_standalone() Verify without loading an agent
export_agent() Export agent JSON for sharing
audit() Run a security audit

What's new in 0.10.0

Why this matters: shared markdown that multiple Python agents review and counter-sign, plus signed images for AI-era provenance, are now first-class — the signature is embedded in the artifact, no sidecar JSON required.

import jacs.simple as jacs
from jacs import MissingSignatureError

jacs.load("./jacs.config.json")

# Text — permissive verify (default)
jacs.sign_text("README.md")
result = jacs.verify_text("README.md")
print(result.status)  # 'signed' | 'missing_signature' | 'malformed'

# Hard-fail if the file isn't signed
try:
    jacs.verify_text("README.md", strict=True)
except MissingSignatureError as e:
    print("not signed:", e)

# Override the trust store with a directory of <signer_id>.public.pem files
jacs.verify_text("README.md", key_dir="./trusted-keys/")

# Images
jacs.sign_image("photo.png", out="signed.png")
v = jacs.verify_image("signed.png")
print(v.status)  # 'valid'
v_strict = jacs.verify_image("signed.png", strict=True)  # raises if not signed

# Extract the embedded provenance payload (decoded JSON by default)
payload = jacs.extract_media_signature("signed.png")

The same five methods are available on the instance-based JacsClient for multi-agent processes.

A JACS inline signature proves "agent X signed these canonical bytes at their claimed time." It does not prove first creation or legal ownership.

Verify without an agent

result = jacs.verify_standalone(signed_json, key_directory="./keys")

Cross-language interop tested on every commit — documents signed in Rust or Node.js verify identically in Python.

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 (agreements, A2A, attestation, headless loading), framework adapter examples, and testing utilities.

Links

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

jacs-0.10.0.tar.gz (1.2 MB view details)

Uploaded Source

Built Distributions

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

jacs-0.10.0-cp310-abi3-musllinux_1_2_x86_64.whl (8.4 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ x86-64

jacs-0.10.0-cp310-abi3-manylinux_2_38_x86_64.whl (9.5 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.38+ x86-64

jacs-0.10.0-cp310-abi3-manylinux_2_38_aarch64.whl (9.4 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.38+ ARM64

jacs-0.10.0-cp310-abi3-macosx_11_0_arm64.whl (8.7 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

jacs-0.10.0-cp310-abi3-macosx_10_12_x86_64.whl (8.9 MB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

Details for the file jacs-0.10.0.tar.gz.

File metadata

  • Download URL: jacs-0.10.0.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

Hashes for jacs-0.10.0.tar.gz
Algorithm Hash digest
SHA256 289e10df55ea45fa21b35f95d27e87299347886cfa89a19ebf7d25e68adb5375
MD5 1375363776183a03d369af186fc91b34
BLAKE2b-256 bbafcd8af4ed178b1db990106a9613df049c2cee8e351e2f8361ee1fb7044227

See more details on using hashes here.

Provenance

The following attestation bundles were made for jacs-0.10.0.tar.gz:

Publisher: release-pypi.yml on HumanAssisted/JACS

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file jacs-0.10.0-cp310-abi3-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for jacs-0.10.0-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 b9adfb4d02d4b76a6739ac2fd4de20951698dfc272baca9b06b1d180791b762e
MD5 e7c904c99c899ec8099b29f234e9904b
BLAKE2b-256 28ddb1db8eea6bfdb116526f009de6186328b77756ae64a32b7ef02d87a60995

See more details on using hashes here.

Provenance

The following attestation bundles were made for jacs-0.10.0-cp310-abi3-musllinux_1_2_x86_64.whl:

Publisher: release-pypi.yml on HumanAssisted/JACS

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file jacs-0.10.0-cp310-abi3-manylinux_2_38_x86_64.whl.

File metadata

File hashes

Hashes for jacs-0.10.0-cp310-abi3-manylinux_2_38_x86_64.whl
Algorithm Hash digest
SHA256 4930581152d20920b2baa2f5e0387410d399c94749a07f57c2cea0f6f8e6d470
MD5 ba051b445a8b6f418d79e3a09eaa6b00
BLAKE2b-256 e55646e09747def2ca41d73f61c4c9cff5d9e892af1c2f03e0fcae4c81b84e4a

See more details on using hashes here.

Provenance

The following attestation bundles were made for jacs-0.10.0-cp310-abi3-manylinux_2_38_x86_64.whl:

Publisher: release-pypi.yml on HumanAssisted/JACS

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file jacs-0.10.0-cp310-abi3-manylinux_2_38_aarch64.whl.

File metadata

File hashes

Hashes for jacs-0.10.0-cp310-abi3-manylinux_2_38_aarch64.whl
Algorithm Hash digest
SHA256 192580ae0acf7d479c5c52e3f5570606cd64632b2958b8e0119a24cac148ad4a
MD5 a0ad2a0d6ed43c3efad5bafcbcf0b804
BLAKE2b-256 b907b9155c8f3d9deef7bb1f00accd916a8e6dd4caafc93f9d91a2131e3ac1b7

See more details on using hashes here.

Provenance

The following attestation bundles were made for jacs-0.10.0-cp310-abi3-manylinux_2_38_aarch64.whl:

Publisher: release-pypi.yml on HumanAssisted/JACS

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file jacs-0.10.0-cp310-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for jacs-0.10.0-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2d6fe80b4048dba5771bddd9ffc6206361551bd81712e5c63af7c99ed02089a4
MD5 cf4ebff99c62c480ffaa5bd347e42274
BLAKE2b-256 c35d2f1ffbc5ae9fc486a7942d1fb2a467e47781ecabeac7cc0aa36893c63815

See more details on using hashes here.

Provenance

The following attestation bundles were made for jacs-0.10.0-cp310-abi3-macosx_11_0_arm64.whl:

Publisher: release-pypi.yml on HumanAssisted/JACS

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file jacs-0.10.0-cp310-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for jacs-0.10.0-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 1c3593475136540f3ff000cba9a8959bfbb5c208bda1283ddaed07a67cd50ad5
MD5 2f1cccd768781eba5bea6051623fda00
BLAKE2b-256 08451e12d0b4e195b9b7e9bc0182cab92eb55e04382974ad7ed83c32c7d3941e

See more details on using hashes here.

Provenance

The following attestation bundles were made for jacs-0.10.0-cp310-abi3-macosx_10_12_x86_64.whl:

Publisher: release-pypi.yml on HumanAssisted/JACS

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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