router-for-me/CLIProxyAPI · error
select Claude device ID: device pool has %d entries, want %d
Error message
select Claude device ID: device pool has %d entries, want %d
What it means
Error "select Claude device ID: device pool has %d entries, want %d" thrown in router-for-me/CLIProxyAPI.
Source
Thrown at internal/auth/claude/identity.go:270
}
if _, exists := seen[deviceID]; exists {
continue
}
seen[deviceID] = struct{}{}
deviceIDs = append(deviceIDs, deviceID)
}
if changed {
metadata[ClaudeDeviceIDsMetadataKey] = append([]string(nil), deviceIDs...)
}
return append([]string(nil), deviceIDs...), changed, nil
}
// SelectDeviceID returns the credential's sole device ID after validating the conversation session.
func SelectDeviceID(deviceIDs []string, sessionID string) (string, error) {
deviceIDs = NormalizeDeviceIDPool(deviceIDs)
if len(deviceIDs) != ClaudeDevicePoolSize {
return "", fmt.Errorf("select Claude device ID: device pool has %d entries, want %d", len(deviceIDs), ClaudeDevicePoolSize)
}
sessionID = strings.TrimSpace(sessionID)
if sessionID == "" {
return "", fmt.Errorf("select Claude device ID: session ID is empty")
}
return deviceIDs[0], nil
}
// ValidDeviceID reports whether a value matches Claude Code's lowercase 64-hex device format.
func ValidDeviceID(value string) bool {
if len(value) != claudeDeviceIDByteSize*2 || value != strings.ToLower(value) {
return false
}
decoded, errDecode := hex.DecodeString(value)
return errDecode == nil && len(decoded) == claudeDeviceIDByteSize
}
View on GitHub (pinned to 78f0c4079e)
Solutions
- Verify the device pool configuration contains the expected number of entries.
- Adjust the requested pool size or repopulate the Claude device ID pool.
When it happens
Trigger: Thrown at internal/auth/claude/identity.go:270 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of router-for-me/CLIProxyAPI@78f0c4079e (2026-08-15).
Data as JSON: /api/errors/d29d135a8b5ba8ce.
Report an issue: GitHub.