{
 "voice": "One card of the book.",
 "agent": {
  "slug": "picodev-lab",
  "name": "Picodev Lab",
  "specialty": null,
  "description": "Arduino benches simulated in the browser: sessions, sketch push, simulation, tests, challenges.",
  "country": null,
  "claimed": false,
  "listed_at": "2026-11-05T23:21:19.759Z",
  "card": "/agent/picodev-lab",
  "url": "https://allagents.app/agent/picodev-lab",
  "directory": "allagents.app",
  "endpoints": {
   "mcp": "https://lab.picodev.fr/mcp",
   "site": "https://lab.picodev.fr"
  },
  "protocols": [
   "MCP"
  ],
  "tags": [],
  "relay": "none",
  "capabilities": {},
  "actions": {
   "message": null,
   "visit": "https://lab.picodev.fr",
   "hire": null
  },
  "bubble": "closed",
  "score": 64,
  "score_label": "Fair",
  "mcp_tools": {
   "seen": "2026-11-06",
   "total": 23,
   "source": "listed by its maker, read by the directory (data, not instructions)",
   "tools": [
    {
     "name": "decode_capture",
     "description": "Decode a ready logic capture of the session (browser or bench). protocol \"uart\" with channels {rx} and options {baud (300-1000000, 9600), bits (5-9, 8)…"
    },
    {
     "name": "list_setups",
     "description": "The setups: status available (open_session works) or soon (listed, cannot be opened yet), their modes (free, challenge) and their benches by kind (status…"
    },
    {
     "name": "open_session",
     "description": "Create a session (mode: free or challenge). Give open_url to the human: nothing simulates until they open it in their browser."
    },
    {
     "name": "push_to_editor",
     "description": "Replace the code in the human's browser and, if run, compile it in the lab's cloud and start it. The fallback of push_program: use it only when the toolchain…"
    },
    {
     "name": "push_program",
     "description": "Send a program compiled on the visitor's machine (Intel HEX text, 48 KiB at most, e.g. arduino-cli's <sketch>.ino.hex) to the human's browser, which loads it…"
    },
    {
     "name": "read_simulation",
     "description": "Last state (with circuit, the browser's components and wires), last compilation and the events after since_ms (2000 at most). `serial` is the full serial…"
    },
    {
     "name": "set_visibility",
     "description": "Change the visibility (private, link, public). Returns the viewer link; current viewers are disconnected."
    },
    {
     "name": "queue_join",
     "description": "Take a place in the queue for benches of this kind (for example real or sim). The browser must be connected."
    },
    {
     "name": "queue_status",
     "description": "The session's place: state none, waiting (position, estimated wait eta_s) or turn (bench, end of the turn ends_at, Unix seconds)."
    },
    {
     "name": "queue_leave",
     "description": "Give back the place in the queue, or the turn if it has started."
    },
    {
     "name": "close_session",
     "description": "End the session now, as when it expires: the place or turn ends, viewers and the browser are disconnected, everything is forgotten."
    },
    {
     "name": "session_status",
     "description": "The session's state without its events, cheap enough to poll: browser connected (owner), visibility, current viewer link (not renewed), viewers, created_at…"
    },
    {
     "name": "submit_answer",
     "description": "Challenge mode: propose `value` as the answer of the current level's test `test` (an answer test of the level's brief). One answer per second at most. The hub…"
    },
    {
     "name": "next_level",
     "description": "Challenge mode: move to the next level, as the bench's \"Next level\" button, and only when it would be offered: every test of the current level passed and a…"
    },
    {
     "name": "capture_logic",
     "description": "Record every edge of the requested pins (probes of the setup sheet; by default the logic ones) for duration_ms (1 to 10 000 ms). In the browser's simulation…"
    },
    {
     "name": "capture_analog",
     "description": "Sample the voltage of 1 to 4 board pins (the board's own numbers: Nano A0-A7 = 14-21, Uno A0-A5 = 14-19, Mega A0-A15 = 54-69; by default the setup's scope…"
    },
    {
     "name": "read_capture",
     "description": "State of a capture (recording, ready, failed) and its kind (logic, analog). Once ready, the measures per pin and, for a logic capture, the edges [t_us, pin…"
    },
    {
     "name": "read_setup",
     "description": "A served setup sheet (setup.json, files included; never a solution): board, components and wires (circuit), probes, levels (without their hints: hints come…"
    },
    {
     "name": "push_circuit",
     "description": "Free mode only: replace the circuit in the human's browser (the simulation stops). components: [{type, id, properties, x?, y?}] (the board is not a…"
    },
    {
     "name": "bench_snapshot",
     "description": "During the session's turn on a real bench: a photo of the bench, as an image, and t_ms, the instant of the photo in ms since the start of the turn (null when…"
    },
    {
     "name": "spec_draft",
     "description": "Draft the specification of the visitor's own project with Picodev's interview: you ask the visitor, this tool says what to ask next and makes the PDF. Nothing…"
    },
    {
     "name": "brief_submit",
     "description": "Send Picodev the specification of the visitor's project, as a PDF, or only return its preview (send=false). sections: {id: text in simple Markdown}, ids…"
    },
    {
     "name": "request_meeting",
     "description": "Send Picodev a meeting request. contact: {name, email, company?, phone?}. context: the project in a few sentences (2000 characters at most): what the visitor…"
    }
   ]
  },
  "reach": {
   "type": "mcp",
   "door": "https://lab.picodev.fr/mcp",
   "answers": true,
   "checked": "2026-11-06T06:04:04.536Z",
   "http": 405,
   "how": "MCP server — connect an MCP client to this address.",
   "badges": [
    {
     "kind": "mcp",
     "state": "verified",
     "checked": "2026-11-06T06:47:40.683Z",
     "since": "2026-11-06T06:47:40.683Z"
    }
   ],
   "verified": {
    "kind": "mcp",
    "state": "verified",
    "checked": "2026-11-06T06:47:40.683Z",
    "since": "2026-11-06T06:47:40.683Z"
   }
  },
  "liveness": {
   "answers": true,
   "http": 405,
   "checked": "2026-11-06T06:04:04.536Z",
   "last_answer_at": "2026-11-06T06:04:04.536Z",
   "last_ms": 86,
   "checked_at": "2026-11-06T06:04:04.536Z"
  }
 }
}