Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
122 commits
Select commit Hold shift + click to select a range
3ded6f8
fix: reject versioned api request without projectId
sampullman Apr 27, 2026
eddf4f8
fix: set isQuery true for test bundle fetch
sampullman Apr 22, 2026
ab263a2
[PLA-12979] Highlight Advanced Props (#2669)
sarahsga Apr 28, 2026
84525ba
fix: set headers for x-plasmic-uptime-check response
sampullman Apr 16, 2026
d01849f
fix: make q reactive in canvas ctx to show preview after loading
sampullman Apr 21, 2026
ed1dc15
fix: use listeners instead of proxies for q in canvas ctx
sampullman Apr 22, 2026
15199a7
fix: simplify and refactor canvas query republish
sampullman Apr 27, 2026
f4fe920
fix: avoid stale props on every rerender
sampullman Apr 27, 2026
8424304
fix: update data context on query rename
sampullman Apr 23, 2026
34ff123
fix: reduce serverQueryTree key duplication per feedback
sampullman Apr 28, 2026
243fa54
[platform] upgrade deps (#2660)
jaslong Apr 28, 2026
f396131
fix: remove nested scroll (#2709)
sarahsga Apr 29, 2026
4dd2afb
fix(wab): update patch-package filenames to match installed versions …
jaslong Apr 29, 2026
5d3e1a5
[wab] ensure ai sdk version consistency (#2716)
jaslong Apr 29, 2026
e490ccd
upgrade-internal
Apr 29, 2026
1830140
fix(analytics): merge base event properties into server-side PostHog …
jaslong Apr 29, 2026
22d2356
[packages] upgrade deps (#2714)
jaslong Apr 29, 2026
b52d597
Publish
Apr 29, 2026
52d7049
upgrade-internal
Apr 29, 2026
d69a7fd
[wab] bump handlebars to 4.7.9 and protobufjs to 7.5.6 (#2720)
jaslong Apr 29, 2026
7879fab
[PLA-13020] Choice prop codegen when options use object form (#2718)
sarahsga Apr 30, 2026
1194acc
fix: add PATCH HEAD OPTIONS to fetch
sampullman Apr 30, 2026
f761420
fix: http header array const type
sampullman May 1, 2026
3a44ce3
Publish
May 1, 2026
963f9e4
upgrade-internal
May 1, 2026
f7a07c1
feat(loader): add loader bundle cache hit/miss metrics and logs (#2721)
jaslong May 1, 2026
611db91
fix: improve searchParams app router codegen handling
sampullman Apr 29, 2026
4a2bd43
fix: use makeAppRouterPageCtx in app router for searchParams
sampullman May 1, 2026
9e32349
test: add unit tests for searchParams await in codegen
sampullman May 2, 2026
cdf1cfb
fix(loader-tests): guard teardownNextJs against undefined ctx (#2725)
jaslong May 4, 2026
e65de67
feat: export QueryExecutionContext from data-sources
sampullman May 4, 2026
ce814e8
Publish
May 5, 2026
1b85fa9
upgrade-internal
May 5, 2026
ca56b79
[wab] serialize prefilling of loader publishment combos (#2732)
jaslong May 5, 2026
f333462
upgrade-internal
May 5, 2026
aadfc9f
[PLA-12982]: Add capability to replace root element (#2684)
asimkhan73301 May 5, 2026
8614f13
fix: pass codegen origin env to subprocess
sampullman May 5, 2026
3ad8dbc
refactor: add data-sources helper for query error rethrow
sampullman May 5, 2026
bfa0653
Publish
May 6, 2026
a848dd0
upgrade-internal
May 6, 2026
0d77163
fix: custom code fn render against dep snapshots
sampullman May 4, 2026
c131548
refactor: use new throwIfPlasmicUndefinedDataError
sampullman May 5, 2026
299cee7
fix(paste): copy/paste should retain the global variant overrides (#2…
asimkhan73301 May 7, 2026
3fa0df0
[wab] log finished/failed differently in withSpan (#2736)
jaslong May 7, 2026
c6b8861
fix: support server query execution in tanstack ssr
sampullman May 7, 2026
8a90dfb
fix: plasmic-init-client and next16 fixes
sampullman May 5, 2026
24ca94d
refactor: move comments around and clean up create-plasmic-app
sampullman May 7, 2026
60f5b7f
Publish
May 8, 2026
42e544e
upgrade-internal
May 8, 2026
1d29d04
upgrade-internal
May 8, 2026
09fb216
feat(ai): add ai root directory to the public copybara sync (#2748)
asimkhan73301 May 8, 2026
c288c33
fix: Data Picker right click opens prop row context menu (#2743)
sarahsga May 9, 2026
7385a9c
fix: cpa clean and run-cpa
sampullman May 8, 2026
03afb96
Publish
May 9, 2026
a63fcee
docs(ai-readme): improve Claude Desktop configuration setup guideline…
asimkhan73301 May 11, 2026
d142e24
chore(docker): use wab instead of postgres in plasmic-db container (#…
alex-noel May 11, 2026
7b76d45
chore(prod-cluster): Change column compression to lz4 (#2750)
daniel-schub May 11, 2026
10521fd
feat: support updating state html attrs in copilot changeElement
sampullman Apr 25, 2026
f5ce962
fix: minor attr read/insert fixes and schema description update
sampullman Apr 28, 2026
62713f0
fix: address pr review comments and improve tests
sampullman May 5, 2026
bb24cd3
fix: strip outerHTML from component export
sampullman May 5, 2026
f7de646
fix: continue excluding style from changeElement attrs
sampullman May 10, 2026
182641a
[loader-gatsby] export extractPlasmicQueryData, GatsbyPluginOptions
jaslong May 9, 2026
901ae4e
[create-plasmic-app] gatsby: emit gatsby-node that prefetches query d…
jaslong May 9, 2026
06732a2
Publish
May 13, 2026
5b93344
fix: skip setting fallback in extraction if it errors
sampullman May 7, 2026
c0db8c2
fix: warn using when fallback skipped in cmp extract
sampullman May 12, 2026
5ac560a
chore: update terragrunt and pin in tool-versions
sampullman May 13, 2026
55ed0c1
fix: hostless fetch ismutation
sampullman Apr 22, 2026
36178a5
fix: add isMutation to remaining plasmickpkgs functions
sampullman Apr 30, 2026
fdb2f0d
feat: default mutation requests to post in interactions
sampullman Apr 30, 2026
30d1cb2
feat: allow context dependent defaultValue for custom functions
sampullman May 3, 2026
abd9276
fix: ensure fetch method default not overriden
sampullman May 3, 2026
80d0713
fix: remove isMutation from cms functions
sampullman May 5, 2026
9430a62
refactor: use context for query mode defaultValue
sampullman May 6, 2026
9e86489
refactor: use existing interaction param to determine query/mutation
sampullman May 12, 2026
bfaef71
Publish
May 13, 2026
b19ac09
upgrade-internal
May 13, 2026
60d7e33
[PLA-13037]: Create component and it's variantGroup/variant (#2744)
asimkhan73301 May 13, 2026
f5e008c
[PLA-12951] Chore - update github workflow to v24 (#2613)
alex-noel May 13, 2026
4f41cf0
feat: support $ctx/$props/$state deps in queries (#2694)
jaslong May 13, 2026
59b697c
Publish
May 13, 2026
058b4ef
upgrade-internal
May 13, 2026
596294e
refactor: clean up unused/unreferenced code
sampullman May 12, 2026
a758233
[PLA-13039]: Tools to manage Style Tokens through AI (#2746)
asimkhan73301 May 14, 2026
b454a48
chore: upgrade wab esbuild
sampullman May 12, 2026
d285f4c
[PLA-13065] create plasmic app template flag does not work (#2782)
sarahsga May 15, 2026
350424a
[PLA-12931] Query builder - not all operations are implemented (#2760)
sarahsga May 15, 2026
56290f2
Publish
May 15, 2026
724a166
[PLA13067] CPA App router codegen nextjs plasmic host fails as a serv…
sarahsga May 15, 2026
1126bed
[wab] Remove app tutorial from client code (#2783)
jaslong May 16, 2026
379f43d
[wab] set server keep alive timeout higher than infra LB client timeo…
jaslong May 16, 2026
fe85dea
Publish
May 16, 2026
a683dfd
ci: print gce machine type for monitoring
sampullman May 15, 2026
e7d2b7d
fix: avoid crash when locale is empty string
sampullman May 15, 2026
24192ad
Publish
May 17, 2026
e364946
upgrade-internal
May 17, 2026
1e71bae
fix: preview for templated strings and better fallback
sampullman May 14, 2026
9fe0b2b
feat: more fallback value behavior tweaks
sampullman May 15, 2026
b0d83b2
feat: support dollar q refactor in extract component
sampullman May 13, 2026
12e264c
[wab] sample Codegen analytics events at 10% (#2805)
jaslong May 18, 2026
e84cd34
[loader-react] allow passing in $props for server query execution (#2…
jaslong May 19, 2026
14040c3
Publish
May 19, 2026
82bb79a
upgrade-internal
May 19, 2026
bf47a31
[wab] document rich-text editor shortcuts in Shortcuts modal (#2796)
jaslong May 19, 2026
0062b1f
[DEVOP-100]: Update Chrome to latest version (#2788)
daniel-schub May 19, 2026
3a3326d
[wab] fix wabToTsType target mapping to emit 'string' not 'Target' (#…
jaslong May 20, 2026
e4702f0
[PLA-13066] Add missing create-plasmic-app combinations in integratio…
sarahsga May 20, 2026
19562a0
[wab] link to Open Graph docs in page SEO settings (#2795)
jaslong May 20, 2026
1c1f91b
[wab] remove plasmic.json postSyncCommand (#2815)
jaslong May 20, 2026
b7bd861
[PLA-12835] update next version in create plasmic app (#2786)
sarahsga May 20, 2026
700ba53
Publish
May 20, 2026
5e86b3c
[data-sources] re-add executeServerQuery as a deprecated no-op (PLA-1…
jaslong May 20, 2026
af9777f
Publish
May 20, 2026
ae4bf92
upgrade-internal
May 20, 2026
024ea20
[wab] use grey color for variant artboard labels (#2797)
jaslong May 21, 2026
a4b667e
fix: data token monaco non-determinism fix (#2822)
sampullman May 21, 2026
e071e1d
fix: suppress error and disable save in custom query code edit
sampullman May 20, 2026
aee49a0
fix: address review comment about isValidQueryDraft
sampullman May 20, 2026
fbe129c
refactor: pr review comment fixes for transformDataTokensInCode and t…
sampullman May 22, 2026
7244ee9
e2e: actually fix the monaco bracket/quote close issue
sampullman May 23, 2026
6db4dab
merge: upstream (conflicts to resolve)
github-actions[bot] May 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
3 changes: 1 addition & 2 deletions .lintstagedrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,7 @@ module.exports = {

// Format HCL/Terragrunt files, but never touch generated *.lock.hcl (excluded via extglob)
"!(*lock).hcl": (files) => {
// Prefer terragrunt's formatter for *.hcl; fall back to terraform fmt if needed
return files.map((f) => `terragrunt hclfmt --file "${f}"`);
return files.map((f) => `terragrunt hcl format --file "${f}"`);
},

// Terraform files (format on commit)
Expand Down
1 change: 1 addition & 0 deletions .tool-versions
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
nodejs 24.4.0
python 3.10.13
terragrunt 1.0.4
286 changes: 286 additions & 0 deletions ai/skills/plasmic-designer/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,286 @@
# Getting Started with Plasmic AI

This guide walks you through everything you need to control your Plasmic project from an AI assistant (Claude Code, Claude Desktop, Codex, Cursor, etc.). Once set up, you can say things like _"add a hero section to the Homepage"_ and watch the AI read your project, design a section, and insert it into the canvas.

The skill works by connecting your AI assistant to Chrome via the official [chrome-devtools-mcp](https://github.com/ChromeDevTools/chrome-devtools-mcp) MCP server. See the [Chrome DevTools MCP blog post](https://developer.chrome.com/blog/chrome-devtools-mcp-debug-your-browser-session) for background on what that is.

**What you'll do in this guide:**

1. Check prerequisites
2. Install the `chrome-devtools-mcp` server into your AI tool
3. Install the `plasmic-designer` skill into your AI tool
4. Run your first command end-to-end

Each section ends with a **Verify** callout — a quick test you can run to confirm the step worked before moving on.

---

## 1. Prerequisites

Before you start, confirm you have the following:

- **Node.js 20.19 LTS or newer.** Check with:

```sh
node --version
```

If the version is older than `v20.19`, install the latest LTS from [nodejs.org](https://nodejs.org/) or via [nvm](https://github.com/nvm-sh/nvm).

- **Google Chrome** (current stable, or Chrome for Testing).

- **A Plasmic account** and a project open at [studio.plasmic.app](https://studio.plasmic.app). You'll need your **Project ID** — it's the string after `/projects/` in your Plasmic URL. For example, in `https://studio.plasmic.app/projects/j2Bm3mrbGNKsXVW3Wf5KpP` the project ID is `j2Bm3mrbGNKsXVW3Wf5KpP`.

- **An AI assistant that supports MCP.** This guide covers:
- **CLIs**: Claude Code, Codex, Cursor, Opencode
- **GUI**: Claude Desktop

---

## 2. Install `chrome-devtools-mcp`

Pick **one** of the two tracks below, matching the tool you use.

### 2A. For Agentic CLIs (Claude Code, Codex, Cursor, Opencode)

If you're already comfortable with MCP configuration, this is a one-liner.

**Claude Code**:

```sh
claude mcp add chrome-devtools -- npx chrome-devtools-mcp@latest --no-usage-statistics
```

Alternatively, add the following to your project's `.claude/.mcp.json` or your user-global `~/.claude/.mcp.json`:

```json
{
"mcpServers": {
"chrome-devtools": {
"type": "stdio",
"command": "npx",
"args": ["chrome-devtools-mcp@latest", "--no-usage-statistics"]
}
}
}
```

**Cursor**: uses the same `mcpServers` JSON shape. Paste the snippet above into your Cursor MCP config (see [Cursor's MCP docs](https://cursor.com/docs/mcp)).

**Codex**: uses TOML, not JSON. Add the following to `~/.codex/config.toml` (see [Codex MCP docs](https://developers.openai.com/codex/mcp)):

```toml
[mcp_servers.chrome-devtools]
command = "npx"
args = ["chrome-devtools-mcp@latest", "--no-usage-statistics"]
```

**OpenCode**: uses a top-level `mcp` block in `opencode.json` (see [OpenCode MCP docs](https://opencode.ai/docs/mcp-servers/)):

```json
{
"mcp": {
"chrome-devtools": {
"type": "local",
"command": ["npx", "chrome-devtools-mcp@latest", "--no-usage-statistics"],
"enabled": true
}
}
}
```

> **Verify.** In your CLI, run `/mcp` (Claude Code) or ask _"list the MCP tools that are available"_. You should see tools beginning with `mcp__chrome-devtools__*` (e.g. `mcp__chrome-devtools__navigate_page`, `mcp__chrome-devtools__evaluate_script`).

Skip ahead to [Section 3](#3-install-the-plasmic-designer-skill).

### 2B. For Claude Desktop

Claude Desktop requires a bit more care because it runs MCP servers as subprocesses that don't inherit your shell's `PATH`. Follow these steps in order.

#### Step 1 — Locate the config file

On macOS, the config lives at `~/Library/Application Support/Claude/claude_desktop_config.json`. The fastest way to open it:

```sh
open -a TextEdit "$HOME/Library/Application Support/Claude/claude_desktop_config.json"
```

If the file doesn't exist yet, create it with an empty object `{}` inside.

#### Step 2 — Find your absolute `npx` path

Claude Desktop can't use a bare `"npx"` in the config — it needs the full path to the binary because MCP subprocesses don't inherit your shell's `PATH`. In Terminal:

```sh
which npx
```

Example outputs, depending on how you installed Node:

```
/Users/you/.asdf/installs/nodejs/22.18.0/bin/npx
/Users/you/.nvm/versions/node/v22.11.0/bin/npx
/opt/homebrew/bin/npx
```

Keep that path handy — you'll paste it into the config in Step 3, and use the directory it's in for `env.PATH`.

#### Step 3 — Add the MCP configuration

Open `claude_desktop_config.json`. The file may be empty (`{}`) or it may already have content in it (such as a `"preferences"` block). Either way, you're going to **add a new top-level key called `"mcpServers"`** alongside whatever already exists — keep the existing content as-is.

Before (your file might look like either of these — or something similar):

**Empty file**

```json
{}
```

**Existing config**

```json
{
"preferences": {
"quickEntryDictationShortcut": "capslock",
"sidebarMode": "chat"
}
}
```

You should add the `"mcpServers"` key as a sibling of any existing keys (using _your_ `npx` path from Step 2):

```json
{
"preferences": {
"quickEntryDictationShortcut": "capslock",
"sidebarMode": "chat"
},
"mcpServers": {
"chrome-devtools": {
"command": "/Users/you/.asdf/installs/nodejs/22.18.0/bin/npx",
"args": ["chrome-devtools-mcp@latest", "--no-usage-statistics"],
"env": {
"PATH": "/Users/you/.asdf/installs/nodejs/22.18.0/bin:/usr/local/bin:/opt/homebrew/bin:/usr/bin:/bin:/usr/sbin:/sbin"
}
}
}
}
```

What each part does:

- `command` — absolute path to the `npx` binary. Required because Claude Desktop doesn't search your shell `$PATH`.
- `args[0]` — the package to run (`chrome-devtools-mcp@latest`).
- `--no-usage-statistics` — opts out of anonymous usage reporting.
- `env.PATH` — prepended with the node/npx directory, followed by typical system paths, so the MCP subprocess can find Chrome, git, and other system binaries it may need. Adjust the leading directory to match _your_ `npx` install path.

Save the file.

#### Step 4 — Fully restart Claude Desktop

Quit Claude Desktop from the menu bar (**Claude → Quit Claude**). Closing the window isn't enough. Then open it again.

> **Verify.** In Claude Desktop, open **Settings → Developer → Local MCP servers**. You should see a `chrome-devtools` entry with a blue **running** badge next to its name. The panel also shows the resolved `Command` and `Arguments` — confirm they match what you pasted. If the badge shows an error instead of **running**, click **View Logs** (or see the troubleshooting notes below).

#### Claude Desktop troubleshooting

| Symptom | Fix |
| ------------------------------------------ | ----------------------------------------------------------------------------------------------------------------- |
| `spawn npx ENOENT` | The `command` path is wrong. Re-run `which npx` and paste the exact output into `command`. |
| `Cannot find module 'chrome-devtools-mcp'` | Run `npx chrome-devtools-mcp@latest --help` in Terminal once to prime the npm cache, then restart Claude Desktop. |
| MCP server keeps dying | Check `~/Library/Logs/Claude/mcp*.log` (macOS). The log usually pinpoints the error. |
| Node version error | You're on Node < 20.19. Upgrade via [nvm](https://github.com/nvm-sh/nvm) or [brew](https://brew.sh). |

If you're stuck, paste your config and the MCP log into Claude itself and ask for help — it can usually diagnose the issue.

---

## 3. Install the Plasmic Designer Skill

### 3A. For Agentic CLIs

Skills live in a conventional directory your CLI already looks at:

- **Claude Code** (per-project): `<your-project>/.claude/skills/plasmic-designer/`
- **Claude Code** (user-global, available everywhere): `~/.claude/skills/plasmic-designer/`
- **Codex / Opencode / Cursor**: see each tool's skills documentation.

Copy the skill folder:

```sh
# User-global install (available from any project)
mkdir -p ~/.claude/skills
cp -r path/to/plasmic-designer ~/.claude/skills/
```

The destination folder should contain:

```
plasmic-designer/
├── SKILL.md
├── README.md
└── references/
├── design-guidelines.md
└── html-constraints.md
```

No other setup is needed — the CLI discovers skills automatically on start.

> **Verify.** In your CLI, type `/plasmic-designer` (Claude Code) or ask _"what skills are available?"_. The `plasmic-designer` skill should appear in the list.

### 3B. For Claude Desktop

Claude Desktop supports custom skills via a ZIP upload. Your skill must be a ZIP file containing a folder with `SKILL.md` directly inside it. **The folder name must match the skill name** (`plasmic-designer`).

1. Zip the `plasmic-designer` directory. From `ai/skills/` (the parent of `plasmic-designer/`), run:

```sh
zip -r plasmic-designer.zip plasmic-designer
```

2. In the desktop app, go to **Customize → Skills**.
3. Click the **+** button, then choose **+ Create skill**.
4. Select **Upload a skill**.
5. Choose your `plasmic-designer.zip` file and upload it.
6. The skill appears in your list — toggle it on to activate it.

> **Verify.** In Claude Desktop, start a new chat and ask _"what skills are available?"_. The `plasmic-designer` skill should appear in the list.

---

## 4. First Use — End-to-End Walkthrough

Let's design something.

1. In your AI assistant, type:

```
/plasmic-designer <YOUR_PROJECT_ID> Add a hero section to the Homepage page
```

Replace `<YOUR_PROJECT_ID>` with your real project ID. In Claude Desktop, drop the `/plasmic-designer` prefix — start a new chat with the uploaded `plasmic-designer` skill toggled on and describe the task, including the project ID.

2. The first tool call triggers an MCP permission prompt — _"Allow chrome-devtools to navigate_page?"_. Click **Allow**, and optionally **Always allow** so it doesn't ask again for this session.

3. `chrome-devtools-mcp` launches a fresh Chrome window using its own dedicated profile. **The first time you run the skill, sign into Plasmic in that Chrome window** — the profile persists across runs, so you only need to do this once.

4. Once you're signed in, ask the assistant to retry. It will navigate to your project, wait for the studio to load, read the component tree, and insert a new hero section. The Plasmic canvas updates live.

5. Changes are normal Plasmic operations — hit **⌘Z** / **Ctrl+Z** inside Plasmic Studio to undo anything you don't like.

---

## 5. Troubleshooting

| Symptom | Likely cause | Fix |
| ----------------------------------- | ----------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ |
| `PLASMIC_AI_TOOLS is undefined` | Studio hasn't finished loading, or the page isn't a Plasmic project URL | Wait a few seconds and retry. Confirm the URL is `studio.plasmic.app/projects/<id>/`. |
| Assistant lands on the login page | Plasmic session expired or you haven't signed in yet in the MCP Chrome | Sign into Plasmic in the Chrome window that `chrome-devtools-mcp` opened, then ask the assistant to retry. |
| `spawn npx ENOENT` (Claude Desktop) | `PATH` is missing from the MCP subprocess | Use absolute paths for `command`, add `env.PATH` (see [Section 2B, Step 3](#step-3--paste-the-mcp-configuration)). |
| Node version error | Node < 20.19 | Upgrade Node. |
| Skill not listed in CLI | Wrong directory, or folder doesn't contain `SKILL.md` | Confirm `~/.claude/skills/plasmic-designer/SKILL.md` exists. |

---

Feedback, bug reports, and feature requests: reach out in the [Plasmic community Slack](https://plasmic.app/slack) or on the [Plasmic forum](https://forum.plasmic.app/).
Loading