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 change-impactgit 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/change-impact)<a href="https://agentmods.dev/skills/uqeu/estelle-cli/change-impact"><img src="https://agentmods.dev/badge/skills/uqeu/estelle-cli/change-impact/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/change-impact"><img src="https://agentmods.dev/badge/skills/uqeu/estelle-cli/change-impact.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.01404 |
| Opus 5.5 | $0.00000 | $0.00562 |
| Sonnet 5.5 | $0.00000 | $0.00281 |
| Haiku 4.5 | $0.00000 | $0.00140 |
Grade A, and why
change-impact 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 — 73 lines — stays where its author put it; the contents beside it link to each section on GitHub.
change-impact
Estelle's cross-cutting-change skill, and a direct answer to Sourcegraph's flagship demo (a batch change that
touched "31 files across 7 layers a naive agent missed"). Finding those files is the easy half — a structural
graph does it deterministically. This playbook runs that half over the CUSTOMER's whole-repo RepoSurface /
CodeGraph (a Sweep of their code, not Estelle's package), then adds the half a find-the-files tool
structurally cannot: verification. It doesn't just list the sites — it certifies that the proposed edit
references only symbols that actually exist and type-checks, using the same deterministic grounding gate that
earns "zero hallucinated APIs on your own codebase". Sourcegraph finds; Estelle finds and verifies.
The whole capability is pure and reproducible — same graph → same map — and is exposed directly as
change_impact(graph, target, *, changed_symbols=()) -> ImpactReport in conveyor/change_impact.py, composed
with the grounding gate by the POST /impact endpoint.
When to run
Before any change that could ripple beyond the file you're editing: renaming or retyping a model field,
changing a function signature, deleting a symbol, a framework/library bump, or a batch codemod across the repo.
Run it first to size the blast radius and to catch the layer you'd otherwise forget (the migration, the
tests, the serializer), and run /impact verification on the drafted edit before it lands so a hallucinated API
never reaches review.
Procedure
- Build the code graph of the customer's repo. Sweep their repository into a
CodeGraph/RepoSurface(build_repo_surfaceover the Sweep's(path, content)files) so the fan-out in step 3 rides their real import edges and symbol definitions — resolved Python dotted imports and JS/TS relative imports — not assumed ones. This is the ground truth a chunk-RAG index cannot provide. - Name the change precisely. The
targetis the changed symbol or file;changed_symbolsnarrows the fan-out to the specific fields/methods that moved. For "I changed fieldtotalon classOrder", passchange_impact(graph, "Order", changed_symbols=("total",))— the class gives the origin file for the import closure, the field drives the reference fan-out. - Fan out to EVERY affected site (nothing missed). Union three deterministic graph queries, deduped by
file: the definition sites (
definition_sites— the change's own home,file:line); every direct reference (references— repo-wide find-usages, instant where grep is noisy); and the transitive importer closure (blast_radius— every file that transitively imports an origin file, the reverse-import closure that answers "what could break?"). Each site carries WHY it's in the set (defines / references / transitively imports). - Group the sites into stack layers. Cluster the affected files by
subsystemsplus a deterministic path/name heuristic into the layers a cross-cutting change commonly spans — model, data-access/store, api/dto, auth/middleware, routes/frontend, migration, audit/logging, tests — so the map reads top-down through the stack instead of as a flat file list. Rank the load-bearing layers withbetweenness_centrality/central_fileswhen you need to know which hop is riskiest. - Flag the layers this change FORGOT. When the change touches a core-data layer (model or store) but
leaves a companion layer untouched — no migration, no updated tests — surface it in
commonly_missed. This is the "did you forget the migration?" signal: the exact class of miss a naive per-file search silently ships, and the reason a graph beats grep here. - VERIFY the proposed edit — the beat. Send the drafted cross-cutting change through
/impact, which reuses the deterministic grounding + TYPE gate (check_grounding): it flags any symbol the edit references that the repo doesn't define (ungrounded— a hallucinated API), any call with the wrong arity (arity_errors), and any attribute/argument that contradicts the repo's own types (type_errors). A find-the-files tool would list your inventedOrder.recompute_totals()right next to the real methods; the gate refuses it. Certification, not a suggestion. - Route the model by task. Producing the human-readable change plan from the report is a
classify/chatjob, somodel_router.route("classify", tokens=…)returns the CHEAP tier; drafting the actual cross-cutting edit is anarchitecttask, soroute("architect", needs_reasoning=True)returns FRONTIER.Route.reasonkeeps the choice auditable. The verify step costs zero model calls when the edit is clean. - Emit the map and gate the edit into the loop. Return the
ImpactReport— target, total sites, the ordered per-layer breakdown withfile:linesites and thewhy, andcommonly_missed— then require the proposed change to clear the grounding gate (and the merge gate + test suite) before it lands. File wide-radius changes asrun_autonomyswarm tasks, ceiling-gated, one worktree per affected subsystem.
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 · 73 lines · 0 tokens per session scan A e14519b86750
change-impact 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,404 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".