clauderipple 0.8.2 → 0.8.4

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.
@@ -0,0 +1,608 @@
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"><a href="README.md">English</a> · <a href="README.ko.md">한국어</a> · <a href="README.zh-CN.md">简体中文</a> · <a href="README.ja.md">日本語</a> · <a href="README.es.md">Español</a> · <b>Português (BR)</b></p>
8
+
9
+ <p align="center">
10
+ <b>O chat continua Claude. Só o Code vira GPT.</b><br>
11
+ A configuração do próprio Claude Desktop para outros modelos troca o <b>app inteiro</b> — o chat, o Remote
12
+ Control pelo celular e os conectores vão junto.<br>O ClaudeRipple não desliga nada: você continua logado na sua
13
+ assinatura do Claude enquanto GPT, DeepSeek, Kimi, Grok<br>ou mais de 400 outros modelos respondem na
14
+ <b>aba Code</b>. E ainda leva o Claude para o <b>app Codex</b> e o <b>Codex CLI</b>.
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="Linux" src="https://img.shields.io/badge/Linux-x64%20(systemd)-FCC624">
24
+ <img alt="Node" src="https://img.shields.io/badge/node-24%2B-success">
25
+ <a href="README.md"><img alt="English" src="https://img.shields.io/badge/docs-English-blue"></a>
26
+ </p>
27
+
28
+ <p align="center">
29
+ <img src="docs/media/tour.png" width="880" alt="Tour pelas configurações do ClaudeRipple: status, mapeamento de modelos, provedores, clientes, log de requisições">
30
+ </p>
31
+
32
+ <table align="center">
33
+ <tr>
34
+ <td align="center" width="34%"><img src="docs/media/picker-zoom.png" width="300" alt="Nomes reais no seletor do Claude Desktop"><br><sub>Modelos GPT com os nomes reais no seletor do Claude Desktop</sub></td>
35
+ <td align="center" width="66%"><img src="docs/media/luna-answer.png" alt="GPT-5.6 Luna respondendo na aba Code do Claude Desktop"><br><sub>GPT-5.6 Luna respondendo na aba Code, com o esforço que você escolheu</sub></td>
36
+ </tr>
37
+ <tr>
38
+ <td colspan="2" align="center"><img src="docs/media/subagents.png" alt="Subagentes no GPT-5.6 Terra e no Sol, identificados no painel de tarefas em segundo plano"><br><sub>Subagentes no GPT-5.6 Terra e no Sol, identificados no painel de tarefas em segundo plano</sub></td>
39
+ </tr>
40
+ </table>
41
+
42
+ ---
43
+
44
+ ## 1P, não 3P: a diferença pela qual todo este projeto existe
45
+
46
+ O Claude Desktop já traz um jeito oficial de usar outros modelos — a configuração de
47
+ **gateway de inferência**, que o app chama de modo de terceiros ou **3P**. Ativá-la não é
48
+ uma escolha por sessão. Ela coloca o **app inteiro** em outro modo de implantação já na
49
+ inicialização, e esse modo é outro produto:
50
+
51
+ - A janela deixa de carregar o `claude.ai` e passa a carregar um bundle local. As chamadas
52
+ `/api/` e `/v1/` do claude.ai respondem `custom_3p_not_available` 503.
53
+ - O "Chat" deixa de ser o chat do claude.ai. Vira uma sessão de agente local do Claude Code.
54
+ - O Remote Control e as sessões paralelas são desativados por completo
55
+ (`shouldEnableSessionsBridge()` retorna false).
56
+ - Os conectores do claude.ai da própria Anthropic, o Claude Design, a continuidade com o
57
+ celular e a busca nos chats vão junto.
58
+
59
+ Não existe meio-termo. "Chat no Claude, Code no gateway" é impossível para qualquer pessoa,
60
+ porque no modo 1P nada passa pelo gateway. (Tudo isso foi extraído do próprio bundle do
61
+ app; veja [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) §2.)
62
+
63
+ **O ClaudeRipple nunca mexe nessa configuração.** O app continua logado na sua assinatura
64
+ do Claude, no modo 1P, e outro modelo responde na aba Code e nos subagentes dela — com o
65
+ nome real no seletor de modelos, com o esforço de raciocínio que você escolheu. Você não troca
66
+ sua conta do Claude por uma do GPT. Fica com as duas, no mesmo app.
67
+
68
+ Continuar no 1P traz três coisas, e nenhuma ferramenta baseada em gateway consegue oferecer
69
+ qualquer uma delas:
70
+
71
+ - **Programe pelo celular, com GPT.** O Remote Control fica desligado no 3P. Aqui ele
72
+ continua ligado, então você pode escolher um modelo, mandar uma tarefa pelo celular e ver
73
+ os commits chegando.
74
+ - **Conectores funcionando enquanto outro modelo trabalha.** O 3P troca as chamadas ao
75
+ claude.ai por stubs, o que derruba junto os conectores da própria Anthropic. Leia um
76
+ documento do Google Drive e deixe o GPT escrever o código.
77
+ - **Sessões na nuvem e paralelas.** Somem no 3P. Aqui ficam intactas.
78
+
79
+ Se você paga pelo Claude, o 3P não é opção — ele joga fora metade da assinatura pela qual
80
+ você está pagando. Este é o único jeito de mantê-la e ainda escolher o modelo.
81
+
82
+ ## Perguntas frequentes
83
+
84
+ ### Posso usar GPT no app Claude Desktop?
85
+
86
+ Sim — na **aba Code** e nos subagentes dela. Instale o ClaudeRipple, faça login com uma
87
+ assinatura ChatGPT Plus ou Pro, e o GPT (GPT-6 Sol, Luna, Astra, GPT-5.6 Terra e os demais)
88
+ aparece com o nome real no seletor de modelos, com o esforço de raciocínio que você escolher.
89
+ O app em si não é modificado nem passa para nenhum outro modo. A aba de **chat** geral
90
+ continua Claude: nenhuma ferramenta consegue rotear o chat sem colocar o app inteiro em modo
91
+ gateway (veja [1P, não 3P](#1p-não-3p-a-diferença-pela-qual-todo-este-projeto-existe)).
92
+
93
+ ### Como uso GPT no Claude Code?
94
+
95
+ A mesma instalação cobre a CLI `claude` no terminal. O ClaudeRipple é um proxy local para o
96
+ qual o Claude Code é apontado com duas linhas em `~/.claude/settings.json`; assim, suas
97
+ skills, hooks, servidores MCP, `CLAUDE.md` e subagentes continuam funcionando enquanto outro
98
+ modelo responde.
99
+
100
+ ### Preciso ativar a configuração de "inferência de terceiros" (gateway) do Claude Desktop?
101
+
102
+ Não — e você não deve ativá-la. Essa configuração coloca o app inteiro no modo 3P, que deixa de carregar
103
+ o claude.ai, substitui o chat por uma sessão de agente local e desliga o Remote Control. O
104
+ ClaudeRipple nunca mexe nela.
105
+
106
+ ### Vou perder o chat do claude.ai, o Remote Control ou meus conectores?
107
+
108
+ Não. O app continua logado na sua assinatura do Claude, então o chat, o Remote Control pelo
109
+ celular, as sessões na nuvem e os conectores da própria Anthropic continuam funcionando. É
110
+ justamente para isso que se fica no 1P.
111
+
112
+ ### Ainda posso usar o próprio Claude?
113
+
114
+ Sim. O mapeamento de modelos é feito por nome de modelo: deixe um nome mapeado para o Claude
115
+ e ele responde como Claude. A maioria das pessoas mapeia um ou dois nomes para o GPT e deixa
116
+ o resto como está.
117
+
118
+ ### Preciso de uma chave de API da OpenAI?
119
+
120
+ Não. Qualquer plano do ChatGPT que inclua o Codex serve — Plus, Pro e Business, além de
121
+ Enterprise ou Edu quando o administrador do workspace tiver ativado o Codex. Você faz login
122
+ pelo app, e nenhuma chave de API entra na história. Valem os limites de uso do plano; quando
123
+ eles se esgotam, os créditos do Codex que você comprou passam a ser usados. As chaves de API
124
+ são para os outros provedores (DeepSeek, Kimi, GLM, OpenRouter e qualquer outro com endpoint
125
+ compatível com Anthropic ou OpenAI).
126
+
127
+ ### Quais modelos posso usar?
128
+
129
+ GPT por meio de uma assinatura do ChatGPT, e DeepSeek, Kimi, GLM, Grok, Qwen e mais de 400
130
+ outros pelo OpenRouter ou por uma chave de API direta. Os modelos Claude continuam
131
+ funcionando como sempre.
132
+
133
+ ### Funciona no Windows?
134
+
135
+ Sim, no Windows e no macOS, em arm64 e x64. A instalação, o painel, o reinício e a desinstalação
136
+ foram medidos no Windows 11 arm64; o runtime x64 foi medido sob emulação. No Linux também
137
+ funciona, desde que haja uma sessão de usuário do systemd: a instalação, uma requisição da aba
138
+ Code passando pelo roteador, um reinício no meio de uma resposta em streaming e a
139
+ desinstalação foram medidos no Ubuntu 24.04 x64 com o Claude Desktop 2.2553.13, assim como
140
+ o modo seletor: os modelos de `cli.extraModels` aparecem no seletor da aba Code ao lado dos
141
+ modelos do próprio Claude.
142
+
143
+ ### Meu código é enviado para algum outro lugar?
144
+
145
+ Não. O proxy roda na sua própria máquina. As requisições vão para o provedor que você
146
+ configurou e para mais nenhum lugar, e as credenciais ficam no seu diretório home. Veja
147
+ [Privacidade](#privacidade).
148
+
149
+ ### Minha conta do Claude pode ser banida? Isso viola os termos da Anthropic?
150
+
151
+ O que o ClaudeRipple faz com o Claude é limitado e verificável: uma requisição que fica no
152
+ Claude sai da sua máquina exatamente como o Claude Code a enviou, byte por byte, e uma requisição
153
+ roteada para o GPT ou outro provedor nunca chega à Anthropic. Ele funciona pelas
154
+ configurações de proxy e de certificado que o Claude Code documenta para redes corporativas
155
+ (`HTTPS_PROXY`, `NODE_EXTRA_CA_CERTS` — [Enterprise network configuration](https://code.claude.com/docs/en/corporate-proxy)),
156
+ e não modificando o app. Os relatos de contas banidas tratam da direção oposta — um login de
157
+ assinatura do Claude usado a partir de **outro** programa. O ClaudeRipple tem um recurso
158
+ opcional desse tipo: o Claude dentro do Codex usando o login da sua assinatura. Esse uso
159
+ está sujeito aos termos da Anthropic; uma chave de API da Anthropic elimina a questão. Fazer
160
+ rodízio entre várias assinaturas do Claude também é uma decisão sua, à luz desses termos. Só
161
+ a Anthropic pode dizer como uma conta é tratada, então nada aqui é uma promessa.
162
+
163
+ ### E o Gemini com uma conta do Google?
164
+
165
+ Uma chave de API do AI Studio é a opção com suporte do Google — e a segura. O login com conta
166
+ do Google (Antigravity) é diferente: os [termos do Antigravity](https://antigravity.google/terms)
167
+ do Google (seção 6) e o [FAQ do Gemini CLI](https://geminicli.com/docs/resources/faq/)
168
+ classificam como violação o uso dessas credenciais a partir de outro programa. Em fevereiro
169
+ de 2026, o Google suspendeu contas usadas dessa forma — a suspensão também cortou o acesso
170
+ ao Gemini CLI e ao Code Assist — e [afirmou](https://github.com/google-gemini/gemini-cli/discussions/20632)
171
+ que uma segunda violação resulta em suspensão permanente. O ClaudeRipple oferece esse login
172
+ porque outras ferramentas oferecem e porque houve pedidos, mostra este aviso antes de
173
+ começar e não faz nada para esconder o tráfego. Se for usar mesmo assim, use uma conta
174
+ secundária.
175
+
176
+ ### Posso usar várias contas do ChatGPT?
177
+
178
+ Sim. Cada `clauderipple login` (ou **+ Adicionar conta do ChatGPT** no painel) adiciona uma.
179
+ Quando uma conta atinge o limite de uso, a mesma requisição passa para a próxima conta, e a
180
+ conta esgotada fica em espera até sua janela de uso reiniciar; uma conversa fica na conta que respondeu, para
181
+ manter o cache de prompt. Isso vale para a aba Code do Claude Desktop, para o Claude Code e
182
+ para o GPT no app e na CLI do Codex.
183
+
184
+ ### Posso usar o Claude dentro do Codex?
185
+
186
+ Sim. `clauderipple codex on` adiciona o ClaudeRipple como provedor, e os modelos Claude
187
+ aparecem com os próprios nomes na lista de modelos do app e da CLI do Codex. Eles respondem
188
+ pelo seu login do Claude Code ou por uma chave de API da Anthropic. Veja
189
+ [App Codex e Codex CLI](#app-codex-e-codex-cli).
190
+
191
+ ### Ele gera imagens?
192
+
193
+ Sim, com uma assinatura do ChatGPT e sem chave de API:
194
+ `clauderipple image "a red paper boat" -o boat.png --aspect square`. `--ref FILE` adiciona
195
+ uma imagem de referência, e `--transparent`, um fundo transparente. Cada imagem leva cerca
196
+ de 30 segundos, e a assinatura escolhe a resolução e a qualidade. Os subagentes que o
197
+ ClaudeRipple gera recebem essa mesma chamada nas instruções, então também conseguem criar
198
+ imagens. Veja [Claude Code](#claude-code-terminal-remote-control-subagentes).
199
+
200
+ ### O GPT se sai pior dentro do Claude Code?
201
+
202
+ O prompt de sistema e as descrições de ferramentas do Claude Code foram escritos para o
203
+ Claude; outro modelo, portanto, lê instruções ajustadas para um modelo diferente e pode se
204
+ comportar um pouco diferente do que no próprio cliente. O ClaudeRipple informa a cada modelo
205
+ o próprio nome e esforço, adapta os schemas de ferramentas que um fornecedor rejeitaria e
206
+ permite acrescentar instruções por provedor. Uma configuração comum é usar o Claude como
207
+ modelo principal, com GPT ou DeepSeek como subagentes.
208
+
209
+ ### Qual a diferença para o CC Switch, o opencodex ou o claude-code-router?
210
+
211
+ Veja a [tabela comparativa](#uma-ferramenta-em-vez-de-quatro). Resumindo: o ClaudeRipple
212
+ chega à aba Code do Claude **Desktop** enquanto o app continua logado no Claude, e mostra
213
+ outros modelos no seletor com os nomes reais. O CC Switch também chega ao app desktop, mas
214
+ ativando o modo gateway (3P) dele.
215
+
216
+ ### É gratuito?
217
+
218
+ Sim. O ClaudeRipple é open source, sob a GPL-3.0. Você paga só pelas assinaturas ou chaves
219
+ de API que já usa.
220
+
221
+ ## Uma ferramenta em vez de quatro
222
+
223
+ Ferramentas parecidas permitem que a CLI do Claude Code ou o Codex CLI usem outros modelos,
224
+ mas ou não alcançam o **app desktop** do Claude, ou só o alcançam pelo modo gateway (3P)
225
+ dele, e, no momento em que você troca de modelo, perde o lado da assinatura do Claude (chat
226
+ do claude.ai, Remote Control, sessões na nuvem). O ClaudeRipple cobre o app desktop, o
227
+ terminal e o Codex a partir de um único app na barra de menus, roda as duas assinaturas lado
228
+ a lado e mantém intacto o harness do Claude Code: suas skills, hooks, servidores MCP,
229
+ `CLAUDE.md`, subagentes e conectores do claude.ai continuam funcionando enquanto outro
230
+ modelo faz o raciocínio.
231
+
232
+ | | ClaudeRipple | CC Switch (verificado em 2026-09-24) | opencodex / openclaude (verificado em 2026-09-16) | claude-code-router | Modo gateway (3P) do Claude Desktop |
233
+ |---|---|---|---|---|---|
234
+ | Aba Code do Claude **Desktop** **sem** o modo gateway (3P) | ✅ | ❌ ² | ❌ ¹ | ❌ | ❌ por definição |
235
+ | Mantém chat do claude.ai, Remote Control, sessões na nuvem e conectores | ✅ | ❌ | ❌ | ❌ | ❌ |
236
+ | Assinaturas do Claude e do GPT lado a lado | ✅ | ❌ um provedor por vez | ❌ tudo ou nada | ❌ | ❌ |
237
+ | Nomes reais dos modelos no seletor do Desktop | ✅ | ❌ nomes de função `claude-*` ² | ❌ | ❌ | parcial |
238
+ | Várias contas do ChatGPT, trocando quando uma se esgota (Desktop e Codex) | ✅ | ❌ troca manual ³ | ✅ | ❌ | ❌ |
239
+ | CLI `claude` no terminal | ✅ | ✅ | ✅ | ✅ | ✅ |
240
+ | **App** Codex e Codex CLI → Claude | ✅ | ✅ | ✅ | ❌ | ❌ |
241
+ | Cache de prompt em provedores traduzidos | **94–99%** medido | não medido | não medido | varia | não se aplica |
242
+ | Subagentes identificados pelo modelo real no painel de tarefas | ✅ | ❌ | ❌ | ❌ | ❌ |
243
+ | Interface gráfica de configuração, sem precisar de terminal | ✅ | ✅ | ❌ | ❌ | ❌ |
244
+ | App assinado e notarizado, com runtime próprio | ✅ | ✅ | ❌ | ❌ | – |
245
+
246
+ ¹ O README do opencodex mostrava o Claude Desktop em uma demo, mas não publicava passos de
247
+ configuração para ele, nem no repositório nem no site de documentação (verificado em
248
+ 2026-09-16). Na época, o único caminho público para o app desktop era a configuração oficial
249
+ de gateway — a última coluna.
250
+
251
+ ² O CC Switch chega ao Claude Desktop gravando o perfil de terceiros do app
252
+ (`Claude-3p/claude_desktop_config.json`, `"inferenceProvider": "gateway"`), que é a última
253
+ coluna. Pelo gateway local dele, o seletor mostra apenas os nomes de função `claude-sonnet-*`,
254
+ `claude-opus-*` e `claude-haiku-*` ([manual do CC Switch](https://github.com/farion1231/cc-switch/blob/main/docs/user-manual/en/2-providers/2.6-claude-desktop.md)).
255
+ O CC Switch gerencia mais ferramentas do que esta tabela cobre (Gemini CLI, OpenCode e
256
+ outras) e sincroniza servidores MCP e skills entre elas.
257
+
258
+ ³ Cada conta do ChatGPT fica vinculada ao próprio card de provedor, e os cards oficiais do
259
+ ChatGPT ficam fora da fila de failover (notas de versão da v3.20.0).
260
+
261
+ A configuração de "inferência de terceiros" do próprio app desktop joga o app inteiro em
262
+ outro modo: você perde o chat do claude.ai, o Remote Control e as sessões na nuvem.
263
+ Ferramentas que substituem `ANTHROPIC_BASE_URL` nunca chegam ao app desktop, e as que chegam
264
+ gravam essa mesma configuração. O ClaudeRipple, por sua vez, é um
265
+ pequeno proxy HTTPS em que só o processo do Claude Code confia: as requisições dos modelos
266
+ que você mapeia vão para o seu provedor, e todo o resto vai para a Anthropic byte a byte.
267
+
268
+ ## O que você ganha
269
+
270
+ - **Qualquer modelo no Claude Desktop e no Claude Code.** GPT-6 Sol / Luna / Astra e
271
+ GPT-5.6 Terra / Sol / Luna pela sua assinatura ChatGPT Plus/Pro (modelos novos aparecem
272
+ no mesmo dia em que a OpenAI os disponibiliza), Google Gemini, ou DeepSeek, Kimi, GLM,
273
+ MiniMax, Qwen, Grok, Mistral, Groq, Together, Fireworks, OpenRouter (mais de 400 modelos)
274
+ e Ollama / LM Studio locais. Com os nomes reais no seletor, ou mapeados para um nome do
275
+ Claude.
276
+ - **Claude no app Codex e no Codex CLI.** Um endpoint local compatível com OpenAI que o
277
+ Codex trata como provedor; os modelos Claude aparecem na própria lista de modelos do
278
+ Codex. Usa seu login atual do Claude Code ou uma chave de API da Anthropic.
279
+ - **Várias contas do Claude sem quebrar o cache de prompt.** Ative o rodízio de contas em um
280
+ provedor Claude nativo, adicione assinaturas pelo painel, e cada conversa fica na conta
281
+ que respondeu. Antes de a resposta começar, uma recusa por cota ou por autenticação passa
282
+ aquele turno para a próxima conta. Esse caminho nativo do Claude Desktop/Code é separado
283
+ da entrada traduzida do Codex, que escolhe um login disponível e não faz rodízio de contas.
284
+ - **Várias contas do ChatGPT.** Cada `clauderipple login` (ou **+ Adicionar conta do ChatGPT**
285
+ no painel) adiciona uma. Quando uma conta atinge o limite, a próxima assume a mesma
286
+ requisição, e a conta esgotada fica em espera até sua janela de uso reiniciar; uma conversa fica na conta que
287
+ respondeu, para manter o cache. Isso cobre a aba Code e os subagentes do Claude Desktop
288
+ **e o GPT no app e na CLI do Codex** — o Codex mantém o próprio login e passa para a
289
+ próxima conta sem precisar sair.
290
+ - **O harness completo do Claude Code, intacto.** Skills, hooks, MCP, `CLAUDE.md`,
291
+ subagentes, plan mode, Remote Control no celular: nada é desligado.
292
+ - **Correto por construção.** Cache de prompt preservado (breakpoints de cache da Anthropic
293
+ e prefixos estáveis da OpenAI), threads do lado do servidor do Claude Code tratadas,
294
+ chamadas de ferramentas e imagens preservadas na ida e na volta, esforço de raciocínio
295
+ limitado ao que cada modelo aceita, campos exclusivos da Anthropic removidos para
296
+ fornecedores compatíveis.
297
+ - **Um log de requisições de verdade.** Quem pediu, qual modelo respondeu, tokens de
298
+ entrada / em cache / de saída, latência e status de cada requisição, com um resumo da
299
+ última hora.
300
+ - **Identificação dos subagentes.** O painel de tarefas em segundo plano mostra
301
+ `Terra·high · Review` em vez de um "Agent" genérico.
302
+ - **A rota, onde você digita.** Um mod do Claude Code coloca uma linha acima do prompt:
303
+ para onde foi sua última requisição, o esforço, o acerto de cache e o tempo. `Log` (ou
304
+ `/ripple-log`) abre o log de requisições em um painel lateral, com cores por provedor e
305
+ por resultado; `×` (ou `/ripple-bar`) oculta a linha. O mesmo mod mantém um worker no
306
+ próprio modelo quando a chamada do Agent indica outro, e lê o marcador
307
+ `[[ripple: name@level]]` dele onde quer que esteja no prompt. Basta um botão na tela
308
+ **Clientes**, ou `clauderipple mod on`.
309
+ - **Imagens pela sua assinatura do ChatGPT.** `clauderipple image "<prompt>"`, com imagens
310
+ de referência e fundos transparentes. Os subagentes recebem instruções de como fazer,
311
+ então um worker GPT ou DeepSeek consegue criar uma imagem e olhar para ela sem uma
312
+ ferramenta de imagem.
313
+ - **Workers enxutos, se você quiser.** Um único botão faz com que os subagentes gerados
314
+ recebam só as ferramentas que um worker usa, em vez de todos os servidores MCP e plugins
315
+ da sessão: a primeira requisição de um worker caiu de 33k para 9k tokens.
316
+ - **Feito para quem não quer saber de terminal.** Presets de provedores com teste de conexão
317
+ em um clique e descoberta de modelos, mapeamento de modelos em menus suspensos, salvamento
318
+ automático, interface em coreano e inglês. Um app de barra de menus que traz o próprio
319
+ runtime e se configura sozinho na primeira execução. Assinado e notarizado.
320
+
321
+ <p align="center">
322
+ <img src="docs/media/mapping.png" width="880" alt="Mapeamento de modelos: qual modelo responde por cada nome do Claude, com esforço de raciocínio por modelo">
323
+ </p>
324
+
325
+ ## Instalação
326
+
327
+ **macOS**
328
+
329
+ ```sh
330
+ curl -fsSL https://raw.githubusercontent.com/PBJ-2/clauderipple/main/scripts/install.sh | sh
331
+ ```
332
+
333
+ **Windows** (PowerShell)
334
+
335
+ ```powershell
336
+ irm https://raw.githubusercontent.com/PBJ-2/clauderipple/main/scripts/install.ps1 | iex
337
+ ```
338
+
339
+ **Linux** (uma sessão desktop com systemd)
340
+
341
+ ```sh
342
+ curl -fsSL https://raw.githubusercontent.com/PBJ-2/clauderipple/main/scripts/install.sh | sh
343
+ ```
344
+
345
+ O roteador roda como um serviço systemd por usuário: `systemctl --user status clauderipple`,
346
+ e `journalctl --user -u clauderipple` para ver o que ele registrou. O modo seletor registra a
347
+ CA local como confiável no banco de dados NSS que o Chromium lê (`~/.pki/nssdb`, só para o
348
+ seu usuário, sem sudo), o que exige o `certutil`: rode `sudo apt install libnss3-tools`
349
+ (Fedora: `sudo dnf install nss-tools`) antes de `clauderipple picker on`.
350
+
351
+ Esses são todos os pré-requisitos. O script usa um Node 24+ que você já tenha e, se não houver
352
+ nenhum, baixa o build oficial para `~/.clauderipple/runtime`, conferindo-o com o checksum
353
+ publicado pelo nodejs.org. Depois, configura o ClaudeRipple: um certificado local, duas
354
+ linhas em `~/.claude/settings.json` e um roteador em segundo plano que inicia junto com o
355
+ computador. Sem direitos de administrador, sem senha.
356
+
357
+ Com o Node já instalado, você pode pular o script:
358
+
359
+ ```sh
360
+ npm install -g clauderipple
361
+ clauderipple install
362
+ ```
363
+
364
+ Depois, abra o painel e adicione um provedor:
365
+
366
+ ```sh
367
+ clauderipple ui
368
+ ```
369
+
370
+ **Provedores** → adicione o ChatGPT ou cole uma chave de API → **Mapeamento de modelos**.
371
+
372
+ **O app da barra de menus / bandeja** é opcional. Ele mostra o estado do roteador e abre o
373
+ painel com um clique:
374
+
375
+ ```sh
376
+ clauderipple tray
377
+ ```
378
+
379
+ Ele roda em Electron, que tem cerca de 270 MB e, por isso, não é instalado por padrão.
380
+ `clauderipple tray --install` baixa o Electron uma única vez; todo o resto funciona sem ele.
381
+
382
+ **Atualização.** A bandeja oferece a nova versão quando houver uma (**Verificar atualizações…**), ou:
383
+
384
+ ```sh
385
+ clauderipple update
386
+ ```
387
+
388
+ A atualização segue o jeito como você instalou — o script de instalação de novo, ou o npm — e
389
+ reinicia o roteador na nova versão. O Electron da bandeja é mantido entre atualizações.
390
+
391
+ Opcional, para ver os nomes reais no seletor do Desktop: **Clientes → Claude Desktop →
392
+ Seletor de modelos → Ativar seletor**; depois, encerre o Claude Desktop e abra-o de novo. Para
393
+ confiar no certificado local só para o seu usuário, o macOS pede sua senha de login e o
394
+ Windows mostra uma caixa de confirmação com a impressão digital do certificado; o Linux o
395
+ adiciona ao seu banco NSS sem perguntar. O ClaudeRipple nunca vê nenhuma senha, e nenhuma
396
+ plataforma exige direitos de administrador.
397
+
398
+ > **Fechar a janela do Claude Desktop não basta.** Ele continua rodando, e a próxima
399
+ > abertura reaproveita esse processo sem ler a nova configuração. Encerre-o de verdade
400
+ > (macOS: ⌘Q; Windows: pelo ícone da bandeja ou pelo Gerenciador de Tarefas; Linux: Ctrl+Q ou
401
+ > o ícone da bandeja, até `pgrep -f claude-desktop` não imprimir nada), senão o seletor
402
+ > simplesmente não muda, sem nenhum aviso.
403
+
404
+ <details>
405
+ <summary>A partir do código-fonte (Node 24)</summary>
406
+
407
+ ```bash
408
+ git clone https://github.com/PBJ-2/clauderipple && cd clauderipple && npm install
409
+ node packages/cli/src/index.ts install # certs, settings.json env, supervisor (launchd / Task Scheduler), end-to-end probe
410
+ node packages/cli/src/index.ts ui # open the local GUI in your browser
411
+ ```
412
+
413
+ `uninstall` desfaz tudo e restaura `~/.claude/settings.json` a partir de um backup.
414
+ Outros comandos: `status`, `start`, `stop`, `restart`, `logs -f`, `login`, `logout`,
415
+ `claude-login`, `claude-logout`, `picker on|off`, `agent-title on|off`, `mod on|off`,
416
+ `codex on|off`, `update`, `image "<prompt>"`.
417
+ </details>
418
+
419
+ ## Clientes
420
+
421
+ ### Claude Desktop
422
+
423
+ Funciona logo após a instalação. Mapeie modelos em **Mapeamento de modelos** (salva
424
+ automaticamente) ou ative o **modo seletor** para ver os modelos dos provedores pelo nome no
425
+ próprio seletor do app. O esforço escolhido no app é repassado; níveis não suportados são
426
+ trocados pelo mais próximo.
427
+
428
+ ### Claude Code (terminal, Remote Control, subagentes)
429
+
430
+ Mesmo roteador, mesmo mapeamento. `/model gpt-5.6-terra` lista os modelos que você adicionou.
431
+ Os subagentes seguem o roteamento; um marcador `[[gpt: sol@xhigh]]` no prompt de um subagente
432
+ substitui o modelo naquela chamada, e o painel de tarefas mostra o nome real do modelo.
433
+
434
+ **Você não precisa montar um harness de agentes para isso.** Aponte o slot de subagente para
435
+ um modelo roteado e todos os subagentes passam a rodar nele — sem arquivo de agente, sem mais
436
+ nada:
437
+
438
+ ```jsonc
439
+ // Settings → CLI models, or "cli": { "models": { … } } in the config
440
+ { "subagent": "gpt-5.6-terra" } // → CLAUDE_CODE_SUBAGENT_MODEL
441
+ ```
442
+
443
+ **Todo modelo que você marca também vira um subagente nomeado.** O roteador grava
444
+ `~/.claude/agents/<name>.md` para cada modelo oferecido por exatamente um provedor
445
+ (`gpt-5.6-terra` → `gpt-5-6-terra`, `deepseek-v4.1-flash` → `deepseek-v4-1-flash`); assim,
446
+ "manda o DeepSeek fazer" não exige nada além de marcar o modelo: a ferramenta Agent o lista,
447
+ `subagent_type: "deepseek-v4-1-flash"` o executa e o painel de tarefas mostra o nome dele.
448
+ Desmarque o modelo e o arquivo dele some. O roteador só mexe nos arquivos que ele mesmo
449
+ gravou (registrados em `generated-agents.json`); um arquivo de agente que você mesmo escreveu
450
+ com o mesmo nome tem prioridade e não é tocado, então um briefing personalizado continua
451
+ sendo só o arquivo de agente do próprio Claude Code, com um `model:` que o roteador conhece:
452
+
453
+ ```markdown
454
+ ---
455
+ name: reviewer
456
+ description: Independent review on GPT-5.6 Sol.
457
+ model: gpt-5.6-sol@medium
458
+ ---
459
+ You are the reviewer for this session. Verify the change yourself and report
460
+ the conclusion only.
461
+ ```
462
+
463
+ O esforço por chamada vai na **primeira linha** do prompt do subagente:
464
+ `[[ripple: gpt-5-6-terra@high]]` — qualquer nome de agente ou id de modelo funciona ali. Um
465
+ marcador em qualquer outro lugar é texto comum e é ignorado (um resumo de compactação que
466
+ cite um marcador não pode redirecionar a sessão). Um modelo que o roteador não sabe para onde
467
+ mandar é recusado pelo nome (`400 ClaudeRipple: no provider declares "…"`), em vez de ser
468
+ repassado para falhar em outro lugar de forma menos clara; os modelos nativos do Claude
469
+ sempre passam direto. Defina `"cli": { "agentFiles": false }` para desligar a geração.
470
+
471
+ Por padrão, um worker gerado herda todas as ferramentas da sessão, então todos os servidores MCP e
472
+ plugins são incluídos em cada requisição de worker. `"cli": {
473
+ "limitWorkerTools": true }` (ou **Ferramentas dos workers** no painel) dá a ele só as
474
+ ferramentas de leitura, edição, execução, busca e skills, o que reduziu a primeira
475
+ requisição de um worker de cerca de 33k para 9k tokens. Um worker assim não tem ferramentas
476
+ de navegador nem de simulador. Um worker que precise delas deve ser definido em um arquivo de agente
477
+ seu, que nunca é tocado.
478
+
479
+ Com um provedor ChatGPT configurado, as imagens vêm da mesma assinatura:
480
+
481
+ ```bash
482
+ clauderipple image "a red paper boat, flat illustration" -o boat.png --aspect square
483
+ ```
484
+
485
+ `--transparent`, `--format png|jpeg|webp` e `--ref FILE` (uma imagem de referência, pode
486
+ ser repetido) são opcionais. Cada imagem leva cerca de 30 segundos. O backend da assinatura
487
+ escolhe a resolução e a qualidade por conta própria, então a proporção é solicitada em palavras
488
+ (`--aspect`). O comando é um cliente de `POST /api/image` na porta de administração, que
489
+ responde com os bytes da imagem. Os workers gerados recebem a forma `curl` dessa chamada,
490
+ então um worker que só tem Bash consegue criar uma imagem e lê-la de volta.
491
+
492
+ O Claude Code executa o `WebSearch` como uma requisição separada a um modelo pequeno. Para
493
+ que uma configuração roteada para o ChatGPT não gaste cota da Anthropic nessa requisição,
494
+ selecione o mesmo provedor ChatGPT como backend de busca em `config.json`:
495
+
496
+ ```jsonc
497
+ { "webSearch": { "provider": "chatgpt", "model": "gpt-5.6-terra" } }
498
+ ```
499
+
500
+ Isso é opcional. Sem a configuração `webSearch`, o caminho de busca atual do Claude Code
501
+ continua o mesmo.
502
+
503
+ ### App Codex e Codex CLI
504
+
505
+ ```bash
506
+ clauderipple codex on # adds a "clauderipple" provider to ~/.codex/config.toml (backup first)
507
+ codex --profile clauderipple -m claude-sonnet-5
508
+ ```
509
+
510
+ `codex on` também aponta o provedor OpenAI embutido do Codex para o ClaudeRipple (`openai_base_url`).
511
+ O Codex mantém o login do ChatGPT; as requisições GPT dele seguem para o ChatGPT sem alteração,
512
+ exceto pela conta, que é escolhida entre as adicionadas ao ClaudeRipple — então, com várias
513
+ adicionadas, o Codex também passa de uma conta esgotada para a próxima. Sem nenhuma adicionada,
514
+ ou com todas no limite, é usado o login do próprio Codex. Um `openai_base_url` que você mesmo
515
+ definiu é deixado como está. `clauderipple codex off` desfaz a alteração.
516
+
517
+ Os modelos Claude aparecem com os próprios nomes na lista de modelos do Codex (o ClaudeRipple
518
+ grava um catálogo de modelos ao lado do catálogo do próprio Codex). O Claude é acessado pelo
519
+ seu login do Claude Code (detectado na sessão do Desktop em execução, no login do terminal ou
520
+ em um login próprio do ClaudeRipple: **Provedores → Claude (Anthropic) → + Adicionar conta do Claude**
521
+ abre o navegador, sem precisar de terminal; equivale a
522
+ `clauderipple claude-login`) ou por uma chave de API da Anthropic. Reutilizar o login de uma
523
+ assinatura está sujeito aos termos da Anthropic. Qualquer provedor compatível com Anthropic
524
+ que você tenha configurado fica disponível da mesma forma.
525
+
526
+ <p align="center">
527
+ <img src="docs/media/add-provider.png" width="880" alt="Adicionar provedor: assinatura do ChatGPT, presets, provedores compatíveis com OpenAI">
528
+ </p>
529
+
530
+ ## Provedores
531
+
532
+ | Provedor | Tipo | Autenticação | Lista de modelos | Observações |
533
+ |---|---|---|---|---|
534
+ | Assinatura do ChatGPT | backend do Codex | vários logins, trocando quando um se esgota (o login do Codex também é reaproveitado) | lida da sua assinatura (GPT-6 Sol, Luna, Astra, GPT-5.6 …) | esforço low…max (Luna: ultra), cache de prompt 94–99% |
535
+ | Google Gemini | API Gemini | chave de API do AI Studio, ou login com conta do Google (Antigravity, veja as Perguntas frequentes) | descoberta automática | traduzido (Messages ⇄ generateContent), thought signatures mantidas entre turnos |
536
+ | OpenRouter | compatível com Anthropic | chave de API | mais de 400, descoberta automática | suporte a esforço por modelo lido da API |
537
+ | DeepSeek, Kimi, Z.ai GLM, MiniMax, Qwen (intl / cn) | compatível com Anthropic | chave de API | preset | conferido com a documentação do fornecedor |
538
+ | xAI Grok, Mistral, Groq, Together, Fireworks | compatível com OpenAI | chave de API | descoberta automática | traduzido (Chat Completions / Responses) |
539
+ | Ollama, LM Studio | compatível com OpenAI, local | nenhuma | descoberta automática | |
540
+ | Anthropic | nativo | login(s) do Claude ou chave de API | modelos Claude | rodízio opcional, com a conversa fixa na conta, para Claude Desktop/Code; o Codex escolhe um login |
541
+ | Qualquer outro | personalizado | à sua escolha | descoberta automática | qualquer endpoint compatível com Anthropic ou OpenAI |
542
+
543
+ As requisições para provedores compatíveis são limpas dos campos exclusivos da Anthropic
544
+ (threads do lado do servidor, ferramentas diferidas, gerenciamento de contexto, vínculos de
545
+ thinking), e o esforço é limitado por modelo, para que os fornecedores não respondam 400 ao
546
+ formato de requisição do Claude Code.
547
+
548
+ ## Como funciona
549
+
550
+ ```
551
+ Claude Desktop / claude CLI ──HTTPS_PROXY──▶ ClaudeRipple ──▶ api.anthropic.com (unchanged)
552
+ │
553
+ mapped model ──────────┼──▶ chatgpt.com/backend-api (Responses ⇄ Messages)
554
+ ├──▶ Anthropic-compatible vendors (+ compat layer)
555
+ ├──▶ OpenAI-compatible vendors (Messages ⇄ Chat/Responses)
556
+ └──▶ Google Gemini (Messages ⇄ generateContent)
557
+ Codex app / CLI ──/v1/responses──▶ ClaudeRipple ingress ──▶ Claude (your login or API key) / vendors
558
+ ```
559
+
560
+ - A CLI do Claude Code lê `HTTPS_PROXY` e `NODE_EXTRA_CA_CERTS` de
561
+ `~/.claude/settings.json` (o caminho de proxy corporativo documentado pela Anthropic). Só
562
+ esse processo confia na CA local do ClaudeRipple; o armazenamento de certificados do sistema operacional não é
563
+ tocado, a menos que você ative o modo seletor.
564
+ - O modo seletor faz o próprio tráfego do app para o claude.ai passar pelo proxy e adiciona
565
+ seus modelos à lista do seletor que o app busca ao iniciar. Para desligar, basta um clique.
566
+ - Ao reiniciar, o roteador espera as chamadas em andamento terminarem; ele se encerra sozinho
567
+ após falhas repetidas no upstream para que o launchd o reinicie, rotaciona os logs e nunca
568
+ descarta uma requisição em silêncio.
569
+
570
+ Detalhes, com as fontes: [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md).
571
+
572
+ ## Privacidade
573
+
574
+ Tudo roda em 127.0.0.1. As chaves de API ficam em `~/.clauderipple/config.json`, e as
575
+ autorizações OAuth do Claude adicionadas, em `~/.clauderipple/claude-accounts.json` (ambos
576
+ com permissão 0600). As APIs de administração e os logs não expõem nem tokens nem ids de
577
+ conta do upstream. Os únicos destinos de rede são os provedores que você configura. Não há
578
+ telemetria.
579
+
580
+ ## Status: alfa
581
+
582
+ Em uso diário pelo autor, mas ainda jovem. Espere algumas arestas:
583
+
584
+ - **O suporte a Windows é novo (2026-09-14).** Instalação, configuração, o roteador, o login,
585
+ o seletor e uma chamada real ao GPT foram verificados em hardware x64; a recuperação após
586
+ falhas, em arm64. A janela ainda usa a barra de título padrão do Windows. Os builds para
587
+ Windows não são assinados; veja a observação em Instalação.
588
+ - **O suporte a Linux é novo (2026-09-24)**, uma contribuição acompanhada de medições no
589
+ Ubuntu 24.04 x64 (instalação, uma requisição da aba Code, reinício no meio do streaming,
590
+ modo seletor, desinstalação). Exige uma sessão de usuário do systemd; outras distribuições
591
+ e arm64 não foram testados.
592
+ - ChatGPT, OpenRouter e Claude no Codex foram verificados com contas reais; os outros presets
593
+ seguem a documentação oficial dos fornecedores.
594
+ - Um modelo adicionado ao seletor fica disponível a partir da sessão seguinte.
595
+ - O Claude Code e o Codex mudam os protocolos com frequência; uma atualização de cliente
596
+ pode quebrar uma tradução até o ClaudeRipple se ajustar. Relatos de bugs e logs são
597
+ bem-vindos.
598
+
599
+ ## Sem afiliação
600
+
601
+ O ClaudeRipple é um projeto open source independente. Não tem afiliação com a Anthropic nem
602
+ com a OpenAI, nem é endossado ou patrocinado por nenhuma delas. Claude e Claude Code são
603
+ marcas comerciais da Anthropic, PBC. ChatGPT e Codex são marcas comerciais da OpenAI.
604
+
605
+ ## Licença
606
+
607
+ Copyright (c) 2026 pbj. GPL-3.0 — veja [LICENSE](LICENSE). Use à vontade; se você distribuir
608
+ uma versão modificada, distribua também o código-fonte dela sob a mesma licença.