Python client for a2al: spawn a2ald and call its REST API (health, agents, resolve, fetch, tunnel, …)
Project description
a2al (Python)
Python client for A2AL — decentralized agent networking. Spawns a local a2ald daemon as a sidecar and exposes a typed REST helper covering the full API surface: identity, publish, discover, resolve, fetch, and multiplexed persistent tunnels.
Full API: doc/api-reference.md
Installation
pip install a2al
Pre-built a2ald binaries are bundled inside platform wheels:
| Platform | Architecture |
|---|---|
| Linux | x86_64, arm64 |
| macOS | x86_64, arm64 |
| Windows | x86_64 |
On unsupported platforms, install a2ald manually and set A2ALD_PATH to the executable path.
Quick Start
from a2al import Daemon, Client
with Daemon() as d:
c = Client(d.api_base, token=d.api_token)
# 1 — Check daemon health
print(c.health())
# 2 — Send an HTTP request to a remote agent (encrypted QUIC, no local port needed)
result = c.fetch(
remote_aid,
method="GET",
path="/.well-known/agent.json",
)
# result = {"status": 200, "headers": {...}, "body": "<base64>", "truncated": False}
# 3 — Open a persistent tunnel (multiple concurrent TCP connections)
tunnel = c.tunnel_open(remote_aid)
local_addr = tunnel["listen"] # e.g. "127.0.0.1:58320"
tunnel_id = tunnel["id"] # e.g. "tun_abc123"
# ... connect your application to local_addr ...
c.tunnel_close(tunnel_id)
Client API
| Method | REST endpoint | Description |
|---|---|---|
health() |
GET /health |
Daemon liveness check |
resolve(aid) |
POST /resolve/{aid} |
Look up a remote agent's endpoints |
connect(aid, *, local_aid) |
POST /connect/{aid} |
One-shot tunnel — single TCP session, closes automatically |
fetch(aid, *, method, path, headers, body_base64, local_aid) |
POST /fetch/{aid} |
HTTP request over QUIC; returns {status, headers, body(base64), truncated} |
tunnel_open(aid, *, local_aid, idle_timeout_sec) |
POST /tunnel/{aid} |
Persistent tunnel — accepts many concurrent connections; returns {id, listen} |
tunnel_close(id) |
DELETE /tunnel/{id} |
Close a persistent tunnel |
tunnel_list() |
GET /tunnel |
List active persistent tunnels |
tunnel_status(id) |
GET /tunnel/{id} |
Status of one tunnel |
agents_list() |
GET /agents |
List locally registered agents |
identity_generate() |
POST /identity/generate |
Create a new Ed25519 AID |
agent_register(payload) |
POST /agents |
Register a generated identity |
agent_publish(aid) |
POST /agents/{aid}/publish |
Announce agent to the Tangled Network |
Daemon Context Manager
Daemon() starts a2ald as a subprocess and stops it when the with block exits.
from a2al import Daemon, Client
# Default: auto-locate a2ald binary, random API port, temp data dir
with Daemon() as d:
c = Client(d.api_base, token=d.api_token)
...
# Custom binary path and extra daemon flags
with Daemon(
a2ald_exe="/usr/local/bin/a2ald",
extra_args=["--data-dir", "/var/lib/a2al", "--fallback-host", "1.2.3.4"],
) as d:
c = Client(d.api_base, token=d.api_token)
...
Environment Variables
| Variable | Description |
|---|---|
A2ALD_PATH |
Override path to the a2ald executable |
A2AL_API_TOKEN |
Bearer token when the daemon enforces authentication |
Requirements
- Python 3.10+
- No third-party dependencies (standard library only)
Links
- a2al.org — project site
- API reference
- tanglednet.org / tngld.net — Tangled Network
- GitHub
License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file a2al-0.2.0.tar.gz.
File metadata
- Download URL: a2al-0.2.0.tar.gz
- Upload date:
- Size: 5.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
218137e50e9e611dafecd6fef6a924a53085f3f764d6ba0a4560c478f3b0d4db
|
|
| MD5 |
80f4082a4eb726c4c377137ceff47ea9
|
|
| BLAKE2b-256 |
c9ab04c3e0b2cd1799f80408a9bbdf2045851c3f8ccc8399c5588f9c1accbde1
|
File details
Details for the file a2al-0.2.0-py3-none-win_amd64.whl.
File metadata
- Download URL: a2al-0.2.0-py3-none-win_amd64.whl
- Upload date:
- Size: 11.8 MB
- Tags: Python 3, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4c8caf7354cd61891dc3e707e6e38a510beb614cbbf2dec86a33fc9c2d3147f2
|
|
| MD5 |
665b379114964c65c829ef7e61024c13
|
|
| BLAKE2b-256 |
53e9581d602bb7b2468a1df2dea8c92191af4e03e3bad24806346fd89ea7ca22
|
File details
Details for the file a2al-0.2.0-py3-none-manylinux2014_x86_64.whl.
File metadata
- Download URL: a2al-0.2.0-py3-none-manylinux2014_x86_64.whl
- Upload date:
- Size: 5.9 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0fd2531b29e11288ccb2af9ede7e7cb4e8df23568bd44e506078bcb3bb6160f2
|
|
| MD5 |
19507c8f433881695da65fb90ee77bae
|
|
| BLAKE2b-256 |
44cbf34dd82004b31c9eb021b7b5855d684e6150a7691884ea6a9f7e36bb98f3
|
File details
Details for the file a2al-0.2.0-py3-none-manylinux2014_aarch64.whl.
File metadata
- Download URL: a2al-0.2.0-py3-none-manylinux2014_aarch64.whl
- Upload date:
- Size: 5.4 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f36920c521aa3e852182864cc1632df36e4b97c8148a60fea9ac52ae3daefe5f
|
|
| MD5 |
84aacd891cf963ef09d5f5d391a1363b
|
|
| BLAKE2b-256 |
9cc1840fa7d8e9ed5c799e06608201cc6035f89b8d10643273ffd5cbc4267389
|
File details
Details for the file a2al-0.2.0-py3-none-macosx_11_0_x86_64.whl.
File metadata
- Download URL: a2al-0.2.0-py3-none-macosx_11_0_x86_64.whl
- Upload date:
- Size: 5.9 MB
- Tags: Python 3, macOS 11.0+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bfe9563420153a19d13210fa1be50990d54cee789aff95f6c191dfa259fd1014
|
|
| MD5 |
6e6b41357b7bf508a5e1e3d9d59c6c80
|
|
| BLAKE2b-256 |
4561de2da52c067d97b5a5a5f5efb33d1d5fde378df72935973c15479af3aea6
|
File details
Details for the file a2al-0.2.0-py3-none-macosx_11_0_arm64.whl.
File metadata
- Download URL: a2al-0.2.0-py3-none-macosx_11_0_arm64.whl
- Upload date:
- Size: 5.9 MB
- Tags: Python 3, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cbe5c85fd2b7c3b6a883ec2ebd2fd8c03fae80be43ef9f7b5ee0c3b91a6c6029
|
|
| MD5 |
45d4e20cab9e28784f1dd48efc98568c
|
|
| BLAKE2b-256 |
b64b94f38c4fa0ea07c050e540b47a790554254a7ae3f551f023c6c8947e0bcc
|