> ## Documentation Index
> Fetch the complete documentation index at: https://docs.coreweave.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Claude Agent SDK

> Agent Lens を使用して、Claude Agent SDK で構築したエージェントをトレースします。

Claude Agent SDK を使用すると、Claude を活用したエージェントアプリケーションをすばやく構築できます。CoreWeave Agent Lens を Claude エージェントに統合すると、エージェントのクエリ、モデルの応答、ツールの使用、マルチターンの会話など、エージェントの Call を自動的にトレースできます。

<Note>
  This integration uses the Weights & Biases Weave SDK (`weave`), because the CoreWeave Forge SDK doesn't support this framework yet. Traces you send with Weave appear in Agent Lens, because both products share the same trace data.
</Note>

<h2 id="trace-claude-agent-sdk-agents-with-agent-lens">
  Agent Lens で Claude Agent SDK のエージェントをトレースする
</h2>

<Tabs>
  <Tab title="Python">
    Weave SDK は [Claude Agent SDK for Python](https://github.com/anthropics/claude-agent-sdk-python) に自動でパッチを適用するため、最小限のセットアップで Claude エージェントのトレースを取得できます。

    このガイドでは、Weave を初期化し、MCP ツールを使用するマルチターンの Claude エージェントを `query()` で実行する方法を説明します。Agent Lens は、会話、モデルの Call、ツール呼び出しをエンドツーエンドで自動的にトレースします。

    <h3 id="prerequisites">
      前提条件
    </h3>

    * CoreWeave Forge アカウントと、`WANDB_API_KEY` 環境変数に設定した [APIキー](https://forge.coreweave.com/settings#apikeys)。
    * `ANTHROPIC_API_KEY` 環境変数に設定した Anthropic APIキー。
    * Python 3.10 以降。
  </Tab>

  <Tab title="TypeScript">
    Weave SDK は [`@anthropic-ai/claude-agent-sdk`](https://github.com/anthropics/claude-agent-sdk) と連携し、`query()` の Call をエージェント スパン、モデルの応答、ツール呼び出しも含めて自動的にトレースします。

    <h3 id="prerequisites-2">
      前提条件
    </h3>

    * CoreWeave Forge アカウントと、`WANDB_API_KEY` 環境変数に設定した [APIキー](https://forge.coreweave.com/settings#apikeys)。
    * `ANTHROPIC_API_KEY` 環境変数に設定した Anthropic APIキー。
    * Node.js 18 以降。
    * `@anthropic-ai/claude-agent-sdk` バージョン `0.3.178` 以降。
  </Tab>
</Tabs>

<h3 id="install-packages">
  パッケージをインストールする
</h3>

開発環境に次のパッケージをインストールします。`weave` パッケージはトレースを取得し、`claude-agent-sdk` はエージェントのランタイムを提供します。残りのパッケージはサンプルのツールで使用します。

<CodeGroup>
  ```bash Python theme={"system"}
  pip install weave claude-agent-sdk requests
  ```

  ```bash TypeScript theme={"system"}
  npm install weave @anthropic-ai/claude-agent-sdk zod
  ```
</CodeGroup>

<h3 id="initialize-agent-lens-in-your-code">
  コードで Agent Lens を初期化する
</h3>

<Tabs>
  <Tab title="Python">
    プロジェクトのコードに `weave.init` を追加し、Forge のチーム名とプロジェクト名を更新してから、通常どおりにエージェントを構築します。`weave.init` によって自動パッチ適用が有効になり、Claude Agent SDK からトレースを取得できるようになります。

    この例では、`wikipedia_search` MCP ツールを定義し、3 ターンの会話を実行します。各ターンはそれぞれ個別の `query()` 呼び出しですが、2 ターン目以降では最初のターンのセッション ID を `resume` に渡します。これにより、すべてのターンが Agent Lens の **Conversations** タブで 1 つの会話としてグループ化されます。最初の 2 ターンでは Wikipedia のルックアップが実行され、3 ターン目ではツールを呼び出さずに、それまでの会話のコンテキストを使用して要約を生成します。

    ```python lines highlight="13,49,55" theme={"system"}
    import anyio
    import requests
    import weave

    from claude_agent_sdk import (
        ClaudeAgentOptions,
        ResultMessage,
        create_sdk_mcp_server,
        query,
        tool,
    )

    weave.init("[YOUR-TEAM]/[YOUR-PROJECT]")

    @tool(
        "wikipedia_search",
        "Search Wikipedia for a topic and return its title and intro paragraph.",
        {"query": str},
    )
    async def wikipedia_search(args: dict) -> dict:
        r = requests.get(
            "https://en.wikipedia.org/w/api.php",
            params={
                "action": "query", "generator": "search", "gsrsearch": args["query"], "gsrlimit": 1,
                "prop": "extracts", "exintro": True, "explaintext": True, "format": "json",
            },
            headers={"User-Agent": "weave-demo"},
        ).json()
        page = next(iter(r["query"]["pages"].values()))
        return {"content": [{"type": "text", "text": f"{page['title']}: {page['extract']}"}]}

    wiki_server = create_sdk_mcp_server(
        name="wiki",
        version="1.0.0",
        tools=[wikipedia_search],
    )

    async def main():
        session_id = None

        for question in [
            "Who founded Anthropic?",
            "What is Claude (the AI assistant)?",
            "Summarize what we discussed in one sentence.",
        ]:
            options = ClaudeAgentOptions(
                mcp_servers={"wiki": wiki_server},
                allowed_tools=["mcp__wiki__wikipedia_search"],
                resume=session_id,
            )
            print(f"USER: {question}")

            async for message in query(prompt=question, options=options):
                if isinstance(message, ResultMessage):
                    session_id = message.session_id
                    print(f"AGENT: {message.result}\n")


    anyio.run(main)
    ```

    `query()` を呼び出すたびに、`invoke_agent` ルートスパンが 1 つ生成されます。後続のターンは同じセッションを再開するため、Weave はすべてのスパンに同じ `gen_ai.conversation.id` を付与し、Agent Lens はそれらを 1 つの会話としてグループ化します。再利用する ID は `ResultMessage.session_id` に格納されています。また、最初のターンでは `resume` に `None` を指定でき、その場合は新しいセッションが開始されます。

    `resume` を指定しない場合、ターンごとに個別のセッションが開始され、それぞれ別の会話として表示されます。ただし、`ClaudeSDKClient` は例外です。このクライアントは `async with` ブロックの有効期間中、1 つのセッションを開いたまま保持するため、同じクライアント経由で送信したターンは最初からグループ化されます。Weave はどちらの経路にもパッチを適用します。
  </Tab>

  <Tab title="TypeScript">
    Weave は、モジュールローダーフックを介して `query()` を自動的にインストルメントします。必要なセットアップはモジュールシステムによって若干異なります。CommonJS と ESM の違い、および Weave のローダーフックの仕組みの詳細については、[TypeScript SDK サードパーティインテグレーションガイド](/ja/products/wandb/weave/guides/integrations/js)を参照してください。

    * **CommonJS project**: 追加の設定は不要です。自動インストルメンテーションが最初に実行されるように、`@anthropic-ai/claude-agent-sdk` より前に `weave` を require してください。
    * **ESM project**: インストルメンテーションが他のモジュールより先に読み込まれるように、`--import=weave/instrument` フラグを付けて Node を起動してください。

    この例では、`wikipedia_search` MCP ツールを定義し、3 ターンの会話を実行します。各ターンはそれぞれ独立した `query()` Call ですが、2 ターン目以降は最初のターンの `session_id` を `resume` に渡すため、Agent Lens の Conversations ではすべてのターンが 1 つのセッションとしてまとめられます。最初の 2 ターンでは Wikipedia のルックアップが実行され、3 ターン目ではツール呼び出しを行わず、それまでの会話コンテキストをもとに要約を生成します。

    ```typescript lines highlight="36" title="main.mjs" theme={"system"}
    import * as weave from "weave";
    import { createSdkMcpServer, query, tool, type Options } from "@anthropic-ai/claude-agent-sdk";
    import { z } from "zod";

    const wikipediaSearch = tool(
        "wikipedia_search",
        "Search Wikipedia for a topic and return its title and intro paragraph.",
        { query: z.string().describe("The topic to search for") },
        async ({ query }) => {
        const url = new URL("https://en.wikipedia.org/w/api.php");
        url.search = new URLSearchParams({
            action: "query",
            generator: "search",
            gsrsearch: query,
            gsrlimit: "1",
            prop: "extracts",
            exintro: "true",
            explaintext: "true",
            format: "json",
        }).toString();

        const response = await fetch(url, { headers: { "User-Agent": "weave-demo" } });
        const data = await response.json();
        const page = Object.values(data.query.pages)[0] as { title: string; extract: string };
        return { content: [{ type: "text" as const, text: `${page.title}: ${page.extract}` }] };
        },
    );

    const wikiServer = createSdkMcpServer({
        name: "wiki",
        version: "1.0.0",
        tools: [wikipediaSearch],
    });

    async function main() {
        await weave.init("[YOUR-TEAM]/[YOUR-PROJECT]");

        const baseOptions: Options = {
        model: "claude-sonnet-4-5",
        maxTurns: 4,
        mcpServers: { wiki: wikiServer },
        allowedTools: ["mcp__wiki__wikipedia_search"],
        };

        const questions = [
        "Who founded Anthropic?",
        "What is Claude (the AI assistant)?",
        "Summarize what we discussed in one sentence.",
        ];

        let sessionId: string | undefined;

        for (const prompt of questions) {
        const options: Options = sessionId
            ? { ...baseOptions, resume: sessionId }
            : baseOptions;

        console.log(`USER: ${prompt}`);
        for await (const message of query({ prompt, options })) {
            if (message.type === "system" && message.subtype === "init") {
            sessionId ??= message.session_id;
            }
            if (message.type === "result" && message.subtype === "success") {
            console.log(`AGENT: ${message.result}\n`);
            }
        }
        }
    }

    main().catch(console.error);
    ```

    `query()` を呼び出すたびに、`invoke_agent` ルートスパンが 1 つ生成されます。後続のターンは同じ `session_id` を引き継いで再開するため、Agent Lens はすべてのスパンに同じ `gen_ai.conversation.id` を付与し、Conversations ビューで 1 つのセッションとしてまとめて表示します。

    この例を `main.mjs` として保存し、`--import=weave/instrument` フラグを付けて実行します。これにより、ローダーフックが他のどのモジュールよりも先に実行されます。

    ```bash theme={"system"}
    node --import=weave/instrument main.mjs
    ```
  </Tab>
</Tabs>

### View your traces in Agent Lens

After the script runs, `weave.init()` prints a link to your project in Weave. The same traces appear in Agent Lens, because both products share the same trace data. To view them in Agent Lens:

1. Navigate to [CoreWeave Forge](https://forge.coreweave.com) and select **Agent Lens** from the product menu.
2. Select your project.
3. In the Agent Lens side menu, select **Conversations**, and then select your conversation.

Each turn renders as an `invoke_agent` span with nested `chat` and `execute_tool` spans. Each span shows its input, model, output, token usage, and tool results.

For more information, see [View agent activity](/products/agent-lens/conversations/view-activity).
