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{}, nil

View on GitHub (pinned to e2d772072e)

Solutions

  1. Switch the exec-status model to one that reliably follows the XML prompt format
  2. Increase max_tokens so the full XML response fits
  3. Retry the call — format adherence can be intermittent
  4. 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

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


AI-assisted analysis of plandex-ai/plandex@e2d772072e (2026-09-05). Data as JSON: /api/errors/817e046cd45d06b2. Report an issue: GitHub.