| .github | ||
| docs | ||
| plugins | ||
| scripts | ||
| test | ||
| .gitignore | ||
| .gitmodules | ||
| AGENTS.md | ||
| crabpot.config.json | ||
| crabpot.schema.json | ||
| LICENSE | ||
| package.json | ||
| README.md | ||
crabpot
Compatibility trap for OpenClaw plugin contracts.
crabpot keeps a curated set of real community plugins pinned under plugins/
and runs seam-focused compatibility checks against OpenClaw plugin APIs. The goal
is to catch contract drift before external plugin authors do.
What this tests
- plugin manifests and install metadata
- native tool registration and dynamic tool schemas
- channel registration and message delivery seams
- lifecycle hooks such as
gateway_start,gateway_stop, andbefore_install - agent hooks such as
before_tool_call,before_prompt_build,llm_input,llm_output, andagent_end - provider capability registration such as speech/TTS
- plugin-owned services, routes, subprocesses, and async job patterns
Layout
crabpot/
crabpot.config.json fixture manifest and seam tags
plugins/ external plugin repositories as git submodules
scripts/ manifest and fixture helpers
test/ repo-level checks
docs/ operating notes and seam matrix
Quick start
npm test
node scripts/list-fixtures.mjs
node scripts/sync-fixtures.mjs --check
To materialize the fixture repos as submodules:
node scripts/sync-fixtures.mjs --materialize
git submodule update --init --recursive
That command mutates .gitmodules and plugins/*. Commit those changes when
you intentionally pin or update fixture revisions.
Fixture policy
Fixtures should earn their spot by covering a distinct seam. Popularity is a useful signal, but a small plugin that exercises a rare hook is more valuable than the fourth web-search wrapper.
The first fixture set intentionally covers channels, dynamic tools, LLM observation, diagnostics, gateway-owned services, async jobs, provider capabilities, and security/policy hooks.