Safety rating record · browse all ratings
onehumanbeing/esp32-iphone-agent
Score 78/100 — Good public signals · github · as of 2026-10-31 (check version rs-safety-checks-1.0)
Automated checks of public signals as of the date shown. Not a security audit, certification or endorsement, and not a statement about the people who maintain the project. Signals can be incomplete or out of date; each check shows its evidence and source so anyone can verify it.
Source record: https://github.com/onehumanbeing/esp32-iphone-agent · Rating page: https://www.rightshold.com/safety-ratings/onehumanbeing/esp32-iphone-agent · Machine form: /v1/ratings/browse/github/onehumanbeing/esp32-iphone-agent
Checks
- License present (OSI-approved) — Found (10/10): GitHub detects license MIT (OSI-approved).
- Security policy (SECURITY.md) — Found (8/8): Security policy at SECURITY.md.
- Known advisories in pinned dependencies (OSV) — Partly found (10/15): 28 pinned packages checked against OSV; 2 have at least one matching advisory (certifi@2026.7.22: GHSA-6q48-6c7w-9gw2, PYSEC-2026-4320; pillow@12.3.0: GHSA-22hg-r758-rrw9, GHSA-24rc-8hj2-v98c). An advisory match does not mean the project is exploitable.
- OpenSSF Scorecard — Not applicable: No published OpenSSF Scorecard result for this repository.
- Signed releases or build provenance — Not found (0/8): No signature, attestation or provenance signals in workflows or in the last 1 releases.
- Continuous integration present — Found (8/8): 1 CI configuration file(s), e.g. .github/workflows/ci.yml.
- Credential-pattern scan — Found (12/12): No credential patterns matched in 29 scanned files (root-level and one-deep text files (≤60, <200KB each) plus up to 15 workflow files at the default branch head); no credential-like file names.
- Pinned dependencies — Partly found (4/9): Lockfiles: server/uv.lock. GitHub Actions pinned to a commit SHA: 0/5. Automated update config: none found.
- Maintainer activity — Found (10/10): Last commit 2 day(s) before the check; 57 commits by 5 distinct author(s) in the prior 90 days.
- MCP: tool permissions, access scope and injection notes — Not applicable: Not identified as an MCP server, so MCP-specific checks do not apply.
Sealed ratings on record (1)
- 2026-10-31: score 78 (Good public signals), rs-safety-checks-1.0, rating fbf71e266e43c71c…, sealed at ledger entry 3764
Timeline
First rated: 2026-10-31. Ratings on record: 1. Recorded changes: 0. Last changed: never.
Drift: not_watched.
Diff since first scan
Not applicable: this rating is collected from registry metadata, not from scanned bytes. Its change record is the rating series above.
Directory claim
No claim recorded. No public directory record publishes this artifact's source address, so no claim stands against it. A claim binds through a directory record whose own published addresses name the artifact.
Claim through the directory of record (rs-directory-claim/1): POST /v1/profiles/{handle}/claim-challenge, then POST /v1/profiles/{handle}/claim with the signature the challenge names — RS-KYA L1 (key-bound) or above.
How this record counts
- The corpus is every artifact with a current rating: GitHub repositories under check version rs-safety-checks-1.0, and npm packages, PyPI packages, MCP servers and agent skills under rs-safety-checks-2.0. A skill's rating is its latest sealed resource-scan receipt, scored under the published skill check set — never a second scan. Counts are computed when the page is read, from the same records the rating pages and GET /v1/ratings read, so the total here and the total there are two reads of one corpus.
- Every rating shown is sealed on the public ledger as a safety.rating entry naming its score and rating hash. The seal named on each row is the latest entry for that artifact; earlier ratings stay on the ledger and in the record page's series. An entry can be read in full at its ledger entry URL.
- Search matches a case-insensitive substring of the artifact's name, id or area. Filters name a kind, a band, a drift state or a minimum score. Search and filters change which rows are shown — never any rating, seal or count of record.
- Ordering is mechanical, over sealed facts only: score (the sealed score, highest first), recent (the rating's as-of date, newest first), name (A to Z), or changes (recorded rating or byte changes, most first). Ties break by name, then kind, then id, so the order is total and stable from page to page. No ordering is sold, submitted or editorial, and no placement on this index is for sale.
- Drift is stated only where a drift watch exists: skill artifacts, whose ratings are resource scans — clean when every receipt names the same bytes, changed when the receipts name more than one version of the bytes or a drift event is sealed against the artifact. Registry-collected ratings (GitHub, npm, PyPI, MCP servers) carry no drift watch and read not_watched; their change record is the rating timeline, not a byte watch.
- The timeline counts what is on record: for registry-collected ratings, the first rating's date, how many ratings are recorded, and how many times the recorded rating changed (a new rating hash — a re-check cannot erase an earlier rating). For skills it counts recorded scans instead: first seen, scans on record, and how many times the scanned bytes changed.
- Diff-since-scan exists only for skill artifacts with more than one recorded version: it names the first and current byte hashes and the scan checks whose outcome differs between the earliest and the latest receipt. Registry-collected ratings have no byte diff — their collections are metadata, not bytes — and their record shows the rating series instead.
- The claim block records whether a directory claim stands for this artifact. A claim binds through the directory of record (rs-directory-claim/1): a public directory profile whose own published addresses name this artifact's source address, claimed by an account that proved control of the agent's key at RS-KYA L1 or above. A claim attests key control only — it changes no rating, seal or ordering here, and the claiming account is never named.
