{"record":{"id":"232c7862d6f5ca7b","repo":"langchain-ai/deepagents","slug":"skills-extra-allowed-dirs-is-missing-from-the-conf","errorCode":null,"errorMessage":"skills.extra_allowed_dirs is missing from the configuration manifest","messagePattern":"skills\\.extra_allowed_dirs is missing from the configuration manifest","errorType":"exception","errorClass":"RuntimeError","httpStatus":null,"severity":"error","filePath":"libs/code/deepagents_code/skills/invocation.py","lineNumber":101,"sourceCode":"    )\n    roots = [\n        path.resolve()\n        for path in (\n            get_built_in_skills_dir(),\n            *plugin_skill_roots,\n            get_user_skills_dir(assistant_id),\n            get_project_skills_dir(credentials.project_root),\n            get_user_agent_skills_dir(),\n            get_project_agent_skills_dir(credentials.project_root),\n            get_user_claude_skills_dir(),\n            get_project_claude_skills_dir(credentials.project_root),\n        )\n        if path is not None\n    ]\n    option = get_option(\"skills.extra_allowed_dirs\")\n    if option is None:\n        msg = \"skills.extra_allowed_dirs is missing from the configuration manifest\"\n        raise RuntimeError(msg)\n    with _use_extra_skills_path_base(path_base or Path.cwd()):\n        resolved = get_config_resolver().get(option)\n    _emit_ranked_diagnostics(option, resolved)\n    extra_skills_dirs = cast(\"list[Path] | None\", resolved.value)\n    roots.extend(path.resolve() for path in extra_skills_dirs or ())\n    # Persisted in-the-moment approvals extend the containment allowlist just\n    # like the declarative `extra_allowed_dirs`, but are managed by the trust\n    # store rather than hand-edited config. These entries are already the\n    # canonical approved directories and are verified against post-approval\n    # symlink swaps by `load_trusted_skill_dirs`, so they are added as-is\n    # rather than re-resolved (re-resolving would follow an injected symlink to\n    # a directory the user never approved).\n    roots.extend(load_trusted_skill_dirs())\n    return skills, roots\n\n\ndef build_skill_invocation_envelope(\n    skill: ExtendedSkillMetadata,","sourceCodeStart":83,"sourceCodeEnd":119,"githubUrl":"https://github.com/langchain-ai/deepagents/blob/a1af029e6e73cb17c36bff823d227747b28e91e1/libs/code/deepagents_code/skills/invocation.py#L83-L119","documentation":"`discover_skills_and_roots` fetches the `skills.extra_allowed_dirs` option through the configuration manifest via `get_option`. If the option is absent (manifest does not declare it), the function raises `RuntimeError` with this message rather than proceeding with a `None` sentinel. This is an internal invariant check: a build/deploy where the config manifest is out of sync with the code that expects the option.","triggerScenarios":"Calling `discover_skills_and_roots` (directly or via `discover_all_skills`/`_discover_skills_and_roots`) in an environment where the configuration manifest does not register the `skills.extra_allowed_dirs` option — e.g. mismatched package versions or a stripped/custom manifest.","commonSituations":"Pinning `deepagents-code` against an older config manifest or custom build; monkeypatched or partial config initialization in tests; mixing versions of the SDK and the code agent package.","solutions":["Ensure the installed deepagents-code package and its config manifest are a consistent, current version (reinstall/upgrade the package)","Check for custom overrides or stubs of the configuration manifest in your environment or test fixtures","Report the mismatch if a supported release lacks the option; it indicates an internal packaging bug"],"exampleFix":"# before (stale install)\n# RuntimeError: skills.extra_allowed_dirs is missing from the configuration manifest\n// after\nuv pip install --upgrade deepagents-code  # consistent package + manifest","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try:\n    roots = discover_skills_and_roots(...)\nexcept RuntimeError as exc:\n    if 'missing from the configuration manifest' in str(exc):\n        reinstall_or_upgrade_package()  # fix manifest/code version mismatch\n    raise","preventionTips":["Keep deepagents-code and related SDK packages at consistent versions","Reinstall the package after partial upgrades","Avoid stubbing or partially overriding the config manifest","Pin one release channel (stable or nightly) across machines"],"tags":["config","invariant","internal"],"backgroundTag":"missing-config-option","analyzedSha":"a1af029e6e73cb17c36bff823d227747b28e91e1","analyzedAt":"2026-08-29T11:43:24.718Z","schemaVersion":2},"datasetVersion":"2026-08-29T12:17:43.993Z"}