Skip to main content

a2a-cli

license python release tests artifacts

a2a-cli poster

File-based agent bus: mail, journal, thoughts, task board, locks, alerts, handoffs, presence (status/DND), synchronous RPC. Records are Markdown with YAML front matter on a shared POSIX filesystem; every command emits one JSON envelope. No daemon, no broker, no network.

RU Русский · English

Install

Our PyPI name is lnfnt-a2a — the unrelated PyPI package a2a-cli is a Google A2A-protocol client; do not confuse.

pip install lnfnt-a2a
a2a --help

From the repo: pip install git+https://github.com/lnfnt/a2a-cli.git.

Dev checkout: git clone https://github.com/lnfnt/a2a-cli.git && cd a2a-cli && python -m venv .venv && .venv/bin/pip install -e . Python >= 3.10, PyYAML.

Quickstart: two profiles on one bus

export A2A_HOME=/tmp/a2a-demo
a2a onboard --profile alice
a2a onboard --profile bob

a2a --profile alice mail send --to bob --subject "ship it" --body "task 42 is ready"
a2a --profile bob mail check            # read-only unread peek (cron-safe)
a2a --profile bob mail list --inbox --unread
a2a --profile bob mail answer <id> "done, artifacts attached"

a2a --profile alice log "implemented bus schema" --artifacts ./SPEC.md
a2a --profile alice think "hypothesis: file bus beats a queue for 10 agents"

a2a --profile alice task new "release v1" --to bob
a2a --profile bob task claim <id>
a2a --profile bob task submit <id> --evidence ./build.log
a2a --profile alice task accept <id>

a2a --profile bob status set --state idle
a2a --profile alice fleet
a2a --profile alice ask --to bob --timeout 30 "where is v1?"

a2a doctor        # orphans, ACL drift, secret spikes, tamper baseline, version parity
a2a verify        # schema validation of every record

One JSON envelope per command: {"ok":…, "status":…, "reason":…, "data":…, "metadata":…}; rejections carry hint + example. Exit codes: 0 ok, 1 error, 2 degraded, 3 invalid record, 4 usage, 124 timeout.

Storage model

One directory tree, append-only records. Default store ~/.a2a, override A2A_HOME. Profile resolution: --profile > A2A_PROFILE > HERMES_PROFILE > HERMES_HOME dir name > ~/.hermes/active_profile > default. ACL per record: L1 private, L2 team, L3 public; fail-closed — invalid access is rejected or downgraded to the type default.

Integrity

  • Scrubber: secret shapes (sk-…, Bearer …, PEM, api_key=…, hex-32+) are redacted or hard-rejected with secret_detected; quarantine + a2a secrets report + doctor warnings.
  • Tamper detection: a2a snapshot --save records sha256; a2a doctor diffs (tamper_suspects).
  • Atomic writes (mkstemp + fsync + rename); interrupted bundles forward-recover via doctor.
  • Scope locks, DND policy, idempotency dedup, audit log (actions only, never content).
  • SQLite FTS5 search index — derived, rebuildable (a2a index --rebuild).

Limits

  • Single-UID trust model: anyone with write access to the directory can post as their own profile; the bus detects tampering, not identity fraud.
  • For more than ~dozens of agents or multiple machines, use a real message broker.
  • ask is bounded synchronous coordination (timeout + answer file), not chat.

Docs & tests

SPEC.md, SCHEMA.md, LIMITATIONS.md, NOTES.md, a2a cookbook. python -m pytest -q — 405 tests against temp A2A_HOME dirs. Apache-2.0 (LICENSE). Verify artifacts: sha256sum -c SHA256SUMS, gpg --verify *.asc.

Author and copyright holder: lnfnt.

Metadata

Release files for lnfnt-a2a 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for lnfnt-a2a 0.1.1
File Size Uploaded Provenance
lnfnt_a2a-0.1.1.tar.gz 614.6 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for lnfnt-a2a 0.1.1
File Interpreter ABI Platform
lnfnt_a2a-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 730.5 kB

Release files / lnfnt_a2a-0.1.1.tar.gz

Download URL lnfnt_a2a-0.1.1.tar.gz
Size 614.6 kB
Tags Source
SHA-256 checksum
How to use checksums
1bcaa8d8ae1e9e3c1c958701c76aa07ee7dde30cbf8f09162ec1c184fa536e72
BLAKE2b-256 checksum
How to use checksums
c98d5bdf6e1d14fcf136bffec4cbd4def6597c7ccc9ef24275561a268979ff20
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.16

Release files / lnfnt_a2a-0.1.1-py3-none-any.whl

Download URL lnfnt_a2a-0.1.1-py3-none-any.whl
Size 115.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
82ff6aa3262c06e2f2642b758e648c070c5c28cdb1603a21fdd9c8bed9e1012c
BLAKE2b-256 checksum
How to use checksums
68780419c24779b8c399ba754b573054f5ba7ba33c6be1ec49fd46f9c0c01c56
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.16

Security for lnfnt-a2a 0.1.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page