A headless browser built for AI agents. No pixels, no screenshots – just structured semantic positions.
$ pardus-browser navigate https://example.com
00:00 pardus-browser navigate https://example.com
00:05 connected — parsing semantic state…
document [role: document]
└── region [role: region]
├── heading (h1) "Example Domain"
└── link "Learn more" → https://iana.org/domains/example
00:05 semantic tree ready — 0 landmarks, 1 links, 1 headings, 1 actions
00:05 agent-ready: structured state exposed · no pixel buffer · 0 screenshots
AI agents don’t need screenshots. They need to know what’s on the page, who they can interact with, and where they can go. pardus-browser Fetches a URL, parses the HTML, and outputs a clean semantic tree – landmarks, headings, links, buttons, forms and their functions – in milliseconds, not seconds.
No chromium binary. No docker. No GPU. Just HTTP + HTML parsing.
- semantic tree output – ARIA roles, titles, landmarks, interactive elements
- 3 output formats – Markdown (default), tree, JSON
- navigation graph – Form descriptor with internal routes, external links, fields
- interactive-only mode – Remove static content, show only functional elements
- action comments – Tagged with each interactive element
navigate,click,fill,toggleOrselect - Fast – HTTP GET + HTML parse, usually less than 200ms
- Zero dependency on Chrome – Pure Rust, no browser binaries required
From source (requires Rust 1.85+):
git clone https://github.com/user/pardus-browser.git
cd pardus-browser
cargo install --path crates/pardus-cli
# Default: Markdown tree
pardus-browser navigate https://example.com
# Raw tree format
pardus-browser navigate https://example.com --format tree
# JSON with navigation graph
pardus-browser navigate https://example.com --format json --with-nav
# Only interactive elements
pardus-browser navigate https://example.com --interactive-only
# Custom headers
pardus-browser navigate https://api.example.com --header "Authorization: Bearer token"
# Verbose logging
pardus-browser navigate https://example.com -v
Markdown (default) – Clean semantic tree with role annotations:
document [role: document]
├── banner [role: banner]
│ ├── link "Home" → /
│ ├── link "Products" → /products
│ └── button "Sign In"
├── main [role: main]
│ ├── heading (h1) "Welcome to Example"
│ ├── region "Hero"
│ │ ├── text "The fastest way to build"
│ │ └── link "Get Started" → /signup
│ └── form "Search" [role: form]
│ ├── textbox "Search..." [action: fill]
│ └── button "Go" [action: click]
└── contentinfo [role: contentinfo]
├── link "Privacy" → /privacy
└── link "Terms" → /terms
JSON – Structured data with full navigation graphs:
pardus-browser navigate https://example.com --format json --with-nav
Return:
{
"url": "https://example.com/",
"title": "Example Domain",
"semantic_tree": {
"root": { "role": "document", "children": [...] },
"stats": { "landmarks": 4, "links": 12, "headings": 3, "actions": 2 }
},
"navigation_graph": {
"internal_links": [
{ "url": "/products", "label": "Products" },
{ "url": "/signup", "label": "Get Started" }
],
"external_links": ["https://github.com/..."],
"forms": [
{
"action": "/search",
"method": "GET",
"fields": [
{ "name": "q", "field_type": "text", "action": "fill" },
{ "name": "go", "field_type": "submit", "action": "click" }
]
}
]
}
}
# Wipe everything
pardus-browser clean
# Only cookies
pardus-browser clean --cookies-only
# Only cache
pardus-browser clean --cache-only
pardus-browser
├── crates/pardus-core Core library — HTML parsing, semantic tree, navigation graph
├── crates/pardus-cdp CDP WebSocket server (planned)
└── crates/pardus-cli CLI binary
sorry-core – engine. brings page through reqwestparses html scraperARIA creates a semantic tree mapping roles and interactive situations. Output Markdown, Tree, or JSON.
pardus-cdp – Chrome DevTools Protocol Server (planned). Will expose a WebSocket endpoint for Playwright/Puppet integration, enabling JS-rendered pages and real-time interactions.
pardus-cli – The pardus-browser Command-line tools.
<a href