Resolute is a Agent Orchestration as Code framework for Go, built on Temporal. It provides type-safe abstractions that make building durable, fault-tolerant workflows feel natural.
Caution
Resolute is a research project.
This software is experimental, unstable, and under active development. We are yet to test out the APIs in production. APIs will change without notice. Features may be incomplete or broken. There is no support, no documentation guarantees, and no warranty of any kind. Use at your own risk.
- Website: https://resolute.sh
- Documentation: https://resolute.sh/docs
- Tutorials: https://resolute.sh/docs/getting-started
- Type-Safe Flows - Generic nodes with compile-time type checking
- Fluent Builder API - Intuitive flow construction with
.Then(),.ThenParallel(),.ThenGate(),.ThenChildren() - Built-in Patterns - Saga compensation, pagination, rate limiting, approval gates out of the box
- Flow Hooks - Lifecycle callbacks for observability, metrics, and LLM cost tracking
- Dynamic Templates - Runtime flow construction with
FlowTemplatefor data-driven workflows - Provider Ecosystem - Pre-built integrations for Jira, Confluence, Qdrant, Ollama, PagerDuty, Bitbucket, Slack
- Easy Testing -
FlowTesterfor unit tests without Temporal infrastructure - Production Ready - Webhook triggers, state persistence, cursor-based incremental sync
go get github.com/resolute-sh/resolute@v0.4.0-alphaDocumentation is available on the Resolute website:
- Getting Started walks through installation and building your first workflow
- Concepts explains the core abstractions
- Guides provides step-by-step tutorials for common patterns
- API Reference covers the complete API
package main
import (
"github.com/resolute-sh/resolute/core"
"github.com/resolute-sh/resolute-jira"
"github.com/resolute-sh/resolute-transform"
"github.com/resolute-sh/resolute-qdrant"
)
func main() {
// Define a workflow that syncs Jira issues to a vector database
flow := core.NewFlow("knowledge-sync").
TriggeredBy(core.Schedule("0 * * * *")).
Then(jira.FetchIssues(jira.Input{
Project: "PLATFORM",
Since: core.CursorFor("jira"),
})).
Then(transform.ChunkDocuments(transform.Input{
DocumentsRef: core.OutputRef("jira_issues"),
})).
Then(ollama.BatchEmbed(ollama.Input{
Model: "nomic-embed-text",
TextsRef: core.OutputRef("chunks"),
})).
Then(qdrant.Upsert(qdrant.Input{
Collection: "knowledge-base",
})).
Build()
// Run the worker
core.NewWorker().
WithConfig(core.WorkerConfig{TaskQueue: "knowledge-sync"}).
WithFlow(flow).
WithProviders(jira.Provider(), transform.Provider(), qdrant.Provider()).
Run()
}| Provider | Package | Description |
|---|---|---|
| Jira | resolute-jira |
Issue tracking integration |
| Confluence | resolute-confluence |
Document management |
| Qdrant | resolute-qdrant |
Vector database operations |
| Ollama | resolute-ollama |
Local LLM embeddings |
| PagerDuty | resolute-pagerduty |
Incident management |
| Transform | resolute-transform |
Document chunking and merging |
| Bitbucket | resolute-bitbucket |
Webhook parsing and PR comments |
| Slack | resolute-slack |
Channel messaging via webhooks |
- Flow Hooks — Lifecycle callbacks at flow, step, and node boundaries with LLM cost tracking
- Gate Nodes — Pause flows until external signals arrive (approval workflows)
- Child Flows — Spawn child workflows for fan-out processing
- Flow Templates — Dynamic runtime flow construction
- InputData Marker — Access webhook payloads from activity inputs
- Bitbucket Provider — Webhook parsing and PR comment automation
- Slack Provider — Channel messaging with Block Kit support
See the full release notes.
We welcome contributions! See CONTRIBUTING.md for guidelines.
MIT License - see LICENSE for details.