Skip to content

Add secure Gemini, Anthropic, and OpenAI API gateways#71

Open
lawrencecchen wants to merge 31 commits into
mainfrom
feat/gemini-api-proxy
Open

Add secure Gemini, Anthropic, and OpenAI API gateways#71
lawrencecchen wants to merge 31 commits into
mainfrom
feat/gemini-api-proxy

Conversation

@lawrencecchen

@lawrencecchen lawrencecchen commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

Summary

  • add fail-closed team gateways for Gemini, Anthropic, and OpenAI-compatible APIs
  • expose /anthropic/*, /api/*, and /openai/* while preserving root subscription/account routing
  • replace client tokens with server-owned provider keys and strip internal, forwarding, query, and OpenAI tenant metadata
  • preserve gateway secrets through atomic 0600 systemd defaults updates
  • support provider-specific upstream URLs and document exact SDK configuration

Testing

  • go test ./...
  • go vet ./...
  • HTTP/SSE pass-through, auth replacement, drain accounting, root-route isolation, and OpenAI Realtime WebSocket tests
  • live Gemini recording upload, processing, interaction, and cleanup through the gateway

Summary by CodeRabbit

  • New Features
    • Added team API gateways for Anthropic, OpenAI, and Gemini with gateway-token authentication.
    • Added new serve flags for provider/gateway upstream overrides plus Gemini public URL handling.
    • Extended install-systemd to configure Gemini/Anthropic/OpenAI API keys and distinct gateway tokens.
  • Bug Fixes
    • Hardened request validation and draining behavior for gateway proxies.
    • Improved env-file generation/updates (atomic writes, 0600 for secrets, safer quoting/decoding).
    • Ensured subrouter admin headers are stripped from proxied traffic.
  • Documentation
    • Updated README/production/deployment guidance with routing/base-URL expectations and enablement rules.
  • Tests
    • Expanded Gemini and API-key gateway test coverage, including uploads, WebSockets, and security boundaries.

@coderabbitai

coderabbitai Bot commented Jul 10, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds authenticated Anthropic, OpenAI, and Gemini API gateways with provider-key rewriting, configurable upstreams, protected systemd credential persistence, comprehensive proxy tests, and deployment documentation.

Changes

Team API gateways

Layer / File(s) Summary
Anthropic and OpenAI gateway proxying
internal/proxy/api_key_gateway.go, internal/proxy/api_key_gateway_test.go, internal/session/...
Adds authenticated reverse proxying with path rewriting, credential sanitization, administrative-route blocking, lifecycle handling, streaming, WebSocket support, and failure-path coverage.
Gemini proxy and routing
internal/proxy/gemini.go, internal/proxy/proxy.go, internal/proxy/gemini_test.go
Adds Gemini authentication, provider-key injection, upload capability and URL rewriting, WebSocket proxying, lifecycle checks, route registration, and tests.
Serve command gateway wiring
cmd/subrouter/main.go, cmd/subrouter/main_test.go
Adds gateway upstream and public URL flags, URL and credential validation, proxy configuration wiring, Bedrock token resolution, and updated usage text.
Systemd gateway credentials
cmd/subrouter/install_systemd.go, cmd/subrouter/install_systemd_test.go
Loads, preserves, quotes, and emits provider credentials and gateway tokens, atomically updates secret files with mode 0600, and tests these behaviors.
Gateway documentation
README.md, deploy/gcp/README.md, docs/production.md
Documents gateway environment variables, routes, SDK configuration, Gemini HTTP and Live usage, proxy requirements, and production deployment setup.

Estimated code review effort: 4 (Complex) | ~60 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Client
  participant Gateway
  participant ProviderUpstream
  Client->>Gateway: Send request with client-facing token
  Gateway->>Gateway: Authenticate and rewrite credentials
  Gateway->>ProviderUpstream: Forward request with provider key
  ProviderUpstream-->>Gateway: Return provider response
  Gateway-->>Client: Return proxied response
Loading
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 1.45% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly matches the main change: adding secure API gateways for Gemini, Anthropic, and OpenAI.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/gemini-api-proxy

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 129429a5f8

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread cmd/subrouter/install_systemd.go Outdated
Comment thread internal/proxy/gemini.go

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: bc9e4d558d

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread internal/proxy/gemini.go

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 2a96902f41

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread deploy/gcp/README.md Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: aa9191b051

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread docs/production.md Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (3)
internal/proxy/proxy.go (1)

924-930: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Consider conditionally registering Gemini routes like Bedrock.

Gemini routes are always registered, even when the gateway is unconfigured. This is inconsistent with Bedrock's conditional pattern at lines 921-923. When Gemini is not configured, requests to /v1beta/ and /upload/v1beta/ get 503 instead of falling through to the catch-all proxy. The impact is low since these are Google-specific paths, but conditional registration would be cleaner and match the existing pattern.

♻️ Optional refactor: conditional Gemini route registration
-	mux.Handle("/gemini", s.geminiHandler())
-	mux.Handle("/gemini/", s.geminiHandler())
-	// The Google GenAI SDK rewrites resumable upload URLs to the configured
-	// base host without retaining a path prefix, so native paths must also be
-	// available at the listener root.
-	mux.Handle("/upload/v1beta/", s.geminiHandler())
-	mux.Handle("/v1beta/", s.geminiHandler())
+	if s.Gemini != nil && s.Gemini.configured() {
+		mux.Handle("/gemini", s.geminiHandler())
+		mux.Handle("/gemini/", s.geminiHandler())
+		// The Google GenAI SDK rewrites resumable upload URLs to the configured
+		// base host without retaining a path prefix, so native paths must also be
+		// available at the listener root.
+		mux.Handle("/upload/v1beta/", s.geminiHandler())
+		mux.Handle("/v1beta/", s.geminiHandler())
+	}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/proxy/proxy.go` around lines 924 - 930, Conditionally register
Gemini routes only when Gemini is configured, matching the existing Bedrock
pattern near the route setup. Move the /gemini, /gemini/, /upload/v1beta/, and
/v1beta/ registrations into the appropriate Gemini configuration guard so
unconfigured requests fall through to the catch-all proxy.
internal/proxy/gemini_test.go (1)

13-231: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Add a test for the Authorization: Bearer gateway token path.

authorizeGeminiGateway accepts the gateway token via either X-Goog-Api-Key or Authorization: Bearer, but all tests use X-Goog-Api-Key. The Bearer path (gemini.go lines 124-128) is untested.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/proxy/gemini_test.go` around lines 13 - 231, Add a test covering
gateway authorization through the Authorization header. Reuse the setup pattern
from TestGeminiGatewayRejectsWrongGatewayToken or
TestGeminiGatewayReplacesClientCredentialAndPreservesAPIPaths, omit
X-Goog-Api-Key, set Authorization to Bearer team-token, and assert the request
succeeds and reaches the upstream.
cmd/subrouter/main.go (1)

335-340: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Add a startup log when the Gemini gateway is enabled.

Bedrock logs at line 307 (slog.Info("bedrock gateway enabled", ...)), but there's no equivalent for Gemini. Operators can't tell from logs whether the Gemini gateway is active. Consider logging after the server struct is built.

♻️ Optional: add Gemini startup log
 	}

+	if server.Gemini != nil && server.Gemini.configured() {
+		slog.Info("gemini gateway enabled", "upstream", geminiUpstream.String(), "auth", server.Gemini.GatewayToken != "")
+	}
+
 	initialAccounts := append([]accounts.Account(nil), codexAccounts...)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@cmd/subrouter/main.go` around lines 335 - 340, Add a startup informational
log for the Gemini gateway, matching the existing Bedrock gateway log style,
after the server configuration is constructed and Gemini is enabled. Use a
unique message such as “gemini gateway enabled” and include relevant
configuration context through the existing logging mechanism.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@internal/proxy/gemini.go`:
- Around line 108-111: Update rewriteGeminiUploadURL to determine the scheme
from X-Forwarded-Proto when request.TLS is nil, while retaining https for direct
TLS requests and http as the fallback. Use the first forwarded protocol value,
normalize it as needed, and only accept https to avoid generating incorrect
upload URLs.

---

Nitpick comments:
In `@cmd/subrouter/main.go`:
- Around line 335-340: Add a startup informational log for the Gemini gateway,
matching the existing Bedrock gateway log style, after the server configuration
is constructed and Gemini is enabled. Use a unique message such as “gemini
gateway enabled” and include relevant configuration context through the existing
logging mechanism.

In `@internal/proxy/gemini_test.go`:
- Around line 13-231: Add a test covering gateway authorization through the
Authorization header. Reuse the setup pattern from
TestGeminiGatewayRejectsWrongGatewayToken or
TestGeminiGatewayReplacesClientCredentialAndPreservesAPIPaths, omit
X-Goog-Api-Key, set Authorization to Bearer team-token, and assert the request
succeeds and reaches the upstream.

In `@internal/proxy/proxy.go`:
- Around line 924-930: Conditionally register Gemini routes only when Gemini is
configured, matching the existing Bedrock pattern near the route setup. Move the
/gemini, /gemini/, /upload/v1beta/, and /v1beta/ registrations into the
appropriate Gemini configuration guard so unconfigured requests fall through to
the catch-all proxy.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 9d42f885-18f5-4b0d-ad0e-894c2eeee21f

📥 Commits

Reviewing files that changed from the base of the PR and between 46607df and aa9191b.

📒 Files selected for processing (9)
  • README.md
  • cmd/subrouter/install_systemd.go
  • cmd/subrouter/install_systemd_test.go
  • cmd/subrouter/main.go
  • deploy/gcp/README.md
  • docs/production.md
  • internal/proxy/gemini.go
  • internal/proxy/gemini_test.go
  • internal/proxy/proxy.go

Comment thread internal/proxy/gemini.go
@lawrencecchen lawrencecchen changed the title Add Gemini API gateway for team clients Add secure Gemini, Anthropic, and OpenAI API gateways Jul 10, 2026
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 8f6dc0cb9e

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread internal/proxy/api_key_gateway.go

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: a0e8b0f2fa

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread internal/proxy/proxy.go

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@cmd/subrouter/install_systemd.go`:
- Around line 140-146: Protect the systemd defaults file from secrets supplied
through ExtraArgs: update the mode selection in the installation logic around
writeSystemdDefaults and systemdDefaultPath to use 0600 unconditionally, or
detect and reject secret-bearing ExtraArgs such as --bedrock-gateway-token
before writing; ensure credential values cannot be persisted with 0644
permissions.

In `@cmd/subrouter/main.go`:
- Line 897: Update the serve command usage text in main to include the existing
--kimi-upstream and --zai-upstream flags alongside the other upstream options,
matching their registered flag names and formatting.
- Around line 246-253: Validate both parsed gateway URLs in the startup
configuration logic after url.Parse, requiring a non-empty host, an absolute
URL, and a scheme restricted to http or https; return a descriptive
configuration error for invalid values. Apply the same validation to
anthropicGatewayUpstream and openAIGatewayUpstream.

In `@internal/proxy/gemini_test.go`:
- Line 71: The tests in gemini_test.go assert upload continuation URLs
containing the long-lived team token. Update the upload continuation and
WebSocket request flows and their expectations to keep credentials out of URLs,
using header-based authentication where supported and a scoped short-lived
capability for continuation URLs; revise all referenced assertions to verify the
token is absent from URLs and avoid logging sensitive authentication data.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: f5f0db67-ae18-4e88-9c56-89edb8872232

📥 Commits

Reviewing files that changed from the base of the PR and between aa9191b and a0e8b0f.

📒 Files selected for processing (11)
  • README.md
  • cmd/subrouter/install_systemd.go
  • cmd/subrouter/install_systemd_test.go
  • cmd/subrouter/main.go
  • deploy/gcp/README.md
  • docs/production.md
  • internal/proxy/api_key_gateway.go
  • internal/proxy/api_key_gateway_test.go
  • internal/proxy/gemini.go
  • internal/proxy/gemini_test.go
  • internal/proxy/proxy.go
✅ Files skipped from review due to trivial changes (2)
  • deploy/gcp/README.md
  • README.md
🚧 Files skipped from review as they are similar to previous changes (4)
  • docs/production.md
  • cmd/subrouter/install_systemd_test.go
  • internal/proxy/gemini.go
  • internal/proxy/proxy.go

Comment thread cmd/subrouter/install_systemd.go Outdated
Comment thread cmd/subrouter/main.go Outdated
Comment thread cmd/subrouter/main.go Outdated
Comment thread internal/proxy/gemini_test.go Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 4357db80a3

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread internal/proxy/api_key_gateway.go Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@internal/proxy/gemini.go`:
- Line 160: Canonicalize the SDK root upload alias before capability
verification: in the upload request handling around geminiUploadCapability and
the affected lines 164–179, map paths beginning with /upload/v1beta/ to the
signed /gemini/upload/ path before calling geminiUploadCapability. Add a test
that generates a capability and replays it through /upload/v1beta/, then run go
test ./....
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: c467ba0d-f2b2-4353-be8e-6ed9abff9d78

📥 Commits

Reviewing files that changed from the base of the PR and between a0e8b0f and cf3fd9c.

📒 Files selected for processing (12)
  • README.md
  • cmd/subrouter/install_systemd.go
  • cmd/subrouter/install_systemd_test.go
  • deploy/gcp/README.md
  • docs/production.md
  • internal/proxy/api_key_gateway.go
  • internal/proxy/api_key_gateway_test.go
  • internal/proxy/gemini.go
  • internal/proxy/gemini_test.go
  • internal/proxy/proxy.go
  • internal/session/extract.go
  • internal/session/extract_test.go
✅ Files skipped from review due to trivial changes (3)
  • internal/session/extract.go
  • deploy/gcp/README.md
  • README.md
🚧 Files skipped from review as they are similar to previous changes (6)
  • internal/proxy/api_key_gateway.go
  • cmd/subrouter/install_systemd_test.go
  • internal/proxy/api_key_gateway_test.go
  • internal/proxy/proxy.go
  • internal/proxy/gemini_test.go
  • cmd/subrouter/install_systemd.go

Comment thread internal/proxy/gemini.go

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 3412a5a36e

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread internal/proxy/gemini.go Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 8069b87ff9

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread internal/proxy/gemini.go Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: b55c307b22

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread internal/proxy/api_key_gateway.go
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant