Skip to content

[Feature] First-class GitHub Copilot Enterprise support (PR is ready) #4248

Description

@mararn1618

See PR #4249

The copilot harness (GitHub Copilot SDK, in-process) is part of omnigent, but it is not reachable from the product surface: no entry in the harness picker, no model selection, no GitHub Enterprise support, and readiness rejects machines that authenticate via copilot login. For organizations running Copilot seats, often on GitHub Enterprise with data residency, that makes the harness effectively unusable today.

I have a working implementation and would like to contribute it. Opening this issue first per CONTRIBUTING to align on scope; the PR with full details, screenshots, and testing notes: #4249.

What it adds:

  1. Copilot in the harness picker. A seeded copilot builtin chat agent plus a registry entry alongside Claude Code and Codex. Copilot is the first chat-mode entry (SDK in-process, no terminal to wrap), so the registry gains an explicit sessionMode: "chat"; chat entries bind by agent name only and never classify sessions as terminal sessions.

Copilot in the harness picker

  1. Live, policy-filtered model catalog. The host answers the pre-launch model-options probe via CopilotClient.list_models(), so the gear modal shows exactly the models the signed-in seat may use, enterprise policy included. Reasoning efforts come per model from supported_reasoning_efforts; the effort select renders only the selected model's ladder and hides for models without one.

Live model list from the seat

  1. GitHub Enterprise host in omnigent setup. The Copilot CLI validates a token against api.github.com unless COPILOT_GH_HOST names the tenant host, and that env var does not survive the daemon/runner env allowlists. The host becomes a config value (copilot.gh_host), set once in the Copilot setup drill-in and threaded to the harness spawn env by the runner. GH_HOST itself is never touched.

  2. Readiness accepts the Copilot CLI login. Previously only a resolvable token counted, so a machine authenticated via copilot login was rejected with 412 even though sessions run fine on the stored credential. On Enterprise seats this is the auth path that works best, because the CLI login carries its own host.

Design decisions worth flagging for review:

  • The copilot builtin is seeded by a dedicated _ensure_default_copilot_agent rather than the NATIVE_CODING_AGENTS table, because the table requires a native provider row with a materialize_agent_spec hook, which the SDK-in-process harness does not have.
  • The picker entry carries no fullySupported flag: Copilot starts under "More" and surfaces through the recent-harness mechanic once used.
  • COPILOT_EFFORTS widens to the CLI's full vocabulary (none|minimal|low|medium|high|xhigh|max); per-model subsets are enforced by the backend and mirrored in the UI.

Everything is implemented on top of current main and verified end to end against a live GitHub Enterprise data-residency seat.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions