a2a-cli
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.
Русский · English
Install
The PyPI project named
a2a-cliis unrelated. Install from this repository only.
pip install git+https://github.com/lnfnt/a2a-cli.git
a2a --help
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 withsecret_detected; quarantine +a2a secrets report+ doctor warnings. - Tamper detection:
a2a snapshot --saverecords sha256;a2a doctordiffs (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.
askis 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.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| lnfnt_a2a-0.1.0.tar.gz | 614.5 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| lnfnt_a2a-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 730.3 kB
Release files / lnfnt_a2a-0.1.0.tar.gz
| Download URL | lnfnt_a2a-0.1.0.tar.gz |
|---|---|
| Size | 614.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
51ecf141fe3104a436028356901848676c731547d1ea98bd073ac48b0db47f67
|
|
BLAKE2b-256 checksum How to use checksums |
2a3e7e1d89d1dc03ca66048260852ed1f1c085e11f65647992b302ff8e5be722
|
| 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.0-py3-none-any.whl
| Download URL | lnfnt_a2a-0.1.0-py3-none-any.whl |
|---|---|
| Size | 115.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
217c7bada6573609f019d09e38d4c1e987750c84b662386b56e8b17522650ff0
|
|
BLAKE2b-256 checksum How to use checksums |
60f2bfe24cf151196832f1989bc74950e3f73ef43787bed621b0b29e79ec5775
|
| 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.0
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.