Tools
Control which tools the LLM may use.
Tools are how the LLM takes action inside your codebase. Kodine ships a set of built-in tools, and you can add more through custom tools or MCP servers.
Every tool is enabled by default and runs without asking permission. Tool behavior is governed through permissions.
Configure
The permission field controls tool behavior — allow, deny, or demand approval per tool.
{ "$schema": "https://kodine.net/config.json", "permission": { "edit": "deny", "bash": "ask", "webfetch": "allow" }}Wildcards let you govern several tools at once — for instance, requiring approval for everything coming from one MCP server:
{ "$schema": "https://kodine.net/config.json", "permission": { "mymcp_*": "ask" }}See permissions for the full configuration story.
Built-in
These are the built-in tools Kodine offers.
bash
Runs shell commands inside your project environment.
{ "$schema": "https://kodine.net/config.json", "permission": { "bash": "allow" }}With it, the LLM can execute terminal commands such as npm install, git status, or any other shell command.
edit
Edits existing files through exact string replacement.
{ "$schema": "https://kodine.net/config.json", "permission": { "edit": "allow" }}It makes precise file edits by swapping exact text matches, and it’s the main way the LLM changes code.
write
Creates new files, or overwrites existing ones.
{ "$schema": "https://kodine.net/config.json", "permission": { "edit": "allow" }}Enable this to let the LLM create files; existing files get overwritten when names collide.
read
Reads the contents of files in your codebase.
{ "$schema": "https://kodine.net/config.json", "permission": { "read": "allow" }}It returns a file’s contents, and large files can be read in specific line ranges.
grep
Searches file contents with regular expressions.
{ "$schema": "https://kodine.net/config.json", "permission": { "grep": "allow" }}A fast way to search content across the codebase, with full regex syntax and file-pattern filtering.
glob
Locates files via pattern matching.
{ "$schema": "https://kodine.net/config.json", "permission": { "glob": "allow" }}Give it glob patterns such as **/*.js or src/**/*.ts; it returns matching paths ordered by modification time.
lsp (experimental)
Talks to your configured LSP servers for code intelligence — definitions, references, hover info, call hierarchy, and more.
{ "$schema": "https://kodine.net/config.json", "permission": { "lsp": "allow" }}It supports goToDefinition, findReferences, hover, documentSymbol, workspaceSymbol, goToImplementation, prepareCallHierarchy, incomingCalls, and outgoingCalls operations.
See LSP Servers to set up which LSP servers your project uses.
apply_patch
Applies patches to files.
{ "$schema": "https://kodine.net/config.json", "permission": { "edit": "allow" }}It applies patch files to the codebase — handy for diffs and patches from any source.
In tool.execute.before or tool.execute.after hooks, match on input.tool === "apply_patch" (not "patch").
Rather than output.args.filePath, apply_patch works with output.args.patchText. The paths live inside marker lines of patchText, relative to the project root (for example: *** Add File: src/new-file.ts, *** Update File: src/existing.ts, *** Move to: src/renamed.ts, *** Delete File: src/obsolete.ts).
skill
Loads a skill (a SKILL.md file) and brings its content into the conversation.
{ "$schema": "https://kodine.net/config.json", "permission": { "skill": "allow" }}todowrite
Manages todo lists throughout a coding session.
{ "$schema": "https://kodine.net/config.json", "permission": { "todowrite": "allow" }}It creates and updates task lists so progress stays visible during complex work; the LLM relies on it to organize multi-step tasks.
webfetch
Fetches web content.
{ "$schema": "https://kodine.net/config.json", "permission": { "webfetch": "allow" }}Lets the LLM pull down and read web pages — great for checking documentation or researching online.
websearch
Searches the web.
{ "$schema": "https://kodine.net/config.json", "permission": { "websearch": "allow" }}Runs web searches through Exa or Parallel to surface relevant information — useful for topic research, current events, or anything past the model’s training cutoff.
No API key needed: the tool talks straight to the backend’s hosted MCP service, no authentication required.
question
Asks the user questions mid-execution.
{ "$schema": "https://kodine.net/config.json", "permission": { "question": "allow" }}With this tool the LLM can pause and ask you questions during a task. Handy for:
- Collecting your preferences or requirements
- Clearing up ambiguous instructions
- Getting your call on implementation choices
- Presenting options for which direction to take
Every question comes with a header, the question text, and a set of options. You can pick one of the options or type a custom answer. If several questions are asked at once, you can move between them before submitting everything.
Custom tools
With custom tools you define your own functions for the LLM to call. They live in your config file and can run arbitrary code.
See how to build them in custom tools.
MCP servers
MCP (Model Context Protocol) servers hook external tools and services into Kodine — database access, API integrations, third-party services, and more.
See MCP servers for configuration details.
Internals
Under the hood, tools such as grep and glob run on ripgrep. Ripgrep honors .gitignore by default, so anything listed there stays out of searches and listings.
Ignore patterns
Want to search files that would normally be ignored? Create a .ignore file in the project root; it can explicitly re-allow chosen paths.
!node_modules/!dist/!build/In this example, ripgrep can search inside node_modules/, dist/, and build/ even though .gitignore lists them.