Skip to main content
Glama
  • :rocket: Serena 是一个强大的编码代理工具包,能够将 LLM 转变为直接在您的代码库上工作的全功能代理。

  • :wrench: Serena 提供了类似于 IDE 功能的基本语义代码检索和编辑工具,可以在符号级别提取代码实体并利用关系结构。

  • :free: Serena 是免费且开源的,可增强您已经可以免费使用的 LLM 的功能。

示范

以下是 Serena 使用 Claude Desktop 实现一个小功能(更好的日志 GUI)的演示。请注意 Serena 的工具如何帮助 Claude 查找和编辑正确的符号。

https://github.com/user-attachments/assets/6eaa9aa1-610d-4723-a2d6-bf1e487ba753

LLM 整合

Serena 提供了编码工作流所需的工具,但需要 LLM 来完成实际工作并协调工具的使用。

Serena 可以通过多种方式与 LLM 相结合:

  • 通过使用模型上下文协议(MCP)
    Serena 提供了一个 MCP 服务器,它集成了

    • 克劳德桌面,

    • VSCode、Cursor 或 IntelliJ 等 IDE,

    • 像 Cline 或 Roo Code 这样的扩展

    • Goose(提供良好的 CLI 体验)

    • 以及许多其他应用,包括即将推出的 ChatGPT 应用

  • 通过使用Agno——与模型无关的代理框架
    Serena 基于 Agno 的代理允许您将几乎任何 LLM 转变为编码代理,无论它是由 Google、OpenAI 或 Anthropic 提供的(带有付费 API 密钥),还是由 Ollama、Together 或 Anyscale 提供的免费模型。

  • 通过将 Serena 的工具整合到您选择的代理框架中。
    Serena 的工具实现与特定于框架的代码分离,因此可以轻松适应任何代理框架。

编程语言支持和语义分析能力

Serena 的语义代码分析功能基于语言服务器,并使用广泛实施的语言服务器协议 (LSP)。LSP 提供了一套基于符号式代码理解的多功能代码查询和编辑功能。凭借这些功能,Serena 可以像经验丰富的开发人员使用 IDE 的功能一样发现和编辑代码。即使在非常庞大复杂的项目中,Serena 也能高效地找到正确的上下文并执行正确的操作!因此,它不仅免费开源,而且通常比现有的收费解决方案取得更好的效果。

语言服务器支持多种编程语言。借助 Serena,我们提供

  • 直接、开箱即用的支持:

    • Python

    • TypeScript/JavaScript

    • 网页

    • Go(需要先安装go和gopls)

    • C/C++

    • Java(注意:启动速度很慢,尤其是初次启动时。Java 在 macos 上似乎存在问题)

  • 间接支持(可能需要一些代码更改/手动安装):

    • Ruby(未经测试)

    • C#(未经测试)

    • Kotlin(未经测试)

    • Dart(未经测试)

    这些语言由 Serena 内部使用的语言服务器库multilspy支持。但我们尚未明确测试这些语言的支持是否真的有效。

原则上,通过为新的语言服务器实现提供浅层适配器,可以轻松支持更多语言。

目录

Related MCP server: Nabu + Nisaba

我可以使用 Serena 来做什么?

您可以使用 Serena 执行任何编码任务——无论是专注于分析、规划、设计新组件还是重构现有组件。由于 Serena 的工具允许 LLM 完成认知感知-行动循环,因此基于 Serena 的代理可以从头到尾自主执行编码任务——从初始分析到实现、测试,以及最终的版本控制系统提交。

Serena 可以读取、写入和执行代码,读取日志和终端输出。虽然我们并不鼓励这种做法,但“氛围编码”绝对是可行的。如果您想要一种“代码仿佛不存在”的感觉,那么 Serena 甚至比 IDE 中的代理更适合氛围编码(因为您将拥有一个独立的 GUI,让您真正忘记一切)。

Serena 的免费编码代理

即使是 Anthropic 的 Claude 免费版也支持 MCP 服务器,因此您可以免费将 Serena 与 Claude 一起使用。据推测,一旦添加对 MCP 服务器的支持,ChatGPT Desktop 也很快将实现同样的功能。
通过 Agno,您还可以选择将 Serena 与自由/开放重量模型一起使用。

Serena 是Oraios AI对开发者社区的贡献。
我们自己也经常使用它。

我们厌倦了支付多个基于 IDE 的订阅费用(例如 Windsurf 或 Cursor),这迫使我们在已有的聊天订阅费用之外不断购买代币。Claude Code、Cline、Aider 等基于 API 的工具所产生的高额 API 费用同样令人难以接受。因此,我们构建了 Serena,并设定了可以取消大多数其他订阅的条件。

快速入门

Serena 可以以多种方式使用,下面您将找到针对所选集成的说明。

  • 如果您只是想将 Claude 变成免费使用的编码代理,我们建议您通过 Claude Desktop 使用 Serena。

  • 如果您想使用 Gemini 或任何其他型号,并且想要 GUI 体验,则应该使用Agno 。在 macOS 上,您还可以使用goose的 GUI。

  • 如果您更喜欢通过 CLI 使用 Serena,可以使用goose 。同样,几乎任何模型都是可行的。

  • 如果您想使用集成在 IDE 中的 Serena,请参阅有关其他 MCP 客户端的部分。

设置和配置

  1. 安装uv此处有说明)

  2. 将存储库克隆到/path/to/serena

  3. serena_config.template.yml复制到serena_config.yml并调整设置。

    cp serena_config.template.yml serena_config.yml
  4. project.template.yml复制到project.yml并根据你的项目调整相应的设置(为每个希望 Serena 运行的项目添加一个这样的文件)。我们建议你将其复制到项目的.serena目录中,例如:

    mkdir -p /myproject/.serena
    cp project.template.yml /myproject/.serena/project.yml
  5. 如果您希望 Serena 在项目之间动态切换,请将上一步中创建的所有项目文件列表添加到serena_config.yml中的projects列表中。

⚠️注意: Serena 正在积极开发中。我们不断添加功能,提升稳定性和用户体验。因此,配置可能会发生重大变化。如果您的配置无效,MCP 服务器或基于 Serena 的代理可能无法启动(前者请检查 MCP 日志)。更新 Serena 时,请查看更新日志和配置模板,并相应地调整您的配置。

初始设置完成后,根据您想要使用 Serena 的方式,继续以下某一部分。

MCP 服务器(Claude 桌面)

  1. 为您的项目创建一个配置文件,例如基于myproject.template.yml中的模板的myproject.yml

  2. 在您的客户端中配置 MCP 服务器。
    对于Claude Desktop (适用于 Windows 和 macOS),请前往“文件 / 设置 / 开发者 / MCP 服务器 / 编辑配置”,打开 JSON 文件claude_desktop_config.json 。添加以下内容(调整路径)以启用 Serena:

    {
        "mcpServers": {
            "serena": {
                "command": "/abs/path/to/uv",
                "args": ["run", "--directory", "/abs/path/to/serena", "serena-mcp-server", "--project", "/abs/path/to/project"]
            }
        }
    }

    :info: 如果您在配置中设置了enable_project_activation ,则传递项目文件是可选的,因为此设置将允许您简单地指示 Claude 激活您想要处理的项目。

    • 对于Claude Desktop (如上所示),Serena 的默认上下文( desktop-app )和模式(例如interactiveediting )通常适合一般用途。通常不需要在args中明确指定它们,除非您想覆盖默认值。

    • 对于IDE 集成(例如 VSCode、Cursor、Cline 等,通过添加 Serena 作为 MCP 服务器进行配置),您应该通过在 MCP 客户端配置的args中添加"--context", "ide-assistant"来显式传递ide-assistant上下文。您还可以根据需要指定初始模式(例如"--mode", "editing" )。

    • 对于跨任何客户端的特定一次性任务(例如,在单次交互中生成报告或计划),您可能希望指示 Serena(一旦连接)使用switch_modes工具切换到planningone-shot模式,或者如果直接为此类任务配置服务器启动命令,则通过--mode标志进行初始设置。

    有关可用选项和自定义的更多详细信息,请参阅模式和上下文部分。

    如果您在 Windows 上使用包含反斜杠的路径(请注意,您也可以使用正斜杠),请确保正确转义它们( \\ )。

就这样!保存配置,然后重新启动 Claude Desktop。

故障排除

据报道,在使用标准stdio协议(MCP 服务器由客户端应用程序启动)的 Serena 时,某些客户端/操作系统/设置配置会导致问题。如果您遇到此类问题,可以通过运行以下命令以sse模式启动 Serena:

uv run --directory /path/to/serena serena-mcp-server --transport sse --port 9121 --project /path/to/project

--project选项是可选的)。然后配置您的客户端以连接到http://localhost:9121

注意:Windows 和 macOS 上有 Anthropic 的官方 Claude Desktop 应用程序,Linux 上有一个开源社区版本

⚠️ 请务必完全退出 Claude 桌面应用程序,因为关闭 Claude 只会将其最小化到系统托盘 - 至少在 Windows 上是这样。

重新启动后,您应该会在聊天界面中看到 Serena 的工具(请注意小锤子图标)。

⚠️ 工具名称:Claude Desktop(以及大多数 MCP 客户端)不解析服务器名称。因此,您不应该使用类似“使用 Serena 的工具”之类的说法。相反,您可以指示 LLM 使用符号工具,或者通过引用其名称来使用特定工具。此外,如果您使用多个 MCP 服务器,可能会遇到工具名称冲突,从而导致未定义的行为。例如,由于工具名称冲突,Serena 目前与Filesystem MCP 服务器不兼容。

ℹ️ 请注意,就客户端/服务器架构而言,使用 stdio 作为协议的 MCP 服务器有些不寻常,因为服务器必须由客户端启动才能通过服务器的标准输入/输出流进行通信。换句话说,您无需自行启动服务器。客户端应用程序(例如 Claude Desktop)会负责此操作,因此需要使用启动命令进行配置。

有关带有 Claude Desktop 的 MCP 服务器的更多信息,请参阅官方快速入门指南

克劳德·科德

Serena 是让 Claude Code 更便宜、更强大的好方法!我们正在为此收集一些示例,目前收到了非常积极的反馈。Claude Code 用户可以使用 Serena

claude mcp add serena -- /path/to/uv "run" --directory /path/to/serena serena-mcp-server --project-file /path/to/project

其他 MCP 客户 - Cline、Roo-Code、Cursor、Windsurf 等。

作为 MCP 服务器,Serena 可以集成到任何 MCP 客户端中。使用与上述相同的配置,只需根据客户端的具体情况进行少量修改即可。大多数现有的热门编码助手(IDE 扩展或类似 VSCode 的 IDE)都支持连接到 MCP 服务器。我们建议使用ide-assistant上下文进行这些集成,方法是在 MCP 客户端配置的args中添加"--context", "ide-assistant" 。集成 Serena 通常可以通过提供符号操作工具来提升性能。

在这种情况下,使用计费仍由您选择的客户端控制(与 Claude Desktop 客户端不同)。但您可能仍希望通过这种方式使用 Serena,例如,出于以下原因之一:

  1. 您已经在使用编码助手(例如 Cline 或 Cursor),只是想让它更强大。

  2. 您使用的是 Linux,但不想使用社区创建的 Claude Desktop

  3. 您希望将 Serena 更紧密地集成到您的 IDE 中,并且不介意为此付费

与使用 Serena for Claude Desktop 相同的考虑(特别是工具名称冲突)也适用于此。

当在内置 AI 交互的 IDE 或扩展程序中使用 Serena 时(实际上,所有 IDE 或扩展程序都内置了 AI 交互功能),Serena 的全套工具可能会与客户端内部工具发生不必要的交互,而这些交互对于用户来说可能难以控制。编辑工具尤其如此,您可能需要为此禁用这些工具。随着我们在各种热门客户端中使用 Serena 的经验不断积累,我们将收集并改进最佳实践,以提供流畅的体验。

goose是一款独立的编码代理,它集成了 MCP 服务器,并提供命令行界面 (CLI)(在 macOS 上还提供图形用户界面 (GUI))。目前,使用 goose 是通过命令行界面运行 Serena 并结合您选择的 LLM 最简单的方法。

按照此处的说明进行安装。

之后,使用goose configure添加扩展。要添加 Serena,请选择Command-line Extension选项,将其命名为Serena ,并添加以下命令:

/abs/path/to/uv run --directory /abs/path/to/serena serena-mcp-server --project /optional/abs/path/to/project

由于 Serena 可以执行所有必要的编辑和命令操作,因此您应该禁用 Goose 默认启用的developer扩展。为此,请执行

goose configure

再次选择选项Toggle Extensions ,并确保已选择 Serena 已启用而未选择developer

就是这样。仔细阅读 goose 的配置选项,看看你能用它做什么(功能很多,比如为工具执行设置不同级别的权限)。

Goose 似乎并不总是能在会话结束时正确终止 MCP 服务器的 Python 进程。您可能需要在完成 Goose 的工作后禁用 Serena GUI 和/或手动清理所有正在运行的 Python 进程。

不明特工

Agno 是一个与模型无关的代理框架,它允许您将 Serena 转换为一个独立于 MCP 技术且拥有大量底层 LLM 的代理。Agno 是目前在聊天 GUI 中运行 Serena 并使用您选择的 LLM 的最简单方法(除非您使用的是 Mac,否则您可能更喜欢 Goose,它几乎不需要任何设置)。

虽然 Agno 尚未完全稳定,但我们还是选择了它,因为它自带开源 UI,可以直接通过聊天界面使用代理。有了 Agno,Serena 就变成了一个代理(不再是 MCP 服务器),因此可以以编程方式使用(例如用于基准测试或在您的应用程序中使用)。

它的工作原理如下(另请参阅Agno 的文档):

  1. 使用 npx 下载 agent-ui 代码

    npx create-agent-ui@latest

    或者,手动克隆它:

    git clone https://github.com/agno-agi/agent-ui.git
    cd agent-ui 
    pnpm install 
    pnpm dev
  2. 安装 serena 并满足可选要求:

    # You can also only select agno,google or agno,anthropic instead of all-extras
    uv pip install --all-extras -r pyproject.toml -e .
  3. .env.example复制到.env并填写您打算使用的提供商的 API 密钥。

  4. 使用以下命令启动 agno 代理应用程序

    uv run python scripts/agno_agent.py

    默认情况下,脚本使用 Claude 作为模型,但您可以选择 Agno 支持的任何模型(本质上是任何现有模型)。

  5. 在新终端中,使用以下命令启动 agno UI

    cd agent-ui 
    pnpm dev

    将 UI 连接到您之前启动的代理并开始聊天。您将拥有与 MCP 服务器版本相同的工具。

以下是 Serena 使用最新 Gemini 模型执行小型分析任务的简短演示:

https://github.com/user-attachments/assets/ccfcb968-277d-4ca9-af7f-b84578858c62

⚠️ 重要提示:与 MCP 服务器方法相比,Agno UI 中的工具执行无需用户许可。shell 工具尤其重要,因为它可以执行任意代码。虽然我们在使用 Claude 进行测试时从未遇到过此类问题,但允许此类操作可能并不完全安全。您可以选择在 Serena 项目的配置文件 ( .yml ) 中禁用某些工具。

其他代理框架

Agno 代理由于 Agno UI 而特别好,但可以轻松地将 Serena 合并到任何代理框架中(如pydantic-ailanggraph或其他)。

您只需编写一个 Serena 工具的适配器,将其与您选择的框架中的工具进行适配,就像我们在SerenaAgnoToolkit中为 agno 所做的那样。

Serena 的工具和配置

Serena 将语义代码检索工具与编辑功能和 Shell 执行功能相结合。Serena 的行为可以通过模式和上下文进一步自定义。完整的工具列表如下

通常建议使用所有工具,因为这可以让 Serena 提供最大的价值:只有通过执行 shell 命令(特别是测试),Serena 才能自主识别和纠正错误。

但是,需要注意的是, execute_shell_command工具允许任意代码执行。当使用 Serena 作为 MCP 服务器时,客户端通常会在执行工具之前请求用户权限,因此只要用户事先检查执行参数,这应该不会造成问题。但是,如果您有顾虑,可以选择在项目的 .yml 配置文件中禁用某些命令。如果您只想使用 Serena 进行代码分析和建议实现,而不修改代码库,则可以通过在项目配置文件中设置read_only: true来启用只读模式。这将自动禁用所有编辑工具并阻止对代码库的任何修改,同时仍然允许所有分析和探索功能。

一般来说,请务必备份您的工作并使用版本控制系统,以避免丢失任何工作。

与其他编码剂的比较

据我们所知,Serena 是第一个功能齐全的编码代理,其全部功能都可以通过 MCP 服务器获得,因此不需要 API 密钥或订阅。

基于订阅的编码代理

最突出的基于订阅的编码代理是 Windsurf、Cursor 和 VSCode 等 IDE 的一部分。Serena 的功能类似于 Cursor 的 Agent、Windsurf 的 Cascade 或 VSCode 即将推出的代理模式

Serena 的优点在于无需订阅。缺点在于它无法直接集成到 IDE 中,因此新编写的代码的检查不够流畅。

更多技术差异包括:

  • Serena 不绑定到特定的 IDE。Serena 的 MCP 服务器可以与任何 MCP 客户端(包括部分 IDE)配合使用,而基于 Agno 的代理则提供了更多应用其功能的方式。

  • Serena 不受特定的大型语言模型或 API 的约束。

  • Serena 使用语言服务器来导航和编辑代码,因此它能够以符号形式理解代码。基于 IDE 的工具通常使用基于 RAG 或纯文本的方法,这种方法通常功能较弱,尤其对于大型代码库而言。

  • Serena 是开源的,并且代码库很小,因此可以轻松扩展和修改。

基于 API 的编码代理

除了基于订阅的代理之外,还有基于 API 的代理,例如 Claude Code、Cline、Aider、Roo Code 等,它们的使用成本直接映射到底层 LLM 的 API 成本。其中一些代理(例如 Cline)甚至可以作为扩展程序包含在 IDE 中。它们通常非常强大,主要缺点是 API 成本(可能非常高)。

Serena 本身可以用作基于 API 的代理(请参阅上文关于 Agno 的部分)。我们尚未为 Serena 编写 CLI 工具或专用 IDE 扩展(而且后者可能也不需要,因为 Serena 已经可以与任何支持 MCP 服务器的 IDE 一起使用)。如果有像 Claude Code 那样需要 Serena 作为 CLI 工具的需求,我们会考虑编写一个。

Serena 与其他基于 API 的代理的主要区别在于,Serena 还可以用作 MCP 服务器,因此无需 API 密钥,从而避免了 API 成本。这是 Serena 独有的功能。

其他基于 MCP 的编码代理

还有其他专为编码而设计的 MCP 服务器,例如DesktopCommandercodemcp 。然而,据我们所知,它们均未提供语义代码检索和编辑工具;它们纯粹依赖于基于文本的分析。正是语言服务器与 MCP 的集成,使得 Serena 独具特色,并且在处理具有挑战性的编码任务时非常强大,尤其是在大型代码库的环境中。

入职和回忆

默认情况下,Serena 首次启动项目时会执行一个入门流程。该流程的目的是让 Serena 熟悉项目并积累经验,以便在未来的互动中运用。

记忆是存储在项目目录下.serena/memories/中的文件,代理可以选择读取这些文件。您可以根据需要随意读取和调整它们;您也可以手动添加新的记忆。.serena .serena/memories/目录下的每个文件都是一个记忆文件。

我们发现这些记忆显著提升了 Serena 的用户体验。Serena 会根据指令,在适当的时候创建新的记忆。

模式和上下文

Serena 的行为和工具集可以通过上下文模式进行调整。这些功能允许高度定制,以最适合您的工作流程和 Serena 的运行环境。

上下文

上下文定义了 Serena 运行的总体环境。它会影响初始系统提示符和可用工具集。上下文在 Serena 启动时设置(例如,通过 MCP 服务器的 CLI 选项或在代理脚本中设置),并且在活动会话期间无法更改。

Serena 带有预定义的上下文:

  • desktop-app :专为 Claude Desktop 等桌面应用程序定制。这通常是默认设置。

  • agent :专为 Serena 作为更自主的代理的场景而设计,例如与 Agno 一起使用时。

  • ide-assistant :针对集成到 VSCode、Cursor 或 Cline 等 IDE 进行了优化,专注于编辑器内编码辅助。

您应该选择最适合您的集成的上下文。

模式

模式进一步优化了 Serena 的行为,使其能够适应特定类型的任务或交互风格。多种模式可以同时启用,方便您组合使用。模式会影响系统提示,还可以通过排除某些工具来更改可用工具集。

内置模式的示例包括:

  • planning :让 Serena 专注于规划和分析任务。

  • editing :优化 Serena 以执行直接代码修改任务。

  • interactive :适合对话式、来回交互风格。

  • one-shot :配置 Serena 以执行应在一次响应中完成的任务,通常用于生成报告或初步计划的planning

  • no-onboarding :如果特定会话不需要,则跳过初始入职流程。

  • onboarding :(通常自动触发)专注于项目入职流程。

模式可以在启动时设置(类似于上下文),但也可以在会话期间动态切换。您可以指示 LLM 使用switch_modes工具来激活不同的模式(例如,“切换到规划模式和单次模式”)。

:warning:模式兼容性:虽然您可以组合使用不同模式,但某些模式可能在语义上不兼容(例如, interactiveone-shot )。Serena 目前无法阻止不兼容的组合;用户需要自行选择合理的模式配置。

自定义上下文和模式

您可以创建自己的上下文和模式,以精确定制 Serena 来满足您的需求:

  1. 添加到您的 Serena 克隆:在本地 Serena 仓库的config/contexts/config/modes/目录中创建新的.yml文件。这些自定义上下文/模式将自动注册,并可通过其文件名(不带.yml扩展名)使用。它们还将出现在可用上下文/模式列表中。

  2. 使用外部 YAML 文件:启动 Serena 时,您可以为上下文或模式提供自定义.yml文件的绝对路径。

上下文或模式 YAML 文件通常定义:

  • name :(如果使用文件名则为可选)上下文/模式的名称。

  • prompt :将合并到 Serena 系统提示中的字符串。

  • description :(可选)简要描述。

  • excluded_tools :当此上下文/模式处于活动状态时要禁用的工具名称(字符串)列表。

这种定制允许 Serena 深度集成并适应特定的项目要求或个人偏好。

与其他 MCP 服务器组合

通过 MCP 客户端使用 Serena 时,您可以将其与其他 MCP 服务器一起使用。但是,请注意工具名称冲突!请参阅上文相关信息。

目前,Serena 与流行的文件系统 MCP 服务器存在冲突。由于 Serena 也提供文件系统操作,因此可能无需同时启用这两个服务器。

关于使用 Serena 的建议

随着 Serena 社区的不断发展,我们将继续收集最佳实践。以下是我们在内部使用 Serena 时的一些经验总结。

这些建议中的大多数适用于任何编码代理,包括上面提到的所有代理。

选择哪种模型?

令我们惊讶的是,Serena 与 Claude 3.7 的非思考版本(而非思考版本)的配合效果似乎比其思考版本更好(我们尚未与 Gemini 进行广泛的比较)。思考版本耗时更长,工具使用起来更困难,而且经常会在没有阅读足够上下文的情况下直接编写代码。

在我们最初的实验中,Gemini 似乎运行良好。可惜的是,Gemini 还不支持 MCP(目前为止?),所以唯一的使用方式是通过 API 密钥。好的一面是,Gemini 相对便宜,而且可以处理很长的上下文长度。

入职

在第一次交互中,Serena 被要求进行入门培训并写入第一个记忆文件。有时(取决于 LLM 项目),这些文件不会写入磁盘。在这种情况下,只需让 Serena 写入记忆即可。

在此阶段,Serena 通常会读取和写入大量文本,从而填充上下文。我们建议您在完成引导后切换到另一个对话,以免令牌耗尽。除非您明确触发引导,否则引导只会执行一次。

入职后,我们建议您快速浏览一下这些记忆,并在必要时进行编辑或添加其他记忆。

编辑代码之前

最好从干净的 git 状态开始代码生成任务。这不仅能让你更轻松地检查更改,而且模型本身也有机会通过调用git diff查看更改内容,从而自行更正,或在需要时继续进行后续对话。

:warning:重要提示:由于 Serena 会使用系统原生的行尾写入文件,并且可能需要查看 git diff,因此在 Windows 上将git config core.autocrlf设置为true非常重要。如果在 Windows 上将git config core.autocrlf设置为false ,最终可能会因为行尾问题而产生巨大的 diff。通常,在 Windows 上启用以下 git 设置是个好主意:

git config --global core.autocrlf true

代码编辑中的潜在问题

根据我们的经验,LLM 的计数能力非常差,也就是说,它们很难将代码块插入到正确的位置。大多数编辑操作可以在符号级别执行,从而克服了这个问题。然而,有时行级插入也很有用。

Serena 被指示仔细检查行号和它将编辑的任何代码块,但如果遇到问题,您可能会发现明确告诉它如何编辑代码很有用。

脱离上下文

对于冗长复杂的任务,或者 Serena 已读取大量内容的任务,您可能会接近上下文标记的极限。在这种情况下,继续进行新的对话通常是个好主意。Serena 有一个专用工具,可以创建进度的当前状态摘要以及继续进行该任务所需的所有相关信息。您可以请求创建此摘要并将其写入内存。然后,在新的对话中,您可以直接让 Serena 读取内存并继续执行任务。根据我们的经验,这种方法非常有效。好的一面是,由于在单个会话中不涉及摘要,Serena 通常不会迷失方向(不像其他一些在后台进行摘要的代理),并且还会指示它偶尔检查是否在正确的轨道上。

此外,Serena 被指示要谨慎使用上下文(例如,不要不必要地读取代码符号主体),但我们发现 Claude 并不总是擅长于此(Gemini 似乎更擅长)。如果你知道它不需要读取代码符号主体,你可以明确地指示它不要读取。

控制工具执行

Claude Desktop 会在执行工具之前询问您。对于大多数工具,您可以放心地点击“允许本次聊天”,尤其是在所有文件都受版本控制的情况下。execute_shell_command 工具是一个例外 - 您可能需要单独检查每个execute_shell_command 。我们建议您检查每次调用此命令,而不是在整个聊天过程中都启用它。

构建你的代码库

Serena 使用代码结构来查找、读取和编辑代码。这意味着它能很好地处理结构良好的代码,但可能无法处理完全非结构化的代码(例如包含大量非模块化函数的 God-class)。类型注释在这里也大有帮助。你的代码越好,Serena 的效果就越好。因此,我们通常建议你编写结构良好、模块化且类型明确的代码——这不仅对你有帮助,对你的 AI 也同样有帮助 ;)。

日志记录、Linting 和测试

Serena 无法调试(据我们所知,目前没有编码助手可以做到这一点)。这意味着,为了改进代理循环中的结果,Serena 需要通过执行测试、运行脚本、执行 linting 等方式来获取信息。包含大量包含明确信息的日志消息并进行有意义的测试通常非常有帮助。尤其是后者,通常有助于代理进行自我纠正。

我们通常建议从所有 linting 检查和测试通过的状态开始编辑任务。

一般建议

我们发现,在实际执行任务之前,花一些时间进行概念化和规划通常是一个好主意,尤其是对于一些比较重要的任务。这不仅有助于取得更好的结果,还能增强掌控感,并保持进度。你可以在一个环节制定详细的计划,Serena 可能会阅读你的大量代码来构建上下文,然后在另一个环节继续执行(可能在建立合适的记忆之后)。

故障排除

Claude Desktop 中对 MCP 服务器的支持以及各种 MCP 服务器 SDK 是相对较新的开发,可能会出现不稳定性。

MCP 服务器的工作配置可能因平台和客户端而异。我们建议始终使用绝对路径,因为相对路径可能存在错误。语言服务器在单独的子进程中运行,并使用 asyncio 调用——有时客户端可能会导致其崩溃。如果您启用了 Serena 的日志窗口,而它消失了,您就会知道发生了什么。

一些客户端(如 goose)可能无法正确终止 MCP 服务器,请留意挂起的 python 进程并在需要时手动终止它们。

塞雷娜伐木公司

为了帮助您进行故障排除,我们编写了一个用于日志记录的小型 GUI 实用程序。对于大多数客户,我们建议您在遇到问题时通过项目配置 ( project.yml ) 启用它。许多客户还会编写 MCP 日志来帮助识别问题。

日志记录 GUI 可能无法在所有客户端和系统上运行。目前,它无法在 macOS 或 Cline 等 VSCode 扩展程序上运行。

致谢

我们在多种现有开源技术的基础上构建了 Serena,其中最重要的是:

  1. multilspy 。一个设计精美的封装器,遵循 LSP 规范,用于语言服务器。它无法轻松扩展 Serena 所需的符号逻辑,因此我们没有将其作为依赖项引入,而是复制了源代码并根据需求进行了调整。

  2. Python MCP SDK

  3. Agno和相关的agent-ui ,我们利用它们允许 Serena 与任何模型一起工作,除了支持 MCP 的模型。

  4. 我们通过 multilspy 使用的所有语言服务器。

如果没有这些项目,Serena 就不可能建成(或者说建造起来会困难得多)。

自定义 Serena

您可以根据自己的需求轻松扩展 Serena 的 AI 功能。只需继承serena.agent.Tool并实现apply方法(此方法不属于接口,请参阅Tool中的注释)即可实现一个新的 Tool。默认情况下, SerenaAgent将立即获得访问权限。

添加对新语言的支持也相对简单。我们期待看到社区的贡献!有关贡献的详细信息,请参阅此处

完整工具列表

以下是 Serena 工具的完整列表及其简短说明( uv run serena-list-tools的输出):

  • activate_project :按名称激活项目。

  • check_onboarding_performed :检查项目入职是否已完成。

  • create_text_file :在项目目录中创建/覆盖文件。

  • delete_lines :删除文件内的一定范围的行。

  • delete_memory :从 Serena 的项目特定记忆库中删除记忆。

  • execute_shell_command :执行shell命令。

  • find_referencing_code_snippets :查找引用给定位置的符号的代码片段。

  • find_referencing_symbols :查找引用给定位置的符号的符号(可选择按类型过滤)。

  • find_symbol :执行全局(或本地)搜索,查找具有/包含给定名称/子字符串的符号(可选择按类型过滤)。

  • get_active_project :获取当前活动项目的名称(如果有)并列出现有项目

  • get_current_config :打印代理的当前配置,包括活动模式、工具和上下文。

  • get_symbols_overview :获取给定文件或目录中定义的顶级符号的概述。

  • initial_instructions :获取当前项目的初始说明。仅应在无法设置系统提示的设置中使用,例如在您无法控制的客户端中,例如 Claude Desktop。

  • insert_after_symbol :在给定符号定义结束后插入内容。

  • insert_at_line :在文件的给定行插入内容。

  • insert_before_symbol :在给定符号定义的开始之前插入内容。

  • list_dir :列出给定目录中的文件和目录(可选递归)。

  • list_memories :列出 Serena 项目特定记忆库中的记忆。

  • onboarding :执行入职培训(确定项目结构和基本任务,例如测试或构建)。

  • prepare_for_new_conversation :提供准备新对话的说明(以便继续必要的上下文)。

  • read_file :读取项目目录中的文件。

  • read_memory :从 Serena 的项目特定内存存储中读取具有给定名称的内存。

  • replace_lines :用新内容替换文件中的一系列行。

  • replace_symbol_body :替换符号的完整定义。

  • restart_language_server :重新启动语言服务器,当不通过 Serena 进行编辑时可能需要重新启动。

  • search_for_pattern :在项目中执行模式搜索。

  • summarize_changes :提供总结代码库所做更改的说明。

  • switch_modes :通过提供名称列表来激活模式

  • think_about_collected_information :用于思考所收集信息完整性的思考工具。

  • think_about_task_adherence :用于确定代理是否仍在按计划执行当前任务的思考工具。

  • think_about_whether_you_are_done :用于判断任务是否真正完成的思考工具。

  • write_memory :将命名内存(供将来参考)写入 Serena 的项目特定内存存储。

Available Tools

29 tools
activate_projectActivate ProjectB
Read-only

Activates the project with the given name or path.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectYesThe name of a registered project to activate or a path to a project directory.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=true and destructiveHint=false, which the description does not contradict. The description adds minimal behavioral context by implying activation of a project, but it doesn't elaborate on effects like environment changes or permissions needed. With annotations covering safety, the description provides some value but not rich behavioral details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that directly states the tool's function without unnecessary words. It is front-loaded and wastes no space, making it highly concise and well-structured for quick understanding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (activation operation), high schema coverage, annotations, and the presence of an output schema, the description is reasonably complete. It covers the basic action but could benefit from more context on outcomes or integration with sibling tools, though the structured data reduces the burden on the description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, clearly documenting the 'project' parameter. The description adds no additional meaning beyond the schema, such as examples or constraints, but since the schema is comprehensive, a baseline score of 3 is appropriate as the description doesn't compensate unnecessarily.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('activates') and the resource ('the project with the given name or path'), making the purpose specific and understandable. However, it does not differentiate this tool from sibling tools like 'switch_modes' or 'get_current_config', which might relate to project state changes, so it doesn't fully distinguish from alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives, such as 'switch_modes' or 'get_current_config', nor does it mention prerequisites like needing a registered project. It lacks explicit when/when-not instructions or named alternatives, leaving usage context unclear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_onboarding_performedCheck Onboarding PerformedA
Read-only

Checks whether project onboarding was already performed. You should always call this tool before beginning to actually work on the project/after activating a project.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=true and destructiveHint=false, which the description aligns with by implying a non-destructive check. The description adds value by specifying the tool's role in workflow sequencing (before work/after activation), but doesn't provide additional behavioral details like error handling or output interpretation beyond what annotations cover.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core purpose followed by usage guidelines. Every word serves a clear function, with no redundancy or unnecessary elaboration, making it highly efficient and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 0 parameters, annotations covering safety (read-only, non-destructive), and an output schema (implied by context signals), the description is reasonably complete. It explains what the tool does and when to use it, though it could benefit from hinting at the output's meaning (e.g., boolean result or status details) to fully compensate for lack of output schema explanation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has 0 parameters with 100% schema description coverage, so no parameter documentation is needed. The description doesn't mention parameters, which is appropriate. A baseline of 4 is applied since no parameters exist, and the description focuses correctly on the tool's purpose and usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Checks whether project onboarding was already performed.' It specifies the verb ('checks') and resource ('project onboarding'), making the intent unambiguous. However, it doesn't explicitly differentiate from sibling tools like 'onboarding' or 'activate_project', which might have overlapping contexts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage guidelines: 'You should always call this tool before beginning to actually work on the project/after activating a project.' This gives clear timing and context for when to use it, including a reference to the sibling tool 'activate_project' as a related action.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_text_fileCreate Text FileA
Destructive

Write a new file or overwrite an existing file. Returns a message indicating success or failure.

ParametersJSON Schema
NameRequiredDescriptionDefault
relative_pathYesThe relative path to the file to create.
contentYesThe (appropriately encoded) content to write to the file.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint=true and readOnlyHint=false, but the description adds valuable context by specifying that it can 'overwrite an existing file' and returns 'success or failure' messages. This clarifies the destructive nature beyond the annotation and provides outcome expectations, though it doesn't mention permissions, rate limits, or file encoding details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description consists of two tightly focused sentences that efficiently convey the core functionality and outcome. Every word serves a purpose with zero redundancy, and the information is front-loaded with the primary action stated immediately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the destructive nature indicated by annotations, the presence of an output schema, and 100% parameter coverage, the description provides adequate context. It covers the tool's primary behavior and outcome expectations, though it could benefit from mentioning encoding requirements or error scenarios for a more complete picture.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema description coverage, the input schema fully documents both parameters. The description doesn't add any parameter-specific information beyond what's in the schema, so it meets the baseline score of 3. No additional semantic context is provided for 'relative_path' or 'content' parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Write a new file or overwrite an existing file') and resource ('file'), distinguishing it from sibling tools like 'read_file' or 'replace_content'. It precisely communicates both creation and overwrite capabilities in a single concise statement.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for file creation/overwriting but provides no explicit guidance on when to use this tool versus alternatives like 'replace_content' or 'write_memory'. It mentions the tool's behavior but doesn't specify scenarios where it's preferred over other file manipulation tools in the sibling list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_memoryDelete MemoryA
Destructive

Delete a memory file. Should only happen if a user asks for it explicitly, for example by saying that the information retrieved from a memory file is no longer correct or no longer relevant for the project.

ParametersJSON Schema
NameRequiredDescriptionDefault
memory_file_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint=true and readOnlyHint=false, which cover the core safety profile. The description adds valuable context beyond this by emphasizing the need for explicit user consent and providing rationale examples, which helps the agent understand the gravity of the operation. It doesn't detail error conditions or output behavior, but with annotations present, this is sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences that are front-loaded with the core action and immediately followed by critical usage guidelines. Every word serves a purpose, with no redundancy or fluff, making it highly efficient and easy to parse for an AI agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's destructive nature, the description effectively complements the annotations by stressing user consent and providing examples. With an output schema present, it doesn't need to explain return values. The combination of clear purpose, strong guidelines, and annotations makes this description sufficiently complete for safe agent use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage, with only one parameter ('memory_file_name') documented structurally. The description doesn't add any parameter-specific information, such as format examples or constraints. However, with a single parameter and the tool's clear purpose, the baseline of 3 is appropriate as the schema alone provides minimal but adequate coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Delete') and resource ('a memory file'), making the purpose immediately understandable. It distinguishes from sibling tools like 'edit_memory', 'read_memory', and 'write_memory' by specifying deletion rather than modification or retrieval. However, it doesn't explicitly contrast with 'list_memories' or other file-related tools beyond the verb itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use this tool: 'only if a user asks for it explicitly', with concrete examples ('information retrieved from a memory file is no longer correct or no longer relevant for the project'). This clearly defines the appropriate context and helps the agent avoid misuse, especially given the destructive nature implied by the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

edit_memoryEdit MemoryA
Destructive

Replaces content matching a regular expression in a memory.

ParametersJSON Schema
NameRequiredDescriptionDefault
memory_file_nameYesThe name of the memory.
needleYesThe string or regex pattern to search for. If `mode` is "literal", this string will be matched exactly. If `mode` is "regex", this string will be treated as a regular expression (syntax of Python's `re` module, with flags DOTALL and MULTILINE enabled).
replYesThe replacement string (verbatim).
modeYesEither "literal" or "regex", specifying how the `needle` parameter is to be interpreted.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and destructiveHint=true, indicating this is a mutation tool with destructive potential. The description adds useful context about regex matching behavior (Python re module with DOTALL/MULTILINE flags) and the replacement being verbatim, which goes beyond annotations. However, it doesn't mention error conditions, side effects, or what happens when no match is found.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the core functionality ('Replaces content matching a regular expression in a memory'). Every word earns its place with no redundancy or unnecessary elaboration.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (regex editing with destructive potential), the description provides adequate context when combined with rich annotations and a complete input schema. However, it could benefit from mentioning the existence of an output schema (which handles return values) and providing more behavioral context about edge cases. The combination of description, annotations, and schema is mostly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema description coverage, all parameters are well-documented in the schema itself. The description doesn't add significant semantic information beyond what's already in the parameter descriptions, which thoroughly explain memory_file_name, needle (with mode-specific behavior), repl, and mode. The baseline of 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Replaces content') on a specific resource ('in a memory') using a specific method ('matching a regular expression'). It distinguishes from siblings like 'replace_content' (general file replacement) and 'write_memory' (full overwrite) by specifying regex-based partial editing of memory files.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for regex-based editing of memory content, but doesn't explicitly state when to use this vs alternatives like 'replace_content' for non-memory files or 'write_memory' for complete overwrites. It provides clear context about the operation type but lacks explicit exclusion guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

execute_shell_commandExecute Shell CommandA
Destructive

Execute a shell command and return its output. If there is a memory about suggested commands, read that first. Never execute unsafe shell commands! IMPORTANT: Do not use this tool to start

  • long-running processes (e.g. servers) that are not intended to terminate quickly,

  • processes that require user interaction. Returns a JSON object containing the command's stdout and optionally stderr output.

ParametersJSON Schema
NameRequiredDescriptionDefault
commandYesThe shell command to execute.
cwdNoThe working directory to execute the command in. If None, the project root will be used.
capture_stderrNoWhether to capture and return stderr output.
max_answer_charsNoIf the output is longer than this number of characters, no content will be returned. -1 means using the default value, don't adjust unless there is no other way to get the content required for the task.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint=true and readOnlyHint=false, but the description adds valuable behavioral context beyond this: it warns against unsafe commands, specifies output truncation behavior via max_answer_chars, mentions checking memory first, and describes the JSON return structure. This provides important safety and operational guidance that annotations alone don't cover.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized and front-loaded with the core purpose, followed by important warnings and return format details. While some sentences could be more concise (e.g., the warning about long-running processes is slightly verbose), overall it's efficient with each sentence serving a clear purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (destructive shell command execution), rich annotations (destructiveHint=true), complete schema coverage, and existence of an output schema, the description provides excellent contextual completeness. It covers safety warnings, usage constraints, memory integration, and output behavior, making it fully adequate for an AI agent to understand when and how to use this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema description coverage, the input schema already fully documents all 4 parameters. The description doesn't add any parameter-specific semantics beyond what's in the schema descriptions, so it meets the baseline expectation without providing additional value about parameter usage or interactions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('execute a shell command and return its output') and distinguishes it from siblings by focusing on command execution rather than file operations, memory management, or project configuration. It goes beyond just restating the name/title by specifying the return format and behavioral constraints.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when NOT to use this tool (for long-running processes or processes requiring user interaction) and references checking memory for suggested commands first. However, it doesn't explicitly name alternative tools for those excluded use cases or differentiate from similar tools like list_dir for directory operations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_fileFind FileA
Read-only

Finds non-gitignored files matching the given file mask within the given relative path. Returns a JSON object with the list of matching files.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_maskYesThe filename or file mask (using the wildcards * or ?) to search for.
relative_pathYesThe relative path to the directory to search in; pass "." to scan the project root.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, indicating a safe read operation. The description adds useful behavioral context by specifying 'non-gitignored files' (exclusion behavior) and the return format ('JSON object with the list of matching files'), but does not mention potential limitations like recursion depth or performance implications.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the core functionality and includes essential details (exclusion of gitignored files, return format) without any wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity, rich annotations (readOnlyHint, destructiveHint), 100% schema coverage, and presence of an output schema, the description is complete enough. It covers purpose, key behavioral trait (non-gitignored), and return format, leaving detailed parameter and output documentation to the structured fields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both parameters well-documented in the schema. The description adds minimal value beyond the schema by implying the search scope and exclusion of gitignored files, but does not provide additional syntax or format details for the parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Finds'), resource ('non-gitignored files'), and scope ('matching the given file mask within the given relative path'), distinguishing it from siblings like 'list_dir' (which lists directory contents) and 'search_for_pattern' (which searches file content).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool (searching for files by name/mask, excluding gitignored files), but does not explicitly state when not to use it or name alternatives like 'list_dir' for directory listing or 'search_for_pattern' for content search.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_referencing_symbolsFind Referencing SymbolsA
Read-only

Finds references to the symbol at the given name_path. The result will contain metadata about the referencing symbols as well as a short code snippet around the reference. Returns a list of JSON objects with the symbols referencing the requested symbol.

ParametersJSON Schema
NameRequiredDescriptionDefault
name_pathYesFor finding the symbol to find references for, same logic as in the `find_symbol` tool.
relative_pathYesThe relative path to the file containing the symbol for which to find references. Note that here you can't pass a directory but must pass a file.
include_kindsNoSame as in the `find_symbol` tool.
exclude_kindsNoSame as in the `find_symbol` tool.
max_answer_charsNoSame as in the `find_symbol` tool.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, indicating a safe read operation. The description adds useful behavioral context beyond annotations by specifying what the result contains (metadata about referencing symbols and short code snippets) and that it returns a list of JSON objects. However, it doesn't mention potential limitations like performance impacts or result size constraints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is efficiently structured in two sentences with zero waste. The first sentence states the core functionality and result format, while the second clarifies the return type. Every word contributes to understanding the tool's purpose and output.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of annotations (readOnlyHint, destructiveHint), 100% schema coverage, and an output schema (implied by 'Returns a list of JSON objects'), the description provides complete contextual information. It adequately explains what the tool does, what it returns, and references sibling tools where appropriate, making it sufficient for agent understanding.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema description coverage, the input schema already documents all 5 parameters thoroughly, including references to the 'find_symbol' tool for parameter behavior. The description doesn't add significant semantic information beyond what's in the schema, maintaining the baseline score of 3 for adequate but not enhanced parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb ('Finds references') and resource ('the symbol at the given name_path'), and distinguishes it from sibling tools by specifying it returns referencing symbols rather than finding symbols themselves. It explicitly mentions what the result contains (metadata and code snippets), making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context by mentioning the tool finds references to a symbol, suggesting it should be used when you need to know where a symbol is referenced. However, it doesn't explicitly state when to use this tool versus alternatives like 'find_symbol' or provide exclusion criteria, though the parameter descriptions reference 'find_symbol' for some parameters.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_symbolFind SymbolA
Read-only

Retrieves information on all symbols/code entities (classes, methods, etc.) based on the given name path pattern. The returned symbol information can be used for edits or further queries. Specify depth > 0 to also retrieve children/descendants (e.g., methods of a class).

A name path is a path in the symbol tree within a source file. For example, the method my_method defined in class MyClass would have the name path MyClass/my_method. If a symbol is overloaded (e.g., in Java), a 0-based index is appended (e.g. "MyClass/my_method[0]") to uniquely identify it.

To search for a symbol, you provide a name path pattern that is used to match against name paths. It can be

  • a simple name (e.g. "method"), which will match any symbol with that name

  • a relative path like "class/method", which will match any symbol with that name path suffix

  • an absolute name path "/class/method" (absolute name path), which requires an exact match of the full name path within the source file. Append an index [i] to match a specific overload only, e.g. "MyClass/my_method[1]". Returns a list of symbols (with locations) matching the name.

ParametersJSON Schema
NameRequiredDescriptionDefault
name_path_patternYesThe name path matching pattern (see above).
depthNoDepth up to which descendants shall be retrieved (e.g. use 1 to also retrieve immediate children; for the case where the symbol is a class, this will return its methods). Default 0.
relative_pathNoOptional. Restrict search to this file or directory. If None, searches entire codebase. If a directory is passed, the search will be restricted to the files in that directory. If a file is passed, the search will be restricted to that file. If you have some knowledge about the codebase, you should use this parameter, as it will significantly speed up the search as well as reduce the number of results.
include_bodyNoIf True, include the symbol's source code. Use judiciously.
include_kindsNoOptional. List of LSP symbol kind integers to include. (e.g., 5 for Class, 12 for Function). Valid kinds: 1=file, 2=module, 3=namespace, 4=package, 5=class, 6=method, 7=property, 8=field, 9=constructor, 10=enum, 11=interface, 12=function, 13=variable, 14=constant, 15=string, 16=number, 17=boolean, 18=array, 19=object, 20=key, 21=null, 22=enum member, 23=struct, 24=event, 25=operator, 26=type parameter. If not provided, all kinds are included.
exclude_kindsNoOptional. List of LSP symbol kind integers to exclude. Takes precedence over `include_kinds`. If not provided, no kinds are excluded.
substring_matchingNoIf True, use substring matching for the last element of the pattern, such that "Foo/get" would match "Foo/getValue" and "Foo/getData".
max_answer_charsNoMax characters for the JSON result. If exceeded, no content is returned. -1 means the default value from the config will be used.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows this is a safe read operation. The description adds valuable behavioral context beyond annotations: it explains that results can be used for edits, describes the matching logic (simple name, relative path, absolute path), mentions overload handling with indices, and notes performance considerations (using relative_path speeds up search). It does not contradict annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and front-loaded with the core purpose, followed by detailed explanations of name paths and patterns. While comprehensive, it is appropriately sized for a complex tool with many parameters. Some sentences could be more concise (e.g., the name path explanation is lengthy), but overall it avoids unnecessary repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (8 parameters, 100% schema coverage, annotations, and an output schema), the description is complete. It covers purpose, usage examples, behavioral nuances (like overload handling and performance tips), and does not need to explain return values since an output schema exists. It adequately complements the structured data without gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 8 parameters thoroughly. The description adds some semantic context for name_path_pattern (explaining patterns and examples) and depth (linking it to retrieving children), but most parameter details are already in the schema. This meets the baseline of 3 for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with specific verbs ('retrieves information on all symbols/code entities') and distinguishes it from siblings by focusing on symbol lookup rather than file operations (find_file), pattern searching (search_for_pattern), or symbol editing (rename_symbol, replace_symbol_body). It explicitly mentions what the returned information can be used for ('for edits or further queries'), which helps differentiate its role.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool (e.g., 'Specify `depth > 0` to also retrieve children/descendants') and implies alternatives through sibling tool names like find_file or search_for_pattern, but it does not explicitly state when not to use it or name specific alternatives. The guidance on using the relative_path parameter for speed and reduced results offers practical usage advice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_current_configGet Current ConfigA
Read-only

Print the current configuration of the agent, including the active and available projects, tools, contexts, and modes.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, covering safety. The description adds valuable context by specifying what configuration components are included (projects, tools, contexts, modes), which isn't inferable from annotations alone. However, it doesn't mention output format details or potential limitations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the core action ('Print the current configuration') and then enumerates included components. Every word adds value with zero redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (0 parameters, read-only, non-destructive), the description fully covers its purpose and scope. With annotations providing safety context and an output schema existing (so return values needn't be described), the description is complete for this low-complexity tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0 parameters and 100% schema description coverage, the baseline is 4. The description appropriately doesn't discuss parameters since none exist, avoiding unnecessary detail while clearly indicating the tool operates without inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Print') and the exact resource ('current configuration of the agent'), listing all included components (active/available projects, tools, contexts, modes). It distinguishes itself from siblings like 'get_symbols_overview' or 'list_memories' by focusing on overall agent configuration rather than specific data subsets.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when needing to inspect the agent's configuration state, but provides no explicit guidance on when to use this versus alternatives like 'check_onboarding_performed' or 'switch_modes'. It doesn't specify prerequisites, exclusions, or comparative contexts with sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_symbols_overviewGet Symbols OverviewA
Read-only

Use this tool to get a high-level understanding of the code symbols in a file. This should be the first tool to call when you want to understand a new file, unless you already know what you are looking for. Returns a JSON object containing info about top-level symbols in the file.

ParametersJSON Schema
NameRequiredDescriptionDefault
relative_pathYesThe relative path to the file to get the overview of.
depthNoDepth up to which descendants of top-level symbols shall be retrieved (e.g. 1 retrieves immediate children). Default 0.
max_answer_charsNoIf the overview is longer than this number of characters, no content will be returned. -1 means the default value from the config will be used. Don't adjust unless there is really no other way to get the content required for the task.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, indicating a safe read operation. The description adds valuable context beyond this by specifying that it returns 'a JSON object containing info about top-level symbols in the file,' which clarifies the output format. However, it doesn't mention potential limitations like rate limits or error conditions, leaving some behavioral aspects uncovered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is efficiently structured in three sentences: the first states the purpose, the second provides usage guidelines, and the third describes the return format. Each sentence adds essential value without redundancy, making it front-loaded and appropriately concise for the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity, rich annotations (readOnlyHint, destructiveHint), 100% schema coverage, and the presence of an output schema, the description is complete enough. It covers purpose, usage context, and output format, leaving detailed parameter and return value documentation to the structured fields, which is appropriate for this setup.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents all three parameters. The description adds no additional parameter semantics beyond what's in the schema (e.g., it doesn't explain 'relative_path' context or 'depth' implications further). This meets the baseline of 3 since the schema carries the full burden, but the description doesn't compensate with extra insights.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('get a high-level understanding of the code symbols in a file') and resource ('file'), distinguishing it from sibling tools like 'find_symbol' or 'read_file' by focusing on symbol overview rather than searching or raw content. It explicitly positions this as the first tool for understanding new files, making its purpose distinct and well-defined.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use this tool ('first tool to call when you want to understand a new file') and when not to ('unless you already know what you are looking for'), effectively differentiating it from alternatives like 'find_symbol' for targeted searches. This clear contextual advice helps the agent choose appropriately among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

initial_instructionsInitial InstructionsA
Read-only

Provides the 'Serena Instructions Manual', which contains essential information on how to use the Serena toolbox. IMPORTANT: If you have not yet read the manual, call this tool immediately after you are given your task by the user, as it will critically inform you!.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, indicating a safe read operation. The description adds that it provides 'essential information' and is 'critical' to inform the agent, which adds context about importance. However, it doesn't specify format, length, or structure of the manual content beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately concise with two sentences that each serve distinct purposes: stating what the tool provides and giving critical usage instructions. It's front-loaded with the core purpose, though the second sentence could be slightly more streamlined.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 0 parameters, annotations covering safety, and an output schema exists, the description provides adequate context about purpose and critical timing. It doesn't need to explain return values since output schema exists, but could optionally hint at manual content format for slightly better completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0 parameters and 100% schema description coverage, the baseline is 4. The description appropriately doesn't discuss parameters since none exist, focusing instead on the tool's purpose and usage timing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool 'provides the Serena Instructions Manual' which is a specific resource, though it doesn't specify the exact content or format of the manual. It distinguishes itself from siblings by being the only tool focused on providing essential instructions rather than performing project operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage guidance: 'If you have not yet read the manual, call this tool immediately after you are given your task by the user, as it will critically inform you!' This clearly indicates when to use it (immediately after task assignment if manual not read) and implies it's foundational before using other tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

insert_after_symbolInsert After SymbolA
Destructive

Inserts the given body/content after the end of the definition of the given symbol (via the symbol's location). A typical use case is to insert a new class, function, method, field or variable assignment.

ParametersJSON Schema
NameRequiredDescriptionDefault
name_pathYesName path of the symbol after which to insert content (definitions in the `find_symbol` tool apply).
relative_pathYesThe relative path to the file containing the symbol.
bodyYesThe body/content to be inserted. The inserted code shall begin with the next line after the symbol.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint=true and readOnlyHint=false, but the description adds valuable behavioral context: it specifies that insertion occurs 'after the end of the definition' and that 'the inserted code shall begin with the next line after the symbol.' This clarifies the exact positioning behavior beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is perfectly concise with two sentences: the first states the core functionality, the second provides a typical use case. Every word earns its place, and the most important information (what the tool does) is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of both annotations (destructiveHint=true, readOnlyHint=false) and an output schema (implied by context signals), the description provides complete contextual information. It covers the tool's purpose, typical usage, and behavioral specifics without needing to explain return values or safety characteristics that are already documented elsewhere.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema description coverage, all parameters are already documented in the input schema. The description adds some context by mentioning 'symbol's location' and referencing 'find_symbol' for name_path, but doesn't provide significant additional semantic meaning beyond what's in the schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('inserts') and target ('after the end of the definition of the given symbol'), with explicit mention of the content being inserted ('body/content'). It distinguishes from sibling 'insert_before_symbol' by specifying 'after' positioning, and from 'replace_symbol_body' by indicating insertion rather than replacement.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool ('to insert a new class, function, method, field or variable assignment') and references the 'find_symbol' tool for determining symbol locations. However, it doesn't explicitly state when NOT to use it or directly compare with alternatives like 'insert_before_symbol' or 'replace_content'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

insert_before_symbolInsert Before SymbolA
Destructive

Inserts the given content before the beginning of the definition of the given symbol (via the symbol's location). A typical use case is to insert a new class, function, method, field or variable assignment; or a new import statement before the first symbol in the file.

ParametersJSON Schema
NameRequiredDescriptionDefault
name_pathYesName path of the symbol before which to insert content (definitions in the `find_symbol` tool apply).
relative_pathYesThe relative path to the file containing the symbol.
bodyYesThe body/content to be inserted before the line in which the referenced symbol is defined.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate destructiveHint=true and readOnlyHint=false, which the description aligns with by describing an insertion operation that modifies files. The description adds valuable context beyond annotations by specifying that insertion occurs 'before the beginning of the definition' and via 'the symbol's location', and mentions typical use cases, which helps the agent understand the tool's behavior in practical scenarios.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose in the first sentence, followed by a second sentence providing typical use cases. Both sentences earn their place by clarifying scope and practical applications without redundancy or unnecessary details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (file modification with symbol-based positioning), the description provides sufficient context alongside annotations (destructive, not read-only) and a complete input schema. With an output schema present, the description does not need to explain return values, making it complete for agent usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, providing clear documentation for all three parameters (name_path, relative_path, body). The description adds minimal semantic value beyond the schema, only implying that 'body' is content to insert and referencing 'find_symbol' for name_path definitions. This meets the baseline of 3 when schema coverage is high.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('inserts') and resource ('content before the beginning of the definition of the given symbol'), with specific examples of typical use cases (new class, function, method, field, variable assignment, or import statement). It distinguishes from sibling 'insert_after_symbol' by specifying 'before' rather than 'after'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool ('to insert a new class, function, method, field or variable assignment; or a new import statement before the first symbol in the file'), but does not explicitly state when not to use it or name alternatives beyond the implied sibling 'insert_after_symbol'. It lacks explicit exclusions or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_dirList DirA
Read-only

Lists files and directories in the given directory (optionally with recursion). Returns a JSON object with the names of directories and files within the given directory.

ParametersJSON Schema
NameRequiredDescriptionDefault
relative_pathYesThe relative path to the directory to list; pass "." to scan the project root.
recursiveYesWhether to scan subdirectories recursively.
skip_ignored_filesNoWhether to skip files and directories that are ignored.
max_answer_charsNoIf the output is longer than this number of characters, no content will be returned. -1 means the default value from the config will be used. Don't adjust unless there is really no other way to get the content required for the task.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, indicating a safe read operation. The description adds value by specifying the return format ('JSON object with names of directories and files') and hinting at recursion behavior, but does not disclose additional traits like rate limits, auth needs, or error conditions beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose in the first sentence and adds useful details in the second. Both sentences earn their place by clarifying functionality and output format without redundancy or unnecessary elaboration, making it efficient and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity, rich annotations (readOnlyHint, destructiveHint), and the presence of an output schema, the description is largely complete. It covers purpose, optional recursion, and return format, though it could benefit from more explicit usage guidelines or edge-case handling to be fully comprehensive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so parameters are fully documented in the schema. The description adds minimal semantics by mentioning recursion and the return format, but does not provide extra details on parameter usage or interactions beyond what the schema already covers, aligning with the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Lists') and resource ('files and directories'), specifies the scope ('in the given directory'), and mentions an optional feature ('with recursion'). It distinguishes itself from sibling tools like 'find_file' or 'search_for_pattern' by focusing on directory listing rather than searching or filtering.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for directory listing but does not explicitly state when to use this tool versus alternatives like 'find_file' or 'search_for_pattern'. It mentions recursion as an option but lacks guidance on scenarios where recursion is preferred or when to avoid it, leaving usage context somewhat implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_memoriesList MemoriesA
Read-only

List available memories. Any memory can be read using the read_memory tool.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows this is a safe read operation. The description adds no behavioral traits beyond this, such as pagination, sorting, or access constraints, relying entirely on annotations for safety disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with two sentences that are front-loaded and waste-free. Every word contributes to understanding the tool's purpose and usage, making it efficient and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (0 parameters, read-only, non-destructive) and the presence of annotations and an output schema, the description is complete enough for basic use. It could benefit from more detail on output format or limitations, but the essentials are covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0 parameters and 100% schema description coverage, the schema fully documents the lack of inputs. The description doesn't need to add parameter details, and its mention of 'available memories' implies no filtering, which aligns with the empty schema. Baseline is 4 for zero parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb ('List') and resource ('memories'), making it immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'read_memory' beyond mentioning it as a follow-up action, missing direct comparison.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context by stating that listed memories can be read with 'read_memory', implying usage as a precursor to that tool. It doesn't specify when not to use it or alternatives, but the guidance is sufficient for basic navigation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

onboardingOnboardingA
Read-only

Call this tool if onboarding was not performed yet. You will call this tool at most once per conversation. Returns instructions on how to create the onboarding information.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, indicating a safe read operation. The description adds context about the one-time-per-conversation constraint and that it returns instructions, which are useful behavioral details beyond the annotations. However, it doesn't describe error handling or what happens if called multiple times.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is highly concise and well-structured with two sentences: the first states when to call it, and the second specifies the call frequency and return value. Every sentence adds essential information without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 0 parameters, annotations covering safety, and an output schema (implied by context signals), the description is mostly complete. It covers purpose, usage guidelines, and behavioral constraints. However, it could briefly mention what the instructions entail or link to sibling tools for more context, but the output schema likely handles return values.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately doesn't discuss parameters, focusing instead on usage context. A baseline of 4 is applied since there are no parameters to document.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: to be called when onboarding hasn't been performed yet, and it returns instructions for creating onboarding information. It specifies the verb 'call' and the resource 'onboarding', but doesn't explicitly differentiate from sibling tools like 'check_onboarding_performed' or 'initial_instructions' beyond the conditional trigger.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage guidelines: 'Call this tool if onboarding was not performed yet' and 'You will call this tool at most once per conversation.' This clearly defines when to use it (onboarding not done) and includes a usage constraint (once per conversation), though it doesn't name specific alternatives among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

prepare_for_new_conversationPrepare For New ConversationB
Read-only

Instructions for preparing for a new conversation. This tool should only be called on explicit user request.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows this is a safe, non-destructive operation. The description adds no behavioral context beyond what annotations provide, such as what 'preparing' entails or any side effects. However, it doesn't contradict annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences with zero wasted words. It's appropriately sized and front-loaded, though the first sentence is uninformative. Every sentence serves a purpose: the first states the tool's name, and the second provides critical usage guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has zero parameters, annotations covering safety, and an output schema (which means return values are documented elsewhere), the description is minimally adequate. However, it fails to explain what 'preparing for a new conversation' actually means or what the tool does, leaving a significant gap in understanding its purpose.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, and schema description coverage is 100%. With no parameters to document, the description doesn't need to compensate for any gaps. The baseline for zero parameters is 4, as there's nothing to explain beyond the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Instructions for preparing for a new conversation' is a tautology that restates the tool's name/title without specifying what the tool actually does. It lacks a clear verb+resource combination and doesn't distinguish this tool from its many siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states 'This tool should only be called on explicit user request,' providing clear when-to-use guidance. This is a strong, unambiguous usage rule that helps the agent avoid inappropriate invocations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_fileRead FileA
Read-only

Reads the given file or a chunk of it. Generally, symbolic operations like find_symbol or find_referencing_symbols should be preferred if you know which symbols you are looking for. Returns the full text of the file at the given relative path.

ParametersJSON Schema
NameRequiredDescriptionDefault
relative_pathYesThe relative path to the file to read.
start_lineNoThe 0-based index of the first line to be retrieved.
end_lineNoThe 0-based index of the last line to be retrieved (inclusive). If None, read until the end of the file.
max_answer_charsNoIf the file (chunk) is longer than this number of characters, no content will be returned. Don't adjust unless there is really no other way to get the content required for the task.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, indicating a safe read operation. The description adds valuable context beyond this: it explains that it can read 'a chunk' of a file (via start_line/end_line parameters) and warns about the max_answer_chars constraint ('no content will be returned' if exceeded). This enhances behavioral understanding without contradicting annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is efficiently structured in two sentences: the first states the core functionality and preferred alternatives, the second clarifies the return value. Every sentence serves a clear purpose with zero wasted words, making it easy to parse and understand quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (4 parameters, 1 required), 100% schema coverage, annotations covering safety, and an output schema (implied by 'Returns...'), the description is complete. It covers purpose, guidelines, and key behavioral aspects without needing to repeat schema details or explain return values extensively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents all four parameters. The description mentions 'chunk' reading and the max_answer_chars behavior, but these details are already covered in the schema descriptions for start_line, end_line, and max_answer_chars. It adds minimal semantic value beyond what the structured schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Reads') and resource ('the given file or a chunk of it'), distinguishing it from sibling tools like find_symbol or find_referencing_symbols. It explicitly mentions what it returns ('full text of the file at the given relative path'), making the purpose unambiguous and well-defined.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use alternatives: 'Generally, symbolic operations like find_symbol or find_referencing_symbols should be preferred if you know which symbols you are looking for.' This clearly indicates when not to use this tool and names specific sibling alternatives, offering strong contextual direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_memoryRead MemoryA
Read-only

Read the content of a memory file. This tool should only be used if the information is relevant to the current task. You can infer whether the information is relevant from the memory file name. You should not read the same memory file multiple times in the same conversation.

ParametersJSON Schema
NameRequiredDescriptionDefault
memory_file_nameYes
max_answer_charsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, indicating this is a safe read operation. The description adds valuable behavioral context beyond annotations: it specifies relevance criteria (based on file name) and a usage constraint (no repeated reads in same conversation). However, it doesn't disclose other potential behaviors like error handling, response format, or performance characteristics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is efficiently structured in three sentences: the first states the core purpose, the second provides usage criteria, and the third adds a behavioral constraint. Every sentence adds value without redundancy, and it's front-loaded with the essential action. No wasted words or unnecessary elaboration.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (a read operation with relevance filtering), annotations cover safety (read-only, non-destructive), and an output schema exists (so return values needn't be described), the description is reasonably complete. It adds useful context like relevance criteria and usage limits, though it lacks parameter explanations and doesn't fully address sibling tool differentiation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the schema provides no parameter documentation. The description doesn't explain either parameter's semantics—it mentions 'memory file name' but doesn't clarify its format or source, and omits 'max_answer_chars' entirely. Since parameters are few (2) and one has a default, the baseline is 3, but the description fails to compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Read') and resource ('content of a memory file'), making the purpose unambiguous. It distinguishes this tool from siblings like 'list_memories' (which lists files) and 'write_memory' (which writes content). However, it doesn't explicitly contrast with 'read_file' (which reads general files), leaving some sibling differentiation incomplete.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use this tool ('if the information is relevant to the current task') and when not to use it ('should not read the same memory file multiple times in the same conversation'). It also implies alternatives by referencing the memory file name for relevance inference, though it doesn't name specific sibling tools like 'list_memories' for discovery.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rename_symbolRename SymbolA
Destructive

Renames the symbol with the given name_path to new_name throughout the entire codebase. Note: for languages with method overloading, like Java, name_path may have to include a method's signature to uniquely identify a method. Returns result summary indicating success or failure.

ParametersJSON Schema
NameRequiredDescriptionDefault
name_pathYesName path of the symbol to rename (definitions in the `find_symbol` tool apply).
relative_pathYesThe relative path to the file containing the symbol to rename.
new_nameYesThe new name for the symbol.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint=true and readOnlyHint=false, but the description adds valuable context: it specifies the scope ('throughout the entire codebase'), mentions language-specific considerations (Java method overloading), and describes the return format ('result summary indicating success or failure'). This goes beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is perfectly sized at three sentences, front-loaded with the core purpose, followed by important implementation notes and return value information. Every sentence earns its place with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the destructive nature (annotations), 3 parameters with full schema coverage, and the existence of an output schema, the description provides complete context. It covers purpose, scope, language considerations, and return format without needing to explain parameters or output details already documented elsewhere.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema description coverage, the schema already documents all three parameters thoroughly. The description adds minimal extra context: it references 'find_symbol' tool for name_path definitions and mentions method signatures for overloading, but doesn't provide significant additional parameter semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('renames') and resource ('symbol with the given name_path'), specifying scope ('throughout the entire codebase'). It distinguishes from siblings like 'replace_symbol_body' by focusing on renaming rather than content replacement.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool (renaming symbols across codebases) and includes a note about method overloading in languages like Java. However, it doesn't explicitly state when NOT to use it or name specific alternatives among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

replace_contentReplace ContentA
Destructive

Replaces one or more occurrences of a given pattern in a file with new content.

This is the preferred way to replace content in a file whenever the symbol-level tools are not appropriate.

VERY IMPORTANT: The "regex" mode allows very large sections of code to be replaced without fully quoting them! Use a regex of the form "beginning.*?end-of-text-to-be-replaced" to be faster and more economical! ALWAYS try to use wildcards to avoid specifying the exact content to be replaced, especially if it spans several lines. Note that you cannot make mistakes, because if the regex should match multiple occurrences while you disabled allow_multiple_occurrences, an error will be returned, and you can retry with a revised regex. Therefore, using regex mode with suitable wildcards is usually the best choice!.

ParametersJSON Schema
NameRequiredDescriptionDefault
relative_pathYesThe relative path to the file.
needleYesThe string or regex pattern to search for. If `mode` is "literal", this string will be matched exactly. If `mode` is "regex", this string will be treated as a regular expression (syntax of Python's `re` module, with flags DOTALL and MULTILINE enabled).
replYesThe replacement string (verbatim). If mode is "regex", the string can contain backreferences to matched groups in the needle regex, specified using the syntax $!1, $!2, etc. for groups 1, 2, etc.
modeYesEither "literal" or "regex", specifying how the `needle` parameter is to be interpreted.
allow_multiple_occurrencesNoIf True, the regex may match multiple occurrences in the file and all of them will be replaced. If this is set to False and the regex matches multiple occurrences, an error will be returned (and you may retry with a revised, more specific regex).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate destructiveHint=true and readOnlyHint=false, which the description aligns with by describing a replacement operation. The description adds valuable behavioral context beyond annotations: it explains error handling when allow_multiple_occurrences is false, provides regex performance optimization tips, and mentions retry capabilities. However, it doesn't cover rate limits or specific permission requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately front-loaded with the core purpose, but contains some redundancy in advocating for regex mode (mentioned multiple times with similar points). The 'VERY IMPORTANT' section could be more streamlined, though all sentences contribute meaningful guidance about tool usage strategies.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (destructive file operation with regex capabilities), the description provides comprehensive context: it explains when to use this versus alternatives, offers detailed regex usage strategies, describes error behavior, and references sibling tools. With annotations covering safety aspects and an output schema presumably handling return values, the description fills all necessary contextual gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema description coverage, the baseline is 3. The description adds meaningful context about parameter usage: it emphasizes regex mode advantages for large sections, explains wildcard strategies to avoid exact content specification, and clarifies the interaction between regex patterns and the allow_multiple_occurrences parameter. This provides practical guidance beyond the schema's technical specifications.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with specific verbs ('replaces one or more occurrences of a given pattern in a file with new content') and distinguishes it from sibling tools by mentioning 'symbol-level tools' as alternatives. It explicitly names the resource (file content) and operation (replacement).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use this tool ('preferred way to replace content... whenever the symbol-level tools are not appropriate') and offers detailed advice on regex mode usage versus literal mode. It also references sibling tools like 'replace_symbol_body' as alternatives for symbol-level operations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

replace_symbol_bodyReplace Symbol BodyA
Destructive

Replaces the body of the symbol with the given name_path.

The tool shall be used to replace symbol bodies that have been previously retrieved (e.g. via find_symbol). IMPORTANT: Do not use this tool if you do not know what exactly constitutes the body of the symbol.

ParametersJSON Schema
NameRequiredDescriptionDefault
name_pathYesFor finding the symbol to replace, same logic as in the `find_symbol` tool.
relative_pathYesThe relative path to the file containing the symbol.
bodyYesThe new symbol body. The symbol body is the definition of a symbol in the programming language, including e.g. the signature line for functions. IMPORTANT: The body does NOT include any preceding docstrings/comments or imports, in particular.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate destructiveHint=true and readOnlyHint=false, which the description aligns with by implying a mutation ('Replaces'). The description adds valuable context beyond annotations: it clarifies that the body excludes 'preceding docstrings/comments or imports,' specifies a prerequisite (previous retrieval via find_symbol), and warns about misuse if the body is unclear. This enhances behavioral understanding without contradicting annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose in the first sentence, followed by usage guidelines and a critical warning. Each sentence earns its place by providing essential information without redundancy, resulting in a well-structured and efficient text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (destructive mutation with 3 required parameters), the description is complete: it covers purpose, usage context, prerequisites, and critical warnings. With annotations providing safety cues and an output schema present (implying return values are documented elsewhere), no additional information is needed for effective tool selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, providing detailed parameter documentation (e.g., 'body' includes the definition excluding docstrings). The description adds minimal semantics beyond the schema, such as linking 'name_path' to 'find_symbol' logic, but does not significantly enhance parameter understanding. With high schema coverage, a baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Replaces the body of the symbol') and identifies the target resource ('symbol with the given name_path'). It distinguishes from siblings like 'rename_symbol' (which changes the name) and 'replace_content' (which replaces file content rather than symbol bodies), establishing a unique purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use ('to replace symbol bodies that have been previously retrieved via find_symbol') and when not to use ('Do not use this tool if you do not know what exactly constitutes the body of the symbol'). It also references a specific alternative tool ('find_symbol') for preparation, offering clear context for usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_for_patternSearch For PatternA
Read-only

Offers a flexible search for arbitrary patterns in the codebase, including the possibility to search in non-code files. Generally, symbolic operations like find_symbol or find_referencing_symbols should be preferred if you know which symbols you are looking for.

Pattern Matching Logic: For each match, the returned result will contain the full lines where the substring pattern is found, as well as optionally some lines before and after it. The pattern will be compiled with DOTALL, meaning that the dot will match all characters including newlines. This also means that it never makes sense to have .* at the beginning or end of the pattern, but it may make sense to have it in the middle for complex patterns. If a pattern matches multiple lines, all those lines will be part of the match. Be careful to not use greedy quantifiers unnecessarily, it is usually better to use non-greedy quantifiers like .*? to avoid matching too much content.

File Selection Logic: The files in which the search is performed can be restricted very flexibly. Using restrict_search_to_code_files is useful if you are only interested in code symbols (i.e., those symbols that can be manipulated with symbolic tools like find_symbol). You can also restrict the search to a specific file or directory, and provide glob patterns to include or exclude certain files on top of that. The globs are matched against relative file paths from the project root (not to the relative_path parameter that is used to further restrict the search). Smartly combining the various restrictions allows you to perform very targeted searches. Returns A mapping of file paths to lists of matched consecutive lines.

ParametersJSON Schema
NameRequiredDescriptionDefault
substring_patternYesRegular expression for a substring pattern to search for.
context_lines_beforeNoNumber of lines of context to include before each match.
context_lines_afterNoNumber of lines of context to include after each match.
paths_include_globNoOptional glob pattern specifying files to include in the search. Matches against relative file paths from the project root (e.g., "*.py", "src/**/*.ts"). Supports standard glob patterns (*, ?, [seq], **, etc.) and brace expansion {a,b,c}. Only matches files, not directories. If left empty, all non-ignored files will be included.
paths_exclude_globNoOptional glob pattern specifying files to exclude from the search. Matches against relative file paths from the project root (e.g., "*test*", "**/*_generated.py"). Supports standard glob patterns (*, ?, [seq], **, etc.) and brace expansion {a,b,c}. Takes precedence over paths_include_glob. Only matches files, not directories. If left empty, no files are excluded.
relative_pathNoOnly subpaths of this path (relative to the repo root) will be analyzed. If a path to a single file is passed, only that will be searched. The path must exist, otherwise a `FileNotFoundError` is raised.
restrict_search_to_code_filesNoWhether to restrict the search to only those files where analyzed code symbols can be found. Otherwise, will search all non-ignored files. Set this to True if your search is only meant to discover code that can be manipulated with symbolic tools. For example, for finding classes or methods from a name pattern. Setting to False is a better choice if you also want to search in non-code files, like in html or yaml files, which is why it is the default.
max_answer_charsNoIf the output is longer than this number of characters, no content will be returned. -1 means the default value from the config will be used. Don't adjust unless there is really no other way to get the content required for the task. Instead, if the output is too long, you should make a stricter query.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=true and destructiveHint=false, which the description aligns with by describing a search operation. The description adds significant behavioral context beyond annotations, detailing pattern matching logic (e.g., DOTALL compilation, line inclusion, greedy vs. non-greedy quantifiers) and file selection logic (e.g., glob patterns, restrictions), though it doesn't explicitly mention rate limits or auth needs, which are not contradictory.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections ('Pattern Matching Logic', 'File Selection Logic') and front-loaded key information. It is appropriately sized, but some sentences could be more concise (e.g., the explanation of DOTALL and greedy quantifiers is slightly verbose), though overall it avoids waste and is easy to follow.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of the tool (8 parameters, regex patterns, file restrictions) and the presence of annotations and an output schema (implied by 'Returns A mapping of file paths to lists of matched consecutive lines'), the description is complete. It covers usage scenarios, behavioral details, and parameter interactions without needing to explain return values, making it sufficient for an AI agent to use the tool effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds some value by explaining the purpose of parameters like 'restrict_search_to_code_files' and how glob patterns work relative to the project root, but it doesn't provide significant additional semantics beyond what's in the schema, warranting a baseline score of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Offers a flexible search for arbitrary patterns in the codebase, including the possibility to search in non-code files.' It specifies the verb ('search'), resource ('patterns in the codebase'), and scope ('including non-code files'), and distinguishes it from sibling tools by explicitly mentioning alternatives like 'find_symbol' and 'find_referencing_symbols'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use this tool versus alternatives: 'Generally, symbolic operations like find_symbol or find_referencing_symbols should be preferred if you know which symbols you are looking for.' It also advises on context, such as using 'restrict_search_to_code_files' for code symbols and setting it to 'False' for non-code files, offering clear alternatives and exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

switch_modesSwitch ModesB
Read-only

Activates the desired modes, like ["editing", "interactive"] or ["planning", "one-shot"].

ParametersJSON Schema
NameRequiredDescriptionDefault
modesYesThe names of the modes to activate.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=true and destructiveHint=false, so the agent knows this is a safe, non-destructive operation. The description adds minimal context by implying activation of modes, but doesn't disclose behavioral traits like what 'activation' entails (e.g., state changes, side effects, or interactions with other tools). It doesn't contradict annotations, but offers little beyond them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the purpose with examples. It avoids unnecessary words and gets straight to the point. However, it could be slightly more structured by explicitly stating the tool's role in the context of sibling tools, but as-is, it's concise and well-formed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has an output schema (which handles return values), annotations covering safety, and high schema coverage, the description is minimally adequate. It explains the basic action but lacks context on what modes are, how they interact with other tools, or when to use this. For a tool that likely changes system state (despite readOnlyHint), more detail on behavior and usage would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with the parameter 'modes' fully documented in the schema. The description adds value by providing examples (e.g., ['editing', 'interactive']), which clarify the expected format and possible values beyond the schema's generic array of strings. However, it doesn't explain semantics like what modes are available or their effects, keeping it at the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Activates') and resource ('the desired modes'), making the purpose understandable. It provides specific examples like 'editing', 'interactive', 'planning', and 'one-shot' which help illustrate what modes might be. However, it doesn't explicitly differentiate from sibling tools like 'activate_project' or 'get_current_config', which could cause confusion about when to use this versus those alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, context for activation, or exclusions. Given sibling tools like 'activate_project' and 'get_current_config', the lack of differentiation leaves the agent without clear usage rules, relying solely on the tool name and description which are vague about scope.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

think_about_collected_informationThink About Collected InformationA
Read-only

Think about the collected information and whether it is sufficient and relevant. This tool should ALWAYS be called after you have completed a non-trivial sequence of searching steps like find_symbol, find_referencing_symbols, search_files_for_pattern, read_file, etc.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=true and destructiveHint=false, so the agent knows this is a safe, non-destructive operation. The description adds context about when to call it (after searching steps), which is useful behavioral guidance beyond the annotations. However, it doesn't disclose details like what the tool actually does (e.g., returns analysis, triggers internal processing) or any rate limits, leaving some behavioral aspects unclear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences that are front-loaded with the core purpose and followed by specific usage guidelines. Every sentence adds value without redundancy, making it highly concise and well-structured for quick understanding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 0 parameters, annotations cover safety (read-only, non-destructive), an output schema exists (so return values are documented elsewhere), and the description provides clear usage context, it's mostly complete. However, it could be more explicit about what the tool outputs or how it aids decision-making, slightly reducing completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has 0 parameters, and schema description coverage is 100%, so there's no need for parameter details in the description. The description appropriately doesn't discuss parameters, which is efficient. A baseline of 4 is applied since no parameters exist, and the description doesn't introduce unnecessary complexity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the tool is for 'thinking about collected information' and assessing sufficiency/relevance, which gives a general purpose. However, it's somewhat vague about what specific action the tool performs (e.g., does it analyze, summarize, or just prompt reflection?) and doesn't clearly differentiate from sibling tools like 'think_about_task_adherence' or 'think_about_whether_you_are_done' beyond the information focus.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage guidance: it states the tool 'should ALWAYS be called after you have completed a non-trivial sequence of searching steps' and lists examples like 'find_symbol, find_referencing_symbols, search_files_for_pattern, read_file, etc.' This clearly defines when to use it versus alternatives, making it highly actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

think_about_task_adherenceThink About Task AdherenceA
Read-only

Think about the task at hand and whether you are still on track. Especially important if the conversation has been going on for a while and there has been a lot of back and forth.

This tool should ALWAYS be called before you insert, replace, or delete code.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=true and destructiveHint=false, which already convey that this is a safe, non-destructive operation. The description adds context about its role in ensuring task adherence before code modifications, which is useful behavioral insight beyond the annotations. However, it does not detail aspects like potential side effects, performance implications, or error handling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded, with three sentences that directly address purpose and usage without unnecessary details. Each sentence adds value, such as the specific trigger conditions and mandatory usage before code changes, making it well-structured and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (low, with 0 parameters), rich annotations (readOnlyHint, destructiveHint), and the presence of an output schema, the description is complete enough. It explains the tool's role in task adherence and when to use it, which aligns with the structured data. However, it could slightly enhance completeness by mentioning what the output schema returns, though this is not strictly necessary.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has 0 parameters, and schema description coverage is 100%, so there is no need for parameter explanation in the description. The description appropriately does not discuss parameters, which is efficient, but since there are no parameters, a baseline of 4 is applied as it fully compensates for the lack of parameter details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the tool's purpose as 'Think about the task at hand and whether you are still on track,' which is a clear action but somewhat vague in scope. It does not specify what resources or data it operates on, and it does not distinguish itself from sibling tools like 'think_about_collected_information' or 'think_about_whether_you_are_done,' making it less specific than ideal.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage guidelines: 'Especially important if the conversation has been going on for a while and there has been a lot of back and forth' and 'This tool should ALWAYS be called before you insert, replace, or delete code.' This gives clear context for when to use it, though it does not explicitly state when not to use it or compare it to alternatives like other 'think' tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

think_about_whether_you_are_doneThink About Whether You Are DoneA
Read-only

Whenever you feel that you are done with what the user has asked for, it is important to call this tool.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=true and destructiveHint=false, which the description does not contradict. The description adds context by implying this is a self-assessment or decision-making tool, but it does not disclose additional behavioral traits like what triggers the 'done' state, any side effects, or how it interacts with other tools. With annotations covering safety, the description provides minimal extra value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that directly states the tool's purpose and usage. It is front-loaded with the key information and contains no redundant or extraneous details, making it highly concise and well-structured for quick understanding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 0 parameters, annotations covering read-only and non-destructive behavior, and an output schema exists, the description is reasonably complete. It explains when to use the tool, which is the core need. However, it could be more detailed about what 'done' entails or how it integrates with other tools, leaving minor gaps in full context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description does not add parameter details, which is appropriate. A baseline of 4 is applied since there are no parameters, and the description does not introduce unnecessary complexity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the tool's purpose as 'call this tool whenever you feel that you are done with what the user has asked for,' which is a clear action but vague in scope. It specifies a verb ('call') but lacks concrete details about what 'done' means or what resource it operates on, making it somewhat ambiguous compared to more specific sibling tools like 'create_text_file' or 'read_file'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use the tool: 'whenever you feel that you are done with what the user has asked for.' This gives a clear context for invocation. However, it does not mention when not to use it or name alternatives, such as sibling tools like 'think_about_collected_information' or 'think_about_task_adherence,' which might be relevant for related decision-making processes.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

write_memoryWrite MemoryA
Destructive

Write some information (utf-8-encoded) about this project that can be useful for future tasks to a memory in md format. The memory name should be meaningful.

ParametersJSON Schema
NameRequiredDescriptionDefault
memory_file_nameYes
contentYes
max_answer_charsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate destructiveHint=true and readOnlyHint=false, which the description aligns with by implying a write operation. The description adds valuable context beyond annotations: it specifies the memory is stored in markdown format and should have a meaningful name, which helps the agent understand behavioral expectations. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences that front-load the core purpose and key requirements. Every word adds value: the first sentence covers action, content, format, and purpose; the second emphasizes naming quality. No wasted words or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a destructive tool with 3 parameters (0% schema coverage) and an output schema, the description adequately covers the purpose and format but lacks parameter details and behavioral nuances like error handling or idempotency. The output schema may help with return values, but the description doesn't fully compensate for the low parameter coverage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It mentions 'memory name should be meaningful' (hinting at memory_file_name) and 'information... to a memory' (hinting at content), but doesn't explain max_answer_chars or provide details on parameter formats, constraints, or interactions. This leaves significant gaps in parameter understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Write some information') and resource ('to a memory'), specifying the format ('md format') and encoding ('utf-8-encoded'). It distinguishes from siblings like 'read_memory' and 'edit_memory' by focusing on creation, but doesn't explicitly differentiate from 'create_text_file' which might have overlapping functionality.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context ('about this project', 'useful for future tasks'), suggesting when to use it for project documentation. However, it lacks explicit guidance on when to choose this over alternatives like 'create_text_file' or 'edit_memory', and doesn't mention prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 17 tool updatesv1.0.0
    • Changedcreate_text_file1 field changed
      • changedInput schema / properties / content / description
        Previous value: -"The (utf-8-encoded) content to write to the file."New value: +"The (appropriately encoded) content to write to the file."
    • Addededit_memory
    • Changedexecute_shell_command2 fields changed
      • changedInput schema / properties / max_answer_chars / default
        Previous value: -200000New value: +-1
      • changedInput schema / properties / max_answer_chars / description
        Previous value: -"If the output is longer than this number of characters,\nno content will be returned. Don't adjust unless there is really no other way to get the content\nrequired for the task."New value: +"If the output is longer than this number of characters,\nno content will be returned. -1 means using the default value, don't adjust unless there is no other way to get the content\nrequired for the task."
    • Changedfind_referencing_symbols1 field changed
      • changedInput schema / properties / max_answer_chars / default
        Previous value: -200000New value: +-1
    • Changedfind_symbol7 fields changed
      • changedInput schema / properties / depth / description
        Previous value: -"Depth to retrieve descendants (e.g., 1 for class methods/attributes)."New value: +"Depth up to which descendants shall be retrieved (e.g. use 1 to also retrieve immediate children;\nfor the case where the symbol is a class, this will return its methods).\nDefault 0."
      • changedInput schema / properties / max_answer_chars / default
        Previous value: -200000New value: +-1
      • changedInput schema / properties / max_answer_chars / description
        Previous value: -"Max characters for the JSON result. If exceeded, no content is returned."New value: +"Max characters for the JSON result. If exceeded, no content is returned.\n-1 means the default value from the config will be used."
      • removedInput schema / properties / name_path
        Removed value: -{
        -  "description": "The name path pattern to search for, see above for details.",
        -  "title": "Name Path",
        -  "type": "string"
        -}
      • addedInput schema / properties / name_path_pattern
        Added value: +{
        +  "description": "The name path matching pattern (see above).",
        +  "title": "Name Path Pattern",
        +  "type": "string"
        +}
      • changedInput schema / properties / substring_matching / description
        Previous value: -"If True, use substring matching for the last segment of `name`."New value: +"If True, use substring matching for the last element of the pattern, such that\n\"Foo/get\" would match \"Foo/getValue\" and \"Foo/getData\"."
      • changedInput schema / required
        Previous value: -[
        -  "name_path"
        -]New value: +[
        +  "name_path_pattern"
        +]
    • Addedget_current_config
    • Changedget_symbols_overview3 fields changed
      • addedInput schema / properties / depth
        Added value: +{
        +  "default": 0,
        +  "description": "Depth up to which descendants of top-level symbols shall be retrieved\n(e.g. 1 retrieves immediate children). Default 0.",
        +  "title": "Depth",
        +  "type": "integer"
        +}
      • changedInput schema / properties / max_answer_chars / default
        Previous value: -200000New value: +-1
      • changedInput schema / properties / max_answer_chars / description
        Previous value: -"If the overview is longer than this number of characters,\nno content will be returned. Don't adjust unless there is really no other way to get the content\nrequired for the task."New value: +"If the overview is longer than this number of characters,\nno content will be returned. -1 means the default value from the config will be used.\nDon't adjust unless there is really no other way to get the content required for the task."
    • Addedinitial_instructions
    • Changedlist_dir3 fields changed
      • changedInput schema / properties / max_answer_chars / default
        Previous value: -200000New value: +-1
      • changedInput schema / properties / max_answer_chars / description
        Previous value: -"If the output is longer than this number of characters,\nno content will be returned. Don't adjust unless there is really no other way to get the content\nrequired for the task."New value: +"If the output is longer than this number of characters,\nno content will be returned. -1 means the default value from the config will be used.\nDon't adjust unless there is really no other way to get the content required for the task."
      • addedInput schema / properties / skip_ignored_files
        Added value: +{
        +  "default": false,
        +  "description": "Whether to skip files and directories that are ignored.",
        +  "title": "Skip Ignored Files",
        +  "type": "boolean"
        +}
    • Changedread_file1 field changed
      • changedInput schema / properties / max_answer_chars / default
        Previous value: -200000New value: +-1
    • Changedread_memory1 field changed
      • changedInput schema / properties / max_answer_chars / default
        Previous value: -200000New value: +-1
    • Addedrename_symbol
    • Addedreplace_content
    • Removedreplace_regex
    • Changedreplace_symbol_body1 field changed
      • changedInput schema / properties / body / description
        Previous value: -"The new symbol body. Important: Begin directly with the symbol definition and provide no\nleading indentation for the first line (but do indent the rest of the body according to the context)."New value: +"The new symbol body. The symbol body is the definition of a symbol\nin the programming language, including e.g. the signature line for functions.\nIMPORTANT: The body does NOT include any preceding docstrings/comments or imports, in particular."
    • Changedsearch_for_pattern4 fields changed
      • changedInput schema / properties / max_answer_chars / default
        Previous value: -200000New value: +-1
      • changedInput schema / properties / max_answer_chars / description
        Previous value: -"If the output is longer than this number of characters,\nno content will be returned. Don't adjust unless there is really no other way to get the content\nrequired for the task. Instead, if the output is too long, you should\nmake a stricter query."New value: +"If the output is longer than this number of characters,\nno content will be returned.\n-1 means the default value from the config will be used.\nDon't adjust unless there is really no other way to get the content\nrequired for the task. Instead, if the output is too long, you should\nmake a stricter query."
      • changedInput schema / properties / paths_exclude_glob / description
        Previous value: -"Optional glob pattern specifying files to exclude from the search.\nMatches against relative file paths from the project root (e.g., \"*test*\", \"**/*_generated.py\").\nTakes precedence over paths_include_glob. Only matches files, not directories. If left empty, no files are excluded."New value: +"Optional glob pattern specifying files to exclude from the search.\nMatches against relative file paths from the project root (e.g., \"*test*\", \"**/*_generated.py\").\nSupports standard glob patterns (*, ?, [seq], **, etc.) and brace expansion {a,b,c}.\nTakes precedence over paths_include_glob. Only matches files, not directories. If left empty, no files are excluded."
      • changedInput schema / properties / paths_include_glob / description
        Previous value: -"Optional glob pattern specifying files to include in the search.\nMatches against relative file paths from the project root (e.g., \"*.py\", \"src/**/*.ts\").\nOnly matches files, not directories. If left empty, all non-ignored files will be included."New value: +"Optional glob pattern specifying files to include in the search.\nMatches against relative file paths from the project root (e.g., \"*.py\", \"src/**/*.ts\").\nSupports standard glob patterns (*, ?, [seq], **, etc.) and brace expansion {a,b,c}.\nOnly matches files, not directories. If left empty, all non-ignored files will be included."
    • Changedwrite_memory4 fields changed
      • changedInput schema / properties / max_answer_chars / default
        Previous value: -200000New value: +-1
      • addedInput schema / properties / memory_file_name
        Added value: +{
        +  "title": "Memory File Name",
        +  "type": "string"
        +}
      • removedInput schema / properties / memory_name
        Removed value: -{
        -  "title": "Memory Name",
        -  "type": "string"
        -}
      • changedInput schema / required
        Previous value: -[
        -  "memory_name",
        -  "content"
        -]New value: +[
        +  "memory_file_name",
        +  "content"
        +]
  2. 25 tool updates
    • First observedactivate_project
    • First observedcheck_onboarding_performed
    • First observedcreate_text_file
    • First observeddelete_memory
    • First observedexecute_shell_command
    • First observedfind_file
    • First observedfind_referencing_symbols
    • First observedfind_symbol
    • First observedget_symbols_overview
    • First observedinsert_after_symbol
    • First observedinsert_before_symbol
    • First observedlist_dir
    • First observedlist_memories
    • First observedonboarding
    • First observedprepare_for_new_conversation
    • First observedread_file
    • First observedread_memory
    • First observedreplace_regex
    • First observedreplace_symbol_body
    • First observedsearch_for_pattern
    • First observedswitch_modes
    • First observedthink_about_collected_information
    • First observedthink_about_task_adherence
    • First observedthink_about_whether_you_are_done
    • First observedwrite_memory

TDQS

A3.8/5.0
Disambiguation4/5

Most tools have distinct purposes, but there is some overlap between search tools (find_symbol, find_referencing_symbols, search_for_pattern) and file operations (read_file vs. find_file vs. list_dir). The descriptions help clarify differences, but an agent might occasionally misselect between similar search or file access tools.

Naming Consistency4/5

The naming follows a consistent verb_noun pattern (e.g., activate_project, create_text_file, execute_shell_command) with only minor deviations like initial_instructions (adjective_noun) and think_about_* tools (verb_phrase). Overall, the pattern is predictable and readable.

Tool Count3/5

With 29 tools, the count feels heavy for a code assistant server, bordering on overwhelming. While many tools are specialized (e.g., multiple think_about_* tools), the high number could lead to confusion or inefficiency in tool selection.

Completeness5/5

The toolset provides comprehensive coverage for code editing and project management, including CRUD operations for files and symbols, search capabilities, memory management, and workflow guidance (e.g., onboarding, thinking tools). No obvious gaps are present for its intended domain.

Maintenance

ActivityActive
ResponsivenessResponsive

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    C
    maintenance
    A coding agent toolkit that transforms LLMs into coding assistants capable of working directly on your codebase with semantic code retrieval and editing tools, providing IDE-like capabilities without requiring API subscriptions.
    33
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides semantic code intelligence tools (search, structural views) and a workspace TUI interface for LLM agents to efficiently navigate codebases, manage context, and maintain architectural patterns across Python, Java, C++, and Perl projects.
    4
    MIT
  • A
    license
    B
    quality
    D
    maintenance
    A coding agent toolkit that provides IDE-like semantic code retrieval and editing tools, enabling LLMs to efficiently navigate and modify codebases using symbol-level operations instead of basic file reading and string replacements.
    19
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Provides Cursor-like code intelligence using tools like ripgrep, ctags, and tree-sitter to help LLMs explore and understand entire codebases. It implements a structured, phase-gated workflow to ensure high-confidence code modifications and eliminate hallucinations.
    -

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/oraios/serena'

If you have feedback or need assistance with the MCP directory API, please join our Discord server