Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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:

  1. The scanner signs its result with sign_artifact(result, "result") and sends the full envelope.
  2. 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.
  3. 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=true remains the reviewer's signed assertion.
  4. 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.