Companion crabd 0.30.0. No widget change (the current widget is 0.28.2); update with git pull and pwsh -File .\setup\Update-SideCrab.ps1.
The problem. Claude Code's OAuth access token lives about six hours and the file it lives in (~/.claude/.credentials.json) is only rewritten when a terminal claude makes an API call; the desktop app keeps its refreshed token elsewhere. So a panel fed from that file read "Claude token expired - run /login" most mornings, and /login was not even the fix.
The fix. crabd now accepts an optional long-lived token from claude setup-token, stored DPAPI-protected for your Windows account by Install-SideCrab.ps1 -LimitsToken, and uses it only when the CLI token has expired. It is decrypted in memory per poll, sent only to Anthropic's usage endpoint, never logged or served. /v1/state.limits.tokenSource says which token answered; -Status and Test-SideCrab.ps1 show it. The unavailable notes now say what actually fixes them.
claude setup-token
pwsh -File .\setup\Install-SideCrab.ps1 -LimitsTokenContract: docs/STATE-CONTRACT.md v0.30.0.