Skip to content

Tools

Below is the complete list of 23 built-in tools the Kodik agent can use. Availability depends on the current mode and that mode’s switch in Harness settings. Harness lists only tools structurally offered in the selected mode and summarizes the rest as not offered. File access is governed by .kodikignore rules.

ToolPurposeNotes
read_fileRead file contentsSupports line ranges via the ranges parameter. Files larger than the model’s context window cannot be read directly. Respects .kodikignore.
edit_fileEdit one fileModifies one existing file with one or more exact search/replace edits. Read the file first; multi-file work uses one serialized call per file. Checks linter diagnostics after editing.
create_fileCreate one fileCreates one new file with complete contents and refuses to overwrite an existing path. Multi-file creation uses one serialized call per file.
delete_fileDelete one fileDeletes one existing file. Multi-file deletion uses one serialized call per file.
edit_notebookEdit a Jupyter notebookSupports insert, edit, delete operations on code and markdown cells. Languages: Python, JS, TS, R, Julia, SQL. Edited notebooks follow the file-change display setting; open notebook editors are refreshed and saved after tool edits, and dirty notebooks must be saved or discarded first.
shellRun a terminal commandThe block_until_ms: 0 parameter launches the command in the background and immediately returns a terminal_id for polling via command_status. A backgrounded command runs in its own terminal, so it never blocks later commands.
command_statusPoll a background processTakes the terminal_id returned by shell. Used to retrieve incremental output from dev servers, watchers, and other long-running processes.
kill_terminalStop a background processTakes the terminal_id returned by shell. Terminates a backgrounded command and frees its terminal — used to clean up or restart a dev server or watcher. Auto-approved.
globFind files by patternSupports patterns like **/*.ts.
rgFull-text search (ripgrep)Regex search with ripgrep options. Respects .kodikignore.
codebase_searchSemantic search over the codebaseUses the local index — see Indexing.
read_lintsRead linter diagnosticsReturns errors and warnings from VS Code for one or more files (or the whole workspace).
web_fetchFetch URL contentsHTTPS only (plain HTTP allowed only for localhost). Returns the page as Markdown. 30-second timeout.
web_searchSearch the webKodik provider only. Returns ranked results (title, URL, snippet) and usually a synthesized answer. Billed per search from your credit balance.
browserDrive the integrated browserAvailable in modes where the mode policy allows it when the browser tool is enabled in Harness. Opens pages, can reuse open browser tabs, launch a dev server, take screenshots, read and clear bounded console output, inspect, resize, navigate, and interact with the page.
todo_writeManage a task listCreates and updates task items for multi-step sessions.
memorySave notes to memoryWrites notes to workspace/global memory or to session memory for the current task. See Memory.
sub_agentDelegate a subtask to a subagentLaunches a child agent with its own context. With background: true it returns immediately and the child reports back when it settles. See Subagents.
agent_statusCheck on a background subagentTakes the agent_id from a background sub_agent launch. Reports status, goal, and elapsed time; wait: true blocks until the child settles and returns its full report. See Subagents.
ask_questionsAsk clarifying questionsAsks concise questions when ambiguity would change the implementation.
check_understandingCheck understandingRuns a short comprehension check in Educator mode.
create_lessonCreate lessonsBuilds an interactive HTML lesson and opens it in the Integrated Browser in Educator mode.
generate_planGenerate plansProduces a reviewable implementation plan in Plan mode.
MCP toolsAny tools from MCP serversDepend on connected servers. See MCP.

Connected MCP tools are appended to the same Harness tool list. Their selected-mode switches affect the next turn; MCP Settings continues to own server and tool configuration. Harness includes only active MCP tools in prompt guidance and totals.

The ranges parameter accepts an array of {start_line, end_line} objects and lets you read only the sections you need from a large file. If the file exceeds the size limit (derived from the model’s context window), read_file returns an informational message recommending rg or ranges instead.

read_file("src/server.ts", ranges=[{start_line: 1, end_line: 50}])

For long-running processes (dev servers, watchers, log streams), launch with block_until_ms: 0 — it returns a terminal_id immediately. Use command_status with that ID to poll for new output without restarting the process.

Kodik runs these commands in the real integrated terminal. Shell integration is the terminal’s command-tracking protocol: when the selected shell supports it, Kodik receives exact command boundaries and exit codes. If integration is unavailable, Kodik still runs and captures the command, but reports Completion Unverified instead of inventing success or failure. Results stay scoped to the command that produced them; when a background process exits during an active turn, the model receives its real exit code when available and its final output.

A background process keeps its terminal busy. Later shell calls open another integrated terminal, so npm run dev can keep running while commands such as ls, tests, or HTTP checks execute alongside it. Finished terminals are reused for later sequential commands.

# Start a dev server in the background
terminal_id = shell("npm run dev", block_until_ms=0)
# Retrieve logs
command_status(terminal_id=terminal_id)

Uses a vector index that is built automatically. Search is meaning-based rather than keyword-based. Requires the index to exist — see Indexing.

Opens a headless browser, loads the page, and returns its content as Markdown. Output is truncated at 60 KB. Plain HTTP is blocked except for localhost.

Lets the agent discover current information it doesn’t have a link for: latest library versions and APIs, unfamiliar error messages, breaking changes, official documentation pages. Searches run server-side through the Kodik backend, so no search-provider API keys live on your machine, and each successful search is billed as a flat amount against the same credit balance as model usage — failed searches are never charged. The agent composes the two web tools: search to discover, then web_fetch the most promising result to read it in full.

Available only on the Kodik provider. On Ollama and custom/bring-your-own-key providers the tool is not offered, since searches there can’t be served or billed. Approval has its own auto-approve toggle (webSearch) — see Auto-Approve.

Drives the same Integrated Browser surface you see in Kodik. The agent can start a preview at a URL, optionally run a dev-server command first and wait for the URL to respond, then stop the preview and the server it started.

Use browser for browser-rendered work. It can list existing browser tabs and focus the tab you are viewing, take screenshots, read and clear the bounded console buffer, resize to mobile/tablet/desktop breakpoints, navigate/reload/back/forward, inspect an element’s HTML/styles/box, read an accessibility snapshot, click/type/hover/drag, and evaluate page expressions when higher-level actions are not enough.

Opening arbitrary URLs, launching dev servers, interacting with pages, and running page scripts follow your auto-approval settings. Screenshots captured by the agent appear inline in the chat; click a screenshot thumbnail to open the full image in an editor tab.

Tools including read_file, rg, and shell check .kodikignore before accessing files. Files matching patterns in .kodikignore are not accessible to the agent. See Ignore files.