Claude sign-in never completes: no way to enter the authentication code
- Dominant language
- TypeScript
- Stars
- 909
- Forks
- 116
- Avg merge
- 1d 1h
- Merged PRs (30d)
- 156
Description
### Before filing
- [x] I searched [open and closed issues](https://github.com/block/berd/issues?q=is%3Aissue) for duplicates.
- [x] I reproduced this on the [latest release](https://github.com/block/berd/releases).
- [x] This is one bug, not several bundled together.
### Closest existing issue
none found
### What's broken
Signing in to Claude Code from Settings → Providers can never complete. The login flow returns an authentication code that must be pasted into the running CLI, but Berd provides no input: the setup executor pipes only stdout/stderr, so the child login process waits on a stdin nobody can write to.
### Steps to reproduce
1. Launch Berd
2. Open Settings → Providers → Claude Code → Sign in
3. Complete the browser flow; the page at platform.claude.com/oauth/code shows "Authentication code — paste this into Claude Code"
4. Return to Berd: the setup card shows "Waiting for sign-in..." with no input field, indefinitely
### What you expected to happen
A way to submit the authentication code during the Authenticating phase. Claude Code's manual OAuth flow is an authorization-code flow (`code=true` in the printed URL), not an RFC 8628 device flow, so the code has to travel back to the login CLI's stdin.
### What actually happened
Sign-in hangs forever. The `claude-agent-acp --cli auth login` child (spawned via `run_auth` → `run_fix` in `src-tauri/src/commands/agent_setup.rs`, executing through `doctor::execute_fix_streaming_with_env_options`) never gets stdin: the doctor crate's `run_command_streaming_blocking` sets only `.stdout(Stdio::piped()).stderr(Stdio::piped())`. The card also promotes a bogus "Device code" from the OAuth URL, reported separately as its own issue.
Fixing this looks like it needs a builderbot `doctor` change (piped stdin plus an input handle), then a rev bump and a scoped setup-input command in Berd.
### How often does it happen?
Every time — reliably reproducible
### Berd version
0.6.2
### Operating system
macOS (Apple Silicon)
### Model and provider
n/a — provider setup, not a chat turn
### Relevant log output
```text
[2026-08-19][03:16:11][berd_lib::commands::agent_setup][INFO] [agent-setup claude-acp Auth] starting fix
[2026-08-19][03:16:11][berd_lib::commands::agent_setup][INFO] [agent-setup claude-acp Auth] $ claude-agent-acp --cli auth login
[2026-08-19][03:16:11][berd_lib::commands::agent_setup][INFO] [agent-setup claude-acp Auth] Opening browser to sign in…
[2026-08-19][03:16:11][berd_lib::commands::agent_setup][INFO] [agent-setup claude-acp Auth] If the browser didn't open, visit: https://claude.com/cai/oauth/authorize?code=true&client_id=9d1c250a-e61b-44d9-88ed-5944d1962f5e&response_type=code&redirect_uri=https%3A%2F%2Fplatform.claude.com%2Foauth%2Fcode%2Fcallback&scope=...&code_challenge=...&state=...
(no further Auth lines — the login child never exits; PKCE code_challenge/state values elided)
```
### Screenshots, recordings, or other context
Contributor guide
Research direction
Start in src-tauri/src/commands/agent_setup.rs at run_auth and run_fix, then trace doctor::execute_fix_streaming_with_env_options and run_command_streaming_blocking. Confirm how the setup card receives authentication input and how the doctor change, rev bump, and scoped setup-input command fit together. Done means the authentication code can be submitted and the Claude sign-in flow completes.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- authentication, desktop
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100