@orchid-labs/pluxx 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +100 -522
- package/dist/cli/agent.d.ts +7 -0
- package/dist/cli/agent.d.ts.map +1 -1
- package/dist/cli/doctor.d.ts +1 -0
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/eval.d.ts +22 -0
- package/dist/cli/eval.d.ts.map +1 -0
- package/dist/cli/index.d.ts +19 -2
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/init-from-mcp.d.ts +17 -2
- package/dist/cli/init-from-mcp.d.ts.map +1 -1
- package/dist/cli/install.d.ts +2 -0
- package/dist/cli/install.d.ts.map +1 -1
- package/dist/cli/lint.d.ts +5 -1
- package/dist/cli/lint.d.ts.map +1 -1
- package/dist/cli/mcp-proxy.d.ts +10 -0
- package/dist/cli/mcp-proxy.d.ts.map +1 -0
- package/dist/cli/migrate.d.ts.map +1 -1
- package/dist/cli/sync-from-mcp.d.ts.map +1 -1
- package/dist/cli/test.d.ts +2 -0
- package/dist/cli/test.d.ts.map +1 -1
- package/dist/generators/claude-code/index.d.ts +2 -0
- package/dist/generators/claude-code/index.d.ts.map +1 -1
- package/dist/generators/codex/index.d.ts +1 -0
- package/dist/generators/codex/index.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +99 -1
- package/dist/mcp/introspect.d.ts +43 -1
- package/dist/mcp/introspect.d.ts.map +1 -1
- package/dist/permissions.d.ts.map +1 -1
- package/dist/validation/platform-rules.d.ts +20 -0
- package/dist/validation/platform-rules.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/cli/agent.ts +459 -34
- package/src/cli/doctor.ts +400 -1
- package/src/cli/eval.ts +470 -0
- package/src/cli/index.ts +633 -114
- package/src/cli/init-from-mcp.ts +545 -41
- package/src/cli/install.ts +166 -4
- package/src/cli/lint.ts +56 -26
- package/src/cli/mcp-proxy.ts +322 -0
- package/src/cli/migrate.ts +256 -3
- package/src/cli/sync-from-mcp.ts +23 -0
- package/src/cli/test.ts +10 -2
- package/src/generators/claude-code/index.ts +143 -0
- package/src/generators/codex/index.ts +23 -0
- package/src/index.ts +12 -1
- package/src/mcp/introspect.ts +297 -24
- package/src/permissions.ts +3 -1
- package/src/validation/platform-rules.ts +121 -0
package/README.md
CHANGED
|
@@ -1,573 +1,151 @@
|
|
|
1
1
|
# pluxx
|
|
2
2
|
|
|
3
|
-
**
|
|
3
|
+
**Stop maintaining four plugin repos for one MCP.**
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Pluxx keeps one maintained plugin source project for **Claude Code, Cursor, Codex, and OpenCode**, then compiles the native bundle each host expects.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
It is the cross-host plugin authoring and maintenance layer for MCP teams that want one source of truth instead of separate per-host plugin repos.
|
|
8
8
|
|
|
9
|
-
-
|
|
10
|
-
-
|
|
9
|
+
- Docs: [docs.pluxx.dev](https://docs.pluxx.dev/)
|
|
10
|
+
- Website: [pluxx.dev](https://pluxx.dev/)
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
## Why Pluxx
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
bunx pluxx build
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
```
|
|
19
|
-
dist/
|
|
20
|
-
claude-code/ .claude-plugin/plugin.json, .mcp.json, CLAUDE.md, hooks/hooks.json, skills
|
|
21
|
-
cursor/ .cursor-plugin/plugin.json, mcp.json, hooks/hooks.json, AGENTS.md, rules/
|
|
22
|
-
codex/ .codex-plugin/plugin.json, .mcp.json, AGENTS.md, interface metadata
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
## Platform Support
|
|
26
|
-
|
|
27
|
-
| Platform | Status | Validated |
|
|
28
|
-
|----------|--------|-----------|
|
|
29
|
-
| **Claude Code** | Primary | `claude plugin validate` PASSED |
|
|
30
|
-
| **Cursor** | Primary | Docs-audited, hooks + rules covered in lint |
|
|
31
|
-
| **Codex** | Primary | Docs-audited, plugin packaging aligned; hooks remain external Codex config |
|
|
32
|
-
| **OpenCode** | Primary | Generates JS/TS wrapper, active docs-parity work |
|
|
33
|
-
| GitHub Copilot | Beta | Reuses Claude Code format (confirmed compatible) |
|
|
34
|
-
| OpenHands | Beta | Generates .plugin/ manifest, needs live testing |
|
|
35
|
-
| Warp | Beta | Generates skills + AGENTS.md |
|
|
36
|
-
| Gemini CLI | Beta | Generates gemini-extension.json |
|
|
37
|
-
| Roo Code | Beta | Generates .roorules + skills |
|
|
38
|
-
| Cline | Beta | Generates .clinerules + skills |
|
|
39
|
-
| AMP | Beta | Generates AGENT.md + skills |
|
|
40
|
-
|
|
41
|
-
**Primary** = first-class launch target, actively maintained.
|
|
42
|
-
**Beta** = generated, but less validated against live tool behavior.
|
|
43
|
-
|
|
44
|
-
The mechanically generated source of truth for support and verification is [docs/compatibility.md](./docs/compatibility.md).
|
|
45
|
-
|
|
46
|
-
If you want the operational version of the docs, start with the [Practical handbook](./docs/practical-handbook.md).
|
|
47
|
-
If you want the explicit authoring walkthrough, use [Create a Pluxx plugin](./docs/create-a-pluxx-plugin.md).
|
|
48
|
-
If you want the meta guide for using Pluxx *inside* Claude/Codex/Cursor/OpenCode, use [Use Pluxx in host agents](./docs/use-pluxx-in-host-agents.md).
|
|
49
|
-
If you want the tightened product scope for what Pluxx should model first, use [Core primitives](./docs/core-primitives.md).
|
|
50
|
-
If you want the current execution queue with milestones, dependencies, and delegated subtasks, use [Roadmap](./docs/roadmap.md).
|
|
51
|
-
If you want the implementation target for release orchestration, use [publish v1 contract](./docs/publish-v1-contract.md).
|
|
52
|
-
If you are planning marketplace-aware release flows, use [Marketplace submission prep](./docs/marketplace-submission-prep.md).
|
|
53
|
-
|
|
54
|
-
## Why?
|
|
55
|
-
|
|
56
|
-
Tools like `npx skills` install SKILL.md files across agents. That covers **skills**.
|
|
14
|
+
Every host has different plugin contracts:
|
|
57
15
|
|
|
58
|
-
|
|
16
|
+
- manifests
|
|
17
|
+
- instructions and rules
|
|
18
|
+
- hook surfaces
|
|
19
|
+
- MCP auth wiring
|
|
20
|
+
- brand and packaging metadata
|
|
59
21
|
|
|
60
|
-
|
|
61
|
-
|-----------|---------------------|
|
|
62
|
-
| **Manifests** | `.claude-plugin/plugin.json` vs `.cursor-plugin/plugin.json` vs `.codex-plugin/plugin.json` |
|
|
63
|
-
| **MCP auth** | Claude Code uses `headers`, Codex uses `bearer_token_env_var` plus `env_http_headers` / `http_headers`, Cursor uses Claude Desktop format |
|
|
64
|
-
| **Hooks** | Different event names, different JSON schemas, and in Codex's case a separate runtime config path |
|
|
65
|
-
| **Rules** | `CLAUDE.md` vs `rules/*.mdc` vs `AGENTS.md` |
|
|
66
|
-
| **Brand metadata** | Codex has icons, colors, screenshots, default prompts. Others don't. |
|
|
67
|
-
| **Subagents** | Different formats per platform |
|
|
22
|
+
Without Pluxx, those details drift across multiple repos. With Pluxx, you keep one source project and generate host-native outputs.
|
|
68
23
|
|
|
69
|
-
|
|
24
|
+
## Platform Focus
|
|
70
25
|
|
|
71
|
-
|
|
26
|
+
Pluxx is currently centered on the core four:
|
|
72
27
|
|
|
73
|
-
|
|
28
|
+
- Claude Code
|
|
29
|
+
- Cursor
|
|
30
|
+
- Codex
|
|
31
|
+
- OpenCode
|
|
74
32
|
|
|
75
|
-
|
|
33
|
+
Other targets still exist as generated secondary/beta outputs, but the product and docs are intentionally optimized around the core four.
|
|
76
34
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
- `skills`
|
|
80
|
-
- `instructions`
|
|
81
|
-
- `mcp`
|
|
82
|
-
- `userConfig`
|
|
83
|
-
- `commands`
|
|
84
|
-
- `agents`
|
|
85
|
-
- `hooks`
|
|
86
|
-
- `permissions`
|
|
87
|
-
- `brand`
|
|
88
|
-
- `assets/scripts`
|
|
89
|
-
- `taxonomy`
|
|
90
|
-
|
|
91
|
-
These are the primitives that show up repeatedly in real plugins and real host integrations.
|
|
92
|
-
|
|
93
|
-
## What Pluxx Does Not Model Yet
|
|
94
|
-
|
|
95
|
-
These features exist in one or more hosts, but they are not the current product center:
|
|
96
|
-
|
|
97
|
-
- `outputStyles`
|
|
98
|
-
- `lspServers`
|
|
99
|
-
- `bin/` executables
|
|
100
|
-
- `monitors`
|
|
101
|
-
- `channels`
|
|
102
|
-
- `apps` abstraction
|
|
103
|
-
- plugin data-dir abstraction
|
|
104
|
-
- statuslines
|
|
105
|
-
- themes / keybindings
|
|
106
|
-
- sandbox or other user/admin runtime policy
|
|
107
|
-
|
|
108
|
-
Pluxx should document these and revisit them later, but it should not expand the core mental model around them yet.
|
|
109
|
-
|
|
110
|
-
When you scaffold from an MCP server, pluxx now drafts workflow-oriented skills from the discovered tools so the first pass is closer to a usable plugin.
|
|
111
|
-
|
|
112
|
-
The next layer is `Agent` mode: Pluxx prepares the scaffold, context pack, and prompt pack; Claude Code or Codex does the semantic refinement. The product direction is documented in [docs/agent-mode.md](./docs/agent-mode.md).
|
|
35
|
+
For the detailed compatibility and verification matrix, see [docs/compatibility.md](./docs/compatibility.md).
|
|
113
36
|
|
|
114
37
|
## Quick Start
|
|
115
38
|
|
|
116
39
|
```bash
|
|
117
|
-
#
|
|
118
|
-
|
|
119
|
-
# Start a plugin by hand
|
|
120
|
-
bunx pluxx init my-plugin
|
|
121
|
-
cd my-plugin
|
|
122
|
-
# Edit pluxx.config.ts, add skills in ./skills/, then build
|
|
123
|
-
|
|
124
|
-
# Or scaffold directly from an MCP server
|
|
125
|
-
bunx pluxx init --from-mcp https://example.com/mcp
|
|
126
|
-
|
|
127
|
-
# Legacy SSE MCP import
|
|
128
|
-
bunx pluxx init --from-mcp https://example.com/sse --transport sse
|
|
129
|
-
|
|
130
|
-
# Local stdio MCP import
|
|
131
|
-
bunx pluxx init --from-mcp "npx -y @acme/mcp"
|
|
132
|
-
|
|
133
|
-
# pluxx will introspect the server and draft grouped skills like
|
|
134
|
-
# account-research, contact-discovery, hiring-signals, or technographics
|
|
135
|
-
|
|
136
|
-
# Headless / CI-friendly import
|
|
137
|
-
bunx pluxx init --from-mcp https://example.com/mcp --yes --name acme --display-name "Acme" --author "Acme" --targets claude-code,codex --grouping workflow --hooks safe --json
|
|
138
|
-
|
|
139
|
-
# Remote MCPs that use custom header auth
|
|
140
|
-
bunx pluxx init --from-mcp https://mcp.playkit.sh/mcp --yes --auth-env PLAYKIT_API_KEY --auth-type header --auth-header X-API-Key --auth-template '${value}'
|
|
141
|
-
|
|
142
|
-
# OAuth-first MCPs: complete provider OAuth first, then pass the resulting token env var
|
|
143
|
-
bunx pluxx init --from-mcp https://example.com/mcp --yes --auth-env OAUTH_ACCESS_TOKEN --auth-type bearer
|
|
144
|
-
|
|
145
|
-
# Inspect the generated project without mutating files
|
|
146
|
-
bunx pluxx doctor
|
|
147
|
-
bunx pluxx init --from-mcp https://example.com/mcp --yes --dry-run
|
|
148
|
-
|
|
149
|
-
# Refresh MCP-derived files later while preserving the custom sections
|
|
150
|
-
bunx pluxx sync --json
|
|
151
|
-
|
|
152
|
-
# Prepare an agent-facing context pack and prompt pack
|
|
153
|
-
bunx pluxx agent prepare
|
|
154
|
-
bunx pluxx agent prompt taxonomy
|
|
155
|
-
|
|
156
|
-
# Or run the full import -> refine -> verify path in one shot
|
|
157
|
-
bunx pluxx autopilot --from-mcp https://example.com/mcp --runner codex --mode quick --yes
|
|
158
|
-
bunx pluxx autopilot --from-mcp https://example.com/mcp --runner codex --mode standard --yes --name acme --display-name "Acme" --author "Acme"
|
|
159
|
-
bunx pluxx autopilot --from-mcp https://example.com/mcp --runner codex --mode thorough --yes --verbose-runner
|
|
160
|
-
|
|
161
|
-
# Or let Claude/Cursor/OpenCode/Codex consume the pack headlessly
|
|
162
|
-
bunx pluxx agent run taxonomy --runner claude
|
|
163
|
-
bunx pluxx agent run taxonomy --runner cursor
|
|
164
|
-
bunx pluxx agent run taxonomy --runner codex
|
|
165
|
-
bunx pluxx agent run review --runner opencode --attach http://localhost:4096 --no-verify
|
|
166
|
-
|
|
167
|
-
# Validate, build, and smoke-test the generated plugin
|
|
168
|
-
bunx pluxx lint
|
|
169
|
-
bunx pluxx build
|
|
170
|
-
bunx pluxx test
|
|
171
|
-
```
|
|
172
|
-
|
|
173
|
-
`--attach` is only supported for the `opencode` runner.
|
|
174
|
-
|
|
175
|
-
Autopilot modes:
|
|
176
|
-
|
|
177
|
-
- `quick`: deterministic scaffold first, and only a taxonomy pass when MCP metadata warnings make it necessary
|
|
178
|
-
- `standard`: balanced default; only runs the expensive passes when quality signals or extra docs/context justify them
|
|
179
|
-
- `thorough`: always runs taxonomy, instructions, and review before verification
|
|
180
|
-
|
|
181
|
-
## Product Boundary And Lifecycle
|
|
182
|
-
|
|
183
|
-
Pluxx is for teams that want one maintained plugin source of truth across hosts.
|
|
184
|
-
|
|
185
|
-
The best fit today is MCP developers and teams shipping MCP-backed plugins, because MCP import, auth translation, and sync create the most cross-host pain. But hand-authored plugins are still a valid use case.
|
|
186
|
-
|
|
187
|
-
Pluxx owns:
|
|
188
|
-
|
|
189
|
-
- plugin authoring scaffold, whether imported from MCP or authored manually
|
|
190
|
-
- validation (`lint`, `doctor`, `test`)
|
|
191
|
-
- platform bundle generation (`build`)
|
|
192
|
-
- local installation for testing (`install`)
|
|
193
|
-
- ongoing MCP-to-plugin maintenance (`sync`) for MCP-derived projects
|
|
194
|
-
|
|
195
|
-
Pluxx does not own:
|
|
196
|
-
|
|
197
|
-
- deploying or hosting your MCP backend service
|
|
198
|
-
- running your production MCP infrastructure
|
|
199
|
-
|
|
200
|
-
The normal lifecycle is:
|
|
201
|
-
|
|
202
|
-
1. Start from an MCP import or a hand-authored plugin source repo.
|
|
203
|
-
2. Refine the source project.
|
|
204
|
-
3. Validate/build/install locally.
|
|
205
|
-
4. If the plugin is MCP-backed, repoint sync to the deployed HTTP/SSE MCP when production is ready.
|
|
206
|
-
5. Keep the same plugin repo as the long-term source of truth.
|
|
207
|
-
|
|
208
|
-
Example local-to-production transition:
|
|
209
|
-
|
|
210
|
-
```bash
|
|
211
|
-
# Local development MCP
|
|
212
|
-
bunx pluxx init --from-mcp "npx -y @acme/mcp"
|
|
213
|
-
|
|
214
|
-
# Later, after your MCP backend is deployed
|
|
215
|
-
bunx pluxx sync --from-mcp https://mcp.acme.com/mcp
|
|
216
|
-
```
|
|
217
|
-
|
|
218
|
-
Publish/distribution today is repo-first:
|
|
219
|
-
|
|
220
|
-
1. Commit the generated plugin source repo (`pluxx.config.ts`, `skills/`, `INSTRUCTIONS.md`, `.pluxx/mcp.json`).
|
|
221
|
-
2. Build platform bundles with `bunx pluxx build`.
|
|
222
|
-
3. Distribute those bundles through your target channels (internal repo, releases, or platform-specific publish paths).
|
|
40
|
+
# Requires Bun on PATH
|
|
41
|
+
npx @orchid-labs/pluxx init --from-mcp https://example.com/mcp --name my-plugin --yes
|
|
223
42
|
|
|
224
|
-
Pluxx is the distribution and maintenance layer for plugin artifacts; MCP service deployment remains your responsibility.
|
|
225
|
-
|
|
226
|
-
Generated MCP skill files include deterministic example requests derived from tool names and required inputs, so the first scaffold is useful before any AI refinement.
|
|
227
|
-
|
|
228
|
-
Agent Mode stays file-first: Pluxx writes `.pluxx/agent/context.md`, `.pluxx/agent/plan.json`, and the prompt packs, then optional runner adapters can hand those files to `claude`, `opencode`, or `codex` in headless mode. Durable project-level prompt and context customization now lives in `pluxx.agent.md`, so users do not need to edit generated `.pluxx/agent/*.md` files directly.
|
|
229
|
-
Runner output is summarized by default for `pluxx agent run` and `pluxx autopilot`; use `--verbose-runner` when you want full headless runner streaming.
|
|
230
|
-
|
|
231
|
-
The dogfood coverage matrix across messy metadata, local stdio, OAuth-first servers, and production auth patterns is documented in [docs/mcp-dogfood-matrix.md](./docs/mcp-dogfood-matrix.md).
|
|
232
|
-
|
|
233
|
-
For dogfooding inside Codex, this repo also ships a local plugin/skill pack at [plugins/pluxx](/Users/brandonguerrero/Documents/Orchid Automation/Orchid Labs/pluxx/plugins/pluxx) with focused skills for import, taxonomy refinement, instructions, review, and sync.
|
|
234
|
-
There is now also a first-class self-hosting source project at [example/pluxx](/Users/brandonguerrero/Documents/Orchid Automation/Orchid Labs/pluxx/example/pluxx) that uses one Pluxx config to generate Claude Code, Cursor, Codex, and OpenCode outputs for the Pluxx plugin itself.
|
|
235
|
-
|
|
236
|
-
```bash
|
|
237
|
-
# Optional: global install still shells out to Bun
|
|
238
|
-
npm install -g pluxx
|
|
239
|
-
pluxx init my-plugin
|
|
240
|
-
|
|
241
|
-
# Scaffold a new plugin
|
|
242
43
|
cd my-plugin
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
bunx pluxx build
|
|
248
|
-
|
|
249
|
-
# Lint against all platform rules (47 checks)
|
|
250
|
-
bunx pluxx lint
|
|
251
|
-
|
|
252
|
-
# Diagnose local runtime + config health
|
|
253
|
-
bunx pluxx doctor
|
|
254
|
-
|
|
255
|
-
# Run config, lint, build, and smoke checks together
|
|
256
|
-
bunx pluxx test
|
|
257
|
-
|
|
258
|
-
# Build for specific platforms
|
|
259
|
-
bunx pluxx build --target claude-code cursor codex opencode
|
|
260
|
-
|
|
261
|
-
# Validate your config
|
|
262
|
-
bunx pluxx validate
|
|
263
|
-
```
|
|
264
|
-
|
|
265
|
-
## Config
|
|
266
|
-
|
|
267
|
-
```typescript
|
|
268
|
-
// pluxx.config.ts
|
|
269
|
-
import { definePlugin } from 'pluxx'
|
|
270
|
-
|
|
271
|
-
export default definePlugin({
|
|
272
|
-
name: 'my-plugin',
|
|
273
|
-
version: '1.0.0',
|
|
274
|
-
description: 'What your plugin does',
|
|
275
|
-
author: { name: 'Your Name' },
|
|
276
|
-
|
|
277
|
-
// Skills (Agent Skills standard — shared across all platforms)
|
|
278
|
-
skills: './skills/',
|
|
279
|
-
|
|
280
|
-
// MCP servers (auth format auto-translated per platform)
|
|
281
|
-
mcp: {
|
|
282
|
-
'my-server': {
|
|
283
|
-
url: 'https://my-server.com/mcp',
|
|
284
|
-
auth: {
|
|
285
|
-
type: 'bearer',
|
|
286
|
-
envVar: 'MY_API_KEY',
|
|
287
|
-
},
|
|
288
|
-
},
|
|
289
|
-
},
|
|
290
|
-
|
|
291
|
-
// Hooks (generated where the platform supports plugin-packaged hooks;
|
|
292
|
-
// Codex currently keeps hook config in .codex/hooks.json outside plugin bundles)
|
|
293
|
-
hooks: {
|
|
294
|
-
sessionStart: [{
|
|
295
|
-
command: '${PLUGIN_ROOT}/scripts/setup.sh',
|
|
296
|
-
}],
|
|
297
|
-
},
|
|
298
|
-
|
|
299
|
-
// Instructions (generates CLAUDE.md, AGENTS.md, or .mdc rules)
|
|
300
|
-
instructions: './INSTRUCTIONS.md',
|
|
301
|
-
|
|
302
|
-
// Brand (used by platforms that support rich metadata)
|
|
303
|
-
brand: {
|
|
304
|
-
displayName: 'My Plugin',
|
|
305
|
-
color: '#3B82F6',
|
|
306
|
-
icon: './assets/icon.svg',
|
|
307
|
-
defaultPrompts: ['Try my plugin with this prompt'],
|
|
308
|
-
},
|
|
309
|
-
|
|
310
|
-
// Target platforms
|
|
311
|
-
targets: ['claude-code', 'cursor', 'codex', 'opencode'],
|
|
312
|
-
})
|
|
44
|
+
npx @orchid-labs/pluxx doctor
|
|
45
|
+
npx @orchid-labs/pluxx lint
|
|
46
|
+
npx @orchid-labs/pluxx build
|
|
47
|
+
npx @orchid-labs/pluxx test
|
|
313
48
|
```
|
|
314
49
|
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
### MCP Config Translation
|
|
318
|
-
|
|
319
|
-
You write one auth config. pluxx generates the correct format for each platform:
|
|
50
|
+
Common output shape:
|
|
320
51
|
|
|
321
|
-
```
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
},
|
|
328
|
-
}
|
|
329
|
-
```
|
|
330
|
-
|
|
331
|
-
```jsonc
|
|
332
|
-
// Claude Code gets:
|
|
333
|
-
{ "headers": { "Authorization": "Bearer ${API_KEY}" } }
|
|
334
|
-
|
|
335
|
-
// Codex gets:
|
|
336
|
-
{
|
|
337
|
-
"env_http_headers": {
|
|
338
|
-
"X-API-Key": "API_KEY"
|
|
339
|
-
}
|
|
340
|
-
}
|
|
341
|
-
|
|
342
|
-
// Cursor gets:
|
|
343
|
-
{ "headers": { "Authorization": "Bearer ${API_KEY}" } }
|
|
344
|
-
```
|
|
345
|
-
|
|
346
|
-
### Plugin Manifests
|
|
347
|
-
|
|
348
|
-
Each platform gets its native manifest format:
|
|
349
|
-
|
|
350
|
-
- **Claude Code**: `.claude-plugin/plugin.json` with skills, commands paths
|
|
351
|
-
- **Cursor**: `.cursor-plugin/plugin.json` with explicit `rules/`, `hooks/hooks.json`, and `mcp.json` component paths
|
|
352
|
-
- **Codex**: `.codex-plugin/plugin.json` with full `interface` block (brand color, icons, screenshots, default prompts, capabilities) plus external hooks via `.codex/hooks.json`
|
|
353
|
-
- **OpenCode**: npm package + JS/TS plugin wrapper
|
|
354
|
-
|
|
355
|
-
### Instructions to Platform-Native Rules
|
|
356
|
-
|
|
357
|
-
Your single `INSTRUCTIONS.md` becomes:
|
|
358
|
-
- `CLAUDE.md` for Claude Code
|
|
359
|
-
- `AGENTS.md` for Codex and Cursor
|
|
360
|
-
- `.mdc` rule files in `rules/` for Cursor (with frontmatter) when you specify rules in platform overrides
|
|
361
|
-
|
|
362
|
-
### 47 Lint Checks
|
|
363
|
-
|
|
364
|
-
`pluxx lint` catches platform-specific gotchas before you ship:
|
|
365
|
-
|
|
366
|
-
- Codex rejects SKILL.md descriptions over 1024 characters
|
|
367
|
-
- Claude Code silently truncates descriptions at 250 characters
|
|
368
|
-
- Cursor and Cline require skill names to match their directory names
|
|
369
|
-
- Codex allows max 3 default prompts, 128 chars each
|
|
370
|
-
- Claude Code hook events must be PascalCase (26 valid events)
|
|
371
|
-
- Manifest paths must start with `./` and cannot contain `../`
|
|
372
|
-
- Plugin directories must be at root, not inside `.claude-plugin/`
|
|
373
|
-
- Version must follow semver format
|
|
374
|
-
- And 39 more checks across all platforms
|
|
375
|
-
|
|
376
|
-
### Read-Only Diagnostics And Verification
|
|
377
|
-
|
|
378
|
-
- `pluxx doctor` checks Bun/runtime health, config loadability, configured paths, MCP auth/transport shape, scaffold metadata, and install trust advisories.
|
|
379
|
-
- `pluxx test` runs the default verification stack for a plugin project: config load, lint, build, and generated-output smoke checks.
|
|
380
|
-
- `--json` is available for machine-readable output on `init --from-mcp`, `sync`, `doctor`, `lint`, `build`, `install --dry-run`, and `test`.
|
|
381
|
-
- `--dry-run` previews file writes for `init --from-mcp` and `sync`, install paths for `install`, and output targets for `build`.
|
|
382
|
-
|
|
383
|
-
### Platform Overrides
|
|
384
|
-
|
|
385
|
-
For the 10% of cases where platforms diverge:
|
|
386
|
-
|
|
387
|
-
```typescript
|
|
388
|
-
platforms: {
|
|
389
|
-
'claude-code': {
|
|
390
|
-
skillDefaults: { effort: 'high' },
|
|
391
|
-
},
|
|
392
|
-
cursor: {
|
|
393
|
-
rules: [{
|
|
394
|
-
description: 'My conventions',
|
|
395
|
-
alwaysApply: false,
|
|
396
|
-
}],
|
|
397
|
-
},
|
|
398
|
-
codex: {
|
|
399
|
-
interface: {
|
|
400
|
-
capabilities: ['Interactive', 'Write'],
|
|
401
|
-
privacyPolicyURL: 'https://example.com/privacy',
|
|
402
|
-
},
|
|
403
|
-
},
|
|
404
|
-
}
|
|
52
|
+
```text
|
|
53
|
+
dist/
|
|
54
|
+
claude-code/
|
|
55
|
+
cursor/
|
|
56
|
+
codex/
|
|
57
|
+
opencode/
|
|
405
58
|
```
|
|
406
59
|
|
|
407
|
-
##
|
|
408
|
-
|
|
409
|
-
### Megamind (client intelligence plugin)
|
|
410
|
-
|
|
411
|
-
The [example/megamind](./example/megamind) directory contains a full plugin that was previously hand-maintained as two separate copies. With pluxx, one config generates outputs for all platforms.
|
|
60
|
+
## Command Cheat Sheet
|
|
412
61
|
|
|
413
|
-
```
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
```
|
|
62
|
+
```text
|
|
63
|
+
Need a new project from an MCP?
|
|
64
|
+
pluxx init --from-mcp <source> --yes
|
|
417
65
|
|
|
418
|
-
|
|
66
|
+
Need the all-in-one path?
|
|
67
|
+
pluxx autopilot --from-mcp <source> --runner <runner>
|
|
419
68
|
|
|
420
|
-
|
|
69
|
+
Need deterministic checks?
|
|
70
|
+
pluxx doctor
|
|
71
|
+
pluxx lint
|
|
72
|
+
pluxx eval
|
|
73
|
+
pluxx build
|
|
74
|
+
pluxx test
|
|
421
75
|
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
```
|
|
76
|
+
Need local installs too?
|
|
77
|
+
pluxx build --install
|
|
78
|
+
pluxx test --install
|
|
79
|
+
pluxx uninstall
|
|
427
80
|
|
|
428
|
-
|
|
81
|
+
Need agent refinement?
|
|
82
|
+
pluxx agent prepare [--website <url>] [--docs <url>]
|
|
83
|
+
pluxx agent run taxonomy --runner <runner>
|
|
84
|
+
pluxx agent run instructions --runner <runner>
|
|
85
|
+
pluxx agent run review --runner <runner>
|
|
429
86
|
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
bunx pluxx doctor
|
|
87
|
+
Need to import an old host-native plugin?
|
|
88
|
+
pluxx migrate <path>
|
|
433
89
|
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
bunx pluxx install --target claude-code
|
|
90
|
+
Need to inspect a shipped bundle?
|
|
91
|
+
pluxx doctor --consumer <bundle>
|
|
437
92
|
|
|
438
|
-
|
|
439
|
-
|
|
93
|
+
Need deterministic MCP replay?
|
|
94
|
+
pluxx mcp proxy --from-mcp <source> --record tape.json
|
|
95
|
+
pluxx mcp proxy --replay tape.json
|
|
440
96
|
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
# ✓ Validation passed
|
|
97
|
+
Need to refresh from the MCP later?
|
|
98
|
+
pluxx sync
|
|
444
99
|
```
|
|
445
100
|
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
Pluxx now ships a reusable GitHub workflow for plugin repos:
|
|
101
|
+
Full docs tree:
|
|
449
102
|
|
|
450
|
-
|
|
451
|
-
name: Plugin Check
|
|
452
|
-
|
|
453
|
-
on:
|
|
454
|
-
pull_request:
|
|
455
|
-
push:
|
|
456
|
-
branches: [main]
|
|
457
|
-
|
|
458
|
-
jobs:
|
|
459
|
-
verify:
|
|
460
|
-
uses: orchidautomation/pluxx/.github/workflows/pluxx-plugin-check.yml@main
|
|
461
|
-
with:
|
|
462
|
-
working-directory: .
|
|
463
|
-
pluxx-version: latest
|
|
464
|
-
```
|
|
103
|
+
- [docs.pluxx.dev/getting-started/command-decision-tree](https://docs.pluxx.dev/getting-started/command-decision-tree)
|
|
465
104
|
|
|
466
|
-
|
|
105
|
+
## Core Commands
|
|
467
106
|
|
|
468
|
-
|
|
469
|
-
bunx pluxx init --from-mcp https://example.com/mcp --yes --json
|
|
470
|
-
bunx pluxx sync --dry-run --json
|
|
471
|
-
bunx pluxx test --json
|
|
472
|
-
```
|
|
107
|
+
Pluxx includes more than scaffold generation:
|
|
473
108
|
|
|
474
|
-
|
|
109
|
+
- `pluxx eval` checks scaffold and prompt-pack quality
|
|
110
|
+
- `pluxx migrate <path>` imports an existing host-native plugin into a Pluxx project
|
|
111
|
+
- `pluxx doctor --consumer <bundle>` inspects built or installed plugin bundles from the user side
|
|
112
|
+
- `pluxx mcp proxy --record` and `--replay` give you deterministic MCP tapes for debugging and CI
|
|
475
113
|
|
|
476
|
-
##
|
|
114
|
+
## Authoring Model
|
|
477
115
|
|
|
478
|
-
|
|
116
|
+
Pluxx is intentionally opinionated around a compact cross-host model:
|
|
479
117
|
|
|
480
|
-
|
|
118
|
+
- skills
|
|
119
|
+
- instructions
|
|
120
|
+
- mcp
|
|
121
|
+
- commands
|
|
122
|
+
- hooks
|
|
123
|
+
- permissions
|
|
124
|
+
- userConfig
|
|
125
|
+
- agents
|
|
126
|
+
- brand and assets
|
|
127
|
+
- taxonomy
|
|
481
128
|
|
|
482
|
-
|
|
129
|
+
Pluxx owns the deterministic scaffold and validation. Your host coding agent can refine taxonomy, instructions, and examples without breaking the structure.
|
|
483
130
|
|
|
484
|
-
|
|
485
|
-
bunx pluxx install --trust
|
|
486
|
-
```
|
|
131
|
+
## Install And Runtime Notes
|
|
487
132
|
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
| `pluxx init` | Interactive scaffold for a new plugin or `--from-mcp` import |
|
|
493
|
-
| `pluxx doctor` | Read-only runtime, config, MCP, and trust diagnostics |
|
|
494
|
-
| `pluxx build` | Generate plugin packages for all target platforms |
|
|
495
|
-
| `pluxx lint` | 47 checks against all platform rules |
|
|
496
|
-
| `pluxx test` | Run config, lint, build, and smoke checks together |
|
|
497
|
-
| `pluxx sync` | Refresh MCP-derived scaffold files while preserving custom sections |
|
|
498
|
-
| `pluxx validate` | Validate your config schema |
|
|
499
|
-
| `pluxx install` | Symlink built plugins for local testing (prompts when hook commands exist) |
|
|
500
|
-
| `pluxx install --trust` | Bypass hook trust confirmation |
|
|
501
|
-
| `pluxx uninstall` | Remove symlinked plugins |
|
|
502
|
-
| `pluxx dev` | Watch mode with auto-rebuild on file changes |
|
|
503
|
-
| `pluxx migrate <path>` | Import an existing single-platform plugin |
|
|
504
|
-
|
|
505
|
-
## How It Works
|
|
133
|
+
- npm package: `@orchid-labs/pluxx`
|
|
134
|
+
- preferred invocation: `npx @orchid-labs/pluxx ...`
|
|
135
|
+
- global install also works: `npm install -g @orchid-labs/pluxx`
|
|
136
|
+
- the current launcher still requires Bun at runtime
|
|
506
137
|
|
|
507
|
-
|
|
508
|
-
pluxx.config.ts <- You define your plugin once
|
|
509
|
-
|
|
|
510
|
-
v
|
|
511
|
-
+---------+
|
|
512
|
-
| Parse | Zod schema validation
|
|
513
|
-
+----+----+
|
|
514
|
-
|
|
|
515
|
-
v
|
|
516
|
-
+--------+
|
|
517
|
-
| Lint | 47 platform-specific checks
|
|
518
|
-
+----+---+
|
|
519
|
-
|
|
|
520
|
-
v
|
|
521
|
-
+----------+
|
|
522
|
-
| Generate | Platform-specific generators
|
|
523
|
-
+-+--+--+--+
|
|
524
|
-
| | |
|
|
525
|
-
v v v
|
|
526
|
-
Claude Cursor Codex + 8 beta platforms
|
|
527
|
-
Code
|
|
528
|
-
```
|
|
138
|
+
## Read Next
|
|
529
139
|
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
| Rules/instructions generation | Yes | - | Translate only |
|
|
540
|
-
| Cross-platform lint (47 checks) | Yes | - | - |
|
|
541
|
-
| Subagent configs | Yes | - | - |
|
|
542
|
-
|
|
543
|
-
**pluxx builds plugins. The others install skills.** They're complementary — use `npx skills` to distribute your skills, use pluxx to build the full plugin package.
|
|
544
|
-
|
|
545
|
-
## Built On
|
|
546
|
-
|
|
547
|
-
- [Agent Skills](https://agentskills.io/) open standard (skills are pass-through, never modified)
|
|
548
|
-
- [Zod](https://zod.dev/) for config validation with full TypeScript inference
|
|
549
|
-
- [Bun](https://bun.sh/) for fast builds and TypeScript-native execution
|
|
550
|
-
|
|
551
|
-
## Roadmap
|
|
552
|
-
|
|
553
|
-
- [x] Core schema with Zod validation
|
|
554
|
-
- [x] Generators: Claude Code, Cursor, Codex (fully supported) + 8 beta platforms
|
|
555
|
-
- [x] CLI: `build`, `validate`, `init`, `lint`, `install`, `uninstall`, `dev`, `migrate`
|
|
556
|
-
- [x] MCP auth normalization across platforms
|
|
557
|
-
- [x] 47 lint checks from official docs (Firecrawl-verified)
|
|
558
|
-
- [x] Real-world examples (Megamind + Prospeo)
|
|
559
|
-
- [ ] `pluxx lint --fix` — auto-apply suggested fixes
|
|
560
|
-
- [x] `pluxx init --from-mcp` — auto-scaffold plugins from existing MCP servers
|
|
561
|
-
- [x] `pluxx doctor` — project and runtime health checks
|
|
562
|
-
- [x] `pluxx test` — verification command for plugin repos
|
|
563
|
-
- [x] CI/CD GitHub Action / reusable workflow
|
|
564
|
-
- [ ] canonical `userConfig` / install-time secret handling
|
|
565
|
-
- [ ] canonical permissions model across primary targets
|
|
566
|
-
- [ ] build-time target cap validation for primary targets
|
|
567
|
-
- [ ] `pluxx publish` — push to platform marketplaces
|
|
568
|
-
- [ ] `pluxx diff` — show what changed per platform
|
|
569
|
-
- [ ] Plugin analytics dashboard
|
|
570
|
-
- [ ] Promote beta platforms to fully supported
|
|
140
|
+
- [Getting started](./docs/getting-started.md)
|
|
141
|
+
- [Create a Pluxx plugin](./docs/create-a-pluxx-plugin.md)
|
|
142
|
+
- [How it works](./docs/how-it-works.md)
|
|
143
|
+
- [Use Pluxx in host agents](./docs/use-pluxx-in-host-agents.md)
|
|
144
|
+
- [Core primitives](./docs/core-primitives.md)
|
|
145
|
+
- [OSS wedge and trust layer](./docs/oss-wedge-and-trust-layer.md)
|
|
146
|
+
- [Compatibility matrix](./docs/compatibility.md)
|
|
147
|
+
- [First proof and demo asset pack](./docs/first-proof-demo-asset-pack.md)
|
|
148
|
+
- [Releasing Pluxx](./docs/releasing-pluxx.md)
|
|
571
149
|
|
|
572
150
|
## License
|
|
573
151
|
|