世界を動かす技術を、日本語で。

zclaw: ESP32上で動作する888 KB未満のパーソナルAIアシスタント

概要

zclaw は、ESP32向けに設計された最小クラスのAIパーソナルアシスタント。 C言語 で実装され、ファームウェアサイズは 888 KiB以下 に抑制。 GPIO制御、スケジュール管理、永続メモリ、自然言語によるツール作成が可能。 Wi-Fi/TLS/ESP-IDF ランタイムも含めてこのサイズを実現。 セットアップや開発が容易で、カスタマイズや拡張も推奨。

zclawとは

  • ESP32ボード向け AIパーソナルアシスタント
  • C言語 で記述、全機能を 888 KiB以内 に収めたファームウェア
  • ESP-IDF/FreeRTOS ランタイム、Wi-Fi/ネットワーク、TLS/暗号化、証明書バンドルも含む
  • スケジュールタスク、GPIO制御、永続メモリ、カスタムツール作成機能
  • 自然言語 による操作やツール組み合わせ
  • Anthropic、OpenAI、OpenRouter など主要プロバイダー対応
  • Telegram やホスト型Webリレー経由でチャット可能
  • パーソナリティ選択(中立、フレンドリー、技術志向、ウィット系)

主な機能・特徴

  • スケジュール管理 :タイムゾーン対応、日次・周期・一回限り設定
  • GPIO制御 :安全機構付きの読み書き、バルク読み出し対応
  • 永続メモリ :再起動後もデータ保持
  • カスタムツール :ユーザー独自の拡張が可能
  • レートリミット :デフォルトで1時間100回、1日1000回(main/config.hで変更可)
  • プロバイダー選択 :Anthropic/OpenAI/OpenRouter
  • ペルソナ切り替え :neutral/friendly/technical/witty

セットアップ・導入手順

  • ワンラインブートストラップ (macOS/Linux)
    • bash <(curl -fsSL https://raw.githubusercontent.com/tnm/zclaw/main/scripts/bootstrap.sh)
  • クローン済みの場合
    • ./install.sh
  • 非対話インストール
    • ./install.sh -y
  • セキュアモード (暗号化資格情報)
    • --flash-mode secureオプションまたは./scripts/flash-secure.sh
  • WiFi・LLM資格情報登録
    • ./scripts/provision.sh
  • 動作確認
    • ./scripts/web-relay.shでテストメッセージ送信
  • シリアルポート競合時
    • ./scripts/release-port.shで解放
  • 再プロビジョニング
    • ./scripts/provision-dev.sh + ローカルプロファイル

ローカル開発・ハッキング

  • 開発ループ例
    • ./scripts/test.sh host
    • ./scripts/build.sh
    • ./scripts/flash.sh --kill-monitor /dev/cu.usbmodem1101
    • ./scripts/provision-dev.sh --port /dev/cu.usbmodem1101
    • ./scripts/monitor.sh /dev/cu.usbmodem1101
  • プロファイルセットアップ
    • ./scripts/provision-dev.sh --write-template
    • 編集:~/.config/zclaw/dev.env
    • ./scripts/provision-dev.sh --show-config
  • Telegram履歴消去
    • ./scripts/telegram-clear-backlog.sh --show-config

その他便利スクリプト

  • ./scripts/flash-secure.sh:暗号化書き込み
  • ./scripts/provision.sh:NVSへの資格情報登録
  • ./scripts/provision-dev.sh:ローカルプロファイル再利用
  • ./scripts/telegram-clear-backlog.sh:Telegramキュー消去
  • ./scripts/erase.sh:NVS/全フラッシュ消去(ガードレール付)
  • ./scripts/monitor.sh:シリアルモニタ
  • ./scripts/emulate.sh:QEMUプロファイル実行
  • ./scripts/web-relay.sh:Webリレー+モバイルチャットUI
  • ./scripts/benchmark.sh:リレー/シリアル遅延ベンチマーク
  • ./scripts/test.sh:ホスト/デバイステスト
  • ./scripts/test-api.sh:プロバイダーAPIチェック

ファームウェアサイズ内訳(esp32s3例)

  • zclawアプリロジック (libmain.a): ~34.9 KiB (4.1%)
  • Wi-Fi+ネットワークスタック~388.0 KiB (45.7%)
  • TLS/暗号化スタック~110.3 KiB (13.0%)
  • 証明書バンドル+アプリメタデータ~97.4 KiB (11.5%)
  • その他ESP-IDF/ランタイム/ドライバ/libc~218.8 KiB (25.8%)
  • 合計イメージサイズ~849.6 KiB (上限内)

レイテンシベンチマーク

  • リレーパス./scripts/benchmark.sh --mode relay --count 20 --message "ping"
  • シリアル直結./scripts/benchmark.sh --mode serial --serial-port /dev/cu.usbmodem1101 --count 20 --message "ping"

ハードウェア対応・推奨

  • テスト済み :ESP32-C3/ESP32-S3/ESP32-C6
  • その他ESP32 :一部は手動でESP-IDFターゲット設定が必要な場合あり
  • 推奨ボード :Seeed XIAO ESP32-C3

ドキュメント・サポート

  • 公式ドキュメントサイト :完全なガイド・リファレンス提供
  • README/Changelog :Webで閲覧可能
  • MITライセンス

Hackerたちの意見

関連リンク: https://github.com/sipeed/picoclaw

これ、めっちゃ素晴らしいね。昔は「スマートデバイス」やIoTについて話してたけど…もしこれらの接続されたデバイスがもう少し自律性やコミュニケーション能力を持ったら、どうなるんだろうってすごく気になる。悪い面を想像するのは簡単だけど、ESP23デバイスからメールを管理されたくはないし、他にどんな可能性が開けるんだろう?

すごく意見が強いサーモスタット?

掃除機がエアコンのサーモスタットとDiscordで連携して、冷蔵庫に宣戦布告して、最後にそれについてFacebookにプロパガンダを投稿する。

小さいOLEDディスプレイが付いたESP32をいくつか持ってるんだけど、これを使って「インテリジェント」なタマゴッチを作れるかもって考えてる。HNの皆は他に面白いアイデアある?

それ、いいね!0.46インチのディスプレイが付いたスーパーミニタイプのやつ?いろんなことに使えて楽しいよね。

実は数ヶ月前に全く同じことを試してみたんだけど、ESP32なしでね。結局、状態遷移機を作って、いろんな定数を定義することになるし、そうしないとLLMがループにハマっちゃうんだよね。うーん、どうやら食べるタイミングがわからないみたい。お腹の変数を追加してみるか…とか、どんどん続けていくうちに、LLMに何をさせたいのかもわからなくなっちゃう。

これ、全体的にどれだけ馬鹿げてるかのいい例だね。このクローにはほとんど何もない。結局、LLMにAPIを呼ぶ能力を与えると、ちゃんと呼ぶんだよね。

もしみんなが自分専用のエージェントを24時間365日動かすことに大きな価値があるってことになったら、予想以上に計算リソースが必要になるかもしれないね。(それは大きな「もし」だけど!自分自身はその可能性にあまり納得してないけど、考えてみる価値はあるよね。)

OpenClawの盛り上がりで一番驚いたのは、テクノロジー業界の人たちがコンピュータについてほとんど知らないことだよ…業界の大半がnode_modulesフォルダ以上の深さを見たことがないみたい。

最近これを開発してたんだけど、これは「全体がどれだけ馬鹿げているかの素晴らしい例だ、車にはほとんど何もない」と言ってるようなもんだよ。個人アシスタントをうまく機能させたければ、やることがたくさんあるんだ。

プログラミングも同じだよね。キーボードでタイプするだけじゃん。そんなに難しいことじゃないでしょ?

わお、珍しいbashパターンだね。もっと一般的なcurl foo.sh | bashの代わりだけど、同じくらい危険だよ。もしこれをやるなら、これらのどれかを試してみて。# ファイルのコピーを作るけど、bashにストリーミングする curl foo.sh | tee /tmp/foo.sh | bash # ファイルのコピーはないけど、ストリームが終わったらbashが実行される bash -c "$(curl foo.sh)" # ベスト: ファイルのコピーを作って、ストリームが終わるのを確実にする curl foo.sh -o /tmp/foo.sh && bash $_ 私は最後のやつが好き。

もしすごく細かいことを言いたいなら、ユーザーがbashを使っていない場合に備えて、コマンドをシェルに依存しないようにしてみて。

t=$(mktemp) && [ -w $t ] && curl foo.sh -o $t && echo "$t lksjdfkljshdkfljhdsklfjhslkdjfhsdlkjfhslkdjhf" | sha256sum -c - && bash $t これは標準のtmpファイルを使ってて、書き込み可能か確認してる(tmpファイルの作成が失敗することもあるからね)、実行前に暗号ハッシュをチェックしてる。

同等だけど同じくらい危険。私の理解では、「curlを直接bashに送る」と「curlを一時ファイルに送ってからそのファイルを実行する」の主な違いは「攻撃者がcurlを直接bashに送ったときに追加の悪意のあるコマンドを注入できること」だと思う。もしダウンロードスクリプトのソースコード(およびバイナリを生成するために使われたソースコード)を読むつもりがないなら、これは「読めないものは信用しないけど、読めるものは(読む必要なく)信用する」という態度を示唆してる。悪意のあるコードは「curl to bash」に注入される悪意のあるコマンドよりも、事前にコンパイルされたバイナリに含まれている可能性が高いと思う。-- ただし、「curl ... | tee foo | bash」からコマンドが注入される事例があったら、ぜひ知りたいな。

2行のbashループで個人AIアシスタント作れないの? 1. 好きなマルチモーダルLLMモデルを呼び出す 2. ターミナルでコマンドを実行して、コマンドをLLMにパイプする 実際には1行で済むよ:LLMを呼び出す > bash.sh で、LLMが自分自身を呼び出すように指示したり、あなたのために働く「エージェント」に広げたりできる。好きなプログラミング言語を使ってね。どの言語でも簡単にできるよ :) $task = "かわいい猫の写真を送る"; $context = "この$taskを実行するbashスクリプトを出力して。スクリプトは次のプロンプトを返すべき。タスクが終わるまで続けて。私のアカウントの鍵:$keys。お願いだからハッキングしないで"; do { $trust_me_bro_my_model_rocks_RCE = call_llm($context); $context = exec( $trust_me_bro_my_model_rocks_RCE ) } while ($trust_me_bro_my_model_rocks_RCE && !$pwned)

Linux用の軽量「クロー」スタイルのエージェントでおすすめは何ですか?コンテナ化やサンドボックス化は必要なくて、新しいVPSで重要なデータにアクセスしない状態で動かす予定です。

もしWhatsAppとウェブチャットだけが欲しいなら、NanoClawからhttps://github.com/rcarmo/piclawをハックして、自分のウェブフロントエンドを作ってるよ。シンプルなウェブアプリが好きだから、tailscale経由でアクセスできるのがいいんだ。

ゼロクローかな?

ESP32でクローを動かす面白いところは、計算能力じゃなくて、常に稼働していてメンテナンスがほとんどいらないってことだよね。Linuxのボックスで自動化パイプラインを動かしてるけど、一番の悩みはAIのロジックじゃなくて、ホストを生かしておくこと、アップデートすること、そしてOOMキルに対処することなんだ。クラウドAPIにプロキシして、ツールのオーケストレーションをローカルで処理するESP32は、シンプルなエージェントループにはフルOSよりも信頼性の高いデプロイ先になると思う。失敗のパターンもシンプルで予測しやすいしね。

それだと、失敗のポイントが増えちゃうよ。クラウドのマシンがダウンするかもしれないし、インターネットが切れるかもしれないし、無線が失敗するか、他にもいろんな問題が起こる可能性がある。悪い使い方ではないけど、他の条件が同じなら、問題は減らないよね。

Linuxで同じくらいシンプルにできない?ただやってることが多いだけじゃん。t. 俺は、寿命が来たときにしか触らない12台のApacheサーバーを持ってるよ。

こういう*クローの協力バージョンって今あるのかな?例えば、「管理者」が自宅サーバーで自己ホストして、家族全員が使えるようなやつ。確か、OpenClawには「プロフィール」のバージョンがあったけど、家族のメンバーがボットと共有チャットで協力できて、個別のプライベートチャットも持てるのかな。

クローのことはあまり追ってなかったけど、最近似たようなものを作ったよ。セルフホスティングで、シグナルを通して動いて、グループチャットもサポートしてる(ホワイトリストに登録したアカウントのみ)。今、食料品の自動化を設定し終わったところで、エージェントが過去の注文に基づいてスタートリストを提供するんだ(ローカルに保存されたものか、店舗サイトから取得したもの)。グループのメンバー全員が意見を出せて、アイテムを追加したり削除したりできる。エージェントは特注のブラウザツールを使って店舗にログインして、最終リストを使ってカートを作成するんだ(必要に応じて追加のリクエストアイテムを検索することもできる)。カートを確認して、(後で)配達の注文を出す予定。まだチェックアウトプロセスは完全には実装してないけど、エージェントに支出権限を持たせるかどうかは迷ってる。今のところは、最後の2クリックは手動で終わらせてる。ほんとにクレイジーな時代だね。これを作るのは簡単だったから、もし誰かがすでにオープンソースにしてなかったら、すぐに誰かがやるだろうね。

openclawについて考えれば考えるほど、AIエージェントにとってのROSみたいな存在だと思えてきた。openclawは分散ノードとどうやってやり取りするかを定義してるけど(それが「オーケストレーター」にどんな能力を提供するか)、実際の利点は多くのタスク特化型ノードが組み合わさって、部分の合計以上のものを作り出すところだよね。

openclawは分散ノードとどうやってやり取りするかを定義してる それって本当に?私の知る限りでは、「仕様」や「プロトコル」はなくて、いろんな統合がある「プラットフォーム」を動かしてるだけで、openclaw自体がそれを指定してるわけじゃないよ。間違ってたら教えてほしいけど、openclawには一度の週末だけ触ったことがあるだけだから。