AI coding agent 找上下文时,最常见的浪费不是“不会搜索”,而是每次都要重新推导代码结构。它先 grep 一个函数名,打开几个文件,再追 import、调用方、测试和相邻模块。这个过程能跑通,但很容易把 token 花在机械定位上。更麻烦的是,agent 看到的是文本片段,不一定真正知道谁调用谁、一次修改会影响哪里、这个项目惯用什么写法。

今天想记下的 luuuc/sense,就是为这个缝隙做的本地工具。它不是编辑器,也不是新的 agent runtime,而是一个给 AI coding agent 使用的 MCP server 和 CLI。Sense 会在本机索引代码库,用 tree-sitter 提取 symbol、call、import、inheritance 等关系,再把这些结构通过四个工具交给 Claude Code、Cursor、Codex CLI、OpenCode 或其他 MCP client:sense_graphsense_searchsense_blastsense_conventions

按 GitHub repository API、README、Releases page、Tags page、commit history、languages API 和 LICENSE 在 2026-07-14 能核验的公开信息,luuuc/sense 当前有 21 stars1 fork。仓库主语言是 Go,许可证是 MIT。仓库创建于 2026-04-17 18:19:50 UTC,最近 push 是 2026-07-14 09:15:21 UTC。默认分支 main 当前最新提交是 ae5976b,提交时间 2026-07-14 09:15:19 UTC。GitHub Releases 页和 Tags 页当前最新版本都是 v1.11.25,release 发布时间为 2026-07-14 09:23:38 UTC

项目概览

属性详情
仓库luuuc/sense
定位面向 AI coding agent 的本地代码结构索引、MCP server 和 CLI
Stars21
Forks1
主语言Go
许可证MIT
仓库创建时间2026-04-17 18:19:50 UTC
最近 push2026-07-14 09:15:21 UTC
最新 main 提交ae5976b,2026-07-14 09:15:19 UTC
Latest GitHub releasev1.11.25,2026-07-14 09:23:38 UTC
最新 tagv1.11.25
核心入口curl -fsSL https://luuuc.github.io/sense/install.sh | shsense scansense setup
关键词MCP、tree-sitter、symbol graph、semantic search、blast radius、conventions、local-first

结构问题应该交给结构工具

Sense README 里有一句很能说明它的目标:agent 拥有代码文本,但没有地图。一个人类工程师问“谁调用这个函数”,脑子里其实会先切换到结构视角;而 agent 如果只有 grep 和 file read,就会把结构问题拆成大量文本检索。Sense 试图把这层结构预先算好。

它暴露的四个工具也比较克制。sense_graph 处理 symbol relationship、caller、callee、inheritance、tests、dead code;sense_search 做 hybrid semantic code search,并带 keyword / text fallback;sense_blast 看 blast radius、affected code、affected tests 和 risk score;sense_conventions 从源码里检测项目约定。对 coding agent 来说,这比丢一个巨大 grep 输出更容易使用,因为每类问题有明确入口。

我最看重的是 sense_blastsense_conventions。前者回答“改这里会碰到哪里”,后者回答“这个项目通常怎么写”。很多 AI 生成代码的问题并不是语法错,而是写得不像这个仓库:命名、层次、framework idiom、test 放置位置都略微偏掉。Sense 把 convention detection 当成一等能力,这个角度比单纯做搜索更有意思。

本地索引,不把仓库交给外部服务

安装路径很直接:

curl -fsSL https://luuuc.github.io/sense/install.sh | sh
cd /path/to/project && sense scan
cd /path/to/project && sense setup

README 写得很清楚:Sense 在本机解析代码,用 bundled ONNX model 做 embedding,把索引写到本地 .sense/。它不要求 SaaS account、API key 或 cloud dependency。对公司代码库来说,这一点很实际。很多团队愿意让本地 agent 读仓库,但不愿意把整个 codebase 传给外部代码搜索服务。

setup 的动作也值得注意。它会自动检测 Claude Code、Cursor、Codex CLI、OpenCode 等工具,写入对应的 MCP 配置,比如 .mcp.json.cursor/mcp.json.codex/config.tomlopencode.json,并可以写入 CLAUDE.md.cursorrulesAGENTS.md 等 routing guidance。这有点强势,因为它会碰 agent 指令文件;但从产品目标看也合理:如果 agent 不知道什么时候该用结构工具,它很快又会退回 grep 加乱读文件。

采用时我会先在小仓库里跑一次 sense setup,看它具体改了哪些文件,再决定是否把这些配置提交进项目。工具本身是本地的,但它对工作流有明确意见,不是一个完全无痕的 grep 替代品。

支持面是工程化的,而不是 demo 式的

Sense 的 README 列出两层语言支持。核心 tier 覆盖 Go、JavaScript、TypeScript、TSX、Ruby、Swift、Lua、Bash、Zsh 等;standard tier 覆盖 Python、Rust、Java、Kotlin、C#、C++、C、PHP、Scala 等结构能力。它的仓库语言 API 显示 Go 代码量最大,同时还有 Python、Shell、Dockerfile、Makefile。对一个 21 stars 的项目来说,这个实现面不算薄。

README 还给出了一组 benchmark 描述:在若干真实代码库上,Sense 让 agent 更少读文件、少用 token、少跑 tool call。这里我不会把这些数字当成跨项目性能承诺,因为 benchmark 总有场景依赖;但它至少说明作者把问题定义为“减少 agent 为结构问题付出的重复成本”,而不是只做一个向量检索包装。

最新 release v1.11.25 也能看出维护重点。release note 说这版移除了 Go 大仓库里 interfaces × structs 的 500K budget 限制,让更大的 Go codebase 也能得到 implicit interface satisfaction edges。这个细节很工程化:不是泛泛宣传 AI,而是在补 code graph 的正确性和覆盖范围。

适合什么场景

第一类场景,是你经常让 agent 做跨文件修改,但发现它为了定位 caller、callee、测试和影响范围花太多回合。Sense 的 symbol graph 和 blast radius 正是为这类问题准备的。

第二类场景,是项目约定比语法本身更重要。比如 Rails association、Go interface、Django model、分层目录、命名习惯。sense_conventions 让 agent 在写代码前先看到项目惯例,而不是只靠一段 AGENTS.md 文字说明。

第三类场景,是你希望代码理解能力留在本机。Sense 的索引和模型都在本地,对私有仓库试验更容易接受。

第四类场景,是你同时使用多个 agent 客户端。Sense 不是只绑定某个编辑器插件,而是通过 MCP 和 CLI 暴露能力,适合 Claude Code、Codex CLI、Cursor、OpenCode 混用的环境。

需要注意的地方

第一,项目很年轻。21 stars、1 fork,仓库创建于 2026-04-17,虽然提交、release 和 tag 很活跃,但外部反馈还少。采用时最好固定版本,先在非关键仓库试。

第二,sense setup 会写 agent 配置和指令文件。这个体验方便,但团队项目里应该先看 diff,避免和已有 AGENTS.md、CLAUDE.md、Cursor rules 冲突。

第三,README 自己也说 Sense 不是通用搜索引擎。找日志字符串、配置键、错误码这类纯文本问题,plain grep 仍然更直接。Sense 更适合结构问题,而不是替代所有搜索。

第四,benchmark 数字只能当参考。代码库语言、规模、agent 类型、任务分布都会影响结果。真正要判断价值,应该拿自己的项目跑几类常见任务对比。

总结

Sense 的有趣之处在于,它没有把 AI coding 的问题简单归结为“模型再强一点”。它承认 agent 在大仓库里缺的是一张可查询的本地结构图:谁调用谁,改哪里会影响哪里,项目惯例是什么,哪些搜索该走语义,哪些该回到文本。

如果你已经在用 Codex CLI、Claude Code、Cursor 或 OpenCode,并且经常看到 agent 为了理解代码关系反复 grep、读文件、再 grep,luuuc/sense 值得放进试验清单。它还很小,但方向清楚:把 codebase understanding 放回本地,用结构化工具减少 agent 的盲读成本。