{"record":{"id":"ba1d94c20a2239d2","repo":"bytedance/deer-flow","slug":"failed-to-resolve-slash-skill-command-please-chec","errorCode":null,"errorMessage":"Failed to resolve slash skill command. Please check the skill configuration.","messagePattern":"Failed to resolve slash skill command\\. Please check the skill configuration\\.","errorType":"exception","errorClass":"SlashSkillCommandResolutionError","httpStatus":null,"severity":"error","filePath":"backend/app/channels/manager.py","lineNumber":802,"sourceCode":"    reference = parse_slash_skill_reference(text)\n    if reference is None:\n        return None\n    try:\n        resolved_storage = storage() if callable(storage) else storage or get_or_new_skill_storage()\n        skills = resolved_storage.load_skills(enabled_only=False)\n\n        skill = next((candidate for candidate in skills if candidate.name == reference.name), None)\n        if skill is None:\n            return None\n        if not skill.enabled:\n            return _SlashSkillCommandResolution(failure_message=f\"Skill `/{reference.name}` is installed but disabled. Enable it before using slash activation.\")\n        if available_skills is not None and reference.name not in available_skills:\n            return _SlashSkillCommandResolution(failure_message=f\"Skill `/{reference.name}` is not available for this agent.\")\n\n        return _SlashSkillCommandResolution(route_to_chat=True)\n    except Exception as exc:\n        logger.exception(\"[Manager] failed to resolve slash skill command\")\n        raise SlashSkillCommandResolutionError(\"Failed to resolve slash skill command. Please check the skill configuration.\") from exc\n\n\ndef _resolve_attachments(thread_id: str, artifacts: list[str], *, user_id: str | None = None) -> list[ResolvedAttachment]:\n    \"\"\"Resolve virtual artifact paths to host filesystem paths with metadata.\n\n    Only paths under ``/mnt/user-data/outputs/`` are accepted; any other\n    virtual path is rejected with a warning to prevent exfiltrating uploads\n    or workspace files via IM channels.\n\n    Skips artifacts that cannot be resolved (missing files, invalid paths)\n    and logs warnings for them.\n    \"\"\"\n    from deerflow.config.paths import get_paths\n\n    attachments: list[ResolvedAttachment] = []\n    paths = get_paths()\n    effective_user_id = user_id or get_effective_user_id()\n    outputs_dir = paths.sandbox_outputs_dir(thread_id, user_id=effective_user_id).resolve()","sourceCodeStart":784,"sourceCodeEnd":820,"githubUrl":"https://github.com/bytedance/deer-flow/blob/1dd6ba1acb03700589994b0366c5d1c7d05e2eff/backend/app/channels/manager.py#L784-L820","documentation":"Slash-skill resolution (mapping '/skillname' in an IM message to an installed skill) wraps its whole lookup in a try/except; any unexpected exception — registry read failure, malformed skill metadata, a bug in the matcher — is logged with a traceback and re-raised as SlashSkillCommandResolutionError with this operator-facing message. It deliberately hides the raw cause from the IM user while preserving it via `from exc`.","triggerScenarios":"An IM user sends '/<skill>' and, during resolution, the skills registry throws: unreadable/corrupt skill metadata file, a skills directory entry with invalid YAML/JSON frontmatter, or a projection that has not been generated. The channel manager logs '[Manager] failed to resolve slash skill command' and surfaces this error to the chat.","commonSituations":"A manually installed skill with broken SKILL.md frontmatter; file permissions blocking the skills directory; concurrent writes to the skills config while a message arrives; a skill removed from disk but still listed in extensions_config.json.","solutions":["Read the Gateway logs — the logger.exception line right above the user-facing error contains the underlying traceback and offending skill.","Validate skill packages with the built-in skill-reviewer or reinstall the offending skill (`make extension-*` / skills tooling).","Re-sync extensions_config.json with actually-present skills (remove entries whose directories are gone).","After fixing, restart the Gateway so the skill registry reloads cleanly."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"def skill_registry_healthy() -> bool:\n    try:\n        skills = list_installed_skills()\n        return all(os.path.isdir(s.path) for s in skills)\n    except Exception:\n        return False","typeGuard":null,"tryCatchPattern":"try:\n    resolution = resolve_slash_skill(text)\nexcept SlashSkillCommandResolutionError as e:\n    logger.exception('slash resolution failed')\n    reply('That skill could not be activated. Please contact the operator.')\n    return","preventionTips":["Validate skill packages with skill-reviewer before installation.","Keep extensions_config.json and the skills directory in sync (remove entries for deleted skills).","Run a registry smoke check at Gateway startup so misconfiguration is caught before users message."],"tags":["skills","channels","config","im"],"backgroundTag":null,"analyzedSha":"1dd6ba1acb03700589994b0366c5d1c7d05e2eff","analyzedAt":"2026-08-14T21:20:34.804Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}