Summary
An external evaluation of agent traces flagged friction around session creation. Validating it against the OpenAPI spec (steel-main/apps/api/openapi/openapi.json) and all four SDK repos (steel-node, steel-python, steel-go, steel-rust) confirmed one large docs bug and a few smaller ones: 18 spots across 16 pages document a sessionTimeout / session_timeout parameter that exists in no SDK and not in the REST API.
The verified truth:
| Surface |
Session timeout param |
Custom ID param |
| REST API / OpenAPI |
timeout (default 300000 ms), inactivityTimeout |
sessionId |
| steel-node |
timeout |
sessionId |
| steel-python |
api_timeout (wire-aliased to timeout; timeout is reserved for the HTTP request timeout) |
session_id |
| steel-go |
Timeout |
SessionID |
| steel-rust |
timeout |
session_id |
Impact: the Python spelling raises TypeError: unexpected keyword argument; the TS spelling is a compile error under strict excess-property checks, or silently ignored in JS, so users get the 5-minute default and sessions die mid-run.
P0: replace the invented timeout parameter (18 spots)
Sync warning: scripts/sync-cookbook.ts regenerates content/docs/cookbook/ pages from the steel-cookbook recipe READMEs, and several of the bullets below mirror that upstream text. The steel-cookbook READMEs must be fixed first (or together with this), otherwise the next sync reintroduces the bug.
sessionTimeout → timeout (TypeScript context):
session_timeout → api_timeout (Python context):
All 18 are prose bullets except trigger-dev-browser-job, which has it in real code.
P1: wrong-language and wrong-case snippets
P2: document that session IDs are one-shot
Acceptance criteria
- No occurrence of
sessionTimeout or session_timeout remains in content/docs/
- Every session-create example compiles/runs against steel-node and steel-python current releases
- Changelog fences match their labeled language
- Lifecycle page states the ID-reuse constraint
Related findings, out of scope for this repo
- steel-cookbook: fix the
session_timeout prose bullets in the recipe READMEs that sync-cookbook.ts pulls from (blocking for the P0 checklist above)
- steel-node: the published npm README references
api.md twice but the file is not shipped in the package (Stainless config)
The evaluation report's product asks (lifecycle-aware errors, server-side trace visibility, steel init) are intentionally excluded; those belong in the API/platform tracker.
Summary
An external evaluation of agent traces flagged friction around session creation. Validating it against the OpenAPI spec (
steel-main/apps/api/openapi/openapi.json) and all four SDK repos (steel-node, steel-python, steel-go, steel-rust) confirmed one large docs bug and a few smaller ones: 18 spots across 16 pages document asessionTimeout/session_timeoutparameter that exists in no SDK and not in the REST API.The verified truth:
timeout(default 300000 ms),inactivityTimeoutsessionIdtimeoutsessionIdapi_timeout(wire-aliased totimeout;timeoutis reserved for the HTTP request timeout)session_idTimeoutSessionIDtimeoutsession_idImpact: the Python spelling raises
TypeError: unexpected keyword argument; the TS spelling is a compile error under strict excess-property checks, or silently ignored in JS, so users get the 5-minute default and sessions die mid-run.P0: replace the invented timeout parameter (18 spots)
sessionTimeout→timeout(TypeScript context):content/docs/cookbook/trigger-dev-browser-job.mdx:26(inside a code fence, the only executable occurrence)content/docs/cookbook/google-adk.mdx:107content/docs/cookbook/vercel-ai-sdk-nextjs.mdx:83content/docs/cookbook/mastra.mdx:102content/docs/cookbook/magnitude.mdx:114content/docs/cookbook/openai-agents.mdx:89content/docs/cookbook/playwright.mdx:73content/docs/cookbook/puppeteer.mdx:69content/docs/cookbook/vercel-ai-sdk.mdx:77content/docs/cookbook/credentials.mdx:86session_timeout→api_timeout(Python context):content/docs/cookbook/selenium.mdx:91content/docs/cookbook/playwright.mdx:147content/docs/cookbook/stagehand.mdx:240content/docs/cookbook/notte.mdx:75content/docs/cookbook/agno.mdx:70content/docs/cookbook/credentials.mdx:169content/docs/cookbook/browser-use.mdx:66content/docs/cookbook/browser-use-captcha-auto.mdx:91All 18 are prose bullets except trigger-dev-browser-job, which has it in real code.
P1: wrong-language and wrong-case snippets
content/docs/changelog/changelog-015.mdx:20and:52: fences labeled TypeScript contain Python bodies; the second snippet (StealthConfig={humanize_interactions=True}) is invalid syntax in both languagescontent/docs/changelog/changelog-018.mdx:25: TypeScript-labeled fence with a Python body (upload_from_store(url=...),extension_ids=[...])content/docs/changelog/changelog-019.mdx:26: Python-style#comment inside a TypeScript fencecontent/docs/overview/captchas-api/overview.mdx:65: Python example passesstealth_config={"autoCaptchaSolving": False}; the Python SDK TypedDict key isauto_captcha_solvingcontent/docs/overview/stealth/captcha-solving.mdx:123: sameautoCaptchaSolvingcasing bug in a Python fenceP2: document that session IDs are one-shot
content/docs/overview/sessions-api/session-lifecycle.mdx: recreating a session with a released session's ID returns a 409 Conflict ("Session with this sessionId already exists"), so generate a fresh UUID per session. The API already links to this page in that error, so the answer should be here when users land on it.Acceptance criteria
sessionTimeoutorsession_timeoutremains incontent/docs/Related findings, out of scope for this repo
session_timeoutprose bullets in the recipe READMEs thatsync-cookbook.tspulls from (blocking for the P0 checklist above)api.mdtwice but the file is not shipped in the package (Stainless config)The evaluation report's product asks (lifecycle-aware errors, server-side trace visibility,
steel init) are intentionally excluded; those belong in the API/platform tracker.