coleam00/Archon · error · Error

Copilot model access error: ${combined} Try a different mod

Error message

Copilot model access error: ${combined}

Try a different model in the workflow node or set assistants.copilot.model in .archon/config.yaml.

What it means

buildFriendlyCopilotError classifies Copilot provider failures, and model-access errors produce this message combining the thrown error with any lastSessionError collected from the SDK's session.error event (which often carries the specific detail while the thrown error is generic). It means GitHub Copilot refused access to the configured model and points at assistants.copilot.model in .archon/config.yaml as the knob to change.

Source

Thrown at packages/providers/src/community/copilot/provider.ts:620

        skills: sessionConfig.skillDirectories?.length ?? 0,
        agents: sessionConfig.customAgents?.length ?? 0,
        tokenSource,
        resumed: resumeSessionId !== undefined && !resumeFailed,
      },
      'copilot.session_started'
    );

    try {
      yield* bridgeSession(
        session,
        effectivePrompt,
        requestOptions?.abortSignal,
        wantsStructured ? outputFormat.schema : undefined
      );
      log.info({ sessionId: session.sessionId }, 'copilot.prompt_completed');
    } catch (err) {
      log.error({ err, sessionId: session.sessionId }, 'copilot.prompt_failed');
      throw buildFriendlyCopilotError(err);
    } finally {
      // Stop the client so its CLI subprocess shuts down; bridgeSession already
      // handled session.abort() + session.disconnect() in its own finally.
      try {
        const stopErrors = await client.stop();
        if (stopErrors.length > 0) {
          log.warn({ errors: stopErrors.map(e => e.message) }, 'copilot.client_stop_errors');
        }
      } catch (stopErr) {
        log.debug({ err: stopErr }, 'copilot.client_stop_threw');
      }
    }
  }
}

View on GitHub (pinned to 0773b97458)

Solutions

  1. Set assistants.copilot.model in .archon/config.yaml to a model your Copilot plan supports (e.g. gpt-4o).
  2. Check the `combined` detail after the prefix for the exact model-id complaint.
  3. Verify your Copilot subscription/entitlements include the requested model; premium models require a paid tier.
  4. If an organization manages the account, confirm policy allows premium model requests.

Example fix

# before
assistants:
  copilot:
    model: claude-opus-4-5
# after
assistants:
  copilot:
    model: gpt-4o
Defensive patterns

Strategy: validation

Validate before calling

// before running Copilot nodes
import { config } from './config';
const model = config.assistants?.copilot?.model ?? 'gpt-4o';
const allowedModels = ['gpt-4o', 'gpt-4.1', 'o3-mini']; // models entitled on your plan
if (!allowedModels.includes(model)) {
  throw new Error(`Copilot model ${model} not in entitled list; set assistants.copilot.model`);
}

Try / catch

try {
  await runCopilotNode(node);
} catch (err) {
  if (err instanceof Error && err.message.startsWith('Copilot model access error:')) {
    // fall back to a known-entitled model, or stop with a config pointer
    throw new Error('Update assistants.copilot.model in .archon/config.yaml to an entitled model');
  }
  throw err;
}

Prevention

When it happens

Trigger: sendQuery's prompt call fails because the Copilot CLI/SDK reports the account or subscription is not entitled to the requested model — model name typo'd, premium-model request on a free plan, org policy blocking the model, or a model id deprecated/renamed by GitHub.

Common situations: Workflow node requests a model not enabled for the user's Copilot plan; enterprise policy disables premium models; config references a model id GitHub renamed; entitlement changed after a subscription downgrade.

Related errors


AI-assisted analysis of coleam00/Archon@0773b97458 (2026-09-01). Data as JSON: /api/errors/bc138cf6847908a0. Report an issue: GitHub.