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

agent

The agent block defines the agent's identity, graph, model, prompt, and capabilities.

The agent block is where you define the agent itself: its name, graph, model, system prompt, and what it is allowed to do. A manifest contains one agent block.

agent.acl
agent "my_agent" {
  graph {
    type = "react"
  }

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

  prompt = "You are a helpful assistant. Your name is {{ agent_name }}."

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

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

Fields

FieldTypeRequiredruntime()Description
graphblockyesGraph selection. See below.
versionstringnonoSemver version string embedded in the binary. Defaults to "0.1.0".
descriptionstringnonoHuman-readable description of the agent.
promptstring, list, or source objectnonoSystem prompt. Supports Jinja2 templates.
capabilitieslist of stringsnoyesCapability tags the agent is allowed to use.
capability_policystringnoyesHow capabilities are enforced. See below.
modelblockyesModel configuration.

graph block

The graph block selects which graph implementation drives the agent. Graph selection is required and currently the only shipped value is react.

graph {
  type = "react"
}
FieldTypeRequiredruntime()Description
typestringyesnoGraph name. Must be react in this distribution.

See graph for the block reference and ReAct for the shipped graph's behavior.

prompt

The prompt field sets the agent's prompt. It accepts a plain string, a list of role/content objects for multi-turn prompts, or a configured prompt source.

# Plain string
prompt = "You are a helpful assistant."

# Multi-turn
prompt = [
  { role = "system", content = "You are a helpful assistant." },
  { role = "user",   content = "Always be concise." }
]

The prompt supports Jinja2 template syntax. Variables are injected at runtime before each run. The set of available variables is graph-dependent; see ReAct prompt templates for the list the ReAct graph provides, and Write templated prompts for how to use them.

Langfuse prompt source

Use a Langfuse source object to retrieve the prompt from Langfuse Prompt Management at runtime:

prompt = {
  source = "langfuse"

  prompt_name = "support/assistant"
  public_key  = runtime("LANGFUSE_PUBLIC_KEY")
  secret_key  = secret(runtime("LANGFUSE_SECRET_KEY"))

  label                 = runtime("LANGFUSE_PROMPT_LABEL", "staging")
  cache_ttl_seconds     = runtime("LANGFUSE_CACHE_TTL_SECONDS", 60)
  fetch_timeout_seconds = runtime("LANGFUSE_FETCH_TIMEOUT_SECONDS", 5)
  max_retries           = runtime("LANGFUSE_MAX_RETRIES", 2)
}
FieldTypeRequiredruntime()DefaultDescription
sourcestringyesnoMust be langfuse.
prompt_namestringyesyesLangfuse prompt name, including any folder path.
public_keystringyesyesLangfuse project public key.
secret_keystringyesyesLangfuse project secret key. Normally wrapped in secret(runtime(...)).
base_urlstringnoyeshttps://cloud.langfuse.comLangfuse Cloud or self-hosted base URL.
labelstringnoyesMovable label used to select a prompt version.
versionnumbernoyesImmutable numeric prompt version.
cache_ttl_secondsnumbernoyes60Local cache lifetime. Set to 0 to disable caching.
fetch_timeout_secondsnumbernoyes5Fetch timeout for each request attempt.
max_retriesnumbernoyes2Additional attempts for transient fetch failures.

label and version are mutually exclusive. When both are omitted, Langfuse applies its default production selection.

See Manage prompts with Langfuse for credential setup, selection strategies, caching behavior, and prompt conversion.

capabilities and capability_policy

Capabilities are tags that control which tools the agent can invoke at runtime. Each tool can declare a set of capability tags. The agent's capabilities list declares which tags the agent is allowed to use.

When capability_policy is set to "locked", the agent can only invoke tools whose capability tags are a subset of its declared capabilities. Tools with no declared capabilities are always available.

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

  capabilities      = ["math", "filesystem::read"]
  capability_policy = "locked"
  ...
}

See Tools and capabilities for how capabilities work with tools and Control tool access with capabilities for the recipe.

model block

The model block selects the LLM the agent uses.

FieldTypeRequiredruntime()Description
providerstringyesyesProvider name. Must match a key in the providers block.
namestringyesyesModel identifier as recognised by the provider.

Inference parameters such as temperature, max_tokens, and top_p are declared in the providers block, not here. Provider-level defaults apply to every model request, and individual models can override them with their own params block. See Configure a model provider and the providers reference for details.

← PreviousHugging FaceNext →graph

© 2026 pogue.dev. All rights reserved.

Creative CommonsCC BY 4.0
On this pageFieldsgraph blockpromptLangfuse prompt sourcecapabilities and capability_policymodel block

Search docs

Search the agentc documentation