Anthropic の OAuth 禁止で NanoClaw 大丈夫?→大丈夫(?)だと思うけど別の問題があった
Anthropic がサードパーティツールでの OAuth トークン利用を禁止したというニュースを見て、自分の NanoClaw は大丈夫かと確認しに行ったら、OAuth とは別のところに問題があった。
Anthropic の OAuth 禁止とは
Anthropic が Claude Pro/Max のサブスクリプション認証トークンをサードパーティツール経由で使う行為を禁止した。
要するに「月 20 ドルの Claude Pro に加入して、API キーの代わりにそのセッショントークンを使えば月 200〜500 ドル相当の API をほぼタダで使える」という抜け道を塞いだ話。
昨今の Claude への流入増大も影響あったんだろうね。
NanoClaw への影響は?
(おそらく)なし。
公式がそう言ってる、けどまあどうなるか分かんないけどね。
NanoClaw は、Anthropic の正規 API キーを使う構成で、OAuth には一切依存していない。認証まわりは OneCLI という credential proxy が担っていて、コンテナ起動時に ANTHROPIC_BASE_URL 経由でキーを注入する仕組みになっている。
Credentials are injected by the host’s credential proxy via ANTHROPIC_BASE_URL.
直接 .env に API キーを書くわけでもなく、OAuth トークンを流用するわけでもないので、今回の禁止措置とは完全に無関係って言ってる。まあ若干不安だけど。
ということで確かめてみることにしました。
OneCLI の設定確認しておくか
onecli コマンドで実際の状態を確認しようとしたら…
$ onecli auth status
{
"error": "getting user: executing request: Get \"http://127.0.0.1:10254/api/user\": dial tcp 127.0.0.1:10254: connect: connection refused",
"code": "ERROR"
}
OneCLI のサーバーが落ちてる…
いやいや、最初から躓くの?
NanoClaw 自体は動いてるんだっけ?
$ systemctl --user status nanoclaw
● nanoclaw.service
Active: active (running) ...
Main PID: 50922 (node)
4月 06 00:56:51 nanoclaw.service: Failed with result 'exit-code'.
4月 06 00:56:56 nanoclaw.service: Scheduled restart job, restart counter is at 266.
4月 06 00:56:56 nanoclaw.service: Started nanoclaw.service
restart counter が 266。
動いてはいるけど、クラッシュループを 266 回繰り返してた。なにそれこわい。
そんな訳で claude さんに相談した結果が、以下の説明と修正です。
クラッシュの原因
直接実行してエラーを確認した。
ERROR: Failed to reach container runtime
Command failed: docker info
permission denied while trying to connect to the docker API at unix:///var/run/docker.sock
Docker のソケットに繋がらないとのこと。でも自分は docker グループに所属しているし、ターミナルから docker info は普通に通る。
原因は systemd service の起動順序 でした。
~/.config/systemd/user/nanoclaw.service を見てみると:
[Unit]
After=network.target
After=network.target しか書いていなかった。つまり OS 起動後、ネットワークが上がったらすぐ nanoclaw が起動しようとする。その時点では Docker がまだ起動していない。/var/run/docker.sock が存在しないので permission denied が起き、クラッシュしてリトライ、を繰り返していた。
その間に Docker が起動完了して、手動で restart した今回は正常に動いた、というわけ。
修正
systemd の user service から system service(docker)への Requires= は機能しない設計なので、2段構えで対応した。
[Unit]
Description=NanoClaw Personal Assistant
After=network.target docker.service
Wants=docker.service
[Service]
ExecStartPre=/bin/sh -c 'until [ -S /var/run/docker.sock ]; do sleep 1; done'
ExecStart=...
After=docker.service+Wants=docker.service:systemd へのヒントとして Docker を先に上げてもらうExecStartPreで/var/run/docker.sockの存在を確認してから本体起動:user→system の依存が効かなかった場合の保険
daemon-reload して再起動したら ExecStartPre が status=0/SUCCESS で通って正常起動を確認。
Process: ExecStartPre=/bin/sh -c until [ -S /var/run/docker.sock ]; (code=exited, status=0/SUCCESS)
Active: active (running)
まとめ
- Anthropic の OAuth 禁止は NanoClaw に影響なし(正規 API キー + OneCLI の構成なので無関係、たぶんだけど)
- OneCLI 経由で API キーは正しく登録されていた
- ただし systemd service の起動順序が雑で、OS 起動のたびにクラッシュループしていた
After=docker.service+ExecStartPreの socket 待機で修正済み
公式のアナウンスがなければ気づかなかったバグだったので、ある意味ラッキーだったわ。
(念の為、公式からのアナウンスの$20は受け取っておきましたw)