{
  "markdown": "# terminal-firefox (Claude Code Plugin)\n\nA [Claude Code](https://docs.anthropic.com/en/docs/claude-code) plugin that gives Claude a full Firefox browser in your terminal. Browse, inspect, and interact with web pages using Marionette -- all from within a Claude Code session.\n\nBuilt on [Browsh](https://github.com/browsh-org/browsh), which renders Firefox as text and ANSI colors in the terminal. Works in any terminal, including tmux and over SSH.\n\n## Demo\n\n\n\n\n<table>\n  <tbody>\n    <tr>\n      <td>\n        <video src=\"https://github.com/user-attachments/assets/8c51a22b-2d6f-45d1-a937-0f9befff8372\">\n      </td>\n    </tr>\n  </tbody>\n</table>\n\n## How it works\n\nBrowsh launches headless Firefox and renders pages in the terminal via a WebExtension. This plugin adds **programmatic control** by creating a second Marionette session alongside Browsh, giving Claude full access to navigate, evaluate JS, click elements, type, extract HTML, and take screenshots.\n\nFirefox's Marionette protocol is hardcoded to allow only 1 session. This plugin includes a **one-time patch** to Firefox's `omni.ja` (internal JS modules) that removes this limit, enabling Browsh and the control script to coexist.\n\n### What gets patched\n\nThree files inside Firefox's `omni.ja`:\n\n| File | Change |\n|------|--------|\n| `server.sys.mjs` | Removes connection rejection when a session exists |\n| `driver.sys.mjs` | Removes session creation limit |\n| `WebDriverBiDi.sys.mjs` | Removes BiDi session creation limit |\n\nThe original `omni.ja` is backed up to `omni.ja.bak`. The patch must be re-applied after Firefox updates.\n\n## What it does\n\nWhen you invoke `/terminal-firefox`, Claude will:\n\n1. Check prerequisites (tmux, browsh, firefox, node)\n2. Patch Firefox if needed (one-time)\n3. Launch Browsh in a tmux split pane (terminal rendering)\n4. Control the browser via Marionette (programmatic access)\n\n### Commands\n\n| Command | Description |\n|---------|-------------|\n| `nav <url>` | Navigate to a URL |\n| `eval <expr>` | Evaluate JavaScript |\n| `click <selector>` | Click an element by CSS selector |\n| `type <selector> <text>` | Type text into element |\n| `html [selector]` | Get page HTML |\n| `shot [file]` | Take a screenshot (PNG) |\n| `title` | Get page title |\n| `url` | Get current URL |\n| `back` / `forward` | Navigate history |\n| `refresh` | Refresh page |\n| `windows` | List all open windows |\n\n### Example conversation\n\n```\nYou: /terminal-firefox open https://news.ycombinator.com\n\nClaude: [launches Browsh, patches Firefox if needed, lists page title]\n  Hacker News\n\nYou: get me the top 5 story titles\n\nClaude: [runs eval to extract titles]\n  1. Show HN: I built a thing\n  2. Why Rust is taking over\n  ...\n```\n\n## Requirements\n\n- **Firefox 57+** -- `brew install --cask firefox` (macOS) or package manager (Linux)\n- **tmux** -- for split pane rendering\n- **Node.js 21+** -- for the Marionette control script\n- **python3** -- for the Firefox patch script\n\nBrowsh is auto-installed on first run if missing.\n\n## Installation\n\n### Option 1: Plugin Directory (recommended)\n\nInstall directly from the Claude Code plugin directory:\n\n```\n/plugins\n```\n\nSearch for **terminal-firefox** and install it.\n\n### Option 2: Install plugin from GitHub\n\n```bash\n# In any Claude Code session:\n/install-plugin https://github.com/gyoz-ai/terminal-firefox-skill\n```\n\n### Option 3: Manual install\n\nClone and symlink the skill:\n\n```bash\ngit clone https://github.com/gyoz-ai/terminal-firefox-skill.git ~/terminal-firefox-skill\nln -s ~/terminal-firefox-skill/skills/terminal-firefox ~/.claude/skills/terminal-firefox\n```\n\nOr copy directly:\n\n```bash\nmkdir -p ~/.claude/skills/terminal-firefox\ncurl -o ~/.claude/skills/terminal-firefox/SKILL.md \\\n  https://raw.githubusercontent.com/gyoz-ai/terminal-firefox-skill/main/skills/terminal-firefox/SKILL.md\ncurl -o ~/.claude/skills/terminal-firefox/marionette.mjs \\\n  https://raw.githubusercontent.com/gyoz-ai/terminal-firefox-skill/main/skills/terminal-firefox/marionette.mjs\nchmod +x ~/.claude/skills/terminal-firefox/marionette.mjs\n```\n\n## Usage\n\nInside tmux:\n\n```bash\n/terminal-firefox open https://example.com\n/terminal-firefox search for the latest Rust release notes\n```\n\n## Architecture\n\n```\n+---------------------------+---------------------------+\n|                           |                           |\n|    Claude Code            |    Browsh (Firefox)       |\n|    conversation           |    rendering in terminal  |\n|                           |                           |\n|    marionette.mjs         |    Session #1: Browsh     |\n|    Session #2: control    |    (WebExtension + Go)    |\n|         |                 |         |                 |\n|         +--- Marionette port 2828 --+                 |\n|                           |                           |\n+---------------------------+---------------------------+\n                    tmux split pane\n```\n\n## Plugin structure\n\n```\nterminal-firefox-skill/\n├── .claude-plugin/\n│   └── plugin.json\n├── skills/\n│   └── terminal-firefox/\n│       ├── SKILL.md\n│       └── marionette.mjs\n├── LICENSE\n└── README.md\n```\n\n## Differences from terminal-chromium\n\n| | terminal-chromium | terminal-firefox |\n|--|---|---|\n| Engine | Chromium (Carbonyl) | Firefox (Browsh) |\n| Protocol | CDP (native) | Marionette (patched multi-session) |\n| Rendering | Unicode half-block chars | Text + ANSI colors |\n| Maintenance | Carbonyl unmaintained | Browsh actively maintained |\n| Setup | Zero-config | One-time Firefox patch |\n\nBoth plugins can run simultaneously.\n\n## Credits\n\n- [Browsh](https://github.com/browsh-org/browsh) by Thomas Buckley-Houston\n- [terminal-chromium-skill](https://github.com/gyoz-ai/terminal-chromium-skill) -- sister plugin\n\n## License\n\nMIT\n",
  "bytes": 5715,
  "sha": "b43c56cd81d5147b205a4e90813889499a733339b4edec311d9ef920bf696f91",
  "repo_slug": "gyoz-ai/terminal-firefox-skill",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/plg_gyoz_ai_terminal_firefox_skill_terminal__92468dac/readme"
}