clauderipple 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +229 -0
- package/LICENSE +674 -0
- package/README.ko.md +328 -0
- package/README.md +372 -0
- package/bin/clauderipple.js +12 -0
- package/dist/app/assets/trayDownTemplate.png +0 -0
- package/dist/app/assets/trayDownTemplate@2x.png +0 -0
- package/dist/app/assets/trayTemplate.png +0 -0
- package/dist/app/assets/trayTemplate@2x.png +0 -0
- package/dist/app/assets/trayWarnTemplate.png +0 -0
- package/dist/app/assets/trayWarnTemplate@2x.png +0 -0
- package/dist/app/assets/trayWin.png +0 -0
- package/dist/app/assets/trayWin@2x.png +0 -0
- package/dist/app/assets/trayWinDown.png +0 -0
- package/dist/app/assets/trayWinDown@2x.png +0 -0
- package/dist/app/assets/trayWinWarn.png +0 -0
- package/dist/app/assets/trayWinWarn@2x.png +0 -0
- package/dist/app/dist/main.js +518 -0
- package/dist/cli/src/browser.js +21 -0
- package/dist/cli/src/bundle.js +51 -0
- package/dist/cli/src/certs.js +33 -0
- package/dist/cli/src/claude-auth.js +112 -0
- package/dist/cli/src/codex.js +172 -0
- package/dist/cli/src/gen-certs.js +7 -0
- package/dist/cli/src/hooks/agent-title.js +160 -0
- package/dist/cli/src/index.js +489 -0
- package/dist/cli/src/launchd.js +183 -0
- package/dist/cli/src/picker.js +166 -0
- package/dist/cli/src/probe.js +55 -0
- package/dist/cli/src/runtime.js +62 -0
- package/dist/cli/src/schtasks.js +134 -0
- package/dist/cli/src/settings.js +142 -0
- package/dist/cli/src/supervisor.js +100 -0
- package/dist/cli/src/tray.js +85 -0
- package/dist/router/src/admin.js +945 -0
- package/dist/router/src/bootstrap.js +80 -0
- package/dist/router/src/certs.js +65 -0
- package/dist/router/src/compat.js +172 -0
- package/dist/router/src/config.js +179 -0
- package/dist/router/src/health.js +45 -0
- package/dist/router/src/identity.js +51 -0
- package/dist/router/src/index.js +144 -0
- package/dist/router/src/ingress/models.js +29 -0
- package/dist/router/src/ingress/server.js +400 -0
- package/dist/router/src/ingress/translate.js +457 -0
- package/dist/router/src/log.js +81 -0
- package/dist/router/src/picker.js +74 -0
- package/dist/router/src/presets.js +267 -0
- package/dist/router/src/providers/anthropic-observed.js +88 -0
- package/dist/router/src/providers/anthropic-token-file.js +48 -0
- package/dist/router/src/providers/anthropic.js +203 -0
- package/dist/router/src/providers/chatgpt/auth.js +226 -0
- package/dist/router/src/providers/chatgpt/index.js +274 -0
- package/dist/router/src/providers/chatgpt/sse.js +28 -0
- package/dist/router/src/providers/chatgpt/translate.js +393 -0
- package/dist/router/src/providers/claude-oauth.js +252 -0
- package/dist/router/src/providers/openai/index.js +193 -0
- package/dist/router/src/providers/openai/translate.js +504 -0
- package/dist/router/src/proxy.js +724 -0
- package/dist/router/src/redact.js +43 -0
- package/dist/router/src/requestlog.js +346 -0
- package/dist/router/src/routing.js +113 -0
- package/dist/router/src/version.js +8 -0
- package/dist/router/src/x509.js +203 -0
- package/dist/ui/app.js +1228 -0
- package/dist/ui/i18n.js +95 -0
- package/dist/ui/index.html +104 -0
- package/dist/ui/presets-fallback.js +61 -0
- package/dist/ui/style.css +347 -0
- package/docs/ARCHITECTURE.md +441 -0
- package/package.json +66 -0
package/README.md
ADDED
|
@@ -0,0 +1,372 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="docs/media/icon.png" width="128" alt="ClaudeRipple">
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<h1 align="center">ClaudeRipple</h1>
|
|
6
|
+
|
|
7
|
+
<p align="center"><b>English</b> · <a href="README.ko.md">한국어</a></p>
|
|
8
|
+
|
|
9
|
+
<p align="center">
|
|
10
|
+
<b>Chat stays Claude. Only Code becomes GPT.</b><br>
|
|
11
|
+
Claude Desktop's own setting for other models switches the <b>whole app</b> — chat, phone Remote
|
|
12
|
+
Control and connectors go with it.<br>ClaudeRipple turns nothing off: you stay signed in to your
|
|
13
|
+
Claude subscription while GPT, DeepSeek, Kimi, Grok<br>or 400+ other models answer in the
|
|
14
|
+
<b>Code tab</b>. Claude inside the <b>Codex app</b> and <b>Codex CLI</b> too.
|
|
15
|
+
</p>
|
|
16
|
+
|
|
17
|
+
<p align="center">
|
|
18
|
+
<a href="https://www.npmjs.com/package/clauderipple"><img alt="npm" src="https://img.shields.io/npm/v/clauderipple?label=npm"></a>
|
|
19
|
+
<img alt="Alpha" src="https://img.shields.io/badge/status-alpha-orange">
|
|
20
|
+
<a href="LICENSE"><img alt="GPL-3.0" src="https://img.shields.io/badge/license-GPL--3.0-blue"></a>
|
|
21
|
+
<img alt="macOS" src="https://img.shields.io/badge/macOS-arm64%20%7C%20x64-black">
|
|
22
|
+
<img alt="Windows" src="https://img.shields.io/badge/Windows-arm64%20%7C%20x64-0078D4">
|
|
23
|
+
<img alt="Node" src="https://img.shields.io/badge/node-24%2B-success">
|
|
24
|
+
<a href="README.ko.md"><img alt="한국어" src="https://img.shields.io/badge/docs-한국어-red"></a>
|
|
25
|
+
</p>
|
|
26
|
+
|
|
27
|
+
<p align="center">
|
|
28
|
+
<img src="docs/media/tour.png" width="880" alt="ClaudeRipple settings tour: status, model mapping, providers, clients, request log">
|
|
29
|
+
</p>
|
|
30
|
+
|
|
31
|
+
<table align="center">
|
|
32
|
+
<tr>
|
|
33
|
+
<td align="center" width="34%"><img src="docs/media/picker-zoom.png" width="300" alt="Real names in the Claude Desktop picker"><br><sub>GPT models under their real names in the Claude Desktop picker</sub></td>
|
|
34
|
+
<td align="center" width="66%"><img src="docs/media/luna-answer.png" alt="GPT-5.6 Luna answering in the Claude Desktop Code tab"><br><sub>GPT-5.6 Luna answering in the Code tab, at the effort you chose</sub></td>
|
|
35
|
+
</tr>
|
|
36
|
+
<tr>
|
|
37
|
+
<td colspan="2" align="center"><img src="docs/media/subagents.png" alt="Subagents on GPT-5.6 Terra and Sol, named in the background-task panel"><br><sub>Subagents on GPT-5.6 Terra and Sol, named in the background-task panel</sub></td>
|
|
38
|
+
</tr>
|
|
39
|
+
</table>
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## 1P, not 3P: the difference this whole project exists for
|
|
44
|
+
|
|
45
|
+
Claude Desktop already ships an official way to use other models — the **inference
|
|
46
|
+
gateway** setting, what the app calls third-party or **3P** mode. Turning it on is
|
|
47
|
+
not a per-session choice. It switches the **whole app** into a different deployment
|
|
48
|
+
mode at launch, and that mode is a different product:
|
|
49
|
+
|
|
50
|
+
- The window stops loading `claude.ai` and loads a local bundle instead. claude.ai
|
|
51
|
+
`/api/` and `/v1/` calls answer `custom_3p_not_available` 503.
|
|
52
|
+
- "Chat" is no longer claude.ai chat. It is a Claude Code local-agent session.
|
|
53
|
+
- Remote Control and side sessions are switched off outright
|
|
54
|
+
(`shouldEnableSessionsBridge()` returns false).
|
|
55
|
+
- Anthropic's own claude.ai connectors, Claude Design, mobile continuity and chat
|
|
56
|
+
search go with it.
|
|
57
|
+
|
|
58
|
+
There is no middle setting. "Chat on Claude, Code on the gateway" is impossible for
|
|
59
|
+
anyone, because 1P mode routes nothing through the gateway at all. (All of this is
|
|
60
|
+
read out of the app's own bundle; see [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) §2.)
|
|
61
|
+
|
|
62
|
+
**ClaudeRipple never touches that setting.** The app stays signed in to your Claude
|
|
63
|
+
subscription in 1P mode, and another model answers in the Code tab and its subagents
|
|
64
|
+
— under its real name in the model picker, at the reasoning effort you chose. You do
|
|
65
|
+
not trade your Claude account for a GPT one. You keep both, in one app.
|
|
66
|
+
|
|
67
|
+
Three things follow from staying in 1P, and no gateway-based tool can offer any of them:
|
|
68
|
+
|
|
69
|
+
- **Code from your phone, on GPT.** Remote Control is off in 3P. It is on here, so you
|
|
70
|
+
can pick a model and send a task from a phone and watch the commits land.
|
|
71
|
+
- **Connectors alive while another model works.** 3P stubs claude.ai calls, which takes
|
|
72
|
+
Anthropic's own connectors with them. Read a Google Drive doc and have GPT write the code.
|
|
73
|
+
- **Cloud and side sessions.** Gone in 3P. Untouched here.
|
|
74
|
+
|
|
75
|
+
If you pay for Claude, 3P is not an option — it throws away the half of the
|
|
76
|
+
subscription you are paying for. This is the only way to keep it and still choose
|
|
77
|
+
the model.
|
|
78
|
+
|
|
79
|
+
## FAQ
|
|
80
|
+
|
|
81
|
+
### Can I use GPT in the Claude Desktop app?
|
|
82
|
+
|
|
83
|
+
Yes. Install ClaudeRipple, map a Claude model name to a GPT model, and the Code tab
|
|
84
|
+
answers with GPT under its real name in the model picker. The app itself is not
|
|
85
|
+
modified and not switched into any other mode.
|
|
86
|
+
|
|
87
|
+
### How do I use GPT in Claude Code?
|
|
88
|
+
|
|
89
|
+
The same install covers the terminal `claude` CLI. ClaudeRipple is a local proxy that
|
|
90
|
+
Claude Code is pointed at through two lines in `~/.claude/settings.json`, so your
|
|
91
|
+
skills, hooks, MCP servers, `CLAUDE.md` and subagents keep working while another model
|
|
92
|
+
answers.
|
|
93
|
+
|
|
94
|
+
### Do I have to turn on Claude Desktop's "third-party inference" (gateway) setting?
|
|
95
|
+
|
|
96
|
+
No — and you should not. That setting switches the whole app into 3P mode, which stops
|
|
97
|
+
loading claude.ai, replaces chat with a local-agent session and turns Remote Control
|
|
98
|
+
off. ClaudeRipple never touches it.
|
|
99
|
+
|
|
100
|
+
### Will I lose claude.ai chat, Remote Control or my connectors?
|
|
101
|
+
|
|
102
|
+
No. The app stays signed in to your Claude subscription, so chat, phone Remote Control,
|
|
103
|
+
cloud sessions and Anthropic's own connectors keep working. That is the whole point of
|
|
104
|
+
staying in 1P.
|
|
105
|
+
|
|
106
|
+
### Can I still use Claude itself?
|
|
107
|
+
|
|
108
|
+
Yes. Model mapping is per model name: leave a name mapped to Claude and it answers as
|
|
109
|
+
Claude. Most people map one or two names to GPT and leave the rest alone.
|
|
110
|
+
|
|
111
|
+
### Do I need an OpenAI API key?
|
|
112
|
+
|
|
113
|
+
No. A ChatGPT Plus or Pro subscription works — you sign in from the app and no API key
|
|
114
|
+
is involved. API keys are for the other providers (DeepSeek, Kimi, GLM, OpenRouter and
|
|
115
|
+
anything else with an Anthropic- or OpenAI-compatible endpoint).
|
|
116
|
+
|
|
117
|
+
### Which models can I use?
|
|
118
|
+
|
|
119
|
+
GPT through a ChatGPT subscription, and DeepSeek, Kimi, GLM, Grok, Qwen and 400+ more
|
|
120
|
+
through OpenRouter or a direct API key. Claude models keep working as they are.
|
|
121
|
+
|
|
122
|
+
### Does it work on Windows?
|
|
123
|
+
|
|
124
|
+
Yes, on Windows and macOS, arm64 and x64. Install, dashboard, restart and uninstall are
|
|
125
|
+
measured on Windows 11 arm64; the x64 runtime is measured under emulation.
|
|
126
|
+
|
|
127
|
+
### Is my code sent anywhere else?
|
|
128
|
+
|
|
129
|
+
No. The proxy runs on your own machine. Requests go to the provider you configured and
|
|
130
|
+
nowhere else, and credentials stay in your home directory. See [Privacy](#privacy).
|
|
131
|
+
|
|
132
|
+
## One tool instead of four
|
|
133
|
+
|
|
134
|
+
Similar tools are built for the terminal. They let the Claude Code CLI or Codex CLI
|
|
135
|
+
use other models, but they cannot reach the Claude **desktop app**, and the moment
|
|
136
|
+
you switch models you lose the Claude-subscription side (claude.ai chat, Remote
|
|
137
|
+
Control, cloud sessions). ClaudeRipple covers the desktop app, the terminal and
|
|
138
|
+
Codex from one menu-bar app, runs both subscriptions side by side, and keeps the
|
|
139
|
+
Claude Code harness intact: your skills, hooks, MCP servers, `CLAUDE.md`, subagents
|
|
140
|
+
and claude.ai connectors keep working while another model does the thinking.
|
|
141
|
+
|
|
142
|
+
| | ClaudeRipple | opencodex / openclaude | claude-code-router | Claude Desktop gateway (3P) mode |
|
|
143
|
+
|---|---|---|---|---|
|
|
144
|
+
| Claude **Desktop** Code tab **without** gateway (3P) mode | ✅ | ❌ ¹ | ❌ | ❌ by definition |
|
|
145
|
+
| Keeps claude.ai chat, Remote Control, cloud sessions, connectors | ✅ | ❌ | ❌ | ❌ |
|
|
146
|
+
| Claude and GPT subscriptions side by side | ✅ | ❌ all-or-nothing | ❌ | ❌ |
|
|
147
|
+
| Real model names in the Desktop picker | ✅ | ❌ | ❌ | partial |
|
|
148
|
+
| Terminal `claude` CLI | ✅ | ✅ | ✅ | ✅ |
|
|
149
|
+
| Codex **app** and Codex CLI → Claude | ✅ | ✅ | ❌ | ❌ |
|
|
150
|
+
| Prompt cache on translated providers | **94–99 %** measured | not measured | varies | n/a |
|
|
151
|
+
| Subagents named by real model in the task panel | ✅ | ❌ | ❌ | ❌ |
|
|
152
|
+
| Settings GUI, no terminal needed | ✅ | ❌ | ❌ | ❌ |
|
|
153
|
+
| Signed, notarized app with its own runtime | ✅ | ❌ | ❌ | – |
|
|
154
|
+
|
|
155
|
+
¹ opencodex's README shows Claude Desktop in a demo but publishes no setup steps for it,
|
|
156
|
+
in the repository or on its documentation site (checked 2026-09-16). The only public way
|
|
157
|
+
into the desktop app is the official gateway setting — the last column.
|
|
158
|
+
|
|
159
|
+
The desktop app's own "third-party inference" setting flips the whole app into another
|
|
160
|
+
mode: you lose claude.ai chat, Remote Control and cloud sessions. Tools that replace
|
|
161
|
+
`ANTHROPIC_BASE_URL` never reach the desktop app at all. ClaudeRipple instead is a
|
|
162
|
+
tiny HTTPS proxy that only the Claude Code process trusts: requests for the models
|
|
163
|
+
you map go to your provider, everything else goes to Anthropic byte for byte.
|
|
164
|
+
|
|
165
|
+
## What you get
|
|
166
|
+
|
|
167
|
+
- **Any model in Claude Desktop and Claude Code.** GPT-5.6 Terra / Sol / Luna and
|
|
168
|
+
GPT-6 Astra through your ChatGPT Plus/Pro subscription, or DeepSeek, Kimi, GLM,
|
|
169
|
+
MiniMax, Qwen, Grok, Mistral, Groq, Together, Fireworks, OpenRouter (400+ models)
|
|
170
|
+
and local Ollama / LM Studio. Under their real names in the picker, or mapped onto
|
|
171
|
+
a Claude name.
|
|
172
|
+
- **Claude in the Codex app and Codex CLI.** A local OpenAI-compatible endpoint that
|
|
173
|
+
Codex treats as a provider; Claude models appear in Codex's own model list. Uses
|
|
174
|
+
your Claude Code login or an Anthropic API key.
|
|
175
|
+
- **The full Claude Code harness, untouched.** Skills, hooks, MCP, `CLAUDE.md`,
|
|
176
|
+
subagents, plan mode, Remote Control on your phone: nothing is turned off.
|
|
177
|
+
- **Correct by construction.** Prompt caching preserved (Anthropic cache breakpoints
|
|
178
|
+
and stable OpenAI prefixes), Claude Code's server-side threads handled, tool calls
|
|
179
|
+
and images round-tripped, reasoning effort clamped to what each model accepts,
|
|
180
|
+
Anthropic-only request fields stripped for compatible vendors.
|
|
181
|
+
- **A real request log.** Who asked, which model answered, tokens in / cached / out,
|
|
182
|
+
latency, status, per request, with a one-hour summary.
|
|
183
|
+
- **Subagent name tags.** The background-task panel shows `Terra·high · Review`
|
|
184
|
+
instead of a generic "Agent".
|
|
185
|
+
- **Made for people who don't want a terminal.** Provider presets with one-click
|
|
186
|
+
connection tests and model discovery, drop-down model mapping, auto-save, Korean
|
|
187
|
+
and English UI. A menu-bar app that carries its own runtime and sets itself up on
|
|
188
|
+
first launch. Signed and notarized.
|
|
189
|
+
|
|
190
|
+
<p align="center">
|
|
191
|
+
<img src="docs/media/mapping.png" width="880" alt="Model mapping: which model answers for each Claude name, with per-model reasoning effort">
|
|
192
|
+
</p>
|
|
193
|
+
|
|
194
|
+
## Install
|
|
195
|
+
|
|
196
|
+
**macOS**
|
|
197
|
+
|
|
198
|
+
```sh
|
|
199
|
+
curl -fsSL https://raw.githubusercontent.com/PBJ-2/clauderipple/main/scripts/install.sh | sh
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
**Windows** (PowerShell)
|
|
203
|
+
|
|
204
|
+
```powershell
|
|
205
|
+
irm https://raw.githubusercontent.com/PBJ-2/clauderipple/main/scripts/install.ps1 | iex
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
That is the whole prerequisite list. The script uses a Node 24+ you already have, and
|
|
209
|
+
downloads the official build into `~/.clauderipple/runtime` when you have none,
|
|
210
|
+
verifying it against the checksum nodejs.org publishes. Then it sets ClaudeRipple up:
|
|
211
|
+
a local certificate, two lines in `~/.claude/settings.json`, and a background router
|
|
212
|
+
that starts with your computer. No administrator rights, no password.
|
|
213
|
+
|
|
214
|
+
With Node already installed you can skip the script:
|
|
215
|
+
|
|
216
|
+
```sh
|
|
217
|
+
npm install -g clauderipple
|
|
218
|
+
clauderipple install
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
Then open the dashboard and add a provider:
|
|
222
|
+
|
|
223
|
+
```sh
|
|
224
|
+
clauderipple ui
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
**Providers** → add ChatGPT or paste an API key → **Model mapping**.
|
|
228
|
+
|
|
229
|
+
**The menu-bar / tray app** is optional. It shows the router's state and opens the
|
|
230
|
+
dashboard in a click:
|
|
231
|
+
|
|
232
|
+
```sh
|
|
233
|
+
clauderipple tray
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
It runs on Electron, which is about 270MB and is therefore not installed by default.
|
|
237
|
+
`clauderipple tray --install` fetches it once; everything else works without it.
|
|
238
|
+
|
|
239
|
+
**Updating.**
|
|
240
|
+
|
|
241
|
+
```sh
|
|
242
|
+
npm install -g clauderipple@latest
|
|
243
|
+
clauderipple restart
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
Optional, for real names in the Desktop picker: **Clients → Claude Desktop → Model
|
|
247
|
+
picker → on**, then quit and reopen Claude Desktop. To trust the local certificate
|
|
248
|
+
for your user only, macOS asks for your login password and Windows shows a
|
|
249
|
+
confirmation dialog with the fingerprint — ClaudeRipple never sees a password, and
|
|
250
|
+
neither platform needs administrator rights.
|
|
251
|
+
|
|
252
|
+
> **Closing Claude Desktop's window is not enough.** It keeps running, and the next
|
|
253
|
+
> launch reuses it without reading the new setting. Quit it properly (macOS: ⌘Q;
|
|
254
|
+
> Windows: the tray icon, or Task Manager) or the picker will silently not change.
|
|
255
|
+
|
|
256
|
+
<details>
|
|
257
|
+
<summary>From source (Node 24)</summary>
|
|
258
|
+
|
|
259
|
+
```bash
|
|
260
|
+
git clone https://github.com/PBJ-2/clauderipple && cd clauderipple && npm install
|
|
261
|
+
node packages/cli/src/index.ts install # certs, settings.json env, supervisor (launchd / Task Scheduler), end-to-end probe
|
|
262
|
+
node packages/cli/src/index.ts ui # open the local GUI in your browser
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
`uninstall` reverses everything and restores `~/.claude/settings.json` from a backup.
|
|
266
|
+
Other commands: `status`, `start`, `stop`, `restart`, `logs -f`, `login`, `logout`,
|
|
267
|
+
`claude-login`, `claude-logout`, `picker on|off`, `agent-title on|off`,
|
|
268
|
+
`codex on|off`.
|
|
269
|
+
</details>
|
|
270
|
+
|
|
271
|
+
## Clients
|
|
272
|
+
|
|
273
|
+
### Claude Desktop
|
|
274
|
+
|
|
275
|
+
Works out of the box after install. Map models on **Model mapping** (auto-saves),
|
|
276
|
+
or turn on **picker mode** to see provider models by name in the app's own picker.
|
|
277
|
+
Effort chosen in the app is passed through; unsupported levels are clamped.
|
|
278
|
+
|
|
279
|
+
### Claude Code (terminal, Remote Control, subagents)
|
|
280
|
+
|
|
281
|
+
Same router, same mapping. `/model gpt-5.6-terra` lists the models you added.
|
|
282
|
+
Subagents follow the routing; a `[[gpt: sol@xhigh]]` marker in a subagent prompt
|
|
283
|
+
overrides the model for that call, and the task panel shows the real model name.
|
|
284
|
+
|
|
285
|
+
### Codex app and Codex CLI
|
|
286
|
+
|
|
287
|
+
```bash
|
|
288
|
+
clauderipple codex on # adds a "clauderipple" provider to ~/.codex/config.toml (backup first)
|
|
289
|
+
codex --profile clauderipple -m claude-sonnet-5
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
Claude models show up in Codex's model list under their names (ClaudeRipple writes
|
|
293
|
+
a model catalog next to Codex's own). Claude is reached through your Claude Code
|
|
294
|
+
login (detected from the running Desktop session, the terminal login, or a
|
|
295
|
+
sign-in of ClaudeRipple's own: **Providers → Claude → Connect Claude
|
|
296
|
+
subscription…** opens the browser, no terminal needed; the same as
|
|
297
|
+
`clauderipple claude-login`) or an Anthropic API key. Reusing a
|
|
298
|
+
subscription login is subject to Anthropic's terms. Any Anthropic-compatible
|
|
299
|
+
provider you configured is available the same way.
|
|
300
|
+
|
|
301
|
+
<p align="center">
|
|
302
|
+
<img src="docs/media/add-provider.png" width="880" alt="Add provider: ChatGPT subscription, presets, OpenAI-compatible providers">
|
|
303
|
+
</p>
|
|
304
|
+
|
|
305
|
+
## Providers
|
|
306
|
+
|
|
307
|
+
| Provider | Kind | Auth | Model list | Notes |
|
|
308
|
+
|---|---|---|---|---|
|
|
309
|
+
| ChatGPT subscription | Codex backend | sign in (or reuse Codex login) | Terra, Sol, Luna, Astra | effort low…max (Luna: ultra), prompt cache 94–99 % |
|
|
310
|
+
| OpenRouter | Anthropic-compatible | API key | 400+, discovered | per-model effort support read from the API |
|
|
311
|
+
| DeepSeek, Kimi, Z.ai GLM, MiniMax, Qwen (intl / cn) | Anthropic-compatible | API key | preset | verified against vendor docs |
|
|
312
|
+
| xAI Grok, Mistral, Groq, Together, Fireworks | OpenAI-compatible | API key | discovered | translated (Chat Completions / Responses) |
|
|
313
|
+
| Ollama, LM Studio | OpenAI-compatible, local | none | discovered | |
|
|
314
|
+
| Anthropic | native | Claude Code login or API key | Claude models | for the Codex side |
|
|
315
|
+
| Anything else | custom | your choice | discovered | any Anthropic- or OpenAI-compatible endpoint |
|
|
316
|
+
|
|
317
|
+
Requests to compatible providers are cleaned of Anthropic-only fields
|
|
318
|
+
(server-side threads, deferred tools, context management, thinking bindings) and
|
|
319
|
+
effort is clamped per model, so vendors do not 400 on Claude Code's request shape.
|
|
320
|
+
|
|
321
|
+
## How it works
|
|
322
|
+
|
|
323
|
+
```
|
|
324
|
+
Claude Desktop / claude CLI ──HTTPS_PROXY──▶ ClaudeRipple ──▶ api.anthropic.com (unchanged)
|
|
325
|
+
│
|
|
326
|
+
mapped model ──────────┼──▶ chatgpt.com/backend-api (Responses ⇄ Messages)
|
|
327
|
+
├──▶ Anthropic-compatible vendors (+ compat layer)
|
|
328
|
+
└──▶ OpenAI-compatible vendors (Messages ⇄ Chat/Responses)
|
|
329
|
+
Codex app / CLI ──/v1/responses──▶ ClaudeRipple ingress ──▶ Claude (your login or API key) / vendors
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
- The Claude Code CLI reads `HTTPS_PROXY` and `NODE_EXTRA_CA_CERTS` from
|
|
333
|
+
`~/.claude/settings.json` (Anthropic's documented corporate-proxy path). Only that
|
|
334
|
+
process trusts ClaudeRipple's local CA; the OS keychain is untouched unless you
|
|
335
|
+
turn on picker mode.
|
|
336
|
+
- Picker mode routes the app's own claude.ai traffic through the proxy and adds
|
|
337
|
+
your models to the picker list the app fetches at start. Off again with one click.
|
|
338
|
+
- The router drains in-flight calls on restart, self-exits on repeated upstream
|
|
339
|
+
failures so launchd restarts it, rotates logs, and never drops a request silently.
|
|
340
|
+
|
|
341
|
+
Details with sources: [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md).
|
|
342
|
+
|
|
343
|
+
## Privacy
|
|
344
|
+
|
|
345
|
+
Everything runs on 127.0.0.1. API keys live in `~/.clauderipple/config.json`
|
|
346
|
+
(0600). The only network destinations are the providers you configure. There is no
|
|
347
|
+
telemetry.
|
|
348
|
+
|
|
349
|
+
## Status: alpha
|
|
350
|
+
|
|
351
|
+
In daily use by the author, but young. Expect rough edges:
|
|
352
|
+
|
|
353
|
+
- **Windows support is new (2026-09-14).** Install, setup, the router, signing
|
|
354
|
+
in, the picker and a live GPT call are verified on x64 hardware; crash recovery
|
|
355
|
+
on arm64. The window still has the stock Windows title bar. Windows builds are
|
|
356
|
+
unsigned; see the note under Install.
|
|
357
|
+
- ChatGPT, OpenRouter and Claude-in-Codex are verified with live accounts; the
|
|
358
|
+
other presets follow the vendors' official documentation.
|
|
359
|
+
- A model added to the picker is usable from the next session.
|
|
360
|
+
- Claude Code and Codex change their wire protocols often; a client update can
|
|
361
|
+
break a translation until ClaudeRipple catches up. Bugs and logs welcome.
|
|
362
|
+
|
|
363
|
+
## Not affiliated
|
|
364
|
+
|
|
365
|
+
ClaudeRipple is an independent open-source project. It is not affiliated with,
|
|
366
|
+
endorsed by, or sponsored by Anthropic or OpenAI. Claude and Claude Code are
|
|
367
|
+
trademarks of Anthropic, PBC. ChatGPT and Codex are trademarks of OpenAI.
|
|
368
|
+
|
|
369
|
+
## License
|
|
370
|
+
|
|
371
|
+
Copyright (c) 2026 pbj. GPL-3.0 — see [LICENSE](LICENSE). Use it freely; if you distribute a modified
|
|
372
|
+
version, ship its source under the same license.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// The published entry point. An npm install carries the JavaScript built from the TypeScript
|
|
3
|
+
// sources, because Node refuses to strip types under node_modules; a checkout has no dist/ and
|
|
4
|
+
// runs the sources directly. Whichever exists is the CLI.
|
|
5
|
+
import fs from "node:fs";
|
|
6
|
+
import path from "node:path";
|
|
7
|
+
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
8
|
+
|
|
9
|
+
const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
|
|
10
|
+
const built = path.join(root, "dist", "cli", "src", "index.js");
|
|
11
|
+
const entry = fs.existsSync(built) ? built : path.join(root, "packages", "cli", "src", "index.ts");
|
|
12
|
+
await import(pathToFileURL(entry).href);
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|