plandex-ai/plandex · error
execStatusShouldContinue: missing required XML tags in respo
Error message
execStatusShouldContinue: missing required XML tags in response
What it means
execStatusShouldContinue asks the LLM whether the current subtask is finished, using an XML response format with <reasoning> and <subtaskFinished> tags. If either required tag is missing or empty in the model output, it returns this 500 ApiError since the continuation decision cannot be made.
Source
Thrown at app/server/model/plan/exec_status.go:179
})
if err != nil {
log.Printf("[ExecStatus] Error in model call: %v", err)
return execStatusShouldContinueResult{}, nil
}
content := modelRes.Content
var reasoning string
var subtaskFinished bool
if baseModelConfig.PreferredOutputFormat == shared.ModelOutputFormatXml {
reasoning = utils.GetXMLContent(content, "reasoning")
subtaskFinishedStr := utils.GetXMLContent(content, "subtaskFinished")
subtaskFinished = subtaskFinishedStr == "true"
if reasoning == "" || subtaskFinishedStr == "" {
go notify.NotifyErr(notify.SeverityError, fmt.Errorf("execStatusShouldContinue: missing required XML tags in response"))
return execStatusShouldContinueResult{}, &shared.ApiError{
Type: shared.ApiErrorTypeOther,
Status: http.StatusInternalServerError,
Msg: "Missing required XML tags in response",
}
}
} else {
if content == "" {
log.Printf("[ExecStatus] No function response found in model output")
return execStatusShouldContinueResult{}, nil
}
var res types.ExecStatusResponse
if err := json.Unmarshal([]byte(content), &res); err != nil {
log.Printf("[ExecStatus] Failed to parse response: %v", err)
return execStatusShouldContinueResult{}, nilView on GitHub (pinned to e2d772072e)
Solutions
- Switch the exec-status model to one that reliably follows the XML prompt format
- Increase max_tokens so the full XML response fits
- Retry the call — format adherence can be intermittent
- Patch server to retry once on missing tags before failing the whole plan stream
Example fix
// before: small model with xml format
"ExecStatus": {"PreferredOutputFormat": "xml", "ModelName": "tiny-3b"}
// after
"ExecStatus": {"PreferredOutputFormat": "xml", "ModelName": "gpt-4o-mini", "MaxTokens": 1024} Defensive patterns
Strategy: retry
Validate before calling
// verify required tags present before deciding to continue
reasoning := utils.GetXMLContent(content, "reasoning")
finished := utils.GetXMLContent(content, "subtaskFinished")
if reasoning == "" || finished == "" { return retryExecStatusCall() } Try / catch
res, apiErr := execStatusShouldContinue(...)
if apiErr != nil && strings.Contains(apiErr.Msg, "Missing required XML tags") {
// retry once, then fail safe (stop the subtask)
res, apiErr = execStatusShouldContinue(...)
if apiErr != nil { return stopSubtask(planId) }
} Prevention
- Use models known to follow XML prompts for exec-status checks
- Keep max_tokens large enough for reasoning + tags
- Prefer non-XML (tool-call) format for models weak at format adherence
- Fail safe on repeated failures: end the subtask rather than looping forever
When it happens
Trigger: The exec-status model replies without the required XML tags — wrong format adherence, truncated response due to small max_tokens, or a model that ignores the SysExecStatus prompt structure (common with small local models).
Common situations: Local models (Ollama, vLLM-hosted small models) not following XML instructions; switching PreferredOutputFormat to xml for a model not tuned for it; response truncation on long reasoning; provider incidents returning partial content.
Related errors
- No name tag found in XML response
- no commitMsg tag found in XML response
- Error telling plan:
- client not found for provider composite: %s
- error creating chat completion stream: %w
AI-assisted analysis of plandex-ai/plandex@e2d772072e (2026-09-05).
Data as JSON: /api/errors/817e046cd45d06b2.
Report an issue: GitHub.