coleam00/Archon · error · Error

Provider${incompatible.size === 1 ? '' : 's'} '${list}' cann

Error message

Provider${incompatible.size === 1 ? '' : 's'} '${list}' cannot run inside a container yet (containerExec capability). Use provider claude, or run without --container.

What it means

Container mode (--container) requires every provider used by the workflow to declare a containerExec capability. Before executing, the executor collects providers that lack it; if any remain, it refuses to run and lists them, advising claude or running without the container flag.

Source

Thrown at packages/workflows/src/dag-executor.ts:11463

    priorUsage,
    priorNodeSessions,
    workflowSourceRoots,
  } = options;
  const dagStartTime = Date.now();

  // Container capability fail-fast: before ANY node runs (and before any
  // container work), reject a container run whose AI nodes resolve to a provider
  // that can't spawn in-container. No silent downgrade to the host — the user
  // asked for isolation and must get it or a clear error.
  if (execContext.kind === 'container') {
    const incompatible = collectContainerIncompatibleProviders(
      workflow.nodes,
      workflowProvider,
      aiProfile
    );
    if (incompatible.size > 0) {
      const list = [...incompatible].sort().join(', ');
      throw new Error(
        `Provider${incompatible.size === 1 ? '' : 's'} '${list}' cannot run inside a ` +
          'container yet (containerExec capability). Use provider claude, or run without ' +
          '--container.'
      );
    }

    // Container is live for this run — surface it in all three logging layers. A
    // resume (the container was rediscovered + restarted by the caller) emits
    // `container_resumed` rather than `container_created` so the timeline is honest.
    const isResume = priorCompletedNodes !== undefined && priorCompletedNodes.size > 0;
    emitContainerLifecycleEvent(
      deps,
      workflowRun.id,
      isResume ? 'resumed' : 'created',
      isResume ? 'container_resumed' : 'container_created',
      execContext.containerId,
      { containerId: execContext.containerId }
    );

View on GitHub (pinned to 0773b97458)

Solutions

  1. Drop --container for this run so providers execute outside the container
  2. Switch the workflow/nodes/profile to provider claude, which supports containerExec
  3. Change the default provider in .archon/config.yaml to claude when container mode is the norm
  4. If you own the provider adapter, implement containerExec support and declare it in getCapabilities()

Example fix

// before
archon run workflow.yaml --container
// after: either drop the flag or pin a container-capable provider
archon run workflow.yaml
# or in workflow.yaml
provider: claude
Defensive patterns

Strategy: validation

Validate before calling

const providers = collectWorkflowProviders(workflow, workflowProvider, aiProfile);
const incompatible = [...new Set(providers.filter(p => !deps.getAgentProvider(p).getCapabilities().containerExec))];
if (useContainer && incompatible.length > 0) throw new Error(`container mode unsupported for: ${incompatible.join(', ')}`);

Type guard

function supportsContainerExec(caps: ProviderCapabilities): boolean {
  return caps.containerExec === true;
}

Try / catch

try {
  await engine.run(workflow, { container: true });
} catch (err) {
  if (err instanceof Error && err.message.includes('cannot run inside a container')) {
    // rerun without --container or switch to claude
  } else throw err;
}

Prevention

When it happens

Trigger: Running `archon run --container ...` (or the equivalent API option) while the workflow's nodes, the workflow-level provider, or the AI profile resolve to providers without containerExec: true in getCapabilities().

Common situations: Default provider in .archon/config.yaml set to a non-container provider (e.g. codex or a local proxy); an aiProfile pinning an incompatible provider; a new provider added before containerExec support was implemented.

Related errors


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