Serena

by oraios
Verified

local-only server

The server can only run on the client’s local machine because it depends on local resources.

Integrations

  • Provides tools for interacting with Git repositories, including checking diffs to review changes made to the codebase

  • Provides integration with free/open-weights models through Ollama, enabling code analysis and editing without proprietary LLM APIs

  • Expected future integration with ChatGPT (mentioned as coming soon), which would allow using the MCP server with OpenAI's models

  • :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サーバーを提供します。
  • モデルに依存しないエージェント フレームワークである Agno を使用します。
    Serena の Agno ベースのエージェントを使用すると、Google、OpenAI、Anthropic (有料 API キーが必要) が提供するものでも、Ollama、Together、Anyscale が提供する無料モデルでも、事実上あらゆる LLM をコーディング エージェントに変えることができます。
  • Serena のツールを任意のエージェント フレームワークに組み込むことによって実現します。
    Serena のツール実装はフレームワーク固有のコードから分離されているため、任意のエージェント フレームワークに簡単に適応できます。

プログラミング言語のサポートとセマンティック解析機能

Serena のセマンティックコード解析機能は、広く実装されている言語サーバープロトコル (LSP) を使用した言語サーバー上に構築されています。LSP は、コードのシンボリック理解に基づいた、多用途のコードクエリおよび編集機能を提供します。これらの機能を備えた Serena は、熟練した開発者が IDE の機能を活用するのと同じように、コードを検出し編集します。Serena は、非常に大規模で複雑なプロジェクトであっても、適切なコンテキストを効率的に見つけ出し、適切な処理を実行できます。つまり、Serena は無料でオープンソースであるだけでなく、有料の既存ソリューションよりも優れた結果を達成することがよくあります。

言語サーバーは幅広いプログラミング言語をサポートします。Serenaでは、

  • 以下の直接的なサポートがすぐに利用可能:
    • パイソン
    • Java (: 起動が遅く、特に最初の起動が遅い)
    • タイプスクリプト
  • 以下の間接的なサポート(コードの変更や手動インストールが必要になる場合があります):
    • Ruby(未テスト)
    • Go(未テスト)
    • C# (未テスト)
    • 錆(未テスト)
    • Kotlin(未テスト)
    • ダーツ(未テスト)
    • C/C++(未テスト)これらの言語は、Serena が内部的に使用する言語サーバーライブラリmultilspyによってサポートされています。ただし、これらの言語のサポートが実際に機能するかどうかについては、明示的にテストしていません。

原則として、新しい言語サーバーの実装に浅いアダプターを提供することで、さらに多くの言語を簡単にサポートできます。

目次

Serena は何に使えますか?

Serenaは、分析、計画、新規コンポーネントの設計、既存コンポーネントのリファクタリングなど、あらゆるコーディングタスクに使用できます。SerenaのツールはLLM(学習言語モデリング)による認知的知覚-行動ループの完結を可能にするため、Serenaベースのエージェントは、初期分析から実装、テスト、そして最終的にはバージョン管理システムへのコミットに至るまで、コーディングタスクを最初から最後まで自律的に実行できます。

Serenaはコードの読み書きと実行、ログやターミナル出力の読み取りが可能です。必ずしも推奨しているわけではありませんが、「バイブコーディング」は確かに可能です。「コードがもはや存在しない」ような感覚を味わいたいのであれば、IDE内のエージェントよりもSerenaの方がバイブコーディングに適しているかもしれません(独立したGUIがあるので、コードの存在を忘れられるからです)。

Serenaの無料コーディングエージェント

AnthropicのClaudeは無料版でもMCPサーバーをサポートしているため、ClaudeでSerenaを無料でご利用いただけます。ChatGPT DesktopでもMCPサーバーのサポートが追加されれば、同様の機能がすぐに利用可能になるでしょう。
さらに、Agno を使用すると、Serena をフリー/オープンウェイト モデルで使用することもできます。

Serena は、 Oraios AIの開発者コミュニティへの貢献です。
私たち自身も定期的に使用しています。

WindsurfやCursorといったIDEベースのサブスクリプションを複数購入し、既存のチャットサブスクリプション料金に加えてトークンを購入し続ける必要に迫られることにうんざりしていました。Claude Code、Cline、AiderといったAPIベースのツールにかかる高額なAPIコストも同様に魅力的ではありません。そのため、Serenaは他のほとんどのサブスクリプションをキャンセルできるという見通しのもとで開発されました。

クイックスタート

Serena はさまざまな方法で使用できます。以下に、選択した統合の手順を示します。

  • Claude を無料で使用できるコーディングエージェントにしたいだけの場合は、Claude Desktop を通じて Serena を使用することをお勧めします。
  • Gemini や他のモデルを使いたい場合、GUI を使いたい場合はAgnoを使うべきです。macOS ではgooseの GUI も使用できます。
  • Serena を CLI 経由で使用したい場合は、 gooseを使用できます。こちらでもほぼすべてのモデルが利用可能です。
  • IDE に統合された Serena を使用する場合は、他の MCP クライアントに関するセクションを参照してください。

セットアップと構成

  1. uvをインストールします (手順はこちら)
  2. リポジトリを/path/to/serenaにクローンします。
  3. serena_config.template.ymlserena_config.ymlにコピーし、設定を調整します。
  4. myproject.template.ymlmyproject.ymlにコピーし、プロジェクト固有の設定を調整します。(Serena で処理するプロジェクトごとに、このようなファイルを 1 つ追加します。)
  5. Serena でプロジェクトを動的に切り替える場合は、前の手順で作成したすべてのプロジェクト ファイルのリストをserena_config.ymlprojectsリストに追加します。

⚠️注: Serena は現在も開発中です。継続的に機能を追加し、安定性と UX を向上させています。そのため、設定が重大な変更を受ける可能性があります。無効な設定がある場合、MCP サーバーまたは Serena ベースのエージェントが起動に失敗する可能性があります (MCP サーバーの場合は、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-file", "/abs/path/to/myproject.yml"] } } }
    :info: 構成でenable_project_activationを設定している場合、プロジェクト ファイルを渡すことはオプションです。この設定により、作業するプロジェクトをアクティブ化するように Claude に指示するだけで済みます。Windows 上のパスにバックスラッシュを含むパスを使用している場合は (スラッシュのみを使用することもできます)、必ず正しくエスケープしてください ( \\ )。

これで完了です。設定を保存して、Claude Desktop を再起動してください。

注: Windows および macOS には Anthropic による公式の Claude Desktop アプリケーションがあり、Linux にはオープンソースのコミュニティ バージョンがあります。

⚠️ Claude を閉じると、少なくとも Windows ではシステム トレイに最小化されるだけなので、Claude デスクトップ アプリケーションを完全に終了してください。

再起動後、チャット インターフェイスに Serena のツールが表示されます (小さなハンマー アイコンに注意してください)。

⚠️ ツール名: Claude Desktop(およびほとんどのMCPクライアント)はサーバー名を解決しません。そのため、「Serenaのツールを使用する」といった指示は避けてください。代わりに、LLMにシンボリックツールを使用するように指示するか、特定のツール名を参照することでそのツールを使用するように指示できます。さらに、複数のMCPサーバーを使用する場合、ツール名の衝突が発生し、未定義の動作につながる可能性があります。例えば、Serenaは現在、ツール名の衝突のため、ファイルシステムMCPサーバーと互換性がありません。

ℹ️ stdio をプロトコルとして使用する MCP サーバーは、クライアント/サーバーアーキテクチャとしては少々特殊な点にご注意ください。サーバーの標準入出力ストリームを介して通信を行うには、クライアント側でサーバーを起動する必要があります。つまり、サーバーを自分で起動する必要はありません。クライアントアプリケーション(例:Claude Desktop)がサーバーを起動するため、起動コマンドを設定する必要があります。

Claude Desktop を使用した MCP サーバーの詳細については、公式クイック スタート ガイドを参照してください。

その他の MCP クライアント - Cline、Roo-Code、Cursor、Windsurf など。

SerenaはMCPサーバーであるため、あらゆるMCPクライアントに組み込むことができます。上記と同じ設定で、クライアント固有の小さな変更を加えるだけで動作するはずです。既存の人気コーディングアシスタント(IDE拡張機能やVSCode風IDE)のほとんどは、MCPサーバーへの接続に対応しています。Serenaを組み込むことで、シンボリック操作のためのツールが提供され、パフォーマンスが向上することがよくあります。

この場合、使用料の請求は引き続き、選択したクライアントによって管理されます(Claude デスクトップクライアントとは異なります)。ただし、以下のような理由から、Serena をこのような方法で使用したい場合もあるでしょう。

  1. すでにコーディング アシスタント (Cline や Cursor など) を使用しており、さらに強力にしたい場合。
  2. Linuxを使用しており、コミュニティが作成したClaude Desktopを使用したくない
  3. Serena を IDE にもっと緊密に統合したいが、そのためにお金を払っても構わない

Claude Desktop に Serena を使用する場合と同じ考慮事項 (特にツール名の競合) がここでも適用されます。

コーディングのためのAIインタラクションが組み込まれたIDEや拡張機能(実際にはすべてのAIインタラクションが組み込まれています)で使用する場合、Serenaのツールセット全体は、ユーザーが制御できないクライアント内部ツールとの不要なインタラクションを引き起こす可能性があります。これは特に編集ツールに当てはまり、この目的のために無効にする必要があるかもしれません。Serenaが様々な人気クライアントで使用されている経験が増えるにつれて、スムーズなエクスペリエンスを実現するためのベストプラクティスを収集し、強化していきます。

ガチョウ

gooseは、MCPサーバーと統合され、CLI(macOSではGUI)を提供するスタンドアロンのコーディングエージェントです。gooseを使用することで、現在、任意のLLMを使用してCLI経由でSerenaを実行する最もシンプルな方法となります。

ここの指示に従ってインストールしてください。

その後、 goose configureを使って拡張機能を追加します。Serena を追加するには、 Command-line Extensionオプションを選択し、 Serenaという名前を付けて、以下のコマンドを追加します。

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

Serenaは必要な編集やコマンド操作をすべて実行できるので、Gooseがデフォルトで有効にするdeveloper拡張機能を無効にする必要があります。そのためには、

goose configure

もう一度、 Toggle Extensionsオプションを選択し、Serena が有効になっていることを確認し、 developer選択しないでください。

以上です。Goose の設定オプションを読んで、何ができるか確認しましょう(ツール実行の権限レベルを設定するなど、できることはたくさんあります)。

Goose は、セッション終了時に MCP サーバーの Python プロセスを適切に終了しない場合があります。Goose での作業を終えた後は、Serena GUI を無効にするか、実行中の Python プロセスを手動でクリーンアップすることをお勧めします。

アグノエージェント

Agnoは、モデルに依存しないエージェントフレームワークです。これにより、Serenaを(MCPテクノロジに依存しない)エージェントとして動作させ、多数のLLMを基盤として使用できます。Agnoは現在、任意のLLMを使用してチャットGUIでSerenaを実行する最もシンプルな方法です(Macをお使いの場合は、セットアップがほとんど不要なGooseの方が適しているかもしれません)。

Agnoはまだ完全に安定しているわけではありませんが、独自のオープンソースUIを備えているため、チャットインターフェースを使ってエージェントを直接操作しやすいという理由から、私たちはAgnoを選択しました。Agnoを使用すると、Serenaはエージェントとして機能します(つまり、MCPサーバーではなくなります)。そのため、プログラム的に使用できます(例えば、ベンチマークやアプリケーション内での使用など)。

仕組みは次のとおりです ( Agno のドキュメントも参照してください)。

  1. npxでエージェント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サーバー版と同じツールが利用できます。

以下は、最新の Gemini モデルを使用して小規模な分析タスクを実行する Serena の短いデモです。

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

⚠️ 重要: MCP サーバーアプローチとは異なり、Agno UI でのツール実行ではユーザーの許可を求めません。特にシェルツールは、任意のコード実行を実行できるため、非常に重要です。Claude とのテストではこの問題は発生していませんが、許可することは完全に安全ではない可能性があります。Serena プロジェクトの設定ファイル ( .yml ) で、特定のツールを無効にすることもできます。

その他のエージェントフレームワーク

Agno エージェントは Agno UI を備えているため特に優れていますが、Serena を任意のエージェント フレームワーク ( pydantic-ailanggraphなど) に組み込むのは簡単です。

SerenaAgnoToolkitで agno に対して行ったように、選択したフレームワークのツールに Serena ツールのアダプターを作成する必要があります。

Serenaのツールと設定

Serenaは、セマンティックコード検索ツールと編集機能、そしてシェル実行機能を組み合わせています。ツールの完全なリストは以下をご覧ください。

一般的に、すべてのツールの使用が推奨されます。これにより、Serena は最大の価値を提供できるようになります。シェル コマンド (特にテスト) を実行することによってのみ、Serena はエラーを自律的に識別して修正できます。

ただし、 execute_shell_commandツールは任意のコード実行を可能にすることに注意してください。Serena を MCP サーバーとして使用する場合、クライアントは通常、ツールを実行する前にユーザーに許可を求めるため、ユーザーが事前に実行パラメータを検査する限り、これは問題になりません。ただし、懸念がある場合は、プロジェクトの .yml 設定ファイルで特定のコマンドを無効にすることができます。コードベースを変更せずに、Serena を純粋にコード解析と実装の提案にのみ使用したい場合は、設定で編集ツールを無効にすることを検討してください。

  • create_text_file
  • insert_after_symbol
  • insert_at_line
  • insert_before_symbol
  • replace_symbol_body
  • delete_lines

一般的に、作業内容が失われないように、必ず作業をバックアップし、バージョン管理システムを使用してください。

他のコーディングエージェントとの比較

私たちの知る限り、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ベースのコーディングエージェント

サブスクリプションベースのエージェントの代替として、Claude Code、Cline、Aider、Roo CodeなどのAPIベースのエージェントがあります。これらのエージェントの使用コストは、基盤となるLLMのAPIコストに直接マッピングされます。一部のエージェント(Clineなど)は、IDEの拡張機能として組み込むこともできます。これらのエージェントは非常に強力な場合が多く、主な欠点はAPIコスト(場合によっては非常に高額になる)です。

Serena自体はAPIベースのエージェントとして使用できます(上記のAgnoのセクションを参照)。Serena用のCLIツールや専用のIDE拡張機能はまだ開発していません(SerenaはMCPサーバーをサポートするあらゆるIDEで既に使用できるため、後者はおそらく必要ありません)。Claude CodeのようなCLIツールとしてのSerenaの需要があれば、開発を検討します。

Serenaと他のAPIベースのエージェントとの主な違いは、SerenaがMCPサーバーとしても使用できることです。そのため、APIキーを必要とせず、APIコストを回避できます。これはSerena独自の機能です。

その他のMCPベースのコーディングエージェント

DesktopCommandercodemcpなど、コーディング向けに設計されたMCPサーバーは他にも存在します。しかし、私たちの知る限り、これらのサーバーはセマンティックなコード検索・編集ツールを提供していません。これらのサーバーは、純粋にテキストベースの分析に依存しています。Serenaが独自の存在であり、特に大規模なコードベースにおいて、高度なコーディングタスクにおいて非常に強力なのは、言語サーバーとMCPの統合によるものです。

オンボーディングと思い出

Serena は、プロジェクトを初めて起動する際に、デフォルトでオンボーディングプロセスを実行します。このプロセスの目的は、Serena がプロジェクトに慣れ、記憶を蓄積し、将来のやり取りで活用できるようにすることです。

メモリはプロジェクトディレクトリの.serena/memories/に保存されるファイルで、エージェントはこれを読み取るかどうかを選択できます。必要に応じて自由に読み取って調整してください。また、手動で新しいメモリを追加することもできます。.serena .serena/memories/ディレクトリ内のすべてのファイルはメモリファイルです。

記憶機能はSerenaのユーザーエクスペリエンスを大幅に向上させることがわかりました。Serenaは必要に応じて新しい記憶を作成するように指示されています。

他のMCPサーバーとの組み合わせ

MCPクライアント経由でSerenaを使用する場合、他のMCPサーバーと連携して使用できます。ただし、ツール名の衝突にご注意ください。詳細は上記の情報をご覧ください。

現在、人気のファイルシステムMCPサーバーとの競合が発生しています。Serenaはファイルシステム操作も提供しているため、これら2つを同時に有効にする必要はおそらくないでしょう。

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.autocrlffalseに設定すると、行末の違いだけで大きな diff が発生する可能性があります。Windows では、この git 設定を有効にしておくことをお勧めします。

git config --global core.autocrlf true

コード編集における潜在的な問題

私たちの経験上、LLMはカウントが非常に苦手で、コードブロックを適切な場所に挿入するのが困難です。ほとんどの編集操作はシンボリックレベルで実行できるため、この問題は克服できます。しかし、行レベルの挿入が有用な場合もあります。

Serena は編集する行番号とコード ブロックを二重チェックするように指示されますが、問題が発生した場合にコードの編集方法を明示的に指示すると便利な場合があります。

文脈から外れて

長くて複雑なタスクや、Serena が大量のコンテンツを読み取ったタスクでは、コンテキスト トークンの制限に近づくことがあります。その場合は、多くの場合、新しい会話で続行するのが良い考えです。Serena には、進行状況の現在の状態の要約と、それを続行するためのすべての関連情報を作成するための専用ツールがあります。この要約を作成してメモリに書き込むように要求できます。次に、新しい会話で、Serena にメモリを読み取ってタスクを続行するように依頼します。経験上、これは非常にうまく機能しました。良い面としては、1 つのセッションでは要約が行われないため、Serena は通常迷子にならず (裏で要約を行う他のエージェントとは異なり)、正しい方向に進んでいるかどうかを時々確認するように指示されます。

さらに、Serena はコンテキストを節約するように指示されています(例えば、コードシンボルの本体を不必要に読み取らないようにするなど)。しかし、Claude は必ずしも節約が得意ではないことがわかりました(Gemini の方が得意のようです)。必要がないとわかっている場合は、本体を読み取らないように明示的に指示できます。

ツール実行の制御

Claude Desktopはツールを実行する前に確認メッセージを表示します。ほとんどのツールでは、「このチャットを許可」をクリックするだけで問題ありません。特にすべてのファイルがバージョン管理されている場合はなおさらです。ただし、 execute_shell_commandツールは例外です。このツールでは、各呼び出しを個別に確認することをお勧めします。このコマンドの各呼び出しを確認し、チャット全体に対して有効にしないことをおすすめします。

コードベースの構造化

Serenaはコード構造に基づいてコードを検索、読み取り、編集します。つまり、構造化されたコードであれば問題なく動作しますが、完全に構造化されていないコード(巨大な非モジュール関数を持つGodクラスなど)では動作しない可能性があります。型アノテーションもここで非常に役立ちます。コードが優れているほど、Serenaの動作も向上します。そのため、一般的には、構造化され、モジュール化され、型付けされたコードを記述することをお勧めします。これは、開発者だけでなく、AIにも役立ちます ;)。

ログ記録、リンティング、テスト

Serena はデバッグできません(現時点では、私たちの知る限り、デバッグを実行できるコーディングアシスタントはありません)。つまり、エージェントループ内の結果を改善するには、Serena はテストの実行、スクリプトの実行、リンティングの実行などを通じて情報を取得する必要があります。明確な情報を含むログメッセージを多数含め、有意義なテストを実施することは、多くの場合非常に役立ちます。特に後者は、エージェントの自己修正に役立つことが多いです。

一般的に、すべてのリンティング チェックとテストに合格した状態から編集タスクを開始することをお勧めします。

一般的なアドバイス

タスクを実際に実装する前に、時間をかけて概念化と計画を行うことが効果的であることが分かりました。特に、単純なタスクではなおさらです。これは、より良い結果を得るだけでなく、コントロール感と状況把握の精度向上にも役立ちます。1回のセッションで詳細な計画を立て、Serena がコードを大量に読み込んでコンテキストを構築し、その後、別のセッションで(適切なメモリを作成した後など)実装を続行することも可能です。

トラブルシューティング

Claude Desktop およびさまざまな MCP サーバー SDK での MCP サーバーのサポートは比較的新しい開発であり、不安定になる可能性があります。

MCPサーバーの動作設定は、プラットフォームやクライアントによって異なります。相対パスはエラーの原因となる可能性があるため、常に絶対パスを使用することをお勧めします。言語サーバーは別のサブプロセスで実行され、asyncioで呼び出されます。そのため、クライアントによってクラッシュすることがあります。Serenaのログウィンドウを有効にしていて、それが消えた場合は、何が起こったかがわかります。

一部のクライアント (goose など) は MCP サーバーを適切に終了しない可能性があります。ハングしている Python プロセスに注意し、必要に応じて手動で終了してください。

セレナのログ記録

トラブルシューティングを支援するために、ログ記録用の小さなGUIユーティリティを作成しました。ほとんどのクライアントでは、問題が発生した場合はプロジェクト設定( myproject.yml )からこのユーティリティを有効にすることを推奨します。また、多くのクライアントは、問題の特定に役立つMCPログも出力します。

ログ記録GUIは、すべてのクライアントおよびすべてのシステムで動作するとは限りません。現在、macOSおよびClineなどのVSCode拡張機能では動作しません。

謝辞

Serena は複数の既存のオープンソース テクノロジに基づいて構築されていますが、最も重要なものは次のとおりです。

  1. multilspy 。LSPに準拠した言語サーバーを美しくデザインしたラッパーです。Serenaに必要な記号ロジックでは拡張しにくいため、依存関係として組み込む代わりに、ソースコードをコピーしてニーズに合わせて調整しました。
  2. Python MCP SDK
  3. Agnoとそれに関連するagent-ui 。これを使用することで、MCP をサポートするモデル以外にも、あらゆるモデルで Serena が動作できるようになります。
  4. multilspy を通じて使用するすべての言語サーバー。

これらのプロジェクトがなければ、Serena は実現できなかったでしょう (または構築がかなり困難になっていたでしょう)。

Serenaのカスタマイズ

SerenaのAI機能を独自のアイデアで拡張するのは非常に簡単です。serena.agent.Toolをサブクラス化して新しいToolを実装し、 applyメソッド(インターフェースの一部ではありませんserena.agent.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 : シェルコマンドを実行します。
  • find_referencing_code_snippets : 指定された場所のシンボルが参照されているコード スニペットを検索します。
  • find_referencing_symbols : 指定された場所のシンボルを参照するシンボルを検索します (オプションでタイプ別にフィルタリング)。
  • find_symbol : 指定された名前/部分文字列を持つ/含むシンボルのグローバル (またはローカル) 検索を実行します (オプションでタイプ別にフィルタリング)。
  • get_active_project : 現在アクティブなプロジェクトの名前(存在する場合)を取得し、既存のプロジェクトを一覧表示します。
  • get_symbols_overview : 指定されたファイルまたはディレクトリで定義されている最上位レベルのシンボルの概要を取得します。
  • 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 : コードベースに加えられた変更を要約するための手順を提供します。
  • think_about_collected_information : 収集した情報の完全性について熟考するための思考ツール。
  • think_about_task_adherence : エージェントが現在のタスクを順調に進めているかどうかを判断するための思考ツール。
  • think_about_whether_you_are_done : タスクが本当に完了したかどうかを判断するための思考ツール。
  • write_memory : 名前付きメモリを (将来の参照用に) Serena のプロジェクト固有のメモリ ストアに書き込みます。
ID: jga5aoweo7