vxcontrol/pentagi · error
failed to get ask advice handler: %w
Error message
failed to get ask advice handler: %w
What it means
PerformAgentChain wraps the error from fp.GetAskAdviceHandler(ctx, nil, nil), which constructs the `ask_advice` tool handler. Construction failed, so the agent chain cannot be assembled with its toolset.
Source
Thrown at backend/pkg/providers/assistant.go:165
return fmt.Errorf("failed to get assistant use agents: %w", err)
}
msgChain, err := ap.fp.DB().GetMsgChain(ctx, ap.msgChainID)
if err != nil {
logger.WithError(err).Error("failed to get primary agent msg chain")
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)View on GitHub (pinned to ea665308ba)
Solutions
- Read the wrapped error in logs to see which tool/config the handler failed on.
- Set the required tool env vars (search keys, Docker socket) per .env.example and restart.
- Verify prompt/template rows exist (run migrations, installer wizard).
- Confirm the flow's provider was fully initialized before building the assistant.
Example fix
// before
adviser, err := ap.fp.GetAskAdviceHandler(ctx, nil, nil)
if err != nil {
return fmt.Errorf("failed to get ask advice handler: %w", err)
}
// after
adviser, err := ap.fp.GetAskAdviceHandler(ctx, &taskID, &subtaskID)
if err != nil {
return fmt.Errorf("failed to get ask advice handler: %w", err) // inspect wrapped cause: usually missing tool config
} Defensive patterns
Strategy: try-catch
Validate before calling
if os.Getenv("SEARXNG_URL") == "" && os.Getenv("TAVILY_API_KEY") == "" {
return errors.New("no search backend configured: ask-advice handler will fail to init")
}
if _, err := net.Dial("unix", "/var/run/docker.sock"); err != nil {
return fmt.Errorf("docker socket unavailable: %w", err)
} Try / catch
adviser, err := ap.fp.GetAskAdviceHandler(ctx, nil, nil)
if err != nil {
logger.WithError(err).Error("ask advice handler init failed")
return fmt.Errorf("failed to get ask advice handler: %w", err)
} Prevention
- Complete all tool env vars from .env.example before first run
- Mount the Docker socket with correct permissions
- Seed prompt/template DB records via migrations
- Run the installer wizard on fresh deployments
When it happens
Trigger: The handler factory fails while wiring its tools: required tool config/env missing (e.g. search provider keys), Docker client unavailable, database/template lookups error, or provider context invalid.
Common situations: Missing env vars for tools the advice handler depends on; Docker socket not mounted; template/prompt records absent in DB after a fresh install; nil flowProvider fields passed to the assistant.
Related errors
- failed to get coder handler: %w
- failed to get installer handler: %w
- failed to get pentester handler: %w
- failed to get searcher handler: %w
- token validation disabled with default salt
AI-assisted analysis of vxcontrol/pentagi@ea665308ba (2026-09-01).
Data as JSON: /api/errors/8601887196c4cede.
Report an issue: GitHub.