0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

grok-devをnpm installしたら、暗号ウォレットまで付いてきた

0
Posted at

はじめに

ターミナル型のコーディングエージェントを1つ増やすだけのつもりで npm install すると、依存ツリーに見覚えのない名前が並ぶことがあります。xAIのGrok APIに接続するオープンソースCLI「grok-dev」(GitHub上のリポジトリ名は grok-cli)がまさにそれで、コーディングエージェントの体裁を取りながら暗号資産ウォレットの実装一式を抱えていました。

先に断っておくと、grok-devはxAI公式のツールではありません。READMEには"community-built, open-source, and not affiliated with"xAI Corporationと明記されています1。xAI公式のコーディングCLIは「Grok Build」という別プロダクトで、こちらは本ブログの別記事2で扱っています。名前が近い2つのツールを混同すると挙動の説明が食い違うため、この記事では非公式版であるgrok-devだけを対象にします。

この記事で分かること

  • grok-devをインストールしたときに実際に入る依存パッケージの数と内訳
  • node 実行では動かず bun 実行でだけ動くという実行環境の制約
  • CLIに内蔵されている暗号資産ウォレット機能(x402プロトコル)の中身
  • APIキーなしで確認できるコマンド・確認できないコマンドの境界線

対象読者

  • OSSのコーディングエージェントCLIを比較検討している方
  • npm installで思わぬ依存関係が入ってくることに警戒したい方
  • x402のようなAIエージェント向け決済プロトコルの実装例を知りたい方

前提環境

以下はすべて本記事執筆時に実機で確認した値です。

  • OS: Linux(カーネル 6.18.5)
  • Node.js: v22.22.2
  • npm: 10.9.7
  • Bun: 1.3.11
  • grok-dev: 1.1.7(npm公開日 2026-03-20、最終更新 2026-05-15)3

TL;DR

  • npm install grok-dev を実行すると、node_modules直下だけで577ディレクトリ、package-lock.json記載のパッケージエントリは1228件、容量1.8GBになりました。
  • 内訳を見ると @coinbase/agentkit が直接依存に入っており、そこから @metamask 系・@walletconnect 系・opensea-js・ethers まで芋づる式に入ります。
  • node dist/index.js は ERR_MODULE_NOT_FOUND で起動できず、bun dist/index.js だと1.1.7が正常に返りました。
  • wallet サブコマンドが実在し、x402というCoinbase発のAIエージェント向け決済プロトコル用のウォレットを管理する機能でした。

grok-devとは

GitHubのスター数は3.3k、ライセンスはMIT、リポジトリ名は superagent-ai/grok-cli です1。READMEの説明を要約すると、xAIのGrok APIに接続するオープンソースの端末型コーディングエージェントで、X検索・Web検索連携、サブエージェント、メディア生成、Telegram経由のリモート操作、OpenTUIによるターミナルUIを備えます。

インストール方法はcurlスクリプトとnpm/bunの2通りが案内されています。今回はCI環境を汚さないよう一時ディレクトリでnpm経由のインストールを検証しました。

mkdir grok-cli-test && cd grok-cli-test
npm install grok-dev

インストール自体は2分ほどで完了し、エラーは出ませんでした。ただし出力には deprecated 警告が数十行流れ、最後に以下のサマリーが出ます。

added 1219 packages in 2m
186 packages are looking for funding

コーディングエージェント1本分にしては数が多いと感じ、node_modulesの中身を数えてみました。

依存関係を数えてみた

find node_modules -maxdepth 1 -type d | wc -l
# → 577

du -sh node_modules
# → 1.8G

npmの added 表示は直接インストールした差分ベースの集計のため、package-lock.jsonに記録されている全エントリ数(ネストした依存やメタデータ込み)とは数え方が異なります。実際にlock fileを数えると1228件でした。

node -e "const d=require('./package-lock.json'); console.log(Object.keys(d.packages||{}).length)"
# → 1228

コーディングエージェントの依存としては見慣れない名前を探すと、暗号資産まわりのパッケージ群がまとまって見つかりました。

find node_modules -maxdepth 1 -type d \
  \( -iname "*metamask*" -o -iname "*walletconnect*" -o -iname "*opensea*" \
     -o -iname "*coinbase*" -o -iname "*web3*" -o -iname "*ethers*" \)
node_modules/@coinbase
node_modules/@ethersproject
node_modules/@metamask
node_modules/@opensea
node_modules/@walletconnect
node_modules/ethers
node_modules/opensea-js
node_modules/web3-utils

grok-devのpackage.jsonを直接確認すると、この経路の起点が分かります。dependencies に @coinbase/agentkit が直接記載されており、これがCoinbase製のオンチェーンエージェントSDKです4。ウォレット接続・署名・取引所連携をまとめて提供するライブラリなので、MetaMaskやWalletConnect、OpenSeaのSDKまで芋づる式に連れてくるのは、依存グラフとしては筋が通っています。問題は、コーディングエージェントを1つ試したいだけの利用者にとって、その芋づるが見えにくいことです。

nodeでは起動せず、bunだと起動した

package.jsonの bin フィールドは dist/index.js を指しています。まずは素直にnodeで叩いてみました。

node node_modules/grok-dev/dist/index.js --version
node:internal/modules/esm/resolve:275
    throw new ERR_MODULE_NOT_FOUND(
Error [ERR_MODULE_NOT_FOUND]: Cannot find module
'.../node_modules/grok-dev/dist/agent/agent' imported from
'.../node_modules/grok-dev/dist/index.js'

dist/agent/ ディレクトリを見ると agent.js は実在します。

ls node_modules/grok-dev/dist/agent/ | head -3
# agent.d.ts  agent.js  agent.js.map

ファイルはあるのにNodeのESMリゾルバは拾えません。import指定が拡張子なし(from "./agent/agent" のような形)になっており、NodeのESM解決は拡張子の省略を許容しない一方、Bunのモジュール解決は拡張子省略を許容するため、ビルド成果物がBun前提のまま公開されているのが原因と考えられます。実際、同じコマンドを bun に差し替えると通りました。

bun node_modules/grok-dev/dist/index.js --version
# → 1.1.7

READMEのインストール手順が"Built with Bun and OpenTUI"と明記している1とおり、npm install はできても実行はBunでしか成立しない状態です。npmでインストールする利用者はBunの存在を意識していないことが多いため、ここでいったんつまずきます。

APIキーなしで見える範囲

--help はAPIキー不要で表示できます。

bun node_modules/grok-dev/dist/index.js --help

主なオプション・サブコマンドを抜粋します。

項目 内容
-p, --prompt ヘッドレスで単発プロンプトを実行
--sandbox / --no-sandbox Shuruサンドボックス内でシェルコマンドを実行するか切り替え
-s, --session 保存済みセッションの再開
telegram-bridge Telegram経由のリモート操作ブリッジを起動
models 利用可能なGrokモデル一覧を表示
wallet ローカルのx402ウォレットと決済設定を管理
daemon スケジュールされたタスクを実行するデーモンを起動

このうち models はAPIキーなしでも実行でき、価格を含む実データが返ってきました。

bun node_modules/grok-dev/dist/index.js models
grok-4.3 — Grok 4.3 (reasoning)
  Recommended flagship reasoning model | 1M context | $1.25/$2.5 per 1M tokens

grok-4.20-multi-agent-0309 — Grok 4.20 Multi-Agent (reasoning, multi-agent, responses-only)
  Realtime multi-agent research model | 2M context | $2/$6 per 1M tokens

grok-4.20-0309-reasoning — Grok 4.20 Reasoning (reasoning)
  Grok 4.20 reasoning release | 2M context | $2/$6 per 1M tokens

grok-4.20-non-reasoning — Grok 4.20 Non-Reasoning (non-reasoning)
  Recommended non-reasoning model | 2M context | $2/$6 per 1M tokens

grok-3-mini — Grok 3 Mini (non-reasoning)
  Budget-friendly compact model | 131.072K context | $0.3/$0.5 per 1M tokens

一方、実際に会話させようとする -p(ヘッドレスプロンプト)はAPIキーがないと即座に止まります。

bun node_modules/grok-dev/dist/index.js -p "hello"
Error: API key required. Set GROK_API_KEY env var, use --api-key, or save to ~/.grok/user-settings.json

エラーメッセージが取得元を3通り明示しているため、ここで迷うことはありません。

walletサブコマンドの中身

--help 一覧にあった wallet を掘り下げます。

bun node_modules/grok-dev/dist/index.js wallet --help
Usage: grok wallet [options] [command]

Manage the local x402 wallet and payment settings

Commands:
  init [options]     Generate a new wallet keypair and enable payments for the selected chain
  balance            Show the current wallet balance
  history [options]  Show recent x402 payment attempts

x402は、HTTPステータスコード402(Payment Required)を復活させて使う、Coinbaseが主導するオープンな決済プロトコルです。有料APIやデータへのリクエストに対しサーバーが402で支払い指示を返し、クライアント側が支払いペイロードを添えて再リクエストし、サーバーが検証・決済してからリソースを返す、という流れをHTTPの範囲内で完結させます5。Coinbase Developer Platformの解説によれば、Base・Polygon・Arbitrum・World・Solana上のERC-20支払いに対応しています5。

grok-devのソースを見ると、dist/payments/agentkit-loader.js が実際に @coinbase/agentkit を読み込んでおり、wallet コマンドはこの決済機能のためにローカルの鍵ペアを生成・管理する実装でした。つまり冒頭で見た暗号資産系パッケージ群は、たまたま紛れ込んだのではなく、「エージェントが自律的に有料APIへ支払う」という機能を実現するために意図的に組み込まれたものです。実行にはAPIキー同様、ウォレットの初期化と資金の用意が別途必要なため、今回は --help 表示までの確認に留めています。

著者視点の発見ポイント

コーディングエージェントのCLIを試すとき、依存関係の中身まで確認する機会は多くありません。今回 npm install の出力とnode_modulesを実際に数えたことで、「コーディングを助けるCLI」という見た目の機能と、実際に取得されるパッケージ群(暗号資産ウォレットのフルスタック)のあいだにギャップがあると分かりました。x402自体は正当な標準化の取り組みであり、@coinbase/agentkit の採用も機能上の必然です。それでも、コーディング支援だけを目的にインストールする利用者にとって、MetaMaskやWalletConnectのSDKまで1.8GB分ダウンロードされることは、READMEやパッケージ説明文からは読み取りにくいままです。OSSのコーディングエージェントを選ぶ際は、package.json の dependencies を一度覗いて、機能一覧に書かれていない依存が入っていないか確認する価値があります。

まとめ

  • grok-devはxAI非公式のOSSコーディングエージェントで、npm installで577ディレクトリ・1.8GBの依存関係が入る
  • @coinbase/agentkit 経由でMetaMask・WalletConnect・OpenSeaのSDKまで連れてくる
  • ビルド成果物がBun前提のため、node 実行は ERR_MODULE_NOT_FOUND で失敗し、bun 実行でのみ動く
  • models コマンドはAPIキー不要で実行でき、料金付きのモデル一覧を返す
  • wallet サブコマンドはx402プロトコル用のローカルウォレット管理機能で、装飾的な依存ではなく実装済みの決済機能に紐づく

コーディングエージェントを試す前に npm view <package> dependencies で依存の顔ぶれを一度確認しておくと、今回のような想定外の同梱に事前に気づけます。

参考リンク

  1. superagent-ai/grok-cli — README(スター数・ライセンス・機能一覧・"not affiliated with"の記載) ↩ ↩2 ↩3

  2. Grok Build CLI入門 — xAIのコーディングエージェントを使いこなす — xAI公式のコーディングCLIを扱った既存記事 ↩

  3. grok-dev - npm — バージョン・公開日情報 ↩

  4. Coinbase Developer Platform - AgentKit — @coinbase/agentkit の公式ドキュメント ↩

  5. x402 - Coinbase Developer Documentation — x402プロトコルの仕組み・対応チェーン ↩ ↩2

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?