vxcontrol/pentagi · error

installer handler is required

Error message

installer handler is required

What it means

GetAssistantExecutor requires the Installer handler to be non-nil; it backs the 'installer' tool that installs packages in the sandbox container. Construction fails fast with this error when Installer is nil.

Source

Thrown at backend/pkg/tools/tools.go:826

		store:       fte.store,
		definitions: cfg.Definitions,
		handlers:    cfg.Handlers,
		barriers:    barriers,
		summarizer:  cfg.Summarizer,
	}, nil
}

func (fte *flowToolsExecutor) GetAssistantExecutor(cfg AssistantExecutorConfig) (ContextToolsExecutor, error) {
	if cfg.Adviser == nil {
		return nil, fmt.Errorf("adviser handler is required")
	}

	if cfg.Coder == nil {
		return nil, fmt.Errorf("coder handler is required")
	}

	if cfg.Installer == nil {
		return nil, fmt.Errorf("installer handler is required")
	}

	if cfg.Memorist == nil {
		return nil, fmt.Errorf("memorist handler is required")
	}

	if cfg.Pentester == nil {
		return nil, fmt.Errorf("pentester handler is required")
	}

	if cfg.Searcher == nil {
		return nil, fmt.Errorf("searcher handler is required")
	}

	container, err := fte.db.GetFlowPrimaryContainer(context.Background(), fte.flowID)
	if err != nil {
		return nil, fmt.Errorf("failed to get container %d: %w", fte.flowID, err)
	}

View on GitHub (pinned to ea665308ba)

Solutions

  1. Assign a non-nil Installer handler in AssistantExecutorConfig.
  2. Verify the installer handler construction path executed and returned non-nil.
  3. Validate the full config struct before calling GetAssistantExecutor.

Example fix

// before
executor, err := fte.GetAssistantExecutor(AssistantExecutorConfig{
  Adviser: adviser, Coder: coder,
}) // Installer nil
// after
executor, err := fte.GetAssistantExecutor(AssistantExecutorConfig{
  Adviser: adviser, Coder: coder, Installer: installer,
})
Defensive patterns

Strategy: validation

Validate before calling

if cfg.Installer == nil {
    return errors.New("installer handler missing from AssistantExecutorConfig")
}

Type guard

func hasInstaller(cfg tools.AssistantExecutorConfig) bool {
    return cfg.Installer != nil
}

Try / catch

executor, err := fte.GetAssistantExecutor(cfg)
if err != nil {
    if strings.Contains(err.Error(), "installer handler is required") {
        return fmt.Errorf("wiring bug: installer handler not built: %w", err)
    }
    return err
}

Prevention

When it happens

Trigger: Calling GetAssistantExecutor with cfg.Installer == nil, e.g. omitting the installer handler when building the config struct.

Common situations: Partial agent wiring in custom deployments; installer handler creation skipped behind a feature flag; refactoring dropped the field assignment.

Related errors


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