vxcontrol/pentagi · error
unknown tool: %s
Error message
unknown tool: %s
What it means
Error "unknown tool: %s" thrown in vxcontrol/pentagi.
Source
Thrown at backend/pkg/tools/browser.go:142
_, _ = b.scp.PutScreenshot(ctx, screen, url, b.taskID, b.subtaskID)
}
return result, nil
}
func (b *browser) Handle(ctx context.Context, name string, args json.RawMessage) (string, error) {
if !b.IsAvailable() {
return "", fmt.Errorf("browser is not available")
}
var action Browser
logger := logrus.WithContext(ctx).WithFields(enrichLogrusFields(b.flowID, b.taskID, b.subtaskID, logrus.Fields{
"tool": name,
"args": string(args),
}))
if name != "browser" {
logger.Error("unknown tool")
return "", fmt.Errorf("unknown tool: %s", name)
}
if err := json.Unmarshal(args, &action); err != nil {
logger.WithError(err).Error("failed to unmarshal browser action")
return "", fmt.Errorf("failed to unmarshal browser action: %w", err)
}
// LLMs occasionally wrap the URL with an incidental leading/trailing
// newline, carriage return, or space (e.g. copy-pasted from command
// output); net/url.Parse rejects control characters outright, failing the
// whole call over whitespace that carries no meaning. Strip it here so it
// never reaches resolveUrl.
action.Url = strings.TrimSpace(action.Url)
if action.Action == "" {
// The LLM occasionally omits the required 'action' field even though the
// tool schema marks it required. 'markdown' is the safest default: it is
// the most commonly used and most versatile content format, so infer itView on GitHub (pinned to ea665308ba)
When it happens
Trigger: Thrown at backend/pkg/tools/browser.go:142 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of vxcontrol/pentagi@ea665308ba (2026-09-01).
Data as JSON: /api/errors/56ed8548802e70c7.
Report an issue: GitHub.