Agent Orchestration as Code

Run durable LLM agents in production Go workflows. Crash-proof execution, cost guardrails, and MCP tool integration — powered by Temporal.

flow := core.NewFlow("incident-review").
    TriggeredBy(core.Webhook("/hooks/incident")).
    Then(pagerduty.ParseWebhook(webhookInput).As("webhook")).
    When(func(s *core.FlowState) bool {
        return !core.GetOr(s, "webhook", pagerduty.ParseWebhookOutput{}).Skipped
    }).
    Then(agent.Node("reviewer", agent.NodeConfig{
        LLM:          agent.LLMConfig{Model: "claude-sonnet-4-6", MaxTokens: 8192},
        SystemPrompt: reviewPrompt,
        UserPrompt:   core.Output("webhook.UserPrompt"),
        Tools: []agent.Tool{
            agent.MCPTool("pagerduty", pagerdutyMCP),
            agent.MCPTool("jira", jiraMCP),
            agent.MCPTool("slack", slackMCP),
        },
        CostLimits: agent.CostLimits{PerRunUSD: 2.00, PerDayUSD: 100.00},
        Compaction: agent.CompactionConfig{ThresholdTokens: 80000, KeepRecent: 4},
    }).As("review").WithTimeout(15 * time.Minute)).
    Then(slack.NotifyReport(reportInput)).
    Build()

Production-grade agent infrastructure

Everything you need to run LLM agents that won't crash, won't blow your budget, and won't go rogue.

Durable Agents

LLM loops run as Temporal child workflows with per-iteration heartbeating. Survive worker crashes mid-conversation — no lost context, no re-running tool calls.

MCP + Provider Tools

Connect any MCP server or Resolute provider as agent tools. PagerDuty, Jira, Confluence, Slack, Qdrant, Ollama — 90+ tools out of the box.

Observer Pattern

Inspect and override agent decisions between iterations via Temporal signals. Human-in-the-loop oversight without blocking execution.

Cost Guardrails

Per-run, per-hour, and per-day budget limits. Process-global tracking across all concurrent flows. Never wake up to a surprise bill.

Type-Safe Composition

Go generics enforce compile-time type safety across your entire pipeline. Fluent builder API. Unit test flows without running Temporal.

Context Compaction

Automatic summarization when token count exceeds threshold. Per-turn tracking for post-hoc analysis. Long-running agents that stay sharp.

Agents embedded in durable workflows

Not "agent framework OR workflow framework" — agents as first-class nodes inside fault-tolerant flows.

flowchart TD trigger(["Webhook / Schedule / Signal"]) trigger --> parse subgraph flow ["Flow (Temporal Workflow)"] parse["Parse Input"] parse --> agent subgraph agent ["Agent (Child Workflow)"] llm["LLM Call"] -->|"tool_use"| tools["Tool Dispatch"] tools -->|"tool_result"| llm tools --- mcp_pd["mcp__pagerduty__*"] tools --- mcp_jira["mcp__jira__*"] tools --- mcp_slack["mcp__slack__*"] tools --- providers["provider activities"] compact["Compaction · Loop Detection · Cost Tracking"] end agent -->|"signal"| observer["Observer (verdicts)"] agent --> notify["Notify"] end notify --> temporal[("Temporal Server")]

Battle-tested: Ops Buddy

PagerDuty fires, an agent gathers context from 4 sources, and your on-call engineer gets a ready-to-act incident brief in Slack — in under 2 minutes.

Incident Brief — API Gateway 502s
> NEW ISSUE | Urgency: High | Service: api-gateway | ID: P1234567

What Do I Do Right Now?
1. Check pod logs for user-service (CrashLoopBackOff detected)
2. Verify upstream health on monitoring dashboard
3. If > 50% error rate, escalate to platform team

Has This Happened Before?
- Feb 15: Similar 502 spike, resolved by restart (12 min)
- Jan 28: OOM kill, resolved by memory limit increase (25 min)
- Pattern: 3rd occurrence in 35 days — root cause is memory leak

Open Tickets
| PLAT-892 | user-service memory leak | In Progress | @jane |

Multi-model benchmarks on the same incident

ModelDurationIterationsCostQuality
claude-sonnet-4-6~2m4~$0.65Excellent
claude-haiku-4-5~1.5m9~$0.28Good
qwen3.5-397b (cloud)~1.5m3$0.00Good

See Model Benchmarking for methodology

Start building

Resolute is open source and free. Get from zero to a running agent workflow in 10 minutes.

Quickstart Guide