CtrlK
BlogDocsLog inGet started
Tessl Logo

ax-java-ai

Use when writing Java code with `dev.axllm:ax` for named deployment profiles, generic provider clients, model selection, OpenAI-compatible calls, Responses, Gemini, Anthropic, routers, and balancers.

55

Quality

69%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide
SecuritybySnyk

Passed

No findings from the security scan

Fix and improve this skill with Tessl

tessl review fix ./packages/java/skills/ax-java-ai/SKILL.md
SKILL.md
Quality
Evals
Security

Quality

Content

50%Weight 40%Scale 1-5

Reviews the quality of instructions and guidance provided to agents. Good implementation is clear, handles edge cases, and produces reliable results.

The body is a well-sectioned, fact-dense policy reference with accurate, specific constraints and one runnable core pattern, but it is monolithic, light on executable Java examples, and padded with cross-language details irrelevant to a Java-focused skill. It reads as a solid middle-of-scale reference rather than a lean, action-oriented skill.

Suggestions

Trim cross-language parity notes (Python/Go/C++/Rust identifier spellings and five-language registration lists) to a single pointer to the shared docs, keeping the body Java-only.

Add a few copy-paste Java snippets for the most common tasks beyond the factory call — e.g., a named profile with a renewable credentialProvider, a retry config, and a two-route balancer setup — deferring the rest to examples/.

Split deep policy detail (Typesafe/Jev scoring rules, per-provider sampling rules, and the Astra session lifecycle) into one-level-deep reference files linked from SKILL.md so the main file stays an overview.

DimensionReasoningScore

Conciseness

The body avoids explaining concepts Claude already knows and is dense with package-specific facts, but it is noticeably overloaded: a Java skill carries cross-language parity notes ("Python, Go, and Java accept fileToText...; C++ exposes file_to_text, and Rust exposes with_file_to_text", five-language addChildAgent spellings, C++/Rust authorizer names), and long run-on policy sentences (the sampling and Anthropic/Gemini temperature rules) that could be tightened. It sits between anchor 3 and anchor 4 — efficient in tone but with substantial trimmable content — so 3 rather than 4.

3 / 5

Actionability

Concrete identifiers, defaults, and error messages are given throughout (Ax.ai, AxBalancerAdaptiveStrategy, retry statuses '500, 408, 429, 502, 503, 504 and 529', 'AxAIServiceTimeoutError'), but only one small runnable snippet exists ('var llm = Ax.ai("openai", java.util.Map.of(...))') for a very large API surface. Most sections are declarative policy ('Use X for Y', 'X fails before transport') rather than executable Java shapes, and the promised examples live outside the body. This is 'some concrete guidance but incomplete' (anchor 3) rather than 'concrete code with minor gaps' (anchor 4).

3 / 5

Workflow Clarity

There is no multi-step sequence anywhere: the body is a topic-organized policy catalog with decision rules ('Use the multi-service router when...', 'Opt into AxBalancerAdaptiveStrategy only for...') rather than ordered steps with checkpoints. The 'When To Use' list and per-section decision rules give partial direction, but no validation checkpoints or feedback loops are shown for fragile operations (e.g., no verify step around retries or credential callbacks). This matches anchor 3 (guidance present, sequence/checkpoints largely implicit); it is above anchor 2 because the decision rules are specific and coherent, and the no-validation cap does not apply since no destructive or batch operations are involved.

3 / 5

Progressive Disclosure

No bundle files exist (no references/, scripts/, or assets/), so the entire ~160-line policy catalog is inlined in SKILL.md, including deep detail that belongs in reference files (Typesafe scoring rules, per-provider sampling rules, the Astra session lifecycle). Section headers are clear and external materials are named ('API.md and axir-api.json', 'examples/'), which lifts it above anchor 2's 'minimal structure', but the inline-heavy monolithic body fits anchor 3 ('content that should be separate is inline') rather than anchor 4's appropriately split layout.

3 / 5

Total

12

/

20

Passed

Description

75%Weight 40%Scale 1-5

Based on the skill's description, can an agent find and select it at the right time? Clear, specific descriptions lead to better discovery.

A strong description that explicitly states both what the skill covers and when to use it, anchored by a concrete package name and language. It lists many capability areas, though as nouns rather than actions, and its trigger coverage relies on one gating condition plus provider names rather than a fuller set of natural trigger phrases.

Suggestions

Convert the capability-noun list into concrete action verbs, e.g., 'Creates provider clients, selects named deployment profiles, routes and balances requests across OpenAI, Gemini, and Anthropic deployments'.

Broaden natural trigger terms with synonyms users actually say, such as 'LLM provider', 'chat completions', 'failover', or 'streaming', to improve discovery.

Enumerate a couple of explicit trigger contexts after the 'Use when' clause (e.g., 'or when the user mentions Ax, deployment profiles, or provider failover in Java').

DimensionReasoningScore

Specificity

The description names the domain ("writing Java code with `dev.axllm:ax`") and lists several specific capability areas: "named deployment profiles, generic provider clients, model selection, OpenAI-compatible calls, Responses, Gemini, Anthropic, routers, and balancers". These are mostly capability nouns rather than concrete actions (compare anchor 5's 'extract text, fill forms, merge documents'), and coverage has minor gaps (e.g., retries, timeouts, Typesafe), matching anchor 4.

4 / 5

Completeness

Both parts are explicitly present: the 'when' is the leading clause "Use when writing Java code with `dev.axllm:ax`" and the 'what' is the enumerated feature list that follows. It matches anchor 4 ("Has both 'what' and 'when'; 'when' could be more explicit or specific") rather than anchor 5, because the trigger condition is a single gate (Java + the package) without enumerated trigger contexts like 'when the user mentions deployment profiles or failover'.

4 / 5

Trigger Term Quality

Natural terms users would actually say are present: "Java", "OpenAI", "Gemini", "Anthropic", "Responses", "routers", "balancers", "model selection". Common variations a user might say are missing — e.g., "LLM", "chat completions", "failover", "streaming" — so it fits anchor 4 (good coverage, a few natural terms missing) rather than anchor 5's comprehensive synonym coverage.

4 / 5

Distinctiveness Conflict Risk

The `dev.axllm:ax` package name plus the Java language constraint give it a clear, distinct niche unlikely to fire for unrelated skills. However, the bare provider names "OpenAI-compatible calls, Responses, Gemini, Anthropic" create minor overlap risk with generic provider-specific skills, matching anchor 4 ('mostly distinct; minor overlap risk with closely related skills') rather than anchor 5's minimal-conflict profile.

4 / 5

Total

16

/

20

Passed

Validation

93%

Checks the skill against the spec for correct structure and formatting. All validation checks must pass before discovery and implementation can be scored.

Validation — 15 / 16 Passed

Validation for skill structure

CriteriaDescriptionResult

frontmatter_unknown_keys

Unknown frontmatter key(s) found; consider removing or moving to metadata

Warning

Total

15

/

16

Passed

Repository
ax-llm/ax
Reviewed

Table of Contents

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.