actionbook by actionbook/actionbook
npx skills add https://github.com/actionbook/actionbook --skill actionbook当用户的请求涉及与网站或网页交互时激活此技能
当用户出现以下情况时激活:
Actionbook 支持两种浏览器控制模式:
| 模式 | 标志 | 使用场景 |
|---|---|---|
| CDP(默认) | (无) | 通过 Chrome DevTools 协议启动专用浏览器实例 |
| 扩展 | --extension | 通过 Chrome 扩展 + WebSocket 桥接控制用户现有的 Chrome 浏览器 |
扩展模式: 当用户希望操作其已打开的 Chrome(现有登录状态、Cookie、标签页),或任务需要用户的真实会话状态时使用。
CDP 模式(默认): 用于干净环境、无头自动化、CI/CD 或基于配置文件的会话隔离。
所有命令在两种模式下工作方式相同——唯一的区别是 标志(或 )。
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
--extensionACTIONBOOK_EXTENSION=1关键规则 — 操作手册优先(按页面类型): 在页面上执行任何
actionbook browser命令之前,完成阶段 1(actionbook search→actionbook get)。这包括所有浏览器命令:click、fill、text、eval、snapshot、screenshot以及任何其他交互。此规则适用于每种页面类型。 每次导航到具有不同 URL 模式的页面时,在任何交互之前重复阶段 1:
actionbook search— 根据任务描述查询新的页面类型actionbook get— 如果存在操作手册,则获取选择器- 然后才 执行浏览器命令,优先使用操作手册中的选择器
- 如果不存在操作手册 → 使用
actionbook browser snapshot作为备用方案
什么算作"不同的页面类型":
- 不同的 URL 路径结构(例如,
x.com/home→x.com/:user/status/:id)- 不同的功能目的(例如,搜索结果页面 → 项目详情页面)
- 不同的域名或子域名
- 注意:同一页面类型内的分页、排序或刷新不算作不同页面类型
常见违规: 拥有网站 DOM 的先验知识并不能豁免此规则。操作手册选择器是预先验证和维护的;来自记忆的选择器可能已过时。
# 步骤 1:搜索操作手册(始终首先执行此操作)
actionbook search "arxiv search papers"
# 返回:包含描述的 area ID
# 步骤 2:获取完整手册(使用搜索结果中的 area_id)
actionbook get "arxiv.org:/search/advanced:default"
# 返回:页面结构、带有 CSS/XPath 选择器的 UI 元素
# 如果导航到新的页面类型,请为该页面重复步骤 1-2。
# 示例:在进入论文详情页面后:
# actionbook search "arxiv paper abstract page"
# actionbook get "arxiv.org:/abs/1910.06709:default"
打开页面后,选择您的路径:
有操作手册选择器? → 直接使用它们。不要运行 snapshot。
操作手册选择器在运行时失败? → snapshot → 使用快照选择器重试(参见备用策略)。
完全没有操作手册? → 将 snapshot 作为主要来源。
actionbook browser open "https://arxiv.org/search/advanced"
actionbook browser fill "#terms-0-term" "Neural Network" actionbook browser select "#terms-0-field" "title" actionbook browser click "#date-filter_by-2" actionbook browser fill "#date-year" "2025" actionbook browser click "form[action='/search/advanced'] button.is-link"
actionbook browser wait-nav
actionbook browser text
actionbook browser close
扩展模式使用相同的浏览器命令——只需添加 --extension。但您必须遵循以下完整的生命周期。
# 步骤 3:在用户的 Chrome 中打开 URL
actionbook --extension browser open "https://arxiv.org/search/advanced"
# 步骤 4-7:相同的命令,只需添加 --extension
actionbook --extension browser fill "#terms-0-term" "Neural Network"
actionbook --extension browser select "#terms-0-field" "title"
actionbook --extension browser click "#date-filter_by-2"
actionbook --extension browser fill "#date-year" "2025"
actionbook --extension browser click "form[action='/search/advanced'] button.is-link"
actionbook --extension browser wait-nav
actionbook --extension browser text
# 步骤 8:清理(关键 — 参见下面的扩展模式生命周期)
actionbook --extension browser close # 首先释放调试连接
actionbook extension stop # 然后停止桥接服务器
扩展模式标签页:
browser close关闭当前标签页。任务完成后,关闭通过browser open打开的标签页。不要关闭预先存在的标签页。
操作手册返回页面 URL、页面结构(DOM 层次结构)以及带有选择器的 UI 元素:
### button_advanced_search
- ID: button_advanced_search
- 描述:高级搜索导航按钮
- 类型:link
- 允许方法:click
- 选择器:
- css: button.button.is-small.is-cul-darker (confidence: 0.65)
- xpath: //button[contains(@class, 'button')] (confidence: 0.55)
- role: getByRole('link', { name: 'Advanced Search' }) (confidence: 0.9)
actionbook search "<query>" # 基本搜索
actionbook search "<query>" --domain site.com # 按域名筛选
actionbook search "<query>" --url <url> # 按 URL 筛选
actionbook search "<query>" -p 2 -s 20 # 第 2 页,20 条结果
actionbook get "<area_id>" # 包含选择器的完整详情
# area_id 格式:"site.com:/path:area_name"
actionbook sources list # 列出可用来源
actionbook sources search "<query>" # 按关键词搜索来源
用于管理 Chrome 扩展桥接的命令:
actionbook extension install # 将扩展文件安装到本地配置目录
actionbook extension path # 显示扩展目录(用于 Chrome "加载已解压的扩展程序")
actionbook extension serve # 启动 WebSocket 桥接(在后台保持运行)
actionbook extension stop # 停止正在运行的桥接服务器(发送 SIGTERM)
actionbook extension status # 检查桥接和扩展连接状态
actionbook extension ping # Ping 扩展以验证链接是否存活
设置流程(一次性):
actionbook extension install — 提取扩展文件并注册原生消息传递主机chrome://extensions → 启用开发者模式 → 加载已解压的扩展程序 → 选择 actionbook extension path 返回的路径actionbook extension serve — 启动桥接(保持运行)serve 输出复制令牌 → 粘贴到扩展弹出窗口中 → 保存自动化前的连接检查:
actionbook extension status # 应显示 "running"
actionbook extension ping # 应显示 "responded"
所有浏览器命令在 CDP 和扩展模式下均可工作。对于扩展模式,添加 --extension 标志或设置 ACTIONBOOK_EXTENSION=1。
actionbook browser open <url> # 在新标签页中打开 URL
actionbook browser goto <url> # 导航当前页面
actionbook browser back # 后退
actionbook browser forward # 前进
actionbook browser reload # 重新加载页面
actionbook browser pages # 列出打开的标签页
actionbook browser switch <page_id> # 切换标签页
actionbook browser close # 关闭浏览器
actionbook browser restart # 重启浏览器
actionbook browser connect <endpoint> # 连接到现有浏览器(CDP 端口或 URL)
您传递给这些命令的每个选择器必须来自操作手册(actionbook get)或在此会话中拍摄的 snapshot。不要使用来自记忆或训练数据的选择器。
actionbook browser click "<selector>" # 点击元素
actionbook browser click "<selector>" --wait 1000 # 等待后点击
actionbook browser fill "<selector>" "text" # 清除并输入
actionbook browser type "<selector>" "text" # 追加文本
actionbook browser select "<selector>" "value" # 选择下拉菜单
actionbook browser hover "<selector>" # 悬停
actionbook browser focus "<selector>" # 聚焦
actionbook browser press Enter # 按键
actionbook browser upload <file> [<file2> ...] # 上传文件
actionbook browser upload <file> -s "<selector>" # 使用选择器上传
actionbook browser upload <file> --ref-id e0 # 使用快照引用上传
actionbook browser text # 完整页面文本
actionbook browser text "<selector>" # 元素文本
actionbook browser html # 完整页面 HTML
actionbook browser html "<selector>" # 元素 HTML
actionbook browser snapshot # 可访问性树
actionbook browser snapshot --filter interactive --max-tokens 500 # 聚焦快照
actionbook browser snapshot --diff # 显示自上次快照以来的更改
actionbook browser viewport # 视口尺寸
actionbook browser status # 浏览器检测信息
actionbook browser info "<selector>" # 元素详情(可见性、位置、样式)
actionbook browser console # 捕获控制台日志
actionbook browser console --level error # 按级别筛选(log/info/warn/error)
actionbook browser console --duration 5000 # 监听新消息(毫秒)
actionbook browser fetch "<url>" # 一次性获取(导航+等待+提取+关闭)
actionbook browser fetch "<url>" --format text --json # 指定格式和 JSON 输出
actionbook browser fetch "<url>" --lite # HTTP 优先,对静态页面跳过浏览器
actionbook browser wait "<selector>" # 等待元素
actionbook browser wait "<selector>" --timeout 5000 # 自定义超时
actionbook browser wait-nav # 等待导航
actionbook browser wait-idle # 等待网络空闲
actionbook browser wait-idle --timeout 15000 # 自定义超时
actionbook browser wait-fn "expression" # 等待 JS 条件
actionbook browser wait-fn "document.querySelector('.results')" --timeout 5000
# 确保目标目录在保存截图前已存在
actionbook browser screenshot # 保存 screenshot.png
actionbook browser screenshot output.png # 自定义路径
actionbook browser screenshot --full-page # 完整页面
actionbook browser pdf output.pdf # 导出为 PDF
eval仅作为最后手段。 在使用带有querySelector的browser eval之前,您必须已在此页面上运行snapshot。基于快照/检查输出的选择器,切勿基于记忆的 DOM 知识。
actionbook browser eval "document.title" # 执行 JS
actionbook browser inspect 100 200 # 检查坐标处元素
actionbook browser inspect 100 200 --desc "login btn" # 带描述
actionbook browser cookies list/get/set/delete/clear
actionbook browser cookies set "name" "value" --domain ".example.com"
actionbook browser storage list # 列出所有 localStorage 键
actionbook browser storage get "key" # 获取值
actionbook browser storage set "key" "value" # 设置值
actionbook browser storage remove "key" # 移除键
actionbook browser storage clear # 清除所有
actionbook browser storage list --session # sessionStorage 操作
actionbook browser storage get "key" --session
actionbook browser emulate iphone-14 # 预设设备
actionbook browser emulate ipad # 平板电脑
actionbook browser emulate desktop-hd # 1920x1080
actionbook browser emulate 1280x720 # 自定义分辨率
# 批量执行(在一个命令中运行多个操作)
actionbook browser batch --file actions.json
actionbook browser batch --file actions.json --delay 100 # 自定义延迟(毫秒)
cat actions.json | actionbook browser batch # 从 stdin 读取
# 指纹轮换(隐身模式)
actionbook browser fingerprint rotate
actionbook browser fingerprint rotate --os windows --screen 1920x1080
# 输出与日志
actionbook --json <command> # JSON 输出
actionbook --verbose <command> # 详细日志
actionbook --session-tag <tag> <command> # 标记操作以进行日志关联
# 浏览器模式与连接
actionbook --headless <command> # 无头模式(仅限 CDP)
actionbook -P <profile> <command> # 使用特定配置文件(仅限 CDP)
actionbook --cdp <port|url> <command> # CDP 连接
actionbook --extension <command> # 使用 Chrome 扩展模式
# 或:ACTIONBOOK_EXTENSION=1 actionbook <command>
# 性能与资源控制
actionbook --block-images <command> # 阻止图片下载(快 2-5 倍)
actionbook --block-media <command> # 阻止图片、字体、CSS、媒体
# 隐身与反检测
actionbook --stealth <command> # 启用反机器人检测
actionbook --stealth-os windows <command> # 隐身模式并覆盖操作系统
actionbook --stealth-gpu rtx4080 <command> # 隐身模式并覆盖 GPU
# 页面行为控制
actionbook --no-animations <command> # 禁用 CSS 动画/过渡
actionbook --auto-dismiss-dialogs <command> # 自动处理 alert/confirm/prompt
# 高级功能
actionbook --rewrite-urls <command> # 重写反爬虫 URL(x.com→xcancel.com)
actionbook --wait-hint <hint> <command> # 域名感知等待(instant/fast/normal/slow/heavy)
#id)而非 XPathsnapshot — 快照是备用方案,而非发现步骤browser eval 来绕过工作流程browser text 或 browser eval 作为第一个命令,而不完成阶段 1browser close 以释放调试连接当遇到登录/认证障碍(登录页面、密码提示、MFA/OTP、验证码、账户选择器)时:
search → get)。不要仅仅因为出现登录页面而切换工具。
任务完成后始终进行清理:
actionbook browser closebrowser close 以释放调试连接 → extension stop 以停止桥接Actionbook 存储了在索引时捕获的预计算页面数据。随着网站发展,这些数据可能会过时:
当操作手册选择器不起作用时,遵循此有序备用链:
actionbook browser snapshot 以获取当前可访问性树;使用快照输出中的选择器actionbook browser screenshot 以查看当前状态actionbook browser inspect <x> <y> 以查找特定位置的元素eval 之前,验证:
snapshot?(如果没有 → 先运行快照)eval。如果 actionbook search 未返回结果或操作意外失败,请使用其他可用工具继续任务。
# 1. 查找选择器
actionbook search "airbnb search" --domain airbnb.com
# 2. 获取详细选择器(使用搜索结果中的 area_id)
actionbook get "airbnb.com:/:default"
# 3. 使用预先验证的选择器进行自动化
actionbook browser open "https://www.airbnb.com"
actionbook browser fill "input[data-testid='structured-search-input-field-query']" "Tokyo"
actionbook browser click "button[data-testid='structured-search-input-search-button']"
actionbook browser wait-nav
actionbook browser text
actionbook browser close
# 验证桥接是否正在运行
actionbook extension status
# 使用用户现有的已登录会话
actionbook --extension browser open "https://github.com/notifications"
actionbook --extension browser wait-nav
actionbook --extension browser text ".notifications-list"
actionbook --extension browser screenshot notifications.png
actionbook --extension browser close
使用扩展模式时,始终遵循此完整生命周期:飞行前检查 → 连接 → 执行 → 清理。
在任何技术检查之前,询问用户是否已安装 Actionbook Chrome 扩展。
用户确认已安装 → 继续步骤 2(连接)。
用户表示未安装 → 运行安装流程:
actionbook extension install actionbook extension path
然后指导用户在 Chrome 中加载它:
chrome://extensions → 启用开发者模式限制: CLI 只能验证扩展文件是否在本地存在。在步骤 2 中尝试连接之前,无法检测 Chrome 是否实际加载了扩展。
启动桥接服务器并尝试自动配对。重试最多 3 次,然后再考虑手动备用方案。
# 启动桥接(在后台运行)
actionbook extension serve
# 尝试 1:等待通过原生消息传递自动配对
sleep 3
actionbook extension ping
# → 如果 ping 成功 → 继续步骤 3(执行)
# 尝试 2:如果 ping 失败,等待更长时间并重试
sleep 5
actionbook extension ping
# → 如果 ping 成功 → 继续步骤 3(执行)
# 尝试 3:最终重试
sleep 5
actionbook extension ping
# → 如果 ping 成功 → 继续步骤 3(执行)
仅在所有 3 次自动配对尝试都失败后,根据错误进行升级处理:
chrome://extensions 中启用并重试serve 输出中的令牌,以便在扩展弹出窗口中手动粘贴actionbook extension status 以获取诊断信息重要: 不要过早暴露会话令牌。令牌是最后手段的备用方案 — 大多数用户将在 3 次尝试内通过自动配对成功连接。
actionbook --extension browser open "https://example.com"
# ... 执行浏览器操作 ...
# 步骤 1:释放调试连接(必须先执行)
actionbook --extension browser close
# 步骤 2:停止桥接服务器
actionbook extension stop
# 步骤 3:验证 Chrome 不再显示"调试"横幅
actionbook extension status # 应显示 "not running"
警告: 跳过步骤 1 并直接终止桥接进程将导致 Chrome 显示"Actionbook 正在调试此浏览器"。始终在停止桥接前释放调试连接。
# 桥接未运行?
actionbook extension serve # 启动它
# 扩展无响应?
actionbook extension ping # 检查连接性
# 令牌过期?(空闲 > 30 分钟)
# 重启 serve 并在扩展弹出窗口中重新配对
actionbook extension serve # 打印新令牌
# === 页面类型 1:x.com/home(时间线)===
actionbook search "twitter timeline" --domain x.com
actionbook get "x.com:/:default"
actionbook --extension browser open "https://x.com/home"
# 操作手册返回了选择器 → 直接使用它们(无需快照)
actionbook --extension browser text "<selector-from-manual>"
# === 导航到页面类型 2:x.com/:user/status/:id ===
# 不同的页面类型 → 在任何交互之前重新搜索
actionbook search "twitter tweet detail" --domain x.com
# 没有结果?使用快照备用方案:
actionbook --extension browser snapshot
actionbook --extension browser text "<selector-from-snapshot>"
# === 返回页面类型 1 ===
actionbook --extension browser back
# 与之前相同的页面类型 — 操作手册选择器仍然有效(页面结构稳定)。
# 无需重新搜索或重新快照。但是,动态内容(例如,加载的新推文)
# 可能不同 — 如果您需要新内容,请使用相同的操作手册选择器执行 `browser text`。
# === 完成 — 关闭我们打开的标签页 ===
actionbook --extension browser close
有关详细模式和最佳实践:
| 参考 | 描述 |
|---|---|
| references/command-reference.md | 包含所有功能的完整命令参考 |
| references/authentication.md | 登录流程、OAuth、2FA 处理、状态重用 |
每周安装次数
618
代码仓库
GitHub 星标数
1.4K
首次出现
Jan 23, 2026
安全审计
安装于
opencode531
codex527
gemini-cli514
github-copilot483
kimi-cli457
amp455
Activate this skill when the user's request involves interacting with a website or web page
Activate when the user:
Actionbook supports two browser control modes:
| Mode | Flag | Use Case |
|---|---|---|
| CDP (default) | (none) | Launches a dedicated browser instance via Chrome DevTools Protocol |
| Extension | --extension | Controls the user's existing Chrome browser via a Chrome Extension + WebSocket bridge |
Extension mode: Use when the user wants to operate their already-open Chrome (existing logins, cookies, tabs), or when the task requires the user's real session state.
CDP mode (default): Use for clean environments, headless automation, CI/CD, or profile-based session isolation.
All commands work identically in both modes — the only difference is the --extension flag (or ACTIONBOOK_EXTENSION=1).
CRITICAL RULE — Action Manual First (Per-Page-Type): Before executing ANY
actionbook browsercommand on a page, complete Phase 1 (actionbook search→actionbook get). This includes ALL browser commands:click,fill,text,eval,snapshot,screenshot, and any other interaction.This rule applies per page type. Every time you navigate to a page with a different URL pattern, repeat Phase 1 before any interaction:
- — query by task description for the new page type
What counts as a "different page type":
- Different URL path structure (e.g.,
x.com/home→x.com/:user/status/:id)- Different functional purpose (e.g., search results page → item detail page)
- Different domain or subdomain
- Note: Pagination, sorting, or refreshing within the same page type does NOT count
Common violation: Having prior knowledge of a site's DOM does NOT exempt you from this rule. Action Manual selectors are pre-verified and maintained; selectors from memory may be outdated.
# Step 1: Search for action manuals (always do this first)
actionbook search "arxiv search papers"
# Returns: area IDs with descriptions
# Step 2: Get the full manual (use area_id from search results)
actionbook get "arxiv.org:/search/advanced:default"
# Returns: Page structure, UI Elements with CSS/XPath selectors
# If you navigate to a NEW page type, repeat Steps 1-2 for that page.
# Example: after landing on a paper detail page:
# actionbook search "arxiv paper abstract page"
# actionbook get "arxiv.org:/abs/1910.06709:default"
After opening a page, choose your path:
Have Action Manual selectors? → Use them directly. Do not run snapshot.
Manual selector fails at runtime? → snapshot → retry with snapshot selectors (see Fallback Strategy).
No Action Manual at all? → snapshot as primary source.
actionbook browser open "https://arxiv.org/search/advanced"
actionbook browser fill "#terms-0-term" "Neural Network" actionbook browser select "#terms-0-field" "title" actionbook browser click "#date-filter_by-2" actionbook browser fill "#date-year" "2025" actionbook browser click "form[action='/search/advanced'] button.is-link"
actionbook browser wait-nav
actionbook browser text
actionbook browser close
Extension mode uses identical browser commands — just add --extension. But you must follow the full lifecycle below.
# Step 3: Open URL in user's Chrome
actionbook --extension browser open "https://arxiv.org/search/advanced"
# Step 4-7: Same commands, just add --extension
actionbook --extension browser fill "#terms-0-term" "Neural Network"
actionbook --extension browser select "#terms-0-field" "title"
actionbook --extension browser click "#date-filter_by-2"
actionbook --extension browser fill "#date-year" "2025"
actionbook --extension browser click "form[action='/search/advanced'] button.is-link"
actionbook --extension browser wait-nav
actionbook --extension browser text
# Step 8: Cleanup (CRITICAL — see Extension Mode Lifecycle below)
actionbook --extension browser close # release debug connection FIRST
actionbook extension stop # then stop bridge server
Extension mode tabs:
browser closecloses the current tab. Close tabs opened viabrowser openwhen the task is done. Do not close pre-existing tabs.
Action manuals return page URL, page structure (DOM hierarchy), and UI elements with selectors:
### button_advanced_search
- ID: button_advanced_search
- Description: Advanced search navigation button
- Type: link
- Allow Methods: click
- Selectors:
- css: button.button.is-small.is-cul-darker (confidence: 0.65)
- xpath: //button[contains(@class, 'button')] (confidence: 0.55)
- role: getByRole('link', { name: 'Advanced Search' }) (confidence: 0.9)
actionbook search "<query>" # Basic search
actionbook search "<query>" --domain site.com # Filter by domain
actionbook search "<query>" --url <url> # Filter by URL
actionbook search "<query>" -p 2 -s 20 # Page 2, 20 results
actionbook get "<area_id>" # Full details with selectors
# area_id format: "site.com:/path:area_name"
actionbook sources list # List available sources
actionbook sources search "<query>" # Search sources by keyword
Commands for managing the Chrome Extension bridge:
actionbook extension install # Install extension files to local config dir
actionbook extension path # Show extension directory (for Chrome "Load unpacked")
actionbook extension serve # Start WebSocket bridge (keep running in background)
actionbook extension stop # Stop the running bridge server (sends SIGTERM)
actionbook extension status # Check bridge and extension connection status
actionbook extension ping # Ping the extension to verify link is alive
Setup flow (one-time):
actionbook extension install — extract extension files and register native messaging hostchrome://extensions → enable Developer mode → Load unpacked → select the path from actionbook extension pathactionbook extension serve — start bridge (keep running)serve output → paste in extension popup → SaveConnection check before automation:
actionbook extension status # should show "running"
actionbook extension ping # should show "responded"
All browser commands work in both CDP and Extension mode. For Extension mode, add --extension flag or set ACTIONBOOK_EXTENSION=1.
actionbook browser open <url> # Open URL in new tab
actionbook browser goto <url> # Navigate current page
actionbook browser back # Go back
actionbook browser forward # Go forward
actionbook browser reload # Reload page
actionbook browser pages # List open tabs
actionbook browser switch <page_id> # Switch tab
actionbook browser close # Close browser
actionbook browser restart # Restart browser
actionbook browser connect <endpoint> # Connect to existing browser (CDP port or URL)
Every selector you pass to these commands must come from an Action Manual (actionbook get) or a snapshot taken in this session. Do not use selectors from memory or training data.
actionbook browser click "<selector>" # Click element
actionbook browser click "<selector>" --wait 1000 # Wait then click
actionbook browser fill "<selector>" "text" # Clear and type
actionbook browser type "<selector>" "text" # Append text
actionbook browser select "<selector>" "value" # Select dropdown
actionbook browser hover "<selector>" # Hover
actionbook browser focus "<selector>" # Focus
actionbook browser press Enter # Press key
actionbook browser upload <file> [<file2> ...] # Upload file(s)
actionbook browser upload <file> -s "<selector>" # Upload with selector
actionbook browser upload <file> --ref-id e0 # Upload with snapshot ref
actionbook browser text # Full page text
actionbook browser text "<selector>" # Element text
actionbook browser html # Full page HTML
actionbook browser html "<selector>" # Element HTML
actionbook browser snapshot # Accessibility tree
actionbook browser snapshot --filter interactive --max-tokens 500 # Focused snapshot
actionbook browser snapshot --diff # Show changes since last snapshot
actionbook browser viewport # Viewport dimensions
actionbook browser status # Browser detection info
actionbook browser info "<selector>" # Element details (visibility, position, styles)
actionbook browser console # Capture console logs
actionbook browser console --level error # Filter by level (log/info/warn/error)
actionbook browser console --duration 5000 # Listen for new messages (ms)
actionbook browser fetch "<url>" # One-shot fetch (navigate+wait+extract+close)
actionbook browser fetch "<url>" --format text --json # With format and JSON output
actionbook browser fetch "<url>" --lite # HTTP-first, skip browser for static pages
actionbook browser wait "<selector>" # Wait for element
actionbook browser wait "<selector>" --timeout 5000 # Custom timeout
actionbook browser wait-nav # Wait for navigation
actionbook browser wait-idle # Wait for network idle
actionbook browser wait-idle --timeout 15000 # Custom timeout
actionbook browser wait-fn "expression" # Wait for JS condition
actionbook browser wait-fn "document.querySelector('.results')" --timeout 5000
# Ensure target directory exists before saving screenshots
actionbook browser screenshot # Save screenshot.png
actionbook browser screenshot output.png # Custom path
actionbook browser screenshot --full-page # Full page
actionbook browser pdf output.pdf # Export as PDF
evalis last-resort only. Before usingbrowser evalwithquerySelector, you must have already runsnapshoton this page. Base selectors on snapshot/inspect output, never on memorized DOM knowledge.
actionbook browser eval "document.title" # Execute JS
actionbook browser inspect 100 200 # Inspect at coordinates
actionbook browser inspect 100 200 --desc "login btn" # With description
actionbook browser cookies list/get/set/delete/clear
actionbook browser cookies set "name" "value" --domain ".example.com"
actionbook browser storage list # List all localStorage keys
actionbook browser storage get "key" # Get value
actionbook browser storage set "key" "value" # Set value
actionbook browser storage remove "key" # Remove key
actionbook browser storage clear # Clear all
actionbook browser storage list --session # sessionStorage operations
actionbook browser storage get "key" --session
actionbook browser emulate iphone-14 # Preset device
actionbook browser emulate ipad # Tablet
actionbook browser emulate desktop-hd # 1920x1080
actionbook browser emulate 1280x720 # Custom resolution
# Batch execution (run multiple actions in one command)
actionbook browser batch --file actions.json
actionbook browser batch --file actions.json --delay 100 # Custom delay (ms)
cat actions.json | actionbook browser batch # From stdin
# Fingerprint rotation (stealth mode)
actionbook browser fingerprint rotate
actionbook browser fingerprint rotate --os windows --screen 1920x1080
# Output & Logging
actionbook --json <command> # JSON output
actionbook --verbose <command> # Verbose logging
actionbook --session-tag <tag> <command> # Tag operations for log correlation
# Browser Mode & Connection
actionbook --headless <command> # Headless mode (CDP only)
actionbook -P <profile> <command> # Use specific profile (CDP only)
actionbook --cdp <port|url> <command> # CDP connection
actionbook --extension <command> # Use Chrome Extension mode
# or: ACTIONBOOK_EXTENSION=1 actionbook <command>
# Performance & Resource Control
actionbook --block-images <command> # Block image downloads (2-5x faster)
actionbook --block-media <command> # Block images, fonts, CSS, media
# Stealth & Anti-Detection
actionbook --stealth <command> # Enable anti-bot detection
actionbook --stealth-os windows <command> # Stealth with OS override
actionbook --stealth-gpu rtx4080 <command> # Stealth with GPU override
# Page Behavior Control
actionbook --no-animations <command> # Disable CSS animations/transitions
actionbook --auto-dismiss-dialogs <command> # Auto-handle alert/confirm/prompt
# Advanced Features
actionbook --rewrite-urls <command> # Rewrite anti-scrape URLs (x.com→xcancel.com)
actionbook --wait-hint <hint> <command> # Domain-aware wait (instant/fast/normal/slow/heavy)
#id) over XPath when both are providedsnapshot when you already have Action Manual selectors — snapshot is a fallback, not a discovery stepbrowser eval with hardcoded/memorized selectors to bypass the workflowbrowser text or browser eval as the first command on a new page type without completing Phase 1browser close before stopping the bridge to release the debug connectionWhen you hit a login/auth wall (sign-in page, password prompt, MFA/OTP, CAPTCHA, account chooser):
search → get) for that new page type before further commands.Do not switch tools just because a login page appears.
Always clean up when the task is complete:
actionbook browser close as the final stepbrowser close to release debug connection → extension stop to stop bridgeActionbook stores pre-computed page data captured at indexing time. This data may become outdated as websites evolve:
When Action Manual selectors don't work, follow this ordered fallback chain:
actionbook browser snapshot to get the current accessibility tree; use selectors from the snapshot outputactionbook browser screenshot to see the current stateactionbook browser inspect <x> <y> to find elements at specific positionseval, verify:
snapshot on this page? (If no → snapshot first)eval if all checks pass.If actionbook search returns no results or action fails unexpectedly, use other available tools to continue the task.
# 1. Find selectors
actionbook search "airbnb search" --domain airbnb.com
# 2. Get detailed selectors (area_id from search results)
actionbook get "airbnb.com:/:default"
# 3. Automate using pre-verified selectors
actionbook browser open "https://www.airbnb.com"
actionbook browser fill "input[data-testid='structured-search-input-field-query']" "Tokyo"
actionbook browser click "button[data-testid='structured-search-input-search-button']"
actionbook browser wait-nav
actionbook browser text
actionbook browser close
# Verify bridge is running
actionbook extension status
# Use the user's existing logged-in session
actionbook --extension browser open "https://github.com/notifications"
actionbook --extension browser wait-nav
actionbook --extension browser text ".notifications-list"
actionbook --extension browser screenshot notifications.png
actionbook --extension browser close
When using Extension mode, always follow this complete lifecycle: pre-flight → connect → execute → cleanup.
Before any technical checks, ask the user whether they have the Actionbook Chrome Extension installed.
User confirms installed → proceed to Step 2 (Connect).
User says not installed → run the installation flow:
actionbook extension install actionbook extension path
Then guide the user to load it in Chrome:
chrome://extensions → enable Developer modeLimitation: The CLI can only verify that extension files exist locally. There is no way to detect whether Chrome has actually loaded the extension until a connection is attempted in Step 2.
Start the bridge server and attempt auto-pairing. Retry up to 3 times before considering manual fallback.
# Start bridge (run in background)
actionbook extension serve
# Attempt 1: Wait for auto-pairing via Native Messaging
sleep 3
actionbook extension ping
# → If ping succeeds → proceed to Step 3 (Execute)
# Attempt 2: If ping fails, wait longer and retry
sleep 5
actionbook extension ping
# → If ping succeeds → proceed to Step 3 (Execute)
# Attempt 3: Final retry
sleep 5
actionbook extension ping
# → If ping succeeds → proceed to Step 3 (Execute)
Only after all 3 auto-pair attempts fail , escalate based on the error:
chrome://extensions and retryserve output for manual paste in the extension popupactionbook extension status for diagnosticsIMPORTANT: Do NOT expose the session token prematurely. The token is a last-resort fallback — most users will connect successfully via auto-pair within 3 attempts.
actionbook --extension browser open "https://example.com"
# ... perform browser operations ...
# Step 1: Release the debugging connection (MUST come first)
actionbook --extension browser close
# Step 2: Stop the bridge server
actionbook extension stop
# Step 3: Verify Chrome no longer shows "debugging" banner
actionbook extension status # should show "not running"
WARNING: Skipping Step 1 and directly killing the bridge process will leave Chrome showing "Actionbook is debugging this browser". Always release the debug connection before stopping the bridge.
# Bridge not running?
actionbook extension serve # Start it
# Extension not responding?
actionbook extension ping # Check connectivity
# Token expired? (idle > 30 min)
# Restart serve and re-pair in extension popup
actionbook extension serve # Prints new token
# === Page Type 1: x.com/home (timeline) ===
actionbook search "twitter timeline" --domain x.com
actionbook get "x.com:/:default"
actionbook --extension browser open "https://x.com/home"
# Action Manual returned selectors → use them directly (no snapshot)
actionbook --extension browser text "<selector-from-manual>"
# === Navigate to Page Type 2: x.com/:user/status/:id ===
# Different page type → re-search before any interaction
actionbook search "twitter tweet detail" --domain x.com
# No results? Use snapshot fallback:
actionbook --extension browser snapshot
actionbook --extension browser text "<selector-from-snapshot>"
# === Back to Page Type 1 ===
actionbook --extension browser back
# Same page type as before — Action Manual selectors are still valid (page structure is stable).
# No need to re-search or re-snapshot. However, dynamic content (e.g., new tweets loaded)
# may differ — if you need fresh content, use `browser text` with the same Manual selectors.
# === Done — close the tab we opened ===
actionbook --extension browser close
For detailed patterns and best practices:
| Reference | Description |
|---|---|
| references/command-reference.md | Complete command reference with all features |
| references/authentication.md | Login flows, OAuth, 2FA handling, state reuse |
Weekly Installs
618
Repository
GitHub Stars
1.4K
First Seen
Jan 23, 2026
Security Audits
Gen Agent Trust HubPassSocketPassSnykWarn
Installed on
opencode531
codex527
gemini-cli514
github-copilot483
kimi-cli457
amp455
AI 代码实施计划编写技能 | 自动化开发任务分解与 TDD 流程规划工具
40,200 周安装
Trigger.dev 实时功能:从前端/后端实时订阅任务运行,流式传输数据
734 周安装
PPTX 文件处理全攻略:Python 脚本创建、编辑、分析 .pptx 文件内容与结构
735 周安装
Dokie AI PPT:AI驱动的专业演示文稿设计工具,支持HTML创意动效
737 周安装
PRD生成器:AI驱动产品需求文档工具,快速创建清晰可执行PRD
737 周安装
Devcontainer 设置技能:一键创建预配置开发容器,集成 Claude Code 和语言工具
739 周安装
Plankton代码质量工具:Claude Code自动格式化与Linter强制执行系统
741 周安装
actionbook searchactionbook get — if a manual exists, retrieve selectorsactionbook browser snapshot as fallback