con un clic
vendor-risk
// Paste a vendor's domain. Get a security risk assessment in 60 seconds.
// Paste a vendor's domain. Get a security risk assessment in 60 seconds.
Connect to a GCP project, validate credentials, and discover what services are in use.
Run SOC 2 compliance checks against connected cloud accounts (AWS, Azure, and/or GCP) and display findings.
Deep code scan for AI security issues — prompt injection, PII in prompts, hardcoded keys, unguarded agents.
Run AI governance checks across cloud accounts and code repos — ISO 42001, EU AI Act, NIST AI RMF compliance.
Scan cloud accounts and GitHub repos to discover AI/ML services and build an AI system inventory.
Walk staged changes against the engineering principles checklist and report pass/fail per principle. Run before any non-trivial commit. Catches doc drift, stub functions, single-region defaults, missing framework mappings, and other regressions before they ship.
| name | vendor-risk |
| description | Paste a vendor's domain. Get a security risk assessment in 60 seconds. |
| user-invocable | true |
You are running a third-party vendor risk assessment for a semi-technical founder. Explain findings in plain English. Be direct about risks.
Read shasta.config.json for python_cmd and optionally hibp_api_key. Use that for all commands (shown as <PYTHON_CMD>).
If the user hasn't provided a domain, ask for it. Examples: "stripe.com", "okta.com", "notion.so".
Optionally, ask:
<PYTHON_CMD> -c "
from rainier.db import RainierDB
db = RainierDB(); db.initialize()
a = db.get_recent_assessment('<DOMAIN>', max_age_hours=24)
if a:
print(f'RECENT|{a.id}|{a.completed_at}|{a.risk_grade.value}|{a.risk_score}')
else:
print('NO_RECENT')
db.close()
"
If a recent assessment exists, show the score and ask if they want to reuse it or re-scan.
<PYTHON_CMD> -c "
import json
from rainier.scanner import scan_vendor
from rainier.models import VendorTier
from rainier.db import RainierDB
from rainier.reports.vendor_report import save_vendor_report
assessment = scan_vendor(
'<DOMAIN>',
vendor_name='<NAME>',
tier=VendorTier.<TIER>,
hibp_api_key='<HIBP_KEY>',
)
db = RainierDB(); db.initialize()
# Create or update vendor record
from rainier.models import Vendor
from datetime import UTC, datetime
vendor = db.get_vendor('<DOMAIN>')
if not vendor:
vendor = Vendor(name='<NAME>', domain='<DOMAIN>', tier=VendorTier.<TIER>)
vendor.last_assessed = datetime.now(UTC)
vendor.risk_score = assessment.risk_score
vendor.risk_grade = assessment.risk_grade
assessment.vendor_id = vendor.id
db.save_vendor(vendor)
db.save_assessment(assessment)
report_path = save_vendor_report(assessment, vendor)
print(json.dumps({
'grade': assessment.risk_grade.value,
'score': assessment.risk_score,
'signals': assessment.signal_scores,
'findings_count': len(assessment.findings),
'summary': assessment.summary,
'report': str(report_path),
}, indent=2))
db.close()
"
Show results like a security consultant briefing:
To list all assessed vendors:
<PYTHON_CMD> -c "
import json
from rainier.db import RainierDB
db = RainierDB(); db.initialize()
vendors = db.list_vendors()
for v in vendors:
grade = v.risk_grade.value if v.risk_grade else '?'
score = v.risk_score if v.risk_score else '?'
print(f'{v.domain} | {v.name} | {v.tier.value} | {grade} ({score})')
db.close()
"