[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-94012":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":16,"stars7d":16,"stars30d":16,"stars90d":15,"forks30d":15,"starsTrendScore":17,"compositeScore":18,"rankGlobal":9,"rankLanguage":9,"license":19,"archived":20,"fork":20,"defaultBranch":21,"hasWiki":20,"hasPages":20,"topics":22,"createdAt":9,"pushedAt":9,"updatedAt":30,"readmeContent":31,"aiSummary":9,"trendingCount":15,"starSnapshotCount":15,"syncStatus":32,"lastSyncTime":33,"discoverSource":34},94012,"herdr-browser","ogulcancelik\u002Fherdr-browser","ogulcancelik","Render a real Chromium view inside a Herdr pane and drive it over CDP.",null,"TypeScript",164,7,108,1,0,46,138,87.31,"MIT License",false,"main",[23,24,25,26,27,28,29],"browser","browser-automation","cdp","chromium","herdr-plugin","kitty-graphics","terminal","2026-07-30 04:02:14","# Herdr Browser\n\nHerdr Browser renders a real Chromium view inside a Herdr pane and exposes it to\nChrome DevTools Protocol clients. An agent drives the browser, you watch it in\nthe pane, and you take over with the mouse and keyboard at any point without\ndetaching the automation client.\n\nBrowser automation is normally invisible. The agent runs headless and you\nreconstruct what happened from screenshots after the fact, or you babysit a\ndetached Chrome window that has no relationship to your session. Herdr Browser\nputs the automated browser in the layout you are already working in, live, and\nmakes it directly interactive.\n\n## What This Is Not\n\nThis is not a general-purpose browser. A desktop browser wins on devtools,\nextensions, video, downloads, right-click menus, and IME, and this plugin does\nnot try to compete with it. Use it to observe and steer automation, and to\npreview local development servers without leaving the terminal.\n\n## Requirements\n\n- Herdr 0.7.4 or newer\n- Linux or macOS\n- Bun\n- Google Chrome or Chromium\n- A Kitty graphics-compatible terminal such as Ghostty, kitty, or WezTerm\n\nEnable Herdr's experimental graphics support in your Herdr configuration:\n\n```toml\n[experimental]\nkitty_graphics = true\n```\n\nApply the change by restarting Herdr or running:\n\n```bash\nherdr server reload-config\n```\n\n## Install\n\nInstall the published plugin from GitHub:\n\n```bash\nherdr plugin install ogulcancelik\u002Fherdr-browser --yes\n```\n\nFor local development, link this checkout instead:\n\n```bash\nherdr plugin link ~\u002FProjects\u002Fherdr-browser\n```\n\n## Agent Browser Automation\n\nHerdr Browser includes a CLI in the plugin directory; it does not install a\nglobal executable. Find the active checkout with:\n\n```bash\nherdr plugin list --plugin official.browser --json\n```\n\nRead `result.plugins[0].plugin_root`, then run the CLI with Bun:\n\n```bash\nbun run \"\u003Cplugin_root>\u002Fsrc\u002Fcli.ts\" views\nbun run \"\u003Cplugin_root>\u002Fsrc\u002Fcli.ts\" connect --view \u003Cview_id>\n```\n\n`views` lists browser views currently backed by visible plugin panes. `connect`\nstarts a loopback CDP gateway scoped to the selected view and returns its HTTP\nand WebSocket endpoints. The gateway represents the complete browser view, not\nonly its active tab. Browser Use, PinchTab, Playwright, and other CDP clients can\nnavigate and manage tabs through their normal APIs while the Herdr tab strip and\nrendered page follow standard CDP target activation.\n\nPoint a client at the returned endpoint:\n\n- Browser Use: set `BU_CDP_URL` to `cdp_http_url` or `BU_CDP_WS` to\n  `browser_ws_url`.\n- Playwright: call `chromium.connectOverCDP(cdp_http_url)`.\n- Playwright MCP: pass `--cdp-endpoint=\u003Ccdp_http_url>`.\n- Chrome DevTools MCP: pass `--browser-url=\u003Ccdp_http_url>`.\n\nWhile a client is connected, the pane stays fully interactive. Clicks, scrolling,\nhover, typing, and the toolbar act on the same targets the automation client\nsees, so you can intervene mid-run and hand control back without reconnecting.\n\nThe endpoint grants full control over that browser view. Keep it local and do\nnot expose it over the network. Herdr Browser retains ownership of Chromium;\nclosing an attached automation client disconnects it without terminating the\nplugin browser.\n\nThe agent-oriented workflow is documented in\n[`skills\u002Fherdr-browser\u002FSKILL.md`](skills\u002Fherdr-browser\u002FSKILL.md).\n\n## Open A Browser Pane\n\nOpen a blank browser in a right split:\n\n```bash\nherdr plugin pane open \\\n  --plugin official.browser \\\n  --entrypoint browser \\\n  --placement split \\\n  --direction right \\\n  --focus\n```\n\nUse `--placement tab`, `--placement zoomed`, or `--placement overlay` for the\nother supported layouts. The first toolbar row provides tab selection, close,\nand new-tab controls. The second provides back, forward, reload, stop, zoom,\nand URL entry. Page clicks, scrolling, hover, and keyboard input are forwarded\nto Chromium.\n\nPass an initial URL when another plugin opens the pane:\n\n```bash\nherdr plugin pane open \\\n  --plugin official.browser \\\n  --entrypoint browser \\\n  --placement zoomed \\\n  --env HERDR_BROWSER_INITIAL_URL=http:\u002F\u002F127.0.0.1:3000 \\\n  --focus\n```\n\n## Open Local Development Links\n\nThe plugin registers a link handler for HTTP URLs using `localhost`,\n`127.0.0.1`, or `[::1]`. Hold Control and click a matching URL in any Herdr\nterminal pane:\n\n```text\nhttp:\u002F\u002Flocalhost:5173\nhttp:\u002F\u002F127.0.0.1:3000\u002Fdashboard\nhttp:\u002F\u002F[::1]:8080\n```\n\nControl-click is used on macOS as well as Linux. A normal click remains terminal\ninput, and URLs that do not match the local-link handler continue through\nHerdr's normal external browser behavior.\n\nBy default, a local link opens the browser in a focused right split. Configure\nthat behavior in `browser.json` under the plugin configuration directory:\n\n```bash\nherdr plugin config-dir official.browser\n```\n\nExample configuration:\n\n```json\n{\n  \"linkOpenPlacement\": \"split\",\n  \"splitDirection\": \"right\",\n  \"focusOnOpen\": true,\n  \"browserZoom\": 1.25,\n  \"showDiagnostics\": false,\n  \"captureScale\": 1,\n  \"captureBackend\": \"screenshot\",\n  \"screencastEveryNthFrame\": 1,\n  \"screencastPollMs\": 250,\n  \"profileRoot\": \"\u002Fabsolute\u002Fpath\u002Fto\u002Fherdr-browser-profiles\"\n}\n```\n\n`browserZoom` sets the initial page zoom from `0.5` through `2.5` and defaults\nto `1`. The browser toolbar's `[-]` and `[+]` controls change the current pane\nin ten-percent steps and persist the new default to this file. Pane resizing\ndoes not change browser zoom.\n\n`showDiagnostics` reserves a bottom status row with stream and viewport metrics.\nIt defaults to `false` and is intended for performance debugging.\n\n`captureScale` reduces the captured frame size from `0.1` through `1` and\ndefaults to `1`. Frames are captured at full device pixels, so a HiDPI display\npays for every one of them twice over: once in Chromium's encoder and again in\nthe terminal's decode and texture upload. Setting `0.75` cuts pixel count by\nroughly 44% for a modest loss of sharpness, and is the most effective knob\navailable if a browser pane costs more CPU than you want. Text stays legible\nwell below `1` because the pane is already downscaled to fit the cell grid.\n\n`captureBackend`, `screencastEveryNthFrame`, and `screencastPollMs` tune the\nframe pipeline itself and rarely need changing. `captureBackend` selects\n`screenshot` or `screencast` for on-demand frames and defaults to `screenshot`;\nthe live pane stream uses screencast regardless. `screencastEveryNthFrame`\naccepts `1` or `2` and halves the producer rate at `2`. `screencastPollMs`\naccepts `50` through `5000` and defaults to `250`.\n\nChrome profiles persist by default under the plugin state directory and are\nisolated by Herdr session. `profileRoot` optionally changes the parent\ndirectory; the sanitized Herdr session name is still appended to prevent\nChrome profile-lock conflicts across concurrent sessions. Do not point it at a\nprofile currently used by another Chrome process.\n\n`linkOpenPlacement` accepts `split`, `tab`, `zoomed`, or `overlay`. An overlay\nis the recommended transient, popup-like browser surface. True Herdr `popup`\nplacement is not supported because popups do not have the pane identity needed\nby the graphics stream.\n\n## Keybindings\n\nAdd custom commands to your Herdr configuration to open the browser without a\nlink. This example binds a right split and a transient overlay:\n\n```toml\n[[keys.command]]\nkey = \"prefix+b\"\ntype = \"shell\"\ncommand = '\"${HERDR_BIN_PATH}\" plugin pane open --plugin official.browser --entrypoint browser --placement split --direction right --focus'\ndescription = \"open browser in right split\"\n\n[[keys.command]]\nkey = \"prefix+shift+b\"\ntype = \"shell\"\ncommand = '\"${HERDR_BIN_PATH}\" plugin pane open --plugin official.browser --entrypoint browser --placement overlay --focus'\ndescription = \"open browser overlay\"\n```\n\nReload the configuration after editing it:\n\n```bash\nherdr server reload-config\n```\n\n## Chromium Discovery\n\nThe plugin launches a separate headless Chromium process with a dedicated,\npersistent profile for each Herdr session. Cookies, origin storage, consent\nstate, and logins survive browser pane and daemon restarts within that session.\nIt does not attach to your normal browser process or reuse your normal browser\nprofile.\n\nOn Linux, it searches common Chrome and Chromium executable names on `PATH`. On\nmacOS, it also searches standard Google Chrome and Chromium application\nlocations. Set an explicit executable in the environment used to start the\nHerdr server when automatic discovery is insufficient, then restart Herdr:\n\n```bash\nexport HERDR_BROWSER_CHROME=\"\u002Fpath\u002Fto\u002Fchrome\"\n```\n\nThe current release does not download Chromium automatically. If no compatible\nbrowser is installed, startup fails with a discovery error.\n\n## Rendering\n\nFrames come from CDP screencast and reach the terminal through Herdr's pane\ngraphics stream. Capture is paint-driven and paced by delaying\n`Page.screencastFrameAck`, which applies backpressure before Chromium encodes\nanother frame instead of discarding frames after the cost is already paid. The\npassive ceiling is 15 FPS; direct input raises it to 30 FPS for 750 ms and then\nreturns to the passive rate. A settled page emits close to nothing.\n\n## Local Smoke Test\n\nStart the included test page on an unused port from a Herdr pane:\n\n```bash\nHERDR_BROWSER_TEST_PORT=43127 bun run test-page\n```\n\nControl-click the printed local URL. Confirm that the page opens, resizes with\nthe pane, accepts clicks and typing, and closes its browser view when the pane\nis closed.\n\nRun the automated checks with:\n\n```bash\nbun test\nbun run typecheck\n```\n\n## Current Limits\n\nWindows, true popup placement, downloads, right-click menus, DevTools, and IME\nare not supported. There is no page text selection, clipboard copy, or\nfind-in-page yet. Rendering requires Herdr's experimental Kitty graphics setting\nand is tuned for local sessions; the per-frame bandwidth is too high for remote\nSSH use.\n",2,"2026-07-29 02:30:07","CREATED_QUERY"]