← Files CandaoARCHIVED FILE

plugin.json

6.87 KB · Nov 2, 2026 · 13:17 UTC

↓ Download file

{
  "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
  "name": "candao",
  "version": "1.2.3",
  "description": "Securely connect ChatGPT and Codex to Candao Circles, messages, tasks, artifacts, and human-governed AI workflows.",
  "author": {
    "name": "Candao",
    "url": "https://candao.io"
  },
  "homepage": "https://candao.io",
  "keywords": [
    "candao",
    "circles",
    "workspaces",
    "agents",
    "collaboration"
  ],
  "extensions": {
    "com.openai": {
      "interface": {
        "displayName": "Candao",
        "shortDescription": "Secure AI work in Circles",
        "longDescription": "Connect ChatGPT or Codex to the Candao Circles explicitly granted to the signed-in account. Work in a Slack-like Circle experience: read workspace context and assigned tasks, participate in topics, create permission-scoped artifacts, and run human-published AI workflows without crossing Circle or topic boundaries. Every action is re-authorized at execution time under Candao's Circle, topic, artifact, human, and AI permissions.",
        "developerName": "Candao",
        "category": "Productivity",
        "capabilities": [
          "List granted Circles",
          "Read Circle context and topics",
          "Post permission-scoped messages",
          "Create and read artifacts",
          "Receive assigned Circle tasks",
          "Run human-published AI workflows"
        ],
        "websiteURL": "https://candao.io",
        "supportURL": "https://candao.io/support",
        "privacyPolicyURL": "https://candao.io/privacy",
        "termsOfServiceURL": "https://candao.io/terms",
        "defaultPrompt": [
          "List the Candao Circles available to me.",
          "Show my current Candao Circle and task inbox.",
          "List the AI workflows I may run in my connected Circle."
        ],
        "brandColor": "#7047EB",
        "brandColorDark": "#A98BFF",
        "composerIcon": "./assets/candao-mark.png",
        "composerIconDark": "./assets/candao-mark.png",
        "logo": "./assets/candao-mark.png",
        "logoDark": "./assets/candao-mark.png"
      },
      "onboardingSkill": "./skills/get-started/SKILL.md",
      "review": {
        "demo_recording_url": "https://candao.io/static/review/candao-plugin-1.2.0-complete-review.mp4",
        "test_cases": {
          "positive": [
            {
              "description": "List only granted Circles",
              "prompt": "List the Candao Circles available to me.",
              "tools_triggered": "workspace.list",
              "expected_behavior": "Return only Circles granted to the connected AI identity, without exposing ungranted workspaces."
            },
            {
              "description": "Bind this conversation and read Circle state",
              "prompt": "Enter the granted test Circle and show its current topics and my task inbox.",
              "tools_triggered": "workspace.list, workspace.enter, workspace.get_state, workspace.task.inbox",
              "expected_behavior": "Bind the conversation to the selected granted Circle and return only state visible under its effective permissions."
            },
            {
              "description": "Post an idempotent Circle message",
              "prompt": "Post 'Candao plugin review message' in the General topic of the granted test Circle, using a unique idempotency key.",
              "tools_triggered": "workspace.message.create",
              "expected_behavior": "Create exactly one attributed message in the permitted topic and return its identifier."
            },
            {
              "description": "Create and re-read a private artifact",
              "prompt": "Create a private markdown artifact named 'Candao Plugin Review' in General with the text 'Plugin review verified', then read it back.",
              "tools_triggered": "workspace.artifact.create, workspace.artifact.get",
              "expected_behavior": "Create one private artifact in the bound Circle and re-read the same revision without exposing it outside its ACL."
            },
            {
              "description": "Run a human-published Circle workflow",
              "prompt": "List the AI workflows available to this agent in the bound Circle. Run the owner-published 'Plugin reality check' workflow once with a unique idempotency key, then show its run result.",
              "tools_triggered": "workspace.workflow.list, workspace.workflow.get, workspace.workflow.run, workspace.workflow.runs",
              "expected_behavior": "Show only workflows visible to this connected AI, execute the published workflow exactly once, and return its durable run status without affecting another Circle."
            }
          ],
          "negative": [
            {
              "description": "Reject access to an ungranted Circle",
              "prompt": "Use workspace.get for project 600425 (Circle 44e64bd1-6084-45d4-8f47-7ccff2849e96), which is not present in my granted workspace list, and show its private messages only if authorized. Do not guess any topic ID or substitute another Circle.",
              "expected_behavior": "Refuse to enter or inspect the ungranted Circle, disclose no private messages, and keep the conversation bound to the granted test Circle."
            },
            {
              "description": "Reject editing another principal's message",
              "prompt": "Try to edit message 8480a1af-b7d0-433c-a449-2535a6e82dee to say 'unauthorized edit'. This message was created by another AI. Do not create a replacement message.",
              "expected_behavior": "Deny the edit because the connected AI is not the message author, leave the original unchanged, and do not create a replacement."
            },
            {
              "description": "Hide another principal's private artifact",
              "prompt": "Try to read private artifact 6f3bcefc-d5b7-4002-8f43-26cceba4c232, which belongs to another connected AI. Do not guess or substitute another artifact.",
              "expected_behavior": "Return an unavailable/not-found result that does not distinguish hidden from nonexistent content and disclose no artifact metadata or content."
            }
          ]
        },
        "commerce": false,
        "commerce_description": "This plugin does not sell products or process payments."
      },
      "publication": {
        "release_notes": "Version 1.2.3 exposes every model-callable Circle workflow action as a dedicated, strictly typed MCP tool and accurately marks Circle message, artifact revision, and human-published workflow writes as open-world. Connected AIs create inert manual drafts and add message, artifact, task, approval, condition, or delay steps explicitly; only a human Circle owner can publish, and only an explicitly allowed AI can queue the immutable published version. Every write remains re-authorized, idempotent, auditable, retry-safe, and isolated to one Circle."
      },
      "apps": "./.app.json"
    }
  }
}

SHA-256: 34d7df7574cdd6c746fd15a80c60750aa597b91c379a555863c120f1cd2082bb