Native library reference. Extended CLI examples use
jacs-compat. This source reference can include unreleased changes; see the package guide for installation and MCP profiles for available tools.
A2A + Attestation: Using Both Together
A2A artifact signatures cover an exchanged payload and its linked parent artifacts. Attestations record claims, evidence and derivation. Neither mechanism proves that a claim is true or that a human reviewed it.
Create distinct identities
Different names alone do not create different agents: quickstart loads an existing config. Use distinct paths:
from jacs.client import JacsClient
scanner = JacsClient.quickstart(
name="scanner", domain="scanner.example.com", config_path="scanner/jacs.config.json"
)
reviewer = JacsClient.quickstart(
name="reviewer", domain="reviewer.example.com", config_path="reviewer/jacs.config.json"
)
The Node equivalent is JacsClient.quickstart({name, domain, configPath}) with a separate configPath for each agent. Preserve each identity's encrypted keys and host password source.
Configure verification before exchanging artifacts
Independently authenticate the sender's agent document and public key, then record them with trust-store enrollment. With local in JACS_KEY_RESOLUTION (the default), the native A2A artifact verifier uses that enrollment for v2 artifacts signed by the exact enrolled agent_id:version, and refuses a key that conflicts with it. Other signers, and other versions that keep the enrolled key, need a cached local key or opt-in registry or DNS/HTTPS key discovery. Neither enrollment nor discovery authorizes the sender. Test rejection of a wrong key before enabling the exchange.
The following is an application workflow, not a complete cross-agent program:
- The scanner signs its result with
sign_artifact(result, "result")and sends the full envelope. - The reviewer resolves the authenticated scanner key, verifies the artifact and required parent signatures, then applies admission policy. Fetching a key beside a payload is not independent authentication.
- After performing its own checks, the reviewer creates an attestation about the exact artifact bytes, with explicit digest conventions and supporting evidence. A claim such as
reviewed=trueremains the reviewer's signed assertion. - The reviewer may sign an A2A artifact referencing that attestation. The receiver verifies the exchanged envelope and separately evaluates the attestation's signature, evidence and claim policy.
A create_chain_of_custody summary collects metadata; it does not verify signatures or establish ordering. Attestation full verification likewise has specific evidence/resolver limits; it is not automatic cross-agent trust evaluation.
Continue with artifact exchange, the attestation tutorial, and the cross-language A2A tests.