gateway/templates/skills/light-panda-browser/SKILL.md
Lightpanda browser, drop-in replacement for Chrome and Openclaw default browser - faster and lighter for tasks without graphical rendering like data retrieval. Use it via MCP server, CLI fetch, or CDP with Playwright/Puppeteer.
npx skillsauth add phanijapps/agentzero light-panda-browserInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Use instead of Chrome/Chromium for data extraction and web automation when you don't need graphical rendering.
Lightpanda is a headless browser built from scratch for AI agents. It's 9x faster and uses 16x less memory than Chrome. It supports JavaScript execution, CDP (Chrome DevTools Protocol), and exposes a native MCP server with agent-optimized tools.
Alternative to built-in web search
When the built-in Web Search tool is unavailable, or when you need more control over search results (e.g., following links to extract full page content), you can use Lightpanda with DuckDuckGo as an alternative. Prefer the built-in Web Search tool when it is available and sufficient for your needs.
bash scripts/install.sh
Lightpanda is available on Linux and macOS only. Windows is supported via WSL2.
The binary is a nightly build that evolves quickly. If you encounter crashes or issues, run scripts/install.sh again to update to the latest version (max once per day).
If issues persist after updating, open a GitHub issue at https://github.com/lightpanda-io/browser/issues including:
Lightpanda offers three interfaces. Choose based on your needs:
| Interface | Best for | How it works | |-----------|----------|--------------| | MCP server | Agent workflows, interactive browsing, form filling | Structured tools over stdio — purpose-built for LLM agents | | CLI fetch | Quick one-off page extraction | Single command, no server needed | | CDP server | Custom automation with Playwright/Puppeteer | WebSocket protocol, full browser control |
The MCP server is the simplest way for agents to use Lightpanda. It exposes purpose-built tools over stdio with no setup beyond the binary.
claude mcp add lightpanda -- $HOME/.local/bin/lightpanda mcp
Add to your MCP client configuration:
{
"mcpServers": {
"lightpanda": {
"command": "$HOME/.local/bin/lightpanda",
"args": ["mcp"]
}
}
}
Replace $HOME with the actual path (e.g., /home/username or /Users/username).
Navigation & content extraction:
goto — Navigate to a URL and load the pagemarkdown — Get page content as markdown (accepts optional URL to navigate first)links — Extract all links from the pagesemantic_tree — Get a simplified semantic DOM tree optimized for AI reasoning (supports backendNodeId filter and maxDepth limit)structuredData — Extract structured data (JSON-LD, OpenGraph, etc.)evaluate — Execute JavaScript in the page contextInteractive element discovery:
interactiveElements — List all interactive elements on the pagedetectForms — Detect forms with their field structure and typesnodeDetails — Get detailed info about a specific node by backendNodeIdwaitForSelector — Wait for a CSS selector to match (default timeout: 5000ms)User actions (return page URL and title after each action):
click — Click an interactive element by backendNodeIdfill — Fill text into an input, textarea, or select elementscroll — Scroll the page or a specific elementmcp://page/html — Full serialized HTML of the current pagemcp://page/markdown — Token-efficient markdown representation of the current pageA typical agent workflow:
goto a URLsemantic_tree or markdown to understand the pageinteractiveElements to find clickable/fillable elementsclick / fill to interactmarkdown to extract the resultFor one-off page extraction without starting a server:
$HOME/.local/bin/lightpanda fetch --dump markdown --wait-until networkidle https://example.com
--dump — Output format: html, markdown, semantic_tree, semantic_tree_text--wait-until — Wait strategy: load, domcontentloaded, networkidle, done (default)--wait-ms — Max wait time in milliseconds (default: 5000)--strip-mode — Remove tag groups from output: js, css, ui, full (comma-separated)--with-frames — Include iframe contents in the dump--obey-robots — Fetch and obey robots.txtExtract page as markdown:
$HOME/.local/bin/lightpanda fetch --dump markdown https://example.com
Extract semantic tree (compact, AI-friendly):
$HOME/.local/bin/lightpanda fetch --dump semantic_tree_text --wait-until networkidle https://example.com
Fetch with longer wait for slow pages:
$HOME/.local/bin/lightpanda fetch --dump html --wait-ms 10000 --wait-until networkidle https://example.com
For full browser control via Playwright or Puppeteer:
$HOME/.local/bin/lightpanda serve --host 127.0.0.1 --port 9222
Options:
--log-level info|debug|warn|error — Set logging verbosity--log-format pretty|logfmt — Output format for logs--timeout — Inactivity timeout in seconds (default: 10)--obey-robots — Fetch and obey robots.txtConnect using playwright-core (not the full playwright package):
const { chromium } = require('playwright-core');
(async () => {
const browser = await chromium.connectOverCDP({
endpointURL: 'ws://127.0.0.1:9222',
});
const context = await browser.newContext({});
const page = await context.newPage();
await page.goto('https://example.com');
const title = await page.title();
const content = await page.textContent('body');
console.log(JSON.stringify({ title, content }));
await page.close();
await context.close();
await browser.close();
})();
Connect using puppeteer-core (not the full puppeteer package):
const puppeteer = require('puppeteer-core');
(async () => {
const browser = await puppeteer.connect({
browserWSEndpoint: 'ws://127.0.0.1:9222'
});
const context = await browser.createBrowserContext();
const page = await context.newPage();
await page.goto('https://example.com', { waitUntil: 'networkidle0' });
const title = await page.title();
console.log(JSON.stringify({ title }));
await page.close();
await context.close();
await browser.close();
})();
Lightpanda exposes a custom LP domain via CDP with agent-optimized methods not available in standard Chrome DevTools Protocol. Use these via page.evaluate with CDP sessions or direct WebSocket messages.
Content extraction:
LP.getMarkdown — Extract page content as markdown. Params: nodeId (optional)LP.getSemanticTree — Get semantic tree representation. Params: format (text for text format), prune (default: true), interactiveOnly, backendNodeId, maxDepthLP.getStructuredData — Extract structured data (JSON-LD, OpenGraph, etc.)Interactive elements:
LP.getInteractiveElements — Find all interactive elements. Params: nodeId (optional)LP.detectForms — Detect and extract form informationLP.getNodeDetails — Get detailed info about a node. Params: backendNodeId (required)LP.waitForSelector — Wait for a CSS selector match. Params: selector (required), timeout (default: 5000ms)Actions:
LP.clickNode — Click a node. Params: nodeId or backendNodeIdLP.fillNode — Fill an input/select element. Params: nodeId or backendNodeId, textLP.scrollNode — Scroll page or element. Params: nodeId or backendNodeId (optional), x, yExample using CDP session with Playwright:
const client = await context.newCDPSession(page);
// Get page as markdown
const { markdown } = await client.send('LP.getMarkdown');
// Get semantic tree
const { semanticTree } = await client.send('LP.getSemanticTree', { format: 'text', maxDepth: 5 });
// Wait for element and click it
const { backendNodeId } = await client.send('LP.waitForSelector', { selector: '#submit-btn', timeout: 3000 });
await client.send('LP.clickNode', { backendNodeId });
scripts/install.sh — Install Lightpanda binarytools
Helper tools and instructions for creating new agents
development
Build technical indicator, trend, and momentum signals directly from yfinance price data. Use when an agent needs RSI, MACD, EMA, Bollinger, or ATR workflows, multi-timeframe confirmation, signal scoring, or chart-ready technical outputs.
data-ai
Perform portfolio construction and risk diagnostics directly from yfinance multi-asset return series. Use when an agent needs correlation analysis, drawdown and VaR metrics, stress scenarios, or weight optimization for stock, ETF, and crypto portfolios.
testing
Analyze options chains directly from yfinance to measure implied volatility structure, open-interest positioning, and directional options sentiment. Use when an agent needs expiry-by-expiry options diagnostics, put-call ratios, max pain estimates, or volatility regime checks.