Thanks for taking the time to contribute. This is a small project — issues and PRs are both welcome.
Please open an issue using the bug report template. Include:
- The output of
codex-browser-bridge --version - The output of
codex-browser-bridge -mode discover - Codex Desktop version, Chrome version, Windows version
- A minimal reproduction (which tool you called, what arguments, what response)
See SECURITY.md — please don't file these as public issues.
Requirements:
- Go 1.23+
- Windows (the bridge depends on Windows named pipes via
go-winio) - Codex Desktop and the Codex Chrome Extension running, if you want to test against a real pipe
Build and test:
git clone https://github.com/DeliciousBuding/codex-browser-bridge.git
cd codex-browser-bridge
make build
make testThe full test suite is hermetic — it uses net.Pipe to simulate the Codex pipe, so you don't need Codex Desktop running to run go test ./....
- Run
gofmt/goimportsbefore committing — CI enforces this. make testrunsgo vet ./...andgo test -race -cover ./....golangci-lint runis wired into CI; install it locally with the official instructions and run it before pushing.
- Use Conventional Commits prefixes (
feat:,fix:,docs:,test:,chore:,ci:). - One logical change per commit.
- Keep the subject line under 72 characters; put detail in the body.
- Branch from
main. - Reference the related issue in the PR description, if any.
- Add or update tests for behavior changes. The wire-format invariants in
internal/client/browser_rpc_test.goexist because we discovered them the hard way — please don't break them silently. - Update
CHANGELOG.mdunder## [Unreleased]. - Update both
README.mdandREADME.zh-CN.mdif you add or remove tools.
There are typically four places to touch:
internal/client/browser.go— add the client method. If it's a CDP-based tool, usecdpWithAttachso the debugger is attached first.internal/mcp/server.go— register the tool inregisterTools()and add a handler that returns[]Content.internal/client/browser_rpc_test.go— lock in the wire format with awithRecordingServer-based test.internal/mcp/handlers_test.go— add an integration test that exercises the full client → handler path.
Then update the count in internal/mcp/server_test.go:TestRegisteredToolCount and document the tool in both READMEs.
Maintainer-only:
- Bump
npm/package.jsonversion. - Move
## [Unreleased]notes inCHANGELOG.mdto the new version section. - Open a
release/vX.Y.ZPR and merge it. - Tag from
main:git tag -a vX.Y.Z -m "vX.Y.Z" && git push origin vX.Y.Z. - The release workflow builds Windows binaries (amd64 + arm64), generates checksums, and publishes a GitHub Release.
- Publish to npm from the
npm/subdirectory:cd npm && npm publish --access public.