Use Steel CLI first. Use the Python runtime only when the workflow needs selector-heavy custom logic that is awkward to express through raw CLI steps.
CLI means here#CLI means Command Line Interface.
In this skill, it specifically means the Steel terminal commands themselves, for example:
bash
steel scrape https://example.com
steel browser start --session demo
steel browser open https://example.com --session demo
steel browser snapshot -i --session demo
The wrapper script does not replace Steel CLI. It packages it into a more publishable, agent-friendly entrypoint:
bash
python3 {baseDir}/scripts/main.py scrape --url https://example.com
python3 {baseDir}/scripts/main.py start-session --session demo
python3 {baseDir}/scripts/main.py browser --session demo -- snapshot -i -c
So the relationship is:
scripts/main.py = the wrapper that calls Steel CLI by defaultRun the doctor command before the first real task in a new environment: bash
python3 {baseDir}/scripts/main.py doctor
Prefer stateless commands for one-shot extraction or capture.
Prefer named sessions for multi-step interaction.
Keep the same --session value across every step in one workflow.
Never bake private cookies, profile names, or local paths into the skill itself.
auto: prefer installed steel, otherwise fall back to npx @steel-dev/clicli: same as auto, but fail if no CLI path is availablenode: force the Node-distributed CLI path through npx @steel-dev/clipython: use Steel SDK + Playwright through run-python-planRead references/runtime-modes.md only when runtime choice or env resolution matters.
Read references/official-docs.md when you need the authoritative Steel CLI or Playwright-Python upstream reference.
bash
python3 {baseDir}/scripts/main.py doctor
bash
python3 {baseDir}/scripts/main.py scrape --url https://example.com --format markdown --json
python3 {baseDir}/scripts/main.py screenshot --url https://example.com --full-page --json
python3 {baseDir}/scripts/main.py pdf --url https://example.com --json
bash
python3 {baseDir}/scripts/main.py start-session --session demo --stealth --json
python3 {baseDir}/scripts/main.py browser --session demo -- open https://example.com
python3 {baseDir}/scripts/main.py browser --session demo -- snapshot -i -c
python3 {baseDir}/scripts/main.py browser --session demo -- fill @e2 "hello"
python3 {baseDir}/scripts/main.py browser --session demo -- click @e5
python3 {baseDir}/scripts/main.py browser --session demo -- wait --load-state networkidle
python3 {baseDir}/scripts/main.py stop-session --session demo --json
bash
python3 {baseDir}/scripts/main.py run-python-plan \
--plan-file {baseDir}/references/example-plan.json \
--url https://example.com
Read references/python-plan.md only when the CLI path is insufficient.
scrape, screenshot, or pdf when the task is stateless.start-session -> browser commands -> stop-session.snapshot -i before using another @eN ref.--env-file, not in the skill files.--cookies-file or STEEL_BROWSER_COOKIES_FILE.maintenance.log.references/official-docs.md — upstream Steel CLI and Playwright-Python referencesreferences/runtime-modes.md — runtime choice, env loading, and privacy rulesreferences/cli-workflows.md — reliable Steel CLI patternsreferences/python-plan.md — JSON plan schema and supported actionsreferences/troubleshooting.md — install/auth/runtime recovery