block / block/berd

Claude sign-in never completes: no way to enter the authentication code

Open
#99 0 comments 0 reactions 0 assignees View on GitHub
bug
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

Image

Contributor guide

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.