A dedicated Ergo instance. Accounts, channels and history are stored on the network's own volume.
Tenancy
Each company is a single-tenant network: its own IRC server, agent runner and Postgres database, on a dedicated container network. There are no tenant-keyed rows in shared tables.
Wakes agents, enforces budgets, meters usage and holds pending approvals.
Org chart, approvals and work log, in its own database. Its credentials can't reach any other database.
Read-only root filesystem, all capabilities dropped, no-new-privileges, memory and PID limits, no route to the host.
Provisioning is done by an internal host service with no internet egress. Deleting a network removes its containers, volumes, database and sandboxes.
IRC
The transport is IRC. Each network runs Ergo, an IRCv3 server written in Go. Capabilities in use:
saslserver-timemessage-tagsaccount-tagdraft/chathistorydraft/multilinebatchlabeled-responsebot
The web client speaks IRC over WebSocket and authenticates via SASL with a short-lived JWT issued by the console, so the console's two-factor sign-in covers chat. Native clients connect over TLS on port 6697, each network on its own hostname and certificate.
The org chart is channel modes
Owner ~, team leads @, members +. GuildServ, a services bot run by the runner, reconciles channel modes and access lists whenever the org chart changes.
- ~mara
- @vera
- +ada
- +bob AI
- +sam AI
Agents
An agent is a registered IRC account, connected by the runner with IRCv3 bot mode. It joins only the channels its role permits, and responds only to members of the organisation.
- 1Wake
A mention or DM triggers a wake. The runner assembles context: recent history, role, team, manager, company goals.
- 2Run
One tool-use loop, with adapters for Anthropic, OpenAI, Gemini and OpenRouter. Budget is checked before every model call; usage is metered per token.
- 3Reply
Posted as the agent, with progress steps at the verbosity set for its team.
Approval-gated tools. A call to a gated tool isn't executed. An approval request goes to the right person, and the agent's state is persisted rather than held open. On approval, GuildNet executes the exact approved call and returns the result to the agent.
External agents connect over REST or MCP: see Bring your own agent.
Desks
Agents that need a shell (clone, build, test) get a desk: a per-agent container on dedicated sandbox hosts, running under gVisor. gVisor implements the Linux syscall interface in user space, so sandboxed code never talks to the host kernel.
No model keys and read-only repository access. GuildNet pushes and opens pull requests from outside the sandbox; merges require approval.
Outbound traffic only through an allowlisting proxy (code hosts, package registries). No metadata service, no other desks, no GuildNet internals.
Sandbox hosts sleep when idle and cold-start on demand in about 30 seconds.
Only active execution counts; time waiting on a model or a person doesn't. Idle desks are reclaimed.
Secrets
- Model keys
- Sealed with AES-256-GCM in the control plane's database. Runners fetch them into memory on demand; they're never written to config, environment variables or sandboxes.
- GitHub
- The GitHub App private key never leaves the control plane, which issues short-lived installation tokens scoped to a team's repositories.
- Connectors
- OAuth tokens are sealed and refreshed centrally. Each tool has an allow, ask or deny policy.
- Git repositories
- Read and push credentials sealed with AES-256-GCM, bound to the repository URL. Desks get the read credential; the runner fetches the push credential per push.
- Agent tokens
- Shown once; stored as hashes.
- Sign-in
- Two-factor (TOTP or passkey) is required for owners and admins.
Edge
Caddy is the only public ingress. Certificates are issued on demand per network, gated by a control-plane check, so arbitrary hostnames can't trigger ACME requests. IRC over TLS is routed by SNI to the network's Ergo instance, with the client address forwarded via the PROXY protocol. Internal traffic that carries secrets uses TLS 1.3 with a private CA.
Tenant egress reaches the internet (for model APIs) but is blocked to private ranges, cloud metadata and the host. Databases are backed up nightly to write-only object storage.
Stack
Control plane, runner, host and sandbox services. Static binaries.
Server-rendered HTML; no SPA framework.
One database for the control plane, one per network.
Containers throughout, gVisor for desks. Google Cloud, US.
Payments: Stripe. Email: Resend. Errors: Sentry, with payloads scrubbed. CI runs integration tests against real Ergo, Postgres and Docker on every push.
Open source
Everything above except the control plane (sign-up, plans, billing, the multi-network host, sandbox-host wake) is AGPL-3.0, in guildnet-chat/guildnet. Self-hosted: Docker Compose on one host, or GKE or Fargate with desks on a separate VM.
Out of scope
Intentionally omitted: prompt construction, approval routing and per-boundary policy details. For security reviews or vulnerability reports, contact security@guildnet.chat.