--- title: "Installing Plugins" sidebarTitle: "Installing Plugins" description: "Install plugins from file URLs, npm, git, or local sources using the CLI or programmatically." --- The Cline CLI provides a `plugin install` command to install plugins from various sources. You can also load plugins programmatically via session config. ## CLI Installation Use the `cline plugin install` command to install plugins from file URLs, npm, git repositories, or local paths. ```sh cline plugin install [options] ``` The shorthand `cline plugin i` works as well. ### Install from a File URL ```sh cline plugin install https://github.com/cline/cline/blob/main/sdk/examples/plugins/weather-metrics.ts cline plugin install https://raw.githubusercontent.com/cline/cline/main/sdk/examples/plugins/weather-metrics.ts ``` Installs a single `.ts` or `.js` plugin file from an HTTPS URL. GitHub `blob` URLs are normalized to raw file downloads automatically. ### Install from npm ```sh cline plugin install --npm @scope/plugin-name ``` Installs the package from the npm registry into the Cline plugin directory. ### Install from Git ```sh cline plugin install --git https://github.com/owner/repo.git cline plugin install --git github.com/owner/repo ``` Clones the repository (shallow, with blobless filter for speed) and installs its dependencies. The `.git` directory is excluded from the final install. ### Install from Local Source ```sh cline plugin install ./path/to/plugin.ts # Single file cline plugin install /absolute/path/to/dir # Directory with package.json ``` Supports both files and directories. Local installs copy the source, filter out `.git` and `node_modules`, and run `npm install` to resolve dependencies. ### Options | Option | Description | |--------|-------------| | `--npm` | Treat the source as an npm package name | | `--git` | Treat the source as a git repository URL | | `--force` | Overwrite an existing plugin at the same path | | `--json` | Output results as JSON (useful for scripting) | | `--cwd` | Install to `/.cline/plugins` and resolve relative local paths from `` | ### Examples ```sh # Install a local plugin directory cline plugin install ./my-custom-plugin # Install a single plugin file from GitHub cline plugin install https://github.com/cline/cline/blob/main/sdk/examples/plugins/weather-metrics.ts # Install an npm package as a plugin cline plugin install --npm @cline/plugin-sql # Install from a GitHub repo cline plugin install --git https://github.com/my-org/my-plugin.git # Force reinstall an existing plugin cline plugin install --force --npm @scope/plugin-name # Use shorthand cline plugin i --git github.com/owner/repo ``` ### Listing Installed Plugins Installed plugins appear in the `plugins` section of your CLI config: ```sh cline config ``` ### Find All Your Plugins from your file system Project-scoped plugins live in the `.cline/plugins/` folder at your workspace root. The CLI auto-discovers plugins from this folder when you run Cline in that project. ```text your-project/ ├── .cline/ │ └── plugins/ │ ├── my-plugin.ts │ └── another-plugin/ └── ... ``` To add a single-file plugin to a project, install it with `--cwd`: ```sh cline plugin install https://github.com/owner/repo/blob/main/plugins/my-plugin.ts --cwd . ``` Global plugins are discovered from `~/.cline/plugins/`, and Cline may also discover plugins from the system Plugins folder. Use `--cwd .` when you want plugins to stay with a specific project. ## Programmatic Installation ### Using `pluginPaths` (ClineCore) In SDK code, load plugins from file paths using the `pluginPaths` session config option: ```typescript import { ClineCore } from "@cline/sdk" const cline = await ClineCore.create({ clientName: "my-app" }) await cline.start({ config: { systemPrompt: "Analyze this project", // ...model/runtime config pluginPaths: ["/absolute/path/to/plugin.ts"], }, }) ``` Plugin files must export an `AgentPlugin` as the default export. `pluginPaths` also accepts a package directory -- the SDK reads `package.json` and follows the `cline.plugins` entries, so you can `npm install` once inside a package and iterate without re-running `cline plugin install` on every edit. ### Using `plugins` (Agent Runtime) When using the `Agent` or `AgentRuntime` directly, pass plugin instances in the `plugins` array: ```typescript import { Agent } from "@cline/sdk" import { myPlugin } from "./my-plugin" const agent = new Agent({ providerId: "anthropic", modelId: "claude-sonnet-4-6", plugins: [myPlugin], }) ``` ### Using `extensions` (ClineCore) With `ClineCore`, use the `extensions` config array instead: ```typescript import { ClineCore } from "@cline/sdk" const cline = await ClineCore.create({ clientName: "my-app" }) await cline.start({ config: { systemPrompt: "Analyze customer records", extensions: [myPlugin], }, }) ``` ## Next Steps - **Learn about [Plugins](/sdk/plugins)** — Understand what plugins are and their benefits. - **Follow the [Writing Plugins](/sdk/guides/writing-plugins) guide** — Build and distribute your own plugin. - Explore [Plugin Examples](/sdk/plugin-examples) to install ready-to-run plugin examples from the SDK repository.