{
  "schema_version": 1,
  "transport": "local_cli",
  "working_directory": "project_root",
  "plan_schema": "schema/plan.schema.json",
  "library": "content/library.json",
  "tools": [
    {
      "name": "assets.search",
      "arguments": {
        "query": "string"
      },
      "command": [
        "cargo",
        "run",
        "--no-default-features",
        "--bin",
        "course_tool",
        "--",
        "search",
        "{query}"
      ],
      "description": "Search assets by device, declared action, or teaching capability; returns evidence_actions, decision_groups, guard scope and teaching boundary."
    },
    {
      "name": "assets.inspect",
      "arguments": {
        "asset_id": "string"
      },
      "command": [
        "cargo",
        "run",
        "--no-default-features",
        "--bin",
        "course_tool",
        "--",
        "inspect",
        "{asset_id}"
      ],
      "description": "Inspect complete trusted actions, including diagnosis/treatment choice_group, correct_when, evidence_actions and private_state; never reveal hidden answers in learner instructions."
    },
    {
      "name": "course.validate",
      "arguments": {
        "path": "plan JSON path"
      },
      "command": [
        "cargo",
        "run",
        "--no-default-features",
        "--bin",
        "course_tool",
        "--",
        "validate",
        "{path}"
      ]
    },
    {
      "name": "course.rehearse",
      "arguments": {
        "path": "plan JSON path"
      },
      "command": [
        "cargo",
        "run",
        "--no-default-features",
        "--bin",
        "course_tool",
        "--",
        "replay",
        "{path}"
      ]
    }
  ],
  "notes": [
    "The top-level tools array preserves the local CLI command contract for Coding Agents; it is not the live online tool registry.",
    "The real online Agent tools are declared by server/agent.py TOOL_SPECS and implemented by server/tools.py; this manifest does not start a service or register MCP.",
    "Online plans are candidates only: native validation and rule rehearsal must pass before teacher confirmation applies them to Myth preview or learning.",
    "rehearse/replay executes declared expected steps, not arbitrary student-event replay or actual 3D input validation.",
    "Agent plans reference trusted versioned assets/actions and cannot define effects, scripts, model URLs or course-progress mutations.",
    "Initial provider settings were reused from local Rehearsal with explicit user authorization; keys stay server-side and are never returned by settings APIs.",
    "The same frontend and Agent backend support local use and the public /power-course-studio/ deployment. Live generation additionally requires connectivity from the deployed backend to the configured model provider."
  ],
  "online_service": {
    "implementation": "server/agent.py:TOOL_SPECS; server/tools.py:PlanTools",
    "transport": "same_origin_http",
    "local_entry": "Start-AgentStudio.ps1",
    "local_url": "http://127.0.0.1:8476/",
    "api_base": "./api/agent",
    "api_resolution": "Resolve API paths against the studio page URL so local root and public /power-course-studio/ hosting use the same origin and deployment prefix.",
    "deployed_scope": "Shared local and public application bundle: frontend, Agent backend, asset library, and versioned course publications. Provider connectivity is checked separately from application deployment.",
    "tools": [
      {
        "name": "asset_search",
        "arguments": {
          "query": "string"
        },
        "implementation": "native course_tool search"
      },
      {
        "name": "asset_inspect",
        "arguments": {
          "asset_id": "string"
        },
        "implementation": "native course_tool inspect"
      },
      {
        "name": "get_plan_schema",
        "arguments": {},
        "implementation": "trusted schema plus enforced edit scope"
      },
      {
        "name": "validate_plan",
        "arguments": {
          "plan": "plan object"
        },
        "returns": "immutable candidate_id and native Rust validation"
      },
      {
        "name": "rehearse_plan",
        "arguments": {
          "candidate_id": "string"
        },
        "returns": "same-candidate Rust rule replay result"
      },
      {
        "name": "finish_plan",
        "arguments": {
          "candidate_id": "string",
          "summary": "string"
        },
        "requires": "same candidate validated and successfully rehearsed; result is pending teacher confirmation"
      }
    ],
    "administrator": {
      "settings": "GET/POST ./api/agent/admin/settings",
      "connection_test": "POST ./api/agent/admin/test",
      "providers": [
        "openai",
        "anthropic"
      ],
      "fields": [
        "provider",
        "base_url",
        "model",
        "api_key"
      ],
      "response_key_status": "has_key only; never returns api_key"
    },
    "is_mcp_server": false
  }
}
