一键导入
browse
Web browsing for legal work: extract contracts from portals, navigate legal research sites, pull documents from cloud storage, capture evidence screenshots.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Web browsing for legal work: extract contracts from portals, navigate legal research sites, pull documents from cloud storage, capture evidence screenshots.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Legal work across any practice area — contracts, data privacy, employment, IP, corporate, securities, financial services, litigation, antitrust, M&A, tax, real estate, healthcare, government contracts, AI, insurance, international trade, consumer protection, bankruptcy, environmental. Composes five primitives (read, research, evaluate, draft, remember) to answer legal questions, research law and past decisions, review and redline documents, evaluate clauses against positions, draft memos and correspondence, manage matters and entities, and build institutional knowledge. Use PROACTIVELY for ANY legal, regulatory, or compliance request — anything mentioning a law, regulator, contract, clause, counterparty, deal, dispute, filing, policy, IP asset, or a question calling for legal judgment.
Read-only deadline sweep across your open matters: reads the deadlines: frontmatter on every matter file and reports what's overdue, due within a window (default 60 days), and upcoming — auto-renewal windows, termination-notice deadlines, sub-processor objection periods, filing and milestone dates. One sorted table; changes nothing. Missed dates are the practice's #1 malpractice vector. Use weekly, or whenever you ask 'what's due', 'what deadlines are coming up', 'anything expiring', 'what do I owe across my matters'.
Health check for a Counsel OS install: legal-root config, vault structure, plugin version vs latest, law-content currency, optional dependencies (pandoc, python-docx, bun, Playwright Chromium, qmd), browse daemon, backups, vault git, search-index freshness, vault consistency (standards ↔ library ↔ law floors), and matter-aware law impact (open matters whose law areas were refreshed after their last update) — one ✅/⚠️/❌ table with a one-line fix per finding. Pass --consistency to run only the consistency + law-impact checks (cheap pre-deal spot-check). Read-only: reports and recommends, never changes anything. Use monthly, after /counsel-os:update, or when something seems off.
Practice analytics: matter and counterparty trends, knowledge-base health, and harvesting promotable knowledge from matters (archetype/corridor playbooks, proven clause language) — plus, at sufficient volume, position drift and exception-rate analysis. Use quarterly, or every ~10 closed matters.
Guided onboarding: configure your legal root, seed content, and set up your practice profile. Run once to get started.
Refresh USER-OWNED law content in the vault against current law: custom law areas you created, files marked managed-by: user, or the entire law library when config.md sets law_management: user. Verify-and-patch with primary-source citations, supervised review, and dated last-reviewed attestations. Plugin-managed law areas are excluded — those are refreshed upstream and arrive via /counsel-os:update. Use when your own law files are stale, after adding a custom law area, or on a periodic (e.g., quarterly) cadence.
| name | browse |
| description | Web browsing for legal work: extract contracts from portals, navigate legal research sites, pull documents from cloud storage, capture evidence screenshots. |
You are using a headless browser to access web resources for legal work. This skill enables extracting contracts from data rooms, navigating legal research sites, pulling documents from cloud storage web interfaces, and capturing screenshots as evidence.
Setup is automatic for most installs: browse/bin/find-browse downloads three assets from the plugin's GitHub release on first use (~320MB total, one time) — the prebuilt binary, the playwright runtime packages, and the matching Chromium builds. No bun, node, or build step required. Set COUNSEL_OS_NO_DOWNLOAD=1 to disable the download fallback (airgapped or build-from-source-only environments).
To build from source instead (development, or when no prebuilt binary exists for the platform), run from the plugin root:
cd [counsel-os directory]
bun install
bun run build
bunx playwright install chromium # the headless browser itself
The helper script browse/bin/find-browse locates (or installs) the browse binary, in order:
browse/dist/browse in the current git repo (development build)browse/dist/browse~/counsel-os/browse/dist/browse~/.counsel-os/browse/dist/browse (a previously downloaded prebuilt binary)counsel-browse-{platform} from the release matching the plugin VERSION (or latest), installed under the plugin root (or ~/.counsel-os if the plugin tree is read-only).Downloaded installs also self-provision two companion assets when missing: counsel-browse-runtime.tar.gz (the playwright packages, extracted as node_modules/ two directories above the binary — playwright is external in the compiled binary because bundling it bakes build-host paths) and counsel-browse-{platform}-browsers.tar.gz (the matching Chromium builds, extracted into the ms-playwright cache).
The browse CLI is a thin client for a persistent background server. You normally never manage the server directly:
~/.counsel-os/browse/browse-server.json, an owner-only (0700) directory — the file carries the daemon's auth token, so it never goes in world-writable /tmp. It is suffixed -<port> when BROWSE_PORT or CONDUCTOR_PORT is set, so parallel worktrees get isolated instances.status shows the server's health, current URL, tab count, and PID. stop shuts it down; restart brings up a fresh server (browser state, tabs, and refs are cleared).chain gets 120s.Interaction commands take either a CSS selector or a ref. Plain visible text is NOT a selector.
snapshot first to get @e1, @e2, … refs for the page's elements, then click @e3, fill @e4 "value", etc.snapshot -C additionally finds non-ARIA clickable elements (cursor:pointer, onclick) as @c1, @c2, … refs.snapshot to refresh them.Generated from browse/src/commands.ts (51 commands). Do not edit by hand — regenerate with python3 scripts/gen_browse_reference.py.
| Command | Description |
|---|---|
goto <url> | Navigate to a URL. Waits for DOM content to load (15s timeout). |
back | Go back in browser history. |
forward | Go forward in browser history. |
reload | Reload the current page. |
url | Print the current page URL. |
| Command | Description |
|---|---|
text | Extract the visible text of the page (scripts, styles, and SVG stripped). |
html [selector] | Full page HTML, or the innerHTML of a selector/ref. |
links | List all links on the page as text -> URL. |
forms | List forms and their fields as JSON (password values redacted). |
accessibility | Print the raw ARIA accessibility tree of the page. |
| Command | Description |
|---|---|
snapshot [-i] [-c] [-d N] [-s sel] [-D] [-a] [-o path] [-C] | Accessibility snapshot with @e1, @e2... refs for interaction. -i interactive elements only; -c compact; -d N limit depth; -s sel scope to a selector; -D/--diff diff against the previous snapshot; -a annotated screenshot (path via -o); -C find non-ARIA clickable elements as @c refs. |
diff <url1> <url2> | Navigate to each URL in turn and show a unified diff of their text content. To see what changed on the current page since your last snapshot, use snapshot -D instead. |
| Command | Description |
|---|---|
click <selector> | Click an element (CSS selector or @e/@c ref from snapshot). |
fill <selector> <value> | Fill a form field. Use "" to clear it. |
select <selector> <value> | Select an option from a dropdown. |
hover <selector> | Hover over an element (reveals tooltips and menus). |
type <text> | Type text via the keyboard at the current focus. |
press <key> | Press a key (e.g. Enter, Tab, Escape). |
scroll [selector] | Scroll to the page bottom, or scroll an element into view. |
wait <selector|--networkidle|--load|--domcontentloaded> [timeout-ms] | Wait for an element to become visible, or for the given load state. Default timeout 15000ms. |
upload <selector> <file1> [file2...] | Set one or more files on a file input. |
viewport <WxH> | Set the viewport size (e.g. 1920x1080, 375x812). |
| Command | Description |
|---|---|
dialog-accept [text] | Auto-accept future dialogs, optionally answering prompts with text. |
dialog-dismiss | Auto-dismiss future dialogs. |
dialog [--clear] | Show captured dialog events (--clear empties the buffer). |
| Command | Description |
|---|---|
js <expression> | Evaluate a JavaScript expression on the page and print the result. |
eval <js-file> | Evaluate JavaScript from a file (path must be under /tmp or the working directory). |
css <selector> <property> | Print the computed CSS property value of an element. |
attrs <selector> | Print an element's attributes as JSON. |
console [--clear|--errors] | Show buffered console messages (--errors: errors and warnings only). |
network [--clear] | Show buffered network requests: method, URL, status, duration, size. |
is <property> <selector> | Check element state. Properties: visible, hidden, enabled, disabled, checked, editable, focused. |
perf | Navigation timing breakdown (DNS, TCP, TTFB, download, DOM ready, load). |
| Command | Description |
|---|---|
cookie <name>=<value> | Set a cookie on the current page's domain. |
cookie-import <json-file> | Import cookies from a JSON array file (path must be under /tmp or the working directory). |
cookie-import-browser [browser] [--domain <domain>] | Import cookies from an installed Chromium browser (Comet, Chrome, Arc, Brave, Edge). With --domain imports directly; otherwise opens the picker UI. |
cookies | Dump the browser context's cookies as JSON. |
storage [set <key> <value>] | Show localStorage and sessionStorage, or set a localStorage key. |
header <name>:<value> | Set an extra HTTP header for subsequent requests. |
useragent <string> | Set the user agent (recreates the browser context). |
| Command | Description |
|---|---|
screenshot [path] | Full-page screenshot (default /tmp/browse-screenshot.png). Paths must be under /tmp or the working directory. |
pdf [path] | Save the page as an A4 PDF (default /tmp/browse-page.pdf). |
responsive [prefix] | Capture mobile (375x812), tablet (768x1024), and desktop (1280x720) screenshots. |
| Command | Description |
|---|---|
tabs | List open tabs with id, title, and URL (active tab marked). |
tab <id> | Switch to a tab by id. |
newtab [url] | Open a new tab, optionally navigating to a URL. |
closetab [id] | Close the current tab, or a specific tab by id. |
| Command | Description |
|---|---|
chain | Run a JSON array of commands in sequence, read from stdin: echo '[["goto","url"],["text"]]' | browse chain. |
| Command | Description |
|---|---|
status | Server health, current URL, tab count, and PID. |
stop | Stop the background server. |
restart | Restart the background server (fresh browser; tabs and refs are cleared). |
Many data rooms and client portals require authentication. Two ways to get session cookies into the headless browser:
cookie-import <file> — import from a JSON array file. Cookie JSON paths must be under /tmp or the current working directory.cookie-import-browser [browser] [--domain <domain>] — import directly from a local Chromium browser (Comet, Chrome, Arc, Brave, Edge). Prefer this for local browsers; with --domain it imports without UI, otherwise it opens a picker in the user's browser.cookie-import /tmp/dataroom-cookies.json
cookie-import-browser chrome --domain docusign.com
Cookie files contain credentials — see Security Notes below.
1. cookie-import /tmp/dataroom-cookies.json
2. goto https://dataroom.intralinks.com/deal/12345
3. snapshot # see the page structure
4. click @e3 # navigate to documents
5. click @e7 # find the right folder
6. links # list available documents
7. click @e12 # open the document
8. text # extract the text
1. goto https://www.law.cornell.edu/uscode/text/15/chapter-2A
2. text # read the statute
3. screenshot "ftc-act-section-5.png" # capture for reference
1. goto https://counterparty-website.com/terms-of-service
2. screenshot "/tmp/counterparty-tos-2026-03-13.png"
3. text # extract text for analysis
1. cookie-import /tmp/google-drive-cookies.json
2. goto https://drive.google.com/drive/folders/abc123
3. links # list files
4. snapshot # get fresh refs
5. click @e8 # navigate to folder
6. click @e14 # select file
7. click @e20 # trigger download
chain runs a JSON array of commands in one round trip:
echo '[["goto","https://dataroom.example.com"],["snapshot"],["text"]]' | browse chain