Skip to content

Releases: wlyaaaaa/codex-local-remote

Codex Local Remote v0.1.5

Choose a tag to compare

@wlyaaaaa wlyaaaaa released this 02 Aug 16:37

ChatGPT / Codex Local Remote v0.1.5

v0.1.5 fixes the release path that could leave a selected Web/Sidecar runtime
waiting indefinitely whenever any Codex task remained active.

简体中文:兼容的公网更新不再等待所有 Codex 任务结束。旧 Sidecar 会先排空
已接纳的写请求,再短暂切换到新运行代;Broker、app-server、Codex Desktop
和正在运行的任务保持不动。

Active-task Sidecar updates

  • Replaces the global unsafeThreadCount=0 gate with one Sidecar activity drain
    covering browser mutations and automatic next-turn dispatch. Active Codex
    turns remain owned by the unchanged Broker/app-server.
  • Authenticates the loopback drain command with a protected Supervisor-session capability and
    binds its receipt to one canonical update id. A failed or mismatched drain
    never stops the old Sidecar.
  • Preserves the existing immutable-runtime checks, Broker/upstream/Desktop
    process identities, compatibility id, unknown-connection gate and exact
    rollback path.
  • Keeps the update bounded: the public listener has a short same-port gap, but
    the browser reconnects to the new Sidecar and refreshes the authoritative
    thread snapshot.

Message continuity

  • Idempotent browser mutations retry through a bounded recovery window with the
    same idempotency key. This covers a Sidecar restart without duplicating a
    message, upload or control action, and still terminates with an explicit
    offline result when recovery does not complete.
  • New writes received after draining begins get a retryable 503, and no new
    queued turn is dispatched; already accepted writes or dispatches finish
    before the drain receipt is issued. A timed-out drain returns to serving
    instead of leaving the phone permanently read-only.

Upgrade

pnpm install --frozen-lockfile
pnpm check
.\scripts\windows\Register-CodexLocalRemoteStartup.ps1 -NoStart

Registration remains non-disruptive and never restarts Codex Desktop. An
already-running pre-v0.1.5 Supervisor cannot gain the new drain protocol in
memory; its first adoption of v0.1.5 therefore still follows the previous safe
boundary. Once the v0.1.5 Supervisor is active, later compatible Web/Sidecar
updates can roll while Codex tasks are running.

Broker/app-server changes or a compatibility-id change still require the
separate explicit runtime handoff and must not be disguised as a public-layer
update.

ChatGPT / Codex Local Remote v0.1.4

Choose a tag to compare

@wlyaaaaa wlyaaaaa released this 02 Aug 14:01

ChatGPT / Codex Local Remote v0.1.4

v0.1.4 is the final product-state hotfix after the v0.1.3 runtime audit. It
does not change the native-default ownership model: normal Codex startup,
updates, sleep recovery and Windows startup remain native, while Remote opens
only through explicit user authorization.

简体中文:本版集中修复最终公网验收发现的状态归属、手机队列、目标与计划、
协作模式和智能体活动展示问题。升级采用不可变运行时热切换,不要求重启
Codex Desktop。

Product fixes

  • Removes completed goals from the composer immediately while preserving active
    goal controls and current-turn 第 n/m 步 plan progress.
  • Keeps only the latest English reasoning headline for the active turn; public
    Chinese progress updates, tool activity and final answers remain visible.
  • Treats queue entries that Codex has already accepted as active work rather
    than undeletable pending messages. The queue now shows only genuinely pending,
    paused, ambiguous or in-flight dispatch records. Terminal reconciliation also
    clears an accepted tombstone when only the later terminal event carries the
    turn id, so subsequent queued work cannot remain blocked behind it.
  • Renders exact Codex task-delegation envelopes as an explicitly unverified
    format and links to the task id shown in the envelope; the current protocol
    does not provide independent sender provenance. Embedded literal XML examples
    written by a user or assistant remain ordinary content.
  • Localizes the built-in collaboration mode as 标准, renders ultra without a
    suffix and renders Max as 最高 across desktop and mobile selectors.
  • Refreshes goal state independently of slower task snapshots, preventing a
    completed or externally changed goal from being restored by an older request.

Agent and connection visibility

  • Normalizes started/completed lifecycle updates for tools, file changes, image
    inspection and subagents so active work does not remain permanently running.
  • Gives cross-task list/read/send/wait operations and Gmail connector activity
    explicit product labels without exposing internal invocation syntax.
  • Retains the bounded SSE queue, reconnect confirmation window, idempotent
    mutation retry and authoritative snapshot reconciliation introduced in
    v0.1.3; focused regression coverage now includes queue ownership and
    cross-task provenance.

Upgrade

From a clean checkout of the released tag:

pnpm install --frozen-lockfile
pnpm check
.\scripts\windows\Register-CodexLocalRemoteStartup.ps1 -NoStart

-NoStart installs and selects an immutable runtime. The running supervisor may
roll only the Remote Sidecar/Web runtime at the next safe boundary; it does not
restart Codex Desktop.

Known limitations

  • A temporary image already deleted by Codex or Windows cannot be reconstructed
    from a path-only historical record.
  • Desktop integration still depends on the process-scoped
    CODEX_APP_SERVER_WS_URL compatibility hook and must be revalidated after a
    material Codex Desktop protocol change.
  • Extremely large archived histories remain explicitly paginated to protect
    phone memory and live control responsiveness.

ChatGPT / Codex Local Remote v0.1.3

Choose a tag to compare

@wlyaaaaa wlyaaaaa released this 02 Aug 10:24

ChatGPT / Codex Local Remote v0.1.3

v0.1.3 is a post-release product and stability update for v0.1.2. It keeps
the native-default, explicit-Remote owner model unchanged and focuses on making
the browser surface feel like the same Codex task rather than a diagnostic
viewer.

简体中文:本版修复发布后发现的对话控制、超大历史、手机输入、附件、
连接抖动、额度展示和快速恢复问题,并重新验收桌面、平板和手机布局。
普通 Codex 启动、更新、Windows 重启和睡眠恢复仍保持原生;安装源码不等于
授权重启 Desktop,也不会自动打开 Remote。

Product fixes

  • Restores reliable pause, Stop, steer and resume controls for active goals and
    prevents a submitted user message from appearing more than once when the
    live event and the authoritative snapshot arrive through different paths.
  • Keeps the active goal on its own full-width row above the composer, with
    start/pause/delete actions and real 第 n/m 步 plan progress. Conversation
    permission and approval settings no longer occupy the composer; actual
    approval requests remain actionable in the task stream.
  • Shows only the latest public Codex reasoning status with the desktop-like
    shimmer treatment. Historical reasoning cards stay hidden, while public
    Chinese progress updates, tools and final answers remain visible.
  • Loads every current task page automatically, but stops with a visible,
    recoverable error if a provider repeats or cycles a cursor, makes no
    progress, or crosses the bounded page/item budget. Archived tasks retain
    explicit pagination. Switching tasks cannot apply a late response or scroll
    decision from task A to task B.
  • Keeps very large Desktop sessions off the app-server control path. The first
    view remains bounded; older JSONL history is available through explicit,
    bounded local pages that validate the thread, file identity and snapshot
    before every continuation. Active tasks never automatically scan an entire
    multi-gigabyte session.
  • Recovers active control lifecycle records in bounded 8 MiB reverse pages,
    up to a 64 MiB safety budget. If no trustworthy active/idle anchor is found,
    the task is marked unknown and all mutating turn controls fail closed until a
    stable later read resolves it.
  • Continues history on runtimes that expose paginated turns without paginated
    items by forwarding the opaque turn cursor; no unbounded includeTurns
    fallback is introduced.

Mobile and UI fixes

  • Keeps the composer expanded while it contains a draft or attachments and
    while a sheet is open. Removing one of many attachments no longer closes the
    attachment picker, and returning from the device file chooser no longer
    collapses the draft.
  • Gives the goal, delivery mode, collaboration mode, model, plan and send/Stop
    controls stable mobile geometry without moving important controls below the
    composer. Primary touch targets remain at least 44 CSS pixels.
  • Uses concise runtime labels: Ultra has no parenthetical suffix and Max is
    presented as 最高. Drive choices show one readable path (C:\, D:\, …)
    instead of duplicated drive prefixes.
  • Suppresses recognized host-only attachment scaffolding and standalone Codex
    UI directives. Literal examples written by the user or assistant are still
    preserved.
  • Shows the current safe Codex account identity in Settings. Account, rate-limit
    and token-usage failures are reported once with an actionable degraded state
    instead of repeating 暂时无法读取 across every card.

Connection and recovery

  • Buffers live rendering to animation frames and gives short SSE interruptions
    a confirmation window, reducing one-frame disconnect flashes and uneven
    mobile token updates.
  • Adds a bounded per-client SSE queue with real Node backpressure handling,
    overflow reset cursors and drain cleanup. One slow phone cannot accumulate an
    unbounded queue or turn normal backpressure into a reconnect loop.
  • Retries only replay-safe, idempotent mutations once after a qualifying
    transport loss or transient gateway response. The same idempotency key is
    retained; 429 and unqualified 503 responses are not replayed.
  • Makes cold-start terminal failures observable quickly instead of leaving an
    Open caller in a long ambiguous wait. Desktop launch receipt validation is
    shared by status, deferred handoff and on-demand recovery so all paths apply
    the same closed schema and allowlists.
  • Migrates the exact historical localized launcher even when WScript persisted
    its four Chinese description characters as ???? on a non-Chinese Windows
    code page. Target, arguments, working directory, icon, window mode and
    RunAs/link flags remain exact, so foreign shortcuts are still rejected.

Upgrade

From a clean checkout of the released tag:

pnpm install --frozen-lockfile
pnpm check
.\scripts\windows\Register-CodexLocalRemoteStartup.ps1 -NoStart

-NoStart installs and selects the immutable runtime without stopping the
currently running Desktop, Broker or Sidecar. Use the stable installed control
dispatcher for an explicit Status, Open or Close; authorize a Desktop
handoff separately only if Open proves that hot recovery is impossible.

Known limitations

  • A temporary image already deleted by Codex or Windows cannot be reconstructed
    from a path-only historical record.
  • Desktop integration still relies on the process-scoped
    CODEX_APP_SERVER_WS_URL compatibility hook. A future Codex Desktop update
    must pass the shared-owner acceptance again before Remote adoption is treated
    as verified.
  • Multi-gigabyte session history is intentionally loaded one local page at a
    time. This preserves control responsiveness and phone memory at the cost of
    requiring an explicit request for older pages.

ChatGPT / Codex Local Remote v0.1.2

Choose a tag to compare

@wlyaaaaa wlyaaaaa released this 02 Aug 04:34

ChatGPT / Codex Local Remote v0.1.2

v0.1.2 is the reliability and recovery release containing the fixes for the
live-runtime blockers found after v0.1.1. The v0.1.0 and v0.1.1 tags
remain unchanged.

简体中文:本版重点修复 Windows V5 Desktop owner 的按需远程交接、
崩溃后队列与停止状态、完整长任务历史、可逆 WorkLog、移动端输入/附件/
文件预览、动态审批/计划,以及管理员文件管理。普通启动、Codex 更新、
Windows 重启和睡眠恢复均保持原生;只有显式 Open 且无法热恢复时,
才可在授权后最多执行一次受控 Desktop 重开。

置顶限制:当前 app-server 没有受支持的 pin/unpin 方法。Web 只读镜像
Desktop 的置顶顺序,不写 Desktop 私有状态,也不伪装置顶操作已同步。

Publication integrity: this source is eligible for v0.1.2 only after one
frozen-tree pnpm check, immutable installation and live adoption of that
exact runtime. The frozen browser fixture also has to pass its complete
six-viewport product matrix without hiding failures behind retries. Source or
fixture evidence alone is not live-adoption evidence.

Highlights

Native-default, on-demand Remote control

  • Keeps ordinary ChatGPT / Codex Desktop startup, Store updates, Windows
    restarts and sleep/resume native. Registration selects an immutable runtime
    but does not enable automatic Remote takeover.
  • Installs one stable, DataDir-scoped control-dispatcher/v1 with explicit
    Open, Close and Status operations. Before dispatch, it validates
    runtime-current.json, the selected immutable runtime root, its manifest,
    file sizes and SHA-256 hashes; it never executes an unverified worktree path.
  • Makes Open idempotent. An already healthy Remote lease returns without a
    restart; missing public components are repaired first without restarting
    Desktop. Only when the native Desktop cannot be attached safely may one
    explicitly authorized, bounded Desktop handoff occur.
  • When one verified previous generation is still serving active turns, an
    authorized Open queues exactly one hidden worker and returns
    restart-deferred so the controller survives Desktop exit. The worker only
    immediately re-enters the stable dispatcher with the exact selected pointer, manifest and
    desired-mode intent. Inside one DataDir control-mutex critical section, that
    dispatcher rechecks the intent, closes only one exact package Desktop root
    through its PID plus creation identity, waits for the exact startup task to
    become Ready, rechecks the intent and continues the installed Open.
    Close cannot interleave between shutdown and adoption, and a cancelled
    intent causes zero Desktop stops. Existing workers are reused only when their
    live PID/start-time claim, intent, runtime version and path all match; a later
    Open therefore cannot be swallowed by a revoked waiter.
  • Makes Close clear public Remote intent and stop the exact Sidecar without
    reopening Desktop. An already attached Desktop may keep its exact Broker and
    app-server owner until natural exit; the next ordinary launch is native.
  • Makes Status read-only. It reports the selected runtime, exact lease and
    readiness state without starting, stopping, repairing or adopting anything.
  • While an explicit lease is active, may roll the authenticated Web/Sidecar
    public layer to an eligible validated public repair while preserving the
    Broker, app-server and Desktop processes. A Sidecar crash is recovered within
    the same exact lease. Broker or app-server loss fails closed and requires a
    new explicit recovery decision; it is never disguised as a harmless public
    restart or implicit authority to reopen Desktop.

Transactional explicit handoff

The generation-switch and compensation paths below run only inside an explicit
Open or separately requested adoption. They are not public-layer recovery:
an eligible Web/Sidecar repair must preserve Broker, app-server and Desktop,
and Broker/app-server loss fails closed.

  • Compares the selected immutable runtime with the active Broker receipt instead
    of treating a running scheduled task as proof that an update was adopted.
  • Preflights that generation before closing Desktop. A missing selected
    runtime, an unowned managed-port listener, a pointer/task-binding change or
    any readiness identity drift fails while the native Desktop is still
    untouched. The transactional activator receives and rechecks the exact
    selected version, root and manifest again after Desktop drain.
  • Switches generations only while Desktop is fully closed. Identity and
    readiness barriers are repeated after the task stops and before the new
    Desktop is accepted.
  • Handles a stopped scheduled task whose exact previous-generation Sidecar is
    still attached to the previous Broker. It stops that exact Sidecar first,
    repeats the no-Desktop/no-work identity barrier, and only then retires the
    previous Broker/upstream and starts the selected generation.
  • Treats the stopped-task state as requiring sidecarConnected=false. The
    post-stop barrier no longer waits for a Sidecar that the stopped supervisor
    is expected to terminate.
  • Treats an exact native Desktop process as present even when it is not attached
    to the Broker. A disconnected-but-running Desktop is closed before the
    generation switch instead of being mistaken for an absent Desktop.
  • Fails the handoff if Windows process discovery cannot be completed, and
    rechecks that no Desktop process remains after the bounded shutdown window
    before it starts the managed launcher.
  • Captures the complete prior scheduled-task XML as a hash-bound rollback
    pre-image, and binds the complete selected-task XML hash to the selected
    runtime pointer. The launcher verifies the selected definition before any
    stop; after any forward start request, rollback repeatedly cancels the task
    and removes selected-generation owners before restoring the exact prior
    definition and pointer. Partial or delayed Sidecar/Broker startup cannot be
    reported as a successful update.
  • Runs fresh registration, same-runtime task upgrades and current-pointer
    repair through the same effect-aware transaction. A scheduler or pointer
    write that throws after taking effect is accepted only after a live exact
    selected-pair audit; otherwise the captured task/pointer baseline is restored
    and verified.
  • Blocks registration with zero writes when an already selected immutable
    generation has not been adopted. A separately requested repair reconstructs
    the exact active task/pointer pair transactionally; an ambiguous ancestry
    never overwrites the rollback predecessor.
  • Compensates a failed Sidecar, Broker or selected-generation start by
    restoring the prior task and pointer and restarting that exact prior
    generation within bounded checks.
  • If the inner switch restores that exact prior runtime and then reports the
    original failure, the outer on-demand controller re-resolves only the
    requested or hash-bound rollback generation, rebinds the Remote intent and
    requests Desktop recovery for that same generation. It does not validate the
    restored task against the now-stale selected object or turn a successful
    rollback into a second compensation failure.
  • Binds Broker attachment to each launch with a process-scoped high-entropy
    nonce, retains only its SHA-256 digest in readiness, and revalidates the
    uniquely launched Desktop root. A stale, concurrent or foreign connection
    fails closed.
  • Keeps control feedback structured and bounded. desktop-launch/v2 records
    only allowlisted status, stage, code, correlation and feedback fields;
    exception text, paths, command lines and credentials are never serialized.
  • Separates privileged control from the Desktop token. The stable dispatcher is
    the supported entry; when an explicit handoff needs privileged coordination,
    Desktop is still created from the same-user, same-session,
    medium-integrity Explorer primary token with an explicit one-launch
    environment.
  • Makes the Interactive / Highest scheduled-task coordinator the sole
    managed Desktop process owner during an explicit Remote lease. The on-demand
    controller publishes a generation-bound launch intent instead of racing the
    owner.
  • Handles the real exit race between a newly selected immutable generation and
    an older scheduled-task instance that is still Running under Task
    Scheduler's IgnoreNew policy. A runtime-handoff/desktop-running result
    waits for two consecutive observations where strict CIM process discovery
    finds no Desktop root and Broker readiness explicitly reports Desktop
    disconnected, then retries the owner request exactly once. Unknown process
    or Broker state, a stable Desktop, or a failed second request never enters a
    restart loop.
  • Uses strict, throwing CIM discovery across the complete requester compensation
    path: existing-root checks, post-intent-cancellation checks and the final
    native recovery duplicate guard. An enumeration failure is reported as
    runtime-handoff/runtime-generation-unverified; it is never interpreted as
    zero Desktop processes and cannot authorize a duplicate native root.
  • Fails closed for an explicitly generation-bound launch unless expected
    version and root are both present, valid and still match selected. A
    version-only request, root-only request, malformed pair or later mismatch
    remains unresolved with a structured diagnostic and is never converted into
    a native launch.
  • Preserves the original structured failure stage and code across the
    requester, bounded native compensation and desktop-launch/v2 receipt. A failed Remote
    launch no longer displays a green success title or collapses a precise
    runtime-handoff/desktop-running result into unexpected/unexpected.
  • Rejects a Desktop-class Broker connection without a launch nonce using
    WebSocket policy close 1008. An unbound native or temporary bridge connection
    cannot be counted as the managed Desktop owner merely because it completed a
    protocol initialize.
  • Aligns runtime status with the v5 owner contract. The coordinator, stable
    dispatcher and selected immutable target are verified exactly....
Read more

ChatGPT / Codex Local Remote v0.1.1

Choose a tag to compare

@wlyaaaaa wlyaaaaa released this 28 Jul 03:27

ChatGPT / Codex Local Remote v0.1.1

v0.1.1 is a repair release for the Windows lifecycle, long-task reader, and
remote-control regressions found after v0.1.0. The v0.1.0 tag remains
unchanged.

What changed

  • Keeps Stop independently visible while the message composer is collapsed.
  • Isolates drafts and browser uploads when switching between tasks.
  • Recovers a queued next turn after a crash without turning an already completed
    Desktop turn back into a permanently active turn.
  • Recovers from an individual state-file write failure without poisoning later
    saves.
  • Reads long tasks only through bounded item/turn pagination. If the installed
    Desktop runtime does not expose a bounded reader, the Web UI reports the
    capability as unavailable instead of attempting an unbounded thread/read.
  • Uses the physical data-directory identity for the single Broker lease and
    rejects sensitive paths after resolving filesystem aliases.
  • Reserves login-attempt capacity before asynchronous password verification, so
    concurrent requests cannot bypass the configured limits.
  • Performs every uninstall safety check before the first mutation.
  • Starts the exact Desktop child with UseShellExecute=false, preserving the
    process-scoped Broker endpoint that packaged-app ShellExecute could silently
    drop. Native fallback explicitly removes any inherited stale endpoint.
  • Writes a strict, token-free desktop-launch-last.json receipt so diagnostics
    can distinguish a remote launch, native fallback, and missing or invalid
    evidence without exposing the capability URL.
  • Installs each runtime into a content-addressed, immutable
    RuntimeVersions/<sha256> directory. The scheduled task and the managed
    shortcut point to the selected version; one previous validated version is
    retained for bounded rollback.

Windows lifecycle

Normal use remains:

  1. Open the managed ChatGPT Remote shortcut.
  2. The hidden scheduled task starts the selected Broker and Sidecar runtime.
  3. ChatGPT / Codex Desktop starts with the process-scoped Broker endpoint only
    when that endpoint is ready.
  4. If Remote cannot start, the launcher opens native Desktop without a persistent
    app-server override.

An already-running native Desktop cannot be hot-switched onto the shared Broker.
Installing this update is non-disruptive: the selected immutable version applies
at the next natural Desktop start.

Use scripts/windows/Rollback-CodexLocalRemoteRuntime.ps1 to select the previous
validated runtime for the next start. Rollback does not kill a running Desktop
session.

Compatibility receipt

  • Windows: Windows 11 x64
  • Desktop package: OpenAI.Codex_26.721.4979.0_x64__2p2nqsd0c76g0
  • Product version: 0.1.1
  • Runtime selection: dynamic package/runtime discovery; no pinned WindowsApps
    version directory
  • Persistent CODEX_APP_SERVER_WS_URL: not used

This receipt proves the version tested for this release only. Future ChatGPT /
Codex Desktop builds are discovered dynamically, but cannot be promised
compatible before they exist. An incompatible build must leave native Desktop
usable and report Remote as unavailable.

Verification

The frozen tree passed formatting, lint, and type checking; all 83 test files
passed with 981/981 tests; production builds completed; and the public-safety
scan accepted 271 files.

The six supported browser viewports passed the stop/steer/compaction journey.
Windows tests launch a real child process and prove that the capability endpoint
reaches only the remote child, native fallback receives no endpoint, and the
parent environment is unchanged. Immutable-version tests cover two installs,
current/previous switching, and tamper rejection.

The final candidate is installed with -NoStart, so the running Desktop, Broker,
and Sidecar are not restarted or interrupted. A live packaged-Desktop cold start
is intentionally deferred to the next natural launch; the exact child-process
test is the non-disruptive release substitute, not a claim that the
already-running native Desktop was hot-switched.

Release acceptance is therefore PASS for the frozen repository candidate
and explicitly DEGRADED for the live shared-owner smoke test: the currently
open Desktop remains on its native app-server until the next natural start.

GitHub CI is useful follow-up evidence but is not used as a substitute for these
local functional checks.

Known boundaries

  • This is an unofficial self-hosted companion, not an OpenAI product.
  • The app-server is loopback-only. Public HTTPS exposure is limited to the Web
    Sidecar route and still requires its password/session protections.
  • A historical task can be much larger than a browser frame. The UI loads its
    newest bounded page first and fetches older pages only when requested.
  • A Desktop approval can be answered remotely only when the current runtime
    provides an explicit response schema. Unknown approval shapes fail closed.

Codex Local Remote v0.1.0

Choose a tag to compare

@wlyaaaaa wlyaaaaa released this 27 Jul 16:03

Codex Local Remote v0.1.0

Your ChatGPT / Codex Desktop tasks, available from a polished mobile browser
without exposing the local app-server to the public internet.

Highlights

  • Continue the same Desktop task from phone, tablet, or another browser.
  • Watch live replies, tool calls, file edits, subagents, plans, approvals, and
    context compaction.
  • Queue a next-turn message, steer the current turn, stop work, and answer
    dynamic approval or plan questions.
  • Create project and no-project tasks using the models, reasoning levels, and
    speed modes reported by the current Desktop runtime.
  • Upload a file from the browsing device, preview and download registered local
    files, and inspect red/green diffs.
  • Inspect context usage, account rate-limit windows, reset times in UTC+8, and
    the exact task ID.
  • Use the Chinese-first interface or switch to English.

Windows lifecycle

  • A loopback Broker shares one Desktop app-server with the Sidecar; it is never
    exposed directly through Funnel.
  • A hidden scheduled task starts the managed runtime at logon and restarts
    bounded failures.
  • The safe launcher opens ChatGPT / Codex Desktop with remote control when the
    runtime is healthy, or starts the native Desktop fail-open when it is not.
  • Desktop runtime discovery follows the currently installed package instead of
    pinning a WindowsApps version directory. Unknown incompatible versions are
    reported explicitly and do not leave a persistent app-server override behind.

Verification

  • Full repository acceptance: 80 test files, 943 tests.
  • Public-safety scan: 257 files.
  • Real public-browser acceptance covered mobile and wide layouts, task creation,
    live task state, file upload/download, approval rendering, and persistent
    notice dismissal.

This is an unofficial, self-hosted companion for ChatGPT / Codex Desktop.