agentc
GitHubagentc-sh/agentc
agentc
GitHubagentc-sh/agentc
›Introduction
Get started›Concepts in 5 minutes›Build your first agent›Add your first tool›Serve and connect
Concepts›Architecture overview›The manifest›The compilation pipeline›Archetypes›The graph›Tools and capabilities›Runtime libraries›Skills›Agents and prompts›Serving and protocols›Observability
Guides›Author a manifest›Write a tool›Give your agent a filesystem›Control network egress›Connect external tools via MCP›Connect agents via A2A›Use the bash tool›Control tool access with capabilities›Write templated prompts›Manage prompts with Langfuse›Pass context from the client›Configure a model provider›Connect a CopilotKit frontend›Deploy a standalone binary›Deploy with Docker and PostgreSQL›Instrument with OpenTelemetry›Extend code generation with blocks
Reference
Manifest
›build›locals›runtime›filesystem›network
providers
›agent›graph›tool›skill›http_server
Runtime
›Observability

Manifest

The agent.acl manifest and the top-level blocks that make up an agent.

An agent is defined by a single agent.acl manifest. The manifest is a set of top-level blocks whose order does not matter: build selects the output shape, filesystem and network decide what the agent's components can reach, providers declares the models, agent defines the agent itself, tool and skill extend what it can do, http_server exposes it over the network, and locals factors out repeated values. Each block has its own reference page linked below.

The manifest below is a complete example that uses every top-level block:

agent.acl
locals {
  version = "1.0.0"
}

build {
  archetype = "standalone"
}

runtime {
  default_tenant_id = "default"
}

filesystem {
  mounts = [
    {
      path = "/"
      backend = { kind = "memory" }
    }
  ]
}

network {
  policy {
    allow = [
      {
        protocol = "https"
        hostname = "api.example.com"
      }
    ]
  }
}

providers {
  anthropic {
    models = ["claude-haiku-4-5"]

    config {
      api_key = secret(runtime("ANTHROPIC_API_KEY"))
    }
  }
}

agent "assistant" {
  graph {
    type = "react"
  }

  version     = locals.version
  description = "A helpful assistant."

  prompt = "You are {{ agent_name }}, a concise and helpful assistant."

  capabilities      = ["math"]
  capability_policy = "locked"

  model {
    provider = "anthropic"
    name     = "claude-haiku-4-5"
  }
}

tool "adder" {
  kind         = "javascript"
  source       = "./tools/math"
  capabilities = ["math"]
}

tool "planner" {
  kind = "a2a"
  url  = runtime("PLANNER_A2A_URL", "https://planner.example.com")
}

skill "arithmetic" {
  source = "./skills/arithmetic"
}

http_server {
  host = runtime("HTTP_HOST", "127.0.0.1")
  port = runtime("HTTP_PORT", 8080)

  protocol {
    ag_ui {}
  }
}

To assemble a manifest step by step rather than from a finished example, see Author a manifest. For the concepts behind build-time versus runtime values, see The manifest.

Blocks

BlockPurpose
buildSelects the archetype and output shape of the artifact.
localsBuild-time constants referenced elsewhere in the manifest.
runtimeRuntime settings such as the default tenant and storage.
filesystemThe virtual filesystem the agent's components see.
networkThe egress policy and limits for outbound requests.
providersModel providers and their connection and inference configuration.
agentThe agent's identity, graph, model, prompt, and capabilities.
graphThe graph selection inside the agent.
toolA tool the agent can call, including local tools, MCP servers, and A2A delegation targets.
skillA skill that shapes the agent's judgement.
http_serverThe network interface and mounted protocols.
← Previousagentc inspectNext →build

© 2026 pogue.dev. All rights reserved.

Creative CommonsCC BY 4.0
On this pageBlocks

Search docs

Search the agentc documentation