# Built-In Tools

Tabnine CLI provides built-in tools that the AI uses automatically to fulfill your requests. You don't call tools directly — the AI selects the right tool based on what you ask.

```
> What files are in the src directory?
```

The AI automatically uses the `list_directory` tool.

## Available Tools

### File Operations

* **`read_file`** — Read file contents. Supports text, images (PNG, JPG, GIF, WEBP, SVG, BMP), audio (MP3, WAV, AIFF, AAC, OGG, FLAC), and PDF files. For text files, can read specific line ranges.
* **`read_many_files`** — Read content from multiple files specified by glob patterns. Handles the same file types as `read_file`. Useful for bulk reads across a directory.
* **`write_file`** — Create new files or overwrite existing ones. Creates parent directories if needed.
* **`replace`** — Make precise text replacements in existing files. Requires significant surrounding context to ensure correct edits. Can replace a single occurrence (default) or all occurrences of a match.
* **`list_directory`** — List files and subdirectories in a directory. Can filter using glob patterns and respects `.gitignore` and `.tabnineignore`.
* **`glob`** — Find files matching glob patterns (e.g., `**/*.ts`, `src/*.js`). Returns absolute paths sorted by modification time (newest first).

### Search

* **`grep_search`** — Search for regular expression patterns within file contents. Powered by [ripgrep](https://github.com/BurntSushi/ripgrep) when available. Supports context lines, case sensitivity, literal string mode, file filtering, and match limits.

  > **Note:** Older documentation may refer to this tool as `search_file_content`. That name is a legacy alias — the actual tool name is `grep_search`.

### Shell

* **`run_shell_command`** — Execute shell commands in your terminal. Supports background execution, working directory selection, and a brief description for the user.

### Web Tools (Disabled by Default)

* **`web_fetch`** — Fetch and process content from URLs (including localhost). Can handle up to 20 URLs in a single call. See [Web Fetch](https://docs.tabnine.com/main/getting-started/tabnine-cli/features/web-fetch) for details.

These tools are **disabled by default** in Tabnine CLI. To enable them, add to your [`settings.json`](https://docs.tabnine.com/main/getting-started/tabnine-cli/features/settings/settings-reference):

```json
{
  "tools": {
    "enableWebFetchTool": true
  }
}
```

* `enableWebFetchTool` — enables `web_fetch` (URL content fetching).

Each setting controls its respective tool independently.

### Memory & Task Management

* **`save_memory`** — Save concise global user preferences and facts that persist across all sessions and workspaces. Not for workspace-specific context.
* **`write_todos`** — Manage subtask lists for complex requests. Tracks progress with statuses: `pending`, `in_progress`, `completed`, `cancelled`, `blocked`.

### Planning

* **`enter_plan_mode`** — Switch to Plan Mode for safe research and planning of complex changes. In Plan Mode, only read-only tools are available.
* **`exit_plan_mode`** — Finalize the plan and transition to implementation. Presents the plan for user approval before any edits begin.

Plan Mode is controlled by the [`experimental.plan`](https://docs.tabnine.com/main/getting-started/tabnine-cli/features/settings/settings-reference) setting (enabled by default).

### User Interaction

* **`ask_user`** — Ask the user one or more questions to gather preferences, clarify requirements, or make decisions. Supports multiple-choice, free-text, and yes/no question types.

### Skills

* **`activate_skill`** — Load a specialized [agent skill](https://docs.tabnine.com/main/getting-started/tabnine-cli/features/agent-skills) by name. Skills provide expert guidance for specific tasks (e.g., coding guidelines, skill creation). Available skills vary by installation.

### Internal Documentation

* **`get_internal_docs`** — Access Tabnine CLI's built-in documentation files. Without arguments, lists all available docs. With a path argument, returns the content of that doc file.

### Task Tracker (Experimental)

These tools are gated behind [`experimental.taskTracker`](https://docs.tabnine.com/main/getting-started/tabnine-cli/features/settings/settings-reference) (disabled by default).

* **`tracker_create_task`** — Create a new task (epic, task, or bug).
* **`tracker_update_task`** — Update an existing task's title, description, status, or dependencies.
* **`tracker_get_task`** — Retrieve details for a specific task.
* **`tracker_list_tasks`** — List tasks, optionally filtered by status, type, or parent.
* **`tracker_add_dependency`** — Add a dependency between two tasks.
* **`tracker_visualize`** — Render an ASCII tree visualization of the task graph.

### Built-In MCP Tools

The following tools are powered by Tabnine's infrastructure and run as built-in MCP servers:

* **Remote Code Search** — Search across your organization's codebases using Tabnine's cloud indexing. Controlled by `tools.enableRemoteCodeSearch` (enabled by default).
* [**Coaching Guidelines**](https://docs.tabnine.com/main/getting-started/context-engine/admin-console/coaching-guidelines-v) — AI-powered coding best practices tailored to your team. Controlled by `tools.enableCoaching` (enabled by default).

## Tool Summary

| Tool Name                | Display Name      | Category    |
| ------------------------ | ----------------- | ----------- |
| `read_file`              | ReadFile          | File        |
| `read_many_files`        | ReadManyFiles     | File        |
| `write_file`             | WriteFile         | File        |
| `replace`                | Edit              | File        |
| `list_directory`         | ReadFolder        | File        |
| `glob`                   | FindFiles         | File        |
| `grep_search`            | SearchText        | Search      |
| `run_shell_command`      | Shell             | Execution   |
| `google_web_search`      | GoogleSearch      | Web         |
| `web_fetch`              | WebFetch          | Web         |
| `save_memory`            | SaveMemory        | Memory      |
| `write_todos`            | WriteTodos        | Planning    |
| `enter_plan_mode`        | Enter Plan Mode   | Planning    |
| `exit_plan_mode`         | Exit Plan Mode    | Planning    |
| `ask_user`               | Ask User          | Interaction |
| `activate_skill`         | Activate Skill    | Skills      |
| `get_internal_docs`      | GetInternalDocs   | Docs        |
| `tracker_create_task`    | Create Task       | Tracker     |
| `tracker_update_task`    | Update Task       | Tracker     |
| `tracker_get_task`       | Get Task          | Tracker     |
| `tracker_list_tasks`     | List Tasks        | Tracker     |
| `tracker_add_dependency` | Add Dependency    | Tracker     |
| `tracker_visualize`      | Visualize Tracker | Tracker     |

## Viewing Tools in the CLI

To see which tools are currently available:

```
/tools
```

To include descriptions:

```
/tools desc
```

This shows all registered tools from the tool registry, including any [MCP tools](https://docs.tabnine.com/main/getting-started/tabnine-cli/features/mcp-server-config) and [subagents](https://docs.tabnine.com/main/getting-started/tabnine-cli/features/subagents) you have configured.

## Tool Configuration

### Auto-Approval

By default, tools that modify files or execute commands require user confirmation. Read-only tools (read, search, list, glob) execute automatically.

To auto-approve specific tools, use the `tools.allowed` setting:

```json
{
  "tools": {
    "allowed": [
      "run_shell_command(git)",
      "run_shell_command(npm test)",
      "write_file"
    ]
  }
}
```

For shell commands, you can narrow approval to specific command prefixes by using the `run_shell_command(prefix)` syntax.

{% hint style="info" %}
You can also change the approval mode during a session using `Ctrl+Y` to cycle between Default, Auto-Edit, and Plan modes. See [Keyboard Shortcuts](https://docs.tabnine.com/main/getting-started/tabnine-cli/features/keyboard-shortcuts) for the full list.
{% endhint %}

### Restricting Tools

To restrict which built-in tools are available:

```json
{
  "tools": {
    "core": ["read_file", "grep_search", "list_directory", "glob"],
    "exclude": ["run_shell_command"]
  }
}
```

* `tools.core` — Allowlist of built-in tool names. Only these tools are loaded.
* `tools.exclude` — Denylist of tool names to remove.

### Tool Settings Reference

| Setting                                   | Type       | Default | Description                                                                                                                                                         |
| ----------------------------------------- | ---------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `tools.shell.enableInteractiveShell`      | `boolean`  | `true`  | Use node-pty for an interactive shell. Falls back to `child_process` if unavailable.                                                                                |
| `tools.shell.showColor`                   | `boolean`  | `false` | Show color in shell output.                                                                                                                                         |
| `tools.shell.pager`                       | `string`   | `"cat"` | Pager command for shell output.                                                                                                                                     |
| `tools.shell.inactivityTimeout`           | `number`   | `300`   | Max seconds without output before shell times out (5 minutes).                                                                                                      |
| `tools.shell.enableShellOutputEfficiency` | `boolean`  | `true`  | Enable shell output efficiency optimizations.                                                                                                                       |
| `tools.useRipgrep`                        | `boolean`  | `true`  | Use ripgrep for `grep_search`. Falls back to built-in grep if disabled or unavailable.                                                                              |
| `tools.enableWebTools`                    | `boolean`  | `false` | Enable the `google_web_search` tool.                                                                                                                                |
| `tools.enableWebFetchTool`                | `boolean`  | `false` | Enable the `web_fetch` tool.                                                                                                                                        |
| `tools.enableRemoteCodeSearch`            | `boolean`  | `true`  | Enable Tabnine Remote Code Search MCP server.                                                                                                                       |
| `tools.enableCoaching`                    | `boolean`  | `true`  | Enable Tabnine Coaching Guidelines MCP server.                                                                                                                      |
| `tools.truncateToolOutputThreshold`       | `number`   | `40000` | Truncate tool output exceeding this many characters. First 20% and last 80% are kept.                                                                               |
| `tools.searchOutputLimitEnabled`          | `boolean`  | `true`  | Limit search tool result size.                                                                                                                                      |
| `tools.searchMaxChars`                    | `number`   | `50000` | Max characters from search tools.                                                                                                                                   |
| `tools.disableLLMCorrection`              | `boolean`  | `true`  | Disable LLM-based error correction for the `replace` tool. When true, edits fail immediately if the exact string isn't found instead of attempting self-correction. |
| `tools.allowed`                           | `string[]` | —       | Tool names that bypass the confirmation dialog.                                                                                                                     |
| `tools.core`                              | `string[]` | —       | Restrict built-in tools to this allowlist.                                                                                                                          |
| `tools.exclude`                           | `string[]` | —       | Tool names to exclude entirely.                                                                                                                                     |
| `experimental.plan`                       | `boolean`  | `true`  | Enable Plan Mode (`enter_plan_mode` / `exit_plan_mode`).                                                                                                            |
| `experimental.taskTracker`                | `boolean`  | `false` | Enable experimental task tracker tools.                                                                                                                             |

{% hint style="info" %}
Tools that modify files or run shell commands always ask for confirmation before performing the action, unless auto-approved via `tools.allowed` or the approval mode is set to YOLO or Auto-Edit.
{% endhint %}
