Four things in 1.9.0: an ACP bridge so Zed can dispatch tasks, a daemon that tries to repair red CI on Bernstein-opened PRs, a keychain-backed credential store, and a preview server with a public URL.
bernstein acp serve
Bernstein speaks the Agent Client Protocol now. Start the bridge and any ACP editor — Zed today, others as they ship — can dispatch tasks, stream output line-by-line, and read gate results without leaving the editor. The bridge maps ACP tool calls to the existing task-server API, so anything that already works over HTTP or MCP works here too.
bernstein acp serve
# ACP server listening on stdiobernstein autofix
Daemon. Watches Bernstein-opened PRs. When CI goes red it pulls the failing log, finds the worktree the PR came from, hands the log to a fresh agent in that worktree, and pushes a fix commit if the agent succeeds. Lint errors, type errors, the broken import after a rename. That flavour. Long write-up in the autofix post.
bernstein autofix --watch
# polling CI status for open PRs…Same gate runner as the orchestrator, so it can't push a "fix" that introduces a different break.
bernstein connect <provider>
Stop pasting tokens into config files. bernstein connect does OAuth or PAT entry once per provider and stores the result in the OS keychain (macOS Keychain, GNOME Keyring, Windows Credential Manager). Subsequent runs read from the keychain; nothing in .env or bernstein.yaml.
bernstein connect github # OAuth → keychain
bernstein connect linear # API key → keychain
bernstein connect jira
bernstein connect slack
bernstein connect telegram--list to see what's stored, --revoke <provider> to drop one.
bernstein preview start
Spin up the project's dev server inside the active worktree, get a public HTTPS URL. Useful for review, webhook testing, sending a change to someone who hasn't checked the repo out.
bernstein preview start
# dev server started on :3000
# -> https://random-name.trycloudflare.comStart command is inferred from package.json (dev/start), then Makefile (make dev), then a bernstein.yaml preview.command override. Tunnel uses the same provider cascade as bernstein tunnel: cloudflared, bore, ngrok, tailscale, first one on PATH. bernstein preview stop cleans both up.
pipx install 'bernstein>=1.9.0'
# or
pip install --upgrade bernstein