# Extensions

Tabnine CLI includes an extensions system that lets you install external packages which define tools, contexts, or workflows for the agent. Extensions are stored locally and can be enabled, disabled, listed, updated, or removed through the CLI.

An extension typically provides:

* One or more tools, such as integrations with third-party APIs, file systems, or local utilities.
* Context definitions that tell the agent how to use these tools in specific scenarios.
* Optional commands or workflows exposed through the agent.

The overall goal is to be compatible with existing extension ecosystems that use a similar structure, while preserving Tabnine’s naming and branding.

### **Extension structure** <a href="#extension-structure" id="extension-structure"></a>

Each extension is installed into a dedicated directory under your Tabnine configuration, for example: `~/.tabnine/extensions/<extension-name>/`. Within the extension directory, you will usually find a manifest file and possibly a guide/readme file.

### **Installing and uninstalling extensions** <a href="#installing-and-uninstalling-extensions" id="installing-and-uninstalling-extensions"></a>

You manage extensions using the tabnine extensions command group. Common operations include:

* Installing a new extension from a registry, repository, or URL.
* Uninstalling an extension that you no longer need.
* Updating one or more extensions to their latest compatible versions.

```
# Install an extension from a Git repository or local path
tabnine extensions install <source> [--ref <ref>] [--auto-update] [--pre-release]
# Uninstall one or more extensions 
tabnine extensions uninstall <name...>
```

* `<source>`: Git URL or local path.
* `--ref`: Branch, tag, or commit to install.
* `--auto-update`: Enable automatic updates for this extension.
* `--pre-release`: Allow installation of pre‑release versions.

When you install an extension, the CLI clones or downloads the extension source into your local extensions directory.

It will validate the manifest and configuration (such as `tabnine-extension.json`), then convert metadata and documentation to Tabnine’s expected format where applicable. Finally, it will install or prepare any tool-specific dependencies the extension declares.

Uninstalling removes the local extension directory and unregisters its tools and commands from the agent.

### **Managing and inspecting extensions** <a href="#managing-and-inspecting-extensions" id="managing-and-inspecting-extensions"></a>

Once you have one or more extensions installed, you can conduct several tasks:

#### Enable or disable extensions without uninstalling them: <a href="#enable-or-disable-extensions-without-uninstalling-them" id="enable-or-disable-extensions-without-uninstalling-them"></a>

```
# Disable an extension (globally or per scope, if supported)
tabnine extensions disable <name> [--scope <scope>]
# Re‑enable a disabled extension
tabnine extensions enable <name> [--scope <scope>]
```

* `<name>`: Extension name.
* `--scope`: Scope such as `user` or `workspace` (if supported).

#### Listing, updating, and inspecting extensions <a href="#listing-updating-and-inspecting-extensions" id="listing-updating-and-inspecting-extensions"></a>

Where supported, the CLI can also help you explore a curated list of community extensions that are compatible with the Tabnine Agent, allowing you to discover and install them directly.

You can also display details for a specific extension, including version and description, provided tools or subagents, and known configuration options.

```
# List all installed extensions and their status
tabnine extensions list
# Show detailed information about an extension
tabnine extensions detail <name>
# Update a specific extension
tabnine extensions update <name>
# Update all installed extensions
tabnine extensions update --all
```

### **Compatibility with existing extension ecosystems** <a href="#compatibility-with-existing-extension-ecosystems" id="compatibility-with-existing-extension-ecosystems"></a>

The Tabnine extension system is designed to be compatible with extensions defined using similar formats in other CLIs. When you install such an extension:

* Its metadata file is inspected and translated into `tabnine-extension.json` if necessary.
* Documentation files (for example, a generic README or another CLI’s guide file) are converted or mirrored into `TABNINE.md` so the agent can use them as a reference.
* Tool definitions are adjusted to use Tabnine’s naming and environment conventions.

This allows many existing extensions to work as-is or with minimal adaptation.


---

# 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/extensions.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.
