Clojure Tools for CoPilot
这也是一个适用于Calva的MCP服务器。
(本README的部分内容由Claude Sonnet编写。如有营销语言,请谅解,我将进行清理。)
这是一个用于Calva(Clojure/ClojureScript的VS Code扩展)的语言模型扩展,使AI助手能够利用REPL的强大功能。
此扩展通过VS Code语言模型API直接向CoPilot提供AI工具,并且可以通过可选的MCP服务器向任何AI助手/代理提供这些工具。
请注意,对于编辑工具,没有UI来审查编辑。建议使用源代码控制工具来审查AI编辑活动。
为了防止大型REPL评估结果淹没代理的上下文窗口,Backseat Driver会自动限制返回结果的大小:
calva-backseat-driver.evaluation.maxLength(默认值 25)——集合中显示的最大项数。使用 0 可禁用长度限制。calva-backseat-driver.evaluation.maxDepth(默认值 7)——最大嵌套深度;更深的结构将被替换为 ##。使用 0 可禁用深度限制。插入和替换顶层形式的结构化编辑工具尊重两个Backseat Driver编辑器设置:
calva-backseat-driver.editor.fuzzyLineTargetingPadding(默认值 2)——在匹配目标文本时,AI允许扫描请求行两侧的行数。如果在较大的重构过程中形式移动,请增加此值;设置为 0 可实现精确行定位。权衡:较高的值容忍行位移,但增加了代理缓冲区过期时匹配附近相似形式的风险。calva-backseat-driver.editor.lineContextResponsePadding(默认值 10)——当目标定位失败时,返回的故障排除片段中包含的请求行两侧的行数。减少此值以保持响应较短,或增加它以获得更多的周围上下文。权衡:较大的值为代理提供了更多重试线索,但可能会额外消耗令牌(或时间)。“我希望CoPilot不仅能猜测代码可能做什么,还能实际运行我的Clojure代码。”
Calva Backseat Driver通过赋予AI编码助手访问您的REPL的能力,将其从静态代码生成器转变为交互式编程伙伴。(在开始使用之前,请务必考虑其影响。)
厌倦了那些编写的Clojure代码看起来合理但在运行时崩溃的AI工具?Calva Backseat Driver让您的AI助手能够:
作为Clojure开发者,我们知道REPL不仅仅是一个控制台——它是我们的工作流程中心。现在,您的AI助手可以加入这个工作流程,理解数据和函数实际上是如何存在的,而不仅仅是它们在静态代码中的样子。
对于默认设置下的CoPilot,系统提示可以通过CoPilot指令、聊天模式和提示提供。在Awesome Copilot存储库中有Clojure CoPilot Starter Pack指令包。我推荐使用Awesome Copilot Joyride Script快速搜索和找到Clojure相关内容。
以下是我用来取得良好效果的一次性实现提示,其中代理会在REPL上反复尝试直到有一个计划,并与我验证该计划,然后实施:
/记住交互式编程 [问题和任务描述(可以相当简略)]
请:
1. 浏览代码并使用REPL理解[模型需要理解的内容]
2. 与我验证对任务的理解
3. 制定评价代码变更的标准,“数据导向、最小、聚焦明确的变更”最重要,决定什么是一个10/10评分
4. 与我验证标准
5. 使用REPL迭代更改计划,直到达到10/10标准
6. 使用REPL验证计划
7. 与我验证计划
8. 使用结构化编辑工具实施
我将其与交互式编程聊天模式一起使用。最佳模型是gpt-5-codex和claude-sonnet-4.5。可以看到,它从一个提示开始(我称之为微提示,非常小,但很有影响力),关于记住交互式编程。并且确保在上下文中包含一些相关的代码文件,因为这会让CoPilot收集正确的指令文件(通用Clojure指令、项目Clojure指令以及我的偏好等)。

此仓库已激活讨论。请使用它来分享经验和提示。
由于评估Clojure代码可能存在风险,MCP服务器默认禁用评估,因此您可以使用服务器执行其他操作。在VS Code设置中搜索Backseat Driver以启用它。
请注意,这里有多层安全模型。此服务器启动时评估能力被禁用,合规的MCP服务器将默认处于低信任模式,并在每次LLM想要使用工具时询问您的确认。如果您在Calva MCP设置中启用了工具,并配置了AI客户端允许其无须询问即可使用,则全开YOLO模式将被启用。
MCP服务器作为一个普通的套接字服务器在VS Code扩展主机中运行,在启动时写入端口文件。然后,MCP客户端需要启动一个stdio中继/代理/包装器。包装器脚本接受端口或端口文件作为参数。由于这些和其他原因,每个工作区将有一个Calva Backseat Driver,端口文件将写入工作区根目录下的.calva目录。
1664。如果不可用,则使用随机的高可用端口号。calva-backseat-driver.mcpSocketServerPort来配置尝试的第一个端口。使用 0 可使用随机的高可用端口号。这将创建一个端口文件:${workspaceFolder}/.calva/mcp-server/port
当服务器启动时,会显示一个确认对话框。该对话框有一个按钮,可以让您将启动stdio包装器的命令复制到剪贴板。

Backseat Driver是一个按项目的MCP服务器,因此应该在项目级别进行配置,如果使用的助手支持的话。
stdio脚本的参数。如果您的MCP客户端不支持项目级别的配置。对不起,这有点混乱。很明显,MCP还比较新,创建MCP时可能没有考虑到项目级别的MCP服务器。我已经尽力理解和应对这些限制,并尽可能提供配置性和用户体验。
Cursor支持项目级别的配置。
在项目中的.cursor/mcp.json添加一个"backseat-driver"条目如下所示:
{
"mcpServers": {
"backseat-driver": {
"command": "node",
"args": [
"<用户主配置目录中calva-mcp-server.js的绝对路径>",
"<指向项目中.calva/mcp-server/port的端口文件的绝对路径>"
]
}
}
}
上述所需的两个绝对路径可以通过点击启动MCP服务器时显示的复制命令按钮方便地确定,然后按照上面的配置部分所述粘贴到mcp.json文件中。
Cursor会检测服务器配置并提供启动选项。
您可能希望查阅Cursor MCP文档。
Windsurf可以通过其MCP服务器使用Backseat Driver。然而,这有点笨拙。Windsurf不支持工作区级别的MCP服务器配置,因此它们只能是全局的。这意味着:
stdio命令的参数Windsurf的配置文件与Cursor的形状相同,位于:~/.codeium/windsurf/mcp_config.json(至少在我的机器上是这样)。
Windsurf的AI助手不知道它的MCP配置,并且会不断尝试为CoPilot创建MCP配置。这是愚蠢的,因为它不会为Windsurf工作,而且CoPilot不需要它。
笨拙:即使设置了MCP服务器自动启动,Windsurf在启动时通常比MCP服务器更快地刷新其MCP服务器。您可能需要在Windsurf中刷新工具。然而,Windsurf似乎无法很好地处理超过一次的刷新。它只是不断地旋转刷新按钮。
重要:Windsurf默认情况下使用MCP工具而不征求用户的同意。这对于Backseat Driver的四个工具中的三个来说是可以的,但对于REPL工具来说不太理想。我认为一些Windsurf用户应该报告这种不符合MCP规范的问题。
Claude Desktop不在VS Code中运行,也没有其他项目/工作区的概念,所以您将使用全局配置。应用程序有一个按钮可以找到其配置文件。配置使用端口作为stdio命令的参数可能是最简单的。
{
"mcpServers": {
"backseat-driver": {
"command": "node",
"args": [
"<用户主配置目录中calva-mcp-server.js的绝对路径>",
"1664"
]
}
}
}
似乎没有方法刷新/重新加载服务器信息,因此如果您在Claude之后启动了Backseat Driver MCP服务器,您可能需要重启Claude以便刷新。
请为其他AI客户端添加配置!🙏
所有工具都可以在聊天中引用:
#clojure-eval#replace-top-level-form#insert-top-level-form#balance-brackets#clojure-create-file#append-code#clojure-symbol#clojuredocs#calva-outputflowchart TD
subgraph InteractiveProgrammers["交互式程序员"]
User([您])
AIAgent([AI代理])
User <--> AIAgent
end
subgraph VSCode["VS Code"]
MCP["Calva Backseat Driver"]
subgraph Calva["Calva"]
REPLClient["REPL客户端"]
end
subgraph Project["Clojure项目"]
subgraph RunningApp["运行的应用程序"]
SourceCode["源代码"]
REPL["REPL"]
end
end
end
User --> SourceCode
User --> Calva
REPLClient --> REPL
AIAgent --> SourceCode
AIAgent --> MCP
MCP --> Calva
classDef users fill:#ffffff,stroke:#63b132,stroke-width:1px,color:#63b132;
classDef programmers fill:#63b132,stroke:#000000,stroke-width:2px,color:#ffffff;
classDef vscode fill:#0078d7,stroke:#000000,stroke-width:1px,color:#ffffff;
classDef calva fill:#df793b,stroke:#ffffff,stroke-width:1px,color:#ffffff;
classDef highlight fill:#ffffff,stroke:#000000,stroke-width:1px,color:#000000;
classDef dark fill:#333333,stroke:#ffffff,stroke-width:1px,color:#ffffff;
classDef repl fill:#5881d8,stroke:#ffffff,stroke-width:1px,color:#ffffff;
classDef running fill:#63b132,stroke:#ffffff,stroke-width:1px,color:#ffffff;
classDef project fill:#888888,stroke:#ffffff,stroke-width:1px,color:#ffffff;
class User,AIAgent users;
class VSCode vscode;
class Calva,MCP calva;
class REPLClient repl;
class Project project;
class SourceCode dark;
class RunningApp running;
class REPL repl;
class InteractiveProgrammers programmers;
Calva Backseat Driver实现了Model Context Protocol(MCP),在AI助手和您的REPL之间建立桥梁。
一些项目/工具可以补充Backseat Driver,或者替代它:
这都是非常早期的、基础的和实验性的。
请告诉我们您希望看到哪些功能。
欢迎贡献!无论是问题、PR还是其他。在提交PR之前,我们希望您先提交一个问题说明要解决的问题。您也可以在开始工作前讨论这个问题。
欢迎您通过以下链接展示您喜欢我的工作: