From cddef1597cbd7f5443bbac0f00986107080c9614 Mon Sep 17 00:00:00 2001 From: Federico <114950442+federicorv25@users.noreply.github.com> Date: Mon, 19 Oct 2026 18:24:20 -0400 Subject: [PATCH 01/14] feat(i18n): add Spanish dashboard and documentation localization --- README.md | 2 +- .../261019_spanish_localization/010_plan.md | 160 + docs-site/astro.config.mjs | 145 +- docs-site/src/components/FrontierBoards.astro | 4 +- docs-site/src/components/Header.astro | 41 +- docs-site/src/components/Landing.astro | 90 +- docs-site/src/components/SiteJsonLd.astro | 5 +- .../src/content/docs/es/benchmarks/coding.mdx | 8 + .../content/docs/es/benchmarks/frontend.mdx | 8 + .../src/content/docs/es/benchmarks/index.mdx | 14 + .../docs/es/benchmarks/intelligence.mdx | 8 + .../content/docs/es/benchmarks/security.mdx | 8 + .../content/docs/es/benchmarks/terminal.mdx | 8 + docs-site/src/content/docs/es/contributing.md | 215 + .../docs/es/contributing/pr-quality.md | 66 + .../docs/es/getting-started/for-agents.md | 100 + .../docs/es/getting-started/how-it-works.mdx | 84 + .../docs/es/getting-started/installation.md | 140 + .../docs/es/getting-started/quickstart.md | 143 + .../content/docs/es/guides/chatgpt-desktop.md | 79 + .../src/content/docs/es/guides/claude-code.md | 780 ++++ .../docs/es/guides/codex-app-models.md | 281 ++ .../docs/es/guides/codex-integration.md | 999 ++++ .../docs/es/guides/codex-log-guard-reclaim.md | 106 + .../content/docs/es/guides/codex-log-guard.md | 157 + .../docs/es/guides/codex-native-context.md | 95 + .../content/docs/es/guides/codex-prompt.md | 199 + .../src/content/docs/es/guides/combos.md | 712 +++ .../es/guides/composer-usage-gate-fallback.md | 151 + .../es/guides/cursor-private-inference.md | 161 + .../src/content/docs/es/guides/desktop-app.md | 172 + .../content/docs/es/guides/factory-droid.md | 163 + .../src/content/docs/es/guides/grok-build.md | 136 + .../content/docs/es/guides/image-bridge.md | 93 + .../content/docs/es/guides/integrations.md | 592 +++ .../content/docs/es/guides/local-plugins.md | 81 + .../content/docs/es/guides/macos-menu-bar.md | 70 + .../src/content/docs/es/guides/minimax.md | 96 + .../content/docs/es/guides/model-ordering.md | 161 + .../content/docs/es/guides/model-routing.md | 107 + .../docs/es/guides/native-main-profiles.md | 51 + .../src/content/docs/es/guides/opencode.md | 180 + docs-site/src/content/docs/es/guides/pi.md | 140 + .../content/docs/es/guides/protocol-paths.md | 136 + .../src/content/docs/es/guides/providers.md | 976 ++++ .../src/content/docs/es/guides/remote-hub.md | 600 +++ .../src/content/docs/es/guides/remote-link.md | 171 + .../docs/es/guides/remote-workspace.md | 193 + .../docs/es/guides/response-inspection.md | 22 + .../docs/es/guides/routing-profile-editor.md | 86 + .../src/content/docs/es/guides/sidecars.md | 173 + .../docs/es/guides/sub-agent-surface.md | 290 ++ .../docs/es/guides/subagent-v1-default.md | 126 + .../content/docs/es/guides/video-bridge.md | 93 + .../content/docs/es/guides/web-dashboard.md | 325 ++ docs-site/src/content/docs/es/index.mdx | 19 + .../src/content/docs/es/reference/adapters.md | 376 ++ .../content/docs/es/reference/architecture.md | 189 + .../src/content/docs/es/reference/cli.md | 257 ++ .../content/docs/es/reference/cli/agents.md | 885 ++++ .../docs/es/reference/cli/lifecycle.md | 697 +++ .../docs/es/reference/cli/messaging.md | 133 + .../es/reference/cli/providers-accounts.md | 862 ++++ .../content/docs/es/reference/code-signing.md | 88 + .../es/reference/codex-retry-diagnostics.md | 75 + .../docs/es/reference/configuration.md | 108 + .../es/reference/configuration/advisor.md | 129 + .../docs/es/reference/configuration/agents.md | 245 + .../es/reference/configuration/providers.md | 1377 ++++++ .../es/reference/configuration/routing.md | 289 ++ .../docs/es/reference/configuration/server.md | 795 ++++ .../es/reference/inbound-body-admission.md | 37 + .../docs/es/reference/management-api.md | 663 +++ .../docs/es/reference/platform-support.md | 72 + .../docs/es/reference/proxy-formats.md | 602 +++ .../troubleshooting/codex-cannot-sign-in.md | 91 + .../troubleshooting/disk-usage-temp-files.md | 95 + .../spend-ledger-synced-folder.md | 52 + .../docs/es/troubleshooting/update-failed.md | 121 + .../docs/es/troubleshooting/windows-memory.md | 77 + docs-site/src/data/frontier-i18n.ts | 108 +- gui/index.html | 3 +- gui/scripts/sync-locale-keys.mjs | 4 +- gui/src/components/QuotaBars.tsx | 2 + .../ProviderCapacityQuota.tsx | 1 + gui/src/i18n/catalogs.ts | 2 + gui/src/i18n/desktop-compatibility-copy.ts | 84 +- gui/src/i18n/es.ts | 4088 +++++++++++++++++ gui/src/i18n/lab-translations.ts | 65 +- gui/src/i18n/log-guard-labels.ts | 27 + gui/src/i18n/log-guard-operation-labels.ts | 12 + gui/src/i18n/log-guard-state-labels.ts | 5 + gui/src/i18n/native-main-translations.ts | 56 +- gui/src/i18n/routing-compatibility-labels.ts | 5 + gui/src/i18n/shared.ts | 4 +- gui/src/i18n/vision-reasoning-labels.ts | 1 + gui/src/status-codes.ts | 22 +- gui/tests/es-localization.test.ts | 135 + gui/tests/i18n-language-switch.test.tsx | 25 + gui/tests/locale-parity.test.ts | 21 +- gui/tests/logs-cost-plain-dollar.test.ts | 1 + gui/tests/subagent-surface-warning.test.tsx | 3 +- readme/README.es.md | 408 ++ readme/README.fr.md | 2 +- readme/README.ja.md | 2 +- readme/README.ko.md | 2 +- readme/README.ru.md | 2 +- readme/README.tr.md | 2 +- readme/README.zh-CN.md | 2 +- readme/README.zh-TW.md | 2 +- readme/i18n-manifest.json | 20 +- scripts/file-size-ratchet.ts | 1 + scripts/test-layout/layout.json | 1 + structure/dashboard-and-usage.md | 7 +- structure/ops/docs-and-release.md | 2 +- .../docs-spanish-localization.test.ts | 103 + tests/ci-workflows/file-size-ratchet.test.ts | 1 + tests/fixtures/file-size-baseline.json | 1 + tests/fixtures/test-layout-expected.json | 1 + 119 files changed, 23612 insertions(+), 157 deletions(-) create mode 100644 devlog/_plan/261019_spanish_localization/010_plan.md create mode 100644 docs-site/src/content/docs/es/benchmarks/coding.mdx create mode 100644 docs-site/src/content/docs/es/benchmarks/frontend.mdx create mode 100644 docs-site/src/content/docs/es/benchmarks/index.mdx create mode 100644 docs-site/src/content/docs/es/benchmarks/intelligence.mdx create mode 100644 docs-site/src/content/docs/es/benchmarks/security.mdx create mode 100644 docs-site/src/content/docs/es/benchmarks/terminal.mdx create mode 100644 docs-site/src/content/docs/es/contributing.md create mode 100644 docs-site/src/content/docs/es/contributing/pr-quality.md create mode 100644 docs-site/src/content/docs/es/getting-started/for-agents.md create mode 100644 docs-site/src/content/docs/es/getting-started/how-it-works.mdx create mode 100644 docs-site/src/content/docs/es/getting-started/installation.md create mode 100644 docs-site/src/content/docs/es/getting-started/quickstart.md create mode 100644 docs-site/src/content/docs/es/guides/chatgpt-desktop.md create mode 100644 docs-site/src/content/docs/es/guides/claude-code.md create mode 100644 docs-site/src/content/docs/es/guides/codex-app-models.md create mode 100644 docs-site/src/content/docs/es/guides/codex-integration.md create mode 100644 docs-site/src/content/docs/es/guides/codex-log-guard-reclaim.md create mode 100644 docs-site/src/content/docs/es/guides/codex-log-guard.md create mode 100644 docs-site/src/content/docs/es/guides/codex-native-context.md create mode 100644 docs-site/src/content/docs/es/guides/codex-prompt.md create mode 100644 docs-site/src/content/docs/es/guides/combos.md create mode 100644 docs-site/src/content/docs/es/guides/composer-usage-gate-fallback.md create mode 100644 docs-site/src/content/docs/es/guides/cursor-private-inference.md create mode 100644 docs-site/src/content/docs/es/guides/desktop-app.md create mode 100644 docs-site/src/content/docs/es/guides/factory-droid.md create mode 100644 docs-site/src/content/docs/es/guides/grok-build.md create mode 100644 docs-site/src/content/docs/es/guides/image-bridge.md create mode 100644 docs-site/src/content/docs/es/guides/integrations.md create mode 100644 docs-site/src/content/docs/es/guides/local-plugins.md create mode 100644 docs-site/src/content/docs/es/guides/macos-menu-bar.md create mode 100644 docs-site/src/content/docs/es/guides/minimax.md create mode 100644 docs-site/src/content/docs/es/guides/model-ordering.md create mode 100644 docs-site/src/content/docs/es/guides/model-routing.md create mode 100644 docs-site/src/content/docs/es/guides/native-main-profiles.md create mode 100644 docs-site/src/content/docs/es/guides/opencode.md create mode 100644 docs-site/src/content/docs/es/guides/pi.md create mode 100644 docs-site/src/content/docs/es/guides/protocol-paths.md create mode 100644 docs-site/src/content/docs/es/guides/providers.md create mode 100644 docs-site/src/content/docs/es/guides/remote-hub.md create mode 100644 docs-site/src/content/docs/es/guides/remote-link.md create mode 100644 docs-site/src/content/docs/es/guides/remote-workspace.md create mode 100644 docs-site/src/content/docs/es/guides/response-inspection.md create mode 100644 docs-site/src/content/docs/es/guides/routing-profile-editor.md create mode 100644 docs-site/src/content/docs/es/guides/sidecars.md create mode 100644 docs-site/src/content/docs/es/guides/sub-agent-surface.md create mode 100644 docs-site/src/content/docs/es/guides/subagent-v1-default.md create mode 100644 docs-site/src/content/docs/es/guides/video-bridge.md create mode 100644 docs-site/src/content/docs/es/guides/web-dashboard.md create mode 100644 docs-site/src/content/docs/es/index.mdx create mode 100644 docs-site/src/content/docs/es/reference/adapters.md create mode 100644 docs-site/src/content/docs/es/reference/architecture.md create mode 100644 docs-site/src/content/docs/es/reference/cli.md create mode 100644 docs-site/src/content/docs/es/reference/cli/agents.md create mode 100644 docs-site/src/content/docs/es/reference/cli/lifecycle.md create mode 100644 docs-site/src/content/docs/es/reference/cli/messaging.md create mode 100644 docs-site/src/content/docs/es/reference/cli/providers-accounts.md create mode 100644 docs-site/src/content/docs/es/reference/code-signing.md create mode 100644 docs-site/src/content/docs/es/reference/codex-retry-diagnostics.md create mode 100644 docs-site/src/content/docs/es/reference/configuration.md create mode 100644 docs-site/src/content/docs/es/reference/configuration/advisor.md create mode 100644 docs-site/src/content/docs/es/reference/configuration/agents.md create mode 100644 docs-site/src/content/docs/es/reference/configuration/providers.md create mode 100644 docs-site/src/content/docs/es/reference/configuration/routing.md create mode 100644 docs-site/src/content/docs/es/reference/configuration/server.md create mode 100644 docs-site/src/content/docs/es/reference/inbound-body-admission.md create mode 100644 docs-site/src/content/docs/es/reference/management-api.md create mode 100644 docs-site/src/content/docs/es/reference/platform-support.md create mode 100644 docs-site/src/content/docs/es/reference/proxy-formats.md create mode 100644 docs-site/src/content/docs/es/troubleshooting/codex-cannot-sign-in.md create mode 100644 docs-site/src/content/docs/es/troubleshooting/disk-usage-temp-files.md create mode 100644 docs-site/src/content/docs/es/troubleshooting/spend-ledger-synced-folder.md create mode 100644 docs-site/src/content/docs/es/troubleshooting/update-failed.md create mode 100644 docs-site/src/content/docs/es/troubleshooting/windows-memory.md create mode 100644 gui/src/i18n/es.ts create mode 100644 gui/tests/es-localization.test.ts create mode 100644 readme/README.es.md create mode 100644 tests/ci-workflows/docs-spanish-localization.test.ts diff --git a/README.md b/README.md index 5fba47f1840..a4b5a57dd6e 100644 --- a/README.md +++ b/README.md @@ -77,7 +77,7 @@ Sol drives the session and calls a Kimi K3 subagent.
- English · Français · 한국어 · 简体中文 · 繁體中文 · Русский · 日本語 · Türkçe · 📖 Full documentation → + English · Français · 한국어 · 简体中文 · 繁體中文 · Русский · 日本語 · Türkçe · Español · 📖 Full documentation →
opencodex is a lightweight local proxy that translates Codex's Responses API into whatever your diff --git a/devlog/_plan/261019_spanish_localization/010_plan.md b/devlog/_plan/261019_spanish_localization/010_plan.md new file mode 100644 index 00000000000..d85f1a11fa7 --- /dev/null +++ b/devlog/_plan/261019_spanish_localization/010_plan.md @@ -0,0 +1,160 @@ +# Spanish localization: preparation and single-PR delivery plan + +## Status and source baseline + +- Preparation and implementation date: 2026-10-19 (America/La_Paz). Spanish implementation is prepared; validation and Draft-PR delivery are recorded below. +- Repository: `lidge-jun/opencodex`; local branch: `feat/spanish-localization`; integration target: `dev`. +- Initial `dev` baseline: `79fa97be6e6ae974ccd31d9aeedc2da96a0baa73`; refreshed through `bddd61f74bc89f45e6740845823b47f7a0a2f629` to `74463a2f73ac8a8011554385cbd45c42d16441a3`. The clone includes branch history and current checked-out sources; historical blobs are fetched on demand. +- Current `dev` package version: `2.90.0`. Latest published release checked on this date: [`v2.89.0`](https://github.com/lidge-jun/opencodex/releases/tag/v2.89.0). Release and development versions are distinct. +- Toolchain: Bun `1.4.3` for tests, Node `v24.21.0`, Git `2.56.0.windows.1`. The root dependency on bundled Bun `1.4.2` stays unchanged. +- Loaded catalog baseline: 4,078 English keys and 11 GUI locales (`en`, `de`, `fr`, `ko`, `zh`, `zh-TW`, `ru`, `ja`, `tr`, `vi`, `pt`). +- Documentation baseline: 8 configured site locales and 73 canonical English Markdown/MDX source pages. These are measured snapshot values, never hard-coded future acceptance counts. +- The user-supplied August design is historical reference. Current checked-out instructions, English sources, tests and contracts govern implementation. + +## Agreed contribution + +Deliver **one PR against `dev`** containing the Spanish dashboard used by Desktop and browsers, the public website, the documentation tree and the Spanish README. Implement and verify the subsystems in separate steps on this branch, then present them together. + +The selected scope excludes native Desktop bootstrap screens, tray menus, updater and installer localization. Those use a separate native shell; dashboard language support becomes available in Desktop when a package includes the updated GUI. A browser check does not establish native Desktop acceptance. + +No Spanish source files, fork, push, PR, release or installation replacement have been created in this preparation stage. + +### Instructions and accepted precedents + +Read again before editing or publishing: root `AGENTS.md`, nearest scoped `AGENTS.md`, `MAINTAINERS.md`, `CONTRIBUTING.md`, the PR template, CODEOWNERS, and the trusted PR-quality/hygiene scripts. Root and GUI instructions, docs-site and scripts instructions, contribution/quality contracts, architecture ownership and current locale wiring were reviewed during preparation. + +- [Issue #1551](https://github.com/lidge-jun/opencodex/issues/1551) permits documentation as a separate scope; the user subsequently selected one combined PR. The [owner response](https://github.com/lidge-jun/opencodex/issues/1551#issuecomment-5324945300) welcomes an English-parity `es` locale against `dev`. +- [French #1733](https://github.com/lidge-jun/opencodex/pull/1733) merged GUI, website, documentation and README together. The [approval](https://github.com/lidge-jun/opencodex/pull/1733#pullrequestreview-4944415405) cites GUI key/placeholder parity, documentation path parity, auxiliary coverage, addressed findings and current-head checks. +- [Vietnamese #4984](https://github.com/lidge-jun/opencodex/pull/4984) merged exhaustive locale wiring. Later fixes #5005 and #5020 demonstrate why newly added English keys and separately declared native-main namespaces must be audited. +- [Portuguese #6458](https://github.com/lidge-jun/opencodex/pull/6458) was closed and carried into `dev` in [5d7efbb74](https://github.com/lidge-jun/opencodex/commit/5d7efbb749ffb72efa6696571b73a4a874a8c61d). It is not a directly merged PR. Its implementation highlights pre-paint language selection, quota maps, catalog size exemptions and semantic corrections. + +Use these as integration and review precedents. Translate from current English; do not reuse their historical key/page/test counts or bypass present contributor rules. Historical reviewers do not replace the current maintainer roster. + +## Implementation sequence + +### 1. Reconcile with the latest development version + +Fetch `origin/dev` before implementation and again before final readiness. Once the fork is configured, use `upstream/dev` as the canonical comparison. Record the exact base and head SHAs. + +Reconcile new English keys, documentation pages, auxiliary unions and changed meanings after each synchronization. Before final handoff, base the contribution on the latest fetched `dev` and rerun checks invalidated by the synchronization. Recheck changed visual evidence against the resulting head. The gate's present 10-commit tolerance is not a substitute for the user's request to cover the latest development source. + +### 2. Add Spanish to the existing dashboard architecture + +- Create `gui/src/i18n/es.ts` directly from the current English catalog. Preserve the exact key set and interpolation names/multiplicity; provide non-empty translations and a reviewed, narrow allowlist for intentionally identical technical terms. +- Extend `LabLocale`, `DICTS`, `LOCALES`, stored-value validation and navigator detection. Use internal `es`, visible `Español`, HTML `es`, and map browser `es-*` variants to this single locale. A valid stored selection retains priority. +- Keep `LanguageProvider`, `useT`, `Trans`, storage key `ocx-lang` and interpolation behavior. Do not introduce another i18n framework, new dependencies, unchecked casts or new English fallbacks. +- Update the pre-paint locale map and browser detection in `gui/index.html`, so the initial HTML language agrees with the mounted provider. +- Translate Compatibility Lab base keys, overlays and supplements; the closed native-main translation namespace; all Log Guard maps; routing compatibility and vision-reasoning labels. +- Extend the locale union, locale order and row tuples in `desktop-compatibility-copy.ts`, and use its Spanish projection in the new catalog. Translate display copy while retaining wire values, commands, URLs, headers, IDs and configuration keys. +- Add Spanish HTTP labels/descriptions and regional normalization to `status-codes.ts`, including generic status classes. +- Map Spanish to `es-ES` in both quota-formatting helpers: `QuotaBars.tsx` and `ProviderCapacityQuota.tsx`. Audit other formatters and preserve deliberately fixed display contracts, including the plain-dollar format enforced by existing tests. +- Add `es` to `gui/scripts/sync-locale-keys.mjs`; its existing omission of `vi`/`pt` is a baseline observation, not permission for unrelated locale cleanup. Do not run bulk synchronization over other catalogs as part of this preparation. +- Register the Spanish catalog using the existing translation-catalog file-size exemption mechanism and its tests/baseline metadata. Never raise existing file caps to accommodate the change. +- Review architecture documents mapped to `gui/`; update the current localization contract in `structure/dashboard-and-usage.md` and any dependent whose explanation actually changes. + +Use neutral, concise Spanish: dashboard = panel, providers = proveedores, settings = configuración, logs = registros, usage = uso, reasoning = razonamiento. Preserve branded names and protocol/configuration identifiers. Contextually review negations, destructive actions, recovery, credential precedence and ownership guidance. + +### 3. Localize the public website, documentation and README + +The Astro/Starlight website has a separate language system from the React dashboard. Register `es` / `Español` in `docs-site/astro.config.mjs`, including sidebar labels, and extend the custom header's language type/options and path-preserving language links. + +- Add `docs-site/src/content/docs/es/` with the current canonical English page paths, including the home page, Desktop installation/use, getting started, guides, references, benchmarks, contributing and troubleshooting. Recompute the source inventory rather than copying the older French page roster. +- Translate titles, descriptions, body prose, accessibility text and visible interface text from current English. Keep executable examples, flags, code identifiers, credentials placeholders, routes and documented defaults consistent with English. +- Add Spanish to `Landing.astro`, `Header.astro`, `SiteJsonLd.astro`, and benchmark/UI translation data such as `frontier-i18n.ts`. Preserve component structure and generated output ownership. +- Keep `/es/` URLs, language metadata, canonical/alternate metadata, structured data, sitemap, search and translated page links consistent. Rewrite links to translated headings where needed and verify language switches keep the corresponding document path. +- Add `readme/README.es.md` from the current root README, update existing language bars and `readme/i18n-manifest.json`, and extend the repository's README parity checks using their existing model. +- Review the mapped documentation architecture and update contract explanations only where this contribution changes them. + +French review threads specifically caught altered API-key versus OAuth behavior, canonical Pool mode names, and backend exception semantics. Review Spanish explanations against current English and referenced code so localization does not change operational advice. + +### 4. Add regression coverage and inspect the real render + +Dashboard cases: + +- Spanish base/effective catalogs: exact keys, placeholders, duplicate-key guard, no blank entries, and no accidental English outside the reviewed allowlist. +- Spanish registration, all supported `es-*` browser variants, persisted selection precedence, blocked/invalid storage behavior, and initial HTML language. +- Language switching on the same mounted root, persistence after reload, HTML language updates and switching back to an existing language. +- Every auxiliary namespace, localized status classes and date/number/quota formatters; preserve the existing fixed-dollar assertions. +- Update exhaustive test maps, explicit locale rosters and the fixed 11-locale assertion in `subagent-surface-warning.test.tsx`. Extend `logs-cost-plain-dollar.test.ts`, DSH/Aside copy expectations and relevant root locale guards. + +Website/README cases: + +- Derive English versus Spanish documentation path parity from the current source/configuration; a newly added English page must be visible to the guard. +- Validate locale navigation, internal links/anchors, translated accessibility labels, metadata, search results and README/manifest parity. Use the existing root docs-test domain and layout registration rules if adding a root test. +- Run the docs build and inspect the real Spanish landing page, Desktop guide, long reference page and language switching at desktop and narrow widths. + +Review the dashboard with synthetic data across navigation, providers/models, usage/logs/storage, integrations, account/login dialogs, Lab and Log Guard. Inspect clipped text, overflow, tooltips, warnings and keyboard/focus behavior. Save actual-head screenshots locally for later upload to the PR description; do not commit screenshot evidence to this branch. + +## Preparation verification + +All commands below ran on the source baseline above, before locale implementation. Logs are local ignored artifacts under `.tmp/spanish-localization/evidence/`. + +| Check | Result | +| --- | --- | +| Root `bun install --frozen-lockfile` | Exit 0; 104 packages installed | +| GUI `bun install --frozen-lockfile` | Exit 0; 41 packages installed | +| Docs `bun install --frozen-lockfile` | Exit 0; 369 packages installed | +| Root `bun run typecheck` | Exit 0 | +| Focused GUI locale tests with pinned Bun and explicit root preload | 71 pass, 0 fail, 8 files; 13,909 assertions | +| GUI `bun run lint:i18n` | Exit 0 | +| GUI `bun run build` | Exit 0; 462 modules transformed | +| Docs `OPENCODEX_DOCS_OFFLINE=1 bun run build` | Exit 0; 585 pages; 83,057 internal links checked; search and sitemap generated | +| Root `bun run privacy:scan` and direct Bun 1.4.3 scan | Exit 0; repository privacy scan passed in both invocations | +| Targeted preparation-note privacy scan | Exit 0; no findings | + +The focused test command was run from `gui/`: + +```powershell +bun ../scripts/test-with-pinned-bun.ts --isolate --preload ../tests/preload.ts ./tests/i18n-locales.test.ts ./tests/i18n-language-switch.test.tsx ./tests/locale-parity.test.ts ./tests/claude-desktop-locale.test.ts ./tests/compatibility-lab-i18n.test.ts ./tests/fr-localization.test.ts ./tests/native-main-translations.test.ts ./tests/logs-cost-plain-dollar.test.ts +``` + +A reusable local PowerShell launcher is prepared at `.tmp/spanish-localization/Run-LocaleBaseline.ps1`. It uses the repository's explicit preload, which creates isolated OpenCodex/Codex/client homes, removes inherited production credential variables and arms the real-home guard. Existing tests supply synthetic DOM/state and translation fixtures. No running production proxy is used. + +Baseline warnings: Vite reports existing chunks above 500 kB; Astro reports the absent/empty optional `i18n` content collection. Both builds completed successfully. These warnings were observed on unchanged source and are not Spanish changes. + +No full root suite, full GUI suite, React Doctor, actual-browser inspection or native Desktop build has been performed in this preparation. Rust/Cargo were not detected on PATH. These results establish a preparation baseline, not review readiness or Spanish acceptance. + +Before the combined PR becomes review-ready, run the current required root typecheck, root suite, privacy and structure checks; full GUI tests, lint, i18n lint and build; applicable React Doctor; README/docs parity and file-size guards; and the docs build. Use the pinned test wrapper. Any allowed full-suite resource exception needs exact commands, results, reason and uncovered scope, and never turns unrun checks into passing results. + +## Publication and completion + +- Implement all agreed surfaces on this branch, then create/reuse the contributor fork. Configure `origin` for the fork and `upstream` for the original repository before pushing. +- Open one Draft PR to `dev`, titled `feat(i18n): add Spanish dashboard and documentation localization`, with `Refs #1551`. +- Fill the exact current template sections `Summary`, `Verification` and `Checklist` in English. Include actual-head GUI and website screenshots in the description, named commands/results, translation provenance and any documented limitations. +- Keep the four readiness items aligned with `.github/scripts/pr-quality.cjs`: required local validation documented, recent `dev` base, correct Codex/CodeRabbit findings resolved, and ready-for-review confirmation. New commits invalidate earlier attestations and potentially affected evidence. +- Do not change workflow triggers, release behavior, dependencies, auth implementation or existing locale behavior as incidental cleanup. Preserve attribution if actual contributor work is carried. +- Required checks must succeed on the current PR head. Contributor integration requires the current maintainer approval under `MAINTAINERS.md`; merging into `dev` does not itself publish a Desktop update. +- Complete when Spanish has current English GUI key/placeholder parity, full agreed documentation/README parity, complete auxiliary coverage, real-render evidence, passing required validation and a reviewable single PR. + +## Implementation record + +The combined contribution adds the `es` dashboard catalog and auxiliary namespaces, regional browser detection and prepaint language, persistent selection, HTTP-status copy and quota date formats. The catalog follows all 4,078 current English keys. Existing locales retain their behavior. The shared dashboard is the surface used by Desktop and browsers; native tray/startup/updater text is outside this contribution. + +The website registers Spanish navigation, landing copy, structured data and benchmark labels. The Spanish tree mirrors all 73 canonical documentation paths. `readme/README.es.md`, every README language bar and the source-hash manifest are updated together. The refreshed English archive contract is reflected in Spanish: 512 MiB / 256 files, explicit refusal codes and manual cleanup. Code examples, HTML code elements, CLI identifiers and admonition structure have regression coverage. + +Translation was drafted locally with [Helsinki-NLP/opus-mt-tc-big-en-es](https://huggingface.co/Helsinki-NLP/opus-mt-tc-big-en-es), whose model card declares CC-BY-4.0, using an isolated CTranslate2 conversion at revision `685e28454c38f960d9cddc89e3a6881ec62dc765`. Runtime, model and helper scripts are ignored local scratch files, not project dependencies or committed assets. Subsequent copyediting covers the landing, navigation, README, Desktop and quickstart guides, technical identifiers, privacy/consent warnings and inspected dashboard surfaces. Further linguistic review of the long reference pages is requested in the Draft PR; this is not represented as human acceptance. + +| Implementation check | Recorded result | +| --- | --- | +| Root typecheck after refreshing `dev` | Passed | +| Full GUI suite | 3,493 passed, zero failures; 58,734 assertions across 354 files | +| Final copy retest: Spanish/locale/switch/Lab/native/status/quota/Anthropic coverage | 97 passed, zero failures; 31,666 assertions across nine files | +| GUI lint and i18n lint | Passed | +| GUI production build | Passed; 463 modules; pre-existing large-chunk warning remains | +| Final root documentation, README, hygiene, structure and layout files with `--timeout 120000` | 417 passed, zero failures; 3,089 assertions across 18 files | +| Final `--changed=dev --timeout 120000` run | 226 passed, zero failures; 2,298 assertions across 16 files | +| Docs production build, offline | Passed; 658 pages and 95,628 internal links; search and sitemap generated | +| React Doctor 0.9.11, changed scope against `upstream/dev` | No issues; repository wrapper's `origin/main` ref is absent in this dev-only fork checkout | +| Root privacy scan, direct Bun 1.4.3 execution of `scripts/privacy-scan.ts` | Passed | +| Final structure SSOT check | Passed | +| Root full-suite attempt | Incomplete: stopped after observing 3,104 passing and 26 failing cases; not a passing full-suite result | + +The full root attempt encountered Windows `EPERM` symlink creation failures in unchanged spend-ledger/client tests, default timeouts, and `EBUSY` cleanup of `config-dir-acl-harden` background work followed by spend-ledger ownership conflicts. The default full-suite run became impractical in this environment. This uses the documented resource/environment exception in `AGENTS.md`: directly affected regression files remain mandatory, broader backend/platform coverage remains outstanding in CI, and the PR stays Draft. These failures are not claimed to have passed or to have been reproduced on an untouched baseline. + +The root full-suite attempt ran on the intermediate `bddd61f74` base. The final base is `74463a2f7`; six further English documentation updates were reconciled, covering inline audio, MiMo tool-call recovery, Mistral vision, pool credit renewal and DeepSeek image-file opt-in. Technical identifiers and examples are checked against this final English snapshot. Final scoped results are reported in the PR; no complete root-suite pass on the final base is claimed. + +The first full GUI run had 3,489 passes and three failures: missing `keep-warm` / `Agent SDK` anchors and a filesystem-scan timeout. Both translation anchors were corrected and all three failing files passed focused retesting. The full GUI recheck passed all 3,493 tests; subsequent copyediting passed the 97 focused tests above. No native Desktop build or human-run acceptance test is claimed. + +Browser evidence uses an actual built GUI with an isolated OpenCodex runtime and a disabled synthetic provider, plus the built static docs site in Chrome. It exercises mounted language switching and reload persistence, desktop/mobile layouts, providers/models/integrations, subagents, usage/logs/storage, Desktop documentation, a long reference, benchmark views and language-preserving website links. Captures and machine-readable observations remain under ignored scratch space. The installed personal Desktop configuration and running proxy are not used as test fixtures. Screenshots for GitHub belong on the fork's separate `pr-assets` branch and are linked by immutable asset commit, never added to the PR branch. + +The contributor fork is configured as `origin`; the original repository remains `upstream`. The pull request targets `dev`, uses the current English template and `Refs #1551`, and retains unchecked review-readiness attestations until local scope, current-head CI, review findings and maintainer readiness are satisfied. Final command results and any remaining limitations are recorded in the PR description. diff --git a/docs-site/astro.config.mjs b/docs-site/astro.config.mjs index 47bc5b2d381..8b63138fa43 100644 --- a/docs-site/astro.config.mjs +++ b/docs-site/astro.config.mjs @@ -59,10 +59,11 @@ export default defineConfig({ baseUrl: "https://github.com/lidge-jun/opencodex/edit/main/docs-site/", }, lastUpdated: true, - // English at the site root; French under /fr, Korean under /ko, Simplified Chinese under /zh-cn, Traditional Chinese under /zh-tw, Russian under /ru, Japanese under /ja, Turkish under /tr. + // English at the site root; Spanish under /es, French under /fr, Korean under /ko, Simplified Chinese under /zh-cn, Traditional Chinese under /zh-tw, Russian under /ru, Japanese under /ja, Turkish under /tr. defaultLocale: "root", locales: { root: { label: "English", lang: "en" }, + es: { label: "Español", lang: "es" }, fr: { label: "Français", lang: "fr" }, ko: { label: "한국어", lang: "ko" }, "zh-cn": { label: "简体中文", lang: "zh-CN" }, @@ -74,112 +75,112 @@ export default defineConfig({ sidebar: [ { label: "Getting Started", - translations: { fr: "Démarrage", ko: "시작하기", "zh-CN": "开始使用", "zh-TW": "開始使用", ru: "Начало работы", ja: "はじめに", tr: "Başlangıç" }, + translations: { es: "Primeros pasos", fr: "Démarrage", ko: "시작하기", "zh-CN": "开始使用", "zh-TW": "開始使用", ru: "Начало работы", ja: "はじめに", tr: "Başlangıç" }, items: [ - { label: "Installation", translations: { fr: "Installation", ko: "설치", "zh-CN": "安装", "zh-TW": "安裝", ru: "Установка", ja: "インストール", tr: "Kurulum" }, slug: "getting-started/installation" }, - { label: "Quickstart", translations: { fr: "Démarrage rapide", ko: "빠른 시작", "zh-CN": "快速开始", "zh-TW": "快速入門", ru: "Быстрый старт", ja: "クイックスタート", tr: "Hızlı Başlangıç" }, slug: "getting-started/quickstart" }, - { label: "How It Works", translations: { fr: "Fonctionnement", ko: "동작 원리", "zh-CN": "工作原理", "zh-TW": "運作原理", ru: "Как это работает", ja: "仕組み", tr: "Nasıl Çalışır" }, slug: "getting-started/how-it-works" }, - { label: "Agent Quickstart", translations: { fr: "Démarrage rapide pour les agents", ko: "에이전트 퀵스타트", "zh-CN": "Agent 快速上手", "zh-TW": "Agent 快速上手", ru: "Быстрый старт для агентов", ja: "エージェント向けクイックスタート", tr: "Ajanlar İçin Hızlı Başlangıç" }, slug: "getting-started/for-agents" }, + { label: "Installation", translations: { es: "Instalación", fr: "Installation", ko: "설치", "zh-CN": "安装", "zh-TW": "安裝", ru: "Установка", ja: "インストール", tr: "Kurulum" }, slug: "getting-started/installation" }, + { label: "Quickstart", translations: { es: "Inicio rápido", fr: "Démarrage rapide", ko: "빠른 시작", "zh-CN": "快速开始", "zh-TW": "快速入門", ru: "Быстрый старт", ja: "クイックスタート", tr: "Hızlı Başlangıç" }, slug: "getting-started/quickstart" }, + { label: "How It Works", translations: { es: "Cómo funciona", fr: "Fonctionnement", ko: "동작 원리", "zh-CN": "工作原理", "zh-TW": "運作原理", ru: "Как это работает", ja: "仕組み", tr: "Nasıl Çalışır" }, slug: "getting-started/how-it-works" }, + { label: "Agent Quickstart", translations: { es: "Inicio rápido para agentes", fr: "Démarrage rapide pour les agents", ko: "에이전트 퀵스타트", "zh-CN": "Agent 快速上手", "zh-TW": "Agent 快速上手", ru: "Быстрый старт для агентов", ja: "エージェント向けクイックスタート", tr: "Ajanlar İçin Hızlı Başlangıç" }, slug: "getting-started/for-agents" }, ], }, { label: "Guides", - translations: { fr: "Guides", ko: "가이드", "zh-CN": "指南", "zh-TW": "指南", ru: "Руководства", ja: "ガイド", tr: "Kılavuzlar" }, + translations: { es: "Guías", fr: "Guides", ko: "가이드", "zh-CN": "指南", "zh-TW": "指南", ru: "Руководства", ja: "ガイド", tr: "Kılavuzlar" }, items: [ - { label: "Remote Hub Deployment", translations: { fr: "Déploiement Remote Hub", ko: "Remote Hub 배포", "zh-CN": "Remote Hub 部署", "zh-TW": "Remote Hub 部署", ru: "Развёртывание Remote Hub", ja: "Remote Hub のデプロイ", tr: "Remote Hub Dağıtımı" }, slug: "guides/remote-hub" }, - { label: "Remote Link", translations: { fr: "Liaison distante", ko: "Remote Link", "zh-CN": "远程链接", "zh-TW": "遠端連結", ru: "Удалённая связь", ja: "リモートリンク", tr: "Uzak Bağlantı" }, slug: "guides/remote-link" }, - { label: "Response Inspection", translations: { fr: "Inspection des réponses et réponses volumineuses", ko: "응답 검사와 대용량 응답", "zh-CN": "响应检查与大型响应", "zh-TW": "回應檢查與大型回應", ru: "Проверка ответов и большие ответы", ja: "レスポンスの検査と大きなレスポンス", tr: "Yanıt incelemesi ve büyük yanıtlar" }, slug: "guides/response-inspection" }, - { label: "Remote Workspace", translations: { fr: "Espace de travail distant", ko: "원격 워크스페이스", "zh-CN": "远程工作区", "zh-TW": "遠端工作區", ru: "Удалённая рабочая область", ja: "リモートワークスペース", tr: "Uzak Çalışma Alanı" }, slug: "guides/remote-workspace" }, - { label: "Providers", translations: { fr: "Fournisseurs", ko: "프로바이더", "zh-CN": "提供商", "zh-TW": "供應商", ru: "Провайдеры", ja: "プロバイダー", tr: "Sağlayıcılar" }, slug: "guides/providers" }, - { label: "Factory Droid Bridge", translations: { fr: "Pont Factory Droid", ko: "Factory Droid 브리지", "zh-CN": "Factory Droid 桥接", "zh-TW": "Factory Droid 橋接", ru: "Мост Factory Droid", ja: "Factory Droid ブリッジ", tr: "Factory Droid köprüsü" }, slug: "guides/factory-droid" }, - { label: "Cursor Private Inference", translations: { ko: "Cursor Private Inference", fr: "Cursor Private Inference", "zh-CN": "Cursor Private Inference", "zh-TW": "Cursor Private Inference", ru: "Cursor Private Inference", ja: "Cursor Private Inference", tr: "Cursor Private Inference" }, slug: "guides/cursor-private-inference" }, - { label: "Model Routing", translations: { fr: "Routage des modèles", ko: "모델 라우팅", "zh-CN": "模型路由", "zh-TW": "模型路由", ru: "Маршрутизация моделей", ja: "モデルルーティング", tr: "Model Yönlendirme" }, slug: "guides/model-routing" }, - { label: "Codex Integration", translations: { fr: "Intégration de Codex", ko: "Codex 통합", "zh-CN": "Codex 集成", "zh-TW": "Codex 整合", ru: "Интеграция с Codex", ja: "Codex 連携", tr: "Codex Entegrasyonu" }, slug: "guides/codex-integration" }, - { label: "Composer Usage-Gate Fallback", translations: { ko: "Codex 입력 제한 대체 경로" }, slug: "guides/composer-usage-gate-fallback" }, - { label: "Codex App Model Picker", translations: { fr: "Sélecteur de modèles de Codex App", ko: "Codex App 모델 선택기", "zh-CN": "Codex App 模型选择器", "zh-TW": "Codex App 模型選擇器", ru: "Выбор модели в Codex App", ja: "Codex App モデルピッカー", tr: "Codex App Model Seçici" }, slug: "guides/codex-app-models" }, - { label: "Codex Prompt Layers", translations: { fr: "Couches d'invite Codex", ko: "Codex 프롬프트 레이어", "zh-CN": "Codex 提示词层", "zh-TW": "Codex 提示詞層", ru: "Слои промпта Codex", ja: "Codex プロンプトレイヤー", tr: "Codex İstem Katmanları" }, slug: "guides/codex-prompt" }, - { label: "Native Context Compatibility", translations: { ko: "네이티브 컨텍스트 호환성", fr: "Compatibilité du contexte natif", "zh-CN": "原生上下文兼容性", "zh-TW": "原生脈絡相容性", ru: "Совместимость с нативным контекстом", ja: "ネイティブコンテキストの互換性", tr: "Yerel bağlam uyumluluğu" }, slug: "guides/codex-native-context" }, - { label: "macOS Menu Bar App", translations: { fr: "Application barre de menus macOS", ko: "macOS 메뉴바 앱", "zh-CN": "macOS 菜单栏应用", "zh-TW": "macOS 選單列 App", ru: "Приложение в строке меню macOS", ja: "macOS メニューバーアプリ", tr: "macOS Menü Çubuğu Uygulaması" }, slug: "guides/macos-menu-bar" }, - { label: "Desktop App", translations: { fr: "Application de bureau", ko: "데스크톱 앱", "zh-CN": "桌面应用", "zh-TW": "桌面 App", ru: "Настольное приложение", ja: "デスクトップアプリ", tr: "Masaüstü Uygulaması" }, slug: "guides/desktop-app" }, - { label: "Model Ordering", translations: { fr: "Ordre des modèles", ko: "모델 정렬에 관하여", "zh-CN": "模型排序", "zh-TW": "模型排序", ru: "Сортировка моделей", ja: "モデルの並び順", tr: "Model Sıralaması" }, slug: "guides/model-ordering" }, - { label: "Combos", translations: { fr: "Combinaisons", ko: "콤보", "zh-CN": "组合", "zh-TW": "組合", ru: "Комбо", ja: "コンボ", tr: "Kombolar" }, slug: "guides/combos" }, - { label: "Protocol Paths", translations: { fr: "Chemins de protocole", ko: "프로토콜 경로", "zh-CN": "协议路径", "zh-TW": "協定路徑", ru: "Пути протоколов", ja: "プロトコル経路", tr: "Protokol Yolları" }, slug: "guides/protocol-paths" }, - { label: "Claude Code", translations: { fr: "Claude Code", ko: "Claude Code", "zh-CN": "Claude Code", "zh-TW": "Claude Code", ru: "Claude Code", ja: "Claude Code", tr: "Claude Code" }, slug: "guides/claude-code" }, - { label: "Grok Build", translations: { fr: "Grok Build", ko: "Grok Build", "zh-CN": "Grok Build", "zh-TW": "Grok Build", ru: "Grok Build", ja: "Grok Build", tr: "Grok Build" }, slug: "guides/grok-build" }, - { label: "opencode", translations: { fr: "opencode", ko: "opencode", "zh-CN": "opencode", "zh-TW": "opencode", ru: "opencode", ja: "opencode", tr: "opencode" }, slug: "guides/opencode" }, - { label: "Pi", translations: { fr: "Pi", ko: "Pi", "zh-CN": "Pi", "zh-TW": "Pi", ru: "Pi", ja: "Pi", tr: "Pi" }, slug: "guides/pi" }, - { label: "ChatGPT Desktop (experimental)", slug: "guides/chatgpt-desktop" }, - { label: "Integrations", translations: { fr: "Intégrations", ko: "연동", "zh-CN": "集成", "zh-TW": "整合", ru: "Интеграции", ja: "連携", tr: "Entegrasyonlar" }, slug: "guides/integrations" }, - { label: "MiniMax clients", translations: { fr: "Clients MiniMax", ko: "MiniMax 클라이언트", "zh-CN": "MiniMax 客户端", "zh-TW": "MiniMax 客戶端", ru: "Клиенты MiniMax", ja: "MiniMax クライアント", tr: "MiniMax İstemcileri" }, slug: "guides/minimax" }, - { label: "Sidecars: Web Search & Vision", translations: { fr: "Services auxiliaires : recherche web et vision", ko: "사이드카: 웹 검색 & 비전", "zh-CN": "边车:网络搜索与视觉", "zh-TW": "邊車:網路搜尋與視覺", ru: "Сайдкары: веб-поиск и зрение", ja: "サイドカー: ウェブ検索 & ビジョン", tr: "Sidecar'lar: Web Arama ve Görme" }, slug: "guides/sidecars" }, - { label: "Local Plugins", translations: { fr: "Plugins locaux", ko: "로컬 플러그인", "zh-CN": "本地插件", "zh-TW": "本機外掛", ru: "Локальные плагины", ja: "ローカルプラグイン", tr: "Yerel Eklentiler" }, slug: "guides/local-plugins" }, - { label: "Image Bridge", translations: { fr: "Pont d’images", ko: "이미지 브릿지", "zh-CN": "图像桥接", "zh-TW": "圖像橋接", ru: "Image Bridge", ja: "画像ブリッジ", tr: "Image Bridge" }, slug: "guides/image-bridge" }, - { label: "Video Bridge", translations: { fr: "Pont vidéo", ko: "비디오 브릿지", "zh-CN": "视频桥接", "zh-TW": "影片橋接", ru: "Video Bridge", ja: "動画ブリッジ", tr: "Video Bridge" }, slug: "guides/video-bridge" }, - { label: "Web Dashboard", translations: { fr: "Tableau de bord web", ko: "웹 대시보드", "zh-CN": "网页控制台", "zh-TW": "網頁儀表板", ru: "Веб-дашборд", ja: "ウェブダッシュボード", tr: "Web Kontrol Paneli" }, slug: "guides/web-dashboard" }, - { label: "Sub-agent Surface", translations: { fr: "Interface des sous-agents", ko: "서브에이전트 서피스", "zh-CN": "子代理界面", "zh-TW": "子代理介面", ru: "Интерфейс подагентов", ja: "サブエージェントサーフェス", tr: "Alt Ajan Arayüzü" }, slug: "guides/sub-agent-surface" }, - { label: "Why v1 Is the Default", translations: { fr: "Pourquoi v1 est la valeur par défaut", ko: "v1이 기본값인 이유", "zh-CN": "为什么默认是 v1", "zh-TW": "為什麼預設是 v1", ru: "Почему v1 по умолчанию", ja: "v1 がデフォルトである理由", tr: "Neden varsayılan v1" }, slug: "guides/subagent-v1-default" }, + { label: "Remote Hub Deployment", translations: { es: "Despliegue de Remote Hub", fr: "Déploiement Remote Hub", ko: "Remote Hub 배포", "zh-CN": "Remote Hub 部署", "zh-TW": "Remote Hub 部署", ru: "Развёртывание Remote Hub", ja: "Remote Hub のデプロイ", tr: "Remote Hub Dağıtımı" }, slug: "guides/remote-hub" }, + { label: "Remote Link", translations: { es: "Enlace remoto", fr: "Liaison distante", ko: "Remote Link", "zh-CN": "远程链接", "zh-TW": "遠端連結", ru: "Удалённая связь", ja: "リモートリンク", tr: "Uzak Bağlantı" }, slug: "guides/remote-link" }, + { label: "Response Inspection", translations: { es: "Inspección de respuestas", fr: "Inspection des réponses et réponses volumineuses", ko: "응답 검사와 대용량 응답", "zh-CN": "响应检查与大型响应", "zh-TW": "回應檢查與大型回應", ru: "Проверка ответов и большие ответы", ja: "レスポンスの検査と大きなレスポンス", tr: "Yanıt incelemesi ve büyük yanıtlar" }, slug: "guides/response-inspection" }, + { label: "Remote Workspace", translations: { es: "Espacio de trabajo remoto", fr: "Espace de travail distant", ko: "원격 워크스페이스", "zh-CN": "远程工作区", "zh-TW": "遠端工作區", ru: "Удалённая рабочая область", ja: "リモートワークスペース", tr: "Uzak Çalışma Alanı" }, slug: "guides/remote-workspace" }, + { label: "Providers", translations: { es: "Proveedores", fr: "Fournisseurs", ko: "프로바이더", "zh-CN": "提供商", "zh-TW": "供應商", ru: "Провайдеры", ja: "プロバイダー", tr: "Sağlayıcılar" }, slug: "guides/providers" }, + { label: "Factory Droid Bridge", translations: { es: "Puente Factory Droid", fr: "Pont Factory Droid", ko: "Factory Droid 브리지", "zh-CN": "Factory Droid 桥接", "zh-TW": "Factory Droid 橋接", ru: "Мост Factory Droid", ja: "Factory Droid ブリッジ", tr: "Factory Droid köprüsü" }, slug: "guides/factory-droid" }, + { label: "Cursor Private Inference", translations: { es: "Inferencia privada de Cursor", ko: "Cursor Private Inference", fr: "Cursor Private Inference", "zh-CN": "Cursor Private Inference", "zh-TW": "Cursor Private Inference", ru: "Cursor Private Inference", ja: "Cursor Private Inference", tr: "Cursor Private Inference" }, slug: "guides/cursor-private-inference" }, + { label: "Model Routing", translations: { es: "Enrutamiento de modelos", fr: "Routage des modèles", ko: "모델 라우팅", "zh-CN": "模型路由", "zh-TW": "模型路由", ru: "Маршрутизация моделей", ja: "モデルルーティング", tr: "Model Yönlendirme" }, slug: "guides/model-routing" }, + { label: "Codex Integration", translations: { es: "Integración con Codex", fr: "Intégration de Codex", ko: "Codex 통합", "zh-CN": "Codex 集成", "zh-TW": "Codex 整合", ru: "Интеграция с Codex", ja: "Codex 連携", tr: "Codex Entegrasyonu" }, slug: "guides/codex-integration" }, + { label: "Composer Usage-Gate Fallback", translations: { es: "Alternativa ante límites de uso de Composer", ko: "Codex 입력 제한 대체 경로" }, slug: "guides/composer-usage-gate-fallback" }, + { label: "Codex App Model Picker", translations: { es: "Selector de modelos de Codex App", fr: "Sélecteur de modèles de Codex App", ko: "Codex App 모델 선택기", "zh-CN": "Codex App 模型选择器", "zh-TW": "Codex App 模型選擇器", ru: "Выбор модели в Codex App", ja: "Codex App モデルピッカー", tr: "Codex App Model Seçici" }, slug: "guides/codex-app-models" }, + { label: "Codex Prompt Layers", translations: { es: "Capas de instrucciones de Codex", fr: "Couches d'invite Codex", ko: "Codex 프롬프트 레이어", "zh-CN": "Codex 提示词层", "zh-TW": "Codex 提示詞層", ru: "Слои промпта Codex", ja: "Codex プロンプトレイヤー", tr: "Codex İstem Katmanları" }, slug: "guides/codex-prompt" }, + { label: "Native Context Compatibility", translations: { es: "Compatibilidad de contexto nativo", ko: "네이티브 컨텍스트 호환성", fr: "Compatibilité du contexte natif", "zh-CN": "原生上下文兼容性", "zh-TW": "原生脈絡相容性", ru: "Совместимость с нативным контекстом", ja: "ネイティブコンテキストの互換性", tr: "Yerel bağlam uyumluluğu" }, slug: "guides/codex-native-context" }, + { label: "macOS Menu Bar App", translations: { es: "Aplicación de barra de menús de macOS", fr: "Application barre de menus macOS", ko: "macOS 메뉴바 앱", "zh-CN": "macOS 菜单栏应用", "zh-TW": "macOS 選單列 App", ru: "Приложение в строке меню macOS", ja: "macOS メニューバーアプリ", tr: "macOS Menü Çubuğu Uygulaması" }, slug: "guides/macos-menu-bar" }, + { label: "Desktop App", translations: { es: "Aplicación de escritorio", fr: "Application de bureau", ko: "데스크톱 앱", "zh-CN": "桌面应用", "zh-TW": "桌面 App", ru: "Настольное приложение", ja: "デスクトップアプリ", tr: "Masaüstü Uygulaması" }, slug: "guides/desktop-app" }, + { label: "Model Ordering", translations: { es: "Orden de modelos", fr: "Ordre des modèles", ko: "모델 정렬에 관하여", "zh-CN": "模型排序", "zh-TW": "模型排序", ru: "Сортировка моделей", ja: "モデルの並び順", tr: "Model Sıralaması" }, slug: "guides/model-ordering" }, + { label: "Combos", translations: { es: "Combos", fr: "Combinaisons", ko: "콤보", "zh-CN": "组合", "zh-TW": "組合", ru: "Комбо", ja: "コンボ", tr: "Kombolar" }, slug: "guides/combos" }, + { label: "Protocol Paths", translations: { es: "Rutas de protocolo", fr: "Chemins de protocole", ko: "프로토콜 경로", "zh-CN": "协议路径", "zh-TW": "協定路徑", ru: "Пути протоколов", ja: "プロトコル経路", tr: "Protokol Yolları" }, slug: "guides/protocol-paths" }, + { label: "Claude Code", translations: { es: "Claude Code", fr: "Claude Code", ko: "Claude Code", "zh-CN": "Claude Code", "zh-TW": "Claude Code", ru: "Claude Code", ja: "Claude Code", tr: "Claude Code" }, slug: "guides/claude-code" }, + { label: "Grok Build", translations: { es: "Grok Build", fr: "Grok Build", ko: "Grok Build", "zh-CN": "Grok Build", "zh-TW": "Grok Build", ru: "Grok Build", ja: "Grok Build", tr: "Grok Build" }, slug: "guides/grok-build" }, + { label: "opencode", translations: { es: "OpenCode", fr: "opencode", ko: "opencode", "zh-CN": "opencode", "zh-TW": "opencode", ru: "opencode", ja: "opencode", tr: "opencode" }, slug: "guides/opencode" }, + { label: "Pi", translations: { es: "Pi", fr: "Pi", ko: "Pi", "zh-CN": "Pi", "zh-TW": "Pi", ru: "Pi", ja: "Pi", tr: "Pi" }, slug: "guides/pi" }, + { label: "ChatGPT Desktop (experimental)", translations: { es: "ChatGPT Desktop (experimental)" }, slug: "guides/chatgpt-desktop" }, + { label: "Integrations", translations: { es: "Integraciones", fr: "Intégrations", ko: "연동", "zh-CN": "集成", "zh-TW": "整合", ru: "Интеграции", ja: "連携", tr: "Entegrasyonlar" }, slug: "guides/integrations" }, + { label: "MiniMax clients", translations: { es: "Clientes MiniMax", fr: "Clients MiniMax", ko: "MiniMax 클라이언트", "zh-CN": "MiniMax 客户端", "zh-TW": "MiniMax 客戶端", ru: "Клиенты MiniMax", ja: "MiniMax クライアント", tr: "MiniMax İstemcileri" }, slug: "guides/minimax" }, + { label: "Sidecars: Web Search & Vision", translations: { es: "Sidecars: búsqueda web y visión", fr: "Services auxiliaires : recherche web et vision", ko: "사이드카: 웹 검색 & 비전", "zh-CN": "边车:网络搜索与视觉", "zh-TW": "邊車:網路搜尋與視覺", ru: "Сайдкары: веб-поиск и зрение", ja: "サイドカー: ウェブ検索 & ビジョン", tr: "Sidecar'lar: Web Arama ve Görme" }, slug: "guides/sidecars" }, + { label: "Local Plugins", translations: { es: "Plugins locales", fr: "Plugins locaux", ko: "로컬 플러그인", "zh-CN": "本地插件", "zh-TW": "本機外掛", ru: "Локальные плагины", ja: "ローカルプラグイン", tr: "Yerel Eklentiler" }, slug: "guides/local-plugins" }, + { label: "Image Bridge", translations: { es: "Puente de imágenes", fr: "Pont d’images", ko: "이미지 브릿지", "zh-CN": "图像桥接", "zh-TW": "圖像橋接", ru: "Image Bridge", ja: "画像ブリッジ", tr: "Image Bridge" }, slug: "guides/image-bridge" }, + { label: "Video Bridge", translations: { es: "Puente de video", fr: "Pont vidéo", ko: "비디오 브릿지", "zh-CN": "视频桥接", "zh-TW": "影片橋接", ru: "Video Bridge", ja: "動画ブリッジ", tr: "Video Bridge" }, slug: "guides/video-bridge" }, + { label: "Web Dashboard", translations: { es: "Dashboard web", fr: "Tableau de bord web", ko: "웹 대시보드", "zh-CN": "网页控制台", "zh-TW": "網頁儀表板", ru: "Веб-дашборд", ja: "ウェブダッシュボード", tr: "Web Kontrol Paneli" }, slug: "guides/web-dashboard" }, + { label: "Sub-agent Surface", translations: { es: "Interfaz de subagentes", fr: "Interface des sous-agents", ko: "서브에이전트 서피스", "zh-CN": "子代理界面", "zh-TW": "子代理介面", ru: "Интерфейс подагентов", ja: "サブエージェントサーフェス", tr: "Alt Ajan Arayüzü" }, slug: "guides/sub-agent-surface" }, + { label: "Why v1 Is the Default", translations: { es: "Por qué v1 es la opción predeterminada", fr: "Pourquoi v1 est la valeur par défaut", ko: "v1이 기본값인 이유", "zh-CN": "为什么默认是 v1", "zh-TW": "為什麼預設是 v1", ru: "Почему v1 по умолчанию", ja: "v1 がデフォルトである理由", tr: "Neden varsayılan v1" }, slug: "guides/subagent-v1-default" }, ], }, { label: "Benchmarks", - translations: { fr: "Bancs d’essai", ko: "벤치마크", "zh-CN": "基准测试", "zh-TW": "基準測試", ru: "Бенчмарки", ja: "ベンチマーク", tr: "Kıyaslamalar" }, + translations: { es: "Pruebas comparativas", fr: "Bancs d’essai", ko: "벤치마크", "zh-CN": "基准测试", "zh-TW": "基準測試", ru: "Бенчмарки", ja: "ベンチマーク", tr: "Kıyaslamalar" }, collapsed: true, items: [ - { label: "Overview", translations: { fr: "Vue d’ensemble", ko: "개요", "zh-CN": "概览", "zh-TW": "概覽", ru: "Обзор", ja: "概要", tr: "Genel Bakış" }, slug: "benchmarks" }, - { label: "Coding", translations: { fr: "Programmation", ko: "코딩", "zh-CN": "编程", "zh-TW": "程式設計", ru: "Кодинг", ja: "コーディング", tr: "Kodlama" }, slug: "benchmarks/coding" }, - { label: "Frontend", translations: { fr: "Frontend", ko: "프론트엔드", "zh-CN": "前端", "zh-TW": "前端", ru: "Фронтенд", ja: "フロントエンド", tr: "Ön Yüz" }, slug: "benchmarks/frontend" }, - { label: "Terminal", translations: { fr: "Terminal", ko: "터미널", "zh-CN": "终端", "zh-TW": "終端", ru: "Терминал", ja: "ターミナル", tr: "Terminal" }, slug: "benchmarks/terminal" }, - { label: "Security", translations: { fr: "Sécurité", ko: "보안", "zh-CN": "安全", "zh-TW": "安全", ru: "Безопасность", ja: "セキュリティ", tr: "Güvenlik" }, slug: "benchmarks/security" }, - { label: "Intelligence", translations: { fr: "Intelligence", ko: "인텔리전스", "zh-CN": "智能", "zh-TW": "智慧", ru: "Интеллект", ja: "インテリジェンス", tr: "Zeka" }, slug: "benchmarks/intelligence" }, + { label: "Overview", translations: { es: "Descripción general", fr: "Vue d’ensemble", ko: "개요", "zh-CN": "概览", "zh-TW": "概覽", ru: "Обзор", ja: "概要", tr: "Genel Bakış" }, slug: "benchmarks" }, + { label: "Coding", translations: { es: "Codificación", fr: "Programmation", ko: "코딩", "zh-CN": "编程", "zh-TW": "程式設計", ru: "Кодинг", ja: "コーディング", tr: "Kodlama" }, slug: "benchmarks/coding" }, + { label: "Frontend", translations: { es: "Frontend", fr: "Frontend", ko: "프론트엔드", "zh-CN": "前端", "zh-TW": "前端", ru: "Фронтенд", ja: "フロントエンド", tr: "Ön Yüz" }, slug: "benchmarks/frontend" }, + { label: "Terminal", translations: { es: "Terminal", fr: "Terminal", ko: "터미널", "zh-CN": "终端", "zh-TW": "終端", ru: "Терминал", ja: "ターミナル", tr: "Terminal" }, slug: "benchmarks/terminal" }, + { label: "Security", translations: { es: "Seguridad", fr: "Sécurité", ko: "보안", "zh-CN": "安全", "zh-TW": "安全", ru: "Безопасность", ja: "セキュリティ", tr: "Güvenlik" }, slug: "benchmarks/security" }, + { label: "Intelligence", translations: { es: "Inteligencia", fr: "Intelligence", ko: "인텔리전스", "zh-CN": "智能", "zh-TW": "智慧", ru: "Интеллект", ja: "インテリジェンス", tr: "Zeka" }, slug: "benchmarks/intelligence" }, ], }, { label: "Reference", - translations: { fr: "Référence", ko: "레퍼런스", "zh-CN": "参考", "zh-TW": "參考", ru: "Справочник", ja: "リファレンス", tr: "Referans" }, + translations: { es: "Referencia", fr: "Référence", ko: "레퍼런스", "zh-CN": "参考", "zh-TW": "參考", ru: "Справочник", ja: "リファレンス", tr: "Referans" }, items: [ { label: "CLI", - translations: { fr: "CLI", ko: "CLI", "zh-CN": "命令行", "zh-TW": "命令列", ru: "CLI", ja: "CLI", tr: "CLI" }, + translations: { es: "CLI", fr: "CLI", ko: "CLI", "zh-CN": "命令行", "zh-TW": "命令列", ru: "CLI", ja: "CLI", tr: "CLI" }, items: [ - { label: "Overview", translations: { fr: "Vue d’ensemble", ko: "개요", "zh-CN": "概览", "zh-TW": "概覽", ru: "Обзор", ja: "概要", tr: "Genel Bakış" }, slug: "reference/cli" }, - { label: "Lifecycle & Service", translations: { fr: "Cycle de vie et service", ko: "라이프사이클 & 서비스", "zh-CN": "生命周期与服务", "zh-TW": "生命週期與服務", ru: "Жизненный цикл и служба", ja: "ライフサイクル & サービス", tr: "Yaşam Döngüsü ve Servis" }, slug: "reference/cli/lifecycle" }, - { label: "Providers, Accounts & Models", translations: { fr: "Fournisseurs, comptes et modèles", ko: "프로바이더, 계정 & 모델", "zh-CN": "提供商、账户与模型", "zh-TW": "供應商、帳號與模型", ru: "Провайдеры, аккаунты и модели", ja: "プロバイダー・アカウント・モデル", tr: "Sağlayıcılar, Hesaplar ve Modeller" }, slug: "reference/cli/providers-accounts" }, - { label: "Agents, Routing & Integrations", translations: { fr: "Agents, routage et intégrations", ko: "에이전트, 라우팅 & 통합", "zh-CN": "代理、路由与集成", "zh-TW": "代理、路由與整合", ru: "Агенты, маршрутизация и интеграции", ja: "エージェント・ルーティング・連携", tr: "Ajanlar, Yönlendirme ve Entegrasyonlar" }, slug: "reference/cli/agents" }, + { label: "Overview", translations: { es: "Descripción general", fr: "Vue d’ensemble", ko: "개요", "zh-CN": "概览", "zh-TW": "概覽", ru: "Обзор", ja: "概要", tr: "Genel Bakış" }, slug: "reference/cli" }, + { label: "Lifecycle & Service", translations: { es: "Ciclo de vida y servicio", fr: "Cycle de vie et service", ko: "라이프사이클 & 서비스", "zh-CN": "生命周期与服务", "zh-TW": "生命週期與服務", ru: "Жизненный цикл и служба", ja: "ライフサイクル & サービス", tr: "Yaşam Döngüsü ve Servis" }, slug: "reference/cli/lifecycle" }, + { label: "Providers, Accounts & Models", translations: { es: "Proveedores, cuentas y modelos", fr: "Fournisseurs, comptes et modèles", ko: "프로바이더, 계정 & 모델", "zh-CN": "提供商、账户与模型", "zh-TW": "供應商、帳號與模型", ru: "Провайдеры, аккаунты и модели", ja: "プロバイダー・アカウント・モデル", tr: "Sağlayıcılar, Hesaplar ve Modeller" }, slug: "reference/cli/providers-accounts" }, + { label: "Agents, Routing & Integrations", translations: { es: "Agentes, enrutamiento e integraciones", fr: "Agents, routage et intégrations", ko: "에이전트, 라우팅 & 통합", "zh-CN": "代理、路由与集成", "zh-TW": "代理、路由與整合", ru: "Агенты, маршрутизация и интеграции", ja: "エージェント・ルーティング・連携", tr: "Ajanlar, Yönlendirme ve Entegrasyonlar" }, slug: "reference/cli/agents" }, ], }, { label: "Configuration", - translations: { fr: "Configuration", ko: "설정", "zh-CN": "配置", "zh-TW": "設定", ru: "Конфигурация", ja: "設定", tr: "Yapılandırma" }, + translations: { es: "Configuración", fr: "Configuration", ko: "설정", "zh-CN": "配置", "zh-TW": "設定", ru: "Конфигурация", ja: "設定", tr: "Yapılandırma" }, items: [ - { label: "Overview", translations: { fr: "Vue d’ensemble", ko: "개요", "zh-CN": "概览", "zh-TW": "概覽", ru: "Обзор", ja: "概要", tr: "Genel Bakış" }, slug: "reference/configuration" }, - { label: "Providers", translations: { fr: "Fournisseurs", ko: "프로바이더", "zh-CN": "提供商", "zh-TW": "供應商", ru: "Провайдеры", ja: "プロバイダー", tr: "Sağlayıcılar" }, slug: "reference/configuration/providers" }, - { label: "Routing", translations: { fr: "Routage", ko: "라우팅", "zh-CN": "路由", "zh-TW": "路由", ru: "Маршрутизация", ja: "ルーティング", tr: "Yönlendirme" }, slug: "reference/configuration/routing" }, - { label: "Agents", translations: { fr: "Agents", ko: "에이전트", "zh-CN": "代理", "zh-TW": "代理", ru: "Агенты", ja: "エージェント", tr: "Ajanlar" }, slug: "reference/configuration/agents" }, - { label: "Advisor", translations: { fr: "Conseiller", ko: "어드바이저", "zh-CN": "顾问", "zh-TW": "顧問", ru: "Консультант", ja: "アドバイザー", tr: "Danışman" }, slug: "reference/configuration/advisor" }, - { label: "Server & Runtime", translations: { fr: "Serveur et environnement d’exécution", ko: "서버 & 런타임", "zh-CN": "服务器与运行时", "zh-TW": "伺服器與執行階段", ru: "Сервер и рантайм", ja: "サーバー & ランタイム", tr: "Sunucu ve Çalışma Zamanı" }, slug: "reference/configuration/server" }, + { label: "Overview", translations: { es: "Descripción general", fr: "Vue d’ensemble", ko: "개요", "zh-CN": "概览", "zh-TW": "概覽", ru: "Обзор", ja: "概要", tr: "Genel Bakış" }, slug: "reference/configuration" }, + { label: "Providers", translations: { es: "Proveedores", fr: "Fournisseurs", ko: "프로바이더", "zh-CN": "提供商", "zh-TW": "供應商", ru: "Провайдеры", ja: "プロバイダー", tr: "Sağlayıcılar" }, slug: "reference/configuration/providers" }, + { label: "Routing", translations: { es: "Enrutamiento", fr: "Routage", ko: "라우팅", "zh-CN": "路由", "zh-TW": "路由", ru: "Маршрутизация", ja: "ルーティング", tr: "Yönlendirme" }, slug: "reference/configuration/routing" }, + { label: "Agents", translations: { es: "Agentes", fr: "Agents", ko: "에이전트", "zh-CN": "代理", "zh-TW": "代理", ru: "Агенты", ja: "エージェント", tr: "Ajanlar" }, slug: "reference/configuration/agents" }, + { label: "Advisor", translations: { es: "Advisor", fr: "Conseiller", ko: "어드바이저", "zh-CN": "顾问", "zh-TW": "顧問", ru: "Консультант", ja: "アドバイザー", tr: "Danışman" }, slug: "reference/configuration/advisor" }, + { label: "Server & Runtime", translations: { es: "Servidor y entorno de ejecución", fr: "Serveur et environnement d’exécution", ko: "서버 & 런타임", "zh-CN": "服务器与运行时", "zh-TW": "伺服器與執行階段", ru: "Сервер и рантайм", ja: "サーバー & ランタイム", tr: "Sunucu ve Çalışma Zamanı" }, slug: "reference/configuration/server" }, ], }, - { label: "Adapters", translations: { fr: "Adaptateurs", ko: "어댑터", "zh-CN": "适配器", "zh-TW": "適配器", ru: "Адаптеры", ja: "アダプター", tr: "Adaptörler" }, slug: "reference/adapters" }, - { label: "Architecture", translations: { fr: "Architecture", ko: "아키텍처", "zh-CN": "架构", "zh-TW": "架構", ru: "Архитектура", ja: "アーキテクチャ", tr: "Mimari" }, slug: "reference/architecture" }, - { label: "Platform Support", translations: { fr: "Prise en charge des plateformes", ko: "플랫폼 지원", "zh-CN": "平台支持", "zh-TW": "平台支援", ru: "Поддержка платформ", ja: "プラットフォーム対応", tr: "Platform Desteği" }, link: `${SITE_URL}/reference/platform-support` }, - { label: "Windows Code Signing", translations: { fr: "Signature du code Windows", ko: "Windows 코드 서명", "zh-CN": "Windows 代码签名", "zh-TW": "Windows 程式碼簽署", ru: "Подпись кода Windows", ja: "Windows コード署名", tr: "Windows Kod İmzalama" }, slug: "reference/code-signing" }, - { label: "Proxy API Formats", translations: { fr: "Formats de l’API proxy", ko: "프록시 API 형식", "zh-CN": "代理 API 格式", "zh-TW": "代理 API 格式", ru: "Форматы API прокси", ja: "プロキシAPI形式", tr: "Proxy API Formatları" }, slug: "reference/proxy-formats" }, - { label: "Management API", translations: { fr: "API de gestion", ko: "관리 API", "zh-CN": "管理 API", "zh-TW": "管理 API", ru: "API управления", ja: "管理API", tr: "Yönetim API'si" }, slug: "reference/management-api" }, + { label: "Adapters", translations: { es: "Adaptadores", fr: "Adaptateurs", ko: "어댑터", "zh-CN": "适配器", "zh-TW": "適配器", ru: "Адаптеры", ja: "アダプター", tr: "Adaptörler" }, slug: "reference/adapters" }, + { label: "Architecture", translations: { es: "Arquitectura", fr: "Architecture", ko: "아키텍처", "zh-CN": "架构", "zh-TW": "架構", ru: "Архитектура", ja: "アーキテクチャ", tr: "Mimari" }, slug: "reference/architecture" }, + { label: "Platform Support", translations: { es: "Soporte de plataforma", fr: "Prise en charge des plateformes", ko: "플랫폼 지원", "zh-CN": "平台支持", "zh-TW": "平台支援", ru: "Поддержка платформ", ja: "プラットフォーム対応", tr: "Platform Desteği" }, slug: "reference/platform-support" }, + { label: "Windows Code Signing", translations: { es: "Firma de código en Windows", fr: "Signature du code Windows", ko: "Windows 코드 서명", "zh-CN": "Windows 代码签名", "zh-TW": "Windows 程式碼簽署", ru: "Подпись кода Windows", ja: "Windows コード署名", tr: "Windows Kod İmzalama" }, slug: "reference/code-signing" }, + { label: "Proxy API Formats", translations: { es: "Formatos de API del proxy", fr: "Formats de l’API proxy", ko: "프록시 API 형식", "zh-CN": "代理 API 格式", "zh-TW": "代理 API 格式", ru: "Форматы API прокси", ja: "プロキシAPI形式", tr: "Proxy API Formatları" }, slug: "reference/proxy-formats" }, + { label: "Management API", translations: { es: "API de administración", fr: "API de gestion", ko: "관리 API", "zh-CN": "管理 API", "zh-TW": "管理 API", ru: "API управления", ja: "管理API", tr: "Yönetim API'si" }, slug: "reference/management-api" }, ], }, { label: "Troubleshooting", - translations: { fr: "Dépannage", ko: "문제 해결", "zh-CN": "故障排除", "zh-TW": "疑難排解", ru: "Устранение неполадок", ja: "トラブルシューティング", tr: "Sorun Giderme" }, + translations: { es: "Solución de problemas", fr: "Dépannage", ko: "문제 해결", "zh-CN": "故障排除", "zh-TW": "疑難排解", ru: "Устранение неполадок", ja: "トラブルシューティング", tr: "Sorun Giderme" }, collapsed: true, items: [ - { label: "Windows Memory Growth", translations: { fr: "Augmentation de la mémoire sous Windows", ko: "Windows 메모리 증가", "zh-CN": "Windows 内存增长", "zh-TW": "Windows 記憶體增長", ru: "Рост памяти в Windows", ja: "Windows メモリ増加", tr: "Windows Bellek Artışı" }, slug: "troubleshooting/windows-memory" }, - { label: "Disk Usage from Temp Files", translations: { fr: "Espace disque et fichiers temporaires", ko: "임시 파일 디스크 사용량", "zh-CN": "临时文件磁盘占用", "zh-TW": "暫存檔磁碟用量", ru: "Использование диска временными файлами", ja: "一時ファイルのディスク使用量", tr: "Geçici Dosya Disk Kullanımı" }, slug: "troubleshooting/disk-usage-temp-files" }, - { label: "Codex Cannot Sign In or Load", translations: { fr: "Codex ne peut pas se connecter", ko: "Codex 로그인 불가", "zh-CN": "Codex 无法登录", "zh-TW": "Codex 無法登入", ru: "Codex не может войти", ja: "Codex にサインインできない", tr: "Codex Oturum Açamıyor" }, slug: "troubleshooting/codex-cannot-sign-in" }, - { label: "Update Failed on Windows", translations: { fr: "Échec de la mise à jour sous Windows", ko: "Windows에서 업데이트 실패", "zh-CN": "Windows 上更新失败", "zh-TW": "Windows 上更新失敗", ru: "Сбой обновления в Windows", ja: "Windows で更新に失敗する", tr: "Windows'ta Güncelleme Başarısız" }, slug: "troubleshooting/update-failed" }, - { label: "Spend Ledger Refused in a Synced Folder", translations: { fr: "Registre de dépenses refusé dans un dossier synchronisé", ko: "동기화 폴더에서 지출 원장 거부", "zh-CN": "同步文件夹中的支出账本被拒绝", "zh-TW": "同步資料夾中的支出帳本被拒絕", ru: "Отказ журнала расходов в синхронизируемой папке", ja: "同期フォルダーで支出台帳が拒否される", tr: "Eşitlenen Klasörde Harcama Defteri Reddi" }, slug: "troubleshooting/spend-ledger-synced-folder" }, + { label: "Windows Memory Growth", translations: { es: "Windows Crecimiento de memoria", fr: "Augmentation de la mémoire sous Windows", ko: "Windows 메모리 증가", "zh-CN": "Windows 内存增长", "zh-TW": "Windows 記憶體增長", ru: "Рост памяти в Windows", ja: "Windows メモリ増加", tr: "Windows Bellek Artışı" }, slug: "troubleshooting/windows-memory" }, + { label: "Disk Usage from Temp Files", translations: { es: "Uso del disco desde archivos Temp", fr: "Espace disque et fichiers temporaires", ko: "임시 파일 디스크 사용량", "zh-CN": "临时文件磁盘占用", "zh-TW": "暫存檔磁碟用量", ru: "Использование диска временными файлами", ja: "一時ファイルのディスク使用量", tr: "Geçici Dosya Disk Kullanımı" }, slug: "troubleshooting/disk-usage-temp-files" }, + { label: "Codex Cannot Sign In or Load", translations: { es: "Codex no puede iniciar sesión ni cargar", fr: "Codex ne peut pas se connecter", ko: "Codex 로그인 불가", "zh-CN": "Codex 无法登录", "zh-TW": "Codex 無法登入", ru: "Codex не может войти", ja: "Codex にサインインできない", tr: "Codex Oturum Açamıyor" }, slug: "troubleshooting/codex-cannot-sign-in" }, + { label: "Update Failed on Windows", translations: { es: "Fallo de actualización en Windows", fr: "Échec de la mise à jour sous Windows", ko: "Windows에서 업데이트 실패", "zh-CN": "Windows 上更新失败", "zh-TW": "Windows 上更新失敗", ru: "Сбой обновления в Windows", ja: "Windows で更新に失敗する", tr: "Windows'ta Güncelleme Başarısız" }, slug: "troubleshooting/update-failed" }, + { label: "Spend Ledger Refused in a Synced Folder", translations: { es: "Registro de gastos rechazado en una carpeta sincronizada", fr: "Registre de dépenses refusé dans un dossier synchronisé", ko: "동기화 폴더에서 지출 원장 거부", "zh-CN": "同步文件夹中的支出账本被拒绝", "zh-TW": "同步資料夾中的支出帳本被拒絕", ru: "Отказ журнала расходов в синхронизируемой папке", ja: "同期フォルダーで支出台帳が拒否される", tr: "Eşitlenen Klasörde Harcama Defteri Reddi" }, slug: "troubleshooting/spend-ledger-synced-folder" }, ], }, - { label: "Contributing", translations: { fr: "Contribuer", ko: "기여하기", "zh-CN": "贡献", "zh-TW": "貢獻", ru: "Как внести вклад", ja: "コントリビュート", tr: "Katkıda Bulunma" }, slug: "contributing" }, + { label: "Contributing", translations: { es: "Cómo contribuir", fr: "Contribuer", ko: "기여하기", "zh-CN": "贡献", "zh-TW": "貢獻", ru: "Как внести вклад", ja: "コントリビュート", tr: "Katkıda Bulunma" }, slug: "contributing" }, ], }), // Runs after Starlight has written the site: refuses a build with a broken internal link. diff --git a/docs-site/src/components/FrontierBoards.astro b/docs-site/src/components/FrontierBoards.astro index 2cd29564cb6..db302f32cf8 100644 --- a/docs-site/src/components/FrontierBoards.astro +++ b/docs-site/src/components/FrontierBoards.astro @@ -10,7 +10,7 @@ import data from "../data/frontier-benchmarks.json"; import { FRONTIER_STRINGS } from "../data/frontier-i18n"; interface Props { - locale?: "en" | "fr" | "ko" | "zh-cn" | "zh-tw" | "ru" | "ja" | "tr"; + locale?: "en" | "fr" | "ko" | "zh-cn" | "zh-tw" | "ru" | "ja" | "tr" | "es"; /** Comma-separated board ids to render; omit for all boards. */ boards?: string; /** Show the page-level subtitle (overview pages only). */ @@ -26,7 +26,7 @@ const fill = (key: string, vars: Record` (ranura de perfil de base36 3-char) | `claude-fable-5-p01q` |
+
+El proxy elige la familia por solicitud: `?ids=cli` o `?ids=desktop` gana; de lo contrario, el
+`claude-code/*` user-agent obtiene el formulario CLI legible y otros clientes obtienen el código de escritorio. Ambas familias decodifican para siempre — un modelo guardado en `settings.json` bajo cualquiera de las dos formas sigue funcionando. Cada entrada lleva un nombre de visualización honesto, como `gemini-3-pro (gemini)`, más el modelo completo capacidades (escalera de esfuerzo-razonamiento, tipos de pensamiento) en la forma oficial de ModelInfo para Claude El modo de puerta de enlace de terceros del escritorio puede ofrecer su selector de esfuerzo. Los modelos reales Anthropic mantienen su Id canónicos. La fecha 2026 sintética es una ranura interna, no una fecha de lanzamiento. Legado hash alias y `claude-ocx---` / `claude-ocx2---` ids de configs anteriores aún se resuelven. Un identificador heredado configurado en una ranura de modelo OpenCodex (`claudeCode.model`, `tierModels`, `smallFastModel`) se envía a Claude Code en su ortografía actual automáticamente. Una identificación heredada guardada por el propio selector de Claude Code sigue enrutando, pero Claude Code mantiene su cuenta de 200k para esa identificación. Escoger `ocx-claude-` por un ahorrado `claude-ocx-` id, y `ocx-claude2-` por un salvado escapado `claude-ocx2-` id, por lo que se aplican tanto la ventana de contexto del catálogo efectivo como el compacto.
+
+Los perfiles gestionados más antiguos expusieron sus perfiles internos `YYYYMMDD` ranuras directamente. Afectado Desktop construye tira esa fecha terminal al comparar modelos de sesión activa, por lo que dos rutas distintas pueden parecer idénticas y no `set_model` Se envía la solicitud de control ([#3782](https://github.com/lidge-jun/opencodex/issues/3782)) Los perfiles actuales exponen códigos no fechados en su lugar. Después de actualizar, vuelva a aplicar el perfil de escritorio y salir y volver a abrir Desktop; un trabajador que ya está en ejecución todavía puede conservar su antiguo id con forma de fecha. El proxy continúa decodificando esos identificadores antiguos para la migración, pero no puede hacer que Desktop emita un modificador suprimido.
+
+También puede intentar seleccionar el modelo predeterminado previsto en el OpenCodex Claude Perfil de escritorio, volver a aplicar el perfil e iniciar una nueva conversación. Este es un paso de solución de problemas, no una solución garantizada. OpenCodex no puede observar el estado del selector; enruta el identificador del modelo que lleva cada solicitud. **Registros → requestedModel**.
+
+Modelos con una ventana de contexto larga (1M, o al menos el umbral de compactación predeterminado 829,800-token; Los modelos Claude en una ruta Anthropic necesitan un genuino 1M) obtener un extra `…[1m]` fila de selector: seleccionarlo hace
+Claude Code cuenta un contexto completo de 1M para ese modelo (la autocompactación permanece activada) — el proxy quita el marcador antes de enrutar. Seleccionar uno lo Claude Code's `settings.json` `model` campo; solicitudes entrantes resolver El alias vuelve al modelo enrutado. En las versiones anteriores de Claude Code, el selector permanece en el conjunto nativo — ranuras vía
+`ANTHROPIC_MODEL` o escriba cualquier id encaminado con `/model` (Claude Code pasa cadenas a través).
+
+**Reglas gramaticales de Alias:** proveedor no debe contener `/` o `--` o igual `native`. ID de modelo sencillo (no `/` o `~`) mantener el prefijo v1 `ocx-claude-…`. Identificadores de modelo que contienen `/` o
+`~` acuñar el prefijo v2 `ocx-claude2-…` con escapes (`/` → `~s`, `~` → `~t`), e.g.
+`openrouter/anthropic/claude-opus-4-8` → `ocx-claude2-openrouter--anthropic~sclaude-opus-4-8`. Los alias v1 decodifican literalmente (por lo que un id de modelo histórico que contenía las secuencias de dos caracteres)
+`~s` / `~t` se conserva); los alias v2 expanden los escapes. Rutas que la forma legible no puede Regresa al alias de hash. Los ID de modelo MAY contienen `--` (La resolución se divide en el primer
+`--` solo); babosas nativas que contienen `--` Caer de nuevo a la forma hash.
+
+**Orden de resolución del modelo:** `[1m]` marcador despojado → alias legible decodificado → Escritorio hash alias decodificado → `modelMap` coincidencia exacta → coincidencia eliminada por fecha (`-20250514` eliminado) paso de →.
+
+
+
+Un ID de escritorio en forma de fecha no resuelta también puede ser un modelo nativo genuino que falta en el descubrimiento. Messages y count-tokens devuelven HTTP 503 con el fijo `desktop_model_mapping_unavailable` error cuando el disponible La evidencia no puede resolver ese ID; esto no establece que el modelo no es válido. Legado desconocido Los alias hash aún devuelven HTTP 400. Ninguno de los casos quita la fecha o vuelve a otra ruta. IDs conocidos, asignaciones registradas y exactas `modelMap` mantiene su comportamiento existente, incluyendo identificaciones nativas reales. Actualizar el descubrimiento del modelo o volver a aplicar el perfil del concentrador conectado antes Intentar de nuevo; volver a intentarlo por sí solo no garantiza la resolución.
+
+Cada entrada lleva un nombre de visualización como `gemini-3-pro (gemini)`, además de capacidades de modelo completo (escalera de razonamiento-esfuerzo, tipos de pensamiento) en el oficial `ModelInfo` forma. Modelos reales Anthropic mantener sus identificaciones canónicas en ambas superficies.
+
+
+
+### Variante de contexto `[1m]` marcador
+
+Estas comprobaciones utilizan la ventana de catálogo efectiva, que puede incluir una [Estimación del proveedor personalizado](/es/reference/configuration/providers/#context-windows-on-custom-providers). Una estimación no verifica la capacidad real del relé.
+
+Modelos con una ventana de contexto de catálogo efectiva de 1M, o al menos el valor predeterminado 829,800-token umbral de compactación, obtener un extra `…[1m]` fila de selector; el piso es fijo, por lo que una compactación personalizada El valor no lo reduce, y los modelos Claude en una ruta Anthropic necesitan un 1M genuino. Turning El auto-contexto desactivado limita la fila a ventanas de 1M. Seleccionarlo hace que Claude Code cuenta un contexto completo de 1M. El proxy elimina la insensibilidad de mayúsculas y minúsculas `[1m]` sufijo antes de alias Resolución y enrutamiento.
+
+
+
+## Contexto automático (modelos de gran contexto sin techo de 200k)
+
+Claude Code cuentas 200k tokens para cualquier modelo que no reconoce. **Contexto automático** (en adelante por por defecto) corrige que:
+
+1. Lanzamiento de ranuras env obtener el `[1m]` Marcador cuando la ventana de catálogo efectiva del modelo está por encima de 200k
+ **y** al menos el umbral autocompacto configurado. Las filas del selector de descubrimiento y escritorio no siguen ese umbral: utilizan el piso fijo 829.800-token (un genuino 1M para los modelos Claude en un Ruta Anthropic).
+2. `CLAUDE_CODE_AUTO_COMPACT_WINDOW` (por defecto) `829800`, rango `100000`–`1000000`) se inyecta así La conversación se resume automáticamente en ese punto.
+
+Tres estados de configuración:
+
+- **ausente / `true`:** activado (por defecto)
+- **`false`:** — sin marcadores, sin inyección de ventana de compactación
+- **legado `maxContextTokens` conjunto:** El auto-contexto está implícitamente deshabilitado
+
+El valor de compactación es ajustable en la página Claude. **Aviso:** Elevándolo más allá de la realidad de un modelo ventana rompe ese modelo — los errores de chat antes de que el resumen se puede disparar.
+
+La ventana de contexto anunciada de un modelo no garantiza que una solicitud pesada en herramientas se ajuste a la límite de entrada ascendente. Un rechazo de límite de entrada clasificado alcanza Claude Code como
+`invalid_request_error` con `context_length_exceeded`, redactado de la manera en que Anthropic lo dice (`prompt is too long: …`), por lo que Claude Code compacta la conversación y vuelve a intentar por sí solo; una respuesta que no es de transmisión utiliza HTTP 400 en su lugar de un 502 reintentable. Los proveedores en el carril nativo Messages tienen la misma redacción.
+
+La normalización del desbordamiento utiliza solo el primer **65.536 unidades de código UTF-16** del error del proveedor mensaje, incluidos los mensajes que ya utilizan la redacción de Anthropic. Este es un límite de longitud de cadena, no un límite de bytes o token. El texto más allá de él se descarta sin un marcador de truncamiento o elipsis. por lo que los detalles de diagnóstico y los recuentos de token cerca del final pueden estar ausentes del error Claude Code recibe. El añadido `prompt is too long:` seguido de un espacio, puede hacer el mensaje final más largo que esta porción retenida.
+
+Dentro de esa porción, se mantiene la redacción reconocida de Anthropic; de lo contrario, OpenCodex emite
+`prompt is too long: tokens > maximum` Sólo cuando encuentra
+`maximum context length is tokens` seguido por `resulted in tokens` o
+`you requested tokens`. Utiliza el primer límite establecido y la primera solicitud de coincidencia cuenta después de ella. Si ese par falta, se invierte o se corta, prefija el texto retenido con
+`prompt is too long:` seguido de un espacio, sin inventar cuentas. Un límite de rendimiento que solo menciona tokens (por ejemplo, "demasiados tokens por minuto") mantiene su texto y no se trata como un desbordamiento.
+
+Si la compactación en sí misma aún excede el límite, preservar el original. historial e intente compactar una bifurcación con menos herramientas habilitadas o esquemas MCP, si su cliente admite ese flujo de trabajo. A `[1m]` El ajuste de contabilidad del marcador o cliente más grande no eleva el valor ascendente límite, y OpenCodex no elimina silenciosamente el historial o las herramientas para que encaje.
+
+Los modelos sub-1M Anthropic nativos nunca se marcan automáticamente. Gana una ventana compacta que tú mismo exportas para el marcado de ranura de lanzamiento (el proxy utiliza el valor YOUR para decidir qué modelos son seguros para marcar). Las filas de descubrimiento ignoran esa exportación y mantienen el piso fijo. Valores de configuración no válidos editados manualmente volver a 829.800.
+
+
+
+### Contabilidad de contexto (1M por defecto, 200k opt-in)
+
+`claudeCode.contextAccounting` decide lo que opencodex elige por defecto. Ausente :`1m`, el por defecto), los modelos de larga ventana se ofrecen a 1M en las ranuras de env de lanzamiento, los selectores de escritorio, Escritorio 3P (`prefer1m`) y subagentes generados. Establecer `200k` para excluirse: nada está marcado `[1m]`
+automáticamente, `CLAUDE_CODE_AUTO_COMPACT_WINDOW` no se inyecta, y Desktop 3P cae `prefer1m`
+mientras se mantiene `supports1m`. Un selector que marques `[1m]` usted mismo permanece disponible (generado y Los subagentes forzados todavía dejan caer un marcador que la ventana del modelo no puede llevar), y el descubrimiento todavía enumera la `· 1M` filas de modelos con ventanas de catálogo de al menos 1M. `200k` gana sobre auto-contexto: a La ventana compacta que exporta ya no activa el marcado automático, aunque opencodex deja la suya propia Exportación en su lugar.
+
+```bash
+ocx claude config set --context-accounting 200k
+```
+
+
+
+### Entorno modelo eficaz
+
+`effectiveModelEnv` calcula seis ranuras inyectadas por `ocx claude` / system env / shell file:
+`ANTHROPIC_MODEL`, cuatro `ANTHROPIC_DEFAULT_{OPUS,SONNET,HAIKU,FABLE}_MODEL`, y legado
+`ANTHROPIC_SMALL_FAST_MODEL`. El haiku efectivo es `tierModels.haiku ?? smallFastModel`, alimentado a las dos variables del haiku.
+
+Cuando `ocx claude` se inicia en modo de suscripción, el propio inicio de sesión de Claude Code lleva una identificación Claude desnuda como el `claude-sonnet-5` directamente a Anthropic, para que esos ids tomen sus ventanas de contexto de la registro de proveedores, lo que sea que otro proveedor enumere bajo el mismo id. Un Opus, un Soneto o una Fábula ranura entonces obtiene el id nativo Claude Code resuelve que alias a, con el `[1m]` Marcador, porque detrás de una puerta de enlace Claude Code cuenta con un id sin marcar a 200k. Un `anthropic` fila tapada por debajo de 1M o a `claudeCode.modelMap` La entrada mantiene su id sin marcar, y el Haiku nunca se llena ni se marca. Cuando el lanzamiento utiliza proxy auth o `nativePassthrough` está apagado, el router decide, y solo una fila enrutada ventana cuenta. Env del sistema y el archivo de shell dejan espacios vacíos sin establecer, ya que sus valores también alcanzan lanzamientos que pasan a través de un hub.
+
+Cuando ambos `tierModels.haiku` y `smallFastModel` están ausentes, OpenCodex deja ambas variables de ayuda sin establecer; Claude Code luego elige su modelo de ayudante nativo (actualmente Sonnet), que puede incurrir en cargos de proveedor nativo.
+
+
+
+## Agentes de lista (injectAgents)
+
+Proxy de inicio / asegurar, `ocx claude`, y el panel de control relevante guarda la sincronización de su lista de subagentes destacados (Pestaña Subagentes, hasta 5 modelos) más `ocx-self` en `~/.claude/agents/ocx-*.md`.
+
+- **`ocx-self`** pines de su `/model` por defecto (regresando a `claudeCode.model`); omitido cuando tampoco existe. NOT usa herencia de modelo.
+- Cada cuerpo de agente contiene un `` directiva — el proxy usa esto para Fijar la ruta real. La herramienta del agente `model` argumento es, por lo tanto, inerte; pase `"haiku"` como a marcador de posición.
+- Frontmatter lleva el alias; el enrutamiento es impulsado por directivas.
+- Solo verificado por marcador `ocx-*.md` archivos que contienen `generated-by: opencodex` están siempre sobreescrito o podado; sus propios agentes nunca son tocados.
+- Los archivos se sincronizan atómicamente por archivo (escribir + renombrar).
+- `enabled: false` o `injectAgents: false` poda todas las definiciones verificadas.
+- El éxito de CLI guarda y persiste la configuración de escritorio de primera parte también intenta el mejor esfuerzo Sincronización de la lista, incluida la configuración repetida para reparar las definiciones que faltan. Configuración y reversión rechazadas No sincronice agentes. Desactivar el registro de primera persona por sí solo no inhabilita el registro del agente.
+- GUI PUT y la lista cambian de nuevo inmediatamente; cada inicio/garantización del proxy en primer plano o en segundo plano reconcilia los archivos propios antes de que un lanzamiento posterior de Claude Code los lea. Iniciar una nueva sesión Claude después del registro para que cargue las definiciones generadas.
+
+Envío: `subagent_type: "ocx-gpt-5-6-sol"`. 1M-objetivos capaces de llevar `[1m]` automáticamente.
+
+
+
+## Elisión de habilidades agrupadas (blockedSkills)
+
+Los Claude Code incluidos `claude-api` habilidad inyecta ~840KB (~136k tokens) de la documentación Anthropic que se activa automáticamente en el modelo Claude menciona. Los modelos enrutados no están entrenados en ese paquete, por lo que por defecto opencodex reemplaza el contenido de la habilidad con un corto stub en **Enrutado** solicitudes. Nativo El paso Anthropic no ha sido tocado.
+
+**Se manejan dos transportistas:**
+
+1. **Portaherramientas de resultados:** asistente `Skill(...)` llama a — el emparejado `tool_result` cuerpo es reemplazado por un stub cuando la entrada JSON en caja inferior contiene un nombre bloqueado.
+2. **Portador de bloque de texto:** un bloque de texto del usuario ≥10.000 caracteres que comienzan con
+ `Base directory for this skill: ` — coincidió cuando el nombre base del directorio es igual a un nombre bloqueado (insensible al caso). La línea de directorio se inspecciona solo hasta 4,096 unidades de código UTF-16; Una línea más larga se envía sin cambios, incluso cuando no tiene una línea nueva de terminación.
+
+Configura con `claudeCode.blockedSkills` (por defecto) `["claude-api"]`; `[]` Deshabilita la elisión completamente). El stub mantiene intacto el emparejamiento de llamada/resultado de la herramienta.
+
+
+
+## Mapa de modelos (intercepción)
+
+`claudeCode.modelMap` reescribe los ID de modelo entrantes de Anthropic antes del enrutamiento:
+
+```json
+{
+ "claudeCode": {
+ "modelMap": {
+ "claude-sonnet-4-5": "gemini/gemini-3-pro",
+ "claude-haiku-4-5": "gemini/gemini-3-flash"
+ }
+ }
+}
+```
+
+Orden de búsqueda: descubrimiento alias → id exacto → id con fecha sufijo despojado (`-20250514`) Paso →.
+
+Véase [Resolución de alias de escritorio](#desktop-alias-resolution) por la política de rechazo.
+
+
+
+## Matriz Sidecar: búsqueda web y comprensión de imágenes
+
+Los modelos enrutados no todos tienen las mismas herramientas alojadas o soporte de imágenes. opencodex llena esos vacíos antes de que el modelo principal responda:
+
+- Los **web-buscar sidecar** ejecuta la búsqueda real alojada, luego le da al modelo enrutado la respuesta y fuentes como resultado de una herramienta.
+- Los **visión sidecar** describe una imagen adjunta antes de llamar a un modelo
+ `noVisionModels`, luego reemplaza la imagen con esa descripción.
+
+Ambos sidecars pueden usar cualquiera de los dos backend:
+
+| Backend | Cómo funciona | Lo que se requiere |
+| --- | --- | --- |
+| `openai` | Un pequeño modelo GPT a través de la ChatGPT `forward` proveedor | Un inicio de sesión ChatGPT y un `authMode: "forward"` proveedor |
+| `anthropic` | Claude a través de almacenado Anthropic OAuth; uso de la búsqueda web `web_search_20250305` y la visión envía la imagen a Claude para la descripción | Un habilitado `adapter: "anthropic"`, `authMode: "oauth"` proveedor cuya cuenta almacenada activa no está marcada `needsReauth` |
+
+Una explícita `backend` Siempre gana. Cuando se omite, el **web-search** sidecar siempre selecciona
+`openai` (`anthropic` solo se ejecuta cuando está configurado explícitamente), mientras que el **visión** sidecar selecciona
+`anthropic` si un objeto útil almacenado Anthropic OAuth La cuenta existe, de lo contrario `openai`. Selección explícita
+`anthropic` sin una credencial utilizable **falla cerrado**: opencodex no toma prestado silenciosamente credenciales ChatGPT o switch backends. El backend OpenAI también se mantiene apagado sin iniciar sesión auth y un proveedor de forward.
+
+Las repeticiones enrutadas entrantes de Claude adjuntan el inicio de sesión principal de ChatGPT a la solicitud interna, por lo que OpenAI Los sidecars siguen siendo accesibles a pesar de que el portador entrante de Claude Code es solo la credencial proxy. Ese portador nunca se reenvía al proveedor principal enrutado.
+
+```json
+{
+ "webSearchSidecar": {
+ "backend": "anthropic",
+ "model": "claude-sonnet-5",
+ "maxSearchesPerTurn": 3
+ },
+ "visionSidecar": {
+ "backend": "anthropic",
+ "model": "claude-sonnet-5",
+ "maxDescriptionsPerTurn": 8
+ }
+}
+```
+
+`maxDescriptionsPerTurn` limita las nuevas descripciones de imágenes en un turno de modelo principal. Caché hits y Las descripciones duplicadas en vuelo no consumen el límite. Descripciones exitosas para `data:`
+las imágenes se almacenan en caché por backend, modelo, detalle, bytes de imagen y contexto de solicitud, por lo que el mismo El par imagen-y-contexto no se describe de nuevo en cada repetición. Remota `https:` Las imágenes nunca se almacenan en caché porque su contenido puede cambiar.
+
+Ver la [referencia de configuración](/es/reference/configuration/server/#sidecars) para cada clave. Anthropic-OAuth búsqueda web y descripción de la imagen reutilizan el repositorio existente Claude Code OAuth huella digital precedente, pero aún debe ser probado en remojo con su cuenta y carga de trabajo antes de que usted dependen de ellos para largas carreras sin vigilancia.
+
+
+
+
+
+## Herramientas de cliente en rutas Cursor
+
+Cuando Claude Code utiliza un modelo respaldado por Cursor, OpenCodex conserva nombres de herramientas de cliente reconocidos como el `Bash`, `Read`, `Write`, `Edit`, `Grep`, `Glob`, y `Task` en el catálogo de Cursor, herramienta dirección y se repiten las llamadas. Esto mantiene los nombres consistentes con las instrucciones de Claude Code. Las tramas de ejecución nativas Cursor denegadas dirigen el modelo a las herramientas cliente disponibles que giran.
+
+Un catálogo mixto que contiene un Codex desnudo `exec_command` o `shell_command` puente utiliza alambre Alias como `ocx_client_Read` para evitar colisiones de herramientas Cursor; llamadas devueltas a Claude Code utilizar sus nombres de herramientas originales. Las herramientas MCP de espacio de nombres mantienen sus identidades de espacio de nombres. OpenCodex incluye estos alias en el presupuesto de bytes de transporte de Cursor, por lo que es una herramienta cuya definición excedería el límite se omite para ese turno.
+
+
+
+## Esfuerzo de razonamiento
+
+En las solicitudes traducidas Messages → Responses, Claude Code `/effort` Configuración de mapas de la siguiente manera:
+
+| Formato de alambre | Mapeo |
+| --- | --- |
+| `thinking.type: "adaptive"` + `output_config.effort` | El esfuerzo pasó directamente (`minimal`\|`low`\|`medium`\|`high`\|`xhigh`\|`max`\|`ultra`) |
+| `thinking.type: "enabled"` + `budget_tokens` | ≤4096→`low`, ≤16384→`medium`, arriba→`high` |
+| `thinking.type: "disabled"` | `reasoning: { effort: "none" }`Resumen omitido |
+
+Para las solicitudes traducidas, el nivel resuelto aparece en el registro de solicitudes. **Esfuerzo de razonamiento** columna. Gestionado nativo Messages registro habilitado pensando presupuestos como `budget:` Cuando no se reconoce
+`output_config.effort` está presente; este registro no cambia el cuerpo del cable.
+
+
+
+## Traducción entrante (Messages → Responses)
+
+El proxy traduce cada solicitud Anthropic Messages API al formato Codex Responses API:
+
+| Entrada Messages | Salida Responses |
+| --- | --- |
+| De alto nivel `system` | `instructions` (Bloques de texto unidos con `\n\n`) |
+| `messages[].role: "system"` | También plegado en `instructions` |
+| Texto / imagen del usuario | `input_text` / `input_image` (base64 → datos URL) |
+| Texto del asistente | `output_text` |
+| Asistente `tool_use` | `function_call` (`input` → JSON-stringificado `arguments`) |
+| Usuario `tool_result` | `function_call_output` (`is_error` → `[tool error]` prefijo) |
+| `tool_reference` en un resultado de herramienta | Texto `Tool loaded: ` en el resultado emparejado; conserva los nombres de las herramientas cargadas sin agregar declaraciones ni habilitar el aplazamiento del lado del servidor traducido |
+| `thinking` / `redacted_thinking` repetición | `reasoning` artículos con delimitado `ocxr1` sobres para firmas y cargas útiles redactadas |
+| Herramientas de función | `{type: "function"}` (`web_search*` → `{type: "web_search"}`) En una ruta a `api.anthropic.com`, el tipo `web_search_*` y `web_fetch_*` las declaraciones también se envían a Anthropic como se declara y se ejecuta en el lado del servidor, a menos que la búsqueda web proporcione `web_search` sí mismo. Una búsqueda o fetch con una llamada coincidente y entrada completa vuelve al cliente como su `server_tool_use` bloque y su `web_search_tool_result` o `web_fetch_tool_result`Literalmente. Los resultados huérfanos se eliminan sin sintetizar una llamada, mientras que el texto circundante se conserva. Cuando el cliente envía un par completo de vuelta en su historial, el siguiente `api.anthropic.com` La petición lo lleva en su lugar solo si el siguiente bloque identifica de forma exclusiva su turno original. Anclajes repetidos, identificadores de llamada/resultado no coincidentes o duplicados, entrada de llamada malformada o un resultado que aparece antes de que su llamada caiga en el intercambio. fetch URL otros destinos nunca ven el intercambio |
+| `tool_choice` | `auto`→`auto`, `none`→`none`, `any`→`required`, llamado function→`{type:"function",name}`, WebSearch alojado/web_search→`{type:"web_search"}` |
+| `max_tokens` | `max_output_tokens` |
+| `stop_sequences` | `stop` |
+
+El modo automático Claude Code siempre envía `stop_sequences`. Para los modelos en el proveedor de rutas `noStopModels` lista, OpenCodex omite `stop` tanto en los cables Chat Completions como Responses, por lo que los modelos de razonamiento xAI como gruk-4.7 y gruk-4.6 no regresan `400 invalid-argument` y se marcan temporalmente no disponible. Véase [`noStopModels`](/es/reference/configuration/providers/).
+
+Replay conserva los bloques firmados no ocultos (incluido el pensamiento vacío) y los bloques redactados opacos en el adaptador Anthropic previsto. `hideThinkingSummary` permanece sin cambios: el texto firmado localmente oculto no está expuesto a los clientes de Claude y no se establece la reproducción sin pérdida a través de ese límite oculto de Claude. Los sobres de razonamiento combinados más antiguos no pueden recuperar el orden de bloque original una vez que se ha emitido la transmisión de texto. `claudeCode.compatibility: "enforce"` Rechaza la repetición del pensamiento. Esto no establece la aceptación de Anthropic en vivo o mejoras de caché-hit; [#3719](https://github.com/lidge-jun/opencodex/issues/3719) permanece abierta.
+
+**Casos de error (400):** JSON; faltante/vacío `model`; faltante/vacío `messages`; sin soporte papel; `tool_result` sin `tool_use_id`; `tool_use` sin id/nombre; nombre `tool_choice` sin nombre.
+
+
+
+### Patrones de propiedad Unicode en esquemas de herramientas
+
+Un esquema JSON `pattern` escrito para JavaScript puede usar escapes de propiedad Unicode como
+`\p{Cc}` o `\P{L}`. Los backends de la familia OpenAI validan `pattern` Compilando con Python
+`re`, que no soporta esos escapes, y un esquema que no pueden compilar se le niega — entero por lo que un único patrón de este tipo en una herramienta integrada falla cada solicitud en la sesión, no solo las llamadas a esa herramienta.
+
+Para mantener funcionando los parámetros ordinarios de Artefacto, el `openai-chat` y `openai-responses` adaptador rutas omitan escalar `pattern` restricciones que contienen propiedad Unicode escapa en positive ordinario posiciones de esquema. Restricciones de hermanos, `required`, los datos literales y los regexes soportados permanecen. Una implementación de la herramienta debe validar sus propias entradas porque no se aplica una restricción omitida. por este proxy.
+
+`patternProperties` Los matchers y sus esquemas de valor permanecen sin cambios. Eliminar un matcher puede cambiar qué claves son evaluadas por un antepasado `unevaluatedProperties`La apertura local es No es suficiente para demostrar una transformación segura. Patrones bajo `not`, `oneOf`, `if`, `contains`,
+`$defs` y `definitions` también permanecen sin cambios: relajar esos subárboles puede cambiar la negación, selección de ramas, recuento de coincidencias o el significado de una referencia.
+
+El destino valida estos esquemas conservados. Un destino compatible con ECMA puede usar el regex original; un destino que no puede compilarlo puede rechazar el esquema. OpenCodex no reemplazar silenciosamente ese contrato con uno que prohíba argumentos previamente válidos.
+
+Esta es la normalización en la ruta del adaptador seleccionado, no una garantía para todo el proveedor. Proveedor configuración y autenticación no se tocan, y un proveedor en un adaptador diferente es No afectado.
+
+Es una medida de compatibilidad, no una afirmación que cada backend personalizado compatible con OpenAI rechaza. estos patrones. Vale la pena saber lo que cuesta: una regla omitida no se conserva en ningún lugar y es no se aplica en sentido ascendente, por lo que una implementación de herramientas debe validar sus propias entradas en lugar de confiar en el esquema para rechazar un argumento mal formado.
+
+
+
+## Traducción saliente (Responses → Messages SSE)
+
+| Evento Responses | Messages SSE |
+| --- | --- |
+| `response.created` | `message_start` + `ping` |
+| Latido del corazón | `ping` |
+| Texto deltas | `content_block_start` → `content_block_delta` (texto) → `content_block_stop` |
+| Razonamiento resumen/texto | `thinking` bloque con la firma reproducida, o una `ocxr1` sobre de reserva |
+| Razonamiento redactado | `redacted_thinking` bloques reproducidos desde el sobre de razonamiento |
+| Marcos de llamada de función | `tool_use` Bloquear con `input_json_delta` |
+| Evento terminal | `message_delta` → `message_stop` |
+| EOF antes del terminal | 502-estilo `api_error` |
+
+**Detener el mapeo de razones:** `completed` → `tool_use` (si alguna herramienta llama) o `end_turn`;
+`incomplete/max_output_tokens` → `max_tokens`; `incomplete/content_filter` → `refusal`.
+
+**Taxonomía de error:** 400 `invalid_request_error`, 401 `authentication_error`,
+402 `billing_error`, 403 `permission_error`, 404 `not_found_error`, 409 `conflict_error`,
+413 `request_too_large`, 429 `rate_limit_error`, 504 `timeout_error`, 529 `overloaded_error`, Otros 5xx `api_error`. `Retry-After` se conserva.
+
+
+
+## Uso rápido de caché y token
+
+**Solicitudes enrutadas por Anthropic:** el adaptador gestiona los puntos de interrupción de la memoria caché para herramientas, contenido del sistema, y el penúltimo mensaje de usuario, además de un mensaje automático de nivel superior `cache_control`. Giros estables normalmente produce una tasa de éxito de caché del 99.9%.
+
+**Enrutamiento nativo OpenAI/ChatGPT:** deriva un alcance de sesión `prompt_cache_key` (desde
+`metadata.user_id` cuando está presente, volviendo a un hash de contenido del sistema) y `session_id` cabecera por afinidad de caché. La clave de caché incluye esquemas de modelo y herramientas completas.
+
+**Matemáticas de token:** Anthropic resta la salida `cached_tokens` y `cache_write_tokens` Desde
+`input_tokens`exponiéndolos como `cache_read_input_tokens` y `cache_creation_input_tokens`. Solicitar registros mapear esos de vuelta a inclusive `inputTokens`, con lecturas en ambos `cachedInputTokens` y
+`cacheReadInputTokens`, escribe en `cacheCreationInputTokens`. La página de uso informa de los hits de caché y creación de caché por separado.
+
+**count_tokens:** Los modelos enrutados utilizan una aproximación (sistema serializado + mensajes + herramientas). Modelos nativos Anthropic con un `sk-ant-` credenciales pasar la solicitud a través de la real Anthropic `/v1/messages/count_tokens` punto final.
+
+
+
+## Captura de depuración
+
+`ocx debug claude on|off|status|reset`, `OCX_CLAUDE_DEBUG=1`, o `PUT /api/debug {"claude": true}`
+Controla la captura entrante. `GET /api/claude/inbound-debug` devoluciones `{enabled, entries}` (más reciente En primer lugar, el anillo de 20).
+
+Cada entrada registra: `at`, `endpoint`, `model`, `resolvedModel`, `stream`, `maxTokens`,
+`thinkingType`, `thinkingBudgetTokens`, `outputConfigEffort`, `metadataKeys`,
+`hasMetadataUserId`, `hasSystem`, en bruto `anthropicBeta`, y etiquetas de igualdad HMAC de ocho caracteres para ID de usuario / sistema. **No se almacena ningún mensaje de texto, objeto sin procesar o hash estable de ejecución cruzada.** Desactivación La depuración Claude borra inmediatamente el anillo.
+
+
+
+## GUI (página Claude)
+
+Abrir **Conectar → Claude** para la configuración de una página Claude Code. La página muestra estos controles y secciones en orden:
+
+1. **Claude Code CLI de primera mano** interruptor
+2. **Empezar** con `ocx claude` y el bloque de entorno manual
+3. **General** con compatibilidad, instrucciones del agente, modo rápido y controles de contexto
+4. **Modelo de ayudante de fondo** selector
+5. **Interceptación modelo** editor
+6. **Modelos disponibles**, la vista previa en vivo de Claude Code `/model` alias de selector
+7. **Conexión Claude** interruptor, también disponible en la tarjeta Claude en la vista general de Connect
+
+La pegajosa barra de Guardar muestra **Sin cambios** cuando la configuración guardada coincide con la página, o
+**Cambios no guardados** Después de editarlos. **Reversión** descarta ediciones no guardadas; **Guardar** compromete el configuración editables. Los **Conexión Claude** y **Claude Code CLI de primera mano** Se aplican los interruptores inmediatamente. **Guardar** nunca cambia ninguno de los interruptores.
+
+**Escritorio Claude** es una pestaña separada bajo **Conectar**. Es **Modo de conexión** selector ofertas gateway (predeterminado) o first party, con el puerto proxy en ejecución en modo first party. Solo
+**Guardar y aplicar** modos de conmutación; **Guardar** solo almacena los carriles de perfil de puerta de enlace para una La puerta de enlace se aplica y deja el modo actual como está.
+
+`GET /api/claude-code` devuelve valores predeterminados efectivos, config, registro de ventanas de contexto, env efectivo, ids de ruta disponibles, alias y puerto. `PUT /api/claude-code` es parcial y conserva omitido campos; `null` restablece los valores de contexto/lista de bloques/ventana compacta.
+
+
+
+## Solución de problemas
+
+**Claude Code dice "Hizo 0 búsquedas"** — Construcciones actuales traducir completado Responses
+`web_search_call` elementos en Anthropic emparejado `server_tool_use` y `web_search_tool_result` bloques, incluyendo `usage.server_tool_use.web_search_requests`. Actualizar opencodex si se completó una versión anterior la búsqueda, pero Claude Code todavía contaba cero.
+
+**Un sidecar no se activa** — para `backend: "openai"`, confirme que ha iniciado sesión en ChatGPT y Tener un habilitado `authMode: "forward"` proveedor. Porque `backend: "anthropic"`, confirme el activo almacenado
+Anthropic OAuth La cuenta no está marcada `needsReauth`. Una selección explícita de Anthropic sin eso Credencial intencionalmente no se cierra.
+
+**"Los conectores claude.ai están deshabilitados"** — An `ANTHROPIC_API_KEY` o `ANTHROPIC_AUTH_TOKEN` se establece en tu caparazón. `ocx claude` deliberadamente hace NOT conjunto `ANTHROPIC_API_KEY`Si lo tienes exportado, Lo he visto. `ocx claude` inyecta `ANTHROPIC_BASE_URL`, descubrimiento, auto-contexto y ranuras de modelo configuradas — pero nunca `ANTHROPIC_API_KEY`.
+
+**Modelos que no aparecen en /modelo selector** — Verificar `CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY=1` es conjunto (automático con `ocx claude`) Correr `ocx claude` para actualizar la caché del modelo de puerta de enlace en
+`~/.claude/cache/gateway-models.json`. Comprobar `claudeCode.enabled` no es `false`.
+
+**Entorno estanco después del cambio de puerto** — Si se cambia el puerto proxy, los shells antiguos pueden tener un
+`ANTHROPIC_BASE_URL`. Abra una nueva terminal o vuelva a ejecutarla `ocx claude`.
+
+**techo de contexto 200k a pesar de gran modelo** — Seleccione el `[1m]` variante en el selector, o habilitar auto-context (activado por defecto). Si el selector no muestra `[1m]` fila, el contexto de catálogo efectivo del modelo ventana puede estar por debajo del piso fijo 829,800-token.
+
+**Alto recuento de token a partir de cargas de habilidad** — El paquete `claude-api` habilidad (~136k tokens) auto-cargas en las menciones del modelo Claude. Esto es normal para el paso nativo; en modelos encaminados, opencodex stubs Por defecto (`blockedSkills: ["claude-api"]`).
+
+**Los esquemas de herramientas MCP llenan el contexto en la primera curva** — Claude Code desactiva el aplazamiento de la herramienta MCP Siempre que `ANTHROPIC_BASE_URL` no es un host Anthropic de origen. El cheque está en la host, no el modelo, por lo que se aplica a todos los `ocx claude` sesión: con muchos conectores configurado, cada esquema de la herramienta se alinea antes de escribir cualquier cosa. Vuelva a habilitar el aplazamiento con:
+
+```json
+{ "claudeCode": { "toolSearch": true } }
+```
+
+Esto está desactivado por defecto porque solo vale la pena en **paso nativo Anthropic** Rutas. El aplazamiento es una optimización del lado del servidor, no una solicitud más pequeña: Claude Code todavía envía cada definición de la herramienta, y Anthropic de API es lo que mantiene los esquemas diferidos fuera del contexto del modelo y responde el `tool_search` herramienta de servidor con `tool_reference` bloques. Un traducido (enrutado) modelo nunca llega a esa maquinaria — opencodex deja caer el `tool_search` herramienta e ignora
+`defer_loading` — para que el proveedor siga recibiendo todos los esquemas mientras Claude Code deja de contar y, por lo tanto, deja de compactarse. Con `claudeCode.compatibility: "enforce"` El mismo La solicitud es rechazada con 400 en su lugar. Enciéndelo cuando `ocx claude` se enruta a un Anthropic modelo; déjelo para rutas de terceros hasta que se admita el aplazamiento traducido.
+
+Los valores aceptados siguen el propio analizador de Claude Code: `true`, `"auto"`, `"auto:N"` (N al menos 100) y `"force"`. Un valor que usted mismo exporta siempre gana sobre el inyectado.
+
+**Subagente envía al modelo equivocado** — Lista de agentes (`ocx-*`) uso ``
+directivas, no la herramienta del agente `model` argumento. Asegúrese de que la directiva coincida con el ruta. Pase `"haiku"` como modelo de referencia.
+
+Establecer `claudeCode.stabilizePromptCache` a `true` en `config.json` Claude arnés posterior avisos de instrucciones del sistema en las rutas traducidas. Reconocido `N tokens left ` pies se caen, incluyendo pies repetidos. Los recordatorios de TaskCreate aún se mueven a un mensaje de usuario final; si solo se pelaron los pies de página token, no se agrega ningún mensaje de entrada. El valor predeterminado es `false`. Habilitelo solo cuando este cambio de rol sea apropiado para sus clientes. Conserva ejemplos vallados y texto sin igual; el paso nativo Anthropic no cambia. A continuación, la clave prompt-cache sin metadatos sigue instrucciones estabilizadas. Esto no crea una identidad de conversación ni garantiza accesos a caché ascendentes.
+
+En cada ruta de chat traducida, los recordatorios de la línea de tiempo mantienen su posición en el conversación, después de cualquier resultado pendiente de la herramienta. Esto evita que una nueva recordatorio de reescribir el indicador del sistema principal, y detiene una conversación a mitad La instrucción de llegar antes de los turnos que fue escrito para seguir. El papel que la ranura lleva se decide por separado: un recordatorio se envía como `system` a menos que el proveedor registra `foldDeveloperRoleToSystem: false`, que establece que el upstream acepta el `developer` papel y lo reenvía en la misma posición. Un upstream que no acepta respuestas `400 role 'developer' is not allowed`
+y el turno nunca comienza, por lo que un destino no registrado se pliega. Esto se aplica con o sin
+`stabilizePromptCache`, y el paso de Anthropic nativo no cambia. Caché La reutilización todavía requiere una identidad de sesión estable y disponibilidad de caché ascendente. Los cambios en las instrucciones o herramientas anteriores, y la compactación de la conversación, aún pueden afectar a los hits de caché; preservar el orden de recordatorio por sí solo no garantiza la reutilización.
+
+
+
+### Interceptar la recuperación de token
+
+El proxy autenticado en ejecución valida el token actual para cada nueva solicitud CONNECT. Una aplicación explícita de primera parte recrea una token faltante y actualiza la configuración de propiedad sin que requieren un reinicio proxy; los túneles existentes no se revocan. Inválido, vinculado, sobredimensionado o Los archivos que no son token se rechazan en lugar de sobrescribirse. Inspeccione dicha entrada antes de eliminar solo el archivo token obsoleto confirmado y aplicando el modo de primera parte nuevamente; nunca elimine su destino de enlace.
+
+
+
+### Marcadores de contexto de selector de primera parte
+
+El selector de pestañas de código de escritorio agrega `[1m]` a modelos enrutados cuya ventana de contexto de catálogo efectivo es al menos un millón de tokens o al menos el umbral de compactación predeterminado 829,800-token (por ejemplo, un modelo nativo GPT-6 optó por su ventana 872k), por lo que Claude utiliza su contabilidad 1M en lugar del modelo personalizado más pequeño. Los modelos Claude en una ruta Anthropic aún necesitan un genuino 1M. Las etiquetas, el orden del perfil y las rutas del proveedor permanecen sin cambios. Las ventanas desconocidas y más cortas permanecen sin marcar. El selector no puede garantizar que un corredor de escritorio o remoto reciba el entorno de compactación correspondiente, por lo que un modelo de ventana larga que supere su ventana real obtiene una `prompt is too long` error, que Claude Code responde compactando. Escritorio 3P `supports1m`/`prefer1m` y los subagentes generados siguen la misma regla. La configuración de contexto automático emparejado para `ocx claude` No ha cambiado. Una conversación existente mantiene su selector guardado hasta que vuelva a seleccionar el modelo en el selector actualizado.
+
+
+
+### Modelo de subagente forzado Claude Code
+
+La página Subagentes ofrece **Fuerza a todos los subagentes en un modelo**, fuera por defecto. Seleccione una identificación de estilo de lista expuesta, como `combo/tev-auto`A continuación, habilite el interruptor. La lista se ofrece primero; las entradas de la lista guardadas no disponibles no pueden ser objetivos forzados.
+
+`ocx agent subagents force combo/tev-auto` conjuntos `claudeCode.subagentModelForce`; `ocx agent subagents force -` Lo aclara. `ocx agent status` informa el establecimiento. `GET /api/subagent-models` devoluciones `force`, `forceAvailable`, y `forceStatus`; `PUT` acepta `{ "force": "combo/tev-auto" }` o `{ "force": null }` Sin cambiar el roster. Omisión `force` Lo deja sin cambios. Los objetivos inválidos o no expuestos son rechazados en la escritura; los objetivos obsoletos son reportados y omitidos en el lanzamiento.
+
+Esto tiene efecto en el **siguiente routed `ocx claude` lanzamiento**, inyección `CLAUDE_CODE_SUBAGENT_MODEL` como un alias proxy explícito (con `[1m]` cuando la ventana de catálogo efectiva alcanza los 829.800-token piso, y solo para una ventana genuina de 1M en Anthropic Claude modelos y bare `claude-*` selectores; los objetivos nativos Claude usan un alias nativo reversible) y `CLAUDE_CODE_SUBAGENT_MODEL_FORCE=1`. Cada variable no vacía exportada por el shell gana independientemente. Los lanzamientos nativos no inyectan ninguna variable; simple `claude` No se ve afectado. No hay archivos de plugin o `settings.json` son modificados por esta configuración.
+
+Claude Code **2.1.257 o más reciente** es necesario para FORCE. Los argumentos del modelo Plugin y los agentes integrados (incluyendo Explorar/Plan) y por llamada se anulan. bifurcaciones y habilidades de subagente con `model: inherit` mantener el modelo de conversación principal. El bucle principal y los sidecars de pequeño-rápido no se ven afectados. Los archivos de la lista existentes permanecen disponibles.
+
+El panel de control advierte sobre versiones antiguas o desconocidas de CLI, objetivos no disponibles y cualquier variable que ya esté presente en el sistema. `settings.json` → `env` (que anula env de lanzamiento). La detección es de solo lectura y local en el servidor: no puede inspeccionar otro shell de lanzamiento, otra máquina o la configuración local del proyecto. Un resultado desconocido no es prueba de apoyo a la fuerza.
+
+Los selectores de puerta de enlace explícitos en una solicitud de agente generada tienen prioridad sobre su legado `ocx-route` fallback, incluso si la configuración de fuerza guardada cambia después del lanzamiento. Para shell o configuración anuladas de agentes de lista generados, use un alias de puerta de enlace explícito; los ids Claude desnudos conservan el comportamiento de respaldo del cliente antiguo. Los alias nativos restauran su modelo desnudo antes de las verificaciones de credenciales y mapas de modelo existentes. Los lanzamientos conectados validan los objetivos de fuerza frente a un nuevo catálogo de puertas de enlace autenticadas; el descubrimiento fallido omite la inyección automática de fuerza y las ventanas de contexto en caché por sí solas nunca demuestran disponibilidad.
diff --git a/docs-site/src/content/docs/es/guides/codex-app-models.md b/docs-site/src/content/docs/es/guides/codex-app-models.md
new file mode 100644
index 00000000000..fc274bde66b
--- /dev/null
+++ b/docs-site/src/content/docs/es/guides/codex-app-models.md
@@ -0,0 +1,281 @@
+---
+title: "Codex Selector de modelos de aplicaciones"
+description: "¿Cómo opencodex Los modelos aparecen en Codex App, Codex CLI, y Codex TUI A través de la compartida Codex catálogo."
+---
+
+opencodex no parchea la aplicación Codex. Escribe la misma configuración Codex y catálogo de modelos que Uso de Codex CLI/TUI. El servidor de aplicaciones lee ese estado compartido, pero algunas versiones de escritorio Codex aplican un segunda lista de permisos de modelo remoto en el renderizador y aún puede eliminar filas enrutadas del selector.
+
+Las entradas de OpenAI usan dos rutas de credenciales: inicio de sesión nativo de Codex y el espacio de nombres
+`openai-apikey/` API-clave de transporte. Cambio `codexAccountMode` entre Pool y Direct por no cambia los identificadores de los selectores. Cuando las filas de selectores calificados por cuenta están habilitadas por
+`codexAccountPickerEnabled` y `codexAccountNamespaces` Tiene selectores elegibles cuyos Las cuentas asignadas todavía existen, sin embargo, opencodex añade separado `/` filas para las cuentas asignadas y oculta las filas nativas del selector Codex. Las etiquetas selectoras son nombres públicos elegidos por el usuario sin incorporado en el significado de rol de cuenta. La selección de una fila calificada utiliza solo su cuenta asignada, no cambiar la cuenta Pool activa y se cierra en lugar de cambiar de cuenta cuando el objetivo es No disponible. Si el catálogo de cuentas de Codex contiene una identificación visible de la familia API compatible con OpenAI que aún no está en el conjunto estático de opencodex, el id exacto se conserva como una fila calificada por el selector para selectores de cuenta principal elegibles; no se copia en una cuenta no relacionada y no se agrega a la lista de modelos desnuda o API-key. La fila coincide en la forma del campo que tiene una fila de catálogo real, que filtra las entradas mal formadas — no prueba que el id provenga de una respuesta ascendente, ya que el caché es un archivo propiedad del usuario. Véase [Selectores de cuenta Codex exactos](/es/reference/configuration/routing/#exact-codex-account-selectors).
+
+`gpt-daybreak-blue-latest` está cerrada por cuenta. opencodex comprueba cada cuenta autenticada de ChatGPT propia lista de modelos Codex antes de anunciarla o enrutarla. En el modo Pool, la fila desnuda solo existe cuando al menos una cuenta Pool elegible informa la babosa. En el modo Direct, la fila desnuda sigue la cuenta utilizada por el catálogo local, y cada solicitud también comprueba la credencial de llamada reenviada (o la credencial principal almacenada cuando se sustituye una portadora de admisión OpenCodex). A
+`/gpt-daybreak-blue-latest` fila solo existe cuando la cuenta asignada de ese selector lo informa. El enrutamiento Pool excluye las cuentas sin derecho. Si no se puede confirmar ninguna lista, la fila cerrada falla en lugar de gastar una prompt en un 400 ascendente.
+
+`gpt-5.6-sol`, `gpt-5.6-terra`, `gpt-5.6-luna` y `gpt-6-astra` Están deliberadamente **no** cerrada de esa manera: se enumeran en cada instalación, independientemente de lo que diga la lista de derechos. opencodex pregunta de origen bajo una versión de cliente lo suficientemente nueva como para devolverlos, pero no puede hacer que aparezca una respuesta — una cuenta no confirmada, una búsqueda de tiempo de espera o un fragmento que no se ha puesto al día haría que el modelo desaparezca del selector sin explicación. Enumerarlos significa que se envía la solicitud y en su lugar se ve el estado ascendente real. Una cuenta que no tiene uno de estos modelos obtendrá un rechazo ascendente en el momento de la solicitud en lugar de una fila ausente, y en una cuenta múltiple Pool la solicitud ya no se dirige primero a la cuenta que posee el modelo. `disabledModels` Es la palanca para Escondiendo cualquiera de ellos.
+
+Una diferencia, explícita `customModels` entrada puede exponer el mismo identificador de cable que
+`openai/gpt-daybreak-blue-latest` a través del proveedor de reenvío canónico Codex:
+
+```json
+{
+ "customModels": [
+ {
+ "id": "daybreak-codex-forward",
+ "provider": "openai",
+ "modelId": "gpt-daybreak-blue-latest"
+ }
+ ]
+}
+```
+
+Solo ese proveedor exacto, el punto final y la identificación del modelo reciben la instantánea de capacidad de Sol fijada: 922.000 contexto, 829.800 compactación automática, la escalera de razonamiento nativa y la herramienta nativa Codex Metadatos. La solicitud sigue enviando `gpt-daybreak-blue-latest`; opencodex no lo reescribe a Sol o conceder derechos de cuenta. Los facturados por separado
+`openai-apikey/daybreak-blue-latest` La fila API es una ruta diferente y sus límites son 1.050,000 / 922,000 nunca se copian en la fila de inicio de sesión Codex.
+
+Para las filas personalizadas de Astra y Daybreak en esa canónica `openai` Codex-destino directo, explícito `reasoningEfforts` están limitados por las capacidades Codex ancladas del modelo. Una costumbre
+`["none", "minimal", "low"]` se convierte `["low"]` en el catálogo; una lista no vacía sin Los valores soportados también vuelven al valor predeterminado nativo como una sola opción. Una explícita `[]`
+permanece vacío y no tiene anuncios predeterminados. Un valor predeterminado declarado se conserva solo si pertenece a la lista resultante; de lo contrario, el valor predeterminado nativo se usa cuando está presente, luego el primer elección. La configuración personalizada almacenada no cambia y las sincronizaciones repetidas no agregan `max` Volver a la página Lista personalizada estrecha.
+
+El mismo vínculo de catálogo se aplica cuando el identificador de modelo personalizado ha fijado metadatos de capacidad nativa, incluyendo una puerta de enlace arbitraria, tal como `YYLJ/gpt-6-astra`. El escritorio valida el id del modelo, así que
+`none` y `minimal` se eliminan de esa fila de catálogo. La identidad nativa completa requiere proveedor exacto, destino e identidad de modelo respaldada por capacidad; una puerta de enlace no hereda Responses Lite, multiagente o ventanas nativas de su nombre. Astra nativa de Codex `ultra` opción se conserva: es un modo de delegación de cliente convertido a El esfuerzo de alambre apoyado, distinto del [Lista de esfuerzo del modelo API](https://developers.openai.com/api/docs/models/gpt-6-astra). La normalización de catálogos no reescribe los configuración de hilos existentes. Esfuerzo nativo en tiempo de solicitud Las pinzas permanecen canónicas hacia adelante solamente.
+
+Cuando el `codexAccountNamespaces` mapa está vacío, las filas de selector calificadas para cuenta están apagadas. Si
+`codexAccountPickerEnabled` se omite con un mapa no vacío, se tratan como habilitados para retrocompatibilidad. Ponlo a `false` para ocultar filas calificadas generadas y restaurar el nativo desnudo filas en el selector sin eliminar asignaciones o deshabilitar exactamente
+`/` enrutamiento.
+
+API Las entradas GPT-5.6 y Daybreak usan 1,050,000 contexto / 922,000 entrada máxima, y `*-pro` ids del selector resuelven al modelo del alambre base con
+`reasoning.mode: "pro"` mientras que los registros, el uso y el estado del selector mantienen la identificación virtual. El catálogo API se fija a exactamente diez ids: `gpt-5.5`, `gpt-5.6`, Sol/Terra/Luna, sus tres Pro ID virtuales, `daybreak-red-latest`, y `daybreak-blue-latest`; no hay ningún genérico
+`gpt-5.6-pro` alias. Las solicitudes compactas mantienen el nivel seleccionado pero envían el modelo base sin un objeto de razonamiento.
+
+Seleccione la ruta de credenciales representada por el identificador de selector. Cambiar Pool/Direct en la página de proveedores;
+`` a continuación es una etiqueta pública elegida por el usuario mapeada a través de `codexAccountNamespaces`:
+
+```text
+gpt-5.6-sol # bare Codex-login route via Pool or Direct
+/gpt-5.6-sol # stored Codex account mapped by that selector
+openai-apikey/gpt-5.6-sol # API key
+openai/gpt-daybreak-blue-latest # explicit Codex-forward custom row (922,000)
+/gpt-daybreak-blue-latest # account-qualified native id, only when that account reports it
+openai-apikey/daybreak-blue-latest # separate API-key route (1,050,000 / 922,000)
+```
+
+Instalación y configuración nuevas sin modo guardado por defecto en Pool. Las configuración actuales usan el marcador 2 y mantener la fuente v1 enviada en `~/.opencodex/config.json.pre-openai-tiers-v2.bak`; restaurarlo con:
+
+```sh
+cp ~/.opencodex/config.json.pre-openai-tiers-v2.bak ~/.opencodex/config.json
+```
+
+Las configuración anteriores de tres proveedores v1 migran automáticamente a la fila con una sola opción.
+
+
+
+## Limitación de lista remota de escritorio
+
+Si `codex debug models` y app-server `model/list` contiene un modelo enrutado pero el escritorio no muestra it, verifique el flujo ascendente [Codex problema ?19694](https://github.com/openai/codex/issues/19694). Con el remoto `use_hidden_models` política activa, el escritorio puede guardar solamente ids en su nativo
+`available_models` lista y también puede mostrar filas nativas cuya visibilidad del catálogo es `hide`. Las actualizaciones de catálogo y los reinicios proxy por sí solos no pueden cambiar esa directiva de renderizador.
+
+Para un modelo enrutado equivalente, opencodex proporciona un modo combo de alias nativo explícito por defecto. Publica una babosa desnuda listada con una etiqueta de visualización personalizada honesta y rutas que hacen la babosa exacta. a través del combo configurado antes del enrutamiento canónico OpenAI. También omite el nativo desnudo discapacitado filas del catálogo efectivo mientras existan alias de compatibilidad, por lo que Desktop no puede resucitar Ellos, ignorando `visibility`. Véase [Codex Compatibilidad con la lista de permisos nativa del escritorio](/es/guides/combos/#codex-desktop-native-allowlist-compatibility)
+para el comando, la semántica de la clave de desactivación y las restricciones de seguridad.
+
+
+
+### Lo que esto significa para un modelo nativo discapacitado
+
+Sin un alias nativo configurado, la desactivación de una babosa GPT nativa no lo elimina del catálogo. La fila se queda con `visibility: "hide"`, que `/v1/models` y el panel de instrumentos ambos honran — dejan de enumerar el modelo — mientras que Desktop, bajo la política anterior, puede seguir mostrándolo. Así que El modelo todavía se puede elegir en el escritorio después de deshabilitarlo, y las superficies no están de acuerdo sobre si existe.
+
+La selección no se rechaza por estar deshabilitado. `disabledModels` visibilidad del catálogo, no admisión, por lo que la solicitud se enruta por las reglas ordinarias como si el modelo estuviera habilitado: se ejecuta en el modelo que deshabilitó o falla en cualquier ruta que se resuelva. De cualquier manera el El resultado no es el que implica la palanca.
+
+La fila se mantiene deliberadamente. Contiene los metadatos ascendentes reales, por lo que vuelve a habilitar el modelo restaura esos metadatos en lugar de una suposición sintetizada. Cuando necesites que la fila desaparezca por completo más que oculto, configurar un `nativeAlias` combo: mientras uno existe, las filas nativas desnudas desactivadas son omitido del catálogo efectivo por completo.
+
+Si Codex `config.toml` pins una raíz `model` que este proxy no expone — un modelo deshabilitado entre ellos — cada nueva sesión comienza en un modelo opencodex no sirve. `ocx doctor` informes que bajo **Exposición del modelo predeterminado Codex**, como una advertencia en lugar de un fracaso, y dice cuando No se pudo determinar el conjunto expuesto en absoluto.
+
+
+
+## Ruta de integración
+
+`ocx init`, `ocx start`, y `ocx sync` cablear la configuración y el catálogo compartidos de Codex en el proxy; ver
+[Integración con Codex](/es/guides/codex-integration/) para inyección de configuración, sincronización de catálogo, shims, WebSocket fallback, y restaurar la mecánica.
+
+
+
+## Limitación de reserva de cuota nativa
+
+Cuando la aplicación Codex agota su cuota nativa de cinco horas, puede cambiar a una reserva modelo de reserva y gris las otras filas en su selector. Reportado en
+[#2813](https://github.com/lidge-jun/opencodex/issues/2813), que el gating también oculta enrutado filas opencodex, aunque estas utilizan credenciales de proveedor no relacionadas y no consumen ninguna de las Cuota ChatGPT.
+
+Esta puerta es aplicada por el cliente antes de que una solicitud llegue al proxy, por lo que opencodex no puede levantar - Sí. Las filas enrutadas se escriben con `visibility: "list"`, solo consulta de filtrado de catálogo
+`disabledModels` Cada proveedor de `selectedModels`, y ningún valor de cuota participa en la ruta Visibilidad.
+
+La selección de un modelo encaminado explícitamente no pasa por el selector. Establecer el modelo en
+`config.toml`:
+
+```toml
+model = "anthropic/claude-sonnet-5"
+```
+
+o enviarlo directamente:
+
+```bash
+ocx access test anthropic/claude-sonnet-5 --protocol responses
+```
+
+Ambos caminos se encaminan correctamente **Una vez que la solicitud llega al proxy** — esa parte está cubierta por Pruebas. Sin embargo, la aplicación de escritorio Codex no envía el modelo configurado mientras se está reservando el modo activo: decide reservar desde su propio `wham/usage` encuesta (`luna_reserve` upsell más un permitido
+`gpt-reserve` ej., un límite adicional) y obliga al ajuste del modelo a `gpt-reserve` antes de la solicitud Así que el `config.toml` La ruta se anula en la aplicación. Uso `ocx access test`, Claude Code a través del proxy (`ocx claude`), o cualquier `/v1` cliente hasta que se restablezca la ventana. Véase
+[Modelos encaminados durante el modo de reserva Codex](/es/guides/codex-integration/#routed-models-during-codex-reserve-mode).
+
+
+
+## Por qué aparecen los modelos enrutados
+
+El selector de modelos de Codex espera entradas de catálogo en forma de Codex. opencodex construye entradas enrutadas mediante clonación una plantilla de modelo nativo Codex, y luego reemplazar la identidad del modelo enrutado:
+
+```text
+slug = "anthropic/claude-sonnet-..."
+display_name = "anthropic/claude-sonnet-..."
+visibility = "list"
+```
+
+El clon mantiene campos de análisis estrictos, como niveles de razonamiento, tipo de shell, indicadores de soporte API, y instrucciones básicas. opencodex luego elimina las capacidades solo nativas que la ruta no puede cumplir, incluyendo metadatos de nivel de servicio OpenAI.
+
+
+
+## Cobertura actual del modelo estable
+
+El conjunto de reserva nativo incluye `gpt-5.5` y GPT-5.6 Sol / Terra / Luna. Para la familia GPT-5.5, conserva opencodex las entradas en vivo más ricas del catálogo Codex instalado y solo sintetiza una entrada faltante. El paquete upstream snapshot se utiliza solo para GPT-5.6, donde proporciona la identidad real por modelo y metadata en lugar de una aproximación de plantilla anterior.
+
+| Ruta | Identificadores de selección y metadatos de catálogo |
+| --- | --- |
+| Inicio de sesión Codex (filas calificadas por cuenta deshabilitadas) | Desnudos ids nativos como `gpt-5.6-sol`, `gpt-5.6-terra`, y `gpt-5.6-luna`; Pool o Direct se selecciona a través `codexAccountMode`. Las filas GPT-5.6 usan una ventana de catálogo 922,000-token. |
+| Inicio de sesión Codex (filas calificadas para la cuenta habilitadas con selectores elegibles) | Uno `/` fila por selector elegible y modelo nativo compatible; cada fila utiliza solo su cuenta asignada, y las filas nativas desnudas están ocultas para el selector. Se conservan los metadatos nativos y las ventanas de contexto. |
+| Inicio de sesión Codex (fila directa explícita de Daybreak) | `openai/gpt-daybreak-blue-latest` sólo cuando la exacta `customModels` La fila está configurada en el canónico `openai` proveedor. Mantiene la identidad de cable Daybreak y utiliza la instantánea de capacidad Sol fijada (922,000 contexto; 829.800 compactación automática). |
+| OpenAI (llave API) | Exactamente diez filas de nombres: `gpt-5.5`, `gpt-5.6`Sol/Terra/Luna, los tres `*-pro` id virtuales, y los dos alias Daybreak (1.050.000 contextos; 922.000 entradas máximas para todos los diez) |
+| OpenRouter | `openrouter/openai/gpt-5.6-sol`, `openrouter/openai/gpt-5.6-terra`, `openrouter/openai/gpt-5.6-luna` (922,000) |
+| Cursor | El fallback incluye `cursor/gpt-5.6-sol`, `cursor/gpt-5.6-terra`, y `cursor/gpt-5.6-luna` (1,000,000), más filas regulares/rápidas para Grok 4.5, 4.6 y 4.7 (500,000); 4.6 y 4.7 añadir `xhigh`, y el descubrimiento de cuenta real decide qué filas permanecen visibles. |
+| xAI | El descubrimiento en vivo es autoritario. El catálogo incluye `xai/grok-4.6` y `xai/grok-4.7` y por defecto `xai/grok-4.5`; los tres tienen 500,000-token ventanas. Grok 4.6 y 4.7 exponer `low` / `medium` / `high` / `xhigh` (por defecto: `high`), mientras que Grok 4.5 se detiene en `high`. |
+
+Las entradas GPT-5.6 fijas conservan la escalera ascendente exacta. Sol y Terra exponen `low` a través
+`ultra`; Luna se detiene en `max`. Sol por defecto a `low`, mientras que Terra y Luna `medium`. La fila explícita Codex-forward Daybreak Blue hereda la escalera de Sol y el valor predeterminado sin cambiar su identidad cableada.
+`ultra` es una opción orientada al cliente para el razonamiento máximo más delegación proactiva y llega a la backend como `max`. Una entrada de selector solo significa que el catálogo está listo: la cuenta conectada o la clave API debe seguir teniendo derecho a utilizar ese modelo.
+
+
+
+## Conmutadores de modelo nativo y enrutado
+
+La página de Modelos del panel expone `disabledModels` cambia para los ids nativos desnudos y enrutado
+`provider/model` Ids. Cuenta-calificada `/` Los ID también son apoyados por
+`disabledModels`, pero el panel de control no lista ni cambia esas filas de selectores exactas; agréguelas a Configuración manual:
+
+- Los identificadores de ruta son namespaced (`provider/model`) Deshabilitar uno lo excluye del catálogo sincronizado y `/v1/models`.
+- Uso de ID nativos calificados para la cuenta `/`. Agregando uno a
+ `disabledModels` solo oculta esa fila selectora.
+- Los ID nativos de GPT son babosas desnudas. Deshabilitar uno mantiene su entrada de catálogo pero cambia `visibility` a
+ `hide`En el que se ocultan la verdad y todo lo oculto. clon calificado por el selector para ese modelo a partir del descubrimiento.
+- Con al menos un combo de alias nativo configurado, las filas nativas desnudas deshabilitadas se omiten en lugar de mantenido oculto porque las versiones de escritorio afectadas ignoran la bandera oculta. Una babosa nativa desnuda sombreado por un alias nativo también se omite de la página Modelos, por lo que no tiene ningún conmutador nativo allí; solo las filas nativas no sombreadas permanecen conmutables. Sync restaura metadatos nativos prístinos cuando un La fila desactivada no sombreada está habilitada de nuevo.
+- Las filas nativas no sombreadas provienen del conjunto estático admitido, por lo que un modelo no sombreado desactivado permanece visible en el panel de control y se puede volver a encender.
+
+El pase de visibilidad se ejecuta después de las actualizaciones de instantáneas, y la administración API actualiza el catálogo y fuerza el modelo de caché rancio de Codex después de un cambio.
+
+
+
+## Modo de superficie multiagente
+
+El control Models-page v1/base/v2 cambia qué superficie de colaboración Codex usa cada entrada del selector; ver [Interfaz de subagentes](/es/guides/sub-agent-surface/) para el modo canónico, delegación, herencia, fallback, y comportamiento de tareas encriptadas.
+
+
+
+## Razonamiento de los niveles superiores
+
+La visibilidad del nivel de razonamiento es independiente del modo de superficie v1/base/v2. Razonamiento generado-capaz Entradas anunciar `max` así que el esfuerzo directo del sub-agente valida; actual generado enrutado entradas y más viejo nativo GPT entradas también anunciar `ultra`. Las escaleras GPT-5.6 son preservado, por lo que Luna ha `max` pero no `ultra`.
+
+En el cable, los adaptadores enrutados mapean o sujetan niveles no compatibles. Para los modelos nativos más antiguos, cuyo verdadero La escalera se detiene en `xhigh`, `nativeEffortClamp` Mapas a directo `max` o un `ultra` selección a `xhigh`
+(por ejemplo, GPT-5.5). Sol, Terra y Luna tienen un verdadero `max` peldaño.
+
+La publicidad del catálogo de los dos niveles superiores es incondicional: `ocx sync` ya no elimina `max` o
+`ultra` Cuando el instalado Codex binario es demasiado viejo para ofrecerlos — Codex Otros peldaños todavía se cruzan con la escalera de entorno de ejecución observada, y un diagnóstico de pinza registrado por un binario anterior deja de aplicarse una vez que el binario en ese camino informa de una versión diferente (el caso de actualización en el lugar), por lo que `ocx status` y `ocx doctor` stop advertising sobre una abrazadera el actualizado El entorno de ejecución ya no es necesario. La visibilidad del catálogo no es un derecho: la publicidad `max`/`ultra` No garantiza el upstream cuenta o proveedor acepta el nivel, y para los modelos nativos más antiguos cuya escalera real se detiene en
+`xhigh` la abrazadera de alambre anterior todavía mapea la selección hacia abajo en el momento de la solicitud.
+
+
+
+## Reglas de nivel rápido
+
+Codex almacena el modo rápido como:
+
+```toml
+service_tier = "fast"
+
+[features]
+fast_mode = true
+```
+
+Pero el catálogo de modelos y la solicitud en entorno de ejecución usan el ID de nivel `priority`. opencodex conserva esa división. Los modelos de paso nativo OpenAI mantienen un soporte rápido; los proveedores enrutados tienen capacidad de —
+`service_tier` se elimina solo cuando el proveedor declara `supportsServiceTier: false` (El Registro clasifica la OpenAI canónica como `true`, DeepSeek y Volcengine Ark como `false`), mientras que sin clasificar Las puertas de enlace personalizadas mantienen intactos los valores suministrados por el llamante y nunca reciben una inyección. Una puerta de enlace personalizada puede optar globalmente con `supportsServiceTier: true`o estrechamente con
+`modelSupportsServiceTier: { "verified-model": true }`; un exacto `false` estrecha un proveedor por defecto de `true`Mientras que a nivel de proveedor `false` Sigue siendo cerrado. El mismo modelo/adaptador final la decisión controla tanto los metadatos del catálogo como la inyección en entorno de ejecución, por lo que la opción rápida nunca es Anunciado donde no puede ser honrado. Un `openai-chat` destino puede autorizar todo lo contrario modelo elegible con `chatServiceTier: true`, o autorizar solo modelos exactos con
+`modelSupportsServiceTier`; Las rutas Responses no necesitan esa autorización de cable de chat adicional.
+
+
+
+### Selección ultra rápida en el escritorio Codex
+
+Para un proveedor que apoya `service_tier: "ultrafast"`, declara que el mapeo de cables una vez. opencodex luego publica **Ultra rápido** en el menú de velocidad Codex nativo del modelo encaminado; No hay necesidad de editar `opencodex-catalog.json` Después de cada sincronización. Por ejemplo, fusione estos campos en un proveedor API configurado para GPT-6.1 Sol:
+
+```json
+{
+ "models": ["gpt-6.1-sol"],
+ "modelSupportsServiceTier": { "gpt-6.1-sol": true },
+ "fastWire": {
+ "kind": "service-tier",
+ "canonicalToWire": { "priority": "priority", "ultrafast": "ultrafast" },
+ "foreignCallerTiers": "verbatim"
+ }
+}
+```
+
+La asignación se aplica a todos los modelos Fast-elegibles en ese proveedor. Utilice un proveedor separado entrada si solo algunos de sus modelos son compatibles con Ultra Fast. Mantener el modo Rápido de opencodex activado **Automático**
+(omitir `fastMode`) para que la selección de velocidad de la aplicación llegue al proveedor; forzado
+`priority`, y forzado por defecto cae el nivel. Actualizar el catálogo de modelos, reiniciar Codex Escritorio si todavía tiene la lista anterior, seleccione el modelo enrutado y luego elija **Ultra rápido**
+en su menú de velocidad. El estándar sigue siendo el valor predeterminado.
+
+Sólo un elegible `service-tier` cable con un explícito `ultrafast → ultrafast` Mapeo agrega esta opción a filas enrutadas; soporte rápido ordinario o un nombre similar a GPT es insuficiente. Esa asignación enrutada no se aplica a filas nativas/de cuenta o alias combinados. Eliminando el asignación o desactivación del soporte de nivel de servicio de ese modelo elimina la opción enrutada generada desde el catálogo y la caché en la siguiente sincronización exitosa. La declaración activa también controla la opción Ultra Fast cuando Codex carga su lista de modelos a través de HTTP.
+
+Para filas enrutadas, `ultraFastTier` mantiene los niveles Ultra Fast suministrados de forma independiente desde el misma fila persistente exacta; los niveles enrutados generados no se tratan como suministrados por el operador. Para los nativos desnudos `gpt-6-astra` / `gpt-6.1-sol` sus filas y sus clones de confianza, habilitación `ultraFastTier` también genera una opción ultrarrápida que falta sin cambiar el Nivel por defecto nativo. Deshabilitarlo retira solo los metadatos de nivel nativo rastreados según se generan; Se conservan los descriptores de nivel nativos suministrados o editados independientemente.
+
+[OpenAI's API guía](https://developers.openai.com/api/docs/guides/ultrafast-mode) documentos Ultrarrápido para GPT-6 Astra y GPT-6.1 Sol. API acceso y
+[Acceso al plan/espacio de trabajo Codex](https://learn.chatgpt.com/docs/agent-configuration/speed)
+están separados. La elección del menú no otorga acceso al proveedor ni garantiza la velocidad medida; Ultra Fast aumenta el uso / costo, y los propios requisitos de características de Codex aún se aplican.
+
+
+
+## Selección de subagentes
+
+Codex ordena las entradas del catálogo visible por ascendente `priority` y anuncia los primeros cinco como
+`spawn_agent` modelo anula. La página de subagentes del panel de control puede seleccionar y guardar hasta cinco id nativos o enrutados `provider/model` Ids. Configurado manualmente `subagentModels` También acepta cuenta-calificada `/` ID, pero el panel de control no ofrece ID exactos; guardar la página reemplaza la lista con opciones visibles en el panel de control. opencodex asigna bajo prioridades del catálogo en el orden seleccionado; cuando se habilitan las filas de selectores calificados para la cuenta, selecciones nativas básicas expandirse en grupos selectores calificados. Otros modelos siguen siendo invocables por id exacto.
+
+La lista de modelos destacados está separada de la lista del Dashboard. **Delegación de subagentes** selección. Lo controles que anula Codex ofrece primero; no selecciona un modelo o designe delegación por sí mismo.
+
+
+
+## Servidores remotos de escritorio
+
+Codex El modo de servidor remoto del escritorio filtra el selector contra el propio cliente
+`available_models` allowlist (activo cuando el control remoto `use_hidden_models` El ajuste está activado). Encaminado Las entradas del catálogo todavía se cargan y sirven - `model/list` devuelve y el CLI incluido lee - pero el renderizador de escritorio deja caer cualquier cosa que no esté en esa lista de permisos solo nativa antes renderizado. opencodex no tiene ningún gancho en esa lista; el error de flujo ascendente se rastrea en
+[openai/códex : 19694](https://github.com/openai/codex/issues/19694).
+
+Until Desktop expone un control para la lista de permisos:
+
+- Establecer el modelo directamente en `~/.codex/config.toml` en la máquina remota, por ejemplo
+ `model = "input/grok-4.5"`. El selector puede mostrar `Custom`, pero las solicitudes siguen utilizando el modelo encaminado.
+- Utilice Codex CLI o TUI en lugar del selector de escritorio; no aplican la lista de permisos y la lista modelos normales.
+
+
+
+## Estado del modelo refrescante
+
+Si el selector sigue mostrando entradas obsoletas, actualice el catálogo y reinicie la superficie Codex de destino:
+
+```bash
+ocx sync
+```
+
+opencodex reescribe `models_cache.json` con un envoltorio de caché deliberadamente rancio cada vez que catálogo visibilidad, prioridad o cambios de metadatos, por lo que la próxima actualización del modelo Codex lee el nuevo catálogo.
+
+Después de escribir un catálogo o modelo-caché, OpenCodex invalida su observación del servidor de aplicaciones en caché para que la siguiente solicitud verifique la frescura del proceso nuevamente. Una sincronización de configuración también invalida la observación cuando el contenido del catálogo no cambia. Esta actualización no reinicia los procesos Codex.
diff --git a/docs-site/src/content/docs/es/guides/codex-integration.md b/docs-site/src/content/docs/es/guides/codex-integration.md
new file mode 100644
index 00000000000..e0e6aa14fda
--- /dev/null
+++ b/docs-site/src/content/docs/es/guides/codex-integration.md
@@ -0,0 +1,999 @@
+---
+title: "Integración con Codex"
+description: "Cómo se inyecta opencodex en Codex, sincroniza el catálogo de modelos, instala shims y restaura limpiamente."
+---
+
+opencodex hace la ruta Codex a través del proxy editando dos cosas que Codex lee: su configuración (`$CODEX_HOME/config.toml`, por defecto `~/.codex/config.toml`) y su catálogo de modelos. Cada edición es idempotente y reversible.
+
+Los **Conectar** Vista general tiene un conmutador Codex para esta integración nativa. Su interruptor muestra el último estado deseado guardado de la configuración de OpenCodex, incluyendo inmediatamente después de un cambio, mientras que la insignia informa si Codex es observado actualmente usando el proxy; durante la limpieza, esos pueden diferir brevemente mientras la insignia Informe del estado observado. Deshabilitar los nombres de la configuración efectiva de Codex archivo, elimina los artefactos de enrutamiento generados por OpenCodex y deja el proxy en ejecución para otros clientes. Volver a habilitar reconstruye el catálogo de los modelos disponibles en ese momento, por lo que no restaurar el byte de archivos Codex para el byte.
+
+Para modelos Codex nativos desnudos y filas de selector de cuenta generadas por OpenCodex, el catálogo incluye Metadatos autenticados del programa de acceso. Los modelos desnudos usan la cuenta principal Codex; cuenta calificada Los modelos usan su cuenta seleccionada. Actualizar la integración actualiza estas filas cuando se está en el flujo ascendente Cambia los programas de acceso a la cuenta. OpenCodex lleva la solicitud de disponibilidad del modelo en vivo de la cuenta principal iniciada a las filas del modelo nativo desnudo.
+
+El proxy expone uno desnudo `openai` Ruta de inicio de sesión Codex con los modos de cuenta Pool(predeterminado) y Direct, más `openai-apikey/` para la clave API configurada. Pool incluye las principales cuentas añadidas; Direct utiliza solo el llamante/portador principal. Las rutas no se vuelven a caer unas a otras. Enviado v1 configs migran al marcador 2 y preservan `config.json.pre-openai-tiers-v2.bak` para la restauración manual.
+
+Dentro del modo Pool, una solicitud que lleve un inicio de sesión nativo validado de Codex puede usar ese inicio de sesión cuando se la cuenta almacenada seleccionada se está enfriando y no hay alternativa almacenada elegible o sonda de recuperación disponible. Esto también cubre una nueva solicitud bloqueada antes de enviar, siguiendo la misma llamada. Validación utilizada después de un rechazo ascendente. Política de permisos modelo y cuenta principal existente los cheques siguen siendo aplicables. El respaldo conserva el tiempo de reutilización de la cuenta almacenada y no persiste el credencial de llamada como la selección Pool. Una cuenta exacta sigue vinculada a esa cuenta.
+
+
+
+## Inyección de configuración
+
+`ocx sync` elimina los esfuerzos de razonamiento no soportados por el entorno de ejecución Codex seleccionado del catálogo. Informa de una pinza cuando cambia su identidad en entorno de ejecución, elimina esfuerzos o modelos afectados; sin cambios syncs preserva la marca de tiempo de diagnóstico y no repite ese aviso. Esta compatibilidad La proyección no requiere correr `ocx doctor`. Si una abrazadera se limpia y luego regresa, se informa nuevamente.
+
+OpenCodex serializa su escritura de configuración Codex. En Windows, un archivo se mantiene temporalmente abierto por otro proceso obtiene un breve, limitado reintento. Si el acceso permanece ocupado, vuelva a intentar la operación en breve; OpenCodex conserva la evidencia de bloqueo existente y no utiliza ese fallo de acceso para asumir el control El bloqueo de otro escritor.
+
+`ocx init`, `ocx start`, y `ocx sync` Llame al inyector. En el enlace de bucle predeterminado, se mantiene Codex incorporado `openai` ID de proveedor y apunta a ese proveedor en opencodex:
+
+```toml
+# root keys, before the first table
+model_catalog_json = "/absolute/path/to/opencodex-catalog.json"
+# Auto-injected by opencodex (undo: ocx restore)
+openai_base_url = "http://127.0.0.1:10100/v1"
+# Auto-injected by opencodex (undo: ocx restore)
+experimental_realtime_ws_base_url = "http://127.0.0.1:10100/v1"
+
+# only when fastMode is set; unset adds no [features] table
+[features]
+fast_mode = true
+```
+
+La segunda clave es la anulación de banda lateral de voz. Codex crea una llamada de voz WebRTC
+`openai_base_url`, pero desde el códice 0.146 (openai/codex .35830) se une a la banda lateral de esa llamada WebSocket en `api.openai.com` directamente a menos que `experimental_realtime_ws_base_url` Lo redirecciona. En El modo Pool la llamada se crea bajo la cuenta que selecciona opencodex, así que una unión directa bajo el nombre de la aplicación Inicio de sesión propio falla con `realtime websocket handshake failed` (404). La llave inyectada envía la unión volver a través de opencodex (`GET /v1/live/{callId}`), donde el Pool reutiliza la cuenta vinculada a esa par sesión/hilo (un enlace process-local). Una llamada que el propio cliente creó es la excepción: cuando la voz de ChatGPT entrega una llamada a un hilo Codex, o Codex Desktop crea la llamada por sí sola, la llamada pertenece a su inicio de sesión ChatGPT y solo su combinación de banda lateral alcanza opencodex, por lo que opencodex reenvíos que se unen con la credencial ChatGPT propia de la persona que llama en lugar de una cuenta Pool. En Direct modo ambas piernas ya usan la llamada portadora actual, por lo que la clave solo mantiene la unión en la ruta proxy. Está escrito solo en el bucle
+`openai_base_url` forma, se elimina junto con ella, y un usuario
+`experimental_realtime_ws_base_url` Nunca se sobrescribe.
+
+
+
+### Transporte de voz y traspasos de tareas
+
+Codex posee el micrófono y el altavoz, negociación de medios WebRTC, subtítulos, controles de silencio y limpieza de voz al cambiar de hilo. OpenCodex retransmite la creación de llamadas y la conexión de banda lateral; trabajo delegado por voz utiliza la ruta de enrutamiento Responses normal. Elegir un proveedor de texto hace no reemplazar el modelo de voz en tiempo real o habilitar la voz en un cliente que no lo soporta.
+
+El upstream [Cambio de ayudante WebRTC](https://github.com/openai/codex/commit/1b53f6a44eff890b5169bde8d3bd5b12b8766946)
+y [Integración de voz TUI](https://github.com/openai/codex/commit/b01c3986fd2e79b8a477a08d81430f52f22bc0dc)
+describa estas responsabilidades del cliente, incluidas las respuestas finales de los traspasos de voz. Sus fechas de fusión no se establecen cuando el mismo comportamiento llegó a la aplicación de escritorio.
+
+Opcional `OCX_LIVE_FRAME_LOG` diagnosis write only frame timestamp, dirección, tipo, recuento de bytes, y una bandera de caracteres de reemplazo (`ts`, `dir`, `kind`, `bytes`, `fffd`) No almacenan la voz Texto o extractos de marcos. Para tramas binarias, la decodificación UTF-8 puede producir por sí misma un reemplazo Por lo tanto, la bandera por sí sola no identifica dónde ocurrió la corrupción. Archivos de registro existentes no se reescriben.
+
+
+
+### Modo rápido
+
+El inyectado `fast_mode` sigue el tri-estado `fastMode` ajuste: `true` escribe `fast_mode = true`,
+`false` escribe `fast_mode = false`, y unset deja una existencia `fast_mode` Sin tocar sin Añadir un `[features]` mesa.
+
+El modo rápido está separado del transporte de voz. Descripción de la velocidad del nivel de servicio de un modelo compatible no garantiza un micrófono inferior, WebRTC o latencia de voz de extremo a extremo a través de OpenCodex.
+
+
+
+### Canal y latencia de la familia ChatGPT
+
+Solicitudes enrutadas a través de opencodex a través del registro canónico ChatGPT `openai` proveedor — adaptador
+`openai-responses`, `authMode: "forward"`, y el `https://chatgpt.com/backend-api/codex`
+Endpoint, que cubre los modos Pool y Direct —, utiliza el endpoint público ChatGPT. Enrutamiento del proveedor o la selección de cuenta no pasa por alto el canal ChatGPT ascendente. El upstream puede pasar tiempo poner en cola una solicitud antes de la primera salida, incluso cuando el proxy local y la ruta de red están sanos.
+
+Solo algunas vueltas toman el transporte ChatGPT websocket — lo mismo `responses_websockets` carril Codex CLI por defecto. Un turno es elegible cuando el entorno de ejecución Bun admite el relé limitado, la solicitud es un `POST` Responses URL o una ruta WebSocket configurada, y sus conjuntos de cuerpo JSON
+`stream` a `true` en la raíz. Todo lo demás permanece en SSE sobre HTTP, y un giro elegible todavía Cuando la solicitud no puede ser preparada, el `response.create` El marco supera su tamaño límite, o la ruta proxy no puede llevar el socket.
+
+Para mantener el proveedor integrado de ChatGPT en HTTP/SSE, establezca `providers.openai.upstreamWebsocket`
+a `false` en `~/.opencodex/config.json` Reiniciar el proxy. Combinar este campo en el existentes `openai` proveedor; preservar su modo de cuenta y otras configuración. Omita el campo para restaurar la selección WebSocket ascendente predeterminada. Esta configuración no cambia el cara al cliente `websockets` switch o la cuenta ChatGPT utilizada para la solicitud. Nativo La dirección y la inyección a mitad de vuelta necesitan corriente arriba WebSocket y no están disponibles mientras está apagada.
+
+El ritmo del proveedor local también puede contener una solicitud antes de que se envíe. Así que un lento primero La salida tiene varios posibles contribuyentes, y la cola ascendente es solo uno de ellos. `ocx doctor`
+clasifica la configuración y no mide ninguno de estos: comparar el transporte real, el ritmo, la red, y observaciones del proveedor antes de concluir.
+
+Lo que decide si una solicitud toma ese canal público es el destino al que se resuelve, no el nombre de la entrada del proveedor. Un proveedor que resuelve en otro lugar — `openai-apikey`, o a entrada personalizada que apunta a su propio API — llega a ese punto final directamente y no ve ninguna cola ChatGPT. Una entrada con nombre personalizado que resuelve `https://chatgpt.com/backend-api/codex` con el auth hacia adelante toma el mismo canal público que la fila incorporada, porque la clasificación lee el adaptador, modo auth y destino en lugar del nombre de la entrada.
+
+Los `ocx doctor` es más estrecho que el comportamiento de punto final que describe: inspecciona solo el incorporado `openai` fila, por lo que su ausencia no le dice nada acerca de dónde se resuelve cualquier otro proveedor.
+
+`service_tier: priority` es una preferencia de petición. En el backend ChatGPT el eco
+`service_tier` no puede confirmar o denegar el nivel concedido: los turnos programados como prioridad aún pueden echo `default`, por lo que los registros de solicitud muestran el nivel de respuesta como una observación con confirmación
+`assumed`. Para el trabajo sensible a la latencia, compare los tiempos de primera salida observados entre los proveedores que usted en lugar de asumir que cualquier canal en particular es más rápido.
+
+Para un reenvío de puerta de enlace a un backend con la misma limitación de metadatos, declarar explícitamente
+[`responseTierAuthoritative: false`](/es/reference/configuration/providers/#response-service-tier-authority)
+en ese proveedor. La solicitud sigue enviando prioridad y registra el eco sin procesar, mientras que la Fast real La programación sigue sin confirmarse. Los gateways no declarados y el API oficial mantienen su existencia interpretación basada en respuestas. La actualización de OpenCodex por sí sola no agrega esta declaración a la existente Entradas de puerta de enlace: sin ella, una solicitud de prioridad elegible seguida de una `default` Echo todavía registros
+`response-declined`.
+
+El proxy escucha en el puerto `10100` por defecto y sirve `POST /v1/responses`,
+`POST /v1/responses/compact`, `POST /v1/images/generations`, `POST /v1/images/edits`,
+`GET /v1/models`, `GET /healthz`, y el `/api/*` superficie de gestión.
+
+
+
+### Gestión de contexto experimental (Codex 0.153+)
+
+Para una cuenta elegible de ChatGPT, habilite la función experimental en el propio Codex
+`config.toml` (Mezclar esto en una `[features]` cuadro):
+
+```toml
+[features]
+context_management.experimental_mode = true
+```
+
+En la integración de loopback integrada predeterminada, el siguiente `ocx sync` o proxy inicio cambia el root administrado `openai_base_url` a `http://127.0.0.1:10100/backend-api/codex`. Codex comprueba esto backend antes de habilitar su `new_context`, historia y herramientas de notas. Iniciar un nuevo Codex sesión después de la sincronización. La función sigue siendo opt-in; URLs base de propiedad del usuario y remoto La inyección de proveedor personalizado no se reescribe. Sin ventana de contexto o limitación de compactación Es necesario o añadido.
+
+El prefijo backend alias las rutas de plano de datos existentes, incluyendo Responses WebSocket Actualizaciones. El original `/v1` rutas y la anulación de banda lateral en tiempo real permanecen disponibles. Los proxy también transmite los diez nativos `alpha/history/v2/*` y `alpha/notes/v2/*` POST puntos finales A través de la incorporada `openai` proveedor con el `openai-responses` adaptador y canónico ChatGPT destino hacia adelante. Direct utiliza el inicio de sesión actual de la persona que llama/principal; Pool selecciona un Codex cuenta. `openai-apikey` utiliza su clave API configurada, y Responses personalizada o no canónica Los proveedores no son candidatos para este contexto y no reciben credenciales de cuenta Codex de ella. Estos endpoints privados no son implementados por otros proveedores de modelos o por el OpenAI. Ruta API-key.
+
+Los encabezados de las llamadas están restringidos a la lista de permisos de reenvío Codex compartida: `authorization`,
+`chatgpt-account-id`, y aprobado OpenAI beta, originador, sesión, y metadatos de protocolo Codex. El relé de contexto se adelanta adicionalmente `x-openai-encrypted-tool-arguments` y
+`x-openai-tool-output-truncation-policy`Los encabezados de llamadas arbitrarios, como las cookies, no son Reenviado. Una clave de plano de datos proxy presentada como portadora se sustituye por la Codex seleccionada. credencial (el inicio de sesión principal almacenado en Direct); las credenciales faltantes fallan antes del reenvío. Las credenciales de admisión de proxy nunca van hacia arriba. Los argumentos cifrados, los cuerpos de respuesta y Se conservan los estados de error ascendentes.
+
+Una respuesta de modelo ChatGPT exitosa registra la cuenta de servicio real de la sesión raíz en un limitado, registro de propiedad local del proceso. El historial y las notas usan ese propietario registrado, incluyendo una cuenta seleccionada explícitamente, incluso cuando cambia la cuenta activa actual. Cuenta almacenada token actualizar puede continuar para la misma cuenta física; se rechaza una identidad de cuenta reemplazada. Las sesiones propiedad del llamante Direct mantienen la credencial del llamante y no pueden ser tomadas por un portador proxy. Esto no migra el historial del lado del servidor entre cuentas.
+
+La propiedad está particionada por la clave opencodex API que admitió la solicitud, por lo que dos claves nunca llegar a las sesiones del otro incluso cuando ambos se resuelven en el mismo espacio de trabajo ChatGPT. Un ID de espacio de trabajo nombres de una organización en lugar de una persona, por lo que el registro también vincula al usuario la credencial aceptada: una actualización ordinaria de token para ese mismo usuario continúa sesión, mientras que un usuario diferente en el mismo espacio de trabajo no lo hace. Cuando la credencial no demuestra un usuario estable, solo que la credencial exacta continúa. Ese principal es la clave opencodex API que presenta la solicitud. Un enlace remoto ya requiere uno, Así que la propiedad funciona allí. En el bucle de retorno predeterminado, la opencodex admite solicitudes sin leer un y la inyección de bucle invertido incorporada no puede llevar el `x-opencodex-api-key` encabezado, por lo que Codex no presenta ninguna clave opencodex y el historial de contexto devuelve HTTP 403. **Por lo tanto, el relé está disponible en un enlace remoto con una clave configurada, o a un cliente que envía `x-opencodex-api-key` propio, y no a través de la integración built-in loopback predeterminada.** Si un proxy enlazado por bucle debería ser poder nombrar a una persona que llama es una decisión abierta de mantenimiento, por lo que el comportamiento actual se niega en lugar de adivinar.
+
+La propiedad desconocida, caducada, desalojada, conflictiva o reiniciada-perdida devuelve HTTP 409 antes de la cuenta selección o E/S de origen. El relé no se calcula a partir de la cuenta activa actual. Existentes Las sesiones deben guardar un punto de control u otro resumen duradero antes de habilitar la función o restablecerla. contexto. Habilitarlo no rellena la historia anterior o notas, y una nueva observación de propiedad no prueba que exista contenido backend más antiguo. Después de un reinicio, establezca la propiedad con un solicitud de modelo exitosa antes de usar herramientas de contexto; inicie una nueva sesión cuando haya conflictos de propiedad.
+
+Las reglas de afinidad, tiempo de reutilización y reintento del modelo existente no cambian. Las solicitudes de contexto no son Recuperado automáticamente, incluyendo notas escritas; Las solicitudes de reenvío ChatGPT no usan la misma clave 429 repetición. El tráfico del historial no consume ni establece una sonda de recuperación de cuotas del modelo.
+
+Una fecha límite de 35 segundos cubre toda la operación de retransmisión, comenzando antes de que se lea el cuerpo de la solicitud. y cubriendo la selección de credenciales, por lo que un cliente estancado no puede mantener abierta una ranura de giro admitida. Una desconexión del cliente devuelve 499 y una fecha límite vencida devuelve 504; no se envía nada de origen después de cualquiera de ellos.
+
+Para desactivar la función, quite la clave experimental (o configúrela `false`), correr `ocx sync`, e iniciar una nueva sesión Codex. La base raíz administrada vuelve a `/v1`.
+
+La clave está ausente o `false` el relé no existe: los diez puntos finales responden 404 para cualquier La persona que llama, incluyendo uno que los publica directamente, y un modelo de turno no registra la propiedad del historial. opencodex decide esto leyendo la propia configuración de Codex, por lo que el conmutador no depende de la URL inyectado o en cualquier cosa que envíe un cliente, y desactivarlo tiene efecto sin reiniciar.
+
+
+
+### Resultados de imágenes alojadas en la aplicación Codex
+
+Cuando un proveedor de Responses enrutado devuelve un servidor alojado completado `image_generation_call`
+con datos de imagen base64, opencodex guarda la imagen validada en su
+`artifacts/` directorio y entrega un mensaje final de imagen de asistente a un cliente Codex conectado. La imagen permanece fuera de la sección de progreso plegable. Esto se aplica a la transmisión y no transmisión Responses, sin otra generación solicitud o un cambio en el proveedor seleccionado.
+
+Cuando un cliente reproduce estos mensajes de imagen generados como historial de asistente, opencodex reemplaza sus enlaces de imagen local generados con referencias de artefactos opacos antes de reenviar esa historia. Esto protege las rutas de visualización sin cambiar la imagen mensaje que ya se muestra en la aplicación. No elimina rutas no relacionadas suministradas por el usuario.
+
+Esta compatibilidad de pantalla requiere la admisión de loopback y un cliente reconocido Codex. Los clientes API remotos y genéricos conservan el formato de respuesta alojado del proveedor. Las previsualizaciones parciales y los resultados solo de URL no se representan en esta capa de compatibilidad. Los artefactos usan el límite de retención existente, por lo que debes guardar las imágenes que quieras conservar antes. Los archivos más antiguos están podados. Una imagen no válida o una escritura local fallida produce una imagen visible. mensaje de error en lugar de un enlace de imagen roto. Mostrar lotes rechazar imagen duplicada identidades, metadatos de enrutamiento sobredimensionados y salida que exceda el límite de bytes de visualización; estos fallos devuelven HTTP 502 antes de la transmisión o un evento de terminal fallido después de que se inicia.
+
+
+
+### Generación de imágenes incorporada (`image_gen`)
+
+Codex incorporado `image_gen` La herramienta no pasa `/v1/responses` — la extensión códex-rs POSTs `{base_url}/images/generations` (o `/images/edits` cuando se adjuntan imágenes de referencia) directamente, con la misma autenticación de portador ChatGPT que utiliza para el chat. Porque el inyectado `base_url`
+puntos en opencodex, el proxy retransmite esas llamadas a la OpenAI de origen.
+
+Esto es separado de la [Puente de imágenes](/es/guides/image-bridge/), que solo se activa cuando un
+**Responses** turn lista los hosts `image_generation` herramienta mientras se selecciona un modelo que no sea OpenAI. Independiente `/images/generations` Las llamadas nunca entran en ese puente.
+
+- **Un candidato avanzado con conciencia de modo:** Pool selecciona una cuenta principal/añadida elegible y utiliza su ChatGPT credencial incluso cuando el cliente se autentica opencodex con un portador de admisión proxy. Direct Utiliza el llamador ChatGPT OAuth portador y no puede reenviar una admisión proxy token. El modo configurado se aplica de manera coherente a la solicitud de imagen.
+- **OpenAI Proveedor de clave API:** solo se utiliza cuando ningún candidato posee una autenticación fracaso. Una credencial Pool rota / expirada nunca se oculta detrás del uso facturado por separado API.
+- **Proveedor personalizado explícito:** conjunto `images.provider` al id de una clave API personalizada
+ `openai-responses` proveedor cuyo punto final implementa las imágenes OpenAI API. Selección explícita falla cerrado y nunca cae de nuevo a un diferente pagado de origen. ID de proveedor administrado por el registro no se aceptan aquí; omita `images.provider` para usar los niveles OpenAI incorporados.
+- **xAI Imagine (Grok OAuth) relé:** cuando `images.bridgeEnabled` es `true`, `images.provider` es Omitido, y un `xai` El proveedor está configurado, `/v1/images/generations` y `/v1/images/edits`
+ son enviados a `https://api.x.ai/v1`. La credencial depende del proveedor `authMode`: con
+ `"oauth"` el relé reutiliza la concesión Grok CLI de `ocx login xai`con cualquier otro modo que utilice la clave API del proveedor. Un inicio de sesión OAuth no activa un proveedor con llave, y viceversa. ChatGPT No se reenvían las credenciales. Si falta la credencial, el proxy devuelve 400 en lugar de 400. facturación ChatGPT. Configuración `images.provider` explícitamente manos `/v1/images` a ese proveedor; su Los errores de validación propios se devuelven tal cual y el relé xAI nunca se prueba. Los mapas de retransmisión Codex `size` / `aspect_ratio` en el cuerpo Imagine de xAI y regresa El mismo `{created, data:[{b64_json}]}` forma. Bytes decodificados combinados y salida codificada en base64 a través del lote (en línea `b64_json` URLs descargadas) permanecen por debajo de 100 MiB; un lote que sobrepasar ese límite devuelve 502. Cuando xAI devuelve una imagen URL en lugar de bytes en línea, el proxy obtiene ella misma sin credencial: el URL debe ser público HTTPS (sin redirecciones, sin
+ `file:`, sin loopback o direcciones privadas), cada descarga está limitada a 50 MiB, y el resultado es materializado como un artefacto local que se sirve solo a través de la gestión autenticada punto final. Esto es independiente del bucle de puente de imagen Responses (que permanece solo en la clave API).
+- **Antigravedad Google (CCA) fallback:** cuando ni un candidato a reenvío OpenAI ni un candidato con clave El proveedor está configurado, `/v1/images/generations` (no `/images/edits`) vuelve a la Antigravedad **Asistencia de código en la nube** usando el comando `gemini-3.1-flash-image` modelo. El fallback también se dispara después de que falla la resolución de autenticación de OpenAI (e.g. una credencial ChatGPT caducada o faltante), no solo cuando no se configura ningún candidato OpenAI. Esto requiere `ocx login google-antigravity`; el OAuth token se envía solo al registro CCA anclado host, nunca a un nivel de configuración `baseUrl` Anular. La respuesta se devuelve en el mismo
+ `{created, data:[{b64_json}]}` forma que Codex espera.
+- **Tampoco:** el proxy devuelve un error claro en lugar de un 404 genérico. Proveedores encaminados (Cursor, Gemini, Kiro, …) `image_generation` herramienta de retransmisión; si no desea el herramienta que se ofrece en absoluto, desactivarlo en Codex con `codex features disable image_generation`
+ (`[features] image_generation = false` en `config.toml`).
+
+La declaración de la herramienta sigue viajando con la solicitud Responses del modelo. Para API-llave Responses proveedores, opencodex reduce la privacidad de Codex `image_gen` espacio de nombres a un nivel seguro
+`image_gen__` alias (por ejemplo `image_gen__imagegen`) Cuando ese alias utilizable reemplaza la declaración de cliente, opencodex elimina un duplicado alojado `image_generation` declaración. Se mapea Llamada a la función explícita `image_gen` espacio de nombres antes de que Codex lo vea y codifique el llamar de nuevo cuando el historial posterior se reproduce de origen. Esto mantiene la generación de imágenes del lado del cliente llamable en upstreams compatibles con el público que reservan el espacio de nombres o rechazan los nombres de funciones punteadas. ChatGPT El modo de avance permanece intacto y mantiene su forma nativa Responses Lite.
+
+Para una puerta de enlace personalizada compatible con OpenAI, configure un proveedor dedicado y selecciónela solo para Solicitudes de imágenes independientes:
+
+```json
+{
+ "providers": {
+ "custom-images": {
+ "adapter": "openai-responses",
+ "baseUrl": "https://gateway.example.com/v1",
+ "authMode": "key",
+ "apiKey": "${IMAGE_GATEWAY_API_KEY}"
+ }
+ },
+ "images": {
+ "provider": "custom-images",
+ "timeoutMs": 300000
+ }
+}
+```
+
+El endpoint personalizado debe aceptar `POST /v1/images/generations` y `/v1/images/edits` y devolver el OpenAI Forma de respuesta de las imágenes esperada por Codex. La clave configurada por el proveedor reemplaza a cualquier llamante portadora antes de la solicitud ascendente.
+
+> **Nota:** Esto se refiere solo a la Codex `image_generation` herramienta (`/images/generations` relé). > Los modelos Gemini que son capaces de producir imágenes en línea de forma nativa a través del `google` adaptador > (vía `responseModalities: ["TEXT", "IMAGE"]`), independiente de este relé — ver
+> [Adaptadores](/es/reference/adapters/#google).
+
+Para un no-loopback `hostname`, Codex debe enviar la cabecera de autenticación API generada. Por lo tanto, el inyector Utiliza un proveedor dedicado en su lugar:
+
+```toml
+# root keys
+model_provider = "opencodex"
+model_catalog_json = "/absolute/path/to/opencodex-catalog.json"
+
+# appended at the end of the file
+# Auto-injected by opencodex (undo: ocx restore)
+[model_providers.opencodex]
+name = "OpenCodex Proxy"
+base_url = "http://your-host:10100/v1"
+wire_api = "responses"
+requires_openai_auth = true
+env_key = "OPENCODEX_API_AUTH_TOKEN"
+# supports_websockets = true # only when config.websockets is true
+```
+
+Cuando OpenCodex posee enrutamiento, ambos modos escriben `$CODEX_HOME/opencodex.config.toml` como a configuración de referencia/retroceso. En loopback que contiene las claves de raíz se puede combinar manualmente si automático se eliminó la inyección; en no bucle de retorno contiene el formulario de proveedor dedicado. Proveedor externo El modo deja este perfil intacto.
+
+:::caution
+Claves de raíz como `openai_base_url`, `model_provider`, y `model_catalog_json` **debe** sentarse antes de la primero `[table]` cabecera. El inyector garantiza esa colocación, elimina su propio rancio / duplicado copia, y nunca sobrescribe una raíz propiedad del usuario `openai_base_url`; si existe, la sincronización actualiza el catálogo, pero informa que el enrutamiento no fue inyectado.
+:::
+
+
+
+## Catálogo de modelos compartido
+
+Codex CLI, TUI, App y SDK leen la misma casa Codex. opencodex resuelve ese directorio desde
+`CODEX_HOME`, cayendo de nuevo a `~/.codex`, y gestiona:
+
+```text
+$CODEX_HOME/config.toml
+$CODEX_HOME/opencodex.config.toml
+$CODEX_HOME/opencodex-catalog.json
+$CODEX_HOME/models_cache.json
+```
+
+En marcha macOS, opencodex comprueba la Codex Apps agrupadas CLI en `/Applications/ChatGPT.app` y luego `~/Applications/ChatGPT.app` después de selecciones explícitas, shims, PATH, instalaciones establecidas y el ejecutable bare `codex` fallback, requiere XML del paquete `Info.plist` identidad para ser `com.openai.codex`, y nunca reemplaza automáticamente una selección persistente ejecutable con un candidato de aplicación.
+
+En WSL, si `CODEX_HOME` está desactivado y el Linux `~/.codex` directorio está ausente o no contiene ningún estado Codex (`config.toml`, `auth.json`, `sessions`, `history.jsonl`), opencodex también comprueba si hay un único Windows Codex Escritorio `/mnt/c/Users/*/.codex/config.toml`. Cuando existe exactamente un candidato, utiliza ese directorio para WSL modo de aplicación-servidor y Windows Codex El escritorio comparte los mismos archivos de configuración y autenticación. `CODEX_HOME` explícitamente para anular esta detección. Cuando Windows Codex Desktop ejecuta su aplicación-servidor dentro de WSL, envía el binario Linux Codex bajo ese hogar como `bin/wsl//codex`; opencodex lo encuentra allí cuando el servicio PATH no tiene `codex`, después de cualquier entorno de ejecución configurado explícitamente y PATH.
+
+Si existe la casa Codex pero Codex no ha escrito `config.toml` (por ejemplo, una nueva instalación de escritorio que nunca se ha iniciado sesión en OpenAI), opencodex crea un `config.toml` allí y continúa. Si el directorio principal en sí no existe, inicie Codex una vez para que lo cree o establezca `CODEX_HOME`.
+
+Codex puede mantener el estado del subproceso respaldado por SQLite en un directorio separado. Uso de operaciones del historial OpenCodex la misma precedencia que Codex: root `sqlite_home` en `config.toml`Entonces, `CODEX_SQLITE_HOME`Entonces, el eficaz `CODEX_HOME`. Los hogares SQLite relativos se resuelven desde el directorio de trabajo actual. Cuando un explícito `CODEX_SQLITE_HOME` está presente durante la instalación o reparación de servicio, el lanzador durable almacena su ruta absoluta de tiempo de instalación para que el proxy en segundo plano continúe dirigiendo la misma base de datos. Si `config.toml` o su raíz `sqlite_home` clave está ausente, OpenCodex continúa ambiente / casa fallback. Si el archivo no se puede leer o analizar, o la clave está presente pero en blanco o no es una cadena, la resolución SQLite-home se detiene en lugar de arriesgar las operaciones del historial contra una cadena diferente base de datos.
+
+En Windows, un shell Orca puede establecer ambos `CODEX_HOME` y `ORCA_CODEX_HOME` El entorno de ejecución de Orca mientras la aplicación ChatGPT/Codex sigue leyendo `%USERPROFILE%\\.codex`. `ocx status` y `ocx doctor`
+advierta sobre esta desadaptación exacta e imprima rutas de destino redactadas. Si se instaló un servicio en segundo plano de ese shell de Orca, desinstálalo del shell original primero, luego configura `CODEX_HOME` Ir a la página casa, sin set `ORCA_CODEX_HOME`, vuelva a ejecutar la sincronización/restauración e instale el servicio de nuevo.
+
+En el modo de proveedor dedicado, `requires_openai_auth = true` mantiene Codex App/TUI superficies cerradas por cuenta alineados con Codex nativo. opencodex también sirve `/v1/responses` sobre WebSocket. El dedicado proveedor anuncia `supports_websockets = true` Solo cuando `"websockets": true`; en el bucle Codex proveedor incorporado puede probar WebSocket primero, y un proxy deshabilitado devuelve `426` así que Codex vuelve a HTTP/SSE.
+
+El proxy admite hasta 128 clientes Responses WebSocket conexiones. Cuando una nueva conexión encuentra las 128 ranuras ocupadas, cierra la conexión inactiva menos recientemente utilizada para hacer espacio. Conexiones con una respuesta activa, herramienta cliente pendiente o resultados de aprobación, una sesión de dirección / inyección nativa o salida almacenada en buffer están protegidos. Si no se puede liberar ninguna conexión inactiva, la nueva conexión recibe la conexión existente `503` Capacidad de respuesta. Un cliente recuperado puede volver a conectarse para más tarde utilizando el manejo de continuación existente. Esto ocurre solo bajo conexión presión, no necesita configuración y no cambia las conexiones de voz o la reutilización de la conexión ascendente.
+
+Si una continuación de reenvío canónica ChatGPT hace referencia a un estado de repetición local vencido o ausente, opencodex devuelve `previous_response_not_found` antes de enviar cualquier cosa upstream. Codex El cliente WebSocket reconoce este error y puede volver a conectarse con su contexto completo retenido. incluyendo las llamadas a herramientas completadas y sus resultados, dentro de su presupuesto normal de reintento de flujo. Un Por lo tanto, la tarea inactiva no necesita una nueva tarea únicamente porque la caché de reproducción del proxy expiró. El estado de continuación reproducido se conserva durante 24 horas y permanece limitado por su memoria existente. disco y techos de entrada; esto no recupera el historial que el cliente ya no tiene. Clientes HTTP debe manejar el error explícitamente y reenviar su contexto completo sin `previous_response_id`. Volver a intentar solo el mismo ID no puede recuperar el estado faltante.
+
+El mismo rechazo se aplica cuando el estado referenciado pertenece a un ámbito de tareas cliente diferente. incluyendo cuando la nueva solicitud parece llevar entrada completa. El proxy no puede probar que la entrada está completo, por lo que no elimina silenciosamente `previous_response_id` o revelar si el estado coincidente existe. Vuelve a intentar con la conversación completa y omite `previous_response_id`; hacer coincidir los alcances y Las continuaciones heredadas en las que ambos ámbitos están ausentes o en blanco continúan reproduciéndose normalmente.
+
+La misma señal de recuperación se aplica a todos los destinos enrutados, porque solo el Responses nativo passthrough puede responder a un turno cuyo historial este proxy perdió — que reenvía `previous_response_id`
+a un backend que almacenaba la cadena. Cada cable reconstruye la conversación de cada solicitud entrada propia, por lo que una expansión perdida allí enviaría el giro actual solo y en silencio Perder la conversación. Eso incluye a los tres que parecen con estado: Devin reenvía el todo Conversación cada vez, la referencia de punto de control de Cursor vive en la misma tienda vencida y cae volver a la reproducción completa sin él, y Kiro reconstruye su historial de conversaciones desde los giros que fue mano. También se aplica a los proveedores Responses configurados con
+`statelessResponses: true`, y a las solicitudes enrutadas donde se bajó una herramienta personalizada a una función pero un resultado delta no tiene una llamada local para establecer su tipo original. La reproducción completa preserva el llamada, resultado y razonamiento juntos; opencodex no adivina el tipo de resultado ni lo descarta. Los proveedores con estado todavía resuelven la función nativa y las continuaciones personalizadas solo nativas. Estas comprobaciones siguen el protocolo de cable seleccionado y las declaraciones de la herramienta, no el nombre del modelo. Por un puerta de enlace que no puede resolver IDs de respuesta almacenados, habilitar `statelessResponses` en dicho proveedor; otros proveedores mantienen sus valores predeterminados.
+
+
+
+### Compactación del lado del cliente (opcional)
+
+El enrutamiento de bucle de retorno autenticado normalmente mantiene Codex en su función integrada `openai` identidad del proveedor. Eso preserva la identidad del hilo nativo, pero también hace que Codex solicite compactación remota nativa. Cuando un proveedor enrutado no puede devolver un blob de compactación nativo, OpenCodeX almacena el resumen propio `ocx1:`/`ocx2:` sobre. El ChatGPT nativo no puede verificar ese sobre si OpenCodeX se elimina más tarde de la ruta de solicitud.
+
+En una ruta de bucle de retorno autenticada, habilite la compactación en el lado del cliente para mantener el enrutamiento de subagentes V2 al tiempo que se evitan nuevas operaciones. `ocx1:`/`ocx2:` resúmenes de compactación. Las rutas no loopback y API-key conservan su comportamiento de proveedor y autenticación existente:
+
+```bash
+ocx system settings --client-compaction on # or "codexClientCompaction": true in config.json
+ocx sync # rewrites the active config (default: ~/.codex/config.toml); restart Desktop
+```
+
+El ajuste predeterminado es off. Para el enrutamiento autenticado de bucle invertido, OpenCodeX selecciona su formulario de proveedor dedicado con `requires_openai_auth = true`. Si `codexDesktopAuthless` es también habilitado, esa configuración de compatibilidad más fuerte tiene prioridad y escribe
+`requires_openai_auth = false`:
+
+```toml
+model_provider = "opencodex"
+
+[model_providers.opencodex]
+name = "OpenCodex Proxy"
+base_url = "http://127.0.0.1:10100/v1"
+wire_api = "responses"
+requires_openai_auth = true
+```
+
+Codex entonces posee compactación y almacena un resumen de texto plano portátil en lugar de un nuevo OpenCodeX sobre. La solicitud de compactación sigue enrutando a través de OpenCodeX y puede consumir cuota en el proveedor seleccionado. Las solicitudes de subagentes V2 mantienen su selección y cuota de proveedores existentes contabilidad. La compactación del lado del cliente no cambia la entrega de texto plano, el paso de tareas encriptadas a través `allowEncryptedV2AgentTasks`, o comportamiento de recuperación y fallback configurado.
+
+Esta preferencia afecta solo a las compactaciones futuras, y no reescribe ninguna `ocx1:`/`ocx2:` carga útil en cualquier configuración, así que use el flujo de trabajo explícito de recuperación del historial para un subproceso que lo necesite.
+
+Si se vuelve a etiquetar los metadatos del historial de reanudación depende de la forma que tome la inyección. En su propio, en un enlace de bucle autenticado, la compactación del lado del cliente no vuelve a etiquetar nada: mantiene la raíz en su lugar, como se describe a continuación. Habilitado junto con `codexDesktopAuthless`, o en un non-loopback bind, la forma más fuerte gana y esas formas se comportan exactamente como lo hacen hoy, incluyendo su historial de currículums con los originales respaldados para su restauración.
+
+Volver de una de esas formas a Diseño B simple migra los hilos reetiquetados hacia atrás. Turning apagado `codexDesktopAuthless` mientras deja la compactación del lado del cliente no: eso aterriza en el forma de solo compactación, que omite la unidad de historia, por lo que los hilos ya etiquetados `opencodex` mantener Esa etiqueta. Todavía llegan a este proxy, a través de la tabla del proveedor en lugar de la anulación raíz.
+
+En la forma de solo compactación, los hilos existentes siguen funcionando porque la inyección mantiene la raíz
+`openai_base_url` Anular junto a la tabla del proveedor. Nuevos hilos predeterminados para `opencodex` y obtener la compactación del lado del cliente, mientras que un hilo ya está etiquetado `openai` todavía resuelve a Codex de proveedor incorporado — que la anulación retenida todavía apunta a este proxy. Sin ella eso hilo se reanudaría contra OpenAI directamente, teniendo enrutamiento configurado con él. Los authless y Los formularios no loopback no pueden usar la clave raíz, por lo que siguen reetiquetando.
+
+Esa garantía cubre la anulación que administra OpenCodeX. Una raíz `openai_base_url` tú escribiste nunca es reemplazado, y en ese caso el proveedor integrado mantiene el destino elegido, por lo que un `openai`-tagged thread sigue su configuración en lugar de este proxy. Turning el ajuste y la sincronización quitan la tabla y vuelven al diseño B normal, a menos que
+`codexDesktopAuthless` o la admisión sin loopback todavía requiere el formulario de tabla de proveedores; dos formas no pueden usar la clave raíz y no cambian.
+
+Mientras el modo está activo, la banda lateral de voz en tiempo real (`experimental_realtime_ws_base_url`) no se inyecta — el formulario de tabla de proveedor dedicado no puede — para que la voz de escritorio Codex use su punto final nativo en lugar del proxy.
+
+
+
+### Modelo de compactación de emergencia (opcional)
+
+Cuando OpenCodeX traduce la compactación remota para proveedores como Google, reemplaza las imágenes de turnos anteriores con breves notas de reapertura si existe una respuesta final explícita posterior. Existentes Las referencias de análisis y archivo permanecen en la entrada de resumen; las imágenes después de la última respuesta permanecen disponibles para trabajos no resueltos. Se conservan las historias sin fase y solo comentarios. Esto afecta solo la solicitud de compactación, no los archivos adjuntos almacenados o las solicitudes de modelo ordinarias. Reduce las repeticiones entrada de visión, pero no garantiza que un largo historial de texto se ajuste al límite de contexto del proveedor.
+
+`compactionRecovery` deja la compactación inicial en la ruta seleccionada de la conversación. Lo permite un intento de emergencia solo después de un fallo de compactación previo a la salida soportado. Es Separados de `compactionRouting`, que elige otro modelo antes de que comience la compactación, y Desde `codexClientCompaction`, que cambia el formulario de proveedor de Codex.
+
+```json
+{
+ "compactionRecovery": {
+ "enabled": true,
+ "model": "provider/emergency-model",
+ "allowDevinInvalidArgument": false
+ }
+}
+```
+
+Utilice un modelo autorizado configurado independientemente con suficiente contexto para la entrada fallida. La habilitación de la recuperación permite que el proveedor del modelo reciba el historial de compactación y la carga para el intento extra cuando se ejecuta la recuperación; las compactaciones ordinarias exitosas no incurren en llamadas adicionales. La opción está desactivada cuando está ausente o desactivado. La administración autenticada existente API acepta Este bloqueo a través `PUT /api/settings`; enviar `compactionRecovery: null` Para eliminarlo. Un directo La edición del archivo debe seguir el flujo de trabajo normal de configuración de stop-proxy. Esta configuración no cambie el inicio de sesión, el modelo ordinario de la conversación, el ID del proveedor de Codex o el compositor del escritorio.
+
+La recuperación no se reproduce después de la cancelación, la salida semántica, los efectos secundarios de la herramienta, un agotado enviar presupuesto, o una autenticación, admisión o rechazo de la política. Genérico `400` Los errores no Habilitar reserva. Devin responde a una historia sobredimensionada con una preproducción opaca
+`invalid_argument`cuando el tamaño estimado de la solicitud está en o cerca de la ventana de entrada del modelo, el adaptador lo informa como `context_length_exceeded` en su lugar, por lo que Codex compacta en un turn y una compactación fallida califican como un desbordamiento de contexto sin ninguna opción específica de Devin. La estimación utiliza descripciones de herramientas después de la desinfección y truncamiento de Cognition, que coinciden con el solicitud enviada upstream. Una solicitud más pequeña que obtiene el mismo código permanece simple `400`. Los Por separado opt-in `allowDevinInvalidArgument` El caso cubre solo a los que quedan `invalid_argument` fracasos, y solo en una solicitud de compactación identificada. El intento de emergencia comparte la solicitud original Envíe presupuesto y nunca comience un segundo intento de recuperación.
+
+La compactación encriptada nativa está fuera de esta ruta de recuperación: se conserva su error original. No hay modo de truncamiento local automático. Una respuesta aceptada no es prueba de que un larga conversación retuvo sus objetivos; verificar el siguiente turno en el modelo original antes de tratar un resumen de emergencia como una tarea recuperada.
+
+
+
+### Authless Codex Escritorio (opcional)
+
+En **Panel de control → Visión general**, **Abrir Codex sin iniciar sesión** Controla esta situación existente preferencia opt-in. El switch predeterminado es **apagado** cuando el ajuste es ausente o falso; Una explícita ya existente `codexDesktopAuthless: true` Permanece habilitado. El dashboard guarda la preferencia y ejecuta una sincronización completa. Reinicie Codex Desktop después de cambiarlo. Si la sincronización falla, la preferencia guardada permanece y el panel de control muestra el error; reintentar **Sincronización** antes de reiniciar. Las funciones de escritorio cerradas por cuenta pueden no estar disponibles cuando esté habilitado. Credenciales ascendentes, elegibilidad local, autenticación de admisión remota y la configuración de la puerta de enlace propiedad del usuario mantiene sus requisitos existentes.
+
+Codex Desktop muestra su pantalla de inicio de sesión ChatGPT cada vez que el proveedor activo requiere OpenAI auth. Si su configuración OpenCodex nunca usa credenciales ChatGPT (solo proveedores enrutados, o una
+`chatgpt.com`), puede optar por salir de esa puerta:
+
+```bash
+ocx system settings --desktop-authless on # or "codexDesktopAuthless": true in config.json
+ocx sync # rewrites ~/.codex/config.toml; restart Desktop
+```
+
+Con el interruptor activado, un enlace de loopback inyecta el formulario de proveedor dedicado en lugar del formulario raíz.
+`openai_base_url` Anúltese:
+
+```toml
+model_provider = "opencodex"
+
+[model_providers.opencodex]
+name = "OpenCodex Proxy"
+base_url = "http://127.0.0.1:10100/v1"
+wire_api = "responses"
+requires_openai_auth = false
+```
+
+El escritorio se inicia sin un inicio de sesión y enruta cada turno a través del proxy. El escenario sobrevive
+`ocx start`, reiniciar, `ocx sync`, y `ocx ensure`Apagarlo (`--desktop-authless off`) hace el siguiente sync restaurar el formulario de loopback predeterminado, y `ocx restore` lo tira como cualquier otro inyectado enrutamiento. Qué esperar mientras está encendido:
+
+- ChatGPT-gated Chrome de escritorio (cuenta, uso, modo rápido) se mantiene oscuro: Codex deriva esas superficies del requisito de autenticación del proveedor.
+- Los nuevos hilos están etiquetados con el `opencodex` como en un enlace no loopback, y la historia es Manejado de la misma manera.
+- Las versiones de escritorio que filtran el selector de modelos contra una lista de permisos solo nativa pueden mostrar un mensaje vacío. o `Custom` selector en este modo también; las solicitudes todavía usan el modelo configurado. Establecer
+ `model = "/"` en `config.toml` como se describe en
+ [Servidores remotos de escritorio](/es/guides/codex-app-models/#desktop-remote-servers).
+
+Esto solo cambia la puerta de inicio de sesión del escritorio. Non-loopback une mantener `requires_openai_auth = true` y la `env_key` credencial de admisión independientemente del interruptor; nunca expone un oyente OpenCodex Sin autenticación.
+
+
+
+## Identidad e historia del hilo
+
+El formulario de bucle predeterminado mantiene los nuevos hilos etiquetados con el nativo de Codex `openai` proveedor, tan normal reanudar la historia no necesita reasignación. Sincronizar y restaurar aplicar solo un manifiesto de copia de seguridad coincidente y Restaurar el proveedor original exacto de cada hilo, fuente y marcador de evento. Un desnudo `opencodex` fila con no se deja ningún manifiesto sin cambios; uso `ocx recover-history --legacy-openai --yes` Sólo cuando explícitamente pretende forzar ese legado a reetiquetar. El comando es intencionalmente amplio: reescribe cada hilo con un mensaje de usuario etiquetado actualmente `opencodex` a `openai`, normaliza `exec` a `cli`, y conjuntos el marcador de eventos—incluyendo el historial legítimo de proveedores dedicados. Respalda el estado y úsalo solo cuando se pretende ese alcance completo. El modo de proveedor dedicado sin loopback sigue reflejando el historial debajo de la `opencodex` proveedor mientras está activo y restaura los metadatos de copia de seguridad al salir. Establecer
+`syncResumeHistory: false` dejar la historia intacta.
+
+
+
+## Sincronización de catálogo de modelos
+
+Codex muestra modelos de un catálogo en el disco (`$CODEX_HOME/opencodex-catalog.json` por defecto). En marcha Inicio y encendido `ocx sync`, opencodex:
+
+1. **Respalda** el catálogo prístino una vez para `~/.opencodex/catalog-backup.json` (Por lo tanto, la presentación es reversible).
+2. **Pies** catálogos de modelos en vivo de los proveedores elegibles (caché ~5 min; vuelve a la última buena lista, luego configurado `models[]`) El auth directo no tiene punto final del modelo, y Cursor usa su
+ `GetUsableModels` RPC en lugar de `/models`.
+3. **Combinaciones** modelos enrutados en entradas con nombre (`provider/model`), clonado a partir de un Codex nativo plantilla de catálogo, por lo que el analizador estricto de Codex los acepta.
+4. **Filtros** `config.disabledModels` y cada proveedor no está vacío `selectedModels` Allowlist.
+5. **Re-rangos** así que los modelos destacados ordenan primero (ver más abajo), luego escribe el catálogo combinado de nuevo.
+
+Las entradas del catálogo enrutado también obtienen su identidad GPT-5 reescrita al nombre del modelo ascendente real. Los controles de razonamiento provienen de metadatos de proveedor / modelo en Codex `low | medium | high | xhigh |
+max | ultra` escalera; los valores no compatibles se asignan o fijan antes de la solicitud ascendente.
+
+
+
+### Diagnóstico y recuperación del coordinador
+
+Las escrituras de configuración/historia nativas usan un coordinador SQLite por usuario con la clave canónica `CODEX_HOME`. Si un proceso termina en la ventana de creación inicial de SQLite, un coordinador de cero bytes puede permanecer igual. aunque no contiene ninguna fila de transición autorizada. `ocx doctor` informa la ruta exacta del coordinador y distingue los estados de cero bytes, sin versionar, sin filas, válidos, inseguros e ilegibles sin creación de sidecares SQLite. La sincronización automática tolera solo un archivo de cero bytes estable a la identidad que tiene se conformó durante al menos un segundo y cuya instantánea inmutable SQLite tiene la versión cero sin tablas; un archivo de cero bytes recién creado permanece en la ruta del coordinador bloqueada.
+
+Para un estado que el doctor prueba que es un remanente de creación de cero bytes, detenga el proxy/servicio OpenCodex y correr:
+
+```bash
+ocx doctor --recover-zero-byte-coordinator --yes
+ocx sync
+```
+
+La recuperación mueve el archivo de byte cero todavía idéntico a un mismo directorio `.zero-byte-backup-*` camino; no elimina la evidencia ni adopta el estado enrutado heredado. Rechaza un proxy de ejecución, bloqueo contienda, enlaces simbólicos/puntos de reparación, propiedad extranjera, archivos cambiados, cada base de datos no vacía, y cualquier coordinador que ya tenga una fila autorizada. El filtrado del renderizador de escritorio es un capa separada: un catálogo y un coordinador correctos no evitan por sí mismos el modelo de aplicación Codex Allowlist.
+
+
+
+### Herramientas locales enrutadas
+
+Uso de filas de catálogo enrutadas no nativas `tool_mode: "code_mode_only"`. Esto permite que Codex exponga su oficial
+`exec` MCP y las herramientas anidadas, incluyendo el navegador y el uso del ordenador, mientras que opencodex rutas solo la llamada de función ordinaria del modelo. La ejecución de la herramienta, los permisos y las confirmaciones permanecen local a Codex; opencodex no implementa un segundo navegador o ejecutor de control de escritorio.
+
+Para los proveedores clave Responses que no aceptan Codex `exec` Gramática de herramientas personalizadas, opencodex codifica esa declaración y su historial como una herramienta de función ascendente, luego restaura el flujo ciclo de vida de llamada a `custom_tool_call` antes de que Codex lo vea. Enrutamiento de reenvío nativo OpenAI y el apoyo `apply_patch` herramienta personalizada se mantienen sin cambios.
+
+Si un modelo enrutado envía un parche completo como el modo de código completo `exec` entrada, opencodex lo convierte en el anidado `tools.apply_patch` llamar antes de que lleguen los eventos de finalización de la herramienta Codex. Las llamadas personalizadas nativas y las llamadas a funciones convertidas usan la misma regla de finalización; Las vistas previas de parches se mantienen mientras su forma ejecutable no está resuelta. JavaScript que simplemente contiene texto de parche y las cargas útiles personalizadas nativas no relacionadas permanecen sin cambios.
+
+Un modelo enrutado también puede enviar erróneamente un objeto de argumento de shell como
+`{"cmd":"git status --short"}` a modo de código `exec`. Para un catálogo de modos de código verificado, opencodex convierte un objeto de shell inequívoco en `tools.exec_command(...)` JavaScript y envía su salida a través de `text(...)`. Las opciones de Shell se conservan y Codex aún Ejecuta y autoriza el comando. Valid JavaScript campos de reserva, objetos ambiguos, y los espacios de nombres de herramientas no relacionados no se convierten. Esta reparación de compatibilidad no pasa por alto limites de velocidad del proveedor o cambie la directiva de reintento configurada.
+
+La misma reparación cubre a los ayudantes de la meta. Un modelo que llama `create_goal`, `get_goal`, o
+`update_goal` (o un `default.`-prefijo la ortografía de uno) como una herramienta, mientras que el catálogo declara solo modo de código `exec` tiene la llamada convertida en la coincidencia `tools.(...)` Llamar dentro
+`exec`. Un catálogo que declara genuinamente la herramienta de objetivo desnudo lo mantiene, y un catálogo que declara Ni la herramienta ni `exec` sigue rechazando la llamada como no declarada.
+
+En las conversiones enrutadas con un modo de código de forma libre verificado `exec` catálogo, llamadas estructuradas enviado directamente a
+`mcp____` (Incluyendo un `default.` El prefijo también es envuelto como llamadas de herramienta de host anidada. Esto evita un reintento únicamente por un modelo que omite la `exec` Envoltorio. Herramientas MCP declaradas explícitamente mantener su comportamiento normal; una función JSON ordinaria llamada `exec` No permite Esta reparación. Las herramientas desconocidas aún fallan en el host. Registros de llamada de herramientas impresos como El texto de respuesta ordinario no se ejecuta por esta regla de compatibilidad.
+
+Para los turnos Responses enrutados, una política explícita de ejecución de herramientas también rechaza las llamadas a herramientas cliente si El catálogo de herramientas declaradas de la solicitud no está disponible. Un catálogo declarado vacío rechaza a todos los clientes llamada de herramientas; Los clientes de Chat y Anthropic conservan su propia responsabilidad de validación de herramientas.
+
+Los giros en modo de código encaminados también se les dice las reglas del host para los ayudantes anidados antes de la primera vuelta. Llamar: `tools.apply_patch` toma una cadena que se abre y se cierra con las líneas de marcador de parche desnudo, El aislado no tiene `import`, y los comandos de larga duración son encuestados a través de `write_stdin`. Cuando a El resultado de ejecución en modo código en la ruta nativa Responses, Kiro o Cursor sigue llevando uno de los mensajes de error, opencodex anexa una pista de una línea que da nombre a la regla. Este cambio no se reescribe el código del modelo o su texto de parche.
+
+Las llamadas a la función Responses enrutadas ordinarias también usan el esquema de parámetros declarado original en completion: los floats integrales en campos enteros y los números integrales en campos de solo cadena son normalizado, mientras que las fracciones y las uniones numéricas permanecen sin cambios. Un explícitamente vacío completado Argumentar cadena se convierte en `{}`. Los eventos finales y el historial de continuación almacenado localmente están de acuerdo. Las ortografías de espacio de nombres punteadas inequívocas se restauran al espacio de nombres declarado y al nombre de la herramienta.
+
+El proveedor seleccionado debe admitir llamadas de función/herramienta. Un proveedor de solo texto sin llamada a herramientas El apoyo no se puede utilizar `exec`, Navegador o Uso de la computadora. Las filas nativas de OpenAI mantienen su herramienta ascendente moda sin cambios.
+
+Después `ocx sync` cambia estos metadatos, reinicia la aplicación Codex y abre una tarea nueva. Aplicación-servidor existente Los procesos y tareas pueden retener el catálogo y el plan de herramientas que cargaron al inicio.
+
+
+
+### Visualizaciones en línea con modelos enrutados
+
+El complemento Visualizar de la aplicación Codex le pide al modelo que responda con una referencia envuelta en uso privado caracteres (U+E200 … U+E201). Algunos proveedores eliminan esos caracteres antes de que el modelo los vea — cada ruta Claude que verificamos hace —, por lo que el modelo solía responder con una
+`visualize{"path":…}` línea que la aplicación Codex imprimió como texto.
+
+opencodex reescribe esas referencias en la directiva que la propia aplicación renderiza,
+`::codex-inline-vis{path="/absolute/path/chart.html"}`, en el texto de conversación enviado a Enrutado modelos. Cualquier modelo puede leer y repetir esa forma, por lo que la visualización se renderiza en línea. Nativo OpenAI Las solicitudes passthrough se reenvían sin cambios. Respuestas que ya estaban guardadas en la nada
+`visualize{…}` La forma permanece como está; pide la visualización de nuevo en una nueva respuesta.
+
+
+
+### Nombres de visualización de modelo personalizados
+
+Un modelo personalizado puede llevar un **mostrar nombre** que anula la etiqueta Codex muestra en su selector de modelos, sin cambiar nada sobre cómo se enruta el modelo. El nombre de visualización se asigna a La entrada del catálogo `display_name` campo solo — el slug de enrutamiento (`/`), alias orden de colisión, proveedor y nombres de marketing nativos OpenAI se dejan intactos.
+
+Agregue un nombre de visualización desde el CLI (el proxy sincroniza el catálogo de inmediato cuando está activo):
+
+```bash
+ocx models add deepseek deepseek-v4 --display-name "DeepSeek V4" --context-window 128000
+```
+
+Para proveedores personalizados, omitir una ventana de contexto explícito permite que el catálogo
+[reglas de respaldo de ventana contextual](/es/reference/configuration/providers/#context-windows-on-custom-providers). Las estimaciones de ID de modelo se aplican solo cuando el proveedor establece `inferContextWindow: true`; establecer un explícito ventana o límite de contexto cuando el relé admite menos que la ventana del proveedor del modelo.
+
+Los clientes remotos de Codex pueden fetch el mismo catálogo generado con un **plano de datos** clave — la misma credencial que ya utilizan para `/v1/responses`, no un administrador token:
+
+```bash
+dest="${CODEX_HOME:-$HOME/.codex}/opencodex-catalog.json"
+tmp="$(mktemp "${dest}.XXXXXX")"
+curl -fsS -H "x-opencodex-api-key: $OPENCODEX_API_AUTH_TOKEN" \
+ "https://proxy.example.com/v1/catalog" > "$tmp" \
+ && mv "$tmp" "$dest"
+ocx sync-cache
+```
+
+La respuesta es la RAW `opencodex-catalog.json` documento (sin credenciales de proveedor). Cuando disponible, el `x-opencodex-codex-version` cabecera informa de la versión en entorno de ejecución Codex en el servidor para que los clientes puedan detectar el sesgo de versión.
+
+`GET /v1/catalog` existe para que la lectura de una lista de modelos no cuesta un administrador token. Es Solo lectura (`GET` y `HEAD`), acepta `x-opencodex-api-key`, un portador token, o
+`x-api-key`, y sirve exactamente los mismos bytes que la ruta de gestión. Responses llevar a fuerte `ETag` — volver a pasar como `If-None-Match` para revalidar y obtener un `304` de la documento completo — y `Cache-Control: private, no-cache`, ya que el cuerpo se sienta detrás de un Credencial.
+
+Una clave de plano de datos admitida aquí gana **nada** En el plano de gestión: `/api/catalog` y cada otro `/api/*` ruta todavía requieren el administrador token o una sesión de dashboard. El viejo
+`/api/catalog` ruta sigue funcionando sin cambios para el panel de control y para los scripts que ya mantener un administrador token.
+
+También puede configurarlo o editarlo a través de la administración API (`POST /api/custom-models`,
+`PUT /api/custom-models/` con un `displayName` string) y el panel web. A `/` es rechazada porque chocaría con el separador de balas enrutadas.
+
+El nombre mostrado es **solo pantalla y estable a través de la regeneración**. Cada `ocx sync` y catálogo actualizar las entradas enrutadas de re-derivadas `config.json` (incluyendo `customModels`), por lo que la configuración El nombre se vuelve a aplicar en lugar de regresar a la babosa encaminada. Un reinicio del servicio administrado también intenta Esta sincronización poco después de que el proxy se une. Si la sincronización de arranque del mejor esfuerzo falla, por ejemplo durante un inicio de sesión sin conexión, el catálogo previamente persistente se conserva y el siguiente éxito `ocx sync`
+Reaplica el nombre configurado. Nombres nativos originales (e.g. `gpt-5.6-sol` → "GPT-5.6-Sol") provienen de la instantánea de de origen anclada y nunca son anulados por una pantalla personalizada nombre.
+
+
+
+### Gerentes de proveedores externos
+
+Si `config.toml` Seleccione un proveedor que no sea `openai` o `opencodex`, OpenCodex deja el archivo sin cambios y omite escrituras de perfil, actualización de catálogo/caché, y tanto inmediata como en segundo plano Restauración de metadatos del historial Codex. Las herramientas que administran un proveedor personalizado a menudo etiquetan las sesiones existentes con eso. id proveedor; reemplazar el id activo puede hacer que esas sesiones intactas desaparezcan del historial de Codex vista. La misma protección se aplica a un proveedor externo seleccionado por un perfil raíz heredado.
+
+Un proveedor externo posee `config.toml`, los configuración informan que
+`GET /api/settings` y `ocx system settings --json` Devuelve una descripción del escritorio sin autorización y client-compaction switches — y el requisito de inicio de sesión Codex — controlado por eso proveedor en lugar de mostrar el estado efectivo que produciría OpenCodex. Voltear también switch sigue almacenando la preferencia, pero `config.toml` no se reescribe; el valor almacenado tiene efecto si cambia Codex de nuevo a un proveedor OpenCodex administra y vuelve a ejecutar `ocx start`.
+
+Si `config.toml` existe pero no se puede leer (permisos, o un borrado de la lectura), el mismo informe retiene los valores efectivos y la respuesta de inicio de sesión como indeterminados en lugar de mostrar el estado OpenCodex calcularía localmente. El registro de aplicación mantiene esa explicación — incluyendo un salvamento cuya puerta de inyección ya está cerrada por una integración desactivada o un proxy detenido — y Esto es reintentable, así que un `ocx system settings --json` leer informes de la respuesta establecida una vez el archivo es legible de nuevo. Con la integración Codex desactivada, `ocx sync` es solo de catálogo y no puede aplicarlo.
+
+Mantenga una herramienta como propietario de la configuración del proveedor Codex. Para usar OpenCodex detrás de un archivo existente gerente de proveedores, señale a ese proveedor en `http://127.0.0.1:10100/v1` con paso Responses (`wire_api = "responses"` en Codex TOML), no en la traducción Chat Completions. Cuando el proxy API auth es habilitado, también pasar `x-opencodex-api-key` Desde `OPENCODEX_API_AUTH_TOKEN`, igualando el no-loopback formulario de proveedor arriba. Para permitir que OpenCodex inyecte el enrutamiento directamente, primero cambie Codex de nuevo a su incorporado `openai` proveedor y eliminar cualquier usuario root `openai_base_url`y luego relanzar `ocx start`.
+
+
+
+### Explícito `tool_search` solución de problemas
+
+Las herramientas locales enrutadas tienen dos rutas de descubrimiento distintas. En el modo de código enrutado normal, Codex puede exponer diferido MCP/herramientas de la aplicación a través del oficial `exec` herramienta `tools` global y `ALL_TOOLS`; ese camino no requiere que el modelo vea o llame `tool_search`.
+
+Por separado, `tool_search` es una superficie de descubrimiento Codex ejecutada por el cliente. No es un OpenCodex bandera de características, y un upstream `tool_choice: "auto"` El valor no lo crea ni lo habilita. OpenCodex puede retransmitir la superficie explícita solo cuando Codex ya incluyó una declaración como esta en el Solicitud Responses:
+
+```json
+{
+ "tools": [
+ { "type": "tool_search", "description": "Load deferred tools" }
+ ]
+}
+```
+
+Para los modelos locales/de chat enrutados, OpenCodex expone esa declaración como una función normal llamada
+`tool_search`. Si el modelo lo llama, OpenCodex convierte la llamada a un Responses
+`tool_search_call`; Codex ejecuta la búsqueda y proporciona las definiciones de herramientas resultantes en un más tarde `tool_search_output`. Las definiciones cargadas de esa manera están disponibles en el siguiente turno del modelo.
+
+Compruebe el límite de fallos antes de cambiar la configuración del proveedor:
+
+1. **No `type: "tool_search"` En la solicitud entrante:** el cliente/sesión Codex activo no Anunciar el explícito `tool_search` superficie. OpenCodex no puede inventar esa declaración. Esto no significa que las herramientas normales de modo de código no estén disponibles: compruebe si el modelo enrutado puede usar
+ `exec` y descubrir la herramienta anidada necesaria a través `tools` / `ALL_TOOLS` Primero.
+2. **La declaración entrante existe, pero no `tool_search` La función alcanza la petición enrutada:**
+ capturar solo la lista de nombres/tipo de herramienta redactada y abrir un error OpenCodex. Nunca ata el portador, ID de cuenta, entrada de conversación, encabezados completos o cuerpo completo de la solicitud.
+3. **La solicitud enrutada contiene `tool_search`Pero el modelo local nunca lo llama:** El relé es trabajando. Use un modelo/plantilla con llamadas a funciones confiables e instrucciones que explícitamente Decidle que busque una herramienta diferida que necesite. LM Studio's `tool_choice: "auto"` permite el uso de herramientas; no obliga al modelo a llamar a esta función.
+4. **Una llamada se emite repetidamente o las herramientas cargadas nunca se vuelven utilizables:** Capturar lo redactado
+ `tool_search_call` / `tool_search_output` tipos de elementos y llamadas. OpenCodex conserva ambos en El modelo debe ver la búsqueda completa en lugar de emitirla para siempre.
+
+Véase [El analizador y el puente](/es/reference/architecture/#the-parser) para el mapeo explícito de cables. No hay una configuración de nivel de proveedor que pueda agregar un `tool_search` declaración; ordinario El descubrimiento en modo código sigue siendo una ruta separada.
+
+
+
+### Diagnósticos de lectura en caché
+
+Establecer `OPENCODEX_CACHE_DEBUG=1` antes de iniciar el proxy para escribir un registro de diagnóstico por Solicitud Finalizada para `/cache-debug.jsonl`. El interruptor está desactivado por defecto; configúrelo en `0`
+o eliminarlo para desactivar la captura. El archivo es solo para el propietario (`0600`) en el directorio de configuración endurecido y rueda después de 200 líneas, conservando las 100 más nuevas.
+
+Cada registro JSONL contiene el protocolo, el proveedor/modelo enrutado, la presencia del contador de caché y procedencia, etiquetas de igualdad de proceso local para la cuenta, clave de caché de solicitud y sesión listada encabezados, además de huellas dactilares ordenadas para instrucciones, herramientas y bloques de mensaje / entrada. Prefijo Las secciones retienen como máximo 128 etiquetas e identifican solo la primera sección/índice divergente. Los diagnóstico nunca almacena mensajes de texto, nombres de herramientas, encabezados sin procesar, caché sin procesar/sesión/cuenta identificadores, o una etiqueta duradera derivada de ellos. Su clave aleatoria HMAC se crea al inicio del proceso, separada de otras claves de depuración, y nunca se mantiene; por lo tanto, las etiquetas comparan valores solo dentro de Un proceso proxy.
+
+
+
+### Solución de problemas de catálogo
+
+Si falta un modelo en Codex, o si el orden/visibilidad del catálogo parece incorrecto, compruebe en orden:
+
+1. **`selectedModels`** en el proveedor — una lista de permisos no vacía expone solo esos identificadores a Codex; vacío u omitido expone todos los modelos descubiertos. Un id que no está en la lista nunca llega a la catálogo.
+2. **`disabledModels`** (nivel superior) — oculta los modelos del catálogo y `/v1/models`, y voltea desnuda nativa GPT slugs a `visibility: "hide"`.
+3. **`liveModels: false`** — con `liveModels: false`, un vacío u omitido `models` listar las semillas configuradas `defaultModel`
+ primero, seguido por `retainModels`; los ID duplicados se eliminan mientras se conserva la primera aparición. Un explícito no vacío `models` lista en lugar de semillas `models` seguido por `retainModels`, sin Agregando implícitamente una `defaultModel`. Ese valor predeterminado todavía se puede enumerar explícitamente en
+ `models` o `retainModels`. Si ninguno de estos campos proporciona un id, la semilla estática está vacía. Este es el orden de la semilla, no una promesa del orden final del selector. `selectedModels`, `disabledModels` y La política de proveedores discapacitados sigue siendo aplicable. `authMode: "forward"` mantiene su rama separada y hace no utilizar esta semilla estática enrutada. Estas reglas no cambian el fracaso del descubrimiento en vivo.
+4. **Cursor `GetUsableModels`** — el adaptador Cursor descubre modelos a través de su protobuf
+ `GetUsableModels` RPC, no `/models`, por lo que un cambio en el lado Cursor puede alterar qué id son visibles independientemente de otros proveedores.
+5. **Caché y `ocx sync`** Los catálogos en vivo de — se almacenan en caché durante unos cinco minutos (`modelCacheTtlMs`, predeterminado `300000`) Correr `ocx sync` para forzar un fetch nuevo y reescribir el catálogo inmediatamente.
+6. **Ejecución de Codex `app-server`** — reescribir el catálogo en el disco no es suficiente, mientras que una larga vida Codex `app-server` (Hospedador de escritorio / CLI en segundo plano) mantiene la lista anterior en memoria. `ocx sync`
+ y `ocx sync-cache` avisar cuando se detecten esos procesos. `ocx sync --restart-codex` reinicios esos procesos y cierra y vuelve a lanzar completamente la aplicación de escritorio Codex en macOS, Linux y Windows para que el selector vuelva a leer el catálogo. Para dejar la aplicación de escritorio en ejecución, pase
+ `--restart-app-server-only` o detenga la coincidencia `app-server` Procesarse a sí mismo.
+
+:::caution[Otros procesos locales que escriben la configuración]
+El catálogo escribe (`opencodex-catalog.json`, `config.toml`) son atómicos **interior** opencodex, que solo evita archivos a medio escribir cuando dos escritores propiedad de opencodex compiten. Eso sí. **no** Detener a otro proceso local, observador de archivos o agente de sincronización de reescribir la visibilidad del catálogo u ordenar después de opencodex ha escrito. Codex mantiene su separación `models_cache.json` y puede refrescarlo independientemente, cambiando la lista visible sin reescribir `opencodex-catalog.json`. Si los modelos se voltean inesperadamente mientras proxy está ejecutando, deteniendo o reconfigurando a los escritores competidores, luego ejecuta `ocx sync` — esto es un riesgo de escritura externa, no un defecto confirmado opencodex.
+:::
+
+
+
+## Errores de conexión proxy
+
+Si Codex reintenta y luego falla con un error como
+`stream disconnected before completion: error sending request for url (http://127.0.0.1:10100/v1/responses)`
+— o Claude Code informa de un error de conexión similar — el proxy opencodex no es Ejecutar: nada está escuchando en el puerto configurado, por lo que el cliente hace que raw error de conexión en sí. Reinicie el proxy:
+
+```bash
+ocx start # foreground
+ocx service install # persistent: auto-starts on login and respawns on crash
+```
+
+`ocx status` muestra si el proxy se está ejecutando e imprime la misma pista de reinicio cuando no lo es; `ocx doctor` informa sobre el reinicio de la seguridad (servicio/cobertura del shim).
+
+
+
+### Sobrecarga ascendente antes de cualquier salida
+
+Cuando el backend ChatGPT declina un giro Codex `server_is_overloaded` o otro error del servidor antes de que haya producido cualquier salida, opencodex reintenta la misma cuenta con un retroceso corto y limitado y luego mueve el turno a otra cuenta Pool elegible. Una cuenta anclada (un modelo calificado para la cuenta) se vuelve a probar pero nunca se mueve. Una vez que cualquier salida ha alcanzado Codex el turn nunca se envía de nuevo. Si se rechaza cada intento, Codex recibe el mismo error que habría recibido sin los reintentos. Las solicitudes compactas nativas se mueven a otra cuenta Pool en un error de servidor de la misma manera.
+
+
+
+### Codex calza de inicio automático
+
+Ejecuta `ocx codex-shim install` para instalar el envoltorio de lanzador opcional. Se ejecuta
+`ocx ensure` antes de que Codex ordinario se inicie y luego reenvía los argumentos originales y el estado de salida. El comando también funciona con el `ocx` enviado en el escritorio paquetes: tanto la sonda de instalación como el contenedor instalado usan ese ejecutable, sin necesidad de una instalación Bun separada o una comprobación de fuente.
+
+En macOS y Linux, active el envoltorio privado en su shell actual después de otra configuración de PATH. Con el inicio OpenCodex predeterminado, ejecute:
+
+```sh
+. "$HOME/.opencodex/codex-shell-env.sh"
+```
+
+Con un custom `OPENCODEX_HOME`, utilice el camino citado impreso por `ocx codex-shim install`. Agregue esa línea de origen después de otra configuración de PATH en su archivo de inicio de shell para activar futuros shells. OpenCodex no edita ese archivo ni cambia el shell principal. Las shims Unix heredadas en el lugar no son auto-migrar; correr `ocx codex-shim install` explícitamente para migrarlos.
+
+Uso `ocx codex-shim status` para inspeccionarlo. En macOS y Linux, `ocx codex-shim uninstall`
+elimina los archivos de superposición privados y deja intacto el Codex nativo. Windows mantiene en su lugar script wrappers; la desinstalación restaura el lanzador guardado. Ver la
+[Referencia del ciclo de vida CLI](/es/reference/cli/lifecycle/#ocx-codex-shim-installstatusuninstallremove).
+
+
+
+## Experimental compatibilidad de escritorio Windows
+
+**Codex Establecer → Compatibilidad con equipos de escritorio** proporciona controles locales para una compatibilidad limitada prueba mientras conserva el inicio de sesión nativo Codex. Este es un relevo experimental, no una garantía que cada compilación Codex o estado de cuenta agotado puede recuperar su compositor.
+
+1. Inspeccione el estado, prepare el certificado cifrado y revise su huella digital antes de Registrar la confianza. Windows puede pedir confirmación. La confianza se aplica a la Windows actual usuario y permite que el relé local `chatgpt.com` tráfico.
+2. Comience la observación. Guardar borradores, cerrar Codex y luego usar **Abrir Codex** en este panel para lanzar la aplicación empaquetada con la conexión administrada. El panel nunca cierra por la fuerza una aplicación existente.
+3. Solo después de observar el agotamiento elegible, **Ejecutar prueba de 3 minutos** Ofrece una cuenta separada en todo el consentimiento. Ajusta dos banderas de interfaz de usuario en la cuenta iniciada, no solo en el modelo seleccionado. El uso real, los créditos, las restricciones de gasto y los límites del servidor permanecen sin cambios. A producido La respuesta por sí sola no establece que el compositor se recuperó.
+
+Una respuesta original que muestre el uso disponible o un estado protegido finaliza el juicio inmediatamente. Los créditos disponibles o la Reserva Luna activa también dejan la respuesta sin cambios y finalizan el ensayo. incluso cuando se agota el uso ordinario. Esto preserva el estado de derecho existente de la aplicación. Si el agotamiento elegible aparece de nuevo, se requiere otro juicio explícito; el consentimiento previo no reactiva silenciosamente la corrección.
+
+**Volver a la observación** Desarma la corrección. Corrección de los límites de respuesta de tres minutos, No es el momento hasta que Codex actualiza su pantalla. Caducidad y retorno a la observación respuesta de uso fresco; la aplicación puede conservar su pantalla anterior hasta que llegue esa respuesta. El panel muestra esta limitación antes del consentimiento del juicio y mientras espera la respuesta original; no puede confirmar la actualización de caché de la aplicación. **Detener el servicio** cierra sus conexiones y se va el certificado para su reutilización; las conexiones activas pueden interrumpirse. Para renovación o remoción de fideicomiso, detener el servicio y cerrar Codex primero. La renovación prepara un nuevo certificado no confiable; revise el nueva huella digital antes de registrarla. Una acción incierta no se vuelve a intentar automáticamente. Los certificados están restringidos a la autenticación del servidor TLS. Si el estado muestra `renewal-required`, detenga el servicio y cierre Codex, luego renueve el certificado anterior antes de comenzar de nuevo. El nativo API URL Las direcciones IPv4 e IPv6 no son intercambiables aquí; ambiguo `localhost` Se rechazan los alias.
+Codex's automático MCP Los cambios en el modelo, la autenticación, el perfil y el enrutamiento aún requieren un contexto de observación nuevo; el servicio no adopta silenciosamente esos cambios durante una prueba.
+
+El servicio conserva su dirección PAC y puertos de conexión locales para su reutilización después de un reinicio. Con el mismo certificado de confianza, una aplicación ya configurada puede volver a conectarse a través de su caché. PAC; reiniciar el servicio nunca reanuda una prueba de corrección. Si un puerto guardado no se puede enlazar o los metadatos de conexión no son válidos, el inicio se niega en lugar de asignar silenciosamente otro dirección. El primer comienzo exitoso posee `codex-desktop-compatibility/connection.json` bajo el hogar OpenCodex. No elimine ese archivo como una solución de reinicio de rutina: una dirección diferente Requiere iniciar la aplicación con una nueva conexión administrada.
+
+El soporte actual se limita a la compilación Windows evaluada. `26.924.2738.0`, basado en archivos nativos inicio de sesión. Los proxies HTTP/HTTPS y los proxies SOCKS5 autenticados se admiten a través de la función compartida política de salida; NO_PROXY puede seleccionar explícitamente una ruta directa. Las conexiones proxy no funcionan Volver a la salida directa. El modo de cliente administrado OpenCodex aún no es compatible con estos controles. Para este relé de escritorio, HTTP(S) `ALL_PROXY` También se aplica cuando `HTTPS_PROXY` es inestable. Un inválido
+`HTTPS_PROXY` Rechaza la operación en lugar de volver a `ALL_PROXY`. Una aplicación desconocida crea una corrección de rechazos; la integración no parchea los archivos de la aplicación o cambiar al modo libre de inicio de sesión. La configuración raíz nativa y su perfil seleccionado deben enrutar `openai_base_url` a este proceso escucha de datos locales. Un proveedor, destino o anulación no admitida diferente rechaza Inicio de observación. Esta comprobación no determina el modelo seleccionado de una conversación o prueba que las anulaciones locales del proyecto están ausentes. Si el enrutamiento o la compilación de la aplicación instalada cambia durante un ensayo, la corrección se rechaza antes de la siguiente respuesta de uso; los controles periódicos también regresan un ensayo ocioso a la observación. Las respuestas originales y otro tráfico de aplicaciones continúan retransmitiendo. El reemplazo nativo del archivo de inicio de sesión o la rotación token también invalidan la prueba, incluso cuando el Devuelve la misma cuenta. Detener y comenzar la observación para vincular el inicio de sesión actual antes de otro prueba explícita; las respuestas antiguas no pueden autorizar la sesión de reemplazo. Cambios en la configuración raíz de Codex (excepto su tabla y formato de servidor MCP), configuración del proveedor, alias de modelo, perfiles de enrutamiento, Las rutas de reserva, compactación o modelo de memoria también invalidan el contexto de observación. Restaurando el anterior configuración no restablece su consentimiento: detener y comenzar la observación, a continuación, confirmar un nuevo ensayo cuando sean elegibles. Esto detecta los cambios en las rutas configuradas, no qué modelo de una conversación realmente selecciona; una configuración de proveedor mixto sin cambios no es prueba de aislamiento del proveedor.
+
+Después de la preparación del certificado y un inicio manual exitoso, habilite **Reanudar la observación cuando OpenCodex comienza** en el mismo panel. La configuración opcional OpenCodex
+`"desktopCompatibility": { "startOnProxyStart": true }` reanuda **Sólo observación** Cuando el modelo proxy comienza. Omisión o `false` Desactiva este inicio automático. Reutiliza los puntos finales guardados y certificado de confianza, nunca inicia Codex ni registra confianza, y nunca reanuda una prueba de Aplicar. La observación automática espera a que termine la sincronización de configuración de inicio. Fallo de sincronización o espera más de dos minutos deja la observación; inspeccione su estado y comience manualmente después resolver el problema de inicio. El proxy del modelo continúa siguiendo su propia política de preparación. Si faltan requisitos previos, la observación permanece desactivada y el proxy del modelo continúa ejecutándose. Guardar esta preferencia no inicia ni detiene el servicio actual. Utilice su servicio separado Controles para cambios inmediatos. Si no se puede confirmar un guardado, actualice su estado antes de volver a intentarlo.
+
+Un servicio en ejecución no establece que Codex esté conectado a través de él. Un lanzamiento normal de la aplicación o un actualizador de aplicaciones puede omitir el argumento de conexión administrada. Guardar borradores, cerrar Codex y, a continuación, utilizar
+**Abrir Codex** en este panel para restaurar esa conexión. Este control nunca cierra la aplicación para usted. Después de una actualización de Codex, una versión de aplicación no evaluada rechaza la corrección hasta que su compatibilidad es Revisado; reinstalar el certificado no hace que una compilación no evaluada sea compatible.
+
+El panel también puede informar la última comprobación de compilación completada como metadatos de diagnóstico: el paquete versión contra la que se evaluó esta compilación, la versión del paquete observada en ese control, si coincidían, y cuando el cheque terminaba. Es una observación pasada, no una lectura en vivo de la paquete instalado. Una vez que el servicio se detiene, la aplicación se actualiza o una comprobación sigue ejecutándose o se ha realizado. interrumpido, puede retrasar la instalación real; solo una sonda completa lo actualiza y un
+`verified` resultado describe el paquete observado en esa comprobación, no lo que está instalado ahora.
+
+En Windows, un reinicio explícito de la aplicación completa OpenCodex conserva un bucle ya activo compatibilidad argumento PAC solo cuando el proceso actual OpenCodex posee la compatibilidad de servicio En entorno de ejecución. Se rechaza un punto final obsoleto o extraño antes de detener Codex; reemplazo del entorno de ejecución durante el reinicio también impide el relanzamiento administrado. La aplicación se inicia a través de la activación del paquete Windows. Se comprueba el identidad del paquete y argumento de enrutamiento después del lanzamiento; causa argumentos de enrutamiento de la aplicación principal ilegibles o conflictivos Rechazo antes del reinicio. Esto no permite un modo de compatibilidad, instalar un certificado, o ver y reiniciar la aplicación automáticamente. Lanzamientos normales sin ese argumento de enrutamiento keep su comportamiento existente.
+
+
+
+### Cobertura de transporte y evidencia de recuperación
+
+El panel de compatibilidad informa de las respuestas de uso JSON/SSE comprobadas por identidad y actualmente flujos enlazados por separado de las conexiones abiertas. Estas son observaciones de retransmisión de por vida, incluyendo las solicitudes realizadas por los clientes de diagnóstico. No identifican el envío nativo probar que la aplicación actualizó su caché autorizado o probar la recuperación del compositor. No se agrega ningún cuerpo de solicitud, token, ID de cuenta o IP de origen a este estado de diagnóstico.
+
+[Número .6196](https://github.com/lidge-jun/opencodex/issues/6196) reporta una construcción macOS cuya Las solicitudes de puerta autorizadas se originan en el servidor de aplicaciones Rust incluido y en la derivación de Chromium Configuración de PAC. Un PAC saludable, certificado o solicitud sintética no puede establecer la cobertura de ese transporte. Este experimento Windows no es una solución para ese bloqueador de diseño macOS.
+
+Antes de agregar otra plataforma o transporte, documente y valide esta secuencia:
+
+1. Identifique el proceso y el transporte reales que envían cada solicitud de puerta autorizada.
+2. Demostrar que una solicitud de origen de aplicación llega al relé previsto, por separado de los clientes de prueba.
+3. Verifique el esquema de respuesta y la ruta de caché/actualización de la aplicación para la compilación instalada exacta.
+4. En el agotamiento natural de la cuenta, verifique la presentación del compositor original, proveedor independiente Finalización y conservación de inicio de sesión, chat, hilos existentes y conexiones remotas.
+5. Verifique el comportamiento de apagado, lanzamiento ordinario, reinicio y actualización; no infiera uno de otro.
+
+La política actual sólo `/backend-api/wham/usage` y su `/stream` punto final. Inicialización de conversaciones y otros puntos finales, incluyendo sus `blocked_features` y
+`limits_progress`Su presencia no es un permiso para limpiarlos: pueden representar restricciones no relacionadas. Windows build's renderer-to-Electron (en inglés) fetch path no establece la ruta de red de un sistema operativo/construcción diferente o de cada aplicación-servidor RPCEl enrutamiento del servidor de aplicaciones requiere su propio diseño revisado; cambiar las URL del proveedor de modelos por sí solo no es prueba de que el tráfico de la cuenta, el inicio de sesión o el control remoto siga la misma ruta. Estos controles no instalan ningún envoltorio automático de servidor de aplicaciones, cambio de proxy global o reescritura de inicio de sesión.
+
+
+
+## Modelos encaminados durante el modo de reserva Codex
+
+Codex Pool puede proteger opcionalmente las cuentas de grupo almacenadas en un uso seleccionado de 5 horas o semanal umbral. La cuenta de escritorio/principal mantiene su bloqueo separado del 98%. Establecer `codexPool.lowQuotaProtection` en la configuración para pausar cuentas, registrar un log-and-API alerta, o ambos; ver [configuración de enrutamiento](/es/reference/configuration/routing/#codex-pool-low-quota-protection). Una pausa tiene efecto para la siguiente selección inmediatamente, mientras que guardarla en el disco se aplaza. Las respuestas de cuota Pool pueden autorizar una pausa solo con el uso válido y una credencial capturada Eso sigue siendo actual. Una respuesta sin esa prueba puede actualizar el uso mostrado sin pausar una cuenta. Compruebe el servidor autenticado `GET /api/codex-auth/low-quota-events` historia para `logged`
+alertas o guardar fallos. El curriculum vitae manual permanece en vigor para el episodio de cuota actual. Los La alerta predeterminada solo llega al registro y API. Añadir `actions.desktop: true` para mostrar también un macOS o Notificación Linux en la máquina que ejecuta el proxy; Windows permanece solo en el registro.
+
+Cuando se agote la cuota de 5 horas de ChatGPT, Codex puede ofrecer un modelo de reserva (`gpt-reserve` / Reserva Luna). Mientras ese estado está activo, el selector de modelos Codex puede hacer
+**cualquier otra entrada inseleccionable — incluyendo modelos enrutados opencodex**, aunque esos Ejecutar en proveedores independientes y credenciales y no consumir ninguna de la cuota agotada.
+
+**Este es un comportamiento del cliente Codex que el enrutamiento proxy de modelo ordinario no puede cambiar.** El Estado de reserva llega desde el backend ChatGPT en la propia conexión autenticada del cliente, no a través de El proxy. Las encuestas de aplicaciones de escritorio `backend-api/wham/usage` y trata la reserva como activa cuando La respuesta lleva `rate_limit_upsell.banner_type = "luna_reserve"`, el primario
+`rate_limit.allowed` es `false`, y `additional_rate_limits[]` Contiene una entrada con
+`limit_name = "gpt-reserve"` Eso todavía está permitido. Mientras eso se mantiene, la aplicación obliga a El modelo de conversación para `gpt-reserve` y reescribe cualquier otra elección a ella — el El selector es contraído a la entrada de reserva por el cliente, y un `model =` valor en
+`config.toml` Se reemplaza de la misma manera. Nada de esto consulta el catálogo de modelos, por lo que no La representación de nuestro lado participa en la decisión. opencodex no tiene concepto de reserva para ajuste, y la alternativa — informar mal su propia cuota a su propio cliente — sería un bicho peor que el que cubría.
+
+**Solución:** Los modelos en sí permanecen completamente utilizables; solo el modelo de la aplicación Codex La selección está cerrada. Llegar a ellos desde un cliente que no consulta el uso de ChatGPT instantánea:
+
+- Claude Code a través del proxy (`ocx claude`).
+- Cualquier cliente HTTP contra el local `/v1` punto final.
+- Las propias rutas de solicitud del panel.
+
+El comportamiento normal del selector vuelve cuando se restablece la ventana de 5 horas.
+
+**Lo que el proxy responde mientras ese estado se mantiene.** Una vez que la aplicación se ha colapsado, el selector que envía
+`gpt-reserve`, y sin el [opt-in de escritorio authless](#authless-codex-desktop-opt-in) opencodex no tiene derecho de reserva para enviar con él. Esta solicitud solía ser enviada como un modelo nativo y volver como el propio upstream `The usage limit has been reached`, cuyos nombres ni la verdadera causa ni el escenario que lo cambiaría. Ahora se rechaza localmente con un HTTP 400 que dice `codexDesktopAuthless` está apagado y da el comando que lo enciende (`ocx system settings --desktop-authless on`) Nada se envía de origen y no se gasta ninguna cuota.
+
+El rechazo es deliberadamente estrecho. Se aplica solo a `gpt-reserve` en una solicitud de loopback-admitida que alcanzaría la ruta canónica ChatGPT. A `gpt-reserve` El selector que tiene el operador alias o enrutado a otro proveedor sigue funcionando, una solicitud admitida en un oyente no loopback En el caso de que se utilice un proxy, `client` El rol runtime no cambia. Habilitar el opt-in restaura el camino normal de la Reserva en lugar del rechazo.
+
+
+
+## El selector de subagentes
+
+La sincronización de catálogos pone a disposición de Codex los modelos de subagentes seleccionados; ver [Codex Selector de modelos de aplicaciones](/es/guides/codex-app-models/#subagent-selection) para el pedido del recolector y [Interfaz de subagentes](/es/guides/sub-agent-surface/) para la delegación v1/base/v2 y el comportamiento de reserva.
+
+
+
+## Codex calentamiento de la cuenta
+
+Cuando a ChatGPT se agrega o reautentica la cuenta, OpenCodex normalmente lo verifica antes de guardarlo con una pequeña solicitud de transmisión al Codex Responses Esperando por el éxito. `response.completed`, por defecto `gpt-5.6-luna`, y reintentos con `gpt-5.5` en HTTP 400 o HTTP 404. Los errores públicos contienen categorías de fallos fijos en lugar de cuerpos de respuesta ascendentes sin procesar.
+
+Un HTTP 429 de un intento de calentamiento se reporta como `codex_warmup_rate_limited`. Vuelva a intentar después de que se elimine la restricción temporal o se restablezca el límite de uso; iniciar sesión nuevamente no restablece estos límites. Un intento fallido de calentamiento no agrega una nueva cuenta ni reemplaza las credenciales existentes. Esto difiere del registro diferido confirmado por cuota a continuación, que puede guardar una cuenta restringida sin una solicitud de modelo. Los errores HTTP 401/403 conservan la guía de autenticación.
+
+Si la búsqueda de uso autenticada de la nueva credencial OAuth confirma una cuota agotada de 5 horas, semanal o mensual, la cuenta se guarda sin esta solicitud de modelo y muestra **Validación pendiente**. No puede servir solicitudes de grupo, incluso después de reiniciar o actualizar token. Una vez que la cuota se recupera, **Actualizar las cuotas** Finaliza la validación: una lectura de uso fresca y completa con espacio libre permite una pequeña solicitud de modelo, y solo una respuesta completa habilita la cuenta. Las lecturas fallidas o incompletas y la validación fallida preservan la restricción. Las encuestas de cuentas pasivas no activan la validación diferida. El uso desconocido durante el registro inicial conserva la puerta de calentamiento normal.
+
+`ocx account refresh openai` y `ocx account list openai --quota --refresh` Solo lee el uso. La validación del modelo gasta cuota y requiere una sesión de panel humano: abrir `ocx gui` y haga clic **Actualizar las cuotas** después de la recuperación. Para un host sin cabeza, acceda a su panel de control desde su navegador; un administrador token solo no autoriza la validación. La validación se puede completar mientras una cuenta está en pausa sin reanudarla o seleccionarla. Los errores de autorización del modelo permanecen visibles hasta que la validación o re-autenticación exitosa los borra.
+
+En **Codex Set → Multi-auth**, habilite el **Créditos Codex** En el **Codex Autonomía** encabezado para mostrar los últimos créditos observados de cada cuenta principal y de grupo directamente debajo de la semana. Está desactivado por defecto y persiste como `showCodexCredits`. El saldo es un número con formato local, con advertencia ilimitada o de exceso cuando se informa; la barra indica disponibilidad, no un porcentaje, porque no se proporciona ningún límite de crédito total. Solo se muestran los cambios de ocultación de créditos, y un nuevo inicio de sesión espera su propia observación.
+
+Cuando una cuenta llega al 100% en una ventana de uso y aún tiene créditos, la parte superior sigue sirviéndola y obtiene el saldo. OpenCodex no permite que eso suceda de forma predeterminada: una cuenta al 100% se apaga mientras su ventana semanal o mensual (solo mensualmente en planes de 30 días) o su ventana de 5 horas está llena, y se usa nuevamente una vez que se restablece esa ventana. El orden de las otras cuentas no cambia, y cuando no hay otra cuenta disponible, la selección no encuentra nada en lugar de gastar créditos. Una solicitud para la cuenta principal se rechaza como un rechazo de bloqueo duro hasta el restablecimiento. Una ventana completa de 5 horas sin un tiempo de reinicio mantiene una cuenta solo mientras esa lectura está fresca. Permitir que la cuenta principal no levante su bloqueo duro (encendido por defecto al 98%), lo que aún lo detiene primero; apague el bloqueo si la cuenta principal debe gastar créditos (un bloqueo al 100% todavía lo detiene al 100%). Para que las cuentas sigan funcionando de sus créditos, active **Usar créditos** al lado de la **Créditos Codex** cambiar en el encabezado Auth Codex. El interruptor permite todas las cuentas. Para elegir las cuentas una por una, abra una tarjeta de cuenta **⋯** menú y uso **Usar créditos después del límite** allí; el interruptor de encabezado muestra una posición media cuando solo algunas cuentas están activadas. Una cuenta que se le permite gastar lleva un **Utiliza créditos** insignia en su tarjeta. Comienzan nuevas cuentas. La elección se almacena en `creditCodexAccountIds` y nunca reembolsa los créditos; el **Créditos Codex** display switch solo muestra los saldos y nunca cambia el enrutamiento.
+
+En el caso de una cuenta principal con acceso opcional y sin pausa y con una ventana de uso completa, el ciclo de recuperación en segundo plano renueva las observaciones de crédito a plazos a partir de los tres minutos de edad, incluso cuando el panel de control está cerrado. Prepara un token válido antes de la búsqueda de uso autenticado para que el saldo pueda observarse nuevamente antes de su límite de frescura de cinco minutos. Los créditos faltantes, nulos, restringidos o retractados mantienen la cuenta elegible para búsquedas de recuperación bajo el reintento de retroceso existente. Las solicitudes siguen siendo rechazadas hasta que se observe un nuevo saldo positivo o créditos ilimitados. `has_credits` Los recuentos de mensajes solos o aproximados no prueban un saldo gastable. Con el consentimiento, esta negativa de crédito-evidencia `Retry-After` es como máximo cinco minutos, o un reinicio de la cuota incluida más pronto; sin consentimiento todavía sigue el reinicio de la cuota incluida. Una búsqueda fallida o incompleta no actualiza la evidencia de equilibrio anterior. El bloqueo duro de la cuenta principal separada, la cuarentena por necesidad-reauth y los retrasos de reintento de origen aún se aplican. Esta búsqueda de metadatos no envía una solicitud de validación de modelo ni establece o borra el estado de área de necesidades de la cuenta.
+
+La revalidación de fondo es separada y desactivada por defecto. Requiere Token Guardian, el `openai` proveedor `proactive` política de actualización, y `tokenGuardian.codexWarmupEnabled`. Se salta las cuentas a la espera de la validación de registro diferido.
+
+
+
+### Después de una actualización del plan ChatGPT
+
+Actualizar la cuota de la cuenta principal en Auth Codex después de cambiar su plan ChatGPT. Cuando el La respuesta de uso autenticada confirma que una ventana larga ha reemplazado la ventana de cinco horas, opencodex elimina la lectura antigua de cinco horas tanto de la admisión de solicitudes como de la selección de cuentas. Una respuesta permitida con ventanas primarias y secundarias puede omitir la ventana terciaria opcional. Esta recuperación utiliza la asignación del plan incluida y no requiere habilitar **Usar créditos**. Los datos de uso parciales o no válidos retienen el bloque anterior hasta que se confirma la recuperación.
+
+
+
+### Cancelación de la reautenticación del dispositivo de la cuenta principal
+
+Cuando se cancela la reautenticación del dispositivo de la cuenta principal, un fallo temporal de red o DELETE, o una respuesta con un estado desconocido o no terminal, mantiene el flujo activo y la indicación de falla de cancelación para que se pueda volver a intentar la cancelación. El sondeo de estado normalmente continúa, por lo que aún se puede detectar un inicio de sesión que se complete. Si un fallo de cancelación reintentable se superpone a una respuesta de estado non-2xx GET mientras el flujo está `pending` o `committing`, cualquier orden de respuesta conserva el reintento de cancelación en ese mismo flujo, con su último código de dispositivo proporcionado por el servidor, verificación URL y fase. El error GET HTTP aún deja de ser encuestado, pero la cancelación se puede volver a intentar sin iniciar un segundo inicio de sesión POST. Una terminal `failed` La respuesta libera el flujo y muestra la razón de fallo normalizada; solo `succeeded` Informes de inicio de sesión exitoso. A confirmado `cancelled` La respuesta libera el flujo para que se pueda iniciar un nuevo inicio de sesión del dispositivo. Una respuesta definitiva de HTTP 404 con código `unknown_flow` también libera el ID de flujo vencido para que se pueda iniciar un nuevo inicio de sesión del dispositivo, pero no informa un inicio de sesión exitoso o una cancelación confirmada. Las respuestas POST tardías, GET o DELETE de un flujo anterior no pueden cambiar el nuevo flujo ni informar el éxito del inicio de sesión.
+
+
+
+### Por qué una cuenta dejó de servir solicitudes
+
+Cuando una cuenta deja la selección de grupo, la razón viaja con la decisión en lugar de ser recalculada para su visualización, por lo que una superficie nunca puede informar una cuenta saludable mientras el enrutamiento la está abandonando. `GET /api/codex-auth/accounts` lleva `reauthReason` al lado `needsReauth` En cada cuenta: `missing_credential` por una credencial que nunca fue almacenada, `refresh_failed` para una actualización de credenciales que sigue fallando, y `quota_unauthorized` cuando la propia búsqueda de uso fue rechazada.
+
+Una actualización de la cuenta principal que no se completa aún responde `503` con `Retry-After`, porque un reintento todavía puede tener éxito. El mensaje ahora agrega que un fallo que persiste significa que la cuenta principal necesita reautenticación, en lugar de solo pedir otro intento.
+
+
+
+### Dirección de ventana inactiva opcional
+
+`codexPool.startIdleWindows` es un booleano opcional y por defecto `false`. Cuando se activa, una nueva La solicitud real no vinculada podrá ser colocada en una cuenta elegible cuya ventana de cupos cortos observados esté al 0% con evidencia de que su reloj de cinco horas no ha comenzado. Esta comprobación va después de la conversación y la afinidad familiar, por lo que un La vinculación sigue siendo autorizada; también gana un pin de cuenta explícito o una preferencia de cuenta manual. Se omiten los ámbitos de cuota del modelo independiente y el cursor activo compartido no cambia. Después de la opción de ventana inactiva, la selección de estrategia normal se reanuda para otras conversaciones.
+
+La observación no debe ser mayor de cinco minutos, y la ventana corta debe ser explícitamente 18.000 segundos. Su reinicio debe ser observado dentro de los 60 segundos de `observation + 5h` (en lugar de un tic-tac o un restablecimiento transcurrido). Un síncrono, process-local reservation evita selecciones duplicadas para la misma cuenta y ventana. Los El plazo de reserva es de al menos 5 horas más un minuto después de la selección; una observación fresca es requerido después de esa fecha límite antes de que la misma cuenta pueda ser dirigida nuevamente. Las reservas se borran cuando el proxy El proceso se reinicia y nunca se mantiene en disco.
+
+Habilitarlo en su configuración existente:
+
+```json
+{
+ "codexPool": { "startIdleWindows": true }
+}
+```
+
+Si ninguna cuenta cumple con los criterios, se aplica el enrutamiento ordinario. Esta característica solo dirige una solicitud entrante real. No crea ninguna petición sintética ni temporizador.
+
+
+
+### Mantener una cuenta degradada fuera de rotación
+
+`codexPool.excludedPlans` enumera las claves de plan que la selección automática de grupo omite, emparejadas insensiblemente a las mayúsculas y minúsculas contra el plan almacenado en cada cuenta. Está ausente por defecto, por lo que una instalación existente gira exactamente como antes.
+
+```bash
+ocx config set codexPool '{"excludedPlans":["free"]}'
+```
+
+Esta es una política de selección, no un bloqueo. Una cuenta excluida mantiene su credencial, historial de cuotas y afinidad de hilos, permanece visible en la superficie de la cuenta y aún se puede acceder a ella mediante una selección explícita de la cuenta, como `work/gpt-5.5`. Lo que cambia es que la rotación automática deja de elegirla, incluso cuando ya está activa o ya está vinculada a un subproceso —, que es el estado que deja una suscripción caducada.
+
+La cuenta principal de Codex permanece exenta de la exclusión del plan; el enrutamiento solo de selección no lee su credencial nativa vallada. Si se excluyen todas las cuentas de grupo elegibles, la selección automática no devuelve ninguna cuenta. Las rutas con calificación de cuenta explícita permanecen disponibles y aún imponen pausa, autenticación y derecho de modelo. La tarjeta de cuenta y CLI muestran el plan de enrutamiento excluido por separado del estado de la credencial. No hay ninguna `minimumPlan` porque los nombres de los planes no definen un orden total.
+
+
+## Restauración de Codex nativo
+
+`ocx stop` detiene el proxy y cualquier servicio en segundo plano instalado, luego intenta restaurar Codex nativo. OpenCodex elimina los artefactos de enrutamiento verificados e informa de una restauración incompleta cuando no puede recuperar archivos de configuración de forma segura.
+
+La recuperación puede requerir una revisión manual cuando la revista no puede verificar los archivos actuales. [recuperación sin hashes de inyección](#recovery-without-injection-hashes).
+
+```bash
+ocx stop # stop the proxy + service, restore native Codex
+ocx restore # restore without stopping (alias: ocx eject)
+ocx restore back # point plain Codex at the running proxy again
+```
+
+Cuando opencodex se ejecuta como un [servicio de fondo](/es/reference/cli/lifecycle/#background-service), se establece
+`OCX_SERVICE=1` Un reinicio impulsado por el servicio hace **no** thrash el Codex config — solo un explícito
+`ocx stop` / `ocx service stop` restaura Codex nativo.
+
+
+
+### Recuperación sin hashes de inyección
+
+El diario guarda el original `config.toml` y `opencodex.config.toml` Más hashes del estado OpenCodex inyectado. Un diario heredado o una interrupción antes de que se registraran esos hashes no pueden ser eliminados. probar que el contenido del archivo posterior pertenece a OpenCodex. Si alguno de los archivos difiere de su original guardado y carece de su propio hash de estado inyectado, recuperación automática del diario y falla en el informe de restauración nativa sin cambiar ni el archivo ni la revista. El original guardado permanece disponible para la comparación; revisarlo junto con los archivos actuales antes de elegir una acción de recuperación manual.
+
+Los archivos que ya son iguales a sus originales guardados se aceptan sin reescribirlos. Un archivo que falta es distinto de un archivo vacío. Los hashes inyectados verificados aún permiten la restauración normal de las instantáneas. y ediciones posteriores en configuración respaldadas por hash conservan el comportamiento de limpieza de campo propio existente.
+
+Sincronización y `ocx restore back` también rechazan una configuración enrutada existente cuyo diario no coincide con el valor basal previo a la inyección. Esto evita que se coloque un nuevo hash de inyección. a un original más antiguo. Una configuración genuinamente nativa se puede guardar como una nueva línea de base antes de inyección. El comportamiento explícito de exclusión voluntaria del proveedor externo no cambia.
+
+
+
+
+### Subagente de reserva y compatibilidad con V2
+
+En **Subagentes → Configuración de delegación**, edite la cadena de reserva ordenada y su intervalo de sondeo de disponibilidad (5000–600000 ms), luego guárdela por separado de la lista destacada. Un destino configurado que ya no se anuncia permanece en la cadena hasta que lo elimine. La lista y la cadena de reserva son configuración separadas; este editor no hace que la lista reemplace la política de reserva.
+
+Cuando un modelo preferido enrutado puede recibir trabajo V2 de un padre nativo ChatGPT, el panel explica la limitación de tareas cifradas ascendentes. Las tareas legibles de los padres enrutados no se ven afectadas. La orientación utiliza `/api/v2` modo y estado de pin V1 nativo; el API actual no expone la activación de recuperación o la elegibilidad específica de la solicitud, por lo que el panel informa que son desconocidos. La delegación V1/plaintext-compatible sigue siendo una alternativa. La recuperación experimental de V2, donde es elegible y explícitamente habilitada, agrega uso de cuota, latencia, dependencia del backend y posible pérdida de fidelidad; no repara el protocolo ascendente. Véase [superficies de subagentes](/es/guides/sub-agent-surface/) y [La limitación de origen](https://github.com/lidge-jun/opencodex/issues/92).
+
+
+
+## Historial paginado de rechazo de seguridad
+
+Cuando una tienda de historial afectada admite registros paginados, la transición de un proveedor puede regresar. `history_paginated_requires_native_writer`. Esa razón ya no rechaza la configuración Codex, el perfil de referencia o el catálogo de modelos. `ocx sync` y `ocx start` todavía escribir esos archivos y establecer `model_catalog_json`, por lo que el selector de modelos Codex sigue mostrando todos los modelos con enrutamiento OpenCodex. Solo esta es la única razón por la que el historial de conversaciones se vuelve a etiquetar, porque Codex asigna ordinales de implementación paginados en su propio escritor y no cambia eso. Cualquier otra razón de pre-vuelo historia — una base de datos de estado ilegible, un despliegue cuya identidad cambió, o un pre-vuelo que no podía ejecutar — todavía rechaza toda la transición y lo devuelve, porque esos pueden tener éxito en un intento posterior. OpenCodex nunca modifica los archivos de despliegue paginados o las filas de hilos en este estado. Las conversaciones existentes mantienen el proveedor con el que ya están etiquetadas y no se migran; las nuevas conversaciones se enrutan normalmente a través del proxy. Cuando se retira la etiqueta, a `[model_providers.opencodex]` La tabla que la casa ya tenía se mantiene en lugar de retirarse, incluso en la forma de anulación de raíz (loopback), por lo que las conversaciones cuyas filas están etiquetadas `opencodex` mantener un identificador de proveedor que todavía existe. Esto incluye filas heredadas en una tienda con capacidad de migración. Las impresiones CLI `Codex resume history: left to Codex's native writer (history_paginated_requires_native_writer)`.
+
+Al volver al formulario de anulación de raíz, OpenCodex conserva una `[model_providers.opencodex]` definición antes de realizar la configuración, incluso si el historial pasa actualmente. Esto mantiene más viejo `opencodex` conversaciones solucionables si Codex migra el historial después de ese commit o mientras se inicia el trabajador en segundo plano. Las nuevas conversaciones aún usan el proveedor raíz seleccionado; la restauración explícita mantiene sus protectores de eliminación separados.
+
+`ocx restore`, `ocx stop` y `ocx uninstall` Ya no se niegan a `history_paginated_requires_native_writer`. Toman cada clave de enrutamiento raíz OpenCodex y mantienen la `[model_providers.opencodex]` definición en el disco, por lo que las conversaciones cuyas filas todavía nombran ese proveedor siguen resolviendo mientras se `codex` Deja de apuntar al proxy. El resultado se informa como una restauración parcial que nombra las líneas retenidas, y `ocx restore --remove-codex-provider-table` También los elimina, después de lo cual esas conversaciones dejan de abrirse.
+
+Habilitar la integración en su formulario de tabla de proveedores en un hogar cuyo `openai`-etiquetado conversaciones Codex ya ha paginado solía ser rechazado directamente con `history_paginated_openai_requires_native_writer`: no se escribió nada y la integración quedó deshabilitada. OpenCodex ahora completa esa transición manteniendo la raíz administrada `openai_base_url` Anular al lado del `[model_providers.opencodex]` mesa. Codex fusiona la anulación en su `openai` proveedor, por lo que esas conversaciones siguen llegando al proxy sin ser reetiquetadas y no se toca ningún byte de despliegue o fila de hilos. Solo un formulario de enrutamiento que requiere el `x-opencodex-api-key` cabecera de admisión todavía se niega, porque el proveedor incorporado de Codex no puede llevar esa cabecera; sus nombres de mensaje los dos configuración que resolverlo — ruta Codex a través del loopback oyente por lo que la anulación puede ser retenido, o establecer `syncResumeHistory` a `false` aceptar que esas conversaciones se reanuden contra el propio punto final Codex de OpenAI.
+
+
+
+### Filtros de proveedor de listas de hilos remotos
+
+El enrutamiento de tabla de proveedor cambia el ID de proveedor predeterminado para que las nuevas conversaciones `opencodex` mientras El historial que no se puede volver a etiquetar de forma segura puede permanecer etiquetado `openai`. Algunos nativo app-server/mobile versiones tratan a un omitido `thread/list.modelProviders` como el proveedor predeterminado actual solamente, para que esas conversaciones existentes puedan desaparecer de esa lista remota aunque su fila de base de datos y el despliegue están intactos. Un cliente de lista compatible puede enviar `modelProviders: []` Para solicitar todo proveedores. OpenCodex no puede volver a escribir ese RPC porque el cliente remoto habla directamente con el Codex App-Server nativo en lugar del proxy de inferencia.
+
+`ocx sync` y `ocx start` incluir la advertencia cuando se aplica una ruta de mesa del proveedor. Si a usuario-propiedad raíz URL envía el comando por la rama sin enrutamiento, el CLI omite la advertencia. En cliente-modo de compactación, el CLI puede retener ese URL, aplicar el `opencodex` tabla de proveedores, y Incluya la advertencia. El panel de control muestra una sugerencia de preferencia separada cuando cualquiera de las opciones está habilitada. Aparece una vez si ambas configuración están habilitadas, independientemente de la raíz URL. Los informes de sugerencias habilitados preferencias; esto no significa que Authless Desktop sea efectivo en la ruta actual. Escritorio Authless se aplica solo al enrutamiento efectivo sin bucle de retorno y se ignora para el enrutamiento de cliente remoto o oyentes que requieren un encabezado de admisión. La advertencia no es una migración: OpenCodex no edita etiquetas de proveedor simplemente para influir en un filtro de lista del lado del cliente. Verifique la conversación en Codex nativo y la versión app-server/client; no reescriba el historial paginado para hacer que una lista remota lo incluya.
+
+No reescriba una implementación paginada activa o una fila de hilos para migrar esas conversaciones usted mismo. Cierre la conversación afectada antes de cualquier recuperación e informe el error exacto y las versiones sin cargar el historial privado. Una copia de seguridad o un script exitoso por sí solos no prueban que la conversación sea visible nuevamente. Compruebe la conversación restaurada en Codex después de reabrir.
+
+
+
+## Dirección a mitad de giro nativa experimental
+
+Para un modelo compatible en la ruta canónica de reenvío ChatGPT y un cliente que envía `response.steer`, habilita ambas opciones en `~/.opencodex/config.json` y reiniciar OpenCodex antes de comenzar un nuevo giro:
+
+```json
+{
+ "websockets": true,
+ "codexNativeSteering": true
+}
+```
+
+Fusione estas claves en la configuración existente; no reemplace la configuración de su proveedor/cuenta. Esta opción está desactivada por defecto. Reenvía la dirección al mismo WebSocket nativo configurado explícitamente conexión y la cuenta seleccionada, preservando las respuestas automáticas sucesoras y pendientes continuación de saved-tool-result. Aceptación significa en cola, aún no aplicada.
+
+Suministrar los resultados de la herramienta requerida o las decisiones de aprobación **Una vez por padre**, en el mismo carril. Los resultados pueden llegar antes `response.steer.pending`: el relé también coincide con el completado llamadas y aprobaciones anunciadas por los padres. A `name` en un stub de salida de función pendiente es opcional en el resultado, como en el esquema nativo. Los mensajes de usuario adicionales pueden acompañar estos resultados; se rechazan los mensajes del sistema/desarrollador, los resultados duplicados y los identificadores de llamadas no relacionados. No vuelva a ejecutar las herramientas ni reenvíe el texto de la dirección aceptado. Las declaraciones de modelo, cuenta, herramienta y enrutamiento permanecen sin cambios. Configuración de generación validada puede cambiar en una continuación explícita de resultados guardados como se describe a continuación. Otros cambios requieren un giro explícitamente detenido o terminado y un nuevo envío normal. Múltiples conversaciones independientes utilizan conexiones independientes.
+
+HTTP fallback, puertas de enlace no canónicas, rutas públicas API-key, modelos traducidos, sidecars, intentos Combo y texto sin formato V2 La restauración no admite esta opción. No añade capacidad de dirección a un modelo o Un cliente que no lo tiene. Las rutas no soportadas devuelven un error de protocolo en lugar de hacerlo de forma silenciosa. Ignorar la entrada. La entrega desconectada o con tiempo de espera puede ser desconocida: nunca automáticamente volver a enviar herramientas o texto de dirección. Los controles pendientes tienen plazos absolutos de confirmación de 90 segundos por presentación; Las esperas guardadas tienen un límite de 30 minutos.
+
+La implementación tiene protocolo sintético y cobertura de regresión, no Astra / cliente en vivo Certificación. Mantenga la opción desactivada para el trabajo de producción hasta que su ruta cliente / modelo ha sido verificada. Establecer `codexNativeSteering` a `false` y reiniciar para restaurar el Relé de respuesta única; no es necesario eliminar archivos de cuenta o conversación.
+
+
+
+
+### Dirección de los plazos de confirmación y contexto retenido
+
+Cada dirección enviada tiene una ventana de acuse de recibo fija de 90 segundos. Otros productos y los novillos adicionales no lo extienden. Una vez aceptado, la entrada permanece en cola mientras que la respuesta actual alcanza un límite seguro; Todavía se aplica. Después de que la respuesta termina, el sucesor debe comenzar dentro de los 90 segundos. Una solicitud de resultados o aprobación de la herramienta permite 30 minutos desde el primer notificación. Los avisos repetidos no renuevan esta espera. Presentación de resultados guardados inicia una nueva ventana sucesora de 90 segundos, que incluye controles locales de marcapasos/auth. Los reconocimientos que faltan siguen sujetos a sus plazos individuales anteriores.
+
+La conexión propia no tiene un límite de vida absoluto. Hasta 128 respuestas pueden compartirlo, y cada uno puede consumir legítimamente su propio reconocimiento, sucesor, flujo inactivo y entrada requerida. espera, por lo que los plazos por etapa anteriores componen el peor caso del orden de decenas de horas. Durante ese tiempo, el turn tiene un socket físico y una credencial anclada que no puede rotar. porque el canal deliberadamente nunca vuelve a entrar en la selección de cuenta. Trate una dirección habilitada conexión como un recurso de sesión de larga duración en lugar de una solicitud limitada ordinaria.
+
+Los marcos de dirección también comparten los límites de cuerpo y memoria configurados del proxy. Un marco de control arriba
+[`maxInboundBodyBytes`](/es/reference/inbound-body-admission/) Es rechazado antes se analiza en una conexión de control establecida (una trama inicial todavía se analiza antes de se aplica su límite basado en el tipo), y el cuerpo reconstruido enviado de origen se rechaza cuando excede
+[`maxUpstreamBodyBytes`](/es/reference/configuration/providers/). Cada El diario de reproducción de la conexión tiene un límite de 32 MiB y se cuenta como estado anclado contra
+[`appOwnedMemoryBudgetMb`](/es/reference/configuration/server/); admitiendo a journal degrada los cachés desalojables primero en lugar de fallar, y el agregado a través de revistas en vivo Tiene un límite de 128 MiB independientemente del presupuesto configurado.
+
+Un tiempo de espera significa **La entrega es desconocida**El servidor no rechazó la entrada. No vuelva a enviar una instrucción aceptada ni vuelva a ejecutar una herramienta automáticamente. Inspeccione el estado de la tarea real antes de decidir cómo reanudarla. Sin cambio de cuenta o API pagado Se realiza el fallback. La salida completada ya recibida en el cable se retiene para el historial de continuación local, incluso cuando el resumen del terminal lo omita. Conflictos El contenido u orden de los elementos causa un fallo explícito en lugar de una pérdida de contexto silenciosa.
+
+Para una comparación en vivo, use la misma versión, modelo y cuenta de cliente compatibles en conversaciones de prueba aisladas, una vez sin el proxy y una vez con él habilitado. Use una tarea de solo lectura, dirija mientras la salida está activa y compare la aceptación y el La verdadera adhesión de instrucción del sucesor. Repita mientras se obtiene una herramienta sintética o La aprobación está pendiente y después de una desconexión explícita. Registrar solo tipos de eventos, tiempos relativos y resultados redactados, no credenciales o cuerpos de tareas. Pasando simulacro Las pruebas de transporte no establecen soporte en vivo para el cliente / backend; no hay cuenta real La prueba de humo está implícita en estas instrucciones.
+
+
+
+## Inyección experimental de resultado de función nativa
+
+Para un cliente compatible que envía OpenAI multiagente `response.inject` mensajes, combinar estas claves en la configuración OpenCodex existente y reiniciar antes de Un giro fresco. No reemplace la configuración de su proveedor o cuenta:
+
+```json
+{
+ "websockets": true,
+ "codexNativeInjection": true
+}
+```
+
+La inicial `response.create` debe incluir explícitamente `"multi_agent": { "enabled": true }`. OpenCodex no lo habilita basado en un nombre de modelo. Un proveedor público OpenAI API debe usar `adapter: "openai-responses"`, `baseUrl: "https://api.openai.com/v1"`, su autenticación normal API-key y `upstreamWebsocket: true`. Ruta de la inicial modelo a través del prefijo configurado de ese proveedor. El relé añade el requerido
+`responses_multi_agent=v1` beta token en esa conexión pública API solamente, preservando otros configurados beta tokens. No sustituye una credencial de suscripción, cree una cuenta API o cambie automáticamente a una cuenta API facturada por separado.
+
+Las conexiones directas Canonical ChatGPT pueden optar por el mismo transporte experimentalmente, pero el contrato público API lo hace **no** establecer la suscripción a ChatGPT o a Codex Compatibilidad con App/CLI. Todavía se requiere un modelo ascendente compatible y un modo de ejecución. Ver la [Protocolo multiagente OpenAI](https://developers.openai.com/api/docs/guides/responses-multi-agent).
+
+Devuelve un resultado de la herramienta guardada después de que se haya completado la llamada a la función de desarrollador correspondiente:
+
+```json
+{
+ "type": "response.inject",
+ "response_id": "resp_example",
+ "input": [
+ { "type": "function_call_output", "call_id": "call_example", "output": "saved result" }
+ ]
+}
+```
+
+Utilice los identificadores de respuesta/llamada de la **La misma conexión**, no estos ID de ejemplo.
+`response.inject` acepta valor de cadena `function_call_output` Sólo. Usuario/sistema mensajes, arrays de salida enriquecidos, resultados de herramientas alojadas y `response.steer`
+No son aceptados por esta operación. La continuación más amplia del resultado guardado a continuación es a por separado `response.create` operación, no una conversión oculta de inyección rechazada. Múltiples resultados de función guardados pueden compartir un una sola inyección. Cada llamada se puede enviar solo una vez, incluso mientras está en cola.
+
+Los resultados de la herramienta paralela se ponen en cola y se envían un fotograma a la vez, ya que el éxito El evento identifica la respuesta en lugar de una inyección individual. El relé conservas `response.inject.created` y `response.inject.failed`. Mantiene el conexión viva después de que un terminal de respuesta mientras los resultados presentados esperan la confirmación o llamadas anunciadas esperan resultados, por lo que los resultados asincrónicos tardíos no se descartan.
+
+Cuando el servidor rechaza una inyección con `response_already_completed`, use su salidas guardadas devueltas en **Un cliente enviado** `response.create` Con el fin de
+`previous_response_id`, modelo/configuración sin cambios y el mismo carril. Incluye cada resultado excepcional exactamente una vez; no incluya productos ya aceptados. Los relay mantiene esa continuación en la cuenta / socket original y conserva la normalidad Solicitud de ritmo. Nunca ejecuta la herramienta de nuevo o crea una solicitud de recuperación en sí. Otras fallas permanecen visibles para que el cliente las maneje.
+
+Un reconocimiento faltante o una desconexión significa que la entrega puede ser **Desconocido**. Hacer no vuelva a enviar un resultado automáticamente, reinicie una herramienta o cambie de cuenta para volver a intentarlo. La cola pendiente está limitada a 32 tramas y 8 MiB, con 1.024 funciones anunciadas. llamadas, un diario de reproducción de 32 MiB y como máximo 128 respuestas por conexión propia. Los diarios de inyección comparten el presupuesto de memoria fijado y el techo agregado de 128 MiB con los diarios de dirección; ver [límites de memoria de dirección](#steering-confirmation-deadlines-and-retained-context). El límite de cuerpo configurado de origen se comprueba antes de que un resultado entre en la cola. incluso mientras otro resultado espera reconocimiento. Un `outbound_body_too_large`
+rechazo deja la conexión utilizable para un resultado corregido sin volver a ejecutar su herramienta. Cada inyección enviada tiene un plazo de confirmación de 90 segundos que no está relacionado con la salida. No se puede extender; una espera de resultados guardados está limitada a 30 minutos. Límites de trama existentes y los tiempos muertos todavía se aplican.
+
+Los proveedores traducidos, las pasarelas personalizadas, las rutas Combo/sidecar y la reserva HTTP hacen no ganar soporte de inyección. Los intentos no soportados devuelven un error explícito de desaparecer. La opción permanece desactivada por defecto; las pruebas de transporte sintético son No hay certificación de compatibilidad en vivo. Establecer `codexNativeInjection` a `false` y Reiniciar para retroceder. No es necesario eliminar ningún archivo de cuenta o conversación.
+
+
+
+
+### Resultados enriquecidos de la herramienta y aprobaciones explícitas después de completar la respuesta
+
+Con `codexNativeInjection` habilitado, un cliente enviado `response.create` en el mismo conexión propia ahora puede volver **no enviado** función/resultados personalizados que contienen texto, partes de imagen o archivo después `response.completed`. Suministrar la respuesta completada
+`previous_response_id`, el mismo carril y modelo/configuración sin cambios. Incluya cada resultado pendiente o la aprobación solicitada exactamente una vez; omita ya aceptado resultados inyectados. El proxy reenvía esta continuación llamador-enviado usando el cuenta original y toma con los controles de envío existentes.
+
+Los elementos de continuación soportados son `function_call_output`, `custom_tool_call_output`
+y `mcp_approval_response`. La salida de la herramienta puede ser una cadena o una matriz de `input_text`,
+`input_image` y `input_file` partes. Las piezas de imagen requieren `detail` (`auto`, `low`,
+`high` o `original`); el detalle del archivo es opcional (`auto`, `low`, `high`) Usar exactamente Una fuente de imagen/archivo. Los datos de archivo en línea requieren un nombre de archivo. Opcional
+`prompt_cache_breakpoint: { "mode": "explicit" }` se conserva. Campos no soportados son rechazados, no eliminados. Las referencias no se descargan o vuelven a subir por el proxy. Cada resultado tiene como máximo 1.024 partes de contenido dentro del límite de solicitud de 8 MiB existente. Una persona que llama al programa suministrado debe coincidir con la llamada anunciada; no puede suplantar otra herramienta o agente. El orden del contenido, las referencias de archivos y la ortografía original sobreviven.
+
+Para un servidor-emitido `mcp_approval_request`Pasa su ID como `approval_request_id` y Un explícito `approve: true` o `approve: false`. La denegación se envía sin cambios. El proxy no decide, por defecto, aprueba automáticamente ni ejecuta la herramienta solicitada. Se rechaza una decisión faltante o no relacionada. Alojado `multi_agent_call` acciones y Otras herramientas de servidor son **no** funciones de desarrollador: sus eventos, salidas y Los mensajes de agente cifrados se conservan, nunca se ejecutan ni se inyectan por OpenCodex.
+
+Esto no permite ricos / costumbre / aprobación **inyección de respuesta media**Ni simultáneos dirección en una respuesta multiagente. Esas operaciones tienen diferentes de origen contratos. La inyección no admitida es rechazada antes de reservar una llamada, por lo que un El resultado permanece disponible para una continuación explícita posterior. No hay automático conversión, reintento, reejecución de la herramienta o cuenta / conmutador API. Un giro de dirección de un solo agente puede seguir un turno multiagente completado como una nueva solicitud explícita usando enrutamiento. El soporte al cliente y el derecho de backend aún requieren verificación en vivo.
+
+
+
+
+## Configuración de continuación de dirección
+
+Un resultado guardado explícito `response.create` puede anular `reasoning` (esfuerzo y resumen), `text` (verbosidad y formato de salida estructurada compatible), y
+`stream_options`. Las rutas de suscripción se niegan a `max_output_tokens` Anular en lugar de ignorarlo silenciosamente. Alfileres de proveedor normales, tapas de subagente, esfuerzo Todavía se aplican exclusiones de capacidad de resumen/verbosidad.
+
+Los configuración omitidos retienen los valores efectivos actuales; el valor nulo explícito restablece ese valor. donde el upstream acepta null. Reemplaza la configuración suministrada objetos, no campos anidados individuales. Los valores cambiados se trasladan a valores explícitos posteriores. continuaciones. Una anulación rechazada no reserva el resultado guardado, por lo que un La solicitud corregida se puede enviar sin volver a ejecutar su herramienta. El servidor todavía decide qué configuración acepta el modelo elegido. Cambios en el modelo, cuenta, El proveedor, las herramientas, las instrucciones o el nivel de servicio requieren un turno ordinario separado.
+
+La dirección nativa está restringida a la ruta de suscripción canónica ChatGPT. Público API-clave y rutas de puerta de enlace no son orientables; sus respuestas ordinarias se conservan y un intento de dirección recibe un error explicativo. Esto impide que el sucesor generaciones en un socket retenido de eludir la admisión normal por solicitud. Los La vía de inyección de múltiples agentes API pública cerrada por separado permanece disponible.
+
+
+
+### Sonda de alambre directa contra proxy ejecutable
+
+Desde una comprobación de origen, ejecute el control positivo fuera de línea:
+
+```sh
+bun scripts/steering-smoke.ts --self-test
+```
+
+Planifique una comparación sin leer tokens o abrir ninguna conexión:
+
+```sh
+bun scripts/steering-smoke.ts --direct wss://api.openai.com/v1/responses \
+ --proxy ws://127.0.0.1:1455/v1/responses --model \
+ --proxy-model
+```
+
+Para una comparación de suscripción, el URL directo es
+`wss://chatgpt.com/backend-api/codex/responses`. Seleccione el mismo modelo real y cuenta en ambas rutas; el script no puede probar que una configuración proxy seleccionada la misma cuenta. El proxy URL debe ser un punto final de bucle Responses y no debe contienen credenciales, parámetros de consulta o un fragmento.
+
+Solo después de revisar el plan, el suministro `STEERING_DIRECT_TOKEN` y
+`STEERING_PROXY_TOKEN` a través de su entorno de shell y añadir **ambos** `--live`
+y `--allow-model-requests`. Una conexión ChatGPT directa puede necesitar adicionalmente
+`STEERING_DIRECT_ACCOUNT_ID`; ese encabezado nunca se copia al público API o el proxy. No ponga credenciales en argumentos de comando, registros, capturas de pantalla o relaciones públicas. El script no lee el inicio de sesión Codex guardado, actualiza tokens o cambia la configuración.
+
+La ejecución en vivo envía cuatro solicitudes iniciales sintéticas (dos escenarios por ruta), más los sucesores resultantes o las continuaciones de resultados requeridos, y **puede consumir Uso del modelo**. Un escenario comprueba un sucesor automático; el otro devuelve un resultado sintético fijo solo para la función y los cambios anunciados del propio script razonamiento/verbosidad en su continuación explícita. No se ejecuta ninguna herramienta externa y No se infiere ninguna aprobación. No hay reintentos ni solicitudes de recuperación automática. Cada escenario está limitado a 120 segundos, 5.000 eventos y 2 MiB de datos recibidos.
+
+El informe JSON contiene solo resultados, tiempos y puntos de control booleanos. Un pase requiere una aceptación en cola, un sucesor creado y el marcador sintético en su Resultado completado. Faltan confirmaciones `unknown`Si el modelo nunca entra La ruta de entrada requerida es el resultado `not_exercised`. Tampoco se cuenta como pase. El proceso sale de 0 solo si pasan los cuatro escenarios en vivo, 1 de lo contrario y 2 para el siguiente. argumentos no válidos o credenciales faltantes. Esto es un **diagnóstico de alambre**, no un Prueba de interfaz de extremo a extremo de la aplicación Codex / CLI, certificación en vivo o instrucciones para habilitar la característica experimental para el trabajo de producción.
+
+
+
+## Finales de línea de streaming
+
+El decodificador compartido SSE acepta LF, CRLF y terminaciones de línea CR independientes, incluso cuando un delimitador abarca fragmentos de red. Esto permite a los proveedores compatibles transmitir eventos sin requerir encuadre de solo LF.
+
+
+
+
+### Solicitudes y créditos calificados para cuentas
+
+Elegir un modelo calificado para la cuenta no permite el gasto de crédito. Las cuentas guardadas obedecen **Usar créditos después del límite** durante la autenticación, cuando se preparan las credenciales, y antes de Responses HTTP o WebSocket envío después de ritmo o reintento esperas. Una solicitud retenida informa la política de crédito, no un fallo de autenticación; espere a que se restablezca, elija otra cuenta o habilite explícitamente el gasto de crédito de esa cuenta.
+
+Los ayudantes de visión y búsqueda web de cuenta almacenada también vuelven a verificar esta política antes de enviarla, incluidos los reintentos. Si el consentimiento cambia o se alcanza un límite después de la selección del ayudante, el ayudante informa el rechazo de la política sin enviar ese intento. El relé de búsqueda independiente devuelve un 429 unido por reinicio. Las credenciales Direct propiedad de la persona que llama conservan su comportamiento existente.
+
+
+
+## Optar por un proveedor personalizado para administrar el enrutamiento local
+
+Un proveedor personalizado como `chatgpt-http` puede usar `supports_websockets = false`
+para mantener el transporte HTTP. OpenCodex deja a los proveedores personalizados intactos por defecto. Para delegar solo URL de ese proveedor en OpenCodex, ejecute:
+
+```sh
+ocx codex-provider allow chatgpt-http
+ocx start
+```
+
+El primer comando explica el alcance y pide confirmación, por defecto a No. Para una operación con scripts explícitamente aprobada, use `allow chatgpt-http --yes`. El consentimiento se aplica a este ID de proveedor en el `CODEX_HOME`; no lo hace aprobar otros proveedores u otros hogares. Iniciar y sincronizar la actualización solo su `base_url`
+para el proxy local. Su identidad, configuración WebSocket, otros campos e historial TOML permanecer sin cambios. Mantenga el proxy en ejecución mientras usa esta ruta. Al activar la integración Codex, OFF también evita que las actualizaciones de proveedor aprobado URL se inicio o sincronización; el consentimiento del proveedor guardado permanece disponible cuando lo vuelve a activar.
+
+Este modo admite tablas de proveedores Responses explícitas con `requires_openai_auth = true`
+y sin credenciales o encabezados personalizados. Objetivos no loopback, modo Escritorio sin authless y la compactación del cliente requieren la integración dedicada existente.
+
+`ocx stop` y `ocx restore` restaurar las URL grabadas mientras se mantiene el consentimiento para una versión posterior Inicio. Correr `ocx codex-provider status` para enumerar aprobaciones, o
+`ocx codex-provider revoke chatgpt-http` para restaurar su URL administrado y eliminar el consentimiento. Un URL cambiado fuera de OpenCodex se conserva y requiere una revocación seguida de un nuevo aprobación; OpenCodex no adopta silenciosamente el reemplazo como una nueva línea de base. La asignación URL original se conserva en los metadatos de recuperación privados bajo
+`OPENCODEX_HOME`, por separado del diario de configuración nativo.
+
+La seguridad de inicio reconoce el enrutamiento URL administrado registrado por un proveedor aprobado como OpenCodex. Esto no instala protección de reinicio: un proxy iniciado manualmente todavía necesita una protección viable. servicio en segundo plano para recuperar automáticamente después de un reinicio.
+
+
+
+## Validación de relé de escritorio nativo CONNECT
+
+El relé de escritorio existente HTTP/HTTPS CONNECT transport ahora rechaza las cabeceras de respuesta proxy mal formadas y ambiguas HTTP Los nombres de usuario básicos que contienen dos puntos. Los pares de credenciales decodificadas están limitados a 4096 UTF-8 bytes. Si el proxy seleccionado es rechazado, corrija su configuración o respuesta; el relé no cambia silenciosamente a una conexión directa.
+
+Selección de proxy, compatibilidad con SOCKS5/SOCKS5h, verificación de certificados y conexión El ciclo de vida no ha cambiado. Ambas ortografías SOCKS retienen la resolución DNS de destino remoto.
diff --git a/docs-site/src/content/docs/es/guides/codex-log-guard-reclaim.md b/docs-site/src/content/docs/es/guides/codex-log-guard-reclaim.md
new file mode 100644
index 00000000000..a34bc124295
--- /dev/null
+++ b/docs-site/src/content/docs/es/guides/codex-log-guard-reclaim.md
@@ -0,0 +1,106 @@
+---
+title: "Codex Log Guard Reclamación"
+description: "Recupere manualmente páginas gratuitas del registro de diagnóstico Codex Almacenamiento SQLite con aspiración incremental limitada."
+---
+
+Reclaim es la etapa manual de recuperación de espacio de Codex Log Guard. Compacta el canónico Codex `logs_2.sqlite` base de datos solo cuando la base de datos y el entorno de ejecución pasan las mismas comprobaciones de seguridad utilizadas por la protección Log Guard.
+
+Reclamar es **Nunca programado automáticamente** y nunca se ejecuta simplemente porque la página de almacenamiento está abierta. El panel de control requiere una acción Compact explícita y una segunda confirmación antes de enviar la solicitud de mutación.
+
+
+
+## Lo que hace Reclaim
+
+OpenCodex realiza una secuencia de mantenimiento sin conexión limitada:
+
+1. resolver el canónico `logs_2.sqlite` a través de Codex eficaz `sqlite_home`;
+2. verificar la identidad del archivo y el esquema de registro Codex conocido;
+3. verificar que la enumeración del proceso se haya realizado correctamente y no se esté ejecutando ningún proceso de escritura Codex compatible;
+4. adquirir el bloqueo dedicado de proceso cruzado Log Guard;
+5. repita la comprobación del proceso Codex mientras se mantiene ese bloqueo;
+6. abrir la base de datos existente leer/escribir sin crear semántica y probar que se puede adquirir un escritor SQLite inmediato;
+7. requieren `PRAGMA auto_vacuum` Para ser ya `INCREMENTAL`;
+8. ejecutar `PRAGMA quick_check` antes del mantenimiento;
+9. ejecutar un punto de control WAL completo y rechazar un punto de control ocupado / incompleto;
+10. Ejecutar delimitado `PRAGMA incremental_vacuum(N)` los lotes, el control después de cada lote;
+11. ejecutar `PRAGMA quick_check` nuevamente después del mantenimiento; y
+12. informe antes/después de la base de datos, WAL, recuento de páginas, lista libre y métricas de bytes recuperables.
+
+El objetivo por defecto es aproximadamente **8 MiB de páginas SQLite**. Una sola invocación reclama como máximo aproximadamente **256 MiB de páginas**, con un límite de iteración finita adicional. Si quedan más páginas libres, el resultado se informa como parcial y puede invocar Compact de nuevo más tarde.
+
+Los límites de bytes se convierten en recuentos de páginas usando el tamaño de página SQLite real de la base de datos. Son límites en páginas lógicas SQLite procesadas, no reclamaciones sobre volumen de escritura SSD/NAND.
+
+
+
+## Garantías de seguridad
+
+Reclamar deliberadamente hace **no**:
+
+- correr lleno `VACUUM`;
+- cambiar `auto_vacuum` modo en una base de datos Codex existente;
+- eliminar, truncar, renombrar o manipular de cualquier otra forma Codex `-wal` / `-shm` archivos directamente;
+- eliminar filas de diagnóstico;
+- modificar disparadores de protección Log Guard o disparadores de usuario no relacionados;
+- ejecutar mientras se detecta Codex como activo;
+- proceder cuando la enumeración del proceso es incierta;
+- proceder sobre un esquema de registro futuro desconocido; o
+- continuar después de una comprobación de integridad SQLite defectuosa.
+
+Un bloqueo Log Guard ocupado, un escritor SQLite ocupado o un punto de control inicial ocupado se devuelven como un rechazo explícito en lugar de volver a intentarlo en segundo plano. Si la contención del punto de control aparece solo después de que un lote de vacío incremental ya se haya comprometido, OpenCodex informa que el trabajo ya se ha completado como un resultado parcial exitoso con `stopReason: "busy"` en lugar de afirmar que nada ha cambiado.
+
+## CLI
+
+Inspeccione primero el espacio recuperable:
+
+```bash
+ocx storage codex-logs status
+```
+
+Ejecute un pase de mantenimiento limitado:
+
+```bash
+ocx storage codex-logs compact
+```
+
+Para métricas de antes/después legibles por máquina:
+
+```bash
+ocx storage codex-logs compact --json
+```
+
+Si el resultado informa que queda más espacio recuperable, deténgase allí a menos que desee explícitamente otro pase limitado. OpenCodex no realiza un bucle indefinidamente ni programa un pase de seguimiento para usted.
+
+
+
+## API de administración
+
+La compactación se expone solo como un punto final de mutación:
+
+```text
+POST /api/storage/codex-logs/compact
+```
+
+No hay alias GET para la compactación. Una respuesta exitosa contiene a `report` objeto con mediciones de antes/después, recuentos de páginas recuperados, cambio de tamaño de la base de datos principal física, recuento de iteraciones, integridad, razón de detención y estado de integridad.
+
+Los estados de rechazo típicos incluyen:
+
+- `codex_running`
+- `process_enumeration_failed`
+- `busy`
+- `unsupported_schema`
+- `auto_vacuum_not_incremental`
+- `unsafe_path`
+- `integrity_check_failed`
+- `database_error`
+
+Las fallas de integridad incluyen si ocurrieron antes o después del pase de mantenimiento. A `busy` rechazo significa que se detectó contención antes de cualquier lote al vacío; `stopReason: "busy"` dentro de un informe exitoso significa que al menos un lote se cometió antes de que la contención del punto de control posterior detuviera el pase.
+
+
+
+## Entender el resultado
+
+`pagesReclaimed` y `logicalBytesReclaimed` describir las páginas de la lista gratuita SQLite eliminadas durante el pase. `physicalDatabaseBytesReclaimed` reporta la reducción observada en el archivo de base de datos principal después de los puntos de control de mantenimiento.
+
+Estos números pueden diferir. El comportamiento de SQLite/WAL/sistema de archivos significa que reclamar páginas lógicas no garantiza una reducción idéntica de archivos físicos inmediatos, y ninguna de estas métricas debe interpretarse como NAND escribe, SSD usa o TBW consume/guarda.
+
+`complete: true` significa que la lista libre observada alcanzó cero. Un resultado parcial utiliza `stopReason: "page_budget"` cuando el presupuesto de página por ejecución o el límite de iteración finita finaliza el pase, `stopReason: "no_progress"` cuando SQLite deja de reducir la lista libre, y `stopReason: "busy"` cuando la contención del punto de control aparece después de la reclamación comprometida. Los tres son resultados limitados; ninguno causa un reintento automático.
diff --git a/docs-site/src/content/docs/es/guides/codex-log-guard.md b/docs-site/src/content/docs/es/guides/codex-log-guard.md
new file mode 100644
index 00000000000..86bd512a8a3
--- /dev/null
+++ b/docs-site/src/content/docs/es/guides/codex-log-guard.md
@@ -0,0 +1,157 @@
+---
+title: "Codex Log Guard"
+description: "Inspeccione y reduzca explícitamente la persistencia del registro de diagnóstico Codex sin exponer los cuerpos de registro."
+---
+
+OpenCodex puede inspeccionar la base de datos de registro de diagnóstico persistente de Codex y, cuando se opta por, reducir qué filas de diagnóstico persiste Codex. La inspección permanece solo de lectura; la protección es una mutación explícita que se rechaza a menos que el esquema de registro Codex conocido esté presente y Codex se detenga.
+
+
+
+## Lo que inspeccionan los informes
+
+OpenCodex resuelve la eficacia de Codex `sqlite_home` usando la precedencia existente de Codex e inspeccionando el canonical `logs_2.sqlite` base de datos allí. Un número más alto o legado `logs_N.sqlite` El archivo nunca se sustituye como la diana con capacidad de mutación.
+
+La vista Almacenamiento informa:
+
+- la base de datos principal, WAL y los tamaños de archivo SHM;
+- el total de filas de registro y la parte almacenada en `TRACE` nivel;
+- los mayores depósitos de log-target por recuento de filas, utilizando etiquetas de rango en lugar de nombres de destino;
+- SQLite espacio de la lista libre que puede ser reclamable más tarde; y
+- si el esquema observado es compatible con el esquema de registro Codex actualmente conocido.
+
+Si `sqlite_home` está fuera `CODEX_HOME`, la base de datos de diagnóstico se muestra por separado. Sus bytes no se pliegan silenciosamente en el `CODEX_HOME` almacenamiento total.
+
+OpenCodex no selecciona ni expone `feedback_log_body` mientras se producen estos diagnósticos. Los niveles de registro se reducen al conjunto de niveles conocidos fijos más `OTHER`, y los nombres de destino no se serializan.
+
+
+
+## Proteger los modos
+
+La protección es **por defecto**. Habilitarlo instala una propiedad OpenCodex `BEFORE INSERT` desencadenador en el canonical de Codex `logs_2.sqlite` base de datos. OpenCodex nunca reemplaza un desencadenador desconocido usando sus nombres reservados y elimina solo los desencadenadores cuyo SQL coincide con la versión propiedad de OpenCodex.
+
+Hay dos modos disponibles:
+
+- **Compatibilidad** (`compat`) es el modo recomendado. Fija la regla Log Guard v1 actual establecida a los objetivos de alto volumen que Codex ya filtra o niveles bajos en su sumidero de registro SQLite persistente. Sin relación `TRACE` Se conservan las filas.
+- **Silencio** (`quiet`) suprime cada nuevo `TRACE` fila mientras se conserva `DEBUG`, `INFO`, `WARN`, y `ERROR` filas.
+
+La protección reduce las filas que llegan al almacenamiento SQLite persistente. Lo hace **no** eliminar el trabajo de seguimiento anterior de Codex: los eventos aún se pueden formatear, poner en cola, agrupar en transacciones y considerar la propia lógica de poda de Codex antes de que el desencadenador ignore una fila. Trata a Protect como un escudo de conversión de escritura persistente, no como un interruptor que deshabilita la generación de diagnóstico dentro de Codex.
+
+Los filtros Log Guard solo persisten en las filas de registro locales SQLite. No cambia el procesamiento de diagnóstico Codex, [transporte del adaptador](/es/reference/adapters/), cargas útiles de proveedores, semántica de transmisión, autenticación, enrutamiento, cuotas o estado de la cuenta.
+
+
+
+### Controles de seguridad
+
+Antes de proteger, deshabilitar o reparar cambia la base de datos externa, OpenCodex:
+
+1. resuelve exactamente lo canónico `logs_2.sqlite` camino;
+2. verifica que la ruta de acceso es un archivo regular, sin enlace simbólico y que el esquema conocido coincide exactamente;
+3. verifica que la enumeración del proceso se haya realizado correctamente y no se esté ejecutando ningún proceso de escritura Codex compatible;
+4. adquiere un bloqueo dedicado de proceso cruzado Log Guard;
+5. repite la comprobación del proceso Codex después de adquirir ese bloqueo;
+6. abre la base de datos leer/escribir **sin** crear semántica y adquiere SQLite `BEGIN IMMEDIATE` sin esperas ocupadas;
+7. cambia solo los disparadores Log Guard propiedad de OpenCodex y lee el resultado antes de confirmar; y
+8. persiste el modo solicitado en la configuración de OpenCodex mientras el bloqueo de Log Guard aún se mantiene.
+
+Si la enumeración del proceso es incierta, la base de datos está ocupada, el esquema es desconocido o un nombre de desencadenador reservado pertenece a SQL diferente, la mutación falla. OpenCodex no termina Codex automáticamente.
+
+
+
+## Deriva y reparación
+
+El modo de protección solicitado se almacena en la configuración de OpenCodex por separado de la base de datos de registros de Codex. Esto es importante porque una migración Codex puede reconstruir el `logs` tabla, y SQLite elimina los disparadores adjuntos a una tabla que se reemplaza.
+
+Cuando el modo guardado es `compat` o `quiet` pero ya no se observa el correspondiente desencadenador propio, informa Log Guard **deriva**. `ocx doctor` reporta la deriva pero nunca la repara automáticamente.
+
+La reparación es explícita:
+
+```bash
+ocx storage codex-logs repair
+```
+
+OpenCodex deliberadamente no recrea la protección en cada inicio. Una versión posterior puede reconsiderar la reparación automática solo después de que haya suficiente evidencia de campo de que hacerlo es seguro en todas las migraciones de Codex.
+
+## CLI
+
+Leer estado:
+
+```bash
+ocx storage codex-logs status
+ocx storage codex-logs status --json
+ocx doctor
+```
+
+Habilitar la directiva de compatibilidad recomendada:
+
+```bash
+ocx storage codex-logs protect
+```
+
+Elija el modo silencioso explícitamente:
+
+```bash
+ocx storage codex-logs protect --mode quiet
+```
+
+Desactivar la deriva de protección o reparación de OpenCodex:
+
+```bash
+ocx storage codex-logs unprotect
+ocx storage codex-logs repair
+```
+
+Añadir `--json` a los comandos Log Guard para una salida legible por máquina. Ver la [Referencia CLI](/es/reference/cli/) para la sintaxis del comando canónico y el comportamiento JSON.
+
+El comando existente permanece sin cambios:
+
+```bash
+ocx storage --json
+```
+
+Su respuesta lleva el mismo estado Codex-log utilizado por la página de almacenamiento.
+
+
+
+## API de administración
+
+El estado está disponible en:
+
+```text
+GET /api/storage/codex-logs
+```
+
+Mutaciones explícitas:
+
+```text
+POST /api/storage/codex-logs/protect
+POST /api/storage/codex-logs/unprotect
+POST /api/storage/codex-logs/repair
+```
+
+El cuerpo protector también `{"mode":"compat"}` o `{"mode":"quiet"}`. `GET /api/storage` También incluye el informe como `codexLogs` para que el panel de control pueda actualizar el desglose de almacenamiento normal y los diagnósticos del registro Codex a partir de una solicitud de instantánea.
+
+
+
+## Semántica de instantáneas de solo lectura
+
+La inspección de estado abre la base de datos de solo lectura con SQLite `immutable=1`. Esto evita que una lectura de diagnóstico cree o actualice `-wal` o `-shm` sidecares.
+
+La compensación es importante: los agregados de SQL y los metadatos del disparador observados describen la última instantánea de la base de datos con puntos de control. Si Codex está escribiendo activamente, la WAL en vivo puede contener filas o páginas de esquema más nuevas que la instantánea inmutable. Una respuesta de mutación exitosa utiliza el estado de activación que OpenCodex verificó dentro de su transacción de escritura; una solicitud de estado de solo lectura posterior puede retrasarse temporalmente hasta que SQLite revise esas páginas de esquema.
+
+OpenCodex informa el tamaño del archivo WAL por separado y no **no** etiquetar el resultado como tasa de escritura SSD, NAND escribe o consumo de drive-wear/TBW.
+
+
+
+## Estados de compatibilidad
+
+Un esquema conocido informa de la inspección y protección según sea compatible. Un esquema futuro perdido, ilegible o desconocido sigue siendo inspeccionable como metadatos, pero se informa como no compatible para operaciones con capacidad de mutación.
+
+Un esquema desconocido no se adivina en compatibilidad. Esto permite que una versión más reciente de Codex permanezca observable mientras evita que Log Guard trate un diseño de base de datos no revisado como seguro de modificar.
+
+
+
+## La recuperación sigue siendo independiente
+
+Protect no aspira ni compacta SQLite. [**Reclamar**](/es/guides/codex-log-guard-reclaim/) proporciona un flujo incremental de vacío explícito, sin conexión y limitado con puntos de control y comprobaciones de integridad.
+
+Proteger nunca se ejecuta `VACUUM`, nunca trunca o elimina Codex de WAL directamente, y nunca realiza la recuperación de espacio programada.
diff --git a/docs-site/src/content/docs/es/guides/codex-native-context.md b/docs-site/src/content/docs/es/guides/codex-native-context.md
new file mode 100644
index 00000000000..c73e53d9134
--- /dev/null
+++ b/docs-site/src/content/docs/es/guides/codex-native-context.md
@@ -0,0 +1,95 @@
+---
+title: "Compatibilidad de contexto nativo"
+description: "Elegibilidad, configuración de prueba autenticada y límites de la historia y retransmisión de notas de Codex."
+---
+
+OpenCodex ya transmite el historial y las notas nativas de Codex. Este no es un servicio de memoria general para los proveedores enrutados, y exponer sus puntos finales HTTP no establece que un Codex compilación, cuenta o modelo puede usarlos. Véase [Integración Codex](/es/guides/codex-integration/)
+para los límites de propiedad, cancelación y credenciales del relé.
+
+
+
+## Dos requisitos independientes
+
+Codex debe activar la extensión, y OpenCodex debe identificar al llamante. Cambiar el backend URL resuelve ninguno de los requisitos por sí mismo.
+
+El contrato Codex inspeccionado requiere un modelo cuya entrada de catálogo nativa anuncia
+`supports_experimental_context`, un inicio de sesión ChatGPT elegible y un proveedor nombrado exactamente
+`OpenAI` con una base URL que termina en `/backend-api/codex`. Su activación automática rechaza Proveedores que utilizan `env_key`, `experimental_bearer_token`, respaldado por comandos `auth`, o AWS auth. El predicado de elegibilidad inspeccionado acepta ChatGPT Plus, Pro y ProLite; esto no es un reclamo que cada cuenta en esos planes tiene puntos finales de historial de backend que funcionan.
+
+OpenCodex requiere además un activo **clave API del plano de datos** Tanto en el modelo exitoso solicitud y las solicitudes de contexto posteriores. La inyección built-in loopback predeterminada no envía esa clave, por lo que puede servir modelos mientras las llamadas de contexto fallan con `context_principal_required`
+(403). El formulario de tabla de proveedor remoto autenticado por sí solo no es una solución de contexto nativo o bien: su `env_key` y el nombre del proveedor no satisfacen el contrato de activación Codex anterior. Nunca quite los cheques de principal o de propiedad de la cuenta para ocultar cualquiera de los problemas.
+
+
+
+## Sintaxis explícita de opt-in
+
+OpenCodex acepta ambas formas de característica raíz persistentes que Codex `FeatureToml` acepta:
+
+```toml
+[features]
+context_management = true
+```
+
+El formulario de tabla equivalente también funciona y es la ortografía compatible para OpenCodex anterior versiones que aún no reconocen la forma booleana:
+
+```toml
+[features.context_management]
+experimental_mode = true
+```
+
+Use una forma, no ambas. Los valores falsos, ausentes y mal formados permanecen fuera. El proxy lee su propio Configuración de inicio Codex; una anulación de solo CLI o una opción de inclusión presente solo dentro de un perfil Codex no permite su puerta de entorno de ejecución. Este cambio no infiere la aceptación de los metadatos del modelo.
+
+
+
+## Perfil de prueba nativo autenticado
+
+Esto es un **Configuración de prueba comprobada por fuente, no una certificación de extremo a extremo de cuenta real**. Realice una copia de seguridad de la configuración de Codex y mantenga un punto de control de tareas duradero antes de realizar las pruebas. Utiliza un nuevo, hilo desechable; no cambie la identidad del proveedor de un hilo de trabajo existente.
+
+Suministre una clave de plano de datos OpenCodex activa existente `OCX_CONTEXT_API_KEY` en el medio ambiente del proceso Codex. No utilice una administración/admin token ni almacene la clave en TOML. Un servicio El entorno no es heredado automáticamente por una aplicación de escritorio lanzada por separado. Mantenga el inicio de sesión nativo normal Codex ChatGPT disponible; el encabezado adicional no reemplaza a OAuth.
+
+Con la función de raíz opt-in anterior, el proveedor de reenvío canónico ChatGPT configurado en OpenCodex, y un catálogo de modelo nativo actual, **adicionales** proveedor y perfil en la misma configuración Codex. Ajuste el puerto al proxy local real. Deja la raíz
+`model_provider` y las tablas de proveedores existentes sin cambios.
+
+```toml
+[model_providers.ocx-native-context]
+name = "OpenAI"
+base_url = "http://127.0.0.1:10100/backend-api/codex"
+wire_api = "responses"
+requires_openai_auth = true
+supports_websockets = false
+env_http_headers = { "x-opencodex-api-key" = "OCX_CONTEXT_API_KEY" }
+
+[profiles.ocx-native-context]
+model_provider = "ocx-native-context"
+model = "gpt-6-astra"
+```
+
+Iniciar un nuevo hilo CLI con `codex --profile ocx-native-context`. El ejemplo utiliza HTTP/SSE para mantener la prueba inicial en la ruta de propiedad modelo a relé; no cambia el transporte de otros perfiles o certificar la paridad WebSocket/media vuelta-dirección. Utilice el modelo sólo cuando el El catálogo nativo de la cuenta en realidad anuncia su capacidad de contexto; nunca fuerce esa bandera en una fila Devin, Gemini u otra fila encaminada.
+
+El ID de proveedor personalizado es intencional. El Codex de flujo ascendente generalmente no anula el sistema integrado proveedores de `model_providers.openai`; añadir un encabezado adicional puede ser silenciosamente ineficaz. El ID personalizado conserva el proveedor normal, mientras que el `OpenAI` El nombre satisface al nativo predicado backend. No añadir `env_key` a este perfil: `env_http_headers` Admisión local Por separado mientras `Authorization` continúa llevando el inicio de sesión nativo ChatGPT. OpenCodex consume la clave local; no envía esa clave a ChatGPT.
+
+El opt-in raíz también afecta a otros perfiles nativos elegibles. **Durante el juicio, no continúe hilos de bucle de retroceso incorporados ordinarios que carecen de la clave adicional.** Desactivar la función raíz y ejecutar
+`ocx sync` antes de volver a esos hilos. Esto no es una integración automática o predeterminada. cambiar, y este perfil CLI no es una reclamación sobre el soporte de selección de perfiles de escritorio.
+
+
+
+## Verificar antes de restablecer el contexto
+
+Primero obtenga una respuesta exitosa del modelo nativo en el nuevo hilo. Luego verifica una nota escrita, lee la misma nota y consulta el historial de ese hilo. Solo después de que esas operaciones tengan éxito ¿Debería usar una prueba desechable `new_context` y compruebe que se puede recuperar el estado guardado. Mantenga el punto de control externo incluso cuando la prueba tenga éxito.
+
+- **403 `context_principal_required`:** ninguna clave de plano de datos local válida alcanzó el proxy.
+- **409 `context_account_unavailable`:** falta o es inconsistente; no sustituya la cuenta activa actual o vuelva a intentar escribir a ciegas.
+- **404:** distinguir la respuesta de punto final deshabilitado/desconocido del proxy de un 404 ascendente. Este último no es prueba de un defecto de enrutamiento OpenCodex o una interrupción en toda la cuenta.
+
+Una llamada de modelo exitosa o `ocx ready` no es prueba de que las notas, la historia o la restauración del estado funciona. El enrutamiento del modelo, los cambios en la cuenta, los reinicios proxy y la disponibilidad de los puntos finales ascendentes permanecen preocupaciones separadas. Ninguna bandera local puede conceder la elegibilidad de backend faltante, y un contexto fallido La operación no debe ser reportada como un restablecimiento exitoso. Retire las tablas de prueba y desactive el clave de prueba cuando haya terminado; deje la función desactivada a menos que utilice una ruta autenticada verificada.
+
+
+
+## Contratos ascendentes inspeccionados
+
+Estos enlaces fijan el contrato de origen utilizado para la configuración anterior, no una promesa de implementación:
+
+- [FeatureToml booleano/formas de tabla](https://github.com/openai/codex/blob/78245b47af2a7aafcabe025828ceecca69db4df1/codex-rs/features/src/lib.rs)
+- [Elegibilidad del contexto nativo](https://github.com/openai/codex/blob/78245b47af2a7aafcabe025828ceecca69db4df1/codex-rs/core/src/session/token_budget.rs)
+- [Identidad del proveedor y reglas de fusión incorporadas](https://github.com/openai/codex/blob/78245b47af2a7aafcabe025828ceecca69db4df1/codex-rs/model-provider-info/src/lib.rs)
+- [El historial/las notas utilizan los encabezados de solicitud y la autenticación del proveedor](https://github.com/openai/codex/blob/78245b47af2a7aafcabe025828ceecca69db4df1/codex-rs/ext/history-notes/src/backend.rs)
diff --git a/docs-site/src/content/docs/es/guides/codex-prompt.md b/docs-site/src/content/docs/es/guides/codex-prompt.md
new file mode 100644
index 00000000000..cf99cc37680
--- /dev/null
+++ b/docs-site/src/content/docs/es/guides/codex-prompt.md
@@ -0,0 +1,199 @@
+---
+title: "Capas de instrucciones de Codex"
+description: "Lea lo que Codex realmente envía, apague las piezas que no necesita y agregue sus propias instrucciones como capas."
+---
+
+Codex ensambla su prompt a partir de capas: sus propias instrucciones básicas, su proyecto docs, contexto de permisos y entorno, las habilidades que ha instalado y Más. **Codex Set → Prompt** muestra esa pila, le dice lo que cuesta cada capa, y le permite apagar las piezas que no desea.
+
+
+
+## Lo que muestra la lista
+
+Cada fila lleva su posición en el orden de montaje, la clave de configuración que gobierna cuando hay uno, y el tamaño de lo que realmente envió.
+
+Las posiciones tienen lagunas. Eso es deliberado: los números son la asamblea real. dos de ellos se encuentran más abajo en **Notificaciones de transición**. Renumerar cada grupo de uno mostraría un orden que Codex no usa.
+
+
+
+### Cinco tipos de capa
+
+| Amable | Lo que puedes hacer |
+|---|---|
+| Conmutable aquí | Un verdadero interruptor. Escribe una clave en `config.toml`. |
+| Configurado bajo `[features]` | Real, pero cambiado de la configuración de características en lugar de esta página. |
+| Siempre encendido | No hay interruptor de apagado en cualquier lugar en Codex. |
+| Incendios en el cambio | Anuncia una transición, por lo que solo aparece cuando algo cambia. |
+| Capas de extensión | No se puede enumerar. Codex no los expone. |
+
+Una capa sin interruptor de apagado no muestra ningún interruptor en lugar de uno desactivado. A control gris sugeriría que la capacidad existe y es temporalmente No disponible, que no es el caso.
+
+
+
+## Leer una capa
+
+Haga clic en un nombre de capa para ver el texto que envía. El diálogo lo lee desde
+`codex debug prompt-input`, por lo que es la cosa real en lugar de una descripción.
+
+A veces no hay nada que mostrar, y el diálogo dice qué razón se aplica:
+
+- **El archivo está vacío.** Tu `~/.codex/AGENTS.md` es cero bytes, por lo que La capa no tiene nada que enviar. El diálogo nombra la ruta.
+- **No envió nada en el turno que leímos.** Las capas solo se envían cuando se cambio, por lo que una capa sin cambios está ausente de una sola muestra.
+- **El indicador base proviene de su catálogo de modelos.** Codex lo envía fuera del lista legible, por lo que el cuadro de diálogo lo lee de la fila del catálogo del modelo seleccionado — o desde el archivo nombrado por `model_instructions_file` cuando haya establecido uno. A fila que publica solo una plantilla no expandida se informa como no mostrada, porque ese texto no es lo que envía Codex.
+- **El mensaje no se pudo leer.** La sonda falló en esta máquina.
+
+La lectura se toma de su casa global Codex (`~/.codex`), no de lo que directorio en el que se está ejecutando el panel de control.
+
+
+
+## Capas personalizadas
+
+**+ Añadir capa** Añade tus propias instrucciones. Las capas personalizadas componen en
+`developer_instructions`, que es aditivo — Codex mantiene sus propias instrucciones y los tuyos se añaden a ellos.
+
+:::note
+Esto es deliberadamente no `model_instructions_file`. Esa clave REPLACES la base más rápido que añadir a ella, por lo que el cableado **+** eliminaría el propio Codex instrucciones la primera vez que guardó una capa. Si la sustitución del indicador base es lo que quieres, eso es lo que [Variantes de prompt base](#base-prompt-variants) es por — una decisión separada, con nombre en lugar de un efecto secundario de agregar una capa.
+:::
+
+Las capas personalizadas se numeran entre sí porque están unidas en una sola capa. sección en ese orden — no se entrelazan con las capas incorporadas.
+
+Reordenar con las flechas en la fila, o con `Alt` + `Up` / `Alt` + `Down` Desde en cualquier lugar de la fila. El orden es el orden de composición.
+
+El panel muestra el tamaño combinado de las capas habilitadas contra los 128 KiB. límite para `developer_instructions`, y una vista previa plegable de la texto — una capa que empujaría la sección sobre el límite es visible antes de salvar, no después.
+
+Eliminar una capa pide primero, luego ofrece **Deshacer** durante unos segundos. La capa vuelve a su posición anterior, por lo que una lista sensible al orden sobrevive al desliz.
+
+
+
+### Preconfiguración
+
+**+ Añadir capa** ofrece cinco puntos de partida: salida concisa, plan antes de editar, explicar el razonamiento, probar primero y respuestas coreanas. Cada uno abre el editor ordinario precargado y totalmente editable — un preajuste es un punto de partida, y lo que se guarda es una capa personalizada ordinaria.
+
+Los preconfiguración son nuestro propio texto, escrito para destilar un enfoque en lugar de copiarlo. El prontitud de cualquiera. Cada uno nombra su fuente.
+
+
+
+### Moverse entre capas mientras se edita
+
+El editor tiene controles previos/siguientes y un indicador de posición. Las ediciones no guardadas se mantienen mientras te mueves, por lo que puedes comparar dos capas a mitad de edición y volver sin Perder lo que escribes. El cierre con ediciones en otra capa pregunta antes de descartarlas. Guardar una capa también pregunta antes descartando ediciones aparcadas en otras capas; la confirmación **Guardar** el botón guarda solo la capa que se muestra.
+
+
+
+### Advertencias de compatibilidad
+
+El editor advierte cuando una capa dice algo que no funcionará como está escrito. —
+reivindicar una identidad diferente, nombrar una herramienta que el registro define, usar marcadores de posición de plantilla nada se expande o declarar hechos del entorno Codex También marca las credenciales pegadas (un API en una capa se envía al modelo en texto plano en cada solicitud), fraseo que le dice al modelo que deje caer sus instrucciones anteriores, y unaCodex identidad reclamada en coreano.
+
+Estas son advertencias y nunca bloquean un salvamento. Si quieres anular Codex, puedes; La advertencia sólo hace que sea una decisión en lugar de un accidente.
+
+
+
+## Comprometer la atribución
+
+Los **Comprometer la atribución** El modelo debe añadir un `Co-authored-by: Codex`
+Se escribe un trailer y se `Generated with Codex.` línea a pull lo solicita abre.
+
+No hay ningún interruptor para ello aquí, y ninguno bajo `[features]` o bien: Codex lo resuelve de la política de atribución de su cuenta. Desactivarlo en el nivel de cuenta no eliminar la capa — Codex envía el **opuesto** instrucción en su lugar, diciéndole al modelo No añadir el trailer. De cualquier manera se envía algo, por lo que la fila aparece en la lista. según lo establecido por su cuenta en lugar de como siempre.
+
+
+
+## Variantes de prompt base
+
+El indicador base es la capa que no se puede desactivar, porque un modelo sin base prompt no es un agente de trabajo. Usted puede **sustituto** Sin embargo, y el Encienda el **Instrucciones de base** La fila es lo que hace eso.
+
+Abra la fila para ver el selector. Muévete entre las opciones deslizando hacia los lados, con el teclas de flecha izquierda y derecha, o con los botones de flecha — los botones son también lo que un El lector de pantalla anuncia, por lo que la página permanece operativa sin un panel táctil.
+
+| Opción | Qué es | Editable |
+|---|---|---|
+| Prompt base propia de Codex | `model_instructions_file` está ausente de su configuración | nunca |
+| Su variante | un mensaje que escriba, almacenado en `~/.codex/opencodex-prompt-base/` | sí |
+| Una segunda variante | Lo mismo, hasta dos | sí |
+
+La primera opción no tiene nada que editar y no **Guardar** botón, y el diálogo dice por qué en lugar de mostrar controles atenuados. El valor predeterminado no es una copia del mensaje de Codex que almacenamos — es el **ausencia** de la llave. No hay texto que cambiar y No se puede eliminar, y elegirlo simplemente elimina `model_instructions_file` Desde su configuración de nuevo.
+
+:::caution
+Una variante **sustituye** Instrucciones base de Codex en lugar de añadir a ellos. A La variante de tres líneas le da un modelo con tres líneas de instrucciones: ninguna herramienta disciplina, sin hábitos de verificación, nada de lo que Codex normalmente trae. Si quieres a *añadir* Guía, utiliza un [capa personalizada](#custom-layers) en su lugar, — son aditivos.
+:::
+
+El editor de variantes tiene las mismas barandas que el editor de capas personalizado: unsaved las ediciones se mantienen mientras se mueve entre las opciones, cerrando con descartándolos, y el cuerpo se cuenta contra el límite de 64 KiB por variante mientras escribes.
+
+
+
+### Si algo más ya ha reemplazado a su prompt base
+
+Si `model_instructions_file` opencodex no escribió, el selector Se niega a actuar y dice dónde están los puntos clave. No reorientará silenciosamente una clave usted u otro conjunto de herramientas.
+
+Sin embargo, no tienes que aclararlo a mano. **Importarlo como variante** convierte el archivo: la vista previa muestra el *exacto* texto que se instalará — a `# `
+línea de encabezado que contiene el título de la variante, luego el cuerpo del archivo con terminaciones de línea y pestañas normalizadas — y puede editar el título antes de confirmar. El cuerpo puede usar como máximo 64 KiB después de la normalización (`bodyBytes` en la vista previa); el archivo completo en el disco, encabezado incluido, es un poco más grande (`serializedBytes`) La confirmación está vinculada al texto previsualizado por un hash, por lo que si el archivo — o su título elegido — cambiado en el medio, la importación se niega en lugar de instalar texto Nunca lo viste. Limpie la llave usted mismo en su lugar si prefiere comenzar desde el valor predeterminado.
+
+Este es el mismo principio que la importación `developer_instructions`: los informes del panel lo que encuentra, y tú decides.
+
+El cambio se aplica a las sesiones recién iniciadas, como cualquier otro cambio en esta página.
+
+
+
+## Instrucciones escritas fuera de opencodex
+
+Si `developer_instructions` ya existe y opencodex no lo escribió, el El panel no lo sobreescribirá. En su lugar, ofrece importar el texto como una capa: primero se ve el valor existente, y nada se escribe hasta que se confirme.
+
+
+
+## Cuando algo está fuera de sincronización
+
+Si las capas guardadas y el valor en `config.toml` El panel lo dice así y ofertas **Reparar** en lugar de arreglarlo en silencio. Dos de las rutas de reparación reescribir texto que escribiste, para que se mantengan deliberados. Un escrito interrumpido ("journal present") ejecuta una operación bloqueada de recuperación utilizando las imágenes de archivo grabadas de la revista; no vuelve a guardar la lista de capas actual ni inventa contenido que falte. Si el archivos en vivo no coinciden con ninguno de los estados registrados, la recuperación se niega y conserva La evidencia. El panel actualizado informa de cualquier deriva restante. Donde una capa archivo ha desaparecido, la reparación escribe una copia de seguridad antes de tocar cualquier cosa.
+
+
+
+## Cuando los cambios surtan efecto
+
+Los cambios se aplican a las sesiones recién iniciadas. Una sesión ya en marcha mantiene la configuración rápida con la que comenzó.
+
+
+
+## Mantener el catálogo de habilidades estable
+
+El proxy por defecto `skills.catalog_refresh: "per_session"`: el primero
+`` catálogo recibido para una conversación se reutiliza más tarde solicitudes en esa conversación. Esto mantiene el descubrimiento de habilidades y `SKILL.md` edits de cambiar esa parte del prefijo de caché de prompt ascendente a mitad de sesión. Una solicitud que lleve más de una `` El bloqueo se ha pasado sin cambios, y una solicitud que el proxy rechaza no establece el catálogo.
+
+Para utilizar el catálogo suministrado por el cliente en cada turno, establezca esto en opencodex's
+`$OPENCODEX_HOME/config.json` (normalmente `~/.opencodex/config.json`), luego reinicia El proxy:
+
+```json
+{
+ "skills": {
+ "catalog_refresh": "per_turn"
+ }
+}
+```
+
+Los valores soportados son `"per_session"` (predeterminado) y `"per_turn"`. Esto es un configuración de proxy, separada de Codex `skills.include_instructions` alternar. Las solicitudes sin una identidad de conversación confiable utilizan el catálogo proporcionado por el cliente. Las instantáneas se guardan en la memoria y no sobreviven a un reinicio proxy. Caducan después de cuatro horas de inactividad y pueden ser desalojados cuando el rellenos de caché. Un bloque de catálogo inicial mayor de 512 KiB se reenvía sin almacenamiento en caché. Después de la expiración o el desalojo, el siguiente catálogo recibido se convierte en la nueva instantánea. La vista previa del panel sigue leyendo los archivos actuales; no se muestra la instantánea conservada para una conversación en curso.
+
+
+
+## Lo que esta página lee y lo que no
+
+opencodex lee un archivo de configuración — su `config.toml`. Codex resuelve su configuración de varias capas, por lo que un valor aquí es lo que dice el archivo YOUR, no necesariamente lo que Codex finalmente calcula.
+
+
+
+## Las claves que escribe esta página
+
+Estos viven en su Codex `config.toml`, no en la propia configuración de opencodex.
+
+| Clave | Predeterminado | Capa |
+|---|---|---|
+| `include_permissions_instructions` | `true` | Permisos |
+| `include_collaboration_mode_instructions` | `true` | Modo de colaboración |
+| `include_environment_context` | `true` | Contexto ambiental |
+| `include_apps_instructions` | `true` | Aplicaciones |
+| `skills.include_instructions` | `true` | Habilidades |
+| `developer_instructions` | unset | Sus capas personalizadas, unidas en orden |
+| `model_instructions_file` | unset | Prompt base, cuando se selecciona una variante |
+
+Las escrituras son ediciones de línea: tus comentarios y formato sobreviven, y una clave opencodex no reconoce que se le deja solo en lugar de eliminarlo.
+
+Una clave ausente se lee como su valor predeterminado en lugar de como `false`. El panel muestra el valor que su archivo realmente contiene, y dice cuando una clave no está establecida.
+
+Una fila que tiene un valor explícito también ofrece **Restablecer a **, que elimina la línea clave en lugar de escribir el valor predeterminado. Ese es el único estado que sigue al valor predeterminado si Codex lo cambia más tarde — escritura
+`key = true` congelaría el valor predeterminado de hoy como una anulación.
+
+Este editor escalar rechaza arrays, tablas en línea y cadenas multilínea antes de escribir o restablecer una clave, preservando los bytes originales. Una importación informa explícitamente de una configuración ilegible. Las vistas previas de título de solo lectura mantienen el campo de título editable; la confirmación aún requiere una vista previa vinculada a ese título. Los fallos de HTTP o de medición de red se muestran como fallos en lugar de estar ocupada otra sonda.
diff --git a/docs-site/src/content/docs/es/guides/combos.md b/docs-site/src/content/docs/es/guides/combos.md
new file mode 100644
index 00000000000..e01b9744dac
--- /dev/null
+++ b/docs-site/src/content/docs/es/guides/combos.md
@@ -0,0 +1,712 @@
+---
+title: "Combos: conmutación por error y equilibrio de carga"
+description: "Route un modelo virtual a varios proveedores para conmutación por error o balanceo de carga ponderado."
+---
+
+A **combo** es un modelo virtual que encabeza una lista ordenada de objetivos reales de proveedor/modelo. Tu Solicitudes de clientes `combo/`; opencodex elige un destino, reescribe la solicitud a ese concreto
+`provider/model`, y puede intentar otro objetivo cuando el primero tiene un fallo reintentable.
+
+Esto es útil cuando usted quiere:
+
+- **Failover:** Prefiere un modelo, pero mantenga las copias de seguridad listas.
+- **Equilibrio de carga:** Difundir solicitudes exitosas entre modelos o proveedores en lotes ponderados.
+
+Los combos se sientan frente al enrutamiento normal del proveedor. Leer [Enrutamiento de modelos](/es/guides/model-routing/) primero si `provider/model` Los selectores son nuevos para ti.
+
+
+
+## Consentimiento de fallback medido
+
+Marca un objetivo combinado de pago por uso con `"metered": true` cuando sigue los objetivos de suscripción. El consentimiento omitido o falso niega el envío medido. Elija el consentimiento para su implementación:
+
+- **Local Claude Code o Codex:** en un proxy de solo loopback, establecer `"allowMeteredTargets": true` en el combo, o correr `ocx combo set --allow-metered-targets on`. Esto permite explícitamente a las personas que llaman locales usar sus objetivos marcados. El valor predeterminado es falso; `off` Aclara el consentimiento. La autenticación de Loopback no lee las claves API.
+- **Llamadas en red o vinculadas:** el llamador está configurado `apiKeys[]` La entrada debe tener `"allowMeteredComboTargets": true`. Un proxy con un oyente que no es loopback ignora la bandera combinada, incluso en su oyente de loopback secundario. Las personas que llaman vinculadas también retienen su requisito de consentimiento de clave configurada cuando el oyente principal es loopback. El entorno token nunca califica.
+
+Los encabezados de solicitud no pueden otorgar consentimiento. Los alcances de modelo/proveedor todavía se aplican. Esto cubre la selección inicial, conmutación por error y recuperación en todas las estrategias combinadas, compactación, Messages, Chat Completions y WebSocket, y un modelo de subagente alternativo que nombra un alias combinado. Una reserva colapsada intenta un objetivo no medido utilizable antes de rechazarlo. Los objetivos no marcados conservan el comportamiento existente; el operador declara la medición en lugar de detectarla automáticamente.
+
+Por ejemplo, una cadena de conmutación por error puede Anthropic OAuthEntonces, CursorEntonces, `{ "provider": "anthropic-apikey", "model": "claude-opus-5-5", "metered": true }`. Sin consentimiento, el agotamiento devuelve el último error no medido, con una excepción: un rechazo de cuota anterior 429 o 402 tiene prioridad sobre un 400, 401 o 403 posterior. Si el destino de la suscripción devuelve 429 y Cursor se niega con 401 o 403, la persona que llama recibe el 429 de la suscripción, porque la suscripción gastada explica el fallo y el rechazo de credenciales de Cursor no lo hace. El panel de control guarda la medición de destino omitida y el consentimiento combinado; si se establece explícitamente en false, se borra. Estos campos de consentimiento se configuran a través del archivo de configuración o API; el indicador combinado también está disponible a través del CLI, mientras que el panel de control no lo expone.
+
+
+
+## 60 segundos de inicio rápido
+
+Este ejemplo crea `combo/main` con Anthropic primero y OpenAI segundo. Ambos proveedores deben ya existen y están habilitados.
+
+```bash
+ocx combo set main --targets anthropic/claude-opus-4-8,openai/gpt-5.6-sol
+```
+
+La estrategia predeterminada es la conmutación por error, por lo que una solicitud normal va a
+`anthropic/claude-opus-4-8`. Si ese intento tiene un fallo reintentable, opencodex puede saltar a
+`openai/gpt-5.6-sol`.
+
+Utilice el modelo virtual en cualquier lugar donde normalmente proporcione un ID de modelo:
+
+```json
+{
+ "model": "combo/main",
+ "input": "Explain why the sky looks blue."
+}
+```
+
+Confirme la definición guardada:
+
+```bash
+ocx combo show main
+```
+
+:::tip
+Comience con conmutación por error y pesos iguales. Cambie a round-robin solo cuando desee intencionalmente distribuir tráfico y añadir ponderaciones solo cuando no sea apropiada una distribución igual.
+:::
+
+
+
+## Cómo funcionan los nombres combinados
+
+La identificación combinada en `ocx combo set ` debe comenzar con una letra o un número. Puede entonces contener letras, números, `.`, `_`, o `-`Hasta 64 caracteres en total. Su modelo canónico id es siempre
+`combo/`Por ejemplo, id `main` se convierte `combo/main`.
+
+Los `combo/` El espacio de nombres está reservado mientras se configuran los combos. Un proveedor llamado `combo` no puede ocuparlo, y un id combinado no puede duplicar un nombre de proveedor configurado.
+
+Un alias opcional le da al combo un nombre de modelo público diferente. Un alias:
+
+- utiliza los mismos caracteres que un id;
+- Puede ser simple, como `daily-fast`, o contener una `/`, tales como `team/daily-fast`;
+- No puede ser `combo` o comenzar con `combo/`;
+- no puede duplicar otro alias combinado; y
+- normalmente no puede ser un nombre de familia OpenAI nativo desnudo que comienza con `gpt-`, `o1-`, `o3-`, `o4-`, o `codex-`. El modo de compatibilidad de escritorio explícito a continuación es la única excepción.
+
+Incluso cuando se establece un alias, el canónico `combo/` La forma todavía se resuelve. Carreras de búsqueda canónica antes de la coincidencia de alias, por lo que un alias no puede asumir el id canónico de otro combo.
+
+:::note
+Los alias cambian la solicitud de nombre público de los clientes; no cambian el id almacenado del combo ni el proveedor de concreto/selectores de modelos detrás de él.
+:::
+
+
+
+## Compactación después de cambiar los combos
+
+Cuando un cliente compacta usando un nombre de modelo desnudo después de cambiar de combos, opencodex puede recordar el combo que más recientemente se completó con éxito en ese carril de conversación. El modelo debe coincidir la respuesta completada, y el combo y su objetivo deben existir todavía en la configuración actual. La solicitud sigue entonces la selección combo normal y conmutación por error.
+
+Los selectores explícitos de proveedor/combo y los alias combinados configurados tienen prioridad sobre esta recuperación. Las respuestas fallidas, incompletas o canceladas no reemplazan la última selección exitosa. El recuerdo es proceso local y limitado a 256 conversaciones durante 30 minutos, y a 1 KiB por modelo recordado nombre y 64 KiB en total; las entradas caducadas también se limpian en segundo plano. Una respuesta cuyo El nombre del modelo es demasiado grande como para mantener intacta la selección anterior en lugar de borrarla. Recall no almacena credenciales de cuenta. Sin identidad de conversación utilizable o estado válido recordado, se aplica el enrutamiento de compactación normal. Un reinicio despeja el estado recordado.
+
+
+
+## Codex Compatibilidad con la lista de permisos nativa del escritorio
+
+Algunas versiones de escritorio Codex aplican un control remoto nativo `available_models` El allowlist después de la app-server ya se ha cargado `model_catalog_json`. Los ids encaminados normales como
+`Nova1/codex-gpt-5.6-sol` son entonces utilizables por el CLI pero ausentes del selector de escritorio. Este es el de origen [Error de escritorio Codex](https://github.com/openai/codex/issues/19694) Rastreado por
+[opencodex](https://github.com/lidge-jun/opencodex/issues/241).
+
+Cuando controlas un destino enrutado equivalente, un combo puede hacerse cargo explícitamente de una babosa nativa:
+
+```bash
+ocx combo set nova-sol \
+ --targets Nova1/codex/gpt-5.6-sol \
+ --alias gpt-5.6-sol \
+ --native-alias \
+ --display-name 'Nova1 - codex-gpt-5.6-sol'
+```
+
+Este modo es deliberadamente opt-in y requiere ambos `--native-alias` y una etiqueta de visualización no vacía. El alias debe ser uno de los identificadores de modelo nativos soportados por esta versión opencodex; una familia nativa No se acepta el prefijo solo porque la eliminación debe ser capaz de restaurar metadatos autorizados. Cuando la respuesta de descubrimiento del objetivo enrutado proporciona solo un id de modelo, la fila de compatibilidad se rellena. Falta de contexto, modalidad y metadatos de razonamiento del identificador nativo que reemplaza. Objetivo explícito Los límites siguen ganando, por lo que esta alternativa nunca plantea un límite de contexto o anula las capacidades declaradas. Cambia la prioridad exacta de enrutamiento: solicitudes de `gpt-5.6-sol` Resolver `combo/nova-sol` antes la ruta canónica de la familia nativa OpenAI. El catálogo contiene una fila desnuda con la configuración mostrar la etiqueta, no duplicar filas nativas y combinadas. Solo el desnudo `gpt-5.6-sol` Slug es capturado. Filas calificadas como `main/gpt-5.6-sol` y filas calificadas por el proveedor como
+`openai-apikey/gpt-5.6-sol` siguen siendo rutas OpenAI distintas; la ruta API-key calificada por el proveedor Nunca se le escapa al alias nativo.
+
+Las claves de visibilidad permanecen inequívocas:
+
+- `combo/nova-sol` oculta el combo de compatibilidad del descubrimiento.
+- El bare `gpt-5.6-sol` Entrada en `disabledModels` continúa significando la fila OpenAI nativa inactiva; no oculta el combo que actualmente posee esa babosa pública.
+- Mientras se configura al menos un alias nativo, las filas nativas desnudas deshabilitadas se omiten del catálogo Codex efectivo en lugar de retenido como `visibility: "hide"`. Esto evita que el escritorio allowlist de resucitar filas que no debe mostrar. La página Modelos todavía muestra unshadowed nativo switches, y volver a habilitar uno restaura sus metadatos nativos conservados o actuales.
+
+:::caution
+Un alias nativo se hace cargo intencionalmente de un ID de modelo de primera persona. Utilizarlo solo cuando el objetivo es operacionalmente equivalente y etiqueta la fila del selector honestamente. Eliminar el combo restaura la normalidad enrutado nativo e identidad de catálogo en la siguiente sincronización.
+:::
+
+
+
+## Elige una estrategia
+
+
+
+### Conmutación por error: copias de seguridad y primarias ordenadas
+
+`failover` selecciona el primer destino elegible en orden de configuración. Un objetivo es elegible cuando su El proveedor existe, está habilitado, no se está enfriando y puede manejar cualquier restricción de solicitud especial. Pesos y `stickyLimit` No afecta a esta estrategia.
+
+Dada esta orden:
+
+1. `anthropic/claude-opus-4-8`
+2. `openai/gpt-5.6-sol`
+3. `google/gemini-3-pro`
+
+cada solicitud comienza con Anthropic. Un error Anthropic reintentable mueve esa solicitud a OpenAI; a El error retryable OpenAI puede moverlo a Google. Un error de terminal se detiene inmediatamente en lugar de Intentando los objetivos restantes.
+
+
+
+### Round-robin: lotes ponderados lisos
+
+`round-robin` utiliza un round-robin suave y ponderado. Un peso objetivo más grande le da a ese objetivo un peso más grande. compartir a lo largo del tiempo sin enviar toda su parte como un bloque largo. `stickyLimit` Controla cuántos Las solicitudes exitosas permanecen en el objetivo seleccionado antes de la siguiente selección ponderada.
+
+Crear un combo 2:1 con lotes de dos solicitudes exitosas:
+
+```bash
+ocx combo set balanced \
+ --targets anthropic/claude-opus-4-8:2,openai/gpt-5.6-sol:1 \
+ --strategy round-robin \
+ --sticky 2
+```
+
+Llamando a los objetivos **A** (peso 2) y **B** (peso 1), las primeras seis selecciones ponderadas son
+`A, B, A, A, B, A`. Porque `stickyLimit` es 2, cada selección se mantiene activa durante dos Solicitudes:
+
+| Solicitud exitosa | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
+| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
+| Objetivo | A | A | B | B | A | A | A | A | B | B | A | A |
+
+La cuota a largo plazo sigue siendo 2:1. Un fallo reintentable termina el lote pegajoso actual, enfría objetivo y selecciona otro objetivo elegible para la misma solicitud.
+
+:::caution
+Los pesos son relativos, no porcentajes. Pesos `2,1` y `200,100` expresa la misma proporción. Prefiero Pequeños valores que comunican la intención.
+:::
+
+
+
+### Aleatorio: sorteo ponderado por solicitud
+
+`random` dibuja un objetivo elegible por solicitud, con probabilidades proporcionales a `weight`. Cada solicitud es un sorteo independiente, por lo que el tráfico se propaga a través de los objetivos sin el patrón determinista o pegajosidad de round-robin. `stickyLimit` No afecta a esta estrategia.
+
+
+
+### Menos utilizado: favorezca al objetivo con menos éxitos
+
+`least-used` encamina cada solicitud al objetivo elegible con la menor cantidad de solicitudes exitosas registrado por este proceso opencodex. Cuentas comienzan a cero en el reinicio, y los lazos mantienen la configuración Orden. Pesos y `stickyLimit` No afecta a esta estrategia.
+
+
+
+### Reset-window: siga el restablecimiento de cuota más rápido
+
+`reset-window` encamina cada solicitud al destino elegible cuya instantánea de cuota de proveedor en caché muestra el próximo restablecimiento de ventana más rápido (cinco horas, semanal, mensual o personalizado). Esto gasta el proveedor que refresca primero. Los objetivos sin datos de cuota frescos, y los lazos, mantienen la configuración Orden. Pesos y `stickyLimit` No afecta a esta estrategia.
+
+Esta clasificación y exclusión de proveedores antes del envío requieren nuevos límites de inferencia de modelo que se aplican a la clave API actual como un todo. Los resúmenes de OAuth/cuenta actual, las rutas de reenvío de llamadas, las claves múltiples y las instantáneas con credenciales o destinos modificados solo se muestran para esta decisión temprana. Lo mismo se aplica cuando `Authorization`, `x-api-key`, o `x-goog-api-key` Los encabezados anulan las credenciales; se excluyen las ventanas de solo búsqueda y solo MCP. Si ningún objetivo elegible tiene un restablecimiento aplicable, el orden de configuración gana. La selección y los reintentos de la cuenta aún imponen sus límites normales.
+
+
+
+### Señales de cuota de asesoramiento para JEV
+
+Evidencia de cuota es opt-in por separado **por JEV Combo**, para los tres métodos de decisión:
+
+```bash
+ocx combo set coding --decision-quota-signals on --json
+ocx combo set coding --decision-quota-tiers '{"moderate":40}' --json
+```
+
+Habilite esto solo en un `strategy: "jev"` Combo. `decisionQuotaSignals: true` añade niveles de cuota de suscripción a la solicitud de decisión, no una regla de elegibilidad dura. La decisión Se pide al backend que prefiera una cuota más saludable entre las opciones adecuadas; todavía elige solo de objetivos elegibles configurados y listas de permisos de esfuerzo. Desconocido no está agotado, y ordinario Las opciones, el tiempo de reutilización, la selección de cuentas y los límites del proveedor permanecen sin cambios.
+
+Los valores predeterminados son `limited: 70` y `nearlyExhausted: 90`, porcentajes incluidos utilizados. No hay ninguna nivel moderado a menos que lo establezca explícitamente (por ejemplo, `moderate: 40`) Anulaciones parciales fusionan con esos valores predeterminados, entonces todos los umbrales deben ser finitos, dentro de 0–100 y estrictamente ascendentes.
+
+La evidencia proviene solo de las instantáneas de memoria publicadas por los recolectores de cuotas existentes, aceptadas encabezados de respuesta y propietarios de credenciales/cuentas, y solo mientras al menos un Combo JEV tenga esta activar: hasta entonces opencodex no recoge nada para ello, por lo que la evidencia comienza a acumularse (y lee como desconocido) desde el momento en que lo habilites. Leer la evidencia de la cuota de asesoramiento nunca se resuelve credenciales, carga auth stores o archivos de cuota, lee un llavero, sondea de origen o inicia un refresco. La resolución normal de las credenciales del backend de decisión no cambia. Frío, perdido, rancio (final) 30 minutos), se desconocen las pruebas futuras, inválidas o que hayan expirado. Cada cuenta usa su peor valor ventana relevante de cinco horas, semanal, mensual o estructuralmente. Una habilitada utilizable El grupo Anthropic/Codex utiliza su nivel de cuenta más saludable; vínculos desconocidos saludables. Una grupo es casi agotada solo si cada cuenta utilizable ha conocido evidencia casi agotada. Modelos de reserva sin barras atribuibles por separado siguen siendo desconocidos. Resúmenes de cuentas activas, clave múltiple Los informes de visualización, los créditos y los medidores API/Spark/USD no son evidencia de cuota para esta decisión. El Anthropic · separado Pool 2 (`anthropic2`) el fondo de cuentas no es una fuente de esta evidencia, por lo que sus objetivos permanecen desconocidos.
+
+:::caution[Datos adicionales para la decisión]
+La opción de envío envía los niveles de cuota, y el porcentaje/ventana/reset de demora usado disponible, a su selección backend de decisión, incluyendo alojado TypeSafe. No hay ID de cuenta, tokens o huellas dactilares de credenciales son enviados o registrados por esta característica. Los registros de decisiones locales retienen solo los recuentos de niveles limitados y el nivel seleccionado. Si la cuota supera el límite de solicitud de 64 KiB, se elimina antes de volver a intentar serialización; una decisión ordinaria de gran tamaño todavía falla abierta.
+:::
+
+`--decision-quota-signals off` desactiva la evidencia mientras retiene los niveles configurados; `-` borra el interruptor. `--decision-quota-tiers -` clears overrides, restaurando los valores predeterminados. API `null` aclara; API `false` Desactiva el interruptor. Los campos omitidos sobreviven a las actualizaciones de JEV, el reemplazo de objetivos y cambiar el nombre, incluidos los guardados a través del editor existente. Alejarse de JEV elimina ambos Configuración de cuotas. No se habilitan nuevos controles de editor ni trabajo de cuota de fondo.
+
+
+
+### Método de decisión
+
+`strategy: "jev"` pide una decisión de fondo para elegir el primer objetivo elegible y un esfuerzo de razonamiento para la solicitud actual. Es opt-in: cree un Combo JEV y seleccione ese Combo para usarlo. Agregar una credencial de decisión no cambia los modelos, alias o valores predeterminados existentes.
+
+| Método | Selección combinada | Backend reportado en estadísticas |
+| --- | --- | --- |
+| TypeSafe (predeterminado) | Omitir ambos selectores, o conjunto `decisionProvider: "jev"`. | `typesafe` |
+| Servidor compatible con System One | Establecer `decisionProvider` a una configuración `jev-decision` ID de fila que no sea `jev`. | `systemone` |
+| Modelo opencodex | Establecer `decisionModel` a una ruta opencodex ordinaria, como `ollama/qwen3:4b`. | `model` |
+
+`decisionProvider` y `decisionModel` son mutuamente excluyentes. El backend se deriva de los campos; no hay ningún almacenado `backend` Estableciendo. Cada método utiliza el mismo objetivo y esfuerzo elegible allowlist, estado de decisión limitado, tiempo de espera, cancelación y política de apertura fallida.
+
+
+
+#### TypeSafe por defecto
+
+La configuración más rápida es:
+
+1. Abrir **Proveedores**, añadir **TypeSafe JEV**, introduzca la clave TypeSafe API y pruebe la conexión.
+2. En la vista general de ese proveedor, seleccione **Crear JEV Auto**. También puedes usar la misma acción bajo
+ **Modelos → Combos**.
+3. Revise los objetivos Astra → Sol → Luna precargados. Agregar, quitar, reordenar o reemplazar antes de Creando el combo. La primera fila actualmente elegible está marcada como el objetivo de apertura de error, y cada La escalera de razonamiento conocida se muestra al lado de su fila.
+
+La plantilla crea id y alias `jev-auto`, utiliza la capacidad de razonamiento adaptativo, y sigue siendo un Combo editable ordinario. No se convierte en el modelo por defecto. Sus objetivos son la totalidad allowlist: JEV nunca puede seleccionar un par proveedor/modelo fuera de esa lista, y el objetivo original Los modelos permanecen disponibles en sus grupos de selección normales.
+
+Para la configuración sin cabeza, almacene la clave explícitamente o haga referencia a la variable de entorno TypeSafe:
+
+```bash
+ocx provider add jev --api-key "${TYPESAFE_API_KEY}"
+```
+
+Cuando el proveedor no tiene una clave guardada, el cliente de decisión también acepta `TYPESAFE_API_KEY` directamente y El alias estándar derivado del proveedor `JEV_API_KEY` impreso por `ocx provider add`.
+
+```json
+{
+ "providers": {
+ "jev": {
+ "adapter": "jev-decision",
+ "baseUrl": "https://api.typesafe.ai/v1/systemone",
+ "authMode": "key",
+ "apiKey": "${TYPESAFE_API_KEY}",
+ "liveModels": false
+ }
+ },
+ "combos": {
+ "jev-auto": {
+ "alias": "jev-auto",
+ "strategy": "jev",
+ "reasoningEffortMode": "adaptive",
+ "targets": [
+ { "provider": "openai", "model": "gpt-6-astra" },
+ { "provider": "openai", "model": "gpt-5.6-sol" },
+ { "provider": "openai", "model": "gpt-5.6-luna" }
+ ]
+ }
+ }
+}
+```
+
+Con el método predeterminado, OpenCodex envía una solicitud de decisión limitada al
+`https://api.typesafe.ai/v1/systemone` punto final con modelo `jev-latest`. Solo actualmente elegible Se ofrecen objetivos configurados. JEV elige el objetivo y el esfuerzo juntos; el esfuerzo sigue siendo limitado por la escalera anunciada de ese objetivo. JEV no se pregunta de nuevo si el objetivo seleccionado tiene un falla reintentable—el tiempo de reutilización y el bucle de retroceso de Combo existentes continúan a través del resto objetivos configurados.
+
+
+
+#### Servidor compatible con System One
+
+Un Combo JEV puede solicitar un servidor alojado o autoalojado que implemente el contrato de cable de System One. Por ejemplo, un servidor Ollama con soporte System One puede servir `tev1` en
+`POST /v1/systemone` sin una clave API. Añadir una fila de proveedor con
+`adapter: "jev-decision"` cuyo `baseUrl` es el **lleno** de decisión, luego nombrarlo en el Combo de `decisionProvider`:
+
+```json
+{
+ "providers": {
+ "ollama-tev1": {
+ "adapter": "jev-decision",
+ "baseUrl": "http://127.0.0.1:11434/v1/systemone",
+ "allowPrivateNetwork": true,
+ "defaultModel": "tev1:4b",
+ "liveModels": false
+ }
+ },
+ "combos": {
+ "jev-local": {
+ "strategy": "jev",
+ "decisionProvider": "ollama-tev1",
+ "decisionTimeoutMs": 60000,
+ "reasoningEffortMode": "adaptive",
+ "targets": [
+ { "provider": "openai", "model": "gpt-6-astra" },
+ { "provider": "openai", "model": "gpt-5.6-sol" },
+ { "provider": "openai", "model": "gpt-5.6-luna" }
+ ]
+ }
+ }
+}
+```
+
+- La fila `baseUrl` debe ser el punto final de decisión completo. Los servicios de HTTPS pueden usar cualquier ruta, como el `/v1/decisions`; los puntos finales HTTP simples todavía deben terminar en `/systemone`. Userinfo, cadenas de consulta y fragmentos no se aceptan en las URL de decisión. El modelo de decisión es `defaultModel`, si no el primero `models` entrada; una fila con ninguno es inutilizable y no se abre sin una solicitud (`jev-latest` es el modelo de TypeSafe y es nunca enviado a un anfitrión auto-alojado). La fila es solo un servicio de decisión: nunca se publica como un modelo enrutable y no puede ser un objetivo Combo.
+- Un loopback o LAN necesidades de punto final `allowPrivateNetwork: true` explícitamente en esa fila. Utilice un dirección loopback literal, RFC 1918 o IPv6 ULA `http:`; cada dirección resuelta debe permanecer en el conjunto permitido y no se puede aplicar ningún proxy de salida (agregar anfitrión a `NO_PROXY`) Todos los demás destinos deben usar HTTPS. Las redirecciones aún no se abren.
+- Solo la propia fila `apiKey` se envía, y solo cuando está configurado; una fila sin llave no envía
+ `Authorization` cabecera. Una fila cuyo `apiKey` referencias `${TYPESAFE_API_KEY}`/`${JEV_API_KEY}` o La entrada del llavero de otro proveedor se rechaza como inutilizable, por lo que `TYPESAFE_API_KEY`, `JEV_API_KEY`, y la `jev` La clave de fila nunca se envía a un punto final autoalojado. Los `jev` id mismo (explícito o siempre significa el punto final TypeSafe con modelo `jev-latest`.
+- Los servicios autoalojados reciben cada opción de destino/esfuerzo como una cadena de descripción simple (para ejemplo `Target openai/gpt-5.6-sol (provider openai, model gpt-5.6-sol) with low reasoning
+ effort.`), porque Ollama solo acepta cadenas o `null` descripciones de opciones. TypeSafe mantiene recibir los objetos de opción estructurados.
+- OpenCodex ofrece opciones 2–26 a una fila compatible con System One. Cada objetivo aporta una opción por esfuerzo de razonamiento ofrecido; uso por objetivo `reasoningEfforts` para recortarlos. Menos de 2 o más de 26 opciones no se abren sin una solicitud.
+- Una carga de modelo en frío puede tardar decenas de segundos, y una solicitud de decisión abortada hace que Ollama abandone la carga. Precalentar el modelo y mantenerlo residente (`OLLAMA_KEEP_ALIVE=-1`, o `keep_alive`), y aumentar
+ `decisionTimeoutMs` (1000–120000 ms, por defecto 4000) cuando el servicio es más lento que cuatro segundos. Cada tiempo de espera o error aún no se abre al primer objetivo elegible.
+
+El proveedor **Conexión de prueba** envía una decisión de sondeo limitada a su punto final.
+**Crear JEV Auto** en un proveedor de System One (incluidas las filas sin llave) rellena esa fila como el proveedor de decisiones. Filas deshabilitadas, URL de decisión no válidas y filas sin modelo se muestran con una razón y no pueden ser recogidos.
+
+Para un servicio alojado alternativo con el mismo contrato de solicitud/respuesta de decisión, agregue un proveedor fila y seleccionarlo con el Combo de `decisionProvider`:
+
+```json
+{
+ "providers": {
+ "alternative-decider": {
+ "adapter": "jev-decision",
+ "baseUrl": "https://decisions.example/v1/decisions",
+ "apiKey": "${ALTERNATIVE_DECISION_KEY}",
+ "defaultModel": "decision-model-v1",
+ "liveModels": false
+ }
+ }
+}
+```
+
+Establecer `decisionProvider: "alternative-decider"` en el Combo JEV existente. Su propia credencial y el modelo acompaña al estado de decisión limitado; Las credenciales de entorno TypeSafe nunca se heredan. Los `jev` id sigue siendo canónico. HTTPS/TLS, restricciones de destino de salida, rechazo de redirección, Límites de solicitud/respuesta, tiempo de espera, cancelación y la lista de permisos de elección elegible aún se aplican.
+
+[Laya MLX](https://github.com/mizorewww/laya-mlx) ejecuta decisiones escritas en Apple Silicon. Para usarlo con este método, expóngalo a través de un contenedor HTTP compatible con System One y luego configure una fila como
+`ollama-tev1` arriba con el envoltorio lleno `/systemone` URL e ID de modelo aceptado como `defaultModel`. El entorno de ejecución de Python MLX solo no es un punto final de decisión HTTP. Para un envoltorio de bucle HTTP, mantenga
+`allowPrivateNetwork: true` y utilice su dirección de bucle de retorno literal.
+
+Para un ejemplo alojado, un colaborador informó el siguiente punto final de Zen System One que trabaja en
+[#6185](https://github.com/lidge-jun/opencodex/pull/6185). Configurarlo manualmente como una fila ordinaria; Esto no es un preajuste del registro OpenCodex o una garantía de disponibilidad actual:
+
+```json
+{
+ "providers": {
+ "zen-decision": {
+ "adapter": "jev-decision",
+ "baseUrl": "https://opencode.ai/zen/v1/systemone",
+ "defaultModel": "jev-1.13-free",
+ "apiKey": "${ZEN_DECISION_API_KEY}",
+ "liveModels": false
+ }
+ },
+ "combos": {
+ "jev-zen": {
+ "strategy": "jev",
+ "decisionProvider": "zen-decision",
+ "targets": [
+ { "provider": "openai", "model": "gpt-6-astra" },
+ { "provider": "openai", "model": "gpt-5.6-luna" }
+ ]
+ }
+ }
+}
+```
+
+Utilice la propia clave de ese punto final si se requiere autenticación; omita `apiKey` solo si el endpoint Acepta llamadas sin llave. Nunca reutilizar `TYPESAFE_API_KEY` o `JEV_API_KEY` Por eso.
+
+
+
+#### Modelo opencodex
+
+Un chat ordinario o modelo Responses puede hacer la misma elección de enrutamiento sin implementar
+`/systemone`. Configure su proveedor de inferencias como de costumbre y establezca `decisionModel` a su ruta:
+
+```json
+{
+ "combos": {
+ "jev-chat": {
+ "strategy": "jev",
+ "decisionModel": "ollama/qwen3:4b",
+ "decisionTimeoutMs": 60000,
+ "targets": [
+ { "provider": "openai", "model": "gpt-6-astra" },
+ { "provider": "openai", "model": "gpt-5.6-luna" }
+ ]
+ }
+ }
+}
+```
+
+Otros ejemplos son `deepseek/deepseek-v4-flash`, `openai/gpt-5.6-luna`, o
+`opencode-zen/` para un modelo de inferencia Zen configurado. Estos son hilos de ruta ordinarios, no preconfiguración de servicio de decisión; el proveedor y el modelo deben estar disponibles en la instalación. Porque `openai/gpt-5.6-luna`, configurar las credenciales que puede usar la llamada interna, como una Codex almacenada inicio de sesión en pool. Un inicio de sesión de reenvío ChatGPT propiedad del llamante es insuficiente.
+
+El modelo recibe instrucciones fijas del router y un mensaje JSON:
+
+```json
+{
+ "state": { "user_task": "Review the requested change" },
+ "options": { "": "Target description and allowed reasoning effort" }
+}
+```
+
+`state` es la evidencia limitada que se describe a continuación; `options` mapas generados opción claves a llanura descripciones. El contrato de respuesta es `{"choice":""}`, nombrando exactamente una opción ofrecida. Las instrucciones tratan el estado como evidencia, prefieren un menor uso de recursos entre las opciones adecuadas, y requieren JSON solamente. Una opción no válida o no listada, una respuesta malformada o una llamada fallida no se abre.
+
+La decisión interna lleva a **ninguna credencial de llamada**, encabezados de llamada, herramientas, sesión o Historial de conversación. Debe usar credenciales almacenadas para el proveedor seleccionado, o un proveedor local sin llave como Ollama. Configuraciones de solo autenticación de llamadas, como Cursor sin un credenciales almacenadas o un inicio de sesión directo ChatGPT propiedad del llamante, no pueden servir como modelos de decisión y no abrir. Seleccionar una ruta no es prueba de que su credencial sea utilizable; pruébela antes de confiar en ella.
+
+Un combo no-JEV se puede utilizar como `decisionModel`, pero la ruta de decisión no puede nombrar este Combo o cualquier combo con `strategy: "jev"`. Esto se aplica a canónica `combo/` selectores y alias, incluyendo selectores con esfuerzo o variantes rápidas. La validación de tiempo de ahorro rechaza la recursividad y el El entorno de ejecución también bloquea la reentrada de JEV defensivamente. El turno de decisión tiene su propio presupuesto de envío y turno arrendamiento; no se registra como una solicitud separada, y el uso de la decisión informada pertenece al padre Solicitudes `jevDecision`.
+
+
+
+#### Límites compartidos, estado y estadísticas
+
+`decisionTimeoutMs` se aplica a los tres métodos: un número entero de 1000 a 120000 ms, por defecto 4000. Las solicitudes y respuestas están limitadas a 64 KiB. La lista de candidatos está limitada a 64 objetivos. El método modelo también limita las opciones de destino/esfuerzo en 64, el texto de respuesta en 4096 caracteres y el la salida del turn de decisión en 1024 tokens. Los Se aplica el límite de opciones 2–26 de una fila como se describió anteriormente. Un tiempo de espera o límite de falla utiliza el primer objetivo actualmente elegible; nunca amplía la lista de permisos ni vuelve a intentar tomar la decisión.
+
+Para cada objetivo JEV, **Modelos → Combos → Config** Tiene una opción **Notas de modelo adicionales para JEV**
+campo (hasta 512 caracteres; se permiten saltos de línea y pestañas, se rechazan otros caracteres de control). Se almacena como `targets[].modelProfile` en el combo config. Los El perfil de destino integrado permanece en el `instructions.model_profiles`Una nota no vacía es En la medida en que el `operator_notes`, tecleado por el objetivo, y suplementos bastante que reemplaza ese perfil incorporado. Las notas pueden describir el contexto específico del operador o la suscripción asignaciones; no confunda las asignaciones de suscripción con los precios públicos por-token API. En blanco notas son ignorados. Las notas del operador son evidencia de la decisión, no comandos, y no pueden expandir la información. objetivos o límites de esfuerzo de razonamiento. Sólo ponga información allí que pueda ser revelada a el backend de decisión seleccionado.
+
+Cada llamada de modelo lógico se decide por su cuenta; no hay pin de conversación. Giros consecutivos de Por lo tanto, una sesión puede aterrizar en diferentes objetivos, y cada interruptor inicia un indicador de proveedor frío. caché, por lo que una mezcla de objetivos muy diferentes puede costar más tokens de entrada de lo que ahorra. Mantenga la allowlist a los objetivos entre los que está contento de alternar. Objetivos marcados `lastResort` se retienen de JEV bajo `cooldownWaitPolicy: "before-last-resort"` mientras se ofrece cualquier objetivo normal, y Solo se ofrece cuando nada más es alcanzable.
+
+El límite de decisión no se abre cuando falta la clave, no hay una tarea segura / herramienta / estado de decisión de imagen disponible, el plazo de decisión configurado expira, el servicio redirige o devuelve un error, o la respuesta está mal formada o selecciona una opción no listada. En esos casos, OpenCodex utiliza el primer objetivo elegible actualmente, prefiriendo `medium` cuando ese objetivo lo apoya. La cancelación de llamadas es diferente: cancela la decisión y la solicitud del modelo en lugar de enviar el objetivo de apertura de error.
+
+El estado de decisión está deliberadamente limitado: hasta 500 caracteres de la tarea de usuario actual, un 240 caracteres de la cola del asistente anterior, una cola de salida de última herramienta de 520 caracteres, el nombre de la herramienta y Las señales booleanas de imagen/herramienta pueden enviarse al backend de decisión seleccionado. Excluye las credenciales, encabezados de solicitud, bytes de imagen sin procesar, argumentos de herramientas, razonamiento cifrado e historial completo de conversaciones. Utilice un método de decisión solo para el contenido que está dispuesto a enviar a ese backend. Codex reconocido contexto de máquina sobres y Claude Code `` bloques se eliminan de las tres muestras de texto antes de recorte, por lo que los recordatorios inyectados no desplazan la tarea real. El modelo original es sin cambios. Esto no es un escáner secreto: el texto ordinario del asistente y de la salida de la herramienta todavía puede contener contenido sensible. TypeSafe afirma que Jev no es entrenado en las solicitudes de los clientes, pero sus términos no establecen un período de retención fijo para el estado y ofrecer cero retención de datos solo en los planes empresariales ([modelos](https://docs.typesafe.ai/models), [legal](https://docs.typesafe.ai/legal)) TypeSafe También documenta el inglés como el idioma más preciso de Jev, así que revise las decisiones sobre el trabajo que no sea inglés. antes de confiar en ellos. Los registros contienen solo los seleccionados objetivo/esfuerzo, una puerta de decisión aproximada, latencia, confianza/probabilidad opcional y uso numérico. Las pruebas automatizadas usan respuestas TypeSafe simuladas más un humo sin llave que se abre al error; una decisión TypeSafe en vivo requiere una clave suministrada por el operador y no se ejecuta implícitamente.
+
+El esfuerzo seleccionado de JEV se aplica al primer hijo de Responses y a los hijos nativos de Chat en la opción de aceptación.
+`protocols.rollout.nativeChatCombos` camino. Reemplaza el esfuerzo de quien llama y elimina el pensamiento conflictivo Controles y llamadas `service_tier`; una opción explícita sin esfuerzo elimina el esfuerzo incluso cuando el Combo ha un defecto forzado. Los pines de esfuerzo del proveedor, las tapas y la normalización del cable aún se aplican después. Los registros de solicitud y intento muestran un esfuerzo aplicado diferente como `high->xhigh` o `high->low`Reteniendo más tarde Configuración como `high->xhigh->medium`. Un esfuerzo inalterado o una elección sin esfuerzo mantiene el etiqueta. Más tarde, los objetivos de reserva usan la política Combo ordinaria de la solicitud original, sin otra llamada JEV.
+
+Después de que el Combo haya servido las solicitudes, abra **Modelos → Combos → jev-auto → Estadísticas** para inspeccionar JEV elige sin reemplazar el selector de modelo normal o la página Uso. La pestaña separa la decisión informada por el backend tokens de tokens reportado por el modelo físico envía, y muestra las puertas de decisión, selecciones de fallo-apertura, esfuerzos de razonamiento, reintentos / retrocesos, caché tokens, latencia, confianza y totales por modelo para 7 días, 30 días o toda la historia disponible. Las estadísticas provienen del libro mayor de uso solo de apéndices locales; contienen los metadatos de decisión limitados descritos anteriormente, no mensajes ni credenciales. Backend filas muestran el recuento de decisiones, el recuento aplicado y la latencia media para `typesafe`, `systemone`, y
+`model`; los registros más antiguos sin backend se agrupan como `unknown`.
+
+
+
+## Qué pasa cuando un objetivo falla
+
+Las fallas combinadas se dividen en **hop** fracasos y **terminal** fracasos.
+
+| Resultado | Comportamiento |
+| --- | --- |
+| HTTP 401, 403, 404, 408, 429 o cualquier 5xx | Enfríe el objetivo y salte al siguiente objetivo elegible. |
+| HTTP 410 con un modelo explícito al final de su vida útil, retirado, obsoleto, puesta del sol, desmantelado o señal ya no disponible | Enfriar ese objetivo y saltar. Las respuestas 410 no relacionadas siguen siendo terminales. |
+| Autenticación clasificada, suscripción, cuota, límite de velocidad, sobrecarga o error del servidor ascendente | Enfríe el objetivo y salte, incluso cuando el estado por sí solo no sea suficiente. |
+| Cancelación de cliente (499), `origin_rejected`, rechazo de políticas cibernéticas, desbordamiento del contexto u otra solicitud inválida | Detener y devolver el error; otro objetivo no haría que la solicitud fuera válida. |
+| HTTP 400 exacto que dice que un modelo no es compatible cuando se usa Codex con una cuenta ChatGPT | Pruebe el siguiente objetivo declarado antes del compromiso de producción. El mensaje debe ser el rechazo total en `detail`, `error.message`, o texto desnudo; compitiendo `detail` y `error` sobres estancia terminal. Esto no pone en cuarentena la cuenta ni enfría todos los modelos del proveedor. |
+| Estructurado HTTP 400 rechazo opcional `user`, un esfuerzo de razonamiento no soportado, una entrada de imagen con alcance de modelo o medios de entrada que la ruta no puede leer (`unsupported_input_modality`) | Salta antes del compromiso de salida sin enfriamiento; vea la compatibilidad de destino local de solicitud a continuación. |
+| Primera llamada de herramienta de un giro Responses ejecutado por un adaptador en proceso (`runTurn`) que la solicitud actual no declaró, antes de cualquier efecto secundario de salida o reproducción insegura | Enfríe el objetivo y salte con el mismo catálogo de herramientas. Después de una salida visible o un efecto secundario de repetición insegura, el rechazo es final. Las solicitudes Chat Completions y Anthropic Messages no se modifican. |
+| Cualquier otro error no clasificado | Detener y devolver el error. |
+
+Si el presupuesto de envío de solicitud compartida rechaza el primer objetivo, el combo devuelve un 429 local.
+`request_send_budget_exhausted` sin contactar a un proveedor. Si rechaza un objetivo posterior, el combo devuelve el último error ascendente real sin enviarlo a ese objetivo.
+
+Cuando `cooldownMs` está sin definir, un objetivo saltado utiliza un fallback ascendente: 5 segundos para la tasa de solicitud 429s con código ascendente `1302` o `1305`, 10 minutos para una ventana de uso de la cuenta gastada, y 60 segundos de lo contrario. Una ventana de uso es reconocida por el código ascendente (`usage_limit_exceeded`,
+`usage_limit_reached`, `1308`o por la prosa `usage limit reached`, independientemente del estado HTTP — el backend ChatGPT Codex informa de una ventana gastada como 502 en lugar del 429 documentado. Credenciales y fallas de facturación que ya bloquean a todo el proveedor (`invalid_api_key`, `insufficient_quota`,
+`payment_required`, y los otros códigos de alcance del proveedor) toman la misma espera de 10 minutos. Cuando se establece, `cooldownMs`
+se aplica siempre que no se pueda utilizar de origen `Retry-After` o Codex señal de restablecimiento existe, incluidos los 429s. Numérico `Retry-After` segundos y se aceptan valores de fecha HTTP. Explícito Los retrasos en el servidor se limitan a 24 horas; los tiempos de reutilización derivados, configurados y de reserva se limitan 10 minutos. La precedencia es, de más fuerte a más débil, explícita.
+`Retry-After` → Codex reseteo de cabeceras (`x-codex-primary-reset-at`, `x-codex-secondary-reset-at`, o
+`x-codex-tertiary-reset-at`) → el combo de `cooldownMs` (cuando se establece) → el 10 minutos de espera para una ventana de uso gastado o un fallo de credencial / facturación → el retroceso de tasa de solicitud de 5 segundos para upstream códigos de límite de velocidad `1302`/`1305` → el valor predeterminado de 60 segundos. La retención de la ventana de uso se prueba primero, por lo que Fallo que lleva un código de tasa de solicitud *y* La prosa de límite de uso se mantiene durante diez minutos en lugar de diez minutos. cinco segundos. Una validez inmediata
+`Retry-After: 0` sigue siendo una directiva ascendente inmediata en lugar de ser reemplazada por una Enfriamiento.
+
+Para un grupo Anthropic OAuth o Codex, un 429 vinculado a una cuenta que el grupo ha enfriado no no enfriar todo el combo objetivo. Otras cuentas detrás de ese objetivo siguen disponibles. El 429 con ninguna cuenta de grupo refrigerada identificada sigue enfriando el objetivo, al igual que las fallas de todo el proveedor.
+
+
+
+### Objetivos de último recurso
+
+Un breve tiempo de reutilización en un objetivo preferido de lo contrario se dirige directamente a lo que sea. viene a continuación en la lista — incluyendo un objetivo que solo quería utilizar en una Emergencia. Márcalo y dile al combo que espere primero:
+
+```json
+{
+ "strategy": "failover",
+ "cooldownWaitPolicy": "before-last-resort",
+ "waitForCooldownMs": 10000,
+ "targets": [
+ { "provider": "provider-a", "model": "model-a" },
+ { "provider": "provider-b", "model": "model-b" },
+ { "provider": "provider-c", "model": "model-c", "lastResort": true }
+ ]
+}
+```
+
+Con el conjunto de políticas, la selección prueba primero los objetivos normales. Si sólo son enfriamiento y el enfriamiento más temprano expira dentro `waitForCooldownMs`, el petición espera por eso en lugar de enviar el destino del último recurso. Eso aplazamiento no depende de la espera: a `lastResort` El objetivo se salta cada vez que cualquier objetivo normal está disponible, para cada estrategia, y bajo `round-robin` o
+`random` No se une a la rotación en absoluto. `waitForCooldownMs` Sólo añade el esperar un objetivo normal de enfriamiento, por lo que en el valor predeterminado `0` No hay nada que esperar: el último El recurso se utiliza tan pronto como no hay un objetivo normal disponible. Tras un intento fallido, la siguiente selección sigue la misma regla.
+
+**La política sólo se aplaza.** Cuando no se puede alcanzar un objetivo normal — cada un enfriamiento más allá del presupuesto, ya intentado o descartado — el último recurso objetivo se envía como de costumbre. Una política que podría retenerlo se convertiría en caída en un corte, que es peor que el enrutamiento prematuro que previene. Lo mismo se aplica a un combo cuyos objetivos son *todos* marcado `lastResort`: es despachos con normalidad.
+
+`lastResort` Es inerte a menos que `cooldownWaitPolicy` se establece, y ambos se omiten Por defecto, los combos existentes no se ven afectados. Solo la cadena exacta
+`before-last-resort` Opta por.
+
+La solicitud actual nunca vuelve a intentar el mismo objetivo — con una excepción: un combo de un solo destino que establece `waitForCooldownMs` puede volver a intentar su único objetivo una vez que el tiempo de reutilización de ese objetivo expira dentro del misma petición, ya que no hay alternativa para fallar. Rechazos de compatibilidad local todavía Regresa sin ningún intento. Las solicitudes posteriores omiten un objetivo enfriado hasta que El tiempo de reutilización expira; los rechazos de compatibilidad local de la solicitud no enfrían el objetivo. A `Retry-After` HTTP-date que ya está en el pasado también se conserva como un Directriz inmediata, como `Retry-After: 0`. Establecer `waitForCooldownMs` Para permitir una posterior solicitar esperar el tiempo de reutilización del objetivo elegible más temprano, hasta ese límite en cada intento de selección, y luego hacer una selección fresca. Por lo tanto, una solicitud puede esperar hasta `hops × waitForCooldownMs`
+a través de múltiples saltos de conmutación por error. El valor predeterminado es `0`, que falla cerrado inmediatamente con HTTP 503 cuando cada objetivo elegible se está enfriando; eso `combo_unavailable` 503 lleva un `Retry-After` cabecera igual hasta el tiempo de reutilización restante más temprano, redondeado a segundos enteros con un mínimo de 1. Las esperas no se agitan, así que Es posible realizar despertares sincronizados. Una solicitud abortada cancela esta espera y devuelve el valor normal.
+`client_cancelled` respuesta; no envía un objetivo de respaldo después de la cancelación. Un objetivo combinado El tiempo de reutilización es el estado por coma local del proceso y está separado del tiempo de reutilización de la cuota de cuenta Codex utilizado por el enrutamiento de cuenta nativo.
+
+:::note
+La conmutación por error es intencionadamente limitada. Ayuda con la disponibilidad específica del objetivo, autenticación, cuota, y sobrecarga de fallos; no oculta errores de llamada o rechazos de políticas. En una solicitud Responses no combo, se reescribe una directiva xAI 403 permitida en HTTP 200.
+`incomplete/content_filter` antes de que Codex lo vuelva a intentar como un fallo de transporte; véase
+[Rechazos de política xAI](/es/reference/proxy-formats/#xai-policy-refusals). Combo hops todavía clasificar el HTTP 403 original como un salto.
+:::
+
+Para las solicitudes de transmisión, el flujo ascendente HTTP El estatus no es la decisión final. OpenCodex búferes un prefijo de pre-salida delimitado del Responses SSE. Si el flujo informa de un
+`response.failed` terminal antes de cualquier texto, razonamiento, llamada de herramienta u otro evento de salida, el niño se registra como fallido y el combo puede intentar su próximo objetivo elegible. Una salida cero
+`response.incomplete` sigue el mismo camino cuando su razón falta o es `adapter_eof`,
+`missing_terminal_event`, o `upstream_stall_timeout`. Razones semánticas explícitas como
+`max_output_tokens` y `content_filter` sigue siendo terminal, al igual que una razón explícita nula. También se mantiene una instantánea final sin razón que ya contiene elementos de salida. Una vez que comienza cualquier evento de salida, el objetivo está comprometido: un fallo posterior de la secuencia se devuelve al cliente y nunca se reproduce en otro proveedor, lo que evita la duplicación de texto y la ejecución de herramientas. Si el buffer de pre-salida alcanza su límite de seguridad sin un terminal o límite de salida, OpenCodex también confirma el objetivo actual en lugar de crecer la memoria sin ataduras.
+
+
+
+## Compatibilidad con objetivos locales de solicitud
+
+Cuando se enruta Claude Code a lo canónico ChatGPT Codex backend, OpenCodex elimina el nivel superior no soportado `user` campo de metadatos sin cambiar la clave de sesión/caché, los mensajes de entrada, los esquemas de herramientas o los identificadores de seguridad. Responses API y las pasarelas de avance no canónicas mantienen ese campo.
+
+Un combo también puede avanzar después de un HTTP 400 intacto `invalid_request_error` que rechaza específicamente `user`, informes `unsupported_value` por `reasoning.effort`/`reasoning_effort`, o informes `param: input` con un modelo de alcance exacto `does not support image inputs` rechazo. Una ruta que rechaza los medios de la solicitud con código `unsupported_input_modality`, como la entrada de imágenes enviada a una ruta de proveedor CLI sin un contrato multimodal verificado, avanza de la misma manera. Este es un desajuste para esa solicitud, no evidencia de que el objetivo no sea saludable, por lo que no registra ningún enfriamiento. Esta recuperación de compatibilidad no cambia silenciosamente `none` en un esfuerzo diferente o ampliar esta excepción a solicitudes arbitrarias no válidas. Las denegaciones de política, la cancelación y la producción ya comprometida siguen siendo no reproducibles. Una solicitud de un solo objetivo todavía devuelve un rechazo ascendente no resuelto.
+
+
+
+## Las llamadas de herramientas permanecen en un objetivo
+
+Cuando un modelo le pide a su cliente que ejecute una herramienta, la solicitud que devuelve el resultado de la herramienta finaliza la solicitud. El mismo asistente de turno. OpenCodex envía esa solicitud al destino que emitió la llamada a la herramienta, siempre que como el objetivo todavía está habilitado, todavía en el combo y fuera de tiempo de reutilización. Esto vale para cada estrategia, incluyendo JEV, que omite su decisión para esa solicitud. El siguiente mensaje de usuario elige un objetivo con normalidad.
+
+El seguimiento utiliza el hilo o el identificador de sesión del cliente, por lo que un cliente que no envía ninguno recibe una selección normal. Si el objetivo original no está disponible o falla, el combo falla como de costumbre, y el nuevo objetivo recibe las llamadas a herramientas anteriores en un formulario que acepta. Los modelos pensantes DeepSeek obtienen un espacio único Razonamiento marcador de posición para una llamada de herramienta que otro modelo emitió sin razonamiento. Gemini obtiene El marcador de posición de firma documentado de Google. Anthropic recibe una llamada de herramienta simple y resultado. Anterior versiones podrían enviar DeepSeek una llamada de herramienta desnuda aquí y fallar con `The reasoning_text in the
+thinking mode must be passed back to the API`.
+
+
+
+## Esfuerzo de razonamiento por defecto
+
+`defaultEffort` suministra un esfuerzo configurado cuando el objetivo seleccionado tiene una escalera soportada no vacía conocida. Con el valor predeterminado `defaultEffortMode: "fallback"`, un esfuerzo explícito de la persona que llama tiene prioridad. `defaultEffortMode: "force"` anula un esfuerzo de llamada válido con el valor predeterminado configurado; requiere un esfuerzo no nulo válido `defaultEffort` y puede aumentar el costo y la latencia. El modo de fuerza es una elección explícita del operador a través de la configuración o administración combinada.
+
+La escalera anunciada del objetivo sigue siendo autorizada. Se conserva un valor soportado exacto; de lo contrario, se selecciona el peldaño soportado más alto en o por debajo de él, o el peldaño soportado más bajo cuando ninguno es inferior. Las escaleras desconocidas o vacías nunca causan la inyección predeterminada. El modo de fuerza no repara el esfuerzo del llamador mal formado en una solicitud costosa válida. Otros campos de razonamiento, incluyendo `reasoning.summary`, se conservan.
+
+`reasoningEffortMode` Sigue siendo independiente de `defaultEffortMode`Las escaleras vacías explícitas eliminan los controles de esfuerzo/pensamiento no soportados, y las escaleras adaptativas desconocidas también lo hacen, como se describe a continuación. Estrictas escaleras desconocidas preservan la petición de la persona que llama sin forzar un valor predeterminado. Los valores predeterminados soportados son `low`, `medium`, `high`, `xhigh`, `max`, y `ultra`; omitir `defaultEffort` o establecerlo para `null` para desactivar la inyección predeterminada en modo de reserva.
+
+
+
+### Grupos de capacidades mixtas (`reasoningEffortMode`)
+
+Los niveles de esfuerzo que anuncia un combo son la intersección de lo que anuncian sus objetivos. Un objetivo que anuncia explícitamente **no** control de esfuerzo toma parte en esa intersección, por lo que un solo La copia de seguridad sin esfuerzo vacía el selector de esfuerzo para todo el combo —, incluidos los objetivos que sí lo hacen apoyo afinación.
+
+Establecer `reasoningEffortMode: "adaptive"` para excluir esas escaleras vacías de la publicación intersección en su lugar. El selector muestra los niveles que comparten los objetivos restantes, y el El objetivo sin esfuerzo sigue siendo elegible para el enrutamiento. Objetivos cuya escalera es simplemente *Desconocido* son tratados Comodines en ambos modos.
+
+```json
+{
+ "combos": {
+ "mixed": {
+ "targets": [
+ { "provider": "openai-apikey", "model": "gpt-5.6-luna" },
+ { "provider": "local", "model": "no-effort-model" }
+ ],
+ "reasoningEffortMode": "adaptive"
+ }
+ }
+}
+```
+
+El valor predeterminado es `"strict"`, que mantiene el comportamiento original del selector. Esta configuración no cambia orden objetivo o política de conmutación por error. En el momento del despacho, una escalera de destino explícitamente vacía no tiene soporte. Esfuerzo/pensamiento controles eliminados en cualquier modo mientras se preservan los campos de razonamiento sin esfuerzo soportados como el `reasoning.summary`; `"adaptive"` aplica la misma normalización a un objetivo desconocido capacidad, mientras que los objetivos no vacíos conocidos mantienen su resolución de esfuerzo por objetivo existente. En el panel de control se encuentra la **Escala de razonamiento adaptativo** cambiar en un Sección de capacidades de combo.
+
+
+
+## Capacidad de imagen / multimodal
+
+De forma predeterminada, un combo publica el **intersección** de sus objetivos (la imagen es habilitado solo cuando cada objetivo lo anuncia). Establecer `imageInput: "disabled"` Para forzar sólo texto incluso cuando cada destino admite imágenes — el catálogo cae `image` Desde `inputModalities`, y Las solicitudes de soporte de imágenes se rechazan con HTTP 400 antes de que se llame a cualquier destino. `"auto"` (o omitiendo el campo) mantiene la intersección automática.
+
+En el panel, el **Imagen / multimodal** El interruptor se puede activar siempre que cada objetivo tenga capacidades de entrada de imagen o texto conocidas. Los miembros de la imagen nativa permanecen sin cambios; los miembros de solo texto son solo texto declarado automáticamente en guardar (`modelCapabilities[model].inputModalities = ["text"]`) Así que [Visión Sidecar](/es/guides/sidecars/) describe sus imágenes. La pista del switch nombra el miembros que serán inscritos. Un miembro cuyas modalidades son desconocidas o no tienen entrada de texto (para ej., un modelo de solo audio) no puede ser cubierto por el sidecar; mantiene el conmutador En el caso de los niños. Si el [Visión Sidecar](/es/guides/sidecars/) está deshabilitado globalmente, permitiendo la switch muestra una advertencia vinculada al panel: la inscripción aún se guarda, pero las imágenes se reemplazan con una nota de omisión y las solicitudes continúan sin descripciones de imágenes hasta que el sidecar esté Rehabilitado. Desactivar el interruptor desactiva la entrada de imagen para el combo pero guarda esas declaraciones del proveedor, y `PUT /api/combos` acepta la misma inscripción que un nivel superior opcional `visionSidecarTargets` matriz de exactos `{ provider, model }` objetivos (solicitar-solamente; nunca se almacena en el combo y se rechaza mientras `imageInput` es
+`"disabled"` cuando la lista de inscripción no está vacía). Entradas que ya aceptan entrada de imagen o se declaran sin texto se rechazan con HTTP 400 en lugar de sobrescribir, entradas el sidecar ya se omiten las portadas, y se rechaza un guardado antes de que la publicación restaure el combo y cada declaración juntos. Eliminar un miembro del combo no elimina su declaración de solo texto; editor de proveedores si ya no lo desea.
+
+
+
+## Tareas de subagentes encriptadas v2
+
+Hay una limitación importante para los subagentes Codex v2 ([Número 92](https://github.com/lidge-jun/opencodex/issues/92)) Un padre nativo puede enviar la tarea de un trabajador recién generado solo como texto cifrado acuñado para el nativo. ChatGPT backend. Un proveedor externo no puede leer esa carga útil.
+
+Para una solicitud de este tipo, un combo filtra sus objetivos elegibles a rutas canónicas nativas ChatGPT, incluso después de un fallo reintentable. Si el combo no tiene un objetivo capaz de descifrar, opencodex se detiene antes de enviar y devolver HTTP 400:
+
+```json
+{
+ "error": {
+ "type": "invalid_request_error",
+ "code": "unreadable_encrypted_agent_task"
+ }
+}
+```
+
+Esto protege la tarea de ser enviada a un proveedor que no recibiría instrucciones legibles. Las tareas de texto plano legibles utilizan la estrategia combo normal.
+
+Tienes cuatro opciones de recuperación:
+
+1. Seleccione un modelo nativo de ChatGPT para el niño.
+2. Agregue un destino canónico nativo ChatGPT al combo.
+3. Utilice la superficie v1 para la delegación a través de diferentes proveedores.
+4. Si controla al llamante, vuelva a enviar la tarea como texto sin formato v2 `agent_message` contenido.
+
+Véase [Interfaz de subagentes](/es/guides/sub-agent-surface/) para los modos v1/base/v2 y el cifrado completo Flujo de trabajo de tareas.
+
+
+
+## Administrar combos
+
+
+
+### Panel
+
+Abra el panel de control local y elija **Modelos → Combos**. El espacio de trabajo crea, edita, renombra y elimina Combos. Sus selectores de modelos incluyen modelos ocultos: la visibilidad del catálogo solo controla el modelo externo listas, no selección Combo interna, y seleccionar un modelo oculto no lo hace visible externamente. El selector de destino aún excluye los proveedores deshabilitados, los combos anidados y el proveedor JEV solo para credenciales. **Crear JEV Auto** abre el mismo editor Combo con una plantilla de destino de decisión editable; Un existente `jev-auto` Se informa de id o alias en lugar de crear un duplicado. También se muestra un Combo JEV
+**Servicio de decisión** (TypeSafe JEV o un `jev-decision` proveedor) y **Tiempo de espera de decisión (ms)**, y la descripción general de Combos enumera el servicio de decisión, el punto final y el tiempo de espera de cada Combo JEV.
+
+Cada objetivo también muestra una insignia de cuota en vivo: **Disponible**, **Fuera de cuota**, o **Cuota desconocida**. El editor bloquea Guardar y Crear para la cuota solo cuando cada destino utilizable tiene un límite de inferencia agotado confirmado por el servidor actual para su credencial configurada. La cuenta, el modelo, la búsqueda y la cuota de MCP, o la evidencia de enrutamiento faltante o caducada, no causan este bloque. El bloqueo expira en el límite de reinicio o frescura aplicable y se vuelve a verificar cuando la página se vuelve activa o visible; Actualizar recarga tanto los datos combinados como la cuota. El panel El editor aún no ha publicado `cooldownMs` o `waitForCooldownMs`; utilizar el archivo de configuración o la gestión API hasta que la interfaz de usuario de seguimiento termine.
+
+### CLI
+
+Los comandos principales son:
+
+```bash
+ocx combo list
+ocx combo show
+ocx combo set --targets provider/model[:weight],...
+ocx combo remove --yes
+```
+
+`set` También acepta `--strategy`, `--sticky`, `--effort`, `--alias`, `--native-alias`,
+`--allow-metered-targets on|off`, `--display-name`, `--description`, `--decision-provider`, `--decision-timeout`, y `--rename-from`. Uso `-` Como el valor de `--effort`, `--alias`, `--display-name`, `--description`, `--decision-provider`, o `--decision-timeout` a claro ese campo. Las dos banderas de decisión se aplican solo a `--strategy jev`. `--native-alias` requiere un nativo desnudo actualmente soportado alias de modelo y un nombre de visualización no vacío. `create` y `update` son alias para `set`; `delete` Es un alias para
+`remove`; y los mismos subcomandos están disponibles bajo `ocx route combo`.
+
+
+
+### API de administración
+
+Los clientes sin cabeza usan `GET`, `PUT`, y `DELETE` on `/api/combos`. `GET` listas combo normalizado definiciones, `PUT` crea o reemplaza a uno (y puede cambiar el nombre de uno), y `DELETE` toma la consulta de id parámetro. La autenticación y los detalles de la solicitud / respuesta están en el
+[Referencia de gestión API](/es/reference/management-api/). Cuando a `PUT` cuerpo omite `cooldownMs`
+o `waitForCooldownMs`, el API conserva el valor ya almacenado para ese combo; enviar un valor para cambiarlo. Una explícita `cooldownMs` (incluso `60000`) se mantiene tal cual porque anula el retroceso de la tasa de solicitud. Un almacenado `cooldownMs` solo se puede eliminar editando el archivo de configuración;
+`waitForCooldownMs` se restablece a su valor predeterminado cuando un `PUT` explícitamente envía `0`porque el escaso El serializer omite ese valor predeterminado. Omission conserva ambos valores y el panel de control no los expone todavía. Omisión `defaultEffortMode`, `reasoningEffortMode`, `imageInput`, o `cooldownWaitPolicy` igualmente mantiene el valor almacenado. Para una solicitud que se mantiene `strategy: "jev"`, el método de decisión se mantiene Solo cuando ambos `decisionProvider` y `decisionModel` se omiten: el envío de cualquiera de los Método de almacenamiento, así que `decisionModel: null` sin `decisionProvider` selecciona TypeSafe.
+`decisionTimeoutMs` se mantiene por sí solo siempre que se omite. Una estrategia diferente deja caer a los tres, y un objetivo reenviado sin `lastResort` mantiene la bandera de ese objetivo (igualada por proveedor y modelo). El dashboard siempre envía `imageInput` y `reasoningEffortMode`, y para un JEV Combo `decisionProvider`, `decisionModel` y `decisionTimeoutMs` (`null` para el valor predeterminado), por lo que volver a cambiar a El valor predeterminado sigue sustituyendo al valor almacenado.
+
+Para la configuración completa persistente, consulte [Configuración](/es/reference/configuration/).
+
+
+
+## Referencia de configuración
+
+Los combos se almacenan en el nivel `combos` objeto, tecleado por id combo:
+
+```json
+{
+ "combos": {
+ "balanced": {
+ "targets": [
+ { "provider": "anthropic", "model": "claude-opus-4-8", "weight": 2 },
+ { "provider": "openai", "model": "gpt-5.6-sol", "weight": 1 }
+ ],
+ "strategy": "round-robin",
+ "stickyLimit": 2,
+ "defaultEffort": "high",
+ "alias": "team/balanced"
+ }
+ }
+}
+```
+
+| Campo | Requerido | Predeterminado | Normas |
+| --- | --- | --- | --- |
+| `targets` | Sí | — | No vacío ordenado matriz de configurado `{ provider, model, weight?, lastResort? }` objetivos. Se rechazan los pares duplicados proveedor/modelo. |
+| `targets[].weight` | No | `1` | Entero de 1 a 10.000. Utilizado por round-robin y aleatorio; ignorado por la conmutación por error, el menos utilizado, la ventana de reinicio y JEV. |
+| `targets[].lastResort` | No | `false` | Marca un objetivo solo de emergencia. Inerte a menos que `cooldownWaitPolicy` está establecido. Nunca hace que un objetivo sea permanentemente inelegible: cuando no se puede alcanzar un objetivo normal, se envía como de costumbre. |
+| `strategy` | No | `"failover"` | `"failover"`, `"round-robin"`, `"random"`, `"least-used"`, `"reset-window"`, o `"jev"`. JEV decide solo el objetivo inicial elegible y el esfuerzo; Combo ordinario posee intentos posteriores. |
+| `stickyLimit` | No | `1` | Entero de 1 a 100 solicitudes exitosas por selección round-robin. Solo se aplica a round-robin. |
+| `cooldownMs` | No | no establecido → upstream fallback (5 s para los códigos 429 de tasa de solicitud) `1302`/`1305`, 10 min para una ventana de uso gastada o un fallo de credencial/facturación, de lo contrario 60 s) | Entero de 1 a 600000. Cuando se establece, se aplica como el tiempo de reutilización por destino siempre que no se pueda usar de origen `Retry-After` o Codex señal de reinicio existe, incluyendo la tasa de solicitud 429s; cuando no está establecido, utiliza el fallback de origen. |
+| `waitForCooldownMs` | No | `0` | Entero de 0 a 600000. Tiempo máximo para esperar el objetivo de enfriamiento elegible más temprano antes de regresar `combo_unavailable`El aborto cancela la espera. |
+| `cooldownWaitPolicy` | No | unset | `"before-last-resort"` diferencie los objetivos marcados `lastResort`: se utilizan solo cuando no hay un objetivo normal disponible, para cada estrategia, y `waitForCooldownMs` solo agrega la espera de un objetivo normal de enfriamiento, por lo que en su `0` por defecto nada espera y el último recurso se utiliza tan pronto como no hay ningún objetivo normal está disponible. Solo esa cadena exacta se selecciona. La espera aplazada y la espera ordinaria comparten una `waitForCooldownMs` presupuesto por intento de selección. |
+| `defaultEffort` | No | `null` | `low`, `medium`, `high`, `xhigh`, `max`, o `ultra`; resuelto contra la escalera anunciada de cada objetivo. |
+| `defaultEffortMode` | No | `"fallback"` | `"fallback"` Conserva el esfuerzo explícito de la persona que llama. `"force"` anula el esfuerzo válido del llamante, requiere un valor predeterminado no nulo válido y puede aumentar el costo y la latencia. |
+| `reasoningEffortMode` | No | `"strict"` | `"strict"` intersecta cada escalera de destino conocida, por lo que un objetivo que anuncia el control sin esfuerzo vacía el selector del combo. `"adaptive"` excluye esas escaleras vacías de la intersección publicada. En el despacho, las escaleras desconocidas explícitas vacías o adaptativas eliminan los controles de esfuerzo / pensamiento sin apoyo al tiempo que preservan los campos de razonamiento sin esfuerzo compatibles, como `reasoning.summary`; los objetivos no vacíos conocidos mantienen la resolución del esfuerzo existente. |
+| `imageInput` | No | `"auto"` | `"auto"` o `"disabled"`. `"auto"` publica soporte de imágenes solo cuando cada objetivo soporta imágenes; `"disabled"` fuerza solo texto (cae la imagen de las modalidades publicadas y rechaza las solicitudes que llevan imágenes antes del envío). |
+| `alias` | No | ninguno | ID de modelo público recortado opcional; use las reglas de alias anteriores. Un valor vacío se almacena como ningún alias. |
+| `nativeAlias` | No | `false` | Permitir explícitamente un nativo desnudo actualmente soportado `alias` para tomar la prioridad de enrutamiento y catálogo. Nunca se infiere del alias. |
+| `displayName` | No | ninguno | Etiqueta de catálogo limitada. Requerido y no vacío cuando `nativeAlias` Es cierto. |
+| `description` | No | ninguno | Descripción de la fila del catálogo solo para mostrar, limitada como `displayName` (como máximo 128 caracteres, sin caracteres de control). Unset mantiene el valor generado `Routed via opencodex → combo (combo).` texto. Management API escribe que omita el valor guardado; una cadena vacía lo borra. |
+| `decisionProvider` | No | `"jev"` | Solo JEV. Identificación del proveedor del servicio de decisión: `"jev"` (TypeSafe, válido sin una fila de proveedor; lo mismo que omisión) `adapter: "jev-decision"` fila con una decisión HTTPS completa URL o una HTTP local `/systemone` URL, como un Ollama autoalojado `tev1`. |
+| `decisionTimeoutMs` | No | `4000` | Solo JEV. Entero de 1000 a 120000: la fecha límite de decisión antes de no abrirse al primer objetivo elegible. |
+
+
+
+## Solución de problemas
+
+
+
+### ¿Por qué `combo/` ¿Error 404?
+
+La identificación combinada es desconocida. La respuesta es HTTP 404 con tipo `invalid_request_error`. Correr
+`ocx combo list`, revise la ortografía y el caso, y confirme su comando de administración escrito al mismo ejecutando la instancia opencodex que recibe solicitudes de modelo.
+
+
+
+### ¿Por qué tengo `combo_unavailable`?
+
+Cada objetivo es actualmente inelegible: por ejemplo, su proveedor está deshabilitado, se está enfriando, ya se ha intentado para esta solicitud, o una tarea cifrada v2 la excluye. Comprobar el objetivo estado del proveedor y errores recientes de flujo ascendente. Cuando no se intentó ningún objetivo, el mensaje de error aparece Por ejemplo, por qué se omitió cada objetivo
+`No available targets for combo: fast (openai/gpt-6: quota exhausted; anthropic/claude-opus-5-5: cooldown 42s)`. Para los tiempos de reutilización, siga una observación `Retry-After` valor primero; Los encabezados de restablecimiento Codex también tienen prioridad sobre `cooldownMs`. Si no se puede utilizar ninguna señal ascendente, el `cooldownMs` se aplica, o se aplica el fallback de origen cuando está desactivado (5 segundos para los códigos de tasa de solicitud `1302`/`1305`, 10 minutos para un uso gastado ventana o un fallo de credencial/facturación, de lo contrario 60 segundos). Explícito
+`Retry-After` Los retrasos tienen un límite de 24 horas; los otros tiempos de reutilización tienen un límite de 10 minutos.
+
+
+
+### ¿Por qué fue rechazado mi alias?
+
+Compruebe primero la gramática del alias y los nombres reservados. Un alias duplicado o una forma no válida se rechaza como HTTP 400. Se rechaza un alias recortado cuyo primer segmento es un espacio de nombres de cuenta Codex configurado. como HTTP 409; elija un espacio de nombres de alias diferente. El CLI y el panel de control muestran exactamente el servidor Mensaje de validación.
+
+
+
+### ¿Por qué se detuvo la conmutación por error después del primer error?
+
+El error fue terminal en lugar de específico del objetivo. Arreglar entrada inválida, reducir un contexto de gran tamaño, manejar un rechazo de política, o corregir el origen de la solicitud rechazada. Los combos no saltan para esos casos.
diff --git a/docs-site/src/content/docs/es/guides/composer-usage-gate-fallback.md b/docs-site/src/content/docs/es/guides/composer-usage-gate-fallback.md
new file mode 100644
index 00000000000..e7b86d8b756
--- /dev/null
+++ b/docs-site/src/content/docs/es/guides/composer-usage-gate-fallback.md
@@ -0,0 +1,151 @@
+---
+title: "Alternativa ante límites de uso de Composer"
+description: "Cola texto a un subproceso Codex existente bajo demanda, sin cambiar el enrutamiento o la autenticación de escritorio OpenCodex, al tiempo que se conservan las cuotas del lado del servidor."
+---
+
+Un escritorio **Compositor** La puerta de uso puede evitar nuevas entradas incluso cuando se configura un subproceso La ruta OpenCodex tiene capacidad disponible. En una instalación compatible, `codex queue` presenta a través de la cola nativa de aplicaciones-servidor de Codex sin usar ese cuadro de entrada. No parchea la aplicación, intercepte TLS, instale un certificado o cambie la autenticación.
+
+Esto es **no es una solución para cada estado de límite de uso**. No restablece la cuota agotada ni Desbloquea el selector de modelos. Un hilo que ya está usando `gpt-reserve` mantiene ese modelo; texto en cola no lo cambie a otro proveedor. Autorización del servidor, cuotas de proveedores, aprobaciones, y la configuración de ejecución del hilo aún se aplica.
+
+
+
+## Identificar la capa bloqueada
+
+Un compositor deshabilitado antes del envío es diferente de un rechazo real del proveedor después del envío. presentación. Una etiqueta de modelo personalizada no demuestra ser un proveedor independiente ni la capacidad disponible. Utilice este recurso solo para un hilo seleccionado deliberadamente con una ruta utilizable de otro modo; Compruebe las aprobaciones pendientes, los giros activos y la conectividad app-server por separado.
+
+El bloqueo de la cuenta principal sigue siendo autorizado. Es un guardia de admisión previo al agotamiento, no es una forma de restaurar una cuenta ya agotada. Este ayudante ni desactiva ese guardia ni cambia qué proveedor usa un hilo. No cambie las respuestas de las cuotas ni apague la guardia para hacer que se ejecute una solicitud de cuenta nativa en cola.
+
+
+
+## Integración y propiedad de OpenCodex
+
+Mantener el existente [Integración Codex](/es/guides/codex-integration) y
+[modelo de enrutamiento](/es/guides/model-routing) configuración. El camino es:
+
+```text
+helper -> native Codex queue -> the selected thread's app-server
+ -> the thread's configured provider -> OpenCodex, when already routed there
+```
+
+Los ayudantes no implementan otro router de proveedor. Solo envían el objetivo y el texto, no modelo, cuenta, nivel de servicio, aprobación, sandbox o base-URL anula. Un incorporado `openai`
+proveedor enrutado a OpenCodex y un `opencodex` proveedor mantenga su configuración existente. La selección de Pool/Direct, las vinculaciones de cuentas, las credenciales de proveedores y los cheques de admisión siguen siendo propiedad por OpenCodex y el demonio servidor. La aceptación de colas por sí sola no prueba que se haya llamado a un proveedor.
+
+Utilice el **misma `CODEX_HOME` y compatible CLI/app-server** como la instalación de escritorio.
+`CODEX_HOME` por defecto a `~/.codex`; otra casa puede descubrir otro daemon y almacén de hilo.
+`OPENCODEX_HOME` es el hogar del proxy, no un sustituto de `CODEX_HOME`. Los ayudantes dejan a ambos variables y los archivos de configuración de ambas aplicaciones sin cambios. En PowerShell, niños nativos heredar la ubicación del sistema de archivos del shell, incluso cuando `CODEX_HOME` es relativo.
+
+El proxy ya debe estar ejecutándose y el subproceso de destino ya debe usar la ruta prevista. El ayudante no inicia/sincroniza/reconfigura OpenCodex, vuelve a habilitar una integración deshabilitada, o reemplazar silenciosamente una ruta OpenAI directa. No se requiere alternancia `codexDesktopAuthless`. Un proveedor remoto OpenCodex URL no es lo mismo que un servidor de aplicaciones remoto Codex: estos ayudantes utilizar el descubrimiento de demonios locales, no el enrutamiento automático a una conversación en otro equipo.
+
+Estos son **Ayudantes de repositorio bajo demanda**, no una instalación `ocx queue` comando o un panel de control control. La lista de permisos de archivo del paquete npm no incluye `scripts/`; use un repositorio coincidente o el nativo. `codex queue` comando. Esta estrecha reserva evita agregar un segundo transporte, escucha persistente, caché de estado de cuenta o monitor de límite de uso a OpenCodex.
+
+
+
+## Activación/desactivación y comportamiento normal
+
+Hay un **sin interruptor de activación/desactivación persistente**: ejecutar el ayudante es el opt-in para uno presentación. Simplemente instalar / actualizar OpenCodex o mantener los scripts en disco no los ejecuta.
+
+| Situación | Lo que hace este fallback |
+| --- | --- |
+| No invocado, tanto si hay contingente disponible como si se ha agotado | Nada: ningún proceso, temporizador, sondeo, oyente de fondo o solicitud originada por el ayudante. |
+| Invocado normalmente mientras el uso está disponible | Hace colas para un mensaje ordinario. No se salta solo porque el compositor de escritorio está trabajando. El uso/facturación normal del proveedor se puede aplicar cuando se envía. |
+| Invocado mientras solo el compositor está bloqueado | Intenta el mismo envío de cola nativa. La ruta configurada debe estar autorizada y disponible. |
+| El proveedor real no tiene capacidad ni autorización | No pasa por alto esa restricción ni cambia de proveedor/cuenta; la ejecución en sentido ascendente aún puede fallar después de la aceptación de la cola. |
+| `-DryRun` / `--dry-run` | Selecciona un destino y prueba la ayuda de CLI, pero nunca envía texto ni comprueba la cuota de cuenta, el estado del demonio o la disponibilidad del proveedor. |
+| La puerta de uso se levanta más tarde | Utilice el compositor normal de nuevo. No hay una configuración específica de ayudante para revertir. |
+
+Para dejar de usar la reserva, deja de invocarla. Hacer **no** ejecutar `ocx restore` o desactivar el Codex integración solo para desactivar este ayudante; eso también cambia el enrutamiento OpenCodex normal. Si ha programado el comando de forma independiente, desactive esa programación externa. Ya aceptado Los elementos de cola pertenecen a Codex y aún pueden ejecutarse: eliminar el script, salir de su proceso o recuperar la cuota no los cancela. Inspeccionar/eliminar elementos no deseados a través de la cola normal controles en la misma conversación. No envíe el mismo mensaje tanto en el ayudante como en el compositor.
+
+
+
+## Compruebe la compatibilidad antes de enviar
+
+Prefiera el CLI empaquetado en la aplicación; instalado por separado `codex` en PATH puede ser mayor. Comprobar
+`codex queue --help` por `--thread` y `--message`. Los ayudantes prueban esta capacidad CLI, pero solo una solicitud real puede verificar el `thread/queue/add` apoyo. Si Codex informa un método de cola no compatible, guarde el trabajo en curso antes de actualizar/reiniciar la coincidencia instalación. Los ayudantes nunca reinician un demonio o reintentan con otro servidor. No añadir
+`--no-daemon` a un comando de cola. Las actualizaciones de App/CLI aún pueden cambiar la compatibilidad.
+
+Primero abra la conversación prevista y confirme su proyecto, modelo y proveedor. Prefiero su
+**explícito UUID**; el CLI nativo también acepta un nombre de sesión exacto:
+
+```powershell
+codex queue --thread 'my-project-review' --message 'continue with the next step'
+```
+
+Desde la comprobación de un repositorio, el asistente Windows puede descubrir el paquete nativo `codex.exe`:
+
+```powershell
+.\scripts\codex-queue.ps1 -Thread 'my-project-review' -Message 'continue with the next step'
+```
+
+En macOS/Linux, utilice Bash (incluido Bash 3.2 de macOS):
+
+```bash
+bash scripts/codex-queue.sh --thread 'my-project-review' --message 'continue with the next step'
+```
+
+Pin un binario de confianza coincidente con `-CodexExe 'C:\path\to\codex.exe'`,
+`--codex '/path/to/codex'`, o `CODEX_EXE`. Una selección explícita no válida falla en lugar de silenciosamente escogiendo otro ejecutable. En Windows use un nativo `.exe`, no un npm `.cmd` o PowerShell shim, para mantener el mensaje citando fuera de `cmd.exe`. Paquetes de aplicaciones compatibles con colas y Los diseños independientes se prueban antes de PATH. El descubrimiento automático de PATH ignora el vacío y la relativa entradas en lugar de probar un CLI del proyecto actual implícitamente. Un binario local de confianza Se puede seleccionar explícitamente con `--codex './codex'` o `-CodexExe '.\codex.exe'`. Las raíces de instalación configuradas y las entradas PATH absolutas aún deben ser confiables para el operador; este ayudante no verifica firmas binarias. Discovery no prueba una versión de la aplicación que coincida.
+
+
+
+### Diagnósticos privados y descubrimiento opcional de última generación
+
+Una ejecución seca oculta rutas ejecutables, UUID/nombres de hilo y el cuerpo del mensaje de forma predeterminada:
+
+```powershell
+.\scripts\codex-queue.ps1 -Thread 'my-project-review' -DryRun
+```
+
+Informa sobre la capacidad de CLI y la selección de destino solamente, no la validación exitosa del lado del servidor. Para tiendas basadas en despliegue heredado, `-Latest` / `--latest` explícitamente opta por un **el último-archivo heurística**. Para ver esa selección, utilice un terminal privado no redireccionado:
+
+```powershell
+.\scripts\codex-queue.ps1 -Latest -DryRun -ShowTarget
+```
+
+```bash
+bash scripts/codex-queue.sh --latest --dry-run --show-target
+```
+
+`-ShowTarget` / `--show-target` requiere una ejecución en seco y una salida de terminal local. Revela el ruta seleccionada y UUID/nombre solo por esta petición explícita, escapa a los caracteres de control, y rechaza la salida redirigida, como la captura CI. No lo utilice en terminales grabados/compartidos o Publicar la salida en público. Nunca imprime el mensaje. Salida nativa ordinaria Codex durante un El envío real se pasa a través y puede contener identificadores; revíselo antes de compartir registros.
+
+Búsquedas más recientes de descubrimiento `CODEX_HOME/sessions` por tiempo de modificación, con el orden del nombre de archivo como un desempate. Es **No es la conversación de escritorio actual** y puede seleccionar otro proyecto o un subagente. Verifique la vista previa local y, a continuación, envíe con el UUID explícito elegido. La última lata también enviar cuando se proporciona un mensaje, pero sigue siendo una opción deliberada para esta heurística.
+
+Reconocido `rollout-*.jsonl` Los nombres de archivo contienen un hilo UUID, a veces seguido por
+`_`; el ayudante utiliza el primer UUID. Los nombres mal formados se omiten. Falta o Las tiendas ilegibles fallan sin seleccionar desde otra casa. Tiendas migradas/paginadas y las conversaciones solo remotas pueden no tener una implementación local coincidente; use un nombre/UUID explícito.
+
+Mantenga todo el mensaje en un solo argumento. Bash acepta `--message '- start with this'` o
+`-- '- start with this'`; PowerShell acepta `-Message '- start with this'`. Historial de Shell y Los listados de procesos locales pueden exponer el texto de la línea de comandos, por lo que no incluya credenciales en las solicitudes.
+
+
+
+## Queued no es lo mismo que ejecutado
+
+`Queued message ... for thread ...` confirma **aceptación de cola**, no ejecución modelo o Terminación. Un hilo ocupado puede esperar su turno o aprobación actual. En la inspección de origen En la implementación, un hilo guardado descargado puede retener el mensaje hasta que otro cliente lo reanude.
+
+Compruebe la cola y la actividad en el **La misma conversación**. Si no está cargado, ábralo en el aplicación o uso `codex resume ` sin añadir el mensaje de nuevo. Revisión de aprobaciones pendientes y el estado de cola. Cada invocación de cola puede crear otro elemento; después de un fallo ambiguo, Inspeccione antes de volver a intentarlo. Los ayudantes preservan el estado de salida CLI y nunca vuelven a enviar automáticamente.
+
+El CLI nativo tiene `--remote` opciones (ver `codex queue --help`), distinto de asumir La conexión de control remoto del escritorio se reutiliza. Mantener la configuración de autenticación sin cambios no repara fallos de autenticación/red no relacionados ni garantiza la continuidad del control remoto.
+
+
+
+## Iniciar o reanudar el trabajo sin el compositor
+
+`codex exec ''` inicia una tarea no interactiva, **no** un mensaje en el escritorio abierto hilo. Compruebe su directorio de trabajo, proveedor, permisos y configuración.
+`codex resume ` Reanuda una sesión explícita. `codex resume --last` Filtros normalmente por el directorio de trabajo actual; `--all` desactiva ese filtro, mientras que otros filtros de elegibilidad pueden Todavía se aplica. Una selección global no es necesariamente la sesión del sistema de archivos visible o más reciente. Prefiere una identificación explícita para el trabajo de escritorio en curso.
+
+
+
+## Alcance y verificación
+
+Esta alternativa deja solos los derechos de la cuenta y los archivos de la aplicación. No es una reparación consciente del proveedor del compositor/recolector de modelos, una función automática de recuperación de cuotas o limpieza de cambios de proxy/certificado de experimentos anteriores.
+
+La sonda original Windows (de escritorio) `26.917.9434.0`) aceptación de cola reportada para un hilo en vivo y un error esperado para un hilo inexistente. Esto no es una inferencia general de extremo a extremo, garantía de hilo descargado, control remoto o multiplataforma. La fuente ascendente fue verificada en
+`7dae8c53d97e61cd774e4d6bcca5243c29ca615c`:
+
+- [Opciones de cola CLI](https://github.com/openai/codex/blob/7dae8c53d97e61cd774e4d6bcca5243c29ca615c/codex-rs/cli/src/queue_cmd.rs)
+ y [presentación de app-server](https://github.com/openai/codex/blob/7dae8c53d97e61cd774e4d6bcca5243c29ca615c/codex-rs/tui/src/session_queue_commands.rs).
+- [Envío de cola de hilo cargado](https://github.com/openai/codex/blob/7dae8c53d97e61cd774e4d6bcca5243c29ca615c/codex-rs/ext/queue/src/service.rs)
+ y [Opciones de selección de reanudación](https://github.com/openai/codex/blob/7dae8c53d97e61cd774e4d6bcca5243c29ca615c/codex-rs/cli/src/main.rs).
+
+Ejecute regresiones de envoltura sin conexión con `node --test scripts/codex-queue.test.mjs` (Nodo 20+). Utilizan CLIs nativos falsos y hogares temporales, nunca cuentas reales o solicitudes de modelos. Los
+**Ayudantes de cola Codex** flujo de trabajo ejecuta estas pruebas en Windows PowerShell 5.1 y PowerShell 7
+macOS sistema Bash, y Linux Bash; falla un shell requerido que falta en lugar de omitirse silenciosamente. Los accesorios de configuración-preservación cubren la configuración del proveedor incorporado/personalizado y ambos valores de estado de uso, no en vivo OpenCodex Validar el despacho de escritorio real, el éxito del proveedor y la continuidad del control remoto por separado en las instalaciones compatibles.
diff --git a/docs-site/src/content/docs/es/guides/cursor-private-inference.md b/docs-site/src/content/docs/es/guides/cursor-private-inference.md
new file mode 100644
index 00000000000..785e9a50090
--- /dev/null
+++ b/docs-site/src/content/docs/es/guides/cursor-private-inference.md
@@ -0,0 +1,161 @@
+---
+title: "Inferencia privada de Cursor"
+description: "Utilice los modelos con enrutamiento opencodex dentro de la compilación de agente local de Cursor, en macOS, Windows o Linux, sin un túnel público."
+---
+
+Cursor regular no puede hablar con un proxy en su propia máquina. Cuando establece "Anular OpenAI Base URL", el backend de Cursor construye el mensaje y llama a ese URL desde los servidores de Cursor, que rechazar loopback, LAN y direcciones privadas. Es por eso que cada receta de la comunidad para Cursor + Los modelos locales terminan con ngrok, Cloudflare Tunnel o un VPS.
+
+Cursor también envía una segunda compilación de escritorio, **Inferencia privada de Cursor**, cuyo bucle de agente se ejecuta local y llama a una puerta de enlace compatible con OpenAI que configure. Señalado en opencodex, utiliza sus modelos enrutados sin túnel, sin parches de aplicaciones y sin TLS. Esta página cubre esa construcción.
+
+
+
+## Antes de empezar
+
+Lea esta sección primero; es la parte que la gente extraña.
+
+- **opencodex no distribuye esta compilación.** Cursor tampoco lo documenta. Es no vinculado desde cursor.com, puede cambiar sin previo aviso y puede dejar de estar disponible. Si usted aún no lo tiene, esta guía no se aplica; use la comunidad
+ [`ocx-cursor`](https://www.npmjs.com/package/ocx-cursor) puente con un público HTTPS En lugar de eso.
+- **El inicio de sesión Cursor sigue siendo necesario.** El muro de inicio de sesión viene antes del diálogo de puerta de enlace.
+- **Los modelos propios de Cursor no están disponibles.** En el modo local, el selector enumera solo lo que su La puerta de enlace regresa. La finalización de la pestaña, el catálogo de Cursor (Compositor, Auto) y los agentes de la nube son fuera. Todavía puede comunicarse con los modelos Cursor-provider a través de la propia opencodex `cursor/*`
+ rutas si ha configurado ese proveedor.
+- **Cada turno lleva el sistema local de Cursor**, aproximadamente 23k tokens en el segundo y luego gira. Presupuesto para cuando elijas un modelo.
+- **Comparte identidad con Cursor regular.** Id. del mismo paquete, mismo `~/.cursor`, lo mismo
+ `Application Support/Cursor` (macOS), `%APPDATA%\Cursor` (Windows) o
+ `~/.config/Cursor` (Linux). Lanzar con `--user-data-dir ` para mantener a los dos separados, y deje "Importar datos de la instalación Cursor existente" sin marcar en la primera ejecución a menos que desea que se copien sus configuración.
+
+
+
+## Identificar la construcción instalada
+
+Ambas compilaciones se denominan "Cursor" en el Dock y comparten un identificador de paquete, así que compruebe `product.json`:
+
+| Plataforma | product.json |
+|---|---|
+| macOS | `/Applications/Cursor Private Inference.app/Contents/Resources/app/product.json` |
+| Windows | `%LOCALAPPDATA%\\Programs\\cursor-private-inference\\resources\\app\\product.json` |
+| Linux | `/resources/app/product.json` (Se debe extraer una AppImage primero). El dashboard busca `cursor*` Instalar raíces bajo `/opt`, `/usr/share` y `~/.local/share`. |
+
+`nameLong` es `"Cursor Private Inference"` para la construcción del agente local y `"Cursor"` por el uno regular; `version` es la compilación (3.18.25 en el momento de escribir este artículo). > Cursor La tarjeta ejecuta la misma comprobación y enumera lo que encontró. El modo local está encendido dentro del paquete de banco de trabajo, no en `product.json`, por lo que no hay bandera para voltear: si
+`nameLong` dice Cursor regular, esa instalación no puede llegar a una puerta de enlace de bucle.
+
+El loop de agente que habla con la puerta de enlace vive en un archivo bajo la misma raíz de instalación,
+`extensions/cursor-agent-exec/dist/main.js`. opencodex lo lee (solo lectura, limitado) para aprender Tabla de razonamiento-esfuerzo de Cursor; ver "Modelos y esfuerzo de razonamiento".
+
+
+
+## Configurar la puerta de enlace
+
+opencodex debe estar en ejecución (`ocx service status`) cualquiera de estas obras, ambas terminar en el mismo lugar.
+
+**En la aplicación.** Configuración → Modelos → Gateway → Configurar puerta de enlace:
+
+| Campo | Valor |
+|---|---|
+| URL base | `http://127.0.0.1:10100/v1` (Incluye `/v1`; llano `http://` Loopback es aceptado) |
+| API clave | El valor de `OPENCODEX_API_AUTH_TOKEN` si su servicio utiliza autenticación API, de lo contrario cualquier marcador de posición como `opencodex-loopback` |
+
+Haga clic **Actualizar lista de modelos**. El selector se llena con opencodex `/v1/models`; encender el las filas que desee.
+
+**Con variables de entorno.** La aplicación lee esto al principio:
+
+```text
+CURSOR_LOCAL_AGENT_BASE_URL=http://127.0.0.1:10100/v1
+CURSOR_LOCAL_AGENT_API_KEY=opencodex-loopback
+CURSOR_LOCAL_AGENT_HEADERS= # optional, newline-separated "Header-Name: value" lines
+```
+
+`CURSOR_LOCAL_AGENT_HEADERS` rechaza `User-Agent` y sin resolver `{...}` marcadores de posición;
+`{gitOrgRepo}` y `{gitBranch}` están expandidas.
+
+Precedencia, más alto primero: credenciales por modelo → la puerta de enlace guardada en Configuración →
+`CURSOR_LOCAL_AGENT_*` → `ANTHROPIC_BASE_URL` / `ANTHROPIC_AUTH_TOKEN` (compatibilidad fallback). El entorno no anula una puerta de enlace guardada; límpiela en Configuración primero si intención de cambiar a través del medio ambiente.
+
+Cursor Private Inference es una aplicación GUI, por lo que un perfil de shell interactivo no es suficiente en La variable tiene que estar en el entorno de lo que sea que lance la aplicación.
+
+| OS | Dónde colocarlo |
+|---|---|
+| macOS | `launchctl setenv CURSOR_LOCAL_AGENT_BASE_URL http://127.0.0.1:10100/v1` para la sesión de inicio de sesión actual, o un LaunchAgent con `EnvironmentVariables` para hacerlo persistente. Iniciar la aplicación desde un terminal también funciona. |
+| Windows | `setx CURSOR_LOCAL_AGENT_BASE_URL http://127.0.0.1:10100/v1` (ámbito del usuario; afecta a nuevos procesos) o Propiedades del sistema Variables de entorno →. Reinicie la aplicación después. |
+| Linux | `~/.profile` o `~/.pam_environment` para una sesión de administrador de pantalla, o `systemctl --user set-environment CURSOR_LOCAL_AGENT_BASE_URL=http://127.0.0.1:10100/v1` cuando el escritorio se ejecuta en una sesión de usuario systemd. La AppImage lanzada desde un terminal hereda el entorno de ese shell. |
+
+La compilación existe para macOS (arm64, x64, universal), Windows (x64, arm64) y Linux (x64, arm64). La configuración es idéntica en todos ellos.
+
+
+
+## Desde el panel de control
+
+El panel de control opencodex tiene un **Cursor** tab bajo Integraciones (`/#integrations/cursor`) Es de solo lectura hacia Cursor: nunca escribe la base de datos de configuración, la entrada de llavero o la aplicación de Cursor No hay ninguna opción para cambiar de paquete. Lo que hace es darle los valores y mostrarle si Se llevaron.
+
+- **Construcción instalada.** Si Cursor Private Inference (con su ruta y versión) y Cursor regular (solo trayectoria) están presentes. Si solo se encuentra Cursor regular, la pestaña lo dice, enlaces aquí de nuevo, y ofrece un **Busque el instalador de Inferencia privada** botón. Presionarlo pide El propio canal de actualización de Cursor que el instalador en modo local anuncia para esta plataforma y CPU (el `cursor-local` canal en `api2.cursor.sh`y muestra esa versión con un enlace a la
+ `downloads.cursor.com/local-mode/` instalador. No se solicita nada hasta que pulse el botón: abrir la pestaña y su actualización periódica, nunca contacte el canal de Cursor. opencodex solo muestra el link: nunca descarga, lanza o instala nada. La respuesta se almacena en caché durante 30 minutos (5 después de un fracaso). Cuando el canal no puede ser alcanzado, responde con algo inutilizable, o Cursor no envía ninguna compilación para este equipo (solo x64 y arm64 en Windows, macOS y Linux tienen uno), la pestaña dice que el instalador no se pudo resolver; los valores de la puerta de enlace a continuación permanecen válidos De cualquier manera. Regular Cursor en sí sigue rutas personalizadas Endpoints a través de los servidores de Cursor, por lo que no puede llegar a un proxy de bucle de retorno.
+- **Valores de entrada.** Base URL en el propio puerto de escucha del proxy (desde su registro en entorno de ejecución, por lo que un panel de mandos inclinado hacia atrás todavía muestra el puerto Cursor en esta máquina puede alcanzar), con un Copiar botón. La fila de claves API depende del enlace: cuando no necesita credenciales, la fila es
+ `opencodex-loopback` con Copiar; cuando la autenticación API está activada, o cualquier clave opencodex API está configurada, la fila le dice que use una de sus propias teclas y enlaces a la pestaña API Claves. Cualquier configurado obras clave, no sólo `OPENCODEX_API_AUTH_TOKEN`.
+- **Conexión.** El último `/v1/models` solicitud cuyo usuario-agente es exactamente `Cursor/`
+ (el encabezado envía el entorno de ejecución del agente local de Cursor), con la hora y la versión. Se lee "nunca visto" hasta que Cursor llame al proxy; presionando
+ **Actualizar lista de modelos** en Cursor es lo que lo hace voltear. La tarjeta se actualiza cada 15 segundos mientras la pestaña está abierta.
+- **Lo que Cursor mostrará.** Una tabla de modelo / razonamiento / contexto para los modelos opencodex anuncios (se aplican modelos deshabilitados y listas de proveedores, al igual que la lista sin procesar), siguiendo las reglas de la siguiente sección. Es una predicción: Cursor elige el Razonamiento escalera de su propia mesa.
+
+
+
+## Modelos y esfuerzo de razonamiento
+
+El selector es crudo de opencodex `/v1/models` lista. Dos cosas deciden si una fila modelo obtiene a **Razonamiento** control:
+
+1. opencodex debe anunciar capacidades en la fila (`api_types` más a `capabilities`
+ objeto). Lo hace, a partir de v2.41. Los proxies más antiguos muestran los modelos pero no controlan el esfuerzo.
+2. La identificación del modelo, después de despojar todo hasta el último `/` y cualquier `@…` Sufijo, debe coincide con la tabla de esfuerzo propio de Cursor. Esta tabla está compilada en la aplicación (`extensions/cursor-agent-exec/dist/main.js`); opencodex lo lee desde la instalación detectada así que la predicción del panel sigue a una actualización Cursor, y la tarjeta dice qué compilar leyó o "espejo estático" cuando no se encontró ninguno. Cursor decide la escalera, no opencodex, y no
+ `/v1/models` campo puede agregar un modelo a esa tabla. La matriz a continuación es la instantánea 3.18.25 el espejo estático lleva:
+
+| ID del modelo (después de la última `/`) | La escalera Cursor muestra | Campo de alambre |
+|---|---|---|
+| `gpt-5.6-sol`, `gpt-5.6-terra`, `gpt-5.6-luna` | Bajo, Medio, Alto, Extra Alto | `reasoning.effort` |
+| `gpt-5`, `gpt-5.x` | Bajo, Medio, Alto, Extra Alto | `reasoning.effort` |
+| `claude-opus-5`, `claude-sonnet-5`, `claude-opus-4.7`, `claude-opus-4.8` | Bajo, medio, alto, extra alto, máximo | `output_config.effort` |
+| `claude-opus-4.6`, `claude-opus-4.5`, `claude-sonnet-4.6` | Bajo, medio, alto, máximo | `output_config.effort` |
+| `grok-4.3`, `grok-4.5`, `grok-4.6`, `grok-build-latest` | Mínimo, bajo, medio, alto, extra alto | `reasoning_effort` |
+| `gemini-*` (necesidades `supports_reasoning`) | Mínimo, Bajo, Medio, Alto | `reasoning_effort` |
+| Cualquier otra cosa, incluyendo `claude-fable-5-1`, `kimi-k3` | sin control | — |
+
+Así que `anthropic/claude-opus-5` trabajos, y opencodex de `max`/`ultra` Los niveles para GPT-5.6 no son accesible desde este selector.
+
+
+
+### Modelos sin control
+
+`anthropic/claude-fable-5-1`, `cursor/kimi-k3`y cualquier otra cosa fuera de la mesa no El control de razonamiento, y Cursor registra una línea por tal id cuando la puerta de enlace se anuncia
+`supports_reasoning`: "Proveedor local anuncia apoyo de razonamiento para un modelo sin hardcoded Bottlerocket familia de esfuerzo. Dos formas de elegir un esfuerzo:
+
+- **Esfuerzo filas** (`cursorEffortRows: true` en la configuración opencodex, default off): la puerta de enlace publica una entrada de selector por esfuerzo para modelos sin tabla, como
+ `anthropic/claude-fable-5-1--high` o `cursor/kimi-k3--max`, y rutas cada uno a la base modelo con ese esfuerzo aplicado. Los modelos Cursor ya se renderizan sin filas adicionales, y con una precisión modelo conocido id siempre gana sobre el `--` Sufijo. Pulse Actualizar lista de modelos después Enciende. La tarjeta del panel de control cuenta las filas que publicó por modelo. Escoger una fila es una elección explícita, por lo que su esfuerzo también gana `ocx-effort` directiva en la solicitud.
+- **Un valor predeterminado fijo** (`modelDefaultReasoningEfforts` en el proveedor): se aplica cuando Cursor No envía ningún esfuerzo.
+
+
+
+### "Max" es dos cosas diferentes
+
+Cursor muestra un **Máx.** al lado de algunos modelos. Este es el Max Mode, un contexto más amplio. ventana, no un nivel de razonamiento. En la construcción de agente local la misma idea aparece como un **Contexto**
+entrada en el menú del modelo, y opencodex lo enciende para la familia nativa GPT-5.6: **272K**
+(predeterminado) o **922K** (el opt-in 1M, marcado como que cuesta más). El valor que eliges mayúsculas que El contexto de turno. Los modelos encaminados muestran una única ventana y ninguna entrada de contexto; un contexto de proveedor tapa por debajo de 922K elimina la entrada para las filas nativas también.
+
+Razonamiento y esfuerzo **Máx.** (opencodex) `max`/`ultra`) es el otro significado, y que uno es no alcanzable: Cursor toma la escalera de esfuerzo de su propia mesa en lugar de la puerta de enlace, y la entrada GPT-5.6 se detiene en Extra High.
+
+Porque opencodex anuncia `responses` en `api_types`, esta construcción envía al agente a
+`/v1/responses` con `reasoning.effort`, no para `/v1/chat/completions`.
+
+Esa elección de cable tiene un efecto secundario para las filas Claude: Cursor envía el esfuerzo Claude solo como
+`output_config.effort` en el cable Anthropic Messages, así que con un `/v1` Base URL una fila Claude que muestra un control que todavía se ejecuta en el proveedor predeterminado. Una base URL que termina en `/messages`
+Se envía el esfuerzo Claude y se elimina el esfuerzo de la familia OpenAI. Una entrada de gateway no puede servir a ambas familias; filas de esfuerzo (arriba) paso lateral esto porque opencodex aplica el esfuerzo sí mismo.
+
+
+
+## Verificar
+
+`ocx observe logs` muestra los giros como `inboundProtocol: responses` con `admissionKind: loopback`.
+
+| Síntoma | Comprobar |
+|---|---|
+| 401 desde la puerta de enlace | la clave API no coincide `OPENCODEX_API_AUTH_TOKEN`; para un enlace de bucle sin API funciona cualquier valor |
+| El selector está vacío | opencodex no se está ejecutando, o falta la Base URL `/v1`; pulse Actualizar lista de modelos después de fijar |
+| modelos enumerados pero sin control de razonamiento | opencodex más antiguo que v2.41, o el id no está en la tabla de Cursor (el panel lo marca como —); `cursorEffortRows` o establecer un proveedor predeterminado |
+| No se recoge un cambio de esquema | Cachés Cursor `/models` por cadena Base URL sin caducidad; La lista de modelos de actualización la vuelve a leer, de lo contrario, reinicia la aplicación o guarda temporalmente una ortografía diferente de la URL (`localhost` Vs `127.0.0.1`) |
+| 23k-token primera vuelta | esperado; ese es el indicador del sistema local de Cursor |
diff --git a/docs-site/src/content/docs/es/guides/desktop-app.md b/docs-site/src/content/docs/es/guides/desktop-app.md
new file mode 100644
index 00000000000..76fe1ec5730
--- /dev/null
+++ b/docs-site/src/content/docs/es/guides/desktop-app.md
@@ -0,0 +1,172 @@
+---
+title: "Aplicación de escritorio"
+description: "Instala y usa OpenCodex Desktop en macOS, Windows y Linux."
+---
+
+OpenCodex Desktop combina una bandeja nativa con el dashboard web. Su CLI incluida busca un proxy local existente; la aplicación solo inicia su propio entorno de ejecución cuando confirma que no hay ninguno.
+
+El dashboard se sirve desde la dirección del proxy local encontrado (puerto `10100` de forma predeterminada). La aplicación de escritorio integra ese dashboard y su entorno de ejecución.
+
+
+
+## Instalar
+
+### macOS
+
+Descarga `OpenCodex--macos.dmg` desde la [última versión](https://github.com/lidge-jun/opencodex/releases). Abre el DMG y arrastra `OpenCodex.app` a Aplicaciones. Se requiere macOS 13 o posterior.
+
+Las versiones publicadas de `OpenCodex.app` tienen firma de Developer ID y certificación de Apple. Al abrirlas por primera vez, macOS normalmente solo pide la confirmación habitual para una aplicación descargada. Si sigue bloqueándola, usa **Configuración del Sistema → Privacidad y seguridad → Abrir de todos modos**.
+
+### Windows
+
+Descarga `OpenCodex--windows-x64.msi` y ejecuta el instalador. La firma de código a través de SignPath Foundation se está incorporando ([firma de código en Windows](/es/reference/code-signing/)). Hasta que una versión incluya esa firma, Windows SmartScreen puede advertir que el instalador no está firmado. Elige **Más información → Ejecutar de todas formas** después de confirmar que lo descargaste de la página de versiones.
+
+### Linux
+
+Descarga `OpenCodex--linux-x86_64.AppImage` o `OpenCodex--linux-amd64.deb` desde la página de versiones.
+
+Para AppImage:
+
+```bash
+chmod +x OpenCodex--linux-x86_64.AppImage
+./OpenCodex--linux-x86_64.AppImage
+```
+
+Para distribuciones basadas en Debian:
+
+```bash
+sudo apt install ./OpenCodex--linux-amd64.deb
+```
+
+El icono de la bandeja requiere un entorno de escritorio compatible con AppIndicator.
+
+
+
+## Primer inicio
+
+La aplicación ejecuta `ocx resolve --json` con su CLI incluida y se conecta al proxy local si ya hay uno accesible. Solo inicia su propio entorno de ejecución cuando la CLI confirma que no existe otro; un resultado incierto se muestra como un fallo de inicio. Después abre el dashboard en su vista web, usando la dirección de bucle local encontrada. Si se inicia oculta en la bandeja al abrir sesión, conserva la página ligera de arranque y carga el dashboard cuando lo abres desde la bandeja o vuelves a iniciar la aplicación.
+
+Usa **Open dashboard** (abrir dashboard) u **Open in browser** (abrir en el navegador) en la bandeja para alternar entre el dashboard integrado y tu navegador habitual. La bandeja también permite buscar actualizaciones.
+
+En Windows, aceptar **Take over** (tomar el control) permite hasta 90 segundos para detener de forma segura el entorno de ejecución existente, transferir su control e iniciar el que incluye la aplicación. El tiempo que tardes en decidir no cuenta para ese límite. Mantén la aplicación abierta mientras termina; si falla, usa **Retry** (reintentar) para volver a buscar el entorno de ejecución actual.
+
+En macOS, cerrar el dashboard mantiene la aplicación en la barra de menús. Vuelve a abrir OpenCodex desde el Dock o Finder para recuperar el dashboard sin reiniciar el proxy.
+
+En Windows, **Start at Login** (iniciar al abrir sesión) registra la ruta del ejecutable entre comillas para el usuario actual, incluidas las instalaciones en `Program Files`. Los registros habilitados se actualizan una vez al iniciar la aplicación. Las entradas que hayas deshabilitado desde la bandeja o el Administrador de tareas permanecen deshabilitadas.
+
+
+
+## Usar la CLI ocx con Desktop
+
+Las instalaciones estables de macOS, Windows y del paquete deb de Linux configuran automáticamente el comando `ocx` incluido para las terminales nuevas al iniciar Desktop. Abre **Comando de terminal**, junto a **Actualización de Desktop** en la barra lateral del dashboard, o **Terminal command…** en la bandeja, para desactivarlo, repararlo o quitarlo. Desactivar **Usar el comando ocx de Desktop en las terminales nuevas** elimina la configuración administrada. **Quitar comando de terminal** también conserva esa opción desactivada para los próximos inicios. AppImage y los inicios en desarrollo no realizan esta configuración.
+
+macOS y Linux usan un shim en `~/.opencodex-desktop/bin`, el archivo auxiliar compartido `path.sh` y bloques administrados en los archivos de inicio de zsh, bash y fish. Desktop registra la propiedad y los datos de recuperación en `~/.opencodex-desktop/cli.json`; borrar ese registro no elimina el comando ni sus bloques de shell. El archivo `/usr/bin/ocx` del paquete deb no cambia. Windows añade el directorio de instalación al principio del `Path` del usuario y conserva las demás entradas. Un comando del `Path` del sistema puede seguir teniendo prioridad; Desktop informa de ese conflicto como configuración parcial y no modifica el `Path` del sistema.
+
+Después de habilitar o reparar el comando, abre una terminal nueva. Comprueba `type -a ocx` en macOS/Linux, o `Get-Command ocx -All` y `where.exe ocx` en Windows. Las terminales ya abiertas, los alias, las rutas absolutas y los cambios posteriores de PATH todavía pueden seleccionar otro ejecutable. La configuración persiste después de cerrar Desktop. Si falta el paquete de la aplicación, el shim POSIX falla con instrucciones para repararlo o quitarlo, en lugar de seleccionar otro `ocx` sin avisar.
+
+En POSIX, el shim conserva las opciones de Anthropic exportadas por la shell cuando dispone de las herramientas de verificación del inicio. Si esa verificación falla, o si se ejecuta directamente en Windows, la CLI incluida sigue eliminando las opciones de entorno de Anthropic que no sean de confianza.
+
+En macOS, Linux y Windows, `ocx status` y `ocx doctor` identifican OpenCodex Desktop cuando verifican que la aplicación ejecuta su proxy incluido, incluso si no existe un registro de propiedad. `ocx status` muestra `Runtime supervisor: OpenCodex Desktop`; ninguno de los dos comandos recomienda reparar un servicio de CLI para ese entorno. En macOS y Linux, activa **Start at Login** en el menú de OpenCodex en lugar de instalar un servicio en segundo plano. La protección del inicio solo reconoce a la aplicación cuando verifica su registro de inicio de sesión; si no puede verificarlo, sigue las indicaciones de Desktop que muestra el estado.
+
+La página de inicio muestra entonces **En ejecución · Inicio de sesión no verificado** en la fila de Desktop. En macOS, **Start at Login** solo aparece marcado cuando se puede verificar ese mismo registro. En caso contrario, queda sin marcar y explica la causa:
+
+- **disabled by macOS** abre Configuración del Sistema → General → Ítems de inicio y extensiones, donde puedes permitir que OpenCodex se abra al iniciar sesión.
+- **another OpenCodex copy** indica que el registro pertenece a otra copia de la aplicación; desactívalo desde esa copia.
+- **registered app is missing** indica que la aplicación registrada ya no existe; elimina `~/Library/LaunchAgents/OpenCodex.plist` y vuelve a activar la opción.
+- **status unknown** indica que no se pudo leer el registro.
+
+Mientras la aplicación ejecute el proxy, el instalador del servicio en segundo plano permanece deshabilitado en la página de inicio. Para usar ese servicio, cierra OpenCodex y ejecuta `ocx service install` en una terminal. El shim de inicio de Codex sí se puede instalar desde esa página.
+
+Si al iniciar Codex el shim no encuentra un proxy, espera a que OpenCodex lo reinicie. En macOS, puede abrir OpenCodex si estaba cerrado y su propiedad registrada coincide con un registro válido de **Start at Login**; en los demás casos informa de un error en lugar de iniciar un segundo proxy. La reapertura automática usa la ruta de la aplicación de ese registro y comprueba que su ejecutable principal coincida con el ejecutable de Desktop registrado. Si el registro falta, está desactualizado o es incoherente, abre OpenCodex manualmente; no se elige otra copia con el mismo identificador como alternativa. Si el shim muestra "activation not confirmed", añade `. ~/.opencodex/codex-shell-env.sh` al archivo de inicio de tu shell después de las demás opciones de PATH.
+
+La CLI incluida está en `/Applications/OpenCodex.app/Contents/MacOS/ocx` en macOS y en `/usr/bin/ocx` para el paquete deb de Linux. Ejecuta ese archivo con `status` para comprobar el proxy de la aplicación. Windows también verifica la supervisión activa, pero allí **Start at Login** permanece sin verificar y Desktop no se considera una protección del inicio.
+
+Mientras la CLI detecte que Desktop supervisa el proxy, `ocx service install`, `repair`, `start` y `restart` se rechazan antes de modificar el servicio, incluso sin propiedad registrada o sin un inicio de sesión verificado. Cierra OpenCodex y ejecuta `ocx service install` para transferir la gestión del inicio a la CLI. Un `ocx start` duplicado identifica a Desktop como supervisor.
+
+Usa **Check for Updates…** en la bandeja para actualizar la aplicación. La CLI compilada incluida informa `installer: "standalone"` y `reason: "standalone_install"` mediante `ocx system update check`, con `canUpdate: false` e instrucciones para usar las actualizaciones de Desktop. `ocx update` rechaza reemplazar el paquete mientras Desktop supervise el proxy, incluso si se trata de otra instalación de npm/Bun; cierra OpenCodex antes de actualizar esa instalación. Si se acepta `ocx restart`, informa de que Desktop iniciará el reemplazo y espera a que esté disponible. Una CLI más reciente del PATH no puede usar `ocx restart` para reemplazar el proxy de la aplicación por su propio entorno de ejecución.
+
+El comando de terminal `ocx stop` detiene el proxy, pero Desktop puede volver a iniciarlo tras una espera breve. Usa **Stop proxy** o **Quit** en la bandeja para mantenerlo detenido. La salida habitual de `stop` recuerda esto por stderr; `ocx stop --json` omite tanto la comprobación de supervisión como ese aviso.
+
+Estas protecciones son avisos preventivos de las CLI y los entornos de ejecución actuales; las versiones anteriores pueden carecer de ellos. Una comprobación que detecte Desktop pero no termine de verificarlo también bloquea la operación. Una vez bloqueada, otra comprobación inconclusa no elimina el bloqueo: es necesario confirmar que Desktop ya no supervisa el proxy. Si nunca se detectó Desktop, una comprobación inconclusa o incompatible mantiene el comportamiento previo del comando. Las protecciones basadas en la propiedad registrada se aplican de forma independiente.
+
+
+
+## Protección del inicio en macOS y Linux
+
+La protección del inicio reconoce **Aplicación de escritorio** cuando un diagnóstico reciente verifica que la aplicación supervisa su proxy incluido y confirma el registro de **Start at Login** de esa misma aplicación. La propiedad registrada se conserva por separado; detectar supervisión no crea una declaración de propiedad.
+
+En Linux, el componente de inicio automático escribe la entrada en `~/.config/autostart/OpenCodex.desktop`, incluso si se definió `$XDG_CONFIG_HOME`. La protección del inicio lee esa entrada y el identificador de instalación bajo `~/.config`. Si `$XDG_CONFIG_HOME` apunta a otro lugar, la sesión busca un directorio distinto de inicio automático; por eso el estado permanece **En riesgo**.
+
+La entrada solo cuenta si no tiene `Hidden=true` ni `X-GNOME-Autostart-enabled=false`, y tampoco condiciones `OnlyShowIn`, `NotShowIn` o `TryExec`. Su campo `Exec` debe contener una ruta absoluta a `opencodex-desktop` sin comillas, espacios, escapes ni códigos de campo, seguida exactamente por `--autostart`. El ejecutable resuelto debe seguir llamándose `opencodex-desktop` y tener el `ocx` incluido a su lado. La protección del inicio lee dos veces toda la cadena de evidencias y solo reconoce la protección cuando ambas lecturas coinciden.
+
+Las instalaciones AppImage permanecen **En riesgo**: el inicio automático registra la ruta del archivo AppImage externo, mientras el proceso de Desktop se ejecuta dentro de su punto de montaje. Esa relación no se puede verificar y no se reconoce como protección.
+
+Una comprobación ausente o desactualizada mantiene el estado **En riesgo**. Si Desktop tiene la propiedad del proxy pero no se puede verificar su protección, vuelve a abrir OpenCodex y comprueba **Start at Login**. La instalación o reparación del servicio y del lanzador permanece deshabilitada mientras exista esa propiedad; `ocx restore` sigue disponible para deshacer el enrutamiento de Codex.
+
+Las actualizaciones normales de Desktop reemplazan la CLI incluida por la versión con la comprobación de inicio corregida. No necesitas conservar un parche local entre actualizaciones.
+
+## Zoom
+
+En macOS y Linux, Cmd (macOS) o Ctrl (Linux) con `+`, `-` y `0`, o Ctrl con la rueda del ratón, cambia el zoom entre el 50 % y el 300 % en pasos del 10 %. `0` vuelve al 100 %. La barra lateral muestra ese mismo nivel junto al selector de tema: `-`, el porcentaje actual y `+`. Pulsar el porcentaje restablece el 100 %. El nivel se guarda y se vuelve a aplicar al iniciar la aplicación.
+
+El dashboard procede del proxy al que se conecta la aplicación. Si ese proxy es antiguo, conserva el comportamiento anterior (pasos del 20 %, sin guardar el nivel ni mostrar controles en la barra lateral) hasta que se actualice el proxy. Windows usa el zoom propio del motor del navegador, que no se guarda.
+
+
+
+## Mantener el proxy en ejecución
+
+La aplicación mantiene en ejecución el proxy que inició. Si ese proxy se reinicia a sí mismo —después de **Conectar como Child**, de reiniciar la memoria desde el dashboard o de desconectar un Child— la aplicación inicia el nuevo proxy en el mismo puerto y recarga el dashboard abierto. Suele tardar alrededor de un segundo, o algunos segundos si ya se había reiniciado en los dos minutos anteriores. Así, **Stop proxy** sigue alcanzando al proxy y **Quit** también lo termina.
+
+Si el proxy termina sin que se le haya pedido (por un fallo o por `ocx stop` desde una terminal), la aplicación vuelve a iniciarlo tras una espera que aumenta de 3 a 30 segundos mientras sigan los fallos. Si deja de responder en su puerto, la aplicación lo detecta en unos 15 segundos y se recupera del mismo modo. Para un proxy que no inició ella (por ejemplo, un servicio en segundo plano o uno iniciado manualmente), primero espera aproximadamente un minuto a que vuelva.
+
+Durante la recuperación, la aplicación no detiene ni reemplaza un proxy que otro proceso ya ejecute en ese puerto: se conecta a él sin pedir tomar su control. Esto incluye el proxy de un Child que un servicio haya reiniciado después de **Conectar como Child**; la aplicación se conecta y muestra el dashboard del Child. Si el puerto lo ocupa algo que no puede utilizar, como un proxy vinculado a otra dirección distinta de `127.0.0.1`, deja de reintentar y espera a que eso cambie. Si la recuperación termina mientras está abierta la página de actualización, esa página permanece visible.
+
+**Stop proxy** y **Quit** en la bandeja mantienen el proxy detenido. El botón **Detener** del dashboard no detiene un proxy ejecutado por la aplicación, porque esta volvería a iniciarlo: muestra la explicación y no cambia nada. Las decisiones y sus motivos se registran en `runtime-supervisor.log`, dentro del directorio de registros de la aplicación (`~/Library/Logs/com.opencodex.desktop` en macOS).
+
+
+
+## Uso en la bandeja
+
+En macOS y Windows, pulsa el icono de la bandeja para abrir una ventana compacta de uso. **Show usage** también la abre, incluidos los escritorios Linux cuya bandeja no transmite los clics. En Linux, el dashboard se abre al iniciar, incluso cuando el entorno de escritorio no muestra un icono de bandeja.
+
+La ventana muestra los totales de hoy y de 30 días, el gráfico de uso configurado, una lista compacta de modelos y los límites por proveedor o cuenta. Junto a las barras aparecen las cuentas regresivas de restablecimiento de cuota; pasa el puntero para ver la hora exacta. Las opciones de **Barra de menús y widget** controlan las secciones y el gráfico visibles. Los proveedores ocultos se excluyen del título, los totales, las cuotas y el gráfico.
+
+El gráfico incluye la actividad del intervalo actual. Un indicador de datos parciales significa que algunos datos no se pueden atribuir con fiabilidad. La ausencia de mediciones no se representa como uso cero. En Windows y Linux, desplázate dentro de la ventana para llegar a Actualizar y Dashboard al final de una lista larga de cuentas.
+
+En macOS, la ventana usa controles nativos SwiftUI y un panel AppKit desplazable. Se usa Liquid Glass de Apple en macOS 26 o posterior; los sistemas anteriores usan el material nativo de los paneles emergentes. El encabezado y los botones Actualizar y Dashboard permanecen visibles al desplazarse por listas largas de cuentas. También puedes abrir la ventana con **View → Show Usage** (Comando-Mayús-U). Pulsa Escape o haz clic fuera para cerrarla.
+
+El menú de la bandeja muestra las solicitudes y los tokens de hoy, con el costo estimado si está habilitado. Usa el mismo día local que el widget. Elige **Refresh now** para actualizar inmediatamente; la aplicación también actualiza los datos cada 60 segundos. Las preferencias de visualización están en **Barra de menús y widget** del dashboard. Desactivar **Hoy** oculta el resumen y desactivar **Costo** quita el costo del resumen.
+
+El uso no disponible o expresamente no medido se muestra como `—`, en lugar de como un cero medido. Elegir el encabezado de solo icono elimina el contador anterior. Las abreviaturas conservan los ceros enteros: diez millones de tokens son `10M`, no `1M`.
+
+
+
+## Actualizaciones
+
+Elige **Check for Updates…** en la bandeja para buscar actualizaciones inmediatamente. Las versiones publicadas también las buscan después del inicio y cada seis horas.
+
+Cuando el actualizador de Tauri encuentra una versión más reciente, aparece un punto azul en el icono de la barra de menús de macOS o en la bandeja de Windows/Linux, cuando esta está disponible. El dashboard integrado muestra la misma señal de actualización de Desktop. Un navegador conectado al mismo proxy sigue mostrando el estado de actualización del paquete del proxy. Si la aplicación deja de informar durante unos tres minutos, el indicador integrado pasa a estado desconocido hasta que se reconecta. El punto indica disponibilidad; la instalación sigue requiriendo una acción explícita.
+
+En Desktop, pulsa el botón de actualización del dashboard para abrir la página de actualización de la aplicación. Allí puedes buscar de nuevo, instalar una actualización firmada pendiente o volver al dashboard. La misma instalación está disponible desde la bandeja. Si falla, la actualización sigue disponible para reintentar. La aplicación también recupera el proxy que detuvo para instalarla, de modo que Codex no se quede sin proxy por una actualización fallida. Esta página funciona también en Linux sin icono de bandeja. El dashboard de un navegador normal administra, en cambio, la instalación del paquete de ese proxy.
+
+Antes de instalar, las actualizaciones se verifican con la clave pública del actualizador firmado del proyecto. En macOS, las actualizaciones desde la aplicación descargan `OpenCodex--macos.app.tar.gz`; el DMG se usa para la primera instalación. El manifiesto de publicación solo se genera cuando está configurado el secreto de la clave del actualizador y exige entonces que las cuatro plataformas tengan firma.
+
+## Widget
+
+La aplicación macOS incluye la extensión WidgetKit de OpenCodex. Consulta la [guía de la aplicación de barra de menús de macOS](/es/guides/macos-menu-bar/) para configurar el widget y conocer los detalles de las instantáneas locales.
+
+
+
+## Desinstalar
+
+Antes de desinstalar una versión de Desktop compatible, abre **Comando de terminal** en el dashboard o **Terminal command…** en la bandeja y elige **Quitar comando de terminal**. Desktop solo elimina su configuración administrada que no haya sido modificada. Los bloques o archivos modificados se conservan y se notifican; resuelve esos problemas antes de borrar la aplicación. Desinstalar directamente no garantiza que se limpien los archivos de shell o el `Path` del usuario.
+
+En macOS, arrastra `OpenCodex.app` desde Aplicaciones a la Papelera. En Windows, quita OpenCodex desde **Aplicaciones instaladas**. En sistemas Linux basados en Debian, ejecuta:
+
+```bash
+sudo apt remove opencodex
+```
+
+Para AppImage, elimina el archivo descargado.
+
+Si no se puede leer la configuración guardada de la barra de menús, se rechazan las ediciones parciales para conservar el archivo. Restáuralo o restablece expresamente la configuración del complemento antes de editar de nuevo.
diff --git a/docs-site/src/content/docs/es/guides/factory-droid.md b/docs-site/src/content/docs/es/guides/factory-droid.md
new file mode 100644
index 00000000000..53173be674d
--- /dev/null
+++ b/docs-site/src/content/docs/es/guides/factory-droid.md
@@ -0,0 +1,163 @@
+---
+title: "Puente Factory Droid"
+description: "Conecte los modelos Factory Droid a opencodex a través de un puente local compatible con Responses."
+---
+
+Factory Droid es un entorno de ejecución del agente, no un punto final de inferencia compatible con OpenAI documentado. Si a proveedor personalizado señaló una fábrica interna LLM URL devuelve `403 Forbidden`, cambiando solo el El adaptador opencodex o la adición de encabezados de proveedor no convierten esa ruta privada en una API pública admitida.
+
+La integración de trabajo es:
+
+```text
+Text-only Responses client
+ -> opencodex (http://127.0.0.1:10100/v1/responses)
+ -> local Responses bridge (http://127.0.0.1:11435/v1/responses)
+ -> official droid exec command
+ -> Factory account and selected model
+```
+
+Esto mantiene la credencial de fábrica dentro del cliente oficial Droid. OpenCodex recibe un separado, puente solo local token.
+
+
+
+## Qué falló y por qué
+
+| Síntoma | Causa | Arreglar |
+| --- | --- | --- |
+| `403 Forbidden` desde una fábrica LLM URL | Los URL No es un propósito general documentado. OpenAI Endpoint para clientes de terceros | Invocar fábrica a través de la Droid oficial CLI o SDK |
+| `404` en `/models/models` | La base de proveedores URL ya terminó en `/models` | Usar una raíz API como `baseUrl`; nunca incluya el camino de descubrimiento |
+| La búsqueda de modelos falla | El puente no expone un catálogo completo en vivo | Establecer `liveModels: false` y proporcionar una estática `models` lista |
+| El proveedor de Loopback es rechazado | El acceso a la red privada se deniega de forma predeterminada | Establecer `allowPrivateNetwork: true` solo para el puente de bucle |
+| `${DROID_BRIDGE_TOKEN}` Está sin resolver | La variable falta en el entorno de servicio opencodex | Inyéctelo en el proceso de servicio, no solo un shell interactivo |
+| `OutputTextDelta without active item` | El puente emitió un delta de texto antes de abrir un elemento de salida y una parte de contenido. | Emitir el ciclo de vida completo Responses SSE en orden |
+
+La misma credencial de fábrica puede, por lo tanto, funcionar en `droid exec` Una petición directa a un LLM indocumentado URL todavía regresa `403`. Estos resultados prueban diferentes productos y no deben ser tratados como contradictorios.
+
+
+
+## Requisitos previos
+
+1. Instalar e iniciar sesión en el [Droid CLI](https://docs.factory.ai/droid-cli/quickstart).
+2. Confirme que una solicitud sin cabeza limitada funciona:
+
+ ```bash
+ droid exec --model glm-5.2 --output-format json "Reply with DROID_OK only."
+ ```
+
+3. Ejecutar un puente local que invoca `droid exec` (o el Droid oficial SDK) y expone:
+
+ - `GET /healthz`
+ - `GET /v1/models`
+ - `POST /v1/responses`
+
+Documentos de fábrica `droid exec` como su superficie de automatización no interactiva y recomienda salida JSON Para los scripts. Para una integración de larga duración, Factory también documenta el flujo JSON-RPC y el flujo oficial TypeScript y Python SDKs en el
+[Droid Guía de ejecución](https://docs.factory.ai/droid-exec/overview).
+
+
+
+## Contrato de puente
+
+Atar el puente a `127.0.0.1`, requieren un portador generado aleatoriamente token, tamaños de solicitud de límite, y ID de modelo de allowlist. El puente mínimo acepta solo estos Responses `input` formas:
+
+- una cadena no vacía; o
+- Un array que contiene sólo `message` Temas. Cada mensaje debe tener un `user`, `developer`, `system`, o `assistant` rol y contenido de cadena o partes de contenido solo de texto (`input_text` para la entrada Roles y `output_text` para el asistente de historia).
+
+Valide la solicitud completa antes de invocar Droid. Si una parte de entrada es una imagen o un archivo, `tools`
+contiene cualquier definición de herramienta, o `input` contiene una llamada de herramienta o resultado (`function_call`,
+`function_call_output`, `custom_tool_call`, o `custom_tool_call_output`), devuelve HTTP `400` con un Responses-estilo `invalid_request_error`. Utilice un código específico de puente estable como
+`unsupported_bridge_input` e identificar el campo rechazado en el mensaje. Haz esto antes de comenzar SSE, incluso cuando `stream: true`; nunca desechar, encadenar o aplanar el contenido no soportado en el pronto.
+
+```json
+{
+ "error": {
+ "type": "invalid_request_error",
+ "code": "unsupported_bridge_input",
+ "param": "tools",
+ "message": "The minimal Droid bridge does not accept tool definitions."
+ }
+}
+```
+
+Para una solicitud aceptada, el puente debe:
+
+1. Convertir el Responses aceptado `input` a un aviso.
+2. invocación `droid exec --model --output-format json `;
+3. Analizar la final `result` y `session_id`;
+4. Devolver un OpenAI Responses sobre; y
+5. mapa `previous_response_id` a la ID de sesión Droid cuando se requiere continuación.
+
+Para las respuestas de transmisión, emita este ciclo de vida en orden:
+
+```text
+response.created
+response.output_item.added
+response.content_part.added
+response.output_text.delta
+response.output_text.done
+response.content_part.done
+response.output_item.done
+response.completed
+```
+
+No exponga el puente en `0.0.0.0` y no reutilice la credencial de fábrica como portador del puente token.
+
+
+
+## Configuración del proveedor OpenCodex
+
+Crear el proveedor personalizado con el ID de proveedor explícito `droid`:
+
+```bash
+ocx provider add droid \
+ --adapter openai-responses \
+ --base-url http://127.0.0.1:11435/v1 \
+ --default-model glm-5.2 \
+ --allow-private-network
+```
+
+Esto crea el `providers.droid` entrada de configuración. En el panel de control, abra **Proveedores → droide → Editar JSON** y reemplace el valor de ese proveedor con:
+
+```json
+{
+ "adapter": "openai-responses",
+ "baseUrl": "http://127.0.0.1:11435/v1",
+ "responsesPath": "/responses",
+ "allowPrivateNetwork": true,
+ "authMode": "key",
+ "apiKey": "${DROID_BRIDGE_TOKEN}",
+ "liveModels": false,
+ "models": ["glm-5.2", "glm-5.2-fast", "kimi-k3"],
+ "defaultModel": "glm-5.2"
+}
+```
+
+Los ID de modelo son ejemplos. Sólo los modelos que `droid exec` puede utilizar para la fábrica iniciada cuenta. No agregue encabezados de inferencia específicos de Factory a este proveedor: su fuente es el servidor local. puente, no un endpoint Factory HTTP.
+
+Después de guardar un proveedor o cambiar su catálogo estático, sincronizar y reiniciar Codex tan nuevo Las sesiones leen el catálogo actualizado:
+
+```bash
+ocx sync --restart-codex
+ocx doctor
+```
+
+`--restart-codex` reinicia los servidores de aplicaciones correspondientes y cierra completamente y vuelve a iniciar el escritorio Codex aplicación, que termina las conversaciones en vivo. Uso `--restart-app-server-only` para salir de la aplicación de escritorio corriendo. Ejecute el reinicio solo después de terminar o guardar esas sesiones.
+
+
+
+## Verificar la ruta completa
+
+Compruebe cada límite por separado:
+
+```bash
+curl -fsS http://127.0.0.1:11435/healthz
+ocx doctor
+ocx access test droid/glm-5.2 --protocol responses
+```
+
+Una fila de proveedores o una entrada de selector de modelos solo prueban la visibilidad del catálogo. La integración sólo funciona después de que la sonda Responses regrese a través del `droid/` ruta.
+
+
+
+## Limitación actual
+
+El puente mínimo anterior traduce texto y el ciclo de vida Responses SSE. Lo hace **no** Implementar el protocolo completo bidireccional Codex función/herramienta-llamada. Codex Aplicación y `codex exec` Normalmente envía Codex CLI no tiene ninguna definición general de herramienta, incluso cuando un mensaje indica que no se llame a las herramientas. bandera que elimina esas definiciones. El puente mínimo debe rechazar esas solicitudes con el `400`
+contrato por encima. Definiciones de herramientas, llamadas de herramientas, resultados de herramientas, permisos, cancelación y riqueza Los eventos Droid requieren un puente con estado construido en el modo de transmisión de Factory JSON-RPC o un Droid oficial. SDK. Tratar `ocx access test` éxito como verificación de ruta de texto, no como agente o ruta de herramienta Codex verificación.
diff --git a/docs-site/src/content/docs/es/guides/grok-build.md b/docs-site/src/content/docs/es/guides/grok-build.md
new file mode 100644
index 00000000000..7f565ccc1eb
--- /dev/null
+++ b/docs-site/src/content/docs/es/guides/grok-build.md
@@ -0,0 +1,136 @@
+---
+title: "Grok Build"
+description: "Utilice cualquier modelo opencodex-enrutado de xAI Grok Build CLI modelos — se auto-registran en ~/.grok/config.toml mientras se ejecuta el proxy."
+---
+
+opencodex sirve un OpenAI-compatible `POST /v1/responses` en su puerto local, y Grok Build admite modelos personalizados contra servidores compatibles con OpenAI. Comenzando con esta integración, opencodex registra todo su catálogo visible en Grok Build automáticamente — sin configuración manual Se requiere edición.
+
+
+
+## Auto-registro
+
+Cuando `~/.grok` existe, `ocx start` (y `ocx ensure` / `ocx restart`) escribe un bloque administrado en `~/.grok/config.toml`:
+
+```toml
+# >>> opencodex managed block — do not edit (removed by `ocx stop`) >>>
+[model_providers.opencodex]
+base_url = "http://127.0.0.1:10100/v1"
+api_backend = "responses"
+api_key = "opencodex-loopback"
+extra_headers = { "x-opencodex-grok" = "1" }
+
+[model.ocx-gpt-5-6-sol]
+model = "gpt-5.6-sol"
+model_provider = "opencodex"
+name = "OCX gpt-5.6-sol"
+context_window = 272000
+supports_reasoning_effort = true
+reasoning_effort = "low"
+
+[[model.ocx-gpt-5-6-sol.reasoning_efforts]]
+id = "low"
+value = "low"
+label = "Low"
+description = "Quick, fast implementations"
+default = true
+# ... remaining rungs for this model, then one [model.ocx-*] table per visible model,
+# each referencing model_provider = "opencodex" ...
+# <<< opencodex managed block <<<
+```
+
+- **Aditivo:** su propia configuración fuera de la cerca nunca se toca. Antes de la primera inyección en un archivo preexistente, se escribe una copia de seguridad única
+ `~/.grok/config.toml.bak-opencodex`.
+- **Idempotente:** cada `ocx start` (y `ocx ensure` mientras el inicio automático está habilitado) reemplaza el bloque vallado con el catálogo actual.
+- **Eliminado en desmontaje:** `ocx stop`, `ocx eject`, `ocx uninstall`, y graciosa daemon shutdown sin servicio desmonta el bloque cercado y restaura tu archivo byte por byte. Bajo un gerente de servicio, el desmontaje pasa por `ocx stop`/`ocx
+ uninstall` (los procesos en modo servicio mantienen intencionalmente el bloque en respawns).
+- **Conflict-safe:** Alias ya definidos por su propio `[model.*]` Las mesas son respetadas (opencodex sufijos sus propias entradas); una valla dañada (comienza marcador sin marcador final) rechaza cualquier cambio automático y pide la reparación manual.
+
+A continuación, elija un modelo dentro de Grok Build:
+
+```bash
+grok models # lists ocx-* entries alongside native grok models
+grok -m ocx-anthropic-claude-opus-4-8 -p "hello"
+# or in the TUI: /model ocx-anthropic-claude-opus-4-8
+```
+
+
+
+## Esfuerzo de razonamiento
+
+Grok Build `/effort` (y `--effort`) solo funciona para modelos cuya entrada en el catálogo anuncia la escalera: su lista de modelos fetch lee el crudo `GET /v1/models` respuesta, y Las entradas deben llevar `supports_reasoning_effort` más `reasoning_efforts` menú opciones. Una proyección compatible con Grok de esa escalera se escribe en cada uno administrado
+`[model.*]` cuadro (`supports_reasoning_effort`, por defecto `reasoning_effort`, y
+`[[model..reasoning_efforts]]` filas del selector) para que el menú esté presente cuando Grok Lee el modelo de `config.toml`. Para las entradas del modelo enrutado, opencodex refleja el niveles de proveedores configurados (`reasoningEfforts` / `modelReasoningEfforts`, y el valor predeterminado Desde `modelDefaultReasoningEfforts`) Este metadata describe el proxy configurado Escalera enrutada. Los adaptadores pueden emular el razonamiento o mapear niveles en proveedores específicos campos. Los modelos enrutados con una escalera configurada muestran el control de esfuerzo en Grok Build como en Codex. Los modelos con una lista de niveles vacía no mantienen ningún control de esfuerzo, lo que coincide con el comportamiento Codex. Nativo Las entradas GPT-5.6 están separadas: preservan y exponen su razonamiento ascendente anclado más que los metadatos enrutados configurados por el proveedor. peldaños válidos Grok, incluyendo
+`none` y `minimal`, se conservan cuando se anuncian. peldaños no soportados o duplicados, incluyendo Codex-solamente `ultra`, se omiten del archivo, guardando cada recolector emitido opción seleccionable.
+
+Grok Build habla con opencodex sobre la Responses API. Cuando la ruta anuncia un razonamiento ladder, el Responses pasa a través hacia adelante `reasoning.summary` como se configura, así que pensar Las trazas alcanzan Grok de forma nativa como elementos de razonamiento Responses. Establecer `reasoning.summary: "none"` si un cliente quiere que el modelo piense sin devolver el rastro. Una explícita `reasoning.summary`
+gana sobre la ruta predeterminada.
+
+
+
+## Nota de autenticación
+
+Grok Build requiere una clave API no vacía para los modelos personalizados, incluso en loopback. El inyectado las entradas llevan un marcador de posición (`opencodex-loopback`) — opencodex ignora las claves de admisión conexiones loopback, por lo que no hay secreto real está involucrado.
+
+**El registro automático es solo loopback.** Cuando opencodex se une a un host que no es loopback, — incluye los comodines `0.0.0.0` y `::`, que exponen todas las solicitudes de interfaz — necesitan su real admission token, y un bloque administrado no puede llevar uno de forma segura. Escribir el literal token sería Pon tu secreto en `~/.grok/config.toml` y sobrescribir lo que sea que establezcas allí en el siguiente
+`ocx start`/`ensure`/`restart`. Así que opencodex no escribe nada en absoluto en ese caso (y elimina cualquier bloque sobrante de un enlace de bucle de retorno anterior), y configurar los modelos usted mismo fuera de los marcadores administrados, donde nada de lo que hace opencodex puede golpearlos. Véase
+[Receta manual](#manual-recipe-without-auto-registration) para la tabla exacta, y establecer ambos
+`base_url` (un host que es realmente accesible desde donde corres `grok`) `api_key`
+(tu `OPENCODEX_API_AUTH_TOKEN`).
+
+No reemplazar `api_key` con `env_key` Aquí. Un `env_key` El que no se resuelve no detener la solicitud — Grok cae a su sesión xAI token y lo envía a cualquier `base_url` los nombres de entrada, que para una implementación LAN es un punto final HTTP de texto plano que no es xAI.
+
+El inyectado `api_key` en la entrada del proveedor ocupa el primer lugar en la cadena de credenciales de Grok para estos modelos, por lo que se vuelve en contra de opencodex no necesitan ningún inicio de sesión adicional Grok. Mantenga su normalidad
+`grok login` / `XAI_API_KEY` configuración para los modelos nativos de gruk y cualquier arnés características que Póngase en contacto directamente con xAI.
+
+
+
+## Receta manual (sin auto-registro)
+
+Si no te gusta `~/.grok/config.toml` — o opencodex está en un enlace no loopback — agregar a `[model_providers.opencodex]` tablas de bloques y por modelo que hacen referencia a él, fuera del
+`# >>> opencodex managed block` marcadores:
+
+```toml
+[model_providers.opencodex]
+base_url = "http://127.0.0.1:10100/v1"
+api_backend = "responses"
+api_key = "opencodex-loopback"
+
+[model.ocx-opus]
+model = "anthropic/claude-opus-4-8"
+model_provider = "opencodex"
+```
+
+Para un proxy accesible a través de la red, `base_url` en la dirección `grok` puede en realidad marque y use su admisión token:
+
+```toml
+[model_providers.opencodex]
+base_url = "http://192.168.1.10:10100/v1" # the reachable host, not 127.0.0.1
+api_backend = "responses"
+api_key = "your-OPENCODEX_API_AUTH_TOKEN"
+
+[model.ocx-opus]
+model = "anthropic/claude-opus-4-8"
+model_provider = "opencodex"
+```
+
+Esto usa `[model_providers.]` herencia, que requiere Grok Build 0.2.109 o posterior (publicado 2026-07-21). En versiones anteriores, los herederos `base_url` No se aplica a la inferencia encaminar la actualización —, o volver a los campos directos por modelo (`base_url`/`api_backend`/`api_key`
+en cada `[model.*]` tabla).
+
+Citar cualquier alias que contenga un punto: bare `[model.grok-4.5]` es un camino clave de tres segmentos, no El ID `grok-4.5`. Los alias generados evitan los puntos completamente por esta razón.
+
+
+
+## Limitaciones conocidas
+
+- **Instalación de servicio `ocx restart`:** el proxy en ejecución posee la autorización de reinicio y drena coordinación, mientras que el administrador de servicios instalado inicia el reemplazo después del proceso anterior salidas. La supervisión del servicio permanece instalada. En el registro automático de loopback, el bloque administrado también se mantiene en su lugar a través de la transferencia; despliegues no loopback uso gestionado manualmente Grok configuración en su lugar. El comando tiene éxito solo después de que un proceso diferente, verificado por la identidad, es saludable en el mismo puerto.
+- **Configure el tiempo de lectura:** iniciar opencodex primero, luego iniciar `grok` Para los más resultados predecibles. Relojes Grok Build `~/.grok/config.toml` y se recarga cuando el
+ `[model]` La tabla cambia (aproximadamente un segundo de rebote, en comparación con el contenido), por lo que un bloque actualizado llega a una sesión abierta sin reiniciarse. Para confirmar lo que Grok analizó, ejecutar `grok inspect`: enumera las fuentes de configuración que cargó y advierte sobre cualquier campo que haya rechazado. No imprime la lista de modelos resueltos. Informes y saltos actuales de Grok Build campos de modelo no válidos mientras se conserva el resto de la entrada del modelo. Un error de sintaxis TOML todavía Evita que el archivo se cargue. opencodex escribe atómicamente, por lo que Grok observa una documento en cada recarga.
+- **Actualizaciones del catálogo:** el bloque vallado refleja el catálogo en el memento de la inyección. Después agregar proveedores o modelos, ejecutar `ocx ensure` (o reiniciar el proxy) para actualizarlo.
+
+
+
+## Límites de tarifas Devin
+
+Si Devin rechaza una solicitud directa con un límite de velocidad antes de producir una acción, OpenCodex devuelve HTTP 429 con un error JSON. Grok puede entonces reconocer el límite en lugar de mostrar un error genérico 500 de un flujo HTTP 200 fallido. Si la respuesta incluye `Retry-After`, siga ese retraso antes de volver a intentarlo. Cuotas agotadas sin reinicio No reciba un retraso predeterminado. La conmutación por error de la cuenta OAuth existente aún se aplica. Esto El manejo de HTTP 429 también se aplica a las solicitudes Responses que no son de transmisión.
+
+Para las solicitudes de transmisión, OpenCodex espera hasta el tiempo de espera configurado para este inicio. Rechazo. Si eso espera expira, abre la respuesta SSE y permite que el stream watchdog existente maneje las paradas. Después de que se envían las cabeceras HTTP, un fallo posterior permanece en el flujo como `response.failed`.
diff --git a/docs-site/src/content/docs/es/guides/image-bridge.md b/docs-site/src/content/docs/es/guides/image-bridge.md
new file mode 100644
index 00000000000..3779a834445
--- /dev/null
+++ b/docs-site/src/content/docs/es/guides/image-bridge.md
@@ -0,0 +1,93 @@
+---
+title: "Puente de imágenes"
+description: "Route image_generation llamadas de herramienta alojada a xAI Grok Imagine cuando se utiliza un proveedor que no sea OpenAI."
+---
+
+
+
+## Descripción general
+
+Cuando enruta Codex a través de un modelo que no sea OpenAI (Claude, Gemini, Grok, etc.), el
+`image_generation` **herramienta alojada** normalmente no funciona — requiere el lado del servidor de OpenAI entorno de ejecución. El puente de imagen detecta estas llamadas y las redirige transparentemente a xAI Grok Imagine, por lo que el modelo con el que está chateando puede generar imágenes.
+
+
+
+## Requisitos previos
+
+- **Habilitar el puente** mediante el establecimiento `images.bridgeEnabled: true` en su configuración (está desactivado por por defecto para evitar inesperados cargos xAI — ver [Configuración](#configuration) infra).
+- Un `xai` entrada del proveedor con un **Clave API**. El puente de imagen Responses fija el cumplimiento a la registro xAI Endpoint de imágenes (`https://api.x.ai/v1`); cualquier `baseUrl` Anular es Ignorado para llamadas de imagen. OAuth / `ocx login xai` Solo hace **no** arme este bucle sidecar. El mismo `bridgeEnabled` bandera hace armar el separado Codex `/v1/images` relé para que el incorporado
+ `image_gen` El cliente puede llamar a Imagine con el Grok CLI subvención — ver
+ [Generación de imagen incorporada](/es/guides/codex-integration/#built-in-image-generation-image_gen). Si falta esa concesión (o una clave xAI API), `/v1/images` devuelve un error en lugar de cayendo a través de ChatGPT.
+
+ El relé solo posee la ruta cuando no hay ningún proveedor de imágenes configurado: se ejecuta cuando
+ `images.bridgeEnabled` es `true` **y** `images.provider` se omite. Configuración
+ `images.provider` explícitamente manos `/v1/images` a ese proveedor, y a su propio Los errores de validación se devuelven tal cual en lugar de volver a intentarlo a través de xAI.
+
+ ```json
+ {
+ "providers": {
+ "xai": { "adapter": "openai-chat", "apiKey": "xai-…", "authMode": "key" }
+ }
+ }
+ ```
+
+- Un modelo que no sea OpenAI seleccionado como su proveedor activo. (Cuando el proveedor activo es OpenAI, la herramienta alojada nativa se utiliza directamente y el puente se pasa por alto.)
+
+
+
+## Configuración
+
+Image Opciones de puente en vivo bajo `images` en `~/.opencodex/config.json`. Bridging es
+**opt-in** — debe establecer `bridgeEnabled: true` para habilitar la generación de pago xAI Grok Imagine:
+
+```json
+{
+ "images": {
+ "bridgeEnabled": true,
+ "bridgeModel": "grok-imagine-image-quality",
+ "maxRounds": 3,
+ "timeoutMs": 60000
+ }
+}
+```
+
+| Opción | Predeterminado | Descripción |
+| --- | --- | --- |
+| `bridgeEnabled` | `false` | Interruptor maestro. Establecer `true` para permitir el bridge. Desactivado por defecto para evitar cargos inesperados de xAI. |
+| `bridgeModel` | `grok-imagine-image-quality` | El identificador de modelo de imagen xAI al que enviar mensajes. |
+| `maxRounds` | `3` | Iteraciones máximas de bucle de generación de imágenes por turno. Fijado a un entero y sujetado a `[0, 10]`Los valores no finitos vuelven a `3`. |
+| `timeoutMs` | `60000` | Fecha límite de xAI por llamada en milisegundos. Los valores positivos finitos se minimizan y pasan a la solicitud xAI. |
+| `artifactsKeepCount` | `200` | Número máximo de archivos retenidos bajo `artifacts/`. Cuando se excede, los archivos más antiguos se eliminan después de cada llamada completada. Configurar `0` o un valor negativo para deshabilitar la poda. |
+
+
+
+## Retención de artefactos
+
+Las imágenes generadas se escriben en `~/.opencodex/artifacts/`. Para evitar el disco sin límites en sesiones de larga duración, el directorio se poda automáticamente después de cada llamada de imagen (una vez que el lote completo para esa llamada está en disco) — los archivos más antiguos (por modificación tiempo) se eliminan cuando el recuento excede el máximo configurado (por defecto 200, configurable
+`images.artifactsKeepCount`) Solo las rutas que sobreviven a la poda se devuelven al modelo.
+
+
+
+## Cómo funciona
+
+El puente de imagen se activa solo en **Responses** giros que incluyen el hosted
+`image_generation` En el `/v1/responses` herramientas mientras que un **non-OpenAI**
+El modelo está seleccionado. Lo hace **no** interceptar el sistema integrado de Codex `image_gen` herramienta, cual se envía directamente a `/v1/images/generations` (o `/images/edits`) — esa ruta Se cubre por separado en [Integración con Codex](/es/guides/codex-integration/#built-in-image-generation-image_gen).
+
+1. Cuando se muestra una solicitud Responses `image_generation` en `tools`, OpenCodex lo detecta durante el preprocesamiento de solicitudes.
+2. La herramienta alojada se sustituye por un **herramienta de función sintética** que el modelo enrutado puede llamar normalmente — el modelo ve una herramienta llamable en lugar de una herramienta alojada opaca que no puede ejecutar.
+3. Cuando el modelo invoca esa herramienta, OpenCodex intercepta la llamada y envía el mensaje a xAI. generación de imágenes API.
+4. Las imágenes generadas se guardan en `~/.opencodex/artifacts/` y el **ruta de acceso de archivo local** es devuelto como resultado de la herramienta.
+5. El modelo continúa la conversación con el conocimiento de la imagen generada y su ubicación.
+
+Desde la perspectiva del modelo nada cambió — llamó a una herramienta y obtuvo un resultado. Desde el usuario En perspectiva, la generación de imágenes funciona con cualquier proveedor enrutado en lugar de fallar silenciosamente.
+
+
+
+## Limitaciones
+
+- **Solo se admite xAI Grok Imagine.** DALL-E y otros proveedores de imágenes se pueden agregar más tarde.
+- **La búsqueda web tiene prioridad** en adaptadores que soportan el bucle sidecar de búsqueda web. Si ambos sitios web se solicitan búsqueda y generación de imágenes en el mismo turno, La generación se salta. Cursor/`runTurn` adaptadores no pueden usar ese sidecar hoy, por lo que la imagen El puente todavía puede funcionar para esos giros de doble herramienta.
+- **Se aplican costos de xAI.** La generación de imágenes a través de xAI requiere una suscripción activa a xAI o créditos API.
+- **Sólo streaming.** El puente funciona interceptando el flujo de respuesta SSE; solicitudes con
+ `stream: false` Se rechazan con un error de 400.
diff --git a/docs-site/src/content/docs/es/guides/integrations.md b/docs-site/src/content/docs/es/guides/integrations.md
new file mode 100644
index 00000000000..3f3c824c993
--- /dev/null
+++ b/docs-site/src/content/docs/es/guides/integrations.md
@@ -0,0 +1,592 @@
+---
+title: "Integraciones"
+description: "Conectar opencodex a OpenCode, Pi, Concha suave, OMP, Hermes, OpenClaw, Kimi Código, gjc, DeepSeek Harness, MiniMax Código, ZCode, Primer Agente, Aside, Raycast, omo, Cline CLI, Kilo, Código de Comando y Factory Droid desde el panel — un interruptor por cliente, con una copia de seguridad tomada antes de cada escritura."
+---
+
+Los **Conectar** página escribe el bloque de proveedor de opencodex en la propia configuración del cliente archivo, y lo elimina de nuevo. Veinte clientes trabajan de esta manera, cada uno con un interruptor:
+
+| Cliente | Archivo de configuración | Formato | Cuando el cambio entra en vigor | Credenciales |
+|---|---|---|---|---|
+| OpenCode | `~/.config/opencode/opencode.json` | JSON | Próximo lanzamiento directo | `OPENCODEX_OPENCODE_API_KEY` |
+| Pi | `~/.pi/agent/models.json` | JSON | Nuevas sesiones | marcador de posición loopback |
+| Concha suave | `~/.gentle-shell/agent/models.json` (Persistente casa seleccionada) | JSON | después de reiniciar Gentle Shell | marcador de posición loopback |
+| OMP | `~/.omp/agent/models.yml` | YAML | después de reiniciar OMP | `opencodex-loopback` marcador de posición |
+| Hermes | `~/.hermes/config.yaml` | YAML | Nuevas sesiones | `OPENCODEX_HERMES_API_KEY` |
+| OpenClaw | `~/.openclaw/openclaw.json` | JSON5 | inmediatamente, en una puerta de enlace en ejecución | `OPENCODEX_OPENCLAW_API_KEY` |
+| Código Kimi | `~/.kimi-code/config.toml` | TOML | en el reinicio, o `/reload` | marcador de posición loopback |
+| gjc | `~/.gjc/agent/models.yml` | YAML | nuevas sesiones, o cuando abres `/model` |marcador de posición de bucle de retroceso no secreto |
+| DeepSeek Harness (DSH) | `$DSH_HOME/profiles/desktop/cordis.patch.yml` (por defecto) `~/.dsh/profiles/desktop/cordis.patch.yml`); `$DSH_HOME/settings.yaml` hasta que DSH Desktop cree ese perfil | YAML | recarga caliente | marcador de posición portador de bucle de retorno no secreto |
+| Código MiniMax | `~/.minimax/config.yaml` | YAML | nuevas sesiones, o después de abrir el selector de modelos | marcador de posición loopback |
+| Primer agente | `~/.prime/agent/models.json` | JSON | Nuevas sesiones | marcador de posición loopback |
+| ZCode | `~/.zcode/v2/provider_config.json` (schemaVersion 1); retroceso heredado: `~/.zcode/v2/config.json` | JSON | al reiniciar | marcador de posición loopback |
+| Aside | `~/.aside/u//models.json` | JSON | después de salir completamente y reabrir Aside | marcador de posición loopback |
+| Raycast | `~/.config/raycast/ai/providers.yaml` | YAML | inmediatamente en guardar — Raycast mira el archivo | ninguno — solo loopback |
+| omo (Pi / senpi) | `~/.omo/agent/models.json` | JSON | Nuevas sesiones | marcador de posición loopback |
+| Qoder | `settings.json` en `$QODER_CONFIG_DIR`, por defecto `~/.qoder` | JSON | Nuevas sesiones | marcador de posición loopback |
+| Cline CLI | `~/.cline/data/settings/providers.json` y hermano `models.json` | JSON par | después de detener y reiniciar Cline | marcador de posición loopback |
+| Kilo | Primero existente `kilo.jsonc`, `kilo.json`, `opencode.jsonc`, `opencode.json`, o `config.json` bajo `~/.config/kilo` | JSONC | Nuevas sesiones | `OPENCODEX_KILO_API_KEY` |
+| Código de comando | `~/.commandcode/providers.json` (en Windows con el inicio predeterminado: usar `HOME ?? USERPROFILE` solo si no está en blanco y Windows-absoluto, de lo contrario `homedir()`; se conserva una vivienda suministrada por separado; adjuntar `.commandcode\providers.json`) | JSON | El próximo lanzamiento de Command Code | ninguno — loopback sin llave (`apiKey: false`) |
+| Factory Droid | `~/.factory/settings.json` (`%USERPROFILE%\.factory\settings.json` en Windows) | JSON | inmediatamente a través de la observación de archivos | Ninguno — loopback sin llave |
+
+
+
+## Concha suave
+
+Seleccionar **Conectar → Gentle Shell**, o utilice los mismos comandos de integración administrada:
+
+```bash
+ocx export --client gentle-shell --json
+ocx integration client enable --client gentle-shell
+ocx integration client disable --client gentle-shell
+```
+
+Gentle Shell tiene un destino separado y un historial de reversión de Pi. Solo
+`providers.opencodex` se gestiona; otros proveedores y preferencias permanecen intactos. Los cambios de catálogo actualizan un bloque ya conectado, sin cambios. Un existente manualmente copiado es un conflicto, no un permiso para sobrescribirlo: inspeccione la vista previa y utilice la confirmación explícita de sobrescritura solo si tiene la intención de reemplazarla.
+
+Los salvados `home` en `~/.gentle-shell/config.json` seleccione el destino. A salvo gana la ruta personalizada; usos aislados/por defecto `GENTLE_SHELL_HOME` o
+`~/.gentle-shell/agent`. `GENTLE_SHELL_CONFIG` selecciona una configuración de lanzador alternativa. Estas variables de entorno deben establecerse en el **Proceso OpenCodex**No sólo en un más tarde. Los selectores deben ser rutas absolutas; literales `~` y los caminos relativos se niegan. Una sola vez `gentle-shell --home` Las banderas no pueden ser descubiertas por un proxy de fondo.
+
+Modo de enlace o un aliasing casero Pi se niega con un remedio de integración de Pi; uso **Conectar → Pi**
+para ese archivo compartido. OpenCodex no cambia las preferencias del lanzador. Un configuración del lanzador ilegible/inseguro se niega; JSON mal formado vuelve a aislarse, Coincidiendo con el lanzador. Si mueve una casa conectada, desactive su antes de volver a conectar el nuevo. Reinicie Gentle Shell después de una actualización del catálogo. Esta integración conserva la política de exportación de Pi solo loopback y no almacena ninguna clave API real.
+
+"Omo" nombra tres productos que comparten la misma `~/.omo` carpeta. Los **omo** tab administra omo basado en Pi (el motor senpi) a través de `~/.omo/agent/models.json`Como en la tabla de arriba. Omo basado en Codex (LazyCodex) tiene su propia sección en la misma pestaña, que se muestra solo cuando se detecta LazyCodex, descrita en
+[modelos de rol omo (Codex / LazyCodex)](#omo-codex--lazycodex-role-models). Omo basado en OpenCode (oh-my-opencode) mantiene su propia configuración bajo OpenCode; opencodex no lo lee ni lo escribe.
+
+Qoder IDE / qodercli admite la exportación y la configuración administrada a través del panel de control y CLI:
+
+```bash
+ocx export --client qoder --json
+ocx integration client enable --client qoder
+ocx integration client disable --client qoder
+```
+
+Qoder utiliza `settings.json` en `QODER_CONFIG_DIR` cuando se establece esa variable, y
+`~/.qoder/settings.json` de otra manera; un relativo `QODER_CONFIG_DIR` es rechazada. Habilitar fusiones `providers.opencodex` y OpenCodex entradas en `modelConfigs.customModels`, conservando otros proveedores, modelos personalizados, y configuración. Deshabilitar elimina las entradas OpenCodex grabadas; la restauración usa las entradas existentes flujo de trabajo de instantáneas. El modelo predeterminado del proveedor es el primer modelo de la exportación ordenada. Los modelos personalizados utilizan su ventana de contexto de catálogo, volviendo a la entrada 128000 tokens. La clave API generada es un marcador de posición no secreto: la integración de Qoder requiere loopback acceso y rechaza un enlace no loopback autenticado. Cuando el dedicado no está autenticado Loopback listener está habilitado, exporta Qoder a ese listener. `ocx sync` y catálogo changes actualiza una integración de Qoder ya habilitada como los otros clientes administrados.
+
+Los catálogos generados incluyen solo modelos habilitados de cada selección de proveedor. Esto se aplica a ambos descargas e integraciones administradas, incluyendo Pi y Aside. La lista de modelos de gestión sigue mostrando la lista completa para que pueda habilitar modelos adicionales.
+
+`ocx uninstall` desactiva las integraciones registradas, incluidos todos los perfiles Aside propios, antes de eliminar Estado de recuperación de OpenCodex. Propiedad ilegible, falta de registro en el perfil o una edición conflictiva Detiene esa eliminación. La limpieza es secuencial: las inhabilitaciones anteriores no se deshacen cuando se realiza una limpieza posterior. Uno falla. Si la compensación también falla, un archivo cliente puede dejarse en un estado intermedio. Inspeccionar los archivos de cliente notificados y las instantáneas de recuperación retenidas antes del reintento; el estado retenido no significa que cada cliente fue restaurado o dejado sin cambios.
+
+Para los preconfiguración integrados de Gajae, mantenga la opción de enrutamiento en `~/.gjc/agent/config.yml`:
+
+```yaml
+modelProfile:
+ proxyProvider: opencodex
+ proxyMode: always
+```
+
+Mantenga su elección `modelProfile.default` para aplicarlo cuando sea sencillo `gjc` Empieza. La integración gestionada solo posee `providers.opencodex` en `models.yml`; actualizar o deshabilitar ese proveedor no reescribe su elección preestablecida. Actualizar la integración después de cambiar la selección del modelo exportado.
+
+Modelos GJC con una exportación de escalera de esfuerzo de razonamiento compatible `reasoning: true`, `thinking.levels`, y `compat.supportsReasoningEffort`, por lo que GJC puede ofrecer una opción de esfuerzo. Los modelos nativos Codex reciben su escalera estándar incluso cuando el catálogo la omite. Los modelos sin una escalera conocida omiten estos campos; `none` y `ultra` No se ofrecen porque `none` No hace ningún esfuerzo y `ultra` pliegues a `max` en el cable. Actualice la integración para actualizar estas opciones de modelo.
+
+La integración gestionada de OpenCode posee dos fragmentos: `provider.opencodex` (código abierto V1) y
+`providers.opencodex` (código abierto V2). Ambos llevan las mismas opciones de razonamiento por modelo declaradas y defaults — el bloque heredado deletrea el valor predeterminado de un modelo en sus opciones y sus elecciones como variante mapa, el bloque V2 utiliza la configuración del modelo y una matriz de variantes nativa — para que ambos se escriban y se mantienen sincronizados; nombran los mismos identificadores de proveedor y modelo, y opencode V2 los fusiona en uno entrada del proveedor. Aplicar, Actualizar, Desactivar y Restaurar actúan sobre ambos fragmentos y sus otros Las entradas de proveedores, agentes, combinaciones de teclas y MCP permanecen intactas.
+
+Ambos fragmentos se construyen a partir de los metadatos del modelo canónico efectivo —, como lo son la exportación y el procesamiento de Kilo. la `ocx opencode` lanzador. Una anulación personalizada explícita siempre gana, y una escalera que usted borró para Vacío permanece vacío; una escalera de razonamiento o defecto nunca se inventa para un modelo que no declara ninguno. Un límite de contexto autorizado se lleva con un presupuesto de salida al lado: un valor de salida conocido — explícito o de metadatos de catálogo — gana, de lo contrario el esquema requerido 32000 reserva sujetado a contexto, y sin un contexto autorizado se omite todo el bloque de límite. Capacidades, Las escalas de esfuerzo, los valores predeterminados y un límite de entrada opcional aparecen solo cuando se conocen; el bloque V2 El objeto de capacidades nativas requiere un valor de herramientas conocido, por lo que cuando se desconoce el soporte de la herramienta se se omite por completo en lugar de escribirse parcialmente, y las declaraciones de modalidad heredada permanecen. "No hay escalera inventada" todavía escribe los controles, nunca las opciones: el bloque V2 siempre lleva un — de matriz de variantes explícitas vacía cuando no se declara nada, porque omitirlo haría que OpenCode sintetiza bajo/medio/alto — y un modelo con razonamiento fijo conocido pero sin escalera ajustable obtiene supresión solo para discapacitados en lugar de un esfuerzo: el bloque OpenCode heredado y Kilo ambos desactivan cada id del peldaño que el cliente generaría de otro modo. Tampoco añade un esfuerzo seleccionable. Los variantes seleccionables anulan el modelo predeterminado — `none` incluido, ofrecido solo cuando la escalera declarada del modelo lo contiene. Lo que sea Si el cliente selecciona, la política de razonamiento ascendente del proxy aún rige la solicitud que No lo hagas.
+
+El soporte administrado DSH tiene un piso de compatibilidad de **DSH 0.1.0-rc.6**. DSH 0.1.7+ lee el proveedor Rutas desde `[id=llm-pi-ai].config.providers.opencodex` en el parche Perfil de escritorio,
+`$DSH_HOME/profiles/desktop/cordis.patch.yml`, que DSH recarga en caliente. OpenCodex escribe esa fila cuando existe el perfil de escritorio y su parche. Si
+`$DSH_HOME/profiles/desktop/package.json` Existe pero `cordis.patch.yml` falta, Apply se niega: Crear `cordis.patch.yml` que contiene `[]` (el parche vacío DSH escribe para un nuevo perfil), luego permitir la integración de nuevo. Solo cuando no hay un perfil de escritorio, OpenCodex lo usa
+`llm-pi-ai.providers.opencodex` en `$DSH_HOME/settings.yaml`. OpenCodex solo posee ese proveedor Fragmento: Aplicar y actualizar reemplazarlo, Desactivar lo elimina, y Restaurar pone de nuevo una grabación instantánea. Estas operaciones no cambian el modelo por defecto del usuario o el
+`deepseek-official` proveedor. La integración administrada de DSH es actualmente solo loopback y nunca escribe una credencial real.
+
+MiniMax Código sigue `MINIMAX_DATA_DIR`Entonces, `MAVIS_DATA_DIR`Antes de caer volver a `~/.minimax`. Su bloque administrado solo posee `custom_provider.opencodex`. No cambia `defaultModel`, la fuente de credenciales MiniMax seleccionada, o el inicio de sesión MiniMax del usuario. Elegir un `custom_provider:opencodex/`
+entrada en MCode después de conectarlo. Actualizar la integración también actualiza ventanas de contexto autoritativas por modelo y opciones de esfuerzo de razonamiento; desconocido Las capacidades se omiten, y el esfuerzo actual de MCode se conserva.
+
+El agente principal sigue `PRIME_AGENT_CODING_AGENT_DIR` Antes de volver a caer
+`~/.prime/agent`Se rechaza un valor relativo, por lo que el proxy y el agente no pueden No estoy de acuerdo sobre qué archivo se quiere decir. Su bloque administrado solo posee
+`providers.opencodex`otros proveedores y cualquier `modelOverrides` vosotros habéis fijado Quédate intacto. El agente principal lee `models.json` Cuando se inicia una sesión, así que empieza una nueva sesión después de conectarlo.
+
+Aside mantiene un catálogo de modelos separado para cada perfil registrado, incluidos los perfiles locales. Listas de OpenCodex todos los perfiles registrados, incluidos los perfiles locales, y pueden sincronizarlos o controlar un perfil a la vez. Cambiar una integración nunca cambia la cuenta activa de Aside. Un prior La conexión Aside permite todos los perfiles de forma predeterminada; las exclusiones individuales sobreviven a las sincronizaciones posteriores.
+
+Una advertencia específica para Aside: la aplicación en ejecución reescribe `models.json` El mismo, así completamente salir y reabrir Aside después de aplicar, de la misma manera que Claude Desktop necesita un reiniciar. El bloque de Aside es solo loopback y nunca lleva una credencial real.
+
+La integración administrada de Raycast es compatible **macOS y Windows**. Proveedores personalizados es un **Raycast Pro** característica: en un plan libre el archivo todavía está escrito, pero
+`ocx integration client status --client raycast` y el **Conectar** informe de página Una advertencia, porque Raycast no lo leerá. En macOS o Windows, abra Raycast → Configuración → AI → **Revelar proveedores Config** Una vez así, el `ai` La carpeta existe. En estas plataformas compatibles, opencodex utiliza esa carpeta como su señal de instalación. e informa que el cliente no está instalado hasta que existe. Linux no es compatible, Incluso si la carpeta existe.
+
+El campo de estado `aiDirPresent` Sólo los informes sobre si `~/.config/raycast/ai` existe, independientemente de si la aplicación Raycast está instalada o la plataforma es compatible. No prueba que Raycast esté instalado o sea utilizable. Las impresiones CLI `plan` en un línea separada y agrega la instrucción de configuración macOS/Windows cuando `aiDirPresent` es Falso; `--json` preserva el estado en bruto, incluyendo el estado anidado `raycast` bloque. Raycast lee `~/.config/raycast/ai/providers.yaml` en macOS y Windows por igual y No honra `XDG_CONFIG_HOME`, por lo que el camino no es reubicable.
+
+El bloque administrado es un elemento, `id: opencodex`En el archivo de `providers`
+secuencia: `name: OpenCodex`, `base_url: http://:/v1`, y cada modelo con su `abilities` — el conjunto de exportadores `tools` y `system_message` a
+`true` como un convenio de exportación de clientes, `vision` sigue las modalidades de entrada del catálogo, `reasoning_effort`
+se establece cuando el modelo tiene una escalera de esfuerzo, y `temperature` se apaga por Modelos de razonamiento. Otros proveedores en el archivo se conservan, y deshabilitar elimina solo el elemento OpenCodex. Raycast recoge el cambio tan pronto como el archivo es guardado, no se necesita reiniciar; los modelos aparecen en el selector de modelos de Raycast agrupados bajo **OpenCodex**. Raycast soporta opcional `api_keys`, pero OpenCodex intencionadamente los omite y rechaza objetivos que no son de bucle invertido o autenticados para admisión; esta integración no puede suministrar el encabezado de admisión requerido de OpenCodex.
+
+La preferencia privada macOS es solo una sugerencia Pro de asesoramiento; Windows nunca lo lee y informa el plan como desconocido. La detección de planes no autoriza ni bloquea una escritura. Los metadatos de exportación no tienen una bandera autorizada de soporte de herramientas, por lo que `tools: true` no hace Demostrar que cada modelo enrutado soporta herramientas. Las banderas de visión y esfuerzo siguen los metadatos del catálogo; Apagar la temperatura para una escalera de esfuerzo es un comportamiento conservador de exportación. Se conservan los valores de los proveedores; No se garantiza que el formato y los comentarios de YAML sobrevivan. El formato está documentado en
+[manual.raycast.com/ai/proveedores personalizados](https://manual.raycast.com/ai/custom-providers).
+
+Las exportaciones y descargas de paneles de Raycast CLI utilizan el destino del servidor en ejecución y política de admisión, incluyendo un oyente de bucle de retorno no autenticado configurado. `ocx ensure`
+no actualiza Raycast desde su instantánea de configuración guardada: puede diferir de la Ejecutar el servidor. El inicio del servidor y la sincronización explícita siguen siendo las rutas de actualización del catálogo.
+
+
+Cursor tiene una pestaña, pero no es uno de estos interruptores. Cursor regular llama a los puntos finales personalizados desde su propio backend, por lo que un proxy de bucle es inalcanzable sin un túnel público, y Cursor La construcción de inferencia privada separada está configurada dentro de Cursor. Los **Cursor** La pestaña es de solo lectura: detecta qué compilación está instalada, muestra la clave Base URL y API para pegar en Cursor, y informa la última solicitud Cursor hecha al proxy. Véase
+[Inferencia privada de Cursor](/es/guides/cursor-private-inference/).
+
+Los caminos honran el propio entorno de cada cliente anulan donde tiene uno. Para OMP,
+`OMP_PROFILE` gana sobre `PI_PROFILE` por la presencia, incluso cuando está explícitamente vacío. Un perfil con nombre usos `PI_CONFIG_DIR` como un nombre de directorio relativo a la casa del usuario e ignora `PI_CODING_AGENT_DIR`; sin un perfil con nombre,
+`PI_CODING_AGENT_DIR` gana. OMP admite encabezados a nivel de proveedor, pero esta integración inicial es deliberadamente loopback-only; remoto `x-opencodex-api-key` cableado es diferido. Reubicado
+`HERMES_HOME`, `KIMI_CODE_HOME`, y `XDG_CONFIG_HOME` Los caminos son seguidos en lugar de No lo creo. La tabla muestra el valor predeterminado de cada cliente.
+
+Para los modelos nativos OpenAI, el bloque generado OMP selecciona su nivel de modelo Responses API, preservando Entrada de imágenes y controles de esfuerzo de razonamiento. Los modelos enrutados conservan el Chat Completions del proveedor dialecto para que sus adaptadores existentes sigan siendo compatibles.
+
+OpenClaw tiene varios, y hacen diferentes trabajos. `OPENCLAW_CONFIG_PATH` selecciona el archivo; `OPENCLAW_STATE_DIR`, `OPENCLAW_PROFILE` y `OPENCLAW_HOME` seleccionar el estado directorio, que es también lo que la detección mira a — para un perfil o reubicado a casa todavía se lee como instalado, mientras que una anulación de ruta de configuración mueve solo el archivo. Si usted Todavía en el más viejo `.clawdbot` diseño, que se encuentra también: el directorio moderno gana cuando existe, y el legado se usa cuando es el único allí.
+
+Estos deben ser **Caminos absolutos** o comenzar con `~`. A uno relativo se le niega más bien resuelto, porque significaría cualquier directorio que cada proceso iniciar en — y esa ruta se almacena con la copia de seguridad, por lo que tiene que nombrar el mismo archivo Mañana como hoy.
+
+opencodex los lee desde su propio entorno. Si su puerta de enlace se ejecuta con un perfil o una casa reubicada, inicie opencodex con el mismo conjunto de variables, o siga correctamente una instalación diferente.
+
+
+
+## Las otras cinco superficies no son interruptores
+
+**API Llaves** administra las credenciales de opencodex y no es un cliente en absoluto. **Codex CLI** está cableado por el propio servicio proxy — a partir de opencodex lo aplica, deteniéndolo restaura el enrutamiento nativo — para que no haya nada que cambiar por archivo. **Claude** mantiene su propio indicador de habilitación y flujo Guardar/Aplicar del Escritorio, y **Grok Build** mantiene su select-then-apply modelo de cerca. Esas semánticas son anteriores a esta característica y no cambian.
+**Cursor** escribe nada en absoluto: su pestaña muestra la detección, los valores de puerta de enlace y el último solicitud vista, y el resto ocurre dentro de la Inferencia Privada Cursor.
+
+
+
+## Reversión
+
+Cada escritura exitosa toma una instantánea de su archivo *primero*Así que el estado que tenías es Siempre recuperable:
+
+- **Deshacer** aparece en la operación más reciente cuando el archivo aún coincide con lo que escribimos.
+- **Restaurar este punto…** aparece en operaciones más antiguas, o cuando el archivo esa operación. Restaurar a través de tal cambio pide una segunda vez antes de reemplazar sus ediciones más recientes — y los respalda también, de modo que la restauración se puede deshacer.
+- Se mantienen 10 copias de seguridad por cliente. Más allá de eso, se eliminan los archivos de instantánea más antiguos y sus filas de historia leen **La copia de seguridad expiró**.
+
+Desactivar elimina solo las entradas opencodex registradas como propias. Si su archivo ha cambiado Después de que lo escribimos, lo que sucede depende de si nuestras propias entradas aún están intactas. y en el formato del archivo. Para configuración estrictas JSON (OpenCode, Pi), una edición **al lado**
+nuestro bloque — agregando un servidor MCP, un proveedor de su propio — se muestra como **Actualización necesaria**: refrescante se fusiona alrededor de sus entradas y las mantiene, aunque el formato puede ser normalizado. La excepción es algo JSON no puede reescribir exactamente — un no-finito número como `1e999`, un número que una reescritura redondearía (un entero muy grande, o un tan pequeño que colapsa a cero), `-0`, la misma clave escrita dos veces en un objeto, o anidando más profundamente que 1000 niveles — que bloquea el interruptor en su lugar, por lo que nada se cambia o se cae silenciosamente.
+**OMP, DSH y Hermes** no se ven afectados por las ediciones de hermanos también, por una razón diferente: sus escritores parchear solo sus propios rangos de proveedores administrados en byte, por lo que el resto de la El archivo nunca se reescribe. Para el resto de formatos que pueden contener comentarios (OpenClaw, Código Kimi, gjc, Código MiniMax, Raycast — JSON5 y TOML escritos como documentos completos, o genéricos YAML sin preservación de la fuente), o cada vez que nuestras propias entradas fueron editadas, el interruptor se bloquea y desactiva. que adivinar qué ediciones eran tuyas.
+
+Esa cerradura ya no es un callejón sin salida. Un cliente conflictivo muestra **Sustituir** junto a su cambiar, tanto en la tarjeta de visión general como en la propia página del cliente. Reemplaza lo que mantiene nuestra configuración con el bloque que opencodex escribiría, y pregunta primero: El diálogo nombra el archivo, dice lo que se pierde y señala la instantánea que lo hace Inhabitable. El interruptor en sí permanece bloqueado, porque el interruptor no puede saber qué ediciones que querías mantener — solo tú puedes decirlo. Nada más está relajado: un archivo que no podemos parse, o uno cuya estructura no podemos razonar, todavía se niega.
+
+
+
+## Afinidad de sesión Hermes
+
+Los generados `providers.opencodex` El bloque incluye `session_affinity_header: session-id` para todos modelos. Esto nombra un encabezado; Hermes proporciona su identificador de conversación dinámica. OpenCodex hace No escribir un identificador estático compartido o cambiar `api_mode` para permitir la afinidad.
+
+Usar una versión de Hermes compatible [Opciones de solicitud por proveedor](https://hermes-agent.nousresearch.com/docs/user-guide/configuring-models#per-provider-request-options). Las versiones anteriores pueden ignorar o descartar la opción; una configuración válida por sí sola no prueba que Hermes envía el encabezado. Aislamiento de conversación, linaje de compactación y solicitudes auxiliares/niños seguir la semántica de afinidad de Hermes. Esta configuración no garantiza una tasa de éxito de caché particular.
+
+Para una integración administrada existente, abra **Conectar Hermes →**, revisión **Aplicar**, y confirmar la actualización. Hasta entonces, se muestra **Actualización necesaria** y actualización implícita del catálogo lo deja sin cambios, incluyendo su lista de modelos. Leer la página no actualiza la configuración. Después de aplicar, normal la actualización del catálogo reanuda y conserva la configuración; **Sustituir** también lo incluye.
+
+Si ya has añadido exactamente `session_affinity_header: session-id` dentro del bloque administrado, Aplicar puede adoptarlo cuando todas las demás configuración administradas aún coinciden con el registro de propiedad. Este es el estrecho excepción a la regla de conflicto anterior: otras ediciones, un nombre de encabezado diferente o un bloque sin un El registro de propiedad coincidente aún requiere resolución de conflictos. Configuración y comentarios de YAML no relacionados permanecer intacto, y el flujo de trabajo existente de instantáneas y restauración se aplica a la actualización.
+
+
+
+## Vista previa y confirmación de cambios
+
+En el panel, Aplicar, Reemplazar, Deshabilitar y Restaurar comienzan con una vista previa. El diálogo muestra exactamente cuál La configuración administrada cambiará, incluyendo las rutas de cambio limitadas y si cada cambio se agrega, actualiza o elimina un valor. Revisa ese plan antes de confirmarlo.
+
+Cuando un plan informa que no hay cambios, significa que el documento del cliente administrado ya tiene el documento solicitado. Estado. Para un perfil seleccionado de Aside, la confirmación aún puede guardar la preferencia de sincronización de ese perfil incluso aunque el documento administrado no cambia.
+
+Si el archivo cambia después de revisarlo, la escritura se rechaza como obsoleta. El diálogo sustituye el viejo plan con el actualizado y te pide que confirmes de nuevo; nunca vuelve a intentar automáticamente. Si una vista previa no está disponible temporalmente, vuelva a cargar la página normalmente e inicie el acción de nuevo.
+
+Aside utiliza la misma vista previa y flujo de confirmación para un perfil seleccionado a la vez. **Sincronizar todo perfiles** sigue siendo una acción masiva separada y no está vinculada a una vista previa combinada.
+
+
+
+## Qué esperar, honestamente
+
+**Los archivos de configuración administrados están limitados a 4 MiB (4,194,304 UTF-8 bytes).**
+El lector de integración compartida rechaza los archivos más grandes como inseguros para leer, y el escritor rechaza una configuración combinada que excede el mismo límite con `write_failed`, dejando la configuración original sin cambios. El marcador de recuperación de Cline también tiene este límite; incluye el contenido de antes y después de ambos archivos, además de metadatos, por lo que Cline puede presionar el botón límite incluso cuando cada archivo individual es menor de 4 MiB.
+
+Realice una copia de seguridad de la configuración del cliente usted mismo, luego elimine las entradas innecesarias o reduzca la lista de modelos exportados antes de volver a intentarlo. **Sustituir** No sobrepasa el límite. Si el La configuración debe seguir siendo más grande, administrarla manualmente en lugar de usar el interruptor Connect.
+
+**El formato generalmente no se conserva.** Aplicando parses a una configuración y la escribe de nuevo JSON, JSON5 y TOML pueden reformatearse y los comentarios en JSON5 o TOML se pierden. OMP, DSH y Hermes son las excepciones: solo los parches OMP y Hermes `providers.opencodex`. Solo parches DSH `[id=llm-pi-ai].config.providers.opencodex` en el parche Perfil de escritorio, o `llm-pi-ai.providers.opencodex` en `settings.yaml` cuando no hay perfil de escritorio. Sus escritores YAML conservan comentarios de proveedores no relacionados y formatean byte por byte. Si eso es exacto El rango de fuente no se puede identificar de manera segura, la operación se niega en su lugar. Para otros clientes, use Restablezca cuando necesite los bytes de archivo anteriores: la instantánea es una copia literal.
+
+**Si un valor no puede ser reescrito fielmente, el interruptor se niega.** La ronda trip cubre los tipos de valor que estos formatos usan en la práctica, y donde no lo hace — un archivo TOML usando `inf` o `nan`Por ejemplo, que el analizador a nuestra disposición no puede leer con precisión — aplicando paradas y lo dice en lugar de escribir un cambió de valor y lo llamó éxito. Verá el archivo con nombre y nada en El disco se habrá movido. La edición de ese archivo a mano todavía funciona; es solo nuestro reescribir automáticamente que declina.
+
+Las fechas y horas de TOML también rechazan las reescrituras administradas: el paso de fusión convertiría estas valores mecanografiados en cadenas citadas. Esto incluye valores dentro de arrays y mesas. Las cadenas de fecha citadas siguen siendo compatibles; debe conservarse una fecha no citada editando la configuración manualmente.
+
+**Pi, Kimi Code, gjc, MiniMax Code, Prime Agent, Aside, Raycast, omo y la integración administrada de DSH solo funcionan contra un enlace de bucle.**
+Los cuatro primeros no tienen ningún campo de configuración para el `x-opencodex-api-key` Encabezado de un enlace non-loopback requiere. DSH tiene un mapa genérico de cabeceras, pero rc.6 no documenta esa admisión dedicada encabezado como un contrato de integración compatible, por lo que el escritor administrado falla cerrado en lugar de Adivinando. El bloque del proveedor del agente principal acepta encabezados, pero el cableado remoto de credenciales es aplazado desde su integración inicial. Déles acceso de bucle a través de un túnel SSH o un reenviador local que agregue el encabezado.
+
+**La integración OMP generada también es solo de bucle deliberadamente.** OMP hace apoyo cabeceras a nivel de proveedor, pero esta integración inicial no emite
+`x-opencodex-api-key` cableado de credenciales. La configuración manual remota de OMP está fuera del Integración gestionada por ahora.
+
+**El código Kimi no puede contener una referencia de entorno,** por lo que su configuración lleva un
+`opencodex-loopback` En lugar de una llave. Nunca se escribe una credencial real en cualquier configuración de cliente.
+
+**Porque `ocx opencode`, los bloques de proveedores del lanzador ganan.** Ese lanzador inyecta
+`provider.opencodex` y `providers.opencodex` a través `OPENCODE_CONFIG_CONTENT`, que supera en rangos a las mismas entradas en el disco — el resto de la configuración de código abierto sigue siendo aplicable como De costumbre. Esos bloques se construyen a partir de los mismos metadatos eficaces del modelo canónico que el modelo canónico. las exportaciones, por lo que el lanzador y la integración administrada describen los mismos modelos, límites y opciones de razonamiento. El interruptor aquí es lo que importa cuando se inicia `opencode` directamente.
+
+
+
+## Desde la terminal
+
+Las mismas operaciones están disponibles sin rumbo:
+
+```bash
+ocx integration client status
+ocx integration client enable --client hermes
+ocx integration client disable --client hermes
+ocx integration client history --client hermes
+ocx integration client restore --op [--confirm-drift]
+```
+
+
+
+### Previsualizar y enlazar una escritura de terminal
+
+Los comandos directos existentes siguen siendo compatibles. Para vincular un escrito a un escrito revisado primero, inspeccionar el estado y guardar una vista previa:
+
+```bash
+ocx integration client preview --help
+ocx integration client status --client hermes --json
+ocx integration client preview --client hermes --operation apply --json > hermes-preview.json
+```
+
+Revisión `state`, `foreignEdit`, estructural `changes`, `canApply` y `willChange`. Valid rechazó y no-op planes de salida 0 porque la inspección tuvo éxito; nada fue aplicado. El plan no contiene valores secretos ni diferencias de archivos completos. Utiliza los ya existentes evidencia de catálogo pasiva y nunca actualiza en secreto a los proveedores. Si no está disponible, resolver la disponibilidad del catálogo por separado antes de solicitar una nueva vista previa.
+
+Solo después de revisar un plan aplicable y elegir la escritura:
+
+```bash
+PLAN_FINGERPRINT="$(jq -er 'select(.canApply == true) | .fingerprint' hermes-preview.json)"
+ocx integration client enable --client hermes --plan-fingerprint "$PLAN_FINGERPRINT" --json
+ocx integration client status --client hermes --json
+```
+
+La huella digital es evidencia de concurrencia, no autorización. El compromiso acepta `pN:`
+seguido de 32 dígitos hexadecimales en minúsculas; a `pN:unbound` no puede comprometerse. Repetir cliente/acción/perfil/opciones exactos. Vista previa `overwrite` mapas para habilitar con
+`--overwrite-conflict`; vista previa `disable` mapas a desactivar. Salidas 5 de confirmación de estado, Imprime la guía de re-previsualización en stderr y deja stdout vacío. Nunca adopta una huellas dactilares o reintentos. Otros fallos usan el uso 2, no encontrado 4, entorno de ejecución/malformado 1, con stderr seguro en lugar de una envolvente de error JSON.
+
+
+
+### Inspeccione la deriva de restauración antes de reemplazarla
+
+Usar un historial real opId; `op-example` A continuación es ficticio:
+
+```bash
+ocx integration client history --client aside --profile 1 --json
+ocx integration client restore --op op-example --client aside --profile 1 --preview --json
+```
+
+Si se rechaza la deriva, inspeccione las ediciones. Cuando la sustitución de ellos se pretende explícitamente, vista previa con `--confirm-drift`, revisar, luego vincular esa misma intención:
+
+```bash
+ocx integration client restore --op op-example --client aside --profile 1 --preview --confirm-drift --json > restore-preview.json
+```
+
+Después de la revisión:
+
+```bash
+RESTORE_FINGERPRINT="$(jq -er 'select(.canApply == true) | .fingerprint' restore-preview.json)"
+ocx integration client restore --op op-example --client aside --profile 1 --confirm-drift --plan-fingerprint "$RESTORE_FINGERPRINT" --json
+ocx integration client status --client aside --profile 1 --json
+```
+
+Las escrituras de previsualización/vinculación de Aside requieren un perfil, no un destino agregado. Genérico restaurate omite cliente/perfil; el servidor obtiene el cliente que no es Aside de opId. El plan devuelto no contiene opId o todas las entradas de comando originales, por lo que debe ese contexto. `--preview` No se puede combinar con `--plan-fingerprint`.
+
+
+
+### Retirar un registro de recuperación antiguo
+
+Esto retira permanentemente el registro y la copia de seguridad; no restaura ni desactiva la integración. Después de inspeccionar el historial y elegir perder ese punto de recuperación:
+
+```bash
+ocx integration client history remove --op op-example --client aside --profile 1 --yes --json
+ocx integration client history --client aside --profile 1 --json
+```
+
+Utilice el opId seleccionado. Ningún selector se dirige a la revista global; `--client aside`
+direcciones agregar el historial de Aside y opcional `--profile` Lo acorta. Otro cliente Los selectores son rechazados para su eliminación. La última fila está protegida. Un recibo con
+`snapshotRemoved:false` se ha comprometido la jubilación con limpieza incompleta y salida 1; no es reversión y no debe desencadenar la eliminación repetida. `journal remove` Es un alias.
+
+`--overwrite-conflict` Es la forma terminal de **Sustituir**:
+
+```bash
+ocx integration client enable --client zcode --overwrite-conflict
+```
+
+Como `--confirm-drift`, nunca se supone que — sin él un conflicto sigue siendo rechazado. Se aplica solo a `enable`; forzando a *desactivar* sobre un conflicto borraría un bloque nunca escribimos, por lo que esa combinación es rechazada.
+
+Para MiniMax Code, conecte el proveedor una vez y ejecute a través del envoltorio verificado:
+
+```bash
+ocx integration client enable --client mcode
+ocx mcode
+```
+
+Una vez conectados, `ocx sync` y `POST /api/sync` actualizar propiedad MCode, Pi, Aside, catálogos de Raycast, omo, OpenCode y Kilo con la selección actual del modelo, Escaleras de razonamiento-esfuerzo. El inicio proxy actualiza un catálogo de Raycast propio. Cambios en visibilidad del modelo, selección del proveedor o configuración preestablecidos también actualizan Pi conectado, Aside, Catálogos de Raycast, omo, OpenCode y Kilo. Los bloques perdidos, editados en el extranjero o inseguros permanecen intactos, al igual que los bloques de propiedad anterior. que eliminaste manualmente. Un perfil Aside habilitado es una excepción a la actualización habitual de propiedad exclusiva: si su cuenta El directorio existe y nunca ha tenido un bloque propio, la sincronización puede crear su primer bloque cuando Esta ranura está vacía. Una conexión Aside anterior habilita este comportamiento para todos los registros. perfiles por defecto. La sincronización no crea directorios de cuenta faltantes ni reemplaza los bloques manuales. Una actualización rechazada o superpuesta se informa por separado para cada cliente. Empezar una nueva pi, OpenCode, o sesión Kilo o completamente salir y volver a abrir Aside para cargar el archivo actualizado. Aside actualización requiere un [proxy de ejecución compatible](#aside-profile-controls).
+
+Si los modelos informan **“Selección de modelo guardada”** junto con una advertencia de actualización del cliente, el la selección ya está guardada; no se pudieron actualizar uno o más archivos de cliente. Los nombres de advertencia el cliente afectado y el perfil de Aside, cuando corresponda, y explica la negativa. Abrir
+**Conectar** Inspeccionar a ese cliente o perfil antes de comenzar una nueva sesión. Resolver el problema reportado, luego reintento `ocx sync`; una operación de superposición debe terminar primero. Si el advertencia incluye una ruta de respaldo o dice que la recuperación no terminó, inspeccionar ese estado de recuperación antes de volver a intentarlo. Una selección exitosa guardar solo no confirma la recuperación del archivo de cliente.
+
+La plataforma MiniMax separada CLI (`mmx`) no es una integración de archivos-toggle. Sus comandos de texto usan MiniMax's Anthropic- punto final compatible, así OpenCodex proporciona un lanzador aislado en loopback:
+
+```bash
+ocx mmx text chat --model anthropic/claude-opus-5 --message "Hello"
+ocx mmx text repl --model openai/gpt-5.6-sol
+```
+
+Solo `mmx text chat` y `mmx text repl` están representados. Ejecutar llano `mmx` por MiniMax-nativo de la imagen, vídeo, discurso, música, visión, búsqueda, cuota, autenticación, configuración, archivo y actualizar los comandos. El contenedor utiliza una configuración temporal que contiene solo un no secreto loopback placeholder; nunca carga su `~/.mmx` credenciales de clave OAuth o API, y Se niega `--api-key`, `--base-url` y `--region` Anulaciones. Véase
+[Clientes MiniMax](/es/guides/minimax/) para el flujo de trabajo completo y los límites.
+
+`--confirm-drift` Nunca se asume. Si el archivo ha cambiado después de la operación restauración, el comando se niega y le dice, porque reemplazar sus ediciones más recientes es su decisión de tomar.
+
+Los detalles del cliente se verificaron con el formato de configuración propio de cada proyecto; vea el notas de investigación en `devlog/_fin/260802_client_toggle_api/002_client_toggle_matrix.md`
+para lo que se comprobó y cuándo.
+
+
+
+## Aside controles de perfil
+
+Los controles de perfil Aside y la actualización Aside se realizan mediante `ocx sync` requieren un funcionamiento Proxy ocx que admite las API de perfil Aside. Actualizar el CLI solo no actualiza un ya en ejecución proxy. Si el proxy no está disponible o es demasiado antiguo, la operación Aside no puede completo; el CLI nunca vuelve a escribir archivos de perfil Aside localmente.
+
+Actualice la instalación de ocx utilizada por el proxy y, a continuación, reinicie el proxy (o inícielo si se detiene). Reintentar `ocx sync` o el comando profile. Después de la actualización de los archivos de perfil con éxito, salga completamente y vuelva a abrir Aside para que cargue los nuevos catálogos.
+
+```bash
+ocx integration client status --client aside --json
+ocx integration client enable --client aside
+ocx integration client disable --client aside --profile 1
+ocx integration client history --client aside --profile 1
+ocx integration client restore --client aside --profile 1 --op
+```
+
+El número de perfil es el ID de cuenta mostrado por el comando status. Omisión `--profile` en un Aside toggle aplica el estado deseado a cada perfil registrado. Un cambio de perfil deja hermanos sin cambios. La configuración de sincronización deseada se guarda antes de los cambios de archivo; estado real y cualquier Se informa de la negativa para cada perfil. Un resultado de volumen parcial no es un éxito totalmente aplicado y el CLI sale distinto de cero. Deshacer restaura la intención de sincronización del perfil seleccionado, así como su archivo, por lo que una sincronización posterior no invierte silenciosamente Deshacer.
+
+Los [perfil API](/es/reference/management-api/#aside-profile-controls) devuelve HTTP 200 por un operación a granel exitosa y HTTP 207 con `ok: false` si algún perfil se niega. Inspeccione cada Entrada en `results`Los perfiles exitosos no se devuelven cuando otro falla. Deseado las configuración permanecen guardadas, por lo que vuelve a intentarlo después de abordar el perfil afectado en lugar de asumir Todo el cambio falló. Si se produce un error al guardar esas configuración, no se cambiarán los archivos de perfil.
+
+Para una actualización específica de perfiles Aside elegibles, en lugar de una amplia sincronización de catálogo:
+
+```bash
+ocx integration client sync --client aside --json
+ocx integration client status --client aside --json
+```
+
+Esto utiliza el propietario certificado Aside existente y no tiene selector de perfil ni local fallback. `{results:[]}` sale 0 y significa que no hay perfiles elegibles, no se aplican escrituras. Cualquier fila fallida devuelve la salida 1 mientras los perfiles exitosos permanecen actualizados. Conservar rechazo por perfil, información de copia de seguridad residual y etiquetada por separado; Inspeccione el perfil afectado antes de volver a intentarlo. Esta actualización está separada de cada flujo de trabajo de vista previa/mutación enlazada del perfil.
+
+Sincronizar actualiza solo los perfiles cuya preferencia de sincronización está activada, por lo que un resultado vacío no es un error. Si `ocx integration client status --client aside` Muestra un perfil como `off (stale)`, estado imprime los comandos para volver a conectarlo: review `ocx integration client preview --client aside
+--operation apply --profile N`, y correr `ocx integration client enable --client aside --profile N`
+solo si la vista previa permite el cambio y usted lo acepta. Nada se vuelve a habilitar automáticamente. Un mal formado `asideProfileSync` Bloquear en `config.json` desactiva cada perfil y registra un Cuando se carga la configuración.
+
+Cada perfil tiene una propiedad e historia separadas. Ediciones de usuarios existentes, rutas inseguras y enlaces catálogos son rechazados; los controles explícitos de sobreescritura y confirmación de deriva disponible. Cierre completamente y vuelva a abrir Aside para cargar los archivos de modelo modificados.
+
+
+
+
+## ZCode 3.14 y posteriores
+
+De forma predeterminada, ZCode 3.14 almacena sus proveedores personalizados en `~/.zcode/v2/provider_config.json` e izquierda
+`~/.zcode/v2/config.json` solo se puede acceder a través de una importación de un solo disparo que se ejecuta cuando el nuevo archivo está desaparecido. ZCode crea el nuevo archivo la primera vez que se ejecuta, por lo que en cualquier instalación que haya sido lanzado la importación ya se gastó y un escribir a `config.json` No llega a nada.
+
+ZCode puede reubicar su raíz de datos con un valor absoluto `dataBaseDir` en
+`~/.zcode/v2/setting.json`. Este archivo bootstrap siempre se queda bajo el home predeterminado; El proveedor se mueve a `/.zcode/v2/provider_config.json`.
+`ZCODE_DATA_DIR` tiene precedencia y nombra el `.zcode` raíz directamente, mientras que
+`ZCODE_PERSONAL_PROVIDER_CONFIG_FILE` Tiene prioridad para el archivo del proveedor.
+`ZCODE_DATA_BASE_DIR` es un selector nativo separado y no es un alias para `ZCODE_DATA_DIR`.
+
+Los configuración de arranque ilegibles, mal formados o relativos dejan la raíz activa desconocida. El bootstrap debe ser un archivo regular de como máximo 4 MiB; enlaces simbólicos y archivos especiales se rechazan durante el descubrimiento de rutas de exportación e integración. Reparar el archivo bootstrap o Suministrar una explícita `ZCODE_DATA_DIR` para seleccionar la raíz de datos deseada. Aplicar, sobrescribir y actualizar los residuos con un mensaje de reparación en lugar de reclamar un éxito Legado escrito. Un archivo de proveedor explícito existente todavía puede establecer el almacén activo. La propiedad registrada en la configuración o tienda predeterminada original mantiene su ruta, huellas dactilares y el registro de la propiedad. y deshacer el historial; deshabilitar elimina ese bloque original antes de que una habilitación posterior pueda tienda reubicada. Un viejo deshacer también se niega, mientras que otro camino es dueño de la integración. Si un selector explícito anterior ya no identifica el archivo de propiedad, restaure ese selector antes de la desactivación; opencodex retiene el registro y se niega a abandonar el bloque.
+
+opencodex escribe `provider_config.json` directamente donde pueda. Al permitir la integración se agrega el
+`opencodex` regla del proveedor para ese archivo, una actualización del catálogo lo actualiza y la desactivación elimina exactamente lo que opencodex puso allí. Cada otra regla en el archivo se deja sola, incluyendo una regla de otro proveedor mantiene para un ID de modelo que también aparece en la nuestra. Una regla que lleva el `opencodex` id que opencodex no escribió es un conflicto en lugar de algo para asumir el control; resolverlo en ZCode, o Utilice la sobreescritura explícita.
+
+Un almacén de proveedor ilegible o que no es de archivos también rechaza las escrituras; no se trata como un almacén ausente que permite la importación heredada.
+
+Otras dos situaciones aún se niegan en lugar de escribir. Un bloque opencodex aplicado antes de que ZCode mantiene la integración en `config.json`: deshabilitelo allí primero, luego vuelva a habilitarlo para escribir La nueva tienda. Y un `provider_config.json` cuyo `schemaVersion` no es un opencodex ha observado se informa en lugar de fusionarse, porque ese archivo contiene todos los proveedores que ZCode tiene y afirma una forma en ella cambiaría un silencioso no-op por una pérdida silenciosa. Nombres de estado del archivo ZCode lee cuando la integración no lo está escribiendo.
+
+En ese segundo caso, agregue el proveedor en la configuración de ZCode: base URL
+`http://127.0.0.1:10100/v1` (ajuste el puerto a su enlace), cualquier clave no vacía y los ID de modelo Desde `ocx export --client zcode`. Borrar `provider_config.json` para volver a activar la importación de ZCode es no compatible — descarta todos los proveedores ZCode mantiene allí.
+
+## Cline CLI
+
+Esta integración se dirige a la actual Cline CLI/compartido SDK proveedor, cuyo esquema nativo tiene
+`version: 1`. Legacy VS Extensión de código `globalState`El almacenamiento /secret no se migra ni se detecta como esta integración. Ejecute Cline una vez para inicializar su directorio de configuración.
+
+**Detenga Cline antes de habilitar, sincronizar, deshabilitar o restaurar la integración.** OpenCodex escribe
+`providers.opencodex` en ambos `providers.json` y hermano `models.json`. El primer archivo contiene la conexión OpenAI Responses con un marcador de posición de bucle de retroceso no secreto; el segundo mantiene la catálogo de modelos enrutados filtrados, incluido el contexto disponible y los metadatos de imágenes. Proveedor existente las entradas y la selección de proveedor por defecto permanecen sin cambios.
+
+```bash
+ocx integration client list --json
+ocx integration client enable --client cline
+ocx integration client history --client cline
+ocx integration client restore --op
+```
+
+Después de habilitar, reinicie Cline y seleccione OpenCodex, o inicie con
+`cline --provider opencodex --model `. Los cambios de catálogo se leen cuando Cline se reinicia. Cline se excluye de la actualización de catálogo desatendida; después de cambiar la ruta selección de modelo, detener Cline y ejecutar `ocx sync` o habilitar la integración de nuevo para actualizarlo. Un modelo seleccionado se conserva mientras sigue siendo encaminado y borrado si se elimina del catálogo exportado.
+
+`CLINE_PROVIDER_SETTINGS_PATH` Anula el archivo principal. En caso contrario `CLINE_DATA_DIR` selecciona el directorio de datos, entonces `CLINE_DIR` Selecciona la raíz, luego `~/.cline` se utiliza. El modelo de archivo es siempre
+`models.json` junto al archivo de proveedor seleccionado. Las anulaciones deben ser absolutas o comenzar con `~`. Mirror command-local Cline `--config` Vías con `CLINE_PROVIDER_SETTINGS_PATH` al comenzar OpenCodex. Un camino primario llamado `models.json` se rechaza porque los archivos deben ser distintos.
+
+Cada reemplazo de archivos es atómico, pero ninguna operación del sistema de archivos reemplaza a ambos simultáneamente. Una operación de diario captura ambos archivos originales; un error de escritura o contabilidad compensa Ambos. Una operación interrumpida conserva un registro de recuperación privado. Informes de estado incompletos recuperación como insegura, y la mutación explícita siguiente recupera solamente si ni archivo ni su La propiedad tiene una edición no relacionada. Si la recuperación se niega, preservar los archivos y la ruta de recuperación reportado por la operación; resolver el conflicto antes de volver a intentarlo.
+
+Deshacer restauraciones **ambas cadenas de bytes originales**incluyendo un archivo que originalmente no existía. Las ediciones después de la operación requieren el explícito existente. `--confirm-drift`; el par editado es Respaldado primero. Una entrada OpenCodex ocupada requiere la `--overwrite-conflict` opt-in. Deshabilitar elimina las dos entradas administradas; no restaura una entrada externa anterior. Usar Deshacer Por eso. La retención y caducidad de instantáneas siguen las mismas reglas que otras integraciones.
+
+La descarga `cline-config-bundle.json` Contiene dos miembros nativos del documento: `settings` por
+`providers.json`, y `catalog` por `models.json`. No es en sí mismo un archivo de configuración de Cline. Prefiero el comando de integración para una combinación y retroceso diarios. El cableado de admisión remota no es apoyado por esta integración generada; requiere acceso de loopback no autenticado.
+
+
+
+## GitHub Aplicación de piloto conjunto
+
+La aplicación de escritorio GitHub Copilot puede usar opencodex como proveedor de modelos compatible con OpenAI. Esto es un configuración manual del cliente sin interruptor **Conectar**y está separado de la corriente
+`github-copilot` proveedor, que utiliza una suscripción de Copilot como backend para opencodex.
+
+1. Inicie opencodex y confirme que responde:
+
+ ```bash
+ curl http://127.0.0.1:10100/healthz
+ curl http://127.0.0.1:10100/v1/models
+ ```
+
+2. En la aplicación Copilot, abra **Configuración → Proveedores de modelos → Añadir proveedor** y entre:
+
+ | Campo | Valor |
+ |---|---|
+ | Nombre | cualquier etiqueta, por ejemplo `OpenCodex` |
+ | URL base | `http://127.0.0.1:10100/v1` (Ajuste el puerto a su enlace) |
+ | Clave API | Dejar en blanco en loopback |
+
+3. Sincronizar modelos desde el endpoint, o añadir uno por su `provider/model` id, y seleccionarlo.
+
+La aplicación utiliza `GET /v1/models` para el descubrimiento y `POST /v1/chat/completions` por turnos. Esos giros pasar por el enrutamiento de modelo normal de opencodex, por lo que se aplican las credenciales de proveedor, las cuentas y los combos de OAuth como lo hacen con cualquier otro cliente. Los campos de solicitud aceptados se enumeran en el
+[Referencia de formatos proxy](/es/reference/proxy-formats/).
+
+Si la aplicación informa que no hay modelos, compruebe que la base URL termina en `/v1` en lugar de
+`/v1/chat/completions` y que `/v1/models` devuelve un no vacío `data` matriz. Cuando opencodex escucha en una dirección no loopback, ponga una clave de admisión de datos (la token descrita bajo
+[acceso remoto](/es/reference/configuration/server/#remote-access), o un panel generado `ocx_…`
+clave) en el campo de clave API de la aplicación. La aplicación lo envía como `Authorization: Bearer`, que
+`/v1/chat/completions` acepta como admisión proxy y nunca se adelanta de origen; ver el
+[matriz de autenticación](/es/reference/proxy-formats/#authentication-matrix).
+
+
+
+## modelos de rol omo (Codex / LazyCodex)
+
+Cuando LazyCodex está instalado, la pestaña omo muestra un **omo (Codex / LazyCodex)** sección debajo de los controles omo basados en Pi, listado cada rol de agente Codex encontrado en `$CODEX_HOME/agents/*.toml`, con el modelo cada uno se fija a. Codex ejecuta un rol en ese pin sin importar el modelo que pida el padre, así que aquí es donde un El modelo de rol está decidido. LazyCodex cuenta como instalado cuando el `omo@sisyphuslabs`
+El complemento Codex está habilitado en `$CODEX_HOME/config.toml` y una copia instalada bajo
+`$CODEX_HOME/plugins/cache/sisyphuslabs/omo/` lleva su `lazycodex-install.json`. A `~/.omo`
+carpeta por sí sola no cuenta, porque el omo basado en Pi también lo crea. Sin LazyCodex el La sección está oculta y la línea de comandos informa que no está instalada. Elige un modelo y un razonamiento Esfuerzo en una fila y pulse Guardar. Una fila cuyo papel no tiene pin de modelo puede ahorrar un esfuerzo por sí misma; El rol sigue heredando su modelo:
+
+- opencodex actualiza solo la raíz `model = "..."` y `model_reasoning_effort = "..."` claves del archivo de ese rol. Las clavijas que faltan se insertan cerca de la parte superior. Elegir **Heredar el esfuerzo**, disponible en cada fila, envía `"effort": null` para borrar el pin de esfuerzo, eliminando su línea y comentario posterior. Las instrucciones del papel, otros comentarios y otras claves se dejan exactamente como estaban.
+- El modelo está escrito para `[codex].agents..model` en `~/.omo/omo.jsonc`, que LazyCodex 5.1.1 y posteriores se lee, y un esfuerzo cambiado LazyCodex apoya va a
+ `[codex].agents..reasoning` en la misma entrada. Si ese archivo no existe, no se crea. Si contiene comentarios se deja intacto, porque guardarlos los eliminaría; la pestaña lo dice, y puede Fije el valor allí a mano. Los enlaces simbólicos y los archivos no regulares son rechazados; en macOS y Linux, Un FIFO es rechazado sin esperar a un escritor. Un espejo omitido no deshace el archivo de rol guardado.
+
+Si el archivo de rol guardado tiene éxito pero la escritura omo.jsonc falla, el botón de la fila se convierte en
+**Reintentar omo.jsonc**, que reenvía la misma elección de esfuerzo, incluyendo un **Heredar el esfuerzo** claro (`null`) Hasta que ese reintento tenga éxito, un Guardar o Asignación automática posterior se aplica para el papel que deja el El esfuerzo por sí solo lleva consigo la elección pendiente; un esfuerzo explícitamente escogido toma su lugar.
+
+No pasa nada hasta que presiona Guardar; la sincronización o el reinicio de opencodex nunca cambia un archivo de rol. Las nuevas sesiones Codex recogen el cambio. Los mismos controles existen en la línea de comandos:
+
+```bash
+ocx agent roles
+ocx agent roles set explorer xai/grok-4.5
+```
+
+`ocx agent roles set --effort ` también establece el esfuerzo de razonamiento del rol: es Inserta o reemplaza el archivo de rol `model_reasoning_effort` Valorar y escribir `[codex].agents..reasoning`
+en omo.jsonc cuando LazyCodex tiene ese nivel (`ultra` se queda en el archivo de rol solamente, y un
+`reasoning` se elimina). En marcha `PUT /api/codex-agent-roles/{role}`Omitiendo `effort` mantiene el pin, un nivel lo establece, y `null` elimina el archivo de rol `model_reasoning_effort` La línea, su trail comentario, y el omo.jsonc `reasoning`. A Guardar que cambia solo el modelo deja ambos valores de esfuerzo como estaban. Omisión `model` deja el archivo de rol `model` pin y el omo.jsonc `model` Exactamente como eran, así que un rol sin un pin sigue heredando su modelo mientras su esfuerzo cambia o se borra; el panel de instrumentos envía esta solicitud de solo esfuerzo para tal fila. Cuando omo.jsonc se puede escribir, un rol sin una entrada allí obtiene una celebración solamente `reasoning` si el esfuerzo ahorrado es uno LazyCodex apoya (`none` Está escrito como
+`off`); para tal función, despejar el esfuerzo o ahorrar `ultra` No añade ninguna entrada. A `null` El modelo es rechazado con 400 `invalid_model`, porque un guardar nunca elimina un modelo pin, y una petición con ninguno `model` ni `effort` Fue rechazado con 400 `empty_update` antes del archivo de rol o omo.jsonc es lee. `ocx agent roles set` Siempre hay un modelo. Solo se puede eliminar un valor de cadena de una línea existente; se rechaza un valor multilínea o no de cadena con 409 `unsupported_model_value`, dejando ambos archivos sin cambios. La limpieza elimina solo el la anulación propia del rol: Codex resuelve entonces el esfuerzo como lo hace para cualquier rol sin uno (una valor de generación, el `[agents]` ej., por defecto, o la sesión principal), no un modelo fijo predeterminado.
+
+
+
+### Asignación automática
+
+Autoasignación es parte de omo (Codex / LazyCodex): se encuentra encima de la tabla de roles en esa sección y existe solo mientras se detecta LazyCodex. Sin él, el panel de control no muestra ninguno, el API Respuestas 409 `lazycodex_not_detected`, y `ocx agent roles suggest` es rechazada.
+
+Auto-assign propone un modelo para cada rol a la vez. opencodex pide su modelo Codex predeterminado (la raíz `model` en Codex `config.toml`) una pregunta: para cada función, dada su descripción y el inicio de sus instrucciones, qué nivel de capacidad (rápido, estándar o fronterizo) y ¿cuánto razonamiento (mirada, medida, completo o exhaustivo) necesita? Ese modelo nunca Elige un modelo. opencodex luego elige el modelo más barato de su lista de selector que alcanza el nivel:
+
+- Modelos listados bajo `codexRoleTiers` en la configuración opencodex (`{ "fast": [...], "standard": [...], "frontier": [...] }`) tiene ese nivel.
+- Otros modelos con un precio conocido se clasifican por precio y se dividen uniformemente en los tres niveles. Con sólo Uno o dos modelos de precio, el más caro es la frontera y el otro, si lo hay, es estándar.
+- Los modelos sin precio y sin nivel listado nunca son propuestos. Enumerarlos para incluirlos.
+
+Cada propuesta muestra el modelo, el nivel, el esfuerzo de razonamiento, una razón de una línea y lo que se movería. arriba o abajo. Un papel que el modelo no podría dimensionar claramente se muestra como no dimensionado, con la razón, y No se puede aplicar. No se escribe nada hasta que presione Aplicar en una fila o Aplicar todo. La aplicación utiliza el mismo guardar como picking a mano. Cada papel de tamaño cuyo modelo elegido tiene una escalera de esfuerzo no vacía obtiene una propuesta de esfuerzo, y aplicar o `--apply` Inserta o reemplaza su `model_reasoning_effort` valor. El esfuerzo se coloca en los propios niveles del modelo elegido: su nivel más bajo, su valor predeterminado, uno por encima de la otra. Por defecto, o su más alto. Una escalera vacía no da ninguna propuesta de esfuerzo (`proposedEffort: null`); Aplicar omite `effort` y deja cualquier pin de esfuerzo existente como estaba. Una propuesta nula nunca borra un alfiler.
+
+```bash
+ocx agent roles suggest
+ocx agent roles suggest --model xai/grok-4.5 --apply
+```
+
+## Kilo
+
+Kilo CLI, VS Code y JetBrains comparten una configuración global. Esta integración escribe
+`provider.opencodex` En el primer archivo existente entre `kilo.jsonc`, `kilo.json`,
+`opencode.jsonc`, `opencode.json`, y `config.json` bajo `~/.config/kilo`
+(`XDG_CONFIG_HOME` relocalizar ese directorio). Si no existe, el destino es
+`kilo.jsonc`. Las configuración del proyecto nunca se escriben. Kilo fusiona todos estos archivos globales. Si el candidato también define
+`provider.opencodex`, el estado nombra todos los archivos competidores y aplica y reemplaza la basura; eliminar `provider.opencodex` de esos archivos antes de permitir la integración. Un ilegible o inseguro El candidato también bloquea la escritura. Deshabilitar aún puede eliminar un bloque propiedad del archivo grabado mientras otro candidato entra en conflicto o no puede ser analizado; el otro candidato queda intacto.
+
+El fragmento de propiedad es sólo `provider.opencodex` (OpenCode V1 forma: `npm`, `options`,
+`models`) El esquema publicado de Kilo no tiene OpenCode V2 `providers` clave, por lo que el bloque es no emitidos; Kilo en su lugar recibe las opciones de razonamiento por modelo como una variante del mapa interior. su bloque de proveedor, construido a partir de los mismos metadatos canónicos efectivos que el OpenCode exportación. `$schema`, `model`, `enabled_providers`, MCP, y otras llaves se quedan usuario. Seleccionar `opencodex/` en Kilo después de aplicar.
+
+Loopback utiliza `{env:OPENCODEX_KILO_API_KEY}` como `options.apiKey`. Un enlace sin bucle mueve la admisión a `options.headers["x-opencodex-api-key"]` nunca serializa un verdadero clave. Aplicar reescribe todo el archivo global como bastante JSON, por lo que los comentarios y el seguimiento Las comas en otras teclas no se conservan. Kilo está en el catálogo implícito: `ocx
+sync`, `POST /api/sync`, y la visibilidad, el proveedor o los cambios preestablecidos actualizan un Kilo propio Bloquear bajo las mismas reglas de propiedad segura que cualquier otro cliente, y una nueva sesión de Kilo carga el archivo actualizado.
+
+```bash
+ocx integration client enable --client kilo
+ocx export --client kilo --out ./kilo.jsonc
+```
+
+
+
+## Código de comando
+
+Código de Comando mantiene sus proveedores personalizados en `~/.commandcode/providers.json`. Esto La integración escribe `provider.opencodex` en ese archivo y es solo loopback.
+
+**La raíz que escribe.** El código de comando resuelve su mapa de proveedor como
+`document.provider ?? document.providers`, así que la raíz singular gana siempre que existe. Por lo tanto, la integración lee primero el archivo de destino y escribe en el raíz que el archivo ya utiliza: un documento que ya lleva una `providers` mapa mantiene y sus otros proveedores se mantienen legibles. Un archivo fresco obtiene el singular `provider`
+raíz. Ambas raíces se declaran como rutas administradas, por lo que Deshabilitar elimina el bloque de Cualquiera que sea el texto en el que fue escrito.
+
+**La forma de credencial.** El proveedor está escrito con `apiKey: false`, el documentado forma para un endpoint que no necesita clave. Una cadena en bruto es rechazada por el Código de Comando, y ningún archivo service-token es leído, referenciado o exportado por esta integración.
+
+**Resolución Home.** No hay ninguna `COMMANDCODE_HOME` Anular aquí. El publicado El cliente resuelve `HOME ?? USERPROFILE` y luego añade `/.commandcode/providers.json`; no consulta esa variable. Una anulación de esta integración honrada, pero la cliente ignorado haría Aplicar éxito del informe en una ruta Código de comando nunca se abre, por lo que El camino es siempre `~/.commandcode/providers.json`. En Windows con el hogar predeterminado, la integración utiliza `HOME ?? USERPROFILE`
+solo cuando el valor seleccionado no está en blanco y Windows-absolute; de lo contrario, usa
+`homedir()`. Se conserva una casa suministrada por separado. A `HOME` establecido por Git para Por lo tanto, Windows o MSYS2 solo se respetan cuando pasan esas comprobaciones.
+
+Pegue la clave usted mismo si luego mueve el proveedor fuera del bucle de retorno: Código de comando guarda las llaves en `~/.commandcode/auth.json` (vía `/connect`), no en `providers.json`.
+
+```bash
+ocx integration client enable --client commandcode
+ocx export --client commandcode --out ./providers.json
+```
+
+`ocx commandcode restore --op ` acepta solo operaciones de Código de Comando, incluyendo
+`--preview` y `--plan-fingerprint` solicitudes. Rechaza las anulaciones de cliente/perfil. El proxy en ejecución debe admitir la restauración con alcance de cliente; los proxies más antiguos devuelven un error sin volver al punto final de restauración genérico. Uso `ocx integration client restore` para la revista genérica y el explícito Aside Comandos de perfil anteriores para operaciones Aside.
+
+## Factory Droid
+
+Ejecute Droid una vez para crear `~/.factory`, entonces permite explícitamente esta integración con
+`ocx integration client enable --client droid`. OpenCodex agrega solo documentado
+`customModels` Entradas a su personal `settings.json`, usando un local sin llave Endpoint Chat Completions. Elija una fila de Droid `/model` Recolector. Desactivar elimina las filas administradas; Deshacer restaura el archivo guardado exacto. Otros configuración y Los modelos personalizados siguen siendo suyos. Si Droid normaliza un `customModels` Rema por añadir `id` o `index`, OpenCodex ignora esos dos los campos de cliente al comprobar la propiedad, por lo que los valores predeterminados de razonamiento guardados permanecen disponibles.
+
+Abrir **Conectar → Factory Droid** (`/#integrations/droid`) para establecer un razonamiento por defecto para cada modelo conectado. Elija entre los esfuerzos apoyados del modelo, Revisa los cambios y luego confirma. **Sin valores predeterminados** borra el borrador de ese modelo; uso **Guardar / revisar cambios** y confirme que aplica la eliminación. Los modelos sin una lista de esfuerzo declarada muestran que no hay ningún valor predeterminado disponible.
+
+El CLI admite los mismos valores predeterminados en Droid apply/overwrite. Por ejemplo, reemplazar el modelo ficticio a continuación con un ID conectado exacto y esfuerzo soportado:
+
+```bash
+ocx integration client preview --client droid --operation apply --reasoning-default example/model-a=high --json > droid-preview.json
+```
+
+Después de revisar el plan aplicable y elegir la escritura:
+
+```bash
+DROID_FINGERPRINT="$(jq -er 'select(.canApply == true) | .fingerprint' droid-preview.json)"
+ocx integration client enable --client droid --reasoning-default example/model-a=high --plan-fingerprint "$DROID_FINGERPRINT" --json
+ocx integration client status --client droid --json
+```
+
+Repetir `--reasoning-default MODEL=EFFORT` para presentar el mapa de reemplazo completo. El último signo igual separa el modelo y el esfuerzo; se conservan los identificadores de caso y exactos. Las claves de modelo duplicadas se rechazan. Las banderas omitidas preservan los valores predeterminados;
+`--clear-reasoning-defaults` explícitamente envía un mapa vacío. Para aclarar, vista previa con que marca y lo repite en el comando de habilitación de coincidencia. Claro y las entradas no pueden Combinar. Estos indicadores son solo Droid y no se aplican a la desactivación/restauración. Repetir el mismo mapa en vista previa y confirmación; el servidor valida los esfuerzos específicos del modelo y rechaza la encuadernación rancia en lugar de aceptar silenciosamente un mapa cambiado.
+
+Para una clara intención completa, previsualizar esa acción separada:
+
+```bash
+ocx integration client preview --client droid --operation apply --clear-reasoning-defaults --json > droid-clear-preview.json
+```
+
+Después de revisarlo y elegirlo:
+
+```bash
+DROID_CLEAR_FINGERPRINT="$(jq -er 'select(.canApply == true) | .fingerprint' droid-clear-preview.json)"
+ocx integration client enable --client droid --clear-reasoning-defaults --plan-fingerprint "$DROID_CLEAR_FINGERPRINT" --json
+```
+
+El valor predeterminado se aplica solo cuando Droid omite un esfuerzo de su solicitud. Una explícita el esfuerzo de solicitud tiene prioridad sobre este valor predeterminado; los pines OpenCodex existentes y Los capuchones todavía se aplican. Droid puede continuar mostrando **Dinámico** incluso cuando OpenCodex aplica el valor predeterminado configurado. Las solicitudes sin el encabezado predeterminado Droid son no afectada; el encabezado es una preferencia de solicitud, no una prueba de identidad del cliente. Para combos y políticas de enrutamiento, cada objetivo concreto comprueba la preferencia contra su propia lista de esfuerzos, por lo que un primer objetivo incompatible no lo elimina de una reserva compatible.
+
+Un valor predeterminado guardado que el modelo enrutado ya no admite se ignora para las solicitudes. Si la lista de esfuerzo declarada del modelo conectado ya no incluye el valor guardado, se omite de los valores predeterminados del panel y se elimina de la fila administrada en la actualización. Revisar sin editar permite que OpenCodex conserve los valores predeterminados compatibles restantes.
+
+Actualizar conserva los valores predeterminados mientras que el exacto `provider/model` Selector permanece conectado y declara el esfuerzo ahorrado. Cambiar el nombre de un proveedor, modelo o alias combinado reemplaza a esa fila administrada y borra su valor predeterminado; elija un valor predeterminado para la fila renombrada de nuevo. Desactivar elimina los valores predeterminados con las filas del modelo administrado y Deshacer restaura el valor guardado sus filas y sus valores por defecto juntos.
+
+Modelos cuyos ID o nombres de visualización contienen `,` o `]` Se omiten porque el El selector administrado no puede abordarlos de forma segura; la configuración de exportación y administrada muestra las mismas filas. Se rechaza un catálogo no vacío sin modelos direccionables.
+
+Droid también lee legado `config.json` y locales `settings.local.json`. Resolver filas heredadas que usan el punto final OpenCodex, un ID de modelo generado o una
+`OpenCodex:` nombre, y cualquier local `customModels` Anular, antes de habilitar; OpenCodex rechaza esos configuración ambiguos. También rechaza un objetivo inseguro o una fila editada desde que se aplica. La integración es solo loopback y Nunca copie las credenciales del proveedor. La fábrica documenta el [Esquema BYOK](https://docs.factory.ai/model-independence/byok)
+y [configuración personal](https://docs.factory.ai/droid-cli/settings).
diff --git a/docs-site/src/content/docs/es/guides/local-plugins.md b/docs-site/src/content/docs/es/guides/local-plugins.md
new file mode 100644
index 00000000000..61bdd03b7dc
--- /dev/null
+++ b/docs-site/src/content/docs/es/guides/local-plugins.md
@@ -0,0 +1,81 @@
+---
+title: "Plugins locales"
+description: "Cargue su propio código en el proxy al inicio para reescribir los envíos del proveedor, por ejemplo, para poner un proxy de compresión local frente a los proveedores."
+---
+
+Un plugin local es un archivo JavaScript que `ocx start` carga antes de que comience el proxy Servir. Puede ver a cada proveedor enviar justo antes de que abandone el proceso y redirigirlo o agregar cabeceras — suficiente para colocar un sidecar local (un proxy de compresión, una grabadora) frente a los proveedores sin cambiar la propia opencodex.
+
+Los plugins son locales para una instalación. opencodex no los descarga, actualiza ni firma.
+
+
+
+## Donde viven los plugins
+
+Poner los archivos del plugin en `plugins/` dentro de la casa opencodex (`~/.opencodex/plugins/`, o
+`$OPENCODEX_HOME/plugins/` cuando se establece esa variable):
+
+```text
+~/.opencodex/plugins/
+ my-sidecar.ts
+```
+
+- Archivos que terminan en `.ts`, `.js` o `.mjs` se cargan en orden de nombre.
+- Nombres que comienzan con `.` o `_`, y `*.d.ts`, se ignoran — cambiar el nombre de un plugin a `_my-sidecar.ts`
+ para apagarlo.
+- El directorio es opcional. Sin ella no hay nada cargado.
+- Un complemento se ejecuta dentro del proxy con sus credenciales, por lo que opencodex rechaza un archivo de complemento o un
+ `plugins/` directorio que es propiedad de otro usuario o escribible por grupo u otros, y se niega Enlaces simbólicos. Todos los directorios de arriba `plugins/`, hasta `/`, también debe ser propiedad de usted o root y no se puede escribir por grupo u otros, a menos que sea pegajoso como `/tmp`. Arreglar permisos con
+ `chmod go-w ~/.opencodex/plugins ~/.opencodex/plugins/*`; en sistemas cuya máscara predeterminada es
+ `002`, comprueba también los directorios padre. En macOS, una concesión ACL a otro usuario o grupo que puede escribir, eliminar, cambiar permisos o agregar/eliminar bloques de entradas de ruta de acceso cargando, incluso si el moda es `0600`Inspeccione el camino mismo con `/bin/ls -lebd -- `. Solo lectura, negación, solo herencia, y las concesiones solo para el propietario de la ruta o usuario en ejecución no bloquean la carga. ACL Mostrar nombres como `root` o `0` no se tratan como prueba UID numérica. En Linux, extendido Los ACL se comprueban cuando `getfacl` está instalado. Sin ella, solo se verifican los bits de propietario y modo.
+- En Windows, la carga automática del complemento está deshabilitada hasta que esté disponible una verificación de confianza de ACL.
+
+Reinicie el proxy después de agregar, cambiar o eliminar un complemento (`ocx service restart`o parar y Inicio `ocx start`) Cada plugin cargado imprime un `Plugin loaded: ` línea en el inicio; un salto plugin imprime una categoría de razón limitada. El texto de excepción del complemento RAW nunca se imprime automáticamente.
+
+Para comenzar una vez sin plugins, establezca `OCX_PLUGINS=0`.
+
+
+
+## Escribir un plugin
+
+Un plugin por defecto exporta un objeto con una opción `name` y a `setup` función. `setup` recibe un contexto. Un asíncrono `setup` tiene cinco segundos para terminar; los plugins se ejecutan en el propio hilo del proxy, por lo que a `setup` que bloquea sincrónicamente no se puede interrumpir y retrasa el inicio hasta que vuelva. A
+`setup` que los tiempos de espera no se detiene tampoco: servidores o temporizadores ya comenzó a seguir funcionando, por lo que iniciar recursos de larga duración solo después del trabajo que puede fallar.
+
+```ts
+interface UpstreamTarget {
+ url: string; // absolute upstream URL; assign a new one to redirect
+ headers: Headers; // outbound headers, including credentials — never log them
+ readonly transport: "http" | "websocket";
+}
+
+export default {
+ name: "my-sidecar",
+ setup(ctx: {
+ log(message: string): void;
+ registerUpstreamRewriter(rewrite: (target: UpstreamTarget) => void): void;
+ onShutdown(teardown: () => void): void;
+ }) {
+ ctx.registerUpstreamRewriter(target => {
+ const upstream = new URL(target.url);
+ if (!upstream.pathname.endsWith("/chat/completions")) return;
+ target.url = `http://127.0.0.1:9000${upstream.pathname}${upstream.search}`;
+ target.headers.set("x-original-origin", upstream.origin);
+ });
+ },
+};
+```
+
+El contexto también lleva `name`, `configDir` (la casa opencodex) y `pluginDir`.
+
+Los plugins no pueden importar módulos opencodex — en el binario empaquetado que no están en disco. Declarar el pequeñas interfaces que necesita localmente, como arriba.
+
+
+
+## Cómo se comportan las reescrituras
+
+- El rewriter se ejecuta sincrónicamente en cada proveedor enviar sobre HTTP y en el Codex WebSocket conexión, después de que opencodex haya elegido el transporte. Manténgalo rápido; haga comprobaciones de red (salud sondas) en segundo plano y leer un resultado almacenado en caché en el rewriter.
+- A enviar redirigido a una dirección de bucle (`127.0.0.1`, `::1`, `localhost`) conecta directamente, sobre HTTP y sobre el Codex WebSocket, ignorando los proxies del proveedor y `HTTP_PROXY`: un proxy en otro lugar no puede alcanzar el loopback de esta máquina. Cualquier otro destino sigue la configuración normal de salida (incluyendo `NO_PROXY`), evaluado contra el URL reescrito, en ambos transportes.
+- El rewriter Codex WebSocket se ejecuta para cada turno, antes de que se reutilice un socket agrupado inactivo, y socket solo se reutiliza para el mismo destino y los mismos encabezados reescritos, aparte de los dos cabeceras por giro `x-codex-turn-state` y `x-codex-turn-metadata`. Los que viajan dentro de cada marco de solicitud y puede diferir entre intercambios en un socket; cambia un rewriter hace a ellos están descartados. Un plugin que inicia o detiene la redirección toma efecto en el siguiente turno.
+- Se ejecuta después de que opencodex haya elegido el proveedor, la cuenta y la ruta, por lo que no cambia el enrutamiento, selección de cuentas, reintentos o registros de solicitudes.
+- Un envío redirigido va al host que usted eligió. Ese host ve la solicitud exactamente como el proveedor Lo haría, las credenciales incluidas.
+- Si un rewriter lanza, opencodex deshace las ediciones de ese rewriter al enviar y lo deshabilita para el resto del proceso. Ediciones hechas por reescritores que corrieron antes de que se guardaran, por lo que el envío sale como quienes lo dejaron (sin modificar cuando es el único plugin). Si `setup` se lanza o se agota el tiempo, se omite el plugin, todo lo que registró se elimina, y los intentos posteriores de registro se ignoran; plugins y el proxy comienzan normalmente.
+- Un directorio de plugins que existe pero no se puede leer (por ejemplo, permisos incorrectos) se reporta en en lugar de ser tratados como vacíos.
diff --git a/docs-site/src/content/docs/es/guides/macos-menu-bar.md b/docs-site/src/content/docs/es/guides/macos-menu-bar.md
new file mode 100644
index 00000000000..6535d1b09fa
--- /dev/null
+++ b/docs-site/src/content/docs/es/guides/macos-menu-bar.md
@@ -0,0 +1,70 @@
+---
+title: "Aplicación de barra de menús de macOS"
+description: "Utilice la bandeja, el panel de uso nativo y el widget macOS de la aplicación de escritorio OpenCodex."
+---
+
+El elemento de la barra de menús macOS es parte de la aplicación de escritorio OpenCodex. Muestra el uso desde el proxy local y abre un panel de uso nativo. La misma aplicación también contiene el panel de control y una extensión WidgetKit. Ver la [guía de aplicaciones de escritorio](/es/guides/desktop-app/) Instalación en otras plataformas.
+
+
+
+## Instalar
+
+Descargar `OpenCodex--macos.dmg` Desde el [última versión](https://github.com/lidge-jun/opencodex/releases). Abra el DMG y arrastre `OpenCodex.app` a Aplicaciones. La aplicación de escritorio requiere macOS 13 o posterior; su widget requiere macOS 14 o posterior.
+
+
+
+## Primer lanzamiento
+
+Las compilaciones de lanzamiento de `OpenCodex.app` están firmados con un ID de desarrollador, usan el runtime endurecido y son notariados por Apple con el ticket grapado a la aplicación. En el primer lanzamiento, macOS normalmente solo solicita la confirmación estándar para una aplicación descargada de Internet. Si macOS todavía lo bloquea, abra **Configuración del sistema → Privacidad y seguridad** y elige **Abrir de todas formas** para OpenCodex. Las aplicaciones que tú mismo creas están firmadas ad-hoc; ver [Construir desde la fuente](#build-from-source).
+
+La aplicación muestra su progreso de inicio en una ventana al abrirlo. Esto permite **Inicio de sesión** una vez en el primer lanzamiento; puede desactivarlo desde el menú de la bandeja. El elemento de la bandeja se comprueba solo cuando esta copia de la aplicación está registrada y macOS no ha desactivado el elemento de inicio de sesión; de lo contrario, su etiqueta indica por qué (ver [Aplicación de escritorio](/es/guides/desktop-app/)) Los lanzamientos posteriores desde el elemento de inicio de sesión comienzan con la ventana oculta mientras la bandeja permanece disponible.
+
+
+
+## Barra de menús y panel de uso
+
+El titular de la barra de menú muestra el total de tokens de hoy por defecto. En el panel de control, abra **Uso → Barra de menú y widget** (o `#usage/companion`) para elegir solicitudes, tokens, costo estimado, cuota o icono solamente.
+
+Uso **Mostrar uso** en el menú de la bandeja para abrir el panel nativo. El panel muestra los totales de hoy y de 30 días, una tabla de uso, una lista de modelos y límites de proveedores y cuentas según la configuración de su pantalla. Los totales incluyen tokens y solicitudes, con un costo estimado cuando está habilitado. Las filas de cuota muestran su ventana, porcentaje y tiempo de reinicio. Las mediciones que faltan aparecen como `—`, y el uso parcial se marca como incompleto.
+
+El panel tiene **Actualizar**, **Panel**, y **Configuración** controles. **Panel** abre la vista de uso en la ventana del escritorio; **Configuración** abre el **Barra de menú & widget** tab bajo Uso. El menú también ofrece **Abrir el panel de control**, **Abrir en el navegador**, **Inicio de sesión**, **Detener proxy**, **Buscar actualizaciones…**, un **Instalar actualización** artículo cuando uno está disponible, y **Salir**. **Detener proxy** siempre aparece, pero solo está habilitado cuando la aplicación inició el proxy en sí; un proxy que comenzó por separado sigue funcionando. Cerrar la ventana o usar Command-Q oculta la aplicación cuando su bandeja está disponible; use la **Salir** para salir de él.
+
+El botón de actualización del panel del escritorio abre la propia página de actualización de la aplicación; comprueba e instala la misma actualización firmada que el menú de la bandeja.
+
+El titular de la bandeja se actualiza cada 60 segundos. Mientras el panel nativo está abierto, sus datos se actualizan cada 60 segundos; **Actualizar** Solicita una actualización inmediata.
+
+## Widget
+
+En macOS 14 o posterior, abra OpenCodex.app una vez, luego Controle y haga clic en un área vacía del escritorio, elija **Editar widgets**, busque por **OpenCodex**y agregue el tamaño que desee. Los tamaños de los widgets muestran diferentes combinaciones de estado de proxy, tokens de hoy y solicitudes, costo estimado, cuotas y un gráfico de uso. La extensión lee una instantánea local escrita por la aplicación de escritorio; esa instantánea contiene datos de visualización, no claves API ni datos de cuenta sin procesar. La aplicación actualiza la instantánea del widget en cada quinto tick de bandeja de 60 segundos, aproximadamente cada cinco minutos mientras el proxy está conectado. WidgetKit también solicita una nueva línea de tiempo después de cinco minutos.
+
+
+
+## Conectarse al proxy
+
+La aplicación de escritorio pide a su CLI incluido que se ejecute `ocx resolve --json`. Se conecta a un proxy local accesible existente, o inicia su entorno de ejecución incluido solo cuando el CLI demuestra que no hay entorno de ejecución escuchando. Si el descubrimiento es incierto, el inicio informa el problema en lugar de iniciar un segundo proxy. La aplicación habla con el puerto resuelto en `127.0.0.1`.
+
+Para las solicitudes de administración, la aplicación primero intenta sin un token. Si el proxy devuelve HTTP 401, vuelve a intentarlo usando `OPENCODEX_ADMIN_AUTH_TOKEN` desde el entorno de la aplicación o la configuración resuelta `admin-api-token` Archivo. No utiliza el llavero macOS para este token. Un proxy vinculado solo a una dirección que la aplicación no puede alcanzar en bucle no puede ser conectado por el shell de escritorio.
+
+
+
+## Construir desde la fuente
+
+En macOS 13 o posterior, con Bun, Rust y las herramientas Swift/Xcode de macOS disponibles, cree el panel desde la raíz del repositorio y ejecute los comandos del escritorio desde `desktop/`:
+
+```bash
+bun install
+bun run build:gui
+cd desktop
+bun install
+bun run prepare-sidecar
+bun run prepare-widget
+bun run build:local
+```
+
+`build:local` produce la aplicación local y DMG sin necesidad de una clave de firma del actualizador Tauri. Un directo `bunx tauri build` requiere `TAURI_SIGNING_PRIVATE_KEY` porque también produce un artefacto actualizador. La compilación del widget utiliza una firma ad-hoc a menos que `MACOS_SIGN_IDENTITY` se establece, y los paquetes de escritorio locales también están firmados ad-hoc. La aplicación se ejecuta, pero macOS no registra una extensión de widget firmada ad-hoc, por lo que una compilación local generalmente no muestra ningún widget OpenCodex. `build:local` siempre ad-hoc firma la aplicación, por lo que la configuración `MACOS_SIGN_IDENTITY` Solo no ayuda: el widget se registra solo cuando la aplicación y la extensión están firmadas por el mismo equipo de ID de desarrollador, como lo hace la compilación de la versión. Usa una compilación de lanzamiento cuando necesites el widget.
+
+
+
+## Desinstalar
+
+Apagado **Inicio de sesión** en el menú de la bandeja si lo habilitaste, luego mueve `OpenCodex.app` de las aplicaciones a la basura. Esto elimina el paquete CLI y la extensión de widget, pero no elimina el proxy `$OPENCODEX_HOME` estado o un instalado por separado `ocx` Servicio. La aplicación de escritorio también escribe un identificador de instalación y marcadores de elemento de inicio de sesión en su directorio de configuración de la aplicación, además de una instantánea del widget en `~/Library/Containers/com.opencodex.desktop.widget/Data/Library/Application Support/OpenCodex/snapshot.json`; mover la aplicación a la Papelera no elimina esos archivos.
diff --git a/docs-site/src/content/docs/es/guides/minimax.md b/docs-site/src/content/docs/es/guides/minimax.md
new file mode 100644
index 00000000000..f3ac158a55d
--- /dev/null
+++ b/docs-site/src/content/docs/es/guides/minimax.md
@@ -0,0 +1,96 @@
+---
+title: "Clientes MiniMax"
+description: "Enrutar código MiniMax y comandos de texto MiniMax CLI a través de OpenCodex sin exponer las credenciales MiniMax."
+---
+
+MiniMax publica dos productos de línea de comandos diferentes. OpenCodex integra cada el límite del protocolo que realmente expone:
+
+- **Código MiniMax** (`mcode`) es un agente de codificación con proveedores personalizados de Anthropic Messages.
+- **MiniMax CLI** (`mmx`Es una plataforma multimodal CLI. Sólo su `text` El recurso habla el Anthropic compatible con API que OpenCodex puede enrutar.
+
+
+
+## Código MiniMax
+
+En la página Modelos OpenCodex, ambas regiones del Plan de codificación MiniMax anuncian la entrada de imagen para
+`MiniMax-M3` y `MiniMax-M3.1-Flash-Preview`. Un combo **Imagen / multimodal** El interruptor es disponible solo cuando cada modelo seleccionado admite la entrada de imágenes. El interruptor controla la imagen archivos adjuntos; no permite la subida de vídeos.
+
+Instale e inicie sesión en MiniMax Code utilizando primero las instrucciones de MiniMax. Entonces empieza OpenCodex y conectar la integración de archivos reversibles:
+
+```bash
+ocx start
+ocx integration client enable --client mcode
+ocx mcode
+```
+
+
+
+La integración combina un bloque en `~/.minimax/config.yaml`:
+
+```yaml
+custom_provider:
+ opencodex:
+ name: OpenCodex
+ kind: custom
+ enabled: true
+ api: anthropic-messages
+ options:
+ apiKey: opencodex-loopback
+ baseURL: http://127.0.0.1:10100
+ authMode: api-key
+ models:
+ anthropic/claude-opus-5:
+ limit:
+ context: 1000000
+```
+
+La lista de modelos generados, las ventanas de contexto y las escaleras de esfuerzo de razonamiento provienen de la ejecución OpenCodex catálogo. Las ventanas contextuales pueden incluir [Estimaciones de proveedores personalizados](/es/reference/configuration/providers/#context-windows-on-custom-providers)Si el catálogo no tiene ventana o escalera de esfuerzo, se omite el campo correspondiente. MCode mantiene el esfuerzo seleccionado actualmente en la sesión, por lo que OpenCodex exporta `effortOptions` sin sobreescribir esa selección. El bloque no escribe una clave real, no reemplaza
+`defaultModel`, y no cambia su inicio de sesión MiniMax. En MCode, elija un modelo bajo
+`custom_provider:opencodex/...`.
+
+`ocx mcode` verifica que este proveedor apunta al proxy que se está ejecutando antes de lanza el cliente. Después de la habilitación única, `ocx sync` Renueva el bloque propietario cuando el puerto o las capacidades del catálogo cambian. La sincronización automática nunca crea un bloque sin dueño, recrea uno que eliminó, o sobrescribe un archivo que cambió después de que OpenCodex lo escribió; use el comando habilite cuando desee volver a conectarse intencionalmente. Deshabilitar o restaurar a través de el mismo sistema de integración auditado:
+
+```bash
+ocx integration client disable --client mcode
+ocx integration client history --client mcode
+ocx integration client restore --op [--confirm-drift]
+```
+
+`MINIMAX_DATA_DIR` y el legado `MAVIS_DATA_DIR` Son honrados. Las anulaciones relativas son se ha rechazado porque OpenCodex y MCode pueden iniciarse en diferentes directorios de trabajo.
+
+## MiniMax CLI (`mmx`)
+
+Instale el CLI oficial por separado:
+
+```bash
+npm install -g mmx-cli
+mmx --version
+```
+
+Enrutar un comando de texto a través de OpenCodex mediante el envoltorio y un identificador de modelo OpenCodex:
+
+```bash
+ocx mmx text chat \
+ --model anthropic/claude-opus-5 \
+ --message "Explain this function"
+
+ocx mmx --output json text chat \
+ --model openai/gpt-5.6-sol \
+ --message "Return a JSON summary"
+```
+
+Códigos duros MMX `/anthropic/v1/messages` debajo de su base API URL. El envoltorio comienza a puente temporal de loopback durante toda la vida del proceso hijo. Solo acepta POST solicitudes a esa ruta Messages y `/anthropic/v1/messages/count_tokens`, cartografiarlos a OpenCodex existente `/v1/messages` y `/v1/messages/count_tokens` Plano de datos mientras preservar los cuerpos de solicitud y los datos de consulta. Canonical OpenCodex solicitud de traducción, la contabilidad de uso y la autenticación configurada del proveedor descendente permanecen en efecto; Los proveedores reciben `x-api-key` o transporte de portador según su configuración. La transmisión conserva los eventos de mensajes y contenido Anthropic. Antes de salir, el puente elimina los encabezados de credenciales de admisión entrantes y fija el público
+`opencodex-loopback` marcador de posición. Los recursos arbitrarios de Anthropic no se representan, y El puente nunca se expone más allá del bucle.
+
+El wrapper también crea un `MMX_CONFIG_DIR` que contiene solo ese marcador de posición, luego lo borra después de `mmx` salidas. Tu `~/.mmx/config.json`, OAuth tokens y MiniMax La clave API nunca se carga ni copia.
+
+Los siguientes límites son intencionales:
+
+- Solo `text chat` y `text repl` se enrutan a través de OpenCodex.
+- `--api-key`, `--base-url` y `--region` son rechazados por el envoltorio así llamador credenciales o selectores de destino no pueden entrar en conflicto con el puente aislado.
+- El envoltorio es solo de bucle porque MMX no puede enviar el paquete dedicado de OpenCodex.
+ `x-opencodex-api-key` cabecera de admisión para un enlace remoto.
+- Ejecutar llano `mmx` por `image`, `video`, `speech`, `music`, `vision`, `search`, `quota`,
+ `auth`, `config`, `file` y `update`; llaman a las API específicas de MiniMax que OpenCodex No emula.
+
+`mmx` Por defecto, el modelo de texto `MiniMax-M3`. Pase `--model ` cuando tu desea una ruta específica de OpenCodex; de lo contrario, las reglas de enrutamiento del modelo normal de OpenCodex deciden si el id predeterminado está disponible.
diff --git a/docs-site/src/content/docs/es/guides/model-ordering.md b/docs-site/src/content/docs/es/guides/model-ordering.md
new file mode 100644
index 00000000000..7b8240ef8d8
--- /dev/null
+++ b/docs-site/src/content/docs/es/guides/model-ordering.md
@@ -0,0 +1,161 @@
+---
+title: "Orden de modelos"
+description: "Cómo determina opencodex el orden del modelo en el selector Codex y el modelo spawn_agent anula."
+---
+
+El selector de modelos Codex no conserva el orden de las declaraciones del proveedor o los arrays de modelos en el Configuración de opencodex. Su orden final proviene de las prioridades del catálogo, con un enfoque determinista. orden alfabético para modelos enrutados que comparten la misma prioridad.
+
+
+
+## La regla Codex se aplica
+
+Codex's models-manager ordena entradas de catálogo visibles por `priority` en orden ascendente. Lo descarta el orden de la matriz de catálogo, por lo que mover una entrada anterior en una matriz JSON generada no se mueve En el caso de los niños. La implementación registra esta restricción directamente en
+`src/codex/catalog/sync.ts`.
+
+Por lo tanto, opencodex controla la ubicación de las funciones asignando prioridades más bajas, no confiando en posición de matriz. A menos que se indique lo contrario, las prioridades fijas y el ejemplo trabajado a continuación describen un catálogo sin selectores de cuenta Codex elegibles. Con `N` selectores elegibles, prioridades destacadas uso `N` como un paso: una elección nativa desnuda en el rango configurado `i` se expande a las filas selectoras en prioridades `i * N + j`donde: `j` es la posición basada en cero del selector; una opción enrutada usa
+`i * N`; y una elección exacta calificada por el selector `i * N + j` por su selector. Enrutado no seleccionado las filas se mueven fuera de esos grupos selectores. Codex sigue anunciando solo los primeros cinco Selector de filas visibles.
+
+Sin el pedido completo del seleccionador, las prioridades relevantes de no selector son:
+
+| Entrada de catálogo | Prioridad | Fuente |
+| --- | ---: | --- |
+| `subagentModels[i]` | `i` (`0` a través `4`) | El mapa de rango destacado en `src/codex/catalog/sync.ts` |
+| Otros modelos ruteados | `5` | Creación de entradas en `src/codex/catalog/sync.ts` |
+| Modelos ruteados no destacados listados en `modelPickerOrder` | `1000 + i` | Rango de selector solo de visualización en `src/codex/catalog/sync.ts` |
+| De forma predeterminada, las babosas nativas GPT | `9` | Creación de la entrada nativa en `src/codex/catalog/sync.ts` |
+| Modelos nativos no seleccionados mientras existe una lista destacada | Al menos. `featured.length + 100` | Catálogo nativo merge in `src/codex/catalog/sync.ts` |
+
+Los límites de gestión API `subagentModels` Cinco entradas con `slice(0, 5)` en
+`src/server/management/agent-settings-routes.ts`. Esto coincide con el Codex `spawn_agent` superficie, que anuncia solo los primeros cinco modelos anulados. Los modelos fuera de esos cinco pueden seguir siendo visibles. en el selector principal y llamable por su id exacto.
+
+
+
+## Cómo se ordenan los lazos
+
+Todos los modelos ordinarios tienen prioridad `5`, por lo que necesitan un desempate. Antes de que las entradas del catálogo sean construido, `gatherRoutedModels()` ordena la lista de modelos enrutados por nombre de proveedor y luego por ID de modelo, tanto alfabéticamente (`src/codex/catalog/provider-fetch.ts`).
+
+Esto significa que ninguno de estos detalles de configuración cambia el orden final:
+
+- orden de las llaves en la declaración `providers` objeto;
+- el orden de los ids en un proveedor `models` matriz.
+
+`orderForSubagents()` luego usa un orden estable para mover las selecciones destacadas configuradas al frente en el El mismo orden que `subagentModels`. Los modelos no destacados mantienen el orden relativo alfabético del proveedor/identificador establecido anteriormente (`src/codex/catalog/sync.ts`) El rango destacado también se convierte en prioridades `0` a través `4` cuando se construyen las entradas, por lo que el orden de prioridad de Codex conserva ese valor principal secuencia.
+
+
+
+## La visibilidad está separada del orden
+
+`selectedModels` y `disabledModels` decidir qué modelos enrutados están expuestos; no están ordenando controles. `filterCatalogVisibleModels()` convierte ambas selecciones en `Set` búsquedas y filtra el lista sin usar las matrices como rangos (`src/codex/catalog/provider-fetch.ts`).
+
+Como resultado, reordenar `selectedModels` o `disabledModels` no tiene ningún efecto sobre la posición del selector. Puede solo cambia si se incluye un modelo.
+
+
+
+## Patrón de selector efectivo
+
+Sin selectores de cuenta elegibles y una lista de características no vacía, el pedido resultante es:
+
+1. Modelos en la configuración exacta `subagentModels` orden, con prioridades `0` a través `4`.
+2. Todos los modelos enrutados restantes, ordenados alfabéticamente por el proveedor y luego la identificación del modelo, con prioridad `5`.
+3. Modelos nativos no seleccionados, empujados por debajo del bloque destacado durante la fusión del catálogo.
+
+Sin `subagentModels`, los modelos enrutados siguen siendo prioritarios `5`, las entradas nativas de GPT usan sus valores normales Prioridad (normalmente `9` para entradas creadas por opencodex), y el grupo enrutado permanece proveedor/id alfabético.
+
+
+
+## Ejemplo
+
+Supóngase `subagentModels` contiene estos cinco ID en este orden exacto:
+
+```toml
+subagentModels = [
+ "gpt-5.5",
+ "opencode-go/glm-5.2",
+ "anthropic/claude-opus-4-6",
+ "gpt-5.6-sol",
+ "gpt-5.6-terra",
+]
+```
+
+El selector comienza de la siguiente manera:
+
+| Posición del selector | Modelo | Prioridad | Por qué aparece allí |
+| ---: | --- | ---: | --- |
+| 1 | `gpt-5.5` | `0` | Primero `subagentModels` selección |
+| 2 | `opencode-go/glm-5.2` | `1` | Segunda selección, aunque su proveedor clasifique `anthropic` |
+| 3 | `anthropic/claude-opus-4-6` | `2` | Tercera selección |
+| 4 | `gpt-5.6-sol` | `3` | Cuarta selección |
+| 5 | `gpt-5.6-terra` | `4` | Quinta selección |
+| 6 | `anthropic/claude-fable-5` | `5` | Primer id enrutado restante en orden alfabético proveedor/id |
+| 7 en adelante | Los modelos enrutados restantes | `5` | Proveedor alfabéticamente, luego modelar id alfabéticamente |
+| Después de modelos enrutados | Los modelos nativos | `featured.length + 100` o más alto | Los nativos no seleccionados se mueven por debajo del bloque destacado |
+
+Las primeras cinco entradas son las anulaciones anunciadas a `spawn_agent`El resto continúa en el orden de recogida normal. Con los selectores de cuenta, el límite de cinco entradas se aplica después de elegir opciones nativas básicas. se han expandido a grupos selectores calificados.
+
+
+
+## Cambiar el orden
+
+Uso `subagentModels` para elegir y ordenar los modelos líderes que Codex también anuncia a
+`spawn_agent`. El panel de control **Subagentes** página puede reordenar ids nativos y ruteados. Uso
+`ocx agent subagents set` o edite la configuración de opencodex para obtener
+`/` opciones; el panel de control conserva esas ID una vez guardadas, incluidas las opciones actualmente no disponibles. Utilice como máximo cinco ID configurados. Con selectores de cuenta, un nativo desnudo opción puede expandirse en múltiples filas de catálogo calificadas por selector, por lo que las opciones configuradas y Las filas anunciadas no son necesariamente uno a uno.
+
+Si ninguna cuenta configurada admite un modelo nativo con apertura de cuenta, la solicitud falla como no válida. elección de modelo. Si las cuentas de soporte existen pero están temporalmente agotadas o no están disponibles, falla como un límite de tasa reintentable. Estos estados nunca se informan como una clave API no válida; elija otra modelo disponible o esperar a que se vuelva a abrir la ventana de cuota de la cuenta capaz.
+
+Uso `modelPickerOrder` para el orden de solo visualización de enrutado `/` filas más allá de eso Bloque destacado:
+
+```json
+{
+ "modelPickerOrder": [
+ "tyler/deepseek-v4-flash",
+ "jd-chat/kimi-k3",
+ "jd-chat/glm-5.2"
+ ]
+}
+```
+
+Las filas enrutadas aparecen en el orden configurado. Una fila enrutada omitida de la matriz mantiene su prioridad normal, por lo que se mantiene por delante de la `modelPickerOrder` banda de visualización; listar cada fila enrutada cuya posición relativa desea controlar. Una fila también presente en `subagentModels` mantiene su Prioridad destacada. Con una lista solo encaminada, las filas nativas mantienen sus posiciones normales.
+
+Para pedir el selector completo, incluya un identificador nativo desnudo:
+
+```json
+{
+ "modelPickerOrder": ["gpt-5.6-sol", "opencode-go/glm-5.3"]
+}
+```
+
+Las filas listadas aparecen primero en orden de array, seguidas por las filas no listadas en prioridad natural Orden. Matching utiliza ID de catálogo exactos: `gpt-5.6-sol` y `openai/gpt-5.6-sol` Están separados filas. También se aceptan ortografías crudas y codificadas del mismo id enrutado, con precisión exacta. Los partidos tienen prioridad. Las entradas vacías son ignoradas. Las filas calificadas para la cuenta necesitan su selector de identificación calificada en la lista.
+
+
+
+### Nota de migración: ID nativos en pedidos existentes
+
+Anteriormente, los nativos en `modelPickerOrder` fueron ignorados. Una lista existente que contiene un id nativo desnudo ahora activa el pedido de selector completo, incluidas las filas destacadas. Retire los id nativos desnudos para mantener el comportamiento anterior solo enrutado. Desactivado, vacío y Las listas de solo enrutado conservan su comportamiento; El cálculo del candidato de orientación de prioridad natural de OpenCodex no cambia.
+
+`modelPickerOrder` preserva el cálculo de prioridad natural de OpenCodex de hasta cinco preferidos candidatos a la orientación subagente. Cada fila movida conserva su prioridad natural por separado de Su Nativo `priority`; cambiar el orden del selector por sí solo no debe cambiar ese cálculo OpenCodex. No restringe la elegibilidad para una anulación de modelo de nombre exacto: la lista nativa anunciada no es una lista de permisos, y aún se aplican las restricciones existentes de autenticación, modelo/esfuerzo y backend.
+
+Nativo Codex usa nativo `priority` para seleccionar los primeros cinco modelos elegibles de selector visible Anunciado por `spawn_agent` en V1 y en V2 cuando se exponen las anulaciones del modelo. Los anunciados Por lo tanto, cinco pueden cambiar con el orden de selección, incluso cuando los candidatos preferidos de OpenCodex permanecen sin cambios. V1 no recibe ninguna inyección de OpenCodex. V2 puede recibir adicionalmente La orientación de prioridad natural de OpenCodex cuando el estado del catálogo del cliente lo permite; esa orientación sí lo hace no reordenar la lista anunciada de la herramienta nativa.
+
+`disabledModels` Cada proveedor de `selectedModels` Siguen siendo campos de visibilidad, No ordenando controles. No hay separación `modelOrder`, `providerOrder`, o configuración de mapa de prioridad.
+
+
+
+## Configuración preestablecidos del selector de panel
+
+En marcha **Modelos**, elige **Predeterminado**, **A–Z por modelo**, **Grupo por proveedor**, o **Instantánea más utilizada**Entonces, **Aplicar orden**. Esto guarda los identificadores de ruta actualmente visibles y `modelPickerOrderMode` (`alphabetical`, `provider`, o `most-used`) La mayoría de las lecturas usadas retienen el uso una vez cuando se aplican; las recargas restauran la instantánea sin recuperar el uso nuevamente. Los modelos nuevos o eliminados no lo vuelven a calcular automáticamente. Un pedido guardado manualmente, incluyendo un pedido completo/nativo, permanece intacto hasta que aplique explícitamente un reemplazo. El valor predeterminado borra ambos campos de selección, incluso cuando no hay modelos enrutados disponibles.
+
+Los controles utilizan `GET/PUT /api/subagent-models`: `chosen` y `available` conservar las opciones guardadas de la lista, incluidos los modelos discapacitados o desaparecidos; `pickerAvailable` contiene solo los identificadores de catálogo enrutados elegibles. La página Modelos envía `pickerOrder` y `pickerOrderMode`, nunca `models`. La lista solo guarda la configuración del selector de conservación. Las actualizaciones combinadas no válidas y la persistencia fallida dejan intacto el estado anterior del selector/roster.
+
+Los configuración preestablecidos de solo ruta mantienen las bandas de prioridad existentes destacadas/nativas. Afectan al catálogo Codex y a los grupos enrutados de descubrimiento Claude; El prefijo nativo de Claude y la propiedad explícita de perfil/alias de escritorio permanecen sin cambios. Se conservan los rangos de orientación de OpenCodex y las configuración de reserva configuradas, pero los cinco anuncios de Codex nativos y los valores predeterminados recomendados pueden cambiar con la prioridad de visualización. Guardar no reinicia clientes; puede que una actualización de catálogo permanezca pendiente, y los clientes que tengan un catálogo antiguo pueden necesitar volver a abrir.
+
+
+
+
+### Orden enrutada personalizada
+
+Seleccionar **Orden de encargo** en Modelos para cargar una instantánea nueva. Arrastre una fila móvil antes otra fila, o utilice sus botones Arriba/Abajo, **Guardar borrador**. Las filas enrutadas destacadas permanecen en el frente a su rango configurado y no puede moverse. No se muestran las filas nativas; esto no es una vista previa de los nativos completos. Las filas guardadas que sobreviven mantienen su orden relativo y nuevos candidatos Siga la lista de candidatos actual. Cada guardado envía la lista completa, sin cambiar El roster destacado.
+
+Una orden que contiene ids nativos desnudos permanece protegida hasta que aplique explícitamente un preajuste encaminado. o por defecto. Seleccionar una opción diferente por sí sola no la reemplaza. Bloques estatales desconocidos edición. Antes de guardar, el editor comprueba una nueva instantánea; los cambios preservan su borrador y bloquean Ahorrar hasta **Recargar y descartar borrador** carga los configuración actuales. Las solicitudes de fallos retienen el proyecto. Los archivos guardados aceptados aún pueden tener una actualización de catálogo pendiente; vuelva a cargar antes de volver a editar.
+
+El editor también requiere una identidad de modelo inequívoca para cada candidato enrutado. Si el modelo catálogo está incompleto, actualice la página Modelos antes de editar; solo recargue la configuración del selector No se puede restaurar las identidades de catálogo que faltan. Las opciones destacadas se combinan exactamente sin recortar; opciones duplicadas usan su última posición configurada, y los id canónicos tienen prioridad sobre los id sin procesar.
diff --git a/docs-site/src/content/docs/es/guides/model-routing.md b/docs-site/src/content/docs/es/guides/model-routing.md
new file mode 100644
index 00000000000..987f165883b
--- /dev/null
+++ b/docs-site/src/content/docs/es/guides/model-routing.md
@@ -0,0 +1,107 @@
+---
+title: "Enrutamiento de modelos"
+description: "Cómo decide opencodex qué proveedor sirve un ID de modelo determinado."
+---
+
+Cuando Codex pide un modelo, `router.ts` lo resuelve exactamente a un proveedor configurado. Las reglas son chequeado **por orden**El primer partido gana.
+
+Para OpenAI, una configuración `/gpt-*` id mapas a través de `codexAccountNamespaces` a exactamente uno cuenta Codex almacenada antes de que se consideren los espacios de nombres combinados o del proveedor. Desnudo `gpt-*` ids select El canónico `openai` proveedor en su lugar. Es `codexAccountMode` elige Pool (predeterminado, principal más ej., cuentas añadidas) o Direct (portador de llamadas/principal actual) sin cambiar el identificador del modelo.
+`openai-apikey/` selecciona explícitamente el transporte de clave API. Estas rutas de credenciales no caen a través de uno al otro.
+
+
+
+## Precedencia
+
+1. **Selector de cuenta Codex exacto** — si el identificador es
+ `/` y el selector está configurado en `codexAccountNamespaces`, la solicitud utiliza solo la cuenta almacenada asignada y envía el modelo nativo desnudo en sentido ascendente. Los objetivos exactos no disponibles no se cierran en lugar de continuar a través de Pool, Direct o proveedor enrutamiento.
+
+ ```text
+ side/gpt-5.6-sol → provider "openai", model "gpt-5.6-sol", account selector "side"
+ ```
+
+2. **Identificación combinada o alias** — mientras se configura al menos un combo, una `combo/` o combo alias configurado selecciona su destino concreto antes de que se comprueben los espacios de nombres del proveedor. Con sin combos configurados, un proveedor físico heredado llamado literalmente `combo` Sigue siendo normal espacio de nombres del proveedor. Véase [Combos](/es/guides/combos/) para selección de objetivos y comportamiento de conmutación por error.
+
+3. **Explícito `provider/model`** — Si el id contiene `/` y la parte anterior es el nombre de un proveedor configurado, ese proveedor se utiliza y el id se quita a la parte después de la barra.
+
+ ```text
+ anthropic/claude-opus-5 → provider "anthropic", model "claude-opus-5"
+ ollama-cloud/glm-5.2 → provider "ollama-cloud", model "glm-5.2"
+ openrouter/openai/gpt-5.6-sol → provider "openrouter", model "openai/gpt-5.6-sol"
+ ```
+
+ Este es el formulario explícito del proveedor de rutas, y el que el selector de modelos de Codex utiliza para la ruta. modelos. Si el mismo id público es un alias combinado configurado, gana la regla 2. Si el proveedor designado es deshabilitado, esta forma explícita lanza en lugar de enrutamiento.
+
+4. **ID de familia OpenAI nativa desnuda** — un id tal como `gpt-*`, `o1-*`, `o3-*`, o `o4-*` utiliza el canónico habilitado `openai` proveedor y su modo de cuenta configurado Pool o Direct.
+
+5. **Un proveedor `defaultModel`** — si cualquier proveedor `defaultModel` es igual al id, ese proveedor se utiliza (id pasó a través sin cambios).
+
+6. **Patrones de prefijo incorporado** — el id se compara con prefijos de familia de modelo conocidos, luego se enruta a un proveedor configurado con ese nombre (o prefijo de nombre):
+
+ | Prefijos | Proveedor |
+ | --- | --- |
+ | `claude-`, `claude-sonnet-`, `claude-opus-`, `claude-haiku-` | `anthropic` |
+ | `llama-`, `mixtral-`, `gemma-` | `groq` |
+
+ Este matcher se basa en el nombre y, a diferencia de la `defaultModel` / `models[]` Escáneres, actualmente no filtrar un proveedor coincidente cuyo `disabled` La bandera es verdadera.
+
+7. **Un proveedor `models[]`** — si no ganó ninguna regla de prefijo y un proveedor activo muestra el id en su
+ `models[]`Este proveedor es utilizado. La regla 4 ya envía un `gpt-*` id al canónico habilitado
+ `openai` proveedor antes que otro proveedor `models[]` reclamación puede coincidir.
+
+8. **Proveedor predeterminado** — si nada coincide, el id se envía a `config.defaultProvider` sin cambios. (Si no hay ningún proveedor predeterminado configurado, o si está deshabilitado, el enrutamiento se dispara.)
+
+
+
+## API claves y variables de entorno
+
+Sea cual sea la ruta elegida, el proveedor `apiKey` se resuelve a través `resolveEnvValue()`Un valor de
+`${OPENAI_API_KEY}` o `$OPENAI_API_KEY` se expande desde el entorno a la hora de la solicitud, por lo que los secretos Nunca hay que vivir en `config.json`.
+
+
+
+## Visibilidad del catálogo y tapas de contexto
+
+El enrutamiento y la visibilidad del catálogo son controles separados:
+
+- `disabledModels` oculta los identificadores de ruta namespaced del catálogo Codex y `/v1/models`Un nativo desnudo GPT babosa se mantiene en el catálogo con `visibility: "hide"`. Lo hace **no** Rechazar una solicitud directa para ese modelo.
+- El proveedor no está vacío `selectedModels` es otro catálogo allowlist. Descubrimiento en vivo y directo enrutamiento todavía funciona; solo catálogo y `/v1/models` emisiones se han reducido.
+- Conjunto de instalaciones frescas `modelDiscovery.newModelPolicy` a `"off"`. Tras el primer live exitoso fetch establece una línea de base, llegadas posteriores se adjuntan a `disabledModels` y llevar un **NUEVO**
+ insignia del panel de instrumentos hasta que esté activada o reconocida. Las instalaciones existentes permanecen `"on"` Hasta que se optó. La política se aplica antes de publicar modelos recién descubiertos a través de `/v1/models`, el panel de instrumentos, Exportación de configuración del cliente o sincronización de catálogo Codex (incluido el inicio del servicio). Habilitar una llegada manualmente la mantiene habilitada en actualizaciones y exportaciones posteriores. Si la configuración del proveedor en ejecución difiere del disco, las listas de modelos aún aplican la directiva utilizando una proyección temporal; dejan intacta la configuración en ejecución y las opciones guardadas. Uso `ocx models new-policy off` globalmente, añadir `--provider ` para una anulación, e inspeccionar
+ `ocx models new-arrivals [--json]`. Los resultados fallidos/degradados nunca cambian la línea base. Proveedores con un no-vacío `selectedModels` (incluido el modo preestablecido) ya están curados, por lo que esta política es deliberadamente inertes para ellos.
+- `provider.disabled: true` elimina ese proveedor del descubrimiento de catálogo. Explícito
+ `provider/model` Las solicitudes fallan, y `defaultModel` / `models[]` Escáneres omiten.
+- Las filas de catálogo enrutadas se clonan desde la plantilla nativa Codex, por lo que los indicadores de entrega solo nativos son durante la normalización: `supports_websockets`, `supports_reasoning_summaries`, y
+ `supports_experimental_context`. Un proveedor encaminado nunca hereda el contexto experimental. contrato; heredar hizo que Codex fuera compacto después de casi cada paso en hilos largos.
+- `providerContextCaps` Aplica por proveedor Codex-caps contexto visible. `contextCapValue` es el dashboard default (350,000 por defecto), pero no hace nada por sí mismo hasta que un Presente en `providerContextCaps`. Cambiar el valor del panel de control actualiza cada límite habilitado solo cuando "aplicar a cada proveedor enrutado" está activado; de lo contrario, cada proveedor mantiene su propio Cap. Las ventanas ordinarias conocidas solo se pueden bajar; los modelos nativos que admiten una ventana más larga puede expandirse hasta su propio techo soportado. Las tapas nunca cambian el límite real del modelo ascendente. Apagar una tapa conserva su selección en `providerContextCapValues`, incluso después de la recarga; Al activarlo, se restaura esa selección. Una selección recordada nunca aplica un límite mientras está deshabilitada. Envío `{ "setAll": true }` sin `value` habilita a todos los proveedores configurados en el valor global y reemplaza sus selecciones recordadas.
+- Un modelo GitHub Copilot que admita el nivel de contexto largo ascendente puede optar por
+ `providers.github-copilot.modelContextTiers. = "long_context"` o
+ `ocx provider edit github-copilot --model-context-tier =long_context`. El nivel envía `contextTier: "long_context"` en el chat de copiloto y solicitudes Responses. Se eleva la ventana anunciada sólo cuando ese modelo exacto tiene una ventana por modelo conocida. en `modelContextWindows` (Por ejemplo, `1000000`); un modelo desconocido mantiene su ventana activa. Gana una ventana explícita por modelo, luego se aplica el límite de proveedor existente. Las ventanas guardadas y las selecciones de niveles sobreviven al inicio y al nuevo inicio de sesión de OAuth. OAuth presets fill falta por modelos predeterminados mientras mantiene sus entradas configuradas, incluso en xAI. Los `"default"` tier conserva los metadatos normales del contexto en vivo. El control del panel se planifica por separado.
+
+```json
+{
+ "contextCapValue": 350000,
+ "providerContextCaps": {
+ "anthropic": 350000,
+ "cursor": 350000
+ }
+}
+```
+
+
+
+## Propinas
+
+- **Dirígete a una cuenta Codex explícitamente** con `/` (artículo 1). Esa ruta es exacto y falla cerrado; nunca cambia silenciosamente a otra cuenta.
+- **Sea explícito para los modelos enrutados.** Prefiero `provider/model` (Regla 3) cuando esa identificación pública exacta es No un alias combinado. Nombra directamente al proveedor y coincide con lo que Codex muestra en su selector después de una sincronización de catálogo.
+- **Semilla `models[]` o `defaultModel`** en un proveedor tan corto ids (reglas 5/7) resolver sin el
+ `provider/` prefijo.
+- **Los patrones de prefijo son una conveniencia**, no una garantía: solo se resuelven si un proveedor con ese nombre (e.g. `anthropic` o `groq`En realidad está configurado.
+
+Véase [Configuración](/es/reference/configuration/) para los campos del proveedor estas reglas leídas.
+
+
+
+
+## Salida estructurada en rutas Cursor
+
+Cursor rutas traducir Responses `text.format` (`json_object` o `json_schema`) en forma explícita instrucciones de respuesta final en el contexto del sistema y solicitud activa, incluyendo resultado de herramienta continuaciones. Esta es una respuesta rápida: Cursor no proporciona decodificación nativa restringida de JSON en este transporte, y los modelos aún pueden devolver una respuesta inválida. El adaptador no convierte la prosa en una decisión de aprobación. Los auto-revisores deben validar el JSON devuelto y usar un Ruta estructurada-capaz de salida cuando se requiere una aplicación estricta. Solicitudes de texto ordinarias y Las llamadas a herramientas intermedias mantienen su comportamiento existente.
diff --git a/docs-site/src/content/docs/es/guides/native-main-profiles.md b/docs-site/src/content/docs/es/guides/native-main-profiles.md
new file mode 100644
index 00000000000..14925a9822a
--- /dev/null
+++ b/docs-site/src/content/docs/es/guides/native-main-profiles.md
@@ -0,0 +1,51 @@
+---
+title: "Perfiles de inicio de sesión principales nativos"
+description: "Administrar el nativo almacenado Codex los perfiles de inicio de sesión por separado de OpenCodex Pool enrutamiento."
+---
+
+
+
+## El inicio de sesión nativo no es una selección Pool
+
+En **Codex Set → Multi-auth**, abrir **Administrar el inicio de sesión principal** En el caso de
+**Inicio de sesión nativo principal** inmediatamente debajo de la tarjeta de cuenta principal. El mismo El panel aparece junto a la tarjeta principal en el espacio de trabajo de la cuenta Proveedores. Lo administra el inicio de sesión físico de Codex, no la cuenta seleccionada para el próximo Pool solicitud. No agrega una pestaña Integraciones ni reemplaza los controles Pool existentes.
+
+El visualizado **CODEX_HOME efectivo** pertenece al servidor OpenCodex. Cuando usando un panel de control remoto, este puede ser un equipo diferente del navegador.
+**Perfil activo registrado** es el propietario registrado de la tienda de perfiles cifrados; el servidor verifica el inicio de sesión físico antes de cambiar. Un inicio de sesión cambiado fuera Por lo tanto, OpenCodex puede producir un error de desajuste de propiedad en lugar de ser silenciosamente sobreescrito.
+
+
+
+## Guardar y cambiar
+
+Uso **Guardar el inicio de sesión actual como perfil** para registrar el inicio de sesión de la aplicación existente. Por un ya registrado inicio de sesión activo esto actualiza su etiqueta; no se inscriba una nueva cuenta. El cambio de perfil requiere el almacén de credenciales de archivo compatible y un sistema operativo disponible. Los códigos de diagnóstico explican por qué los controles son no disponible; no evitar un error de almacén de claves o propiedad copiando Pool credenciales en el archivo de inicio de sesión nativo. El panel está deshabilitado mientras el La operación de reautentificación del dispositivo nativo existente de la tarjeta está activa.
+
+Seleccionar **Cambiar** junto a un perfil inactivo almacenado. Revisar la etiqueta de destino y visualizado **CODEX_HOME**, luego cierre Codex nativo en el equipo servidor usando que **CODEX_HOME**. Seleccione la casilla de verificación debajo de los pasos para confirmar que Codex es cerrado, luego confirme el cambio. No se envía ninguna mutación de credenciales antes de la confirmación. El panel vuelve a leer la casa actual, el propietario activo y el estado de recuperación inmediatamente. antes de enviar. Si ese estado cambió, revise el nuevo estado y confirme nuevamente. El backend existente sigue siendo autorizado para cerraduras, comprobaciones de procesos, drenaje Solicitudes en vuelo, activación y reversión.
+
+La confirmación muestra tres pasos: cerrar Codex en el equipo servidor para visualizado **CODEX_HOME**; seleccione la casilla de abajo para confirmar que Codex está cerrado, luego confirme el cambio; espere el resultado y el perfil activo actualizado, luego siga las instrucciones para volver a abrir Codex. Mantenga Codex cerrado hasta que tenga Verificó el resultado. Reabrir la guía espera a que el existente lectura y actualización de la cuenta para finalizar; un fallo de actualización le pide que actualice antes de continuar.
+
+Si `CODEX_BUSY` bloquee el cambio, cierre Codex en el equipo servidor usando la visualizado **CODEX_HOME**, elige **Actualizar estado**Revisar el perfil activo. Seleccionar **Cambiar** nuevamente y seleccione la casilla de verificación para confirmar que Codex está cerrado antes confirmar el cambio. La actualización solo lee el estado; no vuelve a intentar el cambio. Un error de comprobación de proceso le pide que compruebe que Codex está cerrado e inspeccione el servidor diagnóstico, mientras que los errores de solicitud activa o de operación ocupada le piden que trabajo existente para terminar. Un error de almacenamiento significa que servidor no puede acceder de forma segura a la carpeta de inicio de sesión o al almacenamiento del perfil; diagnóstico antes de otro cambio. Otros errores permitidos identificar problemas de perfil, almacén de claves, almacenamiento o recuperación sin mostrar crudo mensajes del servidor. Una respuesta perdida sigue siendo un resultado no confirmado, incluso si el perfil activo actualizado cambiado. Una respuesta faltante no significa que el original Login fue restaurado. Nada se vuelve a intentar automáticamente. Para volver a intentar un cambio de inicio de sesión, seleccione la acción de nuevo y confirme que Codex está cerrado.
+
+Los resultados están etiquetados **Último resultado confirmado**. Una actualización manual despeja el muestra un error, pero no confirma una transacción anterior de respuesta perdida. Un Los requisitos de reinicio existentes de un cambio confirmado anterior pueden permanecer visibles.
+
+Después del éxito, compruebe el perfil activo actualizado y vuelva a abrir Codex nativo en el servidor con la pantalla **CODEX_HOME**. Siga cualquier requisito de reinicio Se muestra en el panel. El panel vuelve a leer el estado del perfil y actualiza el controlador de cuenta. No llama a las mutaciones de selección/configuración Pool ni edita claves del proveedor, tareas o historial. El backend existente todavía reconcilia a los nativos
+`__main__` identidad, tal como lo hace para el flujo de trabajo CLI.
+
+
+
+## Recuperación y perfiles anteriores
+
+Estas son diferentes operaciones:
+
+- **Recuperar el cambio interrumpido** concilia una transacción de backend inconclusa.
+ **Restaurar la transacción pendiente** Solicitudes de reversión de esa transacción. Ambos requieren que seleccione la casilla de verificación para confirmar Codex está cerrado antes de confirmar El cambio. Estos controles permanecen disponibles cuando una lista de perfiles dañada no se puede leer, pero los diagnósticos informan la recuperación pendiente.
+- **Volver a la vista previa** después de que un interruptor exitoso seleccione el perfil mostrado antes de su switch usando el flujo de trabajo normal y confirmado. Esto acceso directo se mantiene solo en la memoria de la página, con alcance a la casa y espera activo propietario, y desaparece cuando la página se recarga o el proxy/propietario cambia. El API no devuelve el origen de la transacción, por lo que este no es un servidor verificado deshacer log: otro operador podría haber cambiado el inicio de sesión entre la lectura previa y su interruptor. Después de recargar, seleccione el perfil guardado deseado directamente.
+
+Un error de red no establece que una escritura falló o se revirtió. El panel relee el estado del servidor después de una mutación enviada, incluida una respuesta perdida, y Nunca lo vuelve a intentar automáticamente. Si la actualización falla, un cambio exitoso no es reportado como deshecho. Actualice e inspeccione los diagnósticos antes de otra operación. El existente `ocx account main doctor` El comando proporciona diagnósticos del lado del servidor.
+
+
+
+## Alcance de esta fase
+
+Este panel enumera, registra, cambia y recupera los perfiles existentes utilizando el existentes `/api/native-main-profiles` límite. No inicia procesos de inicio de sesión o exponer el escritor de puesta en escena tokens. Agregar otro inicio de sesión nativo permanece en el existentes `ocx account main add` Flujo de trabajo CLI; la inscripción en el navegador es un proceso separado Seguimiento de la edición 3417. Reautenticación de dispositivos existentes de la principal actual slot es un flujo de trabajo diferente y no es reemplazado por este panel.
+
+Los datos de perfil no se escriben en el almacenamiento del navegador. El cliente solo proyecta público campos, muestra los códigos de error permitidos en lugar de los mensajes del servidor sin procesar, y utiliza el contenedor fetch autenticado existente de la aplicación. El backend autenticación de gestión, GUI-sesión/CSRF y comprobaciones de sin cambios.
diff --git a/docs-site/src/content/docs/es/guides/opencode.md b/docs-site/src/content/docs/es/guides/opencode.md
new file mode 100644
index 00000000000..f3dc2402a64
--- /dev/null
+++ b/docs-site/src/content/docs/es/guides/opencode.md
@@ -0,0 +1,180 @@
+---
+title: "OpenCode"
+description: "Utilice cualquier modelo enrutado de código abierto — opencodex inyecta un bloque de proveedor de entorno de ejecución y deja su propia configuración de código abierto intacta."
+---
+
+opencode lee a sus proveedores desde las capas de configuración JSON fusionadas en lugar del entorno variables, por lo que no hay `ANTHROPIC_BASE_URL`- Ranura de estilo para inyectar. `ocx opencode`
+bridges that gap: asegura que el proxy se está ejecutando, construye un bloque de proveedor desde el catálogo visible, y lo inyecta a través de la capa de entorno de ejecución en línea de OpenCode (`OPENCODE_CONFIG_CONTENT`).
+
+
+
+## Inicio rápido
+
+```bash
+ocx opencode
+```
+
+Esto asegura que el proxy se está ejecutando y lanza código abierto con el código generado.
+`provider.opencodex` y `providers.opencodex` bloques inyectados para ese proceso — el La ortografía heredada lee el código abierto V1 y la ortografía nativa V2. Ambos llevan el esfuerzo de razonamiento variantes en el formato que lee su cliente. Los argumentos adicionales pasan por:
+`ocx opencode run "hello"`.
+
+Los modelos enrutados aparecen en el selector debajo de la `opencodex` proveedor:
+
+```text
+opencodex/kiro/glm-5
+opencodex/gpt-5.6-sol # native slugs stay unprefixed
+```
+
+
+
+## Esfuerzo de razonamiento
+
+Opencode expone el esfuerzo de razonamiento como modelo *variantes*. opencodex escribe una variante por esfuerzos declarados, incluyendo `none` cuando el modelo apoya explícitamente el razonamiento discapacitante. La selección llega al proxy como un esfuerzo de razonamiento, no solo una etiqueta de selector. Existentes Los pines de esfuerzo ascendente en opencodex aún se aplican.
+
+Se generan dos bloques de proveedores para esto:
+
+| Bloquear | Leer por | Lleva variantes |
+|---|---|---|
+| `provider.opencodex` | código abierto V1 (`npm` + `options`) | Mapa de opciones heredadas |
+| `providers.opencodex` | código abierto V2 (`package` + `settings`) | configuración nativa array |
+
+V2 utiliza su matriz variante nativa en lugar del mapa heredado. Los bloques nombran el mismo proveedor y los ID de modelo y se fusionan en una entrada de proveedor. Ningún modelo aparece dos veces. V2 siempre escribe un matriz de variantes, vacía cuando no se declaran opciones, para suprimir automáticamente baja/media/alta Opciones. Los razonadores de profundidad fija conocidos en el bloque heredado desactivan cada uno generado automáticamente Por la misma razón; esas entradas deshabilitadas no son esfuerzos seleccionables.
+
+Se exporta un valor predeterminado de modelo conocido; al seleccionar una variante se anula ese valor predeterminado de cliente. No se inventa ningún valor predeterminado cuando el catálogo declara ninguno. El lanzador regenera estos configuración cada vez; actualizar una integración administrada o volver a exportar una instantánea manual después de cambiar el valor predeterminado en opencodex.
+
+
+
+## Imágenes y archivos adjuntos
+
+opencode decide si un modelo toma una imagen de la entrada del modelo en sí, y no puede preguntar models.dev sobre `opencodex` — este proveedor no está allí. Los bloques generados Llevar los campos de capacidad por modelo tomados de los metadatos efectivos de los informes proxy en
+`GET /api/models`. Por ejemplo, el bloque heredado lleva `attachment` y `modalities`:
+
+```json
+"gpt-5.6-luna": {
+ "name": "gpt-5.6-luna (native)",
+ "limit": { "context": 272000, "output": 128000 },
+ "attachment": true,
+ "modalities": { "input": ["text", "image"], "output": ["text"] }
+}
+```
+
+V2 recibe nativo `capabilities.input` y `capabilities.output` campos; soporte de herramientas conocido usos `capabilities.tools`. Los clientes heredados leen los campos del ejemplo anterior. Cuando el catálogo informa la entrada de imagen para un modelo que cubre el sidecar de visión, opencode permite adjunto a través de modo que el sidecar pueda describirlo antes de la llamada de origen.
+
+V2 requiere un `tools` booleano siempre que exista el objeto de capacidades nativas. Cuando soporte de herramientas es desconocido, ese objeto se omite; las modalidades de entrada conocidas aún alcanzan V2 a través del legado migración del bloque. Esto evita inventar el soporte de herramientas o invalidar la configuración nativa del proveedor.
+
+Las capacidades desconocidas dejan en su lugar las propias suposiciones de reserva de OpenCode; no se detectan proveedores de hechos. Los metadatos explícitos de solo texto evitan las solicitudes de imágenes en el lado del cliente.
+
+Los modelos personalizados heredan metadatos de catálogo conocidos a menos que se almacene una anulación explícita. Una costumbre La declaración de entrada de texto solo permanece como texto. Las capacidades desconocidas se omiten en lugar de Una escalera de razonamiento vacía explícita no declara al modelo incapaz de razonar.
+
+
+
+## Su propia configuración nunca se modifica
+
+El lanzador no copia ni reescribe `~/.config/opencode/opencode.json`, proyecto `opencode.json` / `opencode.jsonc`o cualquier otra capa de configuración en disco. Puede lean la configuración global o de proyecto para detectar que un proveedor anula — bajo `provider.opencodex`
+o `providers.opencodex` — mientras sus proveedores, agentes, combinaciones de teclas, entradas MCP existentes, y relativo `{file:…}` referencias siguen resolviendo de sus archivos originales.
+
+Solo para este lanzamiento, opencodex agrega ambos bloques generados — `provider.opencodex` y
+`providers.opencodex` — a través de la capa de ejecución en línea de OpenCode. Esa capa se fusiona después de la configuración global/custom/proyecto y anula solo las claves contradictorias para el proceso hijo.
+
+| Capa | Comportamiento con `ocx opencode` |
+| --- | --- |
+| Global / custom / config del proyecto | Dejado en el disco exactamente como lo escribiste |
+| Tiempo de ejecución en línea (`OPENCODE_CONFIG_CONTENT`) | Recibe el generado `provider.opencodex` y `providers.opencodex` bloques (fusionados en cualquier configuración heredada en línea) |
+| Relativo `{file:…}` trayectorias | Sigue resolviendo contra el archivo de configuración que los definió originalmente |
+
+Si una configuración global o de proyecto también define el proveedor bajo `provider.opencodex` o
+`providers.opencodex`, el lanzador imprime una nota informativa: la capa de entorno de ejecución de
+`ocx opencode` lo anula para ese lanzamiento.
+
+
+
+## Poner el bloque en su propia configuración
+
+`ocx opencode` inyecta el bloque de proveedor para un solo lanzamiento, lo que significa `opencode` todavía No se sabe nada del proxy. Cuando usted quiere modelos encaminados disponibles de llano `opencode` — o desde una extensión de editor que nunca pasa por el lanzador — `ocx export` Imprime lo mismo bloque de proveedor para que usted pueda combinar en su propia configuración:
+
+```bash
+ocx export --client opencode
+```
+
+El proxy debe estar en ejecución. El comando imprime la configuración, el destino canónico (`~/.config/opencode/opencode.json`, o bajo `XDG_CONFIG_HOME` cuando se establece), la combinación aviso, y la línea de exportación env. Nunca toca ese archivo — la sección anterior se mantiene verdadera, y mover el bloque a su configuración es su acto explícito.
+
+:::caution[Combina la configuración; no la reemplaces]
+Combinar ambos bloques — `provider.opencodex` y `providers.opencodex` — en su configuración existente. Reemplazar todo el archivo con el exportado destruye sus otros proveedores, agentes, keybinds, y entradas MCP. `ocx export --out` se niega a sobrescribir un archivo existente por exactamente esta razón, así punto `--out` en una ruta de rasguño y copiar los bloques a través de:
+
+```bash
+ocx export --client opencode --out ~/opencodex-opencode.json
+```
+:::
+
+A diferencia del bloque de entorno de ejecución del lanzador, un bloque fusionado es una instantánea estática: no sigue su catálogo. Relanzamiento `ocx export` después de agregar un proveedor o cambiar la visibilidad del modelo o los metadatos. Alternativamente, [Habilitar la integración gestionada](/es/guides/integrations/): `ocx sync` con seguridad refresca sus bloques ya propios, dejando intactos los bloques editados a mano o eliminados.
+
+Una vez combinado, exportar la clave de admisión antes de iniciar opencode — a menos que el proxy está en bucle, donde no se necesita:
+
+```bash
+export OPENCODEX_OPENCODE_API_KEY=
+```
+
+
+
+## La clave de admisión no se escribe en el disco
+
+Cuando el proxy requiere una clave API, la configuración de entorno de ejecución en línea lleva código abierto
+`{env:…}` referencia en lugar del secreto. Loopback vincula el uso de esa referencia como
+`apiKey`; los enlaces non-loopback lo envían solo a través de `x-opencodex-api-key` así proxy La admisión se mantiene separada de cualquier `Authorization` cabecera.
+
+Ejemplo de Loopback:
+
+```json
+"options": {
+ "baseURL": "http://127.0.0.1:10100/v1",
+ "apiKey": "{env:OPENCODEX_OPENCODE_API_KEY}"
+}
+```
+
+Ejemplo no loopback:
+
+```json
+"options": {
+ "baseURL": "http://192.168.1.10:10100/v1",
+ "headers": {
+ "x-opencodex-api-key": "{env:OPENCODEX_OPENCODE_API_KEY}"
+ }
+}
+```
+
+El valor real se transmite solo a través del entorno de proceso hijo.
+`OPENCODEX_API_AUTH_TOKEN` tiene prioridad, luego el archivo token de servicio endurecido, luego una clave API configurada — que es lo que requiere un enlace sin bucle.
+
+Un enlace de bucle invertido (`127.0.0.1`, el valor predeterminado) no autentica nada, por lo que la `{env:…}` referencia es inerte y puede dejar la variable sin ajustar. Importa sólo cuando `hostname` se establece más allá de loopback; ver [Acceso remoto](/es/reference/configuration/server/#remote-access). Esta clave de admisión es opencodex propio, y no está relacionado con las claves de proveedor de origen configuradas bajo
+[Proveedores](/es/guides/providers/).
+
+
+
+## Revertir
+
+No hay nada que deshacer — ningún archivo de configuración generado está escrito bajo `~/.opencodex`. Ejecutar llano
+`opencode` y lee tu propia configuración exactamente como antes.
+
+
+
+## Límites de modelo
+
+`limit.context` se escribe solo cuando el catálogo informa de una ventana de contexto autorizada; No, el conjunto `limit` bloque se omite y el código abierto mantiene sus propios valores predeterminados.
+
+Los límites de salida utilizan el máximo conocido del modelo a partir del catálogo o metadatos generados. Solo los límites desconocidos vuelven a caer `32000`. El límite de salida siempre está sujeto a la ventana de contexto, incluidos los límites conocidos a continuación. `32000`.
+
+Los límites de entrada conocidos también se transportan y se fijan al contexto; se omiten los límites de entrada desconocidos. CLI exportar, exportación de panel de instrumentos, actualización administrada y el lanzador comparten los metadatos efectivos.
+
+Los `opencodex` El bloque del proveedor se regenera en cada lanzamiento, por lo que los configuración por modelo se realizan dentro de él No sobrevivirá. Mantenga las entradas personalizadas bajo su propia clave de proveedor.
+
+
+
+## Necesidades
+
+código abierto debe estar instalado y en `PATH`:
+
+```bash
+npm install -g opencode-ai
+```
+
+El lanzador lee el catálogo de modelos con el administrador local token desde el entorno o desde la casa proxy en ejecución. Se conecta directamente a un oyente de administración de loopback y rechaza las redirecciones. Un concentrador vinculado solo a una dirección no local necesita su loopback `hub.managementIngress` habilitado. El administrador token no se pasa al hijo de OpenCode; la inferencia continúa usando su clave de datos separada. Si falta el administrador local token, el lanzador informa del problema en lugar de volver a intentar con una clave de datos.
diff --git a/docs-site/src/content/docs/es/guides/pi.md b/docs-site/src/content/docs/es/guides/pi.md
new file mode 100644
index 00000000000..af5ee249a03
--- /dev/null
+++ b/docs-site/src/content/docs/es/guides/pi.md
@@ -0,0 +1,140 @@
+---
+title: "Pi"
+description: "Utilice cualquier modelo enrutado de Pi — ocx export escribe un bloque de proveedor personalizado para el models.json de Pi, conectado al proxy en ejecución."
+---
+
+Pi lee a sus proveedores desde un único archivo global JSON en lugar de variables de entorno, por lo que opencodex no lo lanza. En cambio, `ocx export` serializa el `opencodex` bloque de proveedores — base URL, la lista de modelos y la referencia env Pi interpolan — y usted lo fusiona en su propio config.
+
+
+
+## Inicio rápido
+
+Inicie el proxy y, a continuación, imprima la configuración:
+
+```bash
+ocx start
+ocx export --client pi
+```
+
+La salida lleva con el JSON, entonces imprime la ruta de destino, el aviso de fusión, el env línea de exportación, y cuántos modelos llevan límites de contexto autorizados.
+
+```json
+{
+ "providers": {
+ "opencodex": {
+ "baseUrl": "http://127.0.0.1:10100/v1",
+ "api": "openai-completions",
+ "apiKey": "$OPENCODEX_API_KEY",
+ "compat": {
+ "sendSessionAffinityHeaders": true,
+ "supportsDeveloperRole": false
+ },
+ "models": [
+ {
+ "id": "anthropic/claude-opus-5",
+ "name": "Claude Opus 5 (anthropic)",
+ "input": ["text"],
+ "contextWindow": 200000,
+ "maxTokens": 128000
+ }
+ ]
+ }
+ }
+}
+```
+
+Los proveedores de Pi generados permiten `compat.sendSessionAffinityHeaders`. Mantenga este indicador al fusionar o editar manualmente el proveedor: Pi proporciona una identidad de sesión estable y OpenCodex deriva afinidad canónica OpenCode Go de ella. Pi puede omitir la identidad cuando `cacheRetention` es `none`.
+
+Los proveedores de Pi generados también se establecen `compat.supportsDeveloperRole` a `false`, por lo que Pi envía su mensaje de sistema como `system` en lugar de `developer`. OpenCodex reenvía los roles Chat Completions tal como se envían, y varios flujos ascendentes compatibles con OpenAI rechazan `developer` con un 400; cada corriente ascendente acepta `system`.
+
+Los ID de modelo son los selectores canónicos del proxy, por lo que los modelos enrutados aparecen como `provider/model`
+(`anthropic/claude-opus-5`) y las babosas nativas OpenAI permanecen sin prefijar (`gpt-5.6-sol`) Los `name`
+sufijo — `(anthropic)`, `(native)`, `(routed)` — es lo que hace que dos modelos con el mismo nombre de diferentes de origen distinguibles en el selector de Pi.
+
+
+
+## A donde va
+
+La configuración del modelo global de Pi es:
+
+```text
+~/.pi/agent/models.json
+```
+
+:::caution[Combina la configuración; no la reemplaces]
+`ocx export` Nunca escribe ese archivo. Combinar el `providers.opencodex` bloque en él — reemplazar el El archivo destruye todos los demás proveedores que haya configurado allí. `--out` existe para un camino de rasguño y se niega a sobrescribir un archivo existente sin `--force`:
+
+```bash
+ocx export --client pi --out ~/opencodex-pi-models.json
+ocx export --client pi --json > ~/opencodex-pi-models.json # or redirect the byte-exact JSON
+```
+:::
+
+El bloque exportado es una instantánea estática, no una vista en vivo. Relanzamiento `ocx export` Después de añadir a proveedor o cambiar la visibilidad del modelo, y combinar el nuevo bloque sobre el antiguo.
+
+
+
+## La clave de admisión
+
+Dos claves diferentes son fáciles de confundir aquí, y solo la primera aparece en este archivo:
+
+| Clave | Qué es | Donde vive |
+| --- | --- | --- |
+| Clave de admisión proxy | La credencial propia de opencodex, generada en el panel **API** ficha | referenciado por `apiKey` como `$OPENCODEX_API_KEY`; el valor permanece en su entorno |
+| Clave del proveedor | su clave Anthropic / OpenAI / OpenRouter | La propia configuración de opencodex, por [Proveedores](/es/guides/providers/) |
+
+La configuración exportada lleva solo la referencia, nunca un secreto. Pi interpola a bare `$NAME`, así La variable es:
+
+```bash
+export OPENCODEX_API_KEY=
+```
+
+Ese nombre es solo de Pi. opencode utiliza una variable diferente (`OPENCODEX_OPENCODE_API_KEY`, en `{env:…}` forma) — ver el [Guía de código abierto](/es/guides/opencode/).
+
+**Un proxy loopback no necesita ninguna clave.** opencodex se une `127.0.0.1` por defecto y autentica No hay nada allí, así que el `$OPENCODEX_API_KEY` referencia es inerte y puede dejar la variable sin establecer. Importa sólo cuando `hostname` se establece más allá de loopback, que también es el caso donde el proxy se niega a iniciar sin un token — ver [Acceso remoto](/es/reference/configuration/server/#remote-access).
+
+
+
+## Metadatos modelo
+
+`contextWindow` y `maxTokens` solo se emiten cuando el catálogo informa de un contexto autorizado ventana. Cuando no lo hace, ambos campos se omiten para ese modelo y Pi aplica sus propios valores predeterminados;
+`ocx export` imprime cuántas filas cayeron en ese caso.
+
+Los límites de salida utilizan el máximo conocido del modelo a partir del catálogo o metadatos generados. Solo los límites desconocidos vuelven a caer `32000`. El límite de salida siempre está sujeto a la ventana de contexto, incluidos los límites conocidos a continuación. `32000`.
+
+Dos campos están deliberadamente ausentes. `cost` requiere los cuatro campos de precio y opencodex no tiene Los datos de precios para los modelos enrutados — que emiten ceros afirmarían que cada modelo es gratuito.
+
+`reasoning` es el único campo que solía estar ausente y ahora no lo está: Pi almacena un booleano mientras el El catálogo lleva una escalera de esfuerzo, y mapear uno sobre el otro solía ser una suposición. Desde el La escalera del catálogo es la propia declaración del proxy sobre si un modelo acepta parámetros de razonamiento. (adaptadores honor `reasoning_effort`), una fila de exportación con un **no vacío** La escalera ahora emite
+`"reasoning": true`y una fila sin uno (o con una escalera explícitamente vacía) se queda Razonamiento libre. Pi ofrece su control de esfuerzo para exactamente los modelos que opencodex aceptará encendido. La exportación también emite un `thinkingLevelMap` que oculta todos los niveles de pi sin objetivo declarado (`null`), por lo que pi nunca ofrece — y nunca envía — un esfuerzo que la escalera no contiene. Uno fallback mantiene el modelo utilizable: cuando `ultra` Se declara sin `max`, pi's `max` mapas de nivel a `ultra` (todavía un miembro de la escalera). Si necesita un mapeo diferente, edite a mano `thinkingLevelMap` Según lo documentado por Pi.
+
+Tratar `reasoning` como metadatos Pi-UI: se deriva de la escala de catálogo, no prueba que el upstream soporta de forma nativa un parámetro de razonamiento. Lo que el proxy realmente envía para un determinado
+`reasoning_effort` el valor depende del adaptador del proveedor y del modelo — puede pasar el valor a través de él, traducirlo (alias de alambre), sujetarlo a la escalera configurada, emularlo u omitirlo completamente (e.g. `noReasoningModels`) El booleano solo controla si Pi ofrece el control en Todo.
+
+
+
+## Compatibilidad con archivos adjuntos y solicitudes
+
+:::note[Comportamiento pendiente de publicación]
+Los cambios de paridad de proveedor descritos aquí están en la pila de relaciones públicas de desarrollo; una pila instalada más antigua. release puede seguir teniendo el comportamiento de conversión anterior.
+:::
+
+OpenCodex normaliza las imágenes de usuario en forma de Pi/MCP y Anthropic antes de elegir el Chat nativo o ruta traducida. Las imágenes devueltas por las herramientas utilizan un portador de mensaje de usuario traducido después de la resultados de herramientas emparejadas; las imágenes de usuario ordinarias y los resultados de herramientas solo de texto pueden mantener la ruta nativa. Usar moderno `tool_calls` y `role: "tool"` con `tool_call_id`: legado `function`-resultado de la imagen la traducción es rechazada en lugar de descartar silenciosamente el resultado.
+
+Un razonamiento explícito de `none` Sobrevive a la conversión de chat. Límites de salida y muestreo Los controles se conservan para los objetivos genéricos API-key Responses; el objetivo canónico ChatGPT sigue aplicando sus propias restricciones. Esto no hace que los controles de todos los proveedores sean equivalentes.
+
+El audio WAV/MP3 en línea de un mensaje de usuario o de un resultado de herramienta se conserva al convertirlo a OpenAI Chat como una parte `input_audio`. El audio de herramientas se coloca en un mensaje de usuario posterior a los resultados emparejados, porque los mensajes de herramienta de Chat solo admiten texto. También se conservan los documentos que incluyen sus propios bytes base64 en un mensaje de usuario: llegan a Anthropic, OpenAI Chat y Google como documento nativo, parte de archivo o datos en línea. El resto devuelve un error explícito, en lugar de continuar sin el adjunto: audio remoto o incompatible, identificadores de archivo o referencias remotas que el proxy no pueda resolver, adjuntos en mensajes de sistema, documentos en resultados de herramientas y documentos enviados a protocolos sin un soporte para sus bytes. Las imágenes que solo tienen un identificador de archivo comparten esa restricción, porque los adaptadores de conversión no pueden resolverlo. Convierte primero el adjunto a texto o usa un protocolo nativo y un modelo que lo admitan. Chat nativo y Responses sin conversión, incluido Azure, mantienen su comportamiento; esto no garantiza que todos los modelos admitan esos medios. Los límites de conversión de video siguen dependiendo del adaptador.
+
+
+
+## Estado del esquema
+
+:::note[Sin verificar en una instalación real]
+La forma anterior sigue la documentación personalizada de Pi. Tiene **no** ha sido verificado contra un real `~/.pi/agent/models.json` en una máquina con Pi instalado. Si Pi rechaza la exportación bloque, el desajuste está de nuestro lado — por favor
+[abrir un problema](https://github.com/lidge-jun/opencodex/issues) Lo que dice Pi.
+:::
+
+
+
+## Necesidades
+
+Un proxy opencodex en ejecución (`ocx start`) y Pi instalado. `ocx export` lee el catálogo en vivo a través de la administración del proxy API, por lo que nunca se puede emitir una configuración con una lista de modelos vacía.
diff --git a/docs-site/src/content/docs/es/guides/protocol-paths.md b/docs-site/src/content/docs/es/guides/protocol-paths.md
new file mode 100644
index 00000000000..c2643332ab4
--- /dev/null
+++ b/docs-site/src/content/docs/es/guides/protocol-paths.md
@@ -0,0 +1,136 @@
+---
+title: "Rutas de protocolo"
+description: "Cómo una solicitud en el Responses, Chat Completions o Messages API llega a un proveedor, cómo obtener una vista previa y rastrear esa ruta, y los switches por etapas que la cambian."
+---
+
+opencodex sirve a tres API de cliente: **Responses** (`/v1/responses`), **Chat Completions**
+(`/v1/chat/completions`), y **Messages** (`/v1/messages`) Cada proveedor recibe una alambre, decidido por su adaptador. Cuando el cliente API y el cable ascendente difieren, la solicitud es convertido en el camino de entrada y la respuesta se convierte en el camino de vuelta. Esta página explica cómo Se nombra la ruta, cómo verla antes y después de una solicitud y qué configuración la cambian.
+
+Todos los configuración de esta página están desactivados por defecto. Con los valores predeterminados, las solicitudes viajan exactamente como lo hacen antes de que existieran estas configuración.
+
+
+
+## Modos de entrega
+
+Una ruta es una lista de saltos desde el cliente API al cable ascendente. Los saltos son los tres API nombres, `ir` (Solicitud y formulario de evento neutrales del adaptador de opencodex), y `responses-internal`
+(Responses JSON o SSE producido solo como un puente interno, nunca visto por un cliente).
+
+| Modo | Significado | Ruta de solicitud de ejemplo |
+| --- | --- | --- |
+| `native` | Mismo API en ambos extremos; el cuerpo del cliente es lo que recibe el proveedor | `chat > chat` |
+| `translated` | Convertido una vez, a través del códec del cable de destino o el IR | `chat > responses`, `responses > ir > messages` |
+| `legacy-bridge` | Convertido a través del formulario interno Responses primero | `chat > responses-internal > ir > messages` |
+| `blocked` | Rechazado antes de que nada fuera enviado | ninguno |
+
+`native` Describe cómo viaja una solicitud. No es un veredicto de compatibilidad: un camino nativo puede todavía cumplir con un proveedor que rechaza un campo, y los resultados verificados de la Compatibility Lab son una cosa separada.
+
+Con cada apagado, una ruta de proveedor único elegible toma estos caminos:
+
+| Cliente API → de origen | Ruta |
+| --- | --- |
+| Responses → Responses | Nativo |
+| Responses → Chat o Messages | Traducido a través de IR |
+| Chat → Chat | nativo (JSON cuando el cliente envía `stream: false`) |
+| Chat → Responses, Messages → Responses | traducido a través del códec Responses |
+| Chat → Messages, Messages → Chat | Puente legado |
+| Messages → Messages | nativo solo cuando el llamante reenvía su propia credencial Anthropic; puente heredado para una clave opencodex |
+
+Los combos, las políticas de enrutamiento y el esfuerzo sintético o las filas de modelos rápidos toman el puente heredado de Chat y Messages a menos que un interruptor debajo diga lo contrario.
+
+
+
+## Efectos de función
+
+Algunas características de solicitud no pueden sobrevivir a cada conversión. Por ejemplo, los campos Chat `n`,
+`logprobs`, `logit_bias`, `seed`, `audio`, y `prediction` no tienen lugar en un cuerpo Responses, y el Messages `top_k` campo se deja caer en el camino a Responses. opencodex registra cada efecto como
+`passthrough`, `translated`, `degraded`, o `unsupported` (Se muestra como *Caído* en el panel). Estos se declaran desde el código de los convertidores; no son resultados medidos.
+
+
+
+## Previsualizar una ruta
+
+Una vista previa se calcula solo a partir de su configuración. No envía nada a ningún proveedor, no rotación combinada avanzada, y no se registra.
+
+- Panel de control: **API** página, **Solicitar vista previa de ruta**.
+- CLI:
+
+ ```bash
+ ocx api explain --model combo/main --inbound chat --feature request.seed
+ ocx api explain --model claude-sonnet-4-5 --inbound messages --json
+ ```
+
+La vista previa muestra cada ruta candidata con su ruta de solicitud, modo de entrega, efectos de función y Si el `reject` política (abajo) lo rechazaría. `ocx api protocols --json` enumera la característica nombres que acepta. Se muestra una solicitud Messages que reenvía la credencial Anthropic del llamante con `caller-credential-required` en lugar de asumir, porque una vista previa no tiene llamante.
+
+
+
+## Rastrear una solicitud
+
+Cada solicitud que llegó a un proveedor, o que fue rechazada antes de enviarla, registra la ruta que realmente tomó. tomó en su fila de registro: el modo final y las rutas, las razones, la efectos característicos, y un camino por intento físico. En el panel, **Registros** muestra una insignia de camino, a **Ruta de protocolo** filtro, y a **Ruta de protocolo** en el detalle de la solicitud. Las filas más antiguas tienen No hay datos de ruta y decirlo; nada se adivina.
+
+
+
+## Características irrepresentables
+
+`protocols.unrepresentable` decide lo que sucede cuando una solicitud lleva una característica que su camino gota:
+
+- `legacy` (predeterminado): la solicitud se envía como antes, y la pérdida aparece solo en el archivo de seguimiento. efectos característicos.
+- `reject`: la solicitud se rechaza con HTTP 400 antes de que se envíe nada, nombrando solo la función llaves. Respuestas de chat `invalid_request_error` con código `unsupported_feature`; Respuestas de Messages
+ `invalid_request_error`. El rastro es `blocked`.
+
+Bajo `reject`, una ruta directa se juzga en la entrada una vez que su proveedor y alambre se establecen. Los combos y las políticas no se juzgan en el ingreso; con `nativeChatCombos` en, un combo de chat jueces cada candidato y se salta uno que no puede llevar la petición.
+
+
+
+## Interruptores de despliegue
+
+Estos interruptores preparan los nuevos caminos. Cada uno de los valores predeterminados se desactiva, excepto `antigravityDirect`, y un interruptor que está apagado no cambia nada.
+
+| Cambiar | Cuando esté |
+| --- | --- |
+| `nativeChatCombos` | Un candidato de chat elegible dentro de un combo se envía de forma nativa desde su propia copia del cuerpo del cliente; los otros candidatos mantienen el puente. |
+| `managedMessagesNative` | Una solicitud Messages cuya ruta es un proveedor Anthropic directo y autenticado por clave se envía como Messages en lugar de a través del puente. Las rutas que necesitan un comportamiento de solo puente (un esfuerzo anclado, elisión de habilidades bloqueadas, el sidecar de búsqueda web, preprocesamiento de visión, filas sintéticas) permanecen en el puente. |
+| `managedMessagesNativeOAuth` | Nativo Messages para el unpooled `anthropic` Proveedor de OAuth en `api.anthropic.com`. Eficaz sólo con `managedMessagesNative`; un conjunto de cuentas Anthropic agrupadas OAuth permanece en el puente. |
+| `directEncoders` | Para un flujo ascendente que no sea Responses, la respuesta a un cliente Chat o Messages se codifica directamente desde los eventos del adaptador en lugar de a través del flujo interno Responses. El lado de la solicitud no cambia. |
+| `antigravityDirect` | **Activado por defecto**; lo puso a `false` para apagarlo. Una solicitud de Chat o Messages cuya ruta es un proveedor de Antigravedad Google salta el cuerpo interno Responses en ambas direcciones: la conversación se decodifica desde el cuerpo del cliente directamente a lo que compila el adaptador Google, y la respuesta se codifica directamente como con `directEncoders`. El camino lee `chat -> ir -> other` o `messages -> ir -> other`. Las configuración de solicitud (modelo, esfuerzo, límites, elección de herramientas) aún pasan por las políticas habituales, por lo que la rotación de la cuenta, las reglas de esfuerzo y el uso no se modifican. Combos, políticas, una herramienta de búsqueda web alojada, imágenes para un modelo marcado solo texto, un modelo que la intercepción de llamada de sombra podría reescribir y el texto que el proxy reescribe (un catálogo de habilidades, un enlace de imagen generada) permanecen en el puente y la fila de registro nombra la razón. |
+| `shadowPlan` | Al final de cada solicitud de Chat o Messages, el plan que una vista previa habría predicho se compara con la ruta que tomó la solicitud; un desacuerdo agrega `planMismatch: true` al registro de ruta de la fila de registro. No se envía ninguna segunda solicitud. |
+
+Cámbialos con el CLI o editando `protocols` en `config.json`
+([referencia](/es/reference/configuration/server/#protocol-paths-protocols)):
+
+```bash
+ocx api policy # show the current policy; changes nothing
+ocx api policy --rollout shadowPlan=on # change one switch
+ocx api policy --unrepresentable reject
+```
+
+`ocx api policy` escribe solo cuando pasa una bandera de configuración, y solo cuando la ejecuta.
+
+
+
+### Plano de sombra
+
+`shadowPlan` es el primer paso seguro: no cambia ninguna solicitud. Verifica si la vista previa está de acuerdo con la realidad para el tráfico que realmente envías. La comparación usa la ruta que resolvió la solicitud (para un combo, el objetivo que respondió), y compara el modo de entrega, el cable ascendente, y la ruta de solicitud. El camino de la respuesta no se compara, porque `directEncoders` Lo cambia y el vista previa no modela ese cambio. Una solicitud Messages reenviada por el llamante y una compatibilidad con Claude El rechazo no se compara. Las solicitudes Responses no se comparan.
+
+`planMismatch` aparece en el `protocolTrace` de una fila devuelta por `GET /api/logs`. El panel No lo muestra todavía.
+
+
+
+## Lo que aún no se ha movido
+
+Estas rutas siguen utilizando el puente interno Responses o no están cubiertas:
+
+- Las solicitudes de chat y Messages todavía se decodifican en un cuerpo con forma de Responses antes del IR, incluyendo en un camino traducido. La excepción es una solicitud de Chat o Messages a una única ruta antigravedad Google. a menos que `antigravityDirect` está configurado para `false`.
+- Los candidatos de la política de enrutamiento, combos alcanzados a través de una fila de esfuerzo, combo candidatos mientras
+ `nativeChatCombos` está apagado, y combos Messages.
+- codificación Direct (`directEncoders`) cubre solo una ruta concreta, no Responses en streaming entrega. Hijos combinados y de políticas, compactación enrutada, adaptadores de giro (Cursor, Devin, CLIs del agente de codificación, CodeBuddy), y las vueltas del sidecar mantienen el puente.
+- Un candidato combinado de chat nativo que falla en la banda antes de que cualquier salida no pase al siguiente candidato; uno puenteado lo haría.
+- Los sidecares de búsqueda web, visión y generación de imágenes solo se ejecutan en la tubería Responses.
+- `previous_response_id`, `store`, `background`, y las características Responses estancia de compactación.
+- Los adaptadores cuyo cable no es ninguna de las tres API (Gemini, Kiro, Cursor y otros) se traducen a través de la IR sin afirmaciones de características.
+- Messages nativo administrado a Anthropic de primera parte preservar un coherente observado Claude Code CLI agente de usuario, UUID de sesión y encabezados SDK permitidos en la actualización y selección de cuenta de token. La colocación de credenciales sigue siendo propiedad de un proxy y la lista de permisos beta aún se aplica. Desaparecidos o no válidos usa los encabezados de compatibilidad existentes; los hosts compatibles y Responses generados retienen su comportamiento actual. Los encabezados por sí solos no autorizan solicitudes ni establecen soporte oficial. El agente de TypeScript SDK `sdk-ts` punto de entrada usuario-agente se reconoce con el mismo requerido encabezados de identidad, preservando sus betas de características nativas permitidas en las solicitudes Anthropic de origen.
+- El chat nativo sobre OAuth no está planeado. Nativo Messages sobre Anthropic OAuth cubre solo un cuenta no compartida; un conjunto de cuentas agrupadas permanece en el puente.
+- La ruta de acceso nativa administrada Messages reenvía un `anthropic-beta` valores solo de un corto Permitido y sólo para `api.anthropic.com`, gotas campos de nivel superior fuera de su lista de permisos sin un efecto de característica, y no se aplica
+ `claudeCode.stabilizePromptCache`. Un cliente reconocido de Claude Code mantiene `context-management-2025-06-27` junto con su
+ `context_management` Campo de cuerpo. Para las solicitudes de clave Anthropic y OAuth de origen, cualquier El cliente Messages puede enviar `thinking-binding-controls-2026-08-01` con `thinking.block_binding`
+ en el pensamiento adaptativo o habilitado. Las tiras proxy que anidaron el campo cuando la beta está ausente o el destino no lo soporta, conservando el resto de la configuración de pensamiento. Nube Los puntos finales de proveedores y los proveedores compatibles con terceros no heredan el soporte beta de terceros. El emparejamiento utiliza el encabezado final, incluidas las betas configuradas por el operador; solo una beta es válida para
+ [Diagnósticos de transformación del pensamiento](https://platform.claude.com/docs/en/build-with-claude/preserved-thinking). Los nombres beta caídos aparecen una vez en el registro del proxy como `anthropic-beta-dropped=`.
diff --git a/docs-site/src/content/docs/es/guides/providers.md b/docs-site/src/content/docs/es/guides/providers.md
new file mode 100644
index 00000000000..ee62961d489
--- /dev/null
+++ b/docs-site/src/content/docs/es/guides/providers.md
@@ -0,0 +1,976 @@
+---
+title: "Proveedores"
+description: "En todos los sentidos opencodex autentica y habla con un proveedor de LLM — OAuth, API clave, ChatGPT hacia adelante y local."
+---
+
+A **proveedor** es un punto final LLM ascendente más cómo llegar a él: un adaptador, una base URL, una autenticación modo y una lista de modelos opcional. Los proveedores viven bajo `providers` en `~/.opencodex/config.json`.
+
+La vista general del proveedor del panel de control separa los detalles de conexión, el uso de la cuenta y las notas editables. Las notas aparecen una vez, debajo de las secciones de conexión y autenticación. Preconfiguración de patrocinador compatibles también muestran una breve introducción, una etiqueta de patrocinador y enlaces al sitio o consola del proveedor. Estos enlaces conservan los parámetros de referencia del preset. La información del patrocinador se muestra solo cuando el nombre de proveedor configurado, adaptador y punto final coinciden con el preset; nunca cambia el enrutamiento, selección de cuenta o valores predeterminados.
+
+
+
+## Modos de cuenta OpenAI
+
+| Id de proveedor | Uso | Regla de credenciales/cuenta |
+| --- | --- | --- |
+| `openai` | Codex inicio de sesión | Pool(predeterminado) selecciona las cuentas principales más agregadas; Direct utiliza el inicio de sesión actual de la persona que llama/principal solamente. |
+| `openai-apikey` | OpenAI API | Solo se configura el grupo de claves/claves API; nunca lee cuentas Codex. |
+
+Usar desnudo `gpt-5.6-sol` con la opción Pool/Direct en la página Proveedores, o
+`openai-apikey/gpt-5.6-sol` para API. Las rutas de credenciales nunca se cruzan entre sí. La ruta API publica 1,050,000 metadatos de entrada de contexto / 922,000 máximos. Es
+`sol-pro`, `terra-pro`, y `luna-pro` Los identificadores virtuales mantienen su identidad pública seleccionada mientras el cable utiliza el modelo base plus `reasoning.mode: "pro"`.
+
+Si el `openai` proveedor falta o está deshabilitado, el selector de cuentas del panel y Codex Auth page puede restaurarlo: las filas ausentes se crean a partir del preajuste canónico, canónica deshabilitada Las filas se vuelven a habilitar sin necesidad de reemplazar los configuración del modelo o modo guardado, y los configuración no canónicos. `openai`
+no se ofrecen filas que la ruta de recuperación.
+
+La compatibilidad de Luna Reserve es un ChatGPT La capacidad de la cuenta en lo canónico OpenAI El camino, no un OpenAI APISu selector principal almacenado manual requiere un modo de escritorio local sin authless efectivo y un permiso de flujo ascendente vinculado a credenciales actual; una entrada de catálogo sola no autoriza una solicitud. Ver [Luna Reserve junto a modelos enrutados](/es/reference/cli/providers-accounts/#luna-reserve-alongside-routed-models)
+para la configuración, el orden de reinicio, los requisitos de autorización y los ayudantes no compatibles.
+
+Para agregar una cuenta con cuota agotada y finalizar su validación diferida, consulte
+[Codex calentamiento de la cuenta](/es/guides/codex-integration/#codex-account-warmup).
+
+
+
+### Capacidad de la grupo
+
+Para el inicio de sesión de Codex en el modo Pool, la descripción general de los proveedores muestra una estimación del peso configurado del La capacidad utilizada por el grupo en lugar de presentar una cuenta arbitraria como el total del proveedor. El mismo fila también muestra el porcentaje de cuota bruta de la cuenta efectiva actual, para que pueda distinguir el Estimación de la cuenta que una nueva solicitud usaría.
+
+Cuando la información de restablecimiento está disponible, el resumen muestra el siguiente tiempo de restablecimiento y la capacidad que Se espera que el reset se recupere como `+N% pool capacity`. **Cobertura incompleta** significa una o más grupos cuentas no podrían contribuir de manera segura a la estimación, por ejemplo, porque su plan o desconocido, su lectura es rancia, o el relato está pausado o necesita reautenticación.
+
+A **Cobertura de ventana parcial** advertencia significa que algunas cuentas incluidas informaron una ventana de cuota, pero No otro. La visión general mantiene esas ventanas separadas y marca cada ventana afectada incompleta en lugar de tratar la lectura faltante como uso para esa ventana.
+
+Esta estimación es solo de visualización. No cambia la selección de cuentas, afinidad de sesión, conmutación, tiempos de reutilización o cualquier otra decisión de enrutamiento. Utilice el [Codex Grupo de cuentas de Autonomía](/es/guides/web-dashboard/#codex-auth-and-account-pools)
+para el estado de la cuenta individual y los controles de enrutamiento.
+
+Las configuración v1 enviadas migran automáticamente al marcador 2 y a una fila consciente de las opciones. La configuración original Se mantiene una vez en `~/.opencodex/config.json.pre-openai-tiers-v2.bak`; restaurarlo con
+`cp ~/.opencodex/config.json.pre-openai-tiers-v2.bak ~/.opencodex/config.json`.
+
+
+
+## Claude Opus 5.5 actualizaciones de progreso
+
+Cuando el `anthropic` adaptador envía Claude Opus 5.5 a `api.anthropic.com` (OAuth o API clave), OpenCodex solicita Anthropic [Modo de visualización de actualización de progreso](https://platform.claude.com/docs/en/build-with-claude/thinking#progress-updates). Las actualizaciones de progreso y los reconocimientos a mitad de giro aparecen como comentarios de asistente visibles en Codex, Incluso cuando los resúmenes de pensamiento están ocultos. Los resúmenes de razonamiento se omiten en este modo porque Anthropic no puede distinguir las actualizaciones de progreso del razonamiento bajo `display: "summarized"`. Los bloques de pensamiento firmados originales se conservan para la continuación de la herramienta; no se descodifica ninguna firma. o reescrito. Las actualizaciones aparecen una vez que se completa su bloque firmado. Otros modelos y compatibles Los puntos finales de terceros conservan su comportamiento de visualización de pensamiento existente.
+
+
+
+## Entrada de imagen Anthropic
+
+Las semillas de modelo Claude incorporadas anuncian la entrada de texto e imagen para ambos `anthropic` (OAuth) y
+`anthropic-apikey`, consistente con [Resumen de modelos de Anthropic](https://platform.claude.com/docs/en/models/overview). Las anulaciones explícitas por modalidad de entrada por modelo siguen siendo autorizadas; no se asumen modelos desconocidos capacidad de imagen. Esto se aplica a todas las integraciones donde la configuración del cliente soporta la imagen. Metadatos de capacidad: OpenClaw exporta un valor declarado `input` array y Kimi Exportaciones de código
+`capabilities: ["image_in"]` solo para modelos con capacidad de imagen. OpenClaw omite `input` cuando no se soporta se declaran las modalidades; Kimi omite `capabilities` para modelos desconocidos o de solo texto. Clientes sin un campo de capacidad soportado mantenga su forma de configuración existente. Después de actualizar opencodex, regenerar o actualizar la configuración del cliente administrada por opencodex para recibir los metadatos actualizados.
+
+
+
+## Firmas de pensamiento Anthropic reproducidas
+
+En el punto final Responses, un flujo ascendente compatible con Anthropic puede rechazar una repetición del pensamiento porque pertenece a un prefijo de conversación diferente. Cuando el error explícitamente identifica este problema de firma vinculante, opencodex puede eliminar el pensamiento firmado / redactado reproducido y vuelva a intentarlo una vez dentro del presupuesto de envío de la solicitud. Esto cubre los rechazos de HTTP 400 y el flujo inicial errores antes de la actividad de salida o herramienta. La búsqueda web alojada y los puentes de imagen / video comparten una recuperación límite a través de sus iteraciones del modelo: solo se reenvía la inferencia rechazada, mientras se completa el sidecar Se conservan las llamadas y los resultados de la herramienta. Un reintento de terminación vacía comparte la asignación de su solicitud; Las continuaciones ordinarias después de la salida no pueden usarlas. El reemplazo fallido es Sin embargo, volvió sin otra firma. Otros errores mantienen su manejo existente.
+
+La recuperación de Sidecar se desactiva cuando la contabilidad de gastos impuesta no puede establecer recibos para cuentas anteriores. Sidecar ordinario envía. Nunca aumenta la asignación de llamadas o envío combinado.
+
+Sólo una finalización exitosa y no vacía recuerda el rechazo de esa conversación y servicio. identidad durante cinco minutos. Solo se suprimen las cargas útiles opacas rechazadas cuando pueden identificado; el pensamiento recién emitido sigue siendo reproducible. El historial de texto sin formato permanece disponible; un reintento fallido o cancelado lo hace no deshabilitar la repetición de pensamiento en solicitudes posteriores.
+
+
+
+## Modos de autenticación
+
+Las configuración del proveedor aceptan tres `authMode` valores (`key` es el valor por defecto). El registro incorporado también etiqueta los preconfiguración locales por separado; los que normalmente omiten ambos `authMode` y `apiKey`.
+
+| `authMode` | Cómo se autentica | Utilizado por |
+| --- | --- | --- |
+| `key` | Envía su clave API (`Authorization: Bearer …`, o `x-api-key` / `api-key` ej., por adaptador). La clave puede ser literal o `${ENV_VAR}` referencia. | La mayoría de los proveedores. |
+| `forward` | Relés **sus cabeceras de autenticación Codex entrantes** Verbatim al proveedor — ninguna clave almacenada. Este es el paso de inicio de sesión ChatGPT. | OpenAI (`openai-responses` adaptador). |
+| `oauth` | Resuelve un acceso OAuth almacenado token (actualizado automáticamente antes de la expiración) y lo utiliza como clave portadora. | xAI, Anthropic, Kimi, Kiro, Google Antigravedad, Cursor, Zed Hosted AI, Código de comando, GitHub Copiloto, Nous Portal. |
+
+Los [`retryOn429`](/es/reference/configuration/) La repetición 429 de la misma clave solo se aplica a API-key proveedores (`authMode: "key"`). OAuth, se excluyen los configuración preestablecidos directos y locales — Sus credenciales nunca deben ser reproducidas en la misma tokenEs opt-in: cuando la opción está ausente, la función está desactivada; la presencia de objetos la habilita a menos que la opción no esté disponible. `enabled: false`.
+
+Cuando se habilita la selección de clave de round-robin, las solicitudes en cola vuelven a verificar los tiempos de reutilización de la clave antes de enviar y adquieren capacidad de estimulación para cualquier clave de reemplazo. Esto se aplica a Chat nativo, Messages, Responses y compacto. Esperar la capacidad de la clave de reemplazo no consume el tiempo de espera del encabezado de respuesta ascendente. El ritmo por tecla y el round-robin usan HTTP/SSE protegido incluso cuando WebSockets de origen están habilitados; La dirección e inyección solo para WebSocket requieren una ruta sin esas políticas clave. Esto no cambia la clave activa guardada. Un giro ascendente establecido mantiene su credencial; los envíos posteriores se rechazan si esa clave se enfría. El rechazo de clave de pre-salida puede recuperar una clave sana dentro del límite de solicitud existente. Direct Las imágenes y las solicitudes compactas graban los tiempos de reutilización genuinos 401/429 sin reproducir el POST de pago.
+
+
+
+### Anthropic API-agotamiento de crédito clave
+
+Anthropic Los grupos de teclas API con al menos dos teclas intentan automáticamente una tecla hermana cuando una HTTP completa `400` o `402` error indica que el saldo de crédito es demasiado bajo para acceder a la Anthropic API. Esto se aplica a `invalid_request_error`, `billing_error`, y `permission_error` antes de cualquier salida de texto o herramienta. Las estrategias de rotación y agrupación de claves omiten la clave fallida durante una hora, porque un saldo vacío solo se borra cuando se agregan créditos; cuando cada clave está fuera de crédito, las solicitudes aún usan la clave activa y devuelven el error original de Anthropic; elegir la clave como activa en el panel de control o reiniciar el proxy, borra esa retención después de una recarga. El reemplazo envía compartir el límite de envío de la solicitud. Ordinario `400` Los errores permanecen en el terminal, y esto no permite reintentos de la misma clave ni cambiar el enrutamiento de la cuenta OAuth. Una anulación de encabezado que envía una credencial diferente no puede enfriar o rotar la clave de grupo seleccionada.
+
+
+
+### Que cuenta gasta una solicitud
+
+La pregunta que la gente hace antes de conectar una cuenta es si opencodex se basará en el suscripción que el inicio de sesión ya paga, o facturar una cuenta API separada. La respuesta sigue al
+`authMode` más arriba que el nivel de marketing del vendedor.
+
+- `forward` — el inicio de sesión ChatGPT. La solicitud lleva su credencial Codex, por lo que gasta la Plan ChatGPT detrás de ese inicio de sesión e informa de las ventanas de cuota Codex de ese plan. Qué ventanas existen es dependiente del plan: no todos los planes tienen una ventana de cinco horas. Nunca lee una clave API.
+- `oauth` — un inicio de sesión de suscripción. La solicitud lleva un acceso almacenado token, por lo que gasta lo que sea cuenta que ha iniciado sesión como, y opencodex informa de cualquier ventana de uso que el proveedor expone.
+- `key` — la solicitud lleva la clave que proporcionó, por lo que el uso aterriza en la cuenta que posee esa clave, en los propios términos de esa clave. Eso es uso medido para una cuenta de pago por uso API, pero un plan cuando la llave *es* una suscripción: Z.AI GLM Coding Plan, Kimi Code, la codificación BigModel CodeBuddy, Command Code y Plan venden uno de esa manera.
+
+Una solicitud utiliza exactamente uno de estos, y opencodex no se devuelve de uno a otro. Cuando un La credencial OAuth no se puede resolver, la solicitud falla con un error de autenticación en lugar de alcanzar una clave almacenada, y la conmutación por error de grupo de claves que responde a un 429 o un 401 se rechaza completamente para proveedores OAuth y de reenvío.
+
+Dos excepciones vale la pena conocerlas porque puedes golpearlas:
+
+- `xai` y `github-copilot` aceptar `authMode: "key"` mismo proveedor, y si ese proveedor ya tenía una clave almacenada, corriendo `ocx login` porque puede dejarlo en modo clave en lugar de cambiarlo a la suscripción. Lo que cambia es: una `xai` clave retargets el proveedor a `https://api.x.ai/v1`, por lo que una cuenta diferente paga, mientras que un `github-copilot` La clave sigue siendo un Credencial de copiloto contra `api.githubcopilot.com`, por lo que la suscripción Copilot paga de cualquier manera.
+- `orcarouter-oauth` es un flujo de consentimiento que acuña una propiedad del usuario `sk-orca-…` Llave API. Una vez que lo ha hecho, la solicitud lleva una clave, por lo que sigue el `key` regla anterior.
+
+
+
+#### Proveedores que aceptan tanto un inicio de sesión como una clave
+
+| Proveedor | Inicio de sesión de suscripción | Clave API |
+| --- | --- | --- |
+| OpenAI / ChatGPT | `openai` — Codex inicio de sesión; gasta el plan ChatGPT detrás de él | `openai-apikey` — un proveedor independiente; el uso aterriza en la cuenta de la plataforma OpenAI que posee la clave |
+| Anthropic | `ocx login anthropic` — inicia sesión como su cuenta Claude. opencodex lee sus ventanas de uso de cinco horas y siete días; ese punto final no informa ningún nivel de suscripción | `anthropic-apikey` — directo Anthropic API facturación, sin suscripción Claude |
+| xAI | `ocx login xai` — la pasarela de suscripción Grok CLI. opencodex lee los créditos semanales de SuperGrok, o el grupo mensual | El mismo `xai` proveedor con `authMode: "key"`, que tiene como objetivos `https://api.x.ai/v1`, por lo que el uso aterriza en esa cuenta API |
+| Kimi | `ocx login kimi` — inicie sesión con su cuenta Kimi. `kimi-responses` es el mismo inicio de sesión de la cuenta Kimi enrutado a través del cable OpenAI Responses (pensando que el contenido permanece cifrado en el lado del servidor, las llamadas a herramientas permanecen visibles; el preajuste predeterminado de Chat mantiene el razonamiento de texto plano) | `kimi-code` — la forma de clave API del mismo transporte del plan de código Kimi |
+| Código de comando | `ocx login command-code` — opencodex lee ventanas de cinco horas y semanales más un saldo de crédito | `commandcode` — el mismo servicio `/provider/v1` con una llave |
+| GitHub Copiloto | `ocx login github-copilot` — requiere una suscripción activa de Copiloto | El mismo `github-copilot` proveedor con `authMode: "key"`. El flujo de dispositivos anterior es la ruta admitida, y cualquiera de las credenciales es una Copilot, por lo que la suscripción aún paga |
+| OrcaRouter | `ocx login orcarouter-oauth` El consentimiento de — acuña una propiedad del usuario, de larga duración `sk-orca-…` clave, y la petición lleva entonces una clave | `orcarouter` — la misma clave pegada a mano |
+| Meta Muse | `ocx login meta-muse` puede importar una clave local de código Muse CLI o iniciar el inicio de sesión del dispositivo. Meta alcances de esa credencial a su propio CLI, por lo que este es un uso no compatible: cómo se liquidan las llamadas no es observable desde el API, y debe tratar cada llamada como facturable en su cuenta | `meta-model` es la ruta soportada — cada llamada se mide por token, y una suscripción de código Muse no funciona allí |
+
+Cursor, Kiro, Zed Hosted AI y Nous Portal son solo de inicio de sesión y no tienen equivalente de clave API. Google Antigravedad es Solo login también: `ocx login google-antigravity` inicia sesión con tu cuenta de Google a través del código de la nube Auxiliar de alambre, y el `google` preset al lado de él es el AI Studio Gemini API — un producto diferente alcanzado con su propia clave, no un modo de clave para el mismo inicio de sesión. La pestaña Cuentas antigravedad muestra un nivel de membresía observado como una insignia al lado de la cuenta etiqueta, usando el ID de nivel ascendente (por ejemplo `free-tier` o `gemini-pro`) No aparece ninguna insignia cuando el plan es desconocido; no afecta el enrutamiento o la cuota.
+
+Gemini 4 Argón (`gemini-4-argon`) aparece en el `google` preset con bajo, medio (el por defecto), y altos niveles de pensamiento. Google lo ofrece solo en el nivel de pago Gemini API, no en el gratuito nivel. En marcha `google-antigravity`, Argon aparece con los mismos tres niveles, que se asignan a la
+`gemini-4-argon-low`, `-medium`, y `-high` modelos de alambre. Google lo limita allí a AI Ultra y Cuentas Enterprise elegibles. Cloud Code Assist solo sirve Argon para el cliente Antigravedad CLI, por lo que OpenCodex envía solicitudes de argón y descubrimiento de modelos con el agente de usuario CLI (`antigravity/cli/1.3.4`) y mantiene el agente de usuario IDE para todos los demás modelos.
+
+En Vertex AI, `gemini-4-argon` recibe imágenes devueltas por herramientas, como capturas de pantalla, dentro la respuesta de la función coincidente. Esto evita el error 400 de origen "Solicitudes que terminan con un no se admiten" después de una llamada a la herramienta de producción de imágenes mientras se conservan las imágenes. Las imágenes de resultados duplicados o resultados sin una llamada coincidente se conservan en un archivo separado. mensaje después de las respuestas de la herramienta, con un marcador que explica que no se pueden emparejar. No se necesita ningún cambio de configuración; este manejo es específico para Vertex Argon.
+
+Para Gemini en Antigravedad, incluyendo Argón, los resúmenes de pensamientos marcados por el proveedor permanecen separados de la respuesta: Responses utiliza elementos de resumen de razonamiento, Chat Completions utiliza
+`reasoning_content`, y Messages utiliza `thinking` bloques. Los clientes deciden cómo mostrar esos campos. Un cliente Responses puede solicitar `reasoning.summary: "none"` para suprimir los resúmenes; Esto no desactiva el razonamiento interno del modelo. Una firma de pensamiento es continuación metadatos y puede acompañar al texto ordinario, por lo que su presencia por sí sola no oculta ese texto. OpenCodex conserva el texto de respuesta sin marcar incluso cuando su redacción suena como planificación o análisis.
+
+Los modelos Gemini, en particular el argón, a veces se saltan el pensar en un turno de llamada de herramientas y escriben sus planificación en el texto de progreso visible, por ejemplo, una línea de progreso seguida de "Leamos google.ts siguiente." Una vez que el texto se envía de vuelta como historia, el modelo tiende a repetir el patrón en cada vuelta posterior. Para evitar que se propague, OpenCodex envía Gemini solo la primera oración de el texto que llegó antes de una llamada de herramienta en giros anteriores. Las respuestas finales se envían de vuelta en su totalidad, y lo que muestra su cliente no se cambia.
+
+El incorporado `google-antigravity` la lista de modelos es Gemini 3.8 Flash (`gemini-3.8-flash`), Gemini 4 Argón (`gemini-4-argon`), Claude Opus 5.5`claude-opus-5-5`), y Claude Soneto 5.5 (`claude-sonnet-5-5`), cada uno con esfuerzos bajos, medios y altos. Lo que realmente ves es tu descubrimiento de modelo propio de la cuenta, porque Google habilita modelos por cuenta: algunas cuentas lista Claude Soneto 4.6 y Claude Opus 4.6 (Pensamiento), otros solo Claude Opus y Soneto 5.5 (directamente ej., facturados, planes Pro o Ultra sin prueba) y Gemini 4 Argon solo en Ultra y Enterprise. Tanto Claude generations map: 4.6 toma su esfuerzo como un nivel de pensamiento, 5.5 como su `-low`, `-medium`, o
+`-high` modelo. Con varias cuentas antigravedad y `oauthAccountFailover.enabled`, una solicitud prefiere una cuenta cuyo descubrimiento enumere el modelo solicitado. Selecciones guardadas de modelos que se fueron la lista sigue routing como antes.
+
+Para comprobar qué modo está utilizando realmente un proveedor, ábralo en la página Proveedores: el **Conexión**
+Bloque **Autenticación** fila lee `OAuth`, `API key`, `ChatGPT passthrough`, `Local`, o
+`No key needed`. Es una configuración a nivel de proveedor, por lo que las filas de la cuenta debajo de ella no lo repiten.
+
+
+
+## 1. Inicio de sesión ChatGPT (adelante / paso)
+
+Los `openai` proveedor necesita **sin clave API**. Direct reenvía credenciales desde su cuenta existente
+`codex login`; Pool resuelve una cuenta principal o agregada de Codex antes de usar el mismo backend:
+
+```json
+{
+ "openai": {
+ "adapter": "openai-responses",
+ "baseUrl": "https://chatgpt.com/backend-api/codex",
+ "authMode": "forward"
+ }
+}
+```
+
+Solo se reenvía un conjunto curado de encabezados (`FORWARD_HEADERS`: autorización, ChatGPT ID de cuenta,
+OpenAI beta/originador/sesión — ver [Adaptadores](/es/reference/adapters/)) Este camino también es ¿Qué potencia el [web-search y sidecars de visión](/es/guides/sidecars/).
+
+El catálogo de pasos ChatGPT también se superpone en las babosas desnudas GPT-5.6 Sol/Terra/Luna (`gpt-5.6-sol`, `gpt-5.6-terra`, `gpt-5.6-luna`) para las cuentas que pueden usarlos.
+
+
+
+## 2. Inicio de sesión de la cuenta (OAuth)
+
+Los configuración preestablecidos del proveedor pueden usar el inicio de sesión de la cuenta —, incluido GitHub puente de flujo de dispositivos. opencodex almacena sus credenciales en
+`~/.opencodex/auth.json`; tokens actualizable se refrescan automáticamente, mientras que las llaves duraderas son reutilizadas hasta que el proveedor las revoque. `ocx login codex` También es aceptado, pero no es uno de los estos proveedores: dirige al grupo de cuentas Codex — el mismo flujo que `ocx account login codex`, que mantiene su propio libro de cuentas y necesita un proxy en ejecución. `chatgpt` y `openai` Los alias de esa ruta.
+
+```bash
+ocx login xai # xAI Grok
+ocx login anthropic # Anthropic Claude (Pro/Max)
+ocx login kimi # Moonshot Kimi
+ocx login nous # Nous Portal (device grant; free + paid models)
+ocx login kiro # import kiro-cli credentials (or token fallback)
+ocx login google-antigravity
+ocx login cursor # standalone Cursor PKCE login
+ocx login zed # Zed native-app callback login (experimental)
+ocx login command-code # Command Code browser OAuth (or import ~/.commandcode/auth.json)
+ocx login orcarouter-oauth # OrcaRouter browser consent + PKCE
+ocx login devin # Cognition/Devin: import Devin CLI credential, else Auth0 browser sign-in
+ocx login dsh-account # DeepSeek Harness Desktop (import ~/.dsh/.credentials.yaml grant)
+ocx login github-copilot # GitHub device flow → Copilot token (Copilot account)
+ocx login codex # Codex account pool (aliases: chatgpt, openai; needs a running proxy)
+ocx logout
+```
+
+| Proveedor | Adaptador | URL base | Notas |
+| --- | --- | --- | --- |
+| `xai` | `openai-chat` | `https://cli-chat-proxy.grok.com/v1` | OAuth utiliza la pasarela de suscripción independiente Grok CLI. La anulación de la clave API utiliza `https://api.x.ai/v1` y puede inyectar procesamiento prioritario. Catálogo en vivo primero Grok; `grok-4.5` es el valor predeterminado de reserva. |
+| `anthropic` | `anthropic` | `https://api.anthropic.com` | Modelos Claude; lista de modelos en vivo obtenida de `/v1/models`. |
+| `kimi` | `openai-chat` | `https://api.kimi.com/coding/v1` | Modelos de codificación del plan de código Kimi. Por defecto al stable `kimi-for-coding` alias (actualmente K2.8 Vista previa): ventana de contexto 1M-token, ajustable `low`/`high`/`max` Pensamiento (predeterminado) `max`), texto + entrada de imagen. Jubilado `kimi-k2.x` las selecciones se migran al alias en la actualización. |
+| `kimi-responses` | `openai-responses` | `https://api.kimi.com/coding/v1` | Mismo inicio de sesión de cuenta Kimi (reutiliza el `kimi` OAuth credencial) sobre el cable OpenAI Responses. El mismo modelo y capacidades que `kimi`; pensando que el contenido permanece encriptado en el servidor, las llamadas a herramientas y los resultados permanecen visibles. |
+| `nous` | `openai-chat` | `https://inference-api.nousresearch.com/v1` | Nous Research pasarela de suscripción (el mismo backend que usa Hermes Agent). Device-grant inicio de sesión contra `portal.nousresearch.com`; el acceso token es la inferencia por solicitud JWT. Pago mixto + `:free` catálogo de modelos (`tencent/hy3:free`, `stepfun/step-3.7-flash:free`, ...) descubierto en vivo desde la cuenta iniciada. Actualizar tokens son de un solo uso y rotado en cada actualización. |
+| `kiro` | `kiro` | `https://runtime.us-east-1.kiro.dev` | Los botones de inicio de sesión y agregar cuenta del panel de control ofrecen Builder ID, Google, inicio de sesión del dispositivo GitHub o Kiro CLI. Inicio de sesión nativo del dispositivo agrega una cuenta sin firmar `kiro-cli` fuera. La opción Kiro CLI importa o inicia una sesión CLI; su flujo de trabajo Agregar cuenta cambia temporalmente la cuenta CLI y la restaura en caso de cancelación o falla. |
+| `google-antigravity` | `google` | `https://daily-cloudcode-pa.googleapis.com` | Google OAuth sobre el cable de Cloud Code Assist. El descubrimiento en vivo utiliza el autenticado de CCA `v1internal:fetchAvailableModels` Endpoint y publica los modelos de agente disponibles para la cuenta iniciada; el catálogo mantenido sigue siendo la reserva. |
+| `cursor` | `cursor` | `https://api2.cursor.sh` | Experimental inicio de sesión PKCE, transporte vivo HTTP/2 con una ruta de compatibilidad opt-in HTTP/1.1 y descubrimiento de modelo filtrado por cuenta. |
+| `zed` | `zed` | `https://cloud.zed.dev` | Experimental Zed Hosted AI bridge. Utiliza la aplicación nativa de Zed RSA callback, cambia la cuenta token por una breve inferencia hospedada token, y descubre la lista en vivo de la cuenta. |
+| `orcarouter-oauth` | `openai-chat` | `https://api.orcarouter.ai/v1` | Consentimiento del navegador y uso de intercambio de claves `https://www.orcarouter.ai` con S256 PKCE El usuario devuelto `sk-orca-…` La clave API se almacena en el almacén de credenciales existente y se reutiliza hasta que se revoca. |
+| `devin` | `devin` | `https://server.codeium.com` | Experimental no oficial Cognición/Puente Devin. Login primero importa la credencial que ya tiene instalada Devin CLI (`devin auth login` escribe un `devin-session-token` a su propio `credentials.toml`); cuando no está presente, abre el inicio de sesión del navegador Auth0 e intercambia la token pegada a través de Cognition's `RegisterUser` para una clave API de larga duración. `ocx login devin-cli` Se mantiene como un alias obsoleto. Los modelos se descubren por cuenta con `GetCascadeModelConfigs`. Cuota de cuenta viene de `GetUserStatus` menos de una solicitud de ocho segundos y fecha límite del cuerpo: ventanas diarias y semanales con fecha, más el fondo de crédito rápido y flexible mensual para un plan de crédito facturado o una estrategia desconocida con ambas fechas de reinicio ausentes cuando está presente un campo de saldo. Los créditos usados negativos omiten la ventana mensual; los créditos válidos disponibles cero lo marcan agotado. Una sonda de tiempo de espera mantiene la última cuota buena. No se muestra en el panel de control predeterminado. Los informes de chat y uso se verifican con una cuenta real en tres modelos. |
+| `dsh-account` | `dsh-account` | `https://api.deepseek.com/anthropic` | Proveedor experimental de cuentas de importación primero que reutiliza una cuenta de escritorio instalada e iniciada DeepSeek Harness (DSH). Lee las credenciales estrictamente de solo lectura de `~/.dsh/.credentials.yaml` sobre la importación explícita. Independiente de la facturación de claves DeepSeek API. |
+| `github-copilot` | `openai-chat` | `https://api.githubcopilot.com` | Experimental. GitHub flujo de dispositivos + `copilot_internal` intercambio (cliente de código VS OAuth). Requiere una suscripción activa de Copiloto; no un API oficial de terceros. |
+
+Google Antigravedad agrupa un modelo completo `low` / `medium` / `high` variantes en una sola entrada con un selector de esfuerzo. Esto incluye Claude Opus y Sonnet 5.5 y futuras versiones descubiertas durante la actualización automática. Los conjuntos parciales permanecen separados. Las opciones existentes activadas/deshabilitadas se incluyen en la entrada agrupada; los modelos genuinamente nuevos aún siguen su política de Nuevo modelo. Los ID de sufijo guardados continúan solicitando su nivel original. El enrutamiento de esfuerzo agrupado sobrevive a un reinicio proxy cuando el descubrimiento del modelo no está disponible temporalmente. Una sesión Codex en ejecución puede necesitar recargar su lista de modelos después de actualizar el catálogo. Grupos de uso conocidos Claude Sonnet y Opus 5.5 bajo su modelo base, incluyendo registros históricos de nivel. Sus costos mostrados son estimaciones de referencia derivadas de Anthropic, no cargos de suscripción antigravedad.
+
+Google Las sondas de cuenta antigravedad y cuota de proveedores utilizan puntos finales de contabilidad Google fijos, incluidos los modelos alternativos. Soportan el falso IP transparente DNS para esos destinos al tiempo que retienen la verificación TLS, el rechazo de redireccionamiento y las verificaciones de direcciones privadas. Una base de proveedores personalizada URL cambia las solicitudes de modelo, no los destinos de cuota; `NO_PROXY` continúa seleccionando la política de ruta directa.
+
+
+
+### Google diagnósticos de pérdida de herramientas-esquema
+
+Las declaraciones de la herramienta Google se compilan con la clase de punto final seleccionada. Cuando el debug del proveedor es en — `ocx debug provider on`, el panel Registros alterna, o `OCX_DEBUG=1` Pérdida de esquema — durante la compatibilidad La conversión en el omitido o `compatible` El camino de la política emite un `[ocx:google:google-tool-schema-loss]`
+Grabación (cola con `ocx debug provider logs -f`) solo la versión del informe, clase de punto final, a `lossy` indicador, un recuento de incertidumbre limitada, categorías de pérdida fija con recuentos limitados y una bandera de truncamiento. Los nombres de herramientas y propiedades, rutas, valores y texto del esquema son Nunca incluido. Con una omitida o `compatible` Este diagnóstico observa la existencia de conversión sin rechazarla. Bajo `reject-lossy`, un inicialmente con pérdidas o indeterminado por comparación La compilación se rechaza antes del envío; no se emite ningún registro de pérdidas por separado para la solicitud rechazada. Bajo
+`reject-lossy`, una reparación de Vertex o Cloud Code Assist que borraría las restricciones emite un código similar contenido-libre `google-tool-schema-repair` registrar y devolver el 400 original sin un envío modificado; con un omitido o `compatible` política, la solicitud reparada se reproduce como antes. Direct AI Studio nunca realiza esta reparación. Los esquemas de salida nativos están fuera de ambas rutas de política. Ver la
+[referencia de comando debug](/es/reference/cli/agents/).
+
+
+Después de un fallo de actualización Nous terminal, ejecute `ocx login nous` para reautenticar.
+
+### Zed Hosted AI (experimental)
+
+:::caution[No oficial: úsalo bajo tu responsabilidad]
+Zed no proporciona ni respalda este puente. Reutiliza el modelo alojado de tu cuenta de Zed derecho fuera del editor de Zed, que puede estar fuera de los términos de servicio de Zed. Zed puede calificar Limitar, restringir o suspender la cuenta. Revise los términos actuales de Zed antes de iniciar sesión; el proveedor se queda fuera hasta que lo agregues y ejecutes `ocx login zed` y el dashboard pregunta Usted debe reconocer este riesgo antes de que comience el inicio de sesión.
+:::
+
+Ejecuta `ocx login zed` y complete el inicio de sesión en la aplicación nativa de Zed en el navegador. OpenCodex inicia un loopback callback, le da a Zed una clave pública RSA, y mantiene la clave privada local mientras la devolución de llamada devuelve la identidad de cuenta y el acceso cifrado token. El ID de la cuenta almacenada y token se emparejan en cada solicitud; OpenCodex intercambia esa credencial para el LLM de Zed de corta duración token antes de llamar `https://cloud.zed.dev/completions`.
+
+La lista de modelos en vivo de Zed es de metadatos de visualización con alcance de cuenta. El identificador de modelo seleccionado se reenvía como proporcionado, y el puente infiere la familia de backend alojado de la fila en vivo o el nombre del modelo; El descubrimiento de modelos no es una lista permitida. El acceso Zed token no tiene un punto final de actualización, por lo que cuando Revocarlo, correr `ocx login zed` De nuevo.
+
+Para los modelos OpenAI alojados en Zed, OpenCodex traduce `developer` Instrucciones para `system` mensajes y elimina los campos privados OpenAI y las herramientas integradas no compatibles, como `web_search`. La función y las herramientas personalizadas permanecen disponibles a través del delegado; una opción de herramienta sin herramientas compatibles se convierte en `none`.
+
+Para los preconfiguración canónicos del Plan de codificación Kimi (`kimi` Inicio de sesión y `kimi-code` API clave), opencodex reenvía solo un establo suministrado por el llamante `prompt_cache_key` a la solicitud Chat Completions (el cable Responses acepta el mismo campo, pero opencodex no lo envía allí hoy); Nunca genera uno. Kimi documenta una clave de sesión/tarea estable según sea necesario para mejorar el Plan de código tasas de éxito de caché, mientras que las solicitudes sin una clave permanecen sin llave. Si una opción de arriba rechaza la campo, opencodex no lo despoja y reintenta o muta la configuración guardada. Otros proveedores permanecen Negar por defecto.
+
+Kimi Nativo del código Responses ruta omite los mensajes del historial del asistente vacíos de contenido explícito para evitar `assistant must not be empty` rechazo. Texto no vacío, espacios en blanco, rechazos, Se conservan el razonamiento y las llamadas/resultados de herramientas; no se reescribe el historial del cliente almacenado. Un mensaje vacío referenciado por un `item_reference` en la misma entrada se retiene en lugar de dejar una referencia colgante.
+
+Kimi Codificación precios de uso para `k3`, `k3[1m]`, y `k3-256k` son **API-estimaciones de referencia** a través
+`kimi`, `kimi-code`, y `kimi-responses`, usando la tasa de escritura en caché de 5 minutos predeterminada publicada. No reproducen la facturación o cuota del Plan de Código: la variante 1M de K3 consume aproximadamente el doble de la cuota de `k3-256k`. `kimi-for-coding` ahora apunta a K2.8 Preview, por lo que su antiguo precio K2.7 ya no es utilizado; su estimación permanece indisponible a menos que el operador suministre `modelCosts`. Precio desconocido Por lo tanto, las políticas de enrutamiento y los límites de costos que excluyen estimaciones desconocidas pueden excluir este alias. Véase [Configuración del modelo de Kimi](https://www.kimi.com/code/docs/en/kimi-code/models.html) y
+[Precios de API](https://platform.kimi.ai/docs/pricing/chat).
+
+Una costumbre `openai-chat` proveedor puede optar por cuando sus documentos ascendentes soporten
+`prompt_cache_key`:
+
+```json
+{
+ "providers": {
+ "example-compatible-provider": {
+ "adapter": "openai-chat",
+ "baseUrl": "https://api.example.com/v1",
+ "apiKey": "${EXAMPLE_API_KEY}",
+ "promptCacheKey": true
+ }
+ }
+}
+```
+
+El adaptador reenvía la llave que se le da y nunca inventa una. Todavía puede recibir una clave El llamador no envió: Claude Messages traducción deriva uno de `metadata.user_id`, o de un cohorte de modelo/sistema/herramientas cuando el cliente no envía metadatos, porque el informe de backends OpenAI
+`cached_tokens: 0` por cada vuelta sin llave. Por lo tanto, "enviado, no fabricado" describe este adaptador, No toda la ruta de solicitud.
+
+Preservar el resto de la configuración del proveedor al agregar la opción, luego recargar o reiniciar opencodex. Para validar el almacenamiento en caché, compare la solicitud inicial en frío con las solicitudes posteriores que lleven el misma clave estable. Deje la opción omitida o configure `false` para de origen incompatibles, y desactivarlo o eliminarlo si una puerta de enlace estricta devuelve un error de campo desconocido HTTP 400.
+
+También puede iniciar OAuth desde el [panel web](/es/guides/web-dashboard/).
+
+
+
+### Iniciar sesión desde otro perfil de navegador u otra máquina
+
+Cuando se inicia un inicio de sesión, el proxy abre la autorización URL en **Su propio** máquina, utilizando el sistema operativo navegador predeterminado — y, por lo tanto, el perfil predeterminado. Este es el comportamiento adecuado para un local escritorio y el incorrecto en dos casos comunes: necesita un perfil de navegador diferente (un ej., identidad, una segunda cuenta), o el panel de control está abierto contra un proxy que se ejecuta en otro lugar.
+
+Cada superficie de inicio de sesión muestra la autorización URL con un botón de copia, el código del dispositivo cuando proveedor emite uno, y las instrucciones actuales. Los flujos de devolución de llamada del navegador también muestran un campo pegar el redireccionamiento URL o código de autorización de nuevo. Durante la aprobación del dispositivo, ese campo está oculto: introduzca el código mostrado en la página de verificación del proveedor. Si el proveedor cambia Para la entrada manual, el panel reemplaza el código antiguo y las instrucciones en su próxima encuesta de estado.
+
+Si el proxy intenta abrir un navegador y no puede, el inicio de sesión lo dice por encima de la URL y mantiene going: abre la página de inicio de sesión desde el enlace o cópialo. Un inicio de sesión del dispositivo nunca abre un navegador por propio; **Copiar código & abrir** copia el código y abre la página de verificación con un solo clic, y el panel de control sigue esperando mientras el código del proveedor siga siendo válido. En la aplicación de escritorio estos enlaces se abren en su navegador predeterminado.
+
+Para evitar que el proxy abra un navegador, marque **No abra un navegador en la máquina proxy**
+junto al botón de inicio de sesión, o configúralo permanentemente:
+
+```json
+{ "oauthOpenBrowser": false }
+```
+
+Ausente y `true` ambos abiertos, por lo que nada cambia para una instalación existente; solo un
+`false` declina. `POST /api/oauth/login` y `POST /api/codex-auth/login` También acepta un por solicitud `openBrowser` booleano que anula la configuración almacenada para ese inicio de sesión.
+
+Dos casos se comportan de manera diferente, y vale la pena saber en qué estás:
+
+- **Un perfil de navegador diferente en la misma máquina** Solo funciona con el enlace copiado. Los Loopback callback encendido `127.0.0.1` Todavía completa el flujo.
+- **Un flujo de devolución de llamada del navegador en una máquina diferente** también necesita el retroceso de la pasta, porque la redirección URI es todavía `http://127.0.0.1:/callback` en el host del proxy. Termina el inicio de sesión allí, luego pega redireccionar URL (o simplemente el código) de nuevo al panel o `ocx account code`.
+
+Los proveedores de código de dispositivo nunca abren un navegador desde el proxy en cualquier caso: muestran un código y una verificación URL para abrir donde quiera que haya iniciado sesión.
+
+
+
+### Inicio de sesión Claude sin cabeza (modo de visualización de código)
+
+Para Anthropic hay una ruta más limpia que pegar una redirección muerta: la **code-display** inicio de sesión. Anthropic redirige a su propia página y muestra una `code#state` En lugar de llamar a la Proxy, así que nada tiene que llegar `127.0.0.1` en el host del proxy.
+
+```bash
+ocx login anthropic --headless
+```
+
+Sobre la administración API, comience con `POST /api/oauth/login` y `{"provider":"anthropic","mode":"code"}`; La respuesta lleva a `flowId` y un `expiresAt` (10 minutos). Enviar la cadena pegada a
+`POST /api/oauth/login/code` con eso `flowId`. La respuesta es el resultado del intercambio token —
+`{"ok":true,"account":…}` o `{"ok":false,"error":…}` — para una llamada alojada con un solo cuadro de pegado sabe si el login realmente funcionó. Una pasta con el estado equivocado, o sin código en ella, es rechazado antes de cualquier solicitud token y deja el flujo abierto para otro intento; una El intercambio token usa el flujo hacia arriba, así que inicie un nuevo inicio de sesión si ese intercambio falla.
+
+Solo `anthropic` y `anthropic2` Apoyar este modo; otros proveedores responden `code_mode_unsupported`. Varios códigos los inicios de sesión pueden estar en vuelo a la vez, cada uno fijado a su `flowId`pero todos escriben la misma cuenta almacén: el más reciente exitoso se convierte en la cuenta activa Claude. Esto es para un operador en un host sin cabeza, no para aislar usuarios no relacionados en una instancia compartida.
+
+
+
+### Múltiples cuentas OAuth
+
+Los proveedores de OAuth cuyas credenciales incluyen un ID de cuenta o correo electrónico estable pueden mantener más de uno inicio de sesión. La página de proveedores muestra esas cuentas en un menú desplegable, le permite agregar otra y cambia la cuenta activa sin cerrar sesión con los demás. Un inicio de sesión normal con una credencial Kimi sin identidad sustituye a la ranura activa, mientras que una **Añadir cuenta** conserva esa ranura y activa una nueva, distinto uno. Las cuentas de Kiro están marcadas por el perfil ARN. `chatgpt` siempre es de una sola ranura porque Codex Las cuentas de la grupo tienen un libro mayor separado. Los tokens permanecen en `~/.opencodex/auth.json`; `/api/oauth/accounts` devuelve solo metadatos enmascarados.
+
+
+
+### Herramientas para bañera Importación de antigravedad
+
+Para v1, OpenCodex importa solo un **Herramientas de bañera Antigravedad** JSON exportación para el `google-antigravity` proveedor. En el panel Proveedores, elija el archivo local JSON de la pestaña Cuentas de ese proveedor. El panel de control no muestra el contenido del archivo ni los valores de las credenciales; solo informa los recuentos importados, actualizados, fallidos y no admitidos. Otros proveedores de Cockpit son rechazados en v1.
+
+El CLI acepta la exportación desde un archivo o entrada estándar solo — nunca pegarlo en un argumento de comando:
+
+```bash
+ocx account import google-antigravity --format cockpit-tools --file [--json]
+cat accounts.json | ocx account import google-antigravity --format cockpit-tools --stdin [--json]
+```
+
+Se rechazan JSON y argumentos posicionales adicionales. Mantenga los archivos exportados privados y elimínelos o guárdelos de forma segura después de la importación.
+
+
+
+### OAuth fiabilidad
+
+opencodex coordina la actualización de token y el enrutamiento de grupo Codex para que las solicitudes concurrentes no se ejecuten tienda de credenciales. Esta es la fiabilidad y el trabajo de diagnóstico — que hace **no** garantizar la protección de cumplimiento del proveedor, límites de tarifas o acciones de la cuenta.
+
+**Refrescar la coordinación.** Antes de una llamada enrutada, un acceso vencido token se actualiza una vez por
+`(provider, account)`:
+
+1. Las llamadas simultáneas — de un solo vuelo en proceso comparten una promesa de actualización.
+2. Los escritores de procesos cruzados — se serializan en la misma cuenta.
+3. Generación CAS — persiste solo cuando la generación de credenciales almacenada aún coincide; un escritor más nuevo gana, y un resultado de actualización anterior no puede sobrescribirlo.
+
+Los fallos de actualización de terminal marcan la cuenta como que necesita una nueva autenticación en lugar de volver a intentarlo para siempre.
+
+Para la credencial nativa principal Codex en `CODEX_HOME/auth.json`, cancelar una solicitud detiene un esperar actualizar antes de que comience el intercambio token. Un intercambio ya comenzó termina dentro su propio tiempo de espera de 30 segundos y guarda el acceso exitoso y actualiza tokens antes de informar el Cancelación de la solicitud. Esto conserva la actualización rotada token para solicitudes posteriores; una El reemplazo de credenciales externas aún tiene prioridad.
+
+**Enfriamientos (grupo Codex).** Upstream `429` / las respuestas de cuota establecen un tiempo de reutilización difícil desde
+`Retry-After`, cuota `reset` cabeceras (capped), o un corto retroceso por defecto. Cuentas sobre una explícita
+`Retry-After` El tiempo de reutilización no se prueba temprano; los tiempos de reutilización derivados del reinicio pueden recibir un arrendamiento de sonda con ritmo para que la recuperación se pueda detectar sin inundar al proveedor. Reutilización de modelos nativos derivados de Restablecer mantener la cuota nativa compartida (incluyendo GPT-5.6 Terra/Luna) separada de `gpt-reserve`. Los modelos en el grupo compartido todavía se protegen unos a otros; un éxito ordinario no puede borrar un tiempo de reutilización de la Reserva. Explícito `Retry-After` y los tiempos de reutilización predeterminados siempre permanecen en toda la cuenta.
+
+**Afinidad de sesión.** Codex thread→afinidad de la cuenta es proceso-local (solo en memoria; no persistente a través de reinicios proxy). Sobre fallos de credenciales (`401` / `403`) la cuenta está en cuarentena por reauth y afinidades para esa cuenta se borran. En marcha `429`, la cuenta entra en tiempo de reutilización, afinidades se borran, y la selección de grupo puede girar los hilos — no se fijan a través de una respuesta de límite de velocidad.
+
+**Volver a una cuenta recuperada.** Para reanudar el uso de la cuenta de mayor prioridad durante un tareas, permitir `ocx config set codexAccountPriorityFailback true` y mantener la estrategia Pool en `quota` con conmutación automática habilitada. Por ejemplo, una tarea puede pasar de Plus a otra. cuenta cuando se llena su ventana de cinco horas, luego vuelve a Plus después de que la actualización de la cuota confirme recuperación. Mientras fluyen las solicitudes, los intentos de actualización en segundo plano se ejecutan como máximo una vez cada cinco minutos. La solicitud que desencadena una actualización puede seguir usando la cuenta anterior; la siguiente solicitud después de que se complete la actualización puede retroceder. Las solicitudes ya en ejecución finalizan en sus capturas cuenta. Los pines de cuenta manuales y las restricciones de acceso al modelo aún se aplican. Esta característica está desactivada por default; uso `ocx config set codexAccountPriorityFailback false` para restaurar los enlaces estables.
+
+El umbral efectivo de la cuenta de origen vinculada controla esta preferencia: `0` lo deshabilita, y una anulación positiva funciona incluso cuando el umbral global es `0`. Un candidato debe saber, uso no agotado por debajo de su propio umbral efectivo positivo. Candidato `0` elimina sólo eso preferencia de umbral; todavía se aplican la elegibilidad, el tiempo de reutilización y los bloqueos duros. Cada ventana contribuye para su puntuación necesita una observación reciente en vivo en este proceso. Actualizaciones solo de créditos, conservadas Las ventanas y las barras de visualización hidratadas no prueban por sí mismas la recuperación.
+
+**Metadatos del cliente Codex.** La ruta de avance ChatGPT pasa a través de la `FORWARD_HEADERS`
+allowlist (autorización, `chatgpt-account-id`, originador, ID de sesión/hilo y Codex relacionados cabeceras — ver [Adaptadores](/es/reference/adapters/)) El modo Pool sobrescribe solo la autenticación y
+`chatgpt-account-id` para que coincida con la credencial seleccionada. opencodex hace **no** Fabricar oficial identidad del cliente (por ejemplo, `originator`, encabezados de sesión o hilo) cuando la persona que llama no envió A ellos.
+
+Para el diagnóstico de compatibilidad de cuenta-conmutador, habilitando la depuración del proveedor (`ocx debug provider on`) añade uno `[ocx:codex:affinity]` línea por respuesta directa canónica ChatGPT. La línea contiene el encabezado presencia, cubos de tamaño grueso, etiquetas de igualdad de proceso local HMAC, resúmenes seguros de nivel superior conocido y un recuento de campos de giro desconocidos. Nunca incluye credenciales en bruto, ID de cuenta, valores de certificación, identificadores de hilos/sesiones, metadatos de turno o cuerpos de solicitud; las etiquetas intencionalmente cambiar después de cada reinicio proxy. Uso `ocx debug provider logs -f` mientras reproducir las dos solicitudes, y luego ejecutar `ocx debug provider off`. Esta captura es solo de observación y no elimina metadatos, vuelve a intentar una solicitud, cambia de cuenta, restablece un subproceso o afecta el enrutamiento.
+
+**Diagnóstico y reauth.** Humanos `ocx status` imprime un bloque de estado OAuth (identificadores de cuenta redactados, sin tokens). `ocx doctor` agrega una sección de confiabilidad OAuth con comprobaciones de almacenamiento grabable / de un solo vuelo y WARN filas que incluyen una acción de recuperación. Cuando una cuenta de proveedor OAuth necesita reautenticación, ejecute
+`ocx login ` (O utilice Reautenticate en el panel de control). Las cuentas de grupo Codex no son una de Estos proveedores, pero `ocx login codex --reauth` rutas a su reautenticación de cuenta-pool, que el panel de control Codex cuenta grupo también realiza. Véase
+[`ocx status` / `ocx doctor`](/es/reference/cli/) en la referencia CLI.
+
+
+
+### Créditos de solicitud Kiro
+
+En los giros habilitados para herramientas, opencodex mantiene el texto ordinario de Kiro hasta que se valida la finalización. Si Kiro termina con texto sin formato en lugar de su herramienta privada de respuesta final, se sigue ejecutándose, y solo se muestra la respuesta final resultante. El progreso que acompaña a un verdadero La llamada a la herramienta sigue siendo visible. Una respuesta final privada normal no necesita reintento de finalización.
+
+Cuando Kiro emite medición de crédito, los registros de solicitudes conservan el gasto reportado como
+`usage.providerCredits`, incluido en el libro mayor de uso persistente. Estos son créditos Kiro; Los recuentos de token aún pueden estimarse, y el valor del crédito no reemplaza las estimaciones de costos de USD. Las solicitudes de reserva de finalización agregan sus créditos reportados. Un valor ausente significa que Kiro no informe el uso de crédito; un cero explícito significa que no informó ningún gasto.
+
+
+
+### Kiro actualizar la atención
+
+Si un AWS SSO refrescar devoluciones `400 invalid_request` y emparejar Kiro CLI recuperación no tiene éxito, el panel de control muestra la cuenta afectada como la necesidad de volver a autenticar una vez que su acceso
+token expira. El proveedor activo informa `loggedIn: false` Desde `/api/oauth/status`. Un acceso todavía válido token permanece conectado. Puede iniciar sesión de nuevo a través del panel; una actualización automática exitosa posterior también borra el estado de atención. Este estatus no clasificar la concesión de actualización como revocada o deshabilitar futuros intentos de actualización. Red y servidor Los errores no activan este estado.
+
+Para cuentas de escritorio, un HTTP 401 con exactamente `Bad credentials` requiere un nuevo login e inmediatamente marca la generación de credenciales rechazadas como que necesita una nueva autenticación. Otros mensajes, estados y respuestas AWS SSO no activan esta regla específica del escritorio.
+
+
+
+### Importación de credenciales Kiro
+
+El panel de control ofrece el inicio de sesión del dispositivo nativo Builder ID, Google y GitHub sin Kiro CLI. La elección Kiro CLI y `ocx login kiro` importar ruta de acceso use el CLI: en Unix, instálelo con `curl -fsSL https://cli.kiro.dev/install | bash`; en PowerShell Windows, uso `irm 'https://cli.kiro.dev/install.ps1' | iex`; luego inicie sesión con `kiro-cli login`. Sin un `kiro-cli` período de sesiones `ocx login kiro` caídas volver a un acceso pegado token o el `KIRO_ACCESS_TOKEN` variable de entorno.
+
+Los `ocx login kiro` ruta de importación busca la plataforma Kiro CLI almacena y abre bases de datos SQLite Sólo lectura. Dos variables de entorno hacen explícita la selección de fila fuente y token:
+
+- `KIROCLI_DB_PATH` selecciona una base de datos no estándar Kiro CLI SQLite. El camino ya debe existir; durante esta ruta de importación, opencodex no crea ni modifica la base de datos, los archivos WAL o SHM.
+- `KIROCLI_TOKEN_KEY` selecciona el exacto `auth_kv` token clave cuando una base de datos contiene múltiples de otro modo ambiguas filas token. Una selección faltante falla el inicio de sesión en lugar de adivinar.
+
+En Windows, la importación busca `%LOCALAPPDATA%\Kiro-Cli\data.sqlite3`. Inicio de sesión forzado/agregar cuenta también necesita el binario local CLI: opencodex primero utiliza `PATH`Luego vuelve a caer en
+`%LOCALAPPDATA%\Kiro-Cli\kiro-cli.exe` y `C:\Program Files\Kiro-Cli\kiro-cli.exe`. Si ninguna carpeta tiene `kiro-cli.exe`, a `kiro.exe` Dentro de los mismos dos `Kiro-Cli` Se utilizan carpetas. opencodex nunca se ejecuta un corto `kiro` o `kiro.exe` encontrado en `PATH` o en el contenedor compartido macOS/Linux directorios, por lo que instalar o vincular el CLI como `kiro-cli` Ahí.
+
+Después de una importación exitosa, opencodex mantiene la credencial importada para
+`~/.opencodex/auth.json`. Mantenga estas variables y la base de datos seleccionada privada. No adjunte archivos de base de datos o inicio de sesión sin formato Diagnóstico de informes de errores.
+
+Para el **Kiro CLI** elección, **Añadir cuenta** es un flujo de trabajo de escritura separado: captura la sesión actual, registra `kiro-cli` fuera, e importa el nuevo inicio de sesión del navegador. Si el inicio de sesión se cancela o falla, incluso mientras OpenCodex persiste la credencial, reversión sustituye a la Kiro CLI base de datos y elimina su actual WAL, SHM, y sidecares de diario antes de publicar la instantánea de sesión anterior.
+
+Debido a que la reversión solo es posible desde una instantánea, el Kiro CLI **Añadir cuenta** La elección se niega a firmar `kiro-cli`
+cuando un almacén de sesión está presente pero no se puede capturar (archivo ilegible, esquema no coincidente o una selección ambigua de token), cuando `KIROCLI_DB_PATH` / `KIRO_CLI_DB_FILE` redirección importación lee lejos de la tienda CLI en vivo, o cuando una base de datos CLI primaria existente no tiene ninguna fila token reconocida. Reparar o eliminar la base de datos ilegible bajo el `kiro-cli` ruta de datos, desestablezca la importación selectores, y luego reintentar. Iniciar sesión desde una máquina sin existencia `kiro-cli` La sesión no se ve afectada. Las opciones del panel de control nativo son solo para agregar y no cerrar sesión `kiro-cli`. Un diálogo de dispositivo muestra el código y el destino de la verificación. Solo los hosts Kiro o Builder ID reconocidos se abren como enlaces; se muestra un destino inesperado como texto copiable para su revisión. El cierre del cuadro de diálogo envía la cancelación y deja una verificación de estado de fondo limitada para conciliar una confirmación ya en curso. Se vuelve a intentar una respuesta de estado estancada; agotar la fecha límite de flujo produce el resultado final neutral en lugar de reclamar el éxito. La aprobación Google y GitHub se completa cuando Kiro informa `authorized` (o el legado `approved` estado) con tokens válido y un perfil ARN. La lista de cuentas marca las cuentas Kiro excluidas de la selección automática por un motivo, cuando están disponibles.
+
+
+
+### DeepSeek Cuenta (DSH)
+
+`dsh-account` es un proveedor de cuentas experimental diseñado para reutilizar las credenciales de cuenta autenticadas de una aplicación de escritorio DeepSeek Harness (DSH) instalada.
+
+- **Independiente de DeepSeek API Clave:** `dsh-account` se ejecuta en la cuenta DeepSeek iniciada sesión en DeepSeek Harness, mientras que el `deepseek` facturas de proveedores contra el saldo de claves de su plataforma API. Los dos dominios y rutas de credenciales están estrictamente separados y nunca se cruzan.
+- **Importación explícita solamente:** opencodex lee `~/.dsh/.credentials.yaml` (o `$DSH_HOME/.credentials.yaml`) solo cuando corres `ocx login dsh-account` o seleccione **Iniciar sesión** en la fila de la cuenta DeepSeek (DSH) del panel **Añadir proveedor** Recolector. Nunca copia, importa o utiliza el token por sí solo.
+- **Tienda de credenciales DSH de solo lectura:** OpenCodeX trata `~/.dsh/.credentials.yaml` como estrictamente de solo lectura. OpenCodeX nunca escribe, modifica, elimina o altera los permisos de ningún archivo perteneciente a DeepSeek Harness.
+- **Copia de credencial aislada & cierre de sesión:** Al importar, OpenCodeX valida el token contra el punto final de identidad autorizado de DeepSeek (`/auth-api/v0/users/current`) y guarda su propia copia en la tienda de autenticación OpenCodeX. Cerrar sesión o eliminar la cuenta en OpenCodeX solo elimina la copia local de OpenCodeX; nunca activa el cierre de sesión remota ascendente y no cerrará la sesión en DeepSeek Harness Desktop.
+- **Sin fondo token rotación y 401 re-importación:** Las concesiones de sesión DSH no cuentan con un punto final automático de actualización en segundo plano. Si upstream devuelve HTTP 401 (`ACCOUNT_TOKEN_INVALID`), OpenCodeX marca la cuenta `needsReauth` y detiene el enrutamiento. Para restaurar el acceso, el usuario debe volver a importar explícitamente a través de `ocx login dsh-account`.
+- **Descargo de responsabilidad de terceros:** OpenCodeX no hace ninguna reclamación de respaldo oficial o autorización por parte de DeepSeek para clientes de terceros que reutilizan subvenciones de sesión.
+
+
+
+## 3. API-clave de catálogo
+
+opencodex envía 104 preconfiguración incorporados: 84 basados en teclas, 16 OAuth, tres locales y uno predeterminado ChatGPT-preajuste de avance. El panel de control **Añadir proveedor** selector abre el panel de un proveedor clave, valida la clave y la almacena; la validación es específica del proveedor. Entradas notables:
+
+**ClinePass** utiliza una clave Cline API con el [catálogo de suscripción oficial](https://docs.cline.bot/getting-started/clinepass)
+y [Chat Completions punto final](https://docs.cline.bot/api/chat-completions), operado por Cline Bot Inc. bajo
+[Los términos de Cline](https://cline.bot/tos). Un id enrutado como `cline-pass/cline-pass/kimi-k3` es intencional: el primer segmento selecciona el proveedor opencodex, mientras `cline-pass/kimi-k3` es el modelo completo slug enviado de origen. La cuota de ClinePass es compartida por la cuenta a lo largo de 5 horas, Límites semanales y mensuales. Una sonda en vivo 2026-08-13 verificó que todos los modelos estáticos de ClinePass acepta `low`, `medium`, `high`, `xhigh`, y `max` en el límite de entrada de la pasarela. opencodex conserva los niveles solicitados; cualquier normalización específica del backend sigue siendo responsabilidad de ClinePass.
+
+**Cline** es la misma clave y punto final API en la facturación de uso de pago por uso en más de 100 modelos (OpenRouter-estilo ids como `anthropic/claude-sonnet-4-6`) Los modelos gratuitos promocionales de Cline son solo disponible en el Cline IDE/CLI, no a través del API; `minimax/minimax-m2.5` es el API documentado Modelo de experimentación libre.
+
+**OrcaRouter** ([patrocinador](https://github.com/lidge-jun/opencodex/blob/main/SPONSORS.md)) es un Puerta de enlace compatible con OpenAI en `https://api.orcarouter.ai/v1` con identificadores de modelo espaciados por el proveedor (`openai/gpt-5.5`, `anthropic/claude-opus-4.8`, `deepseek/deepseek-v4-flash`, ...) y una adaptación router, `orcarouter/auto`, que califica cada indicador y elige el modelo. Crear una clave en el
+[Consola OrcaRouter](https://www.orcarouter.ai/console); el preajuste fija la fila cerca de la parte superior del Agregue el selector de proveedores y lo marca como patrocinador, y nada más sobre el enrutamiento o los cambios predeterminados.
+
+**Código Packy** es un API relé para Claude Code, Codex, Gemini y más. El preajuste apunta a su Chat compatible con OpenAI Finaliza el punto final, `https://cf.api.fan/v1`, con el descubrimiento de modelos en vivo reducido a lo que El grupo token permite (`gpt-5.5` y `gpt-5.1-codex` son sembradas). Regístrate en
+[packyapi.com](https://www.packyapi.com) y crear un grupo Codex token.
+
+**Opper** es la puerta de enlace de IA alojada en la UE de Opper AI (Estocolmo): una clave (creada en
+[platform.opper.ai](https://platform.opper.ai)) y un punto final compatible con OpenAI frente a más de 700 modelos de más de 30 proveedores. ID de modelos desnudos como `claude-sonnet-4-6` o `gpt-5.5` son *grupos*: Opper elige el proveedor y la región por solicitud, por lo que las identificaciones semilla permanecen válidas a medida que las rutas van y vienen. A
+`vendor/model` id.`anthropic/claude-sonnet-4-6`, `aws/claude-sonnet-4-6-eu`) fija una ruta en su lugar. El catálogo fue descubierto en vivo por `/v3/compat/models` con su clave; la lista pública, incluyendo rutas de la UE, está en [opper.ai/modelos](https://opper.ai/models). Opper también es un
+[models.dev](https://models.dev) proveedor (`opper`), que utiliza los mismos identificadores de grupo desnudos.
+
+| Proveedor | URL base |
+| --- | --- |
+| **OpenAI (llave API)** | `https://api.openai.com/v1` |
+| **Anthropic (llave API)** | `https://api.anthropic.com` |
+| **OpenRouter** | `https://openrouter.ai/api/v1` |
+| **Cline** | `https://api.cline.bot/api/v1` |
+| **ClinePass** | `https://api.cline.bot/api/v1` |
+| **Ollama Nube** | `https://ollama.com/v1` |
+| Google Gemini · Google Vertex AI | `https://generativelanguage.googleapis.com` · `https://aiplatform.googleapis.com` |
+| Azure OpenAI | `https://{resource}.openai.azure.com/openai` |
+| Umans AI · Neuralwatt | `https://api.code.umans.ai` · `https://api.neuralwatt.com/v1` |
+| Mistral | `https://api.mistral.ai/v1` |
+| MiniMax · MiniMax (CN) | `https://api.minimax.io/v1` · `https://api.minimaxi.com/v1` |
+
+| DeepSeek | `https://api.deepseek.com` | | Cerebras | `https://api.cerebras.ai/v1` | | Chutes | `https://llm.chutes.ai/v1` | | DeepInfra | `https://api.deepinfra.com/v1/openai` | | Hiperbólico | `https://api.hyperbolic.xyz/v1` | | Inferencia sin servidor a escala cero | `https://inference.api.nscale.com/v1` | | Vultr Inferencia sin servidor | `https://api.vultrinference.com/v1` | | Baseten Modelo de APIs | `https://inference.baseten.co/v1` | | Código de comando | `https://api.commandcode.ai/provider/v1` | | OrcaRouter | `https://api.orcarouter.ai/v1` | | Código de paquete | `https://cf.api.fan/v1` | | Meta Modelo API | `https://api.meta.ai/v1` | | Código de la Meta Muse (Crédential CLI) | `https://api.meta.ai/v1` | | SambaNova Nube | `https://api.sambanova.ai/v1` | | Fábrica de fichas Nebius | `https://api.tokenfactory.nebius.com/v1` | | Crusoe | `https://api.inference.crusoecloud.com/v1` | | DigitalOcean Inferencia sin servidor | `https://inference.do-ai.run/v1` |
+| API generativas de Scaleway | `https://api.scaleway.ai/v1` | | AI sin plumas | `https://api.featherless.ai/v1` | | Novita AI | `https://api.novita.ai/openai/v1` | | Together | `https://api.together.xyz/v1` | | Fireworks | `https://api.fireworks.ai/inference/v1` |
+| Moonshot (Kimi API) · Kimi (codificación) | `https://api.moonshot.ai/v1` · `https://api.kimi.com/coding/v1` | | Cara de abrazo | `https://router.huggingface.co/v1` | | NVIDIA NIM | `https://integrate.api.nvidia.com/v1` | | Z.AI (codificación GLM) | `https://api.z.ai` — Responses en `/api/v1/responses` por defecto; Chat Completions en `/api/coding/paas/v4/chat/completions` por modelo a través `modelAdapters` | | Zhipu AI (modelo grande) | `https://open.bigmodel.cn/api/paas/v4` |
+| Plan de codificación BigModel (Responses, lista estática) | `https://open.bigmodel.cn/api/v1` | | Qwen Cloud Plan de tokens | (predeterminado): `https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1` · Pague sobre la marcha: `https://dashscope.aliyuncs.com/compatible-mode/v1` · o Personalizado |
+| Plan de codificación de nube de Tencent | `https://api.lkeap.cloud.tencent.com/coding/v3` | | SiliconFlow | `https://api.siliconflow.cn/v1` | | Arca de Volcán · Plan de Codificación · Plan de Agente | `https://ark.cn-beijing.volces.com/api/v3` · `https://ark.cn-beijing.volces.com/api/coding/v3` · `https://ark.cn-beijing.volces.com/api/plan/v3` |
+| Xiaomi MiMo | `https://api.xiaomimimo.com/anthropic` | | Xiaomi MiMo (OpenAI Chat) | `https://api.xiaomimimo.com/v1` | | Kilo | `https://api.kilo.ai/api/gateway` | | Opper | `https://api.opper.ai/v3/compat` | | TokenLab | `https://api.tokenlab.sh/v1` | | Modelflare | `https://modelflare.dev/v1` | | OpenGateway | `https://apis.opengateway.ai/v1` | | GitLab Duo | `https://cloud.gitlab.com/ai/v1/proxy/openai/v1` | | Cloudflare Puerta de enlace AI | `https://gateway.ai.cloudflare.com/v1/{account-id}/{gateway}/anthropic` | | … y más | código abierto zen, Puerta de enlace Vercel AI, Venecia, NanoGPT, Sintético, Qianfan, Alibaba, Paralelo, ZenMux, LitelLM |
+
+**OpenGateway** es una puerta de enlace compatible con OpenAI operada por Sionic AI en
+`https://apis.opengateway.ai/v1`. Su catálogo público contiene alrededor de 80 modelos activos. (como se verificó en 2026-10-02); el ajuste preestablecido actualiza automáticamente la lista de modelos en vivo desde público `GET /v1/models` y mantiene activos los modelos Chat Completions (además de la Responses-only `openai/o3-pro`, que está anclado a Responses). Servido con ión
+`deepseek/deepseek-v4.1-flash-ultrafast` y `z-ai/glm-5.3-flash-ultrafast` Se enumeran primero. Crear una clave en el [Panel de OpenGateway](https://opengateway.ai/api-keys), luego corre
+`ocx provider add opengateway` o seleccione **OpenGateway** en el panel. Solicitudes de chat use la clave Bearer configurada; la lista de modelos públicos no valida esa clave. En el cable Responses, OpenGateway rechaza las llamadas a herramientas personalizadas nativas reproducidas, por lo que el ajuste preestablecido reduce las herramientas personalizadas Codex, como el modo de código `exec` para que funcionen antes de enviarlas.
+
+**TokenLab** ([patrocinador](https://github.com/lidge-jun/opencodex/blob/main/SPONSORS.md)) es un
+OpenAI-compatible API Puerta de enlace en [tokenlab.sh](https://tokenlab.sh/r/OPENCODEX), operado por TOKENLAB AI INC. Crear un espacio de trabajo [Clave API](https://tokenlab.sh/dashboard/api?tab=keys), luego corre
+`ocx provider add tokenlab` o seleccione **TokenLab** en el panel de instrumentos **Añadir proveedor** Recolector. TokenLab mantiene un paso a paso [Guía de integración OpenCodex](https://tokenlab.sh/docs/en/integrations/opencodex)
+([한국어](https://tokenlab.sh/docs/ko/integrations/opencodex)) que cubre la configuración y el enrutamiento por modelo. El preset utiliza [Chat Completions](https://tokenlab.sh/docs/en/quickstart) y descubre modelos en
+`GET /v1/models?category=chat`, manteniendo solo las entradas que declaran `tool-use` capacidad. Los modelos de imagen, video, audio, incrustación y decisión están excluidos de este preajuste de chat.
+
+Cada modelo utiliza el formato de solicitud que TokenLab declara para él. (`tokenlab.accepted_request_formats` on `GET /v1/models/{model}`):
+
+| Modelos | Codex (clientes Responses) | Clientes de chat | Claude Code (clientes Anthropic) |
+| --- | --- | --- | --- |
+| `gpt-6-astra`, `gpt-6.1-sol`, `gpt-6-sol`, `gpt-6-luna`, `grok-4.7`, `deepseek-v4.1-flash`, `deepseek-v4-pro`, `kimi-k3`, `glm-5.3` | [Responses](https://tokenlab.sh/docs/en/api-reference/responses/create-response) | Chat Completions | Chat Completions |
+| `claude-*` | [Messages](https://tokenlab.sh/docs/en/api-reference/messages/create-message) | Messages | Messages |
+| Cualquier otro modelo, incluyendo `gemini-3.8-flash` | Chat Completions | Chat Completions | Chat Completions |
+
+Para mantener un modelo en Chat Completions, agréguelo al `modelAdapters`Por ejemplo,
+`"modelAdapters": { "gpt-6.1-sol": "openai-chat" }`. El enrutamiento Claude se aplica solo mientras puntos de proveedor en `https://api.tokenlab.sh/v1`. OpenCodex no envía ningún encabezado de política de entrega, por lo que La política de entrega propia de tu clave API decide cómo TokenLab sirve cada solicitud.
+
+Los [catálogo de modelos](https://tokenlab.sh/docs/en/api-reference/models/list-models) Es público sin una clave, pero se valida una clave suministrada y los resultados de los alcances a sus permisos del modelo y la entrega política. Utilice una clave válida con un espacio de trabajo financiado para la inferencia. `gpt-5.6-terra` es la semilla por defecto; elija otro modelo descubierto si su clave no lo permite. Proveedor y modelo Los prefijos permanecen separados: `tokenlab/gpt-5.6-terra` envía `gpt-5.6-terra` de origen. TokenLab's [términos](https://tokenlab.sh/tos) y [Política de privacidad](https://tokenlab.sh/privacy-policy)
+aplicar a las solicitudes enviadas a este servicio. El preajuste fija la fila cerca de la parte superior del proveedor Añadir selector y lo marca como un patrocinador, y nada más sobre enrutamiento o cambios por defecto.
+
+**Modelflare** es un relé compatible con OpenAI en `https://modelflare.dev/v1`. Seleccionar **Modelflare**
+en `ocx init` o el dashboard **Añadir proveedor** Picker, o correr `ocx provider add modelflare`, y darle su clave directamente o como referencia `${MODELFLARE_API_KEY}` para que la llave permanezca en su medio ambiente. El preajuste utiliza Chat Completions y siembra cuatro modelos que fueron verificados con chat, streaming y llamadas de herramientas: `glm-5.3-flash` (el valor predeterminado),
+`claude-sonnet-5-5`, `gpt-6.1-sol` y `deepseek-v4-flash`. Puede agregar otros Chat-compatible Modelflare modelos como modelos personalizados. Los modelos de imagen y vídeo utilizan puntos finales Modelflare independientes y no funciona a través de este Chat preestablecido. Una clave Modelflare ordinaria está vinculada a un grupo de enrutamiento y puede llamar solo a los modelos de ese grupo, así que use una llave inteligente para el conjunto completo de semillas, o
+`--default-model` con un modelo sirve el grupo de su clave.
+`deepseek-v4.1-flash` está listada de origen pero actualmente responde 503, por lo que el preajuste lo deja fuera. La latencia ascendente varía de unos pocos segundos a aproximadamente 30 segundos, con transitorios ocasionales 503.
+
+Las tarjetas de proveedor MiniMax y MiniMax (CN) también pueden mostrar la cuota del Plan de codificación cuando se configuran Key tiene un plan activo. El panel de control lee la ventana de 5 horas del plan y, cuando está presente, semanalmente ventana; estas son observaciones de visualización y no cambian el enrutamiento del modelo.
+
+Ollama Tarjetas de proveedor de la nube leer cuota de `/api/balance` Primero, con `/api/usage` como a fallback para despliegues más antiguos. Un informe de reserva analizado sustituye a un fallo anterior; 4xx respuestas duras (excepto 404/408/429) borran la última cuota buena, incluso si otra El intento falla, mientras que los fallos transitorios lo mantienen. Un cuerpo ilegible o de gran tamaño se detiene nuevos intentos. Los créditos en dólares solo muestran la asignación incluida, excluyendo los créditos comprados. por lo que una asignación agotada detiene el enrutamiento a Ollama Cloud solo cuando no queda ningún crédito comprado.
+
+`MiniMax-M3.1-Flash-Preview` (1M contexto) aparece en ambos configuración preestablecidos MiniMax. MiniMax lo sirve solo a las claves de suscripción de Token Plan y al código MiniMax por ahora, por lo que una clave API de pago por uso obtiene una Error en ello. Pensar siempre está en: el recolector de esfuerzo ofrece `low` a través `max` y por defecto
+`max`, y no hay manera de apagar el pensamiento. MiniMax no ha publicado un precio por-token para la vista previa; el uso se extrae de su
+[Cuota del Plan Token](https://platform.minimax.io/docs/guides/pricing-token-plan), por lo que OpenCodex No muestra ningún costo estimado para ello. MiniMax `/models` El endpoint no aparece la vista previa aún, por lo que OpenCodex lo mantiene en el catálogo desde el preajuste. Una instalación cuyo guardado La lista de modelos MiniMax sigue siendo la predeterminada anterior y la recibe en el siguiente inicio; una lista que ha editado se deja tal cual; registre la vista previa a mano con
+`ocx models add minimax MiniMax-M3.1-Flash-Preview --context-window 1000000`.
+
+**OpenCode Ir** Rutas `gemini-4-argon-contributor` Gemini API, incluyendo continuaciones de streaming y resultados de herramientas. El existente `opencode-go` preset mantiene su Fijación histórica de URL: URL personalizadas guardadas, incluidas `https://opencode.ai/inference/go/v1`, ruta a través de la canónica `https://opencode.ai/zen/go/v1` endpoint y heredar los valores predeterminados de Go. Gemini luego usa el punto final del modelo nativo de Go con autenticación de clave. Un nombre diferente proveedor personalizado mantiene su URL configurado y no recibe este pin Gemini. Selecciona protocolos por ID de modelo exacto: GPT 6 Luna, GPT 5.6 Luna, Grok 4.6/4.7 y Muse Spark Contributor usa Responses; Claude Haiku 5.5, MiniMax M2.7/M3 y Qwen3.7 Plus/3.8 Max/3.8 Flash utilizar Anthropic Messages. Legado MiniMax M2.5 y Union Alpha también retiene Messages. Los modelos sin un cable listado retienen el chat. Los nuevos pines nativos se aplican al destino Go anclado con autenticación de clave. Los modelos Responses todavía aceptan una explícita `modelAdapters` Anular. Al leer una configuración guardada más antigua, OpenCodex ignora las anulaciones obsoletas de Chat/Responses para los modelos Gemini y Qwen recién anclados, junto con sus preferencias de herramientas alojadas solo válidas para Responses. Otros proveedores, cuentas y enrutamiento permanecen disponibles. Las lecturas dejan el archivo sin cambios; una edición de configuración explícita posterior guarda los valores actualizados. Nuevas anulaciones para estos modelos nativos siguen siendo rechazadas. Gemini utiliza `low`, `medium` y `high` niveles de pensamiento; esfuerzos más altos `high`.
+
+OpenCode Go requiere un identificador de sesión estable para el enrutamiento. OpenCodex envía
+`claude-haiku-5-5`, al igual que los modelos MiniMax, sobre el cable Anthropic Messages, a juego
+[Tabla de puntos finales de OpenCode Go](https://opencode.ai/docs/go/#endpoints). OpenCodex deriva su encabezado de sesión Go desde los encabezados de hilo/sesión Codex, o desde el
+`x-opencode-session` cabecera cuando las cabeceras Codex están ausentes. Esto se aplica a los directos Solicitudes y solicitudes Chat Completions puenteadas a Responses. Incluso un `ocx_`-prefijado El valor entrante se trata como entrada de cliente y El puente interno lleva el valor original, por lo que es nativo. Chat, Chat puenteado y Responses obtienen el mismo resultado. Provider-config explícito Las cabeceras de sesión son anulaciones del operador y se envían sin cambios. Los clientes deben mantener la Identificador estable dentro de una conversación y distinto a través de conversaciones. Una solicitud sin ningún identificador de sesión no se le da una identidad de solicitud cruzada inferida; es en lugar de enviarse en una sesión asignada solo para esa solicitud, aislada de cada otra solicitud (consulte la referencia del proveedor para saber cómo se transmite ese valor). Para Claude Messages, los encabezados de sesión de OpenCode Go configurados siguen siendo autorizados. De lo contrario, los encabezados de sesión o subproceso explícitos válidos tienen prioridad y son válidos. Identidad de conversación en `metadata.user_id` Suministra el respaldo. Este fallback es aplicado al destino final de Go, incluyendo selecciones aleatorias y reserva intentos, en lugar de la ruta preliminar. Claves de caché de sistema-prompt compartidas hacen no identifica conversaciones, y la identidad específica de Go no se envía a objetivos que no son Go. Las configuración del proveedor Pi generado permiten `compat.sendSessionAffinityHeaders`
+así que Pi envía su identidad por sesión al proxy. Pi administrado manualmente existente configuración pueden establecer esta opción en sus `opencodex` proveedor también. Pi puede omitir la afinidad de sesión cuando `cacheRetention` es `none`; habilitar la retención de caché cuando se requiere una sesión ascendente estable.
+
+**Ecos de llamadas a herramientas de MiMo.** En OpenCode Go y otras rutas de Chat Completions, se oculta un bloque `` cuando duplica una llamada estructurada a la misma herramienta con la misma entrada efectiva. Esto incluye envoltorios de MiMo como `` con identificadores de cierre coincidentes, incluso cuando el eco sigue a un texto normal. Los ejemplos de código siguen visibles. Si la entrada es distinta o varias llamadas pueden explicar el bloque, el marcado se conserva. Para `mimo-v2` y los identificadores MiMo V2 con puntos, como `mimo-v2.6-pro`, si la pasarela envía exactamente una llamada vacía `{}` a una herramienta freeform declarada y coloca su entrada en un bloque independiente, sin identificador o con él, opencodex recupera la entrada en la llamada y oculta el bloque. Los identificadores con guiones, como `mimo-v2-pro` y `mimo-v2-omni`, no participan en esta recuperación. El texto normal, los ejemplos entre comillas, las funciones ordinarias y las respuestas ambiguas no cambian. También se admite el inicio incorrecto ` **Tres rutas de facturación Volcengine:** `volcengine` es el Arca de pago API,
+> `volcengine-coding-plan` consume la cuota del plan de codificación, y `volcengine-agent-plan` Consume agente > Cuota del plan. Utilice la clave y el punto final emitidos para el mismo producto; el `/api/v3` punto final > puede incurrir en cargos de pago por uso incluso cuando existe una suscripción al Plan. > Los configuración preestablecidos usan catálogos de modelos estáticos seleccionados porque Ark's `/models` La respuesta también incluye > incrustación, imagen, vídeo y recursos 3D, la puerta de enlace de codificación devuelve el mismo catálogo amplio, > y la puerta de enlace del plan del agente no tiene `/models` recursos. Pago por uso predeterminado a
+> `doubao-seed-2-1-pro-260628`; su catálogo curado también incluye texto DeepSeek y GLM actuales > modelos. El plan de codificación por defecto `ark-code-latest`, mientras que el Plan de Agente por defecto
+> `deepseek-v4-flash`.
+
+> **Restricción de uso del plan Volcengine:** Volcengine documenta el Plan de Codificación y la cuota del Plan de Agente como > válido solo dentro de las herramientas de codificación de IA compatibles, y advierte que el uso de una clave de plan para API general Las llamadas > pueden suspender la suscripción o prohibir la cuenta. Enrutamiento Codex o Claude Code a través de > opencodex es el uso documentado; apuntando otra automatización a una clave de plan no lo es. Los > de pago por uso `volcengine` ruta no tiene tal restricción.
+
+**Chutes descubrimiento.** Los `chutes` preset usa el contenido compartido fijo de Chutes OpenAI-compatible LLM Se lee el público. `/v1/models` catálogo, mantiene solo filas cuya `supported_features` anunciar
+`tools`, conserva los identificadores de modelos que contienen barras y los metadatos en vivo seguros, y limita el descubrimiento a 256 KiB y 128 filas brutas. Debido a que ese catálogo es público, no puede probar que una clave suministrada sea válida; chat Las solicitudes siguen utilizando la clave Bearer configurada. Los hosts Chute personalizados desplegados por el usuario y los Chutes que no son LLM Las API siguen siendo territorio de proveedor personalizado. Crea una clave desde el [Panel de chutes](https://chutes.ai/auth/start).
+
+**DeepInfra descubrimiento.** La clave basada `deepinfra` OpenAI Chat Completions proveedor utiliza el
+`openai-chat` adaptador con una tecla Bearer API. Su lista de modelos propiedad del registro URL mantiene solo las filas etiquetadas
+`chat`, preserva los identificadores de modelos nativos que contienen barras y limita el descubrimiento en vivo a 512 KiB y 512 en bruto filas. Crear claves en [Panel de DeepInfra](https://deepinfra.com/dash/api_keys).
+
+**descubrimiento hiperbólico.** El preset lee `/v1/models` con la clave portadora configurada, conserva ids de modelos nativos que contienen barras, y limita el descubrimiento en vivo a 256 KiB y 256 filas sin procesar. Cubre solo texto sin servidor y chat de lenguaje de visión; Los puntos finales de imagen, audio y GPU separados de Hyperbolic están fuera de alcance. Crear claves en [Hiperbólico](https://app.hyperbolic.ai).
+
+**Nscale y descubrimiento de Vultr.** Ambos presets leen la autenticación del proveedor `/v1/models` catálogo, preservar los identificadores nativos y limitar el descubrimiento a 256 KiB y 256 filas sin procesar. El catálogo de Nscale mezcla el chat, imagen, y la incrustación de modelos sin un campo de modalidad, por lo que el preajuste admite solo
+`meta-llama/Llama-3.1-8B-Instruct`, el modelo utilizado por la herramienta oficial de Nscale que llama al ejemplo API. Vultr actualmente documenta la herramienta que llama solo para `kimi-k2-instruct`, por lo que su preset expone solo eso modelo. Otras filas permanecen ocultas hasta que el proveedor publica evidencia equivalente de agente-herramienta. Crear un servicio de Nscale token en el [Consola Nscale](https://console.nscale.com); copia la inferencia de Vultr La clave de la descripción general de la suscripción en [Consola Vultr](https://my.vultr.com).
+
+**Detección de código de comando.** El preajuste lee el código de comando `/provider/v1/models` Lista de el host fijo Provider API, conserva los identificadores nativos del proveedor y limita el descubrimiento a 256 KiB y 256 raw filas. `ocx login command-code` admite OAuth a través del inicio de sesión en el navegador (con credenciales locales opcionales CLI Importación de `~/.commandcode/auth.json` para los usuarios existentes de Código de Comando CLI); el catálogo del modelo es cuenta-scoped y viene del punto final de descubrimiento autenticado después de iniciar sesión. El proveedor-API preset (`commandcode`) envía la clave de configuración activa: la mayoría de los identificadores de modelo usan Chat Completions con un Bearer encabezado, mientras `claude-*` ids use Anthropic Messages con `x-api-key`porque el código de comando les sirve sólo en `/provider/v1/messages`. Un proveedor que reutiliza el `commandcode` nombre para un diferente punto final mantiene su propio cable. El ajuste preestablecido de OAuth (`command-code`) utiliza el portador de la cuenta almacenada para descubrimiento autenticado y generación de flujos desde `/alpha/generate` como NDJSON. MiMo tool-call markup repetido por la puerta de enlace como texto se elimina cuando duplica una llamada real. En los modelos MiMo, a Completar la llamada de herramienta declarada sin contraparte nativa se restaura solo después de un acabado limpio; Los giros interrumpidos o filtrados dejan el marcado como texto. Crear claves de proveedor-API en
+[Command Code Studio](https://commandcode.ai/studio/).
+
+Para un proveedor que utiliza el `command-code` adaptador, `projectContext: "on"` Opta por enviar archivos de proyectos locales en el `/alpha/generate` `memory`, `taste`, y `skills` campos. Con `projectContext` Desactivado o `"off"`, no hay archivos del proyecto (`AGENTS.md`, gusto o habilidades) se leen o se envían; el `config` La carga útil de metadatos no cambia. Las raíces se resuelven desde el **Directorio de trabajo del proceso proxy opencodex**, no de un Espacio de trabajo remoto del llamante. El cargador lee `AGENTS.md`, `.commandcode/taste/taste.md`, y `SKILL.md` archivos en directorios secundarios inmediatos de `.commandcode/skills`,
+`.agents/skills`, y `.pi/skills` bajo ese directorio de trabajo. Habilitar la opción envía el contenido recogido de origen del punto final de código de commando configurado. Es rechazada para otros adaptadores. Las comprobaciones de ruta asíncrona mantienen las lecturas dentro del trabajo resuelto directorio, incluso cuando ese directorio es una raíz del sistema de archivos; solo El contenido es leído. Se permiten enlaces simbólicos de directorio de habilidad que se resuelven dentro de ese directorio; Los que se resuelven fuera son rechazados. Cada entrada visitada cuenta para el presupuesto de escaneo; en Se seleccionaron 16 habilidades. Los bytes de archivo, los bytes totales de habilidad y el tiempo de carga están limitados; Los archivos ilegibles o faltantes producen campos vacíos. Los resultados estables se almacenan en caché durante 30 segundos; Los tiempos de espera y los rechazos de admisión al sistema de archivos no se almacenan en caché, por lo que una solicitud posterior puede volver a intentarlo.
+
+**Autenticación y descubrimiento de OrcaRouter.** Elija cualquiera `ocx login orcarouter-oauth` por autorización del navegador con un solo clic o `ocx login orcarouter` para pegar una clave API existente. El PKCE flow inicia primero un loopback listener, envía un desafío S256 nuevo y declara a
+`https://www.orcarouter.ai/auth`, intercambia el código de un solo uso en
+`https://www.orcarouter.ai/api/v1/auth/keys`, y almacena la clave devuelta por el usuario en
+`~/.opencodex/auth.json`. El preajuste de teclas manuales continúa utilizando el almacén de claves del proveedor normal. Ambos modos de ruta a `https://api.orcarouter.ai/v1` y descubre el catálogo público en vivo con
+`capability=chat`; se excluyen las filas de medios que no sean de chat/de reclasificación, y se informa sobre el control de modalidades de entrada si Codex ofrece archivos adjuntos de imagen. Debido a que el catálogo en sí es público, la configuración de la clave manual La validación de los informes es desconocida en lugar de aceptar esa respuesta como prueba de que la clave funciona.
+
+Durante el inicio de sesión del navegador OrcaRouter (`ocx login orcarouter-oauth`), un intercambio de claves exitoso cuerpo de respuesta debe ser válido UTF-8 JSON no más grande que 64 KiB. Los 30 segundos existentes de la solicitud El presupuesto cubre tanto los encabezados de respuesta como el cuerpo completo; los cuerpos sobredimensionados o malformados son rechazado antes de que se guarde la clave. Estos límites se aplican solo al intercambio de claves de inicio de sesión, no a la inferencia. solicitar cargas útiles. Validación del alcance no ha cambiado: una omitida `scope` Está permitido, mientras que explícitamente inválido `scope` es rechazada.
+
+Para una implementación auto-alojada de un origen, establezca el origen compartido antes del primer inicio de sesión PKCE; la inferencia URL se deriva del mismo origen:
+
+```bash
+ORCAROUTER_BASE_URL=https://router.example ocx login orcarouter-oauth
+```
+
+Para una implementación auto-alojada dividida, establezca `ORCAROUTER_API_BASE_URL` y
+`ORCAROUTER_AUTH_BASE_URL` separadamente.
+
+El valor debe ser un origen HTTPS (o un bucle HTTP para el desarrollo local) sin credenciales, consulta, o fragmento. Antes del primer inicio de sesión en un punto final autoalojado privado/loopback, explícitamente permitir que ese destino en su `~/.opencodex/config.json` fila de proveedores. Por ejemplo, combinar este La entrada en el existente `providers` Objeto para un servidor de desarrollo local:
+
+```json
+{
+ "orcarouter-oauth": {
+ "adapter": "openai-chat",
+ "baseUrl": "http://127.0.0.1:9999/v1",
+ "authMode": "oauth",
+ "allowPrivateNetwork": true
+ }
+}
+```
+
+Luego corre `ORCAROUTER_BASE_URL=http://127.0.0.1:9999 ocx login orcarouter-oauth`. El inicio de sesión conserva este consentimiento explícito; la configuración del URL por sí sola nunca habilita el acceso a la red privada. Sin la aceptación, la validación de destino rechaza la inferencia y el descubrimiento del modelo para ese punto final. Este requisito se refiere al punto final del proveedor; el oyente de devolución de llamada del navegador no necesita dicha aceptación. Vuelva a ejecutar el inicio de sesión después de un relé `401`; Las llaves OrcaRouter son duraderas y no tienen una concesión refresc-token.
+
+**Meta Modelo API (`meta-model`).** Muse Spark en el propio punto final compatible con OpenAI de Meta, Servido sobre `/v1/responses`. Crear una clave en
+[la consola de desarrolladores de Meta](https://dev.meta.ai/docs/authentication) — Meta llama a esto variable `MODEL_API_KEY`, pero opencodex deriva el env var del ID del proveedor, por lo que Exportar como **`META_MODEL_API_KEY`** (o lo pega durante `ocx init`) La cuenta necesita un método de pago antes de que servirá solicitudes, y cada llamada se mide por token. Tres Los modelos están sembrados, cada uno con una ventana de contexto de 1M: `meta-model/muse-spark-1.3` y
+`meta-model/muse-spark-1.3-contributor` con el vendedor `minimal`/`low`/`medium`/`high`/`xhigh`
+escalera, y `meta-model/muse-wonder-1.0` (Museo Maravilla, vista previa) con `minimal` a través `max`. Muse Wonder es el modo estándar solo en el modelo API: no tiene nivel de colaborador y cuesta $4 por 1M de entrada y $20 por 1M de salida tokens. Muse Wonder Full solo está disponible dentro de Muse Suscripciones de código, por lo que no se siembra. El descubrimiento se queda hasta que se verifica una lista autenticada, porque Meta sirve imagen y modelos de voz en el mismo host.
+
+Dos cosas que vale la pena saber antes de elegirlo. **No se aplica una suscripción a Muse Code Aquí:** Meta-ámbito de esa credencial al código de Muse CLI y factura cualquier otra clave Pague según vaya. Y el nivel de colaborador es barato porque Meta entrena en sus indicaciones — aproximadamente 92% de descuento en la entrada, 96% de descuento en la salida y 99% de descuento en la entrada en caché —, así que mantén la confidencialidad material fuera de él. Muse Spark también es accesible a través de revendedores, con una lista más estrecha:
+`command-code` Lleva ambos niveles, mientras que `opencode-go` Sólo sirve
+`muse-spark-1.3-contributor`.
+
+**Código Meta Muse (`meta-muse`).** Un inicio de sesión macOS simple ya prueba la clave API Almacenado por `muse login`. Sin credenciales locales, o en otra plataforma, se inicia el flujo de aprobación del dispositivo del navegador. Agregar cuenta y reautenticación omite la importación local para evitar Reutilizar la cuenta que se está reemplazando. OpenCodex nunca lanza el Muse CLI. Si el dispositivo inicia sesión falla sin cancelación, una superficie de entrada manual disponible puede aceptar una clave pegada; que la clave se enfrenta al mismo formato y validación del modelo API como una clave importada. En macOS, Aprobar el aviso de llavero en el host proxy en 120 segundos. Denegaciones de importación mostrar la razón de falla y ofrecer un campo de pegado de clave existente sin iniciar otro inicio de sesión. Agregar cuenta en un proveedor ya configurado omite la importación local. Véase
+[Soporte de plataforma](/es/reference/platform-support/) para la imagen completa por plataforma.
+
+Para iniciar cualquier inicio de sesión de Meta Muse a través de la administración, API requiere una sesión de panel. incluyendo add-account y reautenticación. Un encabezado token de administración en bruto o GUI falsificado recibe
+`403 oauth_consent_required` antes de que se lea una credencial o comience una subvención. Esta puerta utiliza el principal de sesión resuelto por el servidor, no un recibo de casilla de advertencia registrado por separado. Direct `ocx login meta-muse` y otros proveedores de OAuth mantienen sus políticas de inicio de sesión existentes. Por lo tanto, la lista de proveedores de administración OAuth omite Meta Muse para los paneles raw-admin-token; abra un panel de control autenticado por sesión para usar ese flujo de inicio de sesión. Esto sólo cambia el descubrimiento, no las verificaciones de admisión en el inicio de sesión o la continuación manual.
+
+Los tres sembrados `meta-muse` modelos (Muse Spark 1.3, su nivel de colaborador y Muse Wonder) exponer `minimal`/`low`/`medium`/`high`/`xhigh`/`max` a clientes enrutados, incluido el selector de esfuerzo de Grok. Solicitudes de uso
+`User-Agent: muse-build/1.3.0 (opencodex compatibility)` Así que Meta acepta el código Muse Contrato de esfuerzo. Un proveedor explícito User-Agent anula este valor predeterminado y puede causar
+`max` ser rechazado. En marcha `meta-model` Solo Muse Wonder acepta `max`sus filas de chispa y OpenCode Ir a mantener el `xhigh` techo. Publicidad `max` es el contrato del modelo y no prueba tu plan de código Muse cubre Muse Wonder.
+
+**Lee esto antes de habilitarlo.** Meta-ámbitos de esa credencial en el código de Muse CLI, Usarlo aquí es un *sin soporte* camino. Meta no autoriza la cobertura de suscripción fuera de su propio cliente, cómo se establecen estas llamadas no es observable desde el API, y usted debe tratar cada llamada como facturable contra su cuenta. La clave, importada o pegada, se copia en Tienda de autenticación de OpenCodex (`~/.opencodex/auth.json`, modo 0600) como cualquier otro OAuth Credencial. El panel muestra una advertencia de Términos de Servicio antes del primer inicio de sesión y antes de cualquier reautenticación — el mismo tratamiento Anthropic y Google Antigravedad obtener.
+
+Meta informa el uso de la ventana de suscripción dentro de las respuestas de transmisión, y OpenCodex La fila de la cuenta muestra las últimas ventanas observadas de 5 horas y semanales con la edad de esa lectura. — Meta no publica ningún punto final para consultarlos a pedido, por lo que un valor solo se actualiza con otro turno de transmisión a través de este proveedor y un turno que pasa por la traducción de solicitudes en lugar de passthrough informa ninguno. Una cuenta que aún no ha servido un turno de transmisión simplemente no muestra cuota, lo cual no es un error. Los límites de velocidad se aplican por equipo, no por clave.
+
+Para una configuración compatible, use `meta-model` arriba con su propia clave.
+
+**Cuota de código de comando.** El panel de control y `ocx account refresh` Código de comando de la sonda
+`/alpha/billing/credits` ventanas (5 horas y semanal) en el canónico
+`https://api.commandcode.ai` anfitrión. El ajuste preestablecido de OAuth (`command-code`) utiliza el almacenado portadora de cuenta; el preajuste de tecla Proveedor-API (`commandcode`) utiliza el activo configurado clave. Una base similar editada por el usuario URL nunca se prueba. Permanecer mensualmente, comprado, y Los créditos gratuitos se muestran como una ventana USD cuando el Código de Comando también informa sobre el período de gasto.
+
+**SambaNova Cloud descubrimiento.** El preajuste lee el público de SambaNova Cloud `/v1/models` de la lista fija API host, conserva los identificadores nativos del proveedor y limita el descubrimiento a 128 KiB y 128 filas sin procesar. Porque el catálogo no está autenticado, el flujo de inicio de sesión CLI informa la clave como no verificable en lugar de tratar La respuesta pública como prueba. Las solicitudes de chat aún usan la clave Bearer configurada y desactivan en paralelo llamadas a funciones, que SambaNova aún no admite. Los endpoints de implementación privados de SambaStudio son fuera del alcance. Crear claves en
+[Nube SambaNova](https://cloud.sambanova.ai/apis).
+
+**Descubrimiento de la fábrica de tokens Nebius.** El preset solicita el catálogo de modelos verbose autenticado y mantiene solo filas cuya arquitectura produce texto, excluyendo modelos de incrustación y generación de imágenes. Conserva los identificadores nativos que contienen barras, además de los metadatos de contexto y modalidad de entrada informados, y limita descubrimiento en 512 KiB y 512 filas sin procesar. Los hosts de implementación dedicados están fuera del alcance. Crear claves en
+[Fábrica de tokens Nebius](https://tokenfactory.nebius.com).
+
+**Crusoe descubrimiento.** El preajuste basado en claves utiliza el `openai-chat` adaptador y envía su clave Bearer solo para el host de inferencia sin servidor fijo de Crusoe. `/v1/models` Rechaza solicitudes no autenticadas con 401, por lo que una respuesta de lista exitosa cuenta como validación de clave. Descubrimiento preserva barra delimitada IDs nativos como `zai-org/GLM-5.3` y `moonshotai/Kimi-K2.6` exactamente como Crusoe los devuelve y es Limitado a 256 KiB y 256 filas en bruto. Las filas se mantienen solo cuando informan `is_public: true` y un texto o multimodal `architecture.modality`, que excluye las implementaciones privadas de cuenta y cualquier incorporación o filas de medios. Los modelos de razonamiento devuelven su pensamiento en el Chat Completions
+`reasoning` que el adaptador lee. Solo `openai/gpt-oss-120b` acepta un `reasoning_effort`
+Escalera (`low`, `medium`, `high`); los otros modelos de razonamiento tratan el campo como una palanca de encendido / apagado, por lo que el preajuste declara que no hay escala de esfuerzo en todo el proveedor ni llamadas a herramientas paralelas en todo el proveedor. Tasa Se aplican límites por proyecto y por modelo (429 cuando se excede, 503 mientras que una implementación compartida escala), y Las cuentas nuevas comienzan con $5 de créditos gratis. Crear una clave en el
+[Consola de Crusoe Cloud](https://console.crusoecloud.com) bajo Fundición de Inteligencia, Inferencia.
+
+**DigitalOcean descubrimiento.** El preajuste utiliza una clave de acceso de modelo contra el Serverless compartido fijo Inferencia host y se cruza con el autenticado `/v1/models` Respuesta con DigitalOcean Chat Completions allowlist respaldado por documentos. Desconocido, solo Responses, incrustación y generación de medios Los IDs fallan al cerrarse. Discovery tiene un límite de 256 KiB y 256 filas en bruto; específico del agente y dedicado Los hosts están fuera de alcance. Crear una clave en el [Panel de Control de Seguridad](https://cloud.digitalocean.com/model-studio/manage-keys).
+
+**Scaleway descubrimiento.** El preajuste cruza la lista de modelos autenticados con el Lista de permisos de Chat Completions sin servidor documentado. Desconocido, solo Responses, incrustación, La transcripción y otros identificadores de modelos de medios fallan; el descubrimiento está limitado a 128 KiB y 128 en bruto filas. Utiliza el punto final compartido del proyecto predeterminado; URL calificadas para el proyecto y URL dedicadas. implementaciones requieren un proveedor personalizado. Crear una clave API en el
+[Consola Scaleway](https://console.scaleway.com/generative-api).
+
+**Descubrimiento sin plumas.** El preajuste se autentica contra el host compatible con OpenAI fijo y solicita solo los primeros 100 modelos populares filtrados de origen para chatear y el plan actual. Secretaría reglas luego fallan cerrado a menos que cada fila informe independientemente de la disponibilidad del plan, no hay Puerta, y `features.tool_use: true`. El descubrimiento tiene un límite de 128 KiB y 100 filas en bruto, por lo que el servicio está El catálogo de decenas de miles de modelos nunca se descarga o almacena en caché por completo. Porque `/v1/models` está documentado como llamable con o sin autenticación, no puede probar que una clave suministrada sea válida; las solicitudes de chat aún usan la clave Bearer configurada. Reserva de términos sin plumas planes individuales para uso interactivo/de prototipos; las aplicaciones arbitrarias requieren un plan de escala. Crear una clave en el [Panel sin plumas](https://featherless.ai/account/api-keys).
+
+**Novita descubrimiento.** El preajuste basado en claves utiliza el `openai-chat` adaptador y envía su clave Bearer solo para el host compatible con OpenAI fijo de Novita. Su lista de modelos públicos se filtra a filas que informan ambos `model_type: chat` y el `chat/completions` punto final, con descubrimiento limitado a 512 KiB y 256 filas en bruto. Los identificadores de los modelos deben conservarse exactamente como Novita los devuelve, incluidos los identificadores delimitados por barras, y no deben ser normalizados o reescritos antes del enrutamiento. Como el catálogo es público, los informes de inicio de sesión la clave como no verificable en lugar de tratar una respuesta de lista exitosa como prueba. Capacidades de modelo varíe, por lo que el ajuste preestablecido no anuncia llamadas de herramientas paralelas en todo el proveedor ni OpenAI `reasoning_effort`. Crear una clave en [Gerente clave de Novita](https://novita.ai/settings/key-management).
+
+> **Alcance Baseten:** El preajuste cubre el valor compartido de Baseten [API de modelo](https://docs.baseten.co/inference/model-apis/overview)
+Solo >. Utilice un personal [Clave API](https://docs.baseten.co/organization/api-keys) para uso local, o una clave de equipo > con **API de modelo de llamada** Acceso para uso compartido/producción. Truss dedicado `predict` los extremos usan diferentes Los hosts y esquemas > no se enrutan con este preajuste. El descubrimiento en vivo de > para este preajuste se limita a una respuesta de 1 MiB y 256 filas de modelos sin procesar.
+
+
+
+### Código oficial CLI (Global y CN)
+
+OpenCodex proporciona soporte de adaptador oficial para el código CLI de Tencent Cloud a través del `codebuddy` (Global) y `codebuddy-cn` (China) presets.
+
+```json
+{
+ "providers": {
+ "codebuddy": {
+ "adapter": "codebuddy",
+ "baseUrl": "https://www.codebuddy.ai",
+ "apiKey": "${CODEBUDDY_API_KEY}"
+ },
+ "codebuddy-cn": {
+ "adapter": "codebuddy",
+ "baseUrl": "https://www.codebuddy.cn",
+ "apiKey": "${CODEBUDDY_CN_API_KEY}"
+ }
+ }
+}
+```
+
+- **Prerrequisitos:** Instale el CodeBuddy CLI oficial a nivel mundial:
+ ```bash
+ npm install -g @tencent-ai/codebuddy-code
+ ```
+- **Autenticación:** Obtenga su clave oficial API desde la consola del proveedor:
+ - Global: [Llaves de CodeBuddy Global API](https://www.codebuddy.ai/profile/keys)
+ - CN: [Llaves de CodeBuddy CN API](https://copilot.tencent.com/profile/keys)
+- **Aislamiento de la región:** `codebuddy` y `codebuddy-cn` usar puntos finales canónicos separados (`https://www.codebuddy.ai` y `https://www.codebuddy.cn`) y ambientes infantiles aislados (`CODEBUDDY_INTERNET_ENVIRONMENT=public` Vs `internal`) Las credenciales son estrictamente regionales y nunca se intercambian entre entornos. La anulación de la base canónica URL falla cerrada.
+- **Modelo Discovery:** el proxy solicita la configuración del producto CodeBuddy (`GET {baseUrl}/v3/config`) con la tecla configurada como `X-API-Key` encabezado, y la lista en esa respuesta es la lista autorizada de modelos descubiertos: es la configuración de la propia cuenta de la clave, por lo que se ha demostrado que pertenece a la clave —, una clave diferente o incorrecta responde al sobre anónimo sin lista en lugar de los modelos de otra cuenta. La lista autenticada es la misma lista que imprime el CLI para `--model` (la línea "actualmente soportada" de un CLI), puede diferir del manifiesto estático incluido con el CLI, y los selectores predeterminados del proveedor (`default` por CN, `default-model` para Global) nunca aparecen en él, pero permanecen accesibles: el catálogo los retiene durante el descubrimiento en vivo y en cada camino de reserva. Al iniciar/sincronizar, el proxy vincula la lista almacenada en caché a una huella digital irreversible de la clave configurada, por lo que un conmutador de clave nunca observa una lista almacenada en caché para la clave anterior, y se degrada a la caché obsoleta del proveedor/clave-huella digital, luego a la semilla estática en `src/providers/codebuddy-models.ts`, cuando la clave no se autentica o la solicitud falla. Los registros de fallos de detección contienen solo una categoría y un estado HTTP, sin el mensaje de la puerta de enlace o una excepción de transporte sin procesar. La solicitud de descubrimiento con credenciales no sigue a las redirecciones; una respuesta 3xx degrada la lista sin reenviar la clave a otro origen.
+- **Propiedad de la herramienta y el puente de herramientas:** El CLI siempre se genera con `--tools ""` y `--strict-mcp-config`, por lo que no tiene herramientas propias incorporadas o configuradas por el usuario. Cuando una solicitud lleva un catálogo de herramientas Codex, el proveedor arma un puente MCP de solo captura: el catálogo validado y la configuración MCP se escriben en un dir temporal privado, el CLI se inicia con `--mcp-config` y una exacta `--allowedTools` lista, y el `system/init` frame debe informar exactamente ese servidor de puente como conectado o el turno falla cerrado. El puente anuncia las herramientas Codex y captura las llamadas propuestas, pero nunca ejecuta nada: se devuelve un lote de llamada de herramienta completado como `function_call` elementos (nombres asignados a los nombres de cable de la solicitud, como máximo 16 llamadas por mensaje de asistente), el árbol de procesos se termina en `message_stop`, y el cliente Codex externo solo realiza la aprobación, sandboxing y ejecución. Los bloques de uso de herramientas paralelos se almacenan en memoria intermedia y se devuelven como llamadas completas incluso cuando sus fragmentos se entrelazan o CodeBuddy reutiliza un índice de bloque de contenido. Un bloque que se deja abierto al final de turno, un reemplazo del mismo índice antes de completar los argumentos JSON o un fragmento de argumento que no se puede atribuir a un bloque abierto falla el turno en lugar de reenviar una llamada parcial o vacía. Los resultados de la herramienta vuelven como entrada de la siguiente solicitud, y la conversación continúa. Las solicitudes sin herramientas mantienen la forma de texto y razonamiento plano. Si el CLI escribe un DSML sin citar `calls` línea de control seguida de a `functions.*` invocar la línea de control en texto o razonamiento, OpenCodex rechaza el turno en lugar de reenviar el andamio o interpretarlo como una llamada ejecutable. DSML discutido o citado en prosa, código en línea, código cercado o ejemplos de fuente sigue siendo texto de respuesta ordinario.
+- **Aplicación de elección de herramienta:** Cuando una solicitud especifica `tool_choice: "required"` o selecciona una herramienta con nombre específico, el puente espera una llamada a la herramienta del modelo. Si el CLI completa el turno con texto sin formato en lugar de capturar una llamada a la herramienta, el OpenCodex falla al cerrarse con un 502 `tool_call_required` error en lugar de devolver un texto no válido.
+- **Estado de gobierno:** Si el enrutamiento de esta superficie de automatización del proveedor detrás de un proxy para un agente de terceros satisface los términos de uso aceptable de CodeBuddy es una pregunta abierta marcada para la revisión de seguridad del mantenedor (consulte la nota de gobierno en la entrada del registro del proveedor). Trate a este proveedor como pendiente de esa revisión, y tenga en cuenta el límite de propiedad del puente de herramientas: la CLI anidada anuncia las herramientas pero nunca las ejecuta, y la aprobación, el sandboxing y la ejecución permanecen con el cliente externo Codex.
+- **Derechos y facturación:** El proveedor utiliza la misma cuenta CodeBuddy/superficie de autenticación CLI documentada por el proveedor. La disponibilidad y la facturación de los créditos gratuitos, promocionales, de prueba o de suscripción siguen estando determinadas por el derecho de cuenta de CodeBuddy del usuario.
+
+
+
+### Oficial Qoder CLI (Global y CN)
+
+OpenCodex proporciona soporte oficial del adaptador para Qoder a través de la `qoder` (Global) y `qoder-cn` (China) presets. Ambos utilizan un token de acceso personal suministrado por el usuario y el CLI sin cabeza del proveedor; OpenCodex nunca lee sesiones de escritorio de Qoder, cookies del navegador, actualizar tokens o API de consola privada.
+
+```json
+{
+ "providers": {
+ "qoder": {
+ "adapter": "qoder",
+ "baseUrl": "https://qoder.com",
+ "apiKey": "${QODER_PERSONAL_ACCESS_TOKEN}"
+ },
+ "qoder-cn": {
+ "adapter": "qoder",
+ "baseUrl": "https://qoder.cn",
+ "apiKey": "${QODERCN_PERSONAL_ACCESS_TOKEN}"
+ }
+ }
+}
+```
+
+- **Prerrequisitos:** Instale el CLI oficial para la región que utiliza:
+ ```bash
+ npm install -g @qoder-ai/qodercli # Global: qoder / qodercli
+ npm install -g @qodercn-ai/qoderclicn # CN: qodercn / qoderclicn
+ ```
+- **Autenticación:** Crear un PAT en la página de integraciones de cuenta ([Mundial](https://qoder.com/account/integrations), [NC](https://qoder.cn/account/integrations)) y pegarlo como clave API del proveedor. La clave almacenada llega a la CLI solo como `QODER_PERSONAL_ACCESS_TOKEN` (Global) o `QODERCN_PERSONAL_ACCESS_TOKEN` (CN) en un entorno infantil de alcance.
+- **Aislamiento de la región:** Cada preajuste acepta solo su destino canónico (`https://qoder.com` o `https://qoder.cn`y resuelve su propio ejecutable. Las credenciales, el caché del modelo, el uso y la salud son independientes; ninguna región vuelve a la otra. Un proveedor personalizado más antiguo llamado `qoder` con un destino diferente mantiene su adaptador existente y URL.
+- **Modelo Discovery:** `qoder --list-models` es la lista autorizada de derechos para el PAT actual. La caché está vinculada a una huella digital irreversible de la token, por lo que cambiar de cuenta nunca reutiliza la lista de otra cuenta. Si el descubrimiento falla, el proveedor se degrada a una caché obsoleta y luego a la semilla estática documentada.
+- **Uso del token:** Qoder CLI informa de cero recuentos de token a menos que su interruptor de uso esté encendido, por lo que cada preajuste lo enciende en su entorno hijo CLI con alcance: `QODER_EXPOSE_TOKEN_USAGE=true` para Global y `QODERCN_EXPOSE_TOKEN_USAGE=true` para CN, que solo lee su propio prefijo.
+- **Propiedad de la herramienta:** El CLI se ejecuta en un solo giro `stream-json` con `--tools ""`, `--strict-mcp-config`, desactivando las fuentes y desactivando la persistencia de sesión, por lo que Codex mantiene la propiedad exclusiva de la herramienta. Las herramientas declaradas por el cliente se exponen a través de un servidor MCP con alcance de solicitud aislado.
+- **Entrada de imagen:** Qoder Global acepta la entrada de imágenes a través del Qoder CLI. OpenCodex reenvía las entradas de imagen compatibles que llegan al adaptador Global a la CLI sin mantener una lista de permisos de capacidad de visión por modelo allí. La compatibilidad de imágenes y cualquier preprocesamiento o enrutamiento específico del modelo son manejados por Qoder. OpenCodex no utiliza la lista de reserva de descubrimiento estático para clasificar la capacidad de visión por modelo. Qoder CN mantiene su clasificación de sidecar existente, y cualquier solicitud de imagen bruta residual que llegue al adaptador CN se rechaza como `unsupported_input_modality`. OpenCodex serializa el historial antes del turno actual, pero Qoder no persiste las sesiones, por lo que las imágenes anteriores se reproducen en turnos posteriores. En las conversaciones de imágenes observadas de varios giros, las imágenes reproducidas pueden asociarse de manera poco confiable u ordenarse efectivamente en relación con el texto histórico que acompañaron originalmente.
+- **Recuperación de PAT:** Para ambos configuración preestablecidos de Qoder, un grupo de teclas API puede cambiar a otro PAT en un rechazo de autenticación compatible o agotamiento de cuota a nivel de cuenta, pero solo antes del contenido de respuesta o un evento que hace que la reproducción sea insegura. La recuperación requiere una clasificación específica de Qoder y respeta los presupuestos de envío y salto de credenciales; un mensaje HTTP 401/429 o de cuota solo no es permiso para reproducir. Las configuración de una sola tecla no giran. Compartir el corredor CLI no habilita esta recuperación de clave API para CodeBuddy o Claude CLI autoautenticado.
+- **Contingente:** No se utiliza cuota pública API, por lo que los totales y los tiempos de reinicio no están disponibles. Códigos 110 (límite diario de cuenta) y 118 (agotamiento personal de créditos) `insufficient_quota` y permitir la consideración de la recuperación PAT. Otros códigos de cuotas soportados también informan `insufficient_quota` pero no lo autorices. Los códigos de error numéricos tienen prioridad: un código numérico no reconocido no vuelve a la cuota o al texto de autenticación. Sin un código numérico, solo el mensaje diario de la cuenta compatible que comienza con “Ha alcanzado su límite de uso diario para Chat”, sin equipo/modelo/calificador compartido, otorga recuperación de cuota; el texto genérico de límite de crédito no lo hace. Solo los fallos de cuota elegibles para la recuperación de PAT ingresan al manejo de enfriamiento de claves. Cuando un fallo de este tipo no tiene tiempo de reinicio, la clave fallida utiliza el tiempo de reutilización predeterminado existente; las clasificaciones de cuotas no recuperables no crean un tiempo de reutilización a través de esta ruta y no se infiere ningún reinicio del día siguiente.
+- **Operadores:** Qoder Global es operado por BRIGHT ZENITH PRIVATE LIMITED bajo el [términos de servicio del producto](https://qoder.com/product-service); Qoder CN by ?(?)? con Alibaba Cloud. Verificar `ocx provider test qoder` (o `qoder-cn`) después de configurar.
+
+
+
+### Claude Code CLI (suscripción)
+
+OpenCodex puede gastar una suscripción a Claude a través del propio arnés de Anthropic en lugar de reproducir una Claude Code identidad contra el Messages API. Los `claude-cli` preset ejecuta el Claude Code oficial CLI sin cabeza (`claude -p`, `stream-json`) una vez por turno:
+
+```json
+{
+ "providers": {
+ "claude-cli": {
+ "adapter": "claude-cli",
+ "baseUrl": "https://api.anthropic.com"
+ }
+ }
+}
+```
+
+- **Prerrequisitos:** `npm install -g @anthropic-ai/claude-code`, luego inicie sesión una vez con `claude`
+ (o `claude setup-token`) El CLI utiliza el propio inicio de sesión Claude Code de la máquina (el llavero macOS) entrada, o `~/.claude/.credentials.json` en otros lugares).
+- **Ninguna credencial almacenada:** esta fila no tiene ninguna clave API, y OpenCodex nunca lee, copia o reenvía a Claude token. El CLI posee el inicio de sesión y factura la cuenta en sí. Un CLI que no haya iniciado sesión falla el turno con un error de inicio de sesión que nombra el comando, en lugar de un `401`. La clasificación sigue el mismo hecho: el preajuste es una fila de teclas sin llave (`keyOptional`), por lo que necesita no se ofrece ninguna clave API y ningún campo de clave para ello. Una clave API guardada en esta fila por otros medios nunca es entregado al arnés — clave de facturación pertenece a la `anthropic-apikey` preestablecido.
+- **En el panel de control:** el selector Añadir proveedor enumera este preajuste bajo **Pagado**, con las filas API, y lo marca con un **Suscripción CLI** insignia en lugar de **Libre** — aquí significa el CLI posee la cuenta, no es que el tráfico sea libre. Seleccionarlo muestra una advertencia en lugar de la clave campo: esta no es una ruta de acceso de clave API, controla la CLI iniciada (`claude -p`) y las facturas que suscripción, y una clave ingresada para ella nunca se usa. El espacio de trabajo de los proveedores cuenta y filtra es como pagado y muestra **Suscripción CLI** como su modo auth. Cualquier proveedor con
+ `"adapter": "claude-cli"` se trata de la misma manera, incluyendo una fila renombrada o escrita a mano: el dashboard lo enumera como listo sin una clave y nunca pide uno.
+- **Un inicio de sesión sirve a todo el proxy:** el arnés lee el inicio de sesión Claude Code del usuario OpenCodex se ejecuta como, por lo que cada solicitud enrutada a través de esta fila — desde cualquier cliente del proxy — gasta esa cuenta Claude. No hay ninguna cuenta por cliente, sin agrupación y sin multiplexación; dar a varias personas su propio uso Claude necesita un usuario proxy por inicio de sesión.
+- **Medios de entrada:** la fila publica sus modelos como texto solo para v1. El CLI acepta un marco de imagen en su entrada stream-json, pero no se ha mostrado ningún giro sin cabeza para entregar esos bytes al modelo, por lo que se rechaza una imagen enviada directamente a este proveedor (`unsupported_input_modality`) en lugar de ser bajado en silencio y respondió ciego. Con el Sidecar de visión en la ruta de solicitud, las imágenes se subtitulan en texto antes de llegar a la fila.
+- **Aislamiento:** cada turno se ejecuta en un entorno infantil con alcance sin herencia `ANTHROPIC_*`
+ variable (a) `claude` por lo tanto no puede volver a él), la telemetría, retroalimentación y el auto-actualizador desactivado, y `--tools ""`, `--strict-mcp-config` más
+ `--setting-sources ""`. El arnés no carga ningún servidor CLAUDE.md, habilidad, gancho, plugin o MCP desde el máquina y no puede leer, escribir, ejecutar ni navegar. No se mantiene ninguna sesión entre turnos. Los oficial CLI se encuentra en `PATH`, o en la ubicación de instalación nativa (`~/.local/bin/claude`) cuando un servicio inicia OpenCodex con una versión anterior `PATH`.
+- **Indicación del sistema:** El sistema del llamante y las indicaciones del desarrollador reemplazan el preajuste Claude Code (`--system-prompt-file`), por lo que el turno responde al contrato del cliente en lugar del arnés persona. El indicador plegado se organiza en un archivo privado por turno (modo `0600`y por el camino, porque los argumentos del proceso son legibles en todo el mundo a través de la lista de procesos; una solicitud que lleva ni un sistema ni una solicitud de desarrollador solo reciben las instrucciones fijas de repetición de conversación.
+- **Almacenamiento en caché de conversación:** cada mensaje se reproduce como un bloque de texto estable separado, con el mensaje actual formateado idénticamente a su representación histórica posterior. La larga historia se corta sólo en los puntos de control de todo el mensaje. Los catálogos de herramientas se serializan de manera determinista. Claude Code controla los puntos de interrupción de la caché, por lo que esto hace posible la reutilización de la caché rápida sin garantizarla.
+- **Propiedad de la herramienta:** cuando la solicitud lleva herramientas, un catálogo MCP aislado solo captura expone solo las herramientas seleccionadas por el cliente (el mismo puente que CodeBuddy usa). El CLI captura la llamada y el turno termina allí; aprobación, sandboxing, ejecución y el resultado devuelto se queda con Codex, Pi u otro cliente. Las herramientas integradas y todos los demás servidores MCP permanecen desactivados.
+- **Límites de suscripción:** antes de cada lanzamiento OpenCodex pide el punto final de uso de Anthropic, El propio inicio de sesión de CLI se lee en la memoria, ya sea la ventana de 5 horas, semanal o específica del modelo del plan. lleno. Un plan agotado es rechazado localmente con HTTP 429 `claude_subscription_cooldown` y a
+ `Retry-After` para el restablecimiento, en lugar de iniciar un CLI que fallaría. La respuesta se almacena en caché para Un minuto en `claude-usage-admission.json` bajo el hogar OpenCodex (porcentajes, tiempos de reinicio y ej., una clave de cuenta hash solamente). Si el cheque no puede ejecutarse, el turno continúa.
+- **Destino:** Los nombres canónicos `https://api.anthropic.com` Porque ahí es donde el El tráfico de la suscripción aterriza. OpenCodex nunca envía esa solicitud por sí misma, y anula la base URL falla cerrado en lugar de entregar el giro a otro entorno.
+
+> **Términos:** este ajuste preestablecido gasta su suscripción a Claude a través de la propia Anthropic de CLI. Si La conducción > que se arnés sin cabeza de un proxy se ajusta a los términos de su plan es una pregunta entre usted y > Anthropic. OpenCodex no convierte el inicio de sesión en una clave API y no reproduce las claves CLI > Identidad HTTP.
+
+
+
+### Cuota de crédito A6API
+
+Una costumbre `openai-chat` proveedor utilizando `authMode: "key"` y el canónico
+`https://api.a6api.com` o `https://api.a6api.com/v1` base URL recibe un medidor de crédito A6API en el panel y de `ocx account refresh `. El nombre del proveedor es arbitrario; detección utiliza el punto final canónico HTTPS. El medidor convierte las unidades A6API token en USD utilizando la cuenta de límite de crédito duro y muestra el porcentaje consumido más el crédito restante. El token es no se muestra como un restablecimiento de la cuota porque el vencimiento no implica que el crédito se reponga.
+
+```json
+{
+ "providers": {
+ "my-a6": {
+ "adapter": "openai-chat",
+ "authMode": "key",
+ "baseUrl": "https://api.a6api.com/v1",
+ "apiKey": "${A6API_API_KEY}"
+ }
+ }
+}
+```
+
+Las sondas de cuota envían solo la clave activa al host canónico A6API y rechazan las redirecciones. Malformado, Los totales de facturación negativos o internamente inconsistentes no producen ningún informe en lugar de una barra engañosa.
+
+> **Restricción de uso del Plan de codificación de Tencent Cloud:** Tencent documenta esta suscripción para Solo herramientas de codificación interactiva >. General API automatización, backends de aplicaciones personalizados y El uso por lotes no interactivos de > está prohibido y puede provocar la suspensión de la clave del plan.
+
+> **Rutas de facturación GLM:** `zai` es la suscripción internacional al plan de codificación Z.AI; `zhipu-bigmodel`
+> es el punto final nacional de pago por uso de BigModel de Zhipu. Diferentes hosts, diferentes teclas, diferentes > facturación — una clave emitida para uno no autenticar contra el otro.
+
+
+
+### Plan de codificación BigModel sobre Responses
+
+Seleccionar **Zhipu AI — Plan de codificación BigModel (Responses)** (`zhipu-bigmodel-responses`) por el `openai-responses` punto final `https://open.bigmodel.cn/api/v1`. Esto es separado Desde `zhipu-bigmodel-coding`, que utiliza Chat Completions en `/api/coding/paas/v4`.
+
+El preset utiliza un **Lista estática** (`liveModels: false`) tomado de la publicación
+[GLM Documentación del plan de codificación](https://docs.bigmodel.cn/cn/coding-plan/tool/codex.md):
+
+| Modelo | Contexto tokens | Esfuerzo seleccionable ascendente | Esfuerzo predeterminado | Resúmenes de razonamiento |
+| --- | ---: | --- | --- | --- |
+| `glm-5.3` | 1,048,576 | `low`, `high`, `max` | `max` | Apoyado |
+| `glm-5.3-flash` | 1,048,576 | `low`, `high`, `max` | `max` | Apoyado |
+| `glm-5-turbo` | 204,800 | Ninguno (lista vacía) | `max` | Apoyado |
+
+`glm-5.3` y `glm-5-turbo` declarar entrada de solo texto ascendente. El catálogo Codex anuncia texto e imagen para ellos porque el sidecar de visión existente de opencodex puede describir imágenes para modelos de solo texto; esa ruta requiere una visión disponible y habilitada sidecar y no reclama soporte de imagen BigModel nativo.
+
+`glm-5.3-flash` es la excepción: declara nativo `text` y `image` entrada, porque upstream lo documenta como un modelo multimodal nativo. Por lo tanto, lee imágenes directamente en lugar de ser encaminado a través del desvío del primer sidecar descrito.
+
+El modelo predeterminado es `glm-5.3`; El contenido de razonamiento Responses se conserva en la repetición. La exportación Codex existente agrega su compatibilidad
+`ultra` nivel a GLM-5.3 y omite el campo de esfuerzo predeterminado de Turbo porque Turbo no tiene escalera seleccionable; los metadatos del proveedor todavía registran `max` para ambos modelos. Para Turbo, las solicitudes Responses salientes omiten `reasoning.effort`, incluyendo una llamada
+`max` o `ultra`, preservando al mismo tiempo los resúmenes de razonamiento solicitados. Esto deja el esfuerzo selección al valor predeterminado ascendente; opencodex no inyecta un cable seleccionable o `max`.
+
+El ejemplo `models.json` es un archivo de catálogo local, no una lista de modelos HTTP documentada respuesta, y no el conjunto de modelos que el punto final sirve a — el estado de las páginas del Plan de codificación que cada nivel del plan alcanza GLM-5.3 y GLM-5.3-Flash, y que las llamadas GLM-5-Turbo son auto-switched a Flash, por lo que este punto final ya estaba sirviendo Flash bajo el Turbo id. Este preajuste aún no realiza el descubrimiento de modelos en vivo. Un proveedor personalizado existente con el mismo nombre mantiene su destino configurado y metadatos. CLI clave de inicio de sesión también se salta el indocumentado `/models` validación de la sonda y los informes como desconocido; la autenticación de clave exitosa se establece mediante una solicitud de inferencia posterior.
+
+
+
+### Múltiples teclas API
+
+Los proveedores basados en claves también pueden mantener múltiples claves. Agregar una clave a través de la página Proveedores la almacena bajo `provider.apiKeyPool`, lo hace activo y lo refleja `provider.apiKey` Así que el enrutamiento y Los adaptadores siguen leyendo el mismo campo que antes. El mismo menú desplegable puede cambiar o quitar teclas; el administración API es `/api/providers/keys` y devuelve solo las teclas enmascaradas.
+
+
+
+### Cambio de cuentas desde la terminal
+
+Uso `ocx account list`, `ocx account current`, y `ocx account use` para inspeccionar o cambiar el mismo Grupos de teclas Codex, OAuth y API sin abrir el panel de control. Ver la
+[Referencia CLI](/es/reference/cli/providers-accounts/#ocx-account-subcommand) para los comandos, salida JSON, y Comportamiento de nueva sesión.
+
+
+
+#### Nivel de suscripción en los listados de cuentas
+
+`ocx account list --json` y `GET /api/oauth/accounts` informe a `plan` campo en cada cuenta OAuth, utilizando el mismo nombre y ubicación que el proveedor OpenAI/Codex para que un consumidor pueda Lea una forma entre los proveedores.
+
+El campo siempre está presente. Es `null` cuando se desconoce el nivel, lo cual es deliberado: una
+**ausente** key significa que el proxy es anterior a este campo, mientras que `null` significa que esta versión miró y el proveedor no reportó un nivel. Colapsar los dos permitiría a un consumidor asumir silenciosamente un nivel.
+
+Para las cuentas Anthropic (ambas agrupaciones) el valor proviene del perfil de cuenta autenticado que OpenCodex ya lee: el nivel de límite de velocidad de la organización, reportado como etiquetas como `max_20x`,
+`max_5x` o `pro`. Se registra al iniciar sesión, importación local de Claude Code y actualización de token. Porque Google Antigravedad el valor es el nivel pagado de `loadCodeAssist` (Por ejemplo `g1-pro-tier`), volver al nivel actual. Una lectura fallida guarda la última etiqueta grabada; una lectura que responde sin un informe de nivel `null`. El nivel nunca se deriva de los porcentajes de cuota, porque estos son normalizado por cuenta: un asiento Max ×5 al 50% es indistinguible de un asiento Max ×20 al 50%.
+
+
+
+### GPT-5.6 rutas de vista previa
+
+GPT-5.6 Sol / Terra / Luna se siembran en las listas de reserva del proveedor, así `ocx sync` puede mantener los modelos visible incluso mientras los catálogos en vivo están rezagados:
+
+| Ruta Codex | IDs de modelos de semillas | Codex-visible contexto |
+| --- | --- | --- |
+| Inicio de sesión Codex (Pool o Direct) | `gpt-5.6-*` | 922,000 |
+| OpenAI (llave API) | `openai-apikey/gpt-5.6-*` más `*-pro` | 922.000 (922.000 entradas máximas) |
+| OpenRouter | `openrouter/openai/gpt-5.6-sol`, `openrouter/openai/gpt-5.6-terra`, `openrouter/openai/gpt-5.6-luna` | 922,000 |
+| Cursor | `cursor/gpt-5.6-sol`, `cursor/gpt-5.6-terra`, `cursor/gpt-5.6-luna` | 1,000,000 |
+
+Las entradas nativas GPT-5.6 preservan las escaleras de razonamiento de origen ancladas (por ejemplo, Luna tiene
+`max` pero no `ultra`) Las entradas enrutadas usan sus metadatos de proveedor y mapeos de razonamiento. Los cuatro las vías permanecen abiertas en sentido ascendente; El descubrimiento en vivo de Cursor filtra adicionalmente su semilla estática a los modelos la cuenta iniciada puede utilizar.
+
+:::note[Pasarelas y proxies de suscripciones]
+Se incluye un proveedor cuando opencodex tiene un adaptador de cable correspondiente, **no** basado en si es un producto "agente". Los identificadores de adaptador actuales son `openai-chat`, `openai-responses`, `anthropic`, `google`
+(modos AI Studio, Vertex y Antigravedad / Cloud Code Assist), `azure` / `azure-openai`, `kiro`, y
+`cursor`. Un propietario API sin una de estas implementaciones, como Amazon Bedrock nativo, No se apoya directamente.
+
+La configuración del proveedor selecciona el adaptador; la selección de transporte de origen es independiente. Elegible El tráfico Responses puede usar WSS con [Enrutamiento proxy explícito](/es/reference/proxy-formats/#json-and-sse-output). La configuración del proxy WebSocket no válida o no compatible vuelve a HTTP/SSE, que utiliza el
+[servidor configurado fetch](/es/reference/configuration/server/). Un servidor proxy SOCKS5 de
+`config.proxy` o un SOCKS5 heredado `ALL_PROXY` utiliza el túnel incorporado cuando `NO_PROXY` hace No eximir al objetivo. Las variables proxy HTTP(S) específicas del esquema conservan su manejo nativo separado; no SOCKS
+`ALL_PROXY` No es un nativo HTTP fetch ruta.
+
+**GitHub Copiloto** es un proveedor de OAuth (`ocx login github-copilot`) que intercambian a GitHub
+inicio de sesión de device-flow para un Copiloto de corta duración API token — no un pegado API clave. **Dúo GitLab** permanece una puerta de enlace clave/suscripción-token en su punto final compatible con OpenAI. **Cloudflare AI Pasarela** necesita su cuenta + identificadores de pasarela rellenados en el URL.
+
+Copilot utiliza automáticamente Auto cuando cada fila válida en un catálogo de cuenta no vacía explícitamente indica que la selección manual no está disponible. Los permisos faltantes o mal formados retienen rutas con nombre; el selector elimina solo filas explícitamente denegadas. Suministros de descubrimiento de solo auto `github-copilot/auto`, y GitHub selecciona el modelo real por solicitud. Esto no cambia los permisos de suscripción. Las listas de permisos de modelos ordinarios, el estado pendiente/deshabilitado y la política de nuevo modelo también se aplican a la visibilidad automática. Si las selecciones guardadas o la directiva ocultan Auto, seleccione o habilite la fila Auto antes de usarla. Existentes Las preferencias manuales permanecen guardadas. Un modelo llamado `auto` solo no anula la evidencia de la cuenta.
+
+Auto sigue el protocolo de sesión e intención en público
+[VS Copilot Aplicación de chat](https://github.com/microsoft/vscode-copilot-chat/blob/7b70532a4cbdfa61c2b30fe4ccffda3d89336a4d/src/platform/endpoint/node/automodeService.ts). Se trata de una integración experimental del cliente, no un contrato documentado de terceros API; GitHub puede cambiar los permisos del protocolo o de la cuenta. Auto utiliza el modelo seleccionado Endpoint anunciado para cada solicitud. El enrutamiento intencional envía solo el texto de usuario más reciente, limitado localmente en 32,768 unidades de código UTF-16; la inferencia real mantiene la entrada completa. La negociación tiene un carácter local presupuestos defensivos de 512 entradas de catálogo / grupo / candidato, 1 MiB por respuesta exitosa y ocho segundos por llamada, incluyendo ritmo y lecturas de cuerpo. Estas son las salvaguardas OpenCodex, no están documentadas Los límites de GitHub; catálogos de gran tamaño, negociación lenta o un extracto de intención truncado pueden afectar la compatibilidad.
+
+Para las selecciones con nombre, Copilot presenta un catálogo de cables mixtos: los siguientes modelos (`gpt-5.3-codex`, `gpt-5.4`,
+`gpt-5.4-mini`, `gpt-5.5`, `gpt-5.6-luna`, `gpt-5.6-sol`, `gpt-5.6-terra`, `gpt-6-astra`, `grok-4.5`, `grok-4.6`, `mai-code-1.1-flash`, `mai-code-1-flash-picker`) Rechazar
+`/chat/completions` para el tráfico de agentes, por lo que opencodex enruta esos modelos Responses API por defecto incorporado, mientras que cualquier otro modelo Copilot permanece en el chat Finalizaciones. La precedencia es: pin de alambre duro → su explícito
+[`modelAdapters`](/es/reference/configuration/providers/) entrada Registro → predeterminado → adaptador de todo el proveedor. Para optar por un modelo sin un valor predeterminado incorporado (por ejemplo
+`gpt-5.4-nano`) en Responses, conjunto `"modelAdapters": { "gpt-5.4-nano": "openai-responses" }`.
+
+Cursor se rastrea por separado como un adaptador experimental. `adapter: "cursor"` aparece en `ocx init`
+y el selector Add Provider del panel como una entrada de configuración local experimental con Cursor's metadatos estáticos del catálogo de modelos de reserva. Cursor acceso token está configurado, opencodex usos Cursor's vivo HTTP/2 transporte. Conjunto `upstreamHttpVersion: "http1.1"` cuando un proxy requiere Cursor de HTTP/1.1 ruta de compatibilidad; la configuración cubre tanto la inferencia como el descubrimiento del modelo en vivo y se expone en
+**Proveedores → Cursor → Configuración → Cursor transporte**. Su semilla de reserva incluye `gpt-5.6-sol` / `terra` / `luna` (1M contexto), filas regulares/rápidas para Grok 4.5, 4.6 y 4.7 (500K), y `kimi-k3` (262K); el descubrimiento en vivo decide cuál permanecer visible para la cuenta. Grok 4.6 y 4.7 exponer `low` / `medium` / `high` / `xhigh` En ambas formas, mientras que 4.5 se detiene en `high`. Las solicitudes rápidas Grok 4.5 y 4.6 envían el modelo base correspondiente con una configuración separada
+`effort` y `fast=true` `requested_model` parámetros; sus aplanados
+`cursor-grok-{version}-{effort}-fast` ids son solo identidades de descubrimiento y selector. Grok 4.7 aparece sin el `cursor-` Prefijo y envía `grok-4.7-{effort}-fast` directamente. Cursor sirve Kimi K3 solo como ids de alambre con sufijo de esfuerzo, así que
+`cursor/kimi-k3` expone a `low` / `high` / `max` Escalera y valores predeterminados `max`, igualando el modelo documentado API por defecto. Cursor lectura/escritura/eliminación nativa impulsada por servidor/ls/grep/shell/ejecución de fetch está deshabilitado de forma predeterminada porque omite la aprobación de Codex y la ruta sandbox; establecer
+`unsafeAllowNativeLocalExec: true` en el `providers.cursor` objeto en `~/.opencodex/config.json`
+solo para experimentos locales de confianza (o a través de **Proveedores → Cursor → Editar JSON** en el panel). Solicitudes de shell nativo en primer plano (`shellArgs` y `shellStreamArgs`) permanecen no disponibles en Windows, macOS y Linux incluso con esta opción: opencodex los rechaza antes de comenzar un proceso hasta que tenga un propietario descendiente respaldado por el kernel. Utilice la herramienta de shell del cliente en su lugar. Sin comando se recopila la salida; los shells de fondo y los ejecutores MCP/desktop configurados por separado no cambian. Ver la [Referencia de configuración](/es/reference/configuration/providers/#cursor-provider-adapter-cursor)
+Para un ejemplo completo. MCP, grabación de pantalla y uso del ordenador están disponibles como ganchos ejecutor; sin un configurado el ejecutor local, opencodex devuelve los resultados sin ejecutor escritos en lugar del bloqueo de directivas la solicitud. Cursor OAuth y el descubrimiento de modelos en vivo están habilitados para este adaptador experimental; Cursor todavía no se muestra en las listas de inicio de sesión clave.
+:::
+
+
+
+### Ollama Nube
+
+La nube de Ollama es una Ollama alojada (no local). Configurarlo en `https://ollama.com/v1` con una llave Desde [ollama.com/configuración/claves](https://ollama.com/settings/keys). opencodex lo alcanza Ollama propia REST API (`POST /api/chat`en lugar de la superficie compatible con OpenAI, y descubre la lista de modelos en vivo del proveedor, por lo que los nuevos modelos Ollama Cloud aparecen sin una configuración cambio. opencodex clasifica su nube capacidad de visión, por lo que el [visión sidecar](/es/guides/sidecars/) Solo se mete por Modelos de texto solamente. Modelos solo de texto (e.g. `glm-5.2`, `deepseek-v4-flash`, `gpt-oss`, `qwen3-coder`,
+`minimax-m2.x`, `nemotron-3-*`) están listados en `noVisionModels`; modelos nativos de visión (e.g.
+`kimi-k2.6`, `minimax-m3`, `gemma4`, `qwen3.5`, `gemini-3-flash-preview`) no lo son. El emparejamiento es tolerante de Ollama `:size` etiquetas, así que `gpt-oss` cubiertas `gpt-oss:120b` y `gpt-oss:20b`.
+
+Ollama actualmente documenta salidas estructuradas como no compatibles en Ollama Cloud. Por canónico
+`ollama-cloud`, opencodex por lo tanto rechaza las solicitudes de salida estructuradas (`text.format`) con un claro error en lugar de devolver silenciosamente prosa sin restricciones; local y `ollama-native`
+los puntos finales mantienen el nativo de Ollama `format` comportamiento.
+
+
+
+## 4. Proveedores locales
+
+Punto opencodex en un servidor local compatible con OpenAI — generalmente con una clave en blanco:
+
+| Proveedor | URL base |
+| --- | --- |
+| Ollama | `http://localhost:11434/v1` |
+| vLLM | `http://localhost:8000/v1` |
+| LM Studio | `http://localhost:1234/v1` |
+
+
+
+## Cualquier punto final compatible con OpenAI
+
+Si un proveedor habla Chat Completions, el `openai-chat` adaptador maneja — elegir **Personalizado** en el panel de instrumentos o `custom` en `ocx init` e introduzca la base URL. Ver la
+[Referencia de configuración](/es/reference/configuration/) para cada campo de proveedores (`headers`, `noReasoningModels`, `noVisionModels`, `models`, …).
+
+
+
+## Revisor de aprobación por proveedor
+
+Codex le pide a un segundo modelo que revise las solicitudes de aprobación, y toma ese revisor de
+`auto_review_model_override` en la fila del catálogo del modelo actual de turno. La raíz
+`auto_review_model` en `$CODEX_HOME/config.toml` es la reserva de Codex. El dashboard global
+**Anulación de revisión automática** en Configuración del modelo se aplica un revisor a todas las filas de catálogo que no tener un revisor con alcance de proveedor. Almacena `autoReviewOverride` en `~/.opencodex/config.json`; el La configuración debe estar habilitada y nombrar un modelo. Una configuración habilitada sin modelo permanece sin aplicar y deja el fallback Codex en efecto. Una actualización de catálogo es un estado separado: después de un guardar puede permanecer pendiente, y la página Modelos informa de ello para que pueda volver a intentarlo con `ocx sync`. Desde el CLI, lea El ajuste con `ocx models auto-review status` o cambiarlo con `ocx models auto-review set [--enabled ]`; utilizar `-` Para limpiar el modelo. CLI salida recomienda `ocx sync` cuando se puede volver a intentar una actualización. Si una actualización falla, el La configuración permanece guardada y el comando sale 1. Resolver el fallo antes de la sincronización. Para dar una ruta proveedor de su propio — generalmente más barato — revisor, establecer el selector en esa fila de proveedor en
+`~/.opencodex/config.json`:
+
+```json
+{
+ "providers": {
+ "blsc": {
+ "autoReviewModel": "opencode-go/deepseek-v4-flash",
+ "autoReviewModelOverrides": { "kimi-k3": "gpt-5.6-terra" }
+ }
+ }
+}
+```
+
+`autoReviewModel` cubre todas las filas enrutadas del proveedor. `autoReviewModelOverrides` Objetivos a modelo upstream único y gana sobre él. Un valor es un id de modelo desnudo de ese mismo proveedor. o un slug de catálogo público como `opencode-go/deepseek-v4-flash`, y un sello de proveedor gana sobre el selector de raíz en sus propias filas, mientras que el selector de raíz se mantiene la reserva en otro lugar.
+
+Un valor desnudo se resuelve primero contra las propias filas del proveedor y luego contra una fila de catálogo desnuda, Así es como un modelo como el `gpt-5.6-terra` se nombra; un valor que no coincide con ninguno sin resolver, y un valor desnudo que aterriza fuera del proveedor imprime una nota Suministra al revisor. Dando la babosa completa evita la pregunta por completo cuando el revisor es modelo de otro proveedor.
+
+Los selectores se resuelven contra el catálogo final en la siguiente sincronización, cada uno por su cuenta, y cada cerrado por sí mismo: una solución no resuelta `autoReviewModel` imprime un diagnóstico y sellos no filas de proveedores, un problema no resuelto `autoReviewModelOverrides` entrada imprime un diagnóstico y sellos sin anulación por modelo, dejando un objetivo válido para todo el proveedor como reserva. Lo que sea que resuelva se sigue aplicando. Filas sin sello de proveedor mantenga el selector raíz o el comportamiento ascendente cuando no esté establecido. Eliminar las hojas del selector de raíz sellos de proveedor solo, y la eliminación de un selector de proveedor borra sólo los sellos de ese proveedor.
+
+Los campos de proveedor están disponibles a través de la configuración, `PATCH /api/providers?name=`, y el editor de proveedores JSON sin procesar del panel de control; no hay controles de formulario de proveedor dedicados. Los global override está disponible en la configuración del modelo. El canónico `openai` El proveedor rechaza al proveedor campos de revisor. Las reglas de campo por campo viven en el
+[referencia de configuración del proveedor](/es/reference/configuration/providers/#auto-review-approval-model-selection).
+
+
+
+## Límites de tarifas en la descripción general de los proveedores
+
+Los **Límites de tarifas** sección de la descripción general de proveedores muestra la utilización en vivo barras actualizadas desde el propio punto final de uso/facturación de cada proveedor cuando existe uno. Las barras muestran la cantidad de una ventana (5 horas, semanal, mensual o específico del proveedor) ya se ha consumido.
+
+Proveedores con una sonda activa: OpenAI/Codex, Anthropic, xAI, Cursor, Kimi, Google Antigravedad, OpenCode Go, OpenRouter, DeepSeek, ClinePass, Z.AI, MiniMax, Moonshot, Venecia, Sintético, DeepInfra, Neuralwatt, Código de Comando, y cualquier a6api-respaldado proveedor personalizado.
+
+**Cuota de OpenCode Go.** El canónico `opencode-go` preset lee
+`GET https://opencode.ai/zen/go/v1/usage` con la clave configurada como Bearer token y No sigue redirecciones. La respuesta es continua, semanal y mensual `percent` Los valores son utilización ya consumida: mapas rodantes a la barra de 5 horas, mientras que semanal y mensual mantener sus correspondientes barras. OpenCodex no reconstruye los límites de dólares de los registros de uso local, y proveedor que utiliza un no canónico `baseUrl` nunca se envía la clave para esta sonda.
+
+**Cuota del plan de codificación Z.AI GLM.** Los `zai`, `glm`, `glm-cn`, y `zhipu-bigmodel-coding`
+presets leídos `GET /api/monitor/usage/quota/limit` y no sigas las redirecciones. La sonda corre contra la región que el proveedor señala:
+`api.z.ai` (desnudo o `/api/coding/paas/v4`) `open.bigmodel.cn` (bare,
+`/api/coding/paas/v4`O el OpenAI Responses punto final `/api/v1`).
+
+La autenticación difiere según la región: `api.z.ai` toma la clave como Bearer token, mientras
+`open.bigmodel.cn` espera la clave directamente en `Authorization` Sin prefijos y rechaza un encabezado Bearer. La respuesta es `limits` Rellene las filas de la barra de utilización:
+`TOKENS_LIMIT` / `CREDIT_LIMIT` filas con `unit` 3 / `number` 5 Llene la barra de 5 horas y
+`unit` 6 / `number` 1 El bar semanal.
+
+`TIME_LIMIT` Las filas son **no** modelo y se ignoran. Ellos son los compartidos mensualmente Asignación de llamadas MCP para la búsqueda web, el lector web y Zread, por lo que los trata como un modelo ventana permitiría que un presupuesto de búsqueda web gastado se leyera como capacidad de modelo agotada en Ranking de cuentas con cuotas. Un plan que sólo reporta `TIME_LIMIT` Por lo tanto, las filas muestran no hay barras de cuota en lugar de una fabricada, y las ventanas del plan no informan quedarse ausente en lugar de representar como 0%.
+
+Un proveedor que utiliza un método no canónico `baseUrl` nunca se envía la clave para esta sonda.
+
+
+### Diagnosticar una actualización de cuota antigravedad
+
+La vista de cuota de cuenta y `ocx account list google-antigravity --quota --refresh` distinguir la denegación de acceso, limitación de velocidad, destinos bloqueados o redirecciones, DNS/conexión/tiempos de espera y datos de cuota inutilizables. Las últimas barras conocidas permanecen visibles con su tiempo de observación cuando falla una actualización. La reautenticación retira los diagnósticos de la credencial anterior; una actualización exitosa borra el fallo.
+
+Un resultado denegado por acceso no prueba por sí mismo un inicio de sesión vencido o un plan no elegible. Un destino bloqueado es una decisión de política de red, no una prueba de un defecto de IP falsa. Los destinos de cuota Canonical Google retienen las restricciones de verificación y redirección/dirección privada de TLS. El comportamiento autenticado de TUN debe comprobarse en el entorno afectado; los accesorios de transporte inyectados por sí solos no establecen ese resultado de campo.
+
+
+
+## Grandes imágenes en línea en proveedores de chat
+
+Las solicitudes de chat compatibles con OpenAI traducidas reducen las imágenes en línea cuando sus datos base64 combinados superan los 3,5 MiB. Las imágenes más antiguas pierden detalle primero. Este es un presupuesto de imagen de mejor esfuerzo, por lo que el texto grande, los esquemas o las imágenes que no se pueden procesar aún pueden exceder un límite de solicitud ascendente. Las URL de imágenes remotas no se descargan y las imágenes que no se pueden reducir permanecen adjuntas. El passthrough de Native Chat mantiene sus bytes de imagen originales.
diff --git a/docs-site/src/content/docs/es/guides/remote-hub.md b/docs-site/src/content/docs/es/guides/remote-hub.md
new file mode 100644
index 00000000000..cce52547d9c
--- /dev/null
+++ b/docs-site/src/content/docs/es/guides/remote-hub.md
@@ -0,0 +1,600 @@
+---
+title: "Despliegue de Remote Hub"
+description: "Ejecute un concentrador opencodex de un puerto en Linux, macOS o Docker con un loopback acompañante, un token de datos autoaprovisionado, ocx hub invite, una entrada de administración solo loopback, Tailscale Serve y OAuth sin cabeza."
+---
+
+Para enlaces de máquina SSH, vea [Enlace remoto](/es/guides/remote-link/).
+
+Un concentrador opencodex mantiene las credenciales del proveedor y el estado de uso en un host mientras los clientes autenticados utilizar su plano de datos de forma remota. El plano de gestión orientado al navegador está separado: un oyente opcional Sólo se une `127.0.0.1`, sirve el panel y `/api/*`y está destinado a sentarse detrás de Tailscale Servir u otra interfaz HTTPS propiedad del operador.
+
+El plano de datos es **Un puerto**. Dial de máquinas remotas `hostname:port` con su propia clave por cliente; los procesos propios del concentrador marcan `127.0.0.1:` sin credencial, a través del loopback compañero oyente. Empezar desde [La receta abajo](#linux-systemd-or-macos-launchd)Luego, la mano a segunda máquina un comando listo para usar con [`ocx hub invite`](#inviting-another-machine).
+
+La entrada de la gerencia nunca sirve `/v1/*`, `/healthz`, o `/readyz`. Cuando está explícitamente habilitado, Espacio de trabajo remoto admite solo su agente autenticado por portador emparejado WebSocket y el emparejamiento único intercambio; ver [Espacio de trabajo remoto](/es/guides/remote-workspace/). No publique su puerto directamente, no agregue una regla de nube-firewall para él y no use Tailscale Funnel. El embudo es un superficie de Internet pública y está fuera de este modelo de despliegue.
+
+Con la entrada de administración habilitada, se abre el comando del panel local `http://127.0.0.1:` para que la dirección coincida con el oyente solo IPv4 sin resolver `localhost`.
+
+Las configuración de cliente exportadas o aplicadas a través de ese panel aún apuntan a la inferencia oyente, no el puerto de gestión. Los clientes locales usan el puerto asociado de loopback configurado (o el puerto del oyente público real cuando el compañero no tiene un puerto explícito).
+
+
+
+## Límites de confianza y consentimiento
+
+- Las credenciales de proveedor y OAuth permanecen en el concentrador. Nunca copiarlos en un cliente, capa de imagen, definición de servicio, paquete de soporte, captura de pantalla o línea de comandos.
+- La admisión de datos token se entrega a través del propietario `service-api-token` archivo o
+ `OCX_API_TOKEN_FILE`. No es una credencial de gestión.
+- Un cliente configurado `allowedModels` debe incluir tanto al ejecutor como cualquier facturado por separado Modelo de asesor utilizado por Anthropic nativo administrado Messages. ID de modelo desnudo y el concentrador configurado
+ `provider/model` Los nombres son aceptados. Un destino de Asesor no permitido o sin nombre devuelve HTTP 403 antes del envío del proveedor; las claves solo para proveedores y sin restricciones conservan su alcance existente.
+- GitHub Copilot Auto vuelve a comprobar el modelo concreto seleccionado durante la negociación y renovación. Un modelo fuera del alcance permitido del cliente finaliza la solicitud con
+ `model_not_allowed_for_key` (HTTP 403 antes de la transmisión, o un error de terminal en ej., un flujo ya iniciado). La rotación de credenciales o un objetivo alternativo no pueden Anule esa negativa.
+- Un administrador en bruto token puede realizar la administración ordinaria, pero no puede menta un navegador sesión o autorizar acciones de consentimiento, como protagonizar el repositorio. Dichas acciones requieren un servidor-emitido `gui-session`, origen del navegador coincidente y CSRF token.
+- `Tailscale-User-Login` Solo se confía en la entrada de gestión por separado. El mismo encabezado El público oyente es ignorado. `remoteGui.allowedTailscaleUsers` Controla la emisión de sesiones; es no crea un nuevo principio de propósito general.
+
+
+
+## Roles y flujo directo de datos
+
+`standalone` Mantiene los datos y la gestión en una sola máquina. A `hub` las credenciales de los proveedores, el catálogo y registros de uso. A `client` almacena solo sus metadatos de conexión y uno por cliente clave. El tráfico Codex y Claude va directamente desde el cliente al receptor de datos del concentrador; no es túnel a través del panel de instrumentos o el relé de administración de loopback.
+
+Conéctese con exactamente una fuente de autoridad transitoria. La autoridad se lee de Stdin y nunca es escrito en la configuración o el archivo token:
+
+```bash
+ocx connect https://hub-name.tailnet-name.ts.net --pairing-code-stdin
+ocx connect status
+ocx sync
+```
+
+Los diagnósticos de preparación legibles por humanos muestran los caracteres de control en los valores del catálogo como escapes hexadecimales visibles, tanto cuando se conecta por primera vez como cuando `ocx sync` rechaza un catálogo de concentrador actualizado. El estado estructurado JSON conserva el valor de diagnóstico original.
+
+No tienes que armar esa línea a mano. `ocx hub invite`, ejecutar en el concentrador, acuña el código y imprime el comando exacto — incluyendo ambos orígenes — para la máquina que se está uniendo. Véase
+[Invitar a otra máquina](#inviting-another-machine).
+
+El concentrador emite automáticamente una clave por cliente. El cliente lo escribe al propietario existente
+`service-api-token` archivo, nunca `config.json`. Mientras está conectado, el uso proviene de la tienda de uso del concentrador filtrado a la estabilidad de ese cliente `apiKeyId`. Después de la desconexión, el uso proviene de la tienda local. OpenCodex no refleja el uso entre las dos tiendas.
+`ocx service uninstall` elimina el servicio local, pero conserva una clave existente cuando el cliente conectado, sus metadatos de conexión no son válidos o no coinciden, o un marcador de conexión pendiente coincide la clave actual. Un marcador válido para una clave anterior no retiene una clave de servicio no relacionada. Si un marcador no es seguro, está mal formado o es ilegible, no se puede verificar la limpieza de token; El comando advierte en lugar de reclamar que la clave se mantuvo. Uso `ocx disconnect` para eliminar una conexión clave y estado local del cliente.
+
+Si un cliente guarda un control remoto `http://` Hub URL antes de la regla de transporte seguro, su Hub Ahora las operaciones regresan `insecure_http_refused`. Correr `ocx disconnect` local, luego volver a conectar hacia el Hub con `https://` (o utilice el bucle HTTP cuando ambos lados estén en la misma máquina).
+
+Rotar un cliente conectado con una nueva autoridad transitoria:
+
+```bash
+ocx connect rotate --pairing-code-stdin
+# or, only over HTTPS:
+ocx connect rotate --admin-token-stdin
+```
+
+La rotación mantiene las claves de datos antiguas y nuevas válidas durante un máximo de diez minutos bajo el mismo nivel. `apiKeyId`. El cliente realiza una copia de seguridad del antiguo token como `service-api-token.prev`, instala atómicamente y sondea el nuevo clave, luego se compromete. Si una respuesta de confirmación es incierta, vuelva a ejecutar el comando rotar con transitorios. autoridad; la recuperación examina ambos archivos antes de cometer o restaurar. Nunca borre ninguno de los archivos cuando Los informes de recuperación indican que ambos candidatos fueron rechazados.
+
+`ocx disconnect` es local y funciona mientras el concentrador está fuera de línea. Restaura el estado cliente local y no revoca la clave de concentrador. Después de desconectar, revoque esa clave de **Conecte las teclas → API** on El hub. `ocx connect revoke --admin-token-stdin` solo está disponible mientras sigue conectado y utiliza El persistente `apiKeyId`; no acepta anulación de id. La sesión del navegador cerrar sesión/caducidad está separada de rotación de clave de datos, revocación y desconexión.
+
+
+
+### Lo que muestra un cliente conectado
+
+`ocx connect` y `ocx connect status` comprobar la disponibilidad del catálogo con el primer local válido Tiempo de ejecución Codex en orden de selección. Los candidatos preferidos fallidos pueden retroceder, pero con menor prioridad Las alternativas no se prueban después de seleccionar un entorno de ejecución válido. Esta comprobación deja el entorno de ejecución guardado Selección sin cambios. Generalidades `ocx status` todavía descubre alternativas para el diagnóstico en entorno de ejecución.
+
+Un cliente no almacena credenciales de proveedor y ningún catálogo propio, por lo que su configuración local y La tienda de credenciales está vacía por diseño — y leerlas como la verdad produce una confianza, equivocada respuesta sobre lo que el centro puede servir. En un cliente conectado `ocx status` Por lo tanto, lleva con
+`State from hub ` y obtiene las líneas de inicio de sesión OAuth, proveedores y modelos delegables de el concentrador sobre el plano de datos, etiquetando las líneas que realmente describen esta máquina `(local)`: el proxy, el servicio, el binario Codex y shim, y los puertos locales. `ocx status --json` lleva el La misma respuesta que `runtimeRole` más a `remoteHub` Bloque cuyo `stateSource` es `hub`, `cache`, o
+`unavailable` — nunca el propio estado del cliente. Un hub más antiguo que no sirve `/v1/hub-state`
+informes `unavailable` con una instrucción para actualizar el concentrador en lugar de volver a caer silenciosamente estado de inicio de sesión local, y `ocx config show` en un cliente imprime un `_remoteHub` Nota que dice el credenciales y la disponibilidad del modelo en vivo en el concentrador. La lectura del concentrador utiliza la clave de datos por cliente solo; ningún administrador token y ningún secreto de proveedor llega a un cliente.
+
+`ocx status` realiza una solicitud de estado de concentrador en vivo solo cuando la conexión guardada aún coincide con la snapshot de estado y el archivo data-token coincide con esa conexión. Si cualquiera de las dos comprobaciones falla, se salta la solicitud y muestra el estado del concentrador en caché coincidente, o `unavailable` si no existe ninguna caché coincidente.
+
+
+
+## Lanzamiento de Linux systemd o macOS
+
+Vincule el oyente de datos a la dirección Tailscale del concentrador, habilite el compañero de bucle para que el concentrador Los procesos propios llegan a ese mismo puerto sin una credencial y publican la administración por separado. Los Los valores a continuación son ejemplos:
+
+:::danger[Usa un servidor dedicado para un solo usuario]
+El compañero de loopback no está autenticado: cada proceso y usuario del sistema operativo en esta máquina puede usar el credenciales del proveedor del concentrador y la cuota de cuenta, y puede agotar la capacidad de giro compartida que clientes remotos autenticados dependen de. No lo habilite en un host compartido o multi-tenant. Si el host es compartido, deja el `unauthenticatedLoopbackListener` configuración deshabilitada y no ejecute el local del concentrador integraciones.
+
+Vinculación a `127.0.0.1` significa que el kernel rechaza conexiones remotas, pero no detiene un navegador: una página que visita puede hacer que su navegador se conecte a `127.0.0.1`. Por lo tanto, el oyente misma `Host` y `Origin` como un enlace de bucle de retorno ordinario.
+:::
+
+```bash
+ocx config set runtimeRole hub
+ocx config set hostname 100.64.0.10
+ocx config set corsAllowOrigins '["http://localhost:10100"]'
+
+# A fresh standalone config has no `hub` or `remoteGui` object, and `ocx config set` does not
+# create a missing parent: a nested set fails with `config parent path not found: hub`. Setting
+# `runtimeRole` does not create it either. Create each object first, then set its fields.
+ocx config set hub '{}'
+ocx config set remoteGui '{}'
+ocx config set hub.managementPublicOrigin '"https://hub-name.tailnet-name.ts.net"'
+ocx config set hub.dataPublicOrigin '"https://hub-name.tailnet-name.ts.net:8443"'
+ocx config set hub.managementIngress '{"enabled":true,"port":10101}'
+ocx config set remoteGui.allowedTailscaleUsers '["operator@example.com"]'
+
+# One port. Remote machines dial 100.64.0.10:10100 with their own key; the hub's own local
+# processes dial 127.0.0.1:10100 with no credential, on that same port.
+ocx config set unauthenticatedLoopbackListener '{"enabled":true}'
+
+# No token to export: install provisions the hub's own data-plane token. See below.
+ocx service install
+ocx service status
+ocx status # the "Hub:" block summarizes every line above
+```
+
+En una configuración genuinamente vacía, puede establecer cada objeto en una llamada:
+
+```bash
+ocx config set hub '{"managementPublicOrigin":"https://hub-name.tailnet-name.ts.net","dataPublicOrigin":"https://hub-name.tailnet-name.ts.net:8443","managementIngress":{"enabled":true,"port":10101}}'
+ocx config set remoteGui '{"allowedTailscaleUsers":["operator@example.com"]}'
+```
+
+Utilice esa forma solo cuando el objeto no existe todavía. Un conjunto de objetos enteros **sustituye** El objeto en lugar de fusionarse en él, por lo que ejecutar la línea anterior contra una configuración que ya tenía
+`hub.managementIngress` silenciosamente deja caer la entrada. Cuando se está adaptando una configuración, establezca un campo a la vez — el padre ya está allí, por lo que el formulario anidado funciona y No toca nada más.
+
+Dos detalles que deciden si se acepta una línea. El valor se analiza primero como JSON y cae volver a la cadena sin procesar, por lo que un URL se escribe como `'"https://…"'`: objetos, arrays, booleanos y los números deben ser válidos JSON. Y `hub` y `remoteGui` son estrictos, por lo que se rechaza una clave mal escrita En el tiempo de escritura como `schema_invalid: hub.` en lugar de convertirse en un escenario que nunca toma efecto. `managementPublicOrigin` y `dataPublicOrigin` cada uno debe ser un origen desnudo sin camino, consulta o fragmento.
+
+
+
+### El plano de datos token se aprovisiona
+
+No hay ninguna `export OPENCODEX_API_AUTH_TOKEN=…` paso antes `ocx service install`. En un no-loopback enlazar el instalador resuelve la token de entrada de datos del concentrador por precedencia y escribe el resultado en El propietario-sólo `service-api-token` archivo, modo `0600`:
+
+1. **`OPENCODEX_API_AUTH_TOKEN`**, cuando el shell de instalación exporta uno. Un operador que quiere El valor sigue siendo suyo.
+2. **El existente `service-api-token` Archivo.** Reutilizarlo es lo que hace `ocx service install`,
+ `ocx service repair` y un reinicio idempotente; la regeneración invalidaría silenciosamente cada La clave por cliente ya se intercambiaba con el valor anterior. Un archivo reutilizado se vuelve a verificar, no — de confianza vea el párrafo admin-token a continuación.
+3. **32 bytes aleatorios frescos, hexadecimal.** Esta es la rama que elimina el paso manual.
+
+El comando imprime el **ruta**Nunca el valor. La lista lanzada y la unidad de usuario systemd leían ese archivo protegido cuando se inicia el proceso; ni incrusta el token literal. No pegue el valor en `ocx config show`, salida de unidad/plista, capturas de pantalla o paquetes de soporte. Un primer plano
+`ocx start` en el concentrador lee el mismo archivo, por lo que une el nombre de host non-loopback sin exportado token tampoco.
+
+A **administración admin token** se rechaza dondequiera que aparezca, y el rechazo nombra el remedio para ese lugar. En `OPENCODEX_API_AUTH_TOKEN`: `unset OPENCODEX_API_AUTH_TOKEN` y reestreno. En el reutilizados `service-api-token` archivo — la forma del incidente original, y aún accesible en un máquina donde el administrador token fue una vez pegado allí a mano — eliminar el archivo y ejecutar
+`ocx service repair`, ya que la anulación de una variable no dice nada acerca de un archivo. Ambos cheques funcionan antes del cortocircuito de bucle, por lo que también se comprueba una instalación de bucle: el envoltorio de lanzamiento lee ese archivo en `OPENCODEX_API_AUTH_TOKEN` cualquiera que sea el nombre de host, que es lo que cerca el administración API cerrado en el arranque.
+
+Los dos planos son diferentes credenciales — los datos token admite `/v1/*` Llamadores y administradores Nada. Dado que el servicio proporciona su propio token, no hay razón para exportar ninguno de los dos.
+`ocx service repair` nunca más exige la variable una vez que existe el archivo.
+
+`ocx status` reporta el estado de la token sin su valor: `present (file)`, `unsafe (file)` (es existe pero no es propietario-solamente — fijar los permisos), `admin-collision (file)` (la forma del incidente; el bloque añade la consecuencia y la corrección), o `missing`. El Estado siempre trata de la **archivo**, porque el envoltorio de lanzamiento sobrescribe el entorno desde él antes de ejecutar — una sublínea separada informes `OPENCODEX_API_AUTH_TOKEN` puesto en su caparazón, ya que eso es lo que un primer plano
+`ocx start` En ese shell se usaría.
+
+
+
+### Un puerto, y la alternativa porteada
+
+`unauthenticatedLoopbackListener: {"enabled": true}` con **no** `port` es el *compañero* Forma: a segundo enchufe en `127.0.0.1:` — el mismo número de puerto que el oyente público usa en la dirección tailnet. Esa es la dirección que toda integración local ya escribe, así que nada en el hub tiene que enseñar un nuevo puerto, y un puerto mantiene toda la superficie de datos remota.
+
+La forma de acompañante se acepta sólo cuando `hostname` es un no-loopback específico, no-wildcard dirección. En marcha `127.0.0.1`, `localhost`, `0.0.0.0` o `::` El lector público ya sostiene que dirección de bucle, por lo que opencodex rechaza el par en el momento de la escritura y nuevamente en el inicio — nombrando el colisión — en lugar de dejar que el segundo enlace falle. En esos lazos no necesitas al oyente en all: un enlace de bucle ya admite llamadas locales.
+
+El viejo *ported* forma todavía funciona y es la alternativa cuando se quiere que las dos superficies en Puertos separados:
+
+```bash
+ocx config set unauthenticatedLoopbackListener '{"enabled":true,"port":10104}'
+```
+
+La forma porteada es la misma superficie no autenticada: la advertencia de host dedicado anterior se aplica a Este comando también.
+
+Con un `port` conjunto, las integraciones locales siguen al oyente y escriben `http://127.0.0.1:10104`
+En su lugar. El puerto debe diferir del puerto proxy y nunca está asignado al sistema operativo: un puerto efímero sería cambiar entre reinicios mientras los servidores de aplicaciones que ya se están ejecutando mantienen el anterior `base_url`.
+
+**Reinicie el proxy después de cambiar este campo.** Los sockets están enlazados una vez al inicio y el Los archivos cliente se escriben a partir del valor resuelto, por lo que un concentrador en ejecución mantiene su respuesta antigua. En un ported hub que es la diferencia entre `ocx claude` llegar al oyente y obtener un `404` de ella. En marcha un servicio de fondo el verbo es `ocx service restart`, que siempre reinicia — ver
+[Operaciones de servicio macOS](#macos-service-operations). `ocx restart` es un verbo diferente: rebota el proceso de proxy que comenzó usted mismo, no el servicio que supervisa el gerente.
+
+
+
+### Los propios clientes locales del hub
+
+Un concentrador solía ser la única máquina que no podía usarse a sí misma: `ocx claude`, Escritorio Claude, Cursor, la `system-env` la inyección y el ayudante de visión enrutado todo dial `http://127.0.0.1:`, que no existe cuando el oyente está vinculado a una dirección tailnet. Con el loopback listener habilitado Trabajando en el hub:
+
+```bash
+ocx sync # the hub now writes its own Codex/Grok blocks
+ocx claude # Claude Code wired to the hub's own loopback address
+```
+
+El oyente lleva cables de inferencia solamente: `POST /v1/responses` y su actualización WebSocket,
+`POST /v1/responses/compact`, `POST /v1/messages`, `POST /v1/chat/completions`,
+`POST /v1/alpha/search`, `GET /v1/models`, y la superficie de voz en tiempo real.
+`POST /v1/messages/count_tokens` Es deliberadamente **no** admitido, por lo que Claude Code vuelve a local token estimación — una pérdida cosmética, no un lanzamiento roto. `/api/*`, `/healthz`, `/readyz` y el dashboard todo vuelve `404` Aquí: la administración local lee como `ocx claude`El descubrimiento llama a go a la superficie de administración autenticada con una credencial de administración, nunca a una Enchufe. Es por eso que la entrada de la gerencia y este oyente siguen siendo dos cosas diferentes.
+
+Con el oyente **apagado**, un concentrador deliberadamente no reescribe sus propias configuración de cliente, y cada omitir los nombres de la puerta que lo detuvo:
+
+```text
+This machine is a hub; it does not rewrite its own Codex/Grok/Claude configs unless
+unauthenticatedLoopbackListener is enabled.
+```
+
+Esa frase significa la puerta del cubo, no su `clientIntegrations` alternar. `ocx ensure` deja un existente administrado Grok bloque en su lugar cuando está cerrado en lugar de despojarlo, y
+`ocx restore back` informa sobre la puerta en lugar de culpar a un escritor competidor.
+
+
+
+### Aceptación en el plano de datos
+
+Demostrar vivacidad y disposición en el oyente de datos públicos:
+
+```bash
+curl --fail --silent http://100.64.0.10:10100/healthz
+curl --fail --silent http://100.64.0.10:10100/readyz
+```
+
+A `200` Desde `/healthz` Sólo demuestra que el proceso está vivo. La aceptación del despliegue también requiere
+`/readyz`, una autenticada `GET /v1/catalog`, y una verdadera respuesta encaminada.
+
+
+
+## Escala de cola Servir
+
+Primero prueba que el socket de administración es solo loopback, luego publícalo a través de Serve:
+
+```bash
+ss -ltnp | grep 10101 # Linux: expected 127.0.0.1:10101 only
+lsof -nP -iTCP:10101 -sTCP:LISTEN # macOS: expected 127.0.0.1 only
+
+tailscale serve --bg --https=443 http://127.0.0.1:10101
+tailscale serve status
+```
+
+Establecer `hub.managementPublicOrigin` al origen exacto HTTPS mostrado por Serve. Añadir el exacto del operador Iniciar sesión en Tailscale `remoteGui.allowedTailscaleUsers`; una lista vacía significa que ninguna identidad remota puede acuñar una sesión. Verifique ambas direcciones:
+
+```bash
+# Negative: the loopback-only port must not be reachable through the node's tailnet address.
+curl --fail --connect-timeout 3 http://100.64.0.10:10101/ && echo "unexpected exposure"
+
+# Positive: the HTTPS dashboard loads through Serve from an allowed tailnet user.
+curl --fail --silent --show-error https://hub-name.tailnet-name.ts.net/ >/dev/null
+```
+
+La prueba de navegador positiva debe usar una sesión de escala de cola con inicio de sesión real; una `curl` puede no llevar el Se necesitan encabezados de identidad para la emisión automática de sesiones. El emparejamiento sigue siendo la alternativa cuando el HTTPS El frontend no puede proporcionar una identidad de escala de cola confiable.
+
+
+
+### Dar al oyente de datos TLS
+
+El mapa de arriba publica el **gestión** Sólo ingreso. Ese ingreso nunca sirve
+`/v1/*`, `/healthz` o `/readyz`, por lo que por sí solo no le da a un cliente remoto datos utilizables Avión. opencodex también termina ningún TLS de su propio: el oyente es llano HTTP y HTTPS es siempre un frontend de propiedad del operador.
+
+Servir puede ser ese frontend para el plano de datos también, en un segundo puerto HTTPS. En macOS necesita uno salto extra, porque Tailscale Servir proxies solo para `127.0.0.1` — no puede apuntar al oyente que enlazado a la propia dirección tailnet del nodo, y la compilación de App Store del cliente macOS destino remoto absoluto. Ejecutar un reenviador de bucle en el concentrador y apuntar Servir en eso:
+
+```bash
+# Any loopback TCP forwarder works; socat is one. Pick a port the hub is not already using:
+# with the loopback companion enabled, 127.0.0.1:10100 belongs to opencodex itself.
+socat TCP-LISTEN:10110,bind=127.0.0.1,fork,reuseaddr TCP:100.64.0.10:10100 &
+
+tailscale serve --bg --https=8443 http://127.0.0.1:10110
+tailscale serve status # expect both mappings: 443 -> 10101, 8443 -> 10110
+```
+
+**No apuntes Servir al oyente acompañante del loopback.** Es un socket real en
+`127.0.0.1:10100`, por lo que se crearía la asignación y luego fallaría de la misma manera que la trampa de abajo describe: el compañero ejecuta la política de admisión de loopback, que requiere un loopback `Host`
+encabezado, y servir hacia adelante `Host: hub-name.tailnet-name.ts.net`. El compañero existe para los procesos
+*on* el concentrador, que envía un bucle `Host` por su cuenta. El forwarder lleva la tailnet de los cuales, cuya acreditación y `Host` manejo es lo que necesita un frontend TLS.
+
+Servir acepta un conjunto limitado de puertos HTTPS; confirme que la asignación se creó realmente con
+`tailscale serve status` En lugar de asumir que el puerto estaba permitido.
+
+Dar al promotor la misma vida útil que el hub. Un trabajo de shell en segundo plano muere en el reinicio mientras que el El servicio vuelve a aparecer, lo que deja un concentrador que se ejecuta e inalcanzable sobre TLS; ejecútelo desde lanzamiento o systemd junto `ocx service install`.
+
+Luego conéctese con los dos orígenes establecidos por separado. El URL posicional es el **datos** origen — es donde `/readyz` y `/v1/catalog` se obtienen — y `--management-url` es el dashboard origen utilizado para el emparejamiento y la emisión de claves. No tienen que compartir un puerto:
+
+```bash
+# This is exactly the line `ocx hub invite` prints, with the code filled in.
+echo '' | ocx connect https://hub-name.tailnet-name.ts.net:8443 \
+ --management-url https://hub-name.tailnet-name.ts.net \
+ --pairing-code-stdin
+```
+
+Recordar esos dos orígenes en el centro como `hub.dataPublicOrigin` y `hub.managementPublicOrigin`, y
+`ocx hub invite` te las imprimirá en lugar de pedirte que las recuerdes.
+
+Cuando `--management-url` se ha omitido se toma de la `/readyz` La respuesta, que informa
+`hub.managementPublicOrigin`. Establecerlo explícitamente es más claro cuando los dos orígenes difieren.
+
+**No acorte esto vinculando el oyente de datos a `127.0.0.1`.** Un enlace de bucle es cómo opencodex reconoce una implementación puramente local: deja de requerir una credencial de datos y se inicia Requerir la solicitud `Host` Y el loopback también. Un frontend TLS hacia adelante
+`Host: hub-name.tailnet-name.ts.net`, así `/v1/catalog` respuestas `403 origin_rejected` — mientras
+`/readyz`, que no ejecuta ese cheque, todavía devuelve `200`. El despliegue parece saludable y No puede servir a un modelo. Nada en la ruta de solicitud lee `X-Forwarded-Host`Así que el frontend no puede Repararlo. Mantenga al oyente en la dirección de la red de cola, donde se mantiene la admisión de credenciales y el
+`Host` check no se aplica.
+
+Esa trampa es acerca de la **enlace**, y sigue siendo cierto. Obteniendo un `127.0.0.1` En un momento dado, el Los procesos propios del hub son un problema diferente, y
+[`unauthenticatedLoopbackListener`](#one-port-and-the-ported-alternative) es la respuesta sancionada a it: el enlace público permanece en la dirección de la red de cola con la admisión activada, y un segundo socket sirve a los locales Llamadas. No es un objetivo TLS, por la razón dada anteriormente.
+
+Encuadernación `0.0.0.0` también funciona y elimina la necesidad de un promotor, ya que el oyente es entonces También es accesible en bucle. Publica el puerto de datos en cada interfaz, por lo que solo lo prefiere donde el host no tiene otra red que le interese — y tenga en cuenta que la forma complementaria de
+`unauthenticatedLoopbackListener` es rechazado en un enlace comodín, porque el oyente público ya bodegas `127.0.0.1:` Ahí.
+
+Vuelva a ejecutar las comprobaciones de aceptación contra el origen de datos HTTPS una vez que Serve esté activo: `/readyz`, un autenticado `GET /v1/catalog`, y una verdadera respuesta encaminada.
+
+
+
+### Proxy de certificado ts.net propiedad del operador
+
+Si usted opera su propio TLS proxy, obtener un certificado solo para el ts.net FQDN:
+
+```bash
+tailscale cert hub-name.tailnet-name.ts.net
+```
+
+Proteja la clave privada, renuévela a través del mecanismo compatible de Tailscale y provide solo para
+`127.0.0.1:10101`. Un proxy genérico TLS no proporciona una identidad fiable de escala de cola. No lo hagas Fabricar `Tailscale-User-*` cabeceras; use el flujo de emparejamiento enlazado a origen de un solo uso.
+
+
+
+## Invitar a otra máquina
+
+Ejecutar esto en el hub en lugar de escribir un `ocx connect` Línea a mano:
+
+```bash
+ocx hub invite
+```
+
+Acuña un código de emparejamiento de un solo uso y de corta duración e imprime el comando para ejecutarse en la otra máquina:
+
+```text
+# Run on the other machine:
+echo '' | ocx connect https://hub-name.tailnet-name.ts.net:8443 --management-url https://hub-name.tailnet-name.ts.net --pairing-code-stdin
+```
+
+El origen de los datos proviene de `--data-url`Entonces, `hub.dataPublicOrigin`, luego la dirección bind. Eso último fallback solo funciona cuando el bind **es** una dirección que otra máquina puede marcar: en un bucle o wildcard bind se resolvería a `http://localhost:`, que le dice a la otra máquina que marque Se gasta el código de un solo uso por nada, así que `invite` En su lugar, se niega e imprime el
+`ocx config set hub.dataPublicOrigin` línea (más el per-invite `--data-url` formulario). Una explícita
+`--data-url` o `hub.dataPublicOrigin` nunca se cuestiona — un origen de datos loopback es legítimo sobre un túnel SSH.
+
+El origen de la gestión es `hub.managementPublicOrigin`, y en `invite` la `--management-url` bandera es un **confirmación, no una anulación**: la concesión está vinculada al origen configurado y el El intercambio se compara con él, por lo que un valor que difiere es rechazado con ambos orígenes nombrados más bien. que imprimir un código que el concentrador rechazaría.
+
+Cada invitación exitosa también imprime el **origen del navegador vinculado** en Stderr. Una subvención está vinculada a un origen, y un remoto `ocx connect` presenta `Origin: http://localhost:`, si el origen enlazado no es el predeterminado `http://localhost:10100` La otra máquina ya tiene que se ejecute en ese puerto antes de que ejecute la línea —, de lo contrario el concentrador rechaza el intercambio y el El código está gastado. La nota dice qué puerto, y ofrece admitir el origen predeterminado en su lugar.
+
+`invite` Rechazar *antes* acuñar cualquier cosa cuando la configuración no puede funcionar — a `runtimeRole` que no es
+`hub`, un desaparecido `hub.managementPublicOrigin`, un origen de gestión no loopback de texto plano, a malformado `--data-url`, un origen de datos que sería el propio loopback de esta máquina, o no funcionaría Proxy certificado. Una condición previa merece su propio párrafo.
+
+**`corsAllowOrigins` tiene que nombrar el origen del navegador local de la máquina de unión.** `ocx connect` envía
+`Origin: http://localhost:` cuando intercambia la subvención, y las subvenciones son de origen, así que solo `hub.managementPublicOrigin` sí mismo o una entrada de bucle de `corsAllowOrigins`
+Nunca puede coincidir. sin presente, `invite` sale no-cero, no acuña nada, y nombra el nombre exacto comando:
+
+```bash
+ocx config set corsAllowOrigins '["http://localhost:10100"]'
+```
+
+Utilice el puerto **afiliarse** El proxy de la máquina escucha; `10100` es el valor predeterminado. El bloque de configuración por encima ya lo establece. Un conjunto de matriz completa reemplaza la matriz, por lo que cuando el concentrador ya tiene entradas Ejecutar la línea `invite` imprime — lleva los existentes más el nuevo origen. `ocx config get
+corsAllowOrigins` muestra lo que hay ahora.
+
+`ocx hub invite --json` Emite `{ code, expiresAt, dataUrl, managementUrl, command }` con `expiresAt`
+como ISO 8601. El código es un secreto: de un solo uso, cinco minutos de vida útil, tasa limitada en el centro, y no para ser persistente, registrado o pegado en un problema. `--clients codex,claude` elige qué configuración de cliente el comando impreso apuntará al concentrador.
+
+`invite` es una conveniencia sobre el flujo de emparejamiento existente, no un segundo mecanismo. Conduce lo mismo Ruta local certificada `ocx gui pair` utiliza, por lo que no necesita ningún administrador token y nada tiene que ser exportado en tu caparazón. Todo en [Roles y flujo directo de datos](#roles-and-direct-data-flow) Acerca de rotación, revocación y desconexión se aplican sin cambios a una máquina que se unió de esta manera.
+
+
+
+## Operaciones de servicio macOS
+
+`ocx service install` y `ocx service repair` son seguros para volver a correr contra un centro en vivo. Una reparación renderiza la lista primero y la compara: cuando los bytes renderizados son iguales a los bytes en el disco, la token El archivo no ha cambiado, y `launchctl print` reporta el trabajo cargado de esa lista, la reparación reafirma
+`0600`, actualiza su estado de instalación, imprime `service is already loaded from the current plist;
+nothing to do.` y devuelve — lanzamiento nunca se toca. Más temprano construye desalojado un trabajo saludable incondicionalmente, lo que hizo que un comando de diagnóstico fuera un corte.
+
+**`ocx service restart` es el verbo que siempre se reinicia.** Ya no es un alias de `repair`. Lo ejecuta la misma actualización, y cuando se recarga nada — el caso saludable, sin cambios por encima de — lo reiniciar el trabajo ya cargado en su lugar con `launchctl kickstart -k`, vuelve a leer `launchctl print` a confirmar que el trabajo sobrevivió, e imprime una línea:
+
+```bash
+ocx service restart
+# ℹ️ service restarted (launchctl kickstart -k gui/501/com.opencodex.proxy).
+```
+
+Eso es lo que hay que correr después de cambiar `unauthenticatedLoopbackListener`, `hostname` o `port`. Los kickstart no abre ninguna ventana de desalojo, por lo que no es el apagón que fue la antigua reparación incondicional.
+
+Un desnudo `ocx service` todavía selecciona `repair`, no `restart`: es un idempotente "hacerlo actual", no una solicitud para rebotar un centro saludable. Uso `ocx service repair` para el caso es realmente para — a trabajo cargado desde una lista anterior, o no cargado en absoluto — y esperar que siga sin hacer nada en un saludable uno.
+
+`launchctl kickstart -k gui/$(id -u)/com.opencodex.proxy` a mano, o `ocx service stop` seguido por
+`ocx service start`, ambos siguen funcionando y la ruta de error nombra el primero como reserva. Tampoco es La ruta recomendada ya no más.
+
+Linux y Windows nunca tuvieron esta brecha: `ocx service restart` allí termina en `systemctl --user restart`
+y un stop-then-start de la tarea programada, respectivamente, el verbo que se le pida.
+
+`ocx service status` distingue cuatro estados lanzados, y el último es el que la gente malinterpretó:
+
+| Resumen | Significado |
+| --- | --- |
+| `installed and loaded` | Un dominio responde y ejecuta el comando que esta plist hornea. Nominal. |
+| `installed and loaded from an OLDER plist` | El trabajo se está ejecutando, desde una definición que ya no coincide. Esto es lo que `ocx service repair` es para. |
+| `installed, not loaded` | Cada dominio respondió "ausente", lo que es una prueba de que el trabajo se ha ido. La reparación lo vuelve a registrar. |
+| `installed; launchd state could not be verified` | `launchctl` no se le puede pedir a —, por ejemplo, desde un contexto que `gui/` dominio. Esto es **no** evidencia de que el centro está caído: nada recomienda una reparación, y una sonda sin respuesta nunca marca a un proxy en ejecución como muerto. |
+
+Una sonda que no podía ejecutarse solía ser reportada como "no cargada", lo que les decía a los operadores que repararan un dispositivo. servidor y deje que el actualizador inicie un proxy competidor en el propio puerto del servicio.
+
+
+
+## Sin cabeza OAuth
+
+Deshabilitar el inicio del navegador en el concentrador:
+
+```bash
+ocx config set oauthOpenBrowser false
+```
+
+1. Desde el panel de control remoto o el cliente de administración autenticados, inicie `POST /api/oauth/login` por el proveedor. El concentrador devuelve la autorización URL e instrucciones sin abrir un navegador.
+2. Abra el URL en la máquina del operador y autorice allí.
+3. Si la devolución de llamada de bucle no puede llegar al concentrador, pegue el redireccionamiento final URL o el código en el panel/CLI. Envía `POST /api/oauth/login/code` con `{provider,input}`.
+4. Sondear el punto final de estado existente hasta que se complete y, a continuación, realizar una solicitud de modelo enrutado.
+
+Nunca ponga el código OAuth en argv de shell, registros, texto de emisión, capturas de pantalla o evidencia de implementación. Los manual-code route mantiene su proveedor desconocido existente, sin flujo activo, código inválido y 4096 bytes Comprobaciones de entrada.
+
+## Docker Compose
+
+opencodex no publica una imagen de contenedor oficial. El repositorio mantiene un source-build
+[`Dockerfile`](https://github.com/lidge-jun/opencodex/blob/main/Dockerfile),
+[`compose.yaml`](https://github.com/lidge-jun/opencodex/blob/main/compose.yaml), y un estrecho
+`.dockerignore`. La compilación fija el índice de imagen Bun 1.4.2 multiplataforma por resumen, ejecuta el proxy como La no-raíz `bun` usuario, mantiene el sistema de archivos raíz de solo lectura, elimina las capacidades de Linux y publica solo el oyente de datos en el host `127.0.0.1:10100` por defecto. El proceso en primer plano utiliza
+`OCX_SERVICE=1`, por lo que detener o recrear el contenedor conserva el estado Codex enrutado de restaurar una configuración de escritorio nativa. Docker proporciona supervisión; no hay administrador de servicios del sistema operativo Está instalado en la imagen. Use Compose para reiniciar/recrear el contenedor; esto no se extiende Soporte para cada ruta de reinicio del panel.
+
+La imagen siembra una primera carrera `hub` configuración que une al oyente del contenedor a `0.0.0.0`. Antes del primer inicio normal, transmita un plano de datos recién generado token al ayudante de arranque. El ayudante acepta como máximo una línea de 4096 bytes, nunca imprime la token, se niega a reemplazar una línea existente token, y lo persiste como el propietario canónico `service-api-token` en el `ocx-state` volumen.
+
+El despliegue persiste en dos viviendas separadas: `ocx-state` en `/home/bun/.opencodex` por Configuración de OpenCodex, credenciales y uso del proveedor, y `codex-state` en
+`/home/bun/.codex` para el estado Codex y `opencodex-catalog.json`. La imagen y la composición explícitamente establecido `CODEX_HOME=/home/bun/.codex`, por lo que esta ruta de catálogo sigue siendo escribible con `read_only: true` y sobrevive a la recreación de contenedores. La imagen crea ambos directorios para el no-root `bun` usuario con modo `0700`; volumen existente La propiedad y los permisos no se migran automáticamente.
+
+No combinar `CODEX_HOME` y `OPENCODEX_HOME`Ambos productos utilizan un `auth.json`
+archivo con diferentes formatos. Este cambio en el empaque agrega persistencia, no una Generador de catálogo. Materializar o importar un catálogo válido en
+`/home/bun/.codex/opencodex-catalog.json` antes de la verificación de aceptación del catálogo a continuación; sin uno, `catalog_not_found` sigue siendo la respuesta esperada.
+
+La actualización preserva lo existente `ocx-state` volumen y añade `codex-state`; sin archivos se migran automáticamente. Si una solución previa colocó un catálogo directamente bajo `/home/bun/.opencodex`, respaldarlo y copiar deliberadamente solo el catálogo para el nuevo hogar Codex, preservando el acceso solo del propietario. No copie ninguno de los productos
+`auth.json` sobre el otro. Despliegues con un personalizado `CODEX_HOME` Debe retener su entorno explícito y mapeo de volumen grabable hasta que se complete la migración. Cuando se anula `CODEX_HOME`, monte ese directorio exacto escribible y persista el catálogo predeterminado en `${CODEX_HOME}/opencodex-catalog.json`. Si `model_catalog_json`
+selecciona explícitamente otro archivo, esa ruta resuelta también debe persistir.
+
+Mantenga estable el nombre del proyecto de redacción durante las actualizaciones para que se reutilicen los mismos volúmenes con nombre. Montajes con propiedad extranjera existente, montajes de solo lectura y montajes que utilizan `volume-nocopy`
+no son reparados por la configuración del directorio de la imagen. Persistir catálogo seleccionado por separado o SQLite rutas por separado; un almacén de credenciales del sistema operativo no está respaldado por estos dos volúmenes.
+
+Cuando se ejecute sin Compose, proporcione explícitamente ambos montajes con nombre. Dockerfile `VOLUME`
+declaraciones crean volúmenes anónimos que luego `docker run` No lo hace automáticamente Reutilización. Estas opciones de montaje usan nombres de ejemplo independientes; para reutilizar los datos de Compose, sustituya Nombres de volumen predefinidos por proyecto:
+
+```sh
+--mount type=volume,src=ocx-state,dst=/home/bun/.opencodex \
+--mount type=volume,src=codex-state,dst=/home/bun/.codex
+```
+
+El host necesita Git y Docker Compose para un clon local, o solo Docker Compose para un Git remoto. contexto. No se requiere Bun ni un paso de preparación manual. El build-only La etapa de manifiesto deriva el inventario canónico de la instantánea Git seleccionada, escribe el
+`src/generated/compatibility-version.json`, y verifica cada SHA-256 registrado contra el Construir contexto antes de la fuente `COPY` instrucciones pueden desreferenciar un enlace simbólico. Los archivos de entorno de ejecución copiados se verifican de nuevo dentro de la imagen. Los metadatos de Git se admiten solo para ese montaje de enlace; no `COPY`
+lugares `.git` en una capa de imagen, y el ejecutable Git permanece confinado a la etapa de manifiesto.
+
+"Git metadata" aquí significa dos archivos. El inventario canónico proviene de `git ls-files`, que dice el índice y nunca abre un objeto o una ref, por lo que el contexto de compilación admite solo `.git/index` y
+`.git/HEAD` — alrededor de 1 MB, en lugar del almacén de objetos completo del repositorio. Las copias de la etapa manifiesta los coloca en un directorio Git que posee y suministra el directorio vacío `objects/` y `refs/` directorios La comprobación del repositorio de Git requiere. Un contexto sin un manifiesto ni un índice Git falla la compilación con un mensaje que nombra ambas entradas soportadas; nunca vuelve a un marcador de posición.
+
+Un manifiesto generado por host existente sigue siendo compatible: la compilación lo verifica y lo usa en lugar de silenciosamente sustituyéndolo. Archivos faltantes o no coincidentes, archivos de origen adicionales ausentes del manifiesto, y symlinks (incluyendo directorios padre) fallan la compilación. El inventario requiere `package.json`,
+`bun.lock`, y `scripts/model-metadata.source.json`; el manifiesto generado es la única fuente archivo exento del inventario. No lo cometas ni lo edites a mano.
+
+```bash
+git clone https://github.com/lidge-jun/opencodex.git
+cd opencodex
+docker compose build
+openssl rand -hex 32 | docker compose run --rm -T hub bun run docker/bootstrap-token.ts
+docker compose up -d
+```
+
+Para un contexto Git remoto, establezca el argumento integrado BuildKit que conserva los metadatos de Git. Por ejemplo, Reemplazar el bloque de construcción del servicio con:
+
+```yaml
+services:
+ hub:
+ pull_policy: build
+ build:
+ context: https://github.com/lidge-jun/opencodex.git#main
+ dockerfile: Dockerfile
+ target: runtime
+ args:
+ BUILDKIT_CONTEXT_KEEP_GIT_DIR: "1"
+```
+
+Establecer un puerto host alternativo sin cambiar el contenedor fijo `10100` Oyente:
+
+```bash
+OPENCODEX_PORT=10190 docker compose up -d
+```
+
+El acceso remoto es una opción explícita. Establecer `OPENCODEX_BIND_ADDRESS` a la LAN o escala de cola del host IP, o usar `0.0.0.0` Publicar en **todos** interfaces de host:
+
+```bash
+OPENCODEX_BIND_ADDRESS=0.0.0.0 docker compose up -d
+```
+
+Utilice un firewall y un frontend TLS/tailnet autenticado antes de exponer el puerto. El enlace override cambia solo la publicación del host; el oyente del contenedor permanece `0.0.0.0:10100`. Mantenga la misma anulación de enlace en invocaciones posteriores de Compose que recrean el concentrador. Para actualizar una implementación existente, ejecutar `docker compose build` y recrear el centro con `docker compose up -d`; no repita la inicialización token de una sola vez.
+
+Configure los proveedores con el panel de control a través de un frontend de administración propiedad del operador, o con comandos CLI de una sola vez que comparten el volumen de estado. Los siguientes comandos muestran el concentrador remoto existente configuración; sustituya el origen y la identidad del ejemplo antes de habilitarlos:
+
+```bash
+docker compose run --rm hub bun run src/cli/index.ts config set hub.managementPublicOrigin '"https://hub-name.tailnet-name.ts.net"'
+docker compose run --rm hub bun run src/cli/index.ts config set hub.managementIngress '{"enabled":true,"port":10101}'
+docker compose run --rm hub bun run src/cli/index.ts config set remoteGui.allowedTailscaleUsers '["operator@example.com"]'
+docker compose restart hub
+```
+
+Estos conjuntos anidados funcionan porque la imagen siembra una primera ejecución `hub` configuración, por lo que el objeto Ya existe. En una nueva instalación independiente no lo hace, y las mismas líneas fallan hasta que se crea es — ver [Lanzamiento de Linux systemd o macOS](#linux-systemd-or-macos-launchd) arriba.
+
+El oyente del contenedor se une `0.0.0.0`, por lo que ya es accesible en el propio loopback del contenedor dirección y la forma acompañante de `unauthenticatedLoopbackListener` no se aplica allí — es Rechazado en un enlace comodín. El arranque token a continuación es el equivalente de contenedor del servicio propio paso de aprovisionamiento, y también se ejecuta una vez.
+
+No ponga un token en `ARG`, `ENV`, `COPY`, Componer YAML, historial de imágenes o argumentos de comando. No lo hagas monte el socket Docker, el hogar del host o el hogar Codex, el agente SSH o los archivos de clave de proveedor. Una gestión Ingreso obligado a `127.0.0.1:10101` dentro del contenedor es accesible solo por un frontend TLS/tailnet en el mismo espacio de nombres de red; nunca publique `10101` como un atajo.
+
+Después de que el recipiente esté sano, ejecute una prueba de promoción de preparación por separado:
+
+```bash
+docker compose exec hub bun -e \
+ "const r=await fetch('http://127.0.0.1:10100/readyz');console.log(r.status,await r.text());if(!r.ok)process.exit(1)"
+
+docker compose exec hub bun -e \
+ "const t=(await Bun.file('/home/bun/.opencodex/service-api-token').text()).trim();const r=await fetch('http://127.0.0.1:10100/v1/catalog',{headers:{'x-opencodex-api-key':t}});console.log(r.status);if(!r.ok)process.exit(1)"
+```
+
+A continuación, envíe una respuesta enrutada autenticada real con un modelo configurado. Si el secreto está ausente o ilegible, un concentrador no de bucle no debe aceptarse como listo. Nunca trates a la vida sola como prueba.
+
+`docker compose down` elimina el contenedor y la red, pero conserva ambos volúmenes con nombre. Tratar
+`docker compose down --volumes` como destructivo: elimina la configuración, las credenciales OAuth, el uso historia, el plano de datos token y el estado persistente Codex juntos.
+
+CI multiplataforma construye la imagen de origen y comprueba el inicio, la admisión token del plano de datos y Recreación de contenedores utilizando un proyecto de Compose aislado con credenciales desechables. Verifica que tanto los volúmenes con nombre como un catálogo sintético sobreviven al reemplazo. Esta comprobación no valida un cuenta de proveedor real, devolución de llamada OAuth, migración de montaje personalizada o cada arquitectura CPU; realizar la comprobación de respuesta enrutada autenticada anterior para su implementación.
+
+
+
+## Reversión
+
+Inspeccione las asignaciones de servicio existentes antes de cambiarlas. `tailscale serve reset` Elimina todos los mapas en el nodo; use un comando de eliminación compatible más estrecho cuando existan asignaciones no relacionadas.
+
+```bash
+tailscale serve status
+tailscale serve reset
+ocx config set hub.managementIngress '{"enabled":false}'
+ocx service repair
+```
+
+Para una reversión de contenedor, conserve tanto los volúmenes de estado con nombre como sus asignaciones. Una imagen más antigua todavía puede usar `CODEX_HOME=/home/bun/.codex` cuando ese directorio permanezca montado; no vuelva a a un archivo de composición anterior que elimina el montaje Codex. No fusione las casas ni vuelva a ejecutar token bootstrap. Para una reversión del servicio, detenga el servicio de la sucursal y repare la versión anterior contra la misma
+`OPENCODEX_HOME`. Deshabilitar la entrada de administración o Servir no requiere cambiar el oyente de datos.
+
+
+
+## Solución de problemas
+
+- **Hub abajo:** `ocx connect status` Muestra la conexión guardada. `ocx disconnect` puede restaurar estado local sin conexión; no puede revocar la clave remota.
+- **Catálogo Stale:** `ocx sync` mantiene un último catálogo válido solo para el concentrador transitorio fracasos. Las fallas de autenticación, esquema, tamaño y protocolo son errores difíciles y nunca vuelven a caer. a proveedores locales.
+- **Rotado token o `.prev` recuperación:** reejecución `ocx connect rotate` con un código de emparejamiento o administración token. No edite ni elimine ninguno de los candidatos a token antes de que termine la sonda de recuperación.
+- **Desajuste de protocolo:** actualizar el lado más antiguo nombrado por el `hub-too-new` o `hub-too-old` mensaje. La negociación falla antes de que se escriba token, catálogo, diario o estado cliente.
+- **Código de emparejamiento perdido o quemado:** ejecutar `ocx hub invite` De nuevo. Las subvenciones son de un solo uso y repetidas Las fallas son limitadas en la velocidad sin revelar si existe un código.
+- **`ocx hub invite` dice `No loopback browser origin is admitted for pairing`:** El hub admite que no origen del navegador loopback, por lo que una concesión vinculada al origen nunca podría coincidir. Nada fue acuñado. Ejecutar el
+ `ocx config set corsAllowOrigins` rellene las impresiones de error, con el puerto proxy de la máquina de unión. Véase [Invitar a otra máquina](#inviting-another-machine).
+- **`ocx hub invite` dice que el origen de los datos anunciados sería el propio bucle de esta máquina:** la bind es solo loopback o un comodín y `hub.dataPublicOrigin` está sin establecer, por lo que no hay dirección para anunciar y nada adivina una red de cola o LAN uno. Nada fue acuñado. Establecer
+ `hub.dataPublicOrigin`, o pasar `--data-url` Sólo para esta invitación.
+- **Se rechaza el intercambio de la máquina de unión y se gasta el código:** La concesión estaba ligada a un origen que la máquina no presenta. Vuelva a leer el `Bound browser origin:` línea de la invitación — nombra el puerto en el que la otra máquina debe estar funcionando, u ofrece admitir
+ `http://localhost:10100` En cambio, en el hub.
+- **`ocx hub invite` Se niega a `--management-url`:** en un centro que la bandera confirma
+ `hub.managementPublicOrigin` en lugar de anularlo, porque la concesión está vinculada a la valor configurado. Cambie la configuración o suelte la bandera.
+- **`ocx claude` en el concentrador lanza Codex/Claude nativo, o el concentrador se niega a escribir su propio cliente configuración:** `unauthenticatedLoopbackListener` Está apagado. El mensaje de omisión nombra la puerta. Habilitar el escuchar y reiniciar el proxy (`ocx service restart` ej., en una instalación de servicio).
+- **`ocx claude` en el hub obtiene `404` del oyente:** El proxy sigue siendo el proceso que comenzó antes de que existieran los cables del oyente, o antes de que cambiara el puerto. Reiniciar con
+ `ocx service restart` — ver [Operaciones de servicio macOS](#macos-service-operations).
+- **`ocx service repair` impreso `nothing to do` y el proceso no rebotó (macOS):** Esperado. Una reparación de un trabajo saludable es deliberadamente una opción prohibida. Cuando quieras un nuevo proceso, ejecuta
+ `ocx service restart`, que inicia el trabajo cargado en su lugar e informa
+ `service restarted (launchctl kickstart -k …)`. Sólo si eso falla es
+ `launchctl kickstart -k gui/$(id -u)/com.opencodex.proxy` el fallback manual — el fallo El mensaje lo nombra.
+- **`ocx service install` Rechazar `OPENCODEX_API_AUTH_TOKEN`:** ese valor es un administrador de administración token. `unset OPENCODEX_API_AUTH_TOKEN` y reejecución; el servicio proporciona su propio plano de datos token. Véase [El plano de datos token se aprovisiona](#the-data-plane-token-provisions-itself).
+- **El buje se bloquea en el arranque y `ocx status` muestra `admin-collision (file)`:** la
+ `service-api-token` archivo contiene la gestión token, por lo que el centro cerca su gestión API cerrado. Eliminar el archivo y ejecutar `ocx service repair` para proporcionar un plano de datos token. Desactivar el variable de entorno no ayuda aquí — el archivo es la fuente.
+- **Plain HTTP se negó:** el emparejamiento sobre HTTP no loopback se rechaza por completo, y no hay bandera que opta por salirse de ella. Ponga el origen de administración detrás de HTTPS, o pare sobre loopback. Admin tokens nunca se envían sobre HTTP.
+- **`403 origin_rejected` Desde `/v1/catalog` mientras `/readyz` devoluciones `200`:** El oyente de datos es Está obligado a retroceder detrás de una interfaz TLS. Véase [Dar al oyente de datos TLS](#giving-the-data-listener-tls).
+- **Finalizó la sesión remota:** Inicie sesión o vuelva a emparejar. El cierre de sesión y la expiración invalidan solo el navegador sesión, no una clave de datos del cliente.
+- **Revocación excepcional después de la desconexión:** usar el panel de control del concentrador **Conecte las teclas → API**
+ página. Es el único camino de revocación posterior a la desconexión.
+
+
+### Uso desde un cliente conectado
+
+`ocx usage` lee el concentrador conectado con la clave de datos registrada de este cliente. La salida humana identifica la fuente del concentrador y el alcance de la clave del cliente; `--json` devuelve los mismos datos. Gama, superficie, filtros de proveedor / modelo y personalizados `--since`/`--until` Los límites siguen estando disponibles. Los desgloses de cuentas y los registros de otros clientes no se comparten. Un concentrador antiguo o no disponible produce un error explícito en lugar de sustituir el uso local; actualice el concentrador si no admite esta lectura.
+
+El punto final del plano de datos de solo lectura es `GET /v1/usage`, utilizando `x-opencodex-api-key` con una clave de cliente configurada. En todo el entorno y las claves de administración son rechazadas. Acepta `range`, `surface`, `provider`, `model`, `since`, y `until`; se rechazan las opciones desconocidas/repetidas y los identificadores de clave seleccionados por el llamante. Las filas sobredimensionadas omitidas retienen la advertencia explícita de historial incompleto.
+
+Las credenciales de uso del cliente se envían solo a través de HTTPS o loopback HTTP. Tanto la solicitud como la respuesta deshabilitan el almacenamiento en caché.
+
+
+
+### Emparejar este navegador con un hub
+
+La inscripción de la máquina y la autenticación del navegador son independientes. El panel de emparejamiento nombra el concentrador y muestra un `ocx gui pair --origin` comando para el origen exacto actualmente abierto en su navegador. Ejecute ese comando en el concentrador o envíelo al operador del concentrador y solicite un código de emparejamiento único. Pegue ese código en el panel; una clave API de datos o admin token no es un código de emparejamiento.
+
+Mientras la autenticación del navegador está pendiente, el panel de control no recomienda reiniciar un cliente conectado saludable. Completar el emparejamiento actualiza los datos del panel de control inmediatamente, incluido un error de autenticación previamente almacenado en caché. La expiración de la sesión vuelve al emparejamiento; la denegación de permiso mantiene su propia guía de configuración de acceso. Otras actualizaciones fallidas pueden mostrar los últimos datos recibidos con un aviso de datos obsoletos y una acción de reintento.
+
+Si se ha intercambiado el código, pero la validación de Remote Link no está disponible temporalmente, mantenga la página abierta y use **Reintentar validación**. Esto comprueba la sesión pendiente del navegador sin gastar otro código de emparejamiento. Las respuestas a los desafíos de Cloudflare también mantienen la sesión pendiente para reintentar. Emparejar solicitudes de intercambio y validación cada vez después de 10 segundos, incluida la lectura del cuerpo de la respuesta, para que el formulario vuelva a ser utilizable. Un tiempo de espera de validación mantiene la sesión instalada pendiente para **Reintentar validación**; una respuesta de intercambio que llega después de su tiempo de espera no puede instalar credenciales. Si el concentrador rechaza definitivamente la sesión con HTTP 401 o 403, el panel de control restaura la sesión del navegador anterior solo mientras el traspaso aún posee el estado de sesión actual y no se ha reemplazado ningún inicio de sesión, cierre de sesión o cambio de destino más reciente; solicite al operador del concentrador un código nuevo para este origen del navegador. Un intercambio de emparejamiento captura la revisión actual de la sesión y el objetivo antes de enviar el código; las respuestas retrasadas no pueden reemplazar una sesión después de que cambie esa revisión. El arranque automático de descubrimiento y la recuperación en segundo plano siguen la misma regla, incluida la conmutación de objetivos hacia atrás y lejos; ninguno anula el cierre de sesión. El cierre de sesión pendiente y completado suprime la recuperación automática hasta que cambie un nuevo inicio de sesión explícito o un nuevo objetivo. Un tiempo de espera de recuperación informa una sesión no disponible solo si su solicitud sigue siendo actual, sin cancelación y sin credenciales; los resultados de arranque tardío se descartan.
+
+Si un oyente auxiliar no puede enlazar, los nombres de inicio `unauthenticatedLoopbackListener` o `hub.managementIngress` y la dirección real. Corregir ese oyente o liberar su dirección; cambiar solo el puerto proxy público no repara un puerto auxiliar fijo. Los bloques de escucha mal formados editados a mano advierten y permanecen desactivados mientras se conservan las configuración no relacionadas.
+
+
+
+## Devolver un concentrador a autónomo
+
+Ejecuta `ocx hub disable [--json]` en el concentrador para eliminar `hub`, `unauthenticatedLoopbackListener`, `runtimeRole` y `hostname` juntos en una escritura validada. La configuración del proveedor, el puerto y las teclas API guardadas se conservan. Se rechaza una configuración de cliente o independiente sin cambios.
+
+Las claves no llevan un origen de inscripción verificado y los nombres son editables. Para revocar las claves de cliente, primero inspeccione los ID con `ocx access key list --json`A continuación, seleccione explícitamente cada ID:
+
+```sh
+ocx hub disable --revoke-clients --client-key --json
+```
+
+Repetir `--client-key` para varios clientes. Con las llaves guardadas presentes, `--revoke-clients` sin ID seleccionados se rechaza antes de cambiar la configuración. Las identificaciones desconocidas también se niegan. Solo se eliminan las teclas seleccionadas y sus rotaciones pendientes; la salida contiene metadatos seguros en lugar de secretos. El comando imprime el paso de reinicio para el supervisor detectado; no reinicia el proxy. Revisión `tailscale serve status` y otros frontends externos para asignaciones a puertos hub antiguos. La configuración y revocación persistentes se aplican al proxy en ejecución después del reinicio; Los registros de enlace remoto y los túneles permanecen sin cambios.
diff --git a/docs-site/src/content/docs/es/guides/remote-link.md b/docs-site/src/content/docs/es/guides/remote-link.md
new file mode 100644
index 00000000000..f74b1d46f34
--- /dev/null
+++ b/docs-site/src/content/docs/es/guides/remote-link.md
@@ -0,0 +1,171 @@
+---
+title: "Enlace remoto"
+description: "Conecte una computadora OpenCodex Home a una computadora Child a través de SSH."
+---
+
+Un enlace de máquina conecta un OpenCodex **Home** ordenador a **Child** ordenador sobre SSH. El Home sirve al Child a través del túnel SSH, mientras que ambos equipos mantienen su servicio local OpenCodex en el puerto `10100`. El panel transfiere la clave de enlace por hijo a través de SSH, por lo que no escribe un token.
+
+
+
+## Necesidades
+
+- La computadora Home puede iniciar sesión en la Child con una clave OpenSSH.
+- Para un enlace iniciado por Child, el Child puede iniciar sesión en Home con una clave OpenSSH (no se admite el inicio de sesión con contraseña).
+- OpenCodex 2.66.0 o posterior está instalado en el equipo Child y en Home para un enlace iniciado por Child.
+- Ambos equipos ejecutan macOS o Linux.
+- El panel de control que agrega un Child desde Home se abre en el propio Home o a través de una sesión Hub emparejada. Convertir el equipo actual en un Child requiere una sesión de panel emparejada con el operador; una sesión de panel local sin credenciales no puede confirmar ese cambio de enrutamiento.
+
+Contraseña SSH y Windows están fuera del flujo actual. Se puede iniciar un enlace desde cualquier lado: desde el Home, como se describe a continuación, o desde el Child, como se describe en [Conecte este equipo como un Child](#connect-this-computer-as-a-child).
+
+
+
+## Añadir un Child de `#remote`
+
+1. Abra el panel de control en `#remote` y activar el enlace remoto.
+2. Seleccionar **Home**Entonces, **Continuar**. Se abre la lista de hosts SSH.
+3. Elija un host de los candidatos SSH o introduzca un alias de configuración SSH.
+4. Ejecute la prueba de conexión y compare la huella dactilar del host ofrecida con la huella dactilar de la máquina que desea utilizar. Compararlo ayuda a detectar un host incorrecto o una clave de host cambiada antes de que SSH confíe en el host.
+5. Confirme la huella digital y luego conecte el Child.
+
+El panel de control no le pide que ingrese un token. Primero sondea el host y no puede aplicar el enlace hasta que confirme explícitamente la huella digital.
+
+La hoja Agregar Child explica que el Child utiliza los proveedores de este Home sobre SSH y enumera los requisitos previos anteriores. Los alias de host vienen de `~/.ssh/config` en el Home que ejecuta OpenCodex, no necesariamente la computadora que muestra el navegador. Si el descubrimiento tiene éxito sin hosts, agregue un `Host` entrada como esta, luego elige **Volver a buscar equipos**. También puede introducir un alias existente manualmente; seleccionar o introducir un alias permite **Conexión de prueba**. La hoja enlaza con esta guía.
+
+```sshconfig
+Host devbox
+ HostName devbox.example.com
+ User you
+ IdentityFile ~/.ssh/id_ed25519
+```
+
+Si el descubrimiento falla, la hoja muestra **No se pudo cargar los hosts SSH**, el motivo de la solicitud disponible y **Reintentar**, en lugar de reclamar que la lista de hosts está vacía. Un error de prueba de conexión mantiene su razón específica y la pista SSH desinfectada en la hoja activa, no duplicada detrás de ella. Compruebe la razón, utilice el diagnóstico SSH en Solución de problemas a continuación cuando sea relevante y vuelva a intentarlo. El rescanning mantiene el alias ingresado pero requiere una nueva revisión de huellas dactilares antes de conectarse.
+
+
+
+## Conecte este equipo como un Child
+
+En el equipo que debería usar los proveedores de Home:
+
+1. Abra el panel de control en `#remote` y activar el enlace remoto.
+2. Seleccionar **Child**. Se abre la lista de hosts SSH.
+3. Elija el host Home del SSH, ejecute la prueba de conexión, luego compare y confirme su huella digital del host.
+4. Lea el aviso y elija **Conectar como Child**.
+
+La conexión reinicia OpenCodex en este equipo. Los giros Codex que ya se están ejecutando terminan primero, y las nuevas solicitudes pueden fallar hasta un minuto mientras se reinicia. El panel de control se recarga por sí mismo y muestra el enlace Child. Codex sigue usando `http://127.0.0.1:/v1` en este equipo, sin token y sin variable de entorno para establecer: el local OpenCodex retransmite cada solicitud al Home, que le sirve con sus propios proveedores y cuentas.
+
+El Child espera su puerto configurado mientras el proceso anterior lo libera. Si un reinicio administrado por CLI sigue fallando, ejecute `ocx start` en el Child y comprobar `~/.opencodex/restart-handoff.log`. En la aplicación de escritorio, la aplicación inicia y supervisa el reemplazo automáticamente.
+
+Si **Child** dice emparejar esta máquina primero, abrir el loopback literal configurado de esta computadora HTTP Dashboard, por ejemplo `http://127.0.0.1:`. El formulario de emparejamiento local aparece solo cuando falta el emparejamiento y el panel de control y API usan el mismo origen de bucle invertido. Copia el formulario `ocx gui pair --origin "http://127.0.0.1:"` use el origen exacto que se muestra en el formulario; un proveedor puede usar el código de un solo uso en el formulario. API clave o admin token El emparejamiento que falta está separado de un desajuste de puerto configurado.
+
+En un panel de Hub abierto a través de una dirección que no sea loopback, es posible que el navegador no tenga sesión de loopback o que tenga una sesión compartida que no pueda administrar los enlaces de la máquina. Cuando Remote Link informe de ese problema de sesión o permiso, elija **Conecte este panel al concentrador** en la página Enlace remoto para abrir el formulario de emparejamiento único. Ejecute el comando mostrado en el Hub e introduzca su código. La página valida el acceso de enlace remoto de la nueva sesión antes de que cierre el formulario.
+
+Los **Child** rol también requiere un entorno de ejecución OpenCodex independiente que se ejecuta en su puerto configurado, porque el Child se reinicia exactamente en ese puerto. Si el panel de control dice que OpenCodex no se está ejecutando en su puerto configurado, reinicie allí primero.
+
+
+
+## Estado del enlace
+
+- **Conectado** significa que el túnel SSH está listo y el Child puede usar el enlace Home.
+- **Reconexión** significa que el túnel se está volviendo a intentar. Las solicitudes pueden regresar temporalmente `503` con `Retry-After` mientras el reintento está en progreso. En un Child que se conecta desde su propio panel de control, una solicitud primero espera hasta 15 segundos para que regrese el túnel.
+- **Falló** El enlace necesita atención. Compruebe la autenticación SSH, la clave de host confirmada, el reenvío o el motivo de tiempo de espera que se muestra en el panel. El lado que ejecuta el túnel SSH sigue intentando por sí mismo, después del sueño, una interrupción o un reinicio: Home para un Child que agregó, y el Child para un enlace al que se unió desde su propio panel de control. Se reintenta aproximadamente una vez por minuto después de un tiempo de espera o error de reenvío, y cada cinco minutos después de un error de autenticación. Una clave de host cambiada nunca se vuelve a intentar. Para volver a intentarlo de una vez, seleccione **Reintentar** en el panel de control de la Home o ejecutar `ocx link reconnect --link-id ` en el Home. Reinicia el túnel de ese enlace sin reiniciar OpenCodex.
+
+Un enlace fallido no cambia silenciosamente a un proveedor local. El Child devuelve un `503` sin reenviar la clave de enlace o solicitud cuando su túnel falla, se detiene o no se supervisa. También mantiene la clave local cuando otro proceso posee el puerto del túnel; libere ese puerto para que el túnel Child del SSH pueda enlazarlo.
+
+
+
+## Lo que un Child muestra y administra
+
+Un Child se ejecuta en los proveedores, cuentas y configuración del Home, por lo que el Home es donde los cambia.
+
+- **Panel.** El panel de control del Child muestra el estado del Home de solo lectura y dice "Administrado por Home sobre el enlace remoto". El panel de control y los proveedores leen el Home a través del enlace, y la franja de uso en el encabezado muestra la cuota del Home. La lista de modelos no se muestra en un Child, ya que su construcción ejecuta el descubrimiento de proveedores en el Home; Codex en el Child ya ofrece los modelos del Home. Por la misma razón, los selectores de modelos de delegación y sidecar en una lista Child los modelos nativos y las opciones actuales de la Home, no la lista de rutas completa de la Home. Guardar un cambio allí se rechaza con un mensaje que nombra el Home; realizar el cambio en el panel de instrumentos del Home. El navegador del Child nunca recibe una credencial Home.
+- **Configuración de Codex.** `ocx sync` en el Child (y conectándolo) se aplica la configuración de Codex que administra OpenCodex en el Home: modo rápido, el modo multiagente, el conmutador de sidecar de búsqueda web y el subagente nativo predeterminados cuando el Home los sincroniza. `ocx sync` y `ocx status` listar los valores que provienen de la Home. El esfuerzo de razonamiento predeterminado y los niveles de esfuerzo que se muestran en el selector de modelos de la aplicación Codex son la configuración de la aplicación Codex en cada computadora; OpenCodex no los administra en ningún equipo.
+- **CLI.** Comandos que solo leen, como `ocx account list`, `ocx provider quota` y `ocx usage`, lea el Home. Muestran lo que el Home ya ha observado: una lectura de un Child nunca hace que el Home sea un proveedor, refresque un token o inicie un proceso, por lo que los detalles de la cuota y la cuenta son tan frescos como la propia actividad del Home los mantiene. Lee que solo existen para ejecutar el descubrimiento de proveedores o una actualización forzada, como `ocx models live`, `ocx models preset show` y `ocx account list --quota`son rechazados como cambios. Los comandos que cambian la configuración se rechazan con un mensaje que nombra el Home y el enlace y dice que no se envió ninguna solicitud. `ocx status` describe el Home y el enlace. `ocx provider list` y `ocx config get` todavía muestran la propia configuración de este equipo, etiquetada como local e inactiva mientras el equipo está vinculado. `ocx config set`, `ocx config unset` y `ocx config import` escribir localmente, cada uno con la misma nota, y `ocx provider add`, `remove` y `set-default` se rechazan porque esos proveedores no se utilizan mientras están vinculados.
+
+Estas lecturas necesitan una versión OpenCodex con el relé de gestión de enlace remoto tanto en la Home como en la Child. Un Home antiguo responde con un mensaje que le pide que lo actualice.
+
+
+
+## Eliminar un archivo Child
+
+Seleccionar **Desconectar** para el Child y confirmar el alias. El Home detiene el túnel, revoca la clave de enlace del Child y elimina el registro de enlace guardado.
+
+Si el Home no puede alcanzar el Child para ejecutar su comando de desconexión, elija **Eliminar aquí solamente**. Esto elimina el túnel local, la clave y el registro. A continuación, inicie sesión en el Child y ejecute:
+
+```bash
+ocx disconnect
+```
+
+Para desconectar un enlace iniciado por Child, ejecute `ocx disconnect` en el Child. Desconecta el túnel del cliente y revoca el enlace en Home sobre SSH. Si falla la revocación de Home, se imprime: `Home revoke failed; run ocx link revoke --link-id on the home.`
+
+
+
+## Solución de problemas
+
+Cuando un paso falla, el panel de control muestra la razón y, cuando SSH informó de uno, una breve pista desinfectada de su última línea de error no vacía debajo del mensaje. Los errores de shell remoto pueden aparecer allí incluso cuando el shell remoto emite texto que no es UTF-8; OpenCodex elimina los controles de terminal, las teclas de enlace y las consultas de URL y limita la longitud de la pista.
+
+- **No se pudo conectar al host SSH**: el host debe aceptar su clave SSH sin una solicitud de contraseña; `ssh -o BatchMode=yes true` Debe tener éxito desde una terminal. A `ProxyCommand` ayudantes como `cloudflared` debe ser instalado en `/opt/homebrew/bin`, `/usr/local/bin`, `~/.bun/bin`, `~/.local/bin` u otro directorio en el PATH OpenCodex se ejecuta con.
+- **No se encontró ocx en el equipo remoto**: OpenCodex busca `ocx` en la PATH de una sesión no interactiva SSH primero, luego en `~/.bun/bin`, `~/.local/bin`, `/opt/homebrew/bin` y `/usr/local/bin`. Si está instalado en otro lugar, agregue ese directorio a PATH en un archivo que el shell remoto lee para sesiones no interactivas, como `~/.zshenv` por zsh.
+- **OpenCodex en el equipo remoto es demasiado viejo**: run `ocx update` en esa computadora. El enlace remoto necesita 2.66.0 o posterior.
+- **El equipo remoto no informó de una versión OpenCodex**: `ocx --version` en ese equipo imprimió otra cosa, por ejemplo el texto de uso de una instalación Windows no compatible.
+
+
+
+## Seguridad
+
+El Child utiliza los proveedores y las credenciales del proveedor de la computadora Home a través del enlace. La Home crea una clave de enlace separada para cada Child; al eliminar el enlace se revoca esa clave. En el Child, la clave permanece dentro de OpenCodex: las credenciales que Codex o Claude Code envían allí no se reenvían al Home, incluidos Bearer, Azure `api-key`, Anthropic-compatible `x-api-key`y Google `x-goog-api-key` formas. Cualquier programa en el Child que alcance `127.0.0.1:` utiliza el Home sin una clave, la misma confianza local que da una instalación independiente. Las páginas web de otros sitios son rechazadas. Compare la huella digital del host antes de la confirmación para que no se acepte por error una máquina incorrecta o una clave de host modificada. Las sesiones del panel de control emitidas desde una identidad de escala de cola no pueden administrar enlaces de máquina.
+
+
+
+## Referencia CLI
+
+```text
+ocx link probe [--json]
+ocx link add [--expect-fingerprint SHA256:…] [--json]
+ocx link port [--json]
+ocx link issue --alias --tunnel-port [--json]
+ocx link status [--json]
+ocx link revoke --link-id [--json]
+ocx link reconnect --link-id [--json]
+```
+
+
+
+## Guías relacionadas
+
+- [Despliegue de Remote Hub](/es/guides/remote-hub/)
+- [Espacio de trabajo remoto](/es/guides/remote-workspace/)
+
+
+
+### Compatibilidad con autenticación de relés
+
+Actualice tanto el Home como el Child al actualizar a la autenticación de retransmisión con conexión. Antes de enviar una credencial o cuerpo de enlace de una solicitud retransmitida, la Child verifica la Home en la misma conexión que utilizará para esa solicitud. Una conexión cerrada no se reemplaza silenciosamente. Un Home sin este protocolo provoca un error de autenticación reintentable; actualice el Home y el Child, y vuelva a vincular cuando el enlace almacenado ya no se reconozca. No hay un interruptor de reserva inseguro. Una rotación pendiente API-clave sigue siendo válida hasta que expire o la rotación se confirma o aborta.
+
+Eliminar los drenajes finales de enlace Home pendientes de solicitudes de retransmisión autenticadas antes de liberar su oyente. Detener el proceso aún cancela las conexiones activas. Esto no cambia qué credenciales de llamada se eliminan o qué rutas se pueden retransmitir, y no reemplaza la verificación de clave de host de SSH.
+
+
+
+
+### Autorización de emparejamiento independiente
+
+El existente `ocx gui pair --origin ` El comando funciona mientras OpenCodex se ejecuta como un servicio en segundo plano. Ejecutarlo bajo la cuenta que posee la casa privada del servicio OpenCodex, a continuación, introduzca el código de un solo uso devuelto en el panel local. No se requiere ningún terminal de servidor, contraseña adicional, Windows Hello o clave de hardware. El servidor CLI debe usar la misma versión actual y configuración inicial; reinicie un servidor anterior después de la actualización. Las invitaciones Hub de versión mixta también requieren actualizar el CLI y el servidor juntos. El emparejamiento rechaza un directorio de inicio o intent de configuración sincronizada; use el directorio protegido real como `OPENCODEX_HOME`.
+
+Internamente, el CLI crea un compromiso de autorización de corta duración e intenta eliminarlo después de su uso o fallo. La lectura de la información en entorno de ejecución por sí sola no autoriza el emparejamiento, y el verificador no se almacena en disco. Este es un límite de acceso de escritura privado-doméstico, no biométrico o autenticación de presencia humana: un programa con acceso completo a los archivos de ese usuario sigue siendo de confianza. La autorización de invitación de Hub existente no se modifica. Si una solicitud de emparejamiento falla, ejecute un comando nuevo después de resolver el problema reportado. Esto no agrega soporte para Windows SSH Remote Link.
+
+Si un proceso se interrumpe durante el emparejamiento, vuelva a ejecutar el comando para obtener una nueva autorización. No elimine manualmente el estado de emparejamiento mientras se ejecuta el servicio o un comando de emparejamiento.
+
+En Windows, el emparejamiento no se cierra si la carpeta o registro intent no es privada para la cuenta de servicio, o si su propietario y permisos no pueden verificarse. Ambas entradas deben ser propiedad de esa cuenta; La propiedad de los administradores solo se acepta cuando los administradores son el propietario predeterminado de token y su función de administrador está habilitada. La lista de permisos debe estar protegida de la herencia y contener una entrada de permiso de control total ordinaria para la cuenta servidora. Además de eso, solo se aceptan entradas de permiso simple para SYSTEM y el grupo Administradores, porque SYSTEM y un administrador elevado ya pueden tomar posesión de cualquier archivo; un administrador no elevado no gana nada de esa entrada. Solo se permite la herencia Child en la carpeta. Esta es la lista que Windows informa: se ignoran las entradas duplicadas compatibles para el mismo número de cuentas que una, y las entradas que no conceden nada. El cheque deja registros rechazados en su lugar y no repara sus permisos ni cambia la propiedad. Restaurar una casa de configuración privada y, a continuación, ejecutar un nuevo comando de emparejamiento.
+
+La comprobación cubre la carpeta de intención y el registro. No protege contra el reemplazo de carpetas anteriores, derechos de eliminación en una carpeta principal, operaciones de restauración con privilegios o acceso a través de identificadores abiertos antes de que los permisos se vuelvan privados. Una solicitud con un compromiso coincidente puede bloquear el servidor durante un subproceso de verificación limitado a cinco segundos, incluso si su carpeta falla más tarde en la verificación de permiso. La configuración de inicio de proceso y búsqueda ejecutable precede a ese tiempo de espera. La limpieza de CLI puede realizar una verificación más. El presupuesto de subproceso de cinco segundos deja espacio dentro del tiempo de espera de solicitud de diez segundos del comando, pero la verificación lenta aún puede rechazar el emparejamiento.
+
+
+
+## Agregar un Child desde el terminal
+
+En el Home, ejecute `ocx link probe child-a --json` para inspeccionar la oferta SSH huella dactilar, tipo de llave y OpenCodex version. Verifique la huella digital a través de una fuente confiable. Luego ejecute `ocx link add child-a --expect-fingerprint SHA256:… --json`. El comando sondea de nuevo y rechaza un desajuste antes de almacenar la confianza o emitir una clave. Sin el indicador de huella dactilar, se requiere un terminal interactivo y una `yes` Después de mostrar la huella digital. Nunca imprime la clave de enlace.
+
+Las conexiones iniciadas por Home ahora reinician la Child después de guardar su conexión, incluidas las instalaciones Child más antiguas y capaces. El Child ya debe servir independiente OpenCodex en su puerto configurado, exponer el soporte de reinicio vinculado y tener curl instalado. Actualice o desconecte un Child que falle en esta fase previa. Las instalaciones de escritorio y sistema OpenCodex tienen prioridad sobre las shims genéricas PATH; se omiten los candidatos rotos. Windows Los niños siguen sin soporte.
+
+Reiniciar espera los giros y puede tardar varios minutos. El éxito requiere que el Child reiniciado cumpla la función de cliente y transmita un catálogo completo nuevo a este Home. La configuración de SSH tiene una asignación limitada derivada de la latencia medida; la verificación del relé comienza después del reinicio con su propia ventana de 15 segundos. Los errores nombran la fase fallida. Si un error notifica una configuración residual de Child, ejecute `ocx disconnect` y `ocx restart` en ese Child antes de volver a intentarlo. La limpieza de Home por sí sola no restaura la configuración de Child. Un tiempo de espera CLI informa un resultado incierto; inspeccionar Home `ocx link status` y Child `ocx connect status` Primero.
+
+En un Home iniciado por Child, `ocx link status` función de informes `child`, identidad de enlace y puerto de túnel desde su conexión guardada aunque su almacén de enlaces del lado Home esté vacío. El estado del túnel no observado localmente es `idle`. `ocx status` llama al par un enlace remoto Home. Cuando Home se ejecuta en modo Hub, el estado lee su proyección admitida a través del relé local Child. Un Home independiente informa que no publica el estado de Hub. La identidad del túnel iniciada por Child proviene de su sidecar válido; la evidencia ilegible no reclama una dirección.
diff --git a/docs-site/src/content/docs/es/guides/remote-workspace.md b/docs-site/src/content/docs/es/guides/remote-workspace.md
new file mode 100644
index 00000000000..2f7563542d2
--- /dev/null
+++ b/docs-site/src/content/docs/es/guides/remote-workspace.md
@@ -0,0 +1,193 @@
+---
+title: "Espacio de trabajo remoto"
+description: "Mantenga Codex, Claude Code, Pi y sus inicios de sesión en un concentrador OCX mientras que los equipos solo OCX proporcionan el espacio de trabajo y el entorno de compilación."
+---
+
+Para enlaces de máquina SSH, vea [Enlace remoto](/es/guides/remote-link/).
+
+El espacio de trabajo remoto permite que un concentrador OpenCodex ejecute sus agentes de codificación mientras que otro equipo suministra el archivos de proyecto, comandos, pruebas y compilación. Un teléfono o una tercera computadora puede controlar la sesión. a través del panel de Hub.
+
+```text
+Phone browser -> Computer 1 OCX Hub -> encrypted channel -> Computer 2 OCX Executor
+ Codex / Claude / Pi project and commands
+ logins and sessions no coding CLI login
+```
+
+El Ejecutor solo necesita OpenCodex. No necesita Codex, Claude Code, Pi, un inicio de sesión ChatGPT o una proveedor API clave. Abre un WebSocket saliente al concentrador, por lo que el Ejecutor no necesita ningún puerto público o puerto del router.
+
+:::caution[Base experimental]
+El espacio de trabajo remoto es opt-in y no un despliegue de producción. Linux ofrece herramientas de archivo y condicionales Ejecución de comandos bubblewrap. Windows y macOS solo ofrecen herramientas de archivo: su nativo oficial Los ayudantes rechazan las solicitudes de sonda y comando. Los comandos Windows permanecen sin soporte hasta que se verifique El propietario del ciclo de vida puede retener la autoridad de limpieza a través de la cancelación. Falta apoyo de comando nunca En el siguiente paso.
+:::
+
+
+
+## Compatibilidad con RPC y tiempos de espera
+
+El espacio de trabajo remoto utiliza cifrado RPC v2. El Hub y cada Ejecutor deben soportar v2; RPC pares v1 Falla cerrada en lugar de caer de nuevo a la ejecución inmediata, por lo que actualizar el concentrador y ejecutores Juntos.
+
+Un tiempo de espera solicita la cancelación del ejecutor, pero no lo confirma. Una subvención ya puede estar en tránsito, o su funcionamiento puede estar ya en marcha. El tiempo de espera predeterminado de RPC es de 65 segundos, y `timeoutMs`
+acepta valores inclusivos de 1 a 120,000 milisegundos.
+
+
+
+## Configurar el Hub
+
+El ordenador 1 posee cada inicio de sesión de agente de codificación y cada sesión de modelo. Instalar e iniciar sesión en cualquiera de los agentes que desea usar allí, luego ejecute OpenCodex como un concentrador:
+
+```bash
+ocx config set runtimeRole hub
+OCX_REMOTE_WORKSPACE_ENABLED=1 ocx start
+ocx gui
+```
+
+Establecer `OCX_REMOTE_WORKSPACE_ENABLED=1` en el proceso de Hub mismo; configurándolo solo para un panel El comando no habilita un servicio ya en ejecución. Un Hub sin devoluciones explícitas desactivadas estado sin crear claves de espacio de trabajo ni sondear los tiempos de ejecución del agente de codificación.
+
+Utilice una implementación HTTPS autenticada al abrir el panel de control desde un teléfono u otro equipo. Véase [Despliegue de Remote Hub](/es/guides/remote-hub/) para la gestión-ingreso compatible y Tailscale patrón. No publique un puerto de panel local no autenticado.
+
+Codex Remote Workspace utiliza los perfiles de permisos actuales del servidor de aplicaciones. Si el Hub seleccionado Codex configuración sigue estableciendo legado `sandbox_mode` o `sandbox_workspace_write`, los informes del panel de control Codex como no disponible en lugar de comenzar con un límite más débil. Migrar ese perfil Codex antes usando la función; no configure tanto el sandbox heredado como un perfil de permisos.
+
+
+
+## Inspeccione el Hub sin iniciar una sesión
+
+```bash
+ocx remote-workspace hub --help
+ocx remote-workspace hub status --json
+ocx remote-workspace hub runtimes --json
+ocx remote-workspace hub sessions --json
+```
+
+Estos utilizan el concentrador de gestión en ejecución seleccionado. Existentes `remote-workspace status`
+Sigue leyendo el estado del ejecutor local. Retornos de estado
+`{available:true,devices,runtimes,sessions}`; entorno de ejecución devuelve
+`{runtimes:{codex:{available,...},claude:{available,...},pi:{available,...}}}`; Sesiones de retorno `{sessions:[...]}`. La disponibilidad en entorno de ejecución es un objeto, no un array, y comprobarlo puede probar la disponibilidad ejecutable. Las raíces del dispositivo exponen los ID y etiquetas, no rutas del sistema de archivos Ejecutor. Las sesiones incluyen eventos públicos recientes; La salida del terminal humano escapa a los caracteres de control.
+
+Un concentrador disponible con el dispositivo/sesión vacío muestra las salidas 0. Cuando la activación de Hub es apagado, el despachador exterior puede devolver HTTP 200 con `available:false`, dispositivos vacíos y sesiones, y `runtimes:{}`. El CLI emite esa estrecha observación no disponible con una instrucción Hub/activación fija y salidas 1. No se presenta no disponible como un éxito vacío. Un HTTP 409 interno sin hub devuelve la salida 5 con orientación stderr; cliente-role, transporte y respuestas mal formadas también siguen siendo fallas.
+
+Compruebe el Hub previsto y su `OCX_REMOTE_WORKSPACE_ENABLED=1` Activación cuando no disponible; no cambie silenciosamente la configuración como recuperación. Estas observaciones no autorice ni realice emparejamientos, creación de sesiones, solicitudes, revocación o Cambios de confianza. Esos siguen siendo los flujos de trabajo separados del panel de control / sesión a continuación.
+
+
+
+## Emparejar a un ejecutor
+
+1. Empareje el navegador con Hub a través del panel de control. Ejecute el programa
+ `ocx gui pair --origin` comando en el Hub e introduzca su código de un solo uso; automáticamente bootstrapped local o Tailscale sesión puede ver el estado, pero no puede controlar el espacio de trabajo remoto.
+2. Abrir **Espacio de trabajo remoto** en ese panel de Hub emparejado.
+3. Seleccionar **Crear código de emparejamiento**.
+4. En el equipo 2, cambie al directorio del proyecto que desea exponer.
+5. Copie el archivo generado **Terminal de Linux / macOS** o **Windows PowerShell** comando para esa computadora. Parea el directorio actual y mantiene
+ `ocx remote-workspace agent` conectados en ese terminal.
+
+El flujo manual equivalente es:
+
+```bash
+cd /path/to/project
+printf '%s\n' 'ONE-TIME-CODE' | ocx remote-workspace pair 'https://your-hub.example' \
+ --pairing-code-stdin --root "$PWD"
+ocx remote-workspace agent
+```
+
+En PowerShell Windows, utilice el comando que se muestra en el panel. La forma manual equivalente es:
+
+```powershell
+$pairingCode = 'ONE-TIME-CODE'
+$pairingCode | ocx remote-workspace pair 'https://your-hub.example' `
+ --pairing-code-stdin --root (Get-Location).Path
+if ($LASTEXITCODE -eq 0) { ocx remote-workspace agent }
+```
+
+El actual OCX Bun ejecutable se agrega como un archivo de solo lectura al Linux Si el proyecto necesita una cadena de herramientas instalada por el usuario fuera de las rutas del sistema, empareje explícitamente sin exponer el resto del directorio principal:
+
+```bash
+printf '%s\n' 'ONE-TIME-CODE' | ocx remote-workspace pair 'https://your-hub.example' \
+ --pairing-code-stdin --root "$PWD" \
+ --toolchain-root "$HOME/.nvm/versions/node/v24/bin"
+```
+
+La fuente de ayuda nativa está empaquetada para su revisión. Construirlo no habilita Windows o macOS Los comandos en este carry. `--executor-helper` sigue siendo un selector de ayuda revisada; existencia binaria o una ruta configurada no prueba soporte de comandos.
+
+El código de una sola vez se lee de la entrada estándar, no de los argumentos de la línea de comandos. El emparejamiento crea un local clave de firma del dispositivo y un portador con alcance de dispositivo. El Hub almacena solo su hash y nunca recibe el verdadero camino Ejecutor. Detener el agente en primer plano con Ctrl + C; ejecutarlo nuevamente vuelve a conectar el mismo dispositivo.
+
+Compruebe la inscripción local sin imprimir secretos:
+
+```bash
+ocx remote-workspace status
+```
+
+
+
+## Iniciar una sesión de codificación remota
+
+En el panel de control, elija:
+
+1. el ordenador en línea;
+2. una carpeta de espacio de trabajo aprobada localmente;
+3. Codex, Claude Code o Pi desde el Hub; y
+4. un modo de acceso.
+
+**Solo lectura** es el valor predeterminado y expone la lista de directorios y la lectura de archivos. La opción de escritura es Se muestra como **Editar archivos y ejecutar comandos** solo cuando ese Ejecutor pasó una sonda de caja de arena de comandos; De lo contrario, se muestra como **Editar solo archivos**. El panel muestra dos ubicaciones separadas para que que el modelo y el inicio de sesión permanezcan en el concentrador mientras las operaciones del espacio de trabajo se ejecutan en el computadora.
+
+Envía mensajes desde el panel de Hub en el ordenador 1, el ordenador 3 o un teléfono. La sesión no se puede cambiar a otra computadora o carpeta en silencio. Si el Ejecutor se desconecta, la sesión entra
+**Ejecutor offline** y nunca vuelve al sistema de archivos del Hub.
+
+La presentación inmediata reconoce la aceptación de inmediato; el panel de control sondea la sesión para el progreso y la finalización. Si se pierde el acuse de recibo, el borrador permanece visible con un aviso de envío desconocido. Compruebe el progreso de la sesión antes de volver a enviarla; el panel nunca vuelve a intentar un mensaje automáticamente.
+
+**Detener** permanece disponible mientras se ejecuta un mensaje. Interrumpe el giro del agente de codificación Hub, cancela un comando activo de Ejecutor y evita que una respuesta tardía vuelva a abrir el comando detenido sesión.
+
+
+
+## Trabajar con sesiones lado a lado
+
+La lista de sesiones de la izquierda abre una sesión en el panel enfocado. Arrastre una sesión hacia la izquierda, borde derecho, superior o inferior de otro panel para dividir el área de conversación. Puedes mostrar hasta Cuatro sesiones diferentes a la vez. Una sesión ya visible se mueve entre paneles en lugar de Abrir un compositor duplicado.
+
+Uso **Dividir a la derecha** o **Dividir a continuación** junto a una sesión para la alternativa accesible por teclado. Arrastre un divisor para cambiar el tamaño de los paneles, o enfoque el divisor y use sus teclas de flecha. **Home** y
+**Fin** establecer el divisor en su tamaño mínimo y máximo. Cada sesión mantiene su propio borrador, estado de envío y acción Stop, por lo que un turno pendiente en un panel no Bloquear una sesión diferente. **Cerrar panel** cambia el diseño solamente; no detiene la sesión.
+
+El diseño del panel se restaura para este Hub en el mismo navegador. Solo identificadores de sesión y panel Se guardan las posiciones y los tamaños de los divisores; el texto borrador y la salida del modelo no se escriben en el almacenamiento del navegador. Recarga la página borra los borradores no enviados. En pantallas de hasta 760px de ancho, los paneles se apilan verticalmente sin redimensionar los divisores; las posiciones divididas y los tamaños guardados regresan cuando la pantalla es más ancha.
+
+Esta vista es compartida por el panel del navegador y el panel de escritorio OpenCodex. Usuarios de CLI puede abrir el panel con `ocx gui` y seleccione **Espacio de trabajo remoto** después de su configuración normal de Hub. No cambia la interfaz del terminal de `codex` o el diseño de la conversación dentro del separado oficial ChatGPT/Codex aplicación de escritorio.
+
+
+
+## Reiniciar y reconectar el comportamiento
+
+El concentrador mantiene los metadatos de sesión limitados y una pequeña instantánea de evento reciente. Después de reiniciar un Hub, una sesión inacabada espera a su Ejecutor original. Una vez que el dispositivo se vuelve a conectar, el siguiente reanuda el subproceso Codex original, la sesión Claude Code o el ID de sesión Pi.
+
+Claude Code crea su historial duradero en el primer mensaje completado. Si el Hub se detiene antes de nueva sesión Claude ha completado cualquier mensaje, no hay conversación para reanudar; iniciar una nueva sesión sesión en su lugar.
+
+Un manifiesto de capacidad cambiado no debilita silenciosamente una sesión existente. Iniciar una nueva sesión si el Ejecutor pierde la contención del comando o cambia sus herramientas disponibles. Revocar una computadora cierra su Socket y detiene las sesiones vinculadas a él.
+
+
+
+## Límites de seguridad
+
+- Las credenciales del proveedor y el historial de agentes de codificación permanecen en el concentrador.
+- Las claves privadas del ejecutor, el portador del dispositivo y las rutas raíz reales permanecen en su estado OCX exclusivo del propietario.
+- Los errores de código de emparejamiento están limitados por par observado en cada oyente. Diez códigos fallidos en diez minutos devuelven un genérico `429` con `Retry-After`; el Hub solo conserva límites, expirando hashes de esas identidades de origen. Los usuarios de Tailscale Serve comparten el bucle de retorno del oyente de la administración bucket porque un llamador local directo podría forjar su encabezado de identidad.
+- Cada sesión de trabajo utiliza un protocolo efímero P-256 ECDH firmado por Ed25519 y ordenado AES-256-GCM mensajes.
+- Un socket no se muestra como en línea hasta que ambas partes estén de acuerdo en su manifiesto de capacidad actual.
+- La reconexión puede eliminar una capacidad cuando su sandbox local no está disponible, pero nunca agrega una función. capacidad fuera de la subvención registrada en el emparejamiento.
+- Cada solicitud está vinculada a un hilo de modelo, dispositivo, raíz, modo de acceso y conjunto de capacidades.
+- Las rutas son relativas, canónicas, limitadas y rechazadas en enlace simbólico, unión o directorio padre. Escapar. Se deniegan los nombres de dispositivos Windows, flujos de datos alternativos y alias de espacio/punto final.
+- Las operaciones del ejecutor se serializan, las identidades de archivo abiertas se vuelven a verificar y los hashes de escritura se Verificar inmediatamente antes de la sustitución atómica. Reemplazar una raíz aprobada requiere emparejamiento de nuevo, y las raíces de la cadena de herramientas se revalidan antes de cada comando.
+- Las lecturas/escrituras de archivos rechazan los archivos vinculados. Antes de la ejecución del comando, OCX escanea como máximo 250.000 entradas de espacio de trabajo y desactiva la ruta de comando si alguna entrada que no sea de directorio tiene varios enlaces; path sandboxes no puede probar si el otro nombre para ese inodo está fuera de la raíz aprobada.
+- Los comandos Linux se ejecutan a través de bubblewrap con un espacio de trabajo escribible, entorno despejado, privado espacios de nombres de proceso, el ejecutable actual OCX Bun como un archivo de solo lectura, salida limitada y tiempo de espera, y la red desactivada por defecto. Las pruebas de confinamiento específicas requieren una Entorno alojado configurado; una suite genérica verde no prueba que se ejecutaron.
+- macOS solo anuncia herramientas de archivos. Un grupo de procesos no puede contener un descendiente después de llamar
+ `setsid()`, e importar un amplio perfil del sistema de cinturón de seguridad de Apple simplemente para iniciar un comando sería Exponer la autoridad de servicio de host no relacionada. Por lo tanto, el ayudante nativo rechaza tanto su sonda como dirigir las solicitudes de comando hasta que OCX tenga un propietario de contención descendiente estrecho y revocable.
+- Las solicitudes de comandos nativos Windows y macOS fallan. Sus pruebas de rechazo de la ayuda directa deben ser distinguirse de las pruebas de confinamiento de mando en funcionamiento; La aceptación del comando Windows está abierta.
+- El ayudante nativo anclado debe estar fuera de cada espacio de trabajo escribible aprobado. OCX comprueba esto tanto antes del soporte de comandos publicitarios e inmediatamente antes de cada comando, por lo que el código del espacio de trabajo no puede reemplazar el binario que impone su siguiente sandbox.
+- Detener una sesión cancela un comando activo de Ejecutor y limpia el proceso del modelo Hub y puente de herramienta loopback. Windows detiene el árbol de procesos propio de la envoltura npm en lugar de Nodo niño detrás; Linux y macOS fuerza de parada un CLI solo si ignora la elegante ventana de parada.
+
+El Hub ve intencionadamente mensajes y salidas del modelo porque ejecuta el agente de codificación. De extremo a extremo El cifrado protege las cargas útiles de Executor RPC. Se confía en el concentrador emparejado para seleccionar raíces aprobadas sobre autenticado WSS; no es ciego a su propia conversación de modelo.
+
+
+
+## Alcance actual
+
+Remote Workspace no copia ni sincroniza credenciales con otros equipos. Está separado de Enrutamiento del proveedor de Remote Hub y desde cualquier futuro producto de computación o Super Sync alojado. Una producción lanzamiento todavía requiere firmado Windows helper embalaje, prueba nativa de CI en los binarios exactos, revisión independiente del mantenedor, y una verdadera ejecución de aceptación de tres computadoras.
+
+
+
+## Rápida aceptación API
+
+`POST /api/remote-workspace/sessions/:id/prompt` devuelve HTTP 202 con la instantánea de sesión aceptada. Su ID de sesión y la secuencia de eventos monotónicos identifican la instantánea de aceptación; 202 no significa que el modelo se haya completado. Encuesta `GET /api/remote-workspace/sessions` para eventos posteriores y estado de la terminal. Reconectar y reanudar el entorno de ejecución permanecen ocupados mientras ese turno está activo. Un acuse de recibo perdido deja la aceptación desconocida, por lo que los clientes deben encuestar antes de elegir si enviar nuevamente.
diff --git a/docs-site/src/content/docs/es/guides/response-inspection.md b/docs-site/src/content/docs/es/guides/response-inspection.md
new file mode 100644
index 00000000000..23767c093ea
--- /dev/null
+++ b/docs-site/src/content/docs/es/guides/response-inspection.md
@@ -0,0 +1,22 @@
+---
+title: "Inspección de respuestas y grandes respuestas"
+description: "Cómo interactúan la retención diagnóstica limitada y la inspección de transmisión con la entrega de respuesta."
+---
+
+OpenCodex mantiene los diagnósticos de respuesta limitados sin limitar el registro límite en los bytes entregados a su cliente. Otro proveedor, solicitud y transporte Los límites se aplican de forma independiente.
+
+
+
+## JSON y respuestas de error ordinarias
+
+La inspección JSON retiene como máximo 32 MiB de bytes fuente. Si el cuerpo supera esa Si el registro deja caer su copia retenida y continúa reenviando el original. respuesta. No analiza un prefijo truncado como uso o modelo autorizado Metadatos. El uso ya suministrado por otra ruta de confianza se conserva; falta El uso no se reemplaza con un cero inventado. Diagnósticos de error ordinarios que no son JSON retener solo los primeros 8 KiB y pasar por la lógica de redacción existente.
+
+El cliente recibe fragmentos a medida que los lee en lugar de esperar el diagnóstico. inspección de todo el cuerpo. Un fallo de lectura se registra como 502 y la cancelación como 499 en el historial de solicitudes; estos resultados de diagnóstico no reescriben los encabezados HTTP que ya han sido enviados. El registro se finaliza una vez.
+
+
+
+## Respuestas de streaming
+
+La inspección nativa SSE se detiene cuando se ejecuta demasiado por delante del consumo del cliente. La asignación es de 32 MiB más gastos generales de Source-chunk/native-prefetch, no un total límite de tamaño de respuesta o un límite en toda la memoria del proceso. Una respuesta más larga sigue siendo inspeccionado a través de su evento de finalización real, incluido el uso de la terminal y Estado de continuación.
+
+Después de que el cliente se desconecta, el drenaje acotado existente todavía puede observar un hasta 15 segundos o 32 MiB de inspección adicional. Un forzado El cierre es diferente: descarta candidatos incompletos en lugar de grabar como una respuesta completa. Selección de transporte existente y memoria WebSocket Los límites no han cambiado. No se requiere ninguna configuración nueva.
diff --git a/docs-site/src/content/docs/es/guides/routing-profile-editor.md b/docs-site/src/content/docs/es/guides/routing-profile-editor.md
new file mode 100644
index 00000000000..df7bb626e12
--- /dev/null
+++ b/docs-site/src/content/docs/es/guides/routing-profile-editor.md
@@ -0,0 +1,86 @@
+---
+title: "Editor de perfiles de enrutamiento"
+description: "Cree, edite, valide, ejecute en seco y elimine perfiles de directivas de enrutamiento del panel de control de OpenCodex."
+---
+
+Los **Modelos → Enrutamiento** pestaña en el panel de control OpenCodex puede administrar `config.routingProfiles` Sin edición `config.json` mano.
+
+
+
+## Crear un perfil
+
+1. Abrir **Enrutamiento** en el panel.
+2. Seleccionar **Crear perfil**.
+3. Introduzca un `id`. El modelo canónico es `policy/`.
+4. Agregue uno o más candidatos explícitos de proveedor/modelo.
+5. Configurar requisitos opcionales, ponderaciones de puntuación, límites de costes (`maxEstimatedCostUsd`, opcional `onUnknownCost`), y el comportamiento de evidencia desconocida.
+6. Guardar el perfil.
+
+Los ID de perfil son inmutables después de la creación. Para usar un id diferente, cree un nuevo perfil y elimine el antiguo después de actualizar las llamadas.
+
+
+
+## Validación y persistencia
+
+El panel de control envía el mismo objeto de perfil utilizado por `config.routingProfiles` a la administración API. El servidor valida el candidato completo antes de escribirlo:
+
+- ids y alias deben seguir las reglas de nombres y colisiones del perfil de enrutamiento;
+- todos los proveedores candidatos deben existir y estar habilitados;
+- Los candidatos duplicados son rechazados.
+- Los límites y requisitos numéricos deben permanecer dentro de sus rangos admitidos; y
+- al menos un peso de optimización debe ser positivo.
+
+Un guardado exitoso mantiene el perfil a través del escritor de configuración normal, reconcilia el estado en vivo y actualiza el catálogo de modelos. Los errores de validación dejan la configuración anterior sin cambios y se muestran en el editor.
+
+Cuando `limits.maxEstimatedCostUsd` está configurado, `limits.onUnknownCost` por defecto a `"allow"`: una estimación de costos desconocida no obtiene un exclusión específica de la tapa, y sello de huellas de ruta-decisión en seco / en vivo
+`cost.capOutcome: "unknown-allowed"` para que los operadores puedan decir que la tapa no fue probada. Establecer `"exclude"`
+cuando el techo debe estar cerrado (`cost-limit-unknown`, con
+`cost.capOutcome: "unknown-excluded"`) Configuración `onUnknownCost` solo es inerte y no emite un resultado de tapa. Esto es separado de
+`unknownEvidence.cost`, que aún puede excluir o penalizar precios desconocidos independientemente de la Resultado del tope.
+
+
+
+## Ejecutar en seco un perfil guardado
+
+Las capacidades candidatas usan la configuración efectiva del proveedor después del registro Se aplican las anulaciones. Requisitos de localidad (`localOnly` y `remoteAllowed`) Por lo tanto, utilice la dirección efectiva de origen. Si esa dirección no puede ser clasificada, El perfil de `unknownEvidence.capability` El establecimiento decide la elegibilidad. Una configuración de proveedor no válida que no se puede resolver siempre se excluye con
+`route-unavailable`Incluso cuando se permiten capacidades desconocidas. Los proveedores desaparecidos o discapacitados también están excluidos con `route-unavailable` Antes de anotar.
+
+Seleccione un perfil guardado y use **Evaluación en seco** para agregar evidencia de solicitud, como el tamaño de la ventana de contexto, el uso de herramientas, la entrada de imágenes o la salida estructurada. Dry-run evalúa la elegibilidad y la puntuación, pero nunca envía una solicitud de modelo ascendente.
+
+Las ediciones no guardadas no son usadas por dry-run. Guarde primero el perfil para que la revisión y evaluación mostradas se refieran a la misma configuración.
+
+
+
+## API de administración
+
+El editor utiliza estos puntos finales:
+
+- `GET /api/routing-profiles` Lista perfiles normalizados y revisiones.
+- `PUT /api/routing-profiles` Crea o actualiza un perfil. Enviar `mode: "create"` o `mode: "update"`; create mode se niega a sobrescribir un id existente.
+- `DELETE /api/routing-profiles?id=` Elimina un perfil.
+- `POST /api/routing-profiles/dry-run` Evalúa un perfil guardado sin enviar de origen.
+
+Ejemplo de guardar carga útil:
+
+```json
+{
+ "id": "fast",
+ "mode": "create",
+ "profile": {
+ "alias": "ocx/fast",
+ "candidates": [
+ { "provider": "anthropic", "model": "claude-sonnet-5" },
+ { "provider": "openai", "model": "gpt-5.6" }
+ ],
+ "require": { "tools": true, "minContextWindow": 128000 },
+ "optimize": { "latency": 0.55, "health": 0.25, "cost": 0.1, "quota": 0.1 },
+ "limits": { "maxEstimatedCostUsd": 0.5, "onUnknownCost": "allow" },
+ "unknownEvidence": {
+ "capability": "exclude",
+ "health": "penalize",
+ "quota": "penalize",
+ "cost": "penalize"
+ }
+ }
+}
+```
diff --git a/docs-site/src/content/docs/es/guides/sidecars.md b/docs-site/src/content/docs/es/guides/sidecars.md
new file mode 100644
index 00000000000..8f168d79881
--- /dev/null
+++ b/docs-site/src/content/docs/es/guides/sidecars.md
@@ -0,0 +1,173 @@
+---
+title: "Sidecars: búsqueda web y visión"
+description: "Ofrece a los modelos enrutados una búsqueda web real y comprensión de imágenes de modelos solo de texto a través de sidecars nativos ChatGPT."
+---
+
+Los modelos enrutados no exponen todos los hosted **búsqueda web** o nativo **entrada de imagen**. Rellenos opencodex Esas capacidades con dos sidecars. Ambos admiten un inicio de sesión ChatGPT (`forward`) proveedor o almacenado Anthropic Proveedor de OAuth; la búsqueda web puede usar adicionalmente Grok almacenado OAuth a través de la
+`xai` backend. Los errores de sidecar se convierten en resultados de herramientas limitadas o marcadores de imagen en lugar de fallar el resultado. todo el giro.
+
+:::note[Selección automática del backend]
+Explícito `backend` La configuración gana. Los dos sidecares por defecto de manera diferente cuando `backend` Está unset:
+**búsqueda web** siempre por defecto a `openai` — `anthropic` se ejecuta solo cuando está configurado explícitamente.
+**Visión** por defecto a `anthropic` Si un habilitado Anthropic OAuth El proveedor tiene una cuenta activa no marcada `needsReauth`, en caso contrario `openai`. Explícito `anthropic` sin esa credencial falla Cerrado. Explícito `xai` requiere un almacenamiento utilizable Grok OAuth cuenta y no retrocede. `openai`
+requiere tanto la autenticación de inicio de sesión ChatGPT como una autorización habilitada `forward` proveedor.
+:::
+
+
+
+### Backends de búsqueda web adicionales (solo explícitos)
+
+Existen otros tres backends de búsqueda web más allá de las rutas ChatGPT y Claude. Cada uno es
+**explícito-sólo** — nunca se activa desde la presencia de credenciales — y **falla cerrado**: una credencial faltante no produce ningún plan de sidecar y la solicitud toma la ruta normal.
+
+| Backend | Carreras | Credenciales | Notas |
+| --- | --- | --- | --- |
+| `xai` | Grok alojado `web_search` (+ opt-in) `x_search`) en `api.x.ai` Responses | Almacenado Grok OAuth`ocx login xai`) | `webSearchSidecar.xSearch` Permite buscar con X `allowedXHandles`/`excludedXHandles` (máximo 20, mutuamente excluyentes) y ISO `fromDate`/`toDate`. Modelo predeterminado `grok-4.6`. |
+| `gemini` | `google_search` En el transporte de antigravedad | Antigravedad almacenada OAuth con proyecto descubierto (`ocx login google-antigravity`) | Modelo predeterminado `gemini-3.8-flash`; el razonamiento selecciona el nivel de coincidencia. |
+| `exa` | Exa Search API (resumen de resultados no-LLM) | `webSearchSidecar.exaApiKey` | La clave es solo escritura a través de la administración API (nunca se hizo eco, se redactó desde los registros). No se aplica ningún modelo de sidecar. |
+
+
+
+## Sidecar de búsqueda web
+
+Cuando Codex solicita alojado `web_search` para un modelo enrutado sin paso, opencodex:
+
+1. **Gotas** El hospedado `web_search` herramienta y expone un material sintético `web_search(query)` herramienta de función En su lugar, al modelo enrutado. Las opciones originales de la herramienta alojada se conservan para la llamada de sidecar.
+2. Ejecuta el modelo enrutado en un pequeño **bucle angélico**. Cuando llama `web_search`, opencodex utiliza el Sidecar seleccionado: OpenAI se ejecuta alojado `web_search` con `gpt-5.6-luna` por defecto; Se ejecuta Anthropic `web_search_20250305` con `claude-sonnet-5` por defecto. La respuesta transmitida y Las citas se convierten en un resultado de herramienta. xAI ejecuta Grok alojado `web_search` con `grok-4.6` por defecto y, cuando está habilitado, agrega alojado `x_search` a la misma petición.
+3. **Bucles** hasta que el modelo responda o el presupuesto total de la consulta real alcance `maxSearchesPerTurn`
+ (predeterminado 3), luego quita la herramienta de búsqueda y fuerza una respuesta final. Herramientas de cliente reales como
+ `apply_patch` o shell finalizar el turno para que esas llamadas lleguen a Codex.
+
+Cuando el modelo agrupa varias consultas en una `web_search` sus resultados comparten una Resultado de herramienta de 8.000 caracteres. El presupuesto se divide entre las consultas antes de que se corte nada, por lo que no La consulta desaparece del resultado. Las respuestas acortadas y las fuentes no listadas están marcadas con sus tamaños originales, lo que permite que el modelo indique los resultados recortados de las búsquedas que encontró Nada. Los giros de salida estructurada reciben la misma información que un documento JSON válido. Si una llamada pide más consultas que un resultado puede describir, opencodex enumera el estado de cada consulta sin su contenido y cuenta cualquier consulta que no pueda enumerar.
+
+Cada iteración de modelo enrutado solicita upstream `stream: true`, pero por defecto opencodex totalmente Almacena internamente los eventos semánticos antes de decidir si buscar o devolver la respuesta final. Solo los encabezados/estados finales de la primera iteración y 429 rotaciones de teclas se adquieren con entusiasmo. Así que Las llamadas de búsqueda sintéticas y la salida preliminar nunca se exponen como salida del modelo visible para el cliente.
+
+Opt-in `webSearchSidecar.streamRoutedModelOutput` (por defecto) `false`) fluye cada iteración Los deltas principales del texto/del pensamiento viven en lugar de — el cliente ve la salida tan pronto como el modelo produce exactamente igual que el camino sin sidecar. La ventana activa se cierra permanentemente en la primera llamada a herramientas límite, por lo que la decisión de interceptar `web_search` permanece atómica y nada se entrega nunca dos veces (la repetición del terminal omite lo que ya se transmitió). Tradeoff: texto que emite el modelo *antes*
+decidir buscar — qué modo almacenado en búfer cae silenciosamente — se vuelve visible y puede repetirse parcialmente en la respuesta post-búsqueda. La página de resumen del panel expone esto como el **Transmitir respuestas en vivo**
+activar la tarjeta sidecar de búsqueda web (`PUT /api/sidecar-settings` con
+`webSearch.streamRoutedModelOutput`).
+
+Esta opción también se aplica a los adaptadores que administran sus propios turnos, incluidos Devin y Cursor. Cuando los sidecars de búsqueda y de imagen/vídeo son elegibles, la búsqueda tiene prioridad. Un primer evento OAuth 429 rota la cuenta en la solicitud inicial y en cada solicitud de respuesta posterior a la búsqueda, reproducir la solicitud con la herramienta de búsqueda y los resultados recopilados. Cancelar una solicitud detiene las búsquedas posteriores, y conserva la salida del bucle de búsqueda comparte la memoria intermedia de traducción de la solicitud límite; exceder ese límite falla la respuesta en lugar de iniciar otra iteración del modelo.
+
+El comentario de Kiro es independiente de esta opción: el texto de la fase de comentario ya se transmite antes que el evento terminal en modo almacenado en memoria intermedia, y esa derivación no cambia — con o sin
+`streamRoutedModelOutput`, solo los eventos de decisión de búsqueda (llamadas a herramientas y todo después de la primera de llamada de herramienta) permanecen amortiguados para el `web_search` decisión.
+
+El resultado inyectado se envuelve en un límite de datos no confiables, con la longitud rematada y desduplicada por fuente URL. En los giros de salida estructurada (`json_schema` / `json_object`) se entrega como compacto JSON en lugar de prosa. Para los modelos enrutados solo de texto, también se le dice al modelo de búsqueda que describa imágenes relevantes en palabras e incluyen sus URL de origen.
+
+```json
+{
+ "webSearchSidecar": {
+ "enabled": true,
+ "backend": "anthropic",
+ "model": "claude-sonnet-5",
+ "reasoning": "low",
+ "maxSearchesPerTurn": 3,
+ "routedModelStallTimeoutMs": 200000,
+ "timeoutMs": 200000,
+ "streamRoutedModelOutput": false
+ }
+}
+```
+
+El backend explícito de xAI utiliza la credencial almacenada creada por `ocx login xai`. Su opcional
+`xSearch` bloque habilita la búsqueda X y puede restringirla a una lista de identificadores y un intervalo de fechas ISO:
+
+```json
+{
+ "webSearchSidecar": {
+ "backend": "xai",
+ "model": "grok-4.6",
+ "xSearch": {
+ "enabled": true,
+ "allowedXHandles": ["xai"],
+ "fromDate": "2026-08-01",
+ "toDate": "2026-08-21"
+ }
+ }
+}
+```
+
+`allowedXHandles` y `excludedXHandles` son mutuamente excluyentes y cada uno acepta como máximo 20 cuerdas. Fechas de uso `YYYY-MM-DD`. La gestión malformada escribe retorno `400`; persistente malformado Los bloques fallan al cerrarse en el momento de la planificación en lugar de ampliar silenciosamente la búsqueda.
+
+`minimal` El razonamiento no se utiliza porque el backend alojado rechaza las herramientas en ese esfuerzo. Un fracaso la búsqueda se devuelve al modelo enrutado como un resultado de error limitado, lo que le permite responder desde el contexto que ya tiene.
+
+Se aplican cuatro relojes separados. `stallTimeoutSec` es el presupuesto base de eventos de bridge.
+`connectTimeoutMs` (por defecto) `200000`) cubre solo los encabezados DNS/TCP/TLS y de respuesta final. Config-file-only `webSearchSidecar.routedModelStallTimeoutMs` (por defecto) `200000`, entero
+`1..2147483647`) limita la inactividad de bytes de respuesta bruta continua para cada iteración del modelo encaminado y se restablece en cada byte no vacío. `webSearchSidecar.timeoutMs` Por separado limita una búsqueda alojada solicitud. El vigilante del puente efectivo es
+`max(base stall, connect timeout, routed-model stall, sidecar timeout) + 30 seconds`. El ruteado El tiempo muerto no es una generación completa. Fallos antes de que SSE comience a devolver non-2xx JSON; generación los errores después de que los encabezados de la respuesta han comenzado se entregan como `response.failed` SSE.
+
+
+
+## Sidecar de visión
+
+El preajuste del proveedor registra `zai-glm-5-3` de Mistral como modelo de solo texto. Si el sidecar de visión está habilitado y disponible, OpenCodex describe las imágenes adjuntas y envía sus descripciones a GLM. El catálogo de Codex anuncia adjuntos de imagen para esta ruta. Después de actualizar, ejecuta `ocx sync` y cierra por completo y vuelve a abrir Codex Desktop, o recarga la ventana de VS Code. Sin una opción de reinicio, la sincronización no reinicia un app-server existente de Codex, que puede conservar el catálogo anterior. También puedes usar `ocx sync --restart-codex` para sincronizar y reiniciar los procesos de Codex coincidentes y Desktop. Termina antes el trabajo activo: ese reinicio finaliza las conversaciones en curso. Consulta la [referencia de sincronización y reinicio](/es/reference/cli/lifecycle/#ocx-sync---restart-codex---restart-app-server-only). Después de abrirlo de nuevo, elige `mistral/zai-glm-5-3` y comprueba que puedas adjuntar imágenes. No necesitas modificar la modalidad del modelo. Mistral documenta la entrada nativa en su [referencia de GLM 5.3](https://docs.mistral.ai/models/zai-glm-5-3).
+
+El enrutamiento de imágenes es consciente de la capacidad. Antes de enviar un flujo ascendente con imágenes, opencodex resuelve las modalidades de entrada efectivas del modelo seleccionado a partir de la evidencia del proveedor en entorno de ejecución, las declaraciones explícitas del operador, los metadatos del backend/registro y los metadatos del proveedor generados. Un objetivo que se sabe que es solo texto pasa primero por el Sidecar de Visión; la imagen se describe **antes** la llamada principal y reemplazado en línea con el texto. Un objetivo conocido positivamente para soportar imágenes recibe la imagen directamente. Los modelos personalizados desconocidos mantienen el comportamiento de compatibilidad existente en lugar de ser adivinados solo por texto.
+
+Para la ruta canónica ChatGPT Codex, opencodex utiliza el `openai-codex` bundle de metadatos en lugar de los metadatos públicos OpenAI API, por lo que se respetan las diferencias de modalidad específicas del backend. La ruta rápida nativa de Chat utiliza la misma puerta y no puede omitir un veredicto conocido de solo texto. Sin un plan de sidecar disponible, las imágenes en bruto se eliminan antes de un backend probado solo de texto. Con `visionSidecar.enabled: false`, el catálogo del modelo no agrega la entrada de imagen respaldada por sidecar a modelos solo de texto, incluidas filas personalizadas y miembros combinados. Soporte de imagen nativa y explícitamente Se conservan las modalidades de imagen configuradas. Omisión `enabled` mantiene el anuncio de sidecar encendido; La visibilidad del catálogo no establece que las credenciales o la capacidad del sidecar estén disponibles. Los combos anuncian la entrada de imágenes solo cuando cada miembro acepta imágenes, ya sea de forma nativa o a través de un dispositivo habilitado. y el sidecar, y el combo `imageInput` configuración no está deshabilitada, por lo que los clientes como la aplicación Codex permitir accesorios en lugar de bloquearlos antes de que el sidecar corra. Cuando
+`visionSidecar.model` ausentes o en blanco, el OpenAI ruta de ejecución, Dashboard y administración API
+utilizar el `gpt-5.6-luna` fallback. Startup sigue migrando un legado explícitamente persistente
+`gpt-5.4-mini` valor a `gpt-5.6-luna`; esa migración se aplica a un valor almacenado, no a un valor ausente campo de modelo. Guardar un combo multimodal desde el panel de control inscribe automáticamente a sus miembros que no son imagen: el La página Combos los envía como `visionSidecarTargets` on `PUT /api/combos`, que escribe la exacta solo texto en el proveedor del miembro, por lo que no es necesario editar y volver a cargar la configuración manual. La inscripción nunca sobrescribe una declaración con capacidad de imagen existente, y los miembros cuyas modalidades son desconocido o no tienen entrada de texto no están inscritos — el panel les nombra y mantiene el combo interruptor de imagen no disponible. El DeepSeek de primera parte `deepseek-flash` modelo es multimodal nativo (`text` y `image`) y hace No utilice este sidecar por defecto. Explícito `noVisionModels` o las declaraciones de sólo texto permanecen Autoritativo. Primera parte `deepseek-chat`, `deepseek-reasoner`, y `deepseek-v4-flash` permanecer sidecar-respaldado por defecto; Las rutas Zen no han cambiado y no se probaron en esta actualización.
+
+- Las imágenes pueden provenir de mensajes de usuario, desarrollador y resultado de herramientas, incluidos los de Codex. `view_image`.
+- En la ruta OpenAI (paso de inicio de sesión ChatGPT), cada imagen se envía al modelo de visión configurado sobre el endpoint Responses con el `reasoning.effort` (`low` por defecto), y su La descripción sustituye a la parte de imagen en línea. La ruta Anthropic utiliza el punto final Messages con su propia asignación de presupuesto-pensamiento e ignora esta configuración específica de OpenAI.
+- Para los modelos nativos con metadatos de capacidad conocidos, el razonamiento no soportado se normaliza a la El peldaño soportado más alto en o por debajo del nivel solicitado; si no existe ninguno, el peldaño soportado más bajo se utiliza. Los modelos desconocidos o personalizados siguen siendo permisivos cuando no hay metadatos de capacidad confiables.
+- Las descripciones se ejecutan con concurrencia limitada (3 a la vez, orden de entrada preservado). Contexto de usuario enviado El número de caracteres de la descripción está limitado a 800, y cada descripción inyectada está limitada a 2.000. personajes. La solicitud no envía `max_output_tokens`, que el backend ChatGPT rechaza.
+- Las URL de las imágenes se validan antes del reenvío: las URL de los datos deben usar `png` / `jpeg` / `jpg` / `webp` /
+ `gif`, y los datos de base64 se limitan a aproximadamente 20 MB. Solo `data:` y `https:` Se aceptan esquemas; remoto `https` Las imágenes son obtenidas por el backend OpenAI, no por el proxy.
+- `noVisionModels` coincidencia ignora un estilo Ollama `:size` Sufijo, así que `gpt-oss` La entrada también cubre
+ `gpt-oss:120b`.
+- Si la descripción falla, el modelo recibe un marcador de error de procesamiento corto. Sidecar plan, no se intenta ninguna descripción — la imagen sin procesar es despojada, como se ha descrito anteriormente.)
+- `maxDescriptionsPerTurn` (predeterminado 8) limita las nuevas descripciones por turno de modelo principal. Caché hits y Los duplicados del mismo turno no lo consumen. Exitoso `data:` Las descripciones de las imágenes se almacenan en caché backend, modelo, detalle, bytes de imagen y contexto de mensaje — más el esfuerzo de razonamiento en OpenAI (las teclas Anthropic lo omiten, ya que ese campo se ignora allí); mutable `https:` Las imágenes no son en caché.
+
+Los modelos de la lista de gestión API y del selector del panel de instrumentos que pueden aceptar la entrada de imágenes. Cuando el El backend está disponible, `gpt-5.6-luna` (OpenAI) y `claude-haiku-4-5` (Anthropic) siempre se ofrecen como opciones de línea de base. `PUT /api/sidecar-settings` puede conservar una identificación personalizada/anticipada al catálogo desconocida. Por lo tanto, un Vision Sidecar enrutado explícitamente configurado es utilizable a menos que la evidencia de capacidad demuestre ese modelo no puede aceptar imágenes; esto preserva los sidecares personalizados seleccionados por el operador sin permitir un conocido sidecar de solo texto para recibir bytes de imagen.
+
+```json
+{
+ "visionSidecar": {
+ "enabled": true,
+ "backend": "openai",
+ "model": "gpt-5.6-luna",
+ "reasoning": "medium",
+ "maxDescriptionsPerTurn": 8,
+ "timeoutMs": 45000
+ }
+}
+```
+
+Un modelo está marcado solo con texto por proveedor:
+
+```json
+{
+ "providers": {
+ "ollama-cloud": {
+ "baseUrl": "https://ollama.com/v1",
+ "noVisionModels": ["glm-5.2", "gpt-oss", "qwen3-coder", "deepseek-v4-flash"]
+ }
+ }
+}
+```
+
+
+
+## Controles del panel de control y desactivación
+
+La tarjeta de sidecar Dashboard Visión puede habilitar o deshabilitar el sidecar, configurar
+`maxDescriptionsPerTurn`, y establecer `timeoutMs`Junto con el modelo existente, Backend y controles de razonamiento. Deshabilitar el sidecar no borra los configuración; volver a encenderlo mantiene el modelo anterior, backend, razonamiento, Tiempo de espera y límite.
+
+`PUT /api/sidecar-settings` Acepta los mismos campos. Salida parcial de actualizaciones Omitió las teclas sin cambios. `timeoutMs` usa los límites enteros en entorno de ejecución (1–2147483647 ms).
+
+Cuando cambia el switch de Visión efectivo, guardar también actualiza el catálogo administrado Codex y modelo de caché. Los informes de respuesta `catalogRefreshPending: true` si esa actualización no se completó; Se conserva el modificador guardado y la publicación de catálogo no confirma que un cliente en ejecución lo haya recargado.
+
+La tarjeta del sidecar de búsqueda web tiene la misma forma de control: la primera fila del selector del modelo es
+**Desactivado**. Off hace dos cosas, y la segunda es la razón por la que existe la fila. OpenCodex se detiene interceptar `web_search`, y el Codex La integración escribe CodexEl propio
+`web_search = "disabled"` mode in `~/.codex/config.toml` — porque Codex sigue declarando su Nativo alojado `web_search` herramienta hasta que su propio modo diga lo contrario, y la herramienta un cliente La publicidad es la que el modelo busca. Un operador que quiere un servidor de búsqueda MCP para ser la única ruta de búsqueda necesita ambas mitades; de lo contrario, el modelo sigue llamando a la herramienta nativa.
+
+`web_search` es la clave de Codex con su propio espacio de valor (`disabled`, `cached`, `indexed`, `live`) OpenCodex solo escribe `disabled` mientras el sidecar está apagado, y elimina su línea de marcaje una vez que el sidecar está de vuelta en — un sidecar re-habilitado cuyo cliente todavía tenía la herramienta nativa Apagado no tendría nada que interceptar. La escritura necesita una gestión `~/.codex/config.toml` (`ocx
+sync`); la respuesta de la gerencia lo reporta como `codexWebSearch`y ambas superficies que pueden mostrarlo hacer: la tarjeta de búsqueda web del panel advierte cuando la escritura no sucedió, y `ocx agent sidecar web
+--enabled off` imprime si sucedió. Solo un guardado que mueve el interruptor activa la escritura, por lo que los informes de respuestas "nada ha cambiado" ordinarios `not_requested` y no imprime nada extra. Una raíz
+`web_search` línea el operador fijado a mano se sustituye mientras el sidecar está apagado, ya que dos llaves de raíz del mismo nombre no son válidas TOML. Su texto exacto se registra en el diario Codex y se vuelve a colocar en su lugar cuando el sidecar se enciende de nuevo — incluso para una línea añadida después del diario Se tomó una instantánea, que `ocx restore` Solos no pueden cubrir. El mismo récord es el que aún Reconocer nuestro propio `disabled` línea cuando la aplicación Codex ha reescrito `config.toml` y dejó caer el comentario que nombraba a su dueño.
+
+Todavía puedes establecer `enabled: false` en `config.json` Si prefieres editar el archivo directamente. Anthropic-OAuth búsqueda y descripción de la imagen reutilizar el existente Claude Code OAuth precedente de huellas dactilares, pero debe ser probado en remojo con el cuenta y carga de trabajo previstos.
+
+Ver la [Referencia de configuración](/es/reference/configuration/server/#sidecars) para cada campo.
diff --git a/docs-site/src/content/docs/es/guides/sub-agent-surface.md b/docs-site/src/content/docs/es/guides/sub-agent-surface.md
new file mode 100644
index 00000000000..f664d5ad9a6
--- /dev/null
+++ b/docs-site/src/content/docs/es/guides/sub-agent-surface.md
@@ -0,0 +1,290 @@
+---
+title: "Superficie del subagente (v1 / base / v2)"
+description: "Controle cómo Codex genera y gestiona subagentes en todos los modelos."
+---
+
+
+
+## Qué son los subagentes
+
+Un subagente es un trabajador Codex separado que el agente principal puede crear para una tarea enfocada. Tiene su contexto y herramientas propias, por lo que varias tareas independientes pueden ejecutarse en paralelo. opencodex controla qué La superficie de colaboración Codex expone a esos trabajadores, qué modelos ofrece Codex para ellos y cómo El modelo fallido puede retroceder. No decide cuándo su agente principal debe delegar.
+
+
+
+## Modos
+
+Elige el modo para **Nuevas sesiones**. Las sesiones existentes mantienen la superficie con la que comenzaron.
+
+| Modo | Lo que obtiene Codex | Quién debe escogerlo |
+| --- | --- | --- |
+| **v1** (predeterminado) | Namespaced clásico `spawn_agent`, `send_input`, `resume_agent`, y `close_agent` herramientas. Un engendro puede seleccionar otro modelo directamente. | Cualquier persona que delega a través de los proveedores, especialmente los niños nativos. Esto es lo que una nueva instalación de barcos con. |
+| **base** | Alfileres del modelo ascendente: GPT-5.6 Sol/Terra usan v2, Luna usa v1, y los modelos sin pines siguen a Codex `multi_agent_v2` bandera característica. | Operadores que desean pines por modelo de Codex y cuyos modelos padre e hijo se sientan en el mismo lado del límite del proveedor. Tenga en cuenta que sus pines ponen Sol y Terra en la v2. |
+| **v2** | Plano `spawn_agent`, `send_message`, `followup_task`, `interrupt_agent`, y herramientas de lista de agentes, con sesiones concurrentes. | Los usuarios que desean el flujo de trabajo concurrente más reciente y entienden la herencia del modelo y la limitación de tareas cifradas a continuación. |
+
+En marcha **v2**, una opción **Mantener ChatGPT en v1** interruptor (`keepNativeChatGptOnV1`) hojas Sol/Terra en la superficie v1 para que aún puedan generar Grok o Claude. Los padres nativos ChatGPT cifran v2
+`NEW_TASK` cuerpos; los modelos enrutados no pueden leerlos. Los padres enrutados se quedan en la v2, donde las tareas del niño Son texto plano. OpenCodex desactiva el `multi_agent_v2` para este híbrido porque Codex aplica esa anulación antes de los pines de catálogo por modelo. Esto es un cambio *interior* v2, no a Cuarto modo de catálogo.
+
+:::tip[¿Tienes dudas?]
+Quédate ahí. **v1**, el valor predeterminado enviado. Seleccionar **base** o **v2** solo cuando tus padres y tu hijo modelan sentarse en el mismo lado del límite del proveedor — en ambos, una tarea entregada de un modelo ChatGPT a un Enrutado uno llega cifrado y falla. El panel pregunta antes de cualquiera, y los enlaces a
+[Por qué v1 es el valor predeterminado](/es/guides/subagent-v1-default/).
+:::
+
+
+
+## Interruptores de modelo y compactación de chat lateral
+
+Codex puede compactar el historial heredado antes del primer turno de un chat lateral o después de un cambio de modelo. Un disparador compara los modelos anteriores y de destino. `comp_hash` marcadores de compatibilidad: cuando ambos están presentes y difieren, Codex se compacta incluso si el historial se ajusta al contexto del destino.
+
+OpenCodex representa compatibilidad desconocida para modelos enrutados como `comp_hash: null`, en lugar de Inventando un `"opencodex"` marcar o copiar uno de una plantilla nativa. Catálogo reconstruye también claro esos marcadores antiguos en las filas de OpenCodex retenidas durante una interrupción de detección del proveedor. modelos nativos y explícitos alias Codex-forward mantienen sus marcadores ascendentes, por lo que la incompatibilidad nativa genuina los cheques siguen siendo aplicables. Este comportamiento es independiente de la superficie del subagente v1/v2 y del modelo. configurado para realizar la compactación.
+
+Todavía se aplica el contexto normal y la compactación de límite token. Este cambio elimina el sintético Desajuste de hash; no selecciona qué mensajes visibles hereda un chat lateral ni restaura el original mensajes de un contexto ya compactado. El soporte de contenido del proveedor sigue siendo una restricción separada.
+
+
+
+## Entrada de tarea externa
+
+Codex puede entregar la entrada inicial o el seguimiento de una tarea en un sobre con forma de resultado Sin un `call_id`. En las rutas traducidas, OpenCodex reconoce solo la información completa.
+`function_call_output` forma con nonblank `id`, `name` y `namespace` y apoyado salida de texto/imagen, luego lo trata como un turno de usuario. Esto también inicia la nueva conversación. límite durante la continuación y borra el razonamiento pendiente del giro anterior. La guía del desarrollador generado se coloca antes de la tarea actual en ambos analizados mensajes e historial en bruto guardado, preservando el mismo orden cuando se reproduce ese historial.
+
+Los sobres mal formados, vacíos, opacos o incompletos aún fallan en la validación. Herramienta real Los resultados mantienen sus requerimientos `call_id`; el paso nativo y la compactación enrutada (portátil) aplican el mismo mapeo de turnos de usuario a sus cuerpos crudos; el nativo directo `/responses/compact` forward mantiene su manejo de entrada en bruto existente. Véase [el contrato del adaptador](/es/reference/adapters/#external-task-input-on-translated-responses-routes).
+
+
+
+## Cómo funciona
+
+El modo seleccionado controla el `multi_agent_version` campo en cada entrada del catálogo Codex lee:
+
+- **v1** sellos `multi_agent_version = "v1"` en cada modelo.
+- **base** restaura los pines de de origen. Las entradas no marcadas siguen al nativo `multi_agent_v2` bandera característica.
+- **v2** sellos `multi_agent_version = "v2"` en cada modelo, excepto cuando **Mantener ChatGPT en v1** está habilitado: ChatGPT-nativo filas estancia `"v1"` y las filas enrutadas o combinadas permanecen `"v2"`.
+
+opencodex aplica esto como el pase final tanto a la `/v1/models` catálogo y el catálogo sincronizado en el disco. Es por eso que un cambio de modo afecta a las sesiones recién creadas de App, CLI y TUI de manera consistente.
+
+Para una lista v2, la elegibilidad tiene tres estados: una entrada sellada `"v2"`explícitamente establecido a `null`, o Con no `multi_agent_version` El campo es elegible. Una auténtica `"v1"` El pin está excluido porque dice que el modelo pertenece a la otra superficie de colaboración.
+
+
+
+## Modelo de delegación y esfuerzo
+
+El panel de control **Delegación de subagentes** controla tres configuración relacionadas:
+
+- `injectionModel` es el modelo de trabajador preferido nombrado en la guía opencodex.
+- `injectionEffort` es el opcional `reasoning_effort` para solicitar dicho modelo.
+- `injectionPrompt` reemplaza el texto de guía v2 incorporado.
+
+¿No sabes a qué modelo delegar? **Sugerir** al lado del modelo de delegación pide un breve descripción de la obra Codex generalmente manos fuera, tamaños con una llamada a su modelo predeterminado Codex, y propone el modelo más barato suficiente y un esfuerzo de la lista que ofrece el recolector, con el razonamiento y las señales que lo moverían hacia arriba o hacia abajo. Nada cambia hasta que tú eliges
+**Utilice este**, que ahorra exactamente como elegir el modelo y el esfuerzo a mano. Los niveles provienen de
+`codexRoleTiers` o precio, como en [función auto-asignación](/es/guides/integrations/#auto-assign).
+
+`multiAgentGuidanceEnabled` por defecto a encendido y es el conmutador maestro para la guía de autoría opencodex en ambas superficies. Apagarlo suprime tanto el bloque de designación v2 como el texto proactivo v1.
+
+Para las solicitudes Responses sin estado en forma de matriz, opencodex coloca la guía generada después del líder Metadatos del sistema y del desarrollador, incluido el desarrollador `additional_tools`Antes de la conversación entrada. Declarativo `previous_response_id` Las continuaciones reutilizan la guía etiquetada solo cuando coincide con la última elemento etiquetado en su prefijo de repetición de confianza. Otra orientación generada se reutiliza cuando se genera una dirección exacta. elemento desarrollador existe en ese prefijo. Cuando la guía cambia, el protocolo de la herramienta líder permanece primero y el reemplazo se inserta antes de la entrada conversacional actual.
+
+Estas son instrucciones para el agente principal, no un router de generación del lado del proxy. En v2, una bifurcación de historia completa hereda el modelo padre y rechaza las anulaciones de modelo o esfuerzo. Por lo tanto, la guía le dice a Codex que uso `fork_turns: "none"` (o un conteo de giros parcial positivo, como `"3"`) al pasar `model` o
+`reasoning_effort`, y para hacer que el mensaje de tarea sea autónomo.
+
+Personalizado `injectionPrompt` El texto puede usar los cuatro marcadores de posición:
+
+| Marcador de posición | Reemplazado por |
+| --- | --- |
+| `{{model}}` | El modelo preferido efectivo para esta solicitud. Un nativo desnudo `injectionModel` es calificado por cuenta solo cuando la solicitud se dirige a un selector de cuenta explícito. Un valor desnudo no resuelto o ambiguo se convierte en una cadena vacía; un id explícito no resuelto calificado o encaminado permanece sin cambios. |
+| `{{effort}}` | El configurado `injectionEffort`o una cadena vacía |
+| `{{roster}}` | La lista resuelta de selector visible y superficie compatible |
+| `{{fallback}}` | La guía de respaldo global configurada |
+
+La guía v2 incorporada tiene un presupuesto de 700 caracteres. Si se excede el presupuesto, opencodex cae primero la lista en lugar de truncar las instrucciones básicas de generación. Solo fuegos de guía incorporados cuando se resuelve un modelo preferido, una lista elegible o una cadena de reserva. Un configurado `injectionModel`
+es suficiente para representar un mensaje personalizado; si un valor desnudo no puede resolverse de forma única, `{{model}}`
+se expande a una cadena vacía.
+
+En v1, opencodex inyecta la misma orientación de delegación proactiva que el preajuste recomendado v2 solamente en `max` o `ultra` esfuerzo. Solo cambia el desencadenante de delegación: no se solicita delegación por separado necesario; las instrucciones del usuario, la autoridad, el alcance de la tarea y las reglas de herramienta de colaboración aún se aplican. No agrega un modelo preferido, una lista, una lista de reserva o un mensaje personalizado en la v1. En el modo de código Codex, opencodex ve las herramientas v1 cuando `exec` La descripción de la herramienta los enumera. Cuándo
+Codex los defiere para la búsqueda de herramientas, lo que hace para cada opencodex modelo de catálogo, opencodex
+se basa en la lista de herramientas diferidas Codex El escritorio envía con la conversación; si esa lista
+`multi_agent_v1`, se añade la orientación proactiva. Un cliente Codex que no envía la lista da opencodex no muestra que v1 esté disponible, por lo que la guía no se agrega allí.
+
+El default-off `syncCodexSubagentDefaults` La opción está separada de la orientación. Cuando opencodex posee El enrutamiento, sincronización o reinicio Codex activo puede escribir los valores seleccionados como propiedad del marcador
+`[agents] default_subagent_model` y `default_subagent_reasoning_effort` entradas en Codex TOML. opencodex actualiza o elimina solo los campos que llevan sus marcadores. Si cualquiera de los campos objetivo es propiedad del usuario, el par se deja sin cambios en lugar de parcialmente escrito; ambiguo TOML se rechaza sin un Escribe. Los administradores de proveedores externos y el enrutamiento raíz propiedad del usuario también siguen siendo autorizados.
+
+
+
+## Cadenas de fallback
+
+Para un trabajador generado, opencodex crea este orden de prioridad:
+
+1. El modelo primario solicitado.
+2. Una cadena por modelo de `subagentModelFallbackByModel` en la configuración opencodex, con clave El modelo primario solicitado.
+3. El Global `subagentModelFallback` lista en la configuración opencodex.
+
+Las cadenas de reserva por función pertenecen a la configuración opencodex, no a la
+`$CODEX_HOME/agents/*.toml`. Codex 0.146+ estrictamente deserializa los archivos de rol del agente y rechaza `model_fallback` como un campo desconocido, que omite toda la definición de rol (1190 libras esterlinas). opencodex todavía puede leer un legado `model_fallback` línea de la TOML para Compatibilidad con versiones anteriores, pero `ocx doctor` advierte al respecto y Codex sí ignorará El rol afectado.
+
+Los identificadores de modelos duplicados se eliminan mientras se conserva la primera aparición. Durante la selección, opencodex omite candidatos que están deshabilitados, no enrutables, respaldados por un proveedor discapacitado, marcados como insalubres, dentro de un tiempo de reutilización, falta una cuenta Codex agrupada utilizable o más allá del umbral de cuota configurado. Las sondas de disponibilidad se almacenan en caché para `subagentModelFallbackPollMs` (60 segundos por defecto).
+
+Fallback no hace legibles las tareas cifradas incompatibles. Cuando la tarea hijo está encriptada para ChatGPT, la selección está restringida a los objetivos nativos canónicos ChatGPT y a la clave directa Responses rutas explícitamente confiables con `allowEncryptedV2AgentTasks: true`Aunque otro modelo externo aparece antes en la cadena. Los combos siguen siendo canónicos.
+
+
+
+## Entrega de tareas cifradas v2
+
+Codex puede enviar una tarea hija nativa a enrutada v2 solo como backend encriptado `encrypted_content`. Eso carga útil puede ser leída por el backend nativo ChatGPT, pero no por un proveedor externo. Este es el conocidos [Limitación 92](https://github.com/lidge-jun/opencodex/issues/92).
+
+opencodex falla de forma segura en lugar de reenviar una tarea vacía o ilegible:
+
+- Una ruta no nativa directa no elegible devuelve HTTP 400 con
+ `error.code = "unreadable_encrypted_agent_task"` y no hace eco del texto cifrado. Un elegible proveedor directo de llave-auth Responses que explícitamente opta por
+ `allowEncryptedV2AgentTasks: true` recibe el texto cifrado opaco y evita este error.
+- Un combo primero considera los objetivos canónicos nativos ChatGPT. Si no hay ninguno disponible o sus intentos Cuando se agotan, la recuperación habilitada puede hacer que la tarea sea legible para un destino enrutado disponible. Sin una recuperación exitosa y un objetivo elegible, el texto cifrado ilegible nunca se reenvía.
+- Una tarea de texto plano legible mantiene la ruta normal y el comportamiento de reserva.
+
+Las opciones de recuperación son seleccionar un hijo nativo ChatGPT, confiar explícitamente en una clave directa-auth Responses relé que puede consumir la carga útil opaca, agregar un objetivo nativo ChatGPT al combo, usar v1 para delegación de proveedor heterogéneo, o reenviar la tarea como texto sin formato v2 `agent_message` contenido cuando Tú controlas a la persona que llama.
+
+Un experimento, desactivado por defecto `agentTaskRecovery` La opción puede recuperar este nativo específico a-enrutado forma a través de un paso Responses sin procesar a la ChatGPT fija `/responses` Endpoint usando la forma de credencial entrante utilizada por el canónico `openai` proveedor con `authMode: "forward"`. La recuperación solo está disponible mientras el proxy está vinculado a loopback. Nunca sustituye a API-key autenticación, otra credencial de proveedor u otra cuenta Codex. Solo `authorization`, a juego
+`chatgpt-account-id`, `originator`, y opcional `openai-beta`/`user-agent` se envían metadatos;
+`content-type` y `accept` se generan localmente, y ninguna otra cabecera de llamada cruza el límite. Consume la cuota, agrega latencia, retiene brevemente el texto plano recuperado en una caché limitada en memoria, y depende del comportamiento de backend ChatGPT indocumentado. Como un modelo devuelve el texto recuperado, La fidelidad byte por byte no está garantizada. Rechaza las llamadas proxy genéricas / API-key. Falló la recuperación antes de que cualquier intento nativo regrese
+`unreadable_encrypted_agent_task`Después de que los intentos nativos han fallado, su último error se mantiene. Véase
+[Configuración del agente: recuperación de tareas cifradas v2](/es/reference/configuration/agents/#encrypted-v2-task-recovery)
+para el límite de confianza completo y la configuración.
+
+La misma recuperación también cubre un hilo en vivo cambiado de un modelo nativo ChatGPT a uno enrutado. Tal hilo reproduce un mensaje de agente cifrado en cada turno posterior, así que antes
+[#4089](https://github.com/lidge-jun/opencodex/issues/4089) fracasó a cada paso y el La única solución era comenzar un nuevo hilo. Ese cambio de turno no es un engendro, por lo que el enrutado path ya no restringe la recuperación a los turnos de niño generados; la recuperación combinada aún lo hace.
+
+El enrutamiento combinado prefiere un destino canónico nativo seleccionable ChatGPT para las tareas cifradas. Si ninguno es utilizable, o los intentos de autorización nativa se han agotado, una recuperación hacer que la tarea sea legible para un destino enrutado disponible. Toda la confianza en la recuperación y la no persistencia Los protectores anteriores aún se aplican; un objetivo nativo configurado pero deshabilitado o que se enfríe no bloquea este La cancelación nunca se convierte en un error de tarea ilegible.
+
+
+
+## Rechazado el historial cifrado
+
+Un servidor Responses ascendente puede rechazar partes cifradas en funciones/herramientas personalizadas anteriores salida o `agent_message` contenido con `Encrypted function output content could not be decrypted or decoded.`. Antes cualquier salida se confirma, opencodex sustituye esas piezas con `[encrypted content omitted]`
+y reconstruye la solicitud una vez. El contenido legible circundante permanece intacto; el El contenido omitido no es descifrado ni recuperado por este reintento.
+
+Si la solicitud reconstruida recibe otra SSE vacía `error` seguido por EOF, ambos relés Los modos preservan el mensaje de error en `response.failed` terminal en lugar de informar
+`adapter_eof`. Otros de origen `response.failed` los eventos siguen siendo errores SSE. Esta historia la recuperación no cambia las restricciones de entrega de tareas v2 cifradas descritas anteriormente.
+
+
+
+## Cambiar el modo
+
+### GUI
+
+- **Panel** → primera celda de estado: elija **v1**, **base**, o **v2**.
+- **Modelos** → control segmentado de la fila superior: elija el mismo modo global.
+- **Panel** → **Delegación de subagentes**: establece el modelo/esfuerzo de guía y la opción de opt-in por defecto nativa.
+- **Subagentes**: elija y ordene la lista y configure la cadena de reserva global.
+
+### CLI
+
+Uso `ocx v2` para la superficie de colaboración y la configuración de características nativas:
+
+```bash
+ocx v2 status
+ocx v2 mode v1
+ocx v2 mode default
+ocx v2 mode v2
+ocx v2 threads 8
+```
+
+Uso `ocx agent` para configuración de delegación, lista, límite de esfuerzo y reserva:
+
+```bash
+ocx agent status
+ocx agent injection set --model anthropic/claude-sonnet-5 --effort xhigh
+ocx agent injection suggest "read-only searches across the repo" --apply
+ocx agent subagents set gpt-5.6-sol,anthropic/claude-sonnet-5
+ocx agent fallback set gpt-5.6-luna,xai/grok-4.5 --poll-ms 60000
+ocx effort set --subagent max
+```
+
+El nivel superior `ocx effort` comando es el punto de entrada canónico para la inspección de esfuerzo y tapas (e.g. `ocx effort high`, `ocx effort status`, `ocx effort clear`), con `ocx agent effort` Se conserva como una ruta compatible con versiones anteriores. Observe que: `ocx effort clear` elimina los caps activos del agente principal y el subagente al mismo tiempo que deja la delegación `injectionEffort` sin tocar (utilizar `ocx effort set --injection -` o `ocx agent injection set --effort -` ej., para eliminar el esfuerzo de inyección).
+
+Pase `-` Para borrar un nullable `ocx agent injection` valor, o usar el valor relevante `clear` Acción por a lista o lista de reserva. Ver la [Referencia CLI](/es/reference/cli/) para todas las familias de mando.
+
+### API
+
+La gestión API expone coincidencia `GET` y `PUT` puntos finales:
+
+| Punto de conexión | Administra |
+| --- | --- |
+| `/api/v2` | Modo de superficie, bandera de función nativa y configuración de hilos |
+| `/api/injection-model` | Modelo preferido, esfuerzo, prompt personalizado, orientación y sincronización predeterminada nativa |
+| `/api/effort-caps` | Límites máximos de esfuerzo del agente principal y del subagente |
+| `/api/subagent-models` | Lista de pedidos de hasta cinco modelos |
+| `/api/subagent-model-fallback` | Orden de reserva global e intervalo de encuesta |
+
+Por ejemplo:
+
+```bash
+curl -X PUT http://localhost:10100/api/v2 \
+ -H 'Content-Type: application/json' \
+ -d '{"multiAgentMode":"v2"}'
+
+curl -X PUT http://localhost:10100/api/injection-model \
+ -H 'Content-Type: application/json' \
+ -d '{"model":"anthropic/claude-sonnet-5","effort":"xhigh"}'
+```
+
+## FAQ
+
+
+
+### ¿La elección de un modelo de delegación obliga a Codex a generarlo?
+
+No. La guía puede recomendar un modelo, y la sincronización nativa predeterminada puede proporcionar un Codex predeterminado, pero el El agente principal todavía decide si delegar.
+
+
+
+### ¿Por qué mi hijo v2 usó el modelo de padre?
+
+Un fork v2 de historia completa hereda el modelo padre. Usar un engendro que establece `fork_turns` a `"none"` o un recuento parcial positivo antes de pasar una anulación de modelo o esfuerzo.
+
+
+
+### ¿Por qué falta un modelo configurado en la lista de v2?
+
+Puede estar escondido por el selector, fuera del límite de visualización de cinco modelos, falta en el catálogo o está anclado. a v1. A `"v2"`, `null`, o el valor de superficie ausente es elegible; un `"v1"` El pin no lo es.
+
+
+
+### ¿Los cambios de modo afectan a las sesiones de running?
+
+No. Inicie una nueva sesión Codex después de cambiar el modo. Si un host de aplicación de larga duración todavía muestra rancio catalogar estado, ejecutar `ocx sync` y reinicie esa superficie Codex.
+
+
+
+### ¿Qué sucede cuando opencodex no puede confiar en el catálogo?
+
+opencodex compara el catálogo de modelos en disco con la hora de inicio de cada app-servidor Codex propiedad por el usuario actual, produciendo uno de los cuatro estados:
+
+| Estado | Significado | v2 Orientación |
+|---|---|---|
+| `fresh` | Todos los servidores de aplicaciones comenzaron después de que se escribió el catálogo | Orientación completa: modelo preferido, plantel, fallbacks |
+| `not_running` | No se detectó ningún servidor de aplicaciones | Orientación completa |
+| `stale` | Al menos un servidor de aplicaciones precede al catálogo | **Sin guía de modelo de autoría opencodex** |
+| `unknown` | La comparación no se pudo hacer | **Sin guía de modelo de autoría opencodex** |
+
+Porque `stale` y `unknown`, opencodex retiene sus propias reclamaciones derivadas del disco — modelo preferido, lista, — porque el Codex en ejecución puede no ser capaz de generar lo que el disco Catálogo de anuncios.
+
+Lo hace **no** indicar al modelo que deje de configurar `model` o `reasoning_effort`. Esta observación es global en todos los servidores de aplicaciones para el usuario, mientras que una solicitud entrante no lleva ninguna identidad de remitente, por lo que un proceso rancio no puede atribuirse a la petición que tenemos delante. Prohibir las anulaciones en ese base bloquearía las opciones activas `spawn_agent` herramienta anuncia legítimamente, para una sesión Puede ser fresco. El esquema de la herramienta activa sigue siendo autoritario.
+
+`unknown` No es sinónimo de `stale`. Significa que la comparación en sí falló — un catálogo ilegible timestamp, un tiempo de inicio de proceso ilegible o una enumeración de proceso fallido — y se informa Por separado por `ocx doctor`. `stale` borra solo después de que cada app-server Codex detectado se inicie después el catálogo final escribir; no necesariamente claro `unknown`.
+
+En Windows, esta comprobación de aviso utiliza el descubrimiento asíncrono de PowerShell/CIM en la ruta de solicitud v2. Las comprobaciones en frío simultáneas comparten un descubrimiento en vuelo. Los estados observados se almacenan en caché durante cinco segundos; an `unknown` el fallo se almacena en caché durante solo 250 milisegundos, por lo que un error transitorio CIM se reintenta rápidamente. A lenta o defectuosa consulta CIM puede retrasar o suprimir solo la guía del modelo OpenCodex-authored; no bloquear el bucle de eventos Bun, `/healthz`o tráfico proxy no relacionado. Explícito CLI/ciclo de vida del servicio Las operaciones retienen el colector de procesos síncrono, cerrado por error, porque pueden señalizar procesos.
+
+Solo un cambio real cuenta. Una sincronización cuyo resultado es byte-idéntico al catálogo ya en disco deja el archivo intacto, por lo que reiniciar el proxy o volver a sincronizar un conjunto de modelos sin cambios no hacer que un Codex en ejecución se vea obsoleto.
+
+
+
+### Esfuerzo de razonamiento
+
+`injectionEffort` afecta solo a la orientación del trabajador delegado y, cuando está explícitamente habilitada, a la Codex nativa sub-agentes predeterminados. No cambia el esfuerzo de la sesión de padres. `ultra` es un top orientado al cliente nivel que Codex convierte en `max`; opencodex luego mapea o fija el valor para el proveedor seleccionado.
+
+
+
+### Cap. de contexto
+
+El límite de contexto del modelo es independiente del modo de subagente. Configurarlo en la página Modelos; nativo Los modelos OpenAI conservan sus ventanas de contexto real.
+
+El experimental `plaintextV2AgentMessages` campo no está establecido en una configuración nueva y se ejecuta solo cuando se establece a `true`. La persona que llama debe usar el cable Responses, y el destino final debe usar
+`adapter: "openai-responses"`, `authMode: "forward"`y la base exacta URL
+`https://chatgpt.com/backend-api/codex`. OpenAI Proveedores de clave API, pasarelas compatibles personalizadas, Se excluyen las rutas a otros proveedores y las personas que no llaman a Responses. Para un nuevo nativo elegible ChatGPT v2 tool call, la opción asigna alias con alcance de solicitud al espacio de nombres y tres reservados nombre de la herramienta de mensajes, elimina el marcador del mensaje y restaura las identidades originales en el respuesta. Se maneja
+`spawn_agent`, `send_message`, y `followup_task` y no añade ninguna solicitud de recuperación. HTTPS permanece cifrado, pero el texto de la tarea se puede conservar en el historial de Codex, las solicitudes del proveedor de rutas y las solicitudes locales respuesta/estado de depuración. El texto cifrado existente no cambia, y la opción depende de los documentos indocumentados. Comportamiento de ChatGPT y Codex. Véase
+[Configuración del agente: Mensajes de agente de texto sin formato v2](/es/reference/configuration/agents/#plaintext-v2-agent-messages). Si una respuesta ChatGPT transmitida no contiene ningún tipo de contenido, o una que no es `application/json`
+ni un flujo de eventos reconocible, opencodex comprueba un prefijo de evento Responses limitado antes de restaurar los nombres de las herramientas de mensajes. Un `application/json` respuesta toma la ruta JSON limitada en su lugar. Los Sonda espera en la mayoría `stallTimeoutSec` por su prefijo, y un cuerpo que permanece en silencio, no reconocido, o ilegible falla cerrado en lugar de llegar a Codex como una respuesta exitosa.
diff --git a/docs-site/src/content/docs/es/guides/subagent-v1-default.md b/docs-site/src/content/docs/es/guides/subagent-v1-default.md
new file mode 100644
index 00000000000..95994cffcf1
--- /dev/null
+++ b/docs-site/src/content/docs/es/guides/subagent-v1-default.md
@@ -0,0 +1,126 @@
+---
+title: "Por qué v1 es la superficie de subagente predeterminada"
+description: "Qué rompe la limitación de tareas cifradas de v2, por qué OpenCodex ahora envía v1 y qué hacer si aún desea v2."
+---
+
+OpenCodex se instala con la superficie del subagente **v1**. El panel de control, modelos y subagentes Todas las páginas te piden que confirmes antes de moverte a **base** o **v2**, y esta página es lo que links de confirmación. El CLI no aparece.
+
+La razón es estrecha y específica: en v2, una tarea ChatGPT-modelo nativo a un modelo enrutado no puede ser leído por el modelo enrutado. Esa es la única forma más común en que las personas delegan —
+a GPT padre engendrando a Grok, Claude o GLM niño — y en v2 falla cada vez.
+
+
+
+## Lo que ves cuando sucede
+
+El engendro es rechazado en lugar de producir silenciosamente una tarea infantil vacía:
+
+```json
+{
+ "error": {
+ "code": "unreadable_encrypted_agent_task",
+ "message": "Routed V2 worker task is encrypted for the native ChatGPT backend and cannot be read by the selected provider. Use plaintext V2 agent-message delivery or select a native ChatGPT model."
+ }
+}
+```
+
+HTTP 400, y el texto cifrado nunca se repite. El fracaso es deliberado: enviar un Una carga útil ilegible le daría al niño una instrucción vacía y una respuesta confiadamente incorrecta.
+
+
+
+## Por qué sucede
+
+
+
+En v1, el padre emite la tarea del niño como texto plano. OpenCodex lo lee, lo enruta y El niño recibe algo sobre lo que puede actuar.
+
+En v2 el padre emite la tarea como `encrypted_content`, acuñado por el backend ChatGPT. La clave se queda en ese backend. OpenCodex nunca lo tuvo, por lo que no hay nada para un proxy para descifrar y nada para reescribir — el valor es realmente texto cifrado, no texto plano detrás de una bandera. Por eso Esto es estructural en lugar de una configuración incorrecta, y por qué ninguna configuración del lado del proxy puede solucionarlo.
+
+Tres topologías no se ven afectadas, lo cual vale la pena señalar porque explica la forma de la estructura. Fracaso en lugar de que el fracaso sea misterioso
+
+| Topología | v1 | v2 |
+| --- | --- | --- |
+| ChatGPT padre a hijo enrutado | obras | **falla** |
+| Padre encaminado al hijo encaminado | obras | obras |
+| ChatGPT padre a hijo ChatGPT | obras | funciona — el backend puede descifrar lo que acuñó |
+
+El backend siempre puede leer su propio texto cifrado. Sólo se rompe el cruce de fronteras.
+
+
+
+## ¿Está fijado upstream?
+
+Todavía no, y no para la mitad de lo que importa. Combinación ascendente
+[openai/códex : 35845](https://github.com/openai/codex/pull/35845), lo que añade soporte para mensajes de colaboración de texto sin formato —, pero ese es el *recibir* lado. Maneja el texto plano que ya fue producido; no hace que un padre OpenAI lo produzca.
+
+El lado de envío sigue abierto:
+[#36376](https://github.com/openai/codex/issues/36376), reproducido a través de CLI 0.146 a 0.151 en Windows, macOS y Linux y [#37197](https://github.com/openai/codex/issues/37197), que establece la pieza faltante directamente — una política de entrega del lado de envío. Tampoco tiene un mantenedor compromiso o un ETA.
+
+OpenCodex registró la consecuencia como [#92](https://github.com/lidge-jun/opencodex/issues/92), cerrado como no está previsto: nada en este repositorio puede solucionarlo, por lo que el problema es un puntero a la upstream trabajo en lugar de una tarea de espera en un mantenedor aquí.
+
+
+
+## Lo que los tres modos hacen ahora
+
+| Modo | Superficie | Cuándo elegirlo |
+| --- | --- | --- |
+| **v1** (predeterminado) | Cada modelo anuncia las herramientas de generación clásicas. Una generación puede nombrar a otro modelo directamente. | Cualquier persona que delega a través de proveedores. Este es el valor predeterminado enviado. |
+| **base** | Alfileres de modelo ascendente: Sol y Terra usan v2, Luna usa v1, los modelos sin pines siguen la propia bandera de Codex. | Desea la superficie por modelo prevista de Codex y solo delega dentro de un proveedor. |
+| **v2** | Cada modelo anuncia las herramientas concurrentes planas. | Desea que el modelo de sesión concurrente más nuevo y su padre e hijo estén en el mismo lado del límite. |
+
+base aparece en segundo lugar en lugar de primero porque sus pines ponen Sol y Terra — los dos modelos más personas delegan *Desde* — en v2. base no es un ajuste medio para este problema; para un ChatGPT-a-enrutado engendra se comporta como v2.
+
+
+
+## Si ya ha elegido base o v2
+
+Nada ha cambiado para ti. La actualización a una versión que envía este valor predeterminado no reescribe un configuración existente; el panel de control eleva el aviso una vez y espera una respuesta.
+
+- **Continuar** mantiene el modo en el que estás y deja de preguntar.
+- **Cambiar a v1** aplica v1 y deja de preguntar.
+
+Cualquiera de las respuestas queda registrada y el aviso no regresa. Desestimarlo sin responder Lo deja para la próxima vez que abra el panel de control.
+
+Los cambios de modo se aplican a **nuevo** Sesiones Codex. Iniciar una nueva sesión después de elegir; si se El anfitrión de la aplicación todavía muestra la superficie antigua, ejecuta `ocx sync` Reinicia esa superficie.
+
+
+
+## Si quieres v2 de todos modos
+
+Cuatro rutas, en el orden en que la mayoría de la gente debería probarlas:
+
+1. **Mantenga ChatGPT en la v1.** Dentro de v2, el `keepNativeChatGptOnV1` switch deja Sol y Terra encendidos la superficie v1 para que aún puedan generar Grok o Claude, mientras que los padres enrutados obtienen v2. Este es el Lo más parecido a tener ambos.
+2. **Delegar dentro de un proveedor.** Un padre enrutado que genera un hijo enrutado es texto plano en v2 y funciona normalmente.
+3. **Confíe en un relé Responses de clave directa.** Un proveedor con el que marcas explícitamente
+ `allowEncryptedV2AgentTasks: true` recibe la carga útil opaca en lugar de la 400. Sólo haz esto para un destino que sabes que puede consumirlo.
+4. **Habilitar `agentTaskRecovery`.** Experimental y apagado por defecto. Recupera cifrado ilegible
+ `NEW_TASK`, `MESSAGE`, `FOLLOWUP_TASK`, y `FINAL_ANSWER` los elementos a través del backend ChatGPT, en el costo de la cuota, la latencia y una dependencia del comportamiento indocumentado; recuperación combinada sigue siendo limitado a los giros de niño generado, y fragmentos divididos-token permanecen sin soporte.
+
+Véase [Interfaz de subagentes](/es/guides/sub-agent-surface/) para la mecánica completa de cada uno, y
+[Configuración del agente](/es/reference/configuration/agents/) para los propios configuración.
+
+
+
+## Cuando esta página desaparece
+
+Cuando una versión upstream hace que un padre nativo ChatGPT emita una tarea secundaria enrutada como texto plano, la razón del defecto desaparece con él. En ese momento el valor predeterminado se mueve de nuevo a la base, el La confirmación deja de aparecer, y esta página se convierte en historia en lugar de consejo.
+
+
+
+## Cambiar el modo
+
+Panel de control, modelos y subagentes todos llevan el mismo switch v1/base/v2, y los tres preguntan antes base o v2. Desde el CLI:
+
+```bash
+ocx v2 status
+ocx v2 mode v1
+```
+
+El CLI no aparece. Es la misma configuración, así que elíjala sabiendo lo que describe esta página.
+
+
+
+## Límite simultáneo por hijo
+
+En **Modelos → Configuración del modelo**, el control de límite de subagente establece el número máximo de Agentes secundarios, excluyendo el agente primario. Se encuentra disponible en v1, base y v2, incluyendo modo híbrido con el indicador global v2 desactivado. Elija el modo de superficie por separado de este límite.
+
+Elevar la tapa permite más niños; no los crea automáticamente ni garantiza una mayor velocidad ejecución. Iniciar una nueva sesión Codex después de cambiar el límite. Si un host de aplicación de larga duración sigue utiliza el límite anterior, reinicie ese host.
diff --git a/docs-site/src/content/docs/es/guides/video-bridge.md b/docs-site/src/content/docs/es/guides/video-bridge.md
new file mode 100644
index 00000000000..31aec575c66
--- /dev/null
+++ b/docs-site/src/content/docs/es/guides/video-bridge.md
@@ -0,0 +1,93 @@
+---
+title: "Puente de video"
+description: "Generar vídeos con Grok Imagine Video a través de un modelo que no sea OpenAI."
+---
+
+
+
+## Descripción general
+
+El puente de vídeo le permite utilizar xAI de Grok Imagine Generación de vídeo a través de cualquier modelo que no sea OpenAI dirigido por opencodex. Cuando se activa, un `video_gen` La herramienta se inyecta en la conversación. El modelo lo llama como cualquier herramienta de función; opencodex intercepta la llamada, envía una generación de video trabajo en xAI, sondeos hasta su finalización y descarga el resultado.
+
+
+
+## Requisitos previos
+
+- Un `xai` entrada del proveedor con un **Clave API** (`ocx login xai` solo no es suficiente — el puente de vídeo requiere autenticación clave, no OAuth)
+- Un modelo que no sea OpenAI como su proveedor de rutas (e.g. Anthropic Claude, Google Gemini
+- opencodex configurado para enrutarse a través del proveedor que no es OpenAI
+
+> **⚠ Se requiere clave de proveedor:** El puente de vídeo solo se activa cuando el `xai` proveedor utiliza > API clave de autenticación. Añade esto a tu configuración:
+>
+> ```json
+> {
+> "providers": {
+> "xai": { "adapter": "openai-chat", "apiKey": "xai-…", "authMode": "key" }
+> }
+> }
+> ```
+>
+> Si te has embarcado vía `ocx login xai` (OAuth), el proveedor permanece en `authMode: "oauth"`
+> y el puente en silencio no se activarán. Establecer `XAI_API_KEY` en el medio ambiente **o**
+> código duro de la clave como se muestra arriba.
+
+
+
+## Configuración
+
+Añadir `videoBridgeEnabled: true` a su `images` config:
+
+```json
+{
+ "images": {
+ "bridgeEnabled": true,
+ "videoBridgeEnabled": true,
+ "videoBridgeModel": "grok-imagine-video",
+ "videoMaxRounds": 2,
+ "videoTimeoutMs": 300000
+ }
+}
+```
+
+| Opción | Predeterminado | Descripción |
+|--------|---------|-------------|
+| `videoBridgeEnabled` | `false` | Interruptor maestro. Debe estar explícitamente habilitado. |
+| `videoBridgeModel` | `"grok-imagine-video"` | ID de modelo de vídeo xAI. |
+| `videoMaxRounds` | `2` | Max video-gen rondas antes de la respuesta final forzada. |
+| `videoTimeoutMs` | `300000` (5 min) | Tiempo de espera por video, incluida la votación. |
+
+
+
+## Cómo funciona
+
+1. opencodex detecta un modelo enrutado no-OpenAI con `videoBridgeEnabled: true`
+2. Un sintético `video_gen` herramienta de función se inyecta en la conversación
+3. Cuando el modelo llama `video_gen`, opencodex envía un trabajo a xAI `/videos/generations`
+4. El puente sondea el estado del trabajo cada 5-15 segundos, enviando mensajes de latido para mantener viva la transmisión
+5. Cuando el video está listo, se descarga en el directorio de artefactos
+6. La ruta local del archivo se devuelve al modelo como resultado de la herramienta
+
+
+
+## Parámetros soportados
+
+Los `video_gen` herramienta acepta:
+
+| Parámetro | Tipo | Alcance | Descripción |
+|-----------|------|-------|-------------|
+| `prompt` | cadena | requerido | Indicación detallada de generación de vídeo |
+| `duration` | entero | 1-15 | Duración del vídeo en segundos |
+| `resolution` | cadena | `"480p"`, `"720p"` | Resolución de vídeo |
+| `aspect_ratio` | cadena | 7 relaciones | `16:9`, `9:16`, `1:1`, `4:3`, `3:4`, `3:2`, `2:3` |
+
+
+
+## Limitaciones
+
+- **Solo xAI**: La generación de videos solo está disponible a través de xAI's Grok Imagine Video API
+- **Asíncrono**: La generación de video toma 30-120 segundos
+- **Coste**: La generación de vídeo es una función xAI pagada (~$0,05/seg. 480p, ~$0,07/seg. 720p)
+- **Un video por llamada**: Cada uno `video_gen` llamada produce un video
+- **Coexiste con Image Bridge**: Ambos puentes se pueden habilitar simultáneamente
+- **Prioridad de búsqueda web**: Cuando un sidecar de búsqueda web está activo durante un turno (no`runTurn` adaptador), el puente de vídeo se salta — los dos no pueden ejecutarse simultáneamente. A `console.warn` se emite para que pueda detectar esto en registros.
+- **Tiempo de espera cubre enviar + encuesta**: El `videoTimeoutMs` El presupuesto comienza antes de la presentación del trabajo, por lo que la convocatoria de presentación (60 s) y las encuestas posteriores comparten el mismo plazo.
diff --git a/docs-site/src/content/docs/es/guides/web-dashboard.md b/docs-site/src/content/docs/es/guides/web-dashboard.md
new file mode 100644
index 00000000000..12a2abddb5e
--- /dev/null
+++ b/docs-site/src/content/docs/es/guides/web-dashboard.md
@@ -0,0 +1,325 @@
+---
+title: "Dashboard web"
+description: "El opencodex GUI para la salud de proxy, proveedores, modelos, orientación de delegación, grupos de autenticación, uso y registros."
+---
+
+opencodex envía un panel de control web local (una aplicación Vite/React bajo `gui/`) servido desde el proxy. Es el camino más corto a la gestión de proveedores, cuentas Codex/ChatGPT, modelos de catálogo, sidecars, sub-agente configuración y solicitar tráfico.
+
+
+
+## Abrirlo
+
+```bash
+ocx gui
+```
+
+Esto abre `http://localhost:` en su navegador — `http://127.0.0.1:` Cuando hub administración de ingreso está habilitado — auto-arranque del proxy primero si es necesario. En Puede ejecutar el servidor de desarrollo GUI por separado contra un proxy en ejecución:
+
+```bash
+ocx start
+bun run dev:gui
+```
+
+
+
+## Iniciar sesión
+
+En el enlace de bucle de retorno predeterminado (`localhost` / `127.0.0.1`) el panel nunca pide un token: el proxy realiza sesiones de corta duración de GUI en la página servida y las renueva silenciosamente cuando expiran o el proxy se reinicia. Solo se requiere un panel de control vinculado a un nombre de host que no sea loopback el administrador token (`OPENCODEX_ADMIN_AUTH_TOKEN`O el auto-generado
+`~/.opencodex/admin-api-token` archivo).
+
+Cuando un panel de control remoto necesita esa credencial, presenta un formulario de contraseña estándar para que un navegador administrador de contraseñas puede ofrecer para guardar y autocompletar. El panel de instrumentos en sí todavía mantiene el token solo en la memoria y no lo escribe para `localStorage` o `sessionStorage`El hecho de que se salve es totalmente la decisión del navegador o administrador de contraseñas.
+
+
+
+### Encontrar el administrador token
+
+Solo necesitas esto en un enlace que no sea de bucle. Un panel de control local nunca pregunta, y si uno local
+*hace* preguntar, el token no es el problema — ver [Cuando un panel local no puede iniciar un período de sesiones](#when-a-local-dashboard-cannot-start-a-session) abajo.
+
+El proxy genera el token para usted la primera vez que se inicia. No está impreso en ningún lado, por diseño, así que léelo del archivo:
+
+```bash
+cat ~/.opencodex/admin-api-token
+```
+
+Si `OPENCODEX_HOME` está establecido, el archivo vive en `$OPENCODEX_HOME/admin-api-token` En su lugar. En marcha Windows que es `%USERPROFILE%\.opencodex\admin-api-token`. Un token generado se parece
+`ocx_admin_` seguido de 43 caracteres; el proxy rechaza un archivo que no coincide con ese forma en lugar de regenerar silenciosamente uno.
+
+Para elegir el valor usted mismo, establezca `OPENCODEX_ADMIN_AUTH_TOKEN` Antes de iniciar el proxy. Lo tiene prioridad sobre el archivo, y el archivo no se lee ni se crea. Escoge algo distinto de su credencial de plano de datos (`OPENCODEX_API_AUTH_TOKEN` o una clave API configurada) — La reutilización de uno es rechazada.
+
+No hay ningún comando CLI que imprima el token. `ocx doctor` Informar deliberadamente si un credencial está presente sin revelar nunca su valor.
+
+
+
+### Cuando un panel local no puede iniciar una sesión
+
+Un panel de control en `localhost` Mints su propia sesión, por lo que no le pedirá un token. Si es informa que no pudo iniciar una sesión, la causa es la dirección que está utilizando en lugar de una falta credencial — el proxy no reconoció la solicitud como loopback. Abra el panel de control en la dirección que imprime el proxy al iniciarse (normalmente `http://127.0.0.1:`), y prefieren que sea exacto host y puerto sobre una IP LAN o un alias.
+
+
+
+## Diseño de panel
+
+La barra lateral tiene ocho filas, en orden: **Panel**, **Conectar**, **Codex**, **Proveedores**, **Modelos**, **Subagentes**, **Uso y registros**, y **Enlace remoto**. **Conectar** abre la página que encabeza **Conectar**, con su tira de pestañas ordenada **Codex**, **Claude**, **Escritorio Claude**, **Grok Build**, luego las integraciones restantes. Claude no tiene subpestañas; muestra la configuración de Claude Code directamente. El escritorio Claude es una pestaña de conexión separada en `#claude/desktop`. Connect no tiene conmutador de sección. **Subagentes** opens Subagentes y grupos Subagentes y Asesor (`#advisor`) con un interruptor de sección en forma de píldora. **Uso y registros** abre Uso y grupos Uso, Registros y depuración y Almacenamiento con un conmutador de secciones en forma de píldora. La última fila, **Enlace remoto**, grupos Enlace remoto (`#remote`) y el espacio de trabajo remoto (`#remote-workspace`, cuando esté disponible) con el mismo conmutador. **Codex** es el rebautizado **Conjunto Codex** fila; las URL conservadas incluyen `#codex-set`, `#claude`, `#claude/code`, y `#claude/desktop`; el ex `#claude/settings` bookmark abre Código. El ex `#claude/account` Marcador redirige a `#providers?provider=anthropic&tab=accounts`. Inicio (`#startup`) se queda fuera de la barra lateral.
+
+La sincronización de primera salida Responses incluye argumentos de función transmitidos y entrada de herramienta personalizada, también como texto y razonamiento. Por lo tanto, un giro de solo herramienta puede tener un primer tiempo de salida incluso sin prosa. Los deltas vacíos y las notificaciones de inicio de herramientas no inician este temporizador. Mide el primer proxy salida observada, no el comienzo del razonamiento oculto del modelo o el rendimiento exacto de la decodificación del modelo.
+
+Overview utiliza tarjetas de estado coincidentes y filas de configuración de ancho completo. En pantallas anchas, las etiquetas comparten una columna y los controles de modelo/esfuerzo comparten otra. En pantallas más estrechas, los controles se mueven por debajo de su etiquetas en el mismo orden de lectura. Las etiquetas de versión larga se acortan visualmente; pase la versión o el valor de la versión para leer el valor completo.
+
+
+
+### Barra de resumen de cuotas
+
+Un resumen de una línea en la parte superior de cada página, excepto la página de inicio, muestra el estado actual de cada proveedor. uso de cuotas, por ejemplo `OpenAI 31% | Claude 54% | xAI 12% | Google 8%`. Lee el mismo proveedor informes de cuotas como el área de trabajo Proveedores (`GET /api/provider-quotas`, cada 60 segundos mientras la pestaña es visible) y nunca fuerza una actualización de origen.
+
+- Cada chip muestra la ventana preferida: primero semanalmente, luego mensualmente, luego 5 horas, luego una hora. ventana con nombre de proveedor o créditos prepagados.
+- Un chip se vuelve ámbar al 70% utilizado y rojo al 90% utilizado.
+- Pase el ratón o enfoque el teclado en un chip para ver cada ventana reportada con su hora de reinicio y la hora en que se La lectura fue tomada. Los detalles permanecen abiertos a medida que el puntero se mueve desde el chip hacia el popover, incluyendo a través de la pequeña brecha visual. En una pantalla táctil, el primer toque muestra esos detalles.
+- Haga clic en un chip (o tóquelo por segunda vez) para abrir la pestaña Cuentas de ese proveedor en Proveedores, donde se gestionan sus cuentas o claves API. El popover **Gestión de cuentas abiertas** El enlace abre el mismo tab; los usuarios de teclado pueden Tab desde el chip a este enlace y presione Enter. Escape cierra el popover y devuelve el foco al chip cuando el foco estaba dentro del popover.
+- El bar siempre se queda en una línea. Cuando los chips no encajen, desplácelo hacia los lados o use el « y » botones en cada extremo.
+- Los proveedores que no reportan ninguna ventana de cuota se quedan fuera. La barra se oculta cuando ningún proveedor informa de uno.
+- El borde derecho muestra cuándo fue la última vez que el panel leyó los informes. Se vuelve ámbar cuando el último read falló y la lectura anterior todavía se muestra.
+
+
+
+## Lo que puedes hacer
+
+| Zona | Lo que hace |
+| --- | --- |
+| **Resumen del panel** | Modo multiagente, estado en línea, versión, tiempo de actividad, recuento de proveedores, total de 30 días de token, proveedores activos y modelos nativos/enrutados disponibles. |
+| **Retención del razonamiento nativo** | Opte independientemente por razonar el reenvío de texto cifrado en el modelo nativo o los cambios en la cuenta. Ambos por defecto fuera; retención de la cuenta es experimental. Véase [el ámbito de configuración](/es/reference/configuration/server/#native-reasoning-retention). |
+| **Delegación de subagentes** | Elija un modelo nativo o enrutado y un esfuerzo de razonamiento opcional compartido por la guía de delegación OpenCodex y el opt-in nativo predeterminado separado. Este no es un router proxy por spawn; ver más abajo. |
+| **Sidecares** | Elija el modelo de búsqueda web y el esfuerzo más el modelo de descripción de la visión. Los cambios se aplican en la siguiente solicitud. |
+| **Mantenimiento** | Vuelva a sincronizar el catálogo de modelos Codex, inspeccione las advertencias de omisión de configuración de proyecto-local, compruebe la versión más reciente o de vista previa y ejecute una actualización con reinicio proxy opcional. En el shell de escritorio, su entrada de actualización abre la página de actualización de la aplicación nativa en lugar de ejecutar el actualizador de paquetes. |
+| **Seguridad de inicio** | Mostrar si el enrutamiento Codex inyectado sobrevive a un reinicio, con servicio separado y estado del lanzador más comandos de reparación exactos. |
+| **Bandeja Windows** | Instale una bandeja de inicio de sesión por usuario para iniciar, detener, reiniciar, acceder al panel y el estado del proxy con un solo clic. La bandeja es un controlador, no un servicio de reinicio proxy. |
+| **Codex autostart** | Permitir que se ejecute una shim de lanzador Codex ya instalada `ocx ensure`. Este conmutador no instala un servicio de shim o de fondo. |
+| **Proveedores** | Agregar, editar, establecer el valor predeterminado (solo proveedores habilitados), habilitar/deshabilitar y eliminar proveedores; administrar grupos de cuentas OAuth y grupos de claves API donde sea compatible. La eliminación del valor predeterminado actual cambia al primer proveedor habilitado restante cuando existe; de lo contrario, se rechaza la eliminación y se mantiene el valor predeterminado actual. La configuración de proveedores puede deshabilitar la detección de modelos en vivo para puntos finales con falta, lento o sobredimensionado `/models` catálogos. Por Claude (Anthropic) OAuth Cada cuenta iniciada muestra sus propias barras de límite de velocidad de 5 horas y semanalmente (el uso es por credencial); una sonda fallida mantiene las últimas barras conocidas y las marca como no disponibles hasta la próxima actualización exitosa. **Actualizar todas las cuotas** control que obliga a un servidor a releer cada proveedor configurado; un proveedor cuya sonda ascendente falla mantiene su última fila correcta, por lo que la línea de estado informa que la verificación completada en lugar de reclamar cada valor es nueva, y la propia edad de cada fila mantiene la señal de frescura por proveedor. |
+| **Añadir proveedor** | Una búsqueda por encima de las pestañas llega a los cuatro a la vez — Cuentas, Gratis, Local, Pagado. Mientras una consulta está en vivo, los resultados se agrupan por pestaña con un recuento de cada uno, y la pestaña seleccionada se mantiene en lugar de saltar. Presione ArrowDown en el cuadro de búsqueda para enfocar la primera acción de resultado disponible, omitiendo los botones desactivados; si no hay ninguna acción disponible, el enfoque permanece en el cuadro de búsqueda. Los tiempos de ejecución locales (Ollama, vLLM, LM Studio, LitelLM) tienen su propia pestaña, y una larga nota del proveedor se fija a dos líneas con el texto completo a un clic de distancia. Claude Code CLI (suscripción) se encuentra bajo Pagado con una suscripción CLI insignia, y al seleccionarlo advierte que se factura la suscripción iniciada a través de Claude `claude -p` y nunca usa una clave API (usar `anthropic-apikey` ej., para facturación de claves). |
+| **Codex Autonomía** | Agregue cuentas de grupo ChatGPT/Codex, seleccione la cuenta de la siguiente sesión, actualice las cuotas de 5h / semanal / 30d, habilite o deshabilite el cambio automático de cuota, establezca su umbral 1–100% y configure la conmutación por error de transitorios. |
+| **Subagentes** | Presenta hasta cinco modelos ruteados nativos o con espacio de nombres en el `spawn_agent` Anule la lista. |
+| **Modelos** | Alternar GPT nativo y modelos enrutados, establecer listas de proveedores y límites de contexto, elegir v1/base/v2 y configurar el límite de hilos v2. La página distingue un catálogo guardado en el concentrador, un catálogo obtenido por este cliente y la activación en un cliente en ejecución. Una marca de tiempo fetch no prueba que incluya la última función de guardado del concentrador, y la activación en entorno de ejecución se muestra como no verificada. Los proveedores configurados permanecen visibles como grupos de modelo cero cuando la detección está desactivada o no devuelve filas. |
+| **Registros** | Actualizar automáticamente las solicitudes recientes con tokens, el esfuerzo solicitado y (cuando esté disponible) el esfuerzo de salida efectivo, el modelo resuelto, el proveedor, el estado, la identificación de la solicitud, la duración y los detalles del error. La vista de detalle incluye el campo exacto del cable de razonamiento cuando el adaptador emite uno. Filtrar por ID de conversación/sesión opaca (cuando el cliente envía uno) a tokens total y costo de lista-precio estimado para el anillo de registros cargado actualmente. |
+| **Uso / Depuración** | Inspeccione la cobertura y las tendencias de uso de token. La tabla Modelos de la página de Uso también divide cada modelo en tokens de entrada, tokens de salida, aciertos de caché, escrituras de caché y tasa de aciertos de caché; un guion significa que la telemetría de caché para esa métrica no está disponible. O habilite el transporte de proveedores y los diagnósticos de extracción de uso. |
+| **Almacenamiento** | Desglose de disco CODEX_HOME de solo lectura (sesiones, archivos, bases de datos, archivos adjuntos). Limpieza archivada opcional: vista previa del N% más antiguo, luego cuarentena a `CODEX_HOME/.trash` (predeterminado) o eliminar permanentemente detrás de una casilla de verificación explícita. **Política de autolimpieza** es opt-in y **por defecto OFF** (`storageCleanupPolicy.enabled`); configurar umbral/objetivo/programa/modo en la página Almacenamiento, o activar **Corre ahora**. Las entradas en cuarentena se pueden restaurar desde la página Almacenamiento (JSONL + hilos). Las sesiones activas son de solo lectura. La limpieza y la restauración se rechazan mientras Codex tiene el nuevo/activo `state_*.sqlite` Cerrada. |
+| **Detener** | Detenga con gracia el proxy y el servicio de fondo instalado, restaure Codex nativo y salga (`POST /api/stop`) En Windows con el programador de tareas backend, el panel de control se niega y le pide que ejecute `ocx stop` en su lugar: ese contenedor puede volver a reenviar el proxy después de que finalice la tarea, y solo una parada que se ejecute fuera de este proceso puede verificar la ventana de reinicio antes de restaurar la configuración del cliente. Nada cambia cuando se niega. También se niega para un proxy la aplicación de escritorio OpenCodex se ejecuta, que la aplicación comenzaría de nuevo: utilizar la bandeja de la aplicación **Detener proxy** o **Salir** Ahí. |
+
+Si no se pueden incluir algunos registros de uso, la página Uso, Panel de control, espacio de trabajo del proveedor, proveedor Las vistas de catálogo y clave API muestran una advertencia incluso cuando no quedan registros legibles. Condes, fechas y Los rankings de uso solo reflejan registros legibles. **Modelos → La mayoría de las instantáneas usadas →** Rechazar para guardar una instantánea incompleta; elija otro orden o repare el historial antes de volver a intentarlo.
+
+
+
+### Selección de cuenta
+
+La selección de cuenta se comparte con el enrutamiento de solicitudes. La selección de una cuenta OAuth tiene efecto en el next request incluso cuando un grupo está habilitado. Una selección saludable no es reemplazada simplemente porque otra cuenta genérica OAuth tiene más cuota no utilizada. Si la cuenta devuelve 429, failover aún puede seleccionar otra cuenta utilizable con el grupo apagado. Un compromiso automático La selección actualiza el panel de control inmediatamente; los cambios en la cuenta no esperan la actualización de la cuota temporizador. Las solicitudes que ya se envían en el flujo ascendente conservan sus credenciales originales.
+
+
+
+### Filtrar registros de solicitudes
+
+Un rechazo de repetición de proxy mantiene HTTP 429 y código de error `upstream_reset_replay_refused`Pero... La causa de su solicitud y de su intento de fracaso es `transport-ambiguous`, con permiso de reenvío
+`refused-ambiguous`: el flujo ascendente puede haber procesado ya el giro. Un auténtico proveedor Quedan 429 `rate-limit` con permiso de reenviar `permitted`.
+
+Un movimiento Codex a otra cuenta después de que HTTP 402 aparece como **Cuota de cuenta agotada (402)**
+en los detalles de recuperación del intento y cuenta como una recuperación de cuota en métricas exportadas.
+
+Los filtros de registro combinan superficie, solicitudes interceptadas, proveedor, modelo exacto, estado, tiempo, velocidad y el ID de conversación sobre el anillo de solicitud cargado actualmente. Proveedor y modelo Las opciones también incluyen intentos de reserva; la coincidencia del modelo ignora el caso y los espacios circundantes pero no coincide con nombres parciales. Las opciones que desaparecen del ring se restablecen a Todos. El campo de conversación también acepta un pegado `codex://threads/` El enlace profundo, la forma a Codex "copiar enlace de sesión" pone en el portapapeles — la envoltura y cualquier metadata de enlace tal como `?hostId=…` se ignoran y el id de hilo desnudo es coincidente, el mismo valor
+`ocx logs filter --conversation` búsqueda desenvolver.
+
+Las ventanas de tiempo cubren los últimos 15 minutos, horas o días y se actualizan cada 30 segundos mientras se La pestaña Registros está activa, incluso con actualización automática desactivada. Windows utiliza la marca de tiempo proxy de la respuesta de los registros y avance con el tiempo transcurrido del navegador, por lo que un reloj del navegador diferente No cambia el límite. Los proxies más antiguos sin esa marca de tiempo retienen el reloj del navegador hasta que una muestra válida esté disponible. La velocidad utiliza la salida tokens por segundo sobre el Duración total de la solicitud: por debajo de 15, 15 a menos de 50, o al menos 50. Los valores de velocidad no disponibles son Se excluye cuando un filtro de velocidad está activo. Éxito significa 2xx; errores significa 4xx o 5xx.
+
+Registros de etiquetas cada estimación de decodificación **Ventana de generación** o **Después de la salida visible** en la lista e intenta la tabla, y utiliza **Velocidad de salida durante la generación (est.)** o
+**Velocidad de salida después de la primera salida visible (est.)** en solicitar detalles. Respuestas antiguas en caché sin un método de sincronización mostrar **Tiempo desconocido** y **Tasa de salida (est.; método de temporización desconocido)**
+en detalles. Una leyenda visible debajo de la tasa de detalle explica el método de sincronización; una rate no tiene título. Cuando el proxy observa ambos extremos, es salida tokens sobre la ventana de generación: desde el primer elemento o bloque de salida, razonamiento incluido, hasta el último delta de salida. Las filas más antiguas sin esa ventana usan el tiempo después de la primera vista. token hasta el final de la solicitud. Ambos son observaciones del lado proxy, no la sincronización interna token del proveedor, por lo que el valor es siempre una estimación, y una ventana de menos de un segundo no se muestra como no disponible. Ambos numeradores incluir la salida de razonamiento informada tokens, por lo que las dos bases de tiempo no son directamente comparables. Los registros históricos no se reescriben y las marcas de tiempo de generación que faltan no se inventan. El end-to-end La columna tok/s y el filtro de velocidad anteriores no se ven afectados.
+
+Los filtros activos muestran el recuento correspondiente del total cargado. Restablecer filtros restaura todo filas y devuelve el foco del teclado al control de toda la superficie; “Sin solicitudes coincidentes” difiere de un anillo de registro vacío. Utilice las teclas de flecha o Home/End en el selector de superficie. Estos controles no consultan registros históricos más allá del anillo cargado.
+
+El selector de idioma incluye **Portugués** (Portugués brasileño, `pt-BR`) Los idiomas del navegador portugués lo seleccionan automáticamente a menos que ya se guarde una preferencia de idioma compatible.
+
+
+
+### Vincular a una sección
+
+Hay un solo diseño, por lo que no hay ningún interruptor de diseño para configurar. Las secciones del panel son direccionable en su lugar: `#dashboard` abre Vista general, y `#dashboard/providers` y
+`#dashboard/models` Abre los otros dos. Recargar, marcar y Atrás todos mantienen la sección que estabas encendido. **Registros** Funciona de la misma manera con `#logs` y `#logs/debug`. Un viejo `#providers/workspace`
+Marcador ahora aterriza en `#providers`.
+
+Valores de costos en **Registros** y **Uso** son equivalentes de lista-precio de API calculados a partir de tokens notificado. Para un intervalo de uso personalizado, el servidor debe confirmar las horas de inicio y fin solicitadas. Si un proxy de ejecución anterior no admite esos límites, el panel de control y CLI rechazan su informe; Actualizar y reiniciar ese proxy antes de volver a intentarlo. Restablecer un precio de modelo manual afecta solo a modelo, conservando otras tasas ahorradas independientemente. Los **Uso** Las tablas de resumen y Modelos/Proveedores muestran el rendimiento de salida de extremo a extremo del historial de uso para el rango y los filtros seleccionados: salida sumada tokens dividida por segundos de reloj de pared sumados, no un promedio de tasas individuales. El recuento de muestras se mide por intentos (o solicitudes de filas heredadas sin intentos); se excluyen las muestras que carecen de salida finita positiva tokens o duración. Un guión significa que no hay muestra calificada o el servidor devolvió una tasa inutilizable. Esto incluye la espera de predecodificación y no es una velocidad de decodificación estimada.
+
+Los **Uso** Las tablas de modelos y proveedores muestran la porción estimada para cada fila. Solicitudes sin un precio coincidente o uso utilizable se cuentan como excluidos junto a esa cantidad cuando el proxy Informes de precios campos de cobertura. El uso que se midió solo parcialmente (`unreported` o `unsupported`) no tiene precio, y una parte excluida excluye toda la solicitud del recuento de precios de esa fila. A que no alcanzó ningún nivel ascendente, o que se negó con un error HTTP antes de cualquier salida, gastado nada y no lo hace; una cancelación de cliente (499), o una etapa cuya respuesta comenzó o terminó sin un estado pero no informó uso, puede haber sido facturado, por lo que lo hace. Un rechazo seguido de una medida enviar correctamente contribuye a que envíe el costo al resumen, incluso cuando el estado de uso agregado es `unreported`. Una fila con solo solicitudes excluidas muestra un guion inicial con ese recuento en lugar de una estimación de cero dólares, y un valor de cero dólares mostrado es una estimación de precio confirmado. Un proxy más antiguo que informa que no hay campos de cobertura mantiene un guión desnudo sin contar, por lo que falta La cobertura permanece distinta de una fila totalmente excluida y de una estimación cero confirmada. Estos no son recibos de facturación o evidencia de un cargo real; uso de suscripción o créditos del proveedor puede aplicar en su lugar.
+
+Las filas del modelo de proveedor pueden incluir **Uso del modelo solicitado no resuelto**: la ruta guardada envió el nombre solicitado sin cambios al proveedor predeterminado. Estos tokens pertenecen a ese proveedor de servicio, no necesariamente el proveedor nombrado en la solicitud. El panel conserva el nombre original y uso en lugar de adivinar qué modelo corrió. Para los nombres no resueltos que contienen barras, una El precio del modelo del proveedor por sí solo no es suficiente para estimar el costo; un proveedor exacto o un precio configurado Todavía se aplica. Las acciones del modelo se calculan dentro del proveedor seleccionado. Solicitudes para un desconocido reserva `policy/` nombre ahora falla antes de llegar a un proveedor de origen; se conserva el uso histórico.
+
+El proveedor seleccionado **Descripción general** y **Uso** tabuladores muestran **Uso de la cuenta corriente** debajo de la Estadísticas de uso. **Cuentas** y **Claves API** muestre la cuota propia de cada credencial soportada, incluyendo saldos de crédito. La visión general de todo el proveedor todavía muestra la capacidad combinada cuando está disponible; no se sustituye por una lectura de cuenta corriente faltante. Búsqueda sin soporte, sin pasivo observación, carga, búsqueda fallida con valores conocidos por última vez y cero medido están separados estados. **Control de cuotas completado** significa la lectura settled—not que una observación pasiva se convirtió en nuevo o que todas las mediciones anteriores se actualizaron.
+
+
+
+## Visibilidad del modelo
+
+Los **Modelos** Los switches muestran la visibilidad final de Codex: un modelo enrutado solo está activado cuando su lista de proveedores lo incluye (o no está configurada) y no está desactivado. Activar un modelo reconcilia ambos filtros atómicamente; **Todos en** borra la lista de proveedores para que los modelos recién descubiertos también estén encendidos.
+
+Los switches responden de inmediato para que pueda seguir cambiando modelos mientras se ejecutan los archivos guardados en segundo plano. haga clic en ordenar. La retroalimentación guardada aparece después de que la cola termina y la lista se reconcilia con la servidor. Falló guarda restaurar el estado del servidor cuando se puede leer y mostrar un error. Espere a que retroalimentación antes de salir de Modelos o cambiar de servidores: los cambios en cola no enviados se descartan a la salida.
+
+
+
+### Administrar modelos en un espacio de trabajo de proveedor
+
+En un proveedor **Modelos** ficha: **Eliminar** elimina la definición personalizada almacenada. Un subyacente El modelo nativo o el modelo descubierto en vivo pueden volver a aparecer, por lo que el recuento de modelos puede permanecer igual.
+**Ocultar** solo cambia la visibilidad del catálogo: no elimina la definición ni cambia directamente política de enrutamiento. Uso **Gestionar la visibilidad en modelos** para abrir el **Modelos** página y restaurar visibilidad, incluso cuando la pestaña del proveedor no tiene filas.
+
+**Añadir** guarda una definición personalizada; no borra una regla de selección de proveedores o ocultación existente. Por lo tanto, un modelo guardado puede permanecer oculto. Si el modelo ya se conoce, gestionar su visibilidad en **Modelos**. Todavía se guarda un guardado confirmado con una actualización de catálogo fallida: siga la actualización mensaje en lugar de añadirlo de nuevo. Si el cambio no se puede confirmar, actualice el estado del modelo antes de volver a intentarlo.
+
+El recuento de modelos del proveedor es el número de entradas únicas no desactivadas en el modelo actual. inventario devuelto por el servidor, antes de buscar o mostrar truncamiento. No es el proveedor tamaño de lista de permisos, un recuento de descubrimiento en vivo o prueba de que se descubrió una entrada de origen. Selección Las insignias y la información de descubrimiento permanecen separadas de esa cuenta.
+
+
+
+## Selector de delegación vs enrutamiento de generación
+
+El Dashboard de **Delegación de subagentes** tiendas de recolectores `injectionModel` y, opcionalmente,
+`injectionEffort`. **Guía multiagente OpenCodex** Controla de forma independiente la delegación instrucciones que utilizan estos valores. En turnos elegibles v2, esa guía le dice al padre El modelo exacto y el esfuerzo de razonamiento para pasar a `spawn_agent`; limpiar el modelo también limpia El esfuerzo almacenado.
+
+El default-off **Usar como subagentes por defecto nativos de Codex** switch aplica la misma selección a Codex Nativo `[agents]` se establece de forma predeterminada en la siguiente sincronización/reiniciación cuando OpenCodex administra el enrutamiento activo Codex. Las configuración de proveedores externos administrados por el usuario permanecen intactas. Esos valores predeterminados afectan a las tareas Codex recién creadas y no causen ellos mismos delegación. Los usuarios existentes `[agents]` Los valores predeterminados se conservan en lugar de de sobrescritura, por lo que pueden continuar anulando los valores predeterminados solicitados.
+
+:::caution
+Ninguno de los controles es un router de generación de modelos cruzados del lado proxy. La guía OpenCodex le pide a Codex que pase Anulaciones para `spawn_agent`; nativo `[agents]` los valores predeterminados se aplican solo cuando Codex crea una nueva tarea después de han sido sincronizados. Véase
+[Interfaz de subagentes](/es/guides/sub-agent-surface/) para el comportamiento canónico v1/base/v2.
+:::
+
+
+
+## Sesiones, teclas y uso de Remote Hub
+
+En **Conecte las teclas → API**, cada fila de la tabla clave tiene su propio botón de eliminación, que pide confirmación. Al hacer clic en una clave puede mostrar su valor completo con un **Copiar** botón solo de una sesión autorizada independientemente.
+
+
+
+### Lectura de una clave API existente
+
+Mostrar el valor completo de una clave almacenada requiere una sesión de panel establecida por emparejamiento explícito o Identidad de Tailscale de confianza. Una sesión de panel de control local automática aún puede mostrar la lista de claves enmascaradas, pero no puede revelar los valores existentes; un administrador token sin procesar tampoco puede llamar a esta acción de solo sesión. Utilizar el existente [flujo de emparejamiento de panel](/es/guides/remote-hub/#pairing-this-browser-with-a-hub) Para establecer un sesión autorizada por el operador antes de solicitar un valor almacenado; una revelación rechazada indica el requisito en la página. El formulario de emparejamiento local se ofrece solo mediante un panel independiente del mismo origen abierto sobre HTTP en el literal `127.0.0.1` o `[::1]` dirección. El origen debe coincidir con el del servidor Loopback bind. En marcha `http://localhost:` (u otro alias localhost), comprobar el enlace del servidor: reabrir `http://127.0.0.1:` por a `127.0.0.1` enlace o
+`http://[::1]:` por a `::1` atar, y luego emparejar allí. Un servidor configurado con hostname
+`localhost` no tiene un origen de emparejamiento local elegible. El panel de control no puede inferir el bind de un alias URL, por lo que muestra la negación genérica sin sugerir un reemplazo URL. Utilice el flujo de emparejamiento de concentrador remoto existente o el inicio de sesión de escala de cola de confianza cuando esté disponible. Pare de nuevo si la sesión autorizada expira o es revocada. Iniciar sesión en el panel de control ordinario, La creación, rotación y eliminación de claves no han cambiado.
+
+Después de emparejar, haga clic en la clave nuevamente para solicitar su valor. El emparejamiento en sí nunca revela una clave. Los valores de clave visualizados y la retroalimentación de copia se borran cuando se borra o reemplaza la sesión compartida. se inicia la vinculación, abandona este panel, oculta la pestaña del navegador o la ventana de escritorio, o cambia de servidor. Esto también borra los valores recién creados y de reemplazo, por lo que copia un valor de una sola vez antes de salir el panel. Si la creación o rotación tiene éxito después de que cambie la sesión o vista, se El valor permanece oculto. Después de cambiar los servidores, volver a la El servidor original revalida su lista de claves. Las rotaciones pendientes siguen estando disponibles para la confirmación explícita o el aborto.
+
+El plano de gestión del panel está separado del tráfico del modelo client→hub directo. **Conecte las teclas → API** muestra rotaciones pendientes, muestra un secreto de reemplazo solo una vez y requiere confirmación explícita o cancelación. El cierre de sesión del navegador solo invalida la sesión remota actual. El uso conectado es la tienda central filtrada por el cliente. `apiKeyId`; el uso desconectado es local, sin duplicación.
+
+La garantía de anulación se aplica a la **incorporado** v2 texto de orientación. Una costumbre
+`injectionPrompt` sustituye a este texto por completo y debe incluir `{{model}}` y `{{effort}}`
+. y opcionalmente. `{{roster}}`) o esos valores no aparecerán en el orientación.
+
+El selector ofrece modelos nativos y enrutados habilitados, además de la escalera de esfuerzo global Codex. El API valida el esfuerzo seleccionado globalmente; Codex todavía valida un esfuerzo de generación contra el objetivo Entrada de catálogo.
+
+
+
+## Codex Grupos de autenticación y cuentas
+
+Los **Codex Autonomía** página administra la ruta nativa ChatGPT/Codex:
+
+El modo Pool selecciona en las cuentas Codex principales y agregadas; Direct utiliza solo el inicio de sesión de la persona que llama/principal. Las solicitudes en vuelo mantienen sus credenciales capturadas y una reautenticación 401/403 o un tiempo de reutilización 429 puede borrar la afinidad y rotar a otra cuenta Pool elegible. Esto es separado de `openai-apikey`
+y otros proveedores.
+
+:::caution[Responsabilidad sobre las políticas del proveedor]
+El grupo de cuentas es una función técnica de administración de cuentas, enrutamiento y resiliencia. No es así. afirmar que tener varias cuentas está prohibido; el cumplimiento depende de la configuración de la cuenta y usar patrón. OpenCodex no respalda el uso de cuentas adicionales para eludir los límites de tarifas, cuotas, límites del plan u otras restricciones del proveedor, o compartir credenciales de cuenta entre personas. Tú eres responsable de cumplir con los términos actuales del proveedor para cada cuenta y uso patrón. Las restricciones, la suspensión o la terminación del proveedor están fuera del control de OpenCodex; Los mantenedores no proporcionan asesoramiento sobre políticas y no pueden resolver la aplicación de los proveedores. Revisión
+[OpenAITérminos y condiciones de uso](https://openai.com/policies/terms-of-use/).
+:::
+
+- La elección manual de una cuenta se aplica de inmediato: un hilo ya vinculado se mueve a él en su siguiente solicitud, y solo las solicitudes que ya están en vuelo mantienen la cuenta que capturaron. La elección manual también es pinned: la tarjeta muestra un **FIJADA** insignia, y un orden de selección más alto no puede adelantarse a esa cuenta hasta que se agote, seleccione otra cuenta o cambie el orden de selección de cualquier cuenta. Al seleccionar la insignia nuevamente se pide liberar el pin: confirmar borra la selección, encuadernar hilos mantener su cuenta capturada, y las solicitudes nuevas o no vinculadas regresan al orden de selección y umbrales. Si el pin cambia mientras la confirmación está abierta, esa confirmación no puede liberar el pin más nuevo. Después de un lanzamiento rechazado o incierto, la vista de cuenta se actualiza; revise la selección actual antes de confirmar nuevamente.
+- Cada tarjeta de cuenta lleva un **Orden de selección** control (primero, anterior, normal, posterior, último). El orden superior se utiliza primero, y el grupo cae a un orden inferior solo una vez que cada cuenta por encima de él es drenado o no disponible. Se aplica una orden modificada a partir de la siguiente solicitud no vinculada y nunca se mueve a hilo que ya está encuadernado. La cuenta de escritorio (principal) Codex está ordenada como cualquier otra, por lo que puede Estar configurado para **Ultima** y se mantuvo como reserva. Una orden establecida de `ocx account priority` fuera de aquellos cinco preconfiguración permanecen visibles y seleccionables en la tarjeta.
+- La afinidad del hilo evita el aleteo por solicitud. Con `pool.cacheAffinity` en (el valor predeterminado), a hilo de larga duración no es rebote simplemente porque el uso cruzó el umbral, sino que se queda hasta el cuenta se agote o no puede servir, y luego solo en una cuenta con margen de cuota genuino y estrictamente un uso más bajo. Establecer la bandera `false` para restaurar el reencuadernación del umbral, todavía solamente en tal destino.
+- Las sesiones nuevas pueden elegir la cuenta elegible de menor uso. Los planes pagados puntúan las 5h más calientes conocidas, semanal, o 30d ventana; Los planes Go/Free solo usan la ventana 30d.
+- Cuando WHAM suministra `limit_window_seconds`, Codex Auth clasifica una ventana primaria de al menos 28 días como 30d en lugar de asumir que cada ventana principal es semanal. Responses sin una duración mantener La interpretación semanal del legado.
+- **Actualizar las cuotas** vuelve a leer el uso de la cuenta inmediatamente, por lo que el enrutamiento y las tarjetas de cuenta usan lo mismo valores.
+- Los registros de solicitudes Pool usan etiquetas opacas, como `p3fa91c`, nunca correos electrónicos de cuenta.
+- Cada tarjeta de cuenta también muestra esa etiqueta de registro estable, el total observado de 30 días de token, una cifra aproximada de API-costo equivalente utilizando los precios de visualización configurados actualmente, y la fracción de intentos con uso medido. Usuario activo `modelCosts` las superposiciones tienen prioridad sobre el catálogo verificado y caídas de precios, y el uso histórico se vuelve a estimar a partir del precio activo cuando se lee. El costo es una estimación para la conciliación, no una factura de suscripción ChatGPT Plus / Pro. El Barco Histórico `openai` las filas que preceden la atribución explícita permanecen ambiguas en lugar de ser asignado a la cuenta principal actual.
+- **Apuntar a una cuenta específica de Codex desde el selector de modelos** Es una opción explícita. Cuando está habilitado, Las filas del selector GPT ordinarias se reemplazan por una entrada por selector de cuenta pública. La elección de uno bloquea esa conversación a la cuenta asignada: no rota, retrocede o cambiar la cuenta Pool activa. El inicio de sesión de la aplicación Codex incorporado tiene su propio selector; mapas generados normalmente utilizan `main`con un sufijo de colisión segura como `main-2` cuando sea necesario. Cuentas añadidas reciba etiquetas estables y seguras para la privacidad, y se conservan las etiquetas selectoras personalizadas existentes. Las conversaciones existentes y las selecciones de modelo guardadas continúan el enrutamiento. Desactivar la configuración Oculta las entradas generadas del selector sin eliminar cuentas, selectores ni rutas exactas. Llanura GPT Los ID de modelo continúan usando el comportamiento configurado Pool o Direct.
+- Los cambios de agregar, quitar y seleccionar cuentas se guardan antes de actualizar el catálogo de modelos. Si esa actualización limitada no puede terminar, el panel de control muestra un aviso ámbar de éxito con recuperación; ejecutar `ocx sync` para reintentar. El cambio de cuenta o configuración en sí permanece guardado.
+
+La descripción general de los proveedores resume por separado el uso del modo Pool como una capacidad ponderada solo para pantalla estimación, junto con la cuota bruta de la cuenta efectiva y la próxima recuperación de capacidad. Véase
+[Capacidad de la grupo](/es/guides/providers/#providers-overview-pool-capacity) por el campos visibles, significado de cobertura incompleta y límite de enrutamiento.
+
+
+
+## Protagonizar es tuyo para decidir, no de un agente
+
+El botón — de la barra lateral y la pregunta de una sola vez `ocx start` pregunta en un interactivo terminal — pasa a través **tu propio `gh` inicio de sesión**. opencodex no tiene GitHub token, y el Lo único que aprende es tu sí o no.
+
+Debido a que eso se escribe en su cuenta GitHub, se rechazan las llamadas dirigidas por agentes en lugar de Se le permite responder por usted:
+
+- `ocx start` y `ocx service install` **saltarse el mensaje por completo** Cuando un agente o El arnés los conduce (`CLAUDECODE`, `CODEX_THREAD_ID`, `CURSOR_TRACE_ID`, `CI`, y similares). El marcador de una sola vez permanece sin escribir, por lo que el indicador real aún aparece en su siguiente ejecución escrita a mano. Se le dice al agente que le pregunte en su lugar — y que pregunte como simple Sí / No elección tienes que responder, no como un suave a un lado puede deslizarse más allá de ti. Si nunca consigues Para responder, se le dice al agente que vuelva a preguntar en lugar de tratar su silencio como un no.
+- `POST /api/github/star` respuestas `403` con `code: "agent_consent_required"` Cuando el proxy se ejecuta bajo una sesión de agente y la solicitud no tiene ninguna sesión del navegador del panel. Posesión el administrador token no es consentimiento: un agente en su máquina puede leer ese archivo.
+- El botón del panel de instrumentos sigue funcionando normalmente. Un clic real lleva sesión del mismo origen pruebas, por lo que se reconoce como usted incluso cuando un agente inició el proxy.
+- Decir que no lo termina. No se persiste nada y no se agrega nada a ningún mensaje de modelo para empujar Más tarde.
+
+
+
+## Cómo el panel de control habla con el proxy
+
+Los GUI es un cliente ligero sobre el proxy JSON gestión API. Los puntos finales útiles incluyen:
+
+| Punto de conexión | Finalidad |
+| --- | --- |
+| `GET` / `PUT /api/settings` | Lee los configuración o actualiza el inicio automático Codex, los configuración de flujo/memoria y la visibilidad del selector de segmentación de cuentas. |
+| `GET` / `POST /api/github/star` | Lea el `gh`-derivada del estado de estrella, o la estrella del repositorio. El POST es rechazado con `403` `agent_consent_required` para llamadas dirigidas por agentes sin una sesión de panel. |
+| `GET /api/startup-health` | Lea los diagnósticos de enrutamiento, servicio, shim y seguridad de reinicio sin secretos. |
+| `POST /api/startup-action` | Instale el servicio en segundo plano o la shim de lanzador Codex a través de acciones fijas y permitidas. |
+| `GET` / `POST /api/windows-tray` | Lea o cambie la instalación de la bandeja Windows y el estado del proceso visible. POST acepta `install`, `start`, `stop`, o `uninstall`. |
+| `POST /api/sync` | Reconstruir el catálogo de modelos compartidos y rancio la caché del modelo Codex. |
+| `GET /api/update/check` · `POST /api/update/run` · `GET /api/update/status` | Revisar, ejecutar y supervisar los trabajos de autoactualización. Los PID de los trabajadores persisten para que un trabajo bloqueado se recupere automáticamente; los trabajos heredados sin PID se recuperan después de diez minutos. |
+| `GET` / `PUT /api/sidecar-settings` | Leer o establecer la configuración del modelo de búsqueda/visión sidecar. |
+| `GET` / `PUT /api/injection-model` | Leer o establecer la selección compartida de modelo/esfuerzo de subagente y los conmutadores de orientación/nativo-predeterminado independientes. |
+| `GET` / `PUT /api/v2` | Lea o establezca el modo de superficie, el indicador de características Codex y el límite de hilos v2. |
+| `GET /api/providers` · `POST /api/providers` · `PATCH /api/providers?name=...` · `DELETE /api/providers?name=...` | Listar, agregar/reemplazar, habilitar/deshabilitar, establecer el valor predeterminado o eliminar proveedores. `PATCH` utiliza independiente `{ "setDefault": true }` en un proveedor habilitado; `POST` puede incluir `setDefault` al crear/reemplazar (también solo habilitado). Eliminación de la actual por defecto reasigna al primer proveedor habilitado restante cuando existe uno; de lo contrario, el API devuelve `409` con `code: "last_provider"` y mantiene el valor predeterminado actual. |
+| `GET /api/models` · `PUT /api/disabled-models` | Enumera filas de modelos nativos/enrutados y actualiza el conjunto de modelos deshabilitados compartidos. |
+| `GET /api/selected-models` · `PUT /api/model-visibility` | Lea las listas de proveedores y cambie atómicamente la visibilidad final de un modelo o grupo de proveedores. |
+| `GET /api/key-providers` · `GET /api/oauth/providers` | Lea los catálogos de proveedores API y OAuth. |
+| `GET /api/oauth/accounts?provider=..."a=1` · `GET /api/providers/keys?name=..."a=1` | Lea cada cuenta o cuota de clave donde sea compatible, sin cambiar la credencial activa. Añadir `refresh=1` para omitir la caché de cuota establecida; se puede compartir una lectura de la misma credencial en vuelo. Omita `quota=1` para una lista local barata con cada fila de `quotaMode`: `probe`, `passive`, o `unsupported`. Las lecturas pasivas devuelven las observaciones existentes sin una sonda de red. Ninguna lectura es lo mismo que el 0% utilizado, y las cuotas para múltiples claves no se suman. |
+| `POST /api/oauth/login` · `GET /api/oauth/status` | Inicie un flujo de proveedores OAuth y realice una encuesta para su finalización. |
+| `GET /api/codex-auth/accounts?refresh=1` | Listar cuentas principales y de grupo, forzar la actualización de cuotas e informar la cuenta principal `hasCredential` / terminal `needsReauth` Estado. |
+| `PUT /api/codex-auth/active` · `PUT /api/codex-auth/auto-switch` · `PUT /api/codex-auth/failover` | Seleccione la cuenta para la siguiente solicitud y configure el enrutamiento del grupo. |
+| `GET /api/codex-auth/active` · `PUT /api/codex-auth/accounts/priority` | Lea la cuenta efectiva (incluyendo `pinned` ¿Cuál es la cuenta `pinnedAccountId`y establecer el orden de selección de una cuenta. |
+| `POST /api/codex-auth/login` · `GET /api/codex-auth/login-status` | Agregar una cuenta de grupo a través del inicio de sesión del navegador. |
+| `GET /api/logs?tail=50&limit=20&offset=0&provider=...&status=5xx` | Lea los metadatos de las solicitudes recientes con filtros opcionales de cola, proveedor y estado exacto/clase. Con `limit`/`offset`, paging camina hacia atrás desde la fila más reciente (`offset=0` devuelve la última página). Forma de respuesta: `{ timeZone, generatedAt, total, logs }` donde `total` es el recuento de filas filtradas antes de la paginación. |
+| `GET` / `PUT /api/subagent-models` | Leer o establecer los cinco destacados `spawn_agent` Anule los modelos. |
+| `POST /api/stop` | Detenga el proxy/servicio, restaure el Codex nativo y salga. Rechazado con `respawnable_service` en el Backend del Programador de Tareas Windows, con `self_unload_service` cuando este proxy es en sí mismo el trabajo instalado de lanzamiento / sistema, y con `service_state_unknown` cuando no se puede leer el estado del Programador de tareas; nada cambia en ninguno de esos casos. Una sesión de dashboard también es rechazada, con `desktop_supervised`Mientras que la aplicación de escritorio OpenCodex ejecuta el proxy. |
+
+:::tip
+Adición **Ollama Nube** u otro proveedor de catálogo desde el panel copia su texto contra visión En el caso de que la configuración del proveedor sea guardada, [visión sidecar](/es/guides/sidecars/)
+se cierra correctamente sin clasificación manual.
+:::
+
+
+
+### Emparejar este navegador con un hub
+
+La inscripción de la máquina y la autenticación del navegador son independientes. El panel de emparejamiento nombra el concentrador y muestra un `ocx gui pair --origin` comando para el origen exacto actualmente abierto en su navegador. Ejecute ese comando en el concentrador o envíelo al operador del concentrador y solicite un código de emparejamiento único. Pegue ese código en el panel; una clave API de datos o admin token no es un código de emparejamiento.
+
+Mientras la autenticación del navegador está pendiente, el panel de control no recomienda reiniciar un cliente conectado saludable. Completar el emparejamiento actualiza los datos del panel de control inmediatamente, incluido un error de autenticación previamente almacenado en caché. La expiración de la sesión vuelve al emparejamiento; la denegación de permiso mantiene su propia guía de configuración de acceso. Otras actualizaciones fallidas pueden mostrar los últimos datos recibidos con un aviso de datos obsoletos y una acción de reintento.
+
+
+
+### Teclado de la tabla de uso y controles táctiles
+
+Los días del mapa de calor de uso tienen un punto de entrada de pestaña. Usa Arriba/Abajo para días adyacentes e Izquierda/Derecha para semanas adyacentes. Las barras semanales exponen los detalles del mismo día en el enfoque del teclado, el puntero o el tacto. Las etiquetas de día incluyen la fecha, el recuento de solicitudes y el recuento de token; las superposiciones de información sobre herramientas permanecen dentro de la ventana.
+
+### Claude
+
+**Claude** es una pestaña dentro **Conectar**, cuya tira de pestañas coloca Codex, Claude, Claude Desktop y Grok Build en ese orden. Claude no tiene subpestañas: muestra la configuración de Claude Code directamente. La página comienza con **Claude Code CLI de primera mano**, seguido de **Empezar**, **General**
+(compatibilidad, instrucciones del agente y controles de contexto), **Modelo de ayudante de fondo**,
+**Interceptación modelo**, **Modelos disponibles**, y finalmente **Conexión Claude**. Una pegajosa barra de Guardar muestra **Sin cambios** o **Cambios no guardados**, con **Reversión** para descartar ediciones y **Guardar** Comprometer A ellos. Ambos interruptores se aplican inmediatamente; **Guardar** Nunca los cambia. Cuando se detiene la interceptación, la página muestra por qué y ofrece **Iniciar interceptación**, que lo inicia en su lugar sin reiniciar OpenCodex. Las subpestañas de Código, Configuración y Cuenta anteriores han desaparecido; todo lo que mostraba la vista Configuración de solo lectura, excepto el número de puerto de intercepción, está en esta página.
+
+**Escritorio Claude** es su propia pestaña Conectar en `#claude/desktop`. Contiene el selector de modo de escritorio y familias de modelos. Una fila de estado muestra si Claude Desktop ejecuta el perfil y si está guardado, con **Guardar** y **Guardar y aplicar** Al lado.
+
+Las cuentas Claude/Anthropic se administran solo en **Proveedores > Anthropic > Cuentas**: inicio de sesión y la opción del navegador, la lista de cuentas con interruptor, pausa, eliminar y volver a autenticar, el campo de código de pegado, la configuración del grupo de cuentas y la cuota. Claude ya no tiene una subpestaña Cuenta. Controles a nivel de proveedor, como el proveedor predeterminado, la eliminación y la opción habilitada permanecer en proveedores.
+
+Los marcadores `#claude` y `#claude/code` abrir esta página, y la anterior `#claude/settings` redirecciona a `#claude/code`; `#claude/desktop` selecciona la ficha Escritorio Claude separada. El viejo `#claude/account` Marcador redirige a `#providers?provider=anthropic&tab=accounts`. Legado `#integrations/claude` y `#integrations/claude/desktop` Los marcadores todavía redirigen a `#claude/code` y `#claude/desktop`, respectivamente. Las teclas de flecha se mueven entre pestañas; Home y End seleccione la primera y última pestaña.
+
+
+
+
+## Pruebe un modelo de proveedor
+
+En **Proveedores**, **Conexión de prueba** comprueba la conectividad de descubrimiento. Utilice el separado **Terminación de la prueba** control para comprobar si un modelo seleccionado responde. Elija un modelo y acepte la confirmación de que la solicitud puede incurrir proveedor cargos. Cancelar la confirmación no envía nada. Cambiar el proveedor o modelo, o abandonando la página, cancela la prueba y descarta un resultado obsoleto.
+
+La prueba de finalización envía `Reply exactly OK.` una vez con una tapa de salida 32-token, una fecha límite de 20 segundos y un límite de 64 KiB. Se reporta TTFT en el primer delta de texto no vacío, latencia total, el modelo informado en sentido ascendente y una coincidencia, Desajuste o comparación desconocida con el id del modelo de cable. Falta o conflicto Los metadatos ascendentes no verifican la identidad del modelo. El panel muestra la razón de aplicabilidad cuando se configura la autenticación, el adaptador o el transporte no puede ser probado. No se muestra ningún texto generado, y el diagnóstico no actualizar el estado de enrutamiento, el historial de solicitudes o el catálogo de proveedores.
+
+El punto final de administración autenticado es
+`POST /api/providers/test-completion?name=` con exactamente
+`{"model":"","confirm":true}`. Las sesiones del panel requieren su CSRF habitual token. La entrada no válida devuelve 400, los proveedores desconocidos devuelven 404 y una entrada concurrente 400. prueba para el mismo proveedor devuelve 409. Diagnóstico y aplicabilidad completos resultados devuelven 200, incluyendo un error estructurado cuando falla la inferencia. Destino Se aplican las configuración de política y salida del proveedor; los redireccionamientos, reintentos y conmutación por error están deshabilitados. Para el flujo de trabajo CLI, consulte [Proveedores y cuentas](/es/reference/cli/providers-accounts/).
diff --git a/docs-site/src/content/docs/es/index.mdx b/docs-site/src/content/docs/es/index.mdx
new file mode 100644
index 00000000000..531ac5f8f6a
--- /dev/null
+++ b/docs-site/src/content/docs/es/index.mdx
@@ -0,0 +1,19 @@
+---
+title: "opencodex — Ejecuta Codex con cualquier LLM"
+description: "Proxy universal de proveedores para OpenAI Codex y Claude Code: usa cualquier LLM con Codex CLI, App, SDK y Claude Code."
+template: splash
+head:
+ # Brand-first, no " | opencodex" suffix: Google matches the site name against
+ # the home page title, so the wordmark leads and is not duplicated.
+ - tag: title
+ content: "opencodex — Ejecuta Codex con cualquier LLM"
+ - tag: meta
+ attrs:
+ property: og:locale
+ content: es_ES
+tableOfContents: false
+---
+
+import Landing from '../../../components/Landing.astro';
+
+
diff --git a/docs-site/src/content/docs/es/reference/adapters.md b/docs-site/src/content/docs/es/reference/adapters.md
new file mode 100644
index 00000000000..c215637f055
--- /dev/null
+++ b/docs-site/src/content/docs/es/reference/adapters.md
@@ -0,0 +1,376 @@
+---
+title: "Adaptadores"
+description: "El proveedor adapta — lo que cada uno apunta, cómo crea solicitudes y sus peculiaridades."
+---
+
+Un **adaptador** traduce entre el modelo interno de solicitud/respuesta de opencodex y un cable de proveedor formato. Cada adaptador implementa el `ProviderAdapter` interfaz (`src/adapters/base.ts`):
+
+```ts
+interface ProviderAdapter {
+ name: string;
+ buildRequest(parsed: OcxParsedRequest, incoming: IncomingMeta): AdapterRequest | Promise;
+ fetchResponse?(request: AdapterRequest, ctx?: AdapterFetchContext): Promise;
+ parseStream(response: Response, budget: TranslatorBudget): AsyncGenerator;
+ parseResponse?(response: Response, budget: TranslatorBudget): Promise;
+ runTurn?(parsed: OcxParsedRequest, incoming: IncomingMeta, emit: (event: AdapterEvent) => void): Promise;
+}
+```
+
+`buildRequest` reduce un `OcxParsedRequest` en una solicitud HTTP ascendente; `parseStream` /
+`parseResponse` Elevar la respuesta del proveedor hacia el interior `AdapterEvent`s. `fetchResponse` deja un adaptador propio reintentos / tiempos de espera, mientras `runTurn` soporta transportes que no pueden representarse como uno HTTP fetch seguido de un flujo de respuesta. [`bridge.ts`](/es/reference/architecture/#the-bridge)
+luego convierte los eventos en Responses SSE.
+
+
+
+## Entrada de tarea externa en rutas Responses traducidas
+
+La coordinación de tareas Codex puede entregar entrada como `function_call_output` con nonblank
+`id`, `name` y `namespace` campos y no `call_id` propiedad. OpenCodex mapea esto sobre completo a un mensaje de usuario antes de la traducción del adaptador. Su producción debe ser texto en blanco o una matriz de texto totalmente compatible y `input_image` URL piezas. Texto y orden de la imagen se conservan; detalle de la imagen `original` Mapas para `high`.
+
+Contenido vacío, partes mal formadas u opacas, imágenes de solo identificación de archivo y sobres parciales permanecer inválido. Los resultados de la función ordinaria/herramienta personalizada aún requieren un
+`call_id`. Los metadatos del sobre identifican una forma de compatibilidad y no conceden permisos adicionales. El paso nativo y la compactación enrutada (portátil) aplican el mismo mapeo de turnos de usuario a sus cuerpos crudos; el nativo directo `/responses/compact` hacia adelante mantiene sus reglas de cuerpo crudo existentes.
+
+
+
+## Continuación del punto de control después de la compactación enrutada
+
+Un modelo enrutado reproduce un OpenCode `ocx1:` punto de control como texto de usuario plano junto a las solicitudes anteriores retenidas. Cuando una solicitud lleva dicho punto de control decodificado, OpenCodeX agrega una nota corta a las instrucciones del sistema (rutas traducidas) o `instructions` (Responses passthrough). La nota enmarca las solicitudes completadas como historial y permite la continuación solo de trabajos no terminados ya autorizados y aún dentro de ese alcance, sin pedir la misma autorización nuevamente mientras se aplica. Permisos existentes y puertas de confirmación permanecen en vigor: las decisiones pendientes o permisos requeridos deben ser resueltos antes de las acciones dependientes. Los puestos de control y las delegaciones, incluidos los de otro hilo, no otorgan autoridad o alcance ampliado. Los mensajes posteriores del usuario tienen prioridad, incluida una pausa, cancelación, reemplazo o cambio de alcance. Las solicitudes de compactación, las manchas nativas opacas y las solicitudes sin punto de control no reciben la nota.
+
+## `openai-chat`
+
+**Objetivos:** OpenAI **Chat Completions** (`POST {baseUrl}/chat/completions`; un seguimiento `/chat/completions` o `/` on `baseUrl` primero) y todas las compatibles proveedor — xAI, Kimi, DeepSeek, GLM, Groq, OpenRouter, Ollama (local), y mucho más.
+**Auth:** `key` (Bearer).
+
+Para xAI, el adaptador ascendente resuelto puede ser `openai-chat` o `openai-responses`, dependiendo de los valores predeterminados y explícitos del modelo `modelAdapters` Anulaciones. Ambos apoyos público xAI API-clave de autenticación y Grok CLI OAuth. El registro de uso
+[`attempts[].credentialSource`](/es/reference/management-api/) De ello se desprende que resuelto transporte; no infiere la atribución de suscripción del protocolo entrante.
+
+- Convierte mensajes internos a roles OpenAI; asigna herramientas a `{type:"function", function:{…}}` y
+ `tool_choice` (`auto`/`none`/`required` o una función con nombre).
+- **Imágenes de resultados de herramientas** en un mensaje de visión de usuario de seguimiento (`image_url` partes) liberado una vez la ronda de herramientas se cierra, ya que `role:"tool"` contenido es sólo texto; el `[image]` El marcador se queda en el mensaje de herramienta como ancla.
+- **Reescribe el mensaje de identidad Codex de GPT-5** a una intro modelo-agnóstico por lo que los modelos enrutados no pretenden ser OpenAI.
+- Por traducido `Qwen3.8-27B` solicitudes (incluyendo ids de nombres separados como
+ `openai/Qwen3.8-27B`), Solicitudes Flash-Next (`flash-next` o `Qwen3.8-Flash-Next`También con espacios de nombres de pasarela), y `OrcaSAQ-2-Cyber-27B` Solicitudes GGUF, un recordatorio para desarrolladores solo de texto después de que el mensaje principal del sistema permanezca en su ranura de conversación, pero se envíe como `user`. La excepción Orca requiere `GGUF` en el segmento del modelo final antes de cualquier colon opcional etiqueta quant; las variantes Orca que no son GGUF mantienen su comportamiento configurado de rol de desarrollador. Estas plantillas de chat ancladas — por ejemplo
+ [Qwen3.8-27B](https://huggingface.co/Qwen/Qwen3.8-27B/blob/1d4bf0f2ff6012fd82039f2fa52739d0dd7c60c0/chat_template.jinja) — Rechazar más tarde `system` Mensajes y no aceptas `developer`, mientras que después `user` mensajes son válidas. Esto preserva el orden pero no puede preservar la precedencia del rol de desarrollador. Otros modelos mantener su comportamiento de rol de desarrollador configurado; el passthrough de chat nativo no cambia.
+- **Abrazaderas `reasoning_effort`** al subconjunto anunciado del modelo cuando un nivel exacto no está disponible;
+ `xhigh` y `max` etiquetas distintas a menos que un proveedor configure explícitamente un alias. Los adaptador **lo omite por completo** para los ID en `provider.noReasoningModels`.
+- Corrientes `delta.content` (texto), `delta.reasoning_content` (pensamiento), y `delta.tool_calls[]`; recoge `usage`. Proveedores listados en `reasoningDetailsModels` (MiniMax serie M) en lugar de leer estructurado `delta.reasoning_details` segmentos, cuyos `text` llega como instantáneas acumulativas y es diffed del prefijo, y el razonamiento conservado de la repetición como un `reasoning_details` matriz.
+- Porque `api.mistral.ai`, ambas rutas de respuesta también aceptan tipeado `text` y `thinking`
+ matrices. El texto mantiene sus bytes y orden; el pensamiento permanece separado de la respuesta. Los bloques de texto adyacentes comparten el análisis de etiquetas en línea; el pensamiento escrito lo restablece. Los bloques de matriz no compatibles o mal formados devuelven un error ascendente. Otros anfitriones mantener su comportamiento existente. Esto no añade repetición de firma Mistral.
+- Suprime desnudo `` texto cuando duplica una llamada estructurada y colapsa dos bloques idénticos inmediatamente adyacentes cuando exactamente una llamada estructurada está de acuerdo con su función y entrada. Un doble `input` se reduce a una copia, unida directamente o por una nueva línea, y solo cuando el objeto argumentos no tiene ninguna clave aparte de `input`. El espacio en blanco después de la par se suprime; sigue siendo visible el marcado no coincidente o de ejemplo.
+- ClinePass utiliza el formato de puerta de enlace verificado en vivo `reasoning: { enabled: true, effort }` (o
+ `{ enabled: false }` cuando el razonamiento está deshabilitado); sus documentos públicos API no especifican actualmente esta forma de solicitud. El adaptador conserva solicitado `low`, `medium`, `high`, `xhigh`, y `max`
+ niveles, acepta deltas de razonamiento de cualquiera `delta.reasoning_content` o `delta.reasoning`, solicitudes Uso de streaming con `stream_options.include_usage`, y lee el uso de envolventes de respuesta no de flujo.
+
+Las llamadas a herramientas de streaming retienen su identidad cuando un proveedor envía por primera vez un ID. luego asocia ese ID con un índice y luego envía un argumento de solo índice fragmentos. Esos fragmentos se reúnen en una llamada con el nombre original y argumentos completos; las llamadas paralelas conservan identidades separadas. Cuando está presente, los índices de llamada a herramientas transmitidos deben ser enteros seguros no negativos. No numérico valores y números negativos, fraccionarios o inseguros terminan el flujo con un error antes de la coincidencia de identidad. Los índices ausentes y nulos siguen siendo marcadores de posición del índice ausente; Las cadenas numéricas no son forzadas.
+
+## `ollama-native`
+
+**Objetivos:** El propio Ollama **Chat API** (`POST /api/chat`) en lugar de su compatible con OpenAI superficie. El incorporado `ollama-cloud` proveedor está seleccionado en este adaptador; también puede se configurará en un proveedor Ollama personalizado o autoalojado por separado con
+`adapter: "ollama-native"`.
+**Auth:** `key` (Bearer) para los puntos finales de nube/personalizados; no se envía ninguna credencial a loopback o
+`authMode: "local"` objetivos.
+
+- **La selección del registro es portante.** El incorporado `ollama-cloud` fila mantiene la base URL
+ `https://ollama.com/v1` por `/v1/models` descubrimiento en vivo, mientras que la inferencia se normaliza en
+ `POST https://ollama.com/api/chat`. Un nivel de configuración `adapter` se descarta para esa fila de proveedores. El Ollama local incorporado ordinario permanece encendido `openai-chat`; elegir `ollama-native` por un local o El punto final autoalojado es una decisión explícita de configuración del proveedor, detectada por el host. El destino no Ollama nunca se reescribe silenciosamente.
+- **Metadatos del modelo:** `/v1/models` no lleva metadatos por modelo, por lo que para la nube canónica Ollama el proveedor del adaptador enriquece cada identificación descubierta a través de un *delimitado* `POST /api/show` (256 KiB por respuesta, 8 s por solicitud, concurrencia 4, 48 solicitudes, un plazo de 12 s para toda la fase) para llenar la ventana de contexto real y la capacidad de visión. La solicitud de presentación es del mismo origen y nunca sigue una redireccionar; las fallas degradan ese modelo y nunca fallan en el descubrimiento.
+- **Transmisión:** Ollama nativo de NDJSON. Texto y `message.thinking` Los deltas se envían como llegar; un giro se completa solo en un `done: true` registro de terminal, y buffered `done: false` o a La terminal faltante suprime completamente las llamadas parciales de texto y herramientas.
+- **Razonamiento:** mapas en el nativo de Ollama `think` campo (`low`/`medium`/`high`/`max`, más booleanos), sujetado a la escalera anunciada del modelo, y honra el `__omit__` semántica centinela upstream configura.
+- **Imágenes:** enviado de forma nativa en el mensaje `images` array donde el modelo es capaz de visión; video se rechaza en lugar de enviarse incorrectamente, y las URL de imágenes remotas no se obtienen.
+- **Herramientas:** declaradas en la forma nativa de Ollama, las llamadas de herramientas transmitidas son registros de llamada completa con objeto-valorado `arguments`, y la repetición de resultados de herramienta se empareja estrictamente con el identificador de llamada y el nombre de la herramienta. Los identificadores de llamada nativos válidos distinguen las llamadas incluso cuando el proveedor repite un índice de función. Los ID repetidos actualizan los argumentos de la misma llamada; Las entradas sin ID vuelven al índice, luego a la posición. Las llamadas retienen el primer orden visto. Con `parallel_tool_calls: false`, una segunda llamada de proveedor distinta aún falla el giro cerrado antes de que se emita cualquier llamada de herramienta. Codex puede grabar comentarios del asistente antes de los resultados de una llamada pendiente. Texto/Pensamiento sin nuevas herramientas se aplaza hasta que el lote se resuelva, por lo que los resultados genuinos permanecen al lado de su llamadas de origen. Un nuevo lote de llamada a herramientas aún resuelve el anterior; los resultados que faltan retienen un marcador explícito de estado desconocido. Salidas adicionales para una llamada abierta unirse en orden de llegada; La salida que llega después de que su lote se asienta se conserva como una conversación atribuida explícitamente. texto, después de cualquier par pendiente de llamada/resultado. Los identificadores de llamadas desconocidos y las identidades de herramientas no coincidentes permanecen inválido; esto no crea ni ejecuta otra llamada a la herramienta. La atribución generada para salidas tardías comparte un presupuesto de 256 KiB por solicitud JSON-byte. Exceder ese presupuesto rechaza la solicitud con HTTP 413 `request_too_large` en lugar de truncar identidades o resultados de herramientas. El mensaje de error nombra la causa y el límite. Para continuar, inicie un nuevo hilo: compactar en la misma ruta Ollama reenvía el mismo historial y se rechaza de nuevo, a menos que se encamine la compactación a otro proveedor.
+ `tool_choice: "none"` y `auto` se comportan con normalidad; **`required` o una elección con nombre exacto falla cerrado**, porque Ollama de `/api/chat` no tiene `tool_choice` campo para hacerla cumplir.
+- **La salida estructurada se rechaza en la nube canónica Ollama.** Ollama actualmente documentos estructurados las salidas no compatibles en su nube, y la nube no `format` campo, por lo que OpenCodex no se cierra esa solicitud en lugar de devolver prosa sin restricciones en respuesta a un esquema en forma de solicitud. Local y personalizado `ollama-native` los puntos finales mantienen el nativo de Ollama `format` cartografía (`json_object` → `"json"`, `json_schema` → el objeto de esquema).
+
+## `openai-responses`
+
+**Objetivos:** el OpenAI **Responses API**. **`passthrough: true`** — normalmente reenvía la solicitud sin procesar cuerpo y respuesta, con estrechas reescrituras de compatibilidad para puertas de enlace enrutadas.
+**Auth:** canonical OpenAI `forward` transmite solo la lista de permisos de llamadas seguras; no canónico
+`forward` utiliza encabezados estáticos configurados sin retransmitir la autorización del llamante; `key` utiliza el Configurar la clave del proveedor.
+
+Cuando la historia de Google se reproduce a canónica ChatGPT Codex o el oficial OpenAI Responses API, el adaptador elimina el nivel de artículo `extra_content` desde la solicitud HTTP saliente o WebSocket Crear. Nativo `/responses/compact` Aplica la misma proyección. La historia original mantiene el Google firma de pensamiento para giros posteriores Google. Otras pasarelas Responses conservan sus extensiones.
+
+El adaptador conserva el `User-Agent` como un fallback en ambos modos de auth porque algunos proveedores compatibles con Responses utilizan la huella digital del cliente Codex para el comportamiento de compatibilidad. Un proveedor configurado explícitamente `User-Agent` sigue siendo autoritativo independientemente de la carcasa del cabezal; si el llamante no envía ninguno, OpenCodex no inventa uno. Se pueden seleccionar metadatos de llamadas adicionales con `forwardClientHeaders`; proveedor `headers` gana por esta opción, y credenciales o propiedad del transporte Los nombres son rechazados. Canonical ChatGPT forward auth conserva su lista de permisos de encabezado fijo separada. Solo `originator`, `x-client-request-id`, `x-codex-app-version`, y `user-agent` son apoyados por `forwardClientHeaders`; los nombres arbitrarios se rechazan al cargar/escribir y se ignoran en entorno de ejecución.
+
+
+
+### Compactación nativa en puertas de enlace personalizadas
+
+La compatibilidad con Responses por sí sola no es evidencia de soporte de compactación nativo. Puertas de enlace personalizadas seguir utilizando resúmenes de texto portátiles a menos que el operador declare la capacidad pertinente:
+
+- `supportsNativeCompactionTrigger: true` preserva v2 `compaction_trigger` Solicitudes y salida nativa.
+- `supportsNativeCompactEndpoint: true` opta por rutas clave/local/directa en el punto final v1 separado. OAuth conserva la compactación enrutada y su ciclo de vida de credenciales existente. El soporte V2 no implica soporte v1.
+- `decodesNativeCompactionBlobs: true` preserva las manchas nativas en giros posteriores cuando hay no se conoce ningún desajuste entre proveedor y servidor. Ninguna bandera de generación implica esta capacidad de reproducción.
+
+V1 nativo personalizado también honra `preserveResponsesReasoningContent: true` para el razonamiento de texto plano de entrada, al igual que las solicitudes Responses personalizadas ordinarias. Ausente o `false` mantiene el contenido en blanco; Los destinos compactos operados por OpenAI se mantienen en blanco incluso si la bandera está configurada. Interno `ocxr1:`
+Los sobres siempre se eliminan. La preservación del texto sin formato es independiente de las banderas de generación, blob nativo capacidad de reproducción y verificación de identidad de servicio.
+
+Si el proveedor personalizado también requiere resultados de herramientas adyacentes (`requiresAdjacentResponsesToolResults: true`), tanto Responses ordinario como v1 nativo eliminan el texto cifrado de razonamiento opaco y requieren repetición de texto sin formato. Falta `reasoning_text` se llena desde el punto `summary_text`, o un marcador de posición mínimo si no El resumen útil existe. Se conserva el texto plano existente. El compacto operado por OpenAI mantiene su propia política.
+
+Por una puerta de entrada cuya **Generación v2 y reproducción** ambos han sido verificados, fusione estos campos en su configuración de proveedor existente, conservando su URL real y autenticación configurada:
+
+```json
+{
+ "adapter": "openai-responses",
+ "supportsNativeCompactionTrigger": true,
+ "decodesNativeCompactionBlobs": true
+}
+```
+
+Estas banderas no hacen que la puerta de enlace sea un destino oficial de OpenAI, las credenciales de llamada directa, cambiar la selección de la cuenta o evitar la desinfección de compatibilidad normal. Validar un compacto real respuesta y conversación continua, no solo HTTP 200. Mantén las manchas en el fondo que las acuñó; El enrutamiento de compactación entre proveedores aún usa resúmenes portátiles. Resumen de fallback V1 permanecer portátil incluso cuando el destino acepta por separado disparadores v2. Rutas con capacidad nativa están excluidos de la recuperación de compactación de emergencia portátil para su protocolo respectivo.
+
+La selección del adaptador no selecciona el transporte ascendente. Las solicitudes elegibles pueden utilizar el
+[Ruta proxy ascendente WebSocket](/es/reference/proxy-formats/#json-and-sse-output); inválido o no compatible Los configuración del proxy WebSocket vuelven a HTTP/SSE. HTTP fetch basado en el manejo de Responses utiliza la
+[fetch de salida configurada](/es/reference/configuration/server/#server-fields): un servidor proxy SOCKS5 de
+`config.proxy` o un SOCKS5 `ALL_PROXY` utiliza el túnel incorporado cuando `NO_PROXY` No está exento El objetivo. Las variables proxy HTTP(S) específicas del esquema conservan su manejo nativo separado; non-SOCKS `ALL_PROXY` No es un nativo HTTP fetch ruta.
+
+Las pasarelas Responses no canónicas reciben el cliente ejecutado de Codex `tool_search` declaración como a herramienta de función pública segura contra colisiones. El historial de solicitudes coincidentes y las llamadas a la función JSON/SSE son traducido de nuevo a lo privado `tool_search` Ciclo de vida para el cliente. Canonical OpenAI avance mantiene el tipo privado nativo sin cambios.
+
+Solicitudes con `authMode` distinto de `"forward"` convertir Codex `agent_message`
+elementos que contienen matrices no vacías de partes de texto plano admitidas en mensajes públicos de usuario, preservando esas partes y autor / destinatario legible Metadatos. `agent_message` ChatGPT Codex backend, y la ruta Hasta el momento, todos los países han rechazado el
+`422 unknown item type "agent_message"` — y porque Codex reproduce el historial de subagentes en En cada vuelta, ese fracaso se repite para el resto del hilo. Esta conversión deja contenido cifrado o desconocido sin cambios. Proveedores que utilizan `authMode: "forward"` retener estos elementos sin cambios. Para xAI Responses en HTTPS `api.x.ai` o `cli-chat-proxy.grok.com`
+usando el puerto estándar, un resultado hijo de cadena no en blanco también se convierte en un resultado `input_text`
+parte con su espacio en blanco exacto y líneas nuevas. Otros destinos retienen artículos de valor de cadena; Las cadenas en blanco y las partes cifradas/desconocidas mixtas no se convierten parcialmente. Véase [mensajes de agente](/es/reference/configuration/providers/#routed-agent-messages)
+para el comportamiento separado de recuperación de tareas cifradas opt-in.
+
+Para xAI Responses `auto` o `none` La selección de herramientas se omite cuando la normalización no deja herramientas en la solicitud, incluso cuando se elimina la búsqueda solo en caché. Selección de funciones forzadas válidas permanecen intactos. Las llamadas a herramientas personalizadas repetidas con ID de artículo no válido o que faltan reciben ID estables cuando su identificador de llamada, nombre y entrada son cadenas; su emparejamiento de llamada/resultado se conserva.
+
+El destino canónico ChatGPT Codex también normaliza dos formas públicas de Responses que su backend más estricto rechaza: totalmente textual `system` Mensajes en el interior `input` Se agregan a la nivel superior `instructions` string en el orden de solicitud, y el nivel superior `truncation` campo se ha eliminado. Esta reescritura está limitada al destino. Proveedores de clave pública / personalizada Responses y no canónicos Las pasarelas directas mantienen ambos campos sin cambios; un mensaje del sistema multimodal nunca se pliega parcialmente o silenciosamente caído.
+
+Para las continuaciones canónicas hacia adelante, solo cliente `prompt_cache_breakpoint` Las propiedades son eliminadas recursivamente dentro de los límites transversales. Cuando `store: false`, `item_reference` Las filas son también se omitió porque el destino no puede resolver un elemento que no persistía. Función/herramienta `call_id`
+pares y `reasoning.effort` son preservados.
+
+[Compatibilidad con Luna Reserve](/es/reference/cli/providers-accounts/#luna-reserve-alongside-routed-models)
+utiliza esta ruta canónica ChatGPT-forward, no key-auth o pasarelas Responses arbitrarias. Retiene la lista de permisos de llamadas seguras y la normalización de solicitudes con alcance de destino que se describen aquí. OpenCodex envía su cabecera de capacidad de reserva en la búsqueda de uso de cuenta principal propia; esa cabecera No es permiso en sí mismo. Las solicitudes de compatibilidad elegibles vuelven a verificar la autorización vinculada a credenciales en el despacho. Conversación y compactación son compatibles; ayudantes de visión, ayudantes de búsqueda en la web, y El relé de búsqueda independiente no lo es.
+
+Porque `key` auth, [`retryOn429`](/es/reference/configuration/) también se aplica aquí: un pre-stream 429 espera y repite la solicitud idéntica en la misma tecla antes de cualquier otro manejo, exactamente igual que El traducido `openai-chat` / Ruta de solicitud Anthropic. Personalizado `runTurn` Los transportes no son parte del bucle de reintento HTTP.
+
+- El analizador sin estado Responses de DeepSeek recibe la normalización del historial de alcance del proveedor: contexto se mueve después de una llamada de herramienta/lote de resultado no ambiguo. Las llamadas paralelas permanecen agrupadas antes sus salidas coincidentes para que cada llamada permanezca en el turno del asistente de razonamiento. Tolerante Los proveedores y los identificadores ambiguos duplicados, faltantes o fuera de orden mantienen su orden de entrada original.
+
+- `forward` URL → `{baseUrl}/responses`. A `key` proveedor predeterminados para el legado `{baseUrl}/v1/responses` construcción.
+- A `key` puede establecer un pariente validado `responsesPath`; el adaptador elimina una barra trasera de `baseUrl` y envía `{trimmedBaseUrl}{responsesPath}`. Para el Plan de Agente de Ark, use `baseUrl: "https://ark.cn-beijing.volces.com/api/plan/v3"` con `responsesPath: "/responses"`.
+- En `forward` solo se retransmite una lista de permisos de encabezado seguro (`FORWARD_HEADERS`): autorización, ChatGPT ID de cuenta y los encabezados beta/originador/sesión de OpenAI. Esta es la ruta ChatGPT-login Esto también potencia el [sidecares](/es/guides/sidecars/).
+
+
+
+## Afinidad de sesión de Código de Comando
+
+El OAuth `command-code` adaptador deriva un opaco `x-session-id` Desde el cliente identidad de hilo, luego la identidad de conversación de razonamiento-reproducción. Cuando ninguno de los disponible, utiliza una clave de caché rápida solo si la integración ha sido clasificaron esa clave como perteneciente a una conversación. Caché compartida o no clasificada Las claves no establecen afinidad de sesión; las solicitudes sin una identidad utilizable reciben Una nueva ID de sesión. La recuperación y la reproducción de la historia guardada en caché preservan esta clasificación.
+
+La clave API `commandcode` proveedor utiliza Chat Completions para la mayoría de los ID de modelo y el Adaptador Anthropic Messages`x-api-key`) por `claude-*` ids, que el código de comando sirve solo en `/provider/v1/messages`; el pin se aplica solo mientras el proveedor señala que punto final. Los `tokenlab` proveedor utiliza el mismo pin vinculado a un punto final para `claude-*` ids, que TokenLab declara solo para Chat y Messages, en `https://api.tokenlab.sh/v1/messages`. El código de comando admite el reenvío `prompt_cache_key`; esto es separado desde el encabezado de sesión del adaptador OAuth y no garantiza un éxito de caché del proveedor. El OAuth `command-code` flujos preestablecidos `/alpha/generate` como NDJSON. MiMo tool-call markup repetido por la puerta de enlace como texto se elimina cuando duplica una llamada real. Marcado después de la prosa ordinaria, incluyendo un marcador dividido en deltas posteriores del mismo bloque de texto, se mantiene y elimina solo si una llamada nativa lleva el mismo contenido. De lo contrario es publicado como texto y nunca restaurado como una llamada. Sólo espera mientras un nativo lo llama. duplicado sigue abierto, contando la primera llamada de la misma herramienta que comienza después del marcado; una vez que se cierran sin un partido, se libera de inmediato. Razonamiento u otros eventos que llegan entre ya no liberar un sobre retenido. Después de una parada limpia o un acabado de llamada a herramientas, un Envoltorio completo de herramientas declaradas sin contraparte nativa se restaura como un sobre real llamada; un giro interrumpido o fallido deja el marcado como texto. Una llamada desnuda al analizador No se puede leer en lugar de imprimir cuando todavía se abre, cierra y nombra una herramienta declarada, y la llamada real para herramienta llega o el giro termina limpiamente. Una llamada de forma libre se hizo eco sin su
+`` cerrar cuenta como completa una vez ` ` Llega. Esto se aplica a cada Modelo de código de comando MiMo sirve.
+
+## `anthropic`
+
+**Objetivos:** Anthropic **Messages** (`/v1/messages`).
+**Auth:** `key` (`x-api-key` por defecto, o `Authorization: Bearer` con `apiKeyTransport: "bearer"`) `oauth` (Bearer+ `anthropic-beta`, para Claude Pro/Max).
+
+- Convierte mensajes a bloques de contenido Anthropic (texto, imagen base64, `tool_use`, `thinking`).
+- Traducido Anthropic Messages El razonamiento de reproducción comparte el presupuesto de traducción de la solicitud, incluida la sobrecarga de codificación/decodificación de copias. HTTP 413 con
+ `translation_buffer_limit`; las firmas y los datos de razonamiento opacos nunca se truncan para adaptarse. El passthrough nativo de Anthropic utiliza su contrato de tamaño de cuerpo separado.
+- **Matemáticas de pensamiento extendido:** Anthropic requiere `max_tokens > thinking.budget_tokens`. El adaptador asigna el esfuerzo de razonamiento a un presupuesto (mínimo 1024 … max 32000), luego calcula una caja fuerte `max_tokens` con espacio libre de salida, y **gotas `temperature`/`top_p`** cuando el pensamiento está habilitado (Anthropic prohíbe ellos allí).
+- **Pantalla de pensamiento adaptativo:** modelos de pensamiento adaptativo (Opus 4.7+, Sonnet 5, Fable) por `thinking.display: "summarized"`, por lo que una larga reflexión llega a los clientes de Chat y Responses como Razonamiento de deltas en lugar de minutos de latidos cardíacos. Una petición que oculta el resumen del razonamiento (`reasoning.summary: "none"`) mantiene el proveedor por defecto.
+- **Salida estructurada:** Responses `text.format` y Chat Completions `response_format` solicitudes con `type: "json_schema"` Convertirse en Anthropic `output_config.format`. El formato se fusiona en un configuración de salida de pensamiento adaptativo existente, preservando una `output_config.effort`. Encaminado Anthropic Messages Las solicitudes conservan el mismo formato a través deOAuth traducción. El adaptador refleja el Anthropic TypeScript SDK's apoyado JSON Subconjunto de esquemas: las restricciones no soportadas se mueven a `description` como guía modelo, `oneOf` se convierte `anyOf`, y objeto esquemas reciben `additionalProperties: false`. Una raíz `$ref` mantiene su adyacente `$defs` Así que Las referencias locales siguen siendo resolubles. Campos envolventes OpenAI como esquema `name`, sobre
+ `description`, y `strict` no forman parte del formato de cable Anthropic. JSON modo de objeto sin un schema no tiene equivalente Anthropic y no se traduce. En la dirección inversa, los esquemas de salida Anthropic traducidos conservan el original del llamante esquema. `strict: true` requiere una raíz de objeto sin una unión de raíz y objetos completos cerrados a través de propiedades anidadas, elementos de matriz, uniones y definiciones: `properties` debe ser un objeto,
+ `additionalProperties` debe ser `false`, y `required` debe contener exactamente los nombres de sus propiedades. Objetos incompletos, palabras clave de esquema desconocidas y valores fuera de la estricta documentación de OpenAI Uso explícito del subconjunto `strict: false`; el clasificador utiliza una lista de permisos en lugar de perseguir cada restricciones no soportadas por separado. El proxy no inventa campos requeridos, cerrar un objeto abierto o descartar el esquema del llamante simplemente para obtener el modo estricto.
+- Siempre envía `anthropic-version: 2023-06-01`. Corrientes `content_block_delta` (`text_delta`,
+ `thinking_delta`, compatible `reasoning_delta`, `input_json_delta`) El decodificador SSE conserva estado del evento en los fragmentos fetch y acepta un terminal `message_stop` sin una nueva línea. En `message_stop`, el flujo traducido emite su resultado terminal y termina sin esperar de origen EOF. Los pings o comentarios posteriores no convierten ese mensaje completado en un flujo de búsqueda web Error. Pings y comentarios antes `message_stop` mantener el pensamiento largo se vuelve vivo; rechazos Los resultados incompletos no recuperables y las razones de parada de errores ascendentes siguen siendo fallas.
+- Para los giros Anthropic enrutados Responses con herramientas cliente, un protector de terminal limitado detecta el Caso de alta confianza en el que el usuario solicitó una acción pero Claude termina con un reclamo de ejecución y ninguna llamada de herramienta. Realiza como máximo una continuación interna; respuestas normales, aclaraciones. preguntas, giros de uso de herramientas y respuestas incompletas de transporte no se retiran automáticamente.
+
+## `google`
+
+**Objetivos:** Google **Gemini**, **Vertex AI**, y la antigravedad **Asistencia de código en la nube**. AI Studio utiliza
+`/v1beta/models/{model}:streamGenerateContent`; los otros modos usan sus puntos finales nativos Google.
+**Auth:** clave API, Vertex ADC o Google Antigravedad OAuth, seleccionado por `googleMode`.
+
+- **Las denegaciones de ubicación son errores de permiso, no solicitudes inválidas.** Google rechaza el soporte ubicaciones geográficas o de centros de datos con HTTP 400 `FAILED_PRECONDITION: User location is not
+ supported for the API use.` El proxy informa esto como `… location not supported: …` y lo clasifica como `permission_error` con código `location_not_supported`Así que un cliente no malinterpretó un rechazo de ubicación de red como un mensaje mal formado. La respuesta directa HTTP mantiene la de origen 400; rutas de terminal de solo mensaje infieren 403 (clase de permiso). La restricción en sí es Google de — el proxy no se enruta alrededor de él.
+- Solicitud del sistema → `systemInstruction`; mensajes → `contents[]` (Asistente → `model`); herramientas →
+ `functionDeclarations`. Datos-URL imágenes → `inline_data`.
+- Los identificadores de llamada a herramientas se sintetizan cuando Gemini los omite. Vertex y Antigravedad preservan y reproducen opaco `thoughtSignature` valores para que las continuaciones de resultados de herramientas conserven la continuidad del razonamiento Gemini. La caché de firma se captura en el directorio config, por lo que las continuaciones también sobreviven al proxy se reinicia.
+- **Las formas de respuesta mal formadas fallan al cerrarse.** El candidato reclamado, su `content`, o su
+ `content.parts` que no es el contenedor documentado termina el turno con un
+ `google response contained invalid …` error nombrando la razón estructural y la ofensa tipo de valor — nunca su contenido. La ausencia se maneja separadamente de la corrupción: un ausente,
+ `null` o vacío `content` o `parts` completa el turno normalmente, un trozo de transmisión cuya
+ `candidates` está ausente, `null` o vacío se omite para que el turno se complete en una terminal posterior marco, y una respuesta almacenada en búfer que no lleva ningún candidato en todas las
+ `google response contained no candidates`. Una raíz `data: null` el marco de keepalive todavía se salta como relleno.
+- Los lotes de llamada a herramientas se cierran en un turno de usuario inmediatamente adyacente que contiene uno ordenado.
+ `functionResponse` por llamada representable. Las historias interrumpidas reciben un marcador explícito de resultado perdido; resultados duplicados o independientes se conservan como texto marcado (y hermanos de imagen) en emitido como inválido no emparejado `functionResponse` partes.
+- **Entrada de vídeo y procesamiento angélico.** El contenido compatible con OpenAI
+ `{"type": "video_url", "video_url": {"url": "…", "processing": "agentic"}}` Se acepta en ambos las rutas de ingreso de Chat y Responses. `url` es necesario; `processing` Es opcional y es en la parte Gemini como `media_processing` (`STATIC` es el valor predeterminado de Gemini, `AGENTIC`
+ solicita comprensión de video agentico). El campo se sienta en el **parte**, al lado `inline_data` o
+ `file_data`, por lo que se aplica a bytes en línea y URIs buscados por igual — no es el Interacciones API `processing`. Una petición que omite `processing` no gana ningún campo, por lo que las llamadas existentes son sin cambios.
+
+ Se manejan tres formularios URL, y solo tres:
+
+ | `url` | enviado como |
+ | --- | --- |
+ | `data:` URL | `inline_data` con los datos del propio tipo de medios de URL |
+ | YouTube ver URL (`youtube.com`, `youtu.be`, `m.`/`music.`/`-nocookie` variantes) | `file_data.file_uri` |
+ | `https://generativelanguage.googleapis.com//files/` — el formulario de recursos de archivos API, donde `` es `v1`, `v1beta` o `v1alpha` | `file_data.file_uri` |
+
+ Cualquier otro URL remoto se mantiene como el marcador de texto `[video: ]`porque el adaptador no tiene tipo de medios para él y no hay evidencia Gemini lo fetch. El allowlist se empareja en el análisis El host de URL y la ruta sobre HTTPS — no en una subcadena — para que un host parecido no se convierta en un host
+ `file_data` referencia el proxy pide Gemini a fetch. El camino está anclado al principio, por lo que el punto final de carga resumible (`/upload//files/`) es *no* aceptado: no es un recursos legibles, y `file_data.file_uri` le pide a Gemini que no haga referencia a lo que se le da. `file_data` lleva `file_uri` solo; no adivinado `mime_type` se adjunta.
+
+- **Salida de imagen en línea:** cuando el modelo es uno de los ID de chat explícitos con capacidad de imagen (`gemini-3.1-flash-image`, `gemini-2.0-flash-preview-image-generation`, o
+ `gemini-3-pro-image-preview`), el adaptador envía `responseModalities: ["TEXT", "IMAGE"]`. ID de generación de medios independientes como `gemini-3-pro-image` No están incluidos. Devuelto
+ `inlineData` las piezas se materializan bajo el configurado OpenCodex `artifacts/` directorio y aparece como enlaces de imagen de marcado a la ruta opaca autenticada
+ `/v1/opencodex/artifacts/` (no `file:` URIs o rutas del sistema de archivos host). Cada imagen está tapada a 50 MB y cada respuesta a 100 MB de datos descodificados; se rechazan cargas útiles base64 mal formadas. Los artefactos se podan automáticamente cuando el recuento supera los 200 archivos.
+
+## `kiro`
+
+**Objetivos:** El Amazon CodeWhisperer `GenerateAssistantResponse` servicio utilizado por Kiro (`https://runtime.{region}.kiro.dev/`).
+**Auth:** Kiro OAuth acceder a token como Bearer, con metadatos de región/perfil de la credencial Kiro.
+
+- Construye Kiro `conversationState`, mapea las herramientas Codex y los resultados de la herramienta, y envía bloques de imágenes compatibles por el cable Kiro.
+- Conserva como máximo 20 imágenes en línea por mensaje y 100 por solicitud. Se omiten las imágenes históricas más antiguas primero cuando la solicitud excede el límite, con un marcador de texto en los mensajes afectados; imágenes recientes en el giro actual permanecen disponibles.
+- Cuando un dato de imagen en línea URL carece de bytes de imagen o una coma, omite esa imagen con un marcador de texto en su turno de usuario o resultado de la herramienta. Las referencias de imágenes remotas usan un marcador separado; ningún marcador repite el URL.
+- Coalesce las salidas adyacentes de la misma llamada de herramienta original en un resultado Kiro. El texto permanece ordenado, las imágenes conservan los límites por mensaje existentes y cualquier indicador de error permanece establecido. Usuario, desarrollador, asistente u otra herramienta finaliza el grupo. Identificadores originales distintos que mapean con el mismo ID de Kiro normalizado.
+- Las salidas combinadas mantienen el texto real y la información de fallos sin insertar una pista de salida vacía para un trozo en blanco posterior. Un solo resultado mantiene su normalización existente; un texto completamente vacío. grupo recibe un recurso alternativo, con una redacción neutra cuando hay imágenes o un indicador de error.
+- Trata a un cliente `parallel_tool_calls: true` valor como permiso en lugar de un requisito de cable. Kiro permanece serializado: el catálogo enrutado anuncia que no hay capacidad de herramienta paralela y la El adaptador no envía ningún campo de control paralelo de origen, pero las vueltas de herramienta Codex ordinarias no se rechazan Solo porque el cliente permite llamadas paralelas.
+- Acepta Responses `text` controles que no son salida estructurada — `text.verbosity` y
+ `text.format: {"type":"text"}` — sin reenviarlos. Kiro no tiene campo de alambre para ninguno, así que Son ignorados en lugar de rechazados. Salida estructurada (`text.format` de tipo `json_schema`
+ o `json_object`) todavía se rechaza: el cable Kiro no puede restringir la forma de la respuesta, y un quien llama esperando JSON recibiría prosa.
+- Descifra `application/vnd.amazon.eventstream`, reconstruye eventos de texto/pensamiento/herramienta, detecta herramienta truncada JSON, y estima el uso porque el flujo ascendente no devuelve los recuentos de token.
+- Utiliza el configurado `baseUrl` literal cuando es costumbre. Un canónico
+ `runtime.{region}.kiro.dev` URL sigue la región API de la credencial importada; solo que canónica forma es elegible para una reserva presupuestada a `q.{region}.amazonaws.com` Después de un endpoint, firma, DNS, o falla de conexión, o HTTP 502/503/504 recibido antes de la salida.
+- Posee la recuperación de conexión-reset segura para reproducción, ese único recurso de punto final elegible, un OAuth actualizar/reproducir después de HTTP 401 y recuperación limitada para Kiro transitorio 429s. Reutilización compartida y Una sola sonda posterior al enfriamiento evita que las solicitudes simultáneas agoten los presupuestos de reintentos independientes; Los fallos de cuota dura no se vuelven a intentar en esa misma cuenta, y otros errores de servicio no se repiten. Cada envío físico Kiro utiliza salida de proveedor configurada. Una fecha límite de cabecera devuelve 504; la cancelación de la persona que llama detiene el turno. Los cuerpos finales HTTP 5xx usan texto público fijo sin detalles ascendentes.
+- Su analizador sin flujo drena el mismo flujo de eventos para el bucle de búsqueda web.
+- Informes de uso por cuenta. `AmazonCodeWhispererService.GetUsageLimits` on
+ `https://management.{region}.kiro.dev/` devuelve la asignación del plan, que se convierte en la ventana de cuota mensual para esa cuenta; se informa de un saldo de prueba gratuita como su propia ventana. ARNLuego, se almacena API/SSO región. Un AWS
+ La cuenta de Builder ID no tiene perfil ARN Por su cuenta, la sonda envía el mismo perfil de servicio Builder ID que utilizan las solicitudes de generación. ARN Una respuesta ilegible o no reconocida se informa como desconocida en lugar de como uso cero, y una cuenta cuyo exceso está habilitado no se trata como agotada simplemente por pasar su límite. AWS, así que trata los números como el mejor esfuerzo. Una cuenta sin ID de constructor sin un perfil utilizable ARN no hace ninguna solicitud de uso; el uso no está disponible mientras que una barra de cuota de mismo inicio de sesión anterior permanece visible. La prueba de cuota y agotamiento conocida sobrevive al reinicio solo para el mismo inicio de sesión, cada uno hasta su propio reinicio o vida útil de diez minutos. La evidencia faltante, antigua o mal formada se desconoce. El saldo de crédito preciso del plan se conserva con esa lectura de cuota de identidad. Kiro `meteringEvent` Los valores de crédito son gastos de solicitud medidos: el último valor dentro de una respuesta física se utiliza, y se añaden créditos de envíos facturados por separado. El uso del token sigue siendo estimado; los créditos nunca se infieren de tokens.
+- Después de una solicitud admitida, lee los modelos disponibles de la cuenta de la administración regional. servicio sin demorar la solicitud. Los resultados almacenados en caché agregan ID de modelo al catálogo enviado. Las respuestas vacías o no reconocidas conservan la lista enviada y cualquier última lista de buenas cuentas. Modelo La membresía guía la preferencia de cuenta elegible; las identificaciones desconocidas todavía van hacia arriba. Ingresos notificados Los límites informan las ventanas de contexto, combinadas conservadoramente con los límites enviados cuando la evidencia es parcial. Las cuentas que no han servido aún no tienen evidencia de lista.
+- Participa en la rotación de cuentas múltiples. Con dos cuentas almacenadas, un rechazo de tasa de solicitud enfría la cuenta rechazada brevemente; una negativa exacta mensual en HTTP 400 o 429 lo excluye hasta que expire el restablecimiento o la prueba observados. Una suspensión HTTP 403 confirmada cuarentenas que tienen en cuenta en el proceso, mientras que un 403 ordinario no gira. Reactiva La rotación permanece disponible cuando `oauthAccountFailover.enabled` es falso. Rechazo-consciente selección antes del primer envío requiere preferencia proactiva, con la configuración del proveedor tener prioridad sobre la configuración global. Un giro completo desde el mismo inicio de sesión borra un Veredicto de agotamiento más antiguo. Cada portador rotado lleva su propio perfil ARN y región.
+
+
+
+### Semántica de finalización
+
+El texto del asistente Kiro no lleva ninguna fase de fin-giro confiable por sí mismo. Su terminal `metadataEvent`
+puede llevar un nativo `stopReason`, pero Kiro puede etiquetar la prosa de progreso como `END_TURN`. En habilitado para herramientas turnos, `END_TURN` y `STOP_SEQUENCE` Por lo tanto, pruebe sólo que la inferencia se detuvo; sigue siendo comentario y entra en la validación de finalización limitada.
+
+`END_TURN`, `STOP_SEQUENCE`, o una razón de parada faltante puede usar la ruta de compatibilidad. Otros explícitos razones ya han terminado la inferencia de origen, por lo que el adaptador informa de ellos en gasto de otra solicitud de modelo: un límite de superficies de salida-token como salida incompleta que un cliente puede continuar, mientras El agotamiento de la ventana de contexto aparece como un error de longitud de contexto no reintentable en lugar de como truncado salida. Filtrado y barandilla se detiene la superficie como salida incompleta filtrada, y un `TOOL_USE` parada que llega sin una llamada de herramienta real se informa como una contradicción en lugar de tratarse como progreso.
+
+Cuando existe una herramienta de cliente común, opencodex agrega un
+`codex_kiro_final_answer` herramienta a la solicitud de flujo ascendente; flujos de texto de progreso como comentario y No puede terminar el turno. El adaptador consume la llamada privada, emite su respuesta como texto final, y nunca expone la herramienta privada a Codex o Claude Code. Porque la razón de parada solo llega a al final de la secuencia, el texto del asistente en un turno habilitado para herramientas se mantiene hasta una llamada real a la herramienta comienza o termina el flujo, luego lo libera como comentario a menos que la herramienta privada proporcione la información final. Respuesta. Cuando el sidecar de búsqueda web está activo, El comentario aún se transmite antes del evento terminal; solo los eventos necesarios para decidir si el modelo solicitó que una búsqueda sintética permanezca almacenada en búfer.
+
+Una pregunta sin la que el modelo no puede proceder es también una respuesta final. El contrato inyectado le dice a Enrutado modelo que cuando se necesita una decisión, una pieza de información, o una aclaración sólo el usuario puede dar, debe entregar esa pregunta a través de `codex_kiro_final_answer` y parar, en lugar de escribir la pregunta como texto ordinario y continuar. Tal giro llega como cualquier otro completado. respuesta: texto final con el turno terminado, no comentario y no una llamada de herramienta del cliente. Sin esto, el contrato describía solo "todavía funcionando" y "completamente completo", y un modelo pregunta no tenía manera de decir que — el resultado observado era una pregunta y un auto-invalidación emitida como uno mensaje, seguido de otra llamada a la herramienta desde la misma inferencia.
+
+Si Kiro se detiene sin llamar a la herramienta de finalización, el adaptador realiza una continuación. Razonamiento... solo los reintentos conservan el turno original válido de usuario/resultado de la herramienta en lugar de fabricar un producto vacío mensaje de asistente; el progreso visible se reproduce con una instrucción de propiedad de adaptador no vacía. Antes transporte, la conversación generada se comprueba para alternar roles, giros estructurales no vacíos, e identificadores de uso/resultado de herramientas coincidentes. La salida de la herramienta vacía recibe un marcador de posición neutral no vacío. Los retry no puede recurse: un retry vacío o de razonamiento solo se devuelve como reintentable incompleto, mientras que un La llamada de la herramienta del cliente real mantiene el turno abierto. Una respuesta de herramienta de finalización siempre se emite como
+`final_answer`, incluso cuando se repite exactamente el comentario anterior, porque la corrección de fase es más importante que la deduplicación cosmética. Las solicitudes libres de herramientas conservan el comportamiento normal de finalización del texto.
+
+
+
+### Esfuerzo de razonamiento
+
+La familia GPT-5.6 utiliza `additionalModelRequestFields.reasoning.effort`; `claude-opus-5`
+usos `additionalModelRequestFields.output_config.effort`. Porque `gpt-5.6-luna` y
+`gpt-5.6-terra`, sólo `low`, `medium`, `high`, y `max` Utilice la ruta nativa verificada. Sus `xhigh` La selección conserva las instrucciones de pensamiento limitadas anteriores en el contenido del usuario. porque ese peldaño nativo no ha sido verificado. `gpt-5.6-sol` y `claude-opus-5` mantener Su nativo existente `low`, `medium`, `high`, `xhigh`, y `max` comportamiento. Otros Kiro Los modelos usan razonamiento emulado; un control de esfuerzo anunciado no es prueba de apoyo nativo.
+
+## `cursor`
+
+**Objetivos:** Cursor `agent.v1.AgentService/Run` sobre HTTP/2 Conectar la transmisión en `api2.cursor.sh`
+por defecto. Con `upstreamHttpVersion: "http1.1"` (o `"h1"`), utiliza Cursor de HTTP/1.1 par de compatibilidad: `agent.v1.AgentService/RunSSE` para la salida del servidor y
+`aiserver.v1.BidiService/BidiAppend` para los mensajes del cliente.
+**Auth:** Cursor OAuth/acceso token desde `provider.apiKey` o la cabecera de autorización reenviada.
+
+- Usos `runTurn` en lugar de la ruta ordinaria fetch/parse. Solicitudes, eventos de servidor, argumentos de herramientas, controles de uso y las respuestas de los clientes se codifican con `@bufbuild/protobuf` esquemas en
+ `cursor/gen/agent_pb.ts` y enmarcado como mensajes de conexión.
+- Reproduce el estado de la conversación a través de blobs con contenido direccionado, mapea las llamadas de la herramienta del servidor a Codex, descubre modelos Cursor en vivo a través del protobuf `GetUsableModels` RPC, y reintenta solo antes de un La solicitud de ejecución está comprometida con el cable.
+- Después de un giro sin herramientas exitoso, el adaptador mantiene Cursor ConversationStateStructure devuelto en un almacén de proceso local y reutiliza ese punto de control en la siguiente continuación lineal validada en lugar de reconstruir toda la historia raíz. Los turnos de resultados de herramientas reutilizan el último turno completado punto de control más solo el sufijo descubierto cuando se conoce el límite del mensaje cubierto. La búsqueda de prefijos sin refrescar requiere una conversación Cursor recordada o un hilo de cliente estable (incluyendo la sesión de escritorio limitada / retroceso del hilo) y un punto de control propiedad de ese mismo conversación con el proveedor; de lo contrario, se reproduce completamente. Compactación, aislamiento helper/shadow, desajuste cuenta/modelo, falta de refs, fallos de decodificación, recuperación forzada-fresca, y invalid_argument reintentos caen de nuevo a la repetición completa existente. A El reinicio del proceso elimina el almacén en memoria y las repeticiones completas. Cursor Conectar todavía no expone cache_read_tokens autorizada, por lo que el uso de OpenCodex no es un contador de aciertos en caché. El respaldo de escritorio limitado almacena solo un propietario derivado de HMAC de proceso; sesión/hilo en bruto cabeceras y OAuth/material de autorización nunca se escriben en el estado del punto de control. Cursor El transporte en vivo respaldado por OAuth y el descubrimiento de modelos filtrados por cuenta siguen siendo experimentales; vea el
+ [guía del proveedor](/es/guides/providers/) y [Configuración del proveedor Cursor](/es/reference/configuration/providers/#cursor-provider-adapter-cursor)
+ para los configuración de inicio de sesión y transporte. La reutilización del punto de control es automática y no tiene ninguna configuración de usuario.
+- Las continuaciones de herramientas de modelo externo mantienen la última solicitud real del usuario en la acción activa; Los resúmenes automáticos y el contexto del navegador ambiental independiente siguen siendo contexto histórico. La entrada de usuario en blanco o solo imagen no revive una solicitud anterior. Guía de modo de código Grok 4.6 requiere una emisión explícita del resultado y nunca supone una salida emitida de celda completada vacía. La salida faltante requiere una comprobación de estado de solo lectura, no repetición de un efecto secundario completado. El aviso de repetición se restablece en un nuevo turno de usuario / desarrollador y permite las encuestas solicitadas. Si las raíces del punto de control transportadas exceden la repetición presupuesto, la historia disponible se reconstruye bajo los mismos límites. Estas reparaciones no garantizan idéntica redacción o comportamiento de razonamiento entre las rutas Cursor y xAI.
+- Honores `upstreamHttpVersion` tanto para el descubrimiento de modelos en vivo como para la inferencia. `auto`, `http2`, y `h2`
+ preservar el transporte HTTP/2 existente; solo `http1.1` y `h1` Seleccione el modo de compatibilidad.
+- Expone el router Cursor como `cursor/auto` más explícito `cursor/auto-cost`,
+ `cursor/auto-balance`, y `cursor/auto-intelligence` entradas. Los niveles explícitos están codificados en
+ `requested_model.parameters` Mientras que el legado `cursor/auto` La entrada conserva la cuenta/equipo por defecto.
+- Envía regularmente `cursor/grok-4.5` niveles con los identificadores de cable de descubrimiento en vivo exactos de Cursor (`cursor-grok-4.5-low`, `-medium`, o `-high`) Conserva `cursor/grok-4.5-fast` seleccionable mientras El envío de la canónica `grok-4.5` modelo con separado `effort` y `fast=true` parámetros.
+- La ejecución local nativa de Cursor-sistema de archivos/shell/red se niega de forma predeterminada. Explícito `mcpServers`
+ y `desktopExecutor` Las integraciones tienen opt-ins separados; `nativeLocalExec: "on"` permite el un ejecutor incorporado más amplio y evita la aprobación / semántica de sandbox Codex y el legado
+ `unsafeAllowNativeLocalExec: true` Es equivalente sólo cuando `nativeLocalExec` es inestable. Primer plano `shellArgs` y `shellStreamArgs` son una excepción: ambos son rechazados antes de la aparición en cada plataforma hasta que la propiedad descendiente respaldada por kernel esté disponible. Usar herramientas de shell cliente; La ejecución de background-shell y otras operaciones nativas conservan su política existente.
+- La respuesta de denegación sigue al catálogo de solicitudes. Los modelos explícitos de la familia Claude Cursor reciben redacción factual que nombra las herramientas disponibles sin instrucciones para ocultar o evitar discutir la redirección. El comentario de enrutamiento de hecho puede preceder a la siguiente llamada de herramienta sin finalizar el turno. Cuando no hay ningún cliente o herramientas MCP configuradas disponibles, se pide a los modelos Claude que respondan sin herramientas o informar de la limitación en lugar de llamar inexistentes herramientas de shell / edición. Otros modelos, incluyendo Auto/predeterminado, conservan la redacción y los comentarios de redirección silenciosa existentes. guardia. La disponibilidad de la herramienta, la política de ejecución y el comportamiento de aprobación/caja de arena no cambian. En el modo de código — una forma libre unificada `exec` y no hay puente de cáscara desnuda — los puntos de redirección en el interior `exec`donde: shell, archivo, búsqueda y fetch están anidados `tools.(...)` Ayudantes de la celda JavaScript, y nunca recomienda que el modo de código de puente de shell de nivel superior no exponga. Un catálogo que lleva `shell_command`/`exec_command` o una forma no libre unificada `exec` mantiene la redacción del puente; un catálogo que no lleva ni — un cliente orquestador exponiendo solo sus propias herramientas Responses, por ejemplo, — se redirige a los nombres de cable reales de la solicitud, por lo que el herramienta que existe en lugar de un alias que no puede ver.
+- Se informa de una puerta de política de datos Cursor reconocida con su título, la acción que requiere y el Cursor Revisión del panel de control URL en lugar de desnudo `failed_precondition: Error`. El reconocimiento se limita al detalle estructurado conocido: los detalles desconocidos o mal formados mantienen el error de conexión genérico, ningún texto ascendente, botón, URL, o la acción de consentimiento se reenvía o ejecuta, y el fallo permanece inretenible. Revisar y aceptar una política de datos sigue siendo una acción del usuario en Cursor sí mismo.
+
+Los esquemas de shell compatibles con Codex retienen los permisos de sandbox, la justificación y el uso reutilizable reglas de prefijo y modo de inicio de sesión. Herramientas de forma libre exponen una cadena requerida `input`
+y preservar su orientación específica de la herramienta, como la envoltura de parche requerida; bare `exec_command` y `shell_command` Los nombres están reservados para shell no freeform. Puentes. Espacio de nombres es una herramienta de forma libre personalizada que utiliza cualquiera de los nombres. Estos esquemas Las declaraciones no otorgan aprobación ni cambian la política de ejecución.
+
+## `devin`
+
+**Objetivos:** Cognición `exa.api_server_pb.ApiServerService/GetChatMessage` sobre HTTPS Conectar streaming en `server.codeium.com`.
+**Auth:** Devin/Cognición API clave de `provider.apiKey` o la cabecera de autorización reenviada. Login primero intenta importar la credencial que Devin CLI ya tiene instalada: `devin auth
+login` completa el CLIEl propio PKCE Inicie sesión y escriba un `devin-session-token` a su
+`credentials.toml`que es la misma credencial `SeatManagementService.RegisterUser` mentas para un inicio de sesión del navegador. Cuando no existe una credencial CLI utilizable, el inicio de sesión vuelve al inicio de sesión del navegador Auth0 e intercambia el token pegado a través de `RegisterUser` para una clave API de larga duración. `devin-cli` sobrevive solo como un alias obsoleto — `ocx login devin-cli` Todavía rutas a `devin`y un salvado configuración que nombra el id antiguo se reescribe al inicio.
+
+- Usos `runTurn` en lugar de la ruta ordinaria fetch/parse. Las solicitudes y los eventos del servidor están codificados con encuadre protobuf manual `devin/cloud-direct/wire.ts`; el ordinario `buildRequest` /
+ `parseStream` El camino está desactivado.
+- Las conversaciones nombradas reutilizan una trayectoria a través de giros secuenciales, con alcance a la credencial resuelta y anfitrión inquilino. La identidad de hilo propio tiene prioridad sobre los marcadores de sesión (`session_id`,
+ `session-id`, o `x-session-affinity`) Cuando una identidad de hilo propio y un no vacío
+ `x-codex-parent-thread-id` ambos se suministran, su pareja identifica la conversación, así que las identificaciones propias iguales bajo diferentes padres permanecen separadas. Independiente propio y solo de sesión Las identidades conservan su precedencia existente; un padre compartido solo no es una identidad de conversación. Los turnos superpuestos reciben distintas ID. El proxy retiene como máximo 256 entradas en la memoria, desaloja solo las entradas inactivas y libera las reclamaciones después de la finalización, falla o cancelación. Reiniciar el proxy borra la retención. Las llamadas sin nombre continúan asignando un ID por solicitud. Esto admite continuidad pero no garantiza un éxito de caché ascendente o un ahorro particular.
+- La continuidad del razonamiento lleva firmas de proveedores a través de turnos. Si la cognición rechaza una firma Anthropic reproducción antes de la salida visible, Devin reintenta una vez con la firma retenida y el Pensamiento texto preservado.
+- Descubrimiento de modelos en vivo a través `GetCascadeModelConfigs`; la semilla estática se filtra contra el la lista en vivo de la cuenta para que los modelos que no están en el plan se retiren en lugar de fallar a pedido.
+- Las definiciones de la herramienta se codifican en la solicitud y los eventos de llamada a la herramienta se descodifican a partir de la respuesta. Flujo. Cognición impone un límite de longitud por herramienta-descripción (6.998 caracteres) y una frase exacta blocklist; el adaptador desinfecta los disparadores conocidos y trunca las descripciones demasiado largas antes de codificación.
+- Las teclas API de Devin/Cognition no tienen punto final de actualización. Si Cognition rechaza una clave almacenada con 401, OpenCodex marca esa cuenta para la reautenticación y puede usar otra cuenta de inicio de sesión para El turno. Correr `ocx login devin` de nuevo para una clave de inicio de sesión del navegador revocada. Una cuenta importada por CLI Puede seguir un `devin auth login` rotación de teclas solo cuando su ID de cuenta o correo electrónico almacenados coincide con la identidad CLI acuñada. Importaciones sin una identidad almacenada requieren un
+ `ocx login devin` Después de la rotación. Un legado `devin-cli` slot para esa misma cuenta ya puede Mantenga la nueva clave; una cuenta diferente que la mantenga bloquea la adopción. Si el archivo CLI es temporalmente ilegible o la verificación de identidad no está disponible, reintente después de que se recupere. Una cuenta en pausa permanece en pausa durante esta recuperación y devuelve 403.
+- Solo la credencial es local cuando se usa la ruta de importación CLI. El giro en sí mismo va a Cognición de cualquier manera, por lo que la importación y las rutas de inicio de sesión del navegador difieren en nada, pero donde el La credencial vino de. Instalar el CLI con
+ `curl -fsSL https://cli.devin.ai/install.sh | bash` o `brew install --cask devin-cli`, correr
+ `devin auth login` Una vez, agregue el proveedor.
+- Una construcción anterior envió un segundo adaptador bajo el id `devin-cli` que corrió el giro como un Sesión de protocolo de cliente de agente contra un servidor local `devin acp` proceso infantil. Se ha ido. A salvo configuración que todavía nombra ese adaptador se reescribe a `devin` En el arranque, incluyendo a fila con nombre personalizado como `"devin-acp"`.
+- La solicitud de chat está calibrada, no adivinada. Tres cosas lo unen: la credencial es el sesión token se duplicó y se unió `Authorization: Basic` mientras el cuerpo protobuf mantiene una copia, el sobre de solicitud sube sin comprimir, y `Metadata` .31 Lleva un 732 caracteres cuya longitud — no valora — el servicio comprueba. Dentro
+ `CompletionConfiguration`, 2 es el límite de salida y 3 es `max_newlines`, enviado a un gran fijo valor; intercambiar esos dos hace que cada turno falle con un `invalid_argument`. Sin llamada o tapa configurada, la tapa de salida es el propio techo del modelo seleccionado del catálogo, y 8192 solo cuando el catálogo no está disponible. Se rechaza una temperatura de exactamente 0, por lo que se fija al valor aceptado más pequeño.
+- Una pre-salida 429 con un retardo de recuperación indicado aparece inmediatamente por defecto, liberando el capacidad compartida de turno admitido. Establecer `OPENCODEX_DEVIN_STATED_RESET_WAIT_MS` a una acumulación positiva Permite en milisegundos esperar el retraso completo y reproducir la misma solicitud hasta dos veces. La asignación tiene un límite máximo de una hora; un valor ausente, vacío, inválido o negativo desactiva la espera. Una espera independiente opcional mantiene el giro HTTP y su ranura de giro activo compartida abiertos durante todo el retraso. Los giros de transmisión inician SSE en un latido cardíaco seguro y luego programan los latidos cada 500 ms o menos durante la espera para que el perro guardián del puesto se mantenga alimentado. Una presalida posterior 429 puede rotar a otra salida. cuenta OAuth elegible; sin una, se informa dentro de la secuencia ya abierta. Buffered Grok mantener un HTTP 429 y `Retry-After` En un rechazo final. Los niños combinados muestran la pre-salida 429 inmediatamente, incluso cuando la espera está habilitada, por lo que el combo puede intentar su próximo objetivo sin mantener una respuesta no comprometida. Retrasos superiores a los restantes asignación en la superficie de giros independientes el original 429 sin un reintento temprano. Los final 429 conserva el retraso declarado como una pista de enfriamiento. A `~` en su mensaje marca un retraso recuperado a partir de una frase de remolque de segunda mano en lugar de un valor de encabezado exacto.
+- Para los flujos Codex Responses, los fallos conocidos de límite de velocidad tipificados con un retardo válido se normalizan a
+ `rate_limit_exceeded` con `Please try again in Ns.` antes del detalle redactado original. Esto permite a Codex cumplir con el retraso establecido y usar su notificación de reconexión nativa sin agregar un elemento de razonamiento al historial de conversaciones. Los reintentos de clientes son finitos y están controlados por El cliente `stream_max_retries`; esto no promete recuperación después de apagar o reiniciar la aplicación. Salir `OPENCODEX_DEVIN_STATED_RESET_WAIT_MS` Desactivado o `0` para que el cliente tenga la espera. Una asignación proxy positiva mantiene la espera existente de propiedad de proxy; el cliente solo se entera de una rechazo final después, y los reintentos del cliente pueden multiplicar los intentos por solicitud del proxy. La conmutación por error de destino/cuenta combinada y el manejo de Grok HTTP 429 conservan su pedido existente. La ubicación exacta de la interfaz de usuario y el texto dependen de la versión Codex; esto no es una cuenta atrás personalizada. Los errores de límite de velocidad de solo mensaje usan el mismo formato de retardo más largo. Errores tipificados sin un retraso útil conservar su código original. Los reintentos de cliente crean nuevas solicitudes HTTP; no comparten el contador de envío o la asignación de espera acumulativa de una solicitud proxy. Esto compatibilidad no reemplaza los controles de una espera proxy explícitamente habilitada.
+- Puente no oficial experimental; no se muestra en el panel de control predeterminado. Ver la
+ [guía del proveedor](/es/guides/providers/) para instrucciones de inicio de sesión.
+
+La identificación del modelo que usted elige es una familia de modelos, y el esfuerzo de razonamiento escoge la Variante. Sin esfuerzo, se utiliza la variante por defecto de la familia: `swe-1-7`
+selecciona `swe-1-7-medium` y `swe-2` selecciona `swe-2-high`. Un esfuerzo cambia solamente el esfuerzo y aterriza en la variante más baja en o por encima de él, o la más alta abajo cuando nada está arriba, así que un peldaño perdido nunca rechaza el razonamiento:
+`swe-1-7` en `high` selecciona la fila Max `swe-1-7`, `swe-2` en `low` selecciona
+`swe-2-medium`, y `kimi-k3` en `medium` selecciona `kimi-k3-high`. `fast` selecciona la variante Fast y `1m`, `max-1m` o `none-1m`
+la variante de contexto 1M donde la familia tiene una; de lo contrario no cambian nada. Una identificación con sufijo tal como `claude-opus-5-high-fast` mantiene su variante sin una esfuerzo, y con uno mantiene su configuración rápida y contextual a menos que eso baje el esfuerzo: sin una fila rápida en o por encima del esfuerzo, se usa la fila regular. Una identificación que nombra una variante que tu cuenta ha deshabilitado se envía como nombre cuando el esfuerzo todavía aterriza en él, por lo que la solicitud falla con el propio error de esa variante en lugar de cambiar de nivel silenciosamente. La resolución nunca se mueve a otra familia. Cuando el catálogo de la cuenta no está disponible, el esfuerzo es En lugar de ello.
+
+## `zed`
+
+**Objetivos:** Zed Hosted AI's `POST /completions` punto final en `cloud.zed.dev`.
+**Auth:** Zed identidad de cuenta de aplicación nativa más acceso token, intercambiado por un LLM de corta duración token.
+
+- Utiliza el inicio de sesión de devolución de llamada nativo RSA (`ocx login zed`) y pares el devuelto `user_id` Con el acceder a token para búsquedas de usuarios y organizaciones con alcance de cuenta.
+- Envuelve los constructores de chat Anthropic Messages, Google Gemini, OpenAI Responses y xAI existentes dentro de la envolvente del proveedor de Zed, luego desenvuelve los eventos NDJSON/SSE de Zed de nuevo en `AdapterEvent`.
+- Se ajusta a una lista de modelos en vivo limitada y con alcance de cuenta para la visualización y la inferencia del proveedor-familia; la lista no es una lista de modelos permitidos, por lo que todavía se reenvía un identificador de modelo proporcionado por la persona que llama.
+- Experimental, no oficial y no respaldado por Zed. Usarlo puede romper los términos de servicio de Zed y puede limitar o suspender la cuenta de Zed; ese riesgo es el del usuario para aceptar.
+
+## `azure-openai` (alias: `azure`)
+
+**Objetivos:** **Azure OpenAI**. Envolturas `openai-responses` (Así también `passthrough: true`).
+**Auth:** `key` vía el `api-key` encabezado (no Bearer).
+
+- Los delegados solicitan la creación en el paso Responses, valida que `baseUrl` no contiene plantilla no resuelta marcador de posición, y reemplaza `Authorization` con `api-key`. El URL configurado apunta directamente a Azure's v1 Responses API, por lo que el adaptador no se adjunta `api-version`.
+- Comparte la recuperación de Responses para el estado de razonamiento producido por otro proveedor:
+ `400 invalid_encrypted_content` se reenvía una vez sin ese estado. Véase
+ [Formatos proxy](/es/reference/proxy-formats/) en "Cambiar de proveedores en una conversación existente".
+
+
+
+## Utilidades de imagen (`image.ts`)
+
+Ayudantes compartidos utilizados por los adaptadores con visión clara:
+
+- `parseDataUrl(url)` — dividir a `data:;base64,` URL en `{ mediaType, base64 }` por Bloques de imagen Anthropic/Google.
+- `contentPartsToText(content)` — aplanar partes de contenido a texto para mensajes de herramienta de solo texto (Una imagen no descrita se convierte en un corto `[image]` marcador, nunca una burbuja base64 que explote token).
+
+
+
+## Instantáneas de terminal Grok Build
+
+Solicitudes marcadas con `x-opencodex-grok: 1` opt en un terminal estrecho Responses reparación. Si `response.completed.response.output` falta o está vacío, opencodex puede reconstruirlo a partir de datos reales, indexados de forma única, contiguos `output_item.done`
+elementos cuyos campos sin procesar satisfacen las formas admitidas. Los deltas por sí solos no crean salida. La evidencia malformada, contradictoria, duplicada, abierta o de gran tamaño mantiene El terminal vacío sin cambios; las respuestas fallidas e incompletas nunca se convierten en éxito.
+
+El marcador es una opción de compatibilidad seleccionada por el cliente, no una identidad autenticada. o una concesión de permiso. Los clientes no identificados conservan su comportamiento existente. Esto La reparación corre antes que el proveedor separado `responsesSnapshotRepair` opción y no permite esa reparación más amplia del ciclo de vida. Herramienta-búsqueda existente, herramienta personalizada, La función de finalización y el manejo de herramientas no declaradas mantienen su orden establecido.
+
+
+
+### DeepSeek y Claude Code artefacto
+
+Para el endpoint oficial DeepSeek Chat Completions, opencodex relaja la
+`anyOf` restricciones en el Claude Code incorporado `Artifact` esquema de herramientas a evitar errores de validación de esquema HTTP 400. Se omite el modo estricto para esta herramienta. Campos definido sólo dentro de un `anyOf` ya no están limitados por esa unión; la herramienta debe validar sus entradas. Otras herramientas y proveedores conservan su comportamiento existente.
diff --git a/docs-site/src/content/docs/es/reference/architecture.md b/docs-site/src/content/docs/es/reference/architecture.md
new file mode 100644
index 00000000000..4e424345048
--- /dev/null
+++ b/docs-site/src/content/docs/es/reference/architecture.md
@@ -0,0 +1,189 @@
+---
+title: "Arquitectura"
+description: "opencodex integra el mapa del módulo —, el puente AdapterEvent, el analizador de solicitudes y el almacenamiento en caché."
+---
+
+opencodex es un único proceso Bun. Una solicitud ingresa como OpenAI Responses, se normaliza a un modelo, enrutado, enviado a un proveedor a través de un adaptador, y puenteado de nuevo a Responses SSE. Véase
+[Cómo funciona](/es/getting-started/how-it-works/) para el flujo de extremo a extremo.
+
+
+
+## Mapa del módulo
+
+```
+src/
+├── cli/ # ocx command dispatch, init, status, provider commands
+├── server/ # Bun.serve, /v1/* proxy, /api/* management API, WS bridge
+├── codex/ # Codex config injection, catalog sync, auth/account integration
+├── providers/ # provider metadata, API-key pool, quota and labels
+├── adapters/ # wire adapters, shared guards/utilities, Cursor protobuf transport
+├── oauth/ # OAuth providers, API-key catalog, token store/refresh
+├── usage/ # request usage extraction, JSONL logs, summaries, totals
+├── lib/ # runtime, process, retry, privacy, token estimate helpers
+├── web-search/ # web-search sidecar (synthetic tool, loop, executor, parser)
+├── vision/ # vision sidecar (describe + plan)
+├── config.ts # ~/.opencodex/config.json, defaults, PID, env resolution
+├── router.ts # model id → provider + adapter
+├── bridge.ts # facade over bridge/
+├── bridge/ # AdapterEvent stream → Responses SSE (sse.ts) / JSON (response-json.ts)
+├── reasoning-effort.ts # reasoning-effort translation, clamping, and catalog levels
+├── responses/
+│ ├── parser.ts # Responses request → OcxParsedRequest
+│ ├── schema.ts # Zod validation
+│ └── compaction.ts # remote compaction prompts, envelopes, compact history
+├── service.ts # launchd / systemd / Task Scheduler background service
+├── types.ts # core interfaces + helpers (modelInList, namespacedToolName)
+└── index.ts # public entry
+```
+
+Varios archivos de entrada anteriormente grandes ahora conservan la compatibilidad como fachadas: `codex/catalog.ts` exportaciones Su enfocado `codex/catalog/*.ts` módulos, `server/management-api.ts` despachos a
+`server/management/*.ts`, `server/responses.ts` exportaciones `server/responses/*.ts`, y `bridge.ts`
+reexportaciones `bridge/*.ts`. Una fachada es la ruta de importación estable, no la implementación: cada paso nombre del módulo que posee el código, y `structure/transports/responses.md` lleva el inventario completo del propietario para la superficie Responses.
+
+
+
+## Flujo de solicitudes
+
+`server/index/serve-options.ts` posee el límite HTTP y delega el plano de datos Responses a la `server/responses.ts` La fachada y su `server/responses/*.ts` módulos:
+
+1. `server/index/serve-options.ts` aplica la autenticación CORS y API, rechaza nuevo trabajo mientras drena con HTTP 503, JSON `error.code: "server_restarting"`, y `Retry-After: 5`, y registros solicitar metadatos del ciclo de vida. Las respuestas de drenaje usan la directiva CORS del oyente receptor. Sirve `GET /v1/models`, `POST /v1/responses`,
+ `POST /v1/responses/compact`, `POST /v1/images/generations` / `POST /v1/images/edits`
+ (retransmitido a una familia OpenAI de origen por `server/images.ts` para el códice incorporado `image_gen`
+ herramienta), `POST /v1/live` / `POST /v1/realtime/calls` (ChatGPT / Codex App voz y OpenAI Llamada-crear en tiempo real, transmitida por `server/live.ts`), banda lateral WebSocket se une
+ `/v1/live/{callId}` (y `/v1/realtime?call_id=`), y la actualización opcional WebSocket en
+ `/v1/responses`.
+2. `server/responses/request-prepare.ts` descomprime y analiza JSON, expande localmente recordado
+ `previous_response_id` entrada cuando esté disponible, luego llama `responses/parser.ts`.
+3. `router.ts` Resolver un desnudo o `provider/model` id. El servidor resuelve la cuenta Codex afinidad, actualiza el proveedor OAuth cuando sea necesario y aplica la credencial seleccionada a la ruta.
+4. Antes de la llamada principal, `vision/` describe imágenes para modelos en `noVisionModels`; si no hay caja fuerte Si existe una ruta sidecar, las imágenes se eliminan en lugar de enviarse a un flujo ascendente solo de texto.
+5. `server/adapter-resolve.ts` aplica cualquier anulación de cable específica del modelo y construye uno de los adaptadores registrados. Responses retransmite el cuerpo nativo, Cursor ejecuta su sistema bidireccional
+ `runTurn` transporte, y adaptadores traducidos compilar/fetch/parse una petición ascendente.
+6. Para modelos enrutados con un host `web_search` herramienta, `web-search/` expone una función sintética, ejecuta la búsqueda real a través del backend configurado (el sidecar OpenAI/ChatGPT o Anthropic), devuelve los resultados al modelo enrutado y se repite dentro del límite de bucle configurado. Este bucle admite solo la ruta estándar HTTP; adaptadores que implementan `runTurn`, como Cursor, omitalo.
+7. `bridge/sse.ts` / `bridge/response-json.ts` produce Responses SSE o JSON `server/request-log.ts` y `usage/` terminal de recogida estado, latencia, etiquetas de proveedor/modelo y uso token de mejor esfuerzo sin cambiar la respuesta.
+
+La estimación de entrada previa al envío sigue lo que realmente envía el adaptador enrutado. Porque `openai-chat`
+modelos excluidos por la política efectiva de repetición del pensamiento de chat (una
+`preserveReasoningContentModels` lista, o detección de Flash/Pro DeepSeek cuando no está configurado), el adaptador deja caer el pensamiento del asistente reproducido, por lo que la estimación lo excluye también; el historial que nunca llega al proveedor, por lo tanto, no puede denegación contexto-límite. Modelos que preservan el razonamiento, y otros adaptadores, Envía ese pensamiento y aún cuenta.
+
+
+
+## El analizador
+
+`responses/parser.ts` valida la solicitud entrante con `responses/schema.ts` (Zod), luego construye un
+`OcxParsedRequest`:
+
+- **Messages** — `input` Los elementos se vuelven normalizados `OcxMessage[]`: usuario / desarrollador / asistente / toolResult. `reasoning` los elementos se convierten en bloques de pensamiento; `function_call`, `custom_tool_call`, y
+ `tool_search_call` los artículos se convierten en llamadas de herramientas; sus `*_output` Las contrapartes se convierten en resultados de herramientas.
+- **Herramientas** Las herramientas de función — pasan a través; **Las herramientas namespaced (MCP) están aplanadas** a
+ `namespace__name` (y restaurado en el camino de regreso); **freeform** herramientas (e.g. `apply_patch`)
+ **tool_search** Las herramientas de descubrimiento están marcadas; **Herramientas alojadas** (`web_search`, gen de imagen, …) son Se deja caer y se vuelve a inyectar por un sidecar sólo si se manejan ellos.
+- **Imágenes** — se conserva como partes de contenido real (datos URL o https remoto), nunca se alinea como texto.
+- **Banderas de características** — `_webSearch` (se solicita una búsqueda web alojada), `_structuredOutput`
+ (`text.format` es json_schema / json_object), y `_compactionRequest` (compactación remota v2).
+
+
+
+## El puente
+
+`bridge/sse.ts` Gire el adaptador interno `AdapterEvent` transmitir de nuevo a Responses SSE que Codex entiende:
+
+| AdaptadorEvent | Responses SSE emitido |
+| --- | --- |
+| `text_delta` | `response.output_text.delta` → `…done`, `response.content_part.done`, `response.output_item.done` |
+| `thinking_delta` | `response.reasoning_summary_text.delta` → `…done`, elemento cerrar |
+| `reasoning_raw_delta` | Un crudo `reasoning_text` artículo (o un sobre de ida y vuelta oculto) |
+| `thinking_signature` / `redacted_thinking` | Conservado en un `encrypted_content` envolvente de razonamiento |
+| `tool_call_start` | `response.output_item.added` (tipo: `function_call` / `custom_tool_call` / `tool_search_call`) |
+| `tool_call_delta` | `response.function_call_arguments.delta` (omitido para la forma libre / tool_search) |
+| `tool_call_end` | `response.function_call_arguments.done` → `response.output_item.done` |
+| `web_search_call_begin` / `web_search_call_end` | Uno vive `web_search_call` elemento más citas URL |
+| `heartbeat` | Marca la actividad ascendente; ningún elemento de salida visible por el usuario |
+| `done` | `response.completed` (Con el uso) |
+| `error` | `response.failed` (con `last_error`) |
+
+El puente también corre a **latido del corazón mantener vivo** (RC3): durante el silencio ascendente, emite un SSE línea de comentarios (`: opencodex heartbeat`) cada 2 segundos para volver a armar el temporizador inactivo de Codex. Líneas de comentarios son descartados por cada analizador de eventsource sin producir un evento, por lo que los decodificadores Responses estrictos nunca se ve una variante desconocida. El valor predeterminado **fecha límite de venta** es de 300 segundos para un público de origen y discapacitado para un local (`stallTimeoutSec`; `0` lo desactiva en todas partes); alcanzarlo aborta el upstream y emite `response.incomplete` con razón
+`upstream_stall_timeout`, evitando que una conexión colgada bloquee Codex indefinidamente.
+
+Las llamadas a herramientas se desambiguan en tres tipos de elementos Responses utilizando el mapa de espacio de nombres, la forma libre conjunto, y el conjunto de herramientas de búsqueda capturado por el analizador — para MCP espacios de nombres, `apply_patch`-style freeform herramientas, y el cliente ejecutado `tool_search` todo el viaje. A `buildResponseJSON()` Variante produce un un solo objeto de respuesta no de transmisión de los mismos eventos.
+
+
+
+## Administración API, OAuth y uso
+
+`server/management-api.ts` respalda el panel y envía grupos de rutas enfocadas a
+`server/management/*.ts`. Es `/api/*` las rutas cubren configuración/configuración seguros, proveedor CRUD y grupos de claves, selección de modelos/controles de v2 de mayúsculas/contexto, sincronización de catálogo, diagnósticos y Registros de depuración, uso y cuotas, configuración de sidecar, actualizaciones, claves API de cliente generadas, inicio de sesión / estado / OAuth cierre de sesión y selección de cuenta, gestión de cuentas Codex y stop elegante. `server/auth-cors.ts`
+requiere `OPENCODEX_API_AUTH_TOKEN` Para ambos `/api/*` y `/v1/*` cuando el poder se une más allá loopback; configurado `corsAllowOrigins` Las entradas amplían la lista de permisos de origen local.
+
+Implementaciones de OAuth en vivo `oauth/`; acceso tokens se cargan o actualizan inmediatamente antes de La llamada, mientras `oauth/token-guardian.ts` puede actualizar proactivamente solo a los proveedores cuya política Lo permite. La actualización se coordina con un solo vuelo en proceso, un bloqueo de archivos por cuenta y generación CAS para que los escritores concurrentes no puedan bloquear una credencial más nueva. Una proyección de salud compartida (`oauth/health.ts`) alimenta `ocx status`, `ocx doctor`, la administración API y el panel de control. Credenciales de grupo Codex/ChatGPT y afinidad de subproceso local de proceso en vivo bajo `codex/` y se mantienen fuera de las respuestas de la administración; la afinidad `401` / `403` / `429` (no fijado a través de los límites de tarifa) y no se persiste en los reinicios. El uso de las solicitudes está normalizado `OcxUsage`, apareció en eventos de terminal Responses, y agregados por `usage/` para el panel de instrumentos y opcional JSONL Diagnóstico.
+
+
+
+## Transporte y compactación
+
+`server/index/serve-options.ts` sirve HTTP/SSE en `/v1/responses` por defecto. Si Codex intenta un Responses WebSocket actualización mientras `websockets` es `false`, opencodex devuelve `426 upgrade_required`; Codex entonces vuelve a HTTP para esa sesión. Cuando `"websockets": true` se establece, el mismo punto final acepta la actualizar y utiliza el puente WebSocket.
+
+Independientemente de esa configuración orientada al cliente, las solicitudes canónicas de reenvío ChatGPT con nivel raíz
+`stream: true` puede usar Codex's de origen WebSocket Transporte en estable Bun 1.4.0 o más reciente. El canónico ChatGPT conservas de caminos HTTP Responses Lite intent en los metadatos de marco WS y deriva su sugerencia de enrutamiento del modelo saliente real y el nivel de servicio. HTTP cabeceras de respuesta; las actualizaciones de cuota posteriores se atribuyen a la cuenta de servicio, no se agregan retroactivamente a las cabeceras ya enviadas. Un fallo después de que se envió una solicitud WS no activa una cuenta automática HTTP Estas asignaciones no permiten que el cliente
+WebSocket configuración o cambiar la selección de transporte de otros proveedores. Bun 1.3.14, prelanzamientos, e identidades en entorno de ejecución no verificables HTTP/SSE. Las respuestas de WS de origen exitosas mantienen la del cliente SSE contrato y bypass `tee()` a través de una avidez limitada relé de un solo lector (4 MiB por trama sin procesar/envuelta y una cola de productores de 8 MiB). Desbordamiento de colas cierra el upstream y emite un terminal downstream `response.failed` Evento seguido de `[DONE]`.
+
+Para el modelo saliente final `gpt-5.3-codex-spark`, reenvío canónico ChatGPT explícitamente desactiva Responses Lite tanto en la cabecera HTTP como en los metadatos de fotograma WS nativos, incluso cuando un alias selecciona Spark — pero solo cuando el cuerpo saliente no lleva `additional_tools` artículo con un no vacío `tools` matriz. Ese grupo ES la forma de entrega de herramientas Lite, por lo que un cuerpo Spark que todavía lo usa mantiene Lite ON incluso si un llamante o encabezado configurado dijera lo contrario; de lo contrario, el marco anunciaría que no es Lite mientras que las herramientas solo existen en la forma Lite. Una identidad Lite cambiada retira el socket antiguo; subsecuentemente elegible las solicitudes con la misma identidad pueden reutilizar el nuevo socket. Otros modelos y pasarelas mantienen su política Lite existente. Los metadatos nativos mal formados todavía vuelven a HTTP con su cuerpo sin cambios.
+
+Cuando un proveedor rechaza una solicitud de transmisión con HTTP 413 antes de que comience SSE, OpenCodex emite una terminal `response.failed` evento con `context_length_exceeded` en lugar de retransmitir el reintentable estado desconocido. Esto permite a Codex detener su bucle de reconexión y aplicar su propia política de compactación de contexto. en el siguiente turno. OpenCodex no elimina silenciosamente mensajes o imágenes; reducir la entrada actual o Reintentar después de la compactación. Las personas que no llaman a API continúan recibiendo el HTTP 413 del proveedor.
+
+La compactación de contexto Codex funciona para modelos enrutados. `server/responses/compact.ts` mangos
+`POST /v1/responses/compact` ejecutando un giro de resumen interno y volviendo compactado historia, mientras `responses/parser.ts` y `bridge/sse.ts` manejar la compactación remota v2
+`compaction_trigger` se convierte emitiendo exactamente una `compaction` elemento de salida.
+
+
+
+## El almacenamiento en caché y el catálogo
+
+- `codex/model-cache.ts` mantiene una caché de TTL en memoria por proveedor `/models` resultados (por defecto 5 min, ej., haciendo coincidir la propia memoria caché de Codex), con un retroceso obsoleto cuando falla una fetch.
+- `codex/catalog/sync.ts`exportado a través de la `codex/catalog.ts` fachada, fusiona modelos enrutados en Catálogo de Codex como entradas namespaced, rangos destacados
+ [Modelos de subagentes](/es/guides/codex-integration/#the-subagent-picker) Primero, los filtros
+ `disabledModels`, y puede restaurar completamente el catálogo prístino desde una copia de seguridad única.
+
+
+
+## Esfuerzo de razonamiento
+
+`reasoning-effort.ts` traduce las etiquetas de razonamiento de Codex en los valores de cable de cada proveedor. Los El catálogo de Codex anuncia las etiquetas que Codex acepta (`low` / `medium` / `high` / `xhigh` / `max`), pero Los proveedores de upstream pueden admitir solo un subconjunto más pequeño o requerir un alias real. El módulo:
+
+- Define el canónico `CODEX_REASONING_LEVELS` y su orden.
+- Sujeta un esfuerzo solicitado al nivel soportado más cercano cuando el nivel exacto no está disponible.
+- Resuelve por modelo y por proveedor `reasoningEffortMap` Anulaciones para asignaciones de cables personalizadas.
+- Deja de lado el esfuerzo por completo para los modelos enumerados en `noReasoningModels`.
+
+Qwen3.8-Max es una excepción explícita de esfuerzo directo al antiguo contrato de presupuesto Qwen3.x. Alibaba Token Plan registra su escalera soportada de origen como `low`, `medium`, y `xhigh` (el valor predeterminado), y Emite el valor efectivo como `reasoning_effort`; Codex-solamente las tapas de compatibilidad están sujetas a
+`xhigh` en el cable. El enriquecimiento del registro en entorno de ejecución repara metadatos preestablecidos persistentes anteriores que aún clasifica este modelo como `thinking_budget` modelo.
+
+
+
+## Tipos de núcleo
+
+El modelo interno vive en `types.ts`: `OcxParsedRequest`, `OcxContext`, el `OcxMessage` Unión,
+`OcxContentPart` (texto/imagen), `OcxToolCall`, `OcxTool`, `AdapterEvent`, y los tipos de configuración (`OcxConfig`, `OcxProviderConfig`) Dos ayudantes son ampliamente utilizados: `namespacedToolName()` y
+`modelInList()` (Tolerante) `:size`-etiqueta coincidente para `noVisionModels` / `noReasoningModels`).
+
+
+
+
+### Terminales de cuota incompletos
+
+Una respuesta directa nativa que termina con evidencia de cuota o límite de tasa en un
+`incomplete` terminal registra el fallo de la cuota de cuenta y la salud de retroceso de generación. Estructurado `incomplete_details.reason` y los códigos de error se aceptan sin un mensaje; el límite de salida ordinario, el filtrado, la dirección y el bloqueo incompletos no Enfriar una cuenta. La clasificación de la política cibernética mantiene su precedencia. El terminal es no se reproduce después de la salida, y la selección de solicitud de cuenta fija permanece fija.
+
+Las solicitudes compactas remotas pueden almacenar en búfer su respuesta por más tiempo que el servidor. tiempo de espera. Ese tiempo de espera del oyente se desactiva después de que el cuerpo de la solicitud es aceptado; la cancelación del cliente y los plazos de operación ascendente aún se aplican.
+
+La compactación enrutada amortiguada trata los deltas de texto y razonamiento no vacíos como progreso sin exponer texto de resumen parcial. Comentarios, deltas vacías y pasarela Los keepalives no restablecen el organismo de control de pérdida de eventos del adaptador. El stand por defecto El tiempo de espera permanece 300 segundos; el contenido de compactación encriptado se conserva sin cambios.
+
+El almacenamiento en búfer de respuesta compacto nativo también impone una fecha límite de inactividad de byte por cuerpo usando `stallTimeoutSec` (300 segundos para un upstream público, deshabilitado para uno local, y discapacitados en todas partes cuando se `0`) Los trozos no vacíos restablecen esa plazo; un cuerpo estancado devuelve HTTP 504, la cancelación del cliente retiene HTTP 499, y la limpieza no espera una promesa de cancelación de origen atascada. Los 32 MiB Se conservan el techo de respuesta y los bytes del cuerpo original.
+
+Un error canónico WebSocket denegado puede convertirse en un HTTP 4xx solamente antes de que se confirme la respuesta y después de las comprobaciones de correlación de flujo. Permitido Las cabeceras de cuota están acotadas y reconstruidas sin cabeceras de encuadre ascendentes; la JSON La respuesta no es cacheable. Los errores posteriores al compromiso y 5xx mantienen la ruta sin reenvío.
+
+Cuando la recuperación de la tarea agente encriptada rechaza una tarea enrutada, su error 400 existente puede incluir un límite `recovery_reason`: `unsupported_envelope`,
+`admission_denied`, `recovery_unavailable`, `caller_cancelled`, `input_changed`,
+`recovery_http_rejected`, `recovery_timeout`, `recovery_aborted`,
+`recovery_transport_error`, o `recovery_invalid_output`. El rechazo HTTP requiere una respuesta no exitosa observada. Salida no válida incluye UTF-8 no válido, cuerpos de gran tamaño, flujos de recuperación mal formados o incompletos, y Asignaciones inválidas o contradictorias. La cancelación de una llamada tiene prioridad sobre una fecha límite propia, que tiene prioridad sobre los fallos de decodificación/transporte.
+`recovery_aborted` describe una recuperación compartida cancelada independientemente de esa persona que llama. Los camareros de vuelos compartidos reciben el mismo fallo subyacente a menos que se cancele individualmente. solo se almacena en caché el texto sin formato correcto. Los diagnósticos no contienen ningún error de flujo ascendente o texto de carga útil. El campo se omite cuando no existe un resultado de recuperación clasificado, y cuando existe un combo ramas que devuelven el fallo de destino original mantienen esa respuesta.
+`recovery_unavailable` incluye capacidad de caché/singleflight y no prueba Se intentó una solicitud ascendente. No se permite reintento o aceptación de envolvente más amplia.
diff --git a/docs-site/src/content/docs/es/reference/cli.md b/docs-site/src/content/docs/es/reference/cli.md
new file mode 100644
index 00000000000..af049e7ba4c
--- /dev/null
+++ b/docs-site/src/content/docs/es/reference/cli.md
@@ -0,0 +1,257 @@
+---
+title: "CLI Referencia"
+description: "Despacho de comandos, códigos de salida y enlaces a cada familia de comandos ocx."
+---
+
+El opencodex CLI es `ocx`. Se distribuye en el primer nombre de comando, con alias documentados tales como `setup`/`init`, `restore`/`eject`, y `models`/`model` alcanzar la misma operación. Desconocido Los comandos y las formas de comando no válidas son errores.
+
+Ejecuta `ocx`, `ocx help`, `ocx --help`, o `ocx -h` para el mismo índice de comando compacto, agrupados en Comenzar aquí, Tareas comunes, Explorar y Más ayuda. Uso `ocx help --all` o `ocx --help --all` para la referencia completa de alto nivel, incluyendo las variantes de comando detalladas omitidas del índice compacto. Correr `ocx help `, `ocx --help`, o `ocx -h` por un comando registrado en la tabla de ayuda; `ocx help` También sigue siendo apoyado. Ayuda y versión Los comandos son de solo lectura: no inician, detienen, instalan, desinstalan o reescriben Codex o Estado opencodex.
+
+
+
+## Ayuda anidada
+
+La ayuda familiar como `ocx help models` preserva el uso y los detalles de la familia, entonces enumera las rutas hijo declaradas conocidas con resúmenes. Estas listas describen niños declarados; no garantizan una cobertura exhaustiva del entorno de ejecución. Alias ayuda conserva el uso propio del alias y detalles y puntos a su familia canónica: `ocx help model` lleva a `ocx help models`. Los modelos también ayudan a vincular la curada `models context` separado de las capacidades declaradas.
+
+Ayuda acepta una ruta con más de una palabra de comando:
+
+```bash
+ocx help models context
+ocx models context --help
+ocx model context --help
+ocx help account list
+ocx help account main
+```
+
+Las tres primeras formas muestran el mismo tema de contexto-cap, incluyendo la `model` alias:
+
+```text
+ocx models context [--set-all]|provider on [--value ]|provider off|all > [--json]
+```
+
+`ocx models context status --json` lee la configuración actual. `value ` establece el por defecto para los cambios futuros; añadiendo `--set-all` aplica a todos los proveedores encaminados.
+`provider on` permite una tapa de proveedor, opcionalmente con `--value `; `off`
+Lo deshabilita. `all on|off` cambia todos los proveedores de rutas juntos.
+
+Temas de capacidad declarados tales como `account list` mostrar su resumen, banderas conocidas y detalles, con un puntero a la ayuda de los padres. Estos metadatos no cubren todos los operandos o tiempos de ejecución. subcomando, por lo que un tema puede mostrar `Command: ocx ...` Sin pretender una completa `Usage:` Gramática. Un prefijo como `account main` enumera a sus hijos declarados y marca esa cobertura como incompleta. Un tema explícito no declarado (`ocx help `) sale 1 con una ayuda detallada concisa no disponible mensaje y un puntero padre conocido o de referencia completa en el error estándar. Salida estándar vacío, y no se imprime ningún banner de ayuda completo. Falta detalle no establece si el comando runtime es válido. Anexado `--help`/`-h` preserva el comportamiento de ayuda de comandos existente: cuando los metadatos detallados no están disponibles, Muestra la ayuda de padre conocida con éxito, sin ejecutar el comando.
+
+En el cabezal Bun CLI, desnudo `help` se reconoce solo en la raíz o inmediatamente después de la raíz comando. Uso `--help` o `-h` para caminos anidados. Valores posteriores como el `help` en
+`ocx alias set demo help` Siguen siendo argumentos de comando. Un exacto `--` termina la ayuda de la cabeza que explora, así que `ocx claude -- --help` conserva los argumentos para el despacho de comandos.
+
+
+
+## Recuperación de errores tipográficos de comando
+
+Comandos de raíz desconocidos y rutas de ayuda explícitas no resueltas salen 1 con un breve diagnóstico y guía de navegación sobre el error estándar, dejando la salida estándar vacía. Cerrar los errores tipográficos pueden recibir sugerencias conservadoras extraídas de nombres de comandos visibles y la familia de ayuda actual documentada niños. Las sugerencias son solo orientativas: la CLI nunca las ejecuta ni vuelve a intentar el comando.
+
+| Entrada | Orientación |
+| --- | --- |
+| `ocx modles` o `ocx help modles` | Sugiere `ocx help models`. |
+| `ocx help account lisst` | Sugiere `ocx help account list` dentro de la familia de cuentas. |
+| `ocx help qzxv` | Ofertas `ocx help --all` Sin adivinar un comando. |
+| `ocx help models qzxv` | Informes no disponibles ayuda detallada y señala a la familia de modelos conocidos. |
+
+El Bun CLI rechaza una raíz desconocida antes de la restauración automática de shim u otro comando previo al vuelo. Los comandos reconocidos retienen su prevlight existente; comandos ocultos y el corredor interno siguen siendo objetivos de envío válidos, pero están excluidos del descubrimiento y las sugerencias. Anexado flag-help fallback, capacidad JSON y manejo de errores específicos del proveedor conservan su comportamiento existente.
+
+
+
+## Familias de mando
+
+### `ocx message`
+
+`ocx message sessions [--json]` descubre sesiones Codex locales cargadas.
+`ocx message send (--thread | --name ) --stdin [--json]`
+envía un mensaje correlacionado entre iguales, sin iniciar un demonio o reanudar un hilo. Véase [Mensajería local Codex](/es/reference/cli/messaging/) para el contexto del remitente, tipos, el entorno de ejecución probado y `not_sent`/`queued`/`unknown` recibos. No incluye transporte remoto.
+
+### `ocx provider`
+
+`ocx provider`, `ocx help provider`, `ocx provider help`, `ocx provider --help`, y
+`ocx provider -h` mostrar la misma ayuda del proveedor, con sintaxis de comandos, ejemplos, preset/custom guía, y punteros declarados del tema. La ayuda se imprime correctamente en la salida estándar y sale 0. Desnudo `ocx provider` todavía sigue el prevuelo del comando ordinario; formas explícitas de ayuda para la cabeza salen antes de ese prevuelo. Una acción de proveedor desconocido imprime su diagnóstico y ayuda del proveedor a error estándar, deja la salida estándar vacía y sale 1.
+
+### `ocx alias`
+
+`ocx alias list [--json]` muestra usuario efectivo y alias incorporados. Uso `ocx alias set [/] ` y `ocx alias rm [/]` para editarlos. Los identificadores de modelo nativos pueden contener barras adicionales porque el selector se divide solo en la primera barra. Habilitar los valores predeterminados enviados con `ocx alias defaults on|off [--provider ]`.
+
+### `ocx remote-workspace`
+
+`ocx remote-workspace pair --pairing-code-stdin --root ` Inscribe el local como un ejecutor solo OCX. Repetir `--root` para aprobar más carpetas y usar `--name` a Anule el nombre de host. Repetir `--toolchain-root ` para exponer un usuario instalado Nodo, Rust, Go u otro directorio de cadena de herramientas de solo lectura dentro del sandbox de comandos. En macOS y Windows construye el perro privado, `bun run build:remote-workspace-helper` crea el ayudante de óxido que el comando pair descubre automáticamente; `--executor-helper ` Selecciona otro explícitamente revisado construir y pines su resumen en el estado Ejecutor local.
+`ocx remote-workspace agent` mantiene la conexión cifrada saliente;
+`ocx remote-workspace status [--json]` reporta el Hub, el dispositivo, las raíces y las capacidades anunciadas sin imprimir su portador o clave privada. Véase [Espacio de trabajo remoto](/es/guides/remote-workspace/).
+
+Familias de comandos adicionales:
+
+| Familia | Sintaxis y referencia |
+| --- | --- |
+| `ocx chatgpt` | `ocx chatgpt ` — experimental macOS shim de aplicación-servidor, por defecto desactivado. Véase [Escritorio ChatGPT](/es/guides/chatgpt-desktop/). |
+| `ocx hub` | `ocx hub invite [--json] [--data-url ] [--management-url ] [--clients codex,claude]` — crea un código de emparejamiento secreto de un solo uso en un concentrador en ejecución. Véase [Hub remoto](/es/guides/remote-hub/); invita requiere autorización explícita y su código no debe ingresar una transcripción del agente. |
+| `ocx inspect` | `ocx inspect ` — leyó la configuración efectiva, el catálogo, el análisis de enrutamiento, el ritmo, el inventario del proveedor de claves, el indicador Codex, la configuración del cliente, el estado de estrella o el estado de la bandeja Windows. Correr `ocx help inspect` para los enlaces temáticos. |
+| `ocx mcode` | `ocx mcode [mcode args...]` — iniciar MiniMax Código después de su integración de archivos administrados está habilitado. Véase [Clientes MiniMax](/es/guides/minimax/). |
+| `ocx mmx` | `ocx mmx text [mmx args...]` — iniciar MiniMax CLI texto a través del proxy; uso sencillo `mmx` para otras superficies. Véase [Clientes MiniMax](/es/guides/minimax/). |
+| `ocx zcode` | `ocx zcode [status\|enable\|disable\|history\|restore] [--json]` — administró los comandos de integración de ZCode. Véase [Tiendas ZCode](/es/guides/integrations/#zcode-314-and-later). |
+
+- [Ciclo de vida](/es/reference/cli/lifecycle/) — configuración, proxy y ciclo de vida del servicio, salud, diagnósticos, Sincronización del catálogo, el panel de control y actualizaciones.
+- [Proveedores, cuentas y modelos](/es/reference/cli/providers-accounts/) Configuración del proveedor —, autenticación, grupos de credenciales, cuota, modelos personalizados, visibilidad, modelos seleccionados y contexto Caps.
+- [Agentes, enrutamiento e integraciones](/es/reference/cli/agents/) — controles multiagente, combos, observabilidad, claves de admisión, rutas de protocolo, integraciones de clientes, configuración en entorno de ejecución, validado Codex CLI inspección de actualización de solo lectura.
+
+
+
+## Comportamiento sin cabeza
+
+La administración ordena la administración del proxy en vivo API, utilizando el puerto de entorno de ejecución registrado y verificación de identidad en lugar de mantener una segunda ruta de configuración. Un proxy detenido o inaccesible se representa como HTTP 503 y produce una salida CLI distinta de cero. Los comandos explícitamente documentados como las operaciones de configuración sin conexión pueden validar y editar el archivo de configuración sin un live proxy.
+
+`ocx system codex-cli-update check` no necesita proxy en vivo y no hace ninguna solicitud de registro de paquetes. Lo revisa los metadatos de procedencia limitada para el candidato de instalación configurado, incluido su ubicación ejecutable y evidencia de propiedad. El contexto del lanzador publicado de confianza autentica esa instantánea candidata, no una ejecución exitosa de Codex. En POSIX, `selectionAttested` puede ser `true` Cuando el entorno de ejecución selecciona el mismo candidato de entorno canónico sin ejecutarlo. Un paquete vinculado npm-global El manifiesto puede entonces establecer `managed: true` cuando demuestre la propiedad y, si se informa de una versión candidata, esa versión coincide con el manifiesto; los candidatos persistentes permanecen sin certificar. El informe JSON expone `candidateAvailable`, `candidateVersion`, `candidateSource`, y `selectionAttested`. Inspeccionar el candidato configurado requiere un contexto de lanzador publicado de confianza; un lanzamiento directo de Bun/source no tiene tal prueba, ignora el estado del candidato ambiental y persistente, y puede informar
+`candidate_unavailable` en POSIX o `windows_inspection_deferred` en Windows. En Windows este primer segmento no realiza ninguna E/S candidata o de sistema de archivos de configuración: solo un candidato a entorno absoluto capturado por la prueba puede recibir etiquetas léxicas de paquete de aplicaciones o gestor de versiones; cualquier otro candidato Windows falla cerrado. El comando no instala ni repara software, Codex o npm, controla un proceso en ejecución o escribe el estado de configuración/caché.
+
+`ocx system codex-cli-update plan --json` agrega una decisión de actualización de solo lectura para un POSIX certificado Instalación npm-global. Se resuelve `latest` a través del registro oficial npm, valida el Versión exacta e integridad SHA-512, y rechaza sesiones activas o observación incompleta del proceso. Las consultas del registro utilizan la configuración temporal aislada de npm, la caché y los registros con la limpieza del mejor esfuerzo. No hay software instalado y ningún proceso está señalizado. Windows devuelve `windows_inspection_deferred`. Véase [detalles de planificación](/es/reference/cli/agents/#read-only-codex-cli-update-plan).
+
+Para ver la observación de la instalación de Windows x64, consulte [la `attest` comando](/es/reference/cli/agents/#explicit-installation-observation-on-windows-x64). Sin rutas explícitas, observa el candidato seleccionado identificado a partir de la instantánea del lanzador vinculado a prueba; no otorga autoridad de actualización ni da fe de la selección en entorno de ejecución.
+
+La lista o el estado es el valor predeterminado cuando no es ambiguo. Uso `--json` solo en hojas que lo apoyan, y
+`ocx observe logs --follow --jsonl` para la producción en fila modificada, o
+`ocx logs --follow --events` para instantáneas/agregados de ventanas observadas versionadas. Tampoco es historia sin pérdida; [seguimiento, la línea de tiempo y el uso de key-scoped](/es/reference/cli/agents/#follow-request-windows-or-injection-sequences)
+límites de cursor/reset/incomplete-data del documento. [Modelo de clave seleccionada/comprobaciones de audio](/es/reference/cli/agents/#explicit-key-model-and-audio-checks)
+requieren el trabajo ascendente autorizado por el operador y la transferencia privada; sus informes son observaciones, no certificados de alcance de clave. Tema, idioma, navegación, y otro estado del navegador puramente visual no tienen equivalente CLI; La configuración del túnel Cloudflare está fuera Este conjunto de comandos.
+
+Para tareas de lectura de estilo panel, use [selección de registro limitado, búsqueda del modelo de uso y totales de compañeros salvados](/es/reference/cli/agents/#filter-a-bounded-log-snapshot).
+`logs filter` distingue la ventana escaneada de las coincidencias devueltas;
+`usage --search` cambia las filas del modelo sin volver a calcular los totales del informe;
+`companion usage` conserva la disponibilidad por rango y los configuración de reserva.
+[Cuota de agrupación de claves API](/es/reference/cli/providers-accounts/#accounts-and-key-pools)
+Es un explícito `account list --quota` leer y puede contactar a los proveedores.
+
+
+
+## Sonda Liveness techo override
+
+`ocx health`, `ocx status`, `ocx account *`, `ocx login codex`, y `ocx ready` encontrar el funcionamiento Proxy a través de una sonda corta: 750 ms por intento por defecto, y 1500 ms con reintentos para Parar y empezar a tomar decisiones. En hosts donde hay una capa de seguridad (un filtro de contenido o una red de estilo EDR) extensión) agrega un costo fijo a cada conexión de bucle invertido, esos techos pueden expirar antes de una respuestas proxy saludables, por lo que estos comandos informan al proxy como
+`curl http://127.0.0.1:10100/healthz` Tiene éxito.
+
+Establecer `OCX_PROBE_TIMEOUT_MS` para elevar los techos de tales anfitriones, por ejemplo
+`OCX_PROBE_TIMEOUT_MS=5000 ocx status`. El valor es milisegundos enteros de 1 a 30000. Los override solo aumenta: el valor predeterminado de 750 ms y los presupuestos de parada / inicio de 1500 ms mantienen sus pisos, por lo que
+`1000` Alarga solo la sonda por defecto. Valores indeterminados, vacíos, fraccionarios, negativos, cero o mayores se ignoran y se aplican los límites máximos enviados.
+
+En Windows, el proxy también eleva su propio proceso a la prioridad ABOVE_NORMAL cuando se inicia, lo que reduce los retrasos de programación en un host saturado por otro trabajo prioritario NORMAL (exploradores de antivirus, codificadores, emuladores) sin garantizar que la sonda permanezca debajo de estos techos con una carga extrema. El impulso se aplica al proceso proxy solo trabajo — que genera todavía se ejecuta en NORMAL — y un El proxy pesado CPU puede retrasar las aplicaciones prioritarias NORMAL. El cambio es el mejor esfuerzo; set
+`OCX_DISABLE_PRIORITY_BOOST=1` en el entorno del proxy para dejar la prioridad sin cambios.
+
+
+
+## Códigos de salida y confirmación
+
+Los comandos exitosos salen 0. Uso no válido, comandos o recursos desconocidos, operaciones API fallidas, y servicios requeridos no disponibles salen de cero. `ocx health` específicamente 0 sólo cuando el proxy es saludable y 1 cuando no se encuentra ningún proxy saludable; argumentos inválidos salida 2, por lo que puede ser utilizado como una sonda de servicio. Los scripts deben probar la salida código en lugar de raspar la salida legible por humanos.
+
+Muchos comandos de administración comparten estas asignaciones; otras familias CLI conservan sus propios contratos de salida:
+
+| Código | Causa |
+|---|---|
+| 0 | éxito |
+| 2 | Rechazo de uso local en manejadores de gestión; también sin soporte `doctor --json` |
+| 64 | argumentos inválidos a `capabilities`, `ready`, o `resolve`, antes de su descubrimiento / solicitud de trabajo |
+| 4 | HTTP 404 — la cuenta, proveedor, clave o ruta nombradas no existe |
+| 5 | Conflicto HTTP 409 —; se mantiene un bloqueo o se cambia el estado debajo |
+| 1 | todo lo demás, incluyendo fallos de transporte y otros errores HTTP |
+
+Salida 0 significa que no se informó ningún error. Previsualizar verbos (por ejemplo `ocx storage cleanup` sin `--yes`) también salga 0 sin mutar. Una configuración guardada todavía puede llevar un resultado de aplicación omitido o incompleto; lea las advertencias de recibo y stderr.
+
+Operaciones destructivas de eliminación, importación, consumo de crédito y actualización que anuncian confirmación requieren `--yes` en uso no interactivo. La bandera es un opt-in explícito; omitiéndola no debe ser silenciosa. confirmar la acción.
+
+`ocx storage cleanup` va más allá: sin `--yes` ejecuta la vista previa e imprime lo que *se habría* be liberado, luego sale 0 sin haber cambiado nada. No hay confirmación interactiva para ninguno de estos — un aviso que una persona que llama automatizada puede responder no es un límite de seguridad, por lo que el indicador es el límite.
+
+
+
+## Conducir el CLI desde un agente
+
+Descubra progresivamente, sin iniciar un proxy:
+
+```bash
+ocx help
+ocx help models
+ocx help models preset show
+```
+
+Lea el capítulo correspondiente en el repositorio `skills/ocx/references/01_management_surface.md`
+o una de las páginas públicas de la familia de comandos de arriba. Lleno `ocx help --all` es un escapar a la referencia de nivel superior. Un amplio inventario de máquinas es opcional:
+
+```bash
+ocx capabilities --json
+ocx capabilities --mutating-only --json
+ocx capabilities --route '/api/providers/{provider}/model-costs' --json
+```
+
+La búsqueda de ruta coincide con la plantilla declarada literal, no con los ID de proveedor concretos o un método HTTP. Un error sale 4 y no prueba que un comando runtime esté ausente. Las declaraciones incluyen comandos locales, así como comandos de gestión; solo el Este último necesita un objetivo en vivo. Antes de las operaciones en vivo, ejecute `ocx ready --json` y
+`ocx status --json`Inspeccione el objetivo y `versionSkew.relation`, y resolver versión no coincidente. `unknown` no confirma las compilaciones coincidentes. Ayuda offline, La configuración local y la inspección de laboratorio local no requieren el inicio.
+
+`ocx status --json` incluye `cliCommand`: intent de escritorio configurado, el ejecutable esperado, candidatos observados PATH, `pathFirst`, `desktopFirstOnPath`, emitir códigos, y `shellResolution: "unobserved"`. El informe de estado humano imprime una línea de selección de comandos. `ocx doctor` agrega una sección de “Selección de comandos ocx”: no válido, inseguro (`record-unsafe`) o los registros pendientes habilitados y los objetivos de escritorio que faltan / inutilizables no pasan la comprobación, mientras que los registros pendientes de limpieza desactivados, PATH que ordena conflictos y exploraciones incompletas advierten. `OCX_NO_DESKTOP_HANDOFF=1` suprime el traspaso de paquete-lanzador para una invocación; deja en su lugar la configuración de la shim de escritorio y PATH. Estas observaciones de solo lectura no ejecutan candidatos, resuelven alias/funciones de parent-shell ni identifican al propietario del entorno de ejecución del proxy. En Windows, el traspaso de paquete-lanzador está deshabilitado; usuario `Path` El orden selecciona el escritorio `ocx.exe`. El estado y el médico aún leen el registro y reportan al primer candidato PATH. Un posible candidato de directorio actual cmd se informa por separado del orden PATH.
+
+Los indicadores de salida son por comando. `doctor` rechaza `--json` con la salida 2;
+[`v2` (referencia de la familia)](/es/reference/cli/agents/)
+apoyos `--json` por locales y `--live` objetivos. Incluso para los comandos de administración compatibles con JSON, falla API normalmente usar prosa stderr con opcional `reason:` y `hint:` líneas, no un JSON Sobre de error. Mantén separados el estado stdout, stderr y exit.
+
+La cobertura se mide por flujos de trabajo con nombre, no por prefijos de ruta compartidos. Existentes preconfiguración de modelo, visibilidad, controles de cuenta y lecturas de perfil de enrutamiento no implican soporte para modificaciones de nombre de pantalla de modelo descubierto o escrituras de perfil de enrutamiento. Las acciones de consentimiento de solo sesión y la presentación del navegador siguen siendo límites separados. Creación de clave de acceso y credenciales de texto plano de retorno de inicio de rotación: los agentes deben entregar esos pasos a una terminal operada por humanos fuera de la sesión y aceptar solo ID no secretas y confirmación. Nunca pida credenciales en el chat o evite un acción de solo sesión con otro cliente API.
+
+
+
+## Cambios de comportamiento recientes
+
+Estas son correcciones a comandos que previamente informaron mal sus propios resultados:
+
+- `doctor` y `sync-cache` Ahora salga no-cero en caso de fallo. Anteriormente se había producido un fracaso y Salió 0, por lo que un script no podía distinguir el éxito del fracaso.
+- Los errores del cliente de `account` Mapa HTTP 404 a la salida 4 y HTTP 409 a la salida 5, en lugar de contraerse Todo en 1.
+- `ocx restore back --json` ahora honra su bandera de salida, que previamente aceptó e ignoró. Esto no hace `--json` una opción global para cada comando.
+- `ocx logs --model` De hecho, los filtros. Fue aceptado y silenciosamente ignorado, por lo que la salida parecía filtrada mientras mostraba cada fila.
+- `ocx storage` ganado `cleanup`, `trash`, y `policy` Subcomandos. Un desnudo `ocx storage` todavía imprime el informe de almacenamiento, como lo hizo cuando era un alias de `ocx observe storage`.
+
+
+
+## Objetivos de versión y despacho interno
+
+`ocx --version`, `ocx -v`, y `ocx version` imprimir una línea de versión amigable con el script y salir.
+
+Dos objetivos de envío se omiten intencionalmente de la ayuda normal: `__refresh-version [preview]`
+actualiza la caché de notificación de actualización en un proceso separado, y
+`__gui-update-worker [latest|preview] [restart]` ejecuta un trabajo de actualización del panel de control. Ellos son detalles de la implementación, no comandos estables orientados al usuario. El panel de control registra al trabajador PID, recupera un trabajo activo cuyo trabajador murió, trata los registros activos PID más antiguos como obsoletos después de diez años minutos, y protege a un trabajador en vivo de las actualizaciones simultáneas.
+
+