Claude Code and Codex plugin marketplace for autonomous SaaS delivery loops.
This repository is organized around one mission: help AI systems discover real market needs, convert those signals into production-quality SaaS improvements, and deliver one-shot implementations with minimal human intervention. The plugins are generic and project-agnostic, but the default audience is Estonian SaaS companies, e-residents, small businesses, and micro-OÜs.
Plugins in this marketplace usually serve one part of the loop:
- Demand signals — customer meetings, support email, Reddit/community research, live-product monitoring, abandoned funnels, and paid-search performance.
- Conversion to work — structured handoffs, GitHub/Plane issues, growth briefs, workflow specs, and maintainable research artifacts.
- Production delivery — one-shot implementation, browser QA, regression tests, tribunal review, CI/deploy monitoring, and autonomous maintenance.
Utilities that do not discover demand directly still belong here when they make that loop safer, cheaper, or more reliable.
Add this marketplace to Claude Code:
/plugin marketplace add paat/claude-plugins
Install a plugin:
/plugin install <plugin-name>@paat-plugins
Add this repo as a Codex marketplace:
codex plugin marketplace add paat/claude-pluginsFor a local checkout, run this from the repo root:
codex plugin marketplace add .List available Codex plugins:
codex plugin list --marketplace paat-pluginsInstall a plugin:
codex plugin add <plugin-name>@paat-pluginsWhen refreshing an already installed plugin, preserve paths held by active Codex sessions with the repository wrapper:
scripts/refresh-codex-plugin.sh <plugin-name>@paat-pluginsThe wrapper retains retired cache versions for seven days so active sessions can
continue reading their original skill locators. Retention is capped at eight old
versions; rapid refreshes can evict a younger version, and the wrapper warns when
that happens. Start a new Codex thread to use the newly installed version. Direct
codex plugin add replaces the old cache immediately. A read attempted while the
Codex install command itself is replacing the cache can still fail transiently;
retry it after the wrapper returns.
If an old locator is already missing, resolve only to the same plugin's current Codex version and surface the version change:
scripts/resolve-codex-plugin-resource.sh <stale-codex-cache-path>Never substitute a Claude plugin-cache path. Both helpers require Bash 4+ and
standard POSIX utilities; refresh also requires util-linux flock.
Install the Python check dependency, then run the repository checks:
python3 -m pip install -r requirements-dev.txt
python3 scripts/check-plugin-catalog.py
python3 scripts/check-plugin-content.py
python3 scripts/test_check_plugin_content.py
python3 scripts/test_refresh_codex_plugin.py
python3 scripts/sync-codex-marketplace.py --checkAfter changing .claude-plugin/marketplace.json or a plugin's .claude-plugin/plugin.json, regenerate the Codex marketplace:
python3 scripts/sync-codex-marketplace.pyIn Codex, invoke the update-codex-marketplace skill from this repo for the same workflow.
Codex-specific behavior differences are tracked in docs/codex-plugin-behavior.md.
Each plugin lives under plugins/ with this structure:
plugins/<plugin-name>/
├── .claude-plugin/
│ └── plugin.json # name, description, version, author, license
├── .codex-plugin/
│ └── plugin.json # generated Codex plugin manifest
├── skills/ # SKILL.md files (optional)
├── commands/ # Command .md files (optional)
├── hooks/ # Hook definitions (optional)
└── agents/ # Agent definitions (optional)
- Create the plugin directory under
plugins/ - Add a
.claude-plugin/plugin.jsonwith plugin metadata - Add skill, command, hook, or agent files as needed
- Add an entry to
.claude-plugin/marketplace.jsonin thepluginsarray - Run
python3 scripts/sync-codex-marketplace.pyto update Codex manifests and.agents/plugins/marketplace.json
Before pushing plugin changes, bump that plugin's version in both
plugins/<plugin-name>/.claude-plugin/plugin.json and .claude-plugin/marketplace.json.
Enable the guard locally with:
git config core.hooksPath .githooks