Skip to content

feat(gui,docs): Claude Desktop connection-mode selector and first-party docs - #5303

Closed
devin-ai-integration[bot] wants to merge 8 commits into
devin/1789891632-claude-desktop-first-partyfrom
devin/1789892227-claude-desktop-gui-docs
Closed

devin-ai-integration[bot] wants to merge 8 commits into
devin/1789891632-claude-desktop-first-partyfrom
devin/1789892227-claude-desktop-gui-docs

Conversation

@devin-ai-integration

@devin-ai-integration devin-ai-integration Bot commented Sep 20, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Stack 3/3. Surfaces the mode from PR 2 in the dashboard and documents it.

  • GUI (gui/src/pages/ClaudeDesktop.tsx): a "Connection mode" radio group — First-party (marked Default) vs Gateway — sends { mode } with POST /api/claude-desktop/apply, shows a switch note when the selection differs from the effective mode, and in first-party mode shows the intercept proxy state (running / stopped / disabled) and port instead of the gateway-only profile status. All copy goes through the locale catalogs; keys added to every locale module. Picker CSS lives in gui/src/styles/claude-desktop-mode-picker.css (imported from main.tsx) because styles.css sits at its file-size cap.
  • Docs (docs-site/.../guides/claude-code.md, canonical): "Claude Desktop modes: first-party (default) and gateway" — what each mode touches, the exact settings.json.env written, intercepted vs relayed routes, local CA trust boundary (never in the OS store), how existing gateway installs are preserved across the update, foreign-env protection, ocx ensure, connected-client behavior. New "Claude Code CLI compatibility" section: the standalone CLI and subagents pick up the same env, so they work through the proxy unchanged; limitations are model discovery (CLI fixes its model list before the request, so use the picker aliases / ANTHROPIC_MODEL-style env) and subagent model env vars. fr/ja/ko guides get a matching summary that defers to the English text.
  • Structure docs for the management API / GUI updated.

Verification

  • cd gui && bun test tests && bun run lint && bun run lint:i18n && bun run build
  • cd docs-site && bun install --frozen-lockfile && bun run build
  • bun run privacy:scan, bun run structure:check, bun run typecheck, bun scripts/file-size-ratchet.ts
  • End-to-end in the dashboard: first-party apply → gateway apply → direct switch back to first-party, CLI ocx claude desktop apply --first-party while gateway is active, keyboard navigation, Korean locale, foreign-proxy protection (details in the comment on PR 2).

Claude Desktop connection-mode picker

Checklist

  • Scope stays focused and avoids unrelated cleanup.
  • Docs or release notes were updated when needed.
  • Security-sensitive changes were reviewed for secrets, auth, and unsafe defaults — GUI only selects a mode; enforcement lives in the API (PR 2).

Link to Devin session: https://app.devin.ai/sessions/4ec9c3528d424ced9e4a4da906168ad1
Open in Devin Desktop: https://app.devin.ai/desktop/session/4ec9c3528d424ced9e4a4da906168ad1?variant=devin
Requested by: @lidge-jun

Review readiness checklist

This PR stays in draft until every box below is ticked. Tick all four boxes once the requirements are met:

  • All CI tests are green on my local testing.

  • I pushed my PR to the latest dev commit.

  • I resolved all correct Codex and CodeRabbit findings.

  • My PR is ready for review.

@devin-ai-integration

Copy link
Copy Markdown
Contributor Author

I'll fix CI failures and address comments from users with write access. I'll skip comments containing "(aside)".

  • Disable automatic comment, CI, and merge conflict monitoring

@coderabbitai

coderabbitai Bot commented Sep 20, 2026 •

Copy link
Copy Markdown
Contributor

Important

Review skipped

Bot user detected.

To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository: lidge-jun/opencodex/.coderabbit.yaml

Review profile: ASSERTIVE

Plan: Advanced

Run ID: e11556f9-7a2e-4816-b1e0-721bac5ab381

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@devin-ai-integration
devin-ai-integration Bot added this pull request to stack #5304 September 20, 2026 08:31
@github-actions github-actions Bot added the intake: hygiene-blocked Deterministic PR hygiene checks failed label Sep 20, 2026
@github-actions

github-actions Bot commented Sep 20, 2026 •

Copy link
Copy Markdown
Contributor

✅ Deterministic PR hygiene checks passed.

@github-actions github-actions Bot added enhancement New feature or request and removed intake: hygiene-blocked Deterministic PR hygiene checks failed labels Sep 20, 2026
@devin-ai-integration
devin-ai-integration Bot force-pushed the devin/1789892227-claude-desktop-gui-docs branch from 5537766 to d701417 Compare September 20, 2026 09:01
@devin-ai-integration
devin-ai-integration Bot removed this pull request from stack #5304 September 20, 2026 09:01
@devin-ai-integration
devin-ai-integration Bot added this pull request to stack #5308 September 20, 2026 09:01
@lidge-jun

Copy link
Copy Markdown
Owner

리뷰 · 우선순위 61 / 80

이 PR은 Claude Desktop “연결 모드” 스택의 맨 위(3/3)입니다. 앞 PR에서 만든 first-party / gateway 모드를 대시보드에 보여주고, 문서로 설명합니다.

대시보드 Claude → Desktop 탭에 라디오로 First-party(기본)와 Gateway를 고릅니다. “저장 & 적용”을 누르면 POST /api/claude-desktop/apply 몸통에 { mode }를 같이 보냅니다. first-party일 때는 상태 줄에 로컬 인터셉트 프록시가 도는지·포트가 몇인지 보여 주고, gateway일 때만 “다른 프로필을 쓰는 중” 경고를 켭니다. 문구는 모든 로케일 카탈로그에 넣었고, CSS는 styles.css 용량 한도 때문에 claude-desktop-mode-picker.css로 빼서 main.tsx에서 불러옵니다. 영어 가이드에 모드 차이·settings.json env·CA 신뢰 범위·기존 gateway 유지·Claude Code CLI 한계를 적었고, fr/ja/ko는 요약 후 영어를 가리킵니다. GUI 마운트 테스트도 라디오→POST body, 프록시 중지 표시, activeProfile 게이트를 커버합니다.

라인 - base가 dev가 아니라 #5302 브랜치(devin/1789891632-claude-desktop-first-party)입니다. 스택은 #5301(프록시) → #5302(모드 API) → 이 PR 순서입니다. 이 PR만 dev에 넣으면 apply의 mode / status의 firstParty가 없어 GUI가 깨집니다. mergeable_state: blocked도 이 의존과 CI 대기 쪽입니다.

라인 - gui/src/pages/ClaudeDesktop.tsx 모드가 first-party여도 Opus/Fable/Sonnet/Haiku 레인(게이트웨이 프로필 편집기)은 그대로 보입니다. 힌트는 “Code 탭만 프록시”인데 화면 아래는 예전 gateway 프로필 UI라, 새 사용자가 “지금 뭘 고친 거지?”라고 헷갈릴 수 있습니다. first-party일 때 레인을 접거나 비활성으로 둘지는 제품 선택입니다.

라인 - 같은 파일 effectiveMode = status?.mode ?? "first-party": /status가 오기 전·파싱 실패 시 first-party로 보입니다. 이미 gateway인 설치는 잠깐 first-party 라디오/배지가 깜빡일 수 있습니다. status 로드 전에는 라디오를 pending으로 두는 편이 더 안전합니다.

라인 - 모드만 바꾸고 Save(apply 없음)를 누르면 프로필만 저장되고 chosenMode는 남습니다. 노란 switch note는 보이지만 실제 전환은 apply 버튼뿐입니다. 의도일 수 있으나, modeDirty일 때 Save를 막거나 문구로 “적용해야 모드가 바뀝니다”를 더 명확히 하는 편이 덜 헷갈립니다.

메인테이너의 판단이 필요한 지점

first-party일 때 gateway 프로필 레인을 숨길지/접을지/그대로 둘지. 스택 tip을 #5302 머지 직후에만 넣을지, 아니면 세 PR을 한 번에 올릴지. 문서·GUI만 보면 방향은 맞고, 동작 계약은 #5302에 있습니다.

너의 추천

스택 순서(#5301→#5302→#5303)로 초록 확인 후 합류하세요. 머지 전에 (1) first-party에서 프로필 레인 UX를 한 줄이라도 정리할지 정하고, (2) status 로딩 중 first-party 기본 깜빡임을 줄이면 더 좋습니다. 테스트·i18n·문서 범위는 이 레이어에 잘 맞습니다. types/config 분할·프리뷰 배포 이야기는 이 PR과 무관합니다.

이 댓글은 grok-bot이 작성했습니다

@github-actions

github-actions Bot commented Sep 20, 2026 •

Copy link
Copy Markdown
Contributor

⏳ DRAFT

  • review readiness checklist open (0/4 boxes ticked).

What to do

  • Tick all four boxes in the PR description once you're done (currently 0/4).

Review readiness checklist

  • ⬜ All CI tests are green on my local testing.
  • ⬜ I pushed my PR to the latest dev commit.
  • ⬜ I resolved all correct Codex and CodeRabbit findings.
  • ⬜ My PR is ready for review.

0/4 boxes ticked.

This PR stays in draft until every box above is ticked.

@github-actions
github-actions Bot marked this pull request as draft September 20, 2026 09:21
@devin-ai-integration
devin-ai-integration Bot force-pushed the devin/1789892227-claude-desktop-gui-docs branch from 551f323 to 97603e1 Compare September 20, 2026 09:21
@devin-ai-integration
devin-ai-integration Bot force-pushed the devin/1789892227-claude-desktop-gui-docs branch from 97603e1 to 77c40d0 Compare September 20, 2026 09:40
@devin-ai-integration

Copy link
Copy Markdown
Contributor Author

Addressed the first-party flicker in 77c40d0: the mode picker now has a modeKnown state — until /status resolves, the fieldset is disabled, neither radio is checked, and no "current" badge / switch note renders. Regression test "no radio is checked and the picker is disabled until /status answers" gates /status behind a promise and asserts the unresolved state before releasing it.

Two items I left as-is on purpose, open to a call either way:

  • Gateway profile lanes in first-party mode — kept visible (not hidden/disabled) because Save still writes claudeCode.desktopProfile, which is what a later --gateway apply uses. Hiding them would make a first-party → gateway switch land on an empty profile. Happy to collapse them under a disclosure if you prefer less noise.
  • Save without Apply — unchanged from the existing gateway page: Save persists the profile, "Switch mode & apply"/"Apply" is the on-disk action. The mode radio is the only new dirty-state input and is already labeled with the switch note.

Stack is rebased on current dev (test-layout registry conflict resolved by keeping both sides).

@lidge-jun

Copy link
Copy Markdown
Owner

추가 리뷰 · 우선순위 64 / 80

지난 리뷰(우선순위 61) 이후 tip이 77c40d0으로 옮겼습니다. 핵심 변화는 한 가지입니다. /status가 오기 전에 first-party를 미리 체크하던 깜빡임을 없앴습니다. modeKnown = status !== null을 두고, 답을 알기 전에는 라디오를 둘 다 비우고 fieldset을 잠그며 “현재” 배지와 switch note도 그리지 않습니다. gateway 설치가 first-party로 한 프레임 보이는 문제를 직접 막았고, 회귀 테스트 “no radio is checked and the picker is disabled until /status answers”로 /status를 Promise로 막아 그 상태를 검증한 뒤 해제합니다. Devin 댓글대로 gateway 프로필 레인 노출과 Save(프로필만)·Apply(모드 전환) 분리는 의도적으로 그대로 두었습니다. 스택은 여전히 #5302 위 GUI·문서 레이어(3/3)입니다.

라인 - gui/src/pages/ClaudeDesktop.tsx modeKnown: 이전 “status 로드 전 first-party 깜빡임”은 이 커밋으로 해결된 것으로 봅니다. 다만 /status가 실패하고 cachedStatus도 없으면 modeKnown이 false로 남아 픽커가 계속 잠길 수 있습니다. 실패 UI(재시도·에러 문구)와 픽커 unlock 정책을 한 줄로 맞춰 두면 더 안전합니다.

라인 - first-party여도 Opus/Fable/Sonnet/Haiku gateway 프로필 레인은 그대로 보입니다. Devin 설명(Save가 claudeCode.desktopProfile을 남겨 이후 --gateway apply에 쓴다)은 타당합니다. 그래도 새 사용자에게는 “지금 고치는 UI가 first-party에 안 먹는다”가 안 보일 수 있어, 접기/비활성/짧은 안내 중 하나는 제품 선택이 남습니다.

라인 - 모드만 바꾸고 Save만 누르면 프로필만 저장되고 모드 전환은 Apply뿐입니다. switch note는 있지만, modeDirty일 때 Save 옆 문구를 한 단계 더 세게 할지 말지는 여전히 선택입니다.

라인 - base는 여전히 #5302 브랜치입니다. 이 PR만 dev에 넣으면 apply mode / status firstParty가 없어 GUI가 깨집니다. CI는 tip 푸시 직후라 다수 잡이 pending입니다.

메인테이너의 판단이 필요한 지점

first-party에서 gateway 레인·Save/Apply 분리를 “의도적 유지”로 받아들일지, 아니면 접기/문구만 손볼지. /status 실패 시 픽커를 계속 잠글지·에러 후 기본값을 풀지. 스택 tip은 #5301→#5302→#5303 순으로만 올릴지.

너의 추천

깜빡임 수정과 회귀 테스트는 머지해도 될 수준으로 잘 맞습니다. 남은 것은 제품 UX 선택과 스택 의존입니다. CI 초록과 #5302 합류를 확인한 뒤 이 PR을 올리고, 레인/Save 문구는 원하면 follow-up으로 미뤄도 됩니다. types/config 분할·프리뷰 배포는 이 PR과 무관합니다.

이 댓글은 grok-bot이 작성했습니다

@devin-ai-integration

Copy link
Copy Markdown
Contributor Author

bf78f2e: /status failure no longer leaves the picker locked. Once showError is set (and there is no cached status), the fieldset unlocks on the first-party default so an apply can still be attempted; the "current" badge and switch note stay hidden since the real mode is unknown, and the status bar already shows the load error. Test: "a failed /status unlocks the picker on the default without claiming a current mode".

Gateway lanes / Save-vs-Apply wording left as a product call (follow-up is fine either way). Stack order unchanged: this PR only lands after #5302.

@devin-ai-integration
devin-ai-integration Bot force-pushed the devin/1789892227-claude-desktop-gui-docs branch from bf78f2e to cb387ce Compare September 20, 2026 09:50
@lidge-jun

Copy link
Copy Markdown
Owner

추가 리뷰 · 우선순위 69 / 80

지난 추가 리뷰(우선순위 64, tip 77c40d0) 이후 tip이 cb387ce로 옮겼습니다. 핵심 변화는 한 가지입니다. 지난번에 남겼던 “/status 실패 시 픽커가 영원히 잠길 수 있다”를 고쳤습니다. modePickable = modeKnown || statusFailed로, 캐시된 status가 없고 showError가 켜지면 fieldset을 풀고 first-party 기본을 고를 수 있게 합니다. 다만 실제 모드는 모르므로 “현재” 배지와 switch note는 그리지 않습니다(modeDirty는 modeKnown일 때만). 회귀 테스트 “a failed /status unlocks the picker on the default without claiming a current mode”가 이를 고정합니다. gateway 레인·Save/Apply 분리는 Devin이 제품 선택으로 남겨 두었고, 스택은 여전히 #5302 위 GUI·문서 레이어(3/3)입니다.

라인 - gui/src/pages/ClaudeDesktop.tsx modePickable / statusFailed: 이전 “실패 시 잠금” 문제는 이 커밋으로 해결된 것으로 봅니다. 남은 잔여 위험은 작습니다. status를 모르는 채 Apply를 누르면 기본이 first-party라, 실제로는 gateway 설치여도 first-party apply가 나갈 수 있습니다. 상태 줄에 로드 실패가 보이므로 의도적 복구 경로로 보이며, 지금 수준이면 충분합니다.

라인 - first-party여도 Opus/Fable/Sonnet/Haiku gateway 프로필 레인은 그대로입니다. Save가 claudeCode.desktopProfile을 남겨 이후 gateway apply에 쓴다는 설명은 타당하고, 접기/안내는 follow-up으로 미뤄도 됩니다.

라인 - 모드만 바꾸고 Save만 누르면 프로필만 저장됩니다. switch note는 있고, 문구를 더 세게 할지는 제품 선택입니다.

라인 - base는 여전히 #5302 브랜치입니다. enforce-target 실패는 스택 PR이라 예상됩니다. 이 PR만 dev에 넣으면 apply mode / status firstParty가 없어 GUI가 깨집니다. 대부분 CI는 통과했고 macos 일부는 아직 pending입니다. draft 상태입니다.

메인테이너의 판단이 필요한 지점

gateway 레인·Save/Apply를 “의도적 유지”로 확정할지. 스택 tip을 #5301→#5302→#5303 순으로만 올릴지. status 실패 후 first-party 기본 apply를 복구 UX로 받아들일지(지금은 그쪽으로 기울어 있음).

너의 추천

픽커 로딩·실패 경로와 테스트는 머지해도 될 수준입니다. CI 초록과 #5302 합류를 확인한 뒤 이 PR을 올리세요. 레인/Save 문구는 원하면 별도 follow-up으로 미뤄도 됩니다. types/config 분할·프리뷰 배포는 이 PR과 무관합니다.

이 댓글은 grok-bot이 작성했습니다

lidge-jun and others added 2 commits September 20, 2026 03:07
…ty docs

Dashboard Desktop tab gains a Connection mode picker (first-party default,
gateway opt-in) that sends the chosen mode with /api/claude-desktop/apply and
shows the intercept proxy state in first-party mode. Strings added to every
locale.

Docs describe both modes, the settings.json env the first-party apply writes,
intercepted routes, the local CA trust boundary, update behavior for existing
gateway installs, and Claude Code CLI compatibility/limitations. Translated
guides get a summary section pointing at the canonical English text.

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
lidge-jun and others added 4 commits September 20, 2026 03:07
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
gui/src/styles.css sits at its file-size cap; the picker rules move byte-for-byte
into gui/src/styles/claude-desktop-mode-picker.css, imported from main.tsx.

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
The picker no longer pre-checks the first-party default while the status request is
in flight, so a gateway install does not see the wrong radio and badge flash.

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
…ilure

A failed /status with no cached status left the picker disabled forever. It now unlocks on
the first-party default once the error is shown, while the current-mode badge and switch
note stay hidden because the real mode is still unknown.

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
@devin-ai-integration
devin-ai-integration Bot force-pushed the devin/1789892227-claude-desktop-gui-docs branch from cb387ce to 7a0dda0 Compare September 20, 2026 10:07
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
@lidge-jun
lidge-jun marked this pull request as ready for review September 20, 2026 11:06
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 20, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-09-20T11:09:47.842155Z 61fe075 Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

…ction mode

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
@github-actions
github-actions Bot marked this pull request as draft September 20, 2026 11:07

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 61fe075b8d

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

// be attempted, but no "current" badge is claimed.
const modeKnown = status !== null;
const modePickable = modeKnown || statusFailed;
const effectiveMode: DesktopMode = status?.mode ?? "first-party";

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Treat legacy status payloads as gateway mode

When the dashboard is opened after an upgrade while session storage still contains a status response from the gateway-only implementation, isDesktopStatus accepts that payload without a mode, making modeKnown true, but this fallback selects first-party. The picker and “current” badge therefore misreport the existing gateway installation, and clicking apply before revalidation completes posts {"mode":"first-party"} and replaces it. Treat an absent mode on an accepted legacy payload as gateway, or reject that cached payload until a live status response arrives.

AGENTS.md reference: gui/AGENTS.md:L10-L10

Useful? React with 👍 / 👎.

Comment on lines 524 to 525
: status.stale
? "stale"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Mark a stopped first-party proxy as unavailable

When the proxy environment remains installed but the intercept listener has stopped, the API reports applied: true together with firstParty.interceptRunning: false; this branch still paints the status bar green and states that the Code tab is routed through the proxy even though requests cannot reach it. The smaller secondary text says the proxy is stopped, but the primary state contradicts it. Include interceptEnabled and interceptRunning when classifying and wording the first-party status.

AGENTS.md reference: gui/AGENTS.md:L10-L10

Useful? React with 👍 / 👎.

Comment on lines +228 to +230
`ocx claude desktop` and `apply` apply the selected mode: first-party writes the Claude Code proxy
env, gateway writes the current profile to Claude Desktop. `show` gives a
readable summary; `status` reports the effective mode, the applied profile or proxy env, drift,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Synchronize every translated Claude Desktop guide

The canonical guide now correctly explains that apply writes either the first-party proxy environment or the gateway profile, but the directly affected Turkish and Traditional Chinese pages still state that ocx claude desktop apply always writes the current profile into Claude Desktop (tr/.../claude-code.md:176 and zh-tw/.../claude-code.md:128). That is false for the new default first-party mode and will send those readers through the obsolete workflow, so update the remaining translations alongside the English behavior change.

AGENTS.md reference: docs-site/AGENTS.md:L7-L10

Useful? React with 👍 / 👎.

@lidge-jun

Copy link
Copy Markdown
Owner

Superseded by #5319, merged to dev as e3ac5bea0427cb759b08c7bf691ded6a2392c002, with attribution in the branch commit.

The chain was carried as a GitHub native stack, which stops accepting ordinary merges once its bottom lands by squash. Its tip already contained both ancestors and branched cleanly from dev, so the three parts were consolidated onto the current dev as one branch instead. Only the two test-layout registries conflicted, resolved as the union of both entry sets.

Closing as superseded rather than stale.

@lidge-jun lidge-jun closed this Sep 20, 2026
@lidge-jun
lidge-jun deleted the devin/1789892227-claude-desktop-gui-docs branch September 20, 2026 11:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant