# instinct: xAI OAuthのrefresh_tokenはローテーション式(使い捨て)・新tokenを保存せずrefreshすると旧tokenが失効しgrok CLIが死ぬ
xAI OAuth (auth.x.ai) のリフレッシュトークンは**ローテーション式(使い捨て)**。
`grant_type=refresh_token` で新トークンを取得すると、レスポンスの新 refresh_token を
`~/.grok/auth.json` に保存しない限り、手元の旧 refresh_token は revoke される
(次回 `400 invalid_grant: Refresh token has been revoked`)。
2026-06-12 実証: SuperGrok tier確認のため「保存なし refresh」を実行 → 200成功(tier=1のまま)→
数十分後の再refreshで 400 revoked。access_token 失効後は grok CLI が自動更新不能になり
`grok login` 再認証(noVNC)が必要になった。
**Why:** 「読み取り専用のつもりの refresh」が実は破壊的操作(旧トークン失効)だから。tier/claim を見るだけでも例外なし。
**How to apply:** refresh を叩いたら必ず新 access_token + refresh_token + expires_at を auth.json に
アトミック保存する([[grok-hermes-x-search]] Step 2 の tmp→replace パターン)。「確認だけ refresh」は禁止。
tier 確認だけなら auth.json 内の既存 JWT をデコードする(ネットワーク不要・無害)か、refresh+保存をセットで行う。
---
(migrated from local memory/instinct_xai_refresh_token_rotation.md)
instinct: xAI OAuthのrefresh_tokenはローテーション式(使い捨て)・新tokenを保存せずrefreshすると旧tokenが失効しgrok CLIが死ぬ