Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use when writing Java code with `dev.axllm:ax` for flows, nodes, program graphs, nested programs, dynamic options, caching, and optimizer components.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 5% | 0% |
| case-02 | ✗→✓ | ▲ Improved | -8% | 0% |
| case-03 | ✗→✓ | ▲ Improved | -15% | 0% |
| case-04 | ✗→✓ | ▲ Improved | -17% | 0% |
| case-05 | ✗→✓ | ▲ Improved | -3% | 0% |
This skill helps an agent write Java code with the generated Ax package dev.axllm:ax. Use the generated package API, examples, and manifests; do not import TypeScript-only APIs unless you are editing the TypeScript package.
dev.axllm:ax.API.md and axir-api.json.axir-capabilities.json.examples/.javascript-quickjs, python-pyodide.javaAxGen draft = Ax.ax("topicText:string -> draftText:string"); AxFlow wf = Ax.flow(java.util.Map.of("id", "docs.coreFlow")) .execute("draft", draft, java.util.Map.of( "reads", java.util.List.of("topicText"), "writes", java.util.List.of("draftResult", "draftText"))) .returns(java.util.Map.of("draftText", "draftText"));
Build each flow node from its own input/output contract.
javaAxGen classifier = Ax.ax("requestText:string -> route:class \"support, sales, engineering\""); AxGen responder = Ax.ax("requestText:string, route:string -> responseText:string");
Declare reads and writes so the responder waits for the typed route.
javaAxFlow branchFlow = Ax.flow(Map.of("id", "docs.branchFlow")) .execute("classifier", classifier, Map.of("reads", List.of("requestText"), "writes", List.of("classifierResult", "route"))) .execute("responder", responder, Map.of("reads", List.of("requestText", "route"), "writes", List.of("responderResult", "responseText"))) .returns(Map.of("route", "route", "responseText", "responseText"));
Independent reads let research and audience analysis share one planner group.
javaAxFlow parallelFlow = Ax.flow(Map.of("id", "docs.parallelFlow")) .execute("research", research, Map.of("reads", List.of("topicText"), "writes", List.of("researchResult", "factList"))) .execute("audience", audience, Map.of("reads", List.of("topicText"), "writes", List.of("audienceResult", "audienceAngle"))) .execute("join", join, Map.of("reads", List.of("factList", "audienceAngle"), "writes", List.of("joinResult", "briefText"))) .returns(Map.of("briefText", "briefText"));
A linear refinement pipeline makes each dependency explicit.
javaAxFlow refineFlow = Ax.flow(Map.of("id", "docs.refineFlow")) .execute("draft", draft, Map.of("reads", List.of("topicText"), "writes", List.of("draftResult", "draftText"))) .execute("critique", critique, Map.of("reads", List.of("draftText"), "writes", List.of("critiqueResult", "critiqueText"))) .execute("revise", revise, Map.of("reads", List.of("draftText", "critiqueText"), "writes", List.of("reviseResult", "revisedText"))) .returns(Map.of("revisedText", "revisedText"));
Forward accepts the provider client and the public flow inputs.
javavar output = parallelFlow.forward(client, Map.of("topicText", "Typed LLM workflows"));
Start from the complete programs under examples/, then browse the larger gallery at https://axllm.dev/java/subsystems/flow/.
Ax.flow, 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.