Browser4 Plugin logo

Browser4 Plugin

CommunityPopular
platonai
browser4-plugin

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.

Overview

Publisherplatonai
RepositoryBrowser4
Skill namebrowser4-plugin
Stars
1.2K
Forks
152
Bundled files
4
LicenseApache-2.0
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 4 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by platonai on GitHub. Read the source before you install it.

Installation

Install the Browser4 Plugin AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/platonai/Browser4/tree/main/skills/browser4-plugin
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/platonai/Browser4.git /tmp/Browser4
mkdir -p .claude/skills
cp -r /tmp/Browser4/skills/browser4-plugin .claude/skills/browser4-plugin
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Browser4 Plugin in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Browser4 Plugin on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Browser4 Plugin is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

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.

3. Full-featured plugin (all major patterns)

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

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)

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Browser4 Plugin AI skill do?

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.

Why use Browser4 Plugin on TypingMind?

Because you install it once and use it with any model. Browser4 Plugin is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Browser4 Plugin in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/platonai/Browser4/tree/main/skills/browser4-plugin. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Browser4 Plugin?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Browser4 Plugin?

As many as you like. As long as a model supports skills, you can use Browser4 Plugin with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Browser4 Plugin AI skill free?

Yes. It is published on GitHub by platonai under the Apache-2.0 license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇