github / github/copilot-cli

Copilot App 1.1.8 still gated by org "Copilot CLI" policy despite "GitHub Copilot app" policy being Enabled

未关闭
#4,481 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

area:authentication area:enterprise
主要语言
Shell
星标
11.2k
派生
1.9k
平均合并
14 小时 16 分钟
30 天内合并 PR
6

描述

Describe the bug

The org-level policy UI for GitHub Copilot app states:

If enabled, members of this organization can use the GitHub Copilot app. Enforcement begins July 27th, 2026 in version 1.1 of the GitHub Copilot app. The Copilot CLI policy continues to govern the GitHub Copilot App until version 1.1

On GitHub Copilot app 1.1.8 (past that cutover), with the org configured as:

  • GitHub Copilot app = Enabled (enterprise-enforced)
  • Copilot CLI = Disabled (org-level)

members still cannot use the Copilot app at all. Model listing fails immediately and every prompt is rejected.

The app's own entitlement gate appears to pass correctly — it is the CLI engine the app spawns that is denied.

Symptoms seen by affected members:

Model list on startup:

Failed to list models: RPC error -32603: Request models.list failed with message: 403 "unauthorized: not authorized to use this Copilot feature\n"

Any prompt:

You are not authorized to use this Copilot feature, it requires an enterprise or organization policy to be enabled.
Request ID: 813D:3FB9FB:48AA19:54AD00:6A7E2287

App-side log:

ERROR github_app::handlers::misc: failed to list models
error=RPC error -32603: Request models.list failed with message:
403 "unauthorized: not authorized to use this Copilot feature\n"

Evidence that the app gate passes but the engine gate does not:

  1. The app binary's CopilotUserResponse struct parses copilot_app_enabled and does not contain cli_enabled — so the app itself honors the documented ≥1.1 behavior.
  2. The app spawns the CLI as its engine:
    ~/Library/Caches/github-copilot-sdk/cli/1.0.79-9/copilot --server --stdio --no-auto-update
    
  3. The failure surfaces as an RPC error from that subprocess (RPC error -32603: Request models.list), i.e. the engine's own API call is what gets the 403.

So copilot_app_enabled: true has no practical effect while cli_enabled: false, which is the opposite of what the policy text promises at 1.1+.

GET https://api.github.com/copilot_internal/user for an affected member returns:

{
  "cli_enabled": false,
  "copilot_app_enabled": true,
  "copilot_plan": "enterprise",
  "organization_login_list": ["<org>"]
}
Affected version

GitHub Copilot app 1.1.8 (macOS, arm64); bundled engine ~/Library/Caches/github-copilot-sdk/cli/1.0.79-9/copilot

Steps to reproduce the behavior
  1. In an organization on an enterprise plan, set GitHub Copilot app = Enabled and Copilot CLI = Disabled.
  2. As a member whose Copilot seat comes only from that organization, sign in to the GitHub Copilot app 1.1.8.
  3. Observe the model picker fail with Failed to list models: RPC error -32603: ... 403 "unauthorized: not authorized to use this Copilot feature".
  4. Send any prompt (e.g. say hi) and observe You are not authorized to use this Copilot feature, it requires an enterprise or organization policy to be enabled.
  5. Confirm the entitlement split via GET https://api.github.com/copilot_internal/usercopilot_app_enabled: true, cli_enabled: false.
Expected behavior

At app version ≥ 1.1, the GitHub Copilot app policy alone should govern the app, per the policy UI text. With copilot_app_enabled: true, the app and the engine it spawns on the user's behalf should both be authorized, and cli_enabled: false should not block it.

Concretely: requests the app makes through its bundled copilot --server --stdio engine should be evaluated against copilot_app_enabled, not cli_enabled.

Today the only workaround is to enable the Copilot CLI org policy — which defeats the purpose of the two policies being separate, and forces admins to permit standalone terminal CLI use in order to allow the desktop app.

Additional context
  • Operating system: macOS (Darwin), ARM (arm64)
  • Org plan: enterprise
  • Request ID: 813D:3FB9FB:48AA19:54AD00:6A7E2287
  • Org name redacted as <org> above.

Possibly related — entitlement resolving across enterprise boundaries

While diagnosing this, we noticed that an org owner with a Copilot seat in a second, unrelated organization was unaffected. Their copilot_internal/user returned cli_enabled: true with:

"organization_login_list": ["<org-a>", "<org-b>"]

<org-b> enforces its own SAML SSO (so it belongs to a different enterprise), and the token in use was not SSO-authorized for it. The policy docs scope least-restrictive resolution to "multiple organizations in the same enterprise":

A user can receive access to Copilot from multiple organizations in the same enterprise. If these organizations have configured the same policy differently, the least restrictive policy usually applies.

If least-restrictive resolution is in fact spanning enterprises, an admin cannot enforce a Copilot policy on any user who holds a seat elsewhere. Filing here for visibility; happy to move that to Support if it is better handled there.

贡献指南

打开贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

调研方向

未指定任何仓库源文件或测试;先使用捆绑的 ~/Library/Caches/github-copilot-sdk/cli/1.0.79-9/copilot 引擎进行复现,并检查 GET /copilot_internal/user。将 app 和 CLI 的 entitlement 检查与文档中说明的 policy 切换进行比较。当 app 在 copilot_app_enabled true 且 cli_enabled 为 false 的情况下正常工作,且不需要 CLI policy 时,即表示完成。

由索引模型根据 Issue 内容生成。

评估

技术栈
github, shell
领域
api, authorization, cli
Issue 类型
缺陷
难度
4/5
预计耗时
3-5 天
活跃度
冷清
描述清晰度
基本清楚
新手友好度
35/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。