OpenBMB/ChatDev · error · ValueError
Agent Skills are not enabled for this node
Error message
Agent Skills are not enabled for this node
What it means
The model called a skill tool (activate_skill/read_skill_file), but no AgentSkillManager was passed to the executor for this node — Agent Skills are not enabled. The executor validates the skill_manager argument before dispatching any skill tool call.
Source
Thrown at runtime/node/executor/agent_executor.py:886
return Message(
role=MessageRole.SYSTEM,
content=(
f"Activated Agent Skill `{skill_name}`. "
"Follow its instructions for the current task until they are completed or no longer relevant.\n\n"
f"{instructions}{tool_constraint}"
),
metadata={"source": node_id, "skill_name": skill_name, "skill_activation": True},
)
def _execute_skill_tool(
self,
tool_name: str,
arguments: Dict[str, Any],
skill_manager: AgentSkillManager | None,
) -> Dict[str, Any]:
if skill_manager is None:
raise ValueError("Agent Skills are not enabled for this node")
if tool_name == "activate_skill":
skill_name = str(arguments.get("skill_name", "")).strip()
if not skill_name:
raise ValueError("skill_name is required")
return skill_manager.activate_skill(skill_name)
if tool_name == "read_skill_file":
skill_name = str(arguments.get("skill_name", "")).strip()
relative_path = str(arguments.get("relative_path", "")).strip()
if not skill_name:
raise ValueError("skill_name is required")
if not relative_path:
raise ValueError("relative_path is required")
return skill_manager.read_skill_file(skill_name, relative_path)
raise ValueError(f"Unsupported skill tool '{tool_name}'")
View on GitHub (pinned to 4fb2db0ea9)
Solutions
- Enable Agent Skills for the node so a skill manager is provided to the executor
- Remove skill tool descriptions from the agent's tool list / system prompt so the model never emits those calls
- Catch the error and return the message text to the model so it can fall back to other tools
Defensive patterns
Strategy: fallback
Validate before calling
if not node_config.enable_skills:
tools = [t for t in tools if t['name'] not in ('activate_skill', 'read_skill_file')] Try / catch
try:
result = executor._execute_skill_tool(name, args, skill_manager)
except ValueError as e:
result = {'error': str(e)} # returned to the model as tool output Prevention
- Only advertise skill tools when a skill manager is configured
- Keep tool list in sync with enabled features
When it happens
Trigger: The LLM emits a tool call to 'activate_skill' or 'read_skill_file' while the node was executed without a skill manager (skills disabled or not injected into the executor context).
Common situations: Workflows that advertise skill tools in the system prompt but construct the executor without enabling skills; a saved conversation replayed on a node with skills turned off; partial configuration after upgrading the runtime.
Related errors
- Tool name '{spec.name}' conflicts with a built-in skill tool
- missing frontmatter
- missing closing delimiter
- frontmatter must be a mapping
- skill name is required
AI-assisted analysis of OpenBMB/ChatDev@4fb2db0ea9 (2026-08-27).
Data as JSON: /api/errors/8c4191aa2c0d6d31.
Report an issue: GitHub.