Skip to content

feat(plugins): Add universal plugin support#113

Draft
dcramer wants to merge 15 commits into
mainfrom
codex/add-plugin-support
Draft

feat(plugins): Add universal plugin support#113
dcramer wants to merge 15 commits into
mainfrom
codex/add-plugin-support

Conversation

@dcramer

@dcramer dcramer commented Jun 12, 2026

Copy link
Copy Markdown
Member

This adds first-class plugin support using .agents/plugins as the canonical local layout while treating the Codex plugin manifest and marketplace shape as the generalized input model. Plugin declarations now flow through config loading, lockfiles, install, sync, list, doctor, gitignore handling, and specs/docs, with deterministic runtime projections for Claude Code, Cursor, Codex, Grok Build, and OpenCode.

The implementation keeps source marketplace metadata distinct from generated runtime marketplaces, rejects same-project plugin sources that would overwrite .agents/plugins/<name> with itself, and only overwrites managed runtime artifacts. Claude and Cursor get generated native manifests inside each canonical plugin bundle plus runtime marketplaces that point at ./.agents/plugins/<name>. Codex gets the repo-scoped .agents/plugins/marketplace.json plus a generated .codex-plugin/plugin.json; Grok gets a managed bundle copy; OpenCode gets a generated re-export module for explicit or conventional plugin modules.

The checked-in full example now includes a representative qa-tools plugin fixture, and the dotagents QA skill documents runtime-specific verification for Claude, Codex, OpenCode, Cursor, and Grok. Docker QA covers pnpm check, pnpm qa:example, focused plugin writer coverage, Claude plugin validation, Codex marketplace install/list/add, and OpenCode projection/config execution proof where available. Runtime UI or model-backed checks remain explicit final manual QA steps because those require the native client and authenticated model access.

Claude currently warns that metadata.managedBy is unknown, but accepts the plugin and marketplace while dotagents uses that marker to avoid overwriting user-authored files.

@vercel

vercel Bot commented Jun 12, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
dotagents Ready Ready Preview, Comment Jun 13, 2026 6:53pm

Request Review

Comment thread packages/dotagents/src/agents/plugin-writer.ts
Comment thread packages/dotagents/src/cli/commands/sync.ts
Comment thread packages/dotagents/src/agents/plugin-writer.ts
Comment thread packages/dotagents/src/cli/commands/doctor.ts
Comment thread packages/dotagents/src/agents/plugin-store.ts
Add a canonical .agents/plugins plugin model based on the Codex manifest shape and generate deterministic runtime outputs for supported agent tools.

Wire plugin declarations through config loading, lockfiles, install, sync, list, doctor, gitignore handling, and documentation. Reject same-project plugin installs that would overwrite their own source and cover the new behavior with regression tests.

Co-Authored-By: Codex <codex@openai.com>
Comment thread packages/dotagents/src/cli/commands/install.ts Outdated
Comment thread packages/dotagents/src/cli/commands/sync.ts
Comment thread packages/dotagents/src/agents/plugin-store.ts Outdated
Keep plugin lock entries after bundle installation so later syncs can repair runtime projection failures.

Validate same-project plugin declarations in doctor, emit a single conventional OpenCode module, escape generated OpenCode imports, and preserve empty resolved paths for root git plugins.

Co-Authored-By: GPT-5 Codex <codex@openai.com>
Comment thread packages/dotagents/src/agents/plugin-store.ts
Comment thread packages/dotagents/src/cli/commands/install.ts
Use a manifest-shaped marketplace overlay so marketplace source and policy metadata do not leak into installed plugin manifests or generated Codex manifests.

Reject same-project plugin declarations during frozen installs so frozen mode matches normal install, sync, and doctor behavior.

Co-Authored-By: GPT-5 Codex <codex@openai.com>
Comment thread packages/dotagents/src/cli/commands/sync.ts
Comment thread packages/dotagents/src/agents/plugin-writer.ts
Comment thread packages/dotagents/src/cli/commands/install.ts
Report missing plugin bundles as errors, avoid OpenCode stubs for absent explicit modules, and reject user-scope plugin declarations until user-scope projections are defined.

Document the project-scope-only plugin behavior in the public docs and specs.

Co-Authored-By: GPT-5 Codex <codex@openai.com>
Comment thread packages/dotagents/src/cli/commands/sync.ts
Comment thread packages/dotagents/src/agents/plugin-store.ts
Comment thread packages/dotagents/src/cli/commands/sync.ts
Comment thread packages/dotagents/src/cli/commands/doctor.ts
Comment thread packages/dotagents/src/agents/plugin-store.ts
Keep .agents/plugins/marketplace.json as authored canonical input instead of a generated or pruned runtime artifact. Tighten marketplace selector resolution and avoid treating unsupported source objects or URL-like paths as local filesystem paths.

Preserve manifest-declared plugin names through validation, reject explicit path name mismatches, prefer directory-name plugin matches over root manifest matches, and keep same-project plugin aliases out of managed .agents/.gitignore entries.

Report plugin sync issues from the repaired state, surface user-scope plugins as unsupported in doctor, and export public plugin config and lockfile types from the host package barrels.

Extend the checked-in smoke example with a portable plugin fixture that exercises Claude, Cursor, Codex, Grok, and OpenCode plugin output generation and sync repair.

Add regression coverage for git plugin lock metadata, explicit plugin path installs, manifest mismatches, plugin discovery precedence, public plugin type exports, and the reviewed sync and doctor plugin edge cases.

Co-Authored-By: GPT-5 Codex <codex@openai.com>
Comment thread packages/dotagents/src/cli/commands/sync.ts
Add an explicit runtime QA command that loads untracked QA env files, keeps the default smoke no-cost, and runs timeout-bounded runtime probes only when requested.

Document safe env forwarding for Docker QA and prevent repo-local .env files from being copied into sandbox fixtures.

Co-Authored-By: Codex <noreply@openai.com>
Comment thread packages/dotagents/src/agents/plugin-store.ts
Comment thread packages/dotagents/src/cli/commands/install.ts
dcramer and others added 2 commits June 13, 2026 09:18
Docker QA showed Claude Code rejects a marketplace entry unless the referenced plugin has a Claude-native .claude-plugin/plugin.json manifest. Generate that managed manifest inside the canonical .agents/plugins bundle, point marketplace sources at ./.agents/plugins/<name>, and omit fields current Claude validation rejects.

Co-Authored-By: Codex <noreply@openai.com>
Comment thread packages/dotagents/src/cli/commands/doctor.ts
Codex requires a repo-scoped .agents/plugins/marketplace.json before plugin add/list can discover a local plugin. Generate that managed catalog from installed plugin declarations and keep the per-plugin .codex-plugin manifest as the install target.

Co-Authored-By: Codex <noreply@openai.com>
Comment thread packages/dotagents/src/agents/plugin-store.ts
Comment thread packages/dotagents/src/cli/commands/sync.ts
Move the checked-in example QA runner into the dotagents-qa skill and split it into explicit tasks for install file checks, sync repair, Claude plugin validation, Codex plugin install proof, OpenCode module projection, and optional Codex runtime proof.

Document the task-specific Claude and Codex plugin QA flows so future validation uses the Docker skill instead of one all-in-one smoke script.

Co-Authored-By: Codex <noreply@openai.com>
Document how to forward local QA credentials into Docker without copying secrets into fixtures, and spell out runtime-specific OpenRouter or custom-provider paths for Claude Code, Codex, Grok Build, OpenCode, and Cursor.

Co-Authored-By: Codex <noreply@openai.com>
Comment thread packages/dotagents/src/cli/commands/list.ts
Comment thread packages/dotagents/src/cli/commands/sync.ts
Capture the manual Docker proof path for OpenCode credentials, generated subagent discovery, and delegation through the task tool. Also document the local QA env template for provider-specific keys.

Co-Authored-By: Codex <noreply@openai.com>
Comment thread packages/dotagents/src/agents/plugin-store.ts
Add managed Cursor native plugin manifests alongside the generated marketplace so local Cursor plugin roots have the expected .cursor-plugin/plugin.json file. Cover write, verify, prune, and unmanaged manifest protection.

Document plugin runtime verification steps for Claude, Codex, OpenCode, Cursor, and Grok so manual QA has a deterministic checklist where runtime clients or model auth are required.

Co-Authored-By: Codex <noreply@openai.com>

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 7fd2c29. Configure here.

Comment thread packages/dotagents/src/agents/plugin-store.ts
Preserve explicit Claude and Cursor component paths before falling back to conventional discovery, and compare managed Grok projection files as bytes so binary plugin assets update correctly.

Keep same-project canonical plugins out of regenerated .agents/.gitignore, strengthen OpenCode plugin QA with debug config evidence, and align docs with the current native manifest projection contract.

Co-Authored-By: Codex <noreply@openai.com>
Document that plugin-opencode now proves generated OpenCode plugin module loading through debug config while model-backed invocation remains explicit runtime QA.

Co-Authored-By: Codex <noreply@openai.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant