# 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](/main/getting-started/tabnine-cli/features/web-fetch.md) for details.

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

```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`](/main/getting-started/tabnine-cli/features/settings/settings-reference.md) 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](/main/getting-started/tabnine-cli/features/agent-skills.md) 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`](/main/getting-started/tabnine-cli/features/settings/settings-reference.md) (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**](/main/administering-tabnine/managing-your-team/context-engine/coaching-guidelines-v.md) — 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](/main/getting-started/tabnine-cli/features/mcp-server-config.md) and [subagents](/main/getting-started/tabnine-cli/features/subagents.md) 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](/main/getting-started/tabnine-cli/features/keyboard-shortcuts.md) 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 %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.tabnine.com/main/getting-started/tabnine-cli/features/built-in-tools.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
