Tool tree
gradeNot graded
read_editorAnswer
Returns the current contents of the user's code editor as a string.
View tool JSON
{
"name": "read_editor",
"kind": "answer",
"impl": "imperative",
"description": "Returns the current contents of the user's code editor as a string.",
"inputSchema": {
"type": "object",
"properties": {},
"additionalProperties": false
}
}write_editorAction
Replaces the entire contents of the user's code editor with the given code. Use this only for new programs or full rewrites; use `edit_editor` for partial changes. Requires user approval.
View tool JSON
{
"name": "write_editor",
"kind": "act",
"impl": "imperative",
"description": "Replaces the entire contents of the user's code editor with the given code. Use this only for new programs or full rewrites; use `edit_editor` for partial changes. Requires user approval.",
"inputSchema": {
"type": "object",
"properties": {
"code": {
"type": "string",
"description": "The new code to place in the editor."
}
},
"required": [
"code"
],
"additionalProperties": false
}
}edit_editorAction
Replaces a unique substring `old_string` in the user's code editor with `new_string`. `old_string` must match the editor contents exactly (including whitespace) and must appear exactly once — include enough surrounding context to disambiguate. Prefer this over `write_editor` for any change that does not rewrite the whole buffer. Requires user approval.
View tool JSON
{
"name": "edit_editor",
"kind": "act",
"impl": "imperative",
"description": "Replaces a unique substring `old_string` in the user's code editor with `new_string`. `old_string` must match the editor contents exactly (including whitespace) and must appear exactly once — include enough surrounding context to disambiguate. Prefer this over `write_editor` for any change that does not rewrite the whole buffer. Requires user approval.",
"inputSchema": {
"type": "object",
"properties": {
"old_string": {
"type": "string",
"description": "The exact substring currently in the editor to replace. Must appear exactly once."
},
"new_string": {
"type": "string",
"description": "The replacement text."
}
},
"required": [
"old_string",
"new_string"
],
"additionalProperties": false
}
}run_editorAction
Runs the current contents of the user's editor on the connected microcontroller. Returns immediately once the program has started; the user watches the program's output directly in the REPL. Use this for full programs (event loops, sensor polls) that may run indefinitely. Use run_snippet instead for short evaluations whose output you need back.
View tool JSON
{
"name": "run_editor",
"kind": "act",
"impl": "imperative",
"description": "Runs the current contents of the user's editor on the connected microcontroller. Returns immediately once the program has started; the user watches the program's output directly in the REPL. Use this for full programs (event loops, sensor polls) that may run indefinitely. Use run_snippet instead for short evaluations whose output you need back.",
"inputSchema": {
"type": "object",
"properties": {},
"additionalProperties": false
}
}run_device_fileAction
Executes a Python file directly from the connected microcontroller filesystem. Returns immediately once the program has started; the user watches the program's output directly in the REPL. Requires user approval.
View tool JSON
{
"name": "run_device_file",
"kind": "act",
"impl": "imperative",
"description": "Executes a Python file directly from the connected microcontroller filesystem. Returns immediately once the program has started; the user watches the program's output directly in the REPL. Requires user approval.",
"inputSchema": {
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "Absolute device path (POSIX-style, e.g. \"main.py\" or \"/main.py\")."
}
},
"required": [
"path"
],
"additionalProperties": false
}
}run_snippetAction
Evaluates a short MicroPython snippet on the connected microcontroller and returns stdout/stderr. Use this for quick checks (sensor reads, expression eval, library probes) where you need the output back. For long-running programs, use run_editor instead.
View tool JSON
{
"name": "run_snippet",
"kind": "act",
"impl": "imperative",
"description": "Evaluates a short MicroPython snippet on the connected microcontroller and returns stdout/stderr. Use this for quick checks (sensor reads, expression eval, library probes) where you need the output back. For long-running programs, use run_editor instead.",
"inputSchema": {
"type": "object",
"properties": {
"code": {
"type": "string",
"description": "The MicroPython code to evaluate."
}
},
"required": [
"code"
],
"additionalProperties": false
}
}read_repl_historyAnswer
Returns the last N lines of REPL output from the connected microcontroller, joined by newlines.
View tool JSON
{
"name": "read_repl_history",
"kind": "answer",
"impl": "imperative",
"description": "Returns the last N lines of REPL output from the connected microcontroller, joined by newlines.",
"inputSchema": {
"type": "object",
"properties": {
"lines": {
"type": "number",
"description": "Number of trailing lines to return. Defaults to 20."
}
},
"additionalProperties": false
}
}list_device_filesAnswer
Lists files and directories at the given absolute device path on the connected microcontroller. Path defaults to "/". Directory entries are suffixed with "/" in the output.
View tool JSON
{
"name": "list_device_files",
"kind": "answer",
"impl": "imperative",
"description": "Lists files and directories at the given absolute device path on the connected microcontroller. Path defaults to \"/\". Directory entries are suffixed with \"/\" in the output.",
"inputSchema": {
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "Absolute device path (POSIX-style). Defaults to \"/\"."
}
},
"required": [],
"additionalProperties": false
}
}read_device_fileAnswer
Reads a UTF-8 text file at the given absolute device path on the connected microcontroller. Returns "binary file — cannot read" if the file is not valid UTF-8.
View tool JSON
{
"name": "read_device_file",
"kind": "answer",
"impl": "imperative",
"description": "Reads a UTF-8 text file at the given absolute device path on the connected microcontroller. Returns \"binary file — cannot read\" if the file is not valid UTF-8.",
"inputSchema": {
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "Absolute device path (POSIX-style)."
}
},
"required": [
"path"
],
"additionalProperties": false
}
}write_device_fileAction
Writes UTF-8 text to a file at the given absolute device path on the connected microcontroller. Overwrites any existing file. Requires user approval.
View tool JSON
{
"name": "write_device_file",
"kind": "act",
"impl": "imperative",
"description": "Writes UTF-8 text to a file at the given absolute device path on the connected microcontroller. Overwrites any existing file. Requires user approval.",
"inputSchema": {
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "Absolute device path (POSIX-style)."
},
"content": {
"type": "string",
"description": "UTF-8 text to write to the file."
}
},
"required": [
"path",
"content"
],
"additionalProperties": false
}
}edit_device_fileAction
Replaces a unique substring `old_string` in the UTF-8 text file at `path` on the connected microcontroller with `new_string`. `old_string` must match the file contents exactly (including whitespace) and must appear exactly once — include enough surrounding context to disambiguate. Prefer this over `write_device_file` for any change that does not rewrite the whole file. Requires user approval.
View tool JSON
{
"name": "edit_device_file",
"kind": "act",
"impl": "imperative",
"description": "Replaces a unique substring `old_string` in the UTF-8 text file at `path` on the connected microcontroller with `new_string`. `old_string` must match the file contents exactly (including whitespace) and must appear exactly once — include enough surrounding context to disambiguate. Prefer this over `write_device_file` for any change that does not rewrite the whole file. Requires user approval.",
"inputSchema": {
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "Absolute device path (POSIX-style)."
},
"old_string": {
"type": "string",
"description": "The exact substring currently in the file to replace. Must appear exactly once."
},
"new_string": {
"type": "string",
"description": "The replacement text."
}
},
"required": [
"path",
"old_string",
"new_string"
],
"additionalProperties": false
}
}delete_device_fileSensitive Action
Deletes a file at the given absolute device path on the connected microcontroller. Does not delete directories. Requires user approval.
View tool JSON
{
"name": "delete_device_file",
"kind": "transact",
"impl": "imperative",
"description": "Deletes a file at the given absolute device path on the connected microcontroller. Does not delete directories. Requires user approval.",
"inputSchema": {
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "Absolute device path (POSIX-style) of the file to delete."
}
},
"required": [
"path"
],
"additionalProperties": false
}
}make_device_dirAction
Creates a directory at the given absolute device path on the connected microcontroller. The parent directory must already exist. Requires user approval.
View tool JSON
{
"name": "make_device_dir",
"kind": "act",
"impl": "imperative",
"description": "Creates a directory at the given absolute device path on the connected microcontroller. The parent directory must already exist. Requires user approval.",
"inputSchema": {
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "Absolute device path (POSIX-style) of the directory to create."
}
},
"required": [
"path"
],
"additionalProperties": false
}
}stop_programAction
Sends a keyboard interrupt (Ctrl+C) to the connected device, stopping any running program and returning to the REPL prompt. Use this to stop a program started with run_editor or a snippet that is still running.
View tool JSON
{
"name": "stop_program",
"kind": "act",
"impl": "imperative",
"description": "Sends a keyboard interrupt (Ctrl+C) to the connected device, stopping any running program and returning to the REPL prompt. Use this to stop a program started with run_editor or a snippet that is still running.",
"inputSchema": {
"type": "object",
"properties": {},
"additionalProperties": false
}
}get_board_infoAnswer
Queries the connected MicroPython board for its firmware version, platform, and available RAM. Call this at the start of a session to understand what board you are working with.
View tool JSON
{
"name": "get_board_info",
"kind": "answer",
"impl": "imperative",
"description": "Queries the connected MicroPython board for its firmware version, platform, and available RAM. Call this at the start of a session to understand what board you are working with.",
"inputSchema": {
"type": "object",
"properties": {},
"additionalProperties": false
}
}open_device_file_in_editorAction
Reads a file from the device and loads it into the editor so the human user can view or edit it interactively. DO NOT use this tool if your goal is to edit or inspect a device file yourself — use edit_device_file or read_device_file directly instead.
View tool JSON
{
"name": "open_device_file_in_editor",
"kind": "act",
"impl": "imperative",
"description": "Reads a file from the device and loads it into the editor so the human user can view or edit it interactively. DO NOT use this tool if your goal is to edit or inspect a device file yourself — use edit_device_file or read_device_file directly instead.",
"inputSchema": {
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "Absolute device path (POSIX-style)."
}
},
"required": [
"path"
],
"additionalProperties": false
}
}save_editor_to_deviceAction
Saves the current editor contents to a file on the device in one step. Use this instead of read_editor + write_device_file.
View tool JSON
{
"name": "save_editor_to_device",
"kind": "act",
"impl": "imperative",
"description": "Saves the current editor contents to a file on the device in one step. Use this instead of read_editor + write_device_file.",
"inputSchema": {
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "Absolute device path (POSIX-style)."
}
},
"required": [
"path"
],
"additionalProperties": false
}
}read_board_notesAnswer
Reads the persistent notes for the currently connected board. Notes are scoped per-board (by os.uname().machine) and survive across sessions. Notes describe the board itself — vendor module surface, pin assignments, hardware quirks, useful docs URLs — not whatever happens to be on its filesystem at the moment. Use list_device_files / read_device_file to inspect application state; use this to recall durable board facts the agent established in previous conversations. Returns "" if no notes exist yet.
View tool JSON
{
"name": "read_board_notes",
"kind": "answer",
"impl": "imperative",
"description": "Reads the persistent notes for the currently connected board. Notes are scoped per-board (by os.uname().machine) and survive across sessions. Notes describe the board itself — vendor module surface, pin assignments, hardware quirks, useful docs URLs — not whatever happens to be on its filesystem at the moment. Use list_device_files / read_device_file to inspect application state; use this to recall durable board facts the agent established in previous conversations. Returns \"\" if no notes exist yet.",
"inputSchema": {
"type": "object",
"properties": {},
"additionalProperties": false
}
}write_board_notesAction
Replaces the persistent notes for the currently connected board with the provided content. Notes are scoped to the board hardware (vendor modules, pin assignments, hardware quirks, useful docs URLs) — NOT to the current application or whatever files happen to be on the device. Do not record filesystem listings, current main.py contents, project-specific code, or anything that would change when a different program is flashed. Prefer edit_board_notes for incremental changes; use this for the first write or full rewrites. The user reviews the proposed content before it is saved.
View tool JSON
{
"name": "write_board_notes",
"kind": "act",
"impl": "imperative",
"description": "Replaces the persistent notes for the currently connected board with the provided content. Notes are scoped to the board hardware (vendor modules, pin assignments, hardware quirks, useful docs URLs) — NOT to the current application or whatever files happen to be on the device. Do not record filesystem listings, current main.py contents, project-specific code, or anything that would change when a different program is flashed. Prefer edit_board_notes for incremental changes; use this for the first write or full rewrites. The user reviews the proposed content before it is saved.",
"inputSchema": {
"type": "object",
"properties": {
"content": {
"type": "string",
"description": "The new full notes content (markdown)."
}
},
"required": [
"content"
],
"additionalProperties": false
}
}edit_board_notesAction
Edits the persistent notes for the currently connected board by replacing one occurrence of old_string with new_string. Notes are scoped to the board hardware (vendor modules, pin assignments, hardware quirks, useful docs URLs) — NOT to the current application or files on the device. Do not record filesystem listings, current code contents, or project-specific state. old_string must appear exactly once in the current notes; add surrounding context to disambiguate if necessary. The user reviews the change before it is saved.
View tool JSON
{
"name": "edit_board_notes",
"kind": "act",
"impl": "imperative",
"description": "Edits the persistent notes for the currently connected board by replacing one occurrence of old_string with new_string. Notes are scoped to the board hardware (vendor modules, pin assignments, hardware quirks, useful docs URLs) — NOT to the current application or files on the device. Do not record filesystem listings, current code contents, or project-specific state. old_string must appear exactly once in the current notes; add surrounding context to disambiguate if necessary. The user reviews the change before it is saved.",
"inputSchema": {
"type": "object",
"properties": {
"old_string": {
"type": "string",
"description": "The exact substring currently in the notes to replace. Must appear exactly once."
},
"new_string": {
"type": "string",
"description": "The replacement text."
}
},
"required": [
"old_string",
"new_string"
],
"additionalProperties": false
}
}fetch_urlAnswer
Fetches the contents of a URL and returns the body as text. Use this when the user provides a documentation URL, when board notes record a URL worth consulting, or when you need to read a known docs page (including raw GitHub files for MicroPython upstream docs). GitHub repo and blob URLs auto-translate to raw.githubusercontent.com. On failure, returns a descriptive error string (CORS-blocked, 404, network error) so you can decide on a fallback.
View tool JSON
{
"name": "fetch_url",
"kind": "answer",
"impl": "imperative",
"description": "Fetches the contents of a URL and returns the body as text. Use this when the user provides a documentation URL, when board notes record a URL worth consulting, or when you need to read a known docs page (including raw GitHub files for MicroPython upstream docs). GitHub repo and blob URLs auto-translate to raw.githubusercontent.com. On failure, returns a descriptive error string (CORS-blocked, 404, network error) so you can decide on a fallback.",
"inputSchema": {
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "The URL to fetch (http or https)."
}
},
"required": [
"url"
],
"additionalProperties": false
}
}