vxcontrol/pentagi · error

failed to get coder handler: %w

Error message

failed to get coder handler: %w

What it means

Wraps a failure from fp.GetCoderHandler during assistant worker setup (backend/pkg/providers/assistant.go). The coder (developer agent) LLM handler could not be constructed, typically because the configured primary LLM provider is unavailable or misconfigured. The assistant worker cannot start without it.

Source

Thrown at backend/pkg/providers/assistant.go:171

		return fmt.Errorf("failed to get primary agent msg chain %d: %w", ap.msgChainID, err)
	}

	var chain []llms.MessageContent
	if err := json.Unmarshal(msgChain.Chain, &chain); err != nil {
		logger.WithError(err).Error("failed to unmarshal primary agent msg chain")
		return fmt.Errorf("failed to unmarshal primary agent msg chain %d: %w", ap.msgChainID, err)
	}

	adviser, err := ap.fp.GetAskAdviceHandler(ctx, nil, nil)
	if err != nil {
		logger.WithError(err).Error("failed to get ask advice handler")
		return fmt.Errorf("failed to get ask advice handler: %w", err)
	}

	coder, err := ap.fp.GetCoderHandler(ctx, nil, nil)
	if err != nil {
		logger.WithError(err).Error("failed to get coder handler")
		return fmt.Errorf("failed to get coder handler: %w", err)
	}

	installer, err := ap.fp.GetInstallerHandler(ctx, nil, nil)
	if err != nil {
		logger.WithError(err).Error("failed to get installer handler")
		return fmt.Errorf("failed to get installer handler: %w", err)
	}

	memorist, err := ap.fp.GetMemoristHandler(ctx, nil, nil)
	if err != nil {
		logger.WithError(err).Error("failed to get memorist handler")
		return fmt.Errorf("failed to get memorist handler: %w", err)
	}

	pentester, err := ap.fp.GetPentesterHandler(ctx, nil, nil)
	if err != nil {
		logger.WithError(err).Error("failed to get pentester handler")
		return fmt.Errorf("failed to get pentester handler: %w", err)

View on GitHub (pinned to ea665308ba)

Solutions

  1. Check Docker availability: `docker ps` from inside the backend container and verify /var/run/docker.sock is mounted/permissioned.
  2. Set required tool env vars and restart the backend.
  3. Inspect the wrapped error in logs to identify the failing sub-tool.
  4. Run the installer wizard to complete tool configuration.

Example fix

// before
coder, err := ap.fp.GetCoderHandler(ctx, nil, nil)
if err != nil {
    return fmt.Errorf("failed to get coder handler: %w", err)
}
// after
coder, err := ap.fp.GetCoderHandler(ctx, &taskID, &subtaskID)
if err != nil {
    logger.WithError(err).Error("coder handler init failed — check docker socket & tool env")
    return fmt.Errorf("failed to get coder handler: %w", err)
}
Defensive patterns

Strategy: validation

Validate before calling

cli, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation())
if err != nil { return fmt.Errorf("docker unavailable for coder handler: %w", err) }
_ = cli

Try / catch

coder, err := ap.fp.GetCoderHandler(ctx, nil, nil)
if err != nil {
    logger.WithError(err).Error("coder handler init failed — check docker")
    return fmt.Errorf("failed to get coder handler: %w", err)
}

Prevention

When it happens

Trigger: Coder handler construction fails: Docker sandbox client cannot initialize, required tool configuration/env missing, or underlying DB/template lookups error.

Common situations: Docker socket inaccessible (permission denied on /var/run/docker.sock); DOCKER_HOST misconfigured; missing env config for coding tools; fresh deployment with incomplete .env.

Related errors


AI-assisted analysis of vxcontrol/pentagi@ea665308ba (2026-09-01). Data as JSON: /api/errors/0ea0deb024cd771a. Report an issue: GitHub.