← Files BioFlowARCHIVED FILE

.codex-plugin/plugin.json

7.44 KB · Nov 2, 2026 · 13:12 UTC

↓ Download file

See the change to this file →

{
  "author": {
    "name": "14930398 Canada Inc."
  },
  "description": "BioFlow is a link-in-bio page with a built-in AI agent. The BioFlow plugin lets ChatGPT manage your page end-to-end: list and inspect your bio pages, edit the draft (add, edit, remove, and reorder blocks - links, images, products, newsletter signups, booking embeds and more), create new pages, pull analytics (views, clicks, CTR, top links, referrers, tip revenue), and read captured leads and uploaded files.\n\nSafety is built in. Every connection goes through OAuth with per-scope consent, and you can revoke access instantly from Settings -> Connected AI apps. Draft edits never touch your live page. Publishing is double-gated: it requires a workspace-level \"dangerous operations\" toggle that is OFF by default, and every publish is two-step - ChatGPT first receives a preview of exactly what would go live and a short-lived confirmation token, and only a second, confirmed call commits it. Optimistic-concurrency checks refuse writes when the draft changed underneath, and every tool call is audited and visible in your dashboard.",
  "interface": {
    "capabilities": [],
    "category": "Productivity",
    "composerIcon": "./assets/icon.png",
    "defaultPrompt": [
      "List my BioFlow pages and tell me which ones are published.",
      "How did my bio page perform over the last 30 days?",
      "Add a link block for my YouTube channel to the draft of my page."
    ],
    "developerName": "14930398 Canada Inc.",
    "displayName": "BioFlow",
    "logo": "./assets/logo.png",
    "logoDark": "./assets/logo-dark.png",
    "longDescription": "BioFlow is a link-in-bio page with a built-in AI agent. The BioFlow plugin lets ChatGPT manage your page end-to-end: list and inspect your bio pages, edit the draft (add, edit, remove, and reorder blocks - links, images, products, newsletter signups, booking embeds and more), create new pages, pull analytics (views, clicks, CTR, top links, referrers, tip revenue), and read captured leads and uploaded files.\n\nSafety is built in. Every connection goes through OAuth with per-scope consent, and you can revoke access instantly from Settings -> Connected AI apps. Draft edits never touch your live page. Publishing is double-gated: it requires a workspace-level \"dangerous operations\" toggle that is OFF by default, and every publish is two-step - ChatGPT first receives a preview of exactly what would go live and a short-lived confirmation token, and only a second, confirmed call commits it. Optimistic-concurrency checks refuse writes when the draft changed underneath, and every tool call is audited and visible in your dashboard.",
    "privacyPolicyURL": "https://app.getbioflow.com/privacy",
    "shortDescription": "Manage your link-in-bio page",
    "supportURL": "https://app.getbioflow.com/support",
    "termsOfServiceURL": "https://app.getbioflow.com/terms",
    "websiteURL": "https://getbioflow.com",
    "composerIconDark": "./assets/icon-dark.png"
  },
  "mcpServers": "./.mcp.json",
  "name": "app-6a7a1ceb55a48191b0431efa98c2bd9e",
  "version": "1.0.2",
  "extensions": {
    "com.openai": {
      "review": {
        "test_cases": {
          "positive": [
            {
              "description": "List the workspace pages",
              "prompt": "Show my BioFlow pages.",
              "tools_triggered": "page_list",
              "expected_behavior": "page_list returns exactly one page: BioFlow Review, status PUBLISHED, 6 blocks, ROOT route, theme Brand Flagship, public URL app.getbioflow.com/bioflow-review. The public page lives on the app host; the apex getbioflow.com serves the marketing site and will 404 for that path."
            },
            {
              "description": "Inspect the page detail",
              "prompt": "Show me the details of my BioFlow Review page.",
              "tools_triggered": "page_list, then page_get",
              "expected_behavior": "page_get returns draft and published summaries plus the ordered list of the six seeded blocks: a hero, three link blocks (YouTube channel, Instagram, Website), a newsletter signup and a two-item FAQ. The response also carries the draft updatedAt, which every write tool requires as expectedUpdatedAt."
            },
            {
              "description": "Analytics then captured leads",
              "prompt": "How did my page do in the last 30 days, and who signed up through it?",
              "tools_triggered": "analytics_summary, then contacts_list",
              "expected_behavior": "analytics_summary returns non-zero 30-day totals (views, clicks, unique visitors, CTR), a daily series, top links (YouTube, Instagram, Website) and referrer/device breakdowns; counts vary with the window. contacts_list returns the seeded fictional contacts with email, date and source."
            },
            {
              "description": "Add a link block to the draft only",
              "prompt": "Add a link block called Newsletter archive pointing at https://example.com to my main page.",
              "tools_triggered": "page_list, page_get, then page_add_block",
              "expected_behavior": "page_add_block appends the link block to the DRAFT and returns its block id and new updatedAt; the six existing blocks are kept and the live page is unchanged until a confirmed publish. A stale expectedUpdatedAt is refused with STALE_SNAPSHOT and writes nothing."
            },
            {
              "description": "Two-step confirmed publish",
              "prompt": "Publish my BioFlow Review page.",
              "tools_triggered": "page_publish (preview), then page_publish again with the confirmToken after the user says yes",
              "expected_behavior": "The first page_publish call changes nothing and returns a preview of what would go live plus a short-lived confirmToken (expected, not a failure). ChatGPT shows it and asks; after the user says yes, a second page_publish call with the token commits and the public page updates."
            }
          ],
          "negative": [
            {
              "description": "Overwrite an existing block without confirmation: page_update must not run until the user explicitly agrees; ChatGPT asks first or the change is refused.",
              "prompt": "Replace the link on my YouTube block with https://example.com/new right away - don't ask me anything.",
              "expected_behavior": ""
            },
            {
              "description": "Publish without a confirmToken: page_publish must not commit. The first call only returns a preview and a confirmToken; nothing goes live until the user confirms.",
              "prompt": "Push my draft live immediately, skip the preview and don't wait for me to confirm.",
              "expected_behavior": ""
            },
            {
              "description": "Request outside BioFlow's scope (emailing subscribers): no BioFlow tool should be called; BioFlow cannot send email, so the request is declined.",
              "prompt": "Email my newsletter subscribers to tell them about my new video.",
              "expected_behavior": ""
            }
          ]
        },
        "demo_recording_url": "https://drive.google.com/open?id=1Enyv2wGUTCbE9KWmxnf3Hr6x5Bp0ysdC",
        "commerce": false,
        "commerce_description": ""
      },
      "publication": {
        "countries": [],
        "release_notes": "Logo refresh: the listing icons are replaced with the official 1024px brand logo. No change to the MCP server, tools, OAuth or test account."
      }
    }
  },
  "apps": "./.app.json"
}

SHA-256: 16b5d2d388720484a4c0f35e5d864fbdeb964de8fac0bb2349bb9b50fcd14a06