搓了个给 Agent 用的 LSP 增强层,弥补 Claude Code 目前的代码理解短板

1 月 9 日
 observerw

最近高强度用各种 AI Coding Agent 写代码,发现一个挺无语的现象。现在的 Agent (包括最近很火的 Claude Code )查代码主要还是靠 grep/ripgrep 暴力搜索。小项目还好,代码一多,或者遇到复杂的跨模块引用,正则匹配根本搞不定。这就导致 Agent 想重构代码的时候唯唯诺诺,生怕改了一个文件把隔壁模块搞挂了。

虽然 Claude Code 官方也在推进 LSP 支持,但目前体验确实还差点意思。之前试过社区里的一些方案(像 Serena ,cclsp ),大多只是简单粗暴地把 LSP 原始 JSON 扔给 LLM 。这种做法最大的问题是费 Token 且慢,Agent 往往需要往返交互十几次才能搞懂一个函数的上下文。

实在受不了这个效率,就自己动手造了个轮子叫 lsp-skill

跟市面上其他简单的 LSP 包装器不同,lsp-skill 应该是目前唯一一个把“写操作”作为核心能力的方案。绝大多数竞品都停留在“只读”阶段(查查定义、找找引用),但 lsp-skill 支持完整的重构预览。这意味着 Agent 不再是瞎改,而是能像人一样,在重命名变量前先生成跨文件的 Diff 预览,确认无误了再下手。这点在维护大型遗留代码时非常关键。

另外一个比较独特的设计是它的扩展机制。通常 LSP 工具只懂语法不懂框架,但我们引入了基于 Markdown 的 Best Practices 系统。你不需要懂底层代码,只要写个 Markdown 文档,就能教 Agent 怎么处理 Django 的 View 或者 React 的 Hooks 。这种让社区通过文档来定义“代码导航策略”的做法,目前还没在其他工具里见到过。

这些特性加上它是完全为 LLM 优化的(输出 Markdown 而不是 JSON ),算是在“Agent Native”这个方向上走得比较远的一次尝试。

架构上为了稳,拆成了 lsp-client 处理底层脏活( Server 生命周期、多 Workspace 管理),中间层做协议转换,最上层通过 MCP 对接 Claude Code 或者 Cursor 。目前 Python, TS, Go, Rust, Deno 这些主流语言都已经支持了。

有兴趣的朋友可以玩玩看,如果是做 Agent 开发或者对 MCP 感兴趣的,也可以看看我们的 Protocol 设计,说不定能有点启发。

🔗 GitHub: https://github.com/lsp-client/lsp-skill 📄 文档: https://lsp-client.github.io/

1884 次点击
所在节点    分享创造
11 条回复
fusi
1 月 9 日
牛逼!下午就试一试
Oilybear
1 月 9 日
来支持了
shunia
1 月 9 日
1. 安装 skill ( codex 手动拷贝)
2. codex 用 gpt-5.2 + high ,项目是一个 javascript 的项目,给了 Agent 权限(可读写)
3. 输入 "用 lsp_skill 帮我读一下这个项目的代码,准备回答我的问题"
4. 中间一大堆“使用 lsp-cli 对渲染核心模块生成符号大纲需要语言服务器与本地 socket 通信,需提升权限运行。”,需要手动确认
5. 烧了 30%的 context ,似乎能用了
6. 持续提示 “使用 lsp-cli 对渲染核心模块生成符号大纲需要语言服务器与本地 socket 通信,需提升权限运行。”


我个人感觉似乎不太好用?
observerw
1 月 9 日
@shunia 可以把具体过程在 https://github.com/lsp-client/lsp-skill 中提一个 Issue 吗,非常感谢
lsk569937453
1 月 9 日
看来你没看过这个观点。Claude Code 核心工程师:「 Bash 即一切」,https://www.zhihu.com/question/1992208967498236682/answer/1992396321282357047
aminobody
1 月 9 日
我很好奇为什么现在主流的 vibe code 工具都没用 lsp 呢?
observerw
1 月 9 日
@lsk569937453 Anthropic 他们向来都是说一套做一套的🤣 MCP 是他们先提出的,bash 即一切也是他们提出的,有点左右脑互博了

此外,bash 即一切这个思想是好的,基于 Unix 哲学当然没什么问题;但这也是有前提的,那就是在 bash 中有好用的命令行工具。比如让 Agent 操作 GitHub 一般来说会使用 `gh` 命令行工具,而不是 “你必须通过 curl 请求 GitHub 的 API 端点“。

我这个项目就是基于这种思想来设计的。我提供给 Agent 的不是若干 LSP 工具,而是一个名为 `lsp` 的命令行工具( https://github.com/lsp-client/lsp-cli )。Agent 可以在 bash 中调用这个工具来探索代码仓库。我感觉这种设计还是比较符合 Bash 即一切的思想的,有兴趣欢迎来看看~
observerw
1 月 9 日
@aminobody 我老早就在想这个问题了🤣 Claude Code 早些时候非得嘴硬说 "grep 加上 LLM 的理解能力就已经足够强大了,不需要额外工具“,结果现在还不是在做 LSP 支持(而且做的还不是很好)
vonfry
1 月 9 日
observerw
1 月 9 日
@vonfry 谢邀,我还是做了竞品调研的😎 Serena 提供的 LSP 能力局限于搜索引用定义之类的,比较有局限性;相较而言我这个项目能做的事情就更多,而且能够轻易的持续扩展,可以说比 Serena 要强大的多,具体请看 https://github.com/lsp-client/LSAP 中的设计理念部分
fsneak
1 月 30 日
要不要评价下 augment 的 augment context engine

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1184202

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX