Error recovery cheat-sheet¶
Condensed pairings of common LazyBridge errors and the canonical fix. All errors follow the four-part body documented in codegen-contract.md: what failed, what was passed, what's expected, and a concrete fix snippet at the bottom. This page gathers the most common shapes for quick LLM lookup.
| Error / Pattern | Cause | Fix |
|---|---|---|
PlanCompileError: Step 'X' (#n) — context=from_step('typo') references unknown step |
Sentinel points at a step that doesn't exist (typo, forward-ref, or auto-named _anon_* step) |
Replace with the suggested name from the error's "Did you mean 'Y'?" hint, or pass a real name= to the referent step |
PlanCompileError: same parallel band |
from_step("sibling") inside a parallel band — siblings can't see each other's output |
Either move the reader after the band, or use from_parallel_all("first_in_band") to aggregate |
PlanCompileError: from_agent('X') — missing 'store=' |
The source agent has no store= so its output can't be persisted for cross-step read |
Pass store=Store(...) to the source Agent, or use from_step('step_name') instead |
ValueError: MCP.stdio('X') requires an explicit allow=[...] or deny=[...] |
0.7.9 deny-by-default for MCP servers | Pass allow=["*"] after auditing, or restrict with a glob allow=["fs.read_*"] |
ValueError: Agent(name=...) is required when engine is not LLMEngine |
T7 — non-LLM engines (Plan/Supervisor/Human) can't auto-name from a model string | Add name="my_agent" to the Agent constructor |
ValueError: Agent(model=..., engine=...) — can't pass both |
T6 — model= is shorthand for LLMEngine(model); engine= is the explicit form |
Pick one — drop model= if you want a custom engine |
Tool.__init__: mode='auto' was removed in 0.7.9 |
0.7.9 deleted the graceful-fallback ladder | Pass mode="signature" (introspect, default), mode="llm" (let an LLM build the schema), or mode="hybrid" |
AttributeError: type object 'Agent' has no attribute 'from_chain' |
0.7.9 deleted Agent.from_chain / from_engine / from_model / from_plan / from_parallel |
Use Agent.chain(a, b) / Agent.parallel(...) or Agent(engine=...) for the others |
ValueError: LLMEngine(tool_choice='parallel') was removed in 0.7.9 |
0.7.9 deleted this knob — concurrent tools are the default and can't be disabled | Drop the argument (or use tool_choice='auto' / 'any') |
UnsupportedNativeToolError: provider X does not support CODE_EXECUTION |
The provider's supported_native_tools doesn't cover the requested tool |
Either swap to a provider that does (see lazybridge.matrix.provider_capabilities()), or pass strict_native_tools=False to let the tool be silently dropped |
UnsupportedFeatureError: provider X with structured_output + tools |
DeepSeek-legacy / OpenAI-image limits — provider can't combine both | Either drop output_type= for the tool-using turn, or drop the conflicting tool |
ValueError: EncryptedStoreAdapter: stored value is not an lb-enc-v1 token |
Adapter pointed at a plaintext Store (mixed-mode reads are unsafe) | Either decrypt+re-encrypt the legacy rows, or unwrap the adapter to read them |
StreamStallError: no token in 90s |
Provider stream went silent past stream_idle_timeout |
Lower the timeout, or wrap the call in retry logic, or switch to non-streaming |
ToolTimeoutError: tool X exceeded 30s |
Tool wall-clock exceeded tool_timeout |
Raise the timeout on the LLMEngine, or make the tool faster |
RuntimeError: async def functions are not natively supported |
pytest-asyncio not installed in the test env |
pip install -e '.[test]' (see CONTRIBUTING.md) |
ModuleNotFoundError: lazybridge.external_tools.report_builder |
Reporting moved to selvaz/LazyReport in 0.7.9 |
pip install lazybridge-reports, then import lazybridge_reports |
ImportError: EncryptedStoreAdapter requires 'cryptography' |
Opt-in extra not installed | pip install 'lazybridge[encryption]' |
PackageNotFoundError: lazybridge reads as version 0.7.0 |
Stale dev install + new source tree | pip install -e . to refresh the editable install's metadata |
When the error doesn't appear in the table¶
- Read the bottom of the error message verbatim — the four-part body ends with a literal fix snippet, often the exact replacement line of code.
- Cross-reference the symbol against
lazybridge/llms.json— theavoidlist andrenamesmap cover every 0.7.9 deletion. - If the symbol is from a 0.4-era import path
(
LazyAgent/LazyTool/LazySession/LazyContext), see the migration guide.