-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
432 lines (403 loc) · 28.5 KB
/
Copy pathindex.html
File metadata and controls
432 lines (403 loc) · 28.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<script>document.documentElement.classList.add('js');</script>
<title>CCBUD 1.3.1 — Claude Code & Codex plugin gateway</title>
<meta name="description" content="CCBUD 1.3.1 adds local sidecar plugins that let Claude Code and Codex reuse third-party coding-agent CLI logins. Grok/xAI is the first reference plugin.">
<meta name="theme-color" content="#f5f5f7" media="(prefers-color-scheme: light)">
<meta name="theme-color" content="#090a0d" media="(prefers-color-scheme: dark)">
<meta property="og:title" content="CCBUD 1.3.1 — A plugin gateway for coding CLIs">
<meta property="og:description" content="Run Claude Code and Codex on models from other coding agents through local, health-checked sidecar plugins.">
<meta property="og:type" content="website">
<meta property="og:url" content="https://ccbud.github.io/">
<meta property="og:image" content="https://ccbud.github.io/img/plugin-library.jpg">
<meta name="twitter:card" content="summary_large_image">
<link rel="icon" type="image/png" href="img/icon-96.png">
<link rel="apple-touch-icon" href="img/icon-180.png">
<link rel="preload" as="image" href="img/plugin-library.jpg" fetchpriority="high">
<link rel="stylesheet" href="site.css">
</head>
<body>
<a class="skip-link" href="#main" data-i18n="a11y.skip">Skip to content</a>
<nav class="nav" id="siteNav" aria-label="Primary navigation">
<div class="wrap nav-inner">
<a class="brand pressable" href="#top" aria-label="CCBUD home">
<img src="img/icon-96.png" width="40" height="40" alt="">
<span>
<strong>CCBUD</strong>
<small data-i18n="brand.sub">Coding CLI Buddy</small>
</span>
</a>
<div class="nav-links">
<a href="#plugins" data-i18n="nav.plugins">Plugins</a>
<a href="#proof" data-i18n="nav.proof">Test captures</a>
<a href="#build" data-i18n="nav.build">Build a plugin</a>
<a href="#download" data-i18n="nav.download">Download</a>
</div>
<div class="nav-actions">
<div class="lang" id="lang">
<button class="lang-button pressable" id="langBtn" type="button" aria-haspopup="menu" aria-expanded="false" aria-controls="langMenu">
<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M12 21a9 9 0 1 0 0-18 9 9 0 0 0 0 18Zm0 0c2.2-2.4 3.3-5.4 3.3-9S14.2 5.4 12 3m0 18c-2.2-2.4-3.3-5.4-3.3-9S9.8 5.4 12 3M3.5 9h17m-17 6h17"/></svg>
<span id="langCur">English</span>
<svg class="chevron" viewBox="0 0 16 16" aria-hidden="true"><path d="m4 6 4 4 4-4"/></svg>
</button>
<div class="lang-menu" id="langMenu" role="menu" hidden></div>
</div>
<a class="button button-primary nav-download pressable" href="https://github.com/ccbud/ccbud/releases/tag/v1.3.1" target="_blank" rel="noopener">
<span data-i18n="nav.get">Get v1.3.1</span>
<svg viewBox="0 0 20 20" aria-hidden="true"><path d="M10 3v9m0 0 3.5-3.5M10 12 6.5 8.5M4 15.5h12"/></svg>
</a>
<button class="menu-button pressable" id="menuBtn" type="button" aria-expanded="false" aria-controls="mobileMenu" aria-label="Open navigation">
<span></span><span></span>
</button>
</div>
</div>
<div class="mobile-menu wrap" id="mobileMenu" hidden>
<a href="#plugins" data-i18n="nav.plugins">Plugins</a>
<a href="#proof" data-i18n="nav.proof">Test captures</a>
<a href="#build" data-i18n="nav.build">Build a plugin</a>
<a href="#download" data-i18n="nav.download">Download</a>
<a class="mobile-release" href="https://github.com/ccbud/ccbud/releases/tag/v1.3.1" target="_blank" rel="noopener" data-i18n="nav.get">Get v1.3.1</a>
</div>
</nav>
<main id="main">
<header class="hero" id="top">
<div class="hero-ambient" aria-hidden="true">
<i></i><i></i><i></i>
</div>
<div class="wrap hero-inner">
<div class="hero-copy reveal">
<a class="release-pill pressable" href="https://github.com/ccbud/ccbud/pull/27" target="_blank" rel="noopener">
<span class="pulse-dot"></span>
<span data-i18n="hero.badge">New in v1.3.1 · Plugin system</span>
<svg viewBox="0 0 20 20" aria-hidden="true"><path d="M7 4.5 12.5 10 7 15.5"/></svg>
</a>
<h1 data-i18n="hero.title">Run Claude Code and Codex on models from other coding agents.</h1>
<p class="hero-lede" data-i18n="hero.sub">CCBUD now hosts local sidecar plugins. A plugin can reuse a coding agent’s existing CLI login, speak a standard protocol, and appear as an ordinary service. The Grok reference plugin needs an eligible Grok subscription but no separate API key or per-token API billing; xAI limits and terms still apply.</p>
<div class="hero-actions">
<a class="button button-primary button-large pressable" href="https://github.com/ccbud/ccbud/releases/tag/v1.3.1" target="_blank" rel="noopener">
<span data-i18n="hero.primary">Download v1.3.1</span>
<svg viewBox="0 0 20 20" aria-hidden="true"><path d="M10 3v9m0 0 3.5-3.5M10 12 6.5 8.5M4 15.5h12"/></svg>
</a>
<a class="button button-secondary button-large pressable" href="https://github.com/ccbud/ccbud/pull/27" target="_blank" rel="noopener">
<span data-i18n="hero.secondary">Explore PR #27</span>
<svg viewBox="0 0 20 20" aria-hidden="true"><path d="M7 4.5 12.5 10 7 15.5"/></svg>
</a>
</div>
<div class="trust-row">
<span><svg viewBox="0 0 20 20" aria-hidden="true"><path d="M10 2.5 16 5v4.3c0 3.8-2.5 6.7-6 8.2-3.5-1.5-6-4.4-6-8.2V5l6-2.5Z"/><path d="m7.3 10 1.7 1.7 3.8-4"/></svg><span data-i18n="hero.trust.local">Local gateway</span></span>
<span><svg viewBox="0 0 20 20" aria-hidden="true"><path d="M5 15.5h10M6.5 12V8.5a3.5 3.5 0 0 1 7 0V12M4.5 12h11v5h-11z"/></svg><span data-i18n="hero.trust.open">Open source</span></span>
<span><svg viewBox="0 0 20 20" aria-hidden="true"><path d="M4 4.5h12v9H4zM7 16h6M10 13.5V16"/></svg><span data-i18n="hero.trust.platforms">macOS · Windows · Linux</span></span>
</div>
</div>
<figure class="hero-visual reveal">
<div class="hero-shot">
<img src="img/plugin-library.jpg" width="2000" height="1317" alt="CCBUD Plugins panel with the Grok Build sidecar plugin installed" data-i18n-alt="hero.image.alt" fetchpriority="high" decoding="async">
</div>
<div class="floating-note note-auth">
<span class="note-icon"><svg viewBox="0 0 20 20" aria-hidden="true"><path d="M6.5 9V6.5a3.5 3.5 0 0 1 7 0V9M5 9h10v7.5H5z"/></svg></span>
<span><b data-i18n="hero.note.auth.title">Reuse login</b><small data-i18n="hero.note.auth.sub">CCBUD receives status, not tokens</small></span>
</div>
<div class="floating-note note-health">
<span class="status-light"></span>
<span><b data-i18n="hero.note.health.title">Health-gated</b><small data-i18n="hero.note.health.sub">Sidecar /healthz passed</small></span>
</div>
<div class="floating-note note-family">
<span class="note-icon"><svg viewBox="0 0 20 20" aria-hidden="true"><path d="M4 6.5h5V4m7 9.5h-5V16M8.8 5.2 6.2 7.8a3 3 0 0 0 0 4.2l1.2 1.2m3.8 1.6 2.6-2.6a3 3 0 0 0 0-4.2l-1.2-1.2"/></svg></span>
<span><b data-i18n="hero.note.family.title">Two families</b><small data-i18n="hero.note.family.sub">Claude + Codex routing</small></span>
</div>
<figcaption data-i18n="hero.image.caption">The Plugins panel combines manifest declarations with live control-plane state.</figcaption>
</figure>
</div>
</header>
<div class="signal-strip">
<div class="wrap signal-grid">
<a href="https://github.com/ccbud/ccbud/releases/tag/v1.3.1" target="_blank" rel="noopener"><b>v1.3.1</b><span data-i18n="signal.release">Released July 11, 2026</span></a>
<a href="https://github.com/ccbud/grok-build-plugin" target="_blank" rel="noopener"><b>Grok / xAI</b><span data-i18n="signal.first">First reference plugin</span></a>
<a href="https://github.com/ccbud/ccbud/blob/main/docs/plugin-system.md" target="_blank" rel="noopener"><b>ccbud-plugin/1</b><span data-i18n="signal.contract">Open plugin contract</span></a>
</div>
</div>
<section class="section flow-section" id="plugins">
<div class="wrap">
<div class="section-heading reveal">
<span class="eyebrow" data-i18n="flow.kicker">The one idea</span>
<h2 data-i18n="flow.title">A running plugin is just an ordinary local provider.</h2>
<p data-i18n="flow.sub">CCBUD keeps the host generic. It translates client protocols and manages the process; each plugin handles only its vendor’s login and API shape.</p>
</div>
<div class="route-map reveal" role="group" aria-label="Plugin request flow">
<div class="route-node">
<span class="route-number">01</span>
<small data-i18n="flow.client.label">Clients</small>
<strong>Claude Code<br>Codex</strong>
<em data-i18n="flow.client.sub">Familiar model names</em>
</div>
<div class="route-arrow" aria-hidden="true"><span></span><svg viewBox="0 0 24 24"><path d="m9 5 7 7-7 7"/></svg></div>
<div class="route-node route-node-accent">
<span class="route-number">02</span>
<small data-i18n="flow.gateway.label">CCBUD gateway</small>
<strong data-i18n="flow.gateway.title">Translate & route</strong>
<em>127.0.0.1</em>
</div>
<div class="route-arrow" aria-hidden="true"><span></span><svg viewBox="0 0 24 24"><path d="m9 5 7 7-7 7"/></svg></div>
<div class="route-node">
<span class="route-number">03</span>
<small data-i18n="flow.plugin.label">Sidecar plugin</small>
<strong data-i18n="flow.plugin.title">Standard protocol in</strong>
<em data-i18n="flow.plugin.sub">Vendor details out</em>
</div>
<div class="route-arrow" aria-hidden="true"><span></span><svg viewBox="0 0 24 24"><path d="m9 5 7 7-7 7"/></svg></div>
<div class="route-node">
<span class="route-number">04</span>
<small data-i18n="flow.vendor.label">Vendor</small>
<strong>Grok / xAI</strong>
<em data-i18n="flow.vendor.sub">Existing CLI session</em>
</div>
</div>
<div class="value-grid">
<article class="value-card reveal">
<span class="value-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M8 11V8a4 4 0 0 1 8 0v3M6 11h12v9H6z"/><path d="M12 15v2"/></svg></span>
<h3 data-i18n="flow.value.auth.title">Reuse, don’t re-authenticate.</h3>
<p data-i18n="flow.value.auth.desc">The reference plugin reads the login created by the official Grok CLI. CCBUD receives login metadata, not its access or refresh tokens.</p>
</article>
<article class="value-card reveal">
<span class="value-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M12 3v3m0 12v3M3 12h3m12 0h3M5.6 5.6l2.1 2.1m8.6 8.6 2.1 2.1m0-12.8-2.1 2.1m-8.6 8.6-2.1 2.1"/><circle cx="12" cy="12" r="4"/></svg></span>
<h3 data-i18n="flow.value.lifecycle.title">Lifecycle you can trust.</h3>
<p data-i18n="flow.value.lifecycle.desc">CCBUD selects the platform binary, assigns a free localhost port, waits for health, and auto-starts the active service next launch.</p>
</article>
<article class="value-card reveal">
<span class="value-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M4 7h10m0 0-3-3m3 3-3 3m9 7H10m0 0 3-3m-3 3 3 3"/></svg></span>
<h3 data-i18n="flow.value.family.title">Routing that understands the client.</h3>
<p data-i18n="flow.value.family.desc">Claude and Codex get family-aware model lists and primary/fast tier mapping through the same gateway.</p>
</article>
</div>
</div>
</section>
<section class="section install-section">
<div class="wrap install-grid">
<div class="install-copy reveal">
<span class="eyebrow" data-i18n="install.kicker">From Git to ready</span>
<h2 data-i18n="install.title">Install once. Enable when you need it.</h2>
<p class="section-lede" data-i18n="install.sub">The host owns the repetitive work without hiding it. Building, starting, health-check, stopped, and failed states stay visible and under your control.</p>
<ol class="install-steps">
<li>
<span>1</span>
<div><h3 data-i18n="install.step1.title">Add a source you trust</h3><p data-i18n="install.step1.desc">A Git source is cloned and runs its manifest build command with your user permissions. A local folder installs an already built plugin.</p></div>
</li>
<li>
<span>2</span>
<div><h3 data-i18n="install.step2.title">Pass the sidecar health check</h3><p data-i18n="install.step2.desc">Enable starts the process and routes only after /healthz returns 200. This checks process readiness—not login or vendor availability.</p></div>
</li>
<li>
<span>3</span>
<div><h3 data-i18n="install.step3.title">Install creates the service</h3><p data-i18n="install.step3.desc">Installation adds the service; Enable only starts or stops its sidecar. Status, updates, and declared actions stay in Plugins.</p></div>
</li>
</ol>
<a class="text-link pressable" href="https://github.com/ccbud/ccbud/blob/main/docs/plugin-system.md" target="_blank" rel="noopener">
<span data-i18n="install.docs">Read the plugin system guide</span>
<svg viewBox="0 0 20 20" aria-hidden="true"><path d="M7 4.5 12.5 10 7 15.5"/></svg>
</a>
<p class="grok-caveat" data-i18n="install.caveat">Grok reference plugin: sign in with the official Grok CLI first. The plugin reads and may cache its OAuth tokens; refresh can require signing in again. Your Grok plan, quotas, and xAI terms still apply.</p>
<p class="grok-caveat" data-i18n="install.prereq">Git import needs Git and the plugin’s declared build toolchain; Grok Build currently needs Go and make.</p>
</div>
<figure class="install-visual reveal">
<div class="install-shot">
<img src="img/plugin-install.jpg" width="2000" height="1295" alt="CCBUD Add from Git dialog with the Grok Build repository URL entered" data-i18n-alt="install.image.alt" loading="lazy" decoding="async">
</div>
<figcaption><span class="warning-dot">!</span><span data-i18n="install.image.caption">Git install executes source.build without a sandbox or signature check. “Trusted” identifies an official ccbud source, not an independent security audit.</span></figcaption>
</figure>
</div>
</section>
<section class="section proof-section" id="proof">
<div class="wrap">
<div class="section-heading reveal">
<span class="eyebrow" data-i18n="proof.kicker">Tested end to end</span>
<h2 data-i18n="proof.title">One bridge. Two client families. Gateway hops visible.</h2>
<p data-i18n="proof.sub">PR #27 tested both client families. Below, a Codex → Grok capture is paired with a sanitized Claude-family gateway view.</p>
</div>
<div class="showcase reveal">
<div class="showcase-tabs" role="tablist" aria-label="Plugin demonstrations">
<button class="showcase-tab pressable" id="tab-codex" type="button" role="tab" aria-selected="true" aria-controls="panel-codex" tabindex="0" data-showcase="codex">
<span class="tab-status"></span><span data-i18n="proof.tab.codex">Codex → Grok</span>
</button>
<button class="showcase-tab pressable" id="tab-claude" type="button" role="tab" aria-selected="false" aria-controls="panel-claude" tabindex="-1" data-showcase="claude">
<span class="tab-status"></span><span data-i18n="proof.tab.claude">Claude family</span>
</button>
</div>
<div class="showcase-panels">
<figure class="showcase-panel" id="panel-codex" role="tabpanel" aria-labelledby="tab-codex" data-showcase-panel="codex">
<div class="showcase-image-scroll" tabindex="0" aria-label="Scrollable Codex test capture" data-i18n-aria-label="proof.codex.scroll">
<div class="showcase-image-canvas">
<img src="img/codex-grok.jpg" width="2200" height="1077" alt="Codex Desktop running through the Grok Build plugin while CCBUD monitors requests" data-i18n-alt="proof.codex.alt" loading="lazy" decoding="async">
</div>
</div>
<span class="showcase-swipe-hint" aria-hidden="true">↔</span>
<figcaption>
<span><b data-i18n="proof.codex.title">Codex stays in the client you know.</b><small data-i18n="proof.codex.desc">Text conversations and streaming responses reach Grok through the plugin’s OpenAI Responses endpoint.</small><small class="capability-note" data-i18n="proof.codex.caveat">Current reference-plugin limit: Codex shell and collaboration tools are not forwarded yet.</small></span>
<em data-i18n="proof.source">PR #27 test capture</em>
</figcaption>
</figure>
<figure class="showcase-panel" id="panel-claude" role="tabpanel" aria-labelledby="tab-claude" data-showcase-panel="claude" hidden>
<div class="showcase-image-scroll" tabindex="0" aria-label="Scrollable Claude-family gateway capture" data-i18n-aria-label="proof.claude.scroll">
<div class="showcase-image-canvas showcase-image-sensitive">
<img src="img/monitor.jpg" width="1500" height="1065" alt="CCBUD Monitor showing a Claude-family request routed through the gateway" data-i18n-alt="proof.claude.alt" loading="lazy" decoding="async">
</div>
</div>
<span class="showcase-swipe-hint" aria-hidden="true">↔</span>
<figcaption>
<span><b data-i18n="proof.claude.title">Claude-family requests use the same gateway.</b><small data-i18n="proof.claude.desc">CCBUD already translates Anthropic Messages and stable model aliases; PR #27 lets plugin-backed providers join that route.</small></span>
<em data-i18n="proof.claude.source">Sanitized gateway capture</em>
</figcaption>
</figure>
</div>
</div>
</div>
</section>
<section class="section contract-section" id="build">
<div class="contract-ambient" aria-hidden="true"></div>
<div class="wrap contract-grid">
<div class="contract-copy reveal">
<span class="eyebrow" data-i18n="contract.kicker">An open contract</span>
<h2 data-i18n="contract.title">Plugins describe themselves. CCBUD stays generic.</h2>
<p data-i18n="contract.sub">Drop another compatible plugin into ~/.ccbud/plugins and the host needs no vendor-specific code. The manifest drives models, protocol, lifecycle, icon, updates, and even buttons or forms.</p>
<div class="contract-points">
<div><span>01</span><p><b data-i18n="contract.manifest.title">Manifest</b><small data-i18n="contract.manifest.desc">Identity, binaries, models, protocol, source, and declarative UI.</small></p></div>
<div><span>02</span><p><b data-i18n="contract.control.title">Control plane</b><small data-i18n="contract.control.desc">Health, status, auth state, and plugin-defined actions.</small></p></div>
<div><span>03</span><p><b data-i18n="contract.data.title">Data plane</b><small data-i18n="contract.data.desc">A standard inference endpoint and the plugin’s model catalog.</small></p></div>
</div>
<div class="contract-actions">
<a class="button button-light pressable" href="https://github.com/ccbud/ccbud/blob/main/docs/plugin-system.md" target="_blank" rel="noopener">
<span data-i18n="contract.docs">Read the contract</span>
<svg viewBox="0 0 20 20" aria-hidden="true"><path d="M7 4.5 12.5 10 7 15.5"/></svg>
</a>
<a class="button button-dark-ghost pressable" href="https://github.com/ccbud/grok-build-plugin" target="_blank" rel="noopener" data-i18n="contract.reference">View Grok reference plugin</a>
</div>
</div>
<section class="code-card reveal" aria-label="Example plugin manifest">
<div class="code-top">
<span><i></i><i></i><i></i></span>
<strong>plugin.json</strong>
<em>ccbud-plugin/1</em>
</div>
<pre tabindex="0" aria-label="Scrollable plugin manifest example" data-i18n-aria-label="contract.code.scroll"><code>{
<span class="code-key">"spec"</span>: <span class="code-string">"ccbud-plugin/1"</span>,
<span class="code-key">"id"</span>: <span class="code-string">"grok-build"</span>,
<span class="code-key">"runtime"</span>: {
<span class="code-key">"args"</span>: [<span class="code-string">"serve"</span>, <span class="code-string">"--port"</span>, <span class="code-string">"{port}"</span>]
},
<span class="code-key">"endpoint"</span>: {
<span class="code-key">"protocol"</span>: <span class="code-string">"openai-responses"</span>,
<span class="code-key">"healthPath"</span>: <span class="code-string">"/healthz"</span>
},
<span class="code-key">"modelMapping"</span>: {
<span class="code-key">"primary"</span>: <span class="code-string">"grok-4.5"</span>,
<span class="code-key">"light"</span>: <span class="code-string">"grok-build"</span>
},
<span class="code-key">"ui"</span>: {
<span class="code-key">"actions"</span>: [<span class="code-comment">/* link · call · form */</span>]
}
}</code></pre>
<div class="code-status">
<span><i></i><span data-i18n="contract.code.ready">Health check passed</span></span>
<code>127.0.0.1:{port}</code>
</div>
</section>
</div>
</section>
<section class="section core-section">
<div class="wrap">
<div class="section-heading reveal">
<span class="eyebrow" data-i18n="core.kicker">Beyond plugins</span>
<h2 data-i18n="core.title">Still the control center for your coding CLIs.</h2>
<p data-i18n="core.sub">The new plugin layer sits on top of the routing, monitoring, history, and reversible configuration workflow already built into CCBUD.</p>
</div>
<div class="bento-grid">
<article class="bento-card bento-monitor reveal">
<div>
<span class="bento-label">Monitor</span>
<h3 data-i18n="core.monitor.title">See every gateway hop.</h3>
<p data-i18n="core.monitor.desc">Follow request streams, latency, model rewrites, translated bodies, headers, gateway events, and upstream errors.</p>
</div>
<img src="img/monitor.jpg" width="1500" height="1065" alt="CCBUD Monitor request inspector" data-i18n-alt="core.monitor.alt" loading="lazy" decoding="async">
</article>
<article class="bento-card reveal">
<span class="bento-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M4 7h12m0 0-3-3m3 3-3 3m7 7H8m0 0 3-3m-3 3 3 3"/></svg></span>
<span class="bento-label">Services</span>
<h3 data-i18n="core.routing.title">Switch once. Route the next request.</h3>
<p data-i18n="core.routing.desc">Manage presets and custom endpoints, test connections, map stable aliases, and change the active service without shell edits.</p>
</article>
<article class="bento-card reveal">
<span class="bento-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M5 5h14v11H9l-4 3z"/><path d="M8 9h8m-8 3h5"/></svg></span>
<span class="bento-label">Conversations</span>
<h3 data-i18n="core.history.title">Turn sessions into memory.</h3>
<p data-i18n="core.history.desc">Search Claude Code projects and Codex sessions, inspect tool calls and diffs, then export readable JSONL or HTML.</p>
</article>
<article class="bento-card reveal">
<span class="bento-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M12 3 19 6v5c0 4.4-2.9 7.8-7 9.5C7.9 18.8 5 15.4 5 11V6l7-3Z"/><path d="m9 12 2 2 4-5"/></svg></span>
<span class="bento-label">Local</span>
<h3 data-i18n="core.local.title">Local, visible, reversible.</h3>
<p data-i18n="core.local.desc">The gateway binds to 127.0.0.1, but loopback is not a sandbox. Config edits are reversible; CCBUD and installed plugin code can be audited, while the selected vendor remains external.</p>
</article>
</div>
</div>
</section>
<section class="section download-section" id="download">
<div class="wrap">
<div class="download-card reveal">
<div class="download-glow" aria-hidden="true"></div>
<div class="download-copy">
<span class="release-mark"><i></i><span data-i18n="download.kicker">Available now · v1.3.1</span></span>
<h2 data-i18n="download.title">Give your coding CLIs a bigger model map.</h2>
<p data-i18n="download.sub">Download CCBUD for macOS, Windows, or Linux, then add the Grok reference plugin from Git—or build the next adapter yourself.</p>
<div class="download-actions">
<a class="button button-light button-large pressable" href="https://github.com/ccbud/ccbud/releases/tag/v1.3.1" target="_blank" rel="noopener">
<span data-i18n="download.release">Open v1.3.1 release</span>
<svg viewBox="0 0 20 20" aria-hidden="true"><path d="M10 3v9m0 0 3.5-3.5M10 12 6.5 8.5M4 15.5h12"/></svg>
</a>
<a class="button button-dark-ghost button-large pressable" href="https://github.com/ccbud/ccbud" target="_blank" rel="noopener" data-i18n="download.source">View source</a>
</div>
</div>
<div class="download-side">
<div class="platforms">
<span>macOS<small>Apple silicon · Intel</small></span>
<span>Windows<small>.exe · .msi</small></span>
<span>Linux<small>AppImage · deb · rpm</small></span>
</div>
<div class="install-command">
<span data-i18n="download.brew">Install with Homebrew</span>
<div>
<code id="brewCommand" tabindex="-1">brew install --cask ccbud/tap/ccbud</code>
<button class="copy-button pressable" id="copyCommand" type="button" data-copy-label="Copy command" aria-label="Copy Homebrew command">
<svg viewBox="0 0 20 20" aria-hidden="true"><path d="M7 6V4.5A1.5 1.5 0 0 1 8.5 3h6A1.5 1.5 0 0 1 16 4.5v6a1.5 1.5 0 0 1-1.5 1.5H13"/><rect x="4" y="7" width="9" height="10" rx="1.5"/></svg>
<span data-i18n="download.copy">Copy</span>
</button>
</div>
<p class="copy-status" id="copyStatus" role="status" aria-live="polite"></p>
</div>
</div>
</div>
</div>
</section>
</main>
<footer>
<div class="wrap footer-grid">
<div>
<a class="brand footer-brand" href="#top">
<img src="img/icon-96.png" width="36" height="36" alt="">
<span><strong>CCBUD</strong><small data-i18n="brand.sub">Coding CLI Buddy</small></span>
</a>
<p data-i18n="footer.tagline">A local gateway, plugin host, monitor, and session browser for Claude Code and Codex.</p>
</div>
<div class="footer-links">
<a href="https://github.com/ccbud/ccbud/pull/27" target="_blank" rel="noopener">PR #27</a>
<a href="https://github.com/ccbud/ccbud/blob/main/docs/plugin-system.md" target="_blank" rel="noopener" data-i18n="footer.docs">Plugin docs</a>
<a href="https://github.com/ccbud/ccbud/releases" target="_blank" rel="noopener" data-i18n="footer.releases">Releases</a>
<a href="https://github.com/ccbud/ccbud/issues" target="_blank" rel="noopener" data-i18n="footer.issues">Issues</a>
</div>
<p class="footer-note">GPL-3.0 · <span data-i18n="footer.note">Built in the open.</span> <span data-i18n="footer.affiliation">Third-party names belong to their respective owners; CCBUD is independent.</span></p>
</div>
</footer>
<script src="i18n.js"></script>
</body>
</html>