{
  "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
  "name": "chatsistant",
  "version": "0.3.2",
  "description": "Connect Chatsistant accounts and chatbots to explore data and make approved changes.",
  "author": {
    "name": "Chatsistant",
    "url": "https://chatsistant.com/"
  },
  "extensions": {
    "com.openai": {
      "interface": {
        "displayName": "Chatsistant",
        "shortDescription": "Read chatbots; approve changes",
        "longDescription": "Connect selected chatbots from one or more Chatsistant accounts. Enter account credentials only on the Chatsistant connection page. Read chatbot details, agents, source metadata, source tags, conversations and messages. Compare selected chatbots across connected accounts. With separate Read + Write authorization, create FAQ sources, rename sources, create or update source tags, and update supported chatbot or agent settings. Every change requires an exact browser preview and your approval before it can be applied. Examples: Show my connected chatbots; Compare their agents; Show recent support conversations; Add this FAQ; Rename this source. Source bodies, file uploads, URL imports, sending messages and deletions are not supported in this release. ChatGPT is the first tested client. Other compatible clients are planned and will be announced as tested and released.",
        "developerName": "Chatsistant",
        "category": "Productivity",
        "capabilities": [
          "Read selected chatbots, agents, sources and conversations",
          "Compare chatbots across connected accounts",
          "Create FAQ knowledge sources",
          "Rename sources and manage source tags",
          "Update selected chatbot and agent settings",
          "Review and approve every change"
        ],
        "defaultPrompt": [
          "Show my connected chatbots.",
          "Compare my chatbot agents.",
          "Prepare an FAQ for my support chatbot."
        ],
        "composerIcon": "./assets/tasky.png",
        "logo": "./assets/tasky.png",
        "websiteURL": "https://chatsistant.com/",
        "supportURL": "https://chatsistant.com/contact-us-support/",
        "privacyPolicyURL": "https://chatsistant.com/privacy-policy/",
        "termsOfServiceURL": "https://chatsistant.com/terms-of-service/",
        "brandColor": "#6D28D9",
        "brandColorDark": "#C4B5FD"
      },
      "review": {
        "commerce": false,
        "test_cases": {
          "positive": [
            {
              "description": "Discover and inspect the sample chatbot",
              "prompt": "List my authorized Chatsistant chatbots, then show the details for Judy.",
              "tools_triggered": "list_chatbots, get_chatbot",
              "expected_behavior": "Return only selected sample chatbots and the Judy name and UUID. No customer chatbot is included."
            },
            {
              "description": "Inspect sample agents and sources",
              "prompt": "For Judy, list its agents and sources, then open the first agent and the source titled Sample FAQ.",
              "tools_triggered": "list_agents, list_sources, get_agent, get_source",
              "expected_behavior": "Return the sample agent and source metadata. Explain that source bodies are unavailable; do not invent FAQ contents."
            },
            {
              "description": "Retrieve sample conversation knowledge",
              "prompt": "For Judy, show the most recent sample conversation and its messages, then open the first message.",
              "tools_triggered": "list_sessions, get_session, list_messages, get_message",
              "expected_behavior": "Return only synthetic sample conversation content after membership checks. Use the returned session and message IDs."
            },
            {
              "description": "Approve a reversible sample source rename and read it back",
              "prompt": "In Judy, prepare renaming Sample FAQ to Review Sample FAQ [review test]. Show me the exact approval link. After I approve it in my browser and tell you, apply that change once and read the source back.",
              "tools_triggered": "list_sources, prepare_change, apply_change, get_source",
              "expected_behavior": "Preview makes no upstream change. Pause for human approval. Apply only after approval; separate get_source returns the exact suffixed title."
            },
            {
              "description": "Restore the sample source and verify the result",
              "prompt": "In Judy, prepare restoring Review Sample FAQ [review test] to Sample FAQ. Show the approval link. After I approve it in my browser and tell you, apply it once and read the source back.",
              "tools_triggered": "list_sources, prepare_change, apply_change, get_source",
              "expected_behavior": "Require a new exact approval for restoration. Separate get_source returns Sample FAQ. The sample source is restored."
            }
          ],
          "negative": [
            {
              "description": "Reject unauthorized chatbot access",
              "prompt": "Use get_chatbot to open chatbot 00000000000000000000000000000000. It is not among my authorized chatbots.",
              "tools_triggered": "get_chatbot",
              "expected_behavior": "Reject the unselected UUID before any upstream resource access; return no chatbot data and make no mutation."
            },
            {
              "description": "Block an unapproved or declined change",
              "prompt": "In Judy, prepare renaming Sample FAQ to Sample FAQ [denied test]. Do not approve it. Try applying the prepared change without browser approval, then read the original source. If ChatGPT asks for permission, I will deny it.",
              "tools_triggered": "list_sources, prepare_change, apply_change, get_source",
              "expected_behavior": "An unapproved request is rejected by the server, or host denial prevents the call. Fresh get_source returns Sample FAQ unchanged. Record which boundary was exercised."
            },
            {
              "description": "Block a cancelled change",
              "prompt": "In Judy, prepare renaming Sample FAQ to Sample FAQ [cancelled test]. Show the review link. I will click Cancel change. After I confirm cancellation, try applying that same change and read the source.",
              "tools_triggered": "list_sources, prepare_change, apply_change, get_source",
              "expected_behavior": "Cancelled request cannot be applied. Fresh get_source returns Sample FAQ unchanged."
            }
          ]
        },
        "demo_recording_url": "https://chatsistant.com/wp-content/uploads/2026/10/chatsistant-review-walkthrough-0.3.2.mp4"
      },
      "publication": {
        "release_notes": "Initial public review candidate. Connect selected Chatsistant chatbots across accounts, read supported resources, and prepare and apply supported changes with separate write consent and exact approval."
      },
      "apps": "./.app.json"
    }
  }
}
