- Fix French accent characters (é/è/ê/ç/â/ô) across all 14 HAND.toml files - Fix German special characters (ä/ö/ü/ß) across all 14 HAND.toml files - Add category translations to all 6 i18n language blocks in all 14 hands - Enhance SKILL.md content for 9 hands with practical examples and workflows - Trim bloated SKILL.md files (apitester 1400→892, devops 1301→870) - Rewrite root README.md with accurate stats, complete hand/integration tables - Update hands/README.md with full 14-hand listing and i18n documentation
465 lines
17 KiB
TOML
465 lines
17 KiB
TOML
id = "browser"
|
|
version = "1.0.0"
|
|
name = "Browser Hand"
|
|
description = "Autonomous web browser — navigates sites, fills forms, clicks buttons, and completes multi-step web tasks with user approval for purchases"
|
|
|
|
category = "productivity"
|
|
icon = "🌐"
|
|
|
|
tools = [
|
|
"browser_navigate",
|
|
"browser_click",
|
|
"browser_type",
|
|
"browser_screenshot",
|
|
"browser_read_page",
|
|
"browser_close",
|
|
"web_search",
|
|
"web_fetch",
|
|
"memory_store",
|
|
"memory_recall",
|
|
"knowledge_add_entity",
|
|
"knowledge_add_relation",
|
|
"knowledge_query",
|
|
"schedule_create",
|
|
"schedule_list",
|
|
"schedule_delete",
|
|
"file_write",
|
|
"file_read",
|
|
]
|
|
|
|
[routing]
|
|
aliases = [
|
|
"open website",
|
|
"navigate to",
|
|
"fill form",
|
|
"click button",
|
|
"web login",
|
|
"browser automation",
|
|
"browse web",
|
|
"scrape page",
|
|
]
|
|
weak_aliases = [
|
|
"web page",
|
|
"submit form",
|
|
"web task",
|
|
"browser task",
|
|
"open browser",
|
|
"web automation",
|
|
]
|
|
|
|
[[requires]]
|
|
key = "python3"
|
|
label = "Python 3 must be installed"
|
|
requirement_type = "binary"
|
|
check_value = "python3"
|
|
description = "Python 3 is required for installing and running the Playwright browser automation library. Python 3.8 or newer is recommended."
|
|
|
|
[requires.install]
|
|
macos = "brew install python3"
|
|
windows = "winget install Python.Python.3.12"
|
|
linux_apt = "sudo apt install python3"
|
|
linux_dnf = "sudo dnf install python3"
|
|
linux_pacman = "sudo pacman -S python"
|
|
pip = "python3 --version"
|
|
manual_url = "https://www.python.org/downloads/"
|
|
estimated_time = "1-3 min"
|
|
|
|
[[requires]]
|
|
key = "chromium"
|
|
label = "Chromium or Google Chrome must be installed"
|
|
requirement_type = "binary"
|
|
check_value = "chromium"
|
|
optional = true
|
|
description = "A Chromium-based browser is recommended. Playwright can install its own bundled browser if none is found. Google Chrome, Chromium, or any Chromium derivative will also work. You can set the CHROME_PATH environment variable to point to your browser binary."
|
|
|
|
[requires.install]
|
|
macos = "brew install --cask google-chrome"
|
|
windows = "winget install Google.Chrome"
|
|
linux_apt = "sudo apt install chromium-browser"
|
|
linux_dnf = "sudo dnf install chromium"
|
|
linux_pacman = "sudo pacman -S chromium"
|
|
manual_url = "https://www.google.com/chrome/"
|
|
estimated_time = "1-3 min"
|
|
|
|
# ─── Configurable settings ───────────────────────────────────────────────────
|
|
|
|
[[settings]]
|
|
key = "headless"
|
|
label = "Headless Mode"
|
|
description = "Run the browser without a visible window (recommended for servers)"
|
|
setting_type = "toggle"
|
|
default = "true"
|
|
|
|
[[settings]]
|
|
key = "approval_mode"
|
|
label = "Purchase Approval"
|
|
description = "Require explicit user confirmation before completing any purchase or payment"
|
|
setting_type = "toggle"
|
|
default = "true"
|
|
|
|
[[settings]]
|
|
key = "max_pages_per_task"
|
|
label = "Max Pages Per Task"
|
|
description = "Maximum number of page navigations allowed per task to prevent runaway browsing"
|
|
setting_type = "select"
|
|
default = "20"
|
|
|
|
[[settings.options]]
|
|
value = "10"
|
|
label = "10 pages (conservative)"
|
|
|
|
[[settings.options]]
|
|
value = "20"
|
|
label = "20 pages (balanced)"
|
|
|
|
[[settings.options]]
|
|
value = "50"
|
|
label = "50 pages (thorough)"
|
|
|
|
[[settings]]
|
|
key = "default_wait"
|
|
label = "Default Wait After Action"
|
|
description = "How long to wait after clicking or navigating for the page to settle"
|
|
setting_type = "select"
|
|
default = "auto"
|
|
|
|
[[settings.options]]
|
|
value = "auto"
|
|
label = "Auto-detect (wait for DOM)"
|
|
|
|
[[settings.options]]
|
|
value = "1"
|
|
label = "1 second"
|
|
|
|
[[settings.options]]
|
|
value = "3"
|
|
label = "3 seconds"
|
|
|
|
[[settings]]
|
|
key = "screenshot_on_action"
|
|
label = "Screenshot After Actions"
|
|
description = "Automatically take a screenshot after every click/navigate for visual verification"
|
|
setting_type = "toggle"
|
|
default = "false"
|
|
|
|
# ─── Agent configuration ─────────────────────────────────────────────────────
|
|
|
|
[agent]
|
|
name = "browser-hand"
|
|
description = "AI web browser — navigates websites, fills forms, searches products, and completes multi-step web tasks autonomously with safety guardrails"
|
|
module = "builtin:chat"
|
|
provider = "default"
|
|
model = "default"
|
|
max_tokens = 16384
|
|
temperature = 0.3
|
|
max_iterations = 60
|
|
system_prompt = """You are Browser Hand — an autonomous web browser agent that interacts with real websites on behalf of the user.
|
|
|
|
## Core Capabilities
|
|
|
|
You can navigate to URLs, click buttons/links, fill forms, read page content, and take screenshots. You have a real browser session that persists across tool calls within a conversation.
|
|
|
|
## Multi-Phase Pipeline
|
|
|
|
### Phase 1 — Understand the Task
|
|
Parse the user's request and plan your approach:
|
|
- What website(s) do you need to visit?
|
|
- What information do you need to find or what action do you need to perform?
|
|
- What are the success criteria?
|
|
|
|
### Phase 2 — Navigate & Observe
|
|
1. Use `browser_navigate` to go to the target URL
|
|
2. Read the page content to understand the layout
|
|
3. Identify the relevant elements (buttons, links, forms, search boxes)
|
|
|
|
### Phase 3 — Interact
|
|
1. Use `browser_click` for buttons and links (use CSS selectors or visible text)
|
|
2. Use `browser_type` for filling form fields
|
|
3. Use `browser_read_page` after each action to see the updated state
|
|
4. Use `browser_screenshot` when you need visual verification
|
|
|
|
### Phase 4 — MANDATORY Purchase/Payment Approval
|
|
**CRITICAL RULE**: Before completing ANY purchase, payment, or form submission that involves money:
|
|
1. Summarize what you are about to buy/pay for
|
|
2. Show the total cost
|
|
3. List all items in the cart
|
|
4. STOP and ask the user for explicit confirmation
|
|
5. Only proceed after receiving clear approval
|
|
|
|
NEVER auto-complete purchases. NEVER click "Place Order", "Pay Now", "Confirm Purchase", or any payment button without user approval.
|
|
|
|
### Phase 5 — Report Results
|
|
After completing the task:
|
|
1. Summarize what was accomplished
|
|
2. Include relevant details (prices, confirmation numbers, etc.)
|
|
3. Save important data to memory for future reference
|
|
|
|
## CSS Selector Cheat Sheet
|
|
|
|
Common selectors for web interaction:
|
|
- `#id` — element by ID (e.g., `#search-box`, `#add-to-cart`)
|
|
- `.class` — element by class (e.g., `.btn-primary`, `.product-title`)
|
|
- `input[name="email"]` — input by name attribute
|
|
- `input[type="search"]` — search inputs
|
|
- `button[type="submit"]` — submit buttons
|
|
- `a[href*="cart"]` — links containing "cart" in href
|
|
- `[data-testid="checkout"]` — elements with test IDs
|
|
- `select[name="quantity"]` — dropdown selectors
|
|
|
|
When CSS selectors fail, fall back to clicking by visible text content.
|
|
|
|
## Common Web Interaction Patterns
|
|
|
|
### Search Pattern
|
|
1. Navigate to site
|
|
2. Find search box: `input[type="search"]`, `input[name="q"]`, `#search`
|
|
3. Type query with `browser_type`
|
|
4. Click search button or the text will auto-submit
|
|
5. Read results
|
|
|
|
### Login Pattern
|
|
1. Navigate to login page
|
|
2. Fill email/username: `input[name="email"]` or `input[type="email"]`
|
|
3. Fill password: `input[name="password"]` or `input[type="password"]`
|
|
4. Click login button: `button[type="submit"]`, `.login-btn`
|
|
5. Verify login success by reading page
|
|
|
|
### E-commerce Pattern
|
|
1. Search for product
|
|
2. Click product from results
|
|
3. Select options (size, color, quantity)
|
|
4. Click "Add to Cart"
|
|
5. Navigate to cart
|
|
6. Review items and total
|
|
7. **STOP — Ask user for purchase approval**
|
|
8. Only proceed to checkout after approval
|
|
|
|
### Form Filling Pattern
|
|
1. Navigate to form page
|
|
2. Read form structure
|
|
3. Fill fields one by one with `browser_type`
|
|
4. Use `browser_click` for checkboxes, radio buttons, dropdowns
|
|
5. Screenshot before submission for verification
|
|
6. Submit form
|
|
|
|
## Error Recovery
|
|
|
|
- If a click fails, try a different selector or use visible text
|
|
- If a page doesn't load, wait and retry with `browser_navigate`
|
|
- If you get a CAPTCHA, inform the user — you cannot solve CAPTCHAs
|
|
- If a login is required, ask the user for credentials (never store passwords)
|
|
- If blocked or rate-limited, wait and try again, or inform the user
|
|
|
|
## Security Rules
|
|
|
|
- NEVER store passwords or credit card numbers in memory
|
|
- NEVER auto-complete payments without user approval
|
|
- NEVER navigate to URLs from untrusted sources without checking them
|
|
- NEVER fill in credentials without the user explicitly providing them
|
|
- If you encounter suspicious or phishing-like content, warn the user immediately
|
|
- Always verify you're on the correct domain before entering sensitive information
|
|
|
|
## Session Management
|
|
|
|
- Your browser session persists across messages in this conversation
|
|
- Cookies and login state are maintained
|
|
- Use `browser_close` when you're done to free resources
|
|
- The browser auto-closes when the conversation ends
|
|
|
|
Update stats via memory_store after each task:
|
|
- `browser_hand_pages_visited` — increment by pages navigated
|
|
- `browser_hand_tasks_completed` — increment by 1
|
|
- `browser_hand_screenshots_taken` — increment by screenshots captured
|
|
"""
|
|
|
|
[dashboard]
|
|
[[dashboard.metrics]]
|
|
label = "Pages Visited"
|
|
memory_key = "browser_hand_pages_visited"
|
|
format = "number"
|
|
|
|
[[dashboard.metrics]]
|
|
label = "Tasks Completed"
|
|
memory_key = "browser_hand_tasks_completed"
|
|
format = "number"
|
|
|
|
[[dashboard.metrics]]
|
|
label = "Screenshots"
|
|
memory_key = "browser_hand_screenshots_taken"
|
|
format = "number"
|
|
|
|
# ─── Token & Performance Metadata ─────────────────────────────────────────────
|
|
|
|
[metadata]
|
|
frequency = "continuous"
|
|
token_consumption = "low"
|
|
default_active = true
|
|
activation_warning = "Browser hand runs continuously but mainly consumes tokens when actively performing web tasks."
|
|
|
|
# ─── Internationalization (optional) ─────────────────────────────────────────
|
|
# All i18n sections are optional. Without them, the English values above are used.
|
|
# To localize, add [i18n.LANG] sections (e.g. zh, ja, ko, es, fr, de).
|
|
# Settings translations are also optional — omit to keep English labels.
|
|
|
|
# ─── Chinese (简体中文) ────────────────────────────────────────────────────
|
|
|
|
[i18n.zh]
|
|
name = "浏览器 Hand"
|
|
description = "自主网页浏览器——导航网站、填写表单、点击按钮,经用户批准后完成多步骤网页任务"
|
|
category = "生产力"
|
|
|
|
[i18n.zh.settings.headless]
|
|
label = "无头模式"
|
|
description = "在不显示浏览器窗口的情况下运行(推荐用于服务器环境)"
|
|
|
|
[i18n.zh.settings.approval_mode]
|
|
label = "购买审批"
|
|
description = "在完成任何购买或支付操作前,需要用户明确确认"
|
|
|
|
[i18n.zh.settings.max_pages_per_task]
|
|
label = "每任务最大页面数"
|
|
description = "每个任务允许的最大页面导航次数,防止无限浏览"
|
|
|
|
[i18n.zh.settings.default_wait]
|
|
label = "操作后默认等待"
|
|
description = "点击或导航后等待页面稳定的时长"
|
|
|
|
[i18n.zh.settings.screenshot_on_action]
|
|
label = "操作后截图"
|
|
description = "每次点击/导航后自动截图,用于视觉验证"
|
|
|
|
# ─── Japanese (日本語) ────────────────────────────────────────────────────
|
|
|
|
[i18n.ja]
|
|
name = "ブラウザ Hand"
|
|
description = "自律型ウェブブラウザ——サイトのナビゲーション、フォーム入力、ボタンクリック、ユーザー承認付きの複数ステップWebタスクの実行"
|
|
category = "生産性"
|
|
|
|
[i18n.ja.settings.headless]
|
|
label = "ヘッドレスモード"
|
|
description = "ブラウザウィンドウを表示せずに実行する(サーバー環境に推奨)"
|
|
|
|
[i18n.ja.settings.approval_mode]
|
|
label = "購入承認"
|
|
description = "購入や支払いを完了する前にユーザーの明示的な確認を求める"
|
|
|
|
[i18n.ja.settings.max_pages_per_task]
|
|
label = "タスクあたりの最大ページ数"
|
|
description = "暴走的なブラウジングを防ぐため、タスクごとに許可されるページ遷移の最大数"
|
|
|
|
[i18n.ja.settings.default_wait]
|
|
label = "操作後のデフォルト待機時間"
|
|
description = "クリックやナビゲーション後、ページが安定するまでの待機時間"
|
|
|
|
[i18n.ja.settings.screenshot_on_action]
|
|
label = "操作後のスクリーンショット"
|
|
description = "クリック/ナビゲーションのたびに自動的にスクリーンショットを撮影し、視覚的に確認する"
|
|
|
|
# ─── Spanish (Español) ────────────────────────────────────────────────────
|
|
|
|
[i18n.es]
|
|
name = "Hand de Navegador"
|
|
description = "Navegador web autónomo — navega sitios, completa formularios, hace clic en botones y realiza tareas web de múltiples pasos con aprobación del usuario para compras"
|
|
category = "Productividad"
|
|
|
|
[i18n.es.settings.headless]
|
|
label = "Modo sin interfaz"
|
|
description = "Ejecutar el navegador sin ventana visible (recomendado para servidores)"
|
|
|
|
[i18n.es.settings.approval_mode]
|
|
label = "Aprobación de compras"
|
|
description = "Requerir confirmación explícita del usuario antes de completar cualquier compra o pago"
|
|
|
|
[i18n.es.settings.max_pages_per_task]
|
|
label = "Máximo de páginas por tarea"
|
|
description = "Número máximo de navegaciones de página permitidas por tarea para evitar navegación descontrolada"
|
|
|
|
[i18n.es.settings.default_wait]
|
|
label = "Espera predeterminada tras acción"
|
|
description = "Cuánto tiempo esperar después de hacer clic o navegar para que la página se estabilice"
|
|
|
|
[i18n.es.settings.screenshot_on_action]
|
|
label = "Captura de pantalla tras acciones"
|
|
description = "Tomar automáticamente una captura de pantalla después de cada clic/navegación para verificación visual"
|
|
|
|
# ─── French (Français) ────────────────────────────────────────────────────
|
|
|
|
[i18n.fr]
|
|
name = "Hand Navigateur"
|
|
description = "Navigateur web autonome — navigue sur les sites, remplit les formulaires, clique sur les boutons et exécute des tâches web multi-étapes avec approbation utilisateur pour les achats"
|
|
category = "Productivité"
|
|
|
|
[i18n.fr.settings.headless]
|
|
label = "Mode sans interface"
|
|
description = "Exécuter le navigateur sans fenêtre visible (recommandé pour les serveurs)"
|
|
|
|
[i18n.fr.settings.approval_mode]
|
|
label = "Approbation des achats"
|
|
description = "Exiger la confirmation explicite de l'utilisateur avant de finaliser tout achat ou paiement"
|
|
|
|
[i18n.fr.settings.max_pages_per_task]
|
|
label = "Pages maximum par tâche"
|
|
description = "Nombre maximum de navigations de page autorisées par tâche pour éviter une navigation incontrôlée"
|
|
|
|
[i18n.fr.settings.default_wait]
|
|
label = "Attente par défaut après action"
|
|
description = "Durée d'attente après un clic ou une navigation pour que la page se stabilise"
|
|
|
|
[i18n.fr.settings.screenshot_on_action]
|
|
label = "Capture d'écran après action"
|
|
description = "Prendre automatiquement une capture d'écran après chaque clic/navigation pour vérification visuelle"
|
|
|
|
# ─── German (Deutsch) ────────────────────────────────────────────────────
|
|
|
|
[i18n.de]
|
|
name = "Browser-Hand"
|
|
description = "Autonomer Webbrowser — navigiert Websites, füllt Formulare aus, klickt Schaltflächen und führt mehrstufige Webaufgaben mit Benutzerfreigabe für Käufe aus"
|
|
category = "Produktivität"
|
|
|
|
[i18n.de.settings.headless]
|
|
label = "Headless-Modus"
|
|
description = "Browser ohne sichtbares Fenster ausführen (empfohlen für Server)"
|
|
|
|
[i18n.de.settings.approval_mode]
|
|
label = "Kaufgenehmigung"
|
|
description = "Ausdrückliche Benutzerbestätigung vor dem Abschluss eines Kaufs oder einer Zahlung erforderlich"
|
|
|
|
[i18n.de.settings.max_pages_per_task]
|
|
label = "Maximale Seiten pro Aufgabe"
|
|
description = "Maximale Anzahl erlaubter Seitennavigationen pro Aufgabe, um unkontrolliertes Surfen zu verhindern"
|
|
|
|
[i18n.de.settings.default_wait]
|
|
label = "Standard-Wartezeit nach Aktion"
|
|
description = "Wartezeit nach einem Klick oder einer Navigation, bis sich die Seite stabilisiert hat"
|
|
|
|
[i18n.de.settings.screenshot_on_action]
|
|
label = "Screenshot nach Aktion"
|
|
description = "Nach jedem Klick/jeder Navigation automatisch einen Screenshot für visuelle Überprüfung erstellen"
|
|
|
|
# ─── Korean (한국어) ────────────────────────────────────────────────────
|
|
|
|
[i18n.ko]
|
|
name = "브라우저 Hand"
|
|
description = "자율 웹 브라우저 — 사이트 탐색, 양식 작성, 버튼 클릭, 구매 시 사용자 승인을 받아 다단계 웹 작업 수행"
|
|
category = "생산성"
|
|
|
|
[i18n.ko.settings.headless]
|
|
label = "헤드리스 모드"
|
|
description = "브라우저 창을 표시하지 않고 실행 (서버 환경에 권장)"
|
|
|
|
[i18n.ko.settings.approval_mode]
|
|
label = "구매 승인"
|
|
description = "구매 또는 결제 완료 전 사용자의 명시적 확인 필요"
|
|
|
|
[i18n.ko.settings.max_pages_per_task]
|
|
label = "작업당 최대 페이지 수"
|
|
description = "작업당 허용되는 최대 페이지 탐색 횟수 (무한 브라우징 방지)"
|
|
|
|
[i18n.ko.settings.default_wait]
|
|
label = "동작 후 기본 대기"
|
|
description = "클릭 또는 탐색 후 페이지가 안정될 때까지 대기하는 시간"
|
|
|
|
[i18n.ko.settings.screenshot_on_action]
|
|
label = "동작 후 스크린샷"
|
|
description = "클릭/탐색 후 자동으로 스크린샷을 캡처하여 시각적으로 검증"
|