<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>MCP on recca0120 Tech Notes</title><link>https://recca0120.github.io/en/tags/mcp/</link><description>Recent content in MCP on recca0120 Tech Notes</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Tue, 07 Apr 2026 17:30:00 +0800</lastBuildDate><atom:link href="https://recca0120.github.io/en/tags/mcp/index.xml" rel="self" type="application/rss+xml"/><item><title>claude-view: Mission Control for Claude Code — Live Session Monitoring, Cost Tracking, and Analytics</title><link>https://recca0120.github.io/en/2026/04/07/claude-view-mission-control/</link><pubDate>Tue, 07 Apr 2026 17:30:00 +0800</pubDate><guid>https://recca0120.github.io/en/2026/04/07/claude-view-mission-control/</guid><description>&lt;img src="https://recca0120.github.io/" alt="Featured image of post claude-view: Mission Control for Claude Code — Live Session Monitoring, Cost Tracking, and Analytics" /&gt;&lt;p&gt;After using Claude Code for a while, the most common question I get is &amp;ldquo;how much are you spending per month?&amp;rdquo; Honestly, I can&amp;rsquo;t answer that. Claude Code&amp;rsquo;s terminal interface doesn&amp;rsquo;t show cumulative token costs, how many sub-agents ran, or which session burned the most money.&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://github.com/tombelieber/claude-view" target="_blank" rel="noopener"
 &gt;claude-view&lt;/a&gt; fills that gap. One command opens a dashboard that monitors every Claude Code session on your machine in real-time.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npx claude-view
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="what-it-shows-you"&gt;&lt;a href="#what-it-shows-you" class="header-anchor"&gt;&lt;/a&gt;What It Shows You
&lt;/h2&gt;&lt;h3 id="live-session-monitoring"&gt;&lt;a href="#live-session-monitoring" class="header-anchor"&gt;&lt;/a&gt;Live Session Monitoring
&lt;/h3&gt;&lt;p&gt;Open the dashboard and you see all running Claude Code sessions, each card showing:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Last message&lt;/li&gt;
&lt;li&gt;Model in use (Opus, Sonnet, Haiku)&lt;/li&gt;
&lt;li&gt;Current cost and token count&lt;/li&gt;
&lt;li&gt;Context window utilization (live percentage)&lt;/li&gt;
&lt;li&gt;Prompt cache countdown timer&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cards can be arranged in multiple layouts: Grid, List, Kanban, Monitor. Kanban mode groups sessions by project/branch in swimlanes — great when running multiple projects simultaneously.&lt;/p&gt;
&lt;h3 id="conversation-browser"&gt;&lt;a href="#conversation-browser" class="header-anchor"&gt;&lt;/a&gt;Conversation Browser
&lt;/h3&gt;&lt;p&gt;Click into any session for the full conversation history. Unlike the terminal view, claude-view visualizes tool calls — file reads, edits, bash commands, and MCP calls each get their own cards.&lt;/p&gt;
&lt;p&gt;A Developer Mode toggle reveals hook metadata, event cards, and raw JSON. Invaluable for debugging.&lt;/p&gt;
&lt;p&gt;Conversations can be exported as Markdown for documentation or feeding back to Claude for continuation.&lt;/p&gt;
&lt;h3 id="sub-agent-tree-view"&gt;&lt;a href="#sub-agent-tree-view" class="header-anchor"&gt;&lt;/a&gt;Sub-agent Tree View
&lt;/h3&gt;&lt;p&gt;Claude Code spawns sub-agents for subtasks. In the terminal you only see one level. claude-view renders the full tree structure with per-agent cost and token breakdowns at a glance.&lt;/p&gt;
&lt;h3 id="full-text-search"&gt;&lt;a href="#full-text-search" class="header-anchor"&gt;&lt;/a&gt;Full-Text Search
&lt;/h3&gt;&lt;p&gt;The search engine is &lt;a class="link" href="https://github.com/quickwit-oss/tantivy" target="_blank" rel="noopener"
 &gt;Tantivy&lt;/a&gt;, a Rust-native Lucene-class full-text indexer. Search response times across 1,500 sessions stay under 50ms.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Cmd+K&lt;/code&gt; opens a command palette for quick session jumping and view switching.&lt;/p&gt;
&lt;h2 id="analytics-where-did-the-money-go"&gt;&lt;a href="#analytics-where-did-the-money-go" class="header-anchor"&gt;&lt;/a&gt;Analytics: Where Did the Money Go
&lt;/h2&gt;&lt;p&gt;This is where I see the most value.&lt;/p&gt;
&lt;h3 id="dashboard-metrics"&gt;&lt;a href="#dashboard-metrics" class="header-anchor"&gt;&lt;/a&gt;Dashboard Metrics
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Week-over-week session count, token usage, and cost comparison&lt;/li&gt;
&lt;li&gt;90-day GitHub-style activity heatmap&lt;/li&gt;
&lt;li&gt;Most-used skills, commands, and MCP tools leaderboards&lt;/li&gt;
&lt;li&gt;Most active projects bar chart&lt;/li&gt;
&lt;li&gt;Cross-session totals for edits, reads, and bash commands&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="ai-contributions-tracking"&gt;&lt;a href="#ai-contributions-tracking" class="header-anchor"&gt;&lt;/a&gt;AI Contributions Tracking
&lt;/h3&gt;&lt;p&gt;This feature quantifies Claude Code&amp;rsquo;s output:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Lines added/removed, files touched, commit counts&lt;/li&gt;
&lt;li&gt;Cost per commit, cost per session, cost per line ROI&lt;/li&gt;
&lt;li&gt;Opus vs Sonnet vs Haiku side-by-side comparison&lt;/li&gt;
&lt;li&gt;Re-edit rate: tracking whether your prompt quality is improving&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There&amp;rsquo;s also an experimental AI Fluency Score (0-100), calculated from your session history to measure how effectively you use AI.&lt;/p&gt;
&lt;h2 id="85-mcp-tools"&gt;&lt;a href="#85-mcp-tools" class="header-anchor"&gt;&lt;/a&gt;85 MCP Tools
&lt;/h2&gt;&lt;p&gt;claude-view ships a plugin (&lt;code&gt;@claude-view/plugin&lt;/code&gt;) that auto-loads with every Claude Code session.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;claude plugin add @claude-view/plugin
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;The plugin provides 85 MCP tools: 8 hand-crafted core tools plus 77 auto-generated from the OpenAPI spec.&lt;/p&gt;
&lt;p&gt;The core 8:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;list_sessions&lt;/code&gt;, &lt;code&gt;get_session&lt;/code&gt;, &lt;code&gt;search_sessions&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;get_stats&lt;/code&gt;, &lt;code&gt;get_fluency_score&lt;/code&gt;, &lt;code&gt;get_token_stats&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;list_live_sessions&lt;/code&gt;, &lt;code&gt;get_live_summary&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Once installed, you can ask Claude Code &amp;ldquo;how much did I spend today&amp;rdquo; or &amp;ldquo;which session took the longest last week&amp;rdquo; — it queries claude-view via MCP.&lt;/p&gt;
&lt;h3 id="9-built-in-skills"&gt;&lt;a href="#9-built-in-skills" class="header-anchor"&gt;&lt;/a&gt;9 Built-in Skills
&lt;/h3&gt;&lt;p&gt;Beyond MCP tools, there are 9 built-in skills:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Skill&lt;/th&gt;
 &lt;th&gt;Purpose&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/session-recap&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Summarize commits, metrics, duration&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/daily-cost&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Today&amp;rsquo;s spending and tokens&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/standup&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Multi-session work log&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/coaching&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;AI usage tips&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/insights&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Behavioral pattern analysis&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/project-overview&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Cross-session project summary&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/search&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Natural language search&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/export-data&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;CSV/JSON exports&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/team-status&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Team activity overview&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="technical-architecture"&gt;&lt;a href="#technical-architecture" class="header-anchor"&gt;&lt;/a&gt;Technical Architecture
&lt;/h2&gt;&lt;p&gt;claude-view uses Rust for the backend and React for the frontend.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Layer&lt;/th&gt;
 &lt;th&gt;Technology&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Web framework&lt;/td&gt;
 &lt;td&gt;Axum&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Database&lt;/td&gt;
 &lt;td&gt;SQLite&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Search engine&lt;/td&gt;
 &lt;td&gt;Tantivy&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;File I/O&lt;/td&gt;
 &lt;td&gt;Memory-mapped I/O&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Real-time&lt;/td&gt;
 &lt;td&gt;SSE + WebSocket&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Frontend&lt;/td&gt;
 &lt;td&gt;React + Vite + Dockview&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Monorepo&lt;/td&gt;
 &lt;td&gt;Turbo + Bun&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Performance benchmarks (M-series Mac, 1,493 sessions):&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Metric&lt;/th&gt;
 &lt;th&gt;claude-view&lt;/th&gt;
 &lt;th&gt;Typical Electron Dashboard&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Download&lt;/td&gt;
 &lt;td&gt;~10 MB&lt;/td&gt;
 &lt;td&gt;150-300 MB&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;On disk&lt;/td&gt;
 &lt;td&gt;~27 MB&lt;/td&gt;
 &lt;td&gt;300-500 MB&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Startup&lt;/td&gt;
 &lt;td&gt;&amp;lt;500 ms&lt;/td&gt;
 &lt;td&gt;3-8 s&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;RAM&lt;/td&gt;
 &lt;td&gt;~50 MB&lt;/td&gt;
 &lt;td&gt;300-800 MB&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Index 1,500 sessions&lt;/td&gt;
 &lt;td&gt;&amp;lt;1 s&lt;/td&gt;
 &lt;td&gt;N/A&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Rust&amp;rsquo;s mmap + SIMD-accelerated JSONL parsing enables zero-copy from parse to response. Compared to Electron dashboards, it&amp;rsquo;s 10x smaller and uses 6x less memory.&lt;/p&gt;
&lt;h2 id="installation"&gt;&lt;a href="#installation" class="header-anchor"&gt;&lt;/a&gt;Installation
&lt;/h2&gt;&lt;p&gt;Three options:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Recommended&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -fsSL https://get.claudeview.ai/install.sh &lt;span class="p"&gt;|&lt;/span&gt; sh
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Or via npx&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npx claude-view
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Install plugin (auto-starts with Claude Code)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;claude plugin add @claude-view/plugin
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Only prerequisite: Claude Code installed. Dashboard runs at &lt;code&gt;http://localhost:47892&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;All data stays local, zero telemetry, no account required.&lt;/p&gt;
&lt;h2 id="compared-to-other-tools"&gt;&lt;a href="#compared-to-other-tools" class="header-anchor"&gt;&lt;/a&gt;Compared to Other Tools
&lt;/h2&gt;&lt;p&gt;There are similar tools, but with different positioning:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ccusage&lt;/strong&gt;: CLI tool, token stats only, no GUI, no live monitoring&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;opcode&lt;/strong&gt;: Tauri-based GUI with session management but no multi-session chat browsing or search&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CodePilot&lt;/strong&gt;: Electron chat UI for interacting &lt;em&gt;with&lt;/em&gt; Claude Code, not monitoring it&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;claude-view is positioned as monitoring and analytics. If you already work in the terminal with Claude Code, it doesn&amp;rsquo;t change your workflow — it just shows you more information.&lt;/p&gt;
&lt;p&gt;I previously covered &lt;a class="link" href="https://recca0120.github.io/en/2026/04/07/aionui-ai-cowork-app/" &gt;AionUi&lt;/a&gt;, which unifies multiple agents into one GUI. claude-view takes a different approach: keep working in the terminal, but add a dashboard for tracking. The two can work together.&lt;/p&gt;
&lt;h2 id="who-needs-this"&gt;&lt;a href="#who-needs-this" class="header-anchor"&gt;&lt;/a&gt;Who Needs This
&lt;/h2&gt;&lt;p&gt;If you use Claude Code occasionally, you probably don&amp;rsquo;t need this tool.&lt;/p&gt;
&lt;p&gt;But if you use it daily, run multiple sessions simultaneously, and want to know where the money goes, which model gives the best ROI, and whether your prompt quality is improving — claude-view provides information density that the terminal simply can&amp;rsquo;t match.&lt;/p&gt;
&lt;h2 id="references"&gt;&lt;a href="#references" class="header-anchor"&gt;&lt;/a&gt;References
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/tombelieber/claude-view" target="_blank" rel="noopener"
 &gt;claude-view GitHub Repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://claudeview.ai" target="_blank" rel="noopener"
 &gt;claude-view Official Website&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/quickwit-oss/tantivy" target="_blank" rel="noopener"
 &gt;Tantivy Full-Text Search Engine&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/tokio-rs/axum" target="_blank" rel="noopener"
 &gt;Axum Web Framework&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>bb-browser: No Scraping, No API Keys — Your Browser Is the API</title><link>https://recca0120.github.io/en/2026/04/07/bb-browser-your-browser-is-the-api/</link><pubDate>Tue, 07 Apr 2026 11:34:00 +0800</pubDate><guid>https://recca0120.github.io/en/2026/04/07/bb-browser-your-browser-is-the-api/</guid><description>&lt;img src="https://recca0120.github.io/" alt="Featured image of post bb-browser: No Scraping, No API Keys — Your Browser Is the API" /&gt;&lt;p&gt;Want Twitter search results? Traditional approaches give you three paths: apply for an API key (rate-limited), write a scraper (get IP-banned), or use Playwright with a headless browser (detected as non-human).&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://github.com/epiral/bb-browser" target="_blank" rel="noopener"
 &gt;bb-browser&lt;/a&gt; takes a fourth path: use the Chrome you already have open. You&amp;rsquo;re logged into Twitter, the cookies are right there, and bb-browser runs &lt;code&gt;fetch()&lt;/code&gt; inside that tab. From the website&amp;rsquo;s perspective, it&amp;rsquo;s just you browsing.&lt;/p&gt;
&lt;h2 id="how-it-differs-from-scrapers-and-playwright"&gt;&lt;a href="#how-it-differs-from-scrapers-and-playwright" class="header-anchor"&gt;&lt;/a&gt;How It Differs from Scrapers and Playwright
&lt;/h2&gt;&lt;p&gt;Let&amp;rsquo;s get the differences clear.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;&lt;/th&gt;
 &lt;th&gt;bb-browser&lt;/th&gt;
 &lt;th&gt;Playwright / Selenium&lt;/th&gt;
 &lt;th&gt;Scrapers (requests, Scrapy)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Browser&lt;/td&gt;
 &lt;td&gt;Your real Chrome&lt;/td&gt;
 &lt;td&gt;Isolated headless browser&lt;/td&gt;
 &lt;td&gt;No browser&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Login state&lt;/td&gt;
 &lt;td&gt;Already logged in&lt;/td&gt;
 &lt;td&gt;Must re-login or inject cookies&lt;/td&gt;
 &lt;td&gt;Manual cookie handling&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Anti-bot detection&lt;/td&gt;
 &lt;td&gt;Invisible (it IS the real user)&lt;/td&gt;
 &lt;td&gt;Easily detected&lt;/td&gt;
 &lt;td&gt;Easily blocked&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Fingerprint&lt;/td&gt;
 &lt;td&gt;Your real fingerprint&lt;/td&gt;
 &lt;td&gt;Headless browser fingerprint&lt;/td&gt;
 &lt;td&gt;No fingerprint&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The key insight: bb-browser doesn&amp;rsquo;t launch a new browser instance. It connects to your running Chrome via CDP (Chrome DevTools Protocol) and injects code into tabs. The User-Agent, cookies, and TLS fingerprint the website sees are all real — because it is your actual browser.&lt;/p&gt;
&lt;h2 id="architecture"&gt;&lt;a href="#architecture" class="header-anchor"&gt;&lt;/a&gt;Architecture
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;AI Agent (Claude Code, Codex, Cursor)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │ CLI or MCP (stdio)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ▼
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bb-browser CLI ──HTTP──▶ Daemon ──CDP WebSocket──▶ Real Browser
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ┌──────┴──────┐
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │ Per-tab event│
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │ cache (net, │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │ console) │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; └─────────────┘
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;bb-browser runs a daemon (default &lt;code&gt;127.0.0.1:19824&lt;/code&gt;) that communicates with Chrome via CDP WebSocket. CLI commands go to the daemon, which executes them in the corresponding tab.&lt;/p&gt;
&lt;h2 id="installation-and-basic-usage"&gt;&lt;a href="#installation-and-basic-usage" class="header-anchor"&gt;&lt;/a&gt;Installation and Basic Usage
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npm install -g bb-browser
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Pull community adapters:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bb-browser site update
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Try a command:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bb-browser site zhihu/hot
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;This opens a Zhihu tab (if you&amp;rsquo;re already logged in), uses your cookies to fetch the trending questions list.&lt;/p&gt;
&lt;h3 id="structured-output"&gt;&lt;a href="#structured-output" class="header-anchor"&gt;&lt;/a&gt;Structured Output
&lt;/h3&gt;&lt;p&gt;All commands support &lt;code&gt;--json&lt;/code&gt; and &lt;code&gt;--jq&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bb-browser site xueqiu/hot-stock &lt;span class="m"&gt;5&lt;/span&gt; --jq &lt;span class="s1"&gt;&amp;#39;.items[] | {name, changePercent}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# {&amp;#34;name&amp;#34;:&amp;#34;云天化&amp;#34;,&amp;#34;changePercent&amp;#34;:&amp;#34;2.08%&amp;#34;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# {&amp;#34;name&amp;#34;:&amp;#34;东芯股份&amp;#34;,&amp;#34;changePercent&amp;#34;:&amp;#34;-7.60%&amp;#34;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="browser-operations"&gt;&lt;a href="#browser-operations" class="header-anchor"&gt;&lt;/a&gt;Browser Operations
&lt;/h3&gt;&lt;p&gt;Beyond running adapters, you can directly control the browser:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bb-browser open https://example.com &lt;span class="c1"&gt;# Open URL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bb-browser snapshot -i &lt;span class="c1"&gt;# Accessibility tree snapshot&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bb-browser click @3 &lt;span class="c1"&gt;# Click element&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bb-browser fill @5 &lt;span class="s2"&gt;&amp;#34;hello&amp;#34;&lt;/span&gt; &lt;span class="c1"&gt;# Fill input&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bb-browser &lt;span class="nb"&gt;eval&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;document.title&amp;#34;&lt;/span&gt; &lt;span class="c1"&gt;# Execute JavaScript&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bb-browser fetch URL --json &lt;span class="c1"&gt;# Authenticated fetch&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bb-browser screenshot &lt;span class="c1"&gt;# Take screenshot&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="36-platforms-103-commands"&gt;&lt;a href="#36-platforms-103-commands" class="header-anchor"&gt;&lt;/a&gt;36 Platforms, 103 Commands
&lt;/h2&gt;&lt;p&gt;bb-browser&amp;rsquo;s adapters cover a wide range:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Search&lt;/strong&gt;: Google, Baidu, Bing, DuckDuckGo&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Social&lt;/strong&gt;: Twitter/X, Reddit, Weibo, Xiaohongshu, LinkedIn&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dev&lt;/strong&gt;: GitHub, StackOverflow, Hacker News, npm, PyPI, arXiv, V2EX, Dev.to&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;News&lt;/strong&gt;: BBC, Reuters, 36kr, Toutiao&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Video&lt;/strong&gt;: YouTube, Bilibili&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Finance&lt;/strong&gt;: Xueqiu, Yahoo Finance, Eastmoney&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Knowledge&lt;/strong&gt;: Wikipedia, Zhihu&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Each adapter is a single JavaScript file, community-driven. To add a new platform, write a JS file and submit it to the &lt;code&gt;bb-sites&lt;/code&gt; repo.&lt;/p&gt;
&lt;h2 id="three-levels-of-adapter-complexity"&gt;&lt;a href="#three-levels-of-adapter-complexity" class="header-anchor"&gt;&lt;/a&gt;Three Levels of Adapter Complexity
&lt;/h2&gt;&lt;p&gt;Not every website is equally straightforward. bb-browser categorizes adapters into three levels:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Level&lt;/th&gt;
 &lt;th&gt;Approach&lt;/th&gt;
 &lt;th&gt;Examples&lt;/th&gt;
 &lt;th&gt;Dev Time&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Level 1&lt;/td&gt;
 &lt;td&gt;Direct fetch with cookies&lt;/td&gt;
 &lt;td&gt;Reddit, GitHub&lt;/td&gt;
 &lt;td&gt;~1 min&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Level 2&lt;/td&gt;
 &lt;td&gt;Bearer token + CSRF extraction&lt;/td&gt;
 &lt;td&gt;Twitter, Zhihu&lt;/td&gt;
 &lt;td&gt;~3 min&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Level 3&lt;/td&gt;
 &lt;td&gt;Webpack injection or Pinia store&lt;/td&gt;
 &lt;td&gt;Twitter search&lt;/td&gt;
 &lt;td&gt;~10 min&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Level 1 is simplest — some sites&amp;rsquo; APIs work with just cookies. Level 3 is most complex, requiring reverse engineering of frontend bundles, extracting data from Webpack&amp;rsquo;s &lt;code&gt;__webpack_require__&lt;/code&gt; or Vue&amp;rsquo;s Pinia store.&lt;/p&gt;
&lt;h2 id="mcp-server-for-ai-agents"&gt;&lt;a href="#mcp-server-for-ai-agents" class="header-anchor"&gt;&lt;/a&gt;MCP Server for AI Agents
&lt;/h2&gt;&lt;p&gt;This is bb-browser&amp;rsquo;s most compelling use case. Configure it as an MCP server, and Claude Code or Cursor can directly access any website your browser can see.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;mcpServers&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;bb-browser&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;npx&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;args&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;-y&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;bb-browser&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;--mcp&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Once configured, you can tell Claude Code &amp;ldquo;search arXiv for recent RAG papers&amp;rdquo; and it will search through bb-browser using your real browser.&lt;/p&gt;
&lt;p&gt;Without bb-browser, an AI agent can only work with files and the terminal. With bb-browser, it can access the entire internet — as you.&lt;/p&gt;
&lt;p&gt;I previously wrote about &lt;a class="link" href="https://recca0120.github.io/en/2026/03/15/cli-anything-agent-native-cli/" &gt;CLI-Anything&lt;/a&gt;, which wraps desktop software as CLIs for agents to call, and &lt;a class="link" href="https://recca0120.github.io/en/2026/04/07/aionui-ai-cowork-app/" &gt;AionUi&lt;/a&gt;, which provides a unified interface for managing multiple agents. bb-browser extends agent capability from yet another angle: letting it browse the web using your real browser.&lt;/p&gt;
&lt;h2 id="things-to-consider"&gt;&lt;a href="#things-to-consider" class="header-anchor"&gt;&lt;/a&gt;Things to Consider
&lt;/h2&gt;&lt;p&gt;A few things to think through before using it:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;It uses your real account&lt;/strong&gt;. bb-browser acts on your behalf. If the operation frequency is too high, your account might get flagged. It&amp;rsquo;s not an invisible scraper — it IS you&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Security&lt;/strong&gt;. The daemon binds to localhost by default, but if you open it to &lt;code&gt;0.0.0.0&lt;/code&gt;, anyone who can reach your machine can control your browser. Use Tailscale or ZeroTier for safer remote access&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Adapter quality varies&lt;/strong&gt;. Community-driven means broad coverage, but some adapters may lag behind website redesigns&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;macOS users&lt;/strong&gt;: watch for IPv6 issues — add &lt;code&gt;--host 127.0.0.1&lt;/code&gt; to the daemon command&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="when-to-use-it"&gt;&lt;a href="#when-to-use-it" class="header-anchor"&gt;&lt;/a&gt;When to Use It
&lt;/h2&gt;&lt;p&gt;bb-browser isn&amp;rsquo;t for scraping millions of records. Use Scrapy for that.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s ideal for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Giving AI agents web access without applying for API keys one by one&lt;/li&gt;
&lt;li&gt;Quickly pulling structured data from platforms you&amp;rsquo;re already logged into&lt;/li&gt;
&lt;li&gt;Cross-platform research — query arXiv, Twitter, GitHub, Zhihu, and StackOverflow in under a minute&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;One command does what used to require writing a scraper, and it won&amp;rsquo;t get blocked.&lt;/p&gt;
&lt;h2 id="references"&gt;&lt;a href="#references" class="header-anchor"&gt;&lt;/a&gt;References
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/epiral/bb-browser" target="_blank" rel="noopener"
 &gt;bb-browser GitHub Repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/nicepkg/bb-sites" target="_blank" rel="noopener"
 &gt;bb-sites Community Adapters&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://chromedevtools.github.io/devtools-protocol/" target="_blank" rel="noopener"
 &gt;Chrome DevTools Protocol Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://modelcontextprotocol.io/" target="_blank" rel="noopener"
 &gt;Model Context Protocol Specification&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>AionUi: One Interface for 12+ AI Agents — A Free, Open-Source Cowork Desktop App</title><link>https://recca0120.github.io/en/2026/04/07/aionui-ai-cowork-app/</link><pubDate>Tue, 07 Apr 2026 11:03:00 +0800</pubDate><guid>https://recca0120.github.io/en/2026/04/07/aionui-ai-cowork-app/</guid><description>&lt;img src="https://recca0120.github.io/" alt="Featured image of post AionUi: One Interface for 12+ AI Agents — A Free, Open-Source Cowork Desktop App" /&gt;&lt;p&gt;You&amp;rsquo;ve got Claude Code installed. Also Codex. Maybe Qwen Code for Chinese-language tasks. Each tool gets its own terminal window, MCP configs are duplicated across tools, and conversation history is scattered everywhere.&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://github.com/iOfficeAI/AionUi" target="_blank" rel="noopener"
 &gt;AionUi&lt;/a&gt; tackles exactly this: one desktop app that brings all your AI agents under a single interface. Free, open-source, Apache 2.0 licensed.&lt;/p&gt;
&lt;h2 id="what-it-does"&gt;&lt;a href="#what-it-does" class="header-anchor"&gt;&lt;/a&gt;What It Does
&lt;/h2&gt;&lt;p&gt;AionUi is a cross-platform desktop app built with Electron + React, supporting macOS, Windows, and Linux. Its core purpose is unified management of multiple AI coding agents.&lt;/p&gt;
&lt;h3 id="supported-agents"&gt;&lt;a href="#supported-agents" class="header-anchor"&gt;&lt;/a&gt;Supported Agents
&lt;/h3&gt;&lt;p&gt;AionUi auto-detects CLI tools installed on your machine. Currently supported:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Claude Code, Codex, Qwen Code, Goose AI, OpenClaw, Augment Code&lt;/li&gt;
&lt;li&gt;iFlow CLI, CodeBuddy, Kimi CLI, OpenCode, Factory Droid, GitHub Copilot&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Over 12 agents total. No extra configuration needed — install the CLI and it shows up in AionUi. If you don&amp;rsquo;t have any CLI tools installed, AionUi has its own built-in agent that works with Google login or API key authentication.&lt;/p&gt;
&lt;h3 id="20-model-platforms"&gt;&lt;a href="#20-model-platforms" class="header-anchor"&gt;&lt;/a&gt;20+ Model Platforms
&lt;/h3&gt;&lt;p&gt;Wide model selection:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Major platforms&lt;/strong&gt;: Gemini, Claude, OpenAI&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cloud&lt;/strong&gt;: AWS Bedrock&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Chinese platforms&lt;/strong&gt;: Dashscope (Qwen), Zhipu, Moonshot (Kimi), Baidu Qianfan, Tencent Hunyuan, ModelScope&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Local models&lt;/strong&gt;: Ollama, LM Studio&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you&amp;rsquo;re in mainland China and can&amp;rsquo;t easily access OpenAI or Claude APIs, just switch to Dashscope or Zhipu. For fully offline work, run Ollama with local models.&lt;/p&gt;
&lt;h3 id="configure-mcp-once-sync-everywhere"&gt;&lt;a href="#configure-mcp-once-sync-everywhere" class="header-anchor"&gt;&lt;/a&gt;Configure MCP Once, Sync Everywhere
&lt;/h3&gt;&lt;p&gt;This is the most practical design choice. Configure MCP (Model Context Protocol) tools once in AionUi, and all agents sync automatically. No more maintaining separate &lt;code&gt;mcp.json&lt;/code&gt; files for each agent — change it in one place, it applies everywhere.&lt;/p&gt;
&lt;h2 id="12-built-in-professional-assistants"&gt;&lt;a href="#12-built-in-professional-assistants" class="header-anchor"&gt;&lt;/a&gt;12 Built-in Professional Assistants
&lt;/h2&gt;&lt;p&gt;AionUi isn&amp;rsquo;t just an agent launcher. It comes with 12 pre-built assistants:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Assistant&lt;/th&gt;
 &lt;th&gt;Purpose&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Cowork&lt;/td&gt;
 &lt;td&gt;Automated task execution&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;PPTX Generator&lt;/td&gt;
 &lt;td&gt;Presentation creation&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;PDF to PPT&lt;/td&gt;
 &lt;td&gt;Format conversion&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;3D Game&lt;/td&gt;
 &lt;td&gt;Single-file game prototyping&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UI/UX Pro Max&lt;/td&gt;
 &lt;td&gt;57 styles, 95 color palettes&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Beautiful Mermaid&lt;/td&gt;
 &lt;td&gt;Flowcharts, sequence diagrams&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Planning with Files&lt;/td&gt;
 &lt;td&gt;File-based project planning&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The Office features (PPT, Word, Excel) are powered by OfficeCLI, producing editable &lt;code&gt;.pptx&lt;/code&gt;, &lt;code&gt;.docx&lt;/code&gt;, and &lt;code&gt;.xlsx&lt;/code&gt; files — not PDF screenshots. PPT output even supports Morph transition animations.&lt;/p&gt;
&lt;h2 id="scheduled-tasks-247-automation"&gt;&lt;a href="#scheduled-tasks-247-automation" class="header-anchor"&gt;&lt;/a&gt;Scheduled Tasks: 24/7 Automation
&lt;/h2&gt;&lt;p&gt;This feature is uncommon in agent tools. You can set up scheduled tasks using natural language, like &amp;ldquo;every morning at 9am, summarize yesterday&amp;rsquo;s Git commit log.&amp;rdquo; AionUi converts it to a cron expression and runs it automatically.&lt;/p&gt;
&lt;p&gt;Each scheduled task is bound to a conversation, maintaining context. Results are sent back to the conversation window, and can also be pushed to Telegram, Lark (Feishu), or DingTalk.&lt;/p&gt;
&lt;h2 id="preview-panel"&gt;&lt;a href="#preview-panel" class="header-anchor"&gt;&lt;/a&gt;Preview Panel
&lt;/h2&gt;&lt;p&gt;AionUi has a built-in file preview supporting many formats:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Documents&lt;/strong&gt;: PDF, Word, Excel, PowerPoint&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Code&lt;/strong&gt;: 30+ languages with syntax highlighting&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Images&lt;/strong&gt;: PNG, JPG, SVG, WebP, and more&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Markup&lt;/strong&gt;: Markdown and HTML with live editing&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It also tracks file changes, shows Git version history, and supports one-click rollback.&lt;/p&gt;
&lt;h2 id="webui-remote-access"&gt;&lt;a href="#webui-remote-access" class="header-anchor"&gt;&lt;/a&gt;WebUI Remote Access
&lt;/h2&gt;&lt;p&gt;You don&amp;rsquo;t have to sit in front of your computer to use a desktop app. AionUi can serve a WebUI, accessible via QR code or password login from your phone or another computer. Supports both LAN and cross-network access.&lt;/p&gt;
&lt;p&gt;Combined with Telegram, Lark, and DingTalk bot integration, you can send commands to AI agents from your phone and receive results in your chat groups.&lt;/p&gt;
&lt;h2 id="tech-stack"&gt;&lt;a href="#tech-stack" class="header-anchor"&gt;&lt;/a&gt;Tech Stack
&lt;/h2&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Layer&lt;/th&gt;
 &lt;th&gt;Technology&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Framework&lt;/td&gt;
 &lt;td&gt;Electron&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UI&lt;/td&gt;
 &lt;td&gt;React&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;CSS&lt;/td&gt;
 &lt;td&gt;UnoCSS&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Build&lt;/td&gt;
 &lt;td&gt;Vite&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Testing&lt;/td&gt;
 &lt;td&gt;Vitest + Playwright&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Database&lt;/td&gt;
 &lt;td&gt;SQLite (local)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Language&lt;/td&gt;
 &lt;td&gt;TypeScript&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;All data is stored locally in SQLite — nothing gets uploaded to any server. With local models (Ollama), the entire workflow can run completely offline.&lt;/p&gt;
&lt;h2 id="installation"&gt;&lt;a href="#installation" class="header-anchor"&gt;&lt;/a&gt;Installation
&lt;/h2&gt;&lt;p&gt;Download the installer for your platform from &lt;a class="link" href="https://github.com/iOfficeAI/AionUi/releases" target="_blank" rel="noopener"
 &gt;GitHub Releases&lt;/a&gt;. Homebrew is also supported on macOS.&lt;/p&gt;
&lt;p&gt;Once installed, just open the app. If Claude Code or Codex is already on your machine, AionUi detects them automatically. Otherwise, use the built-in agent with an API key or Google login to get started.&lt;/p&gt;
&lt;h2 id="compared-to-using-claude-code-alone"&gt;&lt;a href="#compared-to-using-claude-code-alone" class="header-anchor"&gt;&lt;/a&gt;Compared to Using Claude Code Alone
&lt;/h2&gt;&lt;p&gt;Claude Code is powerful, but it&amp;rsquo;s a terminal tool. AionUi doesn&amp;rsquo;t aim to replace it — it puts Claude Code alongside other agents in one managed workspace.&lt;/p&gt;
&lt;p&gt;Key differences:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Multi-agent&lt;/strong&gt;: Claude Code only runs Claude; AionUi runs multiple agents simultaneously&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GUI&lt;/strong&gt;: Full desktop interface with file preview, Office generation, and image processing built in&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scheduling&lt;/strong&gt;: Claude Code has no built-in scheduling; AionUi runs tasks 24/7 automatically&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Price&lt;/strong&gt;: Claude Code requires API costs or a $100/month subscription; AionUi itself is free&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Model choice&lt;/strong&gt;: Not locked to one provider — 20+ platforms available&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you&amp;rsquo;re interested in the AI agent tool ecosystem, I previously wrote about &lt;a class="link" href="https://recca0120.github.io/en/2026/03/15/cli-anything-agent-native-cli/" &gt;CLI-Anything: A Universal Bridge for AI Agents to Operate Any Software&lt;/a&gt;, which approaches the problem from the opposite angle — wrapping existing software as CLIs for agents to call. AionUi takes the agent management perspective instead.&lt;/p&gt;
&lt;h2 id="current-state"&gt;&lt;a href="#current-state" class="header-anchor"&gt;&lt;/a&gt;Current State
&lt;/h2&gt;&lt;p&gt;AionUi is iterating rapidly, with 4,400+ commits on GitHub. The community is active on Discord (English) and WeChat groups (Chinese).&lt;/p&gt;
&lt;p&gt;One caveat: while the star count is impressive, Electron apps typically have significant memory overhead. If you only use one agent, running the CLI in a terminal is lighter weight. AionUi&amp;rsquo;s value shows when you genuinely need multiple agents, want GUI management, or require scheduling and Office generation features.&lt;/p&gt;
&lt;h2 id="references"&gt;&lt;a href="#references" class="header-anchor"&gt;&lt;/a&gt;References
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/iOfficeAI/AionUi" target="_blank" rel="noopener"
 &gt;AionUi GitHub Repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://www.aionui.com" target="_blank" rel="noopener"
 &gt;AionUi Official Website&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://modelcontextprotocol.io/" target="_blank" rel="noopener"
 &gt;Model Context Protocol Specification&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://www.electronjs.org/" target="_blank" rel="noopener"
 &gt;Electron Documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>