Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Queries the NCATS Translator ARAX production API for bounded, typed, provenance-rich one-hop and endpoint-pinned two-hop biomedical knowledge-graph relationships. Use for Biolink-constrained RTX-KG2 lookup, explicit selected-provider ARAX federation, separate entity normalization, qualifier-aware graph traversal, and inspection of TRAPI edge bindings, publications, and knowledge-source provenance. Do not use for inference, ranking, open-ended pathfinding, clinical guidance, or sensitive queries.
.claude/skills/k-dense-ai-ncats-arax/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-06 | ✗→✓ | ▲ Improved | -11% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 52% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 6% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 43% | 0% |
| case-08 | ✗→✓ | ▲ Improved | -27% | 0% |
Use ARAX as a constrained knowledge-graph lookup service. Submit reviewed CURIEs and explicit Biolink types, preserve the exact TRAPI exchange, inspect query-edge bindings and provenance, and treat every returned path as a candidate for subsequent verification.
Read query-contract.md before constructing a query. Read output-schema.md when interpreting saved artifacts, warnings, provenance, or partial results.
caller metadata even when store=false is requested.
programs, or proprietary target hypotheses.
exists.
failure or empty result.
summary.json for bounded bindings and provenance and response.json for the exactTRAPI payload.
Check the production OpenAPI without making a biomedical query:
bashpython skills/ncats-arax/scripts/arax_client.py preflight
The client verifies that the service identifies itself as ARAX, exposes /query, and reports a supported TRAPI version. A nonproduction endpoint or untested TRAPI series requires an explicit override; neither override changes the fixed query shapes or operations.
Normalization is review-only and never triggers a graph query:
bashpython skills/ncats-arax/scripts/arax_client.py normalize "primary myelofibrosis" \ --expected-category biolink:Disease \ --max-synonyms 10 \ --acknowledge-public-query \ --output-dir outputs/normalize-myelofibrosis
Review the canonical identifier, name, category, and synonym preview before using a CURIE. Report all CURIEs and categories regardless of query outcome. A category warning or zero result is a reason to curate the identifier, not to chain automatically to /query.
Pin at least one endpoint and type both nodes:
bashpython skills/ncats-arax/scripts/arax_client.py one-hop \ --subject-id CHEBI:31690 \ --subject-category biolink:SmallMolecule \ --predicate biolink:affects \ --object-id NCBIGene:25 \ --object-category biolink:Gene \ --qualifier biolink:object_aspect_qualifier=activity_or_abundance \ --qualifier biolink:object_direction_qualifier=decreased \ --acknowledge-public-query \ --output-dir outputs/imatinib-abl1
Lookup mode is the default and fixes expansion to infores:rtx-kg2. It defaults to 20 results. Use --result-limit N to request 1-50 results; 50 is the hard cap in either mode.
Use exactly one typed, unpinned intermediate node:
bashpython skills/ncats-arax/scripts/arax_client.py two-hop \ --subject-id CHEBI:66901 \ --subject-category biolink:SmallMolecule \ --predicate-1 biolink:affects \ --intermediate-category biolink:Gene \ --predicate-2 biolink:associated_with \ --object-id MONDO:0009061 \ --object-category biolink:Disease \ --qualifier-1 biolink:object_aspect_qualifier=activity_or_abundance \ --qualifier-1 biolink:object_direction_qualifier=increased \ --expand-order right-first \ --acknowledge-public-query \ --output-dir outputs/ivacaftor-cystic-fibrosis
Right-first expansion is the default. If an empty result merits another attempt, run a new query explicitly with --expand-order left-first and keep the runs separate.
Federation is explicit and accepts two to five named providers:
bashpython skills/ncats-arax/scripts/arax_client.py one-hop \ --subject-id CHEBI:31690 \ --subject-category biolink:SmallMolecule \ --predicate biolink:affects \ --object-id NCBIGene:25 \ --object-category biolink:Gene \ --mode federated \ --kp infores:rtx-kg2 \ --kp infores:molepro \ --acknowledge-public-query \ --output-dir outputs/federated-imatinib-abl1
Federation defaults to the hard maximum of 50 results. Provider errors may coexist with useful results; such a run exits 7 after retaining its artifacts and is marked partial.
Rebuild a bounded summary without network access:
bashpython skills/ncats-arax/scripts/arax_client.py summarize \ --request outputs/ivacaftor-cystic-fibrosis/request.json \ --response outputs/ivacaftor-cystic-fibrosis/response.json \ --format text
The inspector accepts only the same constrained request shapes and fixed operations that the live commands generate. Use --format json for the normalized view on standard output.
Returned predicates or qualifier aspects may be more specific than the query constraint.
and source-record URL fields.
publication_availability: not_returned as missing metadata, not evidence that nopublications exist.
partial, unfamiliar, or scientifically surprising.
The client has no raw-query, workflow, operation, overlay, ranking, inference, link-prediction, Pathfinder, ARS, batch, all-provider, three-hop, cache, daemon, SDK, MCP, or natural-language-to-TRAPI surface. Do not work around those limits with direct HTTP calls under this skill.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-06 | fail→pass | 18,477 | 7,588 | -59% | 1 | 1 | 0% | 3,584 | 3,179 | -11% | 0 | 0 | — |
case-05 | fail→pass | 12,586 | 9,009 | -28% | 1 | 1 | 0% | 2,183 | 3,317 | +52% | 0 | 0 | — |
case-01 | fail→fail | 21,385 | 33,087 | +55% | 1 | 1 | 0% | 1,254 | 2,348 | +87% | 0 | 0 | — |
case-02 | fail→fail | 8,689 | 6,855 | -21% | 1 | 1 | 0% | 646 | 2,434 | +277% | 0 | 0 | — |
case-03 | pass→fail | 15,144 | 6,430 | -58% | 1 | 1 | 0% | 1,871 | 2,235 | +19% | 0 | 0 | — |
case-04 | fail→pass | 15,985 | 5,699 | -64% | 1 | 1 | 0% | 2,686 | 2,842 | +6% | 0 | 0 | — |
case-07 | fail→pass | 11,491 | 2,873 | -75% | 1 | 1 | 0% | 1,626 | 2,333 | +43% | 0 | 0 | — |
case-08 | fail→pass | 21,029 | 6,207 | -70% | 1 | 1 | 0% | 3,856 | 2,802 | -27% | 0 | 0 | — |
case-09 | pass→pass | 14,800 | 7,637 | -48% | 1 | 1 | 0% | 2,210 | 3,092 | +40% | 0 | 0 | — |
case-10 | fail→pass | 13,250 | 2,471 | -81% | 1 | 1 | 0% | 2,038 | 2,159 | +6% | 0 | 0 | — |
case-11 | fail→pass | 33,205 | 2,336 | -93% | 1 | 1 | 0% | 2,765 | 2,191 | -21% | 0 | 0 | — |
case-12 | fail→pass | 21,886 | 2,515 | -89% | 1 | 1 | 0% | 1,375 | 2,162 | +57% | 0 | 0 | — |
case-13 | pass→pass | 10,899 | 7,060 | -35% | 1 | 1 | 0% | 1,727 | 2,937 | +70% | 0 | 0 | — |
case-14 | fail→pass | 13,380 | 2,141 | -84% | 1 | 1 | 0% | 2,228 | 2,123 | -5% | 0 | 0 | — |
case-15 | pass→pass | 12,716 | 10,940 | -14% | 1 | 1 | 0% | 1,878 | 3,573 | +90% | 0 | 0 | — |
case-16 | fail→pass | 16,175 | 4,189 | -74% | 1 | 1 | 0% | 3,315 | 2,626 | -21% | 0 | 0 | — |
case-17 | fail→pass | 19,359 | 2,173 | -89% | 1 | 1 | 0% | 3,269 | 2,237 | -32% | 0 | 0 | — |
case-18 | fail→pass | 15,437 | 3,373 | -78% | 1 | 1 | 0% | 2,446 | 2,395 | -2% | 0 | 0 | — |
case-19 | fail→pass | 13,329 | 4,582 | -66% | 1 | 1 | 0% | 2,098 | 2,533 | +21% | 0 | 0 | — |
case-20 | pass→pass | 14,558 | 11,596 | -20% | 1 | 1 | 0% | 2,259 | 3,682 | +63% | 0 | 0 | — |
case-21 | pass→pass | 8,608 | 6,136 | -29% | 1 | 1 | 0% | 1,264 | 2,849 | +125% | 0 | 0 | — |
case-22 | fail→pass | 18,772 | 5,728 | -69% | 1 | 1 | 0% | 2,670 | 2,934 | +10% | 0 | 0 | — |
case-23 | fail→pass | 13,535 | 3,041 | -78% | 1 | 1 | 0% | 2,392 | 2,324 | -3% | 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. 23 cases were attempted, and 18 counted toward the lift figure. The other 5 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 +61 percentage points is the difference between those two pass rates over the 18 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
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.