@steel-experiments/pi-steel
Steel browser automation extension package for Pi
Package details
Install @steel-experiments/pi-steel from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:@steel-experiments/pi-steel- Package
@steel-experiments/pi-steel- Version
0.1.2- Published
- Apr 14, 2026
- Downloads
- 340/mo · 14/wk
- Author
- nibzard
- License
- MIT
- Types
- extension
- Size
- 317.9 KB
- Dependencies
- 2 dependencies · 2 peers
Pi manifest JSON
{
"extensions": [
"./dist/index.js"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
@steel-experiments/pi-steel
Steel Experiments — This is where we ship early, break things, and explore what's next for browser agents. Experiments, prototypes, bleeding-edge demos, and community contributions that push the boundaries of what's possible with web automation. Not production-ready. Definitely interesting.
Steel browser automation tools for the Pi coding agent.
This package publishes the Steel extension as a reusable Pi package so it can be installed directly into Pi or consumed by other runtimes such as Takopi-based wrappers.
Quick start
pi install npm:@steel-experiments/pi-steel
Then just ask Pi to browse:
> Go to hacker news and find the top story
Pi will use steel_navigate to open the page, steel_scrape to read the content, and return what it finds. All session management happens automatically.
Tools
Navigation
| Tool | Description |
|---|---|
steel_navigate |
Open a URL with automatic scheme normalization and retry logic |
steel_go_back |
Navigate back in browser history |
steel_get_url |
Read the current page URL |
steel_get_title |
Read the current page title |
Content extraction
| Tool | Description |
|---|---|
steel_scrape |
Extract page content as text, markdown, or html |
steel_screenshot |
Capture a screenshot artifact |
steel_pdf |
Generate a PDF artifact |
steel_extract |
Extract structured data using a JSON schema |
Interaction
| Tool | Description |
|---|---|
steel_click |
Click an element with captcha recovery |
steel_type |
Type text into a field |
steel_fill_form |
Fill multiple form fields at once |
steel_scroll |
Scroll the page or a nested container |
steel_find_elements |
Find interactive elements by selector |
steel_wait |
Wait for an element to appear |
steel_computer |
Low-level computer action with screenshot |
Session management
| Tool | Description |
|---|---|
steel_pin_session |
Keep the browser session alive across prompts |
steel_release_session |
Close the browser and reset to default session mode |
steel_scrape defaults to text. Ask for markdown when headings, lists, and links matter. Ask for html only when raw DOM markup is actually needed.
steel_scroll can scroll the page or a nested container. For apps like Google Maps, pass a selector for the results pane instead of relying on window scrolling.
Install
Install into Pi as a package:
pi install npm:@steel-experiments/pi-steel
Or load it for a single run:
pi -e npm:@steel-experiments/pi-steel
For local development from this repo:
pi -e .
Session modes
Steel sessions have a lifecycle tied to how Pi uses them. The default works for most cases, but you can tune it:
| Mode | Behavior |
|---|---|
agent (default) |
One session per Pi prompt, closed after agent_end |
session |
Session stays alive until Pi switches or shuts down |
turn |
Session closed after each Pi turn — aggressive, can break multi-step workflows |
Set the mode via environment variable:
STEEL_SESSION_MODE=session pi -e npm:@steel-experiments/pi-steel
You can also change session persistence at runtime with steel_pin_session and steel_release_session.
Configuration
Required
- Node.js 20+
- A Pi runtime that supports extensions
- Steel authentication via either:
STEEL_API_KEY, orsteel loginconfig in~/.config/steel/config.json
Environment variables
Connection
| Variable | Purpose |
|---|---|
STEEL_BASE_URL |
Steel API base URL |
STEEL_BROWSER_API_URL |
Browser API endpoint |
STEEL_LOCAL_API_URL |
Local Steel instance URL |
STEEL_API_URL |
Alternative API URL |
STEEL_CONFIG_DIR |
Custom config directory |
Session
| Variable | Purpose |
|---|---|
STEEL_SESSION_MODE |
Lifecycle mode: agent, session, or turn |
STEEL_SESSION_TIMEOUT_MS |
Session timeout |
STEEL_SESSION_HEADLESS |
Run browser headless |
STEEL_SESSION_REGION |
Browser region |
STEEL_SESSION_PROFILE_ID |
Persistent browser profile |
STEEL_SESSION_PERSIST_PROFILE |
Save profile changes |
STEEL_SESSION_CREDENTIALS |
Session credentials |
STEEL_SESSION_NAMESPACE |
Session namespace |
Proxy
| Variable | Purpose |
|---|---|
STEEL_USE_PROXY |
Enable proxy |
STEEL_PROXY_URL |
Proxy URL |
Captcha
| Variable | Purpose |
|---|---|
STEEL_SOLVE_CAPTCHA |
Enable captcha solving |
STEEL_CAPTCHA_MAX_RETRIES |
Max captcha retry attempts |
STEEL_CAPTCHA_WAIT_MS |
Captcha solve wait time |
STEEL_CAPTCHA_POLL_INTERVAL_MS |
Captcha poll interval |
Tools
| Variable | Purpose |
|---|---|
STEEL_TOOL_TIMEOUT_MS |
Default tool timeout |
STEEL_NAVIGATE_RETRY_COUNT |
Navigation retry attempts |
pi-steel reads Steel CLI config for auth and local API resolution, and it normalizes CLI-style API URLs such as http://localhost:3000/v1 to the SDK-compatible base URL form.
Development
npm install
npm run build
npm test
Publish preflight:
npm pack --dry-run
The package manifest in package.json exposes the compiled extension entrypoint via pi.extensions, which lets Pi load the package root directly after install.