golemcore-plugins is the external plugin repository for the GolemCore runtime.
It contains the shared Java contracts that plugins compile against, the first-party plugin modules shipped by the GolemCore team, and the registry metadata that describes every released plugin artifact.
This repository is designed for two workflows:
- building and validating plugin modules inside one Maven reactor
- releasing versioned plugin artifacts and registry metadata from the default branch through CI
.
|-- extension-api/ # Extension-facing SPI and shared DTO contracts
|-- runtime-api/ # Runtime-facing interfaces provided by the engine
|-- golemcore/* # First-party plugin modules
|-- registry/ # Marketplace metadata for released plugin versions
|-- dist/ # Locally built plugin artifacts
|-- scripts/ # Repository validation and release helpers
|-- CONTRIBUTING.md # Contribution, versioning, and release rules
`-- docs/CODING_GUIDE.md # Repository-wide coding conventions
The repository publishes two shared libraries used by plugin modules:
me.golemcore.plugins:golemcore-plugin-extension-apiExtension-facing SPI, tool/provider contracts, and shared execution DTOs.me.golemcore.plugins:golemcore-plugin-runtime-apiEngine-provided runtime interfaces and DTOs that plugins can depend on without importing engine internals.
These libraries are versioned at the repository level and are intentionally separate from per-plugin release numbers.
The current golemcore/* modules in this repository are:
| Plugin | Purpose |
|---|---|
golemcore/brave-search |
Brave Search web search tool plugin with API-key backed queries. |
golemcore/browser |
Playwright-backed browser automation tool with screenshot support. |
golemcore/browserless |
Browserless smart scrape plugin for rendered HTML, markdown, and link extraction. |
golemcore/elevenlabs |
ElevenLabs-backed STT/TTS provider plugin. |
golemcore/firecrawl |
Firecrawl-backed page scraping plugin for markdown, summary, HTML, and link extraction. |
golemcore/lightrag |
LightRAG-backed retrieval provider plugin for prompt augmentation and indexing. |
golemcore/mail |
IMAP read and SMTP send tool plugin for mailbox integrations. |
golemcore/perplexity-sonar |
Perplexity Sonar grounded-answer plugin with configurable model selection and synchronous completions. |
golemcore/pinchtab |
PinchTab browser automation plugin for navigation, snapshots, actions, text extraction, and screenshots. |
golemcore/tavily-search |
Tavily-backed web search tool plugin with configurable search depth and answer generation. |
golemcore/telegram |
Telegram channel, invite onboarding, confirmations, and plan approval integration. |
golemcore/slack |
Slack Socket Mode channel plugin with thread follow-ups, confirmations, and plan approval UI. |
golemcore/weather |
Open-Meteo weather tool plugin with no external credentials required. |
golemcore/whisper |
Whisper-compatible speech-to-text provider plugin. |
Each plugin module contains its own Maven project, plugin.yaml descriptor, tests, and packaging configuration.
Every plugin release is represented by three sources of truth that must stay aligned:
- the plugin module version in
golemcore/<plugin>/pom.xml - the plugin manifest in
golemcore/<plugin>/plugin.yaml - the released metadata in
registry/<owner>/<plugin>/
Plugin artifacts are packaged as shaded JARs and copied into dist/<owner>/<plugin>/<version>/ during local builds.
Released registry metadata records the artifact path, checksum, publish timestamp, and source commit for that version.
Released versions are immutable. If plugin code changes after a version has been released, ship a new SemVer version instead of rewriting the checksum or metadata of an existing one.
Use the strict Maven profile for repository-level verification:
mvn -B -ntp -P strict verifyThis runs the formatter, unit tests, PMD, SpotBugs, and plugin packaging checks across the reactor.
Use the helper script to validate manifests, module versions, and registry metadata:
python3 scripts/plugins_repo.py validateIf you want the script to also compare current registry checksums against locally built artifacts, run:
python3 scripts/plugins_repo.py validate --check-local-artifactsFor local marketplace development only, refresh current registry metadata from locally built artifacts:
python3 scripts/plugins_repo.py sync-local-registryYou can also scope the refresh to one plugin:
python3 scripts/plugins_repo.py sync-local-registry --plugin golemcore/browserDo not use local registry sync to rewrite metadata for an already released version in a PR.
Normal plugin releases are produced from the default branch.
The release pipeline determines which plugins changed, derives the SemVer bump from conventional commits, packages the plugin artifact, refreshes registry/ metadata, publishes the artifact, and creates the release tag.
Release tag format:
<owner>-<plugin>-v<version>
Examples:
golemcore-telegram-v1.2.0golemcore-whisper-v2.0.1
This repository uses conventional commits for both commit subjects and PR titles.
That matters because squash-merge commit titles are part of the release signal on main.
Common examples:
feat(golemcore/telegram): add callback retry backofffix(golemcore/whisper): reject empty STT responsesdocs(repo): add repository overviewbuild(repo): align plugin packaging with shaded jars
Breaking changes must use ! or a BREAKING CHANGE: footer.
The main pipelines are:
Semantic PR TitleConventional CommitsCICI / release_mainRelease Plugin
Together they validate repository structure, plugin metadata alignment, formatting, strict Maven checks, and the automated release flow.
Start with:
CONTRIBUTING.md is the source of truth for versioning rules, release semantics, merge policy, and CI expectations.