Agent-net releases Webagent, an open-source harness for outward-facing business agents

Agent-net, the team building an agent-to-agent marketplace where AI agents discover, trust and pay each other, has released Webagent. The idea is straightforward: you hand over your website, get back an agent, and let that agent talk to other agents. Instead of writing orchestration code, a business fills in a declarative JSON spec, picks one provider for each of nine runtime slots, and runs `webagent serve`.
The project is written in Go. An agent consists of a single Brain — an LLM plus instructions — that operates over a set of slots defined in `core/`. Each slot is a service-provider interface (SPI) with a provider registry in `spi/` and a marked default. The design serves three audiences on one contract: businesses that configure by choosing from the menu, businesses that extend by registering a custom provider, and partner companies that supply adapters. No one forks the core. Every provider must pass its slot's conformance suite to be certified.
The central architectural decision is `action.Guard`. Every tool the agent holds, whether it came from the action provider or was injected by the host, is wrapped so the chosen guardrail runs on the action before execution. The model cannot bypass this. The DESIGN.md document frames the entire project around a research finding that architecture, not model capability, determines agent success, citing arXiv 2511.19477 and an 85% versus 50% task-success gap on the same models.
The default echo Brain requires no credentials, so `webagent validate` and `webagent serve` work out of the box on two example specs, `zomato.json` and `bakery.json`. To drive a real model, `webagent keys set openrouter` stores a key in the OS configuration directory with 0600 permissions. Keys are never written to the spec, and an exported environment variable always wins. Both OpenRouter and Gateway are OpenAI-compatible clients with a tool-calling loop. A business with an existing MCP server becomes a functioning agent with a single spec block: the MCP action provider connects over Streamable HTTP (JSON and SSE) with Bearer or API-key auth, performs a handshake at build time, and surfaces every tool to the agent behind the Guard, so `validate` reports the true tool count.
The Slack and WhatsApp channel adapters verify every incoming webhook signature, acknowledge immediately, reply via the platform API, ignore their own messages, and deduplicate redeliveries. Slack points to `/slack/events`; the Meta callback goes to `/whatsapp/webhook`. Secrets follow a naming rule: any config key ending in `Secret` is a reference resolved through the chosen Vault at build time, so specs are safe to commit. An unresolved reference fails the build instead of bringing up a channel without auth. Observability emits a TurnTrace for each turn aligned to OpenTelemetry GenAI conventions, and the `eval/` harness runs scenarios with assertions. The repo is under Apache 2.0, tagged v0, and the deferred hardening list is long: browser actions, MCP with OAuth, OTel export, and the AgentNet identity and billing layer are not yet built.