Vihren Agent Development Kit · work in progress · open source

Agent development kit for Go and Temporal.

Vihren ADK is being built for durable agents whose loops, tools, memory, human review, sandboxed execution, testing, and observability are expressed as Temporal workflow primitives. Its shipped foundations provide typed workflow boundaries, large-value storage, and embedded Temporal without hiding the Temporal SDK.

go install vihren.dev/vihren/cmd/vihren-gen@latest

Current foundation release v0.3.0 · Go 1.26+ · Apache-2.0

View the source · Browse the Go package

Typed Temporal codegen

Raw Temporal calls can cross workflow and activity boundaries through names, payloads, registration calls, and result plumbing the Go compiler cannot fully check. Vihren generates typed activity proxies, workflow clients, and worker registration while leaving workflow code close to the native Temporal SDK.

Without Vihren
var out GreetingOutput
err := workflow.ExecuteActivity(
	ctx,
	"ComposeGreeting",
	in,
).Get(ctx, &out)
return out, err
With Vihren
return Activity.ComposeGreeting(ctx, in)

With Vihren both the input and output values are type-checked

The generated surface removes repetitive plumbing without replacing Temporal's workflow model.

View the complete codegen example

Large values without large workflow histories

Documents, tool results, model context, and conversation history can overwhelm Temporal payload limits or be written repeatedly as a durable workflow runs. Vihren v0.3 stores large bytes once and keeps small, typed claims in workflow history.

workflow reads
Temporal ExternalStorage transparently stores a large payload and materializes it when workflow code needs the value.
workflow routes
blob.Value[T] lets activities exchange a typed inline value or storage handle without fetching large bytes into the workflow.

embeddedtemporal.WithLocalStorage wires both paths to one DataConverter-aware local filesystem and SQLite backend. The released foundation is local-only and does not yet include garbage collection or ownership transfer.

Read the storage article · Browse the blob API · Run the measured example · Read the v0.3.0 release

Temporal for local examples, in process.

embeddedtemporal starts a Temporal server inside the current process, so examples, demos, and single-binary local development do not require Docker, a daemon, or temporal server start-dev. It is not intended for production deployment.

Read the embedded Temporal guide

Smallest useful example

Direct Vihren with ordinary Go functions and workflow and activity annotations.

examples/codegenhello/workflow.go
// GreetingInput is the typed input for both the workflow and the activity.
type GreetingInput struct {
	Name string
}

// GreetingOutput is the typed result returned to the caller.
type GreetingOutput struct {
	Message string
}

// ComposeGreeting builds a greeting. The marker tells vihren-gen to register it
// as a Temporal activity and to expose a type-checked proxy method.
//
//vihren:activity
func (activities *GreetingActivities) ComposeGreeting(ctx context.Context, in GreetingInput) (GreetingOutput, error) {
	_ = ctx
	return GreetingOutput{Message: fmt.Sprintf("%s, %s", activities.Prefix, in.Name)}, nil
}

// HelloWorkflow schedules the activity through the generated Activity proxy, so
// the activity name and argument types are checked at compile time.
//
//vihren:workflow
func HelloWorkflow(ctx workflow.Context, in GreetingInput) (GreetingOutput, error) {
	ctx = workflow.WithActivityOptions(ctx, workflow.ActivityOptions{StartToCloseTimeout: time.Second})
	return Activity.ComposeGreeting(ctx, in)
}
generate
go generate ./examples/codegenhello

View the complete runnable example

Current status

available now
Typed activity proxies, workflow clients, worker registration, local large-value storage, and embedded Temporal.
good fit
Go teams that want less hand-written Temporal plumbing, typed claim-check values for large data, or self-contained examples and local development.
not yet
The planned agent-loop, tool, memory, human-review, sandbox, testing, and observability layers; a production storage backend; garbage collection; ownership transfer; or production embedded Temporal deployment.
project status
Early open-source releases. APIs and operational boundaries may change as the ADK is used in real workflows.

Use it, inspect it, or help shape it.

Start with the repository and package documentation. If you are building long-running, tool-using, or LLM-assisted workflows on Temporal, I am looking for real constraints that can shape the next open-source foundations.

GitHub · Go package reference · Vihren ADK writing · Work with Vihren