Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
6 changes: 3 additions & 3 deletions .claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
{
"name": "display-dev",
"displayName": "Display",
"description": "Publish, browse, search, read, edit, and share HTML or Markdown artifacts with public, private, or company-authenticated access. Includes Visualize Lite for on-brand HTML pages, the display.dev MCP server, /display-dev:feedback for reviewer comments, a secret scan before publishes, and a session-start note about new comments.",
"version": "0.12.0",
"description": "Publish, browse, search, read, edit, and share HTML or Markdown artifacts with public, private, or company-authenticated access. Includes Visualize for on-brand HTML pages, the display.dev MCP server, /display-dev:feedback for reviewer comments, a secret scan before publishes, and a session-start note about new comments.",
"version": "0.13.0",
"author": {
"name": "display.dev",
"url": "https://display.dev"
Expand All @@ -19,7 +19,7 @@
"type": "http",
"url": "https://api.display.dev/v1/mcp",
"headers": {
"X-Client-Source": "display-dev-claude-plugin@0.12.0"
"X-Client-Source": "display-dev-claude-plugin@0.13.0"
}
}
}
Expand Down
10 changes: 6 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
Publish HTML or Markdown from Claude to [display.dev](https://display.dev), choose who can view it, and act on reviewer comments. One install gives Claude:

- the **display.dev skill**: publish, browse, search, read, edit, copy, and share artifacts with public, private, or company access;
- **Visualize Lite**: on-brand HTML reports, plans, diagrams, decks, and dashboards, with 103 reference design systems loaded when you pick one;
- **Visualize**: create, explore, refine, and review on-brand HTML reports, plans, diagrams, decks, and dashboards; reference design systems load when selected;
- the **display.dev MCP server** (`https://api.display.dev/v1/mcp`);
- **`/display-dev:feedback`**: lists your artifacts with open comments, shows a plan for each thread, and after you approve it, edits the artifact, replies, and resolves the threads. With no comments, it offers to ask a reviewer or to wait for comments;
- a **publish guard** hook that scans a publish for secrets (API keys, tokens, private keys). It blocks a public publish and asks before any other publish;
Expand All @@ -29,15 +29,15 @@ The hooks run in Claude Code and in Cowork on your own computer. The comment not
| Part | Runs | Sends or fetches | Stores |
|---|---|---|---|
| display.dev skill | The bundled helper scripts, the installed `dsp` CLI, and a bundled `jq` binary for JSON | Requests to `api.display.dev` for the actions you ask for. An anonymous publish sends the file to `https://api.display.dev/v1/public/artifacts`. | Nothing. `dsp` keeps its own sign-in. |
| Visualize Lite | The bundled scripts (Node) for palette, contrast, diagram, and image checks | When you choose a design system that is not bundled, its `README.md`, `DESIGN.md`, and `tokens.css` from `raw.githubusercontent.com/display-dev/visualize` at the pinned commit (see `skills/visualize-lite/design-systems/REMOTE.md`). Image generation calls only the provider you configure. | The artifacts you ask it to create, in your project |
| Visualize | The bundled scripts (Node) for catalog retrieval, palette, contrast, diagram, and image checks | Selected reference files from `raw.githubusercontent.com/display-dev/visualize` at the immutable catalog revision in `skills/visualize/design-systems/catalog-source.json`. Clean is bundled; previews are fetched only when requested. Image generation calls only the provider you configure. | Created artifacts in your project; downloaded reference files in `~/.cache/visualize-skill/catalog` by default (`VISUALIZE_CATALOG_CACHE_DIR` can relocate it). Uninstalling the plugin does not remove this cache. |
| MCP server | Nothing on your machine | Tool calls to `https://api.display.dev/v1/mcp` after you sign in with OAuth, with the header `X-Client-Source: display-dev-claude-plugin@<version>` | Nothing |
| Publish guard hook | `hooks/publish-guard.sh` before each Bash command and each display.dev `publish` tool call | Nothing. It reads only the files named in a publish command, or the `content` of an MCP publish, and checks them for secrets on your machine. | Nothing |
| Comment note hook | `hooks/comment-digest.sh` at session start, only when `dsp` is installed | One request through `dsp` to `api.display.dev`: your 100 most recently updated artifacts with their names and open-thread counts. It never fetches comment text. | The open-thread count and name of each of your artifacts with open threads, in Claude Code's plugin data folder (`open-thread-counts.json`) |
| `/display-dev:feedback` | `dsp` commands or MCP tool calls | Reads the metadata, open comments, and source of the artifact you choose. After you approve the plan, publishes the new version and posts replies and resolves to `api.display.dev`. | A temporary copy of the artifact source while it edits |

## Maintaining

`skills/display-dev/` is a copy of a pinned commit of [display-dev/skill](https://github.com/display-dev/skill), and `skills/visualize-lite/` of the [Visualize Lite](https://github.com/display-dev/visualize#visualize-lite) build in display-dev/visualize. Never edit them here. Change a skill in its own repository, then update `sources.lock` and run:
`skills/display-dev/` is a copy of a pinned commit of [display-dev/skill](https://github.com/display-dev/skill), and `skills/visualize/` of the [canonical Visualize skill](https://github.com/display-dev/visualize/tree/main/skills/visualize). Never edit them here. Change a skill in its own repository, then update `sources.lock` and run:

```sh
tools/sync.sh # copy the pinned skills into skills/
Expand All @@ -47,7 +47,9 @@ bash tests/hooks.sh # offline hook tests

Raise `version` in `.claude-plugin/plugin.json` with every release, together with the `X-Client-Source` suffix there and in `commands/feedback.md`. CI checks that they match.

Visualize Lite is the trimmed, standalone build of Visualize (about 130 files), which keeps this plugin small enough for directory validation. It is generated in display-dev/visualize, so change it there, not here. It downloads a design system that is not bundled from that repository at the matching release tag.
Visualize is copied unchanged from its single authored skill directory. It bundles the catalog index and Clean fallback; `scripts/catalog.mjs` retrieves other selected references from the separately pinned catalog revision and caches them locally. The Visualize source pin in `sources.lock` and its catalog revision serve different purposes; neither follows a moving branch at runtime.

The bundled skill is now named `visualize` (previously `visualize-lite`). In Claude Code, use `/display-dev:visualize` in place of `/display-dev:visualize-lite`.

Display's privacy policy: https://display.dev/privacy

Expand Down
22 changes: 11 additions & 11 deletions commands/feedback.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ argument is optional: `$ARGUMENTS`
Use one display.dev tool path for the whole task:

1. If a shell is available and `dsp` is on PATH, use the CLI. Add
`--client-source display-dev-claude-plugin@0.12.0` to every `dsp` command.
`--client-source display-dev-claude-plugin@0.13.0` to every `dsp` command.
Prefix every command that changes state (`publish`, `edit`, `share`,
`comment add`, `thread resolve`) with
`DISPLAYDEV_ACTOR_TYPE=agent DISPLAYDEV_ACTOR_NAME=claude-code`, so the
Expand All @@ -39,7 +39,7 @@ Use one display.dev tool path for the whole task:
List the user's artifacts that have open comments:

```bash
dsp list --client-source display-dev-claude-plugin@0.12.0 --author me --sort updated_at --dir desc --limit 100 --json
dsp list --client-source display-dev-claude-plugin@0.13.0 --author me --sort updated_at --dir desc --limit 100 --json
```

(MCP: `list` with `author: ["me"]`, `sort: "updated_at"`, `limit: 100`.)
Expand All @@ -57,8 +57,8 @@ updated artifacts has open comments, and stop.
before the first hyphen: `https://display.dsp.so/abc12345-q3-plan` →
`abc12345`.
2. Read the metadata and the open threads:
`dsp get-metadata --client-source display-dev-claude-plugin@0.12.0 <shortId>` and
`dsp comment --client-source display-dev-claude-plugin@0.12.0 list --artifact <shortId> --status open`
`dsp get-metadata --client-source display-dev-claude-plugin@0.13.0 <shortId>` and
`dsp comment --client-source display-dev-claude-plugin@0.13.0 list --artifact <shortId> --status open`
(MCP: `get_metadata`, `list_comments`). Note the current version.
3. Sort each open thread into one group:
- **Change request**: a change to the artifact's content.
Expand All @@ -77,19 +77,19 @@ updated artifacts has open comments, and stop.
5. Make the approved changes as one new version:
- If the artifact was published from a file in this workspace and the
user confirms that file, edit it and publish it:
`DISPLAYDEV_ACTOR_TYPE=agent DISPLAYDEV_ACTOR_NAME=claude-code dsp publish --client-source display-dev-claude-plugin@0.12.0 <path> --id <shortId> --base-version <version>`.
`DISPLAYDEV_ACTOR_TYPE=agent DISPLAYDEV_ACTOR_NAME=claude-code dsp publish --client-source display-dev-claude-plugin@0.13.0 <path> --id <shortId> --base-version <version>`.
- Otherwise export the current version
(`dsp export --client-source display-dev-claude-plugin@0.12.0 <shortId>@<version> > <tmp file>`), edit the copy, and
(`dsp export --client-source display-dev-claude-plugin@0.13.0 <shortId>@<version> > <tmp file>`), edit the copy, and
publish it the same way. With MCP, edit the content you read and call
`publish` with `short_id` and `base_version`.
- For one small change,
`DISPLAYDEV_ACTOR_TYPE=agent DISPLAYDEV_ACTOR_NAME=claude-code dsp edit --client-source display-dev-claude-plugin@0.12.0 <shortId> --base-version <version> --old <text> --new <text>`
`DISPLAYDEV_ACTOR_TYPE=agent DISPLAYDEV_ACTOR_NAME=claude-code dsp edit --client-source display-dev-claude-plugin@0.13.0 <shortId> --base-version <version> --old <text> --new <text>`
(MCP: `edit`) is also fine.
6. Close the threads:
- Applied change: reply with one line, for example "Changed in v7: the
churn figure now uses Q3 data.", then resolve the thread
(`DISPLAYDEV_ACTOR_TYPE=agent DISPLAYDEV_ACTOR_NAME=claude-code dsp comment --client-source display-dev-claude-plugin@0.12.0 add --artifact <shortId> --parent <rootCommentId> --body <text>`,
`DISPLAYDEV_ACTOR_TYPE=agent DISPLAYDEV_ACTOR_NAME=claude-code dsp thread --client-source display-dev-claude-plugin@0.12.0 resolve <rootCommentId>`; MCP: `add_comment`,
(`DISPLAYDEV_ACTOR_TYPE=agent DISPLAYDEV_ACTOR_NAME=claude-code dsp comment --client-source display-dev-claude-plugin@0.13.0 add --artifact <shortId> --parent <rootCommentId> --body <text>`,
`DISPLAYDEV_ACTOR_TYPE=agent DISPLAYDEV_ACTOR_NAME=claude-code dsp thread --client-source display-dev-claude-plugin@0.13.0 resolve <rootCommentId>`; MCP: `add_comment`,
`resolve_thread`).
- Question: reply with the answer and leave the thread open for the
person who asked.
Expand All @@ -103,10 +103,10 @@ Say so, then offer:

- **Ask someone to review it**: ask for the reviewer's email address, then
share the artifact with them
(`DISPLAYDEV_ACTOR_TYPE=agent DISPLAYDEV_ACTOR_NAME=claude-code dsp share --client-source display-dev-claude-plugin@0.12.0 <shortId> --add-users <email>`; MCP: `share`). Do not change
(`DISPLAYDEV_ACTOR_TYPE=agent DISPLAYDEV_ACTOR_NAME=claude-code dsp share --client-source display-dev-claude-plugin@0.13.0 <shortId> --add-users <email>`; MCP: `share`). Do not change
the artifact's visibility.
- **Wait for comments**: available only with a shell. Poll
`dsp comment --client-source display-dev-claude-plugin@0.12.0 list --artifact <shortId> --status open --since <start time>`
`dsp comment --client-source display-dev-claude-plugin@0.13.0 list --artifact <shortId> --status open --since <start time>`
every 60 seconds in the background. When a comment arrives, continue with
B. Stop after the time the user gives, or after 60 minutes.
- **Nothing for now**: stop.
Loading
Loading