Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add uqeu/estelle-cli --skill api-call-groundgit clone --depth 1 https://github.com/uqeu/estelle-cliWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/uqeu/estelle-cli/api-call-ground)<a href="https://agentmods.dev/skills/uqeu/estelle-cli/api-call-ground"><img src="https://agentmods.dev/badge/skills/uqeu/estelle-cli/api-call-ground/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/uqeu/estelle-cli/api-call-ground"><img src="https://agentmods.dev/badge/skills/uqeu/estelle-cli/api-call-ground.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00000 | $0.01242 |
| Opus 5.5 | $0.00000 | $0.00497 |
| Sonnet 5.5 | $0.00000 | $0.00248 |
| Haiku 4.5 | $0.00000 | $0.00124 |
Grade A, and why
api-call-ground scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 1mo ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 62 lines — stays where its author put it; the contents beside it link to each section on GitHub.
api-call-ground
Estelle's tool-grounding skill — it grounds each TOOL/API CALL before it is emitted, not the finished code. A
model connected to tools hallucinates callees and argument shapes the way it hallucinates repo symbols; Gorilla
(Patil et al., UC Berkeley, arXiv:2305.15334) fixed that by resolving every proposed call against a real API
database instead of trusting the model. Estelle already owns that ground truth: the CodeGraph
(conveyor/code_graph.py) knows definition_sites, files_defining, and references for repo tools and the
exact signatures(name) (Signature = name, max_positional, accepted_kwargs) of each callable; the arity
gate arity_violations and GroundingReport (agent/grounding.py) already flag a call with too many
positionals or an unknown keyword; and third_party_violations / installed_symbol_resolver
(agent/third_party.py) catch an invented library method like requests.fetch. This skill wires those into a
pre-emission check on the CALL itself.
When to run
Whenever the model is about to emit a tool call, function call, or API invocation — an agent step, an MCP tool use, a generated client call — and before that call is dispatched or committed. Especially when the callee or its arguments came from the model rather than a typed schema you already trust.
Procedure
- Resolve the callee against real definitions. Pull the proposed call out (
extract_code_blockinagent/patching.pywhen it's embedded in a block), then look the callee up:files_defining(name)/definition_sites(name)for a repo tool, orinstalled_symbol_resolverfor a third-party library. A callee the graph never defines is a hallucinated tool — Gorilla's exact failure mode — so flag or abstain, never emit. - Fetch the real signature.
CodeGraph.signatures(name)returns the callable'sSignature(s). When there's exactly one, the argument shape is unambiguous ground truth; when there are several (overloaded name) the gate stays conservative and won't false-alarm — the same no-false-alarm rule the grounding gate keeps. - AST-match every argument to the parameter list. Run
arity_violationsover the proposed call against thatSignature: too many positionals → "takes at most N positional argument(s)"; an unknown keyword → "got an unexpected keyword argument". This is the arity half of the grounding gate applied to a call before it goes out, not after code is written. - Ground third-party and library calls too. For a call into
requests/json/os/etc, runthird_party_violations(viainstalled_symbol_resolverover theSAFE_MODULESallowlist) so an invented method is caught with the same flag-or-abstain shape — a hallucinated library API is treated exactly like a hallucinated repo tool, and a non-allowlisted module is skipped rather than guessed at. - Assemble one reproducible verdict. Collect the results into a
GroundingReport—.ungrounded(unknown callees),.arity_errors(bad argument shapes),.third_party(invented library methods), and.is_grounded— the same structurePOST /verifyreturns as{grounded, ungrounded, arity_errors}. The call plan's groundedness is now a first-class signal, not a vibe. - Abstain or repair on an ungrounded call. If
is_groundedis false, do not emit. Either abstain (say the tool/signature doesn't exist plainly) or run oneground_report_and_repairround to rewrite the call using only real signatures — a grounded call costs zero model calls, only a flagged one pays for a repair. - Suggest the real neighbor when a call is close-but-wrong. When the callee is a near miss,
related_symbols,locate, andreferencessurface the tool the model probably meant, so the repair round has the real API in front of it instead of guessing again. - Gate the whole plan. Feed the call-plan findings into
_gate_verdict(serve/api.py) so an ungrounded or wrong-arity call is an error-severity blocker and the plan doesn't merge or execute until every call resolves. This is what makes it distinct fromgrounded-generate(best-of-N + self-test filtering over generated CODE): here the unit of grounding is each individual tool/API CALL, checked before emission.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 1mo ago First seen · 62 lines · 0 tokens per session scan A b0d669f0618f
api-call-ground is a skill published in the GitHub repository uqeu/estelle-cli (0 stars, last pushed 14d ago), licensed Apache-2.0. It costs nothing until one of its globs matches a file; then it loads 1,242 tokens. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-12.
Other skills, from other repositories
cocosearch-review-pr
Use when reviewing a GitHub PR or GitLab MR by URL. Fetches diff and metadata via API, then uses CocoSearch for blast radius analysis, dependency impact, pattern consistency, and test coverage assessment. Read-only by default; optionally pushes findings back as inline PR/MR comments after your confirmation.
find-simplifications
Use for a periodic repo-wide sweep of qwen-code for accumulated excess surface — dead components and files, orphaned locale keys, exports nothing consumes, added-then-removed scaffolding — filing candidates on a tracking issue and landing only what a maintainer has said yes to. Repo-wide and evidence-first; every…
swarm-pr-review
Run a graph-guided, tool-augmented PR review using context packing, parallel exploration, mandatory repository-agnostic risk-family coverage with dispatch scaled to diff size and risk, independent reviewer validation, critic challenge, and metrics writeback. Use for deep pull request review with low false-positive…
code-review
You are a senior code reviewer. You receive diffs via stdin.
include-test-files-that-assert-on-behavior-being-changed-in-decl
When delegating a task affected by this skill, include.
review
Adversarial fresh-context review and risk check of an increment before it ships; every finding cites path:line and is re-verified. Use for "review", "qa", "quality check", "critique this".