{"record":{"id":"8c4191aa2c0d6d31","repo":"OpenBMB/ChatDev","slug":"agent-skills-are-not-enabled-for-this-node","errorCode":null,"errorMessage":"Agent Skills are not enabled for this node","messagePattern":"Agent Skills are not enabled for this node","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"runtime/node/executor/agent_executor.py","lineNumber":886,"sourceCode":"\n        return Message(\n            role=MessageRole.SYSTEM,\n            content=(\n                f\"Activated Agent Skill `{skill_name}`. \"\n                \"Follow its instructions for the current task until they are completed or no longer relevant.\\n\\n\"\n                f\"{instructions}{tool_constraint}\"\n            ),\n            metadata={\"source\": node_id, \"skill_name\": skill_name, \"skill_activation\": True},\n        )\n\n    def _execute_skill_tool(\n        self,\n        tool_name: str,\n        arguments: Dict[str, Any],\n        skill_manager: AgentSkillManager | None,\n    ) -> Dict[str, Any]:\n        if skill_manager is None:\n            raise ValueError(\"Agent Skills are not enabled for this node\")\n\n        if tool_name == \"activate_skill\":\n            skill_name = str(arguments.get(\"skill_name\", \"\")).strip()\n            if not skill_name:\n                raise ValueError(\"skill_name is required\")\n            return skill_manager.activate_skill(skill_name)\n\n        if tool_name == \"read_skill_file\":\n            skill_name = str(arguments.get(\"skill_name\", \"\")).strip()\n            relative_path = str(arguments.get(\"relative_path\", \"\")).strip()\n            if not skill_name:\n                raise ValueError(\"skill_name is required\")\n            if not relative_path:\n                raise ValueError(\"relative_path is required\")\n            return skill_manager.read_skill_file(skill_name, relative_path)\n\n        raise ValueError(f\"Unsupported skill tool '{tool_name}'\")\n","sourceCodeStart":868,"sourceCodeEnd":904,"githubUrl":"https://github.com/OpenBMB/ChatDev/blob/4fb2db0ea90375ce1059f44fe03ffbd191a7a169/runtime/node/executor/agent_executor.py#L868-L904","documentation":"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.","triggerScenarios":"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).","commonSituations":"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.","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"],"exampleFix":null,"handlingStrategy":"fallback","validationCode":"if not node_config.enable_skills:\n    tools = [t for t in tools if t['name'] not in ('activate_skill', 'read_skill_file')]","typeGuard":null,"tryCatchPattern":"try:\n    result = executor._execute_skill_tool(name, args, skill_manager)\nexcept ValueError as e:\n    result = {'error': str(e)}  # returned to the model as tool output","preventionTips":["Only advertise skill tools when a skill manager is configured","Keep tool list in sync with enabled features"],"tags":["skills","agent-executor","configuration"],"backgroundTag":"feature-not-enabled","analyzedSha":"4fb2db0ea90375ce1059f44fe03ffbd191a7a169","analyzedAt":"2026-08-27T14:35:29.622Z","schemaVersion":2},"datasetVersion":"2026-08-27T19:17:21.184Z"}