WebPilot
Self-contained browser agent: OODA loop (observe → orient → decide → act) → Playwright spec.
No FastAPI or database. LLM profiles live in llms.json, agent settings in webpilot.yaml. The interactive shell is OpenTUI. Headless run is for CI.
The loop matches the WebPilot design in test-agent-nexus (backend/docs/WEBPILOT_FLOW.md): DOM observe with shadow roots, viewport JPEG, one JSON action per step, then click / type / select / navigate. See docs/ARCHITECTURE.md and HOW_TO_USE.md.
Install
OpenTUI needs Bun 1.3+. Node cannot load the native renderer.
The CLI is published on npm as @capagents/webpilot (the unscoped name is too close to an existing package). PyPI package webpilot-cli is a pip launcher for the same webpilot command (webpilot is already another project on PyPI).
curl -fsSL https://bun.sh/install | bash
# npm
npm install -g @capagents/webpilot
npx @capagents/webpilot --help
# pip (launcher; runs the npm package via bun)
pip install webpilot-cli
webpilot --help
Live browser profiles also need Chromium: bunx playwright install chromium. The mock profile does not.
From this repo:
cd WebPilot
bun install
bun src/index.ts init
bun src/index.ts start
One-shot release (same version on both registries; assumes npm and twine are already logged in):
./scripts/publish.sh # current version
./scripts/publish.sh 0.2.0 # bump + publish
./scripts/publish.sh --dry-run # pack only
npm is published first. The pip launcher runs bun x @capagents/webpilot@<version>.
Configure
init writes:
| File | Purpose |
|---|---|
webpilot.yaml |
Browser, prompts, export, active profile |
llms.json |
Named LLM profiles |
.env.example |
API key names |
webpilot models
webpilot run --goal "Read the homepage" --url https://example.com --profile mock --plain
mock uses a synthetic page, writes workflow.yaml and webpilot.spec.ts, and does not call a model. Switch llm.active to azure-gpt4o or openai-gpt4o for a real browser run.
CLI
webpilot start
webpilot start -u https://example.com -g "Find the documentation link" -p openai-gpt4o
webpilot run --goal "Get a quote" --url https://example.com --profile azure-gpt4o --headed
webpilot run --goal "..." --url https://example.com --profile mock --plain --out ./out/demo
Inside the shell: /url, /goal, /run, /stop, /headed, /steps, /profile, /export, /exit. A line without a slash sets the goal and starts when a URL is known.
Metadata
Release files for webpilot-cli 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| webpilot_cli-0.1.0.tar.gz | 3.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| webpilot_cli-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 7.9 kB
Release files / webpilot_cli-0.1.0.tar.gz
| Download URL | webpilot_cli-0.1.0.tar.gz |
|---|---|
| Size | 3.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
09a18e68193e7e0855749b754d31efe9daeb1c74b74abed1b858f2ea15708a6d
|
|
BLAKE2b-256 checksum How to use checksums |
45afedbdba60aa491aaee0be8896f2ad0f4a02895225fa9f10ba04f799412d51
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.13
|
Release files / webpilot_cli-0.1.0-py3-none-any.whl
| Download URL | webpilot_cli-0.1.0-py3-none-any.whl |
|---|---|
| Size | 4.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a15b17202c77168cc292344541f3c5f41cac3bc40a63c32c1c2447b0f2f410da
|
|
BLAKE2b-256 checksum How to use checksums |
52c795d30311d471957cb35c162bde8101fa1f78bd3a96062728000029199537
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.13
|