Vision-Language-Action Agent Framework
A multi-domain, LLM-driven web automation framework that converts natural language instructions into executable browser actions. Built on Playwright for browser control and Ollama (qwen3:8b) for on-device LLM inference, the system supports authenticated CRUD operations, cross-domain task chaining, memory persistence, and Human-in-the-Loop (HITL) escalation.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β USER / CLI / DEMO INTERFACE β
β interactive_vla_demo.py β composite_orchestrator_v3.py β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β ORCHESTRATION LAYER β
β βββββββββββββββ ββββββββββββββββ ββββββββββββββββββββββββββββββ β
β β Composite β β Domain β β HITL Escalation Engine β β
β β Decomposer β β Router β β (missing var / failed β β
β β (LLM plan) β β β β extraction / step fail) β β
β ββββββββ¬ββββββββ ββββββββ¬ββββββββ ββββββββββββββ¬ββββββββββββββββ β
βββββββββββΌββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββ€
β βΌ βΌ βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β VLA UNIFIED AGENT (v1.3) β β
β β Instruction β DOM Extraction β LLM Plan β Action β Verify β β
β ββββββ¬βββββββββββββββββ¬βββββββββββββββββββ¬ββββββββββββββββββββββββ β
βββββββββΌβββββββββββββββββΌβββββββββββββββββββΌββββββββββββββββββββββββββ€
β βΌ βΌ βΌ β
β ββββββββββββ ββββββββββββββ ββββββββββββββββββββ β
β β LLM β β DOM β β Action Executor β β
β β Ollama β β Extraction β β (Playwright) β β
β β qwen3:8b β β data-vla-idβ β click/type/scroll β β
β ββββββββββββ ββββββββββββββ ββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β SUPPORT LAYERS β
β ββββββββββββββ βββββββββββββββββ βββββββββββββββββββββββββββββββ β
β β Memory β β Extraction β β CRUD Engines β β
β β Manager β β Verifier + β β Forum (Postmill) β β
β β (JSON) β β Retry Logic β β GitLab β β
β ββββββββββββββ βββββββββββββββββ βββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β LOCAL ADVERSARIAL DOMAINS β
β Store (port 8001) β Booking (port 8002) β
β Forum (port 9999) β GitLab (port 8023) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Domain
URL
Capabilities
Wikipedia
https://en.wikipedia.org
Search, navigate, extract facts
Google
https://www.google.com
Search queries
YouTube
https://www.youtube.com
Search + video playback
Store
http://localhost:8001
Product purchase flow
Booking
http://localhost:8002
Hotel reservation flow
Forum (Postmill)
http://localhost:9999
Authenticated CRUD (Create/Edit/Reply/Delete)
GitLab
http://localhost:8023
Authenticated CRUD (Project/Edit/Issue/Delete)
Composite
Multi-domain
Cross-domain task chaining
PLANβACTION Scaffold β LLM generates structured plans before acting
DOM Injection (data-vla-id) β Stable element targeting via injected attributes
Memory Persistence β User profile stored in memory_store.json, auto-filled in forms
Variable Extraction β Extract facts from pages and chain across steps
Extraction Verification β Regex validators for year/name/URL types
Retry + Fallback β Single retry with infobox scan β pattern scan β LLM re-extraction
HITL Escalation β Human-in-the-loop when extraction fails or variables are missing
Authenticated CRUD β LLM-driven LoginβCreateβEditβReply/Issue flows
Multi-Domain Chaining β Composite orchestrator decomposes instructions across domains
YouTube Playback β Detects watch intent, searches, and auto-plays videos
Input Grounding β Validates LLM-suggested actions against actual DOM state
Unified Agent (single domain)
.venv/bin/python vla_unified_agent_v1_3.py --instruction " Search for Alan Turing on Wikipedia." \
--start-url " https://en.wikipedia.org"
Composite Orchestrator V1.1 (cross-domain)
.venv/bin/python composite_orchestrator_v1_1.py --instruction \
" Find who created Python and search that person on Google."
Composite V2 (schema-safe + extraction verification)
.venv/bin/python composite_orchestrator_v2.py --scenarios composite_scenarios_v2.json
Composite V3 (HITL + full eval)
.venv/bin/python composite_orchestrator_v3.py --full-eval
.venv/bin/python composite_orchestrator_v3.py --instruction " Search for {{mystery_person}} on Google."
Interactive Demo (all domains)
.venv/bin/python interactive_vla_demo.py --interactive
.venv/bin/python interactive_vla_demo.py --full-demo
.venv/bin/python llm_crud_v1/run_llm_crud_suite.py
.venv/bin/python cross_domain_eval_v1_3.py
safe-webarena-agent/
β
βββ vla_unified_agent_v1_3.py # Core VLA agent (DOMβLLMβAction loop)
βββ vla_unified_agent_v1_2.py # Prior version (memory integration)
βββ vla_unified_agent_v1_1.py # Prior version (grounding)
βββ vla_unified_agent.py # Original unified agent
β
βββ composite_orchestrator_v1.py # Composite v1 (basic chaining)
βββ composite_orchestrator_v1_1.py # Composite v1.1 (YouTube playback)
βββ composite_orchestrator_v1_2.py # Composite v1.2 (enhanced decomposition)
βββ composite_orchestrator_v2.py # Composite v2 (schema-safe, extraction verify)
βββ composite_orchestrator_v3.py # Composite v3 (HITL + full eval suite)
β
βββ interactive_vla_demo.py # Unified demo entry point (--interactive / --full-demo)
β
βββ memory_manager_v1.py # Memory CRUD + regex extraction
βββ memory_store.json # Persistent user profile data
β
βββ input_grounding_v1_3.py # Input grounding / DOM validation
βββ wikipedia_support.py # Wikipedia-specific helpers
βββ youtube_playback_extension_v1.py # YouTube playback detection + execution
βββ type_support.py # Typing/input support utilities
β
βββ cross_domain_eval_v1_3.py # Cross-domain evaluation runner
βββ cross_domain_scenarios_v1_3.json # Cross-domain test scenarios
β
βββ composite_scenarios_v1.json # Composite v1 scenario definitions
βββ composite_scenarios_v2.json # Composite v2 scenario definitions
β
βββ experiment_runner.py # Phase 1 experiment runner (rule-based)
βββ experiment_runner_llm.py # Phase 2 experiment runner (LLM)
βββ experiment_runner_llm_phase2.py # Phase 2 refinement
βββ experiment_runner_llm_phase3.py # Phase 3 (action verification)
βββ experiment_runner_llm_phase3b.py # Phase 3b (relaxed verification)
β
βββ llm_policy.py # LLM policy v1
βββ llm_policy_phase2.py # LLM policy phase 2
βββ llm_policy_phase3.py # LLM policy phase 3
βββ llm_policy_phase3b.py # LLM policy phase 3b
β
βββ llm_crud_v1/ # LLM-driven CRUD operations
β βββ forum_crud_llm.py # Forum CRUD (Postmill)
β βββ gitlab_crud_llm.py # GitLab CRUD
β βββ llm_dom_agent.py # DOM agent for CRUD
β βββ run_llm_crud_suite.py # CRUD evaluation suite
β βββ reports/ # CRUD reports
β βββ runs/ # CRUD run traces
β
βββ auth_domain_crud_v1/ # Authenticated domain CRUD (earlier version)
β βββ forum_crud_agent.py
β βββ gitlab_crud_agent.py
β βββ crud_runner.py
β βββ crud_scenarios.json
β
βββ reports_*/ # Per-version evaluation reports
β βββ reports_unified_v1_3/
β βββ reports_cross_domain_v1_3/
β βββ reports_composite_v1/
β βββ reports_composite_v2/
β βββ reports_composite_v3/
β βββ reports_memory_v1/
β βββ reports_youtube_playback_v1/
β
βββ runs/ # Per-run execution traces + screenshots
β
βββ third_party/webarena/ # WebArena benchmark reference code
β
βββ README.md # This file
βββ SYSTEM_OVERVIEW_REPORT.md # Technical system overview
βββ ARCHITECTURE_BRIEF.md # Architecture brief for teammates
Dependency
Version
Purpose
Python
3.10+
Runtime
Ollama
Latest
Local LLM inference (qwen3:8b)
Playwright
Latest
Browser automation
Port
Service
8001
Local Store (adversarial web app)
8002
Local Booking (adversarial web app)
8023
GitLab (self-hosted)
9999
Postmill Forum (self-hosted)
11434
Ollama API
1. Clone and create virtual environment
cd safe-webarena-agent
python3 -m venv .venv
source .venv/bin/activate
pip install playwright
playwright install chromium
pip install requests
ollama serve
ollama pull qwen3:8b
# Store (port 8001)
cd local_store_v2 && python -m http.server 8001
# Booking (port 8002)
cd local_booking_v2 && python -m http.server 8002
# Forum and GitLab should already be running on their respective ports
# Check Ollama
curl http://localhost:11434/api/tags
# Check local services
curl -s http://localhost:8001/index.html | head -5
curl -s http://localhost:8002/step1_service.html | head -5
# Run the interactive demo β shows all domains
.venv/bin/python interactive_vla_demo.py --full-demo
Comprehensive Evaluation (10 minutes)
# Full 10-domain eval with HITL scenarios
.venv/bin/python composite_orchestrator_v3.py --full-eval
# Free-form instruction mode
.venv/bin/python interactive_vla_demo.py --interactive
# Try: "Search for Alan Turing on Wikipedia."
# Try: "Create a new post on the forum."
# Try: "Buy one notebook."
.venv/bin/python llm_crud_v1/run_llm_crud_suite.py
Service
Username
Password
Forum (Postmill)
MarvelsGrantMan136
test1234
GitLab
root
Kite$7v_Mango!Q2-Quartz
All runs generate structured reports in reports_*/ directories and runs/ with:
JSON result summaries
Markdown reports with tables
Screenshots (when visual=True)
Execution traces with per-step timing