3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude Managed AgentsでLチカ!(エージェント時代のIoTはこれか?!)

3
Posted at

Claudeのマネージドエージェントを少し触り始めました。

先日のアップデートで「Self-hosted sandboxes」がサポートされました。

ツール実行のためのサンドボックス環境をClaude Platformの外に用意できるサービスで、CloudflareやVercelで提供が開始されています。Anthropicの公開に合わせて各社のブログでも発表されています。

発表を斜め読みしていると、「外部のクラウドベンダーで動かせるんだ、へー」ぐらいなんですが、ドキュメントを読むと、特にクラウドベンダーでの動作に制限されるわけではなく、オンプレ環境でも動作することがわかりました。

我が家のオンプレ環境といえば、ラズパイ。
ラズパイでやることといえばLチカ。

ということで、Claude Managed AgentsでLチカをしてみました!

前提条件

  • Claude Consoleでのワークスペースの作成
  • APIキーの発行(環境変数のANTHROPIC_API_KEYにセット)
  • ラズパイ(我が家はPi 4 8GB、OSはRaspberry Pi OS)
  • 赤色LEDをGPIO 17とつなぐ

配線はこちらを参考にしました。

構築

Claude Consoleでやっていきます。

1. エージェントを作成

左メニューの「エージェント」を開き、「新しいエージェント」ボタンをクリックします。

以下のYAMLを貼り付け、エージェントを作成します。

name: Raspberry Pi LED Assistant
model:
  id: claude-haiku-4-5
  speed: standard
system: |-
  You are running on a Raspberry Pi.
  A red LED is connected to GPIO 17.
  When asked to control the LED, do so on that hardware.
  Write clean, well-documented code.
mcp_servers: []
tools:
  - configs: []
    default_config:
      enabled: true
      permission_policy:
        type: always_allow
    type: agent_toolset_20260401
skills: []
metadata: {}

2. 環境を作成

左メニューの「環境」を開き、「環境を追加」ボタンをクリックします。

任意の名前をつけて、ホスティングの種類を「セルフホスト型」に変更します。

作成後の画面の画面で、上部にある環境ID(ANTHROPIC_ENVIRONMENT_ID)は後で使用するのでメモします。「環境キーを生成」をクリックし、環境キー(ANTHROPIC_ENVIRONMENT_KEY)を生成し、これもメモします。

3. ラズパイで起動するワーカーを用意

Mnaged Agentsとサンドボックス間の通信方法は2つあります。

  • always-on worker … サンドボックス側から接続(多分WebSocketかな?)
  • webhook-triggered handler … Managed AgentsからのWebhookで接続

クラウド提供型サンドボックスはおそらくWebhookタイプだと思います。

オンプレや宅内ラズパイの場合はalways-on workerタイプを使うと、Webhookエンドポイントを外部公開する必要がないので、安心してつかますね。

ワーカーを用意します。

uvでプロジェクトを初期化し、anthropicライブラリーをインストールします。

uv init --python 3.13
uv add anthropic

ワーカーのPythonスクリプトはこんな感じ。

worker.py
import asyncio
import logging
import os
from pathlib import Path

from anthropic import AsyncAnthropic

logging.basicConfig(
    level=logging.INFO,
    format="%(asctime)s %(levelname)s %(name)s: %(message)s",
)


async def main() -> None:
    client = AsyncAnthropic(api_key=os.environ["ANTHROPIC_API_KEY"])
    workdir = Path(__file__).resolve().parent / "workspace"
    workdir.mkdir(exist_ok=True)
    worker = client.beta.environments.work.worker(
        environment_id=os.environ["ANTHROPIC_ENVIRONMENT_ID"],
        environment_key=os.environ["ANTHROPIC_ENVIRONMENT_KEY"],
        workdir=workdir,
    )
    await worker.run()


if __name__ == "__main__":
    asyncio.run(main())

ANTHROPIC_API_KEYと、環境作成時に取得したANTHROPIC_ENVIRONMENT_IDANTHROPIC_ENVIRONMENT_KEYを環境変数にセットし、以下のコマンドで起動します。

uv run worker.py

4. セッションを作成

Claude Consoleに戻って、セッションを作成します。

先ほど作成したエージェントと環境を選択します。

これで準備は完了です。

Claude Managed AgentsでLチカ!

セッションでエージェントに指示を行います!

赤色LEDを3回点滅させて

すると、、何度か試行錯誤の後に、、

点滅しました!

写真だとエージェントから実行したことは伝わらないですが(笑)、間違いなくエージェントが実行してくれました。

セッションの画面は実行履歴が見れていいですね!

まとめ

想定された使い方ではない気もしますが、Claude Managed AgentsでLチカできました!

たかがLチカ、されどLチカ。可能性は無限大!

頭脳がクラウドにあって、ツールがエッジにあります。これは、来るんじゃないですか?!


コンソールを使わず、API呼び出しで実施する手順も作成し、GitHubに公開してます~

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?