Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use when writing Go code with `github.com/ax-llm/ax/packages/go` for flows, nodes, program graphs, nested programs, dynamic options, caching, and optimizer components.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | -2% | 0% |
| case-02 | ✗→✓ | ▲ Improved | -25% | 0% |
| case-03 | ✗→✓ | ▲ Improved | -2% | 0% |
| case-07 | ✗→✓ | ▲ Improved | -3% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 12% | 0% |
This skill helps an agent write Go code with the generated Ax package github.com/ax-llm/ax/packages/go. Use the generated package API, examples, and manifests; do not import TypeScript-only APIs unless you are editing the TypeScript package.
github.com/ax-llm/ax/packages/go.API.md and axir-api.json.axir-capabilities.json.examples/.javascript-goja.godraft := ax.NewAx("topicText:string -> draftText:string", nil) wf := ax.NewFlow(map[string]ax.Value{"id": "docs.coreFlow"}). Execute("draft", draft, map[string]ax.Value{ "reads": ax.Array("topicText"), "writes": ax.Array("draftResult", "draftText"), }). Returns(map[string]ax.Value{"draftText": "draftText"})
Build each flow node from its own input/output contract.
goclassifier := ax.NewAx("requestText:string -> route:class \"support, sales, engineering\"", nil) responder := ax.NewAx("requestText:string, route:string -> responseText:string", nil)
Declare reads and writes so the responder waits for the typed route.
gobranchFlow := ax.NewFlow(map[string]ax.Value{"id": "docs.branchFlow"}). Execute("classifier", classifier, map[string]ax.Value{"reads": ax.Array("requestText"), "writes": ax.Array("classifierResult", "route")}). Execute("responder", responder, map[string]ax.Value{"reads": ax.Array("requestText", "route"), "writes": ax.Array("responderResult", "responseText")}). Returns(map[string]ax.Value{"route": "route", "responseText": "responseText"})
Independent reads let research and audience analysis share one planner group.
goparallelFlow := ax.NewFlow(map[string]ax.Value{"id": "docs.parallelFlow"}). Execute("research", research, map[string]ax.Value{"reads": ax.Array("topicText"), "writes": ax.Array("researchResult", "factList")}). Execute("audience", audience, map[string]ax.Value{"reads": ax.Array("topicText"), "writes": ax.Array("audienceResult", "audienceAngle")}). Execute("join", join, map[string]ax.Value{"reads": ax.Array("factList", "audienceAngle"), "writes": ax.Array("joinResult", "briefText")}). Returns(map[string]ax.Value{"briefText": "briefText"})
A linear refinement pipeline makes each dependency explicit.
gorefineFlow := ax.NewFlow(map[string]ax.Value{"id": "docs.refineFlow"}). Execute("draft", draft, map[string]ax.Value{"reads": ax.Array("topicText"), "writes": ax.Array("draftResult", "draftText")}). Execute("critique", critique, map[string]ax.Value{"reads": ax.Array("draftText"), "writes": ax.Array("critiqueResult", "critiqueText")}). Execute("revise", revise, map[string]ax.Value{"reads": ax.Array("draftText", "critiqueText"), "writes": ax.Array("reviseResult", "revisedText")}). Returns(map[string]ax.Value{"revisedText": "revisedText"})
Forward accepts the context, provider client, public inputs, and options.
gooutput, err := parallelFlow.Forward( ctx, client, map[string]ax.Value{"topicText": "Typed LLM workflows"}, nil, )
Start from the complete programs under examples/, then browse the larger gallery at https://axllm.dev/go/subsystems/flow/.
axllm.NewFlow, axllm.AxFlowprovider-api examples only when the user explicitly has provider credentials available.no-key examples for deterministic local checks and provider request mapping.tools/*/skills/ into user packages.Other measured skills in the registry, with their headline benchmark lift.