Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
209 commits
Select commit Hold shift + click to select a range
a56a8fe
feat(provider): discover models from openai-compatible providers
androidand May 14, 2026
5e36b13
feat(local): mDNS-based local provider discovery for /connect
androidand May 14, 2026
7690786
fix(local): reuse existing provider key when same baseURL already con…
androidand May 14, 2026
c34f9c8
feat(local): probe localhost ports to discover local llama-swap instance
androidand May 14, 2026
5b65bb9
fix(local): use txt.host for clean display name in mDNS scan results
androidand May 14, 2026
c707311
feat(tui): add local LAN provider discovery to /connect
androidand May 14, 2026
76d3dce
fix(local): graceful mDNS failure + better TUI error messages
androidand May 14, 2026
75bdaef
fix(tui/local): show configured instances instead of hiding them
androidand May 14, 2026
e0caa66
feat(local/scan): probe configured fleet providers to surface cross-s…
androidand May 14, 2026
9d29743
fix(local): reliable LAN scan + multi-select provider dialog
androidand May 14, 2026
2709771
Merge origin/dev into pr-27554 (resolve provider discovery conflict)
androidand May 15, 2026
9e3f189
Merge remote-tracking branch 'origin/dev' into pr-27554
androidand May 15, 2026
1418a9c
fix(run): adapt event consumers to regenerated sdk types
androidand May 15, 2026
bf2f693
Merge branch 'dev' into dev
androidand May 15, 2026
cd8d36b
Merge branch 'dev' into dev
androidand May 15, 2026
ceded06
fix(run): adapt event consumers to regenerated sdk types
androidand May 15, 2026
2cdc07f
fix(local): add Ollama (11434) and LM Studio (1234) to LAN scan ports
androidand May 15, 2026
0d37954
Merge remote-tracking branch 'origin/dev' into pr-27554
androidand May 15, 2026
230910e
fix(provider): refresh discovered local model metadata
androidand May 15, 2026
a9db1cc
Merge remote-tracking branch 'fork/pr-27554' into pr-27554
androidand May 15, 2026
4c4131a
Merge remote-tracking branch 'origin/dev' into pr-27554
androidand May 15, 2026
f44da50
Merge branch 'dev' into dev
androidand May 15, 2026
68f7242
feat(tui): show context window size for local models
androidand May 15, 2026
73156c6
Merge remote-tracking branch 'fork/dev' into pr-27554
androidand May 15, 2026
aea8a22
fix(test): re-apply list(ctx) arg fixes after merge
androidand May 15, 2026
3382329
Merge branch 'dev' into dev
androidand May 15, 2026
89b0f11
fix run agent lookup in effect context
androidand May 15, 2026
602edd6
Merge remote-tracking branch 'origin/dev' into tmp-pr27554-agent-fix
androidand May 15, 2026
64cf4f9
fix provider test instance helper usage
androidand May 15, 2026
3678754
Merge branch 'dev' into dev
androidand May 16, 2026
91ad278
fix(tui): sidebar-only context window, reactive to model switches
androidand May 17, 2026
e6fe65c
style(tui): remove inline comment from context sidebar
androidand May 17, 2026
b25752d
fix(provider): server-reported context/output wins over cached values…
androidand May 18, 2026
099677e
feat(tui): set context window size for local llama-swap models
androidand May 19, 2026
8bbbb00
fix(errors): convert bare-string Effect.die to Error objects with com…
androidand May 19, 2026
5a0ecc3
feat(tui): add local vault-tec home customizations
androidand May 23, 2026
294594e
docs: add ECOSYSTEM.md stub + update FORK_WORKFLOW custom changes table
androidand Jun 1, 2026
020ac73
chore(sync): merge upstream/dev into fork (2026-06-01)
androidand Jun 1, 2026
0d51724
Merge branch 'sync/upstream-20260601' into dev
androidand Jun 1, 2026
c156bc5
feat(tui): update tui-smoke plugin with latest local customizations
androidand Jun 1, 2026
2ffa06c
fix(test): add missing tmpdir import to provider test
androidand Jun 1, 2026
21b6459
fix(typecheck): adapt fork files to upstream API changes after sync
androidand Jun 1, 2026
a6c6447
Add Beads integration and sync wiring
androidand Jun 1, 2026
cc17a7f
Route upgrade and distribution defaults to fork
androidand Jun 1, 2026
bef55ab
Add upstream sync worktree helper script
androidand Jun 1, 2026
db4fc80
Ignore local Skein and agent runtime artifacts
androidand Jun 1, 2026
29da2f2
feat(local): auto-sync local llama-swap providers via mDNS on startup
androidand Jun 1, 2026
513ff96
tui: restore context controls, tokens/s and theme registrations
androidand Jun 1, 2026
f56abce
fix(local-sync): skip own IPs to prevent self-duplicate providers
androidand Jun 1, 2026
6617617
fix(local): use 'skein' as apiKey placeholder instead of 'ollama'
androidand Jun 2, 2026
4a49ec0
feat(local): add scanMDNSOnly + discovery integration test
androidand Jun 2, 2026
d2f7ed9
Fix: dedup llama-swap providers by name, not just host:port
androidand Jun 2, 2026
bd4155f
docs: reference llama-skein OpenAPI workflow
androidand Jun 2, 2026
a72a4b3
docs(agents): add multi-repo context, sanitize absolute paths
androidand Jun 5, 2026
af37098
docs(agents): add docs-skein pointer for private infrastructure docs
androidand Jun 5, 2026
bd1a85d
fix(tui): fix ctx-size dialog API call and local provider sidebar UX
androidand Jun 5, 2026
dc0730e
feat(tui): add VRAM/RAM display and MCP workflow hints to ctx-size di…
androidand Jun 5, 2026
71a10eb
feat(tui): add live memory bar to context sidebar for local providers
androidand Jun 5, 2026
a4556b2
feat(tui): three-segment memory bar using loaded_model from /api/hard…
androidand Jun 6, 2026
7853d75
feat(tui): redesign context sidebar with two labelled sections
androidand Jun 6, 2026
7e4a5db
feat(tui): split KV segment into active+headroom in memory bar
androidand Jun 6, 2026
382b8c0
fix(ctx): fix ctx.params typo crashing setModelCtxSize; add bar label…
androidand Jun 6, 2026
3573ebc
fix(local): use generated LlamaSkeinClient.patchConfigModel instead o…
androidand Jun 6, 2026
8a11172
tui: 4k ctx preset steps (4k–32k), larger above
androidand Jun 6, 2026
43e4e13
tui(context): unified Bar component, % inline, breakdown below
androidand Jun 6, 2026
6fd5d95
tui(context): rename Tokens→Context; cost replaces VRAM slot for clou…
androidand Jun 6, 2026
99e5d50
tui(ctx-dialog): compute recommended ctx from actual KV rate + VRAM
androidand Jun 6, 2026
6db2217
tui(ctx-dialog): drop arbitrary 1.5 GB reserve, use freeMb directly
androidand Jun 6, 2026
ba211da
chore: add SKEIN.md and playwright-cli skill
androidand Jun 6, 2026
d204927
chore(sync): merge upstream/dev into fork (2026-06-06)
androidand Jun 6, 2026
f2e232c
Merge branch 'sync/upstream-20260606' into dev
androidand Jun 6, 2026
03327d8
fix(build): resolve post-merge type renames and missing modules
androidand Jun 6, 2026
e879606
docs: update FORK_WORKFLOW with auto-update trigger, sync metadata, p…
androidand Jun 6, 2026
f3e5e57
fix: port custom code to Effect 4.0 API and restore client.local SDK …
androidand Jun 6, 2026
eb5b666
Merge remote-tracking branch 'upstream/dev' into sync/upstream-20260607
androidand Jun 7, 2026
edbb861
Fix fork-specific import paths and type errors after upstream sync
androidand Jun 7, 2026
be125a9
Merge branch 'sync/upstream-20260607' into dev
androidand Jun 7, 2026
bc2ce3d
Commit llama-skein generated client (fork-specific, not regenerated b…
androidand Jun 7, 2026
f754dab
Fix build: resolve @tui/ aliases, @/ path in tui, add missing theme a…
androidand Jun 7, 2026
4e19a4d
Move llama-skein gen into tui package with relative imports
androidand Jun 7, 2026
622dac3
Fix OpenRouter auth: invalidate Provider InstanceState after auth.set…
androidand Jun 7, 2026
9e5a43f
Revert Provider.refresh() — wrong approach, dispose+bootstrap already…
androidand Jun 7, 2026
e7e112c
Fix mDNS provider discovery binding names to wrong machines
androidand Jun 11, 2026
5c3344a
llama-skein: regenerate client for defaultModel API
androidand Jun 11, 2026
85c2b14
local: surface llama-skein defaultModel from model probe
androidand Jun 11, 2026
6b9e4a6
opencode: add loop command, auto-reply, and pattern-detection features
androidand Jun 11, 2026
bfbfc08
local: add llama-skein CPU/MoE offload endpoints
androidand Jun 16, 2026
1438d83
local: regenerate llama-skein client for typed config responses
androidand Jun 16, 2026
dadc53e
fork: modular fork-maintenance workflow (opencode-skein)
androidand Jun 17, 2026
0399b97
fork: drop phantom cache_creation_tokens manifest entries
androidand Jun 17, 2026
409e0a0
Merge upstream/dev into fork (238 commits, baseline 914a643ab → 10b66…
androidand Jun 17, 2026
3c3e9ea
fork: recover ThemeState writer + bump sync baseline
androidand Jun 17, 2026
936d1c2
fork: release pipeline + ecosystem manifest (skein.json) + changelog
androidand Jun 18, 2026
0a519c3
feat(provider): provider-agnostic "credits left" meter (OpenRouter)
androidand Jun 19, 2026
8e1c0ce
fix(local): refresh sidebar context window + notify on ctx change
androidand Jun 19, 2026
5026f69
refactor(local): extract shared model-fit engine
androidand Jun 19, 2026
6f1e017
feat(provider): auto-lower ctx + retry on local "context too large" 413
androidand Jun 19, 2026
af1804d
feat(local): trim context to llama-skein /api/fit max_safe_ctx
androidand Jun 20, 2026
bd7527e
fix(log): route fork logger shim to file, not stdout/stderr
androidand Jun 20, 2026
8fb3bac
fix(local): honor max_safe_ctx regardless of fit_level (qwopus 413)
androidand Jun 20, 2026
7c3693a
fix(local): strip skein_loading deltas before the ai-sdk (skein-duey)
androidand Jun 20, 2026
930e17c
chore: reduce scan timeout and disable host discovery
androidand Jul 1, 2026
856d043
feat(loop): server-side loop service + TUI /loop and /loops
androidand Jul 2, 2026
103e4b9
session: self-heal when compaction itself overflows context
androidand Jul 4, 2026
27ddabc
feat(opencode): retain MTP metadata from llama-skein model discovery
androidand Jul 5, 2026
dafe81c
fix(session): track active message instead of assigning to processor.…
androidand Jul 5, 2026
2a6142e
feat(loop): run /loop in the caller's session + ralph-style defaults
androidand Jul 5, 2026
cbc5a85
fix(tui): sidebar VRAM percent matches the model+kv bar segments
androidand Jul 5, 2026
24a35b2
chore: regen llama-skein TS client (kv_estimate_mb doc)
androidand Jul 5, 2026
a84b661
fix(db): raise SQLite busy_timeout 5s -> 30s
androidand Jul 5, 2026
860a902
fix(local): bound fit fetch, serialize config writes, drop stale mete…
androidand Jul 6, 2026
bf546e0
fix(loop): stoppable loops, in-session indicator, working manage menu
androidand Jul 6, 2026
1640e41
chore: regen llama-skein TS client (GPU tuning API)
androidand Jul 6, 2026
e964959
feat(db): event journal retention and compaction sweep
androidand Jul 6, 2026
edc6a48
feat(tui): GPU tuning dialog, sidebar badge, /tuning command
androidand Jul 6, 2026
0eb792f
feat(local): map llama-skein reasoning flag in model discovery
androidand Jul 7, 2026
d7206f0
llama-skein: regen client for tuning backend_env
androidand Jul 10, 2026
7fbcc43
feat(local): context- and slot-aware local subagent placement
androidand Jul 11, 2026
e593a45
fix(tui): show enforced context ceiling; VRAM-safe overflow patch
androidand Jul 11, 2026
a9112d3
chore(local): regen llama-skein client, handle unknown fit_level
androidand Jul 11, 2026
4f76d9f
fix(local): cap 413 ctx auto-grow at max_fit_ctx, never the native ce…
androidand Jul 11, 2026
2c01ab0
fix(local): keep slot-release handle out of task metadata (DataCloneE…
androidand Jul 13, 2026
196011d
fork: repoint release flow at renamed repo (androidand/opencode-skein)
androidand Jul 13, 2026
40699ca
fix(upgrade): never prompt local dev builds toward release builds
androidand Jul 13, 2026
9ba7924
fix(upgrade): let OPENCODE_ALWAYS_NOTIFY_UPDATE pierce the local-chan…
androidand Jul 13, 2026
dce5b56
provider: show model file size in the model picker
androidand Jul 14, 2026
f9b6f95
provider+task: bound hung requests to a local subagent's provider
androidand Jul 14, 2026
30ecb8c
feat(opencode): add fast loop detection for stuck sub-agents
androidand Jul 18, 2026
20d8fe0
feat(session): add event-error wire helper module
androidand Jul 19, 2026
2739797
feat(sub-agent-loop-detection): sub-agent loop detection
androidand Jul 19, 2026
272beed
fix(loop): sane defaults, cap iterations array to prevent O(N²) growth
androidand Jul 19, 2026
41f0d45
fix(opencode): migrate AuthError to Schema.TaggedErrorClass in messag…
androidand Jul 19, 2026
e156296
fix(boot): break prompt<->loop import cycle that crashed every startup
androidand Jul 19, 2026
accaf32
fix(upgrade): surface real upgrade failure causes end to end
androidand Jul 19, 2026
ac3824b
chore(openspec): track specs in git, keep runtime state ignored
androidand Jul 25, 2026
0821e6d
fix(task): refuse to queue a subagent behind its own parent (#5)
androidand Jul 25, 2026
05fbe44
tui: stop the ctx dialog writing a context the model cannot load (#6)
androidand Jul 29, 2026
264b35c
session: dedicated system prompt for instella models
androidand Jul 29, 2026
260d418
opencode: demand continued work after background task launch
androidand Jul 29, 2026
b8e8acd
session: instella prompt must not contain literal think markers
androidand Jul 30, 2026
d64b826
session: retry an empty turn once with tool_choice required
androidand Jul 30, 2026
693f51b
local: resident model is a placement tier, not a bonus
androidand Jul 30, 2026
98bddcc
task: let the model target a named local provider for subagents
androidand Jul 30, 2026
443ae44
session: instella must not treat conversation as a task
androidand Jul 30, 2026
d9083e5
task: fleet-visibility probe must not kill server startup
androidand Jul 30, 2026
b8c429a
plan(mcp): propose dual-era MCP client support
androidand Jul 30, 2026
796300e
deps(mcp): add @modelcontextprotocol/client v2 alongside v1 sdk
androidand Jul 31, 2026
f37b540
fix(local): recognize llama-skein's real prompt-overflow contract
androidand Jul 31, 2026
8e84cdf
feat(mcp): port client connection logic to @modelcontextprotocol/clie…
androidand Jul 31, 2026
821cab1
chore(mcp): remove @modelcontextprotocol/sdk v1
androidand Jul 31, 2026
2660128
feat(mcp): protocol mode negotiation, diagnostics, and tool profiles
androidand Jul 31, 2026
fe60df7
chore: remove trained-context clamp on ctx-size enforcement
androidand Jul 31, 2026
2cb52c1
chore(openspec): archive mcp-dual-era-client
androidand Aug 1, 2026
9fbf2d6
feat: add llmfit importer and model-catalog foundation
androidand Aug 5, 2026
ff54b32
feat(loop): relentless openspec queue, loop reliability, cancellation…
androidand Aug 5, 2026
cd8a4de
docs(openspec): record verification for the four loop-* changes
androidand Aug 5, 2026
faf3d47
fix(model-catalog): withCache return type must include the freshness …
androidand Aug 5, 2026
1935051
fix(loop): a failing queue gate must cost a repair turn, not a silent…
androidand Aug 5, 2026
0d0be55
fix(loop): gate commands need a working directory, and a never-passin…
androidand Aug 5, 2026
bffbe87
fix(loop): a misconfiguration halt must un-poison the change it block…
androidand Aug 5, 2026
590af9a
chore: stop tracking packages/opencode/config.json
androidand Aug 5, 2026
242ce07
fix(loop): count a whole turn's tool calls, and order the queue by pr…
androidand Aug 5, 2026
a83ce9b
test(model-catalog): cover file-info, blob, nested-path, gated, and i…
androidand Aug 5, 2026
42950b9
test(model-catalog): validate family/quant behavior against Skein gol…
androidand Aug 5, 2026
9f4e80b
Merge branch 'feature/model-gallery-tasks-22-32' into dev
androidand Aug 5, 2026
35b1bdb
feat(tui): make queue mode usable from the TUI, not just the CLI
androidand Aug 5, 2026
f4386eb
fix(loop): resolve a relative queue gate cwd against the repo, not th…
androidand Aug 5, 2026
d2be91f
feat(tui): click the mode indicator; rename the colliding "Loop" state
androidand Aug 5, 2026
638d259
feat(tui): /queue is its own command, not a flag on /loop
androidand Aug 5, 2026
dd04b4f
test(tui): fix the 9 long-standing failures — suite is green
androidand Aug 5, 2026
57bfe74
fix(tui): /btw must not kill a running queue, and drop the /loop vs /…
androidand Aug 5, 2026
31dc327
feat(tui): Auto means work the backlog
androidand Aug 5, 2026
8e9d4e7
feat(loop): Auto takes an optional standing instruction, and starts d…
androidand Aug 5, 2026
83a3a8b
fix(loop): a missing backlog is not a drained backlog
androidand Aug 5, 2026
635eaec
plan(loop): spec a workspace queue that drains many repos, not one
androidand Aug 5, 2026
ffd9deb
fix(tui): mode picker flashed shut, and Auto silently reverted to Manual
androidand Aug 6, 2026
0377d8f
fix(tui): the menu is about autonomy, not about "auto"
androidand Aug 6, 2026
6c072b9
fix(tui): make autonomy a ladder — remove the state that could not work
androidand Aug 6, 2026
ae9cc41
refactor(tui): auto is a verb, not a mode — delete the mode machinery
androidand Aug 6, 2026
aab14be
fix(config): a runtime write reaches get(); clickable indicator; fini…
androidand Aug 6, 2026
802fbd5
fix(loop): run iterations where you can see them
androidand Aug 6, 2026
fc01c2c
fix(loop): one isolated session per change — and restore the ceiling …
androidand Aug 6, 2026
0f659dd
fix(loop): put the run back in the window you are looking at
androidand Aug 6, 2026
6125cd4
test(local): guard opencode model management against a Skein dependen…
androidand Aug 6, 2026
ae82f29
feat(agent): ship real personas, and audit them with one of their own
androidand Aug 6, 2026
85d4cbf
feat(loop): verify is a review now, and fan-out names who to delegate to
androidand Aug 6, 2026
0847acf
docs(openspec): correct where a steer has to land
androidand Aug 6, 2026
f4c36f1
docs(model-catalog): record 3.2's deliberate divergences in the adopt…
androidand Aug 6, 2026
3bffa01
fix(loop): what the first live /auto run taught us
androidand Aug 6, 2026
3506029
fix(agent): a gate persona gets no shell, because a shell is a write
androidand Aug 6, 2026
f2f8d54
fix(loop): tell the reviewer the exact token, do not assume it remembers
androidand Aug 6, 2026
c92584f
fix(loop): the review gate states its own ceiling instead of trusting…
androidand Aug 6, 2026
36ad831
chore(llama-skein): regenerate the host-model-management client (mode…
androidand Aug 6, 2026
fbc04a8
feat(model-gallery): host enumeration, batched multi-host fit, and th…
androidand Aug 6, 2026
45dbc8c
feat(model-gallery): hard filters, explained ranking, and state label…
androidand Aug 6, 2026
65612ec
feat(loop): auto pushes completed branches, because you never asked i…
androidand Aug 6, 2026
745bcc6
docs(model-gallery-ui): record 5.7, the shared app/TUI gallery surface
androidand Aug 6, 2026
323f627
chore(sdk): regenerate v2 client so app and TUI can reach the gallery…
androidand Aug 6, 2026
17e74a4
feat(session): an agent can find out who else is working in this repo
androidand Aug 6, 2026
88731df
feat(cli)!: delete auto-reply and pattern detection, which never worked
androidand Aug 7, 2026
0530944
refactor!: sweep the rest of the fork-owned code that does nothing
androidand Aug 7, 2026
3400435
fix(cli): register `opencode beads`, which was written and never wire…
androidand Aug 7, 2026
2bc72da
feat(loop): /nudge — correct a running loop without killing it
androidand Aug 7, 2026
2b1f508
fix(cli): --no-progress-limit never worked with a space, and prove /n…
androidand Aug 7, 2026
691e6f9
feat(local): rank host-paced placements below GPU-resident models
androidand Aug 7, 2026
0bb063a
chore(mcp): enable skein MCP, scoped to this repo
androidand Aug 7, 2026
729bb94
feat(placement): a role can say where it wants to run, so cloud can d…
androidand Aug 7, 2026
e4f5999
feat(placement): a role can say where it wants to run, so cloud can d…
androidand Aug 7, 2026
bb424c3
fix(placement): a host preference must not outweigh the host-paced pe…
androidand Aug 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
388 changes: 388 additions & 0 deletions .claude/skills/playwright-cli/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,388 @@
---
name: playwright-cli
description: Automate browser interactions, test web pages and work with Playwright tests.
allowed-tools: Bash(playwright-cli:*) Bash(npx:*) Bash(npm:*)
---

# Browser Automation with playwright-cli

## Quick start

```bash
# open new browser
playwright-cli open
# navigate to a page
playwright-cli goto https://playwright.dev
# interact with the page using refs from the snapshot
playwright-cli click e15
playwright-cli type "page.click"
playwright-cli press Enter
# take a screenshot (rarely used, as snapshot is more common)
playwright-cli screenshot
# close the browser
playwright-cli close
```

## Commands

### Core

```bash
playwright-cli open
# open and navigate right away
playwright-cli open https://example.com/
playwright-cli goto https://playwright.dev
playwright-cli type "search query"
playwright-cli click e3
playwright-cli dblclick e7
# --submit presses Enter after filling the element
playwright-cli fill e5 "user@example.com" --submit
playwright-cli drag e2 e8
# drop files or data onto an element (from outside the page)
playwright-cli drop e4 --path=./image.png
playwright-cli drop e4 --data="text/plain=hello world"
playwright-cli hover e4
playwright-cli select e9 "option-value"
playwright-cli upload ./document.pdf
playwright-cli check e12
playwright-cli uncheck e12
playwright-cli snapshot
playwright-cli eval "document.title"
playwright-cli eval "el => el.textContent" e5
# get element id, class, or any attribute not visible in the snapshot
playwright-cli eval "el => el.id" e5
playwright-cli eval "el => el.getAttribute('data-testid')" e5
playwright-cli dialog-accept
playwright-cli dialog-accept "confirmation text"
playwright-cli dialog-dismiss
playwright-cli resize 1920 1080
playwright-cli close
```

### Navigation

```bash
playwright-cli go-back
playwright-cli go-forward
playwright-cli reload
```

### Keyboard

```bash
playwright-cli press Enter
playwright-cli press ArrowDown
playwright-cli keydown Shift
playwright-cli keyup Shift
```

### Mouse

```bash
playwright-cli mousemove 150 300
playwright-cli mousedown
playwright-cli mousedown right
playwright-cli mouseup
playwright-cli mouseup right
playwright-cli mousewheel 0 100
```

### Save as

```bash
playwright-cli screenshot
playwright-cli screenshot e5
playwright-cli screenshot --filename=page.png
playwright-cli pdf --filename=page.pdf
```

### Tabs

```bash
playwright-cli tab-list
playwright-cli tab-new
playwright-cli tab-new https://example.com/page
playwright-cli tab-close
playwright-cli tab-close 2
playwright-cli tab-select 0
```

### Storage

```bash
playwright-cli state-save
playwright-cli state-save auth.json
playwright-cli state-load auth.json

# Cookies
playwright-cli cookie-list
playwright-cli cookie-list --domain=example.com
playwright-cli cookie-get session_id
playwright-cli cookie-set session_id abc123
playwright-cli cookie-set session_id abc123 --domain=example.com --httpOnly --secure
playwright-cli cookie-delete session_id
playwright-cli cookie-clear

# LocalStorage
playwright-cli localstorage-list
playwright-cli localstorage-get theme
playwright-cli localstorage-set theme dark
playwright-cli localstorage-delete theme
playwright-cli localstorage-clear

# SessionStorage
playwright-cli sessionstorage-list
playwright-cli sessionstorage-get step
playwright-cli sessionstorage-set step 3
playwright-cli sessionstorage-delete step
playwright-cli sessionstorage-clear
```

### Network

```bash
playwright-cli route "**/*.jpg" --status=404
playwright-cli route "https://api.example.com/**" --body='{"mock": true}'
playwright-cli route-list
playwright-cli unroute "**/*.jpg"
playwright-cli unroute
```

### DevTools

```bash
playwright-cli console
playwright-cli console warning
playwright-cli requests
playwright-cli request 5
playwright-cli run-code "async page => await page.context().grantPermissions(['geolocation'])"
playwright-cli run-code --filename=script.js
playwright-cli tracing-start
playwright-cli tracing-stop
playwright-cli video-start video.webm
playwright-cli video-chapter "Chapter Title" --description="Details" --duration=2000
playwright-cli video-stop

# launch the dashboard for UI review / design feedback — user annotates the page, you receive the annotated screenshot, snapshot, and notes
playwright-cli show --annotate

# generate a Playwright locator for an element from its ref or selector
playwright-cli generate-locator e5 --raw

# show a persistent highlight overlay for an element, optionally with a custom style
playwright-cli highlight e5
playwright-cli highlight e5 --style="outline: 3px dashed red"
# hide a single element highlight, or all page highlights when no target is given
playwright-cli highlight e5 --hide
playwright-cli highlight --hide
```

## Raw output

The global `--raw` option strips page status, generated code, and snapshot sections from the output, returning only the result value. Use it to pipe command output into other tools. Commands that don't produce output return nothing.

```bash
playwright-cli --raw eval "JSON.stringify(performance.timing)" | jq '.loadEventEnd - .navigationStart'
playwright-cli --raw eval "JSON.stringify([...document.querySelectorAll('a')].map(a => a.href))" > links.json
playwright-cli --raw snapshot > before.yml
playwright-cli click e5
playwright-cli --raw snapshot > after.yml
diff before.yml after.yml
TOKEN=$(playwright-cli --raw cookie-get session_id)
playwright-cli --raw localstorage-get theme
```

For structured output wrapping every reply as JSON, pass --json
```bash
playwright-cli list --json
```

## Open parameters
```bash
# Use specific browser when creating session
playwright-cli open --browser=chrome
playwright-cli open --browser=firefox
playwright-cli open --browser=webkit
playwright-cli open --browser=msedge

# Use persistent profile (by default profile is in-memory)
playwright-cli open --persistent
# Use persistent profile with custom directory
playwright-cli open --profile=/path/to/profile

# Connect to browser via Playwright Extension
playwright-cli attach --extension=chrome

# Connect to a running Chrome or Edge by channel name
playwright-cli attach --cdp=chrome
playwright-cli attach --cdp=msedge

# Connect to a running browser via CDP endpoint
playwright-cli attach --cdp=http://localhost:9222

# Start with config file
playwright-cli open --config=my-config.json

# Close the browser
playwright-cli close
# Detach from an attached browser (leaves the external browser running)
playwright-cli -s=msedge detach
# Delete user data for the default session
playwright-cli delete-data
```

## Snapshots

After each command, playwright-cli provides a snapshot of the current browser state.

```bash
> playwright-cli goto https://example.com
### Page
- Page URL: https://example.com/
- Page Title: Example Domain
### Snapshot
[Snapshot](.playwright-cli/page-2026-02-14T19-22-42-679Z.yml)
```

You can also take a snapshot on demand using `playwright-cli snapshot` command. All the options below can be combined as needed.

```bash
# default - save to a file with timestamp-based name
playwright-cli snapshot

# save to file, use when snapshot is a part of the workflow result
playwright-cli snapshot --filename=after-click.yaml

# snapshot an element instead of the whole page
playwright-cli snapshot "#main"

# limit snapshot depth for efficiency, take a partial snapshot afterwards
playwright-cli snapshot --depth=4
playwright-cli snapshot e34

# include each element's bounding box as [box=x,y,width,height]
playwright-cli snapshot --boxes
```

## Targeting elements

By default, use refs from the snapshot to interact with page elements.

```bash
# get snapshot with refs
playwright-cli snapshot

# interact using a ref
playwright-cli click e15
```

You can also use css selectors or Playwright locators.

```bash
# css selector
playwright-cli click "#main > button.submit"

# role locator
playwright-cli click "getByRole('button', { name: 'Submit' })"

# test id
playwright-cli click "getByTestId('submit-button')"
```

## Browser Sessions

```bash
# create new browser session named "mysession" with persistent profile
playwright-cli -s=mysession open example.com --persistent
# same with manually specified profile directory (use when requested explicitly)
playwright-cli -s=mysession open example.com --profile=/path/to/profile
playwright-cli -s=mysession click e6
playwright-cli -s=mysession close # stop a named browser
playwright-cli -s=mysession delete-data # delete user data for persistent session

playwright-cli list
# Close all browsers
playwright-cli close-all
# Forcefully kill all browser processes
playwright-cli kill-all
```

## Installation

If global `playwright-cli` command is not available, try a local version via `npx playwright-cli`:

```bash
npx --no-install playwright-cli --version
```

When local version is available, use `npx playwright-cli` in all commands. Otherwise, install `playwright-cli` as a global command:

```bash
npm install -g @playwright/cli@latest
```

## Example: Form submission

```bash
playwright-cli open https://example.com/form
playwright-cli snapshot

playwright-cli fill e1 "user@example.com"
playwright-cli fill e2 "password123"
playwright-cli click e3
playwright-cli snapshot
playwright-cli close
```

## Example: Multi-tab workflow

```bash
playwright-cli open https://example.com
playwright-cli tab-new https://example.com/other
playwright-cli tab-list
playwright-cli tab-select 0
playwright-cli snapshot
playwright-cli close
```

## Example: Debugging with DevTools

```bash
playwright-cli open https://example.com
playwright-cli click e4
playwright-cli fill e7 "test"
playwright-cli console
playwright-cli requests
playwright-cli close
```

```bash
playwright-cli open https://example.com
playwright-cli tracing-start
playwright-cli click e4
playwright-cli fill e7 "test"
playwright-cli tracing-stop
playwright-cli close
```

## Example: Interactive session

Ask the user for UI review or design feedback. The user draws boxes on the live page and types comments; you receive the annotated screenshot, the snapshot of the marked region, and the user's notes. Use this whenever the user asks for "UI review", "design feedback", or to "ask the user what they think / want / mean":

```bash
playwright-cli open https://example.com
playwright-cli show --annotate
```

## Specific tasks

* **Running and Debugging Playwright tests** [references/playwright-tests.md](references/playwright-tests.md)
* **Request mocking** [references/request-mocking.md](references/request-mocking.md)
* **Running Playwright code** [references/running-code.md](references/running-code.md)
* **Browser session management** [references/session-management.md](references/session-management.md)
* **Spec-driven testing (plan / generate / heal)** [references/spec-driven-testing.md](references/spec-driven-testing.md)
* **Storage state (cookies, localStorage)** [references/storage-state.md](references/storage-state.md)
* **Test generation** [references/test-generation.md](references/test-generation.md)
* **Tracing** [references/tracing.md](references/tracing.md)
* **Video recording** [references/video-recording.md](references/video-recording.md)
* **Inspecting element attributes** [references/element-attributes.md](references/element-attributes.md)
Loading
Loading