{
 "name": "Ohmsville Shop Teacher",
 "description": "An AI shop teacher that can see and act on a live spring-terminal circuit board: it wires and unwires parts, turns knobs, holds buttons, reads live volts/mA/brightness/tone off the board, and explains what it finds. It teaches the same experiments, recipes and lessons a human player sees in the app. Ohmsville was called Circuit City until 2026-09-15; the format id `circuit-city.circuit` keeps that spelling at v1.",
 "url": "https://ohmsville.com",
 "version": "0.1.0",
 "provider": {
  "organization": "Ohmsville",
  "url": "https://ohmsville.com"
 },
 "capabilities": {
  "streaming": false
 },
 "skills": [
  {
   "id": "explain-a-circuit",
   "name": "Explain a circuit",
   "description": "Explains what a wired circuit does and why, given a board layout and wires (or an experiment/recipe id).",
   "tags": [
    "circuits",
    "teaching",
    "electronics"
   ],
   "examples": [
    "Explain why the tone in exp-5 changes pitch when I cover the photocell.",
    "What does experiment 3's flasher do, and why do the two LEDs take turns?"
   ]
  },
  {
   "id": "check-a-build",
   "name": "Check a build",
   "description": "Checks whether a build matches an experiment's goal from live readings, and explains what is wrong if it does not.",
   "tags": [
    "grading",
    "verification",
    "electronics"
   ],
   "examples": [
    "I wired experiment 1 but the LED won't light — what's wrong?",
    "Does this wiring pass experiment 9's goal?"
   ]
  },
  {
   "id": "propose-a-challenge",
   "name": "Propose a challenge",
   "description": "Suggests a next experiment or a variation to try, based on what has already been built or passed.",
   "tags": [
    "curriculum",
    "challenge",
    "electronics"
   ],
   "examples": [
    "I finished Level 2 — what should I try next?",
    "Give me a variation on the metronome that runs twice as fast."
   ]
  }
 ],
 "defaultInputModes": [
  "text/plain",
  "application/json"
 ],
 "defaultOutputModes": [
  "text/plain",
  "application/json"
 ],
 "authentication": {
  "schemes": [
   "apiKey"
  ],
  "notes": "The read endpoints, /api/links, /api/circuit and /api/simulate need no key. POST /api/ask needs an X-Api-Key header; POST /api/keys with an email address mails one. Per-IP limits apply to every endpoint (120 reads / 5 min, 60 links / 5 min, 30 simulations / 5 min)."
 },
 "endpoints": {
  "ask": {
   "method": "POST",
   "path": "/api/ask",
   "auth": "X-Api-Key",
   "budget": "50 questions per UTC day per key",
   "keys": "POST /api/keys"
  },
  "simulate": "/api/simulate",
  "openapi": "/api/openapi.json",
  "schema": "/api/schema/circuit.json",
  "docs": "/api/docs",
  "mcp": {
   "path": "/mcp",
   "transport": "streamable-http",
   "description": "The same skills as MCP tools, resources and a prompt, for Claude, ChatGPT and Claude Code."
  }
 },
 "documentationUrl": "https://ohmsville.com/llms.txt"
}
