xshoji's blog

Ampの広告付き無料プランのクレジット表示プラグインを作った(結構ハマった)

目次

はじめに

最近、AmpのCEOがこんなツイートしてた

「Amp free のクレジットを使い切った時に有料のクレジット利用に切り替えるか?を通知して欲しい」という要望に対しての返信。公式には提供しないけど似たようなモニタ機能は簡単に作れるよ、ということでCEOが言う通り Amp 自身にそのプラグインを作ってもらった。できたのは Amp Free の残クレジットを会話のたびに通知する以下のようなPlugin。

この記事では、このプラグインを実装する過程で若干ハマったポイントがあったんでそこを紹介します。

Amp Free のクレジット確認方法

Amp Freeって使用量に上限があって、残りいくらかターミナル上で amp usage を叩けば見れるんですが、毎回手で打つのがだるい。じゃあプラグインで自動化しようと。プラグインの API には notify っていう TUI に通知を出す機能があるので、エージェントが1ターン終わるたびに残量を表示するようにしよう、というのが今回のプラグインのアイデア。

プラグイン経由でコマンドが実行できない

アイデアとしては5分で終わる話ですが、最初全然うまく動きませんでした。プラグインの中から amp usage を呼ぶだけのコードを書いたら error: Script not found "usage" って怒られる。いや、 usage コマンドあるが?ターミナルから普通に叩いたら動くんだが??

$ amp usage
Signed in as shoji.cx@gmail.com (shoji)
Amp Free: $2.50/$10 remaining (replenishes +$0.42/hour) - https://ampcode.com/settings#amp-free
Individual credits: $4.51 remaining (set up automatic top-up to avoid running out) - https://ampcode.com/settings

Amp のプラグインって実は Bun で動いてて、 ctx.$ っていうシェル関数も Bun Shell なんですよね。で、プラグインから amp を呼ぶと親プロセスの環境変数をまるごと継承する。 PLUGINS とか AGENT とか AMP_THREAD_ID とか色々セットされた状態で子 amp が起動するので、サブコマンドの解決がぶっ壊れる。ちなみにこの “Script not found” は npm とか pnpm のエラーじゃなくて amp バイナリ自体に埋め込まれた文字列で、 strings コマンドで確認した(してもらった)。

最初は怪しい環境変数を個別にdeleteしてたんだけど全然直らない。どれか1個が悪いとかじゃなくて複合的に効いてるっぽい。結局、環境変数を全部捨てて HOME, PATH, USER, TERM, LANG, TMPDIR, SHELL だけのクリーンなenvを自分で組んで渡したら動いた。

あと Bun Shell を経由すると同じ問題が起きるので node:child_process の execFile を使ってる。ログ出力も Bun.write の append オプションがなんか効かなくて appendFileSync に変えた。

Amp の Plugin システムについて

notify はトークン消費しないので毎ターン呼んでも大丈夫。ただ agent.start の戻り値でメッセージを注入するやつはLLMのプロンプトに入るのでトークン食う。この違いは注意しないと毎回無駄なトークンを消費してしまいかねない。

また、2026-03-31(火) 現在は Plugin システム自体が Experimental であり、今後提供され続けるかわからないし急にAPIが変更になったりする可能性がある。また、この経緯からドキュメントも充実してるとは言い難い。ぶっちゃけると、smartモードのエージェントや GPT-5.3 Codex の Oracle ですら初見で苦戦してた。

作った Plugin のコードについて

AmoのCEOも公式に対応する気はない、自分で作ってと言ってたので作ったプラグインは公開する予定はありません。真似したいなと思ったら皆さんもぜひチャレンジしてみてください。この記事に書かれてることを入力しつつ、Ampに用件を伝えれば1日の free クレジットの範囲で作れると思います。