Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
c92ea46
feat(antigravity): add experimental opt-in native Messages provider
chris7iu Oct 18, 2026
1223fbf
feat(antigravity): allow an explicit native API User-Agent override
chris7iu Oct 19, 2026
5f7b97c
feat(antigravity): add bounded manual OAuth completion
chris7iu Oct 20, 2026
3781387
feat(antigravity): show bounded manual OAuth input
chris7iu Oct 20, 2026
e6c3880
fix(antigravity): bound and redact upstream error diagnostics
chris7iu Oct 21, 2026
19fcf95
fix(antigravity): retry proven pre-send refresh failures safely
chris7iu Oct 21, 2026
c00f3da
Merge upstream main for consumer routing validation
chris7iu Oct 24, 2026
2cc5abf
fix(antigravity): default consumer OAuth to the daily endpoint
chris7iu Oct 24, 2026
1b31d51
fix(antigravity): preserve property-name schema constraints
chris7iu Oct 25, 2026
a47edfe
fix(antigravity): align bootstrap metadata and daily error diagnostics
chris7iu Oct 31, 2026
931fe1d
fix(antigravity): align agent request construction
chris7iu Nov 2, 2026
e53a073
fix(antigravity): align generation transport with native CLI
chris7iu Nov 5, 2026
8806914
Merge upstream main into native request parity integration
chris7iu Nov 5, 2026
beb7cc1
fix(antigravity): match typed tool schema serialization
chris7iu Nov 5, 2026
7901909
test(antigravity): align schema fixture with native transport headers
chris7iu Nov 5, 2026
e88478b
test(antigravity): pin observed synthetic tool schema groups
chris7iu Nov 5, 2026
6c1fe12
feat(antigravity): add opt-in observed agent request metadata
chris7iu Nov 5, 2026
99803bb
test(cli): bind readiness to the owned service listener
chris7iu Nov 5, 2026
b60067b
fix(antigravity): strip Claude Code attribution headers and consolida…
chris7iu Nov 6, 2026
ecc67cf
feat(antigravity): default to agy metadata, add Opus 5.5, 1m context,…
chris7iu Nov 7, 2026
54c66e0
Merge remote-tracking branch 'origin/main' into feat/antigravity-argon
chris7iu Nov 8, 2026
a42a8f0
feat(antigravity): unify v1 agent protocol and canonicalize client-no…
chris7iu Nov 8, 2026
5455774
fix(antigravity): canonicalize signed turns and relax harmless client…
chris7iu Nov 8, 2026
454be4c
fix(antigravity): support mid-session cross-model switches and enable…
chris7iu Nov 8, 2026
de44308
fix(antigravity): fold prefix history into user transcript, skip Defe…
chris7iu Nov 10, 2026
e3142e0
style(antigravity): apply rustfmt to antigravity_tests.rs
chris7iu Nov 10, 2026
3e65a77
test(antigravity): update schema_parity cross-tier switch expectation
chris7iu Nov 10, 2026
cc5bd54
fix(antigravity): accept raw valid string values in Codec::Json tool …
chris7iu Nov 10, 2026
135096c
feat(antigravity): add Gemini 4 Carbon low/medium/high tier models
chris7iu Nov 11, 2026
778dde0
refactor(antigravity): project tool input_schema natively like agy pa…
chris7iu Nov 11, 2026
9f19647
fix(antigravity): align header and stream idle timeouts with agy (300s)
chris7iu Nov 11, 2026
c6d46ec
fix(antigravity): abort thinking-only streams on mid-stream native tr…
chris7iu Nov 12, 2026
3bb3679
test(antigravity): wait for quiescent PTY backpressure across async l…
chris7iu Nov 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 7 additions & 4 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 9 additions & 3 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ publish = false
[dependencies]
clap = { version = "4.5", features = ["derive", "env"] }
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
serde_json = { version = "1.0", features = ["float_roundtrip"] }
anyhow = "1.0"
thiserror = "2.0"
axum = { version = "0.8", features = ["macros", "multipart"] }
Expand All @@ -35,10 +35,12 @@ once_cell = "1.20"
regex-lite = "0.1"
tokio-tungstenite = { version = "0.24", default-features = false, features = ["connect", "rustls-tls-native-roots"] }
tokio-rustls = { version = "0.26", default-features = false, features = ["ring", "tls12"] }
rustls = { version = "0.23", default-features = false, features = ["ring", "std"] }
rustls = { version = "0.23", default-features = false, features = ["ring", "std", "tls12"] }
rustls-native-certs = "0.8"
webpki-roots = "1"
hyper-util = { version = "0.1", features = ["client-proxy"] }
hyper = { version = "1.10.1", default-features = false, features = ["client", "http1", "http2"] }
hyper-rustls = { version = "0.27.9", default-features = false, features = ["http1", "http2", "ring", "tls12"] }
hyper-util = { version = "0.1", features = ["client-legacy", "client-proxy", "http1", "http2", "tokio"] }
url = "2"
prost = "0.13"
flate2 = "1.0"
Expand All @@ -47,7 +49,11 @@ crossterm = "0.28"
jiff = { version = "0.2", default-features = false, features = ["std", "tz-system", "tzdb-zoneinfo"] }
tiktoken-rs = { version = "0.12", default-features = false }

[target.'cfg(unix)'.dependencies]
libc = "=0.2.186"

[dev-dependencies]
hyper = { version = "1.10.1", default-features = false, features = ["server", "http1", "http2"] }
tokio = { version = "1", features = ["test-util"] }
tempfile = "3.14"
assert_cmd = "2"
Expand Down
34 changes: 34 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,40 @@ The opt-in Images API returns base64 image data and consumes the signed-in accou
Run `claude-code-proxy models` for the current catalog or
`claude-code-proxy models --full` for every dynamic Cursor alias.

An additional **experimental, default-off native Antigravity adapter** supports
`antigravity/gemini-4-argon-low`, `antigravity/gemini-4-argon-medium`,
`antigravity/gemini-4-argon-high`, `antigravity/claude-opus-5-5-low`,
`antigravity/claude-opus-5-5-medium`, and `antigravity/claude-opus-5-5-high`. It does not run or import credentials from `agy`.
Its default HTTP User-Agent is `claude-code-proxy/<package version>`. An explicit
provider-specific override affects only native generation/project discovery,
not OAuth; it is compatibility metadata, not verified official-client identity.
Use a fresh session for every model/tier/profile change. Real Google OAuth,
entitlement, native tool round trips and all three tiers remain live-validation
gates; offline tests are not evidence of account access. See the
[Antigravity limitations](docs/src/content/docs/reference/compatibility-and-limitations.md#experimental-native-antigravity-argon)
and [configuration](docs/src/content/docs/reference/configuration.md#experimental-antigravity)
before explicitly enabling it. Existing provider defaults and aliases are unchanged.

Auto-review classifiers route by their own requested model, not the main conversation's
model. Recognized Claude aliases follow Codex/Kimi session affinity or `aliasProvider`;
Grok does not establish alias affinity. Explicit Antigravity requests ignore
cross-provider auto-review overrides. Same-provider overrides still undergo native
replay/model validation; signed history cannot silently change tiers.

Antigravity login defaults to automatic browser/loopback completion. On Unix,
`claude-code-proxy antigravity auth login --manual` instead prints a browser URL
and accepts the **code displayed by the completion page** through visible input in
your local foreground terminal. The code is sensitive: keep your screen,
scrollback and recordings private. Short codes are fully visible; longer input
shows its end with a `<` marker and total character count. A known terminal width
of at least 10 columns is required; changing width cancels. It does not open a
browser or callback listener.
The explicitly configured OAuth client must permit
`https://antigravity.google/oauth-callback`; a loopback-only client may not work.
Cancel on browser errors or no displayed code; there is no automatic fallback.
Never paste a code/token into chat, shell arguments or logs. See the configuration
reference for PKCE/state distinctions, terminal bounds and unverified live gates.

> [!WARNING]
> The proxy accepts local requests without client authentication. It binds to
> `127.0.0.1` by default. Protect any non-loopback listener with a firewall or
Expand Down
50 changes: 49 additions & 1 deletion docs/src/content/docs/reference/command-reference.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ claude-code-proxy <provider> auth <action>
| `kimi` | Device code | Unsupported | User, expiry, scope, storage | Delete proxy credential |
| `grok` | Browser PKCE | Device code | Expiry and storage | Delete proxy credential |
| `cursor` | Browser polling flow | Unsupported | Source, claims, expiry | Delete proxy credential |
| `antigravity` (experimental) | Browser PKCE; opt-in Unix `--manual` paste-back | Unsupported | Safe local readiness, optional `--json` | Delete only Antigravity credential |

Examples:

Expand All @@ -80,7 +81,54 @@ claude-code-proxy kimi auth status
claude-code-proxy cursor auth logout
```

A missing credential makes `auth status` exit with status 1. Other provider command failures exit with status 2. Successful commands exit with status 0.
For existing providers, a missing credential makes `auth status` exit with status 1. Other provider command failures exit with status 2. Successful commands exit with status 0.

Antigravity auth commands work even while inference is disabled:

```sh
claude-code-proxy antigravity auth status --json
claude-code-proxy antigravity auth login
claude-code-proxy antigravity auth login --manual
claude-code-proxy antigravity auth logout
```

Configure your explicit OAuth client ID before login; see
[Antigravity configuration](/reference/configuration/#experimental-antigravity).
Without `--manual`, browser opening and the ephemeral loopback callback are
unchanged. Experimental `--manual` is Unix-only: it requires terminal stdin and a
foreground controlling terminal, prints the authorization URL there, and opens
neither a browser nor a callback listener. The configured client must permit the
exact hosted redirect `https://antigravity.google/oauth-callback`.

Open the URL in your browser, select the intended account, then copy the **code
displayed by the completion page** into the visible local terminal prompt. The
code is sensitive: keep screens, scrollback, screenshots and recordings private.
The input row shows a character count; short codes fit in full, while `<` marks
that only the end of longer input is visible. All entered characters remain part
of the completion, up to the unchanged 8192-byte limit. A known terminal width of
at least 10 columns is required; changing width cancels rather than risking
incorrect wrapped editing. Output modes that translate carriage returns or letter
case are refused, not silently changed.
The page removes `code` from its address bar; copying that address afterward does not
supply the code. Cancel if the browser reports an error (such as
`redirect_uri_mismatch`) or displays no code. There is no automatic callback,
client or endpoint fallback. Never put a code in command arguments, chat or logs.

Input is limited to 8192 printable ASCII bytes and 180 seconds, with at most
three empty-entry reprompts under the same deadline. Backspace edits; Enter
submits; Ctrl-C/Ctrl-D cancel. Pipes and non-Unix manual mode are rejected before
URL emission. Bare codes rely on server-enforced fresh S256 PKCE, **not returned
state validation**; a complete redirect URL, if separately available with its
code intact, additionally requires an exact matching state and redirect target.
See configuration for security and terminal-restoration limitations.

`status --json` is Antigravity-only and emits schema version 1, `provider:
antigravity`, plus the safe provider descriptor documented under
[model discovery](/reference/http-api/#get-v1models). A successfully emitted
report exits 0 even for missing/invalid/unready credentials. Inspection performs
no network, refresh, directory creation or writes. CLI readiness describes this
CLI's configuration, not a different running proxy, and never proves live access.
Auth invocation failures exit nonzero. No existing provider gains a `--json` flag.

Logout removes the local proxy-owned credential. It does not call the provider to revoke a refresh token.

Expand Down
Loading
Loading