FoundationAgents/OpenManus · warning · ToolError
Parameter `title` is required for command: create
Error message
Parameter `title` is required for command: create
What it means
Raised by _create_plan (app/tool/planning.py:133) when command='create' is dispatched with plan_id present but title empty/None. Title is stored on the plan and rendered in listings (_list_plans shows it), so the tool rejects untitled plans. Validation order: plan_id first, uniqueness second, then title, then steps.
Source
Thrown at app/tool/planning.py:133
else:
raise ToolError(
f"Unrecognized command: {command}. Allowed commands are: create, update, list, get, set_active, mark_step, delete"
)
def _create_plan(
self, plan_id: Optional[str], title: Optional[str], steps: Optional[List[str]]
) -> ToolResult:
"""Create a new plan with the given ID, title, and steps."""
if not plan_id:
raise ToolError("Parameter `plan_id` is required for command: create")
if plan_id in self.plans:
raise ToolError(
f"A plan with ID '{plan_id}' already exists. Use 'update' to modify existing plans."
)
if not title:
raise ToolError("Parameter `title` is required for command: create")
if (
not steps
or not isinstance(steps, list)
or not all(isinstance(step, str) for step in steps)
):
raise ToolError(
"Parameter `steps` must be a non-empty list of strings for command: create"
)
# Create a new plan with initialized step statuses
plan = {
"plan_id": plan_id,
"title": title,
"steps": steps,
"step_statuses": ["not_started"] * len(steps),
"step_notes": [""] * len(steps),
}View on GitHub (pinned to 52a13f2a57)
Solutions
- Supply a non-empty title: `planning.execute(command='create', plan_id='p1', title='Ship v2', steps=[...])`.
- In the calling layer, derive a title when missing (e.g. from the first step or a default like 'Untitled plan') before invoking create.
- Validate in your wrapper: reject call if not (plan_id and plan_id not in used and title and steps).
Example fix
// before await planning.execute(command='create', plan_id='p1', steps=['a']) // after await planning.execute(command='create', plan_id='p1', title='Setup tasks', steps=['a'])
Defensive patterns
Strategy: validation
Validate before calling
title = (title or '').strip() or 'Untitled plan' await planning.execute(command='create', plan_id=plan_id, title=title, steps=steps)
Type guard
def is_non_empty_title(t: str | None) -> bool:
return isinstance(t, str) and bool(t.strip()) Prevention
- Default the title in your wrapper (from the first step text) before calling create.
- Strip whitespace so ' ' titles fail fast at your layer with a better message.
When it happens
Trigger: Calling `planning.execute(command='create', plan_id='p1', steps=['a'])` without title, or with title='' (empty string is falsy and rejected).
Common situations: Models that see title as optional because the JSON schema only marks 'command' required; callers passing None as a default; whitespace-only titles are accepted, so empty-string checks at the caller should strip first if you want stricter behavior.
Related errors
- Parameter `plan_id` is required for command: create
- Parameter `plan_id` is required for command: update
- Parameter `plan_id` is required for command: set_active
- No primary agent available
- Unrecognized command: {command}. Allowed commands are: creat
AI-assisted analysis of FoundationAgents/OpenManus@52a13f2a57 (2026-08-15).
Data as JSON: /api/errors/cc2e9bce002facdf.
Report an issue: GitHub.