Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions desktop/src-tauri/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -374,6 +374,9 @@ pub fn run() {
.inner_size(1100.0, 720.0)
.visible(false)
.user_agent(&window::webview_user_agent())
// Keep dashboard HTML drag/drop (including chat panes) in the webview;
// Tauri's native drop handler intercepts it on Windows.
.disable_drag_drop_handler()
// Cmd on macOS, Ctrl elsewhere, with + / - / 0. WebView2 zooms natively; on
// macOS and Linux Tauri injects a keydown polyfill whose one IPC call is granted
// to the loopback dashboard by `capabilities/dashboard-zoom.json`.
Expand Down
16 changes: 8 additions & 8 deletions docs-site/src/content/docs/fr/guides/claude-code.md
Original file line number Diff line number Diff line change
Expand Up @@ -169,24 +169,24 @@ unknown signifie qu’opencodex ne peut pas déterminer si les réglages pointen

### Mode picker : modèles opencodex dans le sélecteur Code first-party

Le mode picker fait partie du mode first-party. Sur macOS, il est activé par défaut lorsque first-party
Le mode picker fait partie du mode first-party. Sur macOS et Windows, il est activé par défaut lorsque first-party
est sélectionné, sauf si `claudeCode.intercept.picker: false` est défini. Il modifie le sélecteur de
modèles de l'onglet Code de Desktop first-party pour y afficher les modèles opencodex disponibles par
leur nom. Lors de la première activation, macOS peut demander l'autorisation d'une autorité de certification
locale dans le trousseau de connexion. Cette autorité est limitée à `claude.ai` et à ses sous-domaines.
locale dans le trousseau de connexion, et Windows dans le magasin racine de l'utilisateur actuel. Cette autorité est limitée à `claude.ai` et à ses sous-domaines.
Son identité de signature exportable est protégée par le magasin d'identifiants du système et réutilisée
lors des redémarrages ordinaires. Aucune clé de signature picker en clair n'est enregistrée dans le
répertoire de configuration OpenCodex. La validation complète de l'autorité contrainte et la vérification
de la confiance du système restent obligatoires. Avec la même identité approuvée et un magasin accessible,
un redémarrage n'ajoute ni ne supprime de réglages de confiance des certificats. La restauration au démarrage
n'installe jamais la confiance : si elle manque, est révoquée ou inconnue, le picker reste en attente.
Exécutez explicitement `ocx claude desktop picker on` ou `ocx claude desktop picker trust` pour l'accorder.
de la confiance du système restent obligatoires, avec sur Windows la correspondance exacte de l'empreinte et une feuille vérifiée. Avec la même identité approuvée et un magasin accessible,
un redémarrage n'ajoute ni ne supprime de réglages de confiance des certificats macOS. La restauration au démarrage
ou la vérification d'état n'installe jamais la confiance : si elle manque, est révoquée ou inconnue, le picker reste en attente.
Exécutez explicitement `ocx claude desktop picker on` ou `ocx claude desktop picker trust` pour l'accorder, y compris la confirmation Windows si nécessaire.

Une migration unique depuis une ancienne identité peut demander votre consentement pour supprimer sa
confiance. Si ce nettoyage échoue, le picker reste indisponible et le profil appliqué utilise un relais
sans déchiffrement jusqu'à sa réussite. macOS peut aussi demander de déverrouiller le trousseau ou
d'autoriser l'accès d'une application aux identifiants, y compris après un redémarrage ou une mise à jour.
Le picker reste non pris en charge sous Windows et Linux : aucun travail de CA, de magasin d'identifiants
d'autoriser l'accès d'une application aux identifiants, y compris après un redémarrage ou une mise à jour. Sur Windows, `on` ou `trust` explicite peut afficher une confirmation d'ajout de la racine.
Le picker reste non pris en charge sous Linux : aucun travail de CA, de magasin d'identifiants
ou de proxy picker n'y démarre. L'interception Claude principale reste disponible ; ses fichiers CA locaux
sont protégés par des vérifications du propriétaire, des liens symboliques, des permissions et des ACL Windows.

Expand Down
2 changes: 1 addition & 1 deletion docs-site/src/content/docs/fr/guides/combos.md
Original file line number Diff line number Diff line change
Expand Up @@ -277,7 +277,7 @@ flux de travail des tâches.
### Tableau de bord

Ouvrez le tableau de bord local et choisissez **Modèles → Combos**. L'espace de travail crée, modifie, renomme et supprime
combos, et son sélecteur de cible exclut les modèles désactivés et les combos imbriqués.
les combos. Les sélecteurs de modèles incluent les modèles masqués : la visibilité ne concerne que les listes externes, pas la sélection interne des combos. Sélectionner un modèle masqué ne le rend pas visible. Le sélecteur de cible exclut toujours les fournisseurs désactivés, les combos imbriqués et les fournisseurs JEV réservés au service de décision.

Chaque cible affiche aussi un badge de quota en direct : **Disponible**, **Quota épuisé** ou **Quota inconnu**.
L’éditeur bloque Enregistrer et Créer pour une raison de quota uniquement lorsque chaque cible utilisable dispose d’une confirmation serveur encore valide indiquant que la limite d’inférence liée à ses identifiants configurés est épuisée. Les quotas de compte, de modèle, de recherche et de MCP fournis uniquement à titre d’affichage, ainsi que les informations de routage absentes ou expirées, ne déclenchent pas ce blocage. Le blocage expire à la réinitialisation applicable ou à l’expiration de la validité des données et fait l’objet d’une nouvelle vérification lorsque la page devient active ou visible ; Actualiser recharge à la fois les données des combos et les quotas.
Expand Down
21 changes: 12 additions & 9 deletions docs-site/src/content/docs/guides/claude-code.md
Original file line number Diff line number Diff line change
Expand Up @@ -315,10 +315,13 @@ entries, is kept.
Claude Desktop first-party routes its Code tab and subagents through OpenCodex. The standalone Claude Code CLI has a separate first-party switch. Both clients read the same `~/.claude/settings.json` proxy and CA settings: if only one switch is on, the other client still transits the local proxy, where TLS terminates, but its Messages requests relay to Anthropic unchanged. Other Anthropic paths relay unchanged and unrelated hosts remain blind tunnels. With the CLI switch on, the standalone `claude` also lists routed models in `/model`; see [Model picker in the CLI](#model-picker-in-the-cli).

:::note[Windows system proxy (Clash, v2rayN, corporate proxies)]
When a Windows system proxy is on, Claude Desktop hands it to the Code tab as `HTTPS_PROXY`, and
For picker-off installs or pending installs with no applied picker profile, a Windows system proxy
is handed to the Code tab as `HTTPS_PROXY`, and
that value takes precedence over the OpenCodex proxy in `~/.claude/settings.json`. The Code tab
then goes around OpenCodex and routed models fail there, while the standalone CLI keeps working.
Add `api.anthropic.com` to your proxy client's system-proxy bypass list (in Clash Verge,
An applied selected picker profile uses Desktop's fixed egress proxy while it is available, even when
missing trust leaves the picker pending and `claude.ai` relays blindly. System-proxy bypass advice
applies when there is no selected available picker profile. Add `api.anthropic.com` to your proxy client's system-proxy bypass list (in Clash Verge,
`system_proxy_bypass`), then fully quit and reopen Claude Desktop. `ocx doctor` reports this
under "Claude Desktop first-party vs Windows system proxy". It cannot evaluate a PAC script or
automatic proxy detection (WPAD, "Automatically detect settings"), so it reports those as unknown;
Expand Down Expand Up @@ -349,27 +352,27 @@ hub, so `ocx claude desktop apply` there uses the gateway profile.

### Picker mode: opencodex models in the first-party Code-tab picker

Picker mode is part of first-party mode. On macOS it is on by default when first-party is selected,
Picker mode is part of first-party mode. On macOS and Windows it is on by default when first-party is selected,
unless `claudeCode.intercept.picker: false` is set. It changes the first-party Desktop Code-tab picker
so it lists available opencodex models by name. The first time it is enabled, macOS may ask you to
trust a local certificate authority in the login keychain. That authority is constrained to `claude.ai`
trust a local certificate authority in the login keychain, and Windows may ask you to trust it in the current-user Root store. That authority is constrained to `claude.ai`
and its subdomains. OpenCodex protects its exportable signing identity in the OS credential store
and reuses the same validated certificate and key across normal restarts. No plaintext picker signing
key is stored in the OpenCodex config directory. The full constrained CA validation and OS trust
verification still apply. With the same approved identity and an available credential store, restarting
OpenCodex does not add or remove Certificate Trust Settings. Startup restore never installs trust:
verification still apply, including the exact fingerprint with a verified leaf on Windows. With the same approved identity and an available credential store, restarting
OpenCodex does not add or remove macOS Certificate Trust Settings. Restart and status never install trust:
if trust is missing, revoked or unknown, the picker stays pending. Run `ocx claude desktop picker on`
or `ocx claude desktop picker trust` explicitly to grant trust.
or `ocx claude desktop picker trust` explicitly to grant trust, including the Windows confirmation when needed.
Startup also attempts to remove a legacy on-disk picker signing key before checking whether
interception is enabled. Cleanup is best-effort and does not enable interception or block startup.

One-time migration from an older picker identity may require consent to remove its previous trust.
If cleanup cannot finish, the picker stays unavailable and the applied profile uses a blind relay
until cleanup succeeds; `ocx claude desktop picker status` reports that state. macOS may separately
ask you to unlock the keychain or approve an application's access to stored credentials. These native
access prompts can still occur on restart or upgrade.
access prompts can still occur on restart or upgrade. On Windows, explicit `on` or `trust` may show a confirmation to add the root.

Picker mode remains unsupported on Windows and Linux: OpenCodex starts no picker CA, credential-store
Picker mode remains unsupported on Linux: OpenCodex starts no picker CA, credential-store
or proxy work there. The main Claude intercept remains available with ownership, symlink, file-permission
and Windows ACL checks protecting its local CA files.

Expand Down
5 changes: 3 additions & 2 deletions docs-site/src/content/docs/guides/combos.md
Original file line number Diff line number Diff line change
Expand Up @@ -769,8 +769,9 @@ task workflow.
### Dashboard

Open the local dashboard and choose **Models → Combos**. The workspace creates, edits, renames, and removes
combos, and its target picker excludes disabled models, nested combos, and the credential-only JEV
provider. **Create JEV Auto** opens the same Combo editor with an editable decision target template;
combos. Its model selectors include hidden models: catalog visibility only controls external model
lists, not internal Combo selection, and selecting a hidden model does not make it visible externally.
The target picker still excludes disabled providers, nested combos, and the credential-only JEV provider. **Create JEV Auto** opens the same Combo editor with an editable decision target template;
an existing `jev-auto` id or alias is reported instead of creating a duplicate. A JEV Combo also shows
**Decision service** (TypeSafe JEV or a configured `jev-decision` provider) and **Decision timeout
(ms)**, and the Combos overview lists each JEV Combo's decision service, endpoint, and timeout.
Expand Down
35 changes: 33 additions & 2 deletions docs-site/src/content/docs/guides/integrations.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
---
title: Integrations
description: Connect opencodex to OpenCode, Pi, OMP, Hermes, OpenClaw, Kimi Code, gjc, DeepSeek Harness, MiniMax Code, ZCode, Prime Agent, Aside, Raycast, omo, Cline CLI, Kilo, Command Code and Factory Droid from the dashboard — one switch per client, with a backup taken before every write.
description: Connect opencodex to OpenCode, Pi, Gentle Shell, OMP, Hermes, OpenClaw, Kimi Code, gjc, DeepSeek Harness, MiniMax Code, ZCode, Prime Agent, Aside, Raycast, omo, Cline CLI, Kilo, Command Code and Factory Droid from the dashboard — one switch per client, with a backup taken before every write.
---

The **Connect** page writes opencodex's provider block into a client's own config
file, and removes it again. Nineteen clients work this way, each with a switch:
file, and removes it again. Twenty clients work this way, each with a switch:

| Client | Config file | Format | When the change takes effect | Credential |
|---|---|---|---|---|
| OpenCode | `~/.config/opencode/opencode.json` | JSON | next direct launch | `OPENCODEX_OPENCODE_API_KEY` |
| Pi | `~/.pi/agent/models.json` | JSON | new sessions | loopback placeholder |
| Gentle Shell | `~/.gentle-shell/agent/models.json` (persistent selected home) | JSON | after restarting Gentle Shell | loopback placeholder |
| OMP | `~/.omp/agent/models.yml` | YAML | after restarting OMP | `opencodex-loopback` placeholder |
| Hermes | `~/.hermes/config.yaml` | YAML | new sessions | `OPENCODEX_HERMES_API_KEY` |
| OpenClaw | `~/.openclaw/openclaw.json` | JSON5 | immediately, on a running gateway | `OPENCODEX_OPENCLAW_API_KEY` |
Expand All @@ -28,6 +29,36 @@ file, and removes it again. Nineteen clients work this way, each with a switch:
| Command Code | `~/.commandcode/providers.json` (on Windows with the default home: use `HOME ?? USERPROFILE` only if nonblank and Windows-absolute, otherwise `homedir()`; a separately supplied home is preserved; append `.commandcode\providers.json`) | JSON | next launch of Command Code | none — keyless loopback (`apiKey: false`) |
| Factory Droid | `~/.factory/settings.json` (`%USERPROFILE%\.factory\settings.json` on Windows) | JSON | immediately via file watching | none — keyless loopback |

## Gentle Shell

Choose **Connect → Gentle Shell**, or use the same managed-integration commands:

```bash
ocx export --client gentle-shell --json
ocx integration client enable --client gentle-shell
ocx integration client disable --client gentle-shell
```

Gentle Shell has a separate destination and rollback history from Pi. Only
`providers.opencodex` is managed; other providers and preferences stay intact.
Catalog changes refresh an already connected, unchanged block. An existing manually
copied block is a conflict, not permission to overwrite it: inspect the preview and
use the explicit overwrite confirmation only if you intend to replace it.

The saved `home` in `~/.gentle-shell/config.json` selects the destination. A saved
custom path wins; isolated/default mode uses `GENTLE_SHELL_HOME` or
`~/.gentle-shell/agent`. `GENTLE_SHELL_CONFIG` selects an alternate launcher config.
These environment variables must be set on the **OpenCodex process**, not just in a
later shell. Selectors must be absolute paths; literal `~` and relative paths refuse.
One-off `gentle-shell --home` flags cannot be discovered by a background proxy.

Link mode or a home aliasing Pi refuses with a Pi-integration remedy; use **Connect → Pi**
for that shared file instead. OpenCodex does not change launcher preferences. An
unreadable/unsafe launcher config refuses; malformed JSON falls back to isolated,
matching the launcher. If you move a connected home, disable it using its original
selectors before reconnecting the new one. Restart Gentle Shell after a catalog update.
This integration retains Pi’s loopback-only export policy and stores no real API key.

"omo" names three products that share the `~/.omo` folder. The **omo** tab manages Pi-based omo
(the senpi engine) through `~/.omo/agent/models.json`, as in the table above. Codex-based omo
(LazyCodex) gets its own section on the same tab, shown only when LazyCodex is detected, described in
Expand Down
23 changes: 23 additions & 0 deletions docs-site/src/content/docs/guides/remote-workspace.md
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,29 @@ Prompt submission acknowledges acceptance immediately; the dashboard polls the s
cancels an active Executor command, and prevents a late response from reopening the stopped
session.

## Work with sessions side by side

The session list on the left opens a session in the focused pane. Drag a session to the left,
right, top, or bottom edge of another pane to split the conversation area. You can show up to
four different sessions at once. An already visible session moves between panes instead of
opening a duplicate composer.

Use **Split right** or **Split below** next to a session for the keyboard-accessible alternative.
Drag a divider to resize the panes, or focus the divider and use its arrow keys. **Home** and
**End** set the divider to its minimum and maximum size. Each session
keeps its own draft, submission state, and Stop action, so a pending turn in one pane does not
block a different session. **Close pane** changes the layout only; it does not stop the session.

The pane layout is restored for this Hub in the same browser. Only session identifiers and pane
positions and divider sizes are saved; draft text and model output are not written to browser storage. Reloading
the page clears unsent drafts. On screens up to 760px wide, panes stack vertically without
resize dividers; the saved split positions and sizes return when the screen is wider.

This view is shared by the browser dashboard and the OpenCodex desktop dashboard. CLI users
can open the dashboard with `ocx gui` and select **Remote Workspace** after its normal Hub setup.
It does not change the terminal interface of `codex` or the conversation layout inside the
separate official ChatGPT/Codex desktop app.

## Restart and reconnect behavior

The Hub persists bounded session metadata and a small recent event snapshot. After a Hub restart,
Expand Down
Loading
Loading