概要
いつの日か、ターミナルでClaude Code を起動している時、画面下に表示しているステータスが止まっていた問題があった。
「お、今日はまだまだ使えるな!」とか思ってたら使用率は20%のままなのに、5時間制限をくらいました。
この記事はなぜそのようなことが起こったのかについてと、その解決方法について解説します。
原因
キーチェーンに同じ名前の項目が2つあり、スクリプトが古い方を先に読んでいたのが原因でした。
キーチェーンは、パスワードなどの秘密の情報を暗号化して保存する、 macOS に最初から入っている仕組みです。アプリのパスワードやWi-Fiのパスワードなどもここに保存されています。暗号化されているので、エディタを開いても読むことができません。
キーチェーンの項目には、項目を探すための属性がついています。
今回関係するのは次の2つです。
- サービス名(
svce):何のための情報か(今回はClaude Code-credentials) - アカウント名(
acct):誰の情報か(ClaudeCodeの場合、ここに自分のアカウント名が入る)
キーチェーンをよく見ると、サービス名が同じClaude Code-credentialsの項目が2つありました。しかし、全く同じものではなく、acct に自分のClaudeCodeのアカウント名があるものと、unkown が入っているものが2つありました。これが今回の原因です。
プログラムは、サービス名だけを指定して探していたので、最初に見つかる古い unkown の項目を取り出していました。古い項目にはトークンがないので、プログラムはサーバーに問い合わせても情報が取得できず終了していました。
その結果、最後に問い合わせに成功した時の値(今回は使用率は20%)になっていました。
なぜ重複したのか
今回場合、私は Orca を入れたタイミングで発生したようです。
Orca から Agent SDK 経由で起動した Claude Code のセッションが認証情報を "unkown" として書き込んだ模様。
なぜ、セッションで "unkown" となったかは不明です。(覚えてない...)
対応・解決
探す時の条件名にアカウント名を加えて項目を取り出すようにしました。
また、サーバーに問い合わせた時、失敗したら最後に取得した値ではなく、ちゃんとエラーを返すようにしました。
これらの変更により、修正した後は正しく使用率を表示できるようになりました。めでたしめでたし。

