langchain-ai/deepagents · error · RuntimeError
shell.allow_list is missing from the configuration manifest
Error message
shell.allow_list is missing from the configuration manifest
What it means
_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.
Source
Thrown at libs/code/deepagents_code/app.py:436
return value
def _load_shell_allow_list() -> list[str] | None:
"""Resolve the shell command allow-list from the shared resolver.
Returns:
The configured allow-list, or `None` when shell access is disabled.
Raises:
RuntimeError: If the option is absent from the manifest.
"""
from deepagents_code.config_manifest import _emit_ranked_diagnostics, get_option
from deepagents_code.configuration.resolver import get_config_resolver
option = get_option("shell.allow_list")
if option is None:
msg = "shell.allow_list is missing from the configuration manifest"
raise RuntimeError(msg)
resolved = get_config_resolver().get(option)
_emit_ranked_diagnostics(option, resolved)
return cast("list[str] | None", resolved.value)
def _load_float_option(
key: str,
default: float,
*,
label: str,
minimum: float | None = None,
) -> float:
"""Resolve a float config option, falling back to *default* when unusable.
Args:
key: Manifest option key.
default: Value used when the option is absent or fails validation.
label: Human-readable option name for the invalid-value warning.View on GitHub (pinned to a1af029e6e)
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.
Example fix
# before (dev checkout with stale metadata) pip install -e libs/code --no-deps # after (full resync) uv sync && pip install -e libs/code
Defensive patterns
Strategy: validation
Validate before calling
from deepagents_code.config_manifest import get_option
if get_option("shell.allow_list") is None:
raise SystemExit("shell.allow_list not in manifest — reinstall/repair deepagents_code") Prevention
- 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.
When it happens
Trigger: _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.
Common situations: 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.
Related errors
- interpreter.enable_interpreter is missing from the config ma
- allow_list must not be empty; disable shell access instead
- SHELL_ALLOW_ALL should not be used with ShellAllowListMiddle
- interpreter_ptc='all' exposes every host tool to PTC calls t
- Invalid interpreter_ptc string {ptc!r}; expected 'safe', 'al
AI-assisted analysis of langchain-ai/deepagents@a1af029e6e (2026-08-29).
Data as JSON: /api/errors/3b02d569d1f3a335.
Report an issue: GitHub.