[BUG] iOS App blocks session initialization with "GitHub app is not installed" modal for non-admin repos authorized via /web-setup
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
Category
Bug Report / Feature Inconsistency
Title
Claude iOS App blocks session initialization with "GitHub app is not installed" modal for repositories authorized via /web-setup
Description
There is a critical functional inconsistency between launching a Claude Code cloud session via a mobile web browser (Chrome/Safari) vs. launching it via the official Claude iOS App.
If a user does not have Admin privileges on an organization repository, they cannot install the global Claude GitHub App. However, they can successfully initialize and use cloud sessions via mobile Chrome because their account is authenticated using a developer token synced via claude /web-setup.
The Claude iOS app client fails to recognize this token-based authorization during the initialization phase. Instead, it runs a hardcoded pre-flight check exclusively for the GitHub App installation. When that check returns false, it intercepts the action and forces a "GitHub app is not installed" modal, completely blocking the user from starting a session.
Oddly, if the session is already initialized via mobile Chrome, the iOS app can join and interact with the active session perfectly, proving the backend permissions are completely valid.
Steps to Reproduce
- Authenticate Claude Code using a non-admin repository via the
claude /web-setupcommand on a desktop terminal. - Open a mobile browser (e.g., Chrome on iOS) and navigate to
claude.ai/code. - Initialize a new session on the target repository. (Result: Success, session starts normally).
- Close the browser, open the native Claude iOS App, and attempt to initialize a brand-new session on that exact same repository.
- Observe the roadblock.
Expected Behavior
The native iOS app's repository selector should check the user's account profile for a valid token synced via /web-setup before defaulting to the "GitHub app is not installed" error screen. If an active account token exists, it should initialize the session identically to the web interface.
Actual Behavior
The iOS app forces an un-passable "GitHub app is not installed" modal popup, trapping non-admin users in a loop where they cannot start sessions from the native app.
Environment / Screenshots
- OS: iOS
- App Version: Latest App Store Release
- Authentication Method: Account-bound token synced via
/web-setup
(Feel free to attach the two excellent screenshots you shared with me here to visually prove the web-vs-app split to the devs!)
What Should Happen?
Expected Behavior
The native Claude iOS app's repository selection flow should cross-reference the user's account data to check for a valid, account-bound developer token synced via claude /web-setup.
If an account-bound token exists and has valid repository access, the client should allow the user to initialize a fresh session—matching the exact successful initialization behavior seen in desktop and mobile web browsers (claude.ai/code).
Actual Behavior
The native Claude iOS app client runs an "all-or-nothing" pre-flight checklist that exclusively checks for the presence of the global Claude GitHub App on the repository layer.
If the user is a non-admin contributor on an organization repository (and therefore cannot globally install or force-approve the GitHub App), the client completely overrides the session request. It intercepts the user's click and throws an impassable native modal block stating: "GitHub app is not installed. Install the Claude Code GitHub App in your repositories to connect them to Claude".
Error Messages/Logs
### Error Message Observed in UI
* **Modal Title:** GitHub app is not installed
* **Modal Body text:** Install the Claude Code GitHub App in your repositories to connect them to Claude
* **Action Buttons forced:** `[Install Claude GitHub app]` / `[Cancel]`
### Internal Client Logic Flow (Diagnostic Signature)
[User clicks repo card to start session]
│
▼
[iOS Client triggers repository-layer integration audit]
│
├───► [Check: Is global GitHub App enabled on target repo?]
│ │
│ └───► Returns: FALSE (No organizational/admin app active)
│
▼
[CRITICAL INCONSISTENCY/OMISSION]:
The client completely skips verifying if an account-level token from /web-setup exists.
│
▼
[Client Intercepts Action] ──► Overlays blocking UI alert view window.
Steps to Reproduce
Steps to Reproduce
- Using a desktop environment terminal, authenticate Claude Code against a repository where your GitHub user account has standard push/pull permissions but does not hold Administrator/Owner privileges. Configure this by running
claude /web-setup. - Open a mobile web browser (such as Chrome or Safari on iOS), log into your account, and navigate to
claude.ai/code. - Locate the target repository and tap to spin up a brand-new session. (Observe: The session initializes perfectly because the web app leverages your account-level developer token).
- Terminate or exit that specific session.
- Launch the native Claude iOS App on your phone and click into the Code navigation layout.
- Attempt to select the identical non-admin repository to initiate a brand-new workspace session from inside the app container.
Visual Validation / Cross-Surface Proof
- Surface A (Mobile Chrome Web view): Successfully spins up the sandbox environment, reads the
/web-setupprofile credentials, binds to the repository workspace, and opens the prompt console input. - Surface B (Native iOS App View): Throws a hard blocking modal overlay over the viewport, prompting an infinite installation loop despite active web session viability.
(Note to maintainers: Once a session is already kicked off via the browser view, the iOS app can join the running session history perfectly. The failure is completely isolated to the initial client-side repo selection checklist).
Claude Model
Not sure / Multiple models
Is this a regression?
I don't know
Last Working Version
_No response_
Claude Code Version
1.260702.3(iOS app)
Platform
Other
Operating System
Other
Terminal/Shell
Other
Additional Information
Context on Prior/Duplicate Issues (Why a New Issue is Required)
This is a known, persistent friction point that has been reported by several users under various symptoms, but all previous tracking tickets have been prematurely closed by automated repository maintenance:
- Issue #46562 (
[BUG] need to install Claude Github app not working --> infinite loop) explicitly flagged the exact mobile block and infinite loop behavior described here. - Issue #42006 (
Mobile app: GitHub repository access check fails on new sessions after re-authorization) traced the identical discrepancy where existing web-created sessions worked flawlessly on mobile, but creating a fresh session on the mobile app consistently threw repository access errors.
Current Status:
Both of these threads were marked as stale and automatically closed by github-actions[bot] due to temporary operational inactivity, rather than an actual code fix or engine patch being deployed. As specified by the repository's automated closure guidelines ("If this issue is still relevant, please open a new one"), this fresh issue is being created to aggregate those duplicate findings and ensure this critical mobile-to-token initialization flaw is actively tracked to completion.