Vihren v0.3.0: typed claim-checks for Go and Temporal agents
Vihren v0.3.0 adds typed claim-check values for Go and Temporal agents, keeping large activity data out of workflow history.
Vihren is an Agent Development Kit for building durable agents in Go while keeping Temporal visible. Typed codegen removes workflow plumbing; durable value handles keep large agent data out of workflow history.
go install vihren.dev/vihren/cmd/vihren-gen@latest
The first public Vihren layer is code generation for Temporal's Go SDK. Raw Temporal calls often cross important workflow and activity boundaries through names and result plumbing the compiler cannot fully check. Vihren generates typed activity proxies, workflow clients, and worker registration while leaving your workflow code close to the native SDK.
var out GreetingOutput
err := workflow.ExecuteActivity(
ctx,
"ComposeGreeting",
in,
).Get(ctx, &out)
return out, errreturn Activity.ComposeGreeting(ctx, in)This is proof of the design direction: remove repetitive plumbing without hiding Temporal. View the complete example.
Documents, tool results, model context, and conversation history can overwhelm Temporal payload limits or be written repeatedly as an agent runs. Vihren v0.3 stores the large bytes once and keeps small durable claims in workflow history.
ExternalStorage transparently stores a large payload and materializes it when workflow code needs the value.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.
You can direct Vihren using simple workflow and activity annotations.
// GreetingInput is the typed input for both the workflow and the activity.
type GreetingInput struct {
Name string
}
//vihren:activity
func (a *GreetingActivities) ComposeGreeting(
ctx context.Context,
in GreetingInput,
) (GreetingOutput, error) {
return GreetingOutput{
Message: fmt.Sprintf("%s, %s", a.Prefix, in.Name),
}, nil
}
//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)
}go generate ./examples/codegenhelloThe larger goal is a Go-native Agent Development Kit on Temporal: agent loops, tools, memory, human review, sandboxed execution, testing, and observability designed as durable workflow primitives.
If Temporal is infrastructure for your product and you are adding LLM-assisted or tool-using steps to long-running workflows, become a design partner or email [email protected].
Vihren v0.3.0 adds typed claim-check values for Go and Temporal agents, keeping large activity data out of workflow history.
Vihren v0.2.0 tightens the generated codegen client surface with typed async workflow run handles.
How to track private files together with public code with Jujutsu filesets, revsets, and git private commits setting.