Skip to content

Run the Claude engine in GitHub Actions #104

Description

@charlesgreen

The local half of #95 shipped in #102: engine: claude no longer demands Azure credentials it never uses, and codex.WriteConfig is gated on the same condition. A local CLI run can use Claude today.

The hosted path still cannot, and that half could not ship in the same pull request. It needs a change under .github/workflows/, and the App holds no workflows permission by design, so the agent cannot push it. This is human work, or a local CLI run merged the usual way.

What is missing

The reusable workflow installs the Codex CLI unconditionally, in both jobs, and declares azure-openai-endpoint and azure-openai-api-key as required. A caller selecting Claude still has to supply Azure credentials to satisfy the workflow contract, and the CLI it needs is never installed.

Work

  1. Add an engine input to the reusable workflow, defaulting to codex so no existing caller changes.
  2. Install the CLI the selected engine needs, rather than always the Codex one.
  3. Make the Azure input and secret conditional on the engine, and add an anthropic-api-key secret for the Claude path. This is the part worth thinking about rather than typing: workflow_call secrets cannot be conditionally required, so either both become optional and the CLI enforces the pairing, or the engines get separate jobs.
  4. Decide what the Claude path authenticates with. The adapter deliberately inherits whatever the claude CLI is already configured with, which suits a developer machine and means nothing on a fresh runner.
  5. Say in docs/setup.md which engines the hosted path supports, replacing the note added in Closes #95: engine: claude is selectable but cannot actually be used #102 that it is Codex-only.

Acceptance

  • A caller passing engine: claude and an Anthropic credential gets a pull request from GitHub Actions, with no Azure variables set anywhere.
  • A caller passing nothing still runs Codex on Azure exactly as it does today.
  • The sandbox question is settled either way: the Claude adapter does not use bubblewrap, so The issue-to-PR loop has never completed a run in GitHub Actions #99 does not apply to it, and that is worth confirming rather than assuming.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions