/SKILL.md
Use Parchi Relay to control a real browser via the Parchi extension agent (WebSocket) or directly via JSON-RPC from a CLI/tooling workflow.
npx skillsauth add 0xsero/parchi parchi-relayInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
This skill documents how to run the Parchi relay daemon, connect the browser extension as an agent, and use the CLI to drive browser automation.
/v1/rpc + /v1/extension) that brokers calls.parchi-relay / npm run relay) that can:
npm install
npm run build
npm run relay:daemon -- --token=<YOUR_TOKEN> --host=127.0.0.1 --port=17373
chrome://extensionsdist/Onhttp://127.0.0.1:17373<YOUR_TOKEN>Applynpm run relay -- agents --token=<YOUR_TOKEN>
The CLI talks to the daemon over HTTP JSON-RPC.
Set env vars (recommended):
export PARCHI_RELAY_TOKEN="<YOUR_TOKEN>"
export PARCHI_RELAY_HOST="127.0.0.1"
export PARCHI_RELAY_PORT="17373"
List agents:
npm run relay -- agents
Doctor (sanity-check daemon, auth, agent connection, tool forwarding):
npm run relay -- doctor
Get/set default agent:
npm run relay -- default-agent get
npm run relay -- default-agent set agent-123
List tools (on default agent or a specific agent):
npm run relay -- tools
npm run relay -- tools --agentId=agent-123
Call a tool:
npm run relay -- tool getTabs --args='{}'
npm run relay -- tool getContent --args='{\"mode\":\"text\"}'
Run a full agent task and wait for completion:
npm run relay -- run "On the active tab, extract the main headline." --tabs=active --timeoutMs=600000
Relay daemon (POST /v1/rpc, Authorization: Bearer <token>):
relay.pingagents.listagents.default.getagents.default.set { agentId }tools.list { agentId? }tool.call { tool, args, agentId? }agent.run { prompt, selectedTabIds?, agentId? }run.wait { runId, timeoutMs? }run.events { runId }Extension agent (WebSocket /v1/extension?token=...):
agent.hello (registers the agent)run.event / run.done notifications (for streamed run telemetry)agents returns []:
dist/ (not packages/extension/)Tool calls fail due to policy:
127.0.0.1 unless you explicitly intend to expose it.Parchi now supports a dedicated relay-native Electron agent:
# Terminal A
PARCHI_RELAY_TOKEN=<TOKEN> npm run relay:daemon
# Terminal B
PARCHI_RELAY_TOKEN=<TOKEN> npm run electron:agent
Managed helper (recommended):
npm run electron:secure -- start
npm run electron:secure -- status
npm run electron:secure -- stop
Then select the Electron agent with:
npm run relay -- agents
npm run relay -- default-agent set <electron-agent-id>
Useful methods:
tool.call with electron.launchtool.call with electron.connecttool.call with electron.snapshot, electron.click, electron.type, electron.pressdevelopment
Validates refactored code through testing, coverage analysis, and quality gate checks
development
Refactors TypeScript code while preserving functionality, ensuring files stay under 200 lines
tools
Use when work should span one or more detached tasks but still behave like one job with a single owner context. TaskFlow is the durable flow substrate under authoring layers like Lobster, ACPX, plugins, or plain code. Keep conditional logic in the caller; use TaskFlow for flow identity, child-task linkage, waiting state, revision-checked mutations, and user-facing emergence.
tools
# Lobster Lobster executes multi-step workflows with approval checkpoints. Use it when: - User wants a repeatable automation (triage, monitor, sync) - Actions need human approval before executing (send, post, delete) - Multiple tool calls should run as one deterministic operation ## When to use Lobster | User intent | Use Lobster? | | ------------------------------------------------------ | --------------------------