{"record":{"id":"3b02d569d1f3a335","repo":"langchain-ai/deepagents","slug":"shell-allow-list-is-missing-from-the-configuration-3b02d5","errorCode":null,"errorMessage":"shell.allow_list is missing from the configuration manifest","messagePattern":"shell\\.allow_list is missing from the configuration manifest","errorType":"exception","errorClass":"RuntimeError","httpStatus":null,"severity":"error","filePath":"libs/code/deepagents_code/app.py","lineNumber":436,"sourceCode":"    return value\n\n\ndef _load_shell_allow_list() -> list[str] | None:\n    \"\"\"Resolve the shell command allow-list from the shared resolver.\n\n    Returns:\n        The configured allow-list, or `None` when shell access is disabled.\n\n    Raises:\n        RuntimeError: If the option is absent from the manifest.\n    \"\"\"\n    from deepagents_code.config_manifest import _emit_ranked_diagnostics, get_option\n    from deepagents_code.configuration.resolver import get_config_resolver\n\n    option = get_option(\"shell.allow_list\")\n    if option is None:\n        msg = \"shell.allow_list is missing from the configuration manifest\"\n        raise RuntimeError(msg)\n    resolved = get_config_resolver().get(option)\n    _emit_ranked_diagnostics(option, resolved)\n    return cast(\"list[str] | None\", resolved.value)\n\n\ndef _load_float_option(\n    key: str,\n    default: float,\n    *,\n    label: str,\n    minimum: float | None = None,\n) -> float:\n    \"\"\"Resolve a float config option, falling back to *default* when unusable.\n\n    Args:\n        key: Manifest option key.\n        default: Value used when the option is absent or fails validation.\n        label: Human-readable option name for the invalid-value warning.","sourceCodeStart":418,"sourceCodeEnd":454,"githubUrl":"https://github.com/langchain-ai/deepagents/blob/a1af029e6e73cb17c36bff823d227747b28e91e1/libs/code/deepagents_code/app.py#L418-L454","documentation":"_load_shell_allow_list looks up the shell.allow_list option in the package's configuration manifest before resolving its value. If the manifest no longer declares that option, the lookup returns None and a RuntimeError is raised. This indicates an internal/manifest mismatch — the app or a plugin expects an option that the installed configuration schema does not define.","triggerScenarios":"_request_approval calls _load_shell_allow_list while get_option(\"shell.allow_list\") returns None — i.e., the installed package's config manifest does not contain the shell.allow_list entry.","commonSituations":"Version skew between deepagents_code and deepagents_code.config_manifest (partial install, stale egg-info, or a dev install where the manifest schema was updated); a custom/overridden manifest that dropped the option; shadowing the config_manifest module with a local file.","solutions":["Reinstall or resync the deepagents_code package so the code and config manifest come from the same version.","If you ship a custom configuration manifest, re-add the shell.allow_list option definition.","Check that no local module named config_manifest.py shadows deepagents_code.config_manifest on sys.path."],"exampleFix":"# before (dev checkout with stale metadata)\npip install -e libs/code --no-deps\n\n# after (full resync)\nuv sync && pip install -e libs/code","handlingStrategy":"validation","validationCode":"from deepagents_code.config_manifest import get_option\nif get_option(\"shell.allow_list\") is None:\n    raise SystemExit(\"shell.allow_list not in manifest — reinstall/repair deepagents_code\")","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Use a single synced environment (uv sync / pip install -e) so code and manifest versions match.","Avoid shadowing package modules (config_manifest) with local files.","Smoke-test approval flows after upgrading deepagents_code."],"tags":["python","configuration","manifest","version-skew"],"backgroundTag":"missing-config-option","analyzedSha":"a1af029e6e73cb17c36bff823d227747b28e91e1","analyzedAt":"2026-08-29T11:43:24.718Z","schemaVersion":2},"datasetVersion":"2026-08-29T12:17:43.993Z"}