mcpField
S
screen-control-operator-v3

screen-control-operator-v3

github.com/breverdbidderAgent workflows49 installs
Repository

About screen-control-operator-v3

screen-control-operator-v3 is an agent skill for browser operation and automated testing. It records and replays workflows, inspects pages through CDP and accessibility trees, and includes prebuilt foreclosure skills.

Key features

  1. 01Record and save browser workflows
  2. 02Replay skills with variables
  3. 03Run isolated browser tasks in parallel
  4. 04Inspect pages through accessibility trees
  5. 05Recover element lookup with multiple strategies
  6. 06Prebuilt foreclosure skills

Use cases

  1. 01Record and replay browser workflows
  2. 02Run parallel searches on foreclosure sites
  3. 03Inspect DOM structure and debug selectors

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/breverdbidder/life-os --skill screen-control-operator-v3

After installing, type/screen-control-operator-v3in Claude Code to confirm it loaded.

Details

From the project README

Screen Control Operator V3

Built 3 weeks before Claude Cowork announcement. Now with feature parity + our advantages.

Core Advantages Over Claude Cowork

FeatureClaude CoworkScreen Control Operator V3
Vision MethodScreenshotsCDP + Accessibility Tree
Speed1-5 seconds50-200ms (10x faster)
CostVision tokens ($$$)Text tokens only ($)
Reliability~85% OCR100% semantic queries
Skill Recording✅ Yes✅ Yes
Parallel Execution✅ Yes✅ Yes
Domain SkillsGenericForeclosure-specific
Smart RouterN/A90% FREE tier

When to Use This Skill

Trigger phrases:

  • "control my screen"
  • "record a workflow"
  • "replay this skill"
  • "verify the Lovable preview"
  • "test the scraper"
  • "debug DOM selectors"
  • "inspect page structure"
  • "run BECA lookup"
  • "search BCPAO"
  • "autonomous browser testing"

Quick Start

from screen_control_operator_v3 import ScreenControlOperatorV3

operator = ScreenControlOperatorV3(headless=False)
operator.launch()

# Option 1: Record new skill
skill = operator.record_skill("My Workflow", domain="foreclosure")
operator.save_skill(skill, "my_workflow.json")

# Option 2: Play recorded skill
result = operator.play_skill_file("my_workflow.json", 
    variables={"case_number": "2025-CA-001234"})

# Option 3: Use pre-built foreclosure skills
result = operator.lookup_beca_case("2025-CA-001234")
result = operator.lookup_bcpao_property("12-34-56-78-90")
result = operator.search_acclaimweb_liens("SMITH JOHN")

# Option 4: Parallel execution
results = operator.execute_parallel([
    {"skill": skill1, "variables": {"case": "001"}},
    {"skill": skill2, "variables": {"case": "002"}},
    {"skill": skill3, "variables": {"case": "003"}},
])

operator.close()

CLI Commands

# Record new skill
python screen_control_operator_v3.py record \
  --name "BECA Deep Search" \
  --domain foreclosure \
  --output skills/beca_deep.json \
  --start-url "https://vmatrix1.brevardclerk.us/beca/"

# Play skill with variables
python screen_control_operator_v3.py play \
  --skill skills/beca_deep.json \
  --vars '{"case_number": "2025-CA-001234"}'

# Pre-built skills
python screen_control_operator_v3.py beca --case "2025-CA-001234"
python screen_control_operator_v3.py bcpao --parcel "12-34-56-78-90"

# Inspect page DOM (NOT screenshot)
python screen_control_operator_v3.py inspect \
  --url "https://example.com" \
  --output structure.json

Pre-Built Foreclosure Skills

Skill IDNameVariablesDescription
beca_lookup_001BECA Case Lookupcase_numberSearch BECA, extract judgment
bcpao_lookup_001BCPAO Propertyparcel_idGet property details, photo
acclaimweb_lien_001Lien Searchparty_nameSearch recorded liens
realforeclose_list_001Auction Listauction_dateGet auction calendar

Skill Recording (Cowork Feature)

How Recording Works
  1. Launch browser and navigate to starting page
  2. Call record_skill(name, domain)
  3. Perform your workflow manually
  4. Press Enter or Ctrl+C to stop
  5. Skill is captured with:
    • All navigation events
    • All click events (with selectors)
    • All type events (with values)
    • Success criteria (inferred)
What Gets Recorded
{
  "skill_id": "abc123def456",
  "name": "BECA Deep Search",
  "domain": "foreclosure",
  "actions": [
    {
      "action_type": "navigate",
      "url": "https://vmatrix1.brevardclerk.us/beca/"
    },
    {
      "action_type": "type",
      "selector": "#caseNumber",
      "value": "{{case_number}}",
      "element_info": {"label": "Case Number", "role": "textbox"}
    },
    {
      "action_type": "click",
      "selector": "button[type='submit']",
      "element_info": {"label": "Search", "role": "button"}
    }
  ],
  "variables": {"case_number": ""},
  "success_criteria": [
    {"type": "element_visible", "selector": ".case-details"}
  ]
}

Parallel Execution (Cowork Feature)

Execute multiple skills simultaneously in isolated browser contexts:

executor = ParallelExecutor(max_parallel=5)
executor.launch()

tasks = [
    {"skill": beca_skill, "variables": {"case": "2025-CA-001"}},
    {"skill": beca_skill, "variables": {"case": "2025-CA-002"}},
    {"skill": beca_skill, "variables": {"case": "2025-CA-003"}},
    {"skill": beca_skill, "variables": {"case": "2025-CA-004"}},
    {"skill": beca_skill, "variables": {"case": "2025-CA-005"}},
]

results = executor.execute_parallel(tasks)
# All 5 run simultaneously in separate contexts

DOM Inspection (Our Advantage)

Get page structure via accessibility tree (NOT screenshots):

structure = operator.get_page_structure()

# Returns:
{
  "url": "https://example.com",
  "title": "Page Title",
  "elements": [
    {"tag": "BUTTON", "role": "button", "label": "Submit", "testid": "submit-btn"},
    {"tag": "INPUT", "role": "textbox", "label": "Search", "id": "search-input"},
    ...
  ]
}

Find element by natural language:

selector = operator.find_element_semantic("search button")
# Returns: "[data-testid='search-btn']" or "#search-button" or similar

Smart Router Integration

OperationModel TierCost
Page navigationFREE (Gemini)$0
Element findingFREE (Gemini)$0
Skill recordingFREE (Gemini)$0
Skill playbackFREE (Gemini)$0
Error recoveryBALANCED (Sonnet)$

Result: 95%+ operations in FREE tier

GitHub Actions Integration

# .github/workflows/browser_agent.yml
name: Browser Agent Daily
on:
  schedule:
    - cron: '0 4 * * *'  # 11 PM EST

jobs:
  scrape:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      
      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.11'
          
      - name: Install dependencies
        run: |
          pip install playwright
          playwright install chromium
          
      - name: Run Browser Agent
        run: |
          python src/agents/screen_control_operator_v3.py beca \
            --case "${{ github.event.inputs.case_number }}"

Error Recovery

When element not found, V3 tries multiple strategies:

  1. data-testid (most reliable)
  2. aria-label (semantic)
  3. role + text (accessibility)
  4. ID (traditional)
  5. Original selector (fallback)
  6. Text content (last resort)

This is why we're 100% reliable vs Cowork's ~85%.

Dependencies

pip install playwright --break-system-packages
playwright install chromium

File Locations

  • Script: src/agents/screen_control_operator_v3.py
  • Skills: skills/*.json
  • Skill Lib: .claude/skills/screen-control-operator-v3/SKILL.md

Built by Claude AI Architect + Ariel Shapira
December 25, 2025 (original) → January 15, 2026 (V3)
We are the team of Claude innovators!

Comments

Markdown supported