Drop-in replacement for claude -p that drives the interactive TUI via PTY, preserving subscription billing
Find a file
jedarden a1e74b59fa Add signal forwarding, I/O relay, and wait to PtySpawner
- Install a SIGWINCH handler that sets a static AtomicBool; the relay loop
  re-issues TIOCSWINSZ on the master fd each time it fires.
- relay() poll-loops over the master fd and stdin, copying master output to
  stdout and stdin input to the master fd, with 100 ms timeout so SIGWINCH
  is handled promptly on EINTR.
- Loop exits on EIO/EOF/POLLHUP from the master fd (slave side closed).
- waitpid() at the end of relay() surfaces the child exit code (or
  128+signum for signal termination).
- New tests: master_fd_carries_child_stdout (acceptance criterion),
  relay_echo_exits_zero_and_produces_output, relay_surfaces_nonzero_exit_code.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 16:47:09 -04:00
.beads Close bead bf-21b: execvp and window-size implementation complete 2026-06-07 16:43:01 -04:00
docs gap-review round 10: 3 gaps fixed 2026-06-07 14:24:50 -04:00
src Add signal forwarding, I/O relay, and wait to PtySpawner 2026-06-07 16:47:09 -04:00
test-fixtures/mock-claude Phase 2: implement PTY open and fork in pty.rs 2026-06-07 16:38:14 -04:00
Cargo.lock Phase 2: implement PTY open and fork in pty.rs 2026-06-07 16:38:14 -04:00
Cargo.toml Phase 2: implement PTY open and fork in pty.rs 2026-06-07 16:38:14 -04:00
README.md Remove prior art references; expand plan to full feature set and test coverage 2026-06-07 10:35:10 -04:00

claude-print

Drop-in replacement for claude -p (print/headless mode) that drives the Claude Code interactive TUI via PTY — preserving subscription billing after the June 15, 2026 Agent SDK credit split.

Why this exists

Starting June 15, 2026, Anthropic separates claude -p (headless) into a separate Agent SDK credit pool ($100$200/month on Max plans). Only the interactive TUI (cc_entrypoint=cli) continues drawing from the unlimited subscription. claude-print wraps the interactive TUI in a PTY so callers get claude -p wire-compatible output while billing against the subscription.

Structure

  • docs/notes/ — design decisions, constraints, integration details
  • docs/plan/plan.md — complete implementation plan