From d9eba4d94b22ab7a9e857b384372882c2872df46 Mon Sep 17 00:00:00 2001 From: ericzakariasson Date: Wed, 25 Mar 2026 11:37:56 +0100 Subject: [PATCH 1/4] Add agent-compatibility plugin Publish the Agent Compatibility plugin (CLI-backed scans, subagent prompts, orchestration skill) to the official marketplace with marketplace listing and README table entry. Made-with: Cursor --- .cursor-plugin/marketplace.json | 5 ++ README.md | 1 + .../.cursor-plugin/plugin.json | 28 +++++++ agent-compatibility/README.md | 70 ++++++++++++++++++ .../agents/deterministic-scan-review.md | 39 ++++++++++ .../agents/docs-reality-review.md | 44 +++++++++++ agent-compatibility/agents/startup-review.md | 51 +++++++++++++ .../agents/validation-review.md | 50 +++++++++++++ agent-compatibility/assets/avatar.png | Bin 0 -> 24255 bytes .../skills/run-agent-compatabilty/SKILL.md | 46 ++++++++++++ 10 files changed, 334 insertions(+) create mode 100644 agent-compatibility/.cursor-plugin/plugin.json create mode 100644 agent-compatibility/README.md create mode 100644 agent-compatibility/agents/deterministic-scan-review.md create mode 100644 agent-compatibility/agents/docs-reality-review.md create mode 100644 agent-compatibility/agents/startup-review.md create mode 100644 agent-compatibility/agents/validation-review.md create mode 100644 agent-compatibility/assets/avatar.png create mode 100644 agent-compatibility/skills/run-agent-compatabilty/SKILL.md diff --git a/.cursor-plugin/marketplace.json b/.cursor-plugin/marketplace.json index 918bb39..11012fc 100644 --- a/.cursor-plugin/marketplace.json +++ b/.cursor-plugin/marketplace.json @@ -32,6 +32,11 @@ "name": "ralph-loop", "source": "ralph-loop", "description": "Iterative self-referential AI loops using the Ralph Wiggum technique." + }, + { + "name": "agent-compatibility", + "source": "agent-compatibility", + "description": "Compatibility scans and agent-native workflow audits for repository setup, startup paths, and validation loops." } ] } diff --git a/README.md b/README.md index 9aad033..d3dbf5d 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,7 @@ Official Cursor plugins for popular developer tools, frameworks, and SaaS produc | [Cursor Team Kit](cursor-team-kit/) | Developer Tools | Internal-style workflows for CI, code review, shipping, and testing | | [Create Plugin](create-plugin/) | Developer Tools | Meta workflows for creating Cursor plugins with scaffolding and submission checks | | [Ralph Loop](ralph-loop/) | Developer Tools | Iterative self-referential AI loops using the Ralph Wiggum technique | +| [Agent Compatibility](agent-compatibility/) | Developer Tools | Compatibility scans and agent-native workflow audits for repository setup, startup paths, and validation loops | ## Repository structure diff --git a/agent-compatibility/.cursor-plugin/plugin.json b/agent-compatibility/.cursor-plugin/plugin.json new file mode 100644 index 0000000..a6349e3 --- /dev/null +++ b/agent-compatibility/.cursor-plugin/plugin.json @@ -0,0 +1,28 @@ +{ + "name": "agent-compatibility", + "displayName": "Agent Compatibility", + "version": "0.1.0", + "description": "Compatibility scans and agent-native repo audits built around the agent-compatibility CLI.", + "author": { + "name": "Eric Zakariasson" + }, + "publisher": "Eric Zakariasson", + "logo": "assets/avatar.png", + "license": "ISC", + "keywords": [ + "agents", + "compatibility", + "repo-audit", + "startup", + "validation" + ], + "category": "developer-tools", + "tags": [ + "agents", + "compatibility", + "quality", + "workflow" + ], + "skills": "./skills/", + "agents": "./agents/" +} diff --git a/agent-compatibility/README.md b/agent-compatibility/README.md new file mode 100644 index 0000000..a6a52f3 --- /dev/null +++ b/agent-compatibility/README.md @@ -0,0 +1,70 @@ +# Agent Compatibility Cursor Plugin + +This is a thin Cursor plugin that wraps the published `agent-compatibility` CLI. + +The top-level skill is intentionally thin. It coordinates one subagent per check and then synthesizes the results. + +All review agents are expected to return the same basic shape in **plain text** (no markdown code fences or heading syntax): + +- First line: `: /100` +- Short summary paragraph +- Line `Problems` then one issue per line prefixed with `- ` + +The orchestration skill (`run-agent-compatabilty`) answers the user with a minimal markdown result: one `## Agent Compatibility Score: N/100` heading and one flat `Problems / suggestions` list, with no formula or component scores unless the user asks for a breakdown. + +## What is in here + +- `.cursor-plugin/plugin.json`: plugin manifest +- `skills/run-agent-compatabilty/SKILL.md`: thin orchestration skill for the full pass +- `agents/deterministic-scan-review.md`: deterministic CLI scan agent +- `agents/startup-review.md`: startup verification agent +- `agents/validation-review.md`: validation-loop agent +- `agents/docs-reality-review.md`: docs-vs-reality agent + +## How it works + +The plugin does not embed the scanner. It expects Cursor to run the published npm package when needed: + +```bash +npx -y agent-compatibility@latest --json . +``` + +Or, when a Markdown report is easier to reason about: + +```bash +npx -y agent-compatibility@latest --md . +``` + +## Local install + +If you want to use this plugin directly, symlink this plugin directory into: + +```bash +~/.cursor/plugins/local/agent-compatibility +``` + +## Recommended usage + +Use `run-agent-compatabilty` when you want the full pass. That skill should fan out to: + +- `deterministic-scan-review` +- `startup-review` +- `validation-review` +- `docs-reality-review` + +The score names should be: + +- `Agent Compatibility Score` +- `Startup Compatibility Score` +- `Validation Loop Score` +- `Docs Reality Score` + +## Notes + +- The top-level synthesis combines both layers: + - it computes an internal workflow score from startup, validation, and docs-reality + - `Agent Compatibility Score` = `round((deterministic * 0.7) + (workflow * 0.3))` +- The default final user-facing output is intentionally simple: one `Agent Compatibility Score` heading and one flat prioritized `Problems / suggestions` list, with no calculation shown. +- The skill is intentionally thin. The agents do the work. +- The CLI remains the scoring engine. +- If you later want tighter integration, the next step is an MCP server that exposes the scanner as structured tools instead of shell commands. diff --git a/agent-compatibility/agents/deterministic-scan-review.md b/agent-compatibility/agents/deterministic-scan-review.md new file mode 100644 index 0000000..1d7e215 --- /dev/null +++ b/agent-compatibility/agents/deterministic-scan-review.md @@ -0,0 +1,39 @@ +--- +name: deterministic-scan-review +description: Run the agent-compatibility CLI and return the deterministic score with its main problems +model: fast +readonly: true +--- + +# Deterministic scan review + +CLI-backed compatibility scan specialist. + +## Trigger + +Use when the task is specifically to run the published `agent-compatibility` scanner and report the deterministic result. + +## Workflow + +1. Try the published scanner first with `npx -y agent-compatibility@latest --json ""`. +2. If you are clearly working inside the scanner source repo and the published package path fails for an environment reason, fall back to the local scanner entrypoint. +3. Only say the scanner is unavailable after you have actually tried the published package, and the local fallback when it is clearly available. +4. Prefer JSON when you need structured reasoning. Prefer Markdown when the user wants a direct report. +5. Keep the scanner's real score, summary direction, and problem ordering. +6. Do not bundle in startup, validation, or docs-reality judgments. Those belong to separate agents. + +## Output + +Reply in **plain text only** (no markdown fences, no `#` headings, no emphasis syntax). Use this layout: + +First line: `Agent Compatibility Score: /100` + +Then a short summary paragraph. + +Then the line `Problems` followed by one bullet per line using `- `. + +- Use the deterministic scan's real score. +- Include both rubric issues and accelerator issues when they matter. +- If there are no meaningful problems, under Problems write `- None.` +- Do not treat scanner availability as a defect in the target repo. +- If the scanner truly cannot be run, say that the deterministic scan is unavailable because of the tool environment, not because the repo lacks a compatibility CLI. diff --git a/agent-compatibility/agents/docs-reality-review.md b/agent-compatibility/agents/docs-reality-review.md new file mode 100644 index 0000000..95b906a --- /dev/null +++ b/agent-compatibility/agents/docs-reality-review.md @@ -0,0 +1,44 @@ +--- +name: docs-reality-review +description: Check whether the documented setup and run paths survive contact with reality +model: fast +readonly: true +--- + +# Docs reality review + +Docs-versus-reality specialist for setup, bootstrap, and run guidance. + +## Trigger + +Use when the user wants to know whether the repo documentation is actually trustworthy for an agent starting fresh. + +## Workflow + +1. Run the deterministic compatibility scan first. +2. Read the obvious documentation surfaces: `README`, setup docs, env docs, and contribution or agent guidance. +3. Follow the documented setup and run path as literally as practical. +4. Note where docs are accurate, stale, incomplete, or misleading. +5. Pick a specific score instead of a round bucket. Start from these anchors and move a few points if the evidence clearly warrants it: + - around `93/100` if the docs lead to the working path with little or no correction. + - around `84/100` if the docs drift in places but an agent can still get to the right setup or run path without much guesswork. + - around `68/100` if the docs are stale enough that the agent has to reconstruct important steps from the tree or CI. + - around `27/100` if the docs point the agent down the wrong path or omit key steps you need to proceed. + - around `12/100` if the real path depends on private docs or internal context that is not available in the repo. +6. Prefer a specific score such as `81`, `85`, or `92` over a multiple of ten when that is the more honest read. + +## Output + +Reply in **plain text only** (no markdown fences, no `#` headings, no emphasis syntax). Use this layout: + +First line: `Docs Reality Score: /100` + +Then a short summary paragraph. + +Then the line `Problems` followed by one bullet per line using `- `. + +- Base the score on what happened when you followed the docs. +- Build Problems from real mismatches, omissions, or misleading guidance. +- If the repo is blocked on secrets or infrastructure, say so plainly and still use the same output shape. +- Minor drift or stale references should not drag a good repo into the mid-60s if the real path is still easy to recover. +- Score the damage from the drift, not the mere existence of drift. diff --git a/agent-compatibility/agents/startup-review.md b/agent-compatibility/agents/startup-review.md new file mode 100644 index 0000000..b5c6a7d --- /dev/null +++ b/agent-compatibility/agents/startup-review.md @@ -0,0 +1,51 @@ +--- +name: startup-review +description: Try to bootstrap and start a repository like a cold agent, then report where the path breaks down +model: fast +readonly: true +--- + +# Startup review + +Startup-path specialist for repository bootstrap and first-run success. + +## Trigger + +Use when the user wants to know whether a repo is actually easy to start, not just whether it claims to be. + +## Workflow + +1. Run the deterministic compatibility scan first. +2. Read the obvious startup surfaces: `README`, scripts, toolchain files, env examples, and workflow docs. +3. Pick the most likely bootstrap path and startup command. +4. Try to reach first success inside a fixed time budget. +5. If the first path fails, allow a small amount of recovery and note what you had to infer. +6. Do not infer a startup failure from a lockfile, a bound port, or an existing repo-local process by itself. +7. Only call startup blocked or failed when your own startup attempt fails, or when the documented startup path cannot be completed within the budget. +8. Pick a specific score instead of a round bucket. Start from these anchors and move a few points if the evidence clearly warrants it: + - around `93/100` if the main startup path works inside the time budget, even if it needs ordinary local prerequisites such as Docker or a database. + - around `84/100` if the repo starts, but only after some digging, a recovery step, or heavier setup than the docs suggest. + - around `68/100` if a startup path probably exists but stays too manual, too ambiguous, or too expensive for normal agent use. + - around `27/100` if you cannot get a credible startup path working from the repo and docs you have. + - around `12/100` if the path is blocked on secrets, accounts, or infrastructure you cannot reasonably access. +9. Prefer a specific score such as `82`, `85`, or `91` over a multiple of ten when that is the more honest read. +10. Return the result in the same plain-text report shape as the deterministic scan. + +## Output + +Reply in **plain text only** (no markdown fences, no `#` headings, no emphasis syntax). Use this layout: + +First line: `Startup Compatibility Score: /100` + +Then a short summary paragraph. + +Then the line `Problems` followed by one bullet per line using `- `. + +- Base the score on what happened when you actually tried to start the repo. +- Build Problems from the real startup friction you observed. +- If the repo is blocked on secrets, accounts, or external infra, say that plainly and still use the same output shape. +- Do not assume a Next.js lockfile or a port that does not answer HTTP immediately is a repo problem. +- Do not require an HTTP response unless the documented startup path clearly implies one and you actually started that path yourself. +- If the environment starts successfully, treat that as a strong result. Record the friction, but do not score it like a near-failure. +- Treat Docker, local services, and other standard dev prerequisites as friction, not failure. +- Error-message quality is secondary here unless it actually prevents startup or recovery. diff --git a/agent-compatibility/agents/validation-review.md b/agent-compatibility/agents/validation-review.md new file mode 100644 index 0000000..982368f --- /dev/null +++ b/agent-compatibility/agents/validation-review.md @@ -0,0 +1,50 @@ +--- +name: validation-review +description: Assess whether an agent can verify a small change without guessing or running an unnecessarily heavy loop +model: fast +readonly: true +--- + +# Validation review + +Validation-path specialist for self-check loops and targeted verification. + +## Trigger + +Use when the user wants to know whether an agent can safely verify its own work in a repo. + +## Workflow + +1. Run the deterministic compatibility scan first. +2. Inspect the repo's declared test, lint, check, and typecheck paths. +3. Decide whether there is a practical scoped loop for a small change. +4. Try the most relevant validation path. +5. Judge whether the result is: + - targeted + - actionable + - noisy + - too expensive for normal iteration +6. Pick a specific score instead of a round bucket. Start from these anchors and move a few points if the evidence clearly warrants it: + - around `93/100` if there is a repeatable validation path and it gives useful signal, even if it is broader than ideal. + - around `84/100` if validation works but is heavier than it should be, repo-wide, or split across a few commands. + - around `68/100` if a valid loop probably exists but picking the right one takes guesswork or the output is too noisy to trust quickly. + - around `27/100` if there is no practical validation loop you can actually use. + - around `12/100` if the loop is blocked on secrets, accounts, or infrastructure you cannot reasonably access. +7. Prefer a specific score such as `83`, `86`, or `91` over a multiple of ten when that is the more honest read. +8. Return the result in the same plain-text report shape as the deterministic scan. + +## Output + +Reply in **plain text only** (no markdown fences, no `#` headings, no emphasis syntax). Use this layout: + +First line: `Validation Loop Score: /100` + +Then a short summary paragraph. + +Then the line `Problems` followed by one bullet per line using `- `. + +- Base the score on the loop you actually tried. +- Build Problems from the real validation friction you observed. +- Prefer concrete issues like "only full-repo test path exists" over generic quality advice. +- Do not score a repo in the mid-60s just because the loop is heavy. If an agent can still verify changes reliably, keep it in the good range and note the cost. +- Noisy logs and extra warnings matter only when they hide the actual validation result. diff --git a/agent-compatibility/assets/avatar.png b/agent-compatibility/assets/avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..052d4cf87e6045e9c442a32890d341167546b9e8 GIT binary patch literal 24255 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 bsSEsn>IEyI+pHzp00000NkvXXu0mjfE1k)d literal 0 HcmV?d00001 diff --git a/agent-compatibility/skills/run-agent-compatabilty/SKILL.md b/agent-compatibility/skills/run-agent-compatabilty/SKILL.md new file mode 100644 index 0000000..188ed9c --- /dev/null +++ b/agent-compatibility/skills/run-agent-compatabilty/SKILL.md @@ -0,0 +1,46 @@ +--- +name: run-agent-compatabilty +description: Coordinate the full compatibility pass by launching one subagent per check. Use when the user wants the full agent compatibility review instead of only startup, validation, or another single workflow check. +--- + +# Run agent compatabilty + +## Trigger + +Use when the user wants the full agent compatibility pass for a repo. + +## Workflow + +1. Launch `deterministic-scan-review` to run the CLI and capture the deterministic score and problems. +2. Launch `startup-review` to verify whether the repo can actually be booted by an agent. +3. Launch `validation-review` to check whether an agent can verify a small change with a credible loop. +4. Launch `docs-reality-review` to see whether the documented setup and run paths match reality. +5. Use one subagent per task. Do not collapse these checks into one agent prompt. +6. Compute an internal workflow score as the rounded average of: + - `Startup Compatibility Score` + - `Validation Loop Score` + - `Docs Reality Score` +7. Compute an `Agent Compatibility Score` as: + - `round((deterministic_score * 0.7) + (workflow_score * 0.3))` +8. Synthesize the results into one final response. + +When scoring internally, use specific non-round workflow scores for the behavioral checks rather than coarse round buckets. If startup, validation, or docs mostly work, treat them as good-with-friction rather than defaulting to the mid-60s. Do not create a low workflow score just because logs are noisy or the error text is rough. + +## Output + +Respond in markdown, but keep it minimal. Do not use fenced code blocks. + +Show **only** one score, as a level-two heading: `## Agent Compatibility Score: N/100`. Do not show how it was computed—no weights (e.g. 70/30), no formula, no deterministic score, no workflow score, no per-check scores, and no arithmetic—unless the user explicitly asks for a breakdown. + +Then a flat, prioritized list labeled `Problems / suggestions` with one issue per line, each line starting with `- `. + +If the deterministic scanner cannot be run because of tool environment issues, say that separately and do not treat it as a repo defect or penalize the repo. Fold deterministic and behavioral findings into that one list instead of separate sections. Focus on highest-leverage fixes. Do not include a separate summary unless the user asks for more detail. + +Example shape: + +## Agent Compatibility Score: 72/100 + +Problems / suggestions +- First issue +- Second issue +- Third issue From 90152133a6ade601f8203fba42b3e6db5472f8d7 Mon Sep 17 00:00:00 2001 From: ericzakariasson Date: Wed, 25 Mar 2026 11:55:02 +0100 Subject: [PATCH 2/4] Align agent-compatibility plugin with marketplace conventions - Cursor author, MIT license, repo homepage/repository URLs, v1.0.0 manifest - Add MIT LICENSE matching other plugins - README: plugin table and marketplace-style intro Made-with: Cursor --- README.md | 18 +++++++++------- .../.cursor-plugin/plugin.json | 14 ++++++++----- agent-compatibility/LICENSE | 21 +++++++++++++++++++ 3 files changed, 40 insertions(+), 13 deletions(-) create mode 100644 agent-compatibility/LICENSE diff --git a/README.md b/README.md index d3dbf5d..1c115aa 100644 --- a/README.md +++ b/README.md @@ -4,14 +4,16 @@ Official Cursor plugins for popular developer tools, frameworks, and SaaS produc ## Plugins -| Plugin | Category | Description | -|:-------|:---------|:------------| -| [Teaching](teaching/) | Utilities | Skill maps, practice plans, and feedback loops | -| [Continual Learning](continual-learning/) | Developer Tools | Incremental transcript-driven AGENTS.md memory updates with high-signal bullet points | -| [Cursor Team Kit](cursor-team-kit/) | Developer Tools | Internal-style workflows for CI, code review, shipping, and testing | -| [Create Plugin](create-plugin/) | Developer Tools | Meta workflows for creating Cursor plugins with scaffolding and submission checks | -| [Ralph Loop](ralph-loop/) | Developer Tools | Iterative self-referential AI loops using the Ralph Wiggum technique | -| [Agent Compatibility](agent-compatibility/) | Developer Tools | Compatibility scans and agent-native workflow audits for repository setup, startup paths, and validation loops | +| `name` | Plugin | Author | Category | `description` (from marketplace) | +|:-------|:-------|:-------|:---------|:-------------------------------------| +| `teaching` | [Teaching](teaching/) | Cursor | Utilities | Skill mapping, practice plans, and learning retrospectives. | +| `continual-learning` | [Continual Learning](continual-learning/) | Cursor | Developer Tools | Incremental transcript-driven memory updates for AGENTS.md using high-signal bullet points only. | +| `cursor-team-kit` | [Cursor Team Kit](cursor-team-kit/) | Cursor | Developer Tools | Internal team workflows used by Cursor developers for CI, code review, and shipping. | +| `create-plugin` | [Create Plugin](create-plugin/) | Cursor | Developer Tools | Scaffold and validate new Cursor plugins. | +| `ralph-loop` | [Ralph Loop](ralph-loop/) | Cursor | Developer Tools | Iterative self-referential AI loops using the Ralph Wiggum technique. | +| `agent-compatibility` | [Agent Compatibility](agent-compatibility/) | Cursor | Developer Tools | Compatibility scans and agent-native workflow audits for repository setup, startup paths, and validation loops. | + +Author values match each plugin’s `plugin.json` `author.name` (Cursor lists `plugins@cursor.com` in the manifest). ## Repository structure diff --git a/agent-compatibility/.cursor-plugin/plugin.json b/agent-compatibility/.cursor-plugin/plugin.json index a6349e3..5a2f475 100644 --- a/agent-compatibility/.cursor-plugin/plugin.json +++ b/agent-compatibility/.cursor-plugin/plugin.json @@ -1,17 +1,21 @@ { "name": "agent-compatibility", "displayName": "Agent Compatibility", - "version": "0.1.0", - "description": "Compatibility scans and agent-native repo audits built around the agent-compatibility CLI.", + "version": "1.0.0", + "description": "Compatibility scans and agent-native repo audits built around the agent-compatibility CLI. Provides agents and skills that run the published scanner plus workflow-focused reviews for startup paths, validation loops, and documentation.", "author": { - "name": "Eric Zakariasson" + "name": "Cursor", + "email": "plugins@cursor.com" }, - "publisher": "Eric Zakariasson", + "homepage": "https://github.com/cursor/plugins", + "repository": "https://github.com/cursor/plugins", + "license": "MIT", "logo": "assets/avatar.png", - "license": "ISC", "keywords": [ + "agent-compatibility", "agents", "compatibility", + "cursor-plugin", "repo-audit", "startup", "validation" diff --git a/agent-compatibility/LICENSE b/agent-compatibility/LICENSE new file mode 100644 index 0000000..ca2bba7 --- /dev/null +++ b/agent-compatibility/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Cursor + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. From 4c27ef77a0b282a3ea77c17c7f8e8379122d3b12 Mon Sep 17 00:00:00 2001 From: ericzakariasson Date: Wed, 25 Mar 2026 12:01:47 +0100 Subject: [PATCH 3/4] README: drop teaching and ralph-loop from plugin table Made-with: Cursor --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 1c115aa..e15aa10 100644 --- a/README.md +++ b/README.md @@ -6,11 +6,9 @@ Official Cursor plugins for popular developer tools, frameworks, and SaaS produc | `name` | Plugin | Author | Category | `description` (from marketplace) | |:-------|:-------|:-------|:---------|:-------------------------------------| -| `teaching` | [Teaching](teaching/) | Cursor | Utilities | Skill mapping, practice plans, and learning retrospectives. | | `continual-learning` | [Continual Learning](continual-learning/) | Cursor | Developer Tools | Incremental transcript-driven memory updates for AGENTS.md using high-signal bullet points only. | | `cursor-team-kit` | [Cursor Team Kit](cursor-team-kit/) | Cursor | Developer Tools | Internal team workflows used by Cursor developers for CI, code review, and shipping. | | `create-plugin` | [Create Plugin](create-plugin/) | Cursor | Developer Tools | Scaffold and validate new Cursor plugins. | -| `ralph-loop` | [Ralph Loop](ralph-loop/) | Cursor | Developer Tools | Iterative self-referential AI loops using the Ralph Wiggum technique. | | `agent-compatibility` | [Agent Compatibility](agent-compatibility/) | Cursor | Developer Tools | Compatibility scans and agent-native workflow audits for repository setup, startup paths, and validation loops. | Author values match each plugin’s `plugin.json` `author.name` (Cursor lists `plugins@cursor.com` in the manifest). From f006be721cf80886bfa0055872cd8bc39ec4cd02 Mon Sep 17 00:00:00 2001 From: ericzakariasson Date: Wed, 25 Mar 2026 14:22:16 +0100 Subject: [PATCH 4/4] Refine agent-compatibility naming and docs Make the plugin read cleanly in public by clarifying score labels, tightening marketplace copy, and aligning the skill and agent names with the review flow. Made-with: Cursor --- .cursor-plugin/marketplace.json | 2 +- README.md | 2 +- .../.cursor-plugin/plugin.json | 4 +- agent-compatibility/CHANGELOG.md | 11 ++ agent-compatibility/README.md | 101 ++++++++++-------- ...review.md => compatibility-scan-review.md} | 17 +-- ...y-review.md => docs-reliability-review.md} | 12 +-- agent-compatibility/agents/startup-review.md | 4 +- .../agents/validation-review.md | 4 +- .../SKILL.md | 24 ++--- 10 files changed, 105 insertions(+), 76 deletions(-) create mode 100644 agent-compatibility/CHANGELOG.md rename agent-compatibility/agents/{deterministic-scan-review.md => compatibility-scan-review.md} (69%) rename agent-compatibility/agents/{docs-reality-review.md => docs-reliability-review.md} (81%) rename agent-compatibility/skills/{run-agent-compatabilty => check-agent-compatibility}/SKILL.md (53%) diff --git a/.cursor-plugin/marketplace.json b/.cursor-plugin/marketplace.json index 11012fc..bb5e31f 100644 --- a/.cursor-plugin/marketplace.json +++ b/.cursor-plugin/marketplace.json @@ -36,7 +36,7 @@ { "name": "agent-compatibility", "source": "agent-compatibility", - "description": "Compatibility scans and agent-native workflow audits for repository setup, startup paths, and validation loops." + "description": "CLI-backed repo compatibility scans plus Cursor agents that audit startup, validation, and docs against reality." } ] } diff --git a/README.md b/README.md index e15aa10..e64eb1f 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ Official Cursor plugins for popular developer tools, frameworks, and SaaS produc | `continual-learning` | [Continual Learning](continual-learning/) | Cursor | Developer Tools | Incremental transcript-driven memory updates for AGENTS.md using high-signal bullet points only. | | `cursor-team-kit` | [Cursor Team Kit](cursor-team-kit/) | Cursor | Developer Tools | Internal team workflows used by Cursor developers for CI, code review, and shipping. | | `create-plugin` | [Create Plugin](create-plugin/) | Cursor | Developer Tools | Scaffold and validate new Cursor plugins. | -| `agent-compatibility` | [Agent Compatibility](agent-compatibility/) | Cursor | Developer Tools | Compatibility scans and agent-native workflow audits for repository setup, startup paths, and validation loops. | +| `agent-compatibility` | [Agent Compatibility](agent-compatibility/) | Cursor | Developer Tools | CLI-backed repo compatibility scans plus Cursor agents that audit startup, validation, and docs against reality. | Author values match each plugin’s `plugin.json` `author.name` (Cursor lists `plugins@cursor.com` in the manifest). diff --git a/agent-compatibility/.cursor-plugin/plugin.json b/agent-compatibility/.cursor-plugin/plugin.json index 5a2f475..3b6be7a 100644 --- a/agent-compatibility/.cursor-plugin/plugin.json +++ b/agent-compatibility/.cursor-plugin/plugin.json @@ -2,12 +2,12 @@ "name": "agent-compatibility", "displayName": "Agent Compatibility", "version": "1.0.0", - "description": "Compatibility scans and agent-native repo audits built around the agent-compatibility CLI. Provides agents and skills that run the published scanner plus workflow-focused reviews for startup paths, validation loops, and documentation.", + "description": "CLI-backed repo compatibility scans plus Cursor agents that audit startup, validation, and docs against reality.", "author": { "name": "Cursor", "email": "plugins@cursor.com" }, - "homepage": "https://github.com/cursor/plugins", + "homepage": "https://github.com/cursor/plugins/tree/main/agent-compatibility", "repository": "https://github.com/cursor/plugins", "license": "MIT", "logo": "assets/avatar.png", diff --git a/agent-compatibility/CHANGELOG.md b/agent-compatibility/CHANGELOG.md new file mode 100644 index 0000000..f726ed9 --- /dev/null +++ b/agent-compatibility/CHANGELOG.md @@ -0,0 +1,11 @@ +# Changelog + +All notable changes to this plugin will be documented here. + +## Unreleased + +- Renamed the full-pass skill to `check-agent-compatibility`. +- Renamed `deterministic-scan-review` to `compatibility-scan-review`. +- Renamed `docs-reality-review` to `docs-reliability-review`. +- Clarified the score model so `Agent Compatibility Score` is the final blended score and `Deterministic Compatibility Score` is the raw CLI score. +- Tightened the README, marketplace copy, and agent wording for public release. diff --git a/agent-compatibility/README.md b/agent-compatibility/README.md index a6a52f3..5dcd861 100644 --- a/agent-compatibility/README.md +++ b/agent-compatibility/README.md @@ -1,70 +1,87 @@ -# Agent Compatibility Cursor Plugin +# Agent Compatibility -This is a thin Cursor plugin that wraps the published `agent-compatibility` CLI. +Cursor plugin for checking how well a repo holds up under agent workflows. It pairs the published `agent-compatibility` CLI with focused reviews for startup, validation, and docs reliability. -The top-level skill is intentionally thin. It coordinates one subagent per check and then synthesizes the results. +By default, the full pass returns one overall score and one short list of the highest-leverage fixes. If the user wants the full breakdown, the agents can expose the component scores and the reasoning behind them. -All review agents are expected to return the same basic shape in **plain text** (no markdown code fences or heading syntax): +## What it includes -- First line: `: /100` -- Short summary paragraph -- Line `Problems` then one issue per line prefixed with `- ` +- `check-agent-compatibility`: full compatibility pass +- `compatibility-scan-review`: raw CLI-backed scan +- `startup-review`: cold-start and bootstrap review +- `validation-review`: small-change verification review +- `docs-reliability-review`: docs reliability review -The orchestration skill (`run-agent-compatabilty`) answers the user with a minimal markdown result: one `## Agent Compatibility Score: N/100` heading and one flat `Problems / suggestions` list, with no formula or component scores unless the user asks for a breakdown. +## Score model -## What is in here +- `Agent Compatibility Score`: final blended score shown to the user +- `Deterministic Compatibility Score`: raw score from the published CLI +- `Startup Compatibility Score`: how much guesswork it takes to boot the repo +- `Validation Loop Score`: how practical it is to verify a small change +- `Docs Reliability Score`: how closely the docs match the real setup path -- `.cursor-plugin/plugin.json`: plugin manifest -- `skills/run-agent-compatabilty/SKILL.md`: thin orchestration skill for the full pass -- `agents/deterministic-scan-review.md`: deterministic CLI scan agent -- `agents/startup-review.md`: startup verification agent -- `agents/validation-review.md`: validation-loop agent -- `agents/docs-reality-review.md`: docs-vs-reality agent +The final score blends the deterministic scan with the workflow checks: -## How it works +```text +Agent Compatibility Score = round((deterministic * 0.7) + (workflow * 0.3)) +``` + +The CLI also reports an accelerator layer for committed agent tooling. That extra context informs recommendations, but it does not inflate the deterministic compatibility score itself. + +## How to use it + +Use `check-agent-compatibility` when you want the full pass. That skill fans out to the four review agents above, then returns a compact result: + +```md +## Agent Compatibility Score: 72/100 + +Top fixes +- First issue +- Second issue +``` + +Ask for a breakdown if you want the component scores or the weighting. + +## CLI notes + +The plugin does not bundle the scanner. It runs the published npm package when needed. + +Default scan (compact terminal dashboard): + +```bash +npx -y agent-compatibility@latest . +``` -The plugin does not embed the scanner. It expects Cursor to run the published npm package when needed: +JSON output: ```bash npx -y agent-compatibility@latest --json . ``` -Or, when a Markdown report is easier to reason about: +Markdown output: ```bash npx -y agent-compatibility@latest --md . ``` -## Local install - -If you want to use this plugin directly, symlink this plugin directory into: +Plain text output: ```bash -~/.cursor/plugins/local/agent-compatibility +npx -y agent-compatibility@latest --text . ``` -## Recommended usage - -Use `run-agent-compatabilty` when you want the full pass. That skill should fan out to: +Config override for ignored paths or weight overrides: -- `deterministic-scan-review` -- `startup-review` -- `validation-review` -- `docs-reality-review` +```bash +npx -y agent-compatibility@latest . --config ./agent-compatibility.config.json +``` -The score names should be: +The scanner is heuristic. It scores repo signals and surfaces likely friction, but it is not a full quality verdict on the codebase. -- `Agent Compatibility Score` -- `Startup Compatibility Score` -- `Validation Loop Score` -- `Docs Reality Score` +## Local install -## Notes +If you want to use this plugin directly, symlink this directory into: -- The top-level synthesis combines both layers: - - it computes an internal workflow score from startup, validation, and docs-reality - - `Agent Compatibility Score` = `round((deterministic * 0.7) + (workflow * 0.3))` -- The default final user-facing output is intentionally simple: one `Agent Compatibility Score` heading and one flat prioritized `Problems / suggestions` list, with no calculation shown. -- The skill is intentionally thin. The agents do the work. -- The CLI remains the scoring engine. -- If you later want tighter integration, the next step is an MCP server that exposes the scanner as structured tools instead of shell commands. +```bash +~/.cursor/plugins/local/agent-compatibility +``` diff --git a/agent-compatibility/agents/deterministic-scan-review.md b/agent-compatibility/agents/compatibility-scan-review.md similarity index 69% rename from agent-compatibility/agents/deterministic-scan-review.md rename to agent-compatibility/agents/compatibility-scan-review.md index 1d7e215..97d2419 100644 --- a/agent-compatibility/agents/deterministic-scan-review.md +++ b/agent-compatibility/agents/compatibility-scan-review.md @@ -1,17 +1,17 @@ --- -name: deterministic-scan-review -description: Run the agent-compatibility CLI and return the deterministic score with its main problems +name: compatibility-scan-review +description: Run the agent-compatibility CLI and return the raw repository score with its main problems model: fast readonly: true --- -# Deterministic scan review +# Compatibility scan review -CLI-backed compatibility scan specialist. +Runs the published scanner and reports the raw repository score. ## Trigger -Use when the task is specifically to run the published `agent-compatibility` scanner and report the deterministic result. +Use when the task is specifically to run the published `agent-compatibility` scanner and report the raw compatibility result. ## Workflow @@ -20,19 +20,20 @@ Use when the task is specifically to run the published `agent-compatibility` sca 3. Only say the scanner is unavailable after you have actually tried the published package, and the local fallback when it is clearly available. 4. Prefer JSON when you need structured reasoning. Prefer Markdown when the user wants a direct report. 5. Keep the scanner's real score, summary direction, and problem ordering. -6. Do not bundle in startup, validation, or docs-reality judgments. Those belong to separate agents. +6. Do not bundle in startup, validation, or docs-reliability judgments. Those belong to separate agents. ## Output Reply in **plain text only** (no markdown fences, no `#` headings, no emphasis syntax). Use this layout: -First line: `Agent Compatibility Score: /100` +First line: `Deterministic Compatibility Score: /100` Then a short summary paragraph. Then the line `Problems` followed by one bullet per line using `- `. -- Use the deterministic scan's real score. +- Use the compatibility scan's real score. +- Keep accelerator context separate from the deterministic compatibility score itself. - Include both rubric issues and accelerator issues when they matter. - If there are no meaningful problems, under Problems write `- None.` - Do not treat scanner availability as a defect in the target repo. diff --git a/agent-compatibility/agents/docs-reality-review.md b/agent-compatibility/agents/docs-reliability-review.md similarity index 81% rename from agent-compatibility/agents/docs-reality-review.md rename to agent-compatibility/agents/docs-reliability-review.md index 95b906a..f199aaa 100644 --- a/agent-compatibility/agents/docs-reality-review.md +++ b/agent-compatibility/agents/docs-reliability-review.md @@ -1,13 +1,13 @@ --- -name: docs-reality-review -description: Check whether the documented setup and run paths survive contact with reality +name: docs-reliability-review +description: Check whether the documented setup and run paths reliably lead to the real working path model: fast readonly: true --- -# Docs reality review +# Docs reliability review -Docs-versus-reality specialist for setup, bootstrap, and run guidance. +Follows the written setup path and reports where the docs drift from reality. ## Trigger @@ -15,7 +15,7 @@ Use when the user wants to know whether the repo documentation is actually trust ## Workflow -1. Run the deterministic compatibility scan first. +1. If a compatibility scan result is already available from the parent task, use it as context. Otherwise run the compatibility scan once. 2. Read the obvious documentation surfaces: `README`, setup docs, env docs, and contribution or agent guidance. 3. Follow the documented setup and run path as literally as practical. 4. Note where docs are accurate, stale, incomplete, or misleading. @@ -31,7 +31,7 @@ Use when the user wants to know whether the repo documentation is actually trust Reply in **plain text only** (no markdown fences, no `#` headings, no emphasis syntax). Use this layout: -First line: `Docs Reality Score: /100` +First line: `Docs Reliability Score: /100` Then a short summary paragraph. diff --git a/agent-compatibility/agents/startup-review.md b/agent-compatibility/agents/startup-review.md index b5c6a7d..a6880ae 100644 --- a/agent-compatibility/agents/startup-review.md +++ b/agent-compatibility/agents/startup-review.md @@ -7,7 +7,7 @@ readonly: true # Startup review -Startup-path specialist for repository bootstrap and first-run success. +Tries the cold-start path and reports how much work it takes to get the repo running. ## Trigger @@ -15,7 +15,7 @@ Use when the user wants to know whether a repo is actually easy to start, not ju ## Workflow -1. Run the deterministic compatibility scan first. +1. If a compatibility scan result is already available from the parent task, use it as context. Otherwise run the compatibility scan once. 2. Read the obvious startup surfaces: `README`, scripts, toolchain files, env examples, and workflow docs. 3. Pick the most likely bootstrap path and startup command. 4. Try to reach first success inside a fixed time budget. diff --git a/agent-compatibility/agents/validation-review.md b/agent-compatibility/agents/validation-review.md index 982368f..1630597 100644 --- a/agent-compatibility/agents/validation-review.md +++ b/agent-compatibility/agents/validation-review.md @@ -7,7 +7,7 @@ readonly: true # Validation review -Validation-path specialist for self-check loops and targeted verification. +Checks whether an agent can verify a small change without falling back to a full-repo loop. ## Trigger @@ -15,7 +15,7 @@ Use when the user wants to know whether an agent can safely verify its own work ## Workflow -1. Run the deterministic compatibility scan first. +1. If a compatibility scan result is already available from the parent task, use it as context. Otherwise run the compatibility scan once. 2. Inspect the repo's declared test, lint, check, and typecheck paths. 3. Decide whether there is a practical scoped loop for a small change. 4. Try the most relevant validation path. diff --git a/agent-compatibility/skills/run-agent-compatabilty/SKILL.md b/agent-compatibility/skills/check-agent-compatibility/SKILL.md similarity index 53% rename from agent-compatibility/skills/run-agent-compatabilty/SKILL.md rename to agent-compatibility/skills/check-agent-compatibility/SKILL.md index 188ed9c..6d88d4a 100644 --- a/agent-compatibility/skills/run-agent-compatabilty/SKILL.md +++ b/agent-compatibility/skills/check-agent-compatibility/SKILL.md @@ -1,25 +1,25 @@ --- -name: run-agent-compatabilty -description: Coordinate the full compatibility pass by launching one subagent per check. Use when the user wants the full agent compatibility review instead of only startup, validation, or another single workflow check. +name: check-agent-compatibility +description: Run the full repository compatibility pass: scanner score, startup path, validation loop, and docs reliability. --- -# Run agent compatabilty +# Check agent compatibility ## Trigger -Use when the user wants the full agent compatibility pass for a repo. +Use when the user wants the full compatibility pass for a repo. ## Workflow -1. Launch `deterministic-scan-review` to run the CLI and capture the deterministic score and problems. +1. Launch `compatibility-scan-review` to run the CLI and capture the raw repository score and main issues. 2. Launch `startup-review` to verify whether the repo can actually be booted by an agent. -3. Launch `validation-review` to check whether an agent can verify a small change with a credible loop. -4. Launch `docs-reality-review` to see whether the documented setup and run paths match reality. +3. Launch `validation-review` to check whether an agent can verify a small change without an unnecessarily heavy loop. +4. Launch `docs-reliability-review` to see whether the documented setup and run paths reliably match reality. 5. Use one subagent per task. Do not collapse these checks into one agent prompt. 6. Compute an internal workflow score as the rounded average of: - `Startup Compatibility Score` - `Validation Loop Score` - - `Docs Reality Score` + - `Docs Reliability Score` 7. Compute an `Agent Compatibility Score` as: - `round((deterministic_score * 0.7) + (workflow_score * 0.3))` 8. Synthesize the results into one final response. @@ -30,17 +30,17 @@ When scoring internally, use specific non-round workflow scores for the behavior Respond in markdown, but keep it minimal. Do not use fenced code blocks. -Show **only** one score, as a level-two heading: `## Agent Compatibility Score: N/100`. Do not show how it was computed—no weights (e.g. 70/30), no formula, no deterministic score, no workflow score, no per-check scores, and no arithmetic—unless the user explicitly asks for a breakdown. +Show only one score, as a level-two heading: `## Agent Compatibility Score: N/100`. Do not show how it was computed, including weights, formula, deterministic score, workflow score, per-check scores, or arithmetic, unless the user explicitly asks for a breakdown. -Then a flat, prioritized list labeled `Problems / suggestions` with one issue per line, each line starting with `- `. +Then a flat, prioritized list labeled `Top fixes` with one issue per line, each line starting with `- `. -If the deterministic scanner cannot be run because of tool environment issues, say that separately and do not treat it as a repo defect or penalize the repo. Fold deterministic and behavioral findings into that one list instead of separate sections. Focus on highest-leverage fixes. Do not include a separate summary unless the user asks for more detail. +If the deterministic scanner cannot be run because of tool environment issues, say that separately and do not treat it as a repo defect or penalize the repo. Fold deterministic and behavioral findings into that one list instead of separate sections. Focus on the fixes that would most improve real agent workflows. Do not include a separate summary unless the user asks for more detail. Example shape: ## Agent Compatibility Score: 72/100 -Problems / suggestions +Top fixes - First issue - Second issue - Third issue