Agent skill

Browser4 Plugin

by platonai in platonai/Browser4

Guides the creation of Browser4 plugins from requirements gathering through deployment.

Apache-2.0Auto-check passedProductivity & Automation

Install Browser4 Plugin

skills CLI
$ npx skills add platonai/Browser4 --skill browser4-plugin -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install platonai/Browser4 browser4-plugin --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/platonai/Browser4.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/browser4-plugin .claude/skills/browser4-plugin && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
browser4-plugin
GitHub stars
1.2k
Token cost
~3.6k tokens
SKILL.md length
1,458 words
Files
5 (incl. references)
Skills in repo
17
Repo updated
First seen
Licence
Apache-2.0

At a glance

Guides the creation of Browser4 plugins from requirements gathering through deployment.

  • Works in 4 steps: Event-handling plugin (BrowseEventMount) → Plugin with LLM agent tools (ToolMount) → Full-featured plugin (all major patterns) → …
  • The user wants to create
  • SKILL.md covers Quick Start, When to Use, How It Works and Patterns, plus 6 more sections
  • Calls mvn

What it does

Browser4 Plugin is an agent skill from platonai/Browser4. Guides the creation of Browser4 plugins from requirements gathering through deployment. Use when the user wants to create, build, scaffold, or extend Browser4 with a new plugin — whether for CAPTCHA solving, media processing, content conversion, page category detection, custom RPA actions, or new LLM agent tools.

Its SKILL.md is about 3.6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 5 other files, including reference files (for example `references/file-reference.md`, `references/plugin-loading.md` and `references/summary-algorithm.md`).

It sits in Productivity & Automation, covering Workflow automation and Requirements gathering. The repository describes itself as: Browser4 — an AI-native browser engine for autonomous agents, intelligent extraction, and large-scale web automation. The licence is Apache-2.0.

When your agent uses it

  • The user wants to create
  • Extend Browser4 with a new plugin — whether for CAPTCHA solving
  • Media processing
  • Content conversion

Example prompts

  • “Use the browser4-plugin skill to guide the creation of Browser4 plugins from requirements gathering through deployment”
  • “/browser4-plugin”

Workflow steps

4 steps, taken from the step headings in SKILL.md.

  1. Event-handling plugin (BrowseEventMount)
  2. Plugin with LLM agent tools (ToolMount)
  3. Full-featured plugin (all major patterns)
  4. Summary algorithm plugin (PageSummaryAlgorithmMount)

What it can do on your machine

Read from SKILL.md and the folder at commit 0fdba82. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • mvn

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Browser4 Plugin loads about 3.6k tokens when it runs, and up to ~12k if it reads all its reference files. Until then it costs about 83 tokens; SKILL.md has 1,458 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~83
When it runs · the whole SKILL.md, loaded when a task matches
~3.6k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~12k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from platonai/Browser4 at commit 0fdba82, republished under its Apache-2.0 licence (© platonai). 1,458 words, ~3,618 tokens.

Download SKILL.mdSave it as .claude/skills/browser4-plugin/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.
name
browser4-plugin
description
Guides the creation of Browser4 plugins from requirements gathering through deployment. Use when the user wants to create, build, scaffold, or extend Browser4 with a new plugin — whether for CAPTCHA solving, media processing, content conversion, page category detection, custom RPA actions, or new LLM agent tools.
title
Browser4 Plugin Development
tier
procedure

Browser4 Plugin Development

Quick Start

bash
mvn -pl browser4-pdk install          # install the PDK parent POM once
mvn archetype:generate -DarchetypeGroupId=ai.platon.pulsar \
    -DarchetypeArtifactId=browser4-plugin-archetype   # scaffold the plugin project
mvn -f <artifactId>/pom.xml package   # build the plugin JAR

Deploy the JAR to the server's plugins/ directory (or POST it to http://localhost:18182/api/plugins/install) and restart — the plugin is auto-discovered. Prerequisites: JDK 17+, Maven 3.9+, and access to the browser4-pdk parent POM.

For the full walkthrough — requirements clarification, mount-point implementation, services/config, manifest, tests, build & deploy — see Step-by-Step Workflow.

When to Use

Use this skill when the user wants to create, build, scaffold, or extend a Browser4 plugin — CAPTCHA solving, media processing, content conversion, page-category detection, custom RPA actions, or new LLM agent tools. It is the deep guide (mount points, services, tests, deployment); for plugin code scaffolding inside this repo use the browser4-coding skill.

Do NOT create a plugin for: simple data extraction from a known site (use the browser4-cli HTML snapshot / X-SQL instead), one-off browser automation (the CLI or a quick script is faster), or modifying core Browser4 behavior (that belongs in the main source tree, not a plugin).

How It Works

A plugin is a thin JAR built against the browser4-pdk parent POM: you scaffold the project from the archetype, implement the relevant PluginMount interfaces (Browse/Load/Crawl event mounts, ToolMount, PageSnifferMount), wire Spring auto-configuration, and build. The server auto-discovers the JAR from plugins/ on restart and logs the mounted beans.

Patterns

1. Event-handling plugin (BrowseEventMount)

Scaffold with mountPoints=["BrowseEventMount"], implement the browse handler, and register it via auto-configuration. The key hook is onDocumentSteady — see Step 4a for the full code.

2. Plugin with LLM agent tools (ToolMount)

Scaffold with mountPoints=["ToolMount"] and hasCustomTools=true, implement a ToolExecutor extending AbstractToolExecutor, and declare the tool in plugin.json — see Step 4d.

Model it on the first-party plugins — browser4-plugins/browser4-images/ implements BrowseEventMount + ToolMount + Browser4Plugin + Config + Service + BrowseEventHandler + ToolExecutor.

4. Summary algorithm plugin (PageSummaryAlgorithmMount)

Scaffold with mountPoints=["PageSummaryAlgorithmMount"], implement PageSummaryAlgorithm (id/displayName/description + generate(PageSummaryInput)), and expose it via the mount bean. The algorithm becomes selectable with browser4-cli htmlsnapshot summary --algorithm <id> and visible in browser4-cli htmlsnapshot algorithms — see Contributing a summary algorithm.

Flags

The archetype takes named parameters — there are no CLI flags:

ParameterTypeRequiredDefaultDescription
groupIdStringYes—Maven groupId for the new plugin project (e.g., com.example)
artifactIdStringYes—Maven artifactId, conventionally browser4-<feature-name>
versionStringNo1.0.0-SNAPSHOTPlugin version
pluginNameStringYes—Human-readable plugin name (e.g., "My Feature Plugin")
pluginDescriptionStringNo"A Browser4 plugin that provides custom functionality"One-line description
mountPointsString[]No["BrowseEventMount"]Which PluginMount interfaces to implement. Options: BrowseEventMount, LoadEventMount, CrawlEventMount, ToolMount, PageSnifferMount, PageSummaryAlgorithmMount
hasCustomToolsBooleanNofalseWhether the plugin registers LLM agent tool executors
hasLifecycleBooleanNofalseWhether the plugin implements the Browser4Plugin lifecycle interface
featuresString[]No—List of concrete capabilities to implement (e.g., "detect media on page", "download files", "expose LLM tool")

When to Create a Plugin

Create a plugin when you need to:

  • Hook into the browse lifecycle — execute custom logic on page-navigation events (before navigation, after DOM is steady, before tab close). Examples: CAPTCHA detection and solving, ad blocking, custom RPA workflows.
  • Hook into the load lifecycle — intercept or transform page content during loading. Examples: URL normalization and stripping tracking parameters, content extraction, HTML post-processing.
  • Hook into the crawl lifecycle — accept or reject URLs during crawling. Examples: domain allowlists, duplicate URL filtering, paywall detection and skip.
  • Register custom tools for LLM agents — expose new capabilities as callable functions. Examples: image download, PPTX generation, database queries, API integrations.
  • Add page category sniffers — teach Browser4 to recognize new page types so it can adapt its behavior. Examples: CAPTCHA pages, login pages, paywalls, shopping carts.
  • Contribute page summary algorithms — add alternative htmlsnapshot summary generators (domain-specific, readability-focused, LLM-based) selected via --algorithm <id>.

Errors & Recovery

SymptomLikely causeFix
Plugin not loaded at startup; no "registered plugin" logbrowser4-plugin.json missing, malformed, or JAR not in the plugins directoryVerify JAR is in the configured plugins directory; verify JSON is valid; verify autoConfigurationClasses FQN matches
Plugin skipped as "default-disabled (opt-in)"Manifest has defaultEnabled: false and no explicit enable overrideEnable with browser4.plugins.enable=<name> or browser4.plugins.enable-all=true, or set defaultEnabled: true
ClassNotFoundException for Browser4 API classesDependency scope is compile instead of providedChange all browser4-* and Spring Boot deps to <scope>provided</scope>
Mount point handlers never fireAuto-configuration class doesn't implement the correct PluginMount interface, or AutoConfiguration.imports file is missing/wrongVerify AutoConfiguration.imports contains the exact FQN; verify the auto-config class implements the mount interface
BeanCreationException at startupA bean dependency is missing or circularCheck bean constructor args; ensure @Lazy on the auto-config class
Tool executor not available to agentsgetToolExecutors() returns empty list, or executor not exposed as a Spring beanVerify the list contains beans from applicationContext; verify executor has @Bean in auto-config
Archetype generation failsMaven can't resolve browser4-plugin-archetypeBuild the PDK locally first: mvn -pl browser4-pdk install
onDocumentSteady handler throws silentlyMissing try-catch in handler bodyAlways wrap handler body in try-catch; log errors via a logger
Config properties have no effectConfig class not reading from Config or property prefix mismatchVerify fromConfig() method reads all keys with correct prefix; verify property names in application config
NoSuchMethodError at runtimePlugin compiled against a different Browser4 version than the hostRebuild with matching browser4-pdk version; or reinstall the matching Browser4 version
JAR contains embedded dependenciesFat JAR instead of thin JAR — spring-boot-maven-plugin with repackage goalRemove or skip the repackage goal; ensure only maven-jar-plugin is active
NoClassDefFoundError for third-party librariesThird-party dependency not bundled in the plugin JARUse compile scope for third-party deps (not provided) so they are included in the JAR
Show full SKILL.md (557 more words)Show less

Critical Warnings

Warning: All browser4-* and Spring Boot dependencies must use <scope>provided</scope>. Using compile scope causes ClassNotFoundException at runtime because the host application provides these classes. The plugin JAR should only bundle your own code and true third-party libraries (use compile scope for those).

Warning: Always annotate the auto-configuration class with @Lazy. Plugin beans depend on services that may not be available until the application context is fully initialized. Without @Lazy, startup may fail with BeanCreationException.

Warning: The browser4-plugin.json manifest and the Browser4Plugin.manifest property must stay in sync. The JSON file is always required for JAR discovery; the Browser4Plugin interface is optional. If both are present, the JSON manifest is authoritative for the plugin registry.

Warning: Event handlers run on the browser event loop. Never perform blocking I/O (HTTP calls, file writes) directly in a handler — use coroutines. For ToolMount executors, the framework handles coroutine dispatch automatically.

Warning: An uncaught exception in one event handler can break the entire handler chain. Always wrap handler bodies in try-catch and log failures.

Note: For lightweight plugin development without cloning the full Browser4 repo, the browser4-pdk parent POM extends pulsar-parent from Maven Central. Third-party developers only need the archetype and a Maven installation.

Tip: Build and test incrementally. After scaffolding, immediately run mvn package to verify the build works before writing any custom code. Then implement one mount point at a time, rebuilding and testing after each.

Tip: Read the browser4-pdk-test-plugin source before writing complex handlers. It demonstrates every mount point and serves as the compatibility canary.

Tip: When using @ConditionalOnProperty, prefer matchIfMissing = true so the plugin is enabled by default unless explicitly disabled. This matches the convention used by all first-party plugins.

Tip: The browser4-plugins/browser4-images/ plugin is the best all-around reference — it implements BrowseEventMount + ToolMount + Browser4Plugin with a config data class, service layer, browse event handler, and tool executor.

Reference Map

I want to...Read
Walk through the full plugin lifecycle (requirements → scaffold → deploy)Step-by-Step Workflow
Know which files a plugin project contains and what each is forFile Reference
Understand default vs opt-in loading and enable overridesPlugin Loading

Key source files to read for patterns and examples:

ResourcePathWhat it demonstrates
Canonical test pluginbrowser4-pdk/browser4-pdk-test-plugin/All three event-phase mount points (BrowseEventMount, LoadEventMount, CrawlEventMount) — the compatibility canary
Plugin archetypebrowser4-pdk/browser4-plugin-archetype/src/main/resources/archetype-resources/Scaffolded project structure, templates for all required files
PluginMount interfacesbrowser4-core/browser4-skeleton/src/main/kotlin/ai/platon/pulsar/skeleton/plugin/MountPoints.ktPluginMount, BrowseEventMount, LoadEventMount, CrawlEventMount, PageSummaryAlgorithmMount interface definitions
Summary algorithm SPIbrowser4-core/browser4-skeleton/src/main/kotlin/ai/platon/pulsar/skeleton/workflow/parse/html/ (PageSummaryAlgorithm.kt, PageSummaryAlgorithmRegistry.kt)Algorithm interface, input type, registry; walkthrough: summary-algorithm.md
Event lifecyclebrowser4-core/browser4-skeleton/src/main/kotlin/ai/platon/pulsar/skeleton/event/PageEvents.ktLoadEventHandlers, BrowseEventHandlers, CrawlEventHandlers — all 28 hooks
Event handler typesbrowser4-core/browser4-skeleton/src/main/kotlin/ai/platon/pulsar/skeleton/event/EventHandlers.ktChainable handler function types (WebPageWebDriverEventHandler, etc.)
Plugin manifestbrowser4-core/browser4-skeleton/src/main/kotlin/ai/platon/pulsar/skeleton/plugin/PluginManifest.ktPluginManifest data class schema
ToolMount + registrybrowser4-agentic/src/main/kotlin/ai/platon/pulsar/agentic/tools/ToolMount.ktToolMount interface + CustomToolRegistry singleton
ToolExecutor basebrowser4-agentic/src/main/kotlin/ai/platon/pulsar/agentic/tools/builtin/AbstractToolExecutor.ktToolExecutor interface and AbstractToolExecutor base class
PDK parent POMbrowser4-pdk/pom.xmlParent POM for plugin projects (standalone — inherits from pulsar-parent on Maven Central)
Plugin dev docsdocs/plugin-development.mdFull plugin development guide with API reference
Most complete reference pluginbrowser4-plugins/browser4-images/Implements BrowseEventMount + ToolMount + Browser4Plugin + Config + Service + BrowseEventHandler + ToolExecutor — all major patterns
CAPTCHA pluginbrowser4-plugins/browser4-captcha/Reference for PageSnifferMount + multi-tool executor
PDK test plugin sourcebrowser4-pdk/browser4-pdk-test-plugin/src/main/kotlin/ai/platon/pulsar/pdk/testplugin/config/TestPluginAutoConfiguration.ktMinimal mount-point wiring for all three event phases

See Also

  • Plugin Development Guide — Official plugin development documentation
  • AGENTS.md — Project architecture, build commands, code style, and testing conventions
  • PDK Test Plugin — Minimal reference plugin implementing all mount points
  • Built-in Plugins — Five first-party plugin implementations (captcha, images, media, pptx, markdown)

© platonai, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 4 other files (references) in skills/browser4-plugin of platonai/Browser4.

  • SKILL.md
  • references/file-reference.md
  • references/plugin-loading.md
  • references/summary-algorithm.md
  • references/workflow.md

Open the folder on GitHubat commit 0fdba82

Compare with similar skills

Browser4 Plugin next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Browser4 Plugin compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Browser4 Plugin this skillplatonai/Browser41.2k—~3.6kAutomated safety check: PassApache-2.0
Agentic Workflow Designerdotnet/Open-XML-SDK4.6k2 repos~3.5kAutomated safety check: PassMIT
Fastgpt Workflow GeneratorYYH211/Claude-meta-skill282—~5.5kAutomated safety check: PassMIT
Rpa Gen Rulescoddy-project/coddy-agent165—~1.2kAutomated safety check: PassMIT
Refly Skill Runnerrefly-ai/refly7.5k—~1.7kAutomated safety check: PassCustom licence
Newsblur CLIsamuelclay/NewsBlur7.6k—~1.3kAutomated safety check: PassMIT

Similar skills

  • Agentic Workflow Designer

    dotnet/Open-XML-SDK

    Official

    Interviews you one question at a time about goal, trigger, permissions and data needs, then drafts a single agentic workflow markdown file.

    4.6k GitHub starsUsed in 2 repos~3.5k tokens
    Agent WorkflowsAuto-check passed
  • Fastgpt Workflow Generator

    YYH211/Claude-meta-skill

    Generates production-ready FastGPT workflow JSON from natural language requirements.

    282 GitHub stars~5.5k tokensUpdated 4 mo ago
    Productivity & AutomationAuto-check passed
  • Rpa Gen Rules

    coddy-project/coddy-agent

    A skill your agent uses when the user invokes /rpa-gen-rules or asks to create, refresh, audit, or synchronize project instructions such as root AGENTS.md, Cursor .cursor/rules, or Claude Code…

    165 GitHub stars~1.2k tokensUpdated today
    Productivity & AutomationAuto-check passed
  • Refly Skill Runner

    refly-ai/refly

    Base skill for the Refly ecosystem: finds, runs and monitors workflow-backed skills through the refly command line, with the actual work done on the Refly backend.

    7.5k GitHub stars~1.7k tokensUpdated 2 mo ago
    Productivity & AutomationAuto-check passed
  • Newsblur CLI

    samuelclay/NewsBlur

    Manage your NewsBlur from the terminal. An agent skill from samuelclay/NewsBlur.

    7.6k GitHub stars~1.3k tokensUpdated today
    Productivity & AutomationAuto-check passed
  • Robocorp Automation

    robocorp/robocorp

    Bootstrap from an empty folder or build, debug, locally run, and validate Python automations built with Robocorp or Sema4.ai tooling, robocorp.tasks, rcc, robocorp-browser, and RPA Framework.

    653 GitHub stars~2.4k tokensUpdated 6 days ago
    Productivity & AutomationAuto-check passed

More from platonai/Browser4

All 17 skills in this repo
  • Data Validation

    platonai/Browser4

    Validates data against common and custom rules (required fields, formats, ranges).

    1.2k GitHub stars~896 tokensUpdated today
    Auto-check passed
  • Form Filling

    platonai/Browser4

    Automatically fills web forms using provided field data and can optionally submit the form.

    1.2k GitHub stars~1.1k tokensUpdated today
    Auto-check passed
  • Web Scraping

    platonai/Browser4

    Extracts data from web pages using browser automation and CSS/JavaScript selectors.

    1.2k GitHub stars~1.1k tokensUpdated today
    Auto-check passed
  • Organize Task Files

    platonai/Browser4

    Lists, pairs, deduplicates, and moves task files across the Coworker task state machine (0draft → 6git-pushed).

    1.2k GitHub stars~801 tokensUpdated today
    Auto-check passed
  • Task Token Usage

    platonai/Browser4

    Analyzes Claude Code session traces (JSONL) and draft task files to report token usage per task.

    1.2k GitHub stars~701 tokensUpdated today
    Auto-check passed
  • Weather

    platonai/Browser4

    Fetches current weather conditions and a 7-day forecast for a requested location using Open-Meteo geocoding and forecast APIs.

    1.2k GitHub stars~1k tokensUpdated today
    Auto-check passed

Questions about Browser4 Plugin

What does Browser4 Plugin do?

Guides the creation of Browser4 plugins from requirements gathering through deployment. Browser4 Plugin is an agent skill from platonai/Browser4. Guides the creation of Browser4 plugins from requirements gathering through deployment.

When should I use Browser4 Plugin?

Browser4 Plugin fits situations like: the user wants to create; extend Browser4 with a new plugin — whether for CAPTCHA solving; media processing; content conversion.

How do I install Browser4 Plugin in Claude Code?

Run `npx skills add platonai/Browser4 --skill browser4-plugin -a claude-code`. Or copy the skill folder (skills/browser4-plugin in platonai/Browser4) into .claude/skills/browser4-plugin in your project. Claude Code loads it when a task matches its description.

How do I install Browser4 Plugin in Codex?

Run `npx skills add platonai/Browser4 --skill browser4-plugin -a codex`. Or copy the skill folder (skills/browser4-plugin in platonai/Browser4) into .agents/skills/browser4-plugin in your project. Codex loads it when a task matches its description.

Can I use Browser4 Plugin in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add platonai/Browser4 --skill browser4-plugin -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/browser4-plugin, .gemini/skills/browser4-plugin, .github/skills/browser4-plugin and .opencode/skills/browser4-plugin in your project.

What does Browser4 Plugin need to run?

Going by SKILL.md and its folder, Browser4 Plugin needs the command-line tools its instructions call (mvn).

Does Browser4 Plugin access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Browser4 Plugin safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Browser4 Plugin use?

Browser4 Plugin is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Browser4 Plugin use?

About 3.6k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 8.7k tokens, read only when the agent opens those files.

What are the alternatives to Browser4 Plugin?

Skills that share tags, products or a category with Browser4 Plugin: Agentic Workflow Designer (dotnet/Open-XML-SDK, 4.6k stars), Fastgpt Workflow Generator (YYH211/Claude-meta-skill, 282 stars), Rpa Gen Rules (coddy-project/coddy-agent, 165 stars) and Refly Skill Runner (refly-ai/refly, 7.5k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Browser4 Plugin?

platonai (a GitHub user) maintains it in platonai/Browser4, which has 1,152 GitHub stars. The repository holds 17 skills in this directory. The repository was last updated on October 7, 2026.

Source: platonai/Browser4 on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.