> Use when the user has a results draft or a set of data-backed claims and wants each one adversarially verified against the underlying dataset before publishing — a pre-publication red-team of the findings. Extracts the discrete checkable claims from the draft, reproduces each claim's number against the data, stress-tests it against the threats most likely to kill it (outliers, confounds, Simpson's reversals, tiny subgroups, alternative specifications), and marks it verified, fragile, or refuted; fragile and refuted claims are revised — hedged, scoped, or retracted — until every claim is verified or appropriately qualified. The result is a draft where every surviving claim has been reproduced and survived a stress test. Not for open-ended discovery of new findings over a dataset (that is a data-analysis task), and not for diagnosing a single known anomaly or pipeline failure — this is a gate over an existing draft.
npx skills add https://github.com/gaasher/Agent-Loop-Skills --skill claim-verify
A claim-by-claim adversarial verification loop over a results draft. The artifact is the draft;
the feedback signal is the count of unverified claims — claims not yet checked, or checked but not
yet survived a stress test. You drive it to zero: each claim ends verified (reproduces and
survives the obvious threats) or appropriately qualified (hedged, scoped, or retracted with the
reason).
The discipline: a number that merely reproduces is not trustworthy — most wrong findings reproduce
fine. A claim is verified only when it also survives the threat most likely to kill it: an
outlier, a confound, a subgroup too small to mean anything, a sign that flips under stratification.
This loop is a *gate on an existing draft*, not a generator of new findings.
Use this when you have a draft (or a list of claims) drawn from a dataset and want each claim
red-teamed before it goes out. Default to verifying every discrete claim in the draft; if the user
flags a few high-stakes claims, prioritize those but still sweep the rest. Not for open-ended
discovery of new findings (that is the data-analysis loop) and not for diagnosing one known anomaly.
Resolve bindings interactively. If loop.run.yaml exists in the working dir, load it, confirm the
values in one line, and skip to the loop. Otherwise: on Claude Code (the AskUserQuestion tool is
available) infer a likely value for each binding and present it as the recommended option; on other
hosts ask each as a quoted plain-text prompt. Then write loop.run.yaml (format:
examples/run.example.yaml) and confirm the values before creating any other files.
| binding | meaning | default | how to infer |
|---|---|---|---|
| <draft> | results/claims document to verify (markdown/text) | — | scan the working dir for a results/report file |
| <dataset> | data the claims were drawn from; read-only ground truth | — | scan the working dir for the data file |
| <analysis_cmd> | interpreter that runs check snippets in the user's env | python3 | pyproject.toml/.venv/uv in the working dir |
| <report> | the verified/revised draft this loop produces | <sandbox_root>/verified.md | — |
| <sandbox_root> | where check snippets + ledger live | ./sandbox | — |
| <budget> | max iterations | 10 | — |
Check snippets run in the user's environment via <analysis_cmd>, so they may use whatever the
user has installed. Keep helper code stdlib-first (csv, statistics): if a snippet needs
pandas/numpy, probe with try/except ImportError and degrade to a stdlib path, or offer a
consented uv pip install "pandas==<ver>" — never assume the package is installed.
Copy this checklist and tick items off:
<draft>; record nothing as verified.<dataset>; if it does not reproduce → refuted.verified / fragile.<report>: keep verified, hedge/scope/retract fragile, correct refuted.<budget>.Iteration 0 — extract claims. Read <draft> and list its discrete, checkable claims, each with
the number/effect it asserts and its claim type (a group difference, a correlation, a
causal/policy claim, a subgroup result, a rate). These are the live unverified set. If the draft is
prose, splitting it into discrete claims is the first job.
Then, until stop (all claims resolved, or budget):
<sandbox_root>/iter<N>/check.py to recompute the exactstatistic the claim states from <dataset>. Run it with <analysis_cmd>, redirecting output to
<sandbox_root>/iter<N>/out.txt (never flood your context). If the number does not reproduce →
refuted (the number is wrong); skip to step 4.
for its claim type:
effect survive, or was it driven by a handful of rows?
within strata, or flip? A causal/policy claim that reverses within subgroups is not supported.
comparisons? A striking rate on n=5 is noise.
covariate). Does the sign/size stay?
Classify: verified (reproduces and survives) or fragile (reproduces but collapses or flips
under a reasonable stress). A claim whose **number reproduces but whose implied interpretation is
not supported** — a descriptive gap dressed up as causal ("treatment works"), a tiny-n rate sold as
"superior", a one-point correlation called an "early-warning signal" — is fragile, not
verified: the statistic is fine, the conclusion drawn from it is not.
<report>:higher, but the within-stratum comparison reverses — not evidence the treatment causes
recovery"), or retract it. Never leave a fragile claim standing as first written.
Record the verdict and the evidence.
<sandbox_root>/ledger.tsv, tab-separated, never commas in the text. Header:
iter claim verdict threat resolution
verdict ∈ {extract, verified, fragile, refuted}. Example:
iter claim verdict threat resolution
0 claims extracted extract - 7 claims listed
1 treatment recovery rate > control (70.6 vs 55.0) verified reproduced; holds kept
2 treatment causes higher recovery (+16pp) fragile Simpson: control >= treatment within both age groups rescoped to descriptive; causal claim retracted
3 biomarker correlates with recovery_days (r=0.16) fragile one outlier drives it (r=0.16 -> 0.02 without it) retracted
5 pilot site 100% recovery (superior) fragile n=5 subgroup hedged: too small to conclude
Report the outcome: the <report> path, the per-claim verdicts, and a summary — how many claims
were verified, hedged, or retracted, and the single most important fragility found.
survive the threat most likely to kill it. Skipping the stress test is the failure mode this loop
exists to prevent.
<report>; no claim is waved through orcondemned on intuition.
it, because leaving it as first written is exactly what shipped the unverified draft.
"treatment causes recovery" is refuted by a confound; say exactly what the data supports.
<dataset> — never modify it, because it is the ground truth every claim is checkedagainst. The sandbox is self-contained (no ../ escapes).
<budget>.<budget> iterations reached.Analyze git repositories to build a security ownership topology (people-to-file), compute bus factor and sensitive-code ownership, and export CSV/JSON for graph databases and visualization. Use when the user explicitly wants a security-oriented ownership or bus-factor analysis grounded in git history (for example: orphaned sensitive code, security maintainers, CODEOWNERS reality checks for risk, sensitive hotspots, or ownership clusters). Do NOT use for general maintainer lists, non-security ownership questions, or threat modeling (use security-threat-model).
> MixPanel analytics tracking implementation and review Skill for Django4Lyfe optimo_analytics module. Implements new events following established patterns and reviews implementations for PII protection, schema design, and code quality.
Hunting skill for csrf vulnerabilities. Built from 15 public bug bounty reports including modern variants — SameSite=Lax sibling-subdomain bypass (Argo CD CVE-2024-22424), GraphQL mutations-via-GET (GitLab $3,370), framework-wide CSRF middleware disabled (Stripe Dashboard $5,000), path-traversal CSRF-token bypass (GitHub Enterprise CVE-2022-23732 $10k), Origin-omission bypass (TikTok $2,500), OAuth-state null-byte (Streamlabs), WebSocket CSRF / CSWSH (Coda), default-SameSite email-change → ATO (YoYo Games $400), social-account-link CSRF (HackerOne), JSON-CSRF via text/plain on email-change (TikTok $500). Use when hunting modern CSRF — heavy emphasis on chain-to-ATO patterns.
Pre-screen analysis outputs (tables, figures, logs) built on restricted or confidential data for statistical-disclosure-limitation problems before any release. Scans for small cell counts, complementary-suppression gaps, dominance (p-percent / (n,k)), re-identifiable exact counts, PII leakage, and unrounded sensitive statistics; classifies each finding CRITICAL / WARNING / OK and gates on any CRITICAL. Use before depositing or sharing restricted-data results, or when the user says "disclosure check", "SDL scan", "is this output safe to release", "check for small cells", "disclosure avoidance", "pre-screen for the RDC", or "can I export this from the enclave".
Declarative OpenTelemetry-aligned telemetry vocabulary and instrumentation conventions for traces, metrics, logs, and PII handling
| This skill provides comprehensive guidance for SAP Cloud Logging service on SAP BTP. Use when setting up Cloud Logging instances, configuring log ingestion from Cloud Foundry or Kyma runtimes, implementing OpenTelemetry observability, analyzing logs/metrics/traces in OpenSearch Dashboards, configuring SAML authentication, managing certificates, or troubleshooting ingestion issues. Covers service plans (dev/standard/large), all 4 instance creation methods (BTP Cockpit, CF CLI, BTP CLI, Service Operator), all 4 ingestion methods (Cloud Foundry, Kyma, OpenTelemetry, JSON API), and security best practices.
> Patterns and best practices for integrating ROS2 systems with web technologies including REST APIs, WebSocket bridges, and browser-based robot interfaces. Use this skill when building web dashboards for robots, streaming camera feeds to browsers, exposing ROS2 services as REST endpoints, or implementing bidirectional WebSocket communication between web UIs and ROS2 nodes. Trigger whenever the user mentions rosbridge, rosbridge_suite, roslibjs, FastAPI with ROS2, Flask with rclpy, WebSocket for robot telemetry, MJPEG streaming, WebRTC for robots, REST API wrapping ROS2 services, web-based robot control, browser robot interface, robot dashboard, CORS configuration for robots, or any web-to-ROS2 bridge pattern. Also trigger for authentication on robot web interfaces, rate limiting sensor streams, video streaming from robot cameras to browsers, or running async web frameworks alongside the ROS2 executor. Covers rosbridge_suite, FastAPI, Flask, WebSocket, and WebRTC approaches.
Security review checklist for construction software systems. Use when building integrations, APIs, data pipelines, or dashboards for construction projects.
Take gaasher/claim-verify from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.
The instructions reference pip, uv.
Without those the skill loads but fails at the first command.