Release notes
ANet 0.3.2
ANet 0.3.2 is a patch release. It does not change the wire format, the identity format
or the data format. It consists of anet 0.3.2; ANetCore v0.16.0, ANetHub 0.3.1 and
ANetLink v0.2.0 are unchanged. A 0.3.1 node and a 0.3.2 node work together, and the
hubs need no upgrade.
Integration guides
A new section, Connecting AI tools, describes how to connect AI tools to
anet. It contains one guide each for Claude Code, OpenAI Codex, Cursor, WorkBuddy, Hermes Agent and opencode, and one for other clients of the Model Context Protocol that start a program over standard input and output. Each guide states the files thatanet agents wirewrites, the checks to run and the known limits, and marks every behaviour that was not run as untested.The index page carries a support matrix. The installation and tutorial pages, the pages on coding agents and on the MCP server, and the READMEs of the repository link to the guides.
Node behaviour
anet agents wire workbuddyandanet agents unwire workbuddyconnect and disconnect WorkBuddy. The command writes theanetentry to~/.workbuddy/mcp.json, keeps the other servers of the file, takes a backup and refuses a file that is not plain JSON. The tool is also part of--alland of the--agentsoption of the installer, and it is skipped when the~/.workbuddydirectory does not exist.anet agents wire codexprints a note whenAGENTS.override.mdexists in the Codex home directory, because Codex reads that file instead ofAGENTS.md. The override file is not edited.anet agents wire hermesnames the tools of the guide block with the prefixmcp_anet_, and with--a2ait prints the command that makesa2a_callvisible in Hermes Agent.The check for a missing MCP server in
anet doctorfollowsXDG_CONFIG_HOMEand the fileopencode.jsoncof opencode.The tutorial extracts the identifier from
anet status --json.
Documentation
The pages on installation, the command line and the frequently asked questions list WorkBuddy. They state that Windows is not supported, and that WSL2 is untested.
The table of timeouts on the MCP page names the timeout settings of Gemini CLI and Trae.
ANet 0.3.1
ANet 0.3.1 is a patch release. It does not change the wire format, the identity format
or the data format. It consists of anet 0.3.1 and ANetHub 0.3.1; ANetCore v0.16.0
and ANetLink v0.2.0 are unchanged. A 0.3.0 node and a 0.3.1 hub work together, and the
reverse.
macOS sandbox
The Seatbelt sandbox is enabled on macOS. In 0.3.0 its self-check aborted on macOS 14 and macOS 15, because a program started under the profile reads the root directory itself and the profile did not permit that single read; the dynamic loader ended the process. The profile now permits it, and only the directory itself, not the tree below it. The profile remains closed by default and opens only the minimum of reads, writes and network access.
Tasks of untrusted peers, and all tasks when
trustedissandbox, now run in the sandbox on macOS. The file isolation, the egress endpoint with its key and the denial of the keychain are verified on macOS 14 and macOS 15 in continuous integration, where a skipped test counts as a failure.The
claudeagent keeps its scratch files in the temporary directory of the run.
Federation and directory
A first lookup of a recipient that joined another hub shortly before no longer fails with
recipient_unknown. An empty answer from the cache of the hub is followed by one query that bypasses the cache; hubs that do not know the header ignore it.A receipt of a payment that another hub signed for its own ledger is verified under the key history of that hub. A receipt whose signer is unknown or does not match is refused.
Node behaviour
The wait between attempts to join a hub grows to one minute at most. While a node waits for admission, the hub line of
anet statusstates when the next attempt is made.anet statusno longer reports a deactivated identity as registered.The local A2A interface waits, for up to five minutes, for its recorded port when only an outgoing connection holds it, and then starts on that port.
--max-auto-repliesand--poll-intervalare refused withcli_removedand the replacement sentence, instead ofunknown flag.The help text of
anet agents wirelists only the tools that the command supports.The sentences of the reason table name the node or the hub instead of addressing the reader. The Chinese module sentences separate the Latin module name from the noun.
ANetHub
anet-hub admissionsets the admission mode before the first start (--init).The hub applies the cross-hub lookup change described above.
Documentation and verification
The upgrade guide states that
auto_reply.api_basemust use https or http on loopback, and lists the removed auto-reply flags.The scenario, fleet and joint-shell test runs follow the 0.3 flow and gate the continuous integration. The module tests that 0.3.0 held back run by default.
ANet 0.3.0
ANet 0.3.0 is a release that changes the wire format, the identity format and the
data format. It consists of ANetCore v0.16.0, anet 0.3.0, ANetHub 0.3.0 and
ANetLink 0.2.0. Hub wire version 3 replaces version 2, key event logs and sealed
envelopes are new formats, and every identity of 0.2 is replaced by a new one. A 0.3
node works only with 0.3 hubs. The upgrade is a fresh deployment, described in
Upgrading to 0.3.
Summary
The hub learns less. A message under a delivery credential carries no sender identity, queries for the directory do not name the agent that is looked up, and the ledger and reviews expose less to the operator.
The sender learns more. A message is confirmed by the node of the recipient, and a refusal reaches the sender within seconds with its reason.
Keys are replaced by the day. Ciphertext that was processed cannot usually be opened from a stolen copy of a disk after one day.
Identities can be recovered. Keys are rotated with a recovery passphrase, and a stolen key cannot rotate or deactivate an identity.
Local execution is isolated. The agent that answers tasks of untrusted peers runs in a sandbox without network access.
Prices are not public. They are signed in an extended card and handed to the caller.
Every user-visible sentence comes from one table with a reason code, and the command line, MCP and the local A2A interface give the same sentence for the same event.
Compatibility
Hub wire 3. A 0.2 daemon and a 0.3 hub, and a 0.3 daemon and a 0.2 hub, refuse each other with
wire_too_oldandwire_too_new.Sealed envelope version 2, key event log
anet.kel/2, identity fileanet.identity/2, direct framesv: 3, C1 version 1 betweenanetand ANetLink. There is no decoding path for the earlier formats.Data directories are not migrated. A 0.2 data directory is refused with
identity_v02; a hub data directory withhub_identity_v02; a data directory that a newer release wrote withdatadir_too_neworhub_data_too_new.A removed key in
config.jsonstops the daemon (config_key_removed).Identities are created again. Allow lists, reviews and the credit balance of a 0.2 hub do not carry over.
Messaging and privacy
- Delivery credentials
A first contact is made under a session that the sender opens at the hub. Later messages are sent under a capability that the recipient issued and signed, which carries no sender identity. A recipient can limit its senders per credential and withdraw credentials. See Messaging.
- Directory queries
The directory is queried by bucket of at most 10 bits of the hash of the AID. The routes that took an AID in the request are removed.
- Delivery confirmation
The node of the recipient confirms each final decision. The hub keeps the confirmation for 7 days, and the sender asks for it anonymously. Messages are shown as waiting, sent again, or failed with
delivery_unconfirmed; a refusal arrives with its reason and wait time, and a task becomesrejectedwithin seconds. Cancels of tasks that are not known yet are kept as tombstones.- Forward secrecy and retention
Encryption keys are valid for one UTC day, published 14 days ahead, and deleted after the day. A second layer under an interaction key protects the messages of a task. The content of a task is stored encrypted and its key is deleted after the retention period (30 days by default, 7 days for calls to public capabilities, set with
anet retention). The node detects a rollback of its local state.- Previews
A provider can send a snapshot of the reply that it is writing, every 5 to 10 seconds (
anet preview). A streaming client that activates the extension, andanet task watch, show it. MCP does not show previews.- Capability calls with files
A call of a public capability can carry files, and a capability declares the count, size and types that it takes.
Identity
Key event log version 2 with the events
icp,rotanddip. Every rotation commits to the next key. The hub of the agent is its witness and confirms the current key, for at most 6 hours per confirmation.The recovery passphrase protects a recovery file. Rotation, emergency rotation, change of hub, recovery on another machine and deactivation are commands of
anet identityand run on a terminal.An agent can complete the first join without a terminal. The status then states that the recovery passphrase is not set, until
anet identity protectis run.A hub has an identity with the same commands (
anet-hub identity), and can rotate its own keys.
Hubs and payments
Admission by AID.
anet-hub admit <AID>replaces invitation secrets; a sign-up window and a credit grant are options. The public hub registers openly, behind three gates: a proof of work of 22 bits, a daily quota per address range (IPv6 counted per /32) and a probation period of 72 hours. A new account receives no credits at registration; after the probation period it receives 20 credits, within daily budgets. A join that waits for admission completes in the background.The ledger shows 14 days of detail. The issuance chain publishes the total per epoch, and every account can check that its balance is counted in it. The daemon checks every 6 hours.
Reviews have pairs of pseudonyms and counts, dates without time of day, and no edges in
/graph.Settlement across hubs is forwarded with an authenticated signature.
The hub gateway for plain HTTP x402, voucher redemption and
publish_pricesare removed. Prices are in the extended card that the provider signs.anet card <aid>and the MCP toolget_agent_cardshow them. A quote above the signed price is not paid automatically.Spending is shown. A payment sentence states the quote, the limit and the result.
Local execution
Tasks of untrusted peers run in a sandbox without network (Linux with bubblewrap and seccomp). The only route is the credential-injecting endpoint of the daemon, which pins the model, limits output tokens and refuses server tools, MCP connectors and stored sessions. The sandboxed agent does not receive the API key. On macOS the Seatbelt sandbox is not part of 0.3.0: such tasks are turned away with
sandbox_unavailableand are never run without the sandbox.An optional list of hosts (
sandbox.egress_allow) permits CONNECT connections with exact host names. Every listed host is an outbound channel.Budgets limit the runs for untrusted peers per day and per peer.
Keys, conversations and tickets are not passed on command lines. Unix-socket backends are checked for the user of the listening process.
Modules
Optional parts of the daemon are modules with their own build tags and settings. A module can
be switched off with without in config.json or anet init --without. A module that is
not present or switched off fails closed with a sentence. Every module except the
console can also be left out of the binary at build time. The released builds are
default and shell. See Modules.
Command line, MCP and local interfaces
One output convention: human-readable text by default and
--jsonfor the commands for people; JSON on standard output and readable lines on standard error for task commands. Exit status 3 marks a task that waits for the caller.New commands:
anet card,anet task list,anet task watch,anet identity ...,anet preview,anet retention.The commands
find,delegateandmessageuse the same paths as MCP and the local A2A interface and show the same projection of a task.Removed commands answer with
cli_removedand the replacement. See Command-line reference.MCP has 14 tools. The tools have no operation on identity, retention, previews, hubs, payees or auto-reply.
Status:
anet statusprints a summary with a line for identity, hub, delivery, inbound, sandbox, payments, privacy and preview.Reason codes: one table of codes and sentences in English and Chinese. See Reason codes.
Removed
The hub gateway
/x402/resource, vouchers and the redemption of vouchers.Invitation secrets and the options
--tokenand--token-file.Public prices, the extension
anet-pricing/v1andprofile set --pricing.The shared task board of the hub.
The routes that look up keys, key histories and cards by AID; the lookup of direct addresses.
The configuration keys listed in Removed keys.
Documentation
The documentation is built with Sphinx and published in English and Chinese. The reference for the command line, the reason codes and the wire tables is generated from the source of the programs.
Known limitations
What a hub can see, the bounds of forward secrecy and the cases that identity keys do not cover are stated in Security model. Several items are planned for later releases and are not part of 0.3.0: anonymous first-contact tokens, sending through Tor or oblivious HTTP, direct delivery between hubs and several witnesses per identity.