Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use when writing C++ code with `axllm` for string signatures, field descriptors, JSON schema output, validation, and typed tool argument shapes.
.claude/skills/ax-llm-ax-cpp-signature/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | -30% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 1% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 19% | 0% |
| case-04 | ✗→✓ | ▲ Improved | -4% | 0% |
| case-05 | ✗→✓ | ▲ Improved | -30% | 0% |
This skill helps an agent write C++ code with the generated Ax package axllm. Use the generated package API, examples, and manifests; do not import TypeScript-only APIs unless you are editing the TypeScript package.
axllm.API.md and axir-api.json.axir-capabilities.json.examples/.javascript-quickjs, python-pyodide.cpp#include "axllm/axllm.hpp" auto sig = axllm::s("question:string -> answer:string"); auto schema = axllm::to_json_schema(axllm::Core::get(sig, "outputs"));
Use the string form when field names and types are enough.
cppauto program = axllm::ax("questionText:string -> answerText:string");
A class field constrains the model to a known label set.
cppauto router = axllm::ax( "messageText:string -> routeClass:class \"support, sales, engineering\"");
C++ exposes the generated record surface for constrained fields.
cppauto party_type = axllm::Core::record_new( "FieldType", axllm::object({ {"name", "number"}, {"minimum", 1}, {"maximum", 12}, }));
Validate the native record, then render its output fields as JSON schema.
cppaxllm::Core::validate_signature(signature); auto schema = axllm::to_json_schema( axllm::Core::get(signature, "outputs"), "outputs");
Pass the native signature record directly into AxGen.
cppaxllm::AxGen program = axllm::ax(signature); auto output = program.forward(client, inputs);
Start from the complete programs under examples/, then browse the larger gallery at https://axllm.dev/cpp/subsystems/s/.
The typesafe provider supports required boolean and class outputs. Numeric bounds never define a Score rubric; numbers, freeform strings, optional outputs, arrays, nesting, media, tools, and sampling controls are rejected before transport.
Set provider trueThreshold (or true_threshold) to a finite value in 0,1], default 0.5. Boolean conversion uses noul >= threshold; this policy is local and never sent. Choice returns the selected label without a confidence cutoff.
Use boolean(true "Core task blocked", false "Routine request") and class label descriptions for criteria. Fluent describe_values / describeValues / DescribeValues keeps the same field value type. C++ uses valueDescriptions on its existing field descriptors. Other providers receive readable prompt and schema descriptions.
The separate native client exposes system_one / systemOne / SystemOne and list_models / listModels / ListModels. Native probabilities remain unchanged. Score returns a fractional zero-based rubric position: convert scales explicitly in application code. Entries may be text, structured JSON objects/arrays, or null. Choice allows 1–255 labels; Score requires 2–10 rubric levels. The service context limit covers state, questions, and criteria; Ax never truncates or pretends to count native tokens exactly.
Choice and Score probabilities must be finite values in 0,1], match the criteria keys, and sum to one within an inclusive 0.01 tolerance. Totals of 0.99 and 1.01 are accepted with an allowance for floating-point summation error. Ax preserves the returned probabilities without renormalizing them.
The default model is jev-latest. Use API keys or renewable credential callbacks, the shared HTTP transport, retry settings, timeout, and cancellation. Native model discovery is separate from configured Ax model aliases. Typed native answers retain question names; only TypeScript can infer literal question keys and Choice-label unions at compile time. Other languages use their native typed maps/records/enums.
Typesafe-only balancers propagate the output-schema requirement. Mixed pools retain ordinary prompts and select Typesafe only when the actual request already has a supported schema. Unsupported requests remain excluded during fallback and degradation. Typesafe has no token streaming; the provider returns one completed result through its stream interface.
Runnable signature, native criteria/scoring, and two-program hybrid examples are under src/examples/cpp/generation/. See https://axllm.dev/cpp/examples/generation/.
axllm::s, axllm::FieldType, axllm::AxSignatureaxllm::Tool, axllm::Toolprovider-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.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 11,614 | 5,183 | -55% | 1 | 1 | 0% | 2,459 | 1,733 | -30% | 0 | 0 | — |
case-02 | fail→pass | 10,945 | 7,245 | -34% | 1 | 1 | 0% | 2,502 | 2,530 | +1% | 0 | 0 | — |
case-03 | fail→pass | 8,142 | 5,968 | -27% | 1 | 1 | 0% | 1,759 | 2,101 | +19% | 0 | 0 | — |
case-04 | fail→pass | 6,005 | 1,892 | -68% | 1 | 1 | 0% | 1,160 | 1,112 | -4% | 0 | 0 | — |
case-05 | fail→pass | 10,397 | 3,332 | -68% | 1 | 1 | 0% | 1,908 | 1,331 | -30% | 0 | 0 | — |
case-06 | fail→pass | 8,872 | 2,921 | -67% | 1 | 1 | 0% | 1,559 | 1,389 | -11% | 0 | 0 | — |
case-07 | pass→pass | 6,985 | 3,361 | -52% | 1 | 1 | 0% | 1,403 | 1,572 | +12% | 0 | 0 | — |
case-08 | pass→pass | 12,865 | 4,472 | -65% | 1 | 1 | 0% | 2,275 | 1,617 | -29% | 0 | 0 | — |
case-14 | fail→pass | 4,029 | 1,378 | -66% | 1 | 1 | 0% | 792 | 994 | +26% | 0 | 0 | — |
case-09 | pass→pass | 6,919 | 2,413 | -65% | 1 | 1 | 0% | 1,180 | 1,222 | +4% | 0 | 0 | — |
case-10 | fail→pass | 11,126 | 5,764 | -48% | 1 | 1 | 0% | 1,905 | 1,870 | -2% | 0 | 0 | — |
case-11 | fail→pass | 9,912 | 2,134 | -78% | 1 | 1 | 0% | 1,708 | 1,119 | -34% | 0 | 0 | — |
case-12 | pass→pass | 10,846 | 3,050 | -72% | 1 | 1 | 0% | 1,876 | 1,243 | -34% | 0 | 0 | — |
case-13 | fail→pass | 14,922 | 1,326 | -91% | 1 | 1 | 0% | 1,393 | 943 | -32% | 0 | 0 | — |
case-15 | pass→pass | 5,585 | 2,131 | -62% | 1 | 1 | 0% | 1,088 | 1,181 | +9% | 0 | 0 | — |
case-16 | pass→pass | 9,136 | 1,988 | -78% | 1 | 1 | 0% | 1,880 | 1,135 | -40% | 0 | 0 | — |
case-17 | fail→pass | 8,421 | 1,453 | -83% | 1 | 1 | 0% | 1,674 | 958 | -43% | 0 | 0 | — |
case-18 | fail→pass | 6,647 | 1,694 | -75% | 1 | 1 | 0% | 1,279 | 1,064 | -17% | 0 | 0 | — |
case-19 | fail→pass | 7,830 | 1,919 | -75% | 1 | 1 | 0% | 1,388 | 1,113 | -20% | 0 | 0 | — |
case-20 | pass→pass | 15,411 | 8,337 | -46% | 1 | 1 | 0% | 3,064 | 2,231 | -27% | 0 | 0 | — |
case-21 | pass→pass | 13,094 | 8,197 | -37% | 1 | 1 | 0% | 2,637 | 2,338 | -11% | 0 | 0 | — |
case-22 | pass→pass | 8,345 | 5,210 | -38% | 1 | 1 | 0% | 1,781 | 1,655 | -7% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 21 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +59 percentage points is the difference between those two pass rates over the 21 comparable cases.
The publisher has shipped newer versions since this run, so these numbers describe v1, not the version currently listed.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.