

Also from Kynth Studios


Also from Kynth Studios


Also from Kynth Studios
1# Plugin SDK Boundary23This directory is the public contract between plugins and core. Changes here4can affect bundled plugins and third-party plugins.56## Source Of Truth78- Docs:9 - `docs/plugins/sdk-overview.md`10 - `docs/plugins/sdk-entrypoints.md`11 - `docs/plugins/sdk-runtime.md`12 - `docs/plugins/sdk-migration.md`13 - `docs/plugins/architecture.md`14- Definition files:15 - `package.json`16 - `scripts/lib/plugin-sdk-entrypoints.json`17 - `scripts/lib/plugin-sdk-entries.mts`18 - `src/plugin-sdk/api-baseline.ts`19 - `src/plugin-sdk/plugin-entry.ts`20 - `src/plugin-sdk/core.ts`21 - `src/plugin-sdk/provider-entry.ts`2223## Boundary Rules2425- Host loads plugins; plugins should not reach through the SDK into arbitrary26 host internals.27- Prefer a small versioned host/kernel seam plus narrow documented SDK28 entrypoints over broad convenience barrels.29- Prefer narrow, purpose-built subpaths over broad convenience re-exports.30- Do not expose implementation convenience from `src/channels/**`,31 `src/agents/**`, `src/plugins/**`, or other internals unless you are32 intentionally promoting a supported public contract.33- Keep public SDK entrypoints cheap at module load. If a helper is only needed34 on async paths such as send, monitor, probe, directory-live, login, or setup,35 prefer a narrow `*.runtime` subpath over re-exporting it through a broad SDK36 barrel that hot channel entrypoints import on startup.37- Keep SDK facades acyclic. Do not add back-edge re-exports that route a38 lightweight contract file back through heavier policy or runtime modules.39- Do not mix static and dynamic imports for the same runtime surface when40 shaping SDK seams. If a surface must stay lazy, keep the eager side on a41 light contract file and the deferred side on a dedicated runtime subpath.42- Prefer `api.runtime` or a focused SDK facade over telling extensions to reach43 into host internals directly.44- When core or tests need bundled plugin helpers, prefer the plugin package45 `api.ts` or `runtime-api.ts` plus generic SDK capabilities. Do not add a46 provider-named `src/plugin-sdk/<id>.ts` seam just to make core aware of a47 bundled channel's private helpers.48- Resolver/facade loader tests are the exception to broad source API coverage:49 use generated tiny plugin fixtures for `api.js` / `runtime-api.js` fallback50 behavior. Do not point those tests at real bundled plugin source APIs.51- For provider work, prefer family-level seams over provider-specific seams.52 Shared helpers should describe a reusable behavior such as replay policy,53 tool-schema compat, payload normalization, stream-wrapper composition, or54 transport decoration. Avoid adding a new SDK export that only wraps one55 provider's local implementation unless there is already a second consumer.56- Prefer named helpers over raw options objects when the options encode a57 stable contract. Example: export a helper for "OpenAI-style Anthropic tool58 payload compat" instead of making every plugin pass the same mode flags.59- Keep transport/runtime policy and plugin-facing helpers aligned. If the same60 behavior is used in plugin registration and in core runtime paths, expose one61 shared helper instead of letting the two paths drift.62- SDK subpaths should help callers resolve one capability or runtime need at a63 time. Do not grow new surfaces that require broad runtime registry access as64 the default path.65- If a proposed SDK export mainly exists to let setup/config/control-plane code66 execute plugin runtime, that is usually a boundary smell. Prefer metadata or67 descriptor-driven control-plane seams first.6869## Versioned Required Capabilities7071- Always: when a shipped Plugin SDK parameter contract gains required host authority, introduce a versioned type that requires it. Keep the legacy type source-compatible for its documented deprecation window, and migrate every bundled/internal caller in the same change.72- Always: keep host capabilities generic and closure-bound. Bind every exposed tool, preparer, callback, approval operation, and native-action surface; retained copies must fail after owner or capability closure, including closure during awaited policy work.73- Never: treat legacy optionality as a capability-free runtime path, reconstruct host authority inside a plugin, or add provider-specific authority to the generic contract.74- Never: hand-edit generated SDK baselines, declarations, hashes, or budgets. Regenerate them canonically.75- Ask first: obtain SDK and security owner acceptance before shortening a compatibility window, making a shipped type source-incompatible, or widening a capability’s trust, authority, or persistence boundary.7677## Verification7879- If you touch SDK seams that affect lazy loading, hot channel entrypoints, or80 bundled plugin import topology, run `pnpm build`.81- If the change can alter bundled channel startup cost, also run the isolated82 entrypoint profiler for the affected plugin:83 `OPENCLAW_LOCAL_CHECK=0 node --import tsx scripts/profile-extension-memory.mts --extension <id> --skip-combined --concurrency 1`8485## Expanding The Boundary8687- SDK surface is too large. Do not add compat barrels, aliases, or fallback exports for convenience. Replace old entrypoints when cleaner.88- Public third-party API is the only compat exception: document/version breaks, migrate ALL bundled/internal plugins first, then aggressively deprecate unused exports.89- When adding or changing a public subpath, keep these aligned:90 - docs in `docs/plugins/*`91 - `scripts/lib/plugin-sdk-entrypoints.json`92 - `scripts/lib/plugin-sdk-entries.mts`93 - `package.json` exports94 - API diff and export checks95- If a bundled channel/helper need crosses package boundaries, first ask96 whether the need is truly generic. If yes, add a narrow generic subpath. If97 not, keep it plugin-local through `api.ts` / `runtime-api.ts`.98- When expanding provider-facing seams, update or add the matching narrow tests99 that lock the contract: Plugin SDK diff/export checks for public subpaths100 and the most direct provider/plugin tests for the behavior you are101 centralizing.102- Breaking removals or renames are major-version work, not drive-by cleanup.103
One repository carrying more than one format is the comparison this product exists for: does anyone actually write different content in each file, or is one a copy of the other?
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| openclaw/openclawsrc/plugins/AGENTS.md · 386k | AGENTS.md | styledo-not | 62/100 | today | |
| openclaw/openclawscripts/AGENTS.md · 386k | AGENTS.md | teststylegitsecurity+1 | 83/100 | today | |
| openclaw/openclawtest/helpers/AGENTS.md · 386k | AGENTS.md | buildteststyle | 51/100 | 14 days ago | |
| openclaw/openclawextensions/telegram/AGENTS.md · 386k | AGENTS.md | stylegitsecurityapi+1 | 59/100 | 14 days ago | |
| openclaw/openclawsrc/agents/tools/AGENTS.md · 386k | AGENTS.md | testperformanceagent-behaviour | 51/100 | 14 days ago | |
| openclaw/openclawsrc/agents/embedded-agent-runner/run/AGENTS.md · 386k | AGENTS.md | teststyleperformance | 47/100 | 14 days ago |
Same format, overlapping stack, ranked by quality.
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| TryGhost/Ghoste2e/AGENTS.md · 55k | AGENTS.md | setupteststylearch+2 | 100/100 | today | |
| mui/material-uiAGENTS.md · 99k | AGENTS.md | setupbuildtestlint-format+9 | 100/100 | 14 days ago | |
| code-yeongyu/oh-my-openagentpackages/web/AGENTS.md · 68k | AGENTS.md | setupbuildtestlint-format+6 | 100/100 | 13 days ago | |
| aaif-goose/gooseAGENTS.md · 53k | AGENTS.md | setupbuildtestlint-format+7 | 100/100 | 8 days ago | |
| deepseek-ai/deepseek-harnessnative/landlock-run/AGENTS.md · 104k | AGENTS.md | setupteststylearch+3 | 100/100 | today | |
| duckduckgo/content-scope-scriptsspecial-pages/AGENTS.md · 70 | AGENTS.md | buildteststylearch+3 | 100/100 | 14 days ago | |
| n8n-io/n8npackages/@n8n/agents/AGENTS.md · 201k | AGENTS.md | buildteststylearch+3 | 100/100 | 14 days ago | |
| ethereum/go-ethereumAGENTS.md · 51k | AGENTS.md | buildtestlint-formatgit+1 | 100/100 | 14 days ago |
A badge carrying the measured quality of the strongest agent config file in this repository, out of 100. It reads from this index every time somebody loads your page, so it changes when the measurement changes and there is nothing to keep up to date. Free, no account, and the value is not something you or we can set by hand.
[](https://rulestack.kynth.studio/configs/openclaw-openclaw-src-plugin-sdk-agents)Would rather not hotlink us? Every badge is also served in shields.io’s endpoint schema, so shields renders the image and your readers never talk to our domain:
Published by Toolproof, the masthead over this index and eight others. The method behind the number is at toolproof.kynth.studio/methodology, and the whole thing is readable as JSON with no key at /api.