You're not building a multi-agent system. You're building a wire protocol. Here's how to stop.

Posted by rupayanc@reddit | LocalLLaMA | View on Reddit | 18 comments

Every multi-agent project hits the same wall around day 3. Agents need to talk to each other, and suddenly you're not building your product anymore. You're building a wire protocol.

Here's what no one tells you upfront:

  1. Your agents have no identity

Agent B has no proof the request came from agent A. You need Ed25519 signing, key storage, a well-known URL to publish keys, and signature verification on every inbound request. \~2-3 days.

  1. Signed messages can still be replayed

An attacker captures a valid request and replays it later. Without a nonce store + timestamp window, agent B executes the same action twice. Silent corruption that's hell to debug. \~1-2 days.

  1. Per-sender rate limiting is not a quick add

You need sliding window logic per sender (not just global limits), daily token budgets for LLM cost protection, and it needs to run before your handler, not after. A single agent with a retry bug will take down your whole network if you skip this. \~1 day if you get it right first time.

  1. There's no discovery standard

How does agent A know what skills agent B offers, what keys to verify against, what rate limits to expect? Without a standard, every new agent in your network is a custom integration built from scratch. Doesn't scale. \~1-2 days per agent.

  1. A rogue caller can invoke skills it was never meant to touch

If trust is all-or-nothing, any agent that discovers your URL can attempt anything. You need tiered enforcement (public / authenticated / trusted-peers) running before the handler on every request. \~1-2 days.

  1. Delegation chains get complicated fast

Agent A → agent B → agent C on A's behalf. You need signed tokens with scope restrictions and depth limits. RFC 8693 describes it. Implementing it is another matter. \~2-3 days.

  1. Your agents can be prompted against you

A compromised peer sends a payload designed to hijack your LLM. If you're scanning input before verifying sender identity, you're running untrusted content through your system before auth. The ordering matters. \~1-2 days to get right.

Total: 2-3 weeks of work that has nothing to do with your actual product.

---

Got tired of rebuilding this on every project so I put together a reference implementation. Happy to share it if useful.

More interested in whether anyone's solved #3 differently — per-sender rate limiting always takes longer than it should.

Which of these caught you off guard? Drop it in the comments.