jacs-cli 0.10.0

JACS CLI: command-line interface for JSON AI Communication Standard
Documentation

jacs-cli

CLI and MCP server for JACS — cryptographic identity, signing, and verification for AI agents.

cargo install jacs-cli

Or via Homebrew:

brew tap HumanAssisted/homebrew-jacs
brew install jacs

This installs the jacs binary with CLI and MCP server built in.

Quick start

export JACS_PRIVATE_KEY_PASSWORD='your-password'

jacs quickstart --name my-agent --domain example.com
jacs document create -f mydata.json
jacs verify signed-document.json

What's new in 0.10.0 — provenance commands

Why this matters: shared markdown reviewed by multiple agents and signed images for AI-era provenance now have first-class CLI support — the signature lives inside the artifact, no sidecar JSON required.

jacs sign-text / jacs verify-text (inline text signatures)

# Sign a markdown file — content preserved byte-for-byte, YAML-bodied JACS
# signature block appended at the end.
jacs sign-text README.md

# A second agent counter-signs (multi-signer is unordered)
jacs sign-text README.md  # (run as a different agent)

# Verify per-signer (permissive — missing-sig is exit 2, not an error)
jacs verify-text README.md
# - agent-abc123 (ed25519)   valid
# - agent-def456 (pq2025)    valid

# Strict mode — missing signature exits 1 instead of 2
jacs verify-text --strict README.md
# stderr: "no JACS signature found"

# Override trust store with a directory of <signer_id>.public.pem files
jacs verify-text README.md --key-dir ./trusted-keys/

Exit codes — permissive verify: 0 valid, 1 invalid signature, 2 missing signature. Strict verify collapses 2 into 1.

jacs sign-image / jacs verify-image / jacs extract-media-signature

# Embed signature in PNG iTXt / JPEG APP11 / WebP XMP
jacs sign-image photo.png --out signed.png

# Refuse to overwrite an existing signature (default is overwrite)
jacs sign-image photo.png --out signed.png --refuse-overwrite

# Verify (permissive)
jacs verify-image signed.png

# Strict verify — missing signature exits 1
jacs verify-image --strict signed.png

# Extract the embedded payload (decoded JSON by default)
jacs extract-media-signature signed.png

# Wire form (base64url)
jacs extract-media-signature signed.png --raw-payload

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

MCP server

jacs mcp

The MCP server uses stdio transport only — no HTTP endpoints. This is deliberate: the server holds the agent's private key, so it runs as a subprocess of your MCP client. No ports are opened.

Configure in your MCP client (Claude Desktop, Cursor, Claude Code, etc.):

{
  "mcpServers": {
    "jacs": {
      "command": "jacs",
      "args": ["mcp"]
    }
  }
}

For headless/server environments:

export JACS_CONFIG=/srv/my-project/jacs.config.json
export JACS_PASSWORD_FILE=/run/secrets/jacs-password
export JACS_KEYCHAIN_BACKEND=disabled
jacs mcp

Links

v0.10.0 | Apache 2.0 with Common Clause