/ Каталог / Песочница / Serena
● Сообщество oraios ⚡ Сразу

Serena

автор oraios · oraios/serena

Serena привязывает к вашему агенту семантический поиск и символические изменения на базе языкового сервера, поэтому операции переименования/рефакторинга/поиска ссылок действительно работают в огромных базах кода.

Серена — это «IDE для вашего агента». Вместо того, чтобы искать файлы и молиться, он использует настоящие серверные части LSP для более чем 40 языков, чтобы отвечать на вопросы уровня символов: «где вызывается эта функция?», «Какова иерархия типов?», «переименовывать этот символ везде, где он используется». Затем он поставляет инструменты символьного редактирования, чтобы агент мог заменить тело функции, безопасно удалить символ или вставить код относительно узла AST. Система памяти сохраняет контекст между сеансами — Клод продолжает с того места, где остановился на прошлой неделе.

Зачем использовать

Ключевые функции

Живое демо

Как выглядит на практике

serena.replay ▶ готово
0/0

Установка

Выберите клиент

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "serena": {
      "command": "uvx",
      "args": [
        "--from",
        "serena-agent",
        "serena",
        "start-mcp-server",
        "--context=claude-desktop"
      ]
    }
  }
}

Откройте Claude Desktop → Settings → Developer → Edit Config. Перезапустите после сохранения.

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "serena": {
      "command": "uvx",
      "args": [
        "--from",
        "serena-agent",
        "serena",
        "start-mcp-server",
        "--context=claude-desktop"
      ]
    }
  }
}

Cursor использует ту же схему mcpServers, что и Claude Desktop. Конфиг проекта приоритетнее глобального.

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "serena": {
      "command": "uvx",
      "args": [
        "--from",
        "serena-agent",
        "serena",
        "start-mcp-server",
        "--context=claude-desktop"
      ]
    }
  }
}

Щёлкните значок MCP Servers на боковой панели Cline, затем "Edit Configuration".

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "serena": {
      "command": "uvx",
      "args": [
        "--from",
        "serena-agent",
        "serena",
        "start-mcp-server",
        "--context=claude-desktop"
      ]
    }
  }
}

Тот же формат, что и Claude Desktop. Перезапустите Windsurf для применения.

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "serena",
      "command": "uvx",
      "args": [
        "--from",
        "serena-agent",
        "serena",
        "start-mcp-server",
        "--context=claude-desktop"
      ]
    }
  ]
}

Continue использует массив объектов серверов, а не map.

~/.config/zed/settings.json
{
  "context_servers": {
    "serena": {
      "command": {
        "path": "uvx",
        "args": [
          "--from",
          "serena-agent",
          "serena",
          "start-mcp-server",
          "--context=claude-desktop"
        ]
      }
    }
  }
}

Добавьте в context_servers. Zed перезагружается автоматически.

claude mcp add serena -- uvx --from serena-agent serena start-mcp-server --context=claude-desktop

Однострочная команда. Проверить: claude mcp list. Удалить: claude mcp remove.

Сценарии использования

Реальные сценарии: Serena

Найдите каждого вызывающего абонента функции в кодовой базе длиной 1 миллион строк.

👤 Инженеры, работающие в зрелых крупных репозиториях ⏱ ~10 min intermediate

Когда использовать: Вам нужен полный и правильный список вызывающих объектов — grep выдает ложные срабатывания (комментарии, строки, функции с одинаковыми именами в других областях видимости) и пропускает перегрузки.

Предварительные требования
  • УФ установлен — локон -LsSf https://astral.sh/uv/install.sh | ш
  • Проект открыт на языке, который поддерживает LSP Серены. — Большинство основных языков работают «из коробки»
Поток
  1. Открыть проект
    Откройте /abs/path/to/repo с Сереной. Подтвердите построенный индекс LSP.✓ Скопировано
    → Серена сообщает корень проекта и загруженный LSP.
  2. Найдите ссылки на символы
    Найдите все сайты вызовов PaymentService.chargeCustomer. Включите перегрузки и переопределения, исключите тесты.✓ Скопировано
    → Точный файл: список строк, без ложных срабатываний из комментариев/строк.
  3. Подведите итоги
    Группируйте места вызова по модулям. Для каждой группы сообщите мне, что вызывающая сторона делает с возвращаемым значением.✓ Скопировано
    → Повествование, сгруппированное по модулям, а не плоский список

Итог: Вы точно знаете, чего коснется изменение, еще до того, как прикоснетесь к нему.

Подводные камни
  • Некоторым многоязычным репозиториям требуется несколько LSP. — Запускайте Serena для каждого подпроекта, если языки не используют общий сервер.
Сочетать с: filesystem · github

Переименуйте общедоступный символ API, не нарушая зависимостей.

👤 Сопровождающие библиотеки/фреймворка ⏱ ~15 min intermediate

Когда использовать: Вы переименовываете функцию или класс, которые могут использоваться вне файла — вам нужно переименовать с точностью до LSP, а не заменить текст.

Предварительные требования
  • Очистить дерево git — git status clean, чтобы вы могли просмотреть разницу перед фиксацией
Поток
  1. Пробный запуск переименования
    Переименуйте getUser в fetchUserById в src/api/users.ts. Используйте символическое переименование Серены. Предварительный просмотр различий — пока не применяйте.✓ Скопировано
    → Предварительный просмотр различий для каждого затронутого файла
  2. Просмотрите и подайте заявку
    Примените переименование. Назовите мне любой файл, который Серена пометила как неоднозначный.✓ Скопировано
    → Переименование применено, список неоднозначностей (если есть)
  3. Запустить пакет
    Запускайте тесты и сообщайте об ошибках, уделяя особое внимание всему, что ссылается на старое имя.✓ Скопировано
    → Зеленые тесты, или точный список неудач

Итог: Переименование чисто во всем репозитории, включая публичный реэкспорт, бочки index.ts и устаревшие ссылки JSDoc.

Подводные камни
  • Динамический доступ (obj['getUser']) не перехватывается переименованием LSP. — После символического переименования выполните один grep для старой строки имени; Серена выявляет все, что не может решить статически
Сочетать с: filesystem · git

Замените тело функции, не нарушая окружающий код.

👤 Инженеры вносят хирургические правки в большие файлы ⏱ ~10 min intermediate

Когда использовать: Вы хотите, чтобы реализация «calculatePrice» была переписана, но ее подпись и JSDoc сохранились точно. Регенерация всего файла — неправильный инструмент.

Поток
  1. Нацельтесь на символ
    В src/billing/pricing.ts найдите «calculatePrice». Покажите мне только текущее тело (не подпись или документ).✓ Скопировано
    → Фрагмент только для тела
  2. Заменить корпус
    Замените только тело версией, которая обрабатывает случай освобождения от налогов. Сохраняйте подпись и JSDoc без изменений.✓ Скопировано
    → Используется инструмент замены тела Серены; подпись не изменилась в диффе

Итог: Минимальные, проверяемые различия — никаких случайных пробелов и изменений форматирования.

Подводные камни
  • Агент возвращается к полной записи файла — Явно проинструктируйте «использовать символическую замену Серены, а не write_file».
Сочетать с: filesystem

Подключение к незнакомой кодовой базе за час

👤 Новые сотрудники, подрядчики или участники OSS ⏱ ~60 min beginner

Когда использовать: Вы только что клонировали репозиторий из 500 файлов, и вам нужна ментальная карта, прежде чем вы сможете внести свой вклад.

Поток
  1. Получите архитектуру
    Откройте это репо с Сереной. Создайте карту: модули верхнего уровня, их публичный экспорт и основную точку входа. Сохраните в памяти Серены как «arch_overview».✓ Скопировано
    → Структурированный обзор; заметка на память создана
  2. Следуйте запросу пользователя
    Проследите, что происходит, когда пользователь нажимает POST/orders. Расскажи мне каждый файл по порядку.✓ Скопировано
    → Запрос → обработчик → сервис → след репо, с поиском ссылок Серены.
  3. Обратите внимание на ошибки
    Сохраняйте в памяти любые шаблоны, которые выглядят необычно (пользовательские декораторы, магические константы) как «подводные камни».✓ Скопировано
    → Заметка на память сохранена для следующего сеанса.

Итог: На следующем сеансе Клод уже знает карту — никаких затрат на повторную адаптацию.

Сочетать с: filesystem · github

Комбинации

Сочетайте с другими MCP — эффект x10

serena + filesystem

Serena для навигации с учетом символов + файловая система для произвольного ввода-вывода

Используйте Serena, чтобы найти модуль аутентификации, затем файловую систему, чтобы написать новый README для этой папки.✓ Скопировано
serena + github

Рефакторинг локально с Сереной; нажмите ветку и откройте PR через GitHub MCP

Переименуйте ApiClient → HttpClient с помощью Serena, затем откройте PR под названием «refactor(api): rename ApiClient».✓ Скопировано
serena + git

Просмотрите изменения, созданные Сереной, прежде чем совершать коммит.

Покажите мне разницу git после переименования Серены. Если что-то подозрительно, отмечайте это перед тем, как совершить сделку.✓ Скопировано
serena + context7

Рефакторинг с учетом библиотеки — Serena для локальных перемещений, Context7 для сопоставления API v-next.

Перенесите этот файл в шаблоны Next.js 15. Используйте Context7 для новых API и Serena для символического применения изменений.✓ Скопировано

Инструменты

Что предоставляет этот MCP

ИнструментВходные данныеКогда вызыватьСтоимость
find_symbol name: str, scope?: str Найдите класс/функцию/вар по имени с точностью LSP. free (local)
find_references symbol: ref Все вызывающие/использования символа; намного лучше, чем grep free
get_symbols_overview path: str Описание файла/модуля, прежде чем решить, что читать free
rename_symbol symbol: ref, new_name: str, dryRun?: bool Безопасное переименование всего проекта free
replace_symbol_body symbol: ref, new_body: str Поменяйте тело функции/метода местами, не трогая подпись. free
insert_before_symbol / insert_after_symbol symbol: ref, code: str Добавьте декораторы, импорт или одноуровневые объявления, привязанные к узлу AST. free
move_file / move_dir src: str, dst: str Переместите код и позвольте LSP исправить каждого импортера. free
write_memory / read_memory key: str, value?: str Сохранение контекста проекта (карта архитектуры, ошибки) между сеансами. free
search_pattern regex: str, path: str Резервный вариант, когда цель не является именованным символом (строковые литералы, шаблоны) free

Стоимость и лимиты

Во что обходится

Квота API
Нет — местный LSP
Токенов на вызов
Маленький — Серена возвращает фрагменты символов, а не целые файлы.
Деньги
Бесплатно
Совет
Предпочитайте get_symbols_overview + find_symbol вместо read_text_file для больших файлов — вы тратите в 10 раз меньше токенов и получаете лучший сигнал.

Безопасность

Права, секреты, радиус поражения

Хранение учётных данных: Нет — все работает локально
Исходящий трафик: По умолчанию нет. Серена может запускать команды оболочки (отключить); просмотрите список инструментов, прежде чем предоставлять доступ на запись в Claude.
Никогда не давайте: Access to directories outside your project

Устранение неполадок

Частые ошибки и исправления

LSP не удалось запустить / символы не найдены

Убедитесь, что языковой сервер установлен для языка проекта (например,pyright для Python, typescript-language-server для TS). Серена записывает список LSP, которые она использует.

Проверить: Run Serena in verbose mode; confirm LSP handshake succeeded
Переименование пропущенных некоторых файлов

Обычно означает, что файлы не находятся в рабочей области LSP. Убедитесь, что корень проекта — это корень монорепозитория, а не подпакет.

Проверить: Ask Serena to list its workspace roots
Агент возвращается к записи необработанных файлов вместо инструментов Serena.

Поместите в CLAUDE.md явное правило: «Для символических операций всегда используйте инструменты Серены; никогда не записывайте_file в существующие файлы .py/.ts'

Проверить: Re-run the task; inspect tool_use calls in the trace
uvx: команда не найдена

Сначала установите uv: curl -LsSf https://astral.sh/uv/install.sh | ш; затем снова откройте свой терминал

Проверить: uvx --version

Альтернативы

Serena в сравнении

АльтернативаКогда использоватьКомпромисс
JetBrains MCPВы уже используете JetBrains IDE и хотите, чтобы агент управлял инструментами рефакторинга.Требуется открытый процесс IDE; тяжелее
filesystemВам не нужна поддержка символов — просто читайте/записывайте файлы.Никакого семантического поиска и безопасного переименования.
mcp-language-serverВам нужна меньшая оболочка только для LSP, а не память Серены + слой оболочки.Меньше инструментов высокого уровня; вы сами составляете рабочий процесс

Ещё

Ресурсы

📖 Читать официальный README на GitHub

🐙 Открытые задачи

🔍 Все 400+ MCP-серверов и Skills