{"record":{"id":"9b41a7ac0f6252b4","repo":"agentscope-ai/agentscope","slug":"the-tool-group-description-is-required-for-tool-gr","errorCode":null,"errorMessage":"The tool group description is required for tool group '{name}' (Only the 'basic' tool group can have an optional description).","messagePattern":"The tool group description is required for tool group '(.+?)' \\(Only the 'basic' tool group can have an optional description\\)\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"src/agentscope/tool/_tool_group.py","lineNumber":72,"sourceCode":"            name (`Literal[\"basic\"] | str`):\n                The name of the tool group.\n            description (`str | None`):\n                The description of the tool group.\n            instructions (`str | None`, optional):\n                Instructions included in the meta tool's result upon\n                activation of this tool group, guiding the agent on how to\n                properly use the meta tool.\n            tools (`list[ToolBase] | None`, optional):\n                The tools in this group.\n            skills_or_loaders (`list[str | Skill | SkillLoaderBase] | None`, \\\n            optional):\n                The skill paths, data, and loaders to access skills in this\n                group.\n            mcps (`list[MCPClient] | None`, optional):\n                The mcps in this group.\n        \"\"\"\n        if name != \"basic\" and description is None:\n            raise ValueError(\n                f\"The tool group description is required for tool group \"\n                f\"'{name}' (Only the 'basic' tool group can have an optional \"\n                f\"description).\",\n            )\n\n        self.name = name\n        self.description = description or \"\"\n        self.instructions = instructions\n        self.tools = tools or []\n        self.mcps = mcps or []\n\n        # Skill\n        self.skills_or_loaders = []\n        for _ in skills_or_loaders or []:\n            if isinstance(_, str):\n                self.skills_or_loaders.append(LocalSkillLoader(directory=_))\n\n            elif isinstance(_, (Skill, SkillLoaderBase)):","sourceCodeStart":54,"sourceCodeEnd":90,"githubUrl":"https://github.com/agentscope-ai/agentscope/blob/e90f1c7592896cc95f6e5ee506194f533378247d/src/agentscope/tool/_tool_group.py#L54-L90","documentation":"ToolGroup.__init__ requires a description for every group except the reserved 'basic' one; creating a named group without a description raises ValueError.","triggerScenarios":"ToolGroup(name='search', skills=[...]) with description=None — e.g. building groups programmatically from user config that omits descriptions.","commonSituations":"YAML/JSON agent configs where only some groups have descriptions; assuming the description is optional for all groups after seeing 'basic' work without one.","solutions":["Provide a short description for each non-basic group","Default description when loading config: ToolGroup(name=n, description=cfg.get('description') or f'Tools for {n}')","Only 'basic' may omit it"],"exampleFix":"# before\ng = ToolGroup(name='search', skills=[...])\n# after\ng = ToolGroup(name='search', description='Web and file search tools', skills=[...])","handlingStrategy":"validation","validationCode":"desc = description or (None if name == 'basic' else f'Tools for {name}')","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always write descriptions for custom tool groups","Validate loaded config: every non-'basic' group needs a description"],"tags":["tool-group","validation","constructor"],"backgroundTag":"invalid-argument-value","analyzedSha":"e90f1c7592896cc95f6e5ee506194f533378247d","analyzedAt":"2026-08-28T18:24:12.087Z","schemaVersion":2},"datasetVersion":"2026-08-28T21:17:43.275Z"}