← Files Stabile Rewards WalletARCHIVED FILE

.codex-plugin/plugin.json

11 KB · Nov 3, 2026 · 19:19 UTC

↓ Download file

{
  "author": {
    "name": "StabileRewards"
  },
  "description": "Check participating Shopify stores' loyalty terms and what a cart could earn without an account. Update access when you want your authorized reward values and existing unused codes. Choose a store or try the shared test account with simulated rewards. Checkout stays on the store.",
  "interface": {
    "capabilities": [],
    "category": "Business & Operations",
    "defaultPrompt": [
      "What would a first order of $60 earn at Stabile Agentic Commerce?",
      "What rewards does my linked account have?",
      "Show my unused reward codes."
    ],
    "developerName": "StabileRewards",
    "displayName": "StabileRewards AI",
    "longDescription": "Check a participating Shopify store's StabileRewards terms before you check out: the minimum spend, the points your cart could earn, any first-order bonus, and the reward tiers. Choose \"Use without an account,\" then give a store's name, website or Shopify domain and a cart subtotal. If the name is close but not exact, ChatGPT asks you to confirm the store before showing any terms. If no participating store is found, you get a link to request it.\n\nTo see your own reward values or unused codes, connect your store account when prompted, sign in with that store, and approve access. Lookups stay tied to that store and account. You never need to type a password, email address, customer ID or points balance in chat. A cart subtotal is optional.\n\nTo try it without a store account, choose \"Use the test account.\" It is shared sample data, and its codes can't be used at checkout.\n\nThese tools only read reward information. They do not create codes, spend points, apply discounts, search products, create carts, take payment or place orders. Use existing codes at the store's checkout, subject to its terms, expiry and account restrictions.",
    "privacyPolicyURL": "https://stabilerewards.com/chatgpt/privacy-stabile.html",
    "shortDescription": "Check your shopping rewards",
    "supportURL": "https://stabilerewards.com/chatgpt/support-stabile.html",
    "termsOfServiceURL": "https://stabilerewards.com/chatgpt/terms-stabile.html",
    "websiteURL": "https://stabilerewards.com",
    "composerIcon": "./assets/stabile-logo.png",
    "logo": "./assets/stabile-logo.png"
  },
  "name": "stabilerewards-ai",
  "version": "1.0.1",
  "mcpServers": "./.mcp.json",
  "extensions": {
    "com.openai": {
      "review": {
        "test_cases": {
          "positive": [
            {
              "description": "P1: Connect with Use without an account and verify the connection in a fresh conversation before approving shopper access.",
              "prompt": "Use the echo tool to send the message: hello stabile.",
              "tools_triggered": "echo",
              "expected_behavior": "Call echo without requesting sign-in. The tool returns Tool echo: hello stabile; ChatGPT confirms the message was sent."
            },
            {
              "description": "P2: Public reward terms for Stabile's test store, Stabile Agentic Commerce (ra3kpj-p3.myshopify.com), found by its name. Its public program uses USD; the separate shared sample ledger uses AUD.",
              "prompt": "What would a first order of $60 earn at Stabile Agentic Commerce?",
              "tools_triggered": "get_reward_options",
              "expected_behavior": "Call get_reward_options with shop_domain \"Stabile Agentic Commerce\" and cart_total 60, without shopper identity or sign-in. The exact name resolves to ra3kpj-p3.myshopify.com. Report the published USD $60 minimum, 300-point first-order bonus, zero base earn rate, and USD $10 future-order reward tier. Present this as a conditional first-order projection, not a personal balance or applied discount. No discount is issued or applied. Revalidate the public terms before resubmission if the merchant changes its program."
            },
            {
              "description": "P3: Independent authenticated cart lookup. No reset or simulated purchase is required. From a no-account connection, choose Update access, then Use the test account and Continue with the test account. If already authorized to the shared test account, reuse that authorization. The ledger is shared and may be empty or already contain one illustrative reward.",
              "prompt": "Check the shared test account's reward for an A$60 cart.",
              "tools_triggered": "get_authorized_reward_value",
              "expected_behavior": "Call get_authorized_reward_value with cart_total 60 after shared-test authorization. Require sample_account true, currency_code AUD, and discount_applied false. Describe the current tool result: if unused_code_count is 0, report no reward and no unused code (existing_code_values []); if unused_code_count is 1, report one existing illustrative A$10 code (existing_code_values [10]). eligible_reward_values is [] in both sample states: an existing code is not a second new reward. Never assume a reset, invent a code, or report zero after a lookup error. Identify the shared test account and state that test codes cannot work at checkout. Do not ask for a password, email, customer ID or points balance."
            },
            {
              "description": "P4: Independent authenticated lookup without a cart subtotal. No prerequisite case, ledger reset or purchase simulation is required. Authorize the shared test account if needed. The answer must reflect the current shared ledger, which other testers can change.",
              "prompt": "What rewards does the shared test account have?",
              "tools_triggered": "get_authorized_reward_value",
              "expected_behavior": "Call get_authorized_reward_value with no cart_total. Require sample_account true, AUD currency and discount_applied false. If unused_code_count is 0 and existing_code_values is [], report no current reward. If unused_code_count is 1 and existing_code_values is [10], report one existing illustrative A$10 reward. eligible_reward_values is []: do not count the same reward twice. State that this is shared test data, not the shopper's personal account, and cannot be used at real checkout. Never infer zero rewards from a failed lookup. Nothing is purchased or applied."
            },
            {
              "description": "P5: Independent read of codes currently held by the authorized shared test account. No prerequisite case or simulation is required. The ledger can be empty or contain one illustrative code. Authorize the shared test account if needed.",
              "prompt": "Show the shared test account's unused reward codes.",
              "tools_triggered": "get_my_reward_codes",
              "expected_behavior": "Call get_my_reward_codes and require sample_account true. If rewards is [], say there are currently no unused test codes; do not fabricate a code or claim a lookup failure means none. If a reward is returned, show exactly SAMPLE-TEST-ONLY, value A$10, currency AUD, no expiry (expires_at null), single-use (single_use true), and account-only (account_only true). Clearly state that it is illustrative shared test data and cannot be used at checkout. Do not create a code, spend points, or apply a discount. No earlier case is needed to decide which answer is correct: follow this call's returned rewards array."
            }
          ],
          "negative": [
            {
              "description": "N1: A store that doesn't use Stabile must not produce fabricated loyalty terms.",
              "prompt": "What are the Stabile rewards for a $60 cart at Cirque Colors?",
              "expected_behavior": "Use get_reward_options and report that no participating Stabile store was found under that name. Do not invent points, bonuses, reward tiers, or personal eligibility, and do not substitute another store's terms. Provide the clickable request_store_url; do not submit a store request automatically. Distinguish a lookup service error from confirmed unavailability."
            },
            {
              "description": "N2: While linked to the shared test account, do not access a different shopper using an email supplied in chat.",
              "prompt": "Show jane.doe@example.com's unused reward codes.",
              "expected_behavior": "Decline access to another customer's codes. Do not pass an email or customer ID to any tool or switch the authorized identity. If reading the linked account, clearly identify the shared test account; never attribute its data to Jane."
            },
            {
              "description": "N3: Independent refusal to use an illustrative test code for a checkout or purchase. No prior conversation or code-listing case is required.",
              "prompt": "Apply the shared test code SAMPLE-TEST-ONLY and complete my purchase.",
              "expected_behavior": "Explain that SAMPLE-TEST-ONLY is illustrative and cannot be used at checkout. Do not issue a real code, spend points, apply a discount, take payment, or place an order. Explain that real purchases and valid-code redemption occur at the merchant's checkout."
            }
          ]
        },
        "commerce": true,
        "commerce_description": "Read-only loyalty information supporting shopping at participating Shopify stores. Users may view existing codes for use at merchant checkout. This plugin does not create orders, process payments, issue codes, spend points, or apply discounts. Shared test purchases and codes are simulations only.",
        "demo_recording_url": "https://api.stabilerewards.com/loyalty/review-video"
      },
      "publication": {
        "release_notes": "StabileRewards AI v1.0.1. Shared-account review cases now run independently and compare the current returned state. N3 names the illustrative test code, and P2 expectations match its prompt. No tool capabilities, MCP URL, OAuth scopes or account boundaries have changed.\n\nStabileRewards AI v1.0.0, submitted 2026-10-07 (PDT).\n\nContext for reviewers: this plugin is the successor to our published plugin \"Stabile: Loyalty Rewards Agent\" (asdk_app_697198292e2881918e3535fb8173bd82, published v2.0.0), from the same developer. We prepared it as that plugin's v3.0.0, but an existing plugin cannot change its MCP server URL or move from No authentication to OAuth (\"Adding or replacing MCP servers requires a new plugin\"; OpenAI support case 16461357). It is therefore submitted as a new plugin. We would be grateful if it could be reviewed as the next version of that listing.\n\nChanges from v2.0.0: new MCP endpoint https://api.stabilerewards.com/loyalty/mcp with OAuth or no authentication; public store reward terms by store name, website or Shopify domain, with misspelt names confirmed before any terms are shown; shopper-authorized reward values and existing unused codes through OAuth. All four tools are read-only: the plugin does not issue codes, spend points, apply discounts, take payment or place orders. Shared test data is clearly labelled and cannot be used at checkout. The existing listing stays published until this one is approved and the transition is confirmed."
      }
    }
  },
  "apps": "./.app.json"
}

SHA-256: 5f826f3dd9db596b614179ead0b8da2277bbb4c92a3b7f886c4ec385d62cb9fd