Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
82 commits
Select commit Hold shift + click to select a range
d9fbc61
feat(mcp-server): add lint types module
LSDimi Jun 3, 2026
8678bcc
feat(mcp-server): add lint registry and runLint entrypoint
LSDimi Jun 3, 2026
e547d29
feat(mcp-server): add no-notify lint rule
LSDimi Jun 3, 2026
21e38a9
feat(mcp-server): add no-sync-style-setters lint rule
LSDimi Jun 3, 2026
1fbfd80
feat(mcp-server): add no-itemspacing-auto lint rule
LSDimi Jun 3, 2026
cb12e9c
feat(mcp-server): add invalid-variable-name lint rule
LSDimi Jun 3, 2026
a1e5638
feat(mcp-server): add no-hyphenated-plugindata-key lint rule
LSDimi Jun 3, 2026
b7527f8
feat(mcp-server): add no-text-encoders lint rule
LSDimi Jun 3, 2026
50994b5
feat(mcp-server): add prefer-helpers lint rule
LSDimi Jun 3, 2026
d90f0bc
feat(mcp-server): register default lint ruleset
LSDimi Jun 3, 2026
e5f4818
feat(mcp-server): add prelude module skeleton and wrapScript
LSDimi Jun 3, 2026
335413d
feat(mcp-server): add PluginOS.createStyledText helper
LSDimi Jun 3, 2026
9537231
feat(mcp-server): add PluginOS.bindSpacing helper
LSDimi Jun 3, 2026
d583a84
feat(mcp-server): add PluginOS.combineAsVariantsTiled helper
LSDimi Jun 3, 2026
f76a86a
feat(mcp-server): add PluginOS.tileTopLevel helper
LSDimi Jun 3, 2026
055edff
feat(mcp-server): add PluginOS.layoutSpaceBetween helper
LSDimi Jun 3, 2026
21a2562
feat(mcp-server): wire prelude and lint into execute_figma
LSDimi Jun 4, 2026
f91e0f2
feat(claude-plugin): add sync-recipes generator and tests
LSDimi Jun 4, 2026
72c39ce
docs(claude-plugin): append PluginOS recipes section to skill
LSDimi Jun 4, 2026
adc8d63
feat(mcp-server): wrap list_operations response with operations + total
LSDimi Jun 4, 2026
9a86dbb
docs: stop hardcoding the operation count
LSDimi Jun 4, 2026
9749dac
style: apply prettier formatting to lint rules, prelude tests, and re…
LSDimi Jun 4, 2026
cb43a4a
chore(deps): force vitest >=4.1.8 via overrides to resolve GHSA-5xrq-…
LSDimi Jun 4, 2026
dec47d8
chore(deps): bump vitest to ^4.1.8 across all workspaces
LSDimi Jun 4, 2026
f5b8cfc
chore(deps): hoist vitest + @vitest/coverage-v8 to root devDependencies
LSDimi Jun 4, 2026
fe6a749
chore(deps): force vitest >=4.1.8 via overrides to resolve GHSA-5xrq-…
LSDimi Jun 4, 2026
35bde12
chore(deps): bump vitest to ^4.1.8 across all workspaces
LSDimi Jun 4, 2026
b05373b
chore(deps): hoist vitest + @vitest/coverage-v8 to root devDependencies
LSDimi Jun 4, 2026
63e8a8c
feat(mcp-server): add singleton types module
LSDimi Jun 4, 2026
663963e
feat(mcp-server): add lockfile primitive with stale-PID detection
LSDimi Jun 4, 2026
909eb68
feat(mcp-server): add pid-file r/w with atomic write
LSDimi Jun 4, 2026
cca8a3f
feat(mcp-server): add process takeover (SIGTERM → grace → SIGKILL)
LSDimi Jun 4, 2026
d0fcb30
feat(mcp-server): add state.json read/write helpers
LSDimi Jun 4, 2026
ea1c26e
feat(mcp-server): add singleton orchestrator (acquire + writeState + …
LSDimi Jun 4, 2026
03e1526
test(mcp-server): add two-process singleton integration test
LSDimi Jun 4, 2026
7137628
feat(mcp-server): wire singleton lock + state-file into startup
LSDimi Jun 4, 2026
a96b9d7
feat(mcp-server): add HTTP /state.json endpoint
LSDimi Jun 4, 2026
09cbd06
feat(bridge-plugin): add discovery module
LSDimi Jun 4, 2026
b6f932b
feat(bridge-plugin): use ranked discovery before port scan in connect()
LSDimi Jun 4, 2026
cd6bd01
feat(mcp-server): add wait_for_reconnect MCP tool
LSDimi Jun 4, 2026
ca945ef
docs(claude-plugin): document wait_for_reconnect in skill troubleshoo…
LSDimi Jun 4, 2026
27363df
style(mcp-server): drop unused buildStateFile import in singleton/ind…
LSDimi Jun 4, 2026
6a9c96f
style: apply prettier formatting across singleton + index.ts
LSDimi Jun 4, 2026
bee9e43
chore(deps): force vitest >=4.1.8 via overrides to resolve GHSA-5xrq-…
LSDimi Jun 4, 2026
6ddd705
chore(deps): bump vitest to ^4.1.8 across all workspaces
LSDimi Jun 4, 2026
97b7512
chore(deps): hoist vitest + @vitest/coverage-v8 to root devDependencies
LSDimi Jun 4, 2026
bbf6024
feat(bridge-plugin): use Figma CSS vars with fallback chain in tokens…
LSDimi Jun 4, 2026
66cce83
feat(bridge-plugin): add AppState type union and pure helpers
LSDimi Jun 4, 2026
10d3979
test(bridge-plugin): cover pillStateFor, pillTextFor, formatElapsed h…
LSDimi Jun 4, 2026
c4175d3
feat(bridge-plugin): add idempotent renderUI(AppState) function
LSDimi Jun 4, 2026
7cd4a3e
feat(bridge-plugin): funnel all DOM mutations through setState orches…
LSDimi Jun 4, 2026
3e6ac48
feat(bridge-plugin): bump activity log MAX_VISIBLE to 10 and refresh …
LSDimi Jun 4, 2026
628d0e9
style(bridge-plugin): replace require() with fs read + regex extract …
LSDimi Jun 4, 2026
80df189
style: apply prettier formatting to render-ui module and tests
LSDimi Jun 4, 2026
efb482d
chore(deps): force vitest >=4.1.8 via overrides to resolve GHSA-5xrq-…
LSDimi Jun 4, 2026
d6c3b6c
chore(deps): bump vitest to ^4.1.8 across all workspaces
LSDimi Jun 4, 2026
cfc310a
chore(deps): hoist vitest + @vitest/coverage-v8 to root devDependencies
LSDimi Jun 4, 2026
c7e75a9
feat(mcp-server): bundle bridge plugin into dist/bridge/ for npm tarball
LSDimi Jun 4, 2026
be9a535
feat(mcp-server): add CLI dispatcher with --help and --version
LSDimi Jun 4, 2026
dde0a40
feat(mcp-server): add installBridge with atomic copy + idempotency
LSDimi Jun 4, 2026
90512b1
feat(mcp-server): add Cursor MCP config writer with merge + clobber s…
LSDimi Jun 4, 2026
5e57904
feat(mcp-server): add generic MCP config snippet printer
LSDimi Jun 4, 2026
517fd5e
feat(mcp-server): wire --with-agent flag into runInstall
LSDimi Jun 4, 2026
d8e62fa
feat(mcp-server): route argv subcommands in bin/pluginos.js
LSDimi Jun 4, 2026
d4cbb9f
docs(install): restructure INSTALL.md per-agent with comparison table
LSDimi Jun 4, 2026
8c8d145
feat(bridge-plugin): make mismatch view actionable with copy-paste up…
LSDimi Jun 4, 2026
de4df72
style: satisfy lint, typecheck, and prettier for CLI module
LSDimi Jun 4, 2026
44af5b4
fix(mcp-server): apply Gemini review findings for PR-B helpers and li…
LSDimi Jun 5, 2026
514b7b9
fix(mcp-server): apply Gemini review findings for PR-A1 connection fo…
LSDimi Jun 5, 2026
13daba3
fix(bridge-plugin): drop .js extension from discovery import for webpack
LSDimi Jun 5, 2026
fca2ca6
fix(bridge-plugin): apply Gemini review findings for PR-A2 UI polish
LSDimi Jun 5, 2026
68890da
fix(bridge-plugin): exclude __tests__ from webpack tsc compilation
LSDimi Jun 5, 2026
4a9223b
fix: apply Gemini review findings for PR-C install polish
LSDimi Jun 5, 2026
3558b29
Merge branch 'feat/pr-b-quality-helpers' into integration/all-prs
LSDimi Jun 5, 2026
29a0bcf
Merge branch 'feat/pr-a2-bridge-ui-polish' into integration/all-prs
LSDimi Jun 5, 2026
0a3963e
Merge branch 'feat/pr-c-install-polish' into integration/all-prs
LSDimi Jun 5, 2026
00049ab
fix(mcp-server): resolve bundled bridge dir + read version from packa…
LSDimi Jun 5, 2026
4be96c6
style: prettier auto-format pass on install.ts
LSDimi Jun 5, 2026
5fa4e60
docs(handoffs): capture PR-sweep state and remaining smoke test playbook
LSDimi Jun 6, 2026
1919ab5
fix(mcp-server): rewrite bundled manifest paths to flat layout
LSDimi Jun 8, 2026
c8a4b85
docs(superpowers): consolidate sweep specs, plans, and smoke handoffs
LSDimi Jun 9, 2026
3d8814c
docs(claude-plugin): trim SKILL.md to stay under 1150-token CI budget
LSDimi Jun 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
86 changes: 52 additions & 34 deletions INSTALL.md
Original file line number Diff line number Diff line change
@@ -1,32 +1,33 @@
# Installing PluginOS

PluginOS has two halves: **the Figma plugin** (runs inside Figma) and **the MCP server** (runs alongside your agent tool). Install both — it takes about 60 seconds combined.
PluginOS has two halves: **the Figma plugin** (runs inside Figma) and **the MCP server** (runs alongside your agent tool). Install both.

---
| You're using | Install method | Time |
| ------------------ | --------------------------------------------------------- | ---- |
| Claude Desktop | [Double-click `pluginos.dxt`](#claude-desktop) | 30 s |
| Claude Code | [`/plugin marketplace add LSDimi/pluginos`](#claude-code) | 30 s |
| Cursor | [`npx pluginos install --with-agent cursor`](#cursor) | 45 s |
| Any other MCP host | [`npx pluginos install`](#any-other-mcp-host) | 60 s |

## Step 1 — Install the Figma plugin
---

1. Go to the [latest release](https://github.com/LSDimi/pluginos/releases/latest) on GitHub.
2. Download `pluginos-bridge-v<version>.zip` and unzip it anywhere on your disk.
3. In Figma Desktop, open: **Menu → Plugins → Development → Import plugin from manifest…**
4. Select the `manifest.json` inside the unzipped folder.
5. PluginOS Bridge now appears under **Plugins → Development → PluginOS Bridge**. Run it once to open the panel.
## Claude Desktop

The plugin works in any Figma file. You can keep it open while switching files.
1. Download [`pluginos.dxt`](https://github.com/LSDimi/pluginos/releases/latest) from the latest release.
2. Double-click the file. Claude Desktop opens an install dialog — confirm.
3. Restart Claude Desktop.

---
The MCP server auto-starts. To install the bridge plugin in Figma:

## Step 2 — Install the MCP server in your agent tool

Pick the path that matches your setup:
```bash
npx pluginos install
```

### Claude Desktop — recommended, one click
Then in Figma: **Plugins → Development → Import plugin from manifest** → `~/.pluginos/bridge/manifest.json`.

1. Download `pluginos.dxt` from the [latest release](https://github.com/LSDimi/pluginos/releases/latest).
2. Double-click the `.dxt` file. Claude Desktop opens an install prompt — accept it.
3. Restart Claude Desktop. The PluginOS MCP server auto-starts on launch.
---

### Claude Code
## Claude Code

Paste both commands into Claude Code:

Expand All @@ -35,39 +36,56 @@ Paste both commands into Claude Code:
/plugin install pluginos
```

The MCP server runs whenever Claude Code is open.
The MCP server registers automatically. To install the bridge plugin in Figma:

```bash
npx pluginos install
```

Then in Figma: **Plugins → Development → Import plugin from manifest** → `~/.pluginos/bridge/manifest.json`.

---

## Cursor

```bash
npx pluginos install --with-agent cursor
```

This installs the bridge plugin AND writes the MCP server entry into `~/.cursor/mcp.json` (preserving any other servers you have). Restart Cursor.

### Cursor / other MCP-compatible agents
Then in Figma: **Plugins → Development → Import plugin from manifest** → `~/.pluginos/bridge/manifest.json`.

1. Make sure Node 18+ is available (`node -v`).
2. Add this to your agent's MCP config (Cursor: **Settings → MCP Servers**, or edit `~/.cursor/mcp.json` directly):
---

## Any other MCP host

```json
{
"mcpServers": {
"pluginos": { "command": "npx", "args": ["-y", "pluginos@latest"] }
}
}
```
```bash
npx pluginos install --with-agent generic
```

3. Restart the agent. It spawns the MCP server on first use.
This installs the bridge plugin and prints the MCP config JSON for you to copy into your agent's config file. Restart your agent.

Then in Figma: **Plugins → Development → Import plugin from manifest** → `~/.pluginos/bridge/manifest.json`.

---

## Verifying the install

1. Open the PluginOS Bridge plugin in Figma. The status pill should turn green ("Connected") within a few seconds.
2. In your agent, ask: "list available pluginos operations". You should get a list of 39 operations.
2. In your agent, ask: "list available pluginos operations". You should get a list of operations and their categories.

---

## Troubleshooting

**Plugin shows "Not connected" forever.**
The MCP server isn't running. Confirm your agent tool is open (Claude Desktop, Claude Code, or Cursor) and that Step 2 above is complete. The Bridge plugin cannot start the server itself — it's sandboxed.
The MCP server isn't running. Confirm your agent tool is open and the install above is complete. The bridge plugin cannot start the server itself — it's sandboxed.

**Plugin shows "Update needed".**
Bridge plugin and MCP server are on incompatible major versions. Reinstall the latest of both (see steps above).
Bridge plugin and MCP server are on incompatible versions. Click the **Copy** button next to the update command in the plugin pane, paste it into a terminal, and re-run.

Manual equivalent: `npx pluginos@latest install` to refresh both halves.

**Port conflict — "All PluginOS ports in use".**
PluginOS scans ports 9500–9510. If all are in use, free one (`lsof -i :9500` then kill the process).
Expand All @@ -82,7 +100,7 @@ The MCP server tracks files by Figma's `fileKey`. The Bridge plugin in each file
To make PluginOS Bridge available to every designer in your org without manual install:

1. In Figma, open **Organization Settings → Plugins**.
2. Upload the contents of the unzipped `pluginos-bridge-v<version>.zip` as a private plugin.
2. Upload `~/.pluginos/bridge/` contents (or the contents of `pluginos-bridge-v<version>.zip` from GitHub releases) as a private plugin.
3. All org members see it under their Plugins menu.

The MCP server still installs per user — that's the part that runs locally next to the agent.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ The agent calls write operations to create frames, set text, and modify fills

```
Agent ── MCP (stdio) ──> PluginOS Server ── WebSocket ──> Bridge Plugin ──> Figma
5 tools thin router localhost 26 operations full API
5 tools thin router localhost many operations full API
~600 tokens routes by name ports 9500- executes locally figma.*
per turn + params only 9510 returns summaries
```
Expand Down
Loading
Loading