From 9930911aca006dab9be08e0ab870a10c30ece219 Mon Sep 17 00:00:00 2001 From: Ignacio Marmolejo Date: Mon, 23 Mar 2026 10:01:19 -0700 Subject: [PATCH] Add cline_acp --- doc/configuration/adapters-acp.md | 9 +++ doc/index.md | 3 +- lua/codecompanion/adapters/acp/cline_cli.lua | 64 ++++++++++++++++++++ lua/codecompanion/config.lua | 1 + 4 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 lua/codecompanion/adapters/acp/cline_cli.lua diff --git a/doc/configuration/adapters-acp.md b/doc/configuration/adapters-acp.md index b54a7c0c4..4284c19eb 100644 --- a/doc/configuration/adapters-acp.md +++ b/doc/configuration/adapters-acp.md @@ -308,6 +308,15 @@ require("codecompanion").setup({ }) ``` +## Setup: Cline CLI + +To use [Cline CLI](https://cline.bot/cli) within CodeCompanion, you'll need to take the following steps: + +1. [Install](https://docs.cline.bot/getting-started/installing-cline#cli) Cline CLI. +2. Authenticate by running `cline auth`. +3. Select the `cline_cli` adapter in your chat buffer + + ## Setup: Codex To use OpenAI's [Codex](https://openai.com/codex/), install an ACP-compatible adapter like [this](https://github.com/zed-industries/codex-acp) one from [Zed](https://zed.dev). diff --git a/doc/index.md b/doc/index.md index 62a0f6cfc..9d8f65987 100644 --- a/doc/index.md +++ b/doc/index.md @@ -21,7 +21,7 @@ CodeCompanion is a Neovim plugin which enables you to code with AI, using LLMs a - :speech_balloon: [Copilot Chat](https://github.com/features/copilot) meets [Zed AI](https://zed.dev/blog/zed-ai), in Neovim - :zap: Integrates Neovim with LLMs and Agents in the CLI - :electric_plug: Support for LLMs from Anthropic, Copilot, GitHub Models, DeepSeek, Gemini, Mistral AI, Novita, Ollama, OpenAI, Azure OpenAI, HuggingFace and xAI out of the box (or bring your own!) -- :robot: Support for [Agent Client Protocol](https://agentclientprotocol.com/overview/introduction), enabling coding with agents like [Augment Code](https://docs.augmentcode.com/cli/overview), [Cagent](https://github.com/docker/cagent) from Docker, [Claude Code](https://docs.anthropic.com/en/docs/claude-code/overview), [Codex](https://openai.com/codex), [Copilot CLI](https://github.com/features/copilot/cli), [Gemini CLI](https://github.com/google-gemini/gemini-cli), [Goose](https://block.github.io/goose/), [Cursor CLI](https://cursor.com/docs/cli/overview), [Kimi CLI](https://github.com/MoonshotAI/kimi-cli), [Kiro](https://kiro.dev/cli/), [Mistral Vibe](https://github.com/mistralai/mistral-vibe) and [OpenCode](https://opencode.ai) +- :robot: Support for [Agent Client Protocol](https://agentclientprotocol.com/overview/introduction), enabling coding with agents like [Augment Code](https://docs.augmentcode.com/cli/overview), [Cagent](https://github.com/docker/cagent) from Docker, [Claude Code](https://docs.anthropic.com/en/docs/claude-code/overview), [Cline CLI](https://docs.cline.bot/home), [Codex](https://openai.com/codex), [Copilot CLI](https://github.com/features/copilot/cli), [Gemini CLI](https://github.com/google-gemini/gemini-cli), [Goose](https://block.github.io/goose/), [Cursor CLI](https://cursor.com/docs/cli/overview), [Kimi CLI](https://github.com/MoonshotAI/kimi-cli), [Kiro](https://kiro.dev/cli/), [Mistral Vibe](https://github.com/mistralai/mistral-vibe) and [OpenCode](https://opencode.ai) - :heart_hands: User contributed and supported [adapters](/configuration/adapters-http#community-adapters) - :battery: Support for [Model Context Protocol (MCP)](/model-context-protocol) - :rocket: [Inline transformations](/usage/inline.html), code creation and refactoring @@ -47,6 +47,7 @@ CodeCompanion uses [HTTP](configuration/adapters-http) and [ACP](configuration/a - Augment Code (`auggie_cli`) - Requires an API key - Cagent (`cagent`) - Claude Code (`claude_code`) - Requires an API key or a Claude Pro subscription +- Cline CLI (`cline_cli`) - Codex (`codex`) - Requires an API key - Copilot (`copilot`) - Requires a token which is created via `:Copilot setup` in [Copilot.vim](https://github.com/github/copilot.vim) - Gemini CLI (`gemini_cli`) - Requires an API key or a Gemini Pro subscription diff --git a/lua/codecompanion/adapters/acp/cline_cli.lua b/lua/codecompanion/adapters/acp/cline_cli.lua new file mode 100644 index 000000000..bdad98e0a --- /dev/null +++ b/lua/codecompanion/adapters/acp/cline_cli.lua @@ -0,0 +1,64 @@ +local helpers = require("codecompanion.adapters.acp.helpers") + +---@class CodeCompanion.ACPAdapter.ClineCLI: CodeCompanion.ACPAdapter +return { + name = "cline_cli", + formatted_name = "Cline CLI", + type = "acp", + roles = { + llm = "assistant", + user = "user", + }, + opts = { + vision = true, + }, + commands = { + default = { + "cline", + "--acp", + }, + }, + defaults = { + mcpServers = {}, + timeout = 20000, -- 20 seconds + -- mode = "plan", -- Optional: Set default agent mode (e.g., "plan", "act") + }, + parameters = { + protocolVersion = 1, + clientCapabilities = { + fs = { readTextFile = true, writeTextFile = true }, + }, + clientInfo = { + name = "CodeCompanion.nvim", + version = "1.0.0", + }, + }, + handlers = { + ---@param self CodeCompanion.ACPAdapter + ---@return boolean + setup = function(self) + return true + end, + + ---Manually handle authentication + ---@param self CodeCompanion.ACPAdapter + ---@return boolean + auth = function(self) + return true + end, + + ---@param self CodeCompanion.ACPAdapter + ---@param messages table + ---@param capabilities table + ---@return table + form_messages = function(self, messages, capabilities) + return helpers.form_messages(self, messages, capabilities) + end, + + ---Function to run when the request has completed. Useful to catch errors + ---@param self CodeCompanion.ACPAdapter + ---@param code number + ---@return nil + on_exit = function(self, code) end, + }, +} diff --git a/lua/codecompanion/config.lua b/lua/codecompanion/config.lua index 2e7f6bfbc..4fec64ecf 100644 --- a/lua/codecompanion/config.lua +++ b/lua/codecompanion/config.lua @@ -39,6 +39,7 @@ local defaults = { auggie_cli = "auggie_cli", cagent = "cagent", claude_code = "claude_code", + cline_cli = "cline_cli", codex = "codex", cursor_cli = "cursor_cli", copilot_acp = "copilot_acp",