{"ok":true,"site":{"host":"agentic-sudoku.vercel.app","url":"https://agentic-sudoku.vercel.app/","type":"live","desc":"A Sudoku board you and an agent can solve together.","tools":[{"name":"get_board_state","kind":"answer","impl":"imperative","description":"Read the current Sudoku board. Rows are numbered 1-9 top to bottom, columns 1-9 left to right, and boxes 1-9 in reading order. Returns all 81 cells with their digit (or null if empty), who put it there ('clue' for the puzzle's starting digits, 'player' for the human, 'agent' for you), and the pencil candidates written in that cell. Also returns the difficulty, elapsed time, and whether the board is playing, paused, or complete. The puzzle solution is not available through any tool -- reason from the visible board, as the human does.","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"check_for_conflicts","kind":"answer","impl":"imperative","description":"List every cell involved in a duplicate digit within a row, column, or box, grouped so you can see which cells collide with which. Rows are numbered 1-9 top to bottom and columns 1-9 left to right. Returns an empty list when the board has no duplicates. This reports duplicates only -- it does not tell you whether a digit is correct, because the site never reveals the puzzle solution.","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"highlight_pattern_cells","kind":"act","impl":"imperative","description":"Tint cells on the board to point the human at a pattern, without changing anything they have written. Rows are numbered 1-9 top to bottom, columns 1-9 left to right, and boxes 1-9 in reading order. Use target_cells for the cells your deduction concludes about, and because_cells for the cells that justify it; the two are drawn differently so the human can tell them apart. Supply at least one of the two. Marks fade on their own after about a minute, and change no digit and no pencil mark. Requires explanation: one or two sentences the human will see, saying what you are pointing at and why.","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"target_cells":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"row":{"type":"integer","minimum":1,"maximum":9},"col":{"type":"integer","minimum":1,"maximum":9}},"required":["row","col"]},"maxItems":81,"uniqueItems":true},"because_cells":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"row":{"type":"integer","minimum":1,"maximum":9},"col":{"type":"integer","minimum":1,"maximum":9}},"required":["row","col"]},"maxItems":81,"uniqueItems":true},"explanation":{"type":"string","minLength":20,"maxLength":240}},"required":["explanation"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"show_pattern_hint_toast","kind":"act","impl":"imperative","description":"Show the human a short coaching note near the Sudoku board. Rows are numbered 1-9 top to bottom, columns 1-9 left to right, and boxes 1-9 in reading order. It disappears after five seconds, or sooner if they dismiss it. It never takes their keyboard focus and never stops them playing. The explanation you supply IS the note the human reads, so write it to them, not about them.","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"explanation":{"type":"string","minLength":20,"maxLength":240}},"required":["explanation"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"clear_visual_annotations","kind":"act","impl":"imperative","description":"Remove every highlight, beam, and coaching note you have placed on the Sudoku board. Rows are numbered 1-9 top to bottom, columns 1-9 left to right, and boxes 1-9 in reading order. The human's digits, pencil marks, timer, and undo history are untouched -- this clears only your own marks.","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"explanation":{"type":"string","minLength":20,"maxLength":240}},"required":["explanation"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"fill_cell","kind":"act","impl":"imperative","description":"Put one digit into one empty, non-clue cell of the Sudoku board. Rows are numbered 1-9 top to bottom, columns 1-9 left to right, and boxes 1-9 in reading order. The cell must be empty and not a starting clue, and the board must not be paused or complete, or the call is rejected and nothing changes. You are allowed to be wrong: a digit that duplicates one in the same row, column, or box will be placed and flagged as a conflict, exactly as it would be for the human. The human can undo it with a single press of their Undo button, and your digit is marked as yours on the board. Their selected cell does not move. Requires explanation: one or two sentences saying why this digit goes here, which the human sees.","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"row":{"type":"integer","minimum":1,"maximum":9},"col":{"type":"integer","minimum":1,"maximum":9},"digit":{"type":"integer","minimum":1,"maximum":9},"explanation":{"type":"string","minLength":20,"maxLength":240}},"required":["row","col","digit","explanation"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"draw_constraint_beams","kind":"act","impl":"imperative","description":"Cast a visible ray along a whole row, column, or box of the Sudoku board to show a constraint -- for example, the row that already contains a 6 and therefore rules a 6 out elsewhere. Rows are numbered 1-9 top to bottom, columns 1-9 left to right, and boxes 1-9 in reading order. Beams are drawn as lines, which keeps them distinct from the human's own square highlighting, and several beams stay individually readable where they cross. Optionally name the digit a beam is about. Beams fade on their own after about a minute and change nothing on the board. Requires explanation: one or two sentences the human will see, saying what the beams rule out.","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"beams":{"type":"array","minItems":1,"maxItems":9,"items":{"type":"object","additionalProperties":false,"properties":{"unit_type":{"type":"string","enum":["row","col","box"]},"unit_number":{"type":"integer","minimum":1,"maximum":9},"digit":{"type":"integer","minimum":1,"maximum":9}},"required":["unit_type","unit_number"]}},"explanation":{"type":"string","minLength":20,"maxLength":240}},"required":["beams","explanation"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"update_pencil_marks","kind":"act","impl":"imperative","description":"Set the pencil candidates of specific empty cells of the Sudoku board to exactly the digits you list. Rows are numbered 1-9 top to bottom, columns 1-9 left to right, and boxes 1-9 in reading order. This replaces whatever was in those cells -- an empty digit list erases that cell's marks. No other cell is touched, and the whole call is a single undo step for the human. Cells holding a digit, and starting clues, are rejected: if any cell you list is invalid, NOTHING is changed, so you can retry the whole call after correcting it. Requires explanation: one or two sentences the human will see, saying why these digits and not others.","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"cells":{"type":"array","minItems":1,"maxItems":81,"items":{"type":"object","additionalProperties":false,"properties":{"row":{"type":"integer","minimum":1,"maximum":9},"col":{"type":"integer","minimum":1,"maximum":9},"digits":{"type":"array","maxItems":9,"uniqueItems":true,"items":{"type":"integer","minimum":1,"maximum":9}}},"required":["row","col","digits"]}},"explanation":{"type":"string","minLength":20,"maxLength":240}},"required":["cells","explanation"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"auto_fill_all_pencil_marks","kind":"act","impl":"imperative","description":"Fill every empty cell of the Sudoku board with exactly the digits that are still legal there, given the board as it stands. Rows are numbered 1-9 top to bottom, columns 1-9 left to right, and boxes 1-9 in reading order. Cells that already hold a digit are not touched. This is one undo step for the human. If the human has written their own pencil marks, this replaces them -- in that case you must pass acknowledges_replacing_marks: true AND say so in your explanation, or the call is rejected. The candidates are worked out from the visible board only, exactly as the human would work them out.","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"acknowledges_replacing_marks":{"type":"boolean"},"explanation":{"type":"string","minLength":20,"maxLength":240}},"required":["explanation"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"playback_deduction_sequence","kind":"act","impl":"imperative","description":"Play a short walkthrough on the Sudoku board: a list of steps performed one after another, each with its own explanation shown as that step happens. Use it to teach a chain of reasoning. Rows are numbered 1-9 top to bottom, columns 1-9 left to right, and boxes 1-9 in reading order. Each step has an action: \"fill\" places a digit (needs row, col, digit); \"pencil\" sets a cell's candidates (needs row, col, digits); \"highlight\" marks cells (needs cells); \"beam\" casts a ray (needs unit_type and unit_number). The human can stop it at any moment simply by clicking or typing on the board -- playback halts immediately, completed steps stay done and are NOT rolled back, and this call tells you how many finished and why it stopped. Each step remains a separate undo step for the human. This call takes several seconds to return, by design.","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"steps":{"type":"array","minItems":2,"maxItems":8,"items":{"type":"object","additionalProperties":false,"properties":{"action":{"type":"string","enum":["fill","pencil","highlight","beam"]},"row":{"type":"integer","minimum":1,"maximum":9},"col":{"type":"integer","minimum":1,"maximum":9},"digit":{"type":"integer","minimum":1,"maximum":9},"digits":{"type":"array","maxItems":9,"uniqueItems":true,"items":{"type":"integer","minimum":1,"maximum":9}},"cells":{"type":"array","maxItems":81,"uniqueItems":true,"items":{"type":"object","additionalProperties":false,"properties":{"row":{"type":"integer","minimum":1,"maximum":9},"col":{"type":"integer","minimum":1,"maximum":9}},"required":["row","col"]}},"unit_type":{"type":"string","enum":["row","col","box"]},"unit_number":{"type":"integer","minimum":1,"maximum":9},"explanation":{"type":"string","minLength":20,"maxLength":240}},"required":["action","explanation"]}},"explanation":{"type":"string","minLength":20,"maxLength":240}},"required":["steps","explanation"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"load_technique_practice","kind":"act","impl":"imperative","description":"Replace the current Sudoku puzzle with a curated one that drills a specific technique. Rows are numbered 1-9 top to bottom, columns 1-9 left to right, and boxes 1-9 in reading order. This DISCARDS the human's current board and they are NOT asked first, so only do it when they have asked you to, and say why. Drills are available for: hidden-single, locked-candidates, naked-pair. Every drill has exactly one solution and genuinely requires its technique -- it cannot be finished without it.","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"technique":{"type":"string","enum":["hidden-single","locked-candidates","naked-pair"]},"explanation":{"type":"string","minLength":20,"maxLength":240}},"required":["technique","explanation"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"show_coordinate_ruler","kind":"act","impl":"imperative","description":"Show numbered guides around the Sudoku grid: the column numbers 1 to 9 across the top and the row numbers 1 to 9 down the left side. Rows are numbered 1-9 top to bottom, columns 1-9 left to right, and boxes 1-9 in reading order. Use this so the human can read a cell’s coordinates straight off the board instead of counting squares — it makes it much easier for them to tell you which cell they mean. The guides stay until they are removed and change nothing about the puzzle: no digit, no candidate, no timer, and nothing to undo. Calling this when they are already showing is fine and simply does nothing. Requires explanation: one or two sentences saying why, which the human sees.","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"explanation":{"type":"string","minLength":20,"maxLength":240}},"required":["explanation"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"hide_coordinate_ruler","kind":"act","impl":"imperative","description":"Remove the numbered row and column guides from around the Sudoku grid. Rows are numbered 1-9 top to bottom, columns 1-9 left to right, and boxes 1-9 in reading order. This changes nothing about the puzzle itself — no digit, no candidate, no timer, and nothing to undo. Calling this when the guides are not showing is fine and simply does nothing. Requires explanation: one or two sentences saying why, which the human sees.","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"explanation":{"type":"string","minLength":20,"maxLength":240}},"required":["explanation"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"switch_difficulty","kind":"act","impl":"imperative","description":"Load a brand-new Sudoku puzzle at a chosen difficulty, replacing the one on screen. Rows are numbered 1-9 top to bottom, columns 1-9 left to right, and boxes 1-9 in reading order. A new puzzle resets the clock to zero and clears the undo history, and every puzzle has exactly one solution. The board cannot be switched while it is paused. This DISCARDS whatever the human had done on the current board, and they are NOT asked first -- so only do it when they have asked you to, and say why. Requires explanation: one or two sentences saying why you are changing the difficulty, which the human sees.","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"difficulty":{"type":"string","enum":["easy","medium","hard"]},"explanation":{"type":"string","minLength":20,"maxLength":240}},"required":["difficulty","explanation"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"pause_timer","kind":"act","impl":"imperative","description":"Pause the game: the elapsed-time clock stops and the board is covered, exactly as it is when the human presses their own Pause button. Rows are numbered 1-9 top to bottom, columns 1-9 left to right, and boxes 1-9 in reading order. The human can resume at any moment with their own Resume control, and you can resume with \"resume_timer\". While the board is paused, every other tool that changes it is refused; reading the board still works. This changes no digit, no candidate, and nothing that can be undone. Requires explanation: one or two sentences saying why you are pausing, which the human sees.","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"explanation":{"type":"string","minLength":20,"maxLength":240}},"required":["explanation"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"resume_timer","kind":"act","impl":"imperative","description":"Resume a paused game: the clock restarts from where it stopped and the board becomes playable again. Rows are numbered 1-9 top to bottom, columns 1-9 left to right, and boxes 1-9 in reading order. This is the one tool that works while the board is paused -- every other tool that changes the board is refused until the game is running again. This changes no digit, no candidate, and nothing that can be undone. Requires explanation: one or two sentences, which the human sees.","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"explanation":{"type":"string","minLength":20,"maxLength":240}},"required":["explanation"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"restart_puzzle","kind":"act","impl":"imperative","description":"Replace the board with a DIFFERENT Sudoku puzzle at the SAME difficulty it is already on. Rows are numbered 1-9 top to bottom, columns 1-9 left to right, and boxes 1-9 in reading order. Use this when the human wants a fresh grid rather than a harder or easier one -- for example when they come back to a half-finished board they no longer want. It takes no difficulty argument on purpose: the level is read from the board, so the level after is the level before. The new puzzle is always a different grid, has exactly one solution, resets the clock to zero, and clears the undo history. The board cannot be restarted while it is paused. This discards whatever the human had done, and they are NOT asked first -- so only do it when they have asked you to, and say why. Requires explanation: one or two sentences saying why, which the human sees.","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"explanation":{"type":"string","minLength":20,"maxLength":240}},"required":["explanation"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"undo_move","kind":"act","impl":"imperative","description":"Take back the most recent change to the Sudoku board -- exactly what the human's own Undo button does, and reversible by them in the same way. Rows are numbered 1-9 top to bottom, columns 1-9 left to right, and boxes 1-9 in reading order. It always takes back the LAST change, whoever made it: yours or theirs. The result tells you which, so you can say what you just took back. A change that touched several cells at once, such as filling every pencil mark, is taken back whole in a single step. There is nothing to undo on a board where nothing has been changed yet, and the call is refused while the board is paused. There is no redo, so a change you take back is gone. Requires explanation: one or two sentences saying why you are taking this back, which the human sees.","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"explanation":{"type":"string","minLength":20,"maxLength":240}},"required":["explanation"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"}],"category":"Media & Personal","apiSurface":"spec","toolCount":18}}