Repository navigation
Conversation
The Linux release binary links GTK and WebKitGTK 4.1 through Tauri and is built against glibc 2.35, so it fails to load on RHEL 8 (glibc 2.28, no WebKitGTK 4.1) even for daemon and CLI commands. - Build agentdesktop-headless (daemon + CLI, no Tauri) in a manylinux_2_28 container (pinned by digest) for amd64 and arm64, attest it, and attach it to releases. - Add verify-linux-portability.sh to fail when the binary needs a glibc newer than 2.28 or links a library outside the base system set; run it in CI and release. - Move client socket resolution (AGENTDESKTOP_SOCKET, system socket, then the per-user socket) into agentdesktop-core so the headless CLI finds a user-mode daemon the same way the desktop binary does. - Document the headless binary and a systemd user unit for RHEL 8, WSL and VDI. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
The
agentdesktop-linux-*release binary does not start on RHEL 8 (and RHEL 8 under WSL2, as used on many virtual desktops), even fordaemonand CLI commands:The binary contains the Tauri UI, so the loader needs GTK and WebKitGTK 4.1 before
main()runs. It is also built on Ubuntu 22.04, so it needsGLIBC_2.34. RHEL 8 has glibc 2.28 and no WebKitGTK 4.1 (that arrived in RHEL 9), so installing packages cannot fix it.Change
The daemon and CLI already exist without Tauri as the
agentdesktop-headlessbin inagentdesktop-agent, but it was never released. This PR ships it:build-linux-headless-binariesjob buildsagentdesktop-headlessinsidemanylinux_2_28(glibc 2.28, pinned by digest) for amd64 and arm64. The binaries are attested with the existing Linux binaries and attached to the release asagentdesktop-headless-linux-{amd64,arm64}..github/scripts/verify-linux-portability.shfails when a binary needs glibc newer than a given version or links a library outside the base system set (libc, libm, libdl, libpthread, librt, libgcc_s, the loader). It runs in the release job and in a new CI job, so a glibc regression fails on the PR instead of at a customer.--userdaemon throughAGENTDESKTOP_SOCKET, then the system socket, then$XDG_RUNTIME_DIR/~/.local/state. The headless binary only tried the system socket, so its CLI could not reach a user-mode daemon. The lookup moves toagentdesktop_core::client_socket_path()and both binaries use it.systemd=truenote), and how sign-in works without a local browser.No new dependencies. The headless binary has no GTK, WebKit, D-Bus, or OpenSSL dependency on Linux (TLS is rustls with aws-lc-rs).
Testing
Build and portability
agentdesktop-headlessinmanylinux_2_28for aarch64 (locally) and x86_64 (on a cloud VM, using the same image digest as CI). In both builds the newest required symbol isGLIBC_2.28and the onlyNEEDEDentries are libc, libm, libdl, libpthread, libgcc_s and the loader.--versionanddaemon --helprun.cargo fmt --check,cargo clippy -D warnings(core and agent) and theagentdesktop-coretests pass. Theagentdesktopdesktop crate change is a rename to the shared function; CI covers its build because it needs WebKitGTK.End to end on a RHEL 8-class WSL desktop behind an LLM gateway
To reproduce the reported environment, we built a short-lived Azure lab and deleted it after the test:
D4ds_v5, nested virtualization) with WSL 3.0.3 and the official AlmaLinux 8.10 WSL image (RHEL 8 ABI, glibc 2.28, no WebKitGTK 4.1). systemd was left off, which is the WSL default, as on the reporting user's machine./v1route to OpenAI withjwtAuthinstrictmode accepts only Microsoft Entra ID access tokens for the Agentdesktop app registration (v2.0 issuer, app audience, remote JWKS), and the gateway injects the OpenAI key upstream.llmGateway.urlpoints to the gateway, withauthentication.type: oidcagainst Entra andprograms.codex.useLlmGateway: true. Agentdesktop wrote Codex's provider (base_url = <gateway>/v1) with itself as the credential helper. No provider block was written by hand.Steps and results:
The released v0.3.0
agentdesktop-linux-amd64fails in the WSL distro with the missing-library errors above. This reproduces the report.The headless binary from this branch, installed as
~/.local/bin/agentdesktop, starts on the same distro with no missing libraries.agentdesktop daemon --userran in the foreground (no systemd). WSL has no browser, so the daemon printed the Entra sign-in URL. Opening it in Edge on the Windows host completed the OIDC flow through WSL's localhost forwarding to the daemon's127.0.0.1callback.Codex 0.164.0 (static musl build) in WSL sent requests through the gateway using the Agentdesktop-issued Entra token. Gateway access log, abbreviated:
GET /v1/models?client_version=0.164.0(×6)POST /v1/responses(×2)gpt-5.6-terraPOST /v1/responsesRequests with no token or a malformed token got 401.
Not covered here
workflow_dispatchrun ofReleasewithskip_github_release: truewould exercise them before the next tag.container:. If the runner does not support container jobs, move that job toubuntu-24.04.Dockerfile), so they need manual updates.HTTPS_PROXY, and the controller channel trusts onlycontroller.caCertificatePath. That is a separate change.🤖 Generated with Claude Code