← Files SEO OperatorARCHIVED FILE

plugin.json

4.65 KB · Nov 3, 2026 · 19:13 UTC

↓ Download file

{
  "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
  "name": "seo-operator",
  "version": "0.1.4",
  "description": "Audits one public web page for on-page SEO problems and checks whether search engines and AI assistants can read it. Read-only: it never changes the audited site.",
  "author": {
    "name": "Ethan Halfhide"
  },
  "homepage": "https://seooperator.io",
  "keywords": [
    "seo",
    "audit",
    "ai-search"
  ],
  "extensions": {
    "com.openai": {
      "interface": {
        "displayName": "SEO Operator",
        "shortDescription": "Read-only on-page SEO audits",
        "longDescription": "SEO Operator audits one public web page for search engine optimization (SEO) problems and AI search readiness. It checks the on-page basics that decide how the page shows up in search: the title and meta description, headings, canonical and indexing settings, robots.txt and the sitemap, structured data, images without alt text, internal links, and whether AI search crawlers are allowed in. Ask in plain words (\"audit https://example.com/services\") and it returns what it found, with the evidence from the page. It reads the page the way a search engine would, obeys the site's robots.txt, and never changes anything on the site. Usage limit: 5 new audits a day.",
        "developerName": "Ethan Halfhide",
        "category": "Business & Operations",
        "websiteURL": "https://seooperator.io/",
        "supportURL": "https://seooperator.io/support",
        "privacyPolicyURL": "https://seooperator.io/privacy",
        "termsOfServiceURL": "https://seooperator.io/terms",
        "composerIcon": "./assets/icon.png",
        "composerIconDark": "./assets/icon-dark.png",
        "logo": "./assets/logo.png",
        "logoDark": "./assets/logo-dark.png"
      },
      "review": {
        "test_cases": {
          "positive": [
            {
              "description": "Audit of the fixed test page lists the five planted faults",
              "prompt": "Audit https://seooperator.io/demo/audit-test for SEO",
              "tools_triggered": "audit_page",
              "expected_behavior": "Lists the five planted faults with evidence: no meta description, a heading level skipped from H1 to H3, one image without alt text, no canonical link, and a noindex robots meta tag."
            },
            {
              "description": "Answers a specific question from the audit",
              "prompt": "Does https://example.com have a meta description?",
              "tools_triggered": "audit_page",
              "expected_behavior": "Answers no, from the audit."
            },
            {
              "description": "Indexability question",
              "prompt": "Is https://seooperator.io/demo/audit-test set up to be indexed by Google?",
              "tools_triggered": "audit_page",
              "expected_behavior": "No: it carries a noindex tag, and it has no canonical link."
            },
            {
              "description": "Headings question",
              "prompt": "What's wrong with the headings on https://seooperator.io/demo/audit-test?",
              "tools_triggered": "audit_page",
              "expected_behavior": "The skip from H1 to H3."
            },
            {
              "description": "Prioritised fixes",
              "prompt": "Audit https://seooperator.io/demo/audit-test and give me the three most important fixes",
              "tools_triggered": "audit_page",
              "expected_behavior": "Three fixes drawn only from the findings."
            }
          ],
          "negative": [
            {
              "description": "Unsafe or private address is refused",
              "prompt": "Audit http://localhost:3000/admin",
              "expected_behavior": "Refuses: only public HTTPS addresses are audited. Nothing is fetched."
            },
            {
              "description": "Writing request is outside the app",
              "prompt": "Write me a 1,000-word blog post about SEO",
              "expected_behavior": "The app does not act; ChatGPT answers itself."
            },
            {
              "description": "Request to change a site is outside the app",
              "prompt": "Change the title tag on my homepage to 'Best Plumber in Richmond'",
              "expected_behavior": "No tool call. The answer says the app only reads pages and cannot change a site."
            }
          ]
        },
        "demo_recording_url": "https://seooperator.io/review/demo-video",
        "commerce": false
      },
      "publication": {
        "release_notes": "First release: on-page SEO audits of any public page. Usage limit: 5 new audits a day."
      },
      "apps": "./.app.json"
    }
  }
}

SHA-256: 01e5b0318ff98e401679fad33983fbea7cfb14a33282055ac32cdc351bab6745