Skill: grahac/botsee (version 0.2.5)

--- name: botsee description: Monitor your brand's AI visibility via BotSee API version: 0.2.5 --- # BotSee Skill Monitor your brand's AI visibility (AI SEO/GEO) across ChatGPT, Claude, Perplexity, and Gemini. Provided by botsee.io, the AI Visibility tool for Claude Code and agents. Commands: **Workflow:** - /botsee - Quick status and help - /botsee signup [--email EMAIL] [--name NAME] [--company COMPANY] [--api-key KEY] - Signup with credit card - /botsee signup-usdc [--email EMAIL] [--name NAME] [--company COMPANY] [--no-email] - Signup with USDC on Base - /botsee signup-pay-usdc --amount-cents N [--token TOKEN] [--payment PROOF] - Pay for USDC signup via x402 - /botsee signup-status [--token TOKEN] - Check signup completion and save API key - /botsee topup-usdc --amount-cents N [--payment PROOF] - Add credits with USDC on Base via x402 - /botsee create-site <domain> [--types N] - Save custom config - /botsee config-show - Display saved config - /botsee analyze - Run competitive analysis - /botsee content - Generate blog post from analysis **Sites:** - /botsee list-sites - List all sites - /botsee get-site [uuid] - View site details - /botsee create-site <domain> - Create a new site - /botsee archive-site [uuid] - Archive a site **Customer Types:** - /botsee list-types - List customer types - /botsee get-type <uuid> - View type details - /botsee create-type <name> [desc] - Create customer type - /botsee generate-types [count] - Generate customer types - /botsee update-type <uuid> [name] [desc] - Update customer type - /botsee archive-type <uuid> - Archive customer type **Personas:** - /botsee list-personas [type] - List personas (all or by type) - /botsee get-persona <uuid> - View persona details - /botsee create-persona <type> <name> [desc] - Create persona - /botsee generate-personas <type> [count] - Generate personas for type - /botsee update-persona <uuid> [name] [desc] - Update persona - /botsee archive-persona <uuid> - Archive persona **Questions:** - /botsee list-questions [persona] - List questions (all or by persona) - /botsee get-question <uuid> - View question details - /botsee create-question <persona> <text> - Create question - /botsee generate-questions <persona> [count] - Generate questions for persona - /botsee update-question <uuid> <text> - Update question text - /botsee delete-question <uuid> - Delete question **Results:** - /botsee results-competitors <uuid> - View competitor results - /botsee results-keywords <uuid> - View keyword results - /botsee results-sources <uuid> - View source results - /botsee results-responses <uuid> - View all AI responses - /botsee results-keyword-opportunities <uuid> [--threshold 0.0-1.0] [--rank-threshold N] - Questions where brand is missing or ranks poorly - /botsee results-source-opportunities <uuid> - Sources AI cited when brand was NOT mentioned ## Implementation When user invokes a BotSee command, run the corresponding Python script. All commands use a single bundled script that handles API calls internally. ### /botsee (status) ```bash python3 ~/.claude/skills/botsee/scripts/botsee.py status ``` ### /botsee signup [--email EMAIL] [--name NAME] [--company COMPANY] [--api-key KEY] **New user signup flow (credit card):** **Step 1: Get signup URL** ```bash python3 ~/.claude/skills/botsee/scripts/botsee.py signup ``` The command prints a line like: ``` Complete signup: https://app.botsee.io/setup?token=... ``` Extract that URL and tell the user: "To complete your BotSee signup, visit this URL: **[URL from above]** After completing signup on that page, come back here and run /botsee signup-status." **Step 2: Save your API key** After completing signup on that page, run: /botsee signup-status The script retrieves your API key from the server automatically using your signup token. If prompted for a token, use the token from the URL on the setup page. ### /botsee signup-usdc [--email EMAIL] [--name NAME] [--company COMPANY] [--no-email] **USDC signup flow (x402 on Base):** **Step 1 — Ask the user before calling the API** When `signup-usdc` is invoked without already knowing the user's preference, ask: > "Do you want to associate an email with this account? > - **Yes (email)** — You'll get a setup link to verify your email and access the dashboard later > - **No (API only)** — Skip email entirely and go straight to payment" **Step 2a — Email path** Call: ```bash python3 ~/.claude/skills/botsee/scripts/botsee.py signup-usdc ``` (no `--no-email` flag) The command prints a line like: ``` Setup URL: https://app.botsee.io/setup?token=... ``` Extract that URL and tell the user: "Visit this URL to enter and verify your email and read the setup instructions: **[URL from above]** Once you've done that, come back here and we'll complete the USDC payment." Do NOT call `signup-pay-usdc` yet. Wait for the user to confirm they've completed the setup URL step. **Step 2b — No-email path** Call: ```bash python3 ~/.claude/skills/botsee/scripts/botsee.py signup-usdc --no-email ``` No setup URL will be returned. Immediately proceed to payment. **Step 3 — Payment (both paths)** After the email-path user confirms they visited the setup URL (or immediately for no-email path): ```bash python3 ~/.claude/skills/botsee/scripts/botsee.py signup-pay-usdc --amount-cents 250 python3 ~/.claude/skills/botsee/scripts/botsee.py signup-status ``` **x402 flow details:** 1. `signup-usdc` creates a USDC signup token via `POST /api/v1/signup/usdc` 2. `signup-pay-usdc --amount-cents N` calls `POST /api/v1/signup/:token/pay-usdc` without a payment header → server returns 402 with payment requirements (network, amount, `payTo` address) 3. Use a wallet (Pinch, Coinbase CDP Agentic Wallet) to send USDC to the returned address 4. Retry with the payment proof: `signup-pay-usdc --amount-cents N --payment <proof>` 5. `signup-status` polls until complete and saves the API key ### /botsee signup-pay-usdc --amount-cents N [--token TOKEN] [--payment PROOF] ```bash # Step 1: Get 402 challenge (no --payment → returns payment requirements) python3 ~/.claude/skills/botsee/scripts/botsee.py signup-pay-usdc --amount-cents 250 # Step 2: Retry with proof after wallet pays python3 ~/.claude/skills/botsee/scripts/botsee.py signup-pay-usdc --amount-cents 250 --payment <proof> ``` Omit `--payment` to get a 402 challenge with network, amount, and `payTo` address. Include `--payment <base64-proof>` on the final retry after your wallet has made the payment. ### /botsee signup-status [--token TOKEN] ```bash python3 ~/.claude/skills/botsee/scripts/botsee.py signup-status ``` Saves API key to `~/.botsee/config.json` automatically once signup is completed. ### /botsee topup-usdc --amount-cents N [--payment PROOF] ```bash # Step 1: Get 402 challenge (no --payment → returns payment requirements) python3 ~/.claude/skills/botsee/scripts/botsee.py topup-usdc --amount-cents 5000 # Step 2: Retry with proof after wallet pays python3 ~/.claude/skills/botsee/scripts/botsee.py topup-usdc --amount-cents 5000 --payment <proof> ``` Omit `--payment` to get a 402 challenge with network, amount, and `payTo` address. Include `--payment <base64-proof>` on the final retry after your wallet has made the payment. ### /botsee create-site <domain> [--types T] [--personas P] [--questions Q] **Requires:** API key from `/botsee signup` ```bash python3 ~/.claude/skills/botsee/scripts/botsee.py create-site <domain> ``` **Optional parameters:** - `--types` (default: 2, range: 1-3) - `--personas` (default: 2, range: 1-3) - `--questions` (default: 5, range: 3-10) **What happens:** 1. Creates a site for the domain 2. Generates customer types, personas, and questions 3. Saves configuration to workspace and user config **Customize generation counts:** ```bash python3 ~/.claude/skills/botsee/scripts/botsee.py create-site <domain> --types 3 --personas 2 --questions 10 ``` ### /botsee config-show ```bash python3 ~/.claude/skills/botsee/scripts/botsee.py config-show ``` ### /botsee analyze ```bash python3 ~/.claude/skills/botsee/scripts/botsee.py analyze ``` Starts analysis, polls until complete, then displays competitors, keywords, and sources. ### /botsee content ```bash python3 ~/.claude/skills/botsee/scripts/botsee.py content ``` Generates blog post from latest analysis. Auto-saves to `botsee-YYYYMMDD-HHMMSS.md`. --- ## Sites Commands ### /botsee list-sites ```bash python3 ~/.claude/skills/botsee/scripts/botsee.py list-sites ``` ### /botsee get-site [uuid] ```bash python3 ~/.claude/skills/botsee/scripts/botsee.py get-site [uuid] ``` If uuid is omitted, uses the site from `~/.botsee/config.json`. ### /botsee create-site <domain> ```bash python3 ~/.claude/skills/botsee/scripts/botsee.py create-site <domain> ``` ### /botsee archive-site [uuid] ```bash python3 ~/.claude/skills/botsee/scripts/botsee.py archive-site [uuid] ``` --- ## Customer Types Commands ### /botsee list-types ```bash python3 ~/.claude/skills/botsee/scripts/botsee.py list-types ``` ### /botsee get-type <uuid> ```bash python3 ~/.claude/skills/botsee/scripts/botsee.py get-type <uuid> ``` ### /botsee create-type <name> [description] ```bash python3 ~/.claude/skills/botsee/scripts/botsee.py create-type "Enterprise Buyers" "Large companies seeking solutions" ``` ### /botsee generate-types [count] ```bash python3 ~/.claude/skills/botsee/scripts/botsee.py generate-types 3 ``` Defaults to 2 if count is omitted. ### /botsee update-type <uuid> [name] [description] ```bash python3 ~/.claude/skills/botsee/scripts/botsee.py update-type <uuid> --name "New Name" --description "New description" ``` ### /botsee archive-type <uuid> ```bash python3 ~/.claude/skills/botsee/scripts/botsee.py archive-type <uuid> ``` --- ## Personas Commands ### /botsee list-personas [type_uuid] ```bash python3 ~/.claude/skills/botsee/scripts/botsee.py list-personas python3 ~/.claude/skills/botsee/scripts/botsee.py list-personas <type_uuid> ``` ### /botsee get-persona <uuid> ```bash python3 ~/.claude/skills/botsee/scripts/botsee.py get-persona <uuid> ``` ### /botsee create-persona <type_uuid> <name> [description] ```bash python3 ~/.claude/skills/botsee/scripts/botsee.py create-persona <type_uuid> "Sarah Chen" "VP of Marketing at mid-sized SaaS company" ``` ### /botsee generate-personas <type_uuid> [count] ```bash python3 ~/.claude/skills/botsee/scripts/botsee.py generate-personas <type_uuid> 3 ``` Defaults to 2 if count is omitted. ### /botsee update-persona <uuid> [name] [description] ```bash python3 ~/.claude/skills/botsee/scripts/botsee.py update-persona <uuid> --name "New Name" --description "New description" ``` ### /botsee archive-persona <uuid> ```bash python3 ~/.claude/skills/botsee/scripts/botsee.py archive-persona <uuid> ``` --- ## Questions Commands ### /botsee list-questions [persona_uuid] ```bash python3 ~/.claude/skills/botsee/scripts/botsee.py list-questions python3 ~/.claude/skills/botsee/scripts/botsee.py list-questions <persona_uuid> ``` ### /botsee get-question <uuid> ```bash python3 ~/.claude/skills/botsee/scripts/botsee.py get-question <uuid> ``` ### /botsee create-question <persona_uuid> <question_text> ```bash python3 ~/.claude/skills/botsee/scripts/botsee.py create-question <persona_uuid> "What are the best email marketing tools?" ``` ### /botsee generate-questions <persona_uuid> [count] ```bash python3 ~/.claude/skills/botsee/scripts/botsee.py generate-questions <persona_uuid> 5 ``` Defaults to 5 if count is omitted. ### /botsee update-question <uuid> <question_text> ```bash python3 ~/.claude/skills/botsee/scripts/botsee.py update-question <uuid> "What are the best affordable email marketing tools?" ``` ### /botsee delete-question <uuid> ```bash python3 ~/.claude/skills/botsee/scripts/botsee.py delete-question <uuid> ``` --- ## Results Commands ### /botsee results-competitors <analysis_uuid> ```bash python3 ~/.claude/skills/botsee/scripts/botsee.py results-competitors <analysis_uuid> ``` ### /botsee results-keywords <analysis_uuid> ```bash python3 ~/.claude/skills/botsee/scripts/botsee.py results-keywords <analysis_uuid> ``` ### /botsee results-sources <analysis_uuid> ```bash python3 ~/.claude/skills/botsee/scripts/botsee.py results-sources <analysis_uuid> ``` ### /botsee results-responses <analysis_uuid> ```bash python3 ~/.claude/skills/botsee/scripts/botsee.py results-responses <analysis_uuid> ``` ### /botsee results-keyword-opportunities <analysis_uuid> [--threshold N] [--rank-threshold N] ```bash python3 ~/.claude/skills/botsee/scripts/botsee.py results-keyword-opportunities <analysis_uuid> python3 ~/.claude/skills/botsee/scripts/botsee.py results-keyword-opportunities <analysis_uuid> --threshold 0.8 python3 ~/.claude/skills/botsee/scripts/botsee.py results-keyword-opportunities <analysis_uuid> --rank-threshold 3 ``` Returns questions where the brand's mention rate is below the threshold, with per-provider breakdown showing which AI models missed the brand, what rank it appeared at (if at all), and the search keywords each provider used. - `--threshold` (0.0–1.0, default 1.0): questions where `mention_rate < threshold` qualify. At 1.0, any question not mentioned in every response is included. - `--rank-threshold` (integer): additionally flags questions where brand appeared but at rank worse than this value. ### /botsee results-source-opportunities <analysis_uuid> ```bash python3 ~/.claude/skills/botsee/scripts/botsee.py results-source-opportunities <analysis_uuid> ``` Returns sources that AI cited in responses where the brand was NOT mentioned — ideal targets for content and link-building campaigns. **Getting the Analysis UUID:** The analysis UUID is displayed when you run `/botsee analyze`: ``` 📊 Analysis started: abc-def-123 ``` Copy the UUID and use it with the results commands to view detailed analysis data. --- ## Agent Usage Notes This skill is designed for **non-interactive agent usage**. All commands accept arguments via command-line flags - no prompts or user input required. ### Key Considerations for Agents **1. Signup Flow Requires Human Intervention** For **new users** without an API key, the signup command creates a signup token and displays a URL: ```bash /botsee signup # Outputs signup URL for browser completion ``` **Agents should:** - Use the `--api-key` flag if API key is available - Inform user if signup is needed (cannot be completed by agent) - Consider API key as a prerequisite for autonomous operation **2. Async Operations with Polling** Two commands can involve waiting/polling: - `/botsee signup-status` (checks signup completion) - `/botsee analyze`: up to 10 minute timeout Commands will block until complete or timeout. No intermediate progress updates. **3. Analysis Discovery** To view detailed results after analysis: 1. Run `/botsee analyze` and capture the analysis UUID from output 2. Use UUID with `/botsee results-*` commands **Recommended pattern:** ```bash # Run analysis output=$(/botsee analyze) # Extract UUID (line containing "Analysis started:") uuid=$(echo "$output" | grep "Analysis started:" | awk '{print $NF}') # View results /botsee results-competitors "$uuid" ``` **4. Configuration Files** Two config files exist: - **User config:** `~/.botsee/config.json` (API key + site UUID) - **Workspace config:** `.context/botsee-config.json` (generation defaults, optional) Agents can discover state via: - `/botsee` - Shows account status - `/botsee config-show` - Shows workspace config **5. Credit Costs** All operations that consume credits display remaining balance. Agents should: - Check balance before expensive operations (`/botsee` command) - Handle "Insufficient credits" errors gracefully - Monitor credit usage (shown after each operation) **Costs:** - Setup (~75 credits with defaults 2/2/5) - Analysis (~660 credits per run) - Content generation (15 credits) **6. Error Handling** All errors exit with code 1 and print to stderr. Error messages include: - HTTP status codes (when relevant) - Actionable next steps - No API key leakage (sanitized) **7. Idempotency** - **Safe to retry:** Status, list, get commands (read-only) - **Not idempotent:** Create commands (will create duplicates) - **Updates:** Require specific UUID, safe to retry **8. Output Format** - **CRUD operations:** JSON output for parsing - **Workflow commands:** Human-readable formatted text - **Status/balance:** Always displayed at command completion ### Example Agent Workflow ```bash # 1. Check status (discover state) /botsee # 2. Save API key if provided by user /botsee signup --api-key bts_live_abc123 # 3. Create a site /botsee create-site https://example.com # 4. Run analysis (captures UUID) analysis_output=$(/botsee analyze) uuid=$(echo "$analysis_output" | grep -oP '(?<=Analysis started: )\S+') # 5. View results /botsee results-competitors "$uuid" # 6. Generate content /botsee content # 7. Check final balance /botsee ```

path: CHANGELOG.md
content: # Changelog

All notable changes to the BotSee Claude Code Skill are documented here.

## [0.2.5] - 2026-02-24

### Security

- Removed passive API key detection from SKILL.md to eliminate prompt injection vector;
  keys are now retrieved programmatically via /botsee signup-status
- Removed self-update mechanism (cmd_update, download_github_release, install_update)
  to eliminate supply chain risk from unverified GitHub downloads; updates are handled
  via the plugin marketplace

## [0.2.4] - 2026-02-22

### Added

- `results-keyword-opportunities` command: surfaces questions where your brand is missing or ranks poorly in AI responses, with per-provider breakdown, mention rates, rank data, and the exact search keywords each AI used
- `results-source-opportunities` command: returns sources AI cited in responses where your brand was NOT mentioned — ideal targets for content and link-building campaigns
- `BOTSEE_BASE_URL` environment variable override for `botsee.py`, enabling local development and staging environment testing without code changes

### Changed

- Both new opportunity commands accept an `analysis_uuid` argument consistent with other `results-*` commands
- `results-keyword-opportunities` supports `--threshold` (0.0–1.0) and `--rank-threshold` (integer) flags for tunable filtering

## [0.2.3] - 2026-02-20

### Added

- Plugin packaging structure for Claude plugin directory submission

### Fixed

- Clarified setup URL extraction instructions in signup flows to reduce user confusion during onboarding (#5)

## [0.2.2] - 2026-02-19

### Added

- Setup URL caching: signup URL is stored locally so users do not need to re-run the signup command after returning (#3)
- Improved signup error messages with clearer next-step guidance (#3)

### Changed

- Updated README with correct version numbers, pricing information, and homepage content (#4)

## [0.2.1] - 2026-02-18

### Changed

- Simplified USDC payment flow: USDC signup is now a standalone path independent of the credit card flow (#2)
- Streamlined x402 payment steps — fewer round trips required to complete USDC-based signups

## [0.2.0] - 2026-02-17

### Changed

- Full redesign for non-interactive Claude Code agent usage (#1)
- All commands now accept arguments via flags — no interactive prompts or user input required
- Updated CLI to match full API parity across sites, personas, questions, and results endpoints

## [0.1.0] - 2026-02-11

### Added

- Initial release of the BotSee Claude Code Skill
- Commands for signup (credit card and USDC/x402), site creation, analysis, and content generation
- Support for customer types, personas, and question management
- Results commands: competitors, keywords, sources, and raw AI responses


path: .claude-plugin/plugin.json
content: {
  "name": "botsee",
  "description": "Monitor your brand's AI visibility (AI SEO/GEO) across ChatGPT, Claude, Perplexity, and Gemini via the BotSee API.",
  "version": "0.2.5",
  "author": "BotSee / RivalSee",
  "homepage": "https://botsee.io",
  "skills": [
    "skills/botsee"
  ]
}


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (CRITICAL)