# BotAppStore.com — Specialized Agent Templates & Verified SKILL.md Packs for Grok Bot > BotAppStore.com is the storefront and technical specification index for task-specialized Grok Bot agent templates and portable `SKILL.md` packs that execute inside your isolated `/workspace` Linux sandbox. > **Dual Runtime in Every Product:** every license key unlocks both (1) a 1-Click Grok Bot skill bundle (`https://x.ai/bot/...`) and (2) a standalone, deterministic, zero-dependency Python 3.10+ single-file CLI (`/runtime/*.py`, standard library only, no `pip install`, `--json` / `--markdown` output) that runs locally in Cursor, Claude Code, Windsurf, CI/CD pipelines (e.g. GitHub Actions), and any macOS/Linux/Windows terminal. - **Canonical Storefront:** https://botappstore.com/ - **Machine-Readable Catalog:** https://botappstore.com/llms.txt - **Full Catalog + Verbatim Sample Reports:** https://botappstore.com/llms-full.txt - **Sister Storefront:** https://coinloader.com/ - **Value Bundles (Multi-Bot Packs, one `wcl_...` key unlocks all included bots):** https://botappstore.com/#bundles — `devsecops-ai-security-pack` ($69 one-time · card / Apple Pay / Google Pay via Stripe); `physical-ai-manufacturing-pack` ($59 one-time · card / Apple Pay / Google Pay via Stripe); `founder-research-gtm-pack` ($59 one-time · card / Apple Pay / Google Pay via Stripe); `edgar-intelligence-pack` ($89 one-time · card / Apple Pay / Google Pay via Stripe) - **Free Flagship Utility (1-Click Install):** https://botappstore.com/bots/web-text-extractor.html (Direct Grok Bot import: https://x.ai/bot/k1oyHmw4iS4VBW1U8_3Ol) - **Paid Bot & Skill Security Auditor ($29 one-time · card / Apple Pay / Google Pay via Stripe, `sku: bot-skill-auditor`):** https://botappstore.com/bots/bot-skill-auditor.html (Checkout: https://botappstore.com/#card-bot-skill-auditor) - **Paid Company & Competitor Deep-Dive Analyst ($19 one-time · card / Apple Pay / Google Pay via Stripe, `sku: company-deep-dive`, Registry Name: *Corporate & Competitor OSINT Deep-Dive*):** https://botappstore.com/bots/company-deep-dive.html (Checkout: https://botappstore.com/#card-company-deep-dive) - **Paid SEC & Patent Watchdog Digest ($29 one-time · card / Apple Pay / Google Pay via Stripe, `sku: sec-patent-watchdog`, Registry Name: *SEC EDGAR & Patent Filing Watchdog*):** https://botappstore.com/bots/sec-patent-watchdog.html (Checkout: https://botappstore.com/#card-sec-patent-watchdog) - **Dependency Vulnerability Triage ($29 one-time · card / Apple Pay / Google Pay via Stripe, `sku: dependency-vuln-triage`, LIVE NOW):** https://botappstore.com/bots/dependency-vuln-triage.html - **Social Hub Publisher ($29 one-time · card / Apple Pay / Google Pay via Stripe, `sku: social-hub-publisher`, LIVE NOW):** https://botappstore.com/bots/social-hub-publisher.html - **Domain, TLS & Email Auth Infrastructure Hygiene Auditor ($19 one-time · card / Apple Pay / Google Pay via Stripe, `sku: domain-infra-hygiene`, LIVE NOW):** https://botappstore.com/bots/domain-infra-hygiene.html (Checkout: https://botappstore.com/#card-domain-infra-hygiene) - **Agent Council — Multi-Model Swarm Debate & Pair-Architect Collaborator ($39 one-time · card / Apple Pay / Google Pay via Stripe, `sku: agent-council`, LIVE NOW):** https://botappstore.com/bots/agent-council.html (Checkout: https://botappstore.com/#card-agent-council) - **MCP Server & Tool-Permission Security Auditor ($19 one-time · card / Apple Pay / Google Pay via Stripe, `sku: mcp-config-auditor`, LIVE NOW):** https://botappstore.com/bots/mcp-config-auditor.html (Checkout: https://botappstore.com/#card-mcp-config-auditor) - **3D Print Farm & Slicer Queue Ops ($29 one-time · card / Apple Pay / Google Pay via Stripe, `sku: print-farm-ops`, AVAILABLE NOW · PHASE 2 LIVE):** https://botappstore.com/bots/print-farm-ops.html (Checkout: https://botappstore.com/#card-print-farm-ops) - **Humanoid & Fleet Telemetry Inspector ($49 one-time · card / Apple Pay / Google Pay via Stripe, `sku: robotics-telemetry-inspector`, AVAILABLE NOW · PHASE 1 RELEASE):** https://botappstore.com/bots/robotics-telemetry-inspector.html (Checkout: https://botappstore.com/#card-robotics-telemetry-inspector) - **SEC EDGAR Supply Chain & Counterparty Mapper ($29 one-time · card / Apple Pay / Google Pay via Stripe, `sku: sec-supply-chain-mapper`, v1.1, LIVE NOW):** https://botappstore.com/bots/sec-supply-chain-mapper.html (Checkout: https://botappstore.com/#card-sec-supply-chain-mapper; runtime: https://botappstore.com/runtime/sec_supply_chain_mapper.py) - **Mill Cert Matcher ($39 one-time, `sku: mill-cert-matcher`, LIVE NOW - card / Apple Pay / Google Pay checkout):** https://botappstore.com/bots/mill-cert-matcher.html (Checkout: https://botappstore.com/#card-mill-cert-matcher; runtime: https://botappstore.com/runtime/mill_cert_matcher.py). Screening aid that flags issues for human review; not a legal, compliance, or material-certification determination. - **RFQ Flowdown Triage ($39 one-time, `sku: rfq-flowdown-triage`, LIVE NOW - card / Apple Pay / Google Pay checkout):** https://botappstore.com/bots/rfq-flowdown-triage.html (Checkout: https://botappstore.com/#card-rfq-flowdown-triage; runtime: https://botappstore.com/runtime/rfq_flowdown_triage.py). Screening aid that flags issues for human review; not a legal, export-control, or compliance determination. - **FAI Results Reconciler ($39 one-time, `sku: fai-results-reconciler`, LIVE NOW - card / Apple Pay / Google Pay checkout):** https://botappstore.com/bots/fai-results-reconciler.html (Checkout: https://botappstore.com/#card-fai-results-reconciler; runtime: https://botappstore.com/runtime/fai_results_reconciler.py). Screening aid that flags issues for human review; not a quality sign-off or AS9102 approval. - **Pinned Runtime Downloads:** https://botappstore.com/runtime/fai_results_reconciler.py (SHA-256 `0dbbd34d759005d0ded1ab8c65f49be5753f6931ca7873cdbccc3b159347b4d1`), https://botappstore.com/runtime/rfq_flowdown_triage.py (SHA-256 `7816812f6f329881e80da89d85c3299851037e44eb7e04dd80b1262f8d1e0c07`), https://botappstore.com/runtime/mill_cert_matcher.py (SHA-256 `19b875763d371177e96bdac76e6ace6224e236fc6263f51a3204390b83c205ef`), https://botappstore.com/runtime/robotics_telemetry_inspector.py (SHA-256 `aa45c09553b0c989a988c4f2375a7d9e596f338afa5f98969db09896eb6c6b17`), https://botappstore.com/runtime/print_farm_ops.py (SHA-256 `29edc5e8664be0b6823edc6ea985467fba83430f03d5781cd6fe341684abb669`), https://botappstore.com/runtime/mcp_config_auditor.py (SHA-256 `42cb3f145458844604c795a97ec8009365a218f20b4a441f6988edd93184c025`), https://botappstore.com/runtime/agent_council.py (SHA-256 `703d307e52c4e13df94e28554d16143a5286bf0af3ffe6d95431a5fa490284d7`), https://botappstore.com/runtime/domain_infra_hygiene.py (SHA-256 `73f7a04a48f55b6a9f0a733bdf4bba7cab2b9b6d245c0505567487585f0d1c14`), https://botappstore.com/runtime/bot_common.py (SHA-256 `d1941b61b95ca664e4c1286c3bf1918c00e976c2c1601199b19200257650e526`) - **Runtime download note:** `/runtime/` URLs are license-gated: send `X-License-Key: wcl_...` or `X-Agent-Key: wck_...` (unauthenticated requests get `401`). The served file carries a per-license watermark block (5 lines), so compare the `X-Canonical-SHA256` response header (or the SHA-256 after stripping the block) against the pins. Recommended: the setup skill installer (`/workspace/.wattcoin_license_check.py --sku --install-runtime ... --expected-sha256 `). `bot_common.py` has two pinned variants chosen by SKU: `d1941b61b95ca664e4c1286c3bf1918c00e976c2c1601199b19200257650e526` (legacy; served for `agent-council`, `dependency-vuln-triage`, `domain-infra-hygiene`, `mcp-config-auditor`, `print-farm-ops`, `robotics-telemetry-inspector`) and `dbbd8521357fedc348cf7dc102435d4412ea26487e08bf067038ba8c66c9bcd1` (current; every other BotAppStore SKU, including `sec-supply-chain-mapper`, `mill-cert-matcher`, `rfq-flowdown-triage` and `fai-results-reconciler`). - **Cloud Registry & License Endpoints:** https://www.wattcoin.org/api (`POST /v1/agents/register`, `POST /v1/agents/tasks/complete`, `GET /v1/agents/me`, `POST /v1/scrape`, `POST /v1/agents/license/stripe-checkout`, `GET /v1/agents/license/stripe-session/{session_id}`, `POST /v1/agents/license/claim`, `GET /v1/agents/license`) --- ## Live Agent Templates (Available Now — 15 Live Automations) ### 1. Web & API Text Extractor (Free Forever Utility) - **Status:** LIVE NOW - **Price:** $0 (Free Forever — 10 Cloud Extractions / UTC Day + Automatic Local Fallback) - **One-Click Grok Bot Import URL:** https://x.ai/bot/k1oyHmw4iS4VBW1U8_3Ol - **Included Skills:** `getting-started` + `web-extractor` - **What It Does:** 1. **Turn-1 Onboarding (`getting-started`):** Checks for `/workspace/.wattcoin_env` (`0600` permissions). If missing, registers an agent key (`wck_...`) via `POST https://www.wattcoin.org/api/v1/agents/register`, completes `onboarding_v1` and `starter_v1`, verifies `"initial_tasks_completed": true` via `GET /api/v1/agents/me`, and runs a test extraction against `https://example.com`. 2. **10/Day Free Cloud Text Extraction (`web-extractor`):** Calls `POST https://www.wattcoin.org/api/v1/scrape` with `{"url": "", "format": "text"}` and reports `X-Quota-Limit: 10`, `X-Quota-Remaining`, and `X-Quota-Reset` headers. 3. **Paid Modes Disclosure:** `format: "html"` and `format: "json"` are paid per-call modes on the registry; this free utility uses `format: "text"` (10/day free) and never invokes paid modes without explicit user confirmation. 4. **Automatic Local Sandbox Fallback:** When `X-Quota-Remaining: 0` or `HTTP 429` (`reason: "quota_exhausted"`), automatically falls back to local `curl -sL` + Python HTML-to-text parsing (`bs4` or stdlib `html.parser`) inside `/workspace`. - **Refusal Boundaries:** - Never claims headless-browser or client-side JavaScript SPA rendering on the static HTTP cloud endpoint (`requests.get` + BeautifulSoup, 15s timeout, 2 MB response cap). - Never prints or echoes `wck_...` API keys in chat output. - Rejects loopback (`127.0.0.0/8`, `::1`), RFC1918 private IPs (`10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16`), link-local, and cloud metadata (`169.254.169.254`) with `HTTP 400`. ### 2. Bot & Skill Security Auditor ($29 one-time · card / Apple Pay / Google Pay via Stripe — LIVE NOW) - **Status:** LIVE NOW - **SKU:** `bot-skill-auditor` - **Price:** $29.00 USD One-Time License (card / Apple Pay / Google Pay via Stripe) (includes up to **3 workspace-reset rebinds** across `/workspace` container resets) - **Product Page URL:** https://botappstore.com/bots/bot-skill-auditor.html - **Storefront Checkout URL:** https://botappstore.com/#card-bot-skill-auditor - **Included Skills:** `auditor-setup` + `bot-skill-auditor` - **Deliverable:** *See every network call, credential read, and shell command in a third-party skill, with line numbers, before you run it.* - **License Architecture:** 1. **Turn-1 Onboarding & License Binding (`auditor-setup`):** Installs two read-only Python helpers at `chmod 500` (`-r-x------`) in `/workspace` (`.wattcoin_license_check.py` and `.wattcoin_audit_prep.py`), registers/activates `/workspace/.wattcoin_env` (`chmod 600`), and binds the `wcl_<64-hex>` code via `POST https://www.wattcoin.org/api/v1/agents/license/claim`. 2. **Mandatory Pre-Flight License Gate (`bot-skill-auditor`):** Every audit run first executes `/usr/bin/python3 -I /workspace/.wattcoin_license_check.py` (`GET https://www.wattcoin.org/api/v1/agents/license?sku=bot-skill-auditor`) and requires `"sku_licensed": true`. - **5-Bucket Line-Cited Static Inspection:** - **Bucket 1:** Prompt, Confirmation & Auditor Bypass - **Bucket 2:** Secret, Filesystem, Self-Modification & Persistence Access - **Bucket 3:** Outbound Network, Exfiltration & MCP Connectors (including Combined Data-Path Analysis when secret reads and outbound network calls co-occur) - **Bucket 4:** Unverifiable Runtime Execution & Obfuscation (`curl | sh`, unpinned `npx`/`pip`, `eval`/`exec`, base64/hex/unicode escapes) - **Bucket 5:** Local Machine Escalation (`machineId`, `CopyToBox`, `CopyFromBox`, `request_smart_mode_approval`) - **What This Static Audit Does Not Catch:** - Dynamically fetched remote payloads whose server-side contents change after the audit - Multi-stage or delayed prompt-injection payloads returned at runtime by external APIs or MCP servers - Time-bombed or state-gated logic hidden inside undecodable runtime blobs (flagged as uninspected under Bucket 4) - Author identity, hosting-account compromise, or files beyond the 50-file / 100 KB per-file / 250 KB aggregate read caps - **Refusal & Non-Certification Boundaries:** - Never executes audited code, scripts, or embedded URLs - Never reads `/workspace/.wattcoin_env` into model context or echoes `wck_...` / `wcl_...` in chat - Never outputs a "Safe", "Pass", checkmark badge, or numeric security score — always prepends `SCOPE_NOTE.txt` verbatim ### 3. Company & Competitor Deep-Dive Analyst ($19 one-time · card / Apple Pay / Google Pay via Stripe — LIVE NOW) - **Status:** LIVE NOW - **SKU:** `company-deep-dive` - **Price:** $19.00 USD One-Time License (card / Apple Pay / Google Pay via Stripe) (includes up to **3 workspace-reset rebinds** across `/workspace` container resets) - **Alternate / Registry Name:** Corporate & Competitor OSINT Deep-Dive - **Product Page URL:** https://botappstore.com/bots/company-deep-dive.html - **Storefront Checkout URL:** https://botappstore.com/#card-company-deep-dive - **Included Skills:** `company-deep-dive-setup` + `company-deep-dive` - **Deliverable:** *Pull a 7-section primary-source corporate and competitor dossier—SEC EDGAR filings, patent disclosures, RDAP domain records, and a side-by-side competitor comparison matrix—with exact accession numbers and UTC retrieval timestamps.* - **License Architecture:** 1. **Turn-1 Onboarding & License Binding (`company-deep-dive-setup`):** Installs two read-only Python stdlib helpers at `chmod 500` (`-r-x------`) in `/workspace` (`.wattcoin_license_check.py` and `.wattcoin_dd_fetch.py`), registers/activates `/workspace/.wattcoin_env` (`chmod 600`), and binds the `wcl_<64-hex>` code via stdin (`POST https://www.wattcoin.org/api/v1/agents/license/claim` with `sku: "company-deep-dive"`). 2. **Mandatory Pre-Flight License Gate (`company-deep-dive`):** Every dossier run first executes `/usr/bin/python3 -I /workspace/.wattcoin_license_check.py` (`GET https://www.wattcoin.org/api/v1/agents/license?sku=company-deep-dive`) and requires `"sku_licensed": true`. - **7-Section Cited Primary-Source Dossier (`/workspace/dossiers/-/REPORT.md`):** - Verbatim `SCOPE_NOTE.txt` prepended at the top of every dossier - **Section 1:** Entity Snapshot & Verified Identifiers (Legal Name, 10-digit CIK, Tickers, SIC Code, State of Incorporation, Fiscal Year End, Principal Address) - **Section 2:** SEC EDGAR Filing & Capital Breakdown (`10-K`, `10-Q`, `8-K` Items 1.01/2.01/5.02, `DEF 14A`, `Form 4`, `S-1`, and `Form D` with exact accession numbers and direct archive URLs) - **Section 3:** Patent & IP Footprint (`efts.sec.gov` full-text patent/IP disclosures across SEC filings + `search.patentsview.org` USPTO PatentsView dockets) - **Section 4:** Domain & Technical Infrastructure Footprint (`rdap.org` domain status, registrar, registration/expiration dates, and nameservers) - **Section 5:** Competitor Comparison Matrix (side-by-side table comparing 1 primary entity + up to 4 competitors across CIK, SIC, state, FYE, latest `10-K`/`10-Q`, and 180-day `8-K` velocity) - **Section 6:** Skipped, Unverified, or Unavailable Sources Log - **Section 7:** Primary Source Index (every fetched URL, HTTP status, byte count, and UTC retrieval timestamp from `RAW_SOURCES.json`) - **Hardened Fetch Helper (`.wattcoin_dd_fetch.py`):** - Runs with `/usr/bin/python3 -I` using Python stdlib only (`0500` permissions) - Enforces HTTPS-only DNS-pinned SSRF protection (`_PinnedHTTPSConnection`), rejects IP literals and private/loopback/link-local ranges, sends a SEC-compliant `User-Agent` with a contact string at `<= 5 req/s`, enforces caps of 5 entities / 40 HTTP requests / 200 KB per doc / 15s per-request deadline, and wraps all external strings in random 128-bit `>` tags - **What This Public-Filing Dossier Does Not Cover:** - Non-reporting private companies with zero SEC Form D/S-1 filings and zero indexed USPTO patents - Unfiled commercial contracts, trade secrets, internal financial projections, or local municipal building permits - Patents or domains registered under unnamed subsidiary or shell LLCs unless queried directly - Point-in-time filing lag or subsequent registrant amendments (`10-K/A`, `10-Q/A`, `8-K/A`) - **Mandatory Refusal Boundaries:** - Never outputs stock buy, sell, or hold ratings, valuation multiples, or price targets - Never outputs legal conclusions on patent validity, freedom-to-operate, or infringement liability - Pauses for confirmation on ambiguous company names (`AMBIGUOUS_ENTITY`) and automatically excludes individual non-corporate SEC filers (`INDIVIDUAL_EXCLUDED`) ### 4. SEC & Patent Watchdog Digest ($29 one-time · card / Apple Pay / Google Pay via Stripe — LIVE NOW) - **Status:** LIVE NOW - **SKU:** `sec-patent-watchdog` - **Price:** $29.00 USD One-Time License (card / Apple Pay / Google Pay via Stripe) (includes up to **3 workspace-reset rebinds** across `/workspace` container resets) - **Alternate / Registry Name:** SEC EDGAR & Patent Filing Watchdog - **Product Page URL:** https://botappstore.com/bots/sec-patent-watchdog.html - **Storefront Checkout URL:** https://botappstore.com/#card-sec-patent-watchdog - **Included Skills:** `sec-patent-watchdog-setup` + `sec-patent-watchdog` - **Deliverable:** *A zero-noise delta digest of new SEC EDGAR filings and USPTO patent/IP publications for up to 10 tickers/CIKs — written only when something actually changed.* - **License Architecture:** 1. **Turn-1 Onboarding & License Binding (`sec-patent-watchdog-setup`):** Registers/activates `/workspace/.wattcoin_env` (`chmod 600`) and binds the `wcl_<64-hex>` code via `POST https://www.wattcoin.org/api/v1/agents/license/claim` with `sku: "sec-patent-watchdog"`. 2. **Mandatory Pre-Flight License Gate (`sec-patent-watchdog`):** Every run first checks `GET https://www.wattcoin.org/api/v1/agents/license?sku=sec-patent-watchdog` and requires `"sku_licensed": true`. - **What It Does:** - Tracks SEC EDGAR `10-K`, `10-Q`, `8-K`, `Form 4`, `13F-HR`, and `S-1` filings plus USPTO patent/IP publications for up to 10 tickers/CIKs - Stateful `state.json` baseline & diff engine; writes `DELTA_SUMMARY.json` + `DIGEST_.md` - Native Grok Bot `UpdateRoutine` scheduling; stays quiet when zero new filings land - **Sample Prompt:** `Check my SEC & patent watchlist for NVDA, AMD, and AAPL...` - **Mandatory Refusal Boundaries:** - Never sends empty filler alerts when the delta is zero - Never bypasses SEC EDGAR rate limits (`<= 10 req/sec`) or `User-Agent` identification - Never connects to brokerage APIs, executes trades, or issues buy/sell/hold advice; never opines on patent validity or infringement ### 5. Social Hub Publisher ($29 one-time · card / Apple Pay / Google Pay via Stripe — LIVE NOW) - **Status:** LIVE NOW - **SKU:** `social-hub-publisher` - **Price:** $29.00 USD One-Time License (card / Apple Pay / Google Pay via Stripe) (includes up to **3 workspace-reset rebinds**) - **Product Page URL:** https://botappstore.com/bots/social-hub-publisher.html - **Storefront Checkout URL:** https://botappstore.com/#card-social-hub-publisher - **Included Skills:** `social-hub-publisher-setup` + `social-hub-publisher` - **Deliverable:** *Write once, approve once, publish everywhere: one announcement queue for X, Discord, Bluesky and Telegram driven by one `config.json`, with credentials kept in environment variables.* - **What It Does:** - **Gate 1 linter:** per-channel length (X weights URLs as 23), link-domain allowlist, banned terms, hashtag/mention caps, duplicate detection - **Gate 2 approval:** `approve` HMAC-SHA256 signs the exact text with an expiry; the dispatcher refuses edited, expired or unsigned items - **Channels:** free 1-click X Web Intent links by default (optional X API mode with pay-per-use cost estimates), Discord webhooks (mentions suppressed), Bluesky AT Protocol (link facets), Telegram Bot API - **Refusal Boundaries:** - Dry run unless `--live`; never sends an item without a valid Gate-2 approval - Ambiguous sends are marked `unknown_outcome` and never auto-retried (no duplicate posts) ### 6. Dependency Vulnerability Triage ($29 one-time · card / Apple Pay / Google Pay via Stripe — LIVE NOW) - **Status:** LIVE NOW - **SKU:** `dependency-vuln-triage` - **Price:** $29.00 USD One-Time License (card / Apple Pay / Google Pay via Stripe) (includes up to **3 workspace-reset rebinds**) - **Product Page URL:** https://botappstore.com/bots/dependency-vuln-triage.html - **Storefront Checkout URL:** https://botappstore.com/#card-dependency-vuln-triage - **Included Skills:** `dependency-vuln-triage-setup` + `dependency-vuln-triage` - **Deliverable:** *Fix what is being exploited first: lockfile advisories from OSV.dev enriched with FIRST EPSS and the CISA KEV catalog, sorted into four action buckets with the lowest fixing version.* - **What It Does:** - Parses `package-lock.json` (v1-v3), `yarn.lock`, `Pipfile.lock`, `poetry.lock`, pinned `requirements.txt`, `Cargo.lock` and `go.sum` - Buckets: `KEV_ACTIVE_EXPLOIT`, `HIGH_EPSS_URGENT` (default EPSS threshold 0.10), `PATCH_AVAILABLE`, `LOW_PRIORITY_MONITOR`, plus a per-package upgrade plan - Exit codes: `0` nothing at `--fail-on`, `1` findings, `10` bad input, `11` a data source was unavailable (never a pass) - **Refusal Boundaries:** - Only package names and versions leave the machine; never installs, upgrades or edits the project - Never claims a project is secure; EPSS is a probability estimate, not a verdict ### 7. Domain, TLS & Email Auth Infrastructure Hygiene Auditor ($19 one-time · card / Apple Pay / Google Pay via Stripe — LIVE NOW, sku: domain-infra-hygiene) - **Status:** LIVE NOW - **SKU:** `domain-infra-hygiene` - **Price:** $19.00 USD One-Time License (card / Apple Pay / Google Pay via Stripe) (1-year license, includes up to **3 workspace-reset rebinds**) - **Product Page URL:** https://botappstore.com/bots/domain-infra-hygiene.html - **Storefront Checkout URL:** https://botappstore.com/#card-domain-infra-hygiene - **Included Skills:** `domain-infra-hygiene-setup` + `domain-infra-hygiene` - **Pinned Runtime (canonical SHA-256 pins, locked `chmod 500`):** - `https://botappstore.com/runtime/domain_infra_hygiene.py` — SHA-256 `73f7a04a48f55b6a9f0a733bdf4bba7cab2b9b6d245c0505567487585f0d1c14` (1,877 lines, stdlib Python) - `https://botappstore.com/runtime/bot_common.py` — SHA-256 `d1941b61b95ca664e4c1286c3bf1918c00e976c2c1601199b19200257650e526` - **Deliverable:** *Find the expiring certificate, the spoofable domain and the dangling CNAME before someone else does: one read-only pass over DNS, DNSSEC, TLS, email authentication, HTTPS headers and Certificate Transparency for domains you own, with copy-paste fixes.* - **License Architecture:** 1. **Turn-1 Setup (`domain-infra-hygiene-setup`):** installs `/workspace/.wattcoin_license_check.py` at `0500`, verifies and installs the pinned runtime, registers/activates `/workspace/.wattcoin_env` (`0600`, `onboarding_v1` + `starter_v1`), binds the `wcl_<64-hex>` code via stdin (`--claim-stdin --sku domain-infra-hygiene`), and offers a smoke test on `botappstore.com coinloader.com`. 2. **Mandatory Pre-Flight License Gate (`domain-infra-hygiene`):** every run first executes `/usr/bin/python3 -I /workspace/.wattcoin_license_check.py check --sku domain-infra-hygiene` (`GET https://www.wattcoin.org/api/v1/agents/license?sku=domain-infra-hygiene`, requires `"sku_licensed": true`; the helper prints `"state": "OK"`). - **What It Checks:** - **DNS & DNSSEC:** A/AAAA/CNAME/NS/MX/CAA/TXT/DNSKEY via DNS-over-HTTPS (Cloudflare, Google fallback); `VALIDATED` only with DNSKEY + resolver `AD` bit; broken DS chains and bogus (cd=1) answers flagged HIGH; `--expect-ns` NS drift - **Email auth:** recursive SPF with RFC 7208 §4.6.4 10-lookup counting, loops, `+all`/`?all`; DMARC `p`/`sp`/`pct`/`rua`; DKIM RSA key size; MTA-STS; TLS-RPT; `--no-mail` expects `v=spf1 -all` + `p=reject` + null MX `0 .` - **TLS:** one :443 handshake — chain, SAN, protocol, cipher, 30/14/7-day expiry, issuer vs CAA - **HTTPS:** HSTS, CSP, `X-Content-Type-Options`, `Referrer-Policy`, frame protection, `Permissions-Policy`, HTTP→HTTPS redirect - **Takeover & CT:** dangling-CNAME provider fingerprints on the audited domain's own apex/`www`; Cert Spotter (crt.sh fallback) issuers vs CAA - **Remediation:** copy-paste BIND records, Nginx `add_header`, `vercel.json` headers, Netlify / Cloudflare Pages `_headers` - **Monitoring:** `--state /workspace/domain-hygiene/state.json --delta` events (`CERT_ROTATED`, `CERT_EXPIRY_WINDOW`, `NS_CHANGED`, `SPF_CHANGED`, `DMARC_CHANGED`, `DNSSEC_LOST`, `NEW_CT_NAMES`, `NEW_CT_ISSUANCES`, `HEADER_REGRESSED`) for daily/weekly `UpdateRoutine` runs - **Exit Codes:** `0` clean, `1` MEDIUM, `2` HIGH, `3` CRITICAL (at/above `--fail-on`), `10` bad input/refusal, `11` degraded data source (never a pass) - **Sample Prompt:** `Audit botappstore.com and coinloader.com for DNS, DNSSEC, TLS, email auth and security headers. Neither domain sends mail.` - **Mandatory Refusal Boundaries:** - Own or authorised domains only; refuses third-party scanning, target lists and subdomain-takeover hunting - Passive only: no port scanning, brute-force subdomain enumeration, fuzzing, zone transfers, SMTP/credential probing or exploitation - Never registers dangling CNAME targets or edits DNS/certificates/server config; never claims a domain is "secure" ### 8. Agent Council — Multi-Model Swarm Debate & Pair-Architect Collaborator ($39 one-time · card / Apple Pay / Google Pay via Stripe — LIVE NOW, sku: agent-council) - **Status:** LIVE NOW - **SKU:** `agent-council` - **Price:** $39.00 USD One-Time License (card / Apple Pay / Google Pay via Stripe) (includes up to **3 workspace-reset rebinds**) - **Categories:** Orchestration & DevOps / Coding & Security - **Product Page URL:** https://botappstore.com/bots/agent-council.html - **Storefront Checkout URL:** https://botappstore.com/#card-agent-council - **Included Skills:** `agent-council-setup` + `agent-council` - **Pinned Runtime (canonical SHA-256 pins, locked `chmod 500`):** - `https://botappstore.com/runtime/agent_council.py` — SHA-256 `703d307e52c4e13df94e28554d16143a5286bf0af3ffe6d95431a5fa490284d7` (2,801 lines, stdlib Python, 170 unit tests) - `https://botappstore.com/runtime/bot_common.py` — SHA-256 `d1941b61b95ca664e4c1286c3bf1918c00e976c2c1601199b19200257650e526` - **Deliverable:** *Put 2-6 AI seats on one design question, patch or diff and get the consensus, the minority report, a verdict and an action plan, within the time limit and budget you set, plus a self-contained HTML transcript.* - **License Architecture:** 1. **Turn-1 Setup (`agent-council-setup`):** installs `/workspace/.wattcoin_license_check.py` at `0500`, verifies and installs the pinned runtime, registers/activates `/workspace/.wattcoin_env` (`0600`, `onboarding_v1` + `starter_v1`), binds the `wcl_<64-hex>` code via stdin (`--claim-stdin --sku agent-council`), runs `--discover`, and offers a budget-capped smoke council and an optional scheduled review routine. 2. **Mandatory Pre-Flight License Gate (`agent-council`):** every run first executes `/usr/bin/python3 -I /workspace/.wattcoin_license_check.py check --sku agent-council` (`GET https://www.wattcoin.org/api/v1/agents/license?sku=agent-council`, requires `"sku_licensed": true`; the helper prints `"state": "OK"`). - **What It Does:** - **Seats (`--seats`, `--discover`):** 2-6 seats. Local CLIs: `claude` personas (`claude:architect`, `claude:security`, `claude:skeptic`, `claude:pragmatist`, `claude:driver`, `claude:navigator`, plus `performance` and `reviewer`), `codex`, `gemini`, `aider`, `cmd:`. BYOK HTTP: `openai:`, `anthropic:`, `xai:`, `gemini:`, `openrouter:`, `deepseek:`, `ollama:`. Keys are read by variable name and never printed. - **Modes:** `deliberate` (blind round 1, anonymized `Seat A`/`Seat B` delta cross-examination, Chair consensus matrix + minority report), `pair` (Driver + Navigator, `APPROVE` / `REQUEST_CHANGES` / `BLOCK`), `compete` (peer-graded rubric: correctness .40, security .30, simplicity .15, edge cases .15; deterministic winner), `review` (deduplicated `CRITICAL`..`INFO` findings with file:line). - **Token efficiency without throttling:** model output ceilings (Anthropic default 16,384 tokens with extended thinking), `--effort high` by default; pinned cache-friendly brief, `--files path:start-end` and `--git-diff` slices with secret redaction, delta-only round forwarding, early stop on consensus. - **Control:** `--seat-timeout`, `--total-deadline`, `--quorum`, `DEGRADED_TIMEOUT` fallback, `--max-cost-usd` (pre-flight refusal + 85% in-flight halt), `--session ID` with `--status` / `--pause` / `--inject "note"` / `--resume`, `--state --delta`, `--html-out` self-contained dark-slate viewer. - **Exit Codes:** `0` clean, `1` MEDIUM, `2` HIGH, `3` CRITICAL (unresolved at/above `--fail-on`), `10` usage error/refusal/budget pre-flight, `11` degraded (seat timeout/error, lost quorum, deadline; never a clean consensus) - **Sample Prompt:** `Convene architect, security and skeptic seats on lib/bot_common.py lines 85-177: is http_json safe for metered, non-idempotent paid POSTs? Two rounds, $2 budget, and write the HTML transcript.` - **Mandatory Refusal Boundaries:** - Advisory and read-only: never edits, commits, runs or deploys anything; CLI seats run tool-less / read-only / dry-run from an empty temp dir - Refuses `.env*`, `.wattcoin_env*`, lockfiles, key files, `.git/`, `node_modules/`; redacts keys, tokens and private keys before any seat sees them - Declines exploit, credential-harvesting and other offensive tasks; a consensus is evidence, not proof; BYOK costs are estimates ### 9. MCP Server & Tool-Permission Security Auditor ($19 one-time · card / Apple Pay / Google Pay via Stripe — LIVE NOW, sku: mcp-config-auditor) - **Status:** LIVE NOW - **SKU:** `mcp-config-auditor` - **Price:** $19.00 USD One-Time License (card / Apple Pay / Google Pay via Stripe) (includes up to **3 workspace-reset rebinds**) - **Categories:** Coding & Security / MCP & Agent Hygiene - **Product Page URL:** https://botappstore.com/bots/mcp-config-auditor.html - **Storefront Checkout URL:** https://botappstore.com/#card-mcp-config-auditor - **Included Skills:** `mcp-config-auditor-setup` + `mcp-config-auditor` - **Pinned Runtime (canonical SHA-256 pins, locked `chmod 500`):** - `https://botappstore.com/runtime/mcp_config_auditor.py` — SHA-256 `42cb3f145458844604c795a97ec8009365a218f20b4a441f6988edd93184c025` (1,956 lines, stdlib Python, 275 unit tests) - `https://botappstore.com/runtime/bot_common.py` — SHA-256 `d1941b61b95ca664e4c1286c3bf1918c00e976c2c1601199b19200257650e526` - **Deliverable:** *Find the leaked key, the unpinned package and the poisoned tool before your agent runs them: a read-only static audit of your MCP client configs and `tools/list` snapshots, with every detected secret redacted and a copy-paste hardened config per file.* - **License Architecture:** 1. **Turn-1 Setup (`mcp-config-auditor-setup`):** installs `/workspace/.wattcoin_license_check.py` at `0500`, verifies and installs the pinned runtime, registers/activates `/workspace/.wattcoin_env` (`0600`, `onboarding_v1` + `starter_v1`), binds the `wcl_<64-hex>` code via stdin (`--claim-stdin --sku mcp-config-auditor`), runs a deterministic self-check audit, offers a first `--dir` audit of the user's configs, and offers an optional scheduled rug-pull delta routine. 2. **Mandatory Pre-Flight License Gate (`mcp-config-auditor`):** every run first executes `/usr/bin/python3 -I /workspace/.wattcoin_license_check.py check --sku mcp-config-auditor` (`GET https://www.wattcoin.org/api/v1/agents/license?sku=mcp-config-auditor`, requires `"sku_licensed": true`; the helper prints `"state": "OK"`). - **What It Does:** - **Inputs:** Claude Desktop `claude_desktop_config.json`, Claude Code `.mcp.json`, Cursor `.cursor/mcp.json`, VS Code `.vscode/mcp.json` (`servers` + `inputs`), Windsurf, Cline, Zed `context_servers`, generic `mcp.json` (JSONC tolerated), via `--config`, `--dir` discovery or positional paths; `--tools-json` for saved `tools/list` snapshots. - **`SEC_*`:** hardcoded tokens and literal secrets in `env`, `args`, `headers`, URL userinfo/query and VS Code `inputs`, vs safe `${ENV_VAR}` / `${env:VAR}` interpolation; every detected secret prints as `[REDACTED:...]` in all outputs and the state file. - **`CMD_*` / `FS_*` / `DOCKER_*` / `DB_*`:** `curl | sh` remote pipe execution, shell wrappers, `--dangerously-skip-permissions` / `--allow-all`, `alwaysAllow` / `autoApprove`, `/`, home, `~/.ssh`, `~/.aws` exposure, Docker `--privileged` and writable mounts, writable database servers. - **`SUP_*`:** unpinned `npx -y` / `uvx` / `pipx run` / `bunx`, `@latest` floating tags, unpinned git refs and Docker images, Levenshtein typosquat detection against 26 canonical MCP packages. - **`NET_*`:** cleartext `http://` remote SSE / Streamable HTTP, `169.254.169.254` metadata SSRF, unauthenticated remote endpoints, insecure `mcp-remote` / `supergateway` bridges. - **`TOOL_*`:** `` / "ignore previous instructions" poisoning, `~/.ssh/id_rsa` reads, bidi and zero-width Unicode, exfiltration parameters (`conversation_history`, `system_prompt`, `sidenote`), cross-server name shadowing (`read_file`), `readOnlyHint: true` on destructive tools. - **Remediation & delta:** hardened `mcpServers` snippets (`${ENV_VAR}`, `@VERSION` pins, `/workspace/project` paths, `:ro` mounts), `--remediate` JSON, and `--state PATH --delta` rug-pull events `TOOL_DESC_CHANGED`, `TOOL_SCHEMA_CHANGED`, `SERVER_ADDED`. - **Exit Codes:** `0` clean, `1` MEDIUM, `2` HIGH, `3` CRITICAL (at/above `--fail-on`), `10` bad input, `11` degraded (unreadable/malformed input or no configs found; never clean) - **Sample Prompt:** `Audit the .mcp.json and .cursor/mcp.json in /workspace/project plus the tools/list snapshot I uploaded. Show me the hardened config and set up a daily rug-pull check.` - **Mandatory Refusal Boundaries:** - Static and read-only: no network requests; never launches or connects to an MCP server, installs a package, or modifies a config file - Own or authorised configs only; never harvests or validates secrets from other people's configs or public repos - Declines to write poisoned tools, prompt-injection payloads or typosquat packages; heuristic detection, so "no findings" is not proof of safety ### 10. 3D Print Farm & Slicer Queue Ops ($29 one-time · card / Apple Pay / Google Pay via Stripe — AVAILABLE NOW · PHASE 2 LIVE, sku: print-farm-ops) - **Status:** AVAILABLE NOW · PHASE 2 LIVE - **SKU:** `print-farm-ops` - **Price:** $29.00 USD One-Time License (card / Apple Pay / Google Pay via Stripe) (includes up to **3 workspace-reset rebinds**) - **Categories:** Robotics & Manufacturing / 3D Print Farm & Slicer Queue Ops - **Product Page URL:** https://botappstore.com/bots/print-farm-ops.html - **Storefront Checkout URL:** https://botappstore.com/#card-print-farm-ops - **Included Skills:** `print-farm-ops-setup` + `print-farm-ops` - **Pinned Runtime (canonical SHA-256 pins, locked `chmod 500`):** - `https://botappstore.com/runtime/print_farm_ops.py` — SHA-256 `29edc5e8664be0b6823edc6ea985467fba83430f03d5781cd6fe341684abb669` (2,165 lines, stdlib Python, 393 unit tests) - `https://botappstore.com/runtime/bot_common.py` — SHA-256 `d1941b61b95ca664e4c1286c3bf1918c00e976c2c1601199b19200257650e526` - **Deliverable:** *Catch the wrong-temperature plate, the empty spool and the money-losing SKU before the printers run: an offline, read-only audit of OrcaSlicer, Bambu Studio and PrusaSlicer `.3mf` / `.gcode` files, a spool ledger, a storefront SKU table and a printer list, plus a scheduled multi-printer production queue.* - **License Architecture:** 1. **Turn-1 Setup (`print-farm-ops-setup`):** installs `/workspace/.wattcoin_license_check.py` at `0500`, verifies and installs the pinned runtime, registers/activates `/workspace/.wattcoin_env` (`0600`, `onboarding_v1` + `starter_v1`), binds the `wcl_<64-hex>` code via stdin (`--claim-stdin --sku print-farm-ops`, `POST /api/v1/agents/license/claim`), runs a deterministic self-check audit, and offers a first audit plus an optional `UpdateRoutine` for the recurring farm queue and spool delta. 2. **Mandatory Pre-Flight License Gate (`print-farm-ops`):** every run first executes `/usr/bin/python3 -I /workspace/.wattcoin_license_check.py --sku print-farm-ops` (`GET https://www.wattcoin.org/api/v1/agents/license?sku=print-farm-ops`, requires `"sku_licensed": true`; the helper prints `"state": "OK"`). - **What It Does:** - **Inputs:** `.3mf` / `.gcode.3mf` / `.gcode` files via `--3mf`, `--dir` or positional paths; `--spools`, `--orders` (alias `--inventory`) and `--printers` CSV/JSON tables; cost inputs `--kwh-rate`, `--printer-watts`, `--machine-rate-hr`, `--labor-rate-hr`, `--failure-rate-pct`, `--margin-target-pct`. - **Slicer Profile & Thermal/Mechanical Safety:** `THERMAL_RUNAWAY_OR_OUT_OF_RANGE`, `TEMP_MATERIAL_MISMATCH`, `ABRASIVE_FILAMENT_BRASS_NOZZLE`, `ABRASIVE_CLOG_RISK_SMALL_NOZZLE`, `ENCLOSURE_REQUIRED_OPEN_FRAME`, `TPU_HIGH_VOLUMETRIC_SPEED`, `LAYER_HEIGHT_EXCEEDS_NOZZLE_LIMIT`, `WEAK_INFILL_PATTERN_STRUCTURAL`, `STRUCTURAL_UNDER_WALLED`, `EMBEDDED_PRINTER_CREDENTIAL`, `ARCHIVE_SAFETY_VIOLATION`. - **Spool Inventory & Moisture Hygiene:** `SPOOL_INSUFFICIENT_FOR_QUEUE`, `SPOOL_LOW_STOCK`, `HYGROSCOPIC_DRYING_OVERDUE`, `DESICCANT_CHANGE_OVERDUE`, `FILAMENT_COST_ASSUMED`. - **Unit Economics & Per-Part BOM Margin:** `SKU_NEGATIVE_MARGIN`, `SKU_CRITICAL_MARGIN_COMPRESSION`, `SKU_BELOW_TARGET_MARGIN`, `PLATE_BOM_MISMATCH`, `PLATE_FILE_UNRESOLVED`, `SKU_COST_INPUTS_MISSING`. - **SKU Run-Rate & Queue Scheduler:** `SKU_BACKORDER_DEFICIT`, `SKU_STOCKOUT_IMMINENT`, `SKU_REORDER_TRIGGER`, `NO_COMPATIBLE_PRINTER_FOR_JOB`, `FARM_CAPACITY_OVERLOAD`; greedy earliest-finish queue written with `--queue-csv`. - **Delta:** `--state PATH --delta` events `SPOOL_DEPLETED`, `SKU_DAYS_OF_SUPPLY_DROP`, `PROFILE_DRIFT_DETECTED`. - **Exit Codes:** `0` clean, `1` MEDIUM, `2` HIGH, `3` CRITICAL (at/above `--fail-on`), `10` bad input or refusal, `11` degraded (unreadable/malformed/unsafe input or nothing to audit; never clean) - **Sample Prompt:** `Audit the .3mf files in /workspace/farm/projects with my spools.csv, orders.csv and printers.csv, flag anything unsafe or losing money, and write this week's print queue to queue.csv.` - **Mandatory Refusal Boundaries:** - Offline and read-only: no network request, no Bambu Cloud / MQTT / Moonraker / Klipper / OctoPrint / PrusaLink call; never sends G-code, starts, stops or heats a printer, or modifies a `.3mf` / `.gcode` file - Refuses credentials, API keys, seed phrases and printer LAN access codes (exit `10`, value never echoed) - Heuristic checks of slicer metadata, not engineering certification or fire-safety protection; cost and margin figures are arithmetic on supplied inputs, not financial advice ### 11. Humanoid & Fleet Telemetry Inspector ($49 one-time · card / Apple Pay / Google Pay via Stripe — AVAILABLE NOW · PHASE 1 RELEASE, sku: robotics-telemetry-inspector) - **Status:** AVAILABLE NOW · PHASE 1 RELEASE - **SKU:** `robotics-telemetry-inspector` - **Price:** $49.00 USD One-Time License (card / Apple Pay / Google Pay via Stripe) (includes up to **3 workspace-reset rebinds**) - **Categories:** Robotics & Physical AI / Humanoid & Fleet Telemetry - **Product Page URL:** https://botappstore.com/bots/robotics-telemetry-inspector.html - **Storefront Checkout URL:** https://botappstore.com/#card-robotics-telemetry-inspector - **Included Skills:** `robotics-telemetry-inspector-setup` + `robotics-telemetry-inspector` - **Pinned Runtime (canonical SHA-256 pins, locked `chmod 500`):** - `https://botappstore.com/runtime/robotics_telemetry_inspector.py` — SHA-256 `aa45c09553b0c989a988c4f2375a7d9e596f338afa5f98969db09896eb6c6b17` (3,245 lines, stdlib Python, 724 unit tests) - `https://botappstore.com/runtime/bot_common.py` — SHA-256 `d1941b61b95ca664e4c1286c3bf1918c00e976c2c1601199b19200257650e526` (274 lines) - **Deliverable:** *Find the overheating knee, the weak cell and the dropped topic before the robot runs again: an offline, read-only audit of actuator and joint logs, 16S LiFePO4 / LiPo BMS exports, ROS 2 bags, PX4 / ArduPilot flight logs, URDF / SDF models and CAN / RS485 captures, ending in a prioritised preventive-maintenance and flight-readiness checklist.* - **License Architecture:** 1. **Turn-1 Setup (`robotics-telemetry-inspector-setup`):** installs `/workspace/.wattcoin_license_check.py` at `0500`, verifies and installs the pinned runtime, registers/activates `/workspace/.wattcoin_env` (`0600`, `onboarding_v1` + `starter_v1`), binds the `wcl_<64-hex>` code via stdin (`--claim-stdin --sku robotics-telemetry-inspector`, `POST /api/v1/agents/license/claim`), runs the deterministic `--self-check`, and offers a first audit plus an optional `UpdateRoutine` for recurring `--state --delta` runs. 2. **Mandatory Pre-Flight License Gate (`robotics-telemetry-inspector`):** every run first executes `/usr/bin/python3 -I /workspace/.wattcoin_license_check.py --sku robotics-telemetry-inspector` (`GET https://www.wattcoin.org/api/v1/agents/license?sku=robotics-telemetry-inspector`, requires `"sku_licensed": true`; the helper prints `"state": "OK"`). - **What It Does:** - **Inputs:** positional paths, `--dir` or `.zip` archives (roles auto-detected), `--actuators` and `--bms` CSV/JSON tables, `--rosbag` (`.db3`, `.mcap`, `metadata.yaml`/JSON summary, or an expectations file with `topics[].expected_hz/required/qos.subscriber`; repeatable), `--flight-log` (PX4 `.ulg`, ArduPilot `.bin`/CSV/JSON; repeatable), `--urdf` (URDF/SDF), `--can-log` (candump text or CSV/JSON). - **Bucket 1 — Actuator, Joint & Harmonic-Drive Duty Cycles (with URDF/SDF and CAN cross-checks):** `ACTUATOR_THERMAL_OVERLOAD`, `ACTUATOR_HIGH_DUTY_CYCLE`, `JOINT_TORQUE_LIMIT_EXCEEDED`, `JOINT_VELOCITY_LIMIT_EXCEEDED`, `JOINT_POSITION_LIMIT_EXCEEDED`, `HARMONIC_DRIVE_WEAR_THRESHOLD`, `CAN_BUS_FAULT_OR_TIMEOUT`, `ACTUATOR_ERROR_FLAGS_SET`, `URDF_JOINT_LIMIT_INVALID`, `ACTUATOR_JOINT_NOT_IN_MODEL`. - **Bucket 2 — 16S LiFePO4 / LiPo Battery Management System:** `BMS_CELL_IMBALANCE_DELTA`, `BMS_CRITICAL_CELL_SAG`, `BMS_MOSFET_THERMAL_RISE`, `BMS_DISCHARGE_CRATE_EXCEEDED`, `BMS_SOH_DEGRADATION`, `BMS_CELL_COUNT_MISMATCH`. - **Bucket 3 — ROS 2 Bag, TF Tree & QoS Integrity:** `ROSBAG_TOPIC_DROPOUT`, `ROSBAG_CLOCK_DRIFT_OR_JUMP`, `QOS_INCOMPATIBLE_MISMATCH`, `TF_TREE_CYCLE_OR_DISCONNECT`. - **Bucket 4 — PX4 / ArduPilot Flight Readiness & Preventive Maintenance:** `EKF_INNOVATION_DIVERGENCE`, `IMU_VIBRATION_CLIPPING`, `GNSS_DEGRADED_FIX`, `ESC_DESYNC_OR_OVERHEAT`, `FLIGHT_FAILSAFE_OR_PREARM_FAULT`; checklist CSV via `--maintenance-out`. - **Cross-cutting:** `EMBEDDED_TELEMETRY_CREDENTIAL` (HIGH, value redacted), `ARCHIVE_SAFETY_VIOLATION`, `XML_ENTITY_SAFETY_VIOLATION`. - **Delta:** `--state PATH --delta` events `BMS_CELL_DELTA_SPIKE`, `ACTUATOR_THERMAL_DRIFT`, `SOH_DEGRADATION_STEP`, `TOPIC_RATE_REGRESSION`. - **CLI Flags:** `PATH ...`, `--dir DIR`, `--actuators PATH`, `--bms PATH`, `--rosbag PATH`, `--flight-log PATH`, `--urdf PATH`, `--can-log PATH`, `--maintenance-out PATH`, `--self-check`, `--state PATH`, `--delta`, `--now ISO`, `--format {text,markdown,md,json,html}`, `--json`, `--out PATH`, `--fail-on {none,info,low,medium,high,critical}`. - **Exit Codes:** `0` clean, `1` MEDIUM, `2` HIGH, `3` CRITICAL (at/above `--fail-on`), `10` bad input or refusal, `11` degraded (unreadable/malformed/unsafe input, a skipped symlink, or nothing to audit; never clean) - **Sample Prompt:** `Audit actuators.csv, bms.csv, nav.db3 and quad.ulg against humanoid.urdf and the CAN log, tell me what is NO-GO, and write the maintenance checklist to checklist.csv.` - **Mandatory Refusal Boundaries:** - Offline and strictly read-only: no network request; never issues motor/actuator commands, CAN frames, MAVLink parameter writes or BMS register writes, never overrides a safety interlock, never modifies an input file - Refuses credentials, tokens, seed phrases, MAVLink signing keys, DDS private keys, Wi-Fi passwords and SSH keys in arguments and tables (exit `10`, value never echoed); symlink inputs exit `10` - Heuristic diagnostics on exported logs, not airworthiness, FAA/EASA or functional-safety (ISO 13849 / IEC 61508 / ISO 10218) approval --- ### 12. SEC EDGAR Supply Chain & Counterparty Mapper ($29 one-time · card / Apple Pay / Google Pay via Stripe — LIVE NOW, sku: sec-supply-chain-mapper, v1.1) - **Status:** LIVE NOW (v1.1) - **SKU:** `sec-supply-chain-mapper` - **Price:** $29.00 USD One-Time License (card / Apple Pay / Google Pay via Stripe) (includes up to **3 workspace-reset rebinds**); also included in the `edgar-intelligence-pack` bundle ($89) - **Categories:** OSINT & Research / SEC EDGAR Supply Chain - **Product Page URL:** https://botappstore.com/bots/sec-supply-chain-mapper.html - **Storefront Checkout URL:** https://botappstore.com/#card-sec-supply-chain-mapper - **Included Skills:** `sec-supply-chain-mapper-setup` + `sec-supply-chain-mapper` - **Runtime:** https://botappstore.com/runtime/sec_supply_chain_mapper.py (SHA-256 `d3e13923dc752f1f0429433381ff48961eba0d142255524761ba2385c0e116d1`; standalone zero-dependency Python 3.10+ CLI, `--json` / `--markdown` output) + https://botappstore.com/runtime/bot_common.py (SHA-256 `dbbd8521357fedc348cf7dc102435d4412ea26487e08bf067038ba8c66c9bcd1`) - **Deliverable:** Cited supplier, customer, foundry, subsidiary and equity-stake map built only from primary SEC EDGAR filings (10-K, 10-Q, 8-K, Exhibit 21, Schedule 13D/13G), with a reproducible `audit_sha256`. - **Capabilities:** - Relationship edges typed `supplier`, `customer`, `foundry_compute`, `strategic_partner`, `subsidiary`, `equity_stake`; each carries a verbatim quote of `<=300` characters, the accession number and a direct sec.gov Archive URL. No quote, no edge. - Inline-XBRL Disclosed Concentration Scorer `CR-01..04` (major customer >=10%, top customers combined, sole-source supplier, receivables concentration) using `us-gaap:ConcentrationRiskPercentage`; Exhibit 21 subsidiaries are separated from counterparties. - YoY 10-K Counterparty Diff: `ADDED`, `REMOVED`, `PCT_CHANGED`. - Schedule 13D/13G Equity Stakes: `EQ-01`. - Presets such as `--preset nvidia-physical-ai` for multi-company ecosystem maps. - **Guardrails:** HTTPS-only allow-listed sec.gov hosts, DNS pinning, no redirects (SSRF protection), compliant SEC User-Agent, <=5 requests per second with request and byte caps; never infers a relationship without a filing quote; never gives buy/sell/hold advice; always prepends a SCOPE_NOTE. - **Full Verbatim Sample:** https://botappstore.com/bots/sec-supply-chain-mapper.html#sample-output ### 13. Mill Cert Matcher ($39 one-time — LIVE NOW, sku: mill-cert-matcher) - **Status:** LIVE NOW - **SKU:** `mill-cert-matcher` - **Price:** $39.00 USD One-Time License (includes up to **3 workspace-reset rebinds**); card / Apple Pay / Google Pay checkout by default - **Categories:** Manufacturing / Receiving Inspection - **Product Page URL:** https://botappstore.com/bots/mill-cert-matcher.html - **Storefront Checkout URL:** https://botappstore.com/#card-mill-cert-matcher - **Included Skills:** `mill-cert-matcher-setup` + `mill-cert-matcher` - **Pinned Runtime (canonical SHA-256 pins, locked `chmod 500`):** - `https://botappstore.com/runtime/mill_cert_matcher.py` — SHA-256 `19b875763d371177e96bdac76e6ace6224e236fc6263f51a3204390b83c205ef` (standalone zero-dependency Python 3 CLI; optional pinned PDF library for text-layer PDFs) - `https://botappstore.com/runtime/bot_common.py` — SHA-256 `dbbd8521357fedc348cf7dc102435d4412ea26487e08bf067038ba8c66c9bcd1` (current variant) - **Deliverable:** A receiving-inspection card that cross-checks a mill test certificate against the purchase order and the drawing material callout, with source file, page and line for every extracted value. Verdict: any REJECT gives REJECT, otherwise any HOLD gives HOLD, otherwise PASS. - **Capabilities:** - `MCM-MAT-01` alloy, temper (your equivalences) and spec match across cert, PO and drawing; `MCM-QTY-01` thickness and quantity. - `MCM-CHEM-01` chemistry and `MCM-MECH-01` tensile/yield/elongation against your own spec-limits library (built-in limits are illustrative examples only); a spec, alloy or temper missing from your library is a HOLD. - `MCM-HEAT-01` heat number already in your local history, `MCM-SIG-01` signature or certification statement, `MCM-DATE-01` cert date, `MCM-CONF-01` low-confidence fields or a PDF with no text layer (no OCR). - `MCM-DFARS-01` optional melt-country comparison against a qualifying list you configure (off by default, no built-in list). - **Exit Codes:** `0` PASS, `3` HOLD, `4` REJECT. - **Guardrails:** Runs on your machine and works offline (`--offline` makes no network call); certificate text, heat numbers, supplier names and file names are never sent. Screening aid that flags issues for human review. Not a legal, compliance, or material-certification determination; makes no DFARS or ITAR determination. - **Sample Prompt:** `Run mill_cert_matcher.py on cert.txt with po.txt and drawing.txt and show me every line that needs a human decision.` ### 14. RFQ Flowdown Triage ($39 one-time — LIVE NOW, sku: rfq-flowdown-triage) - **Status:** LIVE NOW - **SKU:** `rfq-flowdown-triage` - **Price:** $39.00 USD One-Time License (includes up to **3 workspace-reset rebinds**); card / Apple Pay / Google Pay checkout by default - **Categories:** Manufacturing / Quoting & Contract Review - **Product Page URL:** https://botappstore.com/bots/rfq-flowdown-triage.html - **Storefront Checkout URL:** https://botappstore.com/#card-rfq-flowdown-triage - **Included Skills:** `rfq-flowdown-triage-setup` + `rfq-flowdown-triage` - **Pinned Runtime (canonical SHA-256 pins, locked `chmod 500`):** - `https://botappstore.com/runtime/rfq_flowdown_triage.py` — SHA-256 `7816812f6f329881e80da89d85c3299851037e44eb7e04dd80b1262f8d1e0c07` (standalone zero-dependency Python 3 CLI; optional pinned PDF library for text-layer PDFs) - `https://botappstore.com/runtime/bot_common.py` — SHA-256 `dbbd8521357fedc348cf7dc102435d4412ea26487e08bf067038ba8c66c9bcd1` (current variant) - **Deliverable:** A pre-quote triage card that finds the quality, DFARS/FAR, CUI, export-control, special-process, certification, inspection, counterfeit-parts and record-retention clauses in an RFQ and compares each with your own supplier capability profile, with source file, page and line for every clause. Each clause is MET, GAP or UNKNOWN. Verdict: any GAP gives NO-BID-RISK, otherwise any UNKNOWN gives CLARIFY, otherwise CLEAR. - **Capabilities:** - `RFT-DFARS-01`, `RFT-CUI-01`, `RFT-EXP-01` and `RFT-DIST-01` detect that clause text is present (specialty metals, 252.204-7012 and CMMC wording, export-control wording, distribution statements) and compare it with your profile; they do not say a clause applies. Export-control clauses are classified (ITAR, EAR with ECCN, EAR99 low risk, deemed export); only truly generic wording stays UNKNOWN. - `RFT-QMS-01`, `RFT-FAI-01`, `RFT-NADCAP-01`, `RFT-CERT-01`, `RFT-SRC-01`, `RFT-CFT-01` and `RFT-REC-01` cover quality-system, first-article, special-process, certification, source-inspection, counterfeit-parts and record-retention clauses. - `RFT-REV-01` RFQ/PO vs drawing revision mismatch, `RFT-FLOW-01` a DFARS/FAR clause number outside the catalog, `RFT-CONF-01` low confidence or a PDF with no text layer (no OCR): always UNKNOWN. A blank profile entry is UNKNOWN, never a GAP and never MET. - **Exit Codes:** `0` CLEAR, `3` CLARIFY, `4` NO-BID-RISK. - **Guardrails:** Runs on your machine and works offline (`--offline` makes no network call); RFQ text, clause text, customer names and file names are never sent. Screening aid that flags issues for human review. Not a legal, export-control, or compliance determination; makes no DFARS, ITAR or EAR compliance claim. - **Sample Prompt:** `Run rfq_flowdown_triage.py on rfq.txt with profile.json and show me every clause that needs a human decision.` ### 15. FAI Results Reconciler ($39 one-time — LIVE NOW, sku: fai-results-reconciler) - **Status:** LIVE NOW - **SKU:** `fai-results-reconciler` - **Price:** $39.00 USD One-Time License (includes up to **3 workspace-reset rebinds**); card / Apple Pay / Google Pay checkout by default - **Categories:** Manufacturing / First-Article Inspection Review - **Product Page URL:** https://botappstore.com/bots/fai-results-reconciler.html - **Storefront Checkout URL:** https://botappstore.com/#card-fai-results-reconciler - **Included Skills:** `fai-results-reconciler-setup` + `fai-results-reconciler` - **Pinned Runtime (canonical SHA-256 pins, locked `chmod 500`):** - `https://botappstore.com/runtime/fai_results_reconciler.py` — SHA-256 `0dbbd34d759005d0ded1ab8c65f49be5753f6931ca7873cdbccc3b159347b4d1` (standalone zero-dependency Python 3 CLI; XLSX read with the standard library) - `https://botappstore.com/runtime/bot_common.py` — SHA-256 `dbbd8521357fedc348cf7dc102435d4412ea26487e08bf067038ba8c66c9bcd1` (current variant) - **Deliverable:** A reconciliation card that matches every characteristic in a first-article balloon list to its inspection result (CSV, TSV, XLSX, Calypso-style CSV or PC-DMIS text report) and flags what a person should look at, with the source file and row or line for every finding. Verdict: any FAIL line gives FAIL, otherwise any REVIEW line gives REVIEW, otherwise PASS; an empty or ambiguous input is never a PASS. - **Capabilities:** - `FAI-TOL-01` measured value against limits (Decimal maths; a value exactly on a limit passes); `FAI-MISS-01`, `FAI-UNM-01` and `FAI-DUP-01` flag missing, unmatched and duplicate characteristics. - `FAI-UNIT-01` inch/mm conflicts (declared units always convert exactly per row; undeclared or inferred unit fits are only ever REVIEW, never PASS), `FAI-REV-01` part number or revision mismatches and `FAI-FORM-01` missing Form 1/2 fields. - `FAI-ATTR-01` attribute results, `FAI-REF-01` REF and BASIC dimensions (listed, never evaluated), `FAI-GDT-01` material-condition modifiers (no bonus-tolerance maths) and `FAI-CONF-01` low confidence or ambiguous input: REVIEW, never a silent pass. - **Exit Codes:** `0` PASS, `3` REVIEW, `4` FAIL. - **Guardrails:** Runs on your machine and works offline (`--offline` makes no network call); balloon lists, measurements, part numbers and file names are never sent. Screening aid that flags issues for human review. Not a quality sign-off or AS9102 approval. - **Sample Prompt:** `Run fai_results_reconciler.py on balloons.csv and cmm.csv and show me every characteristic that needs a human decision.` ## Value Bundles — Multi-Bot Packs (4 Live Bundle SKUs; One License Key Unlocks All Included Bots) Bundle SKUs are priced in USD and paid by card (Stripe) through the same checkout (`POST https://www.wattcoin.org/api/v1/agents/license/stripe-checkout` with `sku: `, `storefront: "botappstore"`). A single bundle purchase returns **one** `wcl_<64-hex>` bearer license code that unlocks **every** member bot in the pack (up to 3 workspace-reset rebinds). The `stripe-session` response also includes `included_skus` (member SKU list) and `bundle_templates` (an array of `{sku, name, template_url}` with one unlisted `https://x.ai/bot/` Grok Bot template per member) so you can import every bot in the pack. Activate each imported bot on its Turn 1 with the same `wcl_...` code. Storefront section: https://botappstore.com/#bundles ### DevSecOps & AI Agent Security Pack ($69 one-time · card / Apple Pay / Google Pay via Stripe, `sku: devsecops-ai-security-pack`, 4-Bot Bundle — Save $27 vs $96 list) - **Bundle Price:** $69.00 USD one-time (card / Apple Pay / Google Pay via Stripe) (individual list total: $96). - **Included member SKUs (`included_skus`):** `bot-skill-auditor`, `mcp-config-auditor`, `dependency-vuln-triage`, `domain-infra-hygiene` - **Members:** - Bot & Skill Security Auditor (`bot-skill-auditor`, $29 list): https://botappstore.com/bots/bot-skill-auditor.html - MCP Server & Tool-Permission Security Auditor (`mcp-config-auditor`, $19 list): https://botappstore.com/bots/mcp-config-auditor.html - Dependency Vulnerability Triage Bot (`dependency-vuln-triage`, $29 list): https://botappstore.com/bots/dependency-vuln-triage.html - Domain, TLS & Email Auth Infrastructure Hygiene Auditor (`domain-infra-hygiene`, $19 list): https://botappstore.com/bots/domain-infra-hygiene.html - **License:** one `wcl_...` code unlocks all member bots in this bundle; the purchase response returns `bundle_templates` with a per-bot unlisted template URL. ### Physical AI & Manufacturing Ops Pack ($59 one-time · card / Apple Pay / Google Pay via Stripe, `sku: physical-ai-manufacturing-pack`, 2-Bot Bundle — Save $19 vs $78 list) - **Bundle Price:** $59.00 USD one-time (card / Apple Pay / Google Pay via Stripe) (individual list total: $78). - **Included member SKUs (`included_skus`):** `print-farm-ops`, `robotics-telemetry-inspector` - **Members:** - 3D Print Farm & Slicer Queue Ops (`print-farm-ops`, $29 list): https://botappstore.com/bots/print-farm-ops.html - Humanoid & Fleet Telemetry Inspector (`robotics-telemetry-inspector`, $49 list): https://botappstore.com/bots/robotics-telemetry-inspector.html - **License:** one `wcl_...` code unlocks all member bots in this bundle; the purchase response returns `bundle_templates` with a per-bot unlisted template URL. ### Founder OSINT, SEC & GTM Pack ($59 one-time · card / Apple Pay / Google Pay via Stripe, `sku: founder-research-gtm-pack`, 3-Bot Bundle — Save $18 vs $77 list) - **Bundle Price:** $59.00 USD one-time (card / Apple Pay / Google Pay via Stripe) (individual list total: $77). - **Included member SKUs (`included_skus`):** `company-deep-dive`, `sec-patent-watchdog`, `social-hub-publisher` - **Members:** - Company & Competitor Deep-Dive Analyst (`company-deep-dive`, $19 list): https://botappstore.com/bots/company-deep-dive.html - SEC & Patent Watchdog Digest (`sec-patent-watchdog`, $29 list): https://botappstore.com/bots/sec-patent-watchdog.html - Social Hub Publisher (`social-hub-publisher`, $29 list): https://botappstore.com/bots/social-hub-publisher.html - **License:** one `wcl_...` code unlocks all member bots in this bundle; the purchase response returns `bundle_templates` with a per-bot unlisted template URL. ### Institutional EDGAR Intelligence Pack ($89 one-time · card / Apple Pay / Google Pay via Stripe, `sku: edgar-intelligence-pack`, 3-Bot Bundle) - **Bundle Price:** $89.00 USD one-time (card / Apple Pay / Google Pay via Stripe). - **Included member SKUs (`included_skus`):** `company-deep-dive`, `sec-patent-watchdog`, `sec-supply-chain-mapper` - **Members:** - Company & Competitor Deep-Dive Analyst (`company-deep-dive`, $19 list): https://botappstore.com/bots/company-deep-dive.html - SEC & Patent Watchdog Digest (`sec-patent-watchdog`, $29 list): https://botappstore.com/bots/sec-patent-watchdog.html - SEC EDGAR Supply Chain & Counterparty Mapper (`sec-supply-chain-mapper`, $29 list): https://botappstore.com/bots/sec-supply-chain-mapper.html - **Covers:** end-to-end SEC 10-K/10-Q/8-K/13D dossier generation, continuous filing and USPTO patent delta alerts, and cited multi-company supply-chain and concentration mapping. - **License:** one `wcl_...` code unlocks all member bots in this bundle; the purchase response returns `bundle_templates` with a per-bot unlisted template URL. ## Licensing API All paid Grok Bot templates on BotAppStore.com use the same card checkout and license-binding contract: 1. **`POST https://www.wattcoin.org/api/v1/agents/license/stripe-checkout`** - Request body: `{"sku": "", "storefront": "botappstore"}`; add `"dry_run": true` to read the price without creating an order. - Supported SKUs: - `devsecops-ai-security-pack` ($69.00 USD one-time · card / Apple Pay / Google Pay via Stripe — DevSecOps & AI Agent Security Pack, 4-bot bundle; members: bot-skill-auditor, mcp-config-auditor, dependency-vuln-triage, domain-infra-hygiene; one `wcl_...` code unlocks all members; response adds `included_skus` + `bundle_templates`) - `physical-ai-manufacturing-pack` ($59.00 USD one-time · card / Apple Pay / Google Pay via Stripe — Physical AI & Manufacturing Ops Pack, 2-bot bundle; members: print-farm-ops, robotics-telemetry-inspector; one `wcl_...` code unlocks all members; response adds `included_skus` + `bundle_templates`) - `edgar-intelligence-pack` ($89.00 USD one-time · card / Apple Pay / Google Pay via Stripe — Institutional EDGAR Intelligence Pack, 3-bot bundle; members: company-deep-dive, sec-patent-watchdog, sec-supply-chain-mapper; one `wcl_...` code unlocks all members; response adds `included_skus` + `bundle_templates`) - `sec-supply-chain-mapper` ($29.00 USD one-time · card / Apple Pay / Google Pay via Stripe — SEC EDGAR Supply Chain & Counterparty Mapper, v1.1) - `mill-cert-matcher` ($39.00 USD — Mill Cert Matcher) - `rfq-flowdown-triage` ($39.00 USD — RFQ Flowdown Triage) - `fai-results-reconciler` ($39.00 USD — FAI Results Reconciler) - `founder-research-gtm-pack` ($59.00 USD one-time · card / Apple Pay / Google Pay via Stripe — Founder OSINT, SEC & GTM Pack, 3-bot bundle; members: company-deep-dive, sec-patent-watchdog, social-hub-publisher; one `wcl_...` code unlocks all members; response adds `included_skus` + `bundle_templates`) - `bot-skill-auditor` ($29.00 USD one-time · card / Apple Pay / Google Pay via Stripe — Bot & Skill Security Auditor) - `company-deep-dive` ($19.00 USD one-time · card / Apple Pay / Google Pay via Stripe — Company & Competitor Deep-Dive Analyst) - `sec-patent-watchdog` ($29.00 USD one-time · card / Apple Pay / Google Pay via Stripe — SEC & Patent Watchdog Digest) - `social-hub-publisher` ($29.00 USD one-time · card / Apple Pay / Google Pay via Stripe — Social Hub Publisher) - `dependency-vuln-triage` ($29.00 USD one-time · card / Apple Pay / Google Pay via Stripe — Dependency Vulnerability Triage) - `domain-infra-hygiene` ($19.00 USD one-time · card / Apple Pay / Google Pay via Stripe — Domain, TLS & Email Auth Infrastructure Hygiene Auditor) - `agent-council` ($39.00 USD one-time · card / Apple Pay / Google Pay via Stripe — Agent Council — Multi-Model Swarm Debate & Pair-Architect Collaborator) - `print-farm-ops` ($29.00 USD one-time · card / Apple Pay / Google Pay via Stripe — 3D Print Farm & Slicer Queue Ops) - `robotics-telemetry-inspector` ($49.00 USD one-time · card / Apple Pay / Google Pay via Stripe — Humanoid & Fleet Telemetry Inspector) - Response: `checkout_url`, a hosted Stripe page (card, Apple Pay, Google Pay) that a human completes. 2. **`GET https://www.wattcoin.org/api/v1/agents/license/stripe-session/`** - Returns the one-time bearer `license_code` (`wcl_<64-hex>`), the unlisted Grok Bot template import URL, and the Turn-1 activation prompt after payment. Bundle SKUs add `included_skus` and `bundle_templates`. 3. **`POST https://www.wattcoin.org/api/v1/agents/license/claim`** - Request headers: `X-Agent-Key: wck_<64-hex>` - Request body: `{"license_code": "wcl_<64-hex>", "sku": ""}` - Binds the license to the workspace's `agent_id`. Supports up to **3 workspace-reset rebinds** (`max_rebinds: 3`) if the user's `/workspace` container is recreated. 4. **`GET https://www.wattcoin.org/api/v1/agents/license?sku=`** - Request headers: `X-Agent-Key: wck_<64-hex>` - Pre-flight entitlement check executed by `/usr/bin/python3 -I /workspace/.wattcoin_license_check.py` before every paid skill run. Returns `"sku_licensed": true` when active. --- ## Verbatim Proof-of-Work Sample Outputs (BotAppStore.com — 15 Live Templates; Wave 2 and Wave 3 samples follow at the end) ### Sample 1 — Web & API Text Extractor (`getting-started` + `web-extractor`, $0 Free Forever) ```text # Turn 1 - getting-started (auto-onboarding in /workspace) [1/4] Registered workspace agent: WATTCOIN_AGENT_ID=agent_ [2/4] Wrote /workspace/.wattcoin_env (chmod 600, -rw-------): WATTCOIN_AGENT_KEY=wck_ [3/4] onboarding_v1 complete [4/4] starter_v1 complete Starter tasks complete. The agent key is never printed in chat. ``` ```http POST https://www.wattcoin.org/api/v1/scrape HTTP/2 Content-Type: application/json X-Agent-Key: wck_ {"url": "https://example.com", "format": "text"} ``` ```json HTTP/2 200 x-quota-limit: 10 x-quota-remaining: 8 x-quota-reset: 2026-10-27T00:00:00Z { "success": true, "url": "https://example.com", "format": "text", "free_tier": true, "content": "# Example Domain\n> This domain is for use in illustrative examples in documents..." } ``` Scope Note: static HTTP fetch + BeautifulSoup readable-text extraction (15 s timeout, 2 MB cap); no headless-browser or client-side JavaScript SPA rendering. `html` and `json` are paid per-call modes and run only after explicit per-call confirmation. Sample disclosure: representative sample against public/fictional targets; credentials are redacted and no secrets are shown. ### Sample 2 — Bot & Skill Security Auditor (`sku: bot-skill-auditor`, $29 one-time · card) ```markdown > This is a static inspection of the files as they exist right now. It cannot see what any fetched script, installed package, or remote endpoint will actually do — those can change after this audit. It cannot evaluate the author, the hosting account, or anything outside the files inspected. Nothing here is an assurance that this template is safe to run. # Static Capability Inspection Report: `skills-audit` (`company-deep-dive` & `web-extractor`) - **Files & Refs Inspected:** - `company-deep-dive-SKILL.md` (`12,283` of `12,283` bytes read; `hidden_unicode_lines: []`; `long_lines: []`) - `web-extractor-SKILL.md` (`3,026` of `3,026` bytes read; `hidden_unicode_lines: []`; `long_lines: []`) - **Total Bytes Inspected:** `15,309` bytes (`2` files of `50` max; aggregate budget `256,000` bytes) - **Unread / Unparsed Portions:** `None` (`100%` of both artifacts was plain text within per-file and aggregate byte limits; `unread: []`) - **Wrapper Delimiter Tag:** `83abeacb9f26f535` --- ## Bucket 1 — Prompt, Confirmation & Auditor Bypass No matching patterns (`hidden_unicode_lines`, HTML comments, instructions to skip confirmation cards, or instructions addressed to an auditor/scanner) were found in the inspected lines of `company-deep-dive-SKILL.md` or `web-extractor-SKILL.md`. This is a statement about what is present in those lines, not an assurance. --- ## Bucket 2 — Secret, Filesystem, Self-Modification & Persistence Access ### `web-extractor-SKILL.md` 1. **Combination — Local Credential Read (`WATTCOIN_AGENT_KEY` from `/workspace/.wattcoin_env`) Paired with Outbound Network Header (`X-Agent-Key` to `https://www.wattcoin.org/api/v1/scrape`):** - `web-extractor-SKILL.md:L11`: > `**Auth.** Read `WATTCOIN_AGENT_KEY` from `/workspace/.wattcoin_env` every run; send as `X-Agent-Key`. Missing file -> run `getting-started` instead of failing.` - **Mechanical Consequence:** Reads the workspace agent API key stored in `/workspace/.wattcoin_env` and transmits it as the `X-Agent-Key` HTTP header to `https://www.wattcoin.org/api/v1/scrape` (see Bucket 3). Together with `web-extractor-SKILL.md:L13`, this forms a direct data path from `/workspace/.wattcoin_env` (`WATTCOIN_AGENT_KEY`) to `https://www.wattcoin.org/api/v1/scrape`. 2. **Workspace File Writes for Extracted Output:** - `web-extractor-SKILL.md:L20`: > `**Results.** Write anything substantial to a file in `/workspace`; summarize and name the file rather than dumping into chat. Multi-page jobs: scrape sequentially, save each, report once at the end.` - **Mechanical Consequence:** Writes scraped response content to files inside `/workspace`. ### `company-deep-dive-SKILL.md` 1. **Helper Execution Touching Workspace License & Dossier Files (`/workspace/.wattcoin_license_check.py`, `/workspace/.wattcoin_dd_fetch.py`, `/workspace/dossiers/...`):** - `company-deep-dive-SKILL.md:L11-L14`: > `Never read `/workspace/.wattcoin_env`, `/workspace/.wattcoin_env.bak*`, or `/workspace/.wattcoin_patentsview_key` into chat or model context, never print `WATTCOIN_AGENT_KEY` or `wcl_...` in chat, never modify `/workspace/.wattcoin_license_check.py` or `/workspace/.wattcoin_dd_fetch.py`, and never send any local credential or file content to any external host.` > `1. Before each dossier run, execute `/usr/bin/python3 -I /workspace/.wattcoin_license_check.py`.` - `company-deep-dive-SKILL.md:L19`: > `/usr/bin/python3 -I /workspace/.wattcoin_dd_fetch.py --stdin-json << 'WATTCOIN_DD_REQ_EOF'` - `company-deep-dive-SKILL.md:L27`: > `3. Read the fetched data **only** from `wrapped_sources_path` (`/workspace/dossiers/--<6hex>/WRAPPED_SOURCES.txt`), where the entire payload is framed inside a random 128-bit `> ... >` tag generated with `secrets.token_hex(16)`. Do **not** read `raw_sources_path` (`RAW_SOURCES.json` is saved on disk at `0600` for user export only).` - `company-deep-dive-SKILL.md:L32`: > `- **SEC EDGAR Compliance:** Sends `User-Agent: WattCoinDeepDive/1.0 (https://botappstore.com; contact@wattcoin.org)` (or a user-specific contact string if placed in `/workspace/.wattcoin_sec_ua` at `0600`) and enforces `<= 5 requests/second` (`>= 0.22s` interval across all requests and redirect hops).` - **Mechanical Consequence:** Invokes two local Python helper scripts in `/workspace` (`.wattcoin_license_check.py` and `.wattcoin_dd_fetch.py`) and reads/writes dossier artifacts under `/workspace/dossiers/--<6hex>/` (`SCOPE_NOTE.txt`, `RAW_SOURCES.json`, `WRAPPED_SOURCES.txt`, `REPORT.md`), while referencing optional workspace configuration files `/workspace/.wattcoin_patentsview_key` and `/workspace/.wattcoin_sec_ua`. --- ## Bucket 3 — Outbound Network, Exfiltration & MCP Connectors ### `web-extractor-SKILL.md` 1. **Combination — Outbound POST to `https://www.wattcoin.org/api/v1/scrape` Carrying `X-Agent-Key` from `/workspace/.wattcoin_env` and Target URL:** - `web-extractor-SKILL.md:L9`: > `You fetch and extract web page content and JSON endpoints through the `https://www.wattcoin.org/api/v1/scrape` API.` - `web-extractor-SKILL.md:L11`: > `**Auth.** Read `WATTCOIN_AGENT_KEY` from `/workspace/.wattcoin_env` every run; send as `X-Agent-Key`. Missing file -> run `getting-started` instead of failing.` - `web-extractor-SKILL.md:L13`: > `**Calling.** POST `https://www.wattcoin.org/api/v1/scrape` with the URL and `"format"`:` - **Mechanical Consequence:** Sends an outbound HTTPS `POST` request to `https://www.wattcoin.org/api/v1/scrape` containing the user-requested target URL and the `X-Agent-Key` header read from `/workspace/.wattcoin_env` (Bucket 2). 2. **Direct Outbound `curl` Fallback to User-Specified ``:** - `web-extractor-SKILL.md:L30`: > `**Fallback when out of quota:** run `curl -sL ` piped to `python3 -c 'import sys, bs4; print(bs4.BeautifulSoup(sys.stdin.read(), "html.parser").get_text(" ", strip=True))'` in `/workspace` (`bs4` is preinstalled in the container; if `ImportError` ever occurs, run `pip install --quiet beautifulsoup4 2>/dev/null` first).` - **Mechanical Consequence:** Fetches `` directly from the sandbox container using `curl -sL` when the cloud API returns HTTP `429` (`quota_exhausted`). ### `company-deep-dive-SKILL.md` 1. **Outbound Regulatory & Registry Queries via `/workspace/.wattcoin_dd_fetch.py` (`www.sec.gov`, `data.sec.gov`, `efts.sec.gov`, `search.patentsview.org`, `rdap.org`, `image-ppubs.uspto.gov`):** - `company-deep-dive-SKILL.md:L31`: > `- **HTTPS-Only, DNS-Pinned IP Validation & SSRF Protection (`validate_and_resolve_host`):** Only queries `www.sec.gov`, `data.sec.gov`, `efts.sec.gov`, `search.patentsview.org`, and `rdap.org` (plus verified public RDAP registry redirects matching `ALLOWED_RDAP_DOMAINS` on exact domain or dot-boundary subdomains).` - `company-deep-dive-SKILL.md:L32`: > `- **SEC EDGAR Compliance:** Sends `User-Agent: WattCoinDeepDive/1.0 (https://botappstore.com; contact@wattcoin.org)` (or a user-specific contact string if placed in `/workspace/.wattcoin_sec_ua` at `0600`) and enforces `<= 5 requests/second` (`>= 0.22s` interval across all requests and redirect hops).` - `company-deep-dive-SKILL.md:L61`: > `- Deduplicated list of every primary URL (`data.sec.gov`, `www.sec.gov/Archives/...`, `efts.sec.gov`, `search.patentsview.org`, `image-ppubs.uspto.gov`, `rdap.org`) and its exact UTC `retrieved_at` timestamp used in the dossier.` - **Mechanical Consequence:** Sends company, ticker, CIK, and domain query strings to SEC EDGAR (`www.sec.gov`, `data.sec.gov`, `efts.sec.gov`), USPTO PatentsView (`search.patentsview.org`), and RDAP (`rdap.org`), and sends the contents of `/workspace/.wattcoin_sec_ua` (if present) as the HTTP `User-Agent` header and `/workspace/.wattcoin_patentsview_key` (if present) to `search.patentsview.org`. --- ## Bucket 4 — Unverifiable Runtime Execution & Obfuscation ### `web-extractor-SKILL.md` 1. **Unpinned `pip install` Fallback (`beautifulsoup4`):** - `web-extractor-SKILL.md:L30`: > `**Fallback when out of quota:** run `curl -sL ` piped to `python3 -c 'import sys, bs4; print(bs4.BeautifulSoup(sys.stdin.read(), "html.parser").get_text(" ", strip=True))'` in `/workspace` (`bs4` is preinstalled in the container; if `ImportError` ever occurs, run `pip install --quiet beautifulsoup4 2>/dev/null` first).` - **Mechanical Consequence:** Contains an unpinned `pip install --quiet beautifulsoup4` fallback command if `bs4` raises `ImportError`. What an unpinned package install fetches from PyPI today may differ from what it fetches tomorrow. ### `company-deep-dive-SKILL.md` 1. **Delegated Execution of Workspace Helper Scripts (`/workspace/.wattcoin_license_check.py` and `/workspace/.wattcoin_dd_fetch.py`):** - `company-deep-dive-SKILL.md:L12`: > `1. Before each dossier run, execute `/usr/bin/python3 -I /workspace/.wattcoin_license_check.py`.` - `company-deep-dive-SKILL.md:L19`: > `/usr/bin/python3 -I /workspace/.wattcoin_dd_fetch.py --stdin-json << 'WATTCOIN_DD_REQ_EOF'` - **Mechanical Consequence:** Executes two Python scripts located in `/workspace` (installed by `company-deep-dive-setup`), whose contents reside outside `company-deep-dive-SKILL.md` itself and must be inspected separately if modified. --- ## Bucket 5 — Local Machine Escalation No matching patterns (`ListMachines`, `machineId`, `CopyToBox`, `CopyFromBox`, or host PC execution instructions) were found in the inspected lines of `company-deep-dive-SKILL.md` or `web-extractor-SKILL.md`. This is a statement about what is present in those lines, not an assurance. ``` ### Sample 3 — Company & Competitor Deep-Dive Analyst (`sku: company-deep-dive`, $19 one-time · card) ```markdown > This dossier is an automated compilation of public regulatory filings (SEC EDGAR), patent records (USPTO PatentsView), and domain registration records (RDAP) as retrieved at the UTC timestamps cited below. Public filings reflect registrant assertions and may be amended, delayed, or incomplete. Private subsidiaries, unfiled municipal permits, trade secrets, and commercial contracts below materiality thresholds are not visible in public registries. Nothing in this dossier is investment advice, a price target, a credit rating, or a legal conclusion. # Company & Competitor Primary-Source Dossier: NVIDIA CORP (`NVDA`) vs. `AMD` & `INTC` - **Dossier ID:** `nvda-20261026T014632Z-00c5cb` - **Generated At (UTC):** `2026-10-26T01:46:35Z` (`2026-10-25 21:46:35 EDT`) - **Primary Entity:** `NVIDIA CORP` (`CIK 0001045810`, Ticker: `NVDA`) - **Primary Domain:** `nvidia.com` - **Competitor Cohort:** `ADVANCED MICRO DEVICES INC` (`CIK 0000002488`, Ticker: `AMD`), `INTEL CORP` (`CIK 0000050863`, Ticker: `INTC`) - **Documents Retrieved:** `9 / 40` (Cap: `5` entities, `40` HTTP requests, `204,800` bytes/doc, `15s` timeout) - **Skipped / Failed Sources:** `0` --- ## Section 1 — Entity Snapshot & Verified Identifiers | Field | Primary-Source Value | Source / Retrieval Timestamp (UTC) | |---|---|---| | **Legal Entity Name** | `NVIDIA CORP` | `https://data.sec.gov/submissions/CIK0001045810.json` (`2026-10-26T01:46:32Z`) | | **SEC CIK (10-digit)** | `0001045810` | `https://data.sec.gov/submissions/CIK0001045810.json` (`2026-10-26T01:46:32Z`) | | **Entity Type** | `operating` | `https://data.sec.gov/submissions/CIK0001045810.json` (`2026-10-26T01:46:32Z`) | | **Tickers & Exchanges** | `NVDA` (`Nasdaq`) | `https://www.sec.gov/files/company_tickers.json` (`2026-10-26T01:46:32Z`) | | **SIC Code & Description** | `3674` — *Semiconductors & Related Devices* | `https://data.sec.gov/submissions/CIK0001045810.json` (`2026-10-26T01:46:32Z`) | | **State of Incorporation** | `DE` (Delaware) | `https://data.sec.gov/submissions/CIK0001045810.json` (`2026-10-26T01:46:32Z`) | | **EIN** | `94-3177549` (`943177549`) | `https://data.sec.gov/submissions/CIK0001045810.json` (`2026-10-26T01:46:32Z`) | | **Fiscal Year End (MMDD)** | `0131` (January 31) | `https://data.sec.gov/submissions/CIK0001045810.json` (`2026-10-26T01:46:32Z`) | | **Latest Annual Report (`10-K`)** | `2026-02-25` | `https://data.sec.gov/submissions/CIK0001045810.json` (`2026-10-26T01:46:32Z`) | | **Latest Quarterly Report (`10-Q`)** | `2026-08-26` (Period Ended `2026-07-26`, Accession `0001045810-26-000075`) | `https://www.sec.gov/Archives/edgar/data/1045810/000104581026000075/nvda-20260726.htm` (`2026-10-26T01:46:32Z`) | | **180-Day `8-K` Event Velocity** | `8` filings | `https://data.sec.gov/submissions/CIK0001045810.json` (`2026-10-26T01:46:32Z`) | | **Recent `Form D` Private Offerings** | `0` in recent submissions window | `https://data.sec.gov/submissions/CIK0001045810.json` (`2026-10-26T01:46:32Z`) | --- ## Section 2 — SEC EDGAR Filing & Capital Breakdown ### 2.1 Primary Periodic & Current Reports (`10-K`, `10-Q`, `8-K`) — `NVIDIA CORP` (`CIK 0001045810`) | Form | Filing Date | Report Date | Items | Accession Number | Direct SEC Archive URL | |---|---|---|---|---|---| | `8-K` | `2026-09-03` | `2026-09-02` | `8.01` (Other Events) | `0001045810-26-000078` | https://www.sec.gov/Archives/edgar/data/1045810/000104581026000078/nvda-20260902.htm | | `10-Q` | `2026-08-26` | `2026-07-26` | Quarterly Report | `0001045810-26-000075` | https://www.sec.gov/Archives/edgar/data/1045810/000104581026000075/nvda-20260726.htm | | `8-K` | `2026-08-26` | `2026-08-26` | `2.02, 9.01` (Results of Operations & Financial Condition; Exhibits) | `0001045810-26-000073` | https://www.sec.gov/Archives/edgar/data/1045810/000104581026000073/nvda-20260826.htm | | `8-K` | `2026-08-17` | `2026-08-17` | `1.01, 2.03, 7.01` (Entry into a Material Definitive Agreement; Creation of a Direct Financial Obligation; Reg FD) | `0001045810-26-000069` | https://www.sec.gov/Archives/edgar/data/1045810/000104581026000069/nvda-20260817.htm | | `8-K` | `2026-07-02` | `2026-06-28` | `5.02` (Departure/Election of Directors or Principal Officers; Compensatory Arrangements) | `0001045810-26-000060` | https://www.sec.gov/Archives/edgar/data/1045810/000104581026000060/nvda-20260628.htm | | `8-K` | `2026-06-30` | `2026-06-24` | `5.07` (Submission of Matters to a Vote of Security Holders) | `0001045810-26-000056` | https://www.sec.gov/Archives/edgar/data/1045810/000104581026000056/nvda-20260624.htm | ### 2.2 Recent Insider Ownership Filings (`Form 4` Sample from Latest 25 Filings) — `NVIDIA CORP` (`CIK 0001045810`) | Form | Filing Date | Report Date | Accession Number | Direct SEC Archive URL | |---|---|---|---|---| | `4` | `2026-10-09` | `2026-10-07` | `0001197647-26-000011` | https://www.sec.gov/Archives/edgar/data/1045810/000119764726000011/0001197647-26-000011-index.htm | | `4` | `2026-09-23` | `2026-09-21` | `0001696841-26-000014` | https://www.sec.gov/Archives/edgar/data/1045810/000169684126000014/0001696841-26-000014-index.htm | | `4` | `2026-09-22` | `2026-09-18` | `0001199039-26-000016` | https://www.sec.gov/Archives/edgar/data/1045810/000119903926000016/0001199039-26-000016-index.htm | | `4` | `2026-09-18` | `2026-09-16` | `0001243821-26-000007` | https://www.sec.gov/Archives/edgar/data/1045810/000124382126000007/0001243821-26-000007-index.htm | | `4` | `2026-09-18` | `2026-09-16` | `0001283854-26-000010` | https://www.sec.gov/Archives/edgar/data/1045810/000128385426000010/0001283854-26-000010-index.htm | | `4` | `2026-09-18` | `2026-09-16` | `0001696841-26-000012` | https://www.sec.gov/Archives/edgar/data/1045810/000169684126000012/0001696841-26-000012-index.htm | | `4` | `2026-09-18` | `2026-09-16` | `0001588670-26-000014` | https://www.sec.gov/Archives/edgar/data/1045810/000158867026000014/0001588670-26-000014-index.htm | | `4` | `2026-09-18` | `2026-09-16` | `0001197649-26-000012` | https://www.sec.gov/Archives/edgar/data/1045810/000119764926000012/0001197649-26-000012-index.htm | | `4` | `2026-09-11` | `2026-09-09` | `0002152188-26-000005` | https://www.sec.gov/Archives/edgar/data/1045810/000215218826000005/0002152188-26-000005-index.htm | | `4` | `2026-09-08` | `2026-09-03` | `0001199039-26-000014` | https://www.sec.gov/Archives/edgar/data/1045810/000119903926000014/0001199039-26-000014-index.htm | --- ## Section 3 — Patent & IP Footprint ### 3.1 SEC EDGAR Full-Text Patent & IP Disclosures (`efts.sec.gov`) | Entity | Query Organization | Total Indexed SEC IP Filing Hits (`10-K`, `10-Q`, `8-K`, `S-1`, `20-F`) | Retrieval Timestamp (UTC) | Source Query URL | |---|---|---:|---|---| | **NVIDIA CORP (`NVDA`)** | `NVIDIA CORP` | **148** | `2026-10-26T01:46:32Z` | `https://efts.sec.gov/LATEST/search-index?q=%22NVIDIA%20CORP%22%20AND%20%28patent%20OR%20%22intellectual%20property%22%20OR%20USPTO%29&forms=10-K,10-Q,8-K,S-1,20-F` | | **ADVANCED MICRO DEVICES INC (`AMD`)** | `ADVANCED MICRO DEVICES INC` | **1,980** | `2026-10-26T01:46:33Z` | `https://efts.sec.gov/LATEST/search-index?q=%22ADVANCED%20MICRO%20DEVICES%20INC%22%20AND%20%28patent%20OR%20%22intellectual%20property%22%20OR%20USPTO%29&forms=10-K,10-Q,8-K,S-1,20-F` | | **INTEL CORP (`INTC`)** | `INTEL CORP` | **570** | `2026-10-26T01:46:34Z` | `https://efts.sec.gov/LATEST/search-index?q=%22INTEL%20CORP%22%20AND%20%28patent%20OR%20%22intellectual%20property%22%20OR%20USPTO%29&forms=10-K,10-Q,8-K,S-1,20-F` | #### Representative Indexed SEC IP Disclosure Filings (`NVIDIA CORP`) - `10-K` filed `2012-03-13` (Period Ending `2012-01-29`, Accession `0001045810-12-000013`): https://www.sec.gov/Archives/edgar/data/1045810/000104581012000013/nvda-2012x10k.htm - `10-Q` filed `2011-11-22` (Period Ending `2011-10-30`, Accession `0001045810-11-000056`): https://www.sec.gov/Archives/edgar/data/1045810/000104581011000056/nvda2011q310q.htm - `10-Q` filed `2011-08-25` (Period Ending `2011-07-31`, Accession `0001045810-11-000046`): https://www.sec.gov/Archives/edgar/data/1045810/000104581011000046/q212form10q.htm - `10-Q` filed `2011-05-27` (Period Ending `2011-05-01`, Accession `0001045810-11-000031`): https://www.sec.gov/Archives/edgar/data/1045810/000104581011000031/q112form10q.htm - `10-K` filed `2011-03-16` (Period Ending `2011-01-30`, Accession `0001045810-11-000015`): https://www.sec.gov/Archives/edgar/data/1045810/000104581011000015/fy2011form10k.htm ### 3.2 USPTO PatentsView Docket Status (`search.patentsview.org`) - **Status:** `api_key_optional_not_configured` (checked at `2026-10-26T01:46:33Z`–`2026-10-26T01:46:35Z`). No optional `/workspace/.wattcoin_patentsview_key` was present; SEC EDGAR EFTS full-text IP disclosures were retrieved directly as the primary regulatory IP source. --- ## Section 4 — Domain & Technical Infrastructure Footprint (`RDAP`) | Field | Primary-Source Value | Source / Retrieval Timestamp (UTC) | |---|---|---| | **Queried Domain** | `nvidia.com` | `https://rdap.org/domain/nvidia.com` (`2026-10-26T01:46:33Z`) | | **Registry Handle** | `4076489_DOMAIN_COM-VRSN` | `https://rdap.org/domain/nvidia.com` (`2026-10-26T01:46:33Z`) | | **Sponsoring Registrar** | `SafeNames Ltd.` | `https://rdap.org/domain/nvidia.com` (`2026-10-26T01:46:33Z`) | | **Domain Status Flags** | `client delete prohibited`, `client transfer prohibited`, `server delete prohibited`, `server transfer prohibited`, `server update prohibited` | `https://rdap.org/domain/nvidia.com` (`2026-10-26T01:46:33Z`) | | **Initial Registration Date** | `1993-04-20T04:00:00Z` | `https://rdap.org/domain/nvidia.com` (`2026-10-26T01:46:33Z`) | | **Registry Expiration Date** | `2034-04-21T04:00:00Z` | `https://rdap.org/domain/nvidia.com` (`2026-10-26T01:46:33Z`) | | **Last Changed Timestamp** | `2025-04-01T01:32:38Z` | `https://rdap.org/domain/nvidia.com` (`2026-10-26T01:46:33Z`) | | **RDAP Database Update** | `2026-10-26T01:46:15Z` | `https://rdap.org/domain/nvidia.com` (`2026-10-26T01:46:33Z`) | | **Authoritative Nameservers** | `dns1.p09.nsone.net`, `dns2.p09.nsone.net`, `ns5.dnsmadeeasy.com`, `ns6.dnsmadeeasy.com`, `ns7.dnsmadeeasy.com` | `https://rdap.org/domain/nvidia.com` (`2026-10-26T01:46:33Z`) | --- ## Section 5 — Competitor Comparison Matrix (`NVDA` vs. `AMD` vs. `INTC`) | Metric | `NVIDIA CORP` (`NVDA`) | `ADVANCED MICRO DEVICES INC` (`AMD`) | `INTEL CORP` (`INTC`) | |---|---|---|---| | **SEC CIK** | `0001045810` | `0000002488` | `0000050863` | | **Exchange / Ticker** | `Nasdaq: NVDA` | `Nasdaq: AMD` | `Nasdaq: INTC` | | **SIC Code** | `3674` (*Semiconductors & Related Devices*) | `3674` (*Semiconductors & Related Devices*) | `3674` (*Semiconductors & Related Devices*) | | **State of Incorporation** | `DE` | `DE` | `DE` | | **EIN** | `943177549` | `941692300` | `941672743` | | **Fiscal Year End (MMDD)** | `0131` | `1226` | `1227` | | **Latest `10-K` Filing Date** | `2026-02-25` | `2026-02-04` | `2026-01-23` | | **Latest `10-Q` Filing Date** | `2026-08-26` (`0001045810-26-000075`) | `2026-08-05` | `2026-07-24` (`0000050863-26-000157`) | | **180-Day `8-K` Count** | `8` | `7` | `4` | | **Recent `Form D` Count** | `0` | `0` | `2` | | **Latest Material `8-K` Items** | `8.01` (`2026-09-03`), `2.02, 9.01` (`2026-08-26`), `1.01, 2.03, 7.01` (`2026-08-17`) | `3.02` (`2026-09-28`, `0000002488-26-000182`), `5.02, 9.01` (`2026-08-19`, `0000002488-26-000163`), `1.01, 2.03, 9.01` (`2026-08-17`, `0001193125-26-354029`) | `7.01, 8.01, 9.01` (`2026-08-12`, `0001193125-26-346806`), `2.02, 9.01` (`2026-07-23`, `0000050863-26-000155`), `5.07` (`2026-05-15`, `0000050863-26-000118`) | | **SEC EFTS Patent/IP Hits** | `148` | `1,980` | `570` | --- ## Section 6 — Skipped, Unverified, or Unavailable Sources Log - **HTTP / Network Skipped Sources (`skipped` array):** `0` (all `9` outbound HTTPS requests completed with HTTP `200 OK` within the `15s` deadline and byte caps). - **Optional USPTO PatentsView API Key:** `patentsview_status: "api_key_optional_not_configured"` for `NVDA`, `AMD`, and `INTC` (`/workspace/.wattcoin_patentsview_key` not configured; SEC EDGAR EFTS IP/patent search index queried instead). --- ## Section 7 — Primary Source Index | # | Target Entity / Scope | Source URL | Status | Retrieved At (UTC) | |---:|---|---|---|---| | 1 | SEC EDGAR Company Tickers Index | `https://www.sec.gov/files/company_tickers.json` | `200 OK` | `2026-10-26T01:46:32Z` | | 2 | `NVIDIA CORP` (`CIK 0001045810`) Submissions | `https://data.sec.gov/submissions/CIK0001045810.json` | `200 OK` | `2026-10-26T01:46:32Z` | | 3 | `NVIDIA CORP` SEC EFTS Patent/IP Index | `https://efts.sec.gov/LATEST/search-index?q=%22NVIDIA%20CORP%22%20AND%20%28patent%20OR%20%22intellectual%20property%22%20OR%20USPTO%29&forms=10-K,10-Q,8-K,S-1,20-F` | `200 OK` | `2026-10-26T01:46:32Z` | | 4 | `nvidia.com` RDAP Domain Lookup | `https://rdap.org/domain/nvidia.com` | `200 OK` | `2026-10-26T01:46:33Z` | | 5 | `nvidia.com` Registry RDAP Redirect (Verisign) | `https://rdap.verisign.com/com/v1/domain/nvidia.com` | `200 OK` | `2026-10-26T01:46:33Z` | | 6 | `ADVANCED MICRO DEVICES INC` (`CIK 0000002488`) Submissions | `https://data.sec.gov/submissions/CIK0000002488.json` | `200 OK` | `2026-10-26T01:46:33Z` | | 7 | `ADVANCED MICRO DEVICES INC` SEC EFTS Patent/IP Index | `https://efts.sec.gov/LATEST/search-index?q=%22ADVANCED%20MICRO%20DEVICES%20INC%22%20AND%20%28patent%20OR%20%22intellectual%20property%22%20OR%20USPTO%29&forms=10-K,10-Q,8-K,S-1,20-F` | `200 OK` | `2026-10-26T01:46:33Z` | | 8 | `INTEL CORP` (`CIK 0000050863`) Submissions | `https://data.sec.gov/submissions/CIK0000050863.json` | `200 OK` | `2026-10-26T01:46:34Z` | | 9 | `INTEL CORP` SEC EFTS Patent/IP Index | `https://efts.sec.gov/LATEST/search-index?q=%22INTEL%20CORP%22%20AND%20%28patent%20OR%20%22intellectual%20property%22%20OR%20USPTO%29&forms=10-K,10-Q,8-K,S-1,20-F` | `200 OK` | `2026-10-26T01:46:34Z` | ``` ### Sample 4 — SEC & Patent Watchdog Digest (`sku: sec-patent-watchdog`, $29 one-time · card) ```markdown # SEC & Patent Watchdog Delta Digest > Scope Note (SCOPE_NOTE.txt): Automated delta compilation of public SEC EDGAR filings and USPTO patent publications. This report is not investment, financial, or legal advice, makes no stock buy/sell/hold recommendation, and makes no patent validity or infringement determination. - Generated At (UTC): 2026-10-25T13:00:00Z - Watchlist (2/10): NVDA (CIK 0001045810), AMD (CIK 0000002488) - Baseline: /workspace/watchlists/state.json (last checked 2026-10-24T13:00:00Z) - Delta: 3 new SEC filings, 1 new patent publication ## 1. NVDA — NVIDIA CORP (CIK: 0001045810) | Form | Filed Date | Accession Number | Primary Document & Items | Archive URL | | :--- | :--- | :--- | :--- | :--- | | 8-K | 2026-10-24 | 0001045810-26-000212 | Item 5.02 · nvda-20261022.htm | https://www.sec.gov/Archives/edgar/data/1045810/000104581026000212/nvda-20261022.htm | | Form 4 | 2026-10-23 | 0001045810-26-000209 | Insider transaction · xslF345X05/form4.xml | https://www.sec.gov/Archives/edgar/data/1045810/000104581026000209/form4.xml | ## 2. AMD — ADVANCED MICRO DEVICES INC (CIK: 0000002488) | Form | Filed Date | Accession Number | Primary Document & Items | Archive URL | | :--- | :--- | :--- | :--- | :--- | | 13F-HR | 2026-10-24 | 0000002488-26-000118 | Institutional holdings · primary_doc.xml | https://www.sec.gov/Archives/edgar/data/2488/000000248826000118/primary_doc.xml | ## 3. Patent & IP Disclosure Delta (USPTO PatentsView / SEC EFTS) - AMD (ADVANCED MICRO DEVICES INC): 1 new patent publication since baseline (`2026-10-24T13:00:00Z`) — logged in `/workspace/watchlists/DELTA_SUMMARY.json` with publication ID and retrieval timestamp. ## 4. Zero-Noise Routine Rule - Outputs written to `/workspace/watchlists/DELTA_SUMMARY.json` and `/workspace/watchlists/DIGEST_20261025T130000Z.md`. - When `delta == 0` across all watched CIKs and patent queries, no digest file is written and the scheduled Grok Bot routine sends zero alert messages. ``` --- ## Wave 2 - social-hub-publisher ($29 one-time · card / Apple Pay / Google Pay via Stripe; LIVE NOW) - **SKU:** `social-hub-publisher` - **Page:** https://botappstore.com/bots/social-hub-publisher.html - **Skills:** `social-hub-publisher-setup`, `social-hub-publisher` - **Summary:** Config-driven publishing queue for X, Discord webhooks, Bluesky and Telegram for Grok Bot ($29). Gate 1 lint, HMAC approval, Gate 2 verification, free X Web Intents, dry-run by default. - **Capabilities:** - Gate 1 linter: per-channel length (X weights URLs as 23), link-domain allowlist, banned terms, hashtag/mention caps, duplicate detection. - `approve` HMAC-SHA256 signs the exact text with an expiry; Gate 2 in the dispatcher refuses edited, expired or unsigned items. - X: free 1-click Web Intent links by default. Optional API mode uses 2026 pay-per-use pricing: `$0.015` per plain post, `$0.20` per post that contains a link. - Discord webhooks (mentions suppressed), Bluesky AT Protocol (link facets with byte offsets), Telegram Bot API. - Dry run unless `--live`; an ambiguous send is marked `unknown_outcome` and never auto-retried. Python standard library only. - **Boundaries:** - Posts only to accounts you configure, only text you approved. - No fake engagement, no duplicate-post spam, no bypassing the allowlist or banned terms. - Never prints or stores your credentials in the queue. ### Verbatim sample output ```text # social-hub-publisher — sample session (fictional brand: Acme Cloud Tools) Real output from the shipped code; HMAC secret and queue were throw-away. $ python3 packages/social-hub-publisher/social_hub.py --config /tmp/shp/config.json add --channel x --id launch-x --text Acme Cloud Tools 2.0 is live: faster deploys, simpler pricing. Notes: https://acme-cloud.example/2-0 #release added launch-x (x, 102/280) [exit 0] $ python3 packages/social-hub-publisher/social_hub.py --config /tmp/shp/config.json add --channel discord --target announcements --id launch-dc --text Acme Cloud Tools 2.0 is out. Full notes: https://docs.acme-cloud.example/changelog added launch-dc (discord, 82/2000) [exit 0] $ python3 packages/social-hub-publisher/social_hub.py --config /tmp/shp/config.json add --channel bluesky --id launch-bsky --text Acme Cloud Tools 2.0 shipped today. Guaranteed zero downtime upgrades!!! added launch-bsky (bluesky, 72/300) [exit 0] $ python3 packages/social-hub-publisher/social_hub.py --config /tmp/shp/config.json add --channel telegram --id launch-tg --text Acme Cloud Tools 2.0 is out - changelog at https://evil.example/post added launch-tg (telegram, 68/4096) [exit 0] ## Gate 1 — lint $ python3 packages/social-hub-publisher/social_hub.py --config /tmp/shp/config.json lint launch-x [OK] [INFO ] X_COST: API cost if posted via API: $0.200 (has link); Web Intent is free launch-dc [OK] launch-bsky [ERROR] [ERROR] BANNED_TERM: banned term 'guaranteed' [WARN ] PUNCTUATION: repeated exclamation marks launch-tg [ERROR] [ERROR] DOMAIN_NOT_ALLOWED: link host 'evil.example' is not in lint.allowed_domains [exit 2] ## Approve (signs the exact text) — two items pass, two are refused $ python3 packages/social-hub-publisher/social_hub.py --config /tmp/shp/config.json approve --id launch-x launch-x APPROVED until 2026-11-03T04:46:09Z [INFO ] X_COST: API cost if posted via API: $0.200 (has link); Web Intent is free [exit 0] $ python3 packages/social-hub-publisher/social_hub.py --config /tmp/shp/config.json approve --id launch-dc launch-dc APPROVED until 2026-11-03T04:46:09Z [exit 0] $ python3 packages/social-hub-publisher/social_hub.py --config /tmp/shp/config.json approve --id launch-bsky launch-bsky REFUSED (Gate 1 errors) [ERROR] BANNED_TERM: banned term 'guaranteed' [WARN ] PUNCTUATION: repeated exclamation marks [exit 2] $ python3 packages/social-hub-publisher/social_hub.py --config /tmp/shp/config.json approve --id launch-tg launch-tg REFUSED (Gate 1 errors) [ERROR] DOMAIN_NOT_ALLOWED: link host 'evil.example' is not in lint.allowed_domains [exit 2] ## Free 1-click X Web Intent $ python3 packages/social-hub-publisher/social_hub.py --config /tmp/shp/config.json intent --id launch-x https://x.com/intent/post?text=Acme%20Cloud%20Tools%202.0%20is%20live%3A%20faster%20deploys%2C%20simpler%20pricing.%20Notes%3A%20https%3A%2F%2Facme-cloud.example%2F2-0%20%23release # free, 1-click: open the URL, review, press Post. 2026 X API pay-per-use: $0.015 per plain post, $0.20 per post containing a URL. Web Intents are free and 1-click: you press Post yourself. [exit 0] ## Gate 2 — dispatcher dry run (nothing is sent without --live) $ python3 packages/social-hub-publisher/dispatcher.py --config /tmp/shp/config.json launch-x DRY-RUN would send to x launch-dc DRY-RUN would send to discord [exit 0] ## Tamper test — edit approved text, Gate 2 refuses $ python3 packages/social-hub-publisher/dispatcher.py --config /tmp/shp/config.json launch-x DRY-RUN would send to x launch-dc REFUSED text changed after approval [exit 2] ``` --- ## Wave 2 - dependency-vuln-triage ($29 one-time · card / Apple Pay / Google Pay via Stripe; LIVE NOW) - **SKU:** `dependency-vuln-triage` - **Page:** https://botappstore.com/bots/dependency-vuln-triage.html - **Skills:** `dependency-vuln-triage-setup`, `dependency-vuln-triage` - **Summary:** Lockfile vulnerability triage for Grok Bot ($29): OSV.dev advisories enriched with FIRST EPSS and CISA KEV, sorted into four action buckets with fix versions. - **Capabilities:** - Parses `package-lock.json` (v1-v3), `yarn.lock`, `Pipfile.lock`, `poetry.lock`, pinned `requirements.txt`, `Cargo.lock` and `go.sum`. - Batch queries OSV.dev, merges GHSA/PYSEC/CVE aliases into one advisory, then adds FIRST EPSS v1 scores and CISA KEV listings. - Buckets: `KEV_ACTIVE_EXPLOIT`, `HIGH_EPSS_URGENT` (default threshold 0.10), `PATCH_AVAILABLE`, `LOW_PRIORITY_MONITOR`, plus a per-package upgrade plan. - Only package names and versions leave your machine. Exit code 1 on findings at `--fail-on`, 11 when a source is down so an outage never looks clean; Markdown or JSON output. - **Boundaries:** - Does not scan source code or judge reachability; EPSS is a probability estimate, not a verdict. - Never installs, upgrades or edits your project. - Never claims a project is secure. ### Verbatim sample output ```text # Dependency vulnerability triage - **File:** `package-lock.json` - **Retrieved:** 2026-10-27 04:50:13 UTC | tool=dependency_vuln_triage v1.0 - **Packages checked:** 7 | **with advisories:** 6 | **advisories:** 59 - **Sources:** cisa_kev=200, epss=200, osv_querybatch=200, osv_vulns=200 | KEV catalog released 2026-10-26T22:24:24.6101Z - **EPSS threshold:** 0.10 | Bucket | Advisories | |---|---| | `KEV_ACTIVE_EXPLOIT` | 1 | | `HIGH_EPSS_URGENT` | 4 | | `PATCH_AVAILABLE` | 54 | | `LOW_PRIORITY_MONITOR` | 0 | ## KEV_ACTIVE_EXPLOIT (1) | Package | Installed | Advisory | Severity | EPSS (pctl) | KEV | Fixed in | |---|---|---|---|---|---|---| | `vite` | 5.0.0 | CVE-2025-31125, GHSA-4r4m-qw57-chr8 | MODERATE | 0.6576 (99.3%) @2026-10-26 | added 2026-01-22 | 5.4.16 | ## HIGH_EPSS_URGENT (4) | Package | Installed | Advisory | Severity | EPSS (pctl) | KEV | Fixed in | |---|---|---|---|---|---|---| | `vite` | 5.0.0 | CVE-2025-30208, GHSA-x574-m823-4x7w | MODERATE | 0.7477 (99.5%) @2026-10-26 | - | 5.4.15 | | `vite` | 5.0.0 | CVE-2025-31486, GHSA-xcj6-pq6g-qj4x | MODERATE | 0.4046 (98.6%) @2026-10-26 | - | 5.4.17 | | `lodash` | 4.17.15 | CVE-2021-23337, GHSA-35jh-r3h4-6jhm | HIGH | 0.2133 (97.6%) @2026-10-26 | - | 4.17.21 | | `axios` | 0.21.0 | CVE-2026-44492, GHSA-pjwm-pj3p-43mv | HIGH | 0.1228 (96.2%) @2026-10-26 | - | 0.32.0 | ``` --- ## Wave 3 - domain-infra-hygiene ($19 one-time · card / Apple Pay / Google Pay via Stripe; LIVE NOW) - **SKU:** `domain-infra-hygiene` - **Name:** Domain, TLS & Email Auth Infrastructure Hygiene Auditor - **Page:** https://botappstore.com/bots/domain-infra-hygiene.html - **Checkout:** https://botappstore.com/#card-domain-infra-hygiene - **Skills:** `domain-infra-hygiene-setup`, `domain-infra-hygiene` - **Price:** $19.00 USD one-time (card / Apple Pay / Google Pay via Stripe; 1-year license, up to 3 workspace-reset rebinds) - **Runtime:** `/workspace/scripts/domain_infra_hygiene.py` v1.0.0 (1,877 lines, Python stdlib + `/workspace/lib/bot_common.py`), always run as `/usr/bin/python3 -I` - **Pinned SHA-256:** - `https://botappstore.com/runtime/domain_infra_hygiene.py` — `73f7a04a48f55b6a9f0a733bdf4bba7cab2b9b6d245c0505567487585f0d1c14` - `https://botappstore.com/runtime/bot_common.py` — `d1941b61b95ca664e4c1286c3bf1918c00e976c2c1601199b19200257650e526` - **Summary:** Strictly read-only posture audit of domains the user owns or is authorised to assess: DNS and DNSSEC (`AD`-bit validation), TLS chain/expiry/CAA, SPF with RFC 7208 10-lookup counting, DMARC, DKIM, MTA-STS, TLS-RPT, HTTPS security headers, dangling CNAMEs and Certificate Transparency, with copy-paste DNS / Nginx / Vercel / Netlify remediation. ### Network footprint (passive only) - DNS-over-HTTPS: `cloudflare-dns.com` (primary), `dns.google` (fallback) for A, AAAA, CNAME, NS, MX, CAA, TXT, DNSKEY (+ `cd=1` re-query on SERVFAIL) - One TLS handshake on :443 (SNI, full verification), one HTTPS GET for response headers, one plain-HTTP GET on :80 for the redirect check - Certificate Transparency: `api.certspotter.com` (primary), `crt.sh` (fallback) - No port scanning, brute-force subdomain enumeration, fuzzing, zone transfers, SMTP or credential probing ### Usage ```bash /usr/bin/python3 -I /workspace/.wattcoin_license_check.py check --sku domain-infra-hygiene # must print "state": "OK" /usr/bin/python3 -I /workspace/scripts/domain_infra_hygiene.py [flags] /usr/bin/python3 -I /workspace/scripts/domain_infra_hygiene.py example.com --format markdown --out /workspace/domain-hygiene/example.com.md /usr/bin/python3 -I /workspace/scripts/domain_infra_hygiene.py parked.example --no-mail /usr/bin/python3 -I /workspace/scripts/domain_infra_hygiene.py --domains-file /workspace/domain-hygiene/domains.txt \ --state /workspace/domain-hygiene/state.json --delta --json --fail-on high ``` ### CLI flags | Flag | Meaning | |---|---| | `DOMAIN ...` | Domains to audit (max 50; URLs reduced to host; IPs, single labels and special-use names rejected with exit 10) | | `--domains-file PATH` | Additional domains (whitespace separated, `#` comments) | | `--dkim-selector SEL[,SEL]` | DKIM selectors to probe (default `default, google, selector1, selector2, k1, s1, s2, mail, dkim`) | | `--no-mail` | Assert the domain never sends mail: expects `v=spf1 -all`, DMARC `p=reject`, null MX `0 .` | | `--no-http` | Skip the HTTPS header GET and the port-80 redirect check | | `--no-tls` | Skip the TLS handshake | | `--ct` / `--no-ct` | Query (default) / skip Certificate Transparency | | `--expect-ns NS[,NS]` | Expected nameservers; mismatch = `NS_DRIFT` (HIGH) | | `--state PATH` | Persist per-domain snapshots (degraded runs never overwrite) | | `--delta` | Requires `--state`; report events, new, changed, resolved (first run = baseline) | | `--format {text,markdown,json}` | Output format (default `text`; `md` alias); markdown includes remediation blocks | | `--json` | JSON output shortcut | | `--out PATH` | Write report to file | | `--fail-on {none,info,low,medium,high,critical}` | Exit threshold (default `medium`) | | `--timeout SECONDS` | Per-request timeout (default 15) | | `--offline PATH` | Replay a JSON fixture instead of the network | | `--no-color` | Disable ANSI colour | ### Exit codes | Code | Meaning | |---|---| | `0` | Completed; nothing at or above `--fail-on` | | `1` | Worst finding at threshold is MEDIUM (or LOW/INFO with `--fail-on low`/`info`) | | `2` | Worst finding at threshold is HIGH | | `3` | Worst finding at threshold is CRITICAL | | `10` | Bad input or refusal | | `11` | Degraded data source with nothing at threshold, or every core check failed — never a pass | ### Finding codes - **CRITICAL:** `SPF_PASS_ALL`, `TLS_EXPIRED`, `TLS_VERIFY_FAILED`, `TLS_HOSTNAME_MISMATCH`, `TLS_CERT_EXPIRED`, `TLS_EXPIRING_CRITICAL` (<7d) - **HIGH:** `DOMAIN_NXDOMAIN`, `NS_DRIFT`, `DNSSEC_BROKEN_CHAIN`, `DANGLING_CNAME_TAKEOVER_RISK`, `SPF_MISSING` (mail-enabled), `SPF_MULTIPLE_RECORDS`, `SPF_RECURSIVE_LOOP`, `SPF_LOOKUP_LIMIT_EXCEEDED`, `DMARC_MISSING` (mail-enabled), `DMARC_MULTIPLE_RECORDS`, `DKIM_WEAK_KEY`, `TLS_EXPIRING_HIGH` (<14d), `TLS_LEGACY_PROTOCOL`, `TLS_WEAK_CIPHER`, `TLS_ISSUER_CAA_MISMATCH`, `HSTS_MISSING`, `HTTP_NO_HTTPS_REDIRECT` - **MEDIUM:** `DNSSEC_NOT_ENABLED`, `NO_MAIL_MX_PRESENT`, `SPF_MISSING` / `DMARC_MISSING` (no-mail domains), `SPF_NEUTRAL_ALL`, `SPF_NO_TERMINAL_ALL`, `SPF_INCLUDE_NO_RECORD`, `SPF_NO_MAIL_NOT_STRICT`, `DMARC_POLICY_NONE`, `DMARC_SUBDOMAIN_POLICY_NONE`, `DMARC_INVALID_POLICY`, `DMARC_NO_MAIL_NOT_REJECT`, `TLS_EXPIRING_SOON` (<30d), `HSTS_SHORT_MAX_AGE`, `CSP_MISSING`, `CT_ISSUER_NOT_IN_CAA` - **LOW:** `CAA_MISSING`, `SPF_LOOKUP_NEAR_LIMIT`, `SPF_DEPRECATED_PTR`, `DMARC_PARTIAL_PCT`, `DMARC_NO_RUA`, `DKIM_1024_BIT_KEY`, `DKIM_NOT_FOUND`, `MTA_STS_MISSING`, `TLS_RPT_MISSING`, `HSTS_NO_INCLUDESUBDOMAINS`, `XCTO_MISSING`, `REFERRER_POLICY_MISSING`, `FRAME_PROTECTION_MISSING`, `PERMISSIONS_POLICY_MISSING` - **INFO:** `DNSSEC_VALIDATED`, `NO_ADDRESS_RECORDS`, `MX_MISSING`, `SPF_SOFTFAIL_ALL`, `SPF_HARDFAIL_ALL`, `DKIM_REVOKED_KEY`, `TLS_CERT_VALID`, `TLS_UNREACHABLE`, `HTTPS_UNREACHABLE`, `CT_UNAVAILABLE`, `CT_INCONCLUSIVE` - **Delta events:** `DNSSEC_LOST` (HIGH), `NS_CHANGED`, `NEW_CT_NAMES`, `HEADER_REGRESSED` (MEDIUM), `SPF_CHANGED` (MEDIUM if removed, else LOW), `DMARC_CHANGED` (MEDIUM if weakened, else LOW), `CERT_ROTATED` (LOW on issuer change, else INFO), `CERT_EXPIRY_WINDOW` (inherits expiry severity), `NEW_CT_ISSUANCES` (INFO) ### Boundaries - Own or authorised domains only; refuses third-party scanning, target lists and subdomain-takeover hunting. - Never registers dangling CNAME targets, never edits DNS, certificates, server or CDN config; remediation is printed for the owner to review. - Point-in-time results; DKIM only confirmed for selectors tried; `UNVERIFIED` (port 80 blocked) and `INCONCLUSIVE` (empty crt.sh) are never passes. Not a penetration test, compliance attestation or legal advice. ### Verbatim sample output Live run on 2026-10-27: `/usr/bin/python3 -I /workspace/scripts/domain_infra_hygiene.py botappstore.com coinloader.com --format markdown` (exit 1: MEDIUM findings at the default `--fail-on medium`). ````markdown # Domain, TLS & Email Auth Hygiene Report ``` snapshot 2026-10-27 20:04:30 UTC | tool=domain-infra-hygiene endpoints api.certspotter.com, cloudflare-dns.com, http:80, https:443, tls:443 ``` **Domains:** 2 | **Worst:** MEDIUM | Critical 0 · High 0 · Medium 7 · Low 12 · Info 5 | **Exit code:** 1 (fail-on=medium) | Domain | Worst | Crit | High | Med | Low | Info | DNSSEC | Mail | TLS expires | HSTS | |---|---|---:|---:|---:|---:|---:|---|---|---|---| | `botappstore.com` | MEDIUM | 0 | 0 | 3 | 6 | 3 | VALIDATED | no mail | 2027-01-23 (87d) | max-age=63072000 | | `coinloader.com` | MEDIUM | 0 | 0 | 4 | 6 | 2 | UNSIGNED | no mail | 2027-01-23 (87d) | max-age=63072000 | ## `botappstore.com` ### DNS | Record | Value | |---|---| | A | 216.198.79.1 | | AAAA | - | | NS | ns-cloud-e1.googledomains.com, ns-cloud-e2.googledomains.com, ns-cloud-e3.googledomains.com, ns-cloud-e4.googledomains.com | | MX | - | | CAA | - | | DNSKEY / AD | 3 / True (VALIDATED) | | CNAME `www.botappstore.com` | d3b71d5b846c057b.vercel-dns-017.com (status 0, resolves yes) | ### Email authentication | Check | Result | |---|---| | Sends mail | no | | SPF | none | | DMARC | none | | DKIM | - (tried: default,google,selector1,selector2,k1,s1,s2,mail,dkim) | | MTA-STS | - | | TLS-RPT | - | ### TLS (:443) | Field | Value | |---|---| | Protocol / cipher | TLSv1.3 / TLS_AES_128_GCM_SHA256 (128-bit) | | Issuer | Let's Encrypt (YR1) | | Subject CN | botappstore.com | | Valid | 2026-10-25T18:49:02Z → 2027-01-23T18:49:01Z (87 days left) | | Verified | yes | | Serial | `052B27E3DE4DE0A54400DC114CE04F93737B` | | SHA-256 | `5f2c20a8d0679eb3929c16c9747e52b583728be9973510d5b50f167f28a1cbc7` | | SAN | botappstore.com, www.botappstore.com | ### HTTPS headers & port 80 | Header | Value | |---|---| | `strict-transport-security` | max-age=63072000 | | `content-security-policy` | **missing** | | `x-content-type-options` | **missing** | | `referrer-policy` | **missing** | | `x-frame-options` | **missing** | | `permissions-policy` | **missing** | | port 80 | UNVERIFIED (outbound port 80 unreachable/blocked) | ### Certificate Transparency Source: certspotter · status **OK** · issuances 1 · issuers Let's Encrypt · names: `botappstore.com`, `www.botappstore.com` ### Findings | Severity | Code | Finding | |---|---|---| | MEDIUM | `CSP_MISSING` | no Content-Security-Policy header (XSS / injection blast radius unbounded) | | MEDIUM | `DMARC_MISSING` | no _dmarc record; domain sends no mail: publish 'v=DMARC1; p=reject;' | | MEDIUM | `SPF_MISSING` | no SPF record; domain sends no mail: publish 'v=spf1 -all' to block spoofing | | LOW | `CAA_MISSING` | no CAA record: any public CA may issue certificates for this domain | | LOW | `FRAME_PROTECTION_MISSING` | no X-Frame-Options and no CSP frame-ancestors (clickjacking) | | LOW | `HSTS_NO_INCLUDESUBDOMAINS` | HSTS lacks includeSubDomains: subdomains can still be downgraded | | LOW | `PERMISSIONS_POLICY_MISSING` | no Permissions-Policy header | | LOW | `REFERRER_POLICY_MISSING` | no Referrer-Policy header | | LOW | `XCTO_MISSING` | X-Content-Type-Options is not 'nosniff' | | INFO | `DNSSEC_VALIDATED` | DNSSEC validated (DNSKEY present, AD=true) | | INFO | `MX_MISSING` | domain has no MX record; if it never receives mail publish RFC 7505 null MX '0 .' | | INFO | `TLS_CERT_VALID` | certificate valid for 87 more days (expires 2027-01-23) | ### Copy-paste remediation DNS zone records (BIND syntax; in Cloudflare/Route 53 enter name, type and value): ```dns botappstore.com. 3600 IN TXT "v=spf1 -all" _dmarc.botappstore.com. 3600 IN TXT "v=DMARC1; p=reject; sp=reject; adkim=s; aspf=s" botappstore.com. 3600 IN MX 0 . botappstore.com. 3600 IN CAA 0 issue "letsencrypt.org" botappstore.com. 3600 IN CAA 0 issuewild ";" botappstore.com. 3600 IN CAA 0 iodef "mailto:security@botappstore.com" ``` Nginx (`server {}` block): ```nginx add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always; add_header Content-Security-Policy "default-src 'self'; base-uri 'self'; object-src 'none'; frame-ancestors 'none'; upgrade-insecure-requests" always; add_header X-Content-Type-Options "nosniff" always; add_header Referrer-Policy "strict-origin-when-cross-origin" always; add_header X-Frame-Options "DENY" always; add_header Permissions-Policy "camera=(), microphone=(), geolocation=(), payment=(), usb=()" always; ``` Vercel (`vercel.json`): ```json { "headers": [ { "source": "/(.*)", "headers": [ { "key": "Strict-Transport-Security", "value": "max-age=63072000; includeSubDomains; preload" }, { "key": "Content-Security-Policy", "value": "default-src 'self'; base-uri 'self'; object-src 'none'; frame-ancestors 'none'; upgrade-insecure-requests" }, { "key": "X-Content-Type-Options", "value": "nosniff" }, { "key": "Referrer-Policy", "value": "strict-origin-when-cross-origin" }, { "key": "X-Frame-Options", "value": "DENY" }, { "key": "Permissions-Policy", "value": "camera=(), microphone=(), geolocation=(), payment=(), usb=()" } ] } ] } ``` Netlify / Cloudflare Pages (`_headers`): ```text /* Strict-Transport-Security: max-age=63072000; includeSubDomains; preload Content-Security-Policy: default-src 'self'; base-uri 'self'; object-src 'none'; frame-ancestors 'none'; upgrade-insecure-requests X-Content-Type-Options: nosniff Referrer-Policy: strict-origin-when-cross-origin X-Frame-Options: DENY Permissions-Policy: camera=(), microphone=(), geolocation=(), payment=(), usb=() ``` - CAA: list every CA your CDN/host uses (check its docs) before publishing, or renewals will fail. - CSP: the starter policy blocks third-party scripts/styles; ship it first as Content-Security-Policy-Report-Only, add the origins you need, then enforce. - HSTS: includeSubDomains/preload commit EVERY subdomain to HTTPS for the max-age; confirm none serve plain HTTP before adding them (drop 'preload' unless you will submit to hstspreload.org). ## `coinloader.com` ### DNS | Record | Value | |---|---| | A | 216.198.79.1 | | AAAA | - | | NS | ns-cloud-d1.googledomains.com, ns-cloud-d2.googledomains.com, ns-cloud-d3.googledomains.com, ns-cloud-d4.googledomains.com | | MX | - | | CAA | - | | DNSKEY / AD | 0 / False (UNSIGNED) | | CNAME `www.coinloader.com` | 4fadf6ff311d808b.vercel-dns-017.com (status 0, resolves yes) | ### Email authentication | Check | Result | |---|---| | Sends mail | no | | SPF | none | | DMARC | none | | DKIM | - (tried: default,google,selector1,selector2,k1,s1,s2,mail,dkim) | | MTA-STS | - | | TLS-RPT | - | ### TLS (:443) | Field | Value | |---|---| | Protocol / cipher | TLSv1.3 / TLS_AES_128_GCM_SHA256 (128-bit) | | Issuer | Let's Encrypt (YR1) | | Subject CN | coinloader.com | | Valid | 2026-10-25T18:39:39Z → 2027-01-23T18:39:38Z (87 days left) | | Verified | yes | | Serial | `062EC72524AD6E41A2A97E1CC25618826213` | | SHA-256 | `d29f5f52f61f4f0e9f32617f3087885b81bbcdbd95a0b452a534c80dbc75ff4e` | | SAN | coinloader.com, www.coinloader.com | ### HTTPS headers & port 80 | Header | Value | |---|---| | `strict-transport-security` | max-age=63072000 | | `content-security-policy` | **missing** | | `x-content-type-options` | **missing** | | `referrer-policy` | **missing** | | `x-frame-options` | **missing** | | `permissions-policy` | **missing** | | port 80 | UNVERIFIED (outbound port 80 unreachable/blocked) | ### Certificate Transparency Source: certspotter · status **OK** · issuances 5 · issuers Let's Encrypt · names: `coinloader.com`, `www.coinloader.com` ### Findings | Severity | Code | Finding | |---|---|---| | MEDIUM | `CSP_MISSING` | no Content-Security-Policy header (XSS / injection blast radius unbounded) | | MEDIUM | `DMARC_MISSING` | no _dmarc record; domain sends no mail: publish 'v=DMARC1; p=reject;' | | MEDIUM | `DNSSEC_NOT_ENABLED` | DNSSEC not enabled (no DNSKEY at apex): DNS answers can be spoofed in transit | | MEDIUM | `SPF_MISSING` | no SPF record; domain sends no mail: publish 'v=spf1 -all' to block spoofing | | LOW | `CAA_MISSING` | no CAA record: any public CA may issue certificates for this domain | | LOW | `FRAME_PROTECTION_MISSING` | no X-Frame-Options and no CSP frame-ancestors (clickjacking) | | LOW | `HSTS_NO_INCLUDESUBDOMAINS` | HSTS lacks includeSubDomains: subdomains can still be downgraded | | LOW | `PERMISSIONS_POLICY_MISSING` | no Permissions-Policy header | | LOW | `REFERRER_POLICY_MISSING` | no Referrer-Policy header | | LOW | `XCTO_MISSING` | X-Content-Type-Options is not 'nosniff' | | INFO | `MX_MISSING` | domain has no MX record; if it never receives mail publish RFC 7505 null MX '0 .' | | INFO | `TLS_CERT_VALID` | certificate valid for 87 more days (expires 2027-01-23) | ### Copy-paste remediation DNS zone records (BIND syntax; in Cloudflare/Route 53 enter name, type and value): ```dns coinloader.com. 3600 IN TXT "v=spf1 -all" _dmarc.coinloader.com. 3600 IN TXT "v=DMARC1; p=reject; sp=reject; adkim=s; aspf=s" coinloader.com. 3600 IN MX 0 . coinloader.com. 3600 IN CAA 0 issue "letsencrypt.org" coinloader.com. 3600 IN CAA 0 issuewild ";" coinloader.com. 3600 IN CAA 0 iodef "mailto:security@coinloader.com" ``` Nginx (`server {}` block): ```nginx add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always; add_header Content-Security-Policy "default-src 'self'; base-uri 'self'; object-src 'none'; frame-ancestors 'none'; upgrade-insecure-requests" always; add_header X-Content-Type-Options "nosniff" always; add_header Referrer-Policy "strict-origin-when-cross-origin" always; add_header X-Frame-Options "DENY" always; add_header Permissions-Policy "camera=(), microphone=(), geolocation=(), payment=(), usb=()" always; ``` Vercel (`vercel.json`): ```json { "headers": [ { "source": "/(.*)", "headers": [ { "key": "Strict-Transport-Security", "value": "max-age=63072000; includeSubDomains; preload" }, { "key": "Content-Security-Policy", "value": "default-src 'self'; base-uri 'self'; object-src 'none'; frame-ancestors 'none'; upgrade-insecure-requests" }, { "key": "X-Content-Type-Options", "value": "nosniff" }, { "key": "Referrer-Policy", "value": "strict-origin-when-cross-origin" }, { "key": "X-Frame-Options", "value": "DENY" }, { "key": "Permissions-Policy", "value": "camera=(), microphone=(), geolocation=(), payment=(), usb=()" } ] } ] } ``` Netlify / Cloudflare Pages (`_headers`): ```text /* Strict-Transport-Security: max-age=63072000; includeSubDomains; preload Content-Security-Policy: default-src 'self'; base-uri 'self'; object-src 'none'; frame-ancestors 'none'; upgrade-insecure-requests X-Content-Type-Options: nosniff Referrer-Policy: strict-origin-when-cross-origin X-Frame-Options: DENY Permissions-Policy: camera=(), microphone=(), geolocation=(), payment=(), usb=() ``` - CAA: list every CA your CDN/host uses (check its docs) before publishing, or renewals will fail. - DNSSEC: enable signing at your DNS host, then publish the DS record it shows at your registrar (Cloudflare: DNS > Settings > DNSSEC; Route 53: Hosted zone > DNSSEC signing). - CSP: the starter policy blocks third-party scripts/styles; ship it first as Content-Security-Policy-Report-Only, add the origins you need, then enforce. - HSTS: includeSubDomains/preload commit EVERY subdomain to HTTPS for the max-age; confirm none serve plain HTTP before adding them (drop 'preload' unless you will submit to hstspreload.org). --- SCOPE_NOTE: Passive, read-only public posture inspection for domains the user owns or is authorised to assess: DNS-over-HTTPS lookups (Cloudflare, Google fallback), one TLS handshake on :443, one HTTPS GET for response headers, one plain-HTTP GET on :80 for the redirect check, and public Certificate Transparency logs (Cert Spotter, crt.sh fallback). No port scanning, brute-forcing, fuzzing, subdomain enumeration beyond public CT logs, mail-server or credential probing, and no exploitation; the dangling-CNAME check only inspects the audited domain's own records against known provider fingerprints and never claims or registers anything. Results are point-in-time: DNS caches, CT log lag, CDN edge variation and resolver behaviour can differ by location and minute; DKIM presence is only confirmed for the selectors tried; an empty crt.sh answer is INCONCLUSIVE, not clean. The HTTP->HTTPS redirect is reported UNVERIFIED when outbound port 80 is blocked (common in sandboxes and corporate networks). Remediation records are templates to review before publishing. Not a penetration test, compliance attestation, or legal advice. Refuses: scanning domains the user does not control, subdomain-takeover hunting against third parties, and credential or mail-server probing. ```` ## Wave 3 - agent-council ($39 one-time · card / Apple Pay / Google Pay via Stripe; LIVE NOW) - **SKU:** `agent-council` - **Name:** Agent Council — Multi-Model Swarm Debate & Pair-Architect Collaborator - **Page:** https://botappstore.com/bots/agent-council.html - **Checkout:** https://botappstore.com/#card-agent-council - **Skills:** `agent-council-setup`, `agent-council` - **Price:** $39.00 USD one-time (card / Apple Pay / Google Pay via Stripe; up to 3 workspace-reset rebinds) - **Runtime:** `/workspace/scripts/agent_council.py` v1.0.0 (2,801 lines, Python stdlib + `/workspace/lib/bot_common.py`, 170 unit tests), always run as `/usr/bin/python3 -I` - **Pinned SHA-256:** - `https://botappstore.com/runtime/agent_council.py` — `703d307e52c4e13df94e28554d16143a5286bf0af3ffe6d95431a5fa490284d7` - `https://botappstore.com/runtime/bot_common.py` — `d1941b61b95ca664e4c1286c3bf1918c00e976c2c1601199b19200257650e526` - **Summary:** 2-6 seat multi-model council (local `claude` personas, `codex`, `gemini`, `aider`, or BYOK OpenAI / Anthropic / xAI / Gemini / OpenRouter / DeepSeek / Ollama) in `deliberate`, `pair`, `compete` or `review` mode, with timers, a budget guard, session steering and a self-contained HTML viewer. Verbatim `--format markdown` output of a live 2-round, 3-seat `claude` deliberation (architect, security, skeptic) over `/workspace/lib/bot_common.py` lines 85-177, run 2026-10-27 (exit `2`: one HIGH item in the minority report at `--fail-on medium`): ````markdown # Agent Council Report - deliberate ``` snapshot 2026-10-27 20:54:29 UTC | tool=agent-council endpoints claude ``` | Field | Value | |---|---| | Mode | deliberate | | Session | sample-live-20261027-165133 | | Rounds | 2 of 2 | | Converged | True | | Early stop | False | | Quorum | 3/3 active (need 2) | | Elapsed | 176.2s | | Stop reason | - | | Exit code | 2 (fail-on medium) | ## Problem statement > Architecture & security review: we plan to reuse bot_common.http_json (shown) as the transport for metered, BYOK LLM API calls (OpenAI/Anthropic/xAI) inside paid BotAppStore tools, and keep exit_code() as the CI contract. Is that safe and correct? Consider retry/backoff semantics for non-idempotent paid POSTs, timeout behaviour, error-body handling (could API keys or prompts leak into logs?), MAX_RAW truncation of large JSON responses, and whether exit_code() can ever report a clean pass for a degraded run. Recommend concrete, minimal changes. ## Context bundle - `/workspace/lib/bot_common.py` lines 85-177 of 274, sha256 `d1941b61b95ca664` - redactions: none; skipped: none ## Seats | Seat | Role | Backend | Model | Status | |---|---|---|---|---| | A | Architect | claude | (default) | OK | | B | Security | claude | (default) | OK | | C | Skeptic | claude | (default) | OK | | Chair | Judge | claude | (default) | OK | ## Round 1 - proposal ### Seat A - OK - 63840ms, 3218 in / 5938 out tokens, $0.1218 **Position:** Do not reuse http_json unchanged for metered BYOK LLM POSTs. Keep it for idempotent GETs and add a thin llm_call() (or an explicit idempotent=False policy) that: (1) never retries transport exceptions or generic 5xx for POST and retries only 429/529, honoring Retry-After within a total deadline, with max attempts small and configurable; (2) uses a long per-call timeout (e.g. 120-600s) plus an overall wall-clock deadline instead of timeout=20 with 5 attempts; (3) treats oversized or unparseable 2xx bodies as errors (read(MAX_RAW+1), set error='response too large'/'invalid JSON', and a larger cap for LLM responses) rather than returning status 200 with {'_raw':...}; (4) caps error-body reads, stores only sanitized provider error type/code/message, scrubs key patterns (sk-, sk-ant-, xai-, Bearer), and never stores raw completions or request headers in HttpResult/evidence/logs; (5) disables redirects and enforces https with a provider-host allowlist so Authorization/x-api-key cannot be forwarded; (6) makes degradation automatic, so any llm_call error marks the run degraded. Keep exit_code() as the CI contract, but add a test that every SEV level reachable by fail_on maps in _SEV_EXIT (or fail loudly), and emit degraded=true in the JSON report even when a severity exit code wins. - *critique:* Blind round: no peer positions visible yet. - *changes:* Initial proposal. - *disagree* [HIGH] Retrying non-idempotent paid POSTs - *disagree* [HIGH] Silent success on truncated or non-JSON 2xx - *disagree* [MEDIUM] Credential and prompt leakage - *disagree* [MEDIUM] exit_code silent pass ### Seat B - OK - 69346ms, 3217 in / 6897 out tokens, $0.1410 **Position:** Do NOT reuse http_json as-is for paid BYOK LLM POSTs. (1) It retries POSTs on timeouts/resets/5xx (lines 113,126-130) up to 5 attempts, so already-billed generations can be re-billed on the user's key; the 20s per-op timeout (line 100/118) makes this likely for LLM latency. (2) MAX_RAW slicing after a full read (line 119) plus _parse fallback (89-90) turns truncated/invalid 2xx into status 200 with error=None (silent paid data loss), and _raw/raw/error bodies (90,120,125) can carry prompts/outputs/masked keys into logs or evidence. (3) If _urlopen uses default urllib redirect handling (not visible), 301/302/303 forwards Authorization/x-api-key cross-host; url has no https/host allowlist (key exfil/SSRF if base_url is configurable). (4) exit_code is only as good as the caller's degraded flag: since http_json never raises, an all-calls-failed run yields 0 findings -> EXIT_OK; line 173 also fails open to EXIT_OK when worst sev >= threshold but is absent from _SEV_EXIT. Fix with: idempotency-aware retry (POST retries only 429/503/529/connect-phase errors), total deadline + longer LLM timeout, bounded read with truncated/invalid-json errors, no-redirect opener + https host allowlist for keyed calls, redacted repr/logging, fail-closed exit_code with automatically derived degraded. - *changes:* Initial blind proposal (round 1). - *disagree* [HIGH] Non-idempotent POST retries - *disagree* [HIGH] Silent truncation / invalid JSON on 2xx - *disagree* [HIGH] Degraded runs reported as clean - *disagree* [MEDIUM] Credential leak via redirects / unconstrained URL - *disagree* [MEDIUM] Prompt/key leakage via error bodies and raw ### Seat C - OK - 58575ms, 3220 in / 5374 out tokens, $0.1105 **Position:** Do not reuse http_json unchanged for metered BYOK LLM POSTs. It is acceptable after a small 'non-idempotent' mode is added. (1) In that mode, retry only on 429, 503/529 and pre-send connection failures (DNS errors, connection refused). Do not retry on read timeouts, resets after send, or 500/502/504. Cap retries at 2. Raise the timeout to 120-300s or make it configurable per call. (2) Treat truncation (len(body) > MAX_RAW, detected by reading MAX_RAW+1 bytes) and non-JSON 2xx bodies as errors: set .error and .truncated. Never return status 200 with error=None and {'_raw': ...}. Cap e.read() the same way. (3) Do not store raw bodies for paid calls. Redact Authorization/x-api-key/sk-* patterns from any error text before it reaches HttpResult.error or Finding.evidence. (4) Make degraded automatic: a run-level tracker marks the run degraded whenever any HttpResult has .error or status<0. In exit_code, compute the worst severity only over findings whose severity is mapped, or assert at import that _SEV_EXIT covers every SEV level at or above the lowest valid fail_on. (5) Record attempts and possibly-billed attempts so metering reflects real spend. - *changes:* Initial blind proposal. - *disagree* [HIGH] Billing amplification - *disagree* [HIGH] Silent truncation success - *disagree* [MEDIUM] exit_code mapping hole - *disagree* [MEDIUM] Degraded not enforced - *disagree* [MEDIUM] Log leakage - *disagree* [LOW] Unbounded reads and no jitter ## Round 2 - cross examination ### Seat A - OK - 39462ms, 5697 in / 3905 out tokens, $0.1237 **Position:** Do not reuse http_json unchanged for metered BYOK LLM POSTs. Keep it for idempotent GETs. Add a thin llm_call() wrapper (or a non-idempotent mode) with these rules. (1) Retry policy for POST: retry 503/529 and rate-limit 429s only, honoring Retry-After. Never retry 429 insufficient_quota/billing errors. Retry transport errors only when provably pre-send (e.reason is socket.gaierror, ConnectionRefusedError, or an SSL handshake error). Never retry timeouts, resets, 500, 502 or 504. Use at most 2 retries, add jitter, and enforce a total wall-clock deadline. (2) Use a configurable per-call timeout of 120-600s instead of 20s. (3) Read with read(MAX_RAW+1) using a larger LLM-specific cap. An oversized or non-JSON 2xx sets error ('response too large' / 'invalid JSON') and truncated=True; never return 200 with error=None. Also cap e.read(). (4) Store only the sanitized provider error type, code and message. Scrub sk-, sk-ant-, xai- and Bearer patterns plus masked-key echoes. Never put raw completions, prompts or request headers into HttpResult.raw, evidence, reprs or logs. (5) Use a no-redirect opener, require https, and allowlist provider hosts for any keyed request. (6) Use a run-level tracker so any llm_call error or status<0 marks the run degraded automatically. Record attempts and possibly-billed attempts for metering. (7) Keep exit_code as the CI contract, with these changes: compute worst over mapped severities only, or assert at import that _SEV_EXIT covers every SEV level at or above any valid fail_on; validate fail_on at argument-parse time; map uncaught exceptions to a dedicated non-1/2/3 exit code; and always emit degraded=true in the JSON report even when a severity exit code wins. - *critique:* Seat B and Seat C: 'retry pre-send connect errors' is unimplementable as stated, because L129 catches all URLError. They must specify classification by e.reason, and timeouts must be treated as possibly-sent because urllib's single timeout covers both connect and read. - *critique:* Seat B and Seat C: blanket 429 retry re-tries terminal OpenAI/xAI insufficient_quota and billing-limit 429s, wasting the deadline and obscuring the cause for BYOK users. - *critique:* Seat B and Seat C: both missed that SEV[fail_on.upper()] (L171) raises KeyError on bad input, and an uncaught Python exception exits 1, which likely collides with a severity exit code (unverified: _SEV_EXIT is not shown). - *critique:* Seat C: the 'cap retries at 2' should be paired with an overall deadline. Otherwise Retry-After (capped at 30s at L95) plus a long per-call timeout can still stall CI for many minutes. - *changes:* Adopted 503 (alongside 429/529) and provably pre-send connect failures as retryable for POST, from Seat B and Seat C, now with a concrete e.reason classifier. - *changes:* Adopted possibly-billed attempt accounting, from Seat C. - *changes:* Added: no retry on quota/billing 429s. - *changes:* Added: fail_on validation and exception-to-exit-code mapping, so a crash cannot masquerade as a severity code. - *changes:* Added: jitter on backoff. - *disagree* [MEDIUM] Ambiguous transport errors - *disagree* [MEDIUM] 429 semantics - *disagree* [LOW] Crash vs severity exit code collision ### Seat B - OK - 41312ms, 5658 in / 4192 out tokens, $0.1291 **Position:** Do not reuse http_json unchanged for metered BYOK LLM POSTs. Keep it for idempotent GETs; add a thin llm_call() (or idempotent=False policy) that: (1) retries a POST only on 429 (but not 429 insufficient_quota / billing errors), 529, 503-with-Retry-After, and provably pre-send URLError (gaierror, ConnectionRefusedError); never retries timeouts, resets, 500/502/504; max 2 retries; honors Retry-After inside a total wall-clock deadline; records attempts and possibly_billed_attempts. (2) Uses a configurable long per-op timeout (120-300s) plus an overall deadline checked between attempts. (3) Reads MAX_RAW+1 bytes (larger cap for LLM) and caps e.read() the same way; oversized or non-JSON 2xx responses get status preserved but error='response too large'/'invalid JSON' and truncated=True, never a 200 with error=None and _raw. (4) Does not retain raw completions in HttpResult.raw/evidence/logs for paid calls; error text is reduced to the provider's error type/code/message and scrubbed of sk-/sk-ant-/xai-/Bearer patterns; HttpResult repr must exclude headers and bodies. (5) Uses a no-redirect opener (any 3xx is an error) and requires https plus a provider host allowlist before attaching keys. (6) Degraded is derived automatically: any llm_call error or status<0 marks the run degraded. exit_code stays as the CI contract but fails closed: if any finding is at or above the threshold, return the mapped code for the highest mapped severity, else a generic failure code, never EXIT_OK. Add an import-time assert or test that _SEV_EXIT covers every severity reachable by fail_on, and always emit degraded=true in the JSON report even when a severity exit code wins. - *critique:* Seat C: 'pre-send connection failures' cannot be distinguished at L129 for timeouts (connect vs read both raise timeout); only URLError with gaierror/ConnectionRefusedError reason is provably pre-send. Including 503 without Retry-After is borderline. - *critique:* Seat A: retrying all 429s ignores non-transient quota/billing 429s (e.g. insufficient_quota), which should fail fast as config errors. - *critique:* Seat A: a 600s urllib timeout is per socket op, not total; the total deadline can only be enforced between attempts, so the size cap and an explicit deadline are both required. - *critique:* Seat A/C: neither notes that stock urllib turns a POST 301/302/303 into a GET to the new host carrying the same Authorization/x-api-key headers, and that the redirected 200 would be returned as the LLM result (wrong data plus key leak), unverified since _urlopen is unseen. - *critique:* Seat C: the exit_code hole only triggers when the single worst finding's sev is unmapped (L172-173); the fix should still be fail-closed rather than 'compute worst over mapped only', which could still pass if no mapped sev is at threshold. - *changes:* Adopted Seat C's possibly_billed_attempts metric and Seat A's always-emit-degraded-in-report. - *changes:* Narrowed retryable transport errors to provably pre-send URLError reasons; added the 429 insufficient_quota exclusion. - *changes:* Made exit_code fix explicitly fail-closed (generic failure code) instead of relying only on mapping completeness. - *changes:* Clarified urllib per-op timeout vs total deadline, and redirect POST->GET with header carryover. - *disagree* [MEDIUM] Retryable set for POST - *disagree* [LOW] exit_code fix shape - *disagree* [LOW] Timeout value ### Seat C - OK - 48960ms, 5678 in / 4778 out tokens, $0.1410 **Position:** Do not reuse http_json unchanged for metered BYOK LLM POSTs; keep it for idempotent GETs and route paid calls through a thin llm_call()/idempotent=False policy that: (1) retries only on proven-not-accepted outcomes (429, 503, 529, and pre-send connect failures such as DNS/ECONNREFUSED/TLS handshake), never on read timeouts, resets after send, or 500/502/504; max 2 retries, Retry-After honored (with a 1-2s floor plus jitter when absent) inside a total wall-clock deadline; (2) uses a configurable long per-call timeout (120-600s) instead of 20s; (3) does a bounded read(cap+1) for both success and error bodies, with an LLM-sized cap, and treats truncated or non-JSON 2xx as errors (.error set, .truncated=True), never status 200 with error=None and {'_raw':...}; (4) stores no raw completions or request headers in HttpResult, Finding.evidence or logs, keeps only the provider error type/code/message, and scrubs sk-/sk-ant-/xai-/Bearer patterns as a backstop; (5) disables redirects and enforces https, with an optional user-configured base_url allowlist rather than a hardcoded provider list; (6) derives degraded automatically from any errored or status<0 result and records attempts and possibly-billed attempts. Keep exit_code() as the CI contract, but fail closed: assert at import that every SEV level reachable by fail_on is in _SEV_EXIT, validate fail_on up front, emit degraded=true in the report even when a severity exit wins, and wrap main so unhandled exceptions exit with a dedicated non-severity code (not Python's default 1, which collides with severity exits). - *critique:* Seat A: retrying only 429/529 and never retrying any transport exception is over-strict; pre-send connect failures and edge 503s cannot have billed and are safe to retry. - *critique:* Seat A: rating caller-wired degraded as MEDIUM understates it; http_json never raises (L105), so an all-failed run gives 0 findings and EXIT_OK (L175), a false green in CI, which is HIGH. - *critique:* Seat A/B: a hardcoded provider host allowlist breaks legitimate BYOK endpoints (Azure OpenAI, proxies, gateways); use https plus no redirects plus a user-configured allowlist. - *critique:* Seat A/B: the redirect concern is valid but should be precise: with default urllib, POST 301/302/303 becomes a GET that forwards Authorization/x-api-key (the leak), while POST 307/308 raises HTTPError and is returned at L126, so there is no re-POST or double-bill via redirect. - *critique:* All seats (including mine): missed that exit 1/2 collide with Python's uncaught-exception exit (1) and argparse errors (2), and that an invalid fail_on raises KeyError at L171, so a crashed run can look like a findings result. - *changes:* Added the exit-code collision and crash-path issue (uncaught exception or invalid fail_on yields exit 1, indistinguishable from a severity exit) and the fix (dedicated crash code, upfront fail_on validation). - *changes:* Adopted Seat A/B's no-redirect plus https requirement, made the allowlist user-configurable, and stated the urllib 301/302/303 vs 307/308 behaviour precisely. - *changes:* Adopted a total wall-clock deadline and degraded=true in the report even when a severity exit wins (Seat A). - *changes:* Added a Retry-After floor plus jitter, noting that _retry_after (L93-97) ignores HTTP-date values and allows 0s retries. - *disagree* [LOW] Retry set for paid POSTs - *disagree* [LOW] Severity rating of caller-wired degraded - *disagree* [MEDIUM] Exit-code collision with crashes ## Chair synthesis (chair) Unanimous: do NOT reuse bot_common.http_json unchanged as the transport for metered BYOK LLM POSTs. Keep it for idempotent GETs and add a thin llm_call() wrapper with a non-idempotent retry policy. Verified hazards in the code: (a) Up to 5 attempts (L113) that retry timeouts and resets (L129-132). Combined with the 20s default timeout (L100), long completions will time out and be re-billed. (b) Silent truncation. r.read()[:MAX_RAW] (L119) reads the full body and then slices it, so an oversized or non-JSON 2xx becomes status 200, error=None, {'_raw': first 300 chars} (L90). This can also persist completion or prompt text. (c) Unbounded e.read() (L123). Provider error bodies stored verbatim (L125) can echo masked keys. str(e) (L130) can carry URLs. (d) _retry_after (L93-97) ignores HTTP-date values and allows 0s sleeps. (e) Redirects. Assuming _urlopen uses stock urllib (unseen), a POST 301/302/303 is followed as a GET carrying the auth headers; 307/308 is returned at L126. exit_code() is correct only if callers wire degraded=True. Because http_json never raises, an all-failed run yields 0 findings and EXIT_OK: a false green. It also has a fail-open hole at L172-175: a worst finding whose sev is absent from _SEV_EXIT falls through to EXIT_OK/EXIT_DEGRADED. SEV[fail_on.upper()] (L171) raises KeyError on bad input. An uncaught exception exits 1, which may collide with a severity code (_SEV_EXIT values unseen). Outcome: keep exit_code as the CI contract, but make it fail closed and derive degraded automatically. ### Consensus matrix | Point | Agree | Disagree | |---|---|---| | Do not reuse http_json unchanged for paid LLM POSTs; keep it for idempotent GETs and add an llm_call()/idempotent=False policy | Seat A, Seat B, Seat C | | | Never retry POST on read timeouts, connection resets after send, or 500/502/504. Max 2 retries, jitter, honor Retry-After, and enforce a total wall-clock deadline | Seat A, Seat B, Seat C | | | Retry 429 rate limits and 529. Never retry 429 insufficient_quota or billing errors (terminal BYOK config errors) | Seat A, Seat B, Seat C | | | Transport errors are retryable only when provably pre-send, classified by URLError.reason (socket.gaierror, ConnectionRefusedError). Timeouts count as possibly billed | Seat A, Seat B, Seat C | | | Configurable long per-op timeout (about 120-300s, up to 600s) instead of 20s, plus a separate total deadline (urllib timeout is per socket op) | Seat A, Seat B, Seat C | | | Bounded read(cap+1) for both success and error bodies. An oversized or non-JSON 2xx sets error and truncated=True; never return 200 with error=None | Seat A, Seat B, Seat C | | | Persist no raw completions, prompts or request headers. Keep only the provider error type/code/message, scrub sk-/sk-ant-/xai-/Bearer patterns, and make the repr body-free | Seat A, Seat B, Seat C | | | No-redirect opener (any 3xx is an error) and https required before attaching keys | Seat A, Seat B, Seat C | | | Derive degraded automatically from any errored or status<0 llm_call result; record attempts and possibly_billed_attempts | Seat A, Seat B, Seat C | | | Keep exit_code as the CI contract but fail closed. Close the L172-175 unmapped-severity hole, validate fail_on up front, and always emit degraded=true in the report even when a severity exit wins | Seat A, Seat B, Seat C | | | Map uncaught exceptions and argparse errors to a dedicated non-severity exit code (contingent on unseen _SEV_EXIT values) | Seat A, Seat C | | | Host allowlist: hardcoded provider hosts (A/B) vs user-configured base_url allowlist (C). Chair merge: built-in default allowlist extended by an explicit user-configured base_url (Azure/proxies), https-only, no redirects | Seat A, Seat B, Seat C | | ### Dissent / minority report - **LOW** 503 retry condition - Seat B would retry 503 only when Retry-After is present; Seats A and C retry 503 generally. A 503 normally means the request was not processed. Chair adopts: retry 503 within the deadline and count it as possibly billed in metering. Projects that see billed 503s should switch to B's stricter rule. (Seat B) - **LOW** TLS handshake errors as pre-send - Seats A and C also treat SSL handshake failures as pre-send. Seat B limits pre-send to gaierror/ConnectionRefusedError. A handshake failure precedes any HTTP bytes, but ssl.SSLError can also surface mid-stream. Chair adopts: retry only when the error is raised before the connection is established; if this cannot be distinguished cleanly, use B's narrower set. (Seat B) - **HIGH** Rating of caller-wired degraded - Seat C rates it HIGH; Seat A originally rated it MEDIUM. Chair sides with HIGH. http_json never raises (L105), so a run where every paid call failed returns EXIT_OK (L175) unless every caller remembers degraded=True. This is a false green in paid CI. The remedy is agreed by all seats; only the label differed. (Seat C) - **LOW** exit_code fix shape - Seat B prefers a generic fail-closed code when any finding meets the threshold but is unmapped. Seats A and C prefer 'worst over mapped severities' plus an import-time coverage assert. Chair merges both: assert coverage AND fail closed, so mapped-only can never yield EXIT_OK when a finding meets the threshold. (Seat B) ### Confidence shifts | Seat | First | Last | Shift | |---|---|---|---| | A | 80 | 82 | +2 | | B | 78 | 82 | +4 | | C | 72 | 82 | +10 | **Verdict:** `REQUEST_CHANGES` ### Action plan 1. Add an LLM transport policy in lib/bot_common.py: llm_call(url, body, headers, *, timeout=180, deadline=600, max_retries=2, cap=LLM_MAX_RAW, allowed_hosts=DEFAULT_LLM_HOSTS | user_base_url_hosts). Leave http_json's GET behaviour untouched, and add a guard so http_json refuses to send an Authorization or x-api-key header with a POST body unless idempotent=True is passed. 2. Retry classifier for llm_call. Retryable: 429 unless error.code/type is insufficient_quota or billing; 503; 529; URLError whose .reason is socket.gaierror or ConnectionRefusedError. Everything else returns immediately, including socket.timeout/TimeoutError, ConnectionResetError, RemoteDisconnected, 500/502/504 and other 4xx. Sleep = min(remaining_deadline, max(1.0, Retry-After or backoff*2**n)) + random.uniform(0, 0.5), and stop if the deadline would be exceeded. Also parse HTTP-date Retry-After values via email.utils.parsedate_to_datetime. 3. Metering: on every attempt that may have reached the provider (any HTTP status, or a timeout/reset), increment possibly_billed_attempts and attach it, along with attempts, to the result. 4. Bounded reads: raw = r.read(cap + 1). If len(raw) > cap, return status preserved, error='response too large', truncated=True, body=None. Do the same with e.read(ERR_CAP + 1). If a 2xx body fails json.loads, set error='invalid JSON' and do not return {'_raw': ...}. Use non-streaming requests (SSE is out of scope for _parse). 5. Redaction: build HttpResult for paid calls with raw=None, and keep only {'type','code','message'} from provider errors. Pass every string through scrub(), with regexes for sk-[A-Za-z0-9_-]{8,}, sk-ant-[A-Za-z0-9_-]+, xai-[A-Za-z0-9_-]+, (?i)bearer\s+\S+, and masked echoes such as sk-\.\.\.\w{4}. Ensure HttpResult.__repr__ excludes headers and body. Never put prompts or completions into Finding.evidence. 6. Transport hardening: build an opener whose HTTPRedirectHandler returns None for all codes, so any 3xx becomes an error. Before attaching keys, require urlparse(url).scheme == 'https' and hostname in allowed_hosts. 7. Automatic degraded: add a RunState (module-level or passed explicitly). llm_call sets state.degraded = True on any error or status < 0, and main passes exit_code(findings, degraded=state.degraded or caller_degraded). 8. Fail-closed exit_code: at import, assert every SEV key with rank >= the minimum valid fail_on is in _SEV_EXIT. In exit_code, take at_or_above = [f for f in findings if SEV[f.sev] >= threshold]. If at_or_above is non-empty, return _SEV_EXIT of the highest mapped severity among them, else EXIT_FAIL_GENERIC; never fall through to EXIT_OK. Validate fail_on in argparse via choices=[s.lower() for s in SEV]. 9. Crash isolation: wrap main as `try: rc = run() except SystemExit: raise except BaseException: log scrubbed traceback; rc = EXIT_INTERNAL` and pick EXIT_INTERNAL (and argparse handling) so neither collides with _SEV_EXIT values or EXIT_DEGRADED=11. Verify against the actual _SEV_EXIT table, which is not in the bundle. 10. Always write degraded, attempts and possibly_billed_attempts into the JSON report, even when a severity exit code wins. 11. Tests (mock _urlopen): a timeout is not retried and possibly_billed=1; 429 insufficient_quota is not retried; 429 with Retry-After is retried within the deadline; a 302 is an error and the key is not sent; an oversized 200 sets error and truncated; an error body echoing sk-... is scrubbed; an all-failed run yields EXIT_DEGRADED not EXIT_OK; an unmapped above-threshold severity never yields EXIT_OK; an invalid fail_on is rejected at parse time. ## Unresolved findings & dissent | Severity | Code | Item | Fix | |---|---|---|---| | HIGH | DISSENT | Rating of caller-wired degraded: Seat C rates it HIGH; Seat A originally rated it MEDIUM. Chair sides with HIGH. http_json never raises (L105), so a run where every paid call failed returns EXIT_OK (L175) unless every caller remembers degraded=True. This is a false green in paid CI. The remedy is agreed by all seats; only the label [...truncated 10 chars] | | | LOW | DISSENT | 503 retry condition: Seat B would retry 503 only when Retry-After is present; Seats A and C retry 503 generally. A 503 normally means the request was not processed. Chair adopts: retry 503 within the deadline and count it as possibly billed in metering. Projects that see billed 503s should switch to B's stricter rule. | | | LOW | DISSENT | exit_code fix shape: Seat B prefers a generic fail-closed code when any finding meets the threshold but is unmapped. Seats A and C prefer 'worst over mapped severities' plus an import-time coverage assert. Chair merges both: assert coverage AND fail closed, so mapped-only can never yield EXIT_OK when a finding meets the [...truncated 11 chars] | | | LOW | DISSENT | TLS handshake errors as pre-send: Seats A and C also treat SSL handshake failures as pre-send. Seat B limits pre-send to gaierror/ConnectionRefusedError. A handshake failure precedes any HTTP bytes, but ssl.SSLError can also surface mid-stream. Chair adopts: retry only when the error is raised before the connection is established; i [...truncated 61 chars] | | ## Token & cost ledger | Seat | Backend | Calls | In | Out | Cached | USD | Basis | |---|---|---|---|---|---|---|---| | A | claude | 2 | 8915 | 9843 | 2912 | 0.2455 | cli-reported | | B | claude | 2 | 8875 | 11089 | 2911 | 0.2701 | cli-reported | | C | claude | 2 | 8898 | 10152 | 2914 | 0.2515 | cli-reported | | Chair | claude | 1 | 7749 | 6119 | 0 | 0.1844 | cli-reported | | **Total** | | 7 | 34437 | 37203 | 8737 | 0.9514 | | --- SCOPE_NOTE: Agent Council is an advisory, read-only deliberation tool. It reads only the files/line ranges passed via --files and the output of `git diff` for --git-diff; it never edits, commits, executes or deploys anything, and local CLI seats run with tools disabled (claude) or in read-only / dry-run modes where the CLI supports it. node_modules, .git, lockfiles, .env* and .wattcoin_env* files are refused, and private keys, API keys/tokens (wck_, wcl_, sk-, ghp_, AKIA, xai-, AIza, Slack, Bearer), PEM blocks and other high-entropy secrets are redacted from the prompt, context bundle and moderator notes before any seat sees them; API keys are read from the environment or the env file by variable name and are never printed or stored. Model outputs are non-deterministic: the same council can reach a different verdict on a re-run, seats can be confidently wrong together, and a consensus is evidence, not proof - verify patches and findings before acting. Cost figures for HTTP seats are estimates from a static per-token price table (metered BYOK billing is authoritative); CLI seats report the CLI's own list-price figure (claude) or a chars/4 estimate, which is usually covered by a subscription rather than billed per token; the --max-cost-usd guard counts both. The council refuses to ingest disallowed paths and does not run exploit, credential-harvesting or other offensive tasks - seat role prompts instruct models to decline them. ```` --- ## Wave 3 - mcp-config-auditor ($19 one-time · card / Apple Pay / Google Pay via Stripe; LIVE NOW) - **SKU:** `mcp-config-auditor` - **Name:** MCP Server & Tool-Permission Security Auditor - **Page:** https://botappstore.com/bots/mcp-config-auditor.html - **Checkout:** https://botappstore.com/#card-mcp-config-auditor - **Skills:** `mcp-config-auditor-setup`, `mcp-config-auditor` - **Price:** $19.00 USD one-time (card / Apple Pay / Google Pay via Stripe; up to 3 workspace-reset rebinds) - **Runtime:** `/workspace/scripts/mcp_config_auditor.py` v1.0.0 (1,956 lines, Python stdlib + `/workspace/lib/bot_common.py`, 275 unit tests), always run as `/usr/bin/python3 -I` - **Pinned SHA-256:** - `https://botappstore.com/runtime/mcp_config_auditor.py` — `42cb3f145458844604c795a97ec8009365a218f20b4a441f6988edd93184c025` - `https://botappstore.com/runtime/bot_common.py` — `d1941b61b95ca664e4c1286c3bf1918c00e976c2c1601199b19200257650e526` - **Summary:** Read-only static audit of MCP client configs and `tools/list` snapshots across 5 buckets (`SEC_*`, `CMD_*`/`FS_*`/`DOCKER_*`/`DB_*`, `SUP_*`, `NET_*`, `TOOL_*`), with secret redaction, hardened copy-paste configs and `--state --delta` rug-pull detection. No network requests. Verbatim `--format markdown` output on a deliberately unsafe offline test bundle (Cursor + Claude Desktop configs, 12 servers, 7 tools; all hosts are `example.*` and all credentials are fake; exit `3` at `--fail-on medium`): ````markdown # MCP Server & Tool-Permission Security Audit ``` snapshot 2026-10-27 12:00:00 UTC | tool=mcp-config-auditor endpoints offline:sample_bundle.json ``` **Config files:** 2 | **Servers:** 12 | **Tools:** 7 | **Worst:** CRITICAL | Critical 8 · High 9 · Medium 2 · Low 1 · Info 0 | **Exit code:** 3 (fail-on=medium) ## Server inventory | File | Server | Transport | Launch | Packages | Worst | Crit | High | Med | Low | |---|---|---|---|---|---|---:|---:|---:|---:| | `~/.cursor/mcp.json` | `github` | stdio | `npx -y @modelcontextprotocol/server-github@2025.4.8` | @modelcontextprotocol/server-github@2025.4.8 (pinned, known) | NONE | 0 | 0 | 0 | 0 | | `~/.cursor/mcp.json` | `time` | stdio | `uvx mcp-server-time==0.6.2 --local-timezone=America/New_York` | mcp-server-time@0.6.2 (pinned, known) | NONE | 0 | 0 | 0 | 0 | | `~/.cursor/mcp.json` | `openai-helper` | stdio | `npx -y openai-mcp-bridge` | openai-mcp-bridge (unpinned) | CRITICAL | 1 | 1 | 0 | 0 | | `~/.cursor/mcp.json` | `filesystem` | stdio | `npx -y @modelcontextprotocol/server-filesystem / /Users/dev/projects` | @modelcontextprotocol/server-filesystem (unpinned, known) | CRITICAL | 1 | 1 | 0 | 0 | | `~/.cursor/mcp.json` | `files-pro` | stdio | `npx -y @modelcontextproto/server-filesystem@1.0.2 /Users/dev/projects/app` | @modelcontextproto/server-filesystem@1.0.2 (pinned, typosquat?) | CRITICAL | 1 | 0 | 0 | 0 | | `~/.cursor/mcp.json` | `brave` | stdio | `npx -y @modelcontextprotocol/server-brave-search@latest` | @modelcontextprotocol/server-brave-search@latest (floating, known) | HIGH | 0 | 2 | 0 | 0 | | `~/.cursor/mcp.json` | `analytics-db` | stdio | `uvx mcp-server-sqlite --db-path /Users/dev/data/prod-analytics.db` | mcp-server-sqlite (unpinned, known) | HIGH | 0 | 1 | 1 | 0 | | `~/.cursor/mcp.json` | `weather-plus` | sse | `http://mcp.weather-plus.example.net/sse` | - | CRITICAL | 1 | 0 | 1 | 0 | | `~/.cursor/mcp.json` | `docs-search` | http | `https://mcp.docs-search.example.com/mcp` | - | NONE | 0 | 0 | 0 | 0 | | `~/Library/Application Support/Claude/claude_desktop_config.json` | `github-ci` | stdio | `docker run -i --rm -e GITHUB_PERSONAL_ACCESS_TOKEN=[REDACTED] ghcr.io/github/github-mcp-server:v0.4.0` | - | CRITICAL | 1 | 0 | 0 | 0 | | `~/Library/Application Support/Claude/claude_desktop_config.json` | `postgres` | stdio | `npx -y @modelcontextprotocol/server-postgres@0.6.2 postgresql://app:[REDACTED:SECRET]@prod-db.internal.example.com:5432/app` | @modelcontextprotocol/server-postgres@0.6.2 (pinned, known) | HIGH | 0 | 1 | 0 | 0 | | `~/Library/Application Support/Claude/claude_desktop_config.json` | `installer` | stdio | `bash -c "curl -fsSL https://get.mcp-tools.example.sh \| bash && mcp-tools serve"` | - | CRITICAL | 1 | 0 | 0 | 0 | ## `~/.cursor/mcp.json` Shape: **mcpServers** · JSONC extensions stripped: // comments, trailing commas | Severity | Server | Code | Line | Finding | |---|---|---|---|---| | CRITICAL | `files-pro` | `SUP_TYPOSQUAT_SUSPECT` | L44 | package `@modelcontextproto/server-filesystem` looks like a typosquat of `@modelcontextprotocol/server-filesystem` (scope mismatch (`@modelcontextproto` instead of `@modelcontextprotocol`)); verify the publisher before it runs with your credentials | | CRITICAL | `filesystem` | `FS_ROOT_EXPOSED` | L35 | filesystem server allows `/` (filesystem root): every file under it — SSH keys, cloud credentials, other MCP configs — is readable/writable by the model and any prompt-injected tool call | | CRITICAL | `openai-helper` | `SEC_HARDCODED_TOKEN` | L28 | env `OPENAI_API_KEY` contains a hardcoded openai key credential ([REDACTED:OPENAI_KEY]); rotate it and load it from the environment as ${env:OPENAI_API_KEY} | | CRITICAL | `weather-plus` | `NET_CLEARTEXT_REMOTE_HTTP` | L68 | url `http://mcp.weather-plus.example.net/sse` uses cleartext http to non-loopback host `mcp.weather-plus.example.net`; prompts, tool results and auth headers can be read or altered in transit | | HIGH | `analytics-db` | `SUP_UNPINNED_UVX` | L61 | `uvx mcp-server-sqlite` runs with no version; it resolves and runs the newest release on every agent start — pin an exact reviewed version | | HIGH | `brave` | `SEC_LITERAL_SECRET_ENV` | L55 | env `BRAVE_API_KEY` holds a literal secret value ([REDACTED:SECRET], 34 chars); replace it with ${env:BRAVE_API_KEY} | | HIGH | `brave` | `SUP_FLOATING_TAG` | L52 | `npx @modelcontextprotocol/server-brave-search@latest` follows the floating tag `@latest`; any new publish (or account takeover) runs automatically on next start | | HIGH | `filesystem` | `SUP_UNPINNED_NPX` | L35 | `npx @modelcontextprotocol/server-filesystem` runs with no version; `-y` silently executes whatever is published to `latest` on every agent start — pin an exact reviewed version | | HIGH | `openai-helper` | `SUP_UNPINNED_NPX` | L25 | `npx openai-mcp-bridge` runs with no version; `-y` silently executes whatever is published to `latest` on every agent start — pin an exact reviewed version | | MEDIUM | `analytics-db` | `DB_WRITE_ACCESS` | L58 | database MCP server has no read-only flag or read-only role and points at a production-like host; any injected tool call can INSERT/UPDATE/DROP — connect with a read-only user or enable the server's read-only mode | | MEDIUM | `weather-plus` | `NET_REMOTE_NO_AUTH` | L68 | remote MCP endpoint `http://mcp.weather-plus.example.net/sse` has no Authorization header or token configured; unless the client completes OAuth for it, anyone who can reach it can drive its tools | | LOW | `(file)` | `CFG_JSONC_EXTENSIONS` | L1 | file uses JSONC extensions (// comments, trailing commas); they were stripped for this audit, but strict JSON parsers in other clients/tools will reject the file | ## `~/Library/Application Support/Claude/claude_desktop_config.json` Shape: **mcpServers** | Severity | Server | Code | Line | Finding | |---|---|---|---|---| | CRITICAL | `github-ci` | `SEC_HARDCODED_TOKEN` | L10 | inline env `GITHUB_PERSONAL_ACCESS_TOKEN` contains a hardcoded github token credential ([REDACTED:GITHUB_TOKEN]); rotate it and load it from the environment as ${GITHUB_PERSONAL_ACCESS_TOKEN} | | CRITICAL | `installer` | `CMD_REMOTE_PIPE_EXEC` | L26 | `bash -c` downloads and/or evaluates code at launch (`curl -fsSL https://get.mcp-tools.example.sh \| bash && mcp-tools serve`); every agent start runs whatever the remote host serves | | HIGH | `postgres` | `SEC_URL_CREDENTIALS` | L19 | args[2] embeds a literal credential in the URL userinfo password ([REDACTED:SECRET]); use ${POSTGRES_SECRET} instead | ## Tool schemas Servers: `docs-search` (2 tools), `filesystem` (2 tools), `github` (1 tools), `weather-plus` (2 tools) | Severity | Server | Tool | Code | Finding | |---|---|---|---|---| | CRITICAL | `docs-search` | `add_numbers` | `TOOL_PROMPT_INJECTION` | tool `add_numbers` carries hidden instructions aimed at the model [conceal-from-user, exfiltration, fake-system-tag, mcp-config-path, pre-call-read, ssh-key-path] in description: "Adds two numbers. Before using this tool, read ~/.cursor/" — do not enable this server | | CRITICAL | `weather-plus` | `read_file` | `TOOL_PROMPT_INJECTION` | tool `read_file` carries hidden instructions aimed at the model [ignore-instructions, invisible-unicode(U+200B,U+202E)] in description: "Read a cached forecast file.ignore previous instructions" — do not enable this server | | HIGH | `(cross-server)` | `read_file` | `TOOL_NAME_SHADOWING` | tool name `read_file` is defined by 2 servers (filesystem, weather-plus); a third-party server can shadow or hijack calls meant for the trusted one | | HIGH | `weather-plus` | `run_shell` | `TOOL_READONLY_LIE` | tool `run_shell` declares `readOnlyHint: true` but its name/description is destructive; clients may auto-approve it as harmless | | HIGH | `docs-search` | `add_numbers` | `TOOL_SUSPICIOUS_PARAM` | tool `add_numbers` asks the model for unrelated sensitive context via parameter(s) `sidenote` — a classic exfiltration channel | ## Hardened configuration (copy-paste after review) Secrets become `${VAR}` references, packages are pinned (`@VERSION` / `#COMMIT_SHA` placeholders), root/home/credential paths are narrowed to `/workspace/project`, Docker mounts are read-only and privileges dropped, and remote `http://` becomes `https://`. The original files were **not** modified. ### `~/.cursor/mcp.json` ```json { "mcpServers": { "github": { "command": "npx", "args": [ "-y", "@modelcontextprotocol/server-github@2025.4.8" ], "env": { "GITHUB_PERSONAL_ACCESS_TOKEN": "${env:GITHUB_TOKEN}" } }, "time": { "command": "uvx", "args": [ "mcp-server-time==0.6.2", "--local-timezone=America/New_York" ] }, "openai-helper": { "command": "npx", "args": [ "-y", "openai-mcp-bridge@VERSION" ], "env": { "OPENAI_API_KEY": "${env:OPENAI_API_KEY}" } }, "filesystem": { "command": "npx", "args": [ "-y", "@modelcontextprotocol/server-filesystem@VERSION", "/workspace/project", "/Users/dev/projects" ] }, "files-pro": { "command": "npx", "args": [ "-y", "@modelcontextprotocol/server-filesystem@VERSION", "/Users/dev/projects/app" ] }, "brave": { "command": "npx", "args": [ "-y", "@modelcontextprotocol/server-brave-search@VERSION" ], "env": { "BRAVE_API_KEY": "${env:BRAVE_API_KEY}" } }, "analytics-db": { "command": "uvx", "args": [ "mcp-server-sqlite@VERSION", "--db-path", "/Users/dev/data/prod-analytics.db" ] }, "weather-plus": { "type": "sse", "url": "https://mcp.weather-plus.example.net/sse" }, "docs-search": { "url": "https://mcp.docs-search.example.com/mcp", "headers": { "Authorization": "Bearer ${DOCS_SEARCH_TOKEN}" } } } } ``` - `openai-helper`: rotate the exposed credential(s) now — removing them from the file does not revoke them; then export OPENAI_API_KEY in the launching environment - `files-pro`: `@modelcontextproto/server-filesystem` replaced with `@modelcontextprotocol/server-filesystem` — confirm this is the package you intended - `brave`: rotate the exposed credential(s) now — removing them from the file does not revoke them; then export BRAVE_API_KEY in the launching environment ### `~/Library/Application Support/Claude/claude_desktop_config.json` ```json { "mcpServers": { "github-ci": { "command": "docker", "args": [ "run", "-i", "--rm", "-e", "GITHUB_PERSONAL_ACCESS_TOKEN", "ghcr.io/github/github-mcp-server:v0.4.0" ], "env": { "GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_PERSONAL_ACCESS_TOKEN}" } }, "postgres": { "command": "npx", "args": [ "-y", "@modelcontextprotocol/server-postgres@0.6.2", "postgresql://app:${POSTGRES_SECRET}@prod-db.internal.example.com:5432/app" ] } } } ``` - `github-ci`: rotate the exposed credential(s) now — removing them from the file does not revoke them; then export GITHUB_PERSONAL_ACCESS_TOKEN in the launching environment - `postgres`: rotate the exposed credential(s) now — removing them from the file does not revoke them; then export POSTGRES_SECRET in the launching environment - `installer` removed: it executes remote or obfuscated shell code at launch and cannot be hardened automatically; replace it with a pinned package - Claude Desktop does not expand ${VAR} in env values; launch servers via a wrapper that reads a secret manager --- SCOPE_NOTE: Static, read-only audit of local MCP client configuration files (Claude Desktop, Cursor, VS Code, Windsurf, Cline, Zed, Claude Code .mcp.json) and of tools/list schema snapshots the user supplies. No MCP server is launched, no package is downloaded or installed, no network request is made, and no config file is modified; hardened snippets are templates to review before use, and VERSION / COMMIT_SHA placeholders must be replaced with versions you have reviewed. Secrets are detected by known token prefixes, key names and entropy and are always redacted; detection is heuristic, so the absence of a finding is not proof that a config is safe. Typosquat matching covers a curated catalog of popular MCP packages only. Tool-poisoning checks only see the descriptions in the snapshot provided; servers can change them after install, so use --state PATH --delta to catch rug-pulls. Not a penetration test, malware analysis, or compliance attestation. Audit only configurations you own or are authorised to review. ```` --- ## Wave 3 - print-farm-ops ($29 one-time · card / Apple Pay / Google Pay via Stripe; AVAILABLE NOW · PHASE 2 LIVE) - **SKU:** `print-farm-ops` - **Name:** 3D Print Farm & Slicer Queue Ops - **Page:** https://botappstore.com/bots/print-farm-ops.html - **Checkout:** https://botappstore.com/#card-print-farm-ops - **Skills:** `print-farm-ops-setup`, `print-farm-ops` - **Price:** $29.00 USD one-time (card / Apple Pay / Google Pay via Stripe; up to 3 workspace-reset rebinds) - **Runtime:** `/workspace/scripts/print_farm_ops.py` v1.0.0 (2,165 lines, Python stdlib + `/workspace/lib/bot_common.py`, 393 unit tests), always run as `/usr/bin/python3 -I` - **Pinned SHA-256:** - `https://botappstore.com/runtime/print_farm_ops.py` — `29edc5e8664be0b6823edc6ea985467fba83430f03d5781cd6fe341684abb669` - `https://botappstore.com/runtime/bot_common.py` — `d1941b61b95ca664e4c1286c3bf1918c00e976c2c1601199b19200257650e526` - **Summary:** Offline, read-only audit of slicer `.3mf` / `.gcode` files, spool ledger, SKU table and printer list across 4 buckets (slicer thermal/mechanical safety, spool inventory & moisture hygiene, unit economics & per-part BOM margin, SKU run-rate & multi-printer queue), with a `--queue-csv` schedule and `--state --delta` tracking of spool draw-down, supply drops and slicer profile drift. Verbatim `--format markdown` output on a synthetic 4-printer farm (Bambu X1C, P1S, A1 and a Voron 2.4; 8 plates, 6 spools, 6 SKUs; all data fabricated, no printer contacted; exit `3` at the default `--fail-on medium`, clock fixed with `--now 2026-10-27T00:00:00Z`): ````markdown # 3D Print Farm & Slicer Queue Ops Report ``` snapshot 2026-10-27 00:00:00 UTC | tool=print-farm-ops endpoints local-files ``` **Inputs:** 8 slicer file(s) / 8 plate(s), 6 spool(s), 6 SKU(s), 4 printer(s) ## Summary | critical | high | medium | low | info | worst | |---|---|---|---|---|---| | 9 | 11 | 6 | 1 | 0 | CRITICAL | ## Bucket 1 - Slicer profile & thermal / mechanical safety | file | plate | slicer | printer | nozzle | material | layer | walls | infill | N/B C | hrs | g | |---|---|---|---|---|---|---|---|---|---|---|---| | bracket_placf.gcode.3mf | 1 | BambuStudio | Bambu Lab X1 Carbon | 0.40 hardened_steel | PLA-CF | 0.20 | 2 | 10% grid | 230/55 | 3.00 | 62.0 | | calibration_pla_hot.gcode.3mf | 1 | BambuStudio | Voron 2.4 350 | 0.40 tungsten_carbide | PLA | 0.20 | 3 | 20% gyroid | 265/55 | 0.60 | 6.0 | | clip_petg.gcode.3mf | 1 | BambuStudio | Bambu Lab A1 | 0.40 brass | PETG | 0.20 | 3 | 20% gyroid | 245/75 | 1.50 | 30.0 | | fanduct_placf_a1.gcode.3mf | 1 | BambuStudio | Bambu Lab A1 | 0.40 brass | PLA-CF | 0.20 | 3 | 20% gyroid | 230/55 | 1.80 | 21.0 | | gasket_tpu.gcode.3mf | 1 | BambuStudio | Voron 2.4 350 | 0.40 tungsten_carbide | TPU | 0.20 | 3 | 20% gyroid | 230/45 | 2.20 | 24.0 | | gear_pahtcf.gcode.3mf | 1 | BambuStudio | Bambu Lab P1S | 0.60 hardened_steel | PAHT-CF | 0.28 | 4 | 30% gyroid | 210/55 | 5.50 | 88.0 | | minifig_pla_0p2.gcode.3mf | 1 | BambuStudio | Bambu Lab X1 Carbon | 0.20 hardened_steel | PLA | 0.08 | 3 | 20% gyroid | 215/55 | 4.00 | 18.0 | | pulley_pa6cf.gcode.3mf | 1 | BambuStudio | Bambu Lab X1 Carbon | 0.40 hardened_steel | PA6-CF | 0.20 | 4 | 35% cubic | 285/90 | 2.40 | 26.0 | - **CRITICAL** `ABRASIVE_FILAMENT_BRASS_NOZZLE` fanduct_placf_a1.gcode.3mf: abrasive filament PLA-CF sliced for a brass nozzle (slicer file); it will wear through it, use a hardened / tungsten nozzle - **CRITICAL** `THERMAL_RUNAWAY_OR_OUT_OF_RANGE` calibration_pla_hot.gcode.3mf: PLA sliced at 265 C exceeds its 250 C degradation limit (charring, heat-creep jams, fumes) - **HIGH** `STRUCTURAL_UNDER_WALLED` bracket_placf.gcode.3mf: structural part is under-built: infill 10% (<15%), 2 wall loops (<3) - **HIGH** `TEMP_MATERIAL_MISMATCH` gear_pahtcf.gcode.3mf: PAHT-CF sliced with nozzle 210 C (envelope 270-315 C) and bed 55 C (envelope 80-115 C); the filament preset was probably not switched - **HIGH** `WEAK_INFILL_PATTERN_STRUCTURAL` bracket_placf.gcode.3mf: grid infill on a structural part: the nozzle re-crosses infill lines and shear strength is poor; use gyroid, cross_hatch or cubic - **MEDIUM** `ABRASIVE_CLOG_RISK_SMALL_NOZZLE` pulley_pa6cf.gcode.3mf: heavily filled PA6-CF on a 0.4 mm nozzle clogs often; a 0.6 mm hardened nozzle is recommended - **MEDIUM** `TPU_HIGH_VOLUMETRIC_SPEED` gasket_tpu.gcode.3mf: TPU max volumetric speed 9 mm3/s exceeds 6.0 (extruder gear buckling / jams) ## Bucket 2 - Spool inventory, moisture hygiene & BOM depletion | spool | material | brand | remaining g | reorder g | $/kg | dried (days ago) | status | |---|---|---|---|---|---|---|---| | S-PLACF-1 | PLA-CF | Bambu | 520 | 200 | 45.00 | n/a | ok | | S-PAHT-1 | PAHT-CF | Bambu | 310 | 250 | 95.00 | 26 | DRY-OVERDUE | | S-PETG-1 | PETG | Polymaker | 640 | 200 | 24.00 | 9 | ok | | S-PETG-2 | PETG | Polymaker | 130 | 200 | 24.00 | 9 | LOW(<=150g) | | S-TPU-1 | TPU | Sunlu | 520 | 200 | 36.00 | - | DRY-OVERDUE | | S-PLA-1 | PLA | Bambu | 880 | 200 | 19.00 | n/a | ok | | material | queue needs g | available g | after g | status | |---|---|---|---|---| | PA6-CF | 27 | 0 | -27 | SHORT | | PAHT-CF | 458 | 310 | -148 | SHORT | | PETG | 31 | 770 | 739 | ok | | PLA | 100 | 880 | 780 | ok | | PLA-CF | 1634 | 520 | -1114 | SHORT | | TPU | 25 | 520 | 495 | ok | - **CRITICAL** `SPOOL_INSUFFICIENT_FOR_QUEUE` PA6-CF: queue needs 27 g (incl. scrap buffer) but 0 g on hand across 0 spool(s); short by 27 g - **CRITICAL** `SPOOL_INSUFFICIENT_FOR_QUEUE` PAHT-CF: queue needs 458 g (incl. scrap buffer) but only 310 g on hand across 1 spool(s); short by 148 g - **CRITICAL** `SPOOL_INSUFFICIENT_FOR_QUEUE` PLA-CF: queue needs 1634 g (incl. scrap buffer) but only 520 g on hand across 1 spool(s); short by 1114 g - **HIGH** `HYGROSCOPIC_DRYING_OVERDUE` spool S-PAHT-1 (PAHT-CF) drying overdue: last dried 26 days ago (limit 7 days); wet filament strings, bubbles and loses strength - **HIGH** `HYGROSCOPIC_DRYING_OVERDUE` spool S-TPU-1 (TPU) drying overdue: no dried_at recorded (limit 7 days); wet filament strings, bubbles and loses strength - **HIGH** `SPOOL_LOW_STOCK` spool S-PETG-2 (Polymaker PETG) has 130 g left (<= 150 g floor); swap before a long print - **LOW** `DESICCANT_CHANGE_OVERDUE` spool S-PAHT-1 desiccant last changed 87 days ago (limit 60) ## Bucket 3 - Unit economics & per-part BOM | sku | material | filament | power | machine | labor | COGS | price | net rev | profit | margin | |---|---|---|---|---|---|---|---|---|---|---| | BRK-CF-01 | PLA-CF | $0.73 | $0.03 | $0.78 | $2.20 | $3.73 | $18.00 | $10.26 | $6.53 | 36.3% | | GEAR-PAHT-02 | PAHT-CF | $4.35 | $0.07 | $2.29 | $3.67 | $10.38 | $24.00 | $16.08 | $5.70 | 23.8% | | CLIP-PETG-03 | PETG | $0.06 | $0.00 | $0.11 | $1.10 | $1.28 | $7.50 | $6.53 | $5.25 | 69.9% | | GASKET-TPU-04 | TPU | $0.15 | $0.02 | $0.45 | $1.47 | $2.08 | $4.50 | $3.92 | $1.83 | 40.7% | | VASE-PLA-05 | PLA | $1.88 | $0.20 | $5.75 | $1.83 | $9.65 | $16.00 | $8.72 | -$0.93 | -5.8% | | MINI-PLA-06 | PLA | $0.36 | $0.10 | $3.54 | $1.83 | $5.83 | $12.00 | $6.44 | $0.61 | 5.1% | Unlinked plates (cost only, no sale price): | plate | material | grams | hours | filament | power | machine | COGS | |---|---|---|---|---|---|---|---| | calibration_pla_hot.gcode.3mf#1 | PLA | 6.0 | 0.60 | $0.12 | $0.02 | $0.54 | $0.68 | | fanduct_placf_a1.gcode.3mf#1 | PLA-CF | 21.0 | 1.80 | $0.98 | $0.07 | $1.87 | $2.92 | | pulley_pa6cf.gcode.3mf#1 | PA6-CF | 26.0 | 2.40 | $2.30 | $0.09 | $2.50 | $4.88 | - **CRITICAL** `SKU_NEGATIVE_MARGIN` VASE-PLA-05 loses $0.93 per unit (COGS $9.65 vs net revenue $8.72) - **HIGH** `SKU_CRITICAL_MARGIN_COMPRESSION` GEAR-PAHT-02 gross margin 23.8% is under 25% (profit $5.70 on $24.00) - **HIGH** `SKU_CRITICAL_MARGIN_COMPRESSION` MINI-PLA-06 gross margin 5.1% is under 25% (profit $0.61 on $12.00) - **MEDIUM** `PLATE_BOM_MISMATCH` GASKET-TPU-04 vs gasket_tpu.gcode.3mf#1: hours/unit table 0.50 vs sliced 0.37 (-27%); costs and queue hours use the table values - **MEDIUM** `SKU_BELOW_TARGET_MARGIN` BRK-CF-01 gross margin 36.3% is below the 45.0% target - **MEDIUM** `SKU_BELOW_TARGET_MARGIN` GASKET-TPU-04 gross margin 40.7% is below the 45.0% target ## Bucket 4 - SKU run-rate & multi-printer queue | sku | on hand | open | net avail | vel/day | days supply | lead+safety | target | deficit | plates | print hrs | tier | |---|---|---|---|---|---|---|---|---|---|---|---| | BRK-CF-01 | 3 | 90 | -87 | 2.00 | 0.0 | 2+4 | 102 | 99 | 25 | 75.0 | 1_BACKORDER | | GEAR-PAHT-02 | 12 | 8 | 4 | 1.50 | 2.7 | 6+3 | 22 | 10 | 5 | 27.5 | 2_STOCKOUT_RISK | | CLIP-PETG-03 | 34 | 10 | 24 | 6.00 | 4.0 | 3+2 | 40 | 6 | 1 | 1.5 | 3_SAFETY_REPLENISH | | GASKET-TPU-04 | 2 | 1 | 1 | 0.80 | 1.2 | 2+2 | 5 | 3 | 1 | 3.0 | 2_STOCKOUT_RISK | | VASE-PLA-05 | 18 | 2 | 16 | 0.50 | 32.0 | 3+4 | 6 | 0 | 0 | 0.0 | - | | MINI-PLA-06 | 0 | 2 | -2 | 0.50 | 0.0 | 3+2 | 5 | 5 | 5 | 20.0 | 1_BACKORDER | | printer | model | nozzle | type | encl | max N/B C | status | cap h/day | queued h | |---|---|---|---|---|---|---|---|---| | x1c-01 | Bambu Lab X1 Carbon | 0.40 | hardened_steel | yes | 300/120 | printing | 20.0 | 42.0 | | p1s-01 | Bambu Lab P1S | 0.60 | hardened_steel | yes | 300/100 | idle | 20.0 | 27.5 | | a1-01 | Bambu Lab A1 | 0.40 | brass | no | 300/100 | idle | 18.0 | 4.5 | | voron-01 | Voron 2.4 350 | 0.40 | tungsten_carbide | yes | 350/120 | idle | 16.0 | 33.0 | Scheduled queue (greedy earliest-finish): | # | tier | sku | material | plates | units | printer | hrs | grams | COGS | margin | days supply | |---|---|---|---|---|---|---|---|---|---|---|---| | 1 | 1_BACKORDER | BRK-CF-01 | PLA-CF | 11 | 44 | voron-01 | 33.0 | 709 | $3.73 | 36.3% | 0.0 | | 1 | 1_BACKORDER | BRK-CF-01 | PLA-CF | 14 | 55 | x1c-01 | 42.0 | 903 | $3.73 | 36.3% | 0.0 | | 2 | 1_BACKORDER | MINI-PLA-06 | PLA | 5 | 5 | UNASSIGNED | 20.0 | 94 | $5.83 | 5.1% | 0.0 | | 3 | 2_STOCKOUT_RISK | GASKET-TPU-04 | TPU | 1 | 3 | a1-01 | 3.0 | 25 | $2.08 | 40.7% | 1.2 | | 4 | 2_STOCKOUT_RISK | GEAR-PAHT-02 | PAHT-CF | 5 | 10 | p1s-01 | 27.5 | 458 | $10.38 | 23.8% | 2.7 | | 5 | 3_SAFETY_REPLENISH | CLIP-PETG-03 | PETG | 1 | 6 | a1-01 | 1.5 | 31 | $1.28 | 69.9% | 4.0 | - **CRITICAL** `NO_COMPATIBLE_PRINTER_FOR_JOB` MINI-PLA-06 (PLA) needs [0.2 mm nozzle, 215 C hotend, 55 C bed] but no online printer provides: 0.2 mm nozzle - **CRITICAL** `SKU_BACKORDER_DEFICIT` BRK-CF-01: 3 on hand vs 90 open orders; 87 customer unit(s) are waiting on the print queue - **CRITICAL** `SKU_BACKORDER_DEFICIT` MINI-PLA-06: 0 on hand vs 2 open orders; 2 customer unit(s) are waiting on the print queue - **HIGH** `FARM_CAPACITY_OVERLOAD` farm capacity overload: 1 urgent job(s) would finish after their lead time (BRK-CF-01) - **HIGH** `SKU_STOCKOUT_IMMINENT` GASKET-TPU-04: 1.2 days of supply is below the 2 day lead time; it will stock out before a reprint lands - **HIGH** `SKU_STOCKOUT_IMMINENT` GEAR-PAHT-02: 2.7 days of supply is below the 6 day lead time; it will stock out before a reprint lands - **MEDIUM** `SKU_REORDER_TRIGGER` CLIP-PETG-03: 4.0 days of supply is below lead time + safety stock (5 days); queue 1 plate(s) ## Delta since baseline baseline run: 27 finding(s) recorded as NEW; no prior state exit_code 3 (fail-on=medium) --- SCOPE_NOTE: 100% offline, local, read-only inspection of the .3mf / .gcode.3mf / .gcode files and the spool, order and printer tables you supply. No network request is made (no Bambu Cloud, MQTT, Moonraker, Klipper, OctoPrint or PrusaLink call), no G-code is sent, no print is started, stopped or heated, and it never modifies or overwrites any .3mf or .gcode file in place; --queue-csv only writes a new CSV and refuses .3mf / .gcode targets and any input path. Thermal and structural findings are heuristic checks of slicer metadata, not mechanical-engineering certification and not a substitute for hardware fire-safety protection (thermal-runaway cut-offs, smoke / heat detection, an unattended-print policy). Cost, margin and reorder figures are arithmetic on the numbers you supply, not financial, tax or accounting advice. Credentials, API keys and printer LAN access codes are refused and never read or echoed. --- ```` --- ## Wave 3 - robotics-telemetry-inspector ($49 one-time · card / Apple Pay / Google Pay via Stripe; AVAILABLE NOW · PHASE 1 RELEASE) - **SKU:** `robotics-telemetry-inspector` - **Name:** Humanoid & Fleet Telemetry Inspector - **Page:** https://botappstore.com/bots/robotics-telemetry-inspector.html - **Checkout:** https://botappstore.com/#card-robotics-telemetry-inspector - **Skills:** `robotics-telemetry-inspector-setup`, `robotics-telemetry-inspector` - **Price:** $49.00 USD one-time (card / Apple Pay / Google Pay via Stripe; up to 3 workspace-reset rebinds) - **Runtime:** `/workspace/scripts/robotics_telemetry_inspector.py` v1.0.0 (3,245 lines, Python stdlib + `/workspace/lib/bot_common.py`, 724 unit tests), always run as `/usr/bin/python3 -I` - **Pinned SHA-256:** - `https://botappstore.com/runtime/robotics_telemetry_inspector.py` — `aa45c09553b0c989a988c4f2375a7d9e596f338afa5f98969db09896eb6c6b17` - `https://botappstore.com/runtime/bot_common.py` — `d1941b61b95ca664e4c1286c3bf1918c00e976c2c1601199b19200257650e526` - **Summary:** Offline, read-only audit of actuator/joint logs, BMS exports, ROS 2 bags, PX4/ArduPilot flight logs, URDF/SDF models and CAN captures across 4 buckets (actuator, joint & harmonic-drive duty cycles; 16S LiFePO4/LiPo BMS; ROS 2 bag, TF tree & QoS integrity; PX4/ArduPilot flight readiness), with a `--maintenance-out` checklist and `--state --delta` tracking of cell-spread spikes, actuator thermal drift, SOH steps and topic-rate regressions. Verbatim `--self-check --format markdown --now 2026-10-27T00:00:00Z` output on the built-in synthetic fleet (12-DOF humanoid on CAN, 16S LiFePO4 + 6S LiPo packs, a ROS 2 navigation bag with an expectations file, an MCAP fleet bag and a PX4 quadrotor log; all data fabricated, no robot contacted; exit `3`), including its reproduce command: ````markdown # Sample: Humanoid & Fleet Telemetry Inspector **Fleet:** 12-DOF humanoid / mobile manipulator (6 joints per leg, harmonic-drive actuators on CAN) - 16S LiFePO4 main pack + 6S LiPo auxiliary pack - ROS 2 navigation bag (`nav.db3`, SQLite rosbag2, plus an expectations file) - fleet telemetry bag (`fleet.mcap`) - PX4 quadrotor companion flight log (`quad.ulg`) **Inputs:** `humanoid-actuators.csv`, `humanoid.urdf`, `bms.csv`, `humanoid-bus.log` (candump), `nav.db3`, `nav-expectations.json`, `fleet.mcap`, `quad.ulg` Reproduce (the fixtures are generated into a temporary directory and removed afterwards; output is deterministic): ``` python3 -I scripts/robotics_telemetry_inspector.py --self-check --format markdown --now 2026-10-27T00:00:00Z ``` The run exits `3` (CRITICAL). Bucket 1 shows the actuator, joint-limit (URDF cross-checked) and CAN bus audit, bucket 2 the 16S LiFePO4 pack, bucket 3 the ROS 2 bag topic rates, QoS, clock and TF-tree integrity, and bucket 4 the PX4 EKF / vibration / GNSS / ESC readiness checks and the preventive-maintenance checklist (the full list is written with `--maintenance-out checklist.csv`). The credential finding in `fleet.mcap` shows redaction: the Wi-Fi password in the MCAP metadata record is never printed. --- # Humanoid & Fleet Telemetry Inspector Report ``` snapshot 2026-10-27 00:00:00 UTC | tool=robotics-telemetry-inspector endpoints local-files ``` ## Summary Inputs: 12 actuator row(s), 2 BMS pack(s), 2 bag(s) / 7 topic(s), 10 flight record(s), 121 CAN frame(s), 12 URDF/SDF joint(s) | critical | high | medium | low | info | worst | |---|---|---|---|---|---| | 12 | 21 | 4 | 1 | 0 | CRITICAL | ## Bucket 1 - Actuator, joint & harmonic-drive duty cycles | joint | stator C | max C | peak Nm | rms Nm | vel rad/s | duty % | hours | backlash arcmin | |---|---|---|---|---|---|---|---|---| | l_hip_yaw | 55.0 | 90.0 | 60.0 | 20.0 | 3.00 | 40 | 1000 | 1.00 | | l_hip_roll | 55.0 | 90.0 | 60.0 | 20.0 | 7.20 | 40 | 1000 | 1.00 | | l_hip_pitch | 55.0 | 90.0 | 60.0 | 20.0 | 3.00 | 40 | 1000 | 1.00 | | l_knee_pitch | 104.0 | 90.0 | 135.0 | 20.0 | 3.00 | 88 | 1000 | 3.40 | | l_ankle_pitch | 55.0 | 90.0 | 60.0 | 20.0 | 3.00 | 40 | 1000 | 1.00 | | l_ankle_roll | 55.0 | 90.0 | 60.0 | 20.0 | 3.00 | 40 | 1000 | 1.00 | | r_hip_yaw | 55.0 | 90.0 | 60.0 | 20.0 | 3.00 | 40 | 8100 | 1.00 | | r_hip_roll | 55.0 | 90.0 | 60.0 | 20.0 | 3.00 | 40 | 1000 | 1.00 | | r_hip_pitch | 55.0 | 90.0 | 60.0 | 20.0 | 3.00 | 40 | 1000 | 1.00 | | r_knee_pitch | 93.0 | 100.0 | 60.0 | 45.0 | 3.00 | 40 | 1000 | 1.00 | | r_ankle_pitch | 55.0 | 90.0 | 60.0 | 20.0 | 3.00 | 74 | 7300 | 1.00 | | r_ankle_roll | 55.0 | 90.0 | 60.0 | 20.0 | 3.00 | 40 | 1000 | 1.00 | Model: humanoid.urdf (URDF, 12 joints) | bus | frames | errors | err % | CRC | stuff | form | peak load % | EMCY | HB timeouts | |---|---|---|---|---|---|---|---|---|---| | can0 | 121 | 7 | 5.8 | 6 | 6 | 0 | 0 (est.) | 1 | 1 | - **CRITICAL** `ACTUATOR_THERMAL_OVERLOAD` l_knee_pitch stator 104.0 C is at/over its limit (90.0 C max, 100 C absolute) - **CRITICAL** `CAN_BUS_FAULT_OR_TIMEOUT` bus can0 entered bus-off (controller disconnected itself after repeated errors) - **CRITICAL** `CAN_BUS_FAULT_OR_TIMEOUT` bus can0: 1 emergency / fault frame(s) (cob_id 0x082) - **CRITICAL** `CAN_BUS_FAULT_OR_TIMEOUT` bus can0: 7 of 121 frames are error frames (5.8%; CRC 6, stuff 6, form 0) - **CRITICAL** `JOINT_TORQUE_LIMIT_EXCEEDED` l_knee_pitch peak torque 135.00 Nm exceeds the 120.00 Nm limit (URDF/SDF effort) - **HIGH** `ACTUATOR_HIGH_DUTY_CYCLE` l_knee_pitch duty cycle 88.0% (limits: >70% MEDIUM, >85% HIGH) - **HIGH** `ACTUATOR_THERMAL_OVERLOAD` r_knee_pitch stator 93.0 C is within 10 C of its limit (100.0 C max) or at/over 85 C - **HIGH** `CAN_BUS_FAULT_OR_TIMEOUT` bus can0: heartbeat timeout on node 0x01 (4.00 s silent) - **HIGH** `HARMONIC_DRIVE_WEAR_THRESHOLD` l_knee_pitch harmonic drive: backlash 3.40 arcmin exceeds the 3.00 arcmin limit - **HIGH** `JOINT_POSITION_LIMIT_EXCEEDED` l_hip_roll observed position 0.900..0.900 is outside the model range [-0.600, 0.500] - **HIGH** `JOINT_TORQUE_LIMIT_EXCEEDED` r_knee_pitch RMS torque 45.00 Nm exceeds the 40.00 Nm rated torque (continuous overload) - **HIGH** `JOINT_VELOCITY_LIMIT_EXCEEDED` l_hip_roll velocity 7.20 rad/s exceeds the 6.00 rad/s limit - **MEDIUM** `ACTUATOR_HIGH_DUTY_CYCLE` r_ankle_pitch duty cycle 74.0% (limits: >70% MEDIUM, >85% HIGH) - **MEDIUM** `HARMONIC_DRIVE_WEAR_THRESHOLD` r_hip_yaw harmonic drive: 8100 operating hours reached the 8000 h service interval - **LOW** `HARMONIC_DRIVE_WEAR_THRESHOLD` r_ankle_pitch harmonic drive: 7300 operating hours is 91% of the 8000 h service interval ## Bucket 2 - 16S LiFePO4 / LiPo battery management system | pack | chem | cells | V | A | min mV | max mV | delta mV | state | MOSFET C | pack C | SOH % | cycles | |---|---|---|---|---|---|---|---|---|---|---|---|---| | HUM-PACK-A | LiFePO4 | 16 | 51.2 | 160.0 | 2440 | 3248 | 808 | load | 78.0 | 41.0 | 78.0 | 3250 | | AUX-PACK-B | LiPo | 6 | 23.1 | 4.0 | 3830 | 3840 | 10 | rest | 31.0 | 28.0 | 97.0 | 40 | - **CRITICAL** `BMS_CELL_IMBALANCE_DELTA` HUM-PACK-A (LiFePO4) cell spread 808 mV (2440..3248 mV) under load; balancer active - **CRITICAL** `BMS_CRITICAL_CELL_SAG` HUM-PACK-A (LiFePO4) weakest cell 2440 mV is below the 2500 mV critical floor - **HIGH** `BMS_DISCHARGE_CRATE_EXCEEDED` HUM-PACK-A (LiFePO4) drawing 1.60 C (160.0 A / 100.0 Ah) over the 1.50 C limit - **HIGH** `BMS_MOSFET_THERMAL_RISE` HUM-PACK-A (LiFePO4) MOSFET 78.0 C / pack 41.0 C is above the warning limit (75 C / 50 C) - **MEDIUM** `BMS_SOH_DEGRADATION` HUM-PACK-A (LiFePO4) state of health 78.0%, 3250 cycles (rated 3000) ## Bucket 3 - ROS 2 bag, TF tree & QoS integrity Bag nav.db3 (db3): 2341 message(s), 30.0 s, 6 topic(s), 7 tf edge(s) | topic | type | msgs | rate Hz | expected Hz | max gap s | offset ms | |---|---|---|---|---|---|---| | /cmd_vel | | 0 | 0.00 | 10.0 | - | - | | /imu/data | Imu | 1500 | 50.03 | 50.0 | 0.52 | 3.0 | | /joint_states | JointState | 600 | 20.01 | 20.0 | 0.05 | 70.0 | | /scan | LaserScan | 90 | 3.00 | 10.0 | 4.25 | 5.0 | | /tf | TFMessage | 150 | 5.00 | - | 0.20 | - | | /tf_static | TFMessage | 1 | 0.03 | - | - | - | Bag fleet.mcap (mcap): 20 message(s), 19.0 s, 1 topic(s), 0 tf edge(s) | topic | type | msgs | rate Hz | expected Hz | max gap s | offset ms | |---|---|---|---|---|---|---| | /battery_state | BatteryState | 20 | 1.05 | - | 1.00 | 0.0 | - **CRITICAL** `ROSBAG_TOPIC_DROPOUT` nav.db3: required/safety topic /cmd_vel recorded 0 messages (expected 10.0 Hz) - **CRITICAL** `TF_TREE_CYCLE_OR_DISCONNECT` nav.db3: /tf + /tf_static frame graph contains a cycle (base_link -> lidar -> map -> odom -> base_link); transform lookups will loop or fail - **HIGH** `QOS_INCOMPATIBLE_MISMATCH` nav.db3: sensor topic /scan QoS mismatch: BEST_EFFORT publisher vs RELIABLE subscriber; endpoints will not connect or will silently drop data - **HIGH** `ROSBAG_CLOCK_DRIFT_OR_JUMP` nav.db3: topic /imu/data has 2 backward timestamp jump(s) (bag time 1, header stamp 1) - **HIGH** `ROSBAG_CLOCK_DRIFT_OR_JUMP` nav.db3: inter-sensor clock skew 67.0 ms (/imu/data vs /joint_states); sensor fusion will mis-associate samples - **HIGH** `ROSBAG_TOPIC_DROPOUT` nav.db3: topic /imu/data has a 0.52 s message gap, over 5x the 0.020 s period (50.0 Hz expected) - **HIGH** `ROSBAG_TOPIC_DROPOUT` nav.db3: topic /scan ran at 3.00 Hz, 30% of the expected 10.0 Hz - **HIGH** `ROSBAG_TOPIC_DROPOUT` nav.db3: topic /scan has a 4.25 s message gap, over 5x the 0.100 s period (10.0 Hz expected) - **HIGH** `TF_TREE_CYCLE_OR_DISCONNECT` nav.db3: /tf + /tf_static frame graph has 2 disconnected root frames (arm_base, world); expected a single tree - **MEDIUM** `QOS_INCOMPATIBLE_MISMATCH` nav.db3: topic /joint_states uses KEEP_ALL (depth 0): unbounded queue memory risk on a long run ## Bucket 4 - PX4 / ArduPilot EKF, IMU, GNSS & ESC flight readiness | records | EKF v/p/h/m | vib x/y/z m/s2 | clip | GNSS fix/sats/hdop | failsafe | pre-arm | |---|---|---|---|---|---|---| | 10 | 1.12/0.40/0.30/0.20 | 35.0/28.0/17.5 | - | 3/5/2.70 | yes | Preflight Fail: Accel inconsistent | | ESC | mean RPM | max temp C | desync | max A | |---|---|---|---|---| | 0 | 5200 | 62.0 | 0 | 18.0 | | 1 | 5200 | 108.0 | 3 | 18.0 | | 2 | 5200 | 62.0 | 0 | 18.0 | | 3 | 6600 | 62.0 | 0 | 18.0 | - **CRITICAL** `EKF_INNOVATION_DIVERGENCE` EKF velocity innovation test ratio peaks at 1.12 (>=0.7 HIGH, >=1.0 rejects the measurement) - **CRITICAL** `ESC_DESYNC_OR_OVERHEAT` ESC 1: 3 desync event(s), peak temperature 108.0 C - **CRITICAL** `FLIGHT_FAILSAFE_OR_PREARM_FAULT` a failsafe was active during the log - **HIGH** `ESC_DESYNC_OR_OVERHEAT` ESC mean RPM spread 21.2% (5200..6600) exceeds 15%: a motor/prop/ESC is working harder or slipping - **HIGH** `FLIGHT_FAILSAFE_OR_PREARM_FAULT` pre-arm check failure logged: Preflight Fail: Accel inconsistent - **HIGH** `GNSS_DEGRADED_FIX` outdoor GNSS degraded: min fix type 3, min satellites 5, max HDOP 2.70 (fix<3, sats<6 or HDOP>2.5) - **HIGH** `IMU_VIBRATION_CLIPPING` IMU vibration RMS peaks at 35.0 m/s^2 (x 35.0, y 28.0, z 17.5; >30 HIGH, >60 CRITICAL) Preventive maintenance & flight-readiness checklist (53 row(s); full list with --maintenance-out) | prio | category | asset | check | status | due | |---|---|---|---|---|---| | 0 | Flight readiness | OVERALL | Heuristic readiness gate over the supplied logs (not an airworthine... | NO-GO | - | | 1 | Actuator / joint | l_knee_pitch | l_knee_pitch stator 104.0 C is at/over its limit (90.0 C max, 100 C... | NO-GO | before next operation | | 1 | Actuator / joint | l_knee_pitch | l_knee_pitch peak torque 135.00 Nm exceeds the 120.00 Nm limit (URD... | NO-GO | before next operation | | 1 | Battery / BMS | HUM-PACK-A | HUM-PACK-A (LiFePO4) cell spread 808 mV (2440..3248 mV) under load;... | NO-GO | before next operation | | 1 | Battery / BMS | HUM-PACK-A | HUM-PACK-A (LiFePO4) weakest cell 2440 mV is below the 2500 mV crit... | NO-GO | before next operation | | 1 | CAN / RS485 bus | can0 | bus can0 entered bus-off (controller disconnected itself after repe... | NO-GO | before next operation | | 1 | CAN / RS485 bus | can0 | bus can0: 1 emergency / fault frame(s) (cob_id 0x082) | NO-GO | before next operation | | 1 | CAN / RS485 bus | can0 | bus can0: 7 of 121 frames are error frames (5.8%; CRC 6, stuff 6, f... | NO-GO | before next operation | | 1 | Flight readiness | - | EKF velocity innovation test ratio peaks at 1.12 (>=0.7 HIGH, >=1.0... | NO-GO | before next operation | | 1 | Flight readiness | - | ESC 1: 3 desync event(s), peak temperature 108.0 C | NO-GO | before next operation | | 1 | Flight readiness | - | a failsafe was active during the log | NO-GO | before next operation | | 1 | ROS 2 bag | - | nav.db3: /tf + /tf_static frame graph contains a cycle (base_link -... | NO-GO | before next operation | | 1 | ROS 2 bag | /cmd_vel | nav.db3: required/safety topic /cmd_vel recorded 0 messages (expect... | NO-GO | before next operation | | 2 | Actuator / joint | l_hip_roll | l_hip_roll observed position 0.900..0.900 is outside the model rang... | ACTION_REQUIRED | before next flight / shift | | 2 | Actuator / joint | l_hip_roll | l_hip_roll velocity 7.20 rad/s exceeds the 6.00 rad/s limit | ACTION_REQUIRED | before next flight / shift | | 2 | Actuator / joint | l_knee_pitch | l_knee_pitch duty cycle 88.0% (limits: >70% MEDIUM, >85% HIGH) | ACTION_REQUIRED | before next flight / shift | | 2 | Actuator / joint | l_knee_pitch | l_knee_pitch harmonic drive: backlash 3.40 arcmin exceeds the 3.00 ... | ACTION_REQUIRED | before next flight / shift | | 2 | Actuator / joint | r_knee_pitch | r_knee_pitch stator 93.0 C is within 10 C of its limit (100.0 C max... | ACTION_REQUIRED | before next flight / shift | | 2 | Actuator / joint | r_knee_pitch | r_knee_pitch RMS torque 45.00 Nm exceeds the 40.00 Nm rated torque ... | ACTION_REQUIRED | before next flight / shift | | 2 | Battery / BMS | HUM-PACK-A | HUM-PACK-A (LiFePO4) drawing 1.60 C (160.0 A / 100.0 Ah) over the 1... | ACTION_REQUIRED | before next flight / shift | | 2 | Battery / BMS | HUM-PACK-A | HUM-PACK-A (LiFePO4) MOSFET 78.0 C / pack 41.0 C is above the warni... | ACTION_REQUIRED | before next flight / shift | | 2 | CAN / RS485 bus | can0 | bus can0: heartbeat timeout on node 0x01 (4.00 s silent) | ACTION_REQUIRED | before next flight / shift | | 2 | Data safety | - | fleet.mcap: field metadata:network:wifi_password holds what looks l... | ACTION_REQUIRED | before next flight / shift | | 2 | Flight readiness | - | ESC mean RPM spread 21.2% (5200..6600) exceeds 15%: a motor/prop/ES... | ACTION_REQUIRED | before next flight / shift | | 2 | Flight readiness | - | pre-arm check failure logged: Preflight Fail: Accel inconsistent | ACTION_REQUIRED | before next flight / shift | | 2 | Flight readiness | - | outdoor GNSS degraded: min fix type 3, min satellites 5, max HDOP 2... | ACTION_REQUIRED | before next flight / shift | | 2 | Flight readiness | - | IMU vibration RMS peaks at 35.0 m/s^2 (x 35.0, y 28.0, z 17.5; >30 ... | ACTION_REQUIRED | before next flight / shift | | 2 | ROS 2 bag | - | nav.db3: inter-sensor clock skew 67.0 ms (/imu/data vs /joint_state... | ACTION_REQUIRED | before next flight / shift | | 2 | ROS 2 bag | - | nav.db3: /tf + /tf_static frame graph has 2 disconnected root frame... | ACTION_REQUIRED | before next flight / shift | | 2 | ROS 2 bag | /imu/data | nav.db3: topic /imu/data has 2 backward timestamp jump(s) (bag time... | ACTION_REQUIRED | before next flight / shift | | 2 | ROS 2 bag | /imu/data | nav.db3: topic /imu/data has a 0.52 s message gap, over 5x the 0.02... | ACTION_REQUIRED | before next flight / shift | | 2 | ROS 2 bag | /scan | nav.db3: sensor topic /scan QoS mismatch: BEST_EFFORT publisher vs ... | ACTION_REQUIRED | before next flight / shift | | 2 | ROS 2 bag | /scan | nav.db3: topic /scan ran at 3.00 Hz, 30% of the expected 10.0 Hz | ACTION_REQUIRED | before next flight / shift | | 2 | ROS 2 bag | /scan | nav.db3: topic /scan has a 4.25 s message gap, over 5x the 0.100 s ... | ACTION_REQUIRED | before next flight / shift | | 3 | Actuator / joint | r_ankle_pitch | r_ankle_pitch duty cycle 74.0% (limits: >70% MEDIUM, >85% HIGH) | SCHEDULE | next scheduled service (<= 30 days) | | 3 | Actuator / joint | r_hip_yaw | r_hip_yaw harmonic drive: 8100 operating hours reached the 8000 h s... | SCHEDULE | next scheduled service (<= 30 days) | | 3 | Battery / BMS | HUM-PACK-A | HUM-PACK-A (LiFePO4) state of health 78.0%, 3250 cycles (rated 3000) | SCHEDULE | next scheduled service (<= 30 days) | | 3 | Preventive maintenance | HUM-PACK-A | Battery cycle life (3250 of 3000 cycles, SOH 78.0%) | OVERDUE | now | | 3 | Preventive maintenance | r_ankle_pitch | Harmonic drive service interval (7300 of 8000 h) | DUE_SOON | in 700 operating hours | | 3 | Preventive maintenance | r_hip_yaw | Harmonic drive service interval (8100 of 8000 h) | OVERDUE | now | ## Other - **HIGH** `EMBEDDED_TELEMETRY_CREDENTIAL` fleet.mcap: field metadata:network:wifi_password holds what looks like a credential field (value redacted); rotate it and re-export the log without it exit_code 3 (fail-on=medium) --- SCOPE_NOTE: 100% offline, local, read-only inspection of the actuator, BMS, CAN / RS485, ROS 2 bag (.db3 / .mcap / metadata), PX4 ULog / ArduPilot and URDF / SDF files you supply. Findings are offline diagnostic heuristics on exported logs, not airworthiness, FAA / EASA flight certification, or functional-safety (ISO 13849 / IEC 61508 / ISO 10218) approval. No network request is made, and the tool never issues motor or actuator commands, CAN frames, MAVLink parameter writes or BMS register writes; it never modifies an input file (--state, --out and --maintenance-out only write new files and refuse any input path). Credentials, tokens, MAVLink signing keys, ROS 2 DDS security private keys, Wi-Fi passwords and SSH keys are refused (exit 10) or redacted, and never read back or echoed. ```` ## Wave 3 - sec-supply-chain-mapper ($29 one-time · card / Apple Pay / Google Pay via Stripe; v1.1; LIVE NOW) - **SKU:** `sec-supply-chain-mapper` - **Page:** https://botappstore.com/bots/sec-supply-chain-mapper.html - **Runtime:** https://botappstore.com/runtime/sec_supply_chain_mapper.py - **Bundle:** also in `edgar-intelligence-pack` ($89) ### Verbatim sample output Illustrative sample: percentages, quotes and accession numbers (`000###`) are placeholders, not retrieved from EDGAR; counterparties marked fictional do not exist. ``` snapshot 2026-10-28 09:41:07 UTC | tool=sec_supply_chain_mapper v1.1 | preset=nvidia-physical-ai | sample=illustrative target NVIDIA CORP (CIK 0001045810) 10-K FY2026 (acc 0001045810-26-000###) vs FY2025 (acc 0001045810-25-000###) requests 14/40 bytes 1,204,331/4,194,304 rate<=5/s sec.gov only ## Cited relationship edges (type | counterparty | evidence) [foundry_compute ] Taiwan Semiconductor Manufacturing Co. (TSMC) "We utilize foundries, such as TSMC, to produce our semiconductor wafers." (acc 0001045810-26-000###, 10-K Item 1) [supplier ] Hon Hai Precision Industry Co. (Foxconn) "We purchase substrates, systems and components from contract manufacturers." (acc 0001045810-26-000###, 10-K Item 1A) [customer ] Direct Customer A (anonymous, 16% of revenue) "Sales to one customer, Customer A, represented 16% of total revenue." (acc 0001045810-26-000###, 10-K Note 16) [strategic_partner ] ExampleRobotics Inc. (fictional) "We entered into a strategic collaboration to accelerate humanoid robot development." (acc 0001045810-26-000###, 8-K Item 1.01) [subsidiary ] Mellanox Technologies, Ltd. (Israel) Exhibit 21.1 "Subsidiaries of the Registrant" (acc 0001045810-26-000###) [excluded from customer/supplier counts] [equity_stake ] ExampleRobotics Inc. (fictional) see EQ-01 ## Inline-XBRL concentration (us-gaap:ConcentrationRiskPercentage) [HIGH ] CR-01 Customer A = 16.0% of revenue (>=10% threshold) [MEDIUM ] CR-02 Top 2 disclosed customers combined = 29.0% of revenue [MEDIUM ] CR-03 Sole-source/single-source supplier language present in Item 1A (1 quote) [INFO ] CR-04 Receivables concentration: 2 customers >=10% of accounts receivable concentration_score 61/100 ## YoY 10-K counterparty diff (FY2026 vs FY2025) ADDED Direct Customer C (11.0% of revenue) acc 0001045810-26-000### REMOVED Distributor D (was 10.0% of revenue) acc 0001045810-25-000### PCT_CHANGED Customer A 12.0% -> 16.0% (+4.0 pts) acc 0001045810-26-000### / 0001045810-25-000### ## Schedule 13D/13G equity stakes [INFO ] EQ-01 NVIDIA CORP holds 6.2% of ExampleRobotics Inc. (fictional) per SC 13G filed 2026-08-14 (acc 0001045810-26-000###) audit_sha256 ff66fc2c430f6ab3f49ba3de44dc85c2f2fcbcb96300a3a524171fe32a8c18d9 exit_code 1 SCOPE_NOTE: Primary SEC EDGAR filings only. Relationships are reported only where a filing quote supports them; private contracts, undisclosed counterparties and non-filing sources are out of scope. Concentration scores summarise disclosed percentages and are not a credit, investment or valuation opinion. No buy, sell or hold ratings. ``` ## Wave 3 - mill-cert-matcher ($39 one-time; LIVE NOW) - **SKU:** `mill-cert-matcher` - **Page:** https://botappstore.com/bots/mill-cert-matcher.html - **Runtime:** https://botappstore.com/runtime/mill_cert_matcher.py ### Verbatim sample output EXAMPLE DATA: synthetic certificate generated for the product page, not a real supplier or heat. ``` MILL CERT MATCHER · EXAMPLE DATA (synthetic, not a real certificate) VERDICT: HOLD: human decision needed | 1 line needs a human decision FLAGGED HOLD MCM-SIG-01 Signature / certification statement expected: present actual: not found [no signature or certification statement found] CHECKED (example rows) PASS MCM-MAT-01 Alloy / grade 6061 cert p1 L4, po p1 L4, drawing p1 L1 PASS MCM-CHEM-01 Chemistry Cu (%) 0.27 cert p1 L13 (limit 0.15-0.4, built-in example limit) Screening aid that flags issues for human review. Not a legal, compliance, or material-certification determination. ``` ## Wave 3 - rfq-flowdown-triage ($39 one-time; LIVE NOW) - **SKU:** `rfq-flowdown-triage` - **Page:** https://botappstore.com/bots/rfq-flowdown-triage.html - **Runtime:** https://botappstore.com/runtime/rfq_flowdown_triage.py ### Verbatim sample output EXAMPLE DATA: synthetic RFQ and supplier profile generated for the product page, not a real customer, part or program. ``` RFQ FLOWDOWN TRIAGE · EXAMPLE DATA (synthetic, not a real RFQ) VERDICT: CLARIFY: buyer or human input needed | 3 of 11 clauses need input NEEDS INPUT UNKNOWN RFT-SRC-01 Source inspection profile has no value [rfq p1 L10] UNKNOWN RFT-FLOW-01 DFARS 252.211-7003 clause number not in the catalog [rfq p1 L12] UNKNOWN RFT-REV-01 Drawing revision drawing rev C vs RFQ rev B [rfq p1 L13, drawing p1 L2] CHECKED (example rows) MET RFT-QMS-01 AS9100 rfq p1 L6 MET RFT-FAI-01 AS9102 first-article inspection rfq p1 L7 Screening aid that flags issues for human review. Not a legal, export-control, or compliance determination. ``` ## Wave 3 - fai-results-reconciler ($39 one-time; LIVE NOW) - **SKU:** `fai-results-reconciler` - **Page:** https://botappstore.com/bots/fai-results-reconciler.html - **Runtime:** https://botappstore.com/runtime/fai_results_reconciler.py ### Verbatim sample output EXAMPLE DATA: synthetic balloon list and inspection results generated for the product page, not a real part, customer or program. ``` FAI RESULTS RECONCILER · EXAMPLE DATA (synthetic, not a real part) VERDICT: FAIL: flagged for human review | 1 out of tolerance, 1 missing of 24 characteristics subject: FAI-4155af30d6fa (hash of the part number; the number itself is never sent) FLAGGED FAIL FAI-TOL-01 char 7 measured 40.1193 outside [39.95, 40.05] [balloons.csv row 10, cmm.csv row 8] REVIEW FAI-MISS-01 char 9 no inspection result for this characteristic [balloons.csv row 12] REVIEW FAI-UNM-01 char 99 result has no matching characteristic [cmm.csv row 30] INFO FAI-UNIT-01 * declared units: 22 result(s) in in converted to mm per row with the exact factor 25.4; limits stay in mm REVIEW FAI-REV-01 - revision differs: 'B' in balloons.csv, 'C' in cmm.csv [balloons.csv row 3, cmm.csv row 3] NOT EVALUATED REF FAI-REF-01 char 24 (88.900) reference dimension CHECKED (example rows) PASS char 1 Overall length 120.034 in [119.9, 120.1] PASS char 2 Overall width 59.968 in [59.9, 60.1] PASS char 3 Thickness 25.412 in [25.35, 25.45] Receipt: UNVERIFIED-LOCAL (offline run, not server-signed) Screening aid that flags issues for human review. Not a quality sign-off or AS9102 approval. ```