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
15 changes: 15 additions & 0 deletions .changeset/rename-plugin-peekdev.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
---
"@peekdev/mcp": patch
---

Rename the Claude Code plugin `peek` → `peekdev` (community-catalog
de-confliction).

The bare plugin name `peek` is already held in Anthropic's `claude-community`
marketplace by an unrelated project (gopeek.ai), and catalog entry names are
globally unique — so our plugin can only be listed under a distinct name. The
plugin is renamed in `plugins/peek/.claude-plugin/plugin.json` and the repo
marketplace entry, and this package's README "Install as a Claude Code plugin"
command is updated to `/plugin install peekdev@peek` to match. The MCP server
name (`peek`) and the tool namespace (`mcp__peek__*`) are unchanged; only the
plugin's install/skill identity moves to `peekdev`.
3 changes: 2 additions & 1 deletion .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@
"name": "peek",
"owner": { "name": "Cubenest" },
"description": "peek — local-first browser-session forensics + repro for AI coding agents.",
"renames": { "peek": "peekdev" },
"plugins": [
{
"name": "peek",
"name": "peekdev",
"source": "./plugins/peek",
"description": "Let your AI coding agent debug what already happened in your real browser — and, with per-origin consent, act in the live page. Local-first rrweb session forensics over MCP.",
"homepage": "https://peek.cubenest.in",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ If you'd rather not touch the CLI first, install peek as a Claude Code plugin:

```
/plugin marketplace add Cubenest/rrweb-stack
/plugin install peek@peek
/plugin install peekdev@peek
```

This wires up the **MCP server** (18 tools) and the peek skill in one step. You
Expand Down
13 changes: 9 additions & 4 deletions packages/docs-shared/scripts/lib/plugin-checks.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,14 @@ export function checkMarketplace(mp) {
if (!mp?.owner?.name) {
issues.push({ severity: 'error', detail: 'marketplace.json: owner.name is required' });
}
const entry = Array.isArray(mp?.plugins) ? mp.plugins.find((p) => p?.name === 'peek') : undefined;
const entry = Array.isArray(mp?.plugins)
? mp.plugins.find((p) => p?.name === 'peekdev')
: undefined;
if (!entry) {
issues.push({ severity: 'error', detail: 'marketplace.json: no plugins[] entry named "peek"' });
issues.push({
severity: 'error',
detail: 'marketplace.json: no plugins[] entry named "peekdev"',
});
} else if (entry.source !== './plugins/peek') {
issues.push({
severity: 'error',
Expand All @@ -36,10 +41,10 @@ export function checkMarketplace(mp) {
/** Validate the plugin manifest shape + discovery metadata. */
export function checkPluginManifest(pm) {
const issues = [];
if (!pm || pm.name !== 'peek') {
if (!pm || pm.name !== 'peekdev') {
issues.push({
severity: 'error',
detail: `plugin.json: name must be "peek" (got ${JSON.stringify(pm?.name)})`,
detail: `plugin.json: name must be "peekdev" (got ${JSON.stringify(pm?.name)})`,
});
}
if (typeof pm?.version !== 'string' || pm.version.length === 0) {
Expand Down
11 changes: 6 additions & 5 deletions packages/docs-shared/scripts/lib/plugin-checks.test.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,10 @@ import {
const goodMarketplace = {
name: 'peek',
owner: { name: 'Cubenest' },
plugins: [{ name: 'peek', source: './plugins/peek' }],
plugins: [{ name: 'peekdev', source: './plugins/peek' }],
};
const goodPlugin = {
name: 'peek',
name: 'peekdev',
version: '0.1.0',
description: 'x'.repeat(60),
author: { name: 'Cubenest' },
Expand All @@ -35,9 +35,10 @@ test('checkMarketplace flags a wrong marketplace name', () => {
});
test('checkMarketplace flags a missing/incorrect plugin source', () => {
assert.ok(
checkMarketplace({ ...goodMarketplace, plugins: [{ name: 'peek', source: './wrong' }] }).some(
(i) => i.severity === 'error',
),
checkMarketplace({
...goodMarketplace,
plugins: [{ name: 'peekdev', source: './wrong' }],
}).some((i) => i.severity === 'error'),
);
});
test('checkMarketplace does not throw on a malformed plugins[] element', () => {
Expand Down
2 changes: 1 addition & 1 deletion packages/peek-mcp/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ If you use Claude Code, install peek as a plugin in one step:

```
/plugin marketplace add Cubenest/rrweb-stack
/plugin install peek@peek
/plugin install peekdev@peek
```

That wires up this MCP server (18 tools) plus the peek skill. You still need the
Expand Down
2 changes: 1 addition & 1 deletion plugins/peek/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"name": "peek",
"name": "peekdev",
Comment thread
coderabbitai[bot] marked this conversation as resolved.
"version": "0.1.0",
"description": "Let your AI coding agent debug what already happened in your real browser. peek records masked rrweb sessions of your real browser to a local store and exposes them (DOM history, console/network errors, the action before an error, session-to-Playwright repro) to coding agents over MCP — and, with per-origin consent, can act in the live page (click/type/navigate). Local-first, stdio, no telemetry.",
"author": { "name": "Cubenest", "url": "https://peek.cubenest.in" },
Expand Down
2 changes: 1 addition & 1 deletion plugins/peek/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ From this repo's marketplace:

```
/plugin marketplace add Cubenest/rrweb-stack
/plugin install peek@peek
/plugin install peekdev@peek
```

Or install it from a community Claude Code plugin marketplace once listed.
Expand Down
Loading