langchain-ai/deepagents · error · RuntimeError
The server criteria agent returned no complete proposal.
Error message
The server criteria agent returned no complete proposal.
What it means
During a goal-criteria update, a server-side LLM agent proposes the objective and criteria. `_update` parses the agent's result and, if no well-formed proposal can be extracted (empty criteria, near-miss JSON, or plain prose instead of the expected structure), it logs the raw result and raises this `RuntimeError`.
Source
Thrown at libs/code/deepagents_code/goal_rubric.py:1441
Returns:
State updates that persist the proposal and end the parent run.
Raises:
RuntimeError: If the nested agent returned no complete proposal.
GoalStateSizeError: If the objective and criteria that will actually
be applied exceed the combined notice budget.
"""
proposal = _proposal_from_result(result)
if proposal is None:
# Log the raw nested output so repeated failures are diagnosable —
# the RuntimeError message alone cannot say whether the model emitted
# empty criteria, near-miss JSON, or prose.
logger.warning(
"Criteria agent returned no complete proposal; raw result: %s",
_summarize_criteria_result(result),
)
msg = "The server criteria agent returned no complete proposal."
raise RuntimeError(msg)
proposed_objective, criteria = proposal
objective = (
request["objective"] if request["kind"] == "create" else proposed_objective
)
# `GoalProposal._fit_notice_budget` validated the objective the model
# echoed back, but a `create` applies the user's original. The model is
# told to preserve it verbatim and nothing enforces that. A paraphrase can
# therefore fit the limit while the applied pair exceeds it. Validate what
# is actually applied.
try:
validate_goal_application(objective, criteria)
except GoalStateSizeError:
# The raised message names only the combined total, which is opaque
# to a user who typed an objective and never saw the criteria. Log
# the parts so the split is recoverable from the logs.
logger.warning(
"Applied goal proposal exceeds the combined budget: objective "
"%d chars (model proposed %d), criteria %d chars",View on GitHub (pinned to a1af029e6e)
Solutions
- Retry the goal create/amend command — model output is non-deterministic and a retry usually yields a parseable proposal.
- Check the warning log line (`Criteria agent returned no complete proposal; raw result: ...`) to see what the model actually returned.
- Switch the criteria-agent to a stronger model configuration.
- Shorten the objective/criteria input (limits are 8000/12000 chars) to reduce truncation risk.
Defensive patterns
Strategy: retry
Validate before calling
import json
def looks_parseable(raw) -> bool:
if not isinstance(raw, str) or not raw.strip():
return False
try:
parsed = json.loads(raw)
except (json.JSONDecodeError, TypeError):
return False
return isinstance(parsed, dict) and bool(parsed.get("criteria")) Type guard
def is_complete_proposal(proposal) -> bool:
return (
isinstance(proposal, tuple)
and len(proposal) == 2
and all(isinstance(part, str) and part.strip() for part in proposal)
) Try / catch
from deepagents_code.goal_rubric import RuntimeError # raised where?
try:
apply_goal_rubric(request)
except RuntimeError as e:
if "no complete proposal" in str(e):
log.warning("criteria agent returned unparseable output, retrying")
apply_goal_rubric(request) # model output is non-deterministic Prevention
- Configure a strong, reliable model for the criteria agent.
- Keep objective/criteria inputs well under the char limits to reduce truncation.
- Check the logged raw result (`Criteria agent returned no complete proposal; raw result: ...`) when diagnosing.
- Retry once automatically before surfacing the failure to the user.
When it happens
Trigger: The criteria agent's model returns malformed output: prose instead of the structured proposal, truncated JSON, an empty response, or a response missing the criteria — typically on weak/fast models, long inputs near the char limits, or rate-limit-degraded responses.
Common situations: Non-deterministic model failures during `/goal` create/amend flows; misconfigured criteria-agent model (unreliable provider, low-quality fallback model); network issues causing partial responses that the retry layer surfaced as garbage.
Related errors
- Agent initialization failed
- Failed to parse {SERVER_ENV_PREFIX}{suffix} as JSON: {exc}.
- shell.allow_list is missing from the configuration manifest
- Server process is not running
- A workspace is required to start the remote agent.
AI-assisted analysis of langchain-ai/deepagents@a1af029e6e (2026-08-29).
Data as JSON: /api/errors/81bd40ee9b973dcd.
Report an issue: GitHub.