Introduction
AgentCircuits is primarily a deployable platform, not just a library.
For most teams, the default path is:
- Run the published server image or the bundled compose file.
- Configure providers, authentication, storage, and routing.
- Add custom tools and integrations.
- Only drop into the NuGet packages when you need your own host or deep runtime customisation.
Two layers
Section titled “Two layers”AgentCircuits.Server
Section titled “AgentCircuits.Server”AgentCircuits.Server is the product surface most users should start with. It gives you:
- the admin portal at
/portal - the chat UI at
/chat - REST APIs and SignalR hubs
- file or PostgreSQL-backed persistence
- built-in provider registration
- configuration-based tool and skill loading
The runtime is designed to be container-friendly and is published as ghcr.io/agent-circuits/agentcircuits-server.
NuGet packages
Section titled “NuGet packages”The package surface is still important, but it is secondary to the hosted platform story:
AgentCircuits.Serverlets you create your own host around the same runtime.AgentCircuits.Coregives you direct control over agents, sessions, tools, hooks, and events.- provider, storage, A2A, and channel packages are there when you need to compose a more opinionated host.
If you already know you need a custom ASP.NET Core application, use the packages. Otherwise, start with the platform runtime.
Tool model
Section titled “Tool model”AgentCircuits supports several extension paths:
- CLI tool directories, configured through
AgentCircuits:Portal:CliToolDirs - MCP servers attached to agents
- custom C# tools and services when you host with the NuGet packages
- skill directories for packaged instructions and helper scripts
That means you can ship a useful platform quickly in Docker and still keep a path open for deeper integration later.
Execution model
Section titled “Execution model”The underlying runtime still exposes the same execution model whether you run it in the platform or embed it yourself:
SendAsync()followed byReceiveAsync()when you want a streaming loop that runs to completion.SendAsync()followed byStepAsync()when you need turn-by-turn control for approvals, retries, or long-lived workflows.
Both patterns operate on the same underlying session and event model.
Runtime shape
Section titled “Runtime shape”At runtime the stack looks like this:
Docker image or custom host | vPortal + Chat + APIs + SignalR | vAgent runtime | vProviders + Tools + StorageContinue to Installation when you are ready to add packages.