stripe-operations — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited stripe-operations (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
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.
Use this skill for Stripe account access checks, CLI setup, read-only billing inspection, and carefully gated mutations.
sk_live_, sk_test_, pk_live_, pk_test_, rk_live_, rk_test_, or whsec_ before reporting. command -v stripe && stripe --version python3 - <<'PY'
from pathlib import Path
for p in [Path('/root/.hermes/.env'), Path('.env'), Path('.env.local')]:
if not p.exists():
continue
keys=[]
for line in p.read_text(errors='ignore').splitlines():
if '=' in line and line.split('=',1)[0].strip().startswith(('STRIPE_', 'NEXT_PUBLIC_STRIPE_')):
keys.append(line.split('=',1)[0].strip())
if keys:
print(str(p) + ': ' + ', '.join(sorted(keys)))
PY python3 - <<'PY'
import base64, json, urllib.request, urllib.error
from pathlib import Path
key = ''
for line in Path('/root/.hermes/.env').read_text(errors='ignore').splitlines():
if line.startswith('STRIPE_SECRET_KEY='):
key = line.split('=',1)[1].strip().strip('"').strip("'")
break
if not key or key.startswith('***') or key == '[REDACTED]':
print('stripe_secret_status=missing_or_redacted')
raise SystemExit
print('stripe_secret_status=present_' + ('live' if key.startswith('sk_live_') else 'test' if key.startswith('sk_test_') else 'unknown_mode'))
req = urllib.request.Request('https://api.stripe.com/v1/account')
req.add_header('Authorization', 'Basic ' + base64.b64encode((key + ':').encode()).decode())
try:
with urllib.request.urlopen(req, timeout=15) as r:
data = json.loads(r.read().decode())
safe = {k: data.get(k) for k in ['id','country','default_currency','business_type','charges_enabled','payouts_enabled','details_submitted']}
print(json.dumps(safe, sort_keys=True))
except urllib.error.HTTPError as e:
print('stripe_api_http_error=' + str(e.code))
PY/usr/share/keyrings, /usr/local/bin, or APT sources are read-only, install the official GitHub release binary under /root/.local/bin and verify SHA256.references/stripe-cli-install.md for the user-local, checksum-verified install recipe.For read-only CLI commands, pass STRIPE_API_KEY from the env without printing it:
STRIPE_API_KEY="$STRIPE_SECRET_KEY" stripe products list --limit 5
STRIPE_API_KEY="$STRIPE_SECRET_KEY" stripe prices list --limit 5
STRIPE_API_KEY="$STRIPE_SECRET_KEY" stripe customers list --limit 5
STRIPE_API_KEY="$STRIPE_SECRET_KEY" stripe subscriptions list --limit 5Notes:
--format json flag. If unknown flag: --format appears, rerun without it. Many API list commands still print JSON-like output by default.stripe login is optional when a valid API key is available for server-side read-only checks.Report concise, non-secret facts:
Avoid dumping raw customer, payment, invoice, or subscription data unless the user explicitly asks and the output is minimized/redacted.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.