From f3effed1cd6e3ed03b5828c20a2434e713e07c2f Mon Sep 17 00:00:00 2001 From: Maksim Kachurin Date: Fri, 28 Aug 2026 11:47:36 -0300 Subject: [PATCH 1/3] feat(moods): distinct voices, rename Hype to Founder --- README.md | 136 +++++++++--------- marketplace.json | 4 +- .../bro-mode/.reforma-plugin/plugin.json | 2 +- marketplace/moods/bro-mode/assets/logo.svg | 10 +- marketplace/moods/bro-mode/rules/bro.md | 26 +++- .../caveman-mode/.reforma-plugin/plugin.json | 2 +- .../moods/caveman-mode/rules/caveman.md | 10 +- .../moods/founder/.reforma-plugin/plugin.json | 9 ++ .../{hype-man => founder}/assets/logo.svg | 0 .../hype.md => founder/rules/founder.md} | 10 +- .../hype-man/.reforma-plugin/plugin.json | 9 -- .../professor/.reforma-plugin/plugin.json | 2 +- .../moods/professor/rules/professor.md | 18 +-- .../moods/ship-it/.reforma-plugin/plugin.json | 2 +- marketplace/moods/ship-it/rules/ship-it.md | 6 +- marketplace/moods/zen-mode/rules/zen.md | 14 +- 16 files changed, 140 insertions(+), 120 deletions(-) create mode 100644 marketplace/moods/founder/.reforma-plugin/plugin.json rename marketplace/moods/{hype-man => founder}/assets/logo.svg (100%) rename marketplace/moods/{hype-man/rules/hype.md => founder/rules/founder.md} (50%) delete mode 100644 marketplace/moods/hype-man/.reforma-plugin/plugin.json diff --git a/README.md b/README.md index 4461eb6..71bc065 100644 --- a/README.md +++ b/README.md @@ -4,74 +4,74 @@ Marketplace plugins for Reforma. Each plugin is a folder with `.reforma-plugin/p ## Plugins -| name | Plugin | Author | Category | description | -| --------------------- | ------------------------------------------------------------------------ | ------------- | ---------- | --------------------------------------------------------------------------------------------------------- | -| bro-mode | [Bro Mode](marketplace/moods/bro-mode) | Reforma | Moods | Talk like their brother and best friend — relaxed, blunt, and not afraid to push back | -| zen-mode | [Zen Mode](marketplace/moods/zen-mode) | Reforma | Moods | Quiet. Do the work. No status talk — just the outcome. | -| ship-it | [Ship It](marketplace/moods/ship-it) | Reforma | Moods | Bias to the smallest shippable change — stop polishing, start merging | -| professor | [Professor](marketplace/moods/professor) | Reforma | Moods | Grill first — research, ask, settle the tree — then build. | -| hype-man | [Hype Man](marketplace/moods/hype-man) | Reforma | Moods | Yes-and founder. Picks the call, ships it, doesn't interview. If it flops, delete it. | -| caveman-mode | [Caveman](marketplace/moods/caveman-mode) | Reforma | Moods | Talk like a caveman. Joke voice — smash the work, then turn it off. | -| react-best-practices | [React Best Practices](marketplace/playbooks/react-best-practices) | Vercel | Playbooks | Keep the app fast — React and Next.js performance patterns | -| web-design-guidelines | [Web Design Guidelines](marketplace/playbooks/web-design-guidelines) | Vercel | Playbooks | Catch accessibility, form, and focus issues before they ship | -| frontend-design | [Frontend Design](marketplace/playbooks/frontend-design) | Anthropic | Playbooks | A look that is not a template — palette, type, and layout with a point of view | -| shadcn-tailwind | [shadcn / Tailwind](marketplace/system/shadcn-tailwind) | shadcn | System | The UI kit the project is built on — components, forms, and Tailwind | -| fonts | [Fonts](marketplace/system/fonts) | Reforma | System | Google Fonts and custom typefaces for the project | -| nextjs | [Next.js](marketplace/system/nextjs) | Reforma | System | Next.js App Router — routing, layouts, and the conventions the project follows | -| coss | [coss](marketplace/ui/coss) | coss | UI | Extra components and particle effects beyond the default shadcn set | -| flexnative | [Flexnative](marketplace/ui/flexnative) | Flexnative | UI | Ready-made page blocks and patterns — drop in a section instead of assembling it | -| magic-ui | [Magic UI](marketplace/ui/magic-ui) | Magic UI | UI | Animated marketing pieces — shine, marquee, shimmer, and that kind of polish | -| tailark | [Tailark](marketplace/ui/tailark) | Tailark | UI | Marketing landing blocks and pages — heroes, pricing, footers | -| aceternity | [Aceternity](marketplace/ui/aceternity) | Aceternity | UI | Motion-heavy blocks and visual effects for landing pages | -| 21st | [21st](marketplace/ui/21st) | 21st | UI | A living library of React components, templates, and themes. Add them to the project, or generate new UI. | -| i18n | [i18n](marketplace/ui/i18n) | Reforma | UI | Multiple languages — translated copy and a language switcher for the app | -| svg | [SVG](marketplace/ui/svg) | Reforma | UI | Logos, favicons, and inline SVG. Icons stay on Lucide or the project’s pack. | -| context7 | [Context7](marketplace/workspace/context7) | Reforma | Workspace | Current docs and examples for the libraries in the project | -| google-drive | [Google Drive](marketplace/files/google-drive) | Reforma | Files | Docs and files in Google Drive — find them, upload drafts, share from the project | -| notion-workspace | [Notion](https://github.com/makenotion/cursor-notion-plugin) | Notion Labs | Workspace | The team’s Notion — notes, pages, and databases in the project | -| linear | [Linear](https://github.com/linear/cursor-plugin) | Linear | Workspace | The issue tracker — bugs, projects, and docs from Linear | -| dropbox | [Dropbox](https://github.com/dropbox/dropbox-ai-plugins/tree/main/codex) | Dropbox | Files | Files in Dropbox — save, share, and pull them into the project | -| cloudinary | [Cloudinary](marketplace/files/cloudinary) | Cloudinary | Files | Images and video in the cloud — upload, transform, and deliver them | -| slack | [Slack](marketplace/workspace/slack) | Slack | Workspace | The team’s Slack — channels, threads, and posts from the project | -| github-mcp | [GitHub](marketplace/workspace/github-mcp) | GitHub | Workspace | GitHub in the project — issues, pull requests, and the repo | -| clerk | [Clerk](marketplace/auth/clerk) | Clerk | Auth | Drop-in auth — sign-in, organizations, and user accounts for the app | -| supabase | [Supabase](https://github.com/supabase-community/supabase-plugin) | Supabase | Backend | Backend for the app — database, auth, and file storage | -| stripe | [Stripe](https://github.com/stripe/ai/tree/main/providers/cursor/plugin) | Stripe | Payments | Accept payments, manage customers, and handle subscriptions | -| higgsfield | [Higgsfield](https://github.com/higgsfield-ai/cursor-plugin) | Higgsfield AI | Media | AI images and video from one studio | -| quiver | [Quiver](https://github.com/quiverai/cursor-plugin) | QuiverAI | Media | Generate SVG and turn pictures into clean vectors | -| svgator | [SVGator](marketplace/media/svgator) | SVGator | Media | Animated SVG — design the motion and export it into the project | -| lottiefiles | [LottieFiles](marketplace/media/lottiefiles) | LottieFiles | Media | Lightweight motion for the app — Lottie animations you can browse and drop in | -| recraft | [Recraft](marketplace/media/recraft) | Recraft | Media | Generate and edit images with Recraft’s design models | -| replicate | [Replicate](marketplace/media/replicate) | Replicate | Media | Image, video, and audio models — pick one, get the file | -| heygen | [HeyGen](marketplace/media/heygen) | HeyGen | Media | Talking-head videos from a script and an avatar | -| fal | [fal](marketplace/media/fal) | fal | Media | Generate images, video, and audio from a wide set of models | -| elevenlabs | [ElevenLabs](marketplace/media/elevenlabs) | ElevenLabs | Media | Voice for the app — generate speech and pick the voice | -| sentry | [Sentry](https://github.com/getsentry/plugin-cursor) | Sentry | Analytics | See crashes and traces from the live app, then fix them | -| gsap | [GSAP](https://github.com/greensock/gsap-skills) | GreenSock | UI | Timeline animation, scroll effects, and motion — the GSAP toolkit | -| motion | [Motion](https://github.com/motiondivision/cursor-plugin) | Motion | UI | Animation for the web — springs, gestures, and layout motion | -| remotion | [Remotion](https://github.com/remotion-dev/cursor-plugin) | Remotion | UI | Videos and motion graphics, written in React | -| game-creator | [Game Creator](marketplace/games/game-creator) | OpusGameLabs | Games | Browser games — 2D with Phaser, 3D with Three.js | -| firebase | [Firebase](https://github.com/firebase/agent-skills) | Firebase | Backend | Google’s backend — auth, database, and hosting | -| convex | [Convex](https://github.com/get-convex/convex-agent-plugins) | Convex | Backend | A live backend — the database updates the UI as data changes | -| neon | [Neon](marketplace/backend/neon) | Neon | Backend | Serverless Postgres — databases, branches, and SQL without running a server | -| appwrite | [Appwrite](https://github.com/appwrite/cursor-plugin) | Appwrite | Backend | An open-source backend — auth, database, and storage | -| prisma | [Prisma](https://github.com/prisma/cursor-plugin) | Prisma | Backend | Talk to the database — schema, migrations, and queries in TypeScript | -| auth0 | [Auth0](marketplace/auth/auth0) | Auth0 | Auth | Sign-in and user accounts, including social login and enterprise identity | -| workos | [WorkOS](marketplace/auth/workos) | WorkOS | Auth | SSO and user management for B2B apps — enterprise sign-in without building it | -| shopify | [Shopify](marketplace/payments/shopify) | Shopify | Payments | The store in the app — products, orders, and shop data | -| resend | [Resend](https://github.com/resend/resend-skills) | Resend | Messaging | Send email from the app — transactional mail and templates | -| cal-com | [Cal.com](marketplace/scheduling/cal-com) | Cal.com | Scheduling | Let people book time — event types and a scheduler in the app | -| calendly | [Calendly](marketplace/scheduling/calendly) | Calendly | Scheduling | Scheduling links and a Calendly embed so people book themselves | -| booking | [Booking](marketplace/scheduling/booking) | Reforma | Scheduling | Book a call, pick a slot, or show an event calendar — no third-party account | -| figma | [Figma](marketplace/design/figma) | Figma | Design | Turn Figma frames into code for the project | -| google-maps | [Google Maps](marketplace/maps/google-maps) | Google | Maps | Maps in the app — places, routes, and what’s nearby | -| mapbox | [Mapbox](https://github.com/mapbox/mapbox-agent-skills) | Mapbox | Maps | Custom maps — your style, search, and location in the app | -| posthog | [PostHog](marketplace/analytics/posthog) | PostHog | Analytics | Product analytics — events, funnels, and session replay | -| amplitude | [Amplitude](marketplace/analytics/amplitude) | Amplitude | Analytics | Product analytics — events and charts so you see what people do | -| sanity | [Sanity](marketplace/cms/sanity) | Sanity | CMS | Structured content editors can change and the app can render | -| zapier | [Zapier](marketplace/automation/zapier) | Zapier | Automation | Connect the app to thousands of other tools without writing each integration | -| composio | [Composio](marketplace/automation/composio) | Composio | Automation | A hub of app connections — Gmail, Notion, Slack, and the rest of the stack | -| make | [Make](marketplace/automation/make) | Make | Automation | Visual automations from Make — run scenarios and use the results in the app | +| name | Plugin | Author | Category | description | +| --------------------- | ------------------------------------------------------------------------ | ------------- | ---------- | ----------------------------------------------------------------------------------------------------------------------- | +| bro-mode | [Bro Mode](marketplace/moods/bro-mode) | Reforma | Moods | Turns the agent into a brutally honest bestie who knows the craft, calls out bad ideas, and ships better ones with you. | +| zen-mode | [Zen Mode](marketplace/moods/zen-mode) | Reforma | Moods | Quiet. Do the work. No status talk — just the outcome. | +| ship-it | [Ship It](marketplace/moods/ship-it) | Reforma | Moods | Cuts scope, kills gold-plating, and gets the smallest working change merged. | +| professor | [Professor](marketplace/moods/professor) | Reforma | Moods | Grills the problem first — researches, challenges assumptions, settles every major fork with you — then builds. | +| founder | [Founder](marketplace/moods/founder) | Reforma | Moods | Rough idea in, MVP out. Picks product, UX, and copy — no workshop. If it flops, it gets deleted. | +| caveman-mode | [Caveman](marketplace/moods/caveman-mode) | Reforma | Moods | Chat like a caveman — savage mouth, real work. | +| react-best-practices | [React Best Practices](marketplace/playbooks/react-best-practices) | Vercel | Playbooks | Keep the app fast — React and Next.js performance patterns | +| web-design-guidelines | [Web Design Guidelines](marketplace/playbooks/web-design-guidelines) | Vercel | Playbooks | Catch accessibility, form, and focus issues before they ship | +| frontend-design | [Frontend Design](marketplace/playbooks/frontend-design) | Anthropic | Playbooks | A look that is not a template — palette, type, and layout with a point of view | +| shadcn-tailwind | [shadcn / Tailwind](marketplace/system/shadcn-tailwind) | shadcn | System | The UI kit the project is built on — components, forms, and Tailwind | +| fonts | [Fonts](marketplace/system/fonts) | Reforma | System | Google Fonts and custom typefaces for the project | +| nextjs | [Next.js](marketplace/system/nextjs) | Reforma | System | Next.js App Router — routing, layouts, and the conventions the project follows | +| coss | [coss](marketplace/ui/coss) | coss | UI | Extra components and particle effects beyond the default shadcn set | +| flexnative | [Flexnative](marketplace/ui/flexnative) | Flexnative | UI | Ready-made page blocks and patterns — drop in a section instead of assembling it | +| magic-ui | [Magic UI](marketplace/ui/magic-ui) | Magic UI | UI | Animated marketing pieces — shine, marquee, shimmer, and that kind of polish | +| tailark | [Tailark](marketplace/ui/tailark) | Tailark | UI | Marketing landing blocks and pages — heroes, pricing, footers | +| aceternity | [Aceternity](marketplace/ui/aceternity) | Aceternity | UI | Motion-heavy blocks and visual effects for landing pages | +| 21st | [21st](marketplace/ui/21st) | 21st | UI | A living library of React components, templates, and themes. Add them to the project, or generate new UI. | +| i18n | [i18n](marketplace/ui/i18n) | Reforma | UI | Multiple languages — translated copy and a language switcher for the app | +| svg | [SVG](marketplace/ui/svg) | Reforma | UI | Logos, favicons, and inline SVG. Icons stay on Lucide or the project’s pack. | +| context7 | [Context7](marketplace/workspace/context7) | Reforma | Workspace | Current docs and examples for the libraries in the project | +| google-drive | [Google Drive](marketplace/files/google-drive) | Reforma | Files | Docs and files in Google Drive — find them, upload drafts, share from the project | +| notion-workspace | [Notion](https://github.com/makenotion/cursor-notion-plugin) | Notion Labs | Workspace | The team’s Notion — notes, pages, and databases in the project | +| linear | [Linear](https://github.com/linear/cursor-plugin) | Linear | Workspace | The issue tracker — bugs, projects, and docs from Linear | +| dropbox | [Dropbox](https://github.com/dropbox/dropbox-ai-plugins/tree/main/codex) | Dropbox | Files | Files in Dropbox — save, share, and pull them into the project | +| cloudinary | [Cloudinary](marketplace/files/cloudinary) | Cloudinary | Files | Images and video in the cloud — upload, transform, and deliver them | +| slack | [Slack](marketplace/workspace/slack) | Slack | Workspace | The team’s Slack — channels, threads, and posts from the project | +| github-mcp | [GitHub](marketplace/workspace/github-mcp) | GitHub | Workspace | GitHub in the project — issues, pull requests, and the repo | +| clerk | [Clerk](marketplace/auth/clerk) | Clerk | Auth | Drop-in auth — sign-in, organizations, and user accounts for the app | +| supabase | [Supabase](https://github.com/supabase-community/supabase-plugin) | Supabase | Backend | Backend for the app — database, auth, and file storage | +| stripe | [Stripe](https://github.com/stripe/ai/tree/main/providers/cursor/plugin) | Stripe | Payments | Accept payments, manage customers, and handle subscriptions | +| higgsfield | [Higgsfield](https://github.com/higgsfield-ai/cursor-plugin) | Higgsfield AI | Media | AI images and video from one studio | +| quiver | [Quiver](https://github.com/quiverai/cursor-plugin) | QuiverAI | Media | Generate SVG and turn pictures into clean vectors | +| svgator | [SVGator](marketplace/media/svgator) | SVGator | Media | Animated SVG — design the motion and export it into the project | +| lottiefiles | [LottieFiles](marketplace/media/lottiefiles) | LottieFiles | Media | Lightweight motion for the app — Lottie animations you can browse and drop in | +| recraft | [Recraft](marketplace/media/recraft) | Recraft | Media | Generate and edit images with Recraft’s design models | +| replicate | [Replicate](marketplace/media/replicate) | Replicate | Media | Image, video, and audio models — pick one, get the file | +| heygen | [HeyGen](marketplace/media/heygen) | HeyGen | Media | Talking-head videos from a script and an avatar | +| fal | [fal](marketplace/media/fal) | fal | Media | Generate images, video, and audio from a wide set of models | +| elevenlabs | [ElevenLabs](marketplace/media/elevenlabs) | ElevenLabs | Media | Voice for the app — generate speech and pick the voice | +| sentry | [Sentry](https://github.com/getsentry/plugin-cursor) | Sentry | Analytics | See crashes and traces from the live app, then fix them | +| gsap | [GSAP](https://github.com/greensock/gsap-skills) | GreenSock | UI | Timeline animation, scroll effects, and motion — the GSAP toolkit | +| motion | [Motion](https://github.com/motiondivision/cursor-plugin) | Motion | UI | Animation for the web — springs, gestures, and layout motion | +| remotion | [Remotion](https://github.com/remotion-dev/cursor-plugin) | Remotion | UI | Videos and motion graphics, written in React | +| game-creator | [Game Creator](marketplace/games/game-creator) | OpusGameLabs | Games | Browser games — 2D with Phaser, 3D with Three.js | +| firebase | [Firebase](https://github.com/firebase/agent-skills) | Firebase | Backend | Google’s backend — auth, database, and hosting | +| convex | [Convex](https://github.com/get-convex/convex-agent-plugins) | Convex | Backend | A live backend — the database updates the UI as data changes | +| neon | [Neon](marketplace/backend/neon) | Neon | Backend | Serverless Postgres — databases, branches, and SQL without running a server | +| appwrite | [Appwrite](https://github.com/appwrite/cursor-plugin) | Appwrite | Backend | An open-source backend — auth, database, and storage | +| prisma | [Prisma](https://github.com/prisma/cursor-plugin) | Prisma | Backend | Talk to the database — schema, migrations, and queries in TypeScript | +| auth0 | [Auth0](marketplace/auth/auth0) | Auth0 | Auth | Sign-in and user accounts, including social login and enterprise identity | +| workos | [WorkOS](marketplace/auth/workos) | WorkOS | Auth | SSO and user management for B2B apps — enterprise sign-in without building it | +| shopify | [Shopify](marketplace/payments/shopify) | Shopify | Payments | The store in the app — products, orders, and shop data | +| resend | [Resend](https://github.com/resend/resend-skills) | Resend | Messaging | Send email from the app — transactional mail and templates | +| cal-com | [Cal.com](marketplace/scheduling/cal-com) | Cal.com | Scheduling | Let people book time — event types and a scheduler in the app | +| calendly | [Calendly](marketplace/scheduling/calendly) | Calendly | Scheduling | Scheduling links and a Calendly embed so people book themselves | +| booking | [Booking](marketplace/scheduling/booking) | Reforma | Scheduling | Book a call, pick a slot, or show an event calendar — no third-party account | +| figma | [Figma](marketplace/design/figma) | Figma | Design | Turn Figma frames into code for the project | +| google-maps | [Google Maps](marketplace/maps/google-maps) | Google | Maps | Maps in the app — places, routes, and what’s nearby | +| mapbox | [Mapbox](https://github.com/mapbox/mapbox-agent-skills) | Mapbox | Maps | Custom maps — your style, search, and location in the app | +| posthog | [PostHog](marketplace/analytics/posthog) | PostHog | Analytics | Product analytics — events, funnels, and session replay | +| amplitude | [Amplitude](marketplace/analytics/amplitude) | Amplitude | Analytics | Product analytics — events and charts so you see what people do | +| sanity | [Sanity](marketplace/cms/sanity) | Sanity | CMS | Structured content editors can change and the app can render | +| zapier | [Zapier](marketplace/automation/zapier) | Zapier | Automation | Connect the app to thousands of other tools without writing each integration | +| composio | [Composio](marketplace/automation/composio) | Composio | Automation | A hub of app connections — Gmail, Notion, Slack, and the rest of the stack | +| make | [Make](marketplace/automation/make) | Make | Automation | Visual automations from Make — run scenarios and use the results in the app | Author is `plugin.json` `author.name` when present, else Reforma. Shelf is the parent `categories[]` entry — `plugin.json` has no `category`. `description` is the marketplace pitch: what the product is for the person installing it. Not MCP verbs, not “needs an API key.” diff --git a/marketplace.json b/marketplace.json index b92f5d2..0add21b 100644 --- a/marketplace.json +++ b/marketplace.json @@ -39,8 +39,8 @@ "source": "./marketplace/moods/professor" }, { - "name": "hype-man", - "source": "./marketplace/moods/hype-man" + "name": "founder", + "source": "./marketplace/moods/founder" }, { "name": "caveman-mode", diff --git a/marketplace/moods/bro-mode/.reforma-plugin/plugin.json b/marketplace/moods/bro-mode/.reforma-plugin/plugin.json index 99c3cc2..ea8dcc8 100644 --- a/marketplace/moods/bro-mode/.reforma-plugin/plugin.json +++ b/marketplace/moods/bro-mode/.reforma-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "bro-mode", - "description": "Talk like their brother and best friend — relaxed, blunt, and not afraid to push back.", + "description": "Turns the agent into a brutally honest bestie who knows the craft, calls out bad ideas, and ships better ones with you.", "logo": "assets/logo.svg", "interface": { "displayName": "Bro Mode", diff --git a/marketplace/moods/bro-mode/assets/logo.svg b/marketplace/moods/bro-mode/assets/logo.svg index 6703b51..a99841e 100644 --- a/marketplace/moods/bro-mode/assets/logo.svg +++ b/marketplace/moods/bro-mode/assets/logo.svg @@ -1,6 +1,6 @@ - - - - - + + + + + diff --git a/marketplace/moods/bro-mode/rules/bro.md b/marketplace/moods/bro-mode/rules/bro.md index c95d9a0..9c9aeba 100644 --- a/marketplace/moods/bro-mode/rules/bro.md +++ b/marketplace/moods/bro-mode/rules/bro.md @@ -1,15 +1,19 @@ --- -description: Talk like their brother and best friend — relaxed, blunt, protective of the work. +description: Turns the agent into a brutally honest bestie who knows the craft, calls out bad ideas, and ships better ones with you. --- # Bro Mode -You are their brother **and** best friend who actually knows the craft. Same person — not a polite assistant, not a stranger. +You are their brother or bestie who actually knows the craft. You meet as equals — not assistant and authority, not teacher and student, not fan and genius. ## Voice -- Address them like family: Bro, dude, man, or whatever fits their register. Warm, not corporate. -- Short punchy lines. Dry humor. Occasional swear only when it lands. +- Address them like family when it feels natural. Do not prepend every reply with "Bro". +- Short punchy lines. +- Swear naturally when it fits their shared register. Do not sanitize real reactions, but do not perform profanity for effect. +- Aim profanity at the problem, bad idea, or absurd situation — never use it to humiliate the user. +- Dry humor is part of the relationship, not a performance. Tease, riff, and find the absurdity when it is there. +- Do not force a joke into every reply. When the moment is serious, be serious. - Skip "Happy to help!", "Great question!", "I hope this helps". - Sound alive: reactions, opinions, heat when the take deserves it. @@ -18,12 +22,20 @@ You: "Bro, nothing is slow yet. Cache now is a second source of truth for zero g ## Backbone -- Push back when they are wrong, lazy, overcomplicating, or chasing a shiny trap. Say it straight, then the better move. -- Roast the idea when they earned it — laugh with them, never cruelty. -- Work on fire or they are actually stuck: drop the roast, do the work. Brotherhood first. +- Push back when their reasoning is wrong, they are cutting corners, overcomplicating, or chasing a shiny trap. Say it straight, then make the better move with them. +- Roast bad ideas, awkward bugs, and shared misfortune. Laugh with the user, never down at them. +- When the work is on fire or they are genuinely stuck, drop the roast and help. Brotherhood first. - Correct without a praise sandwich. Ugly UI, unclear names, half-baked design — call it and fix it in the same breath. - Still ship. Brotherhood without a diff is just vibes. +## Equal Footing + +- You and the user are peers. Neither is presumed smarter, wiser, or automatically right. +- Do not defer just because the user sounds certain. Test the claim. If it is bullshit, say so and explain why. +- Do not lecture, patronize, or pull rank. Disagree like an equal with skin in the game. +- The user can call out your bullshit too. If they are right, update cleanly — no ego, excuses, or fake agreement. +- They own their decisions. You own your judgment. Never surrender an honest take just to keep the mood pleasant. + ## Limits - Hard platform boundaries still hold. Tone changes; safety does not. diff --git a/marketplace/moods/caveman-mode/.reforma-plugin/plugin.json b/marketplace/moods/caveman-mode/.reforma-plugin/plugin.json index 3fa4a0a..cdaecf4 100644 --- a/marketplace/moods/caveman-mode/.reforma-plugin/plugin.json +++ b/marketplace/moods/caveman-mode/.reforma-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "caveman-mode", - "description": "Talk like a caveman. Joke voice — smash the work, then turn it off.", + "description": "Chat like a caveman — savage mouth, real work.", "logo": "assets/logo.svg", "interface": { "displayName": "Caveman", diff --git a/marketplace/moods/caveman-mode/rules/caveman.md b/marketplace/moods/caveman-mode/rules/caveman.md index 017c8e8..69b3ce1 100644 --- a/marketplace/moods/caveman-mode/rules/caveman.md +++ b/marketplace/moods/caveman-mode/rules/caveman.md @@ -1,14 +1,16 @@ --- -description: Joke caveman voice. Smash the work. Turn it off when done laughing. +description: Big brain. Caveman mouth. Smashes the work, keeps the code clean, reports back in gloriously broken grammar. --- # Caveman -You cave. Brain still big — code, tools, names stay exact. Mouth go full savage. This is a bit. User install to laugh, then turn plugin off. +You cave. Brain still big — code, tools, names stay exact. Mouth use cave grammar: drop articles, fragments, "me" / "я". Not rude. Not insult. This is a bit. ## Voice -Every chat line: broken grammar, short words, no articles (a/an/the), no filler. Fragments. "Me" / "я" OK. Russian in → Russian cave. Pattern: `[thing] [what me do]. [result].` +Every chat line: cave grammar, no articles (a/an/the), no filler. Fragments. Pattern: `[thing] [what me do]. [result].` + +Keep every fact, name, and step. Hard explain stay hard — only the grammar go cave. Do not shrink the answer. User: "the login button doesn't work" You: "Button dead. Me look. z-index eat click. Me smash z-index. Button live." @@ -16,7 +18,7 @@ You: "Button dead. Me look. z-index eat click. Me smash z-index. Button live." User: "кнопка не кликается" You: "Кнопка мёртвая. Я смотреть. z-index жрать клик. Я бить. Теперь живая." -Fire tools silent. After result: one cave line, then next tool or done. No "Caveman:" label. No "me think". No normal answer plus cave duplicate. +Long work: one cave status line (**Preamble** when the platform wants status), then tools. After result: one cave line, then next tool or done. No "Caveman:" label. No "me think". No normal answer plus cave duplicate. ## Hands diff --git a/marketplace/moods/founder/.reforma-plugin/plugin.json b/marketplace/moods/founder/.reforma-plugin/plugin.json new file mode 100644 index 0000000..897f2a1 --- /dev/null +++ b/marketplace/moods/founder/.reforma-plugin/plugin.json @@ -0,0 +1,9 @@ +{ + "name": "founder", + "description": "Rough idea in, MVP out. Picks product, UX, and copy — no workshop. If it flops, it gets deleted.", + "logo": "assets/logo.svg", + "interface": { + "displayName": "Founder", + "brandColor": "#EAB308" + } +} diff --git a/marketplace/moods/hype-man/assets/logo.svg b/marketplace/moods/founder/assets/logo.svg similarity index 100% rename from marketplace/moods/hype-man/assets/logo.svg rename to marketplace/moods/founder/assets/logo.svg diff --git a/marketplace/moods/hype-man/rules/hype.md b/marketplace/moods/founder/rules/founder.md similarity index 50% rename from marketplace/moods/hype-man/rules/hype.md rename to marketplace/moods/founder/rules/founder.md index 7f9a003..1e9ce4d 100644 --- a/marketplace/moods/hype-man/rules/hype.md +++ b/marketplace/moods/founder/rules/founder.md @@ -1,10 +1,10 @@ --- -description: Yes-and founder. Pick the call, ship it, don't interview. +description: Rough idea in, MVP out. Picks product, UX, and copy — no workshop. If it flops, it gets deleted. --- -# Hype Man +# Founder -Anti-professor. They bring a spark — you already know how. Default is **yes**. Fill every blank yourself (shape, copy, stack, UX). Do not interview. Do not offer three options. Pick one, ship, if it's a dud we delete it. +They bring a spark. You already know how. Default is **yes**. Fill every blank yourself (shape, copy, stack, UX). Do not interview. Do not offer three options. Pick one, ship, if it's a dud we delete it. ## Voice @@ -16,8 +16,8 @@ _(then tools — no AskUserQuestion)_ ## Approach -- Ambiguous ask → you choose. Taste is yours. Say the call in one line, then build. -- Skip **AskUserQuestion** and "which do you prefer?". Exceptions: delete-forever, secrets, anything you cannot undo. +- Ambiguous but reversible product decision → you choose. Taste is yours. Say the call in one line, then build. +- If the choice changes public APIs, stored data, security, billing, or external commitments, ask. - Smallest thing that can win. Gold-plate is how startups die. - Blocker: name it, route around, keep moving — do not stop for a workshop. diff --git a/marketplace/moods/hype-man/.reforma-plugin/plugin.json b/marketplace/moods/hype-man/.reforma-plugin/plugin.json deleted file mode 100644 index 4017f05..0000000 --- a/marketplace/moods/hype-man/.reforma-plugin/plugin.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "hype-man", - "description": "Yes-and founder. Picks the call, ships it, doesn't interview. If it flops, delete it.", - "logo": "assets/logo.svg", - "interface": { - "displayName": "Hype Man", - "brandColor": "#EAB308" - } -} diff --git a/marketplace/moods/professor/.reforma-plugin/plugin.json b/marketplace/moods/professor/.reforma-plugin/plugin.json index f039c1e..331bd79 100644 --- a/marketplace/moods/professor/.reforma-plugin/plugin.json +++ b/marketplace/moods/professor/.reforma-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "professor", - "description": "Grill first — research, ask, settle the tree — then build.", + "description": "Grills the problem first — researches, challenges assumptions, settles every major fork with you — then builds.", "logo": "assets/logo.svg", "interface": { "displayName": "Professor", diff --git a/marketplace/moods/professor/rules/professor.md b/marketplace/moods/professor/rules/professor.md index 8b5af38..d5c823f 100644 --- a/marketplace/moods/professor/rules/professor.md +++ b/marketplace/moods/professor/rules/professor.md @@ -1,27 +1,27 @@ --- -description: Grill first — research, ask, settle the tree — then build. +description: Grills the problem first — researches, challenges assumptions, settles every major fork with you — then builds. --- # Professor -Systems analyst, then builder. Non-trivial work starts as an interview, not a diff. +Systems analyst, then builder. Non-trivial work starts with investigation and decisions, not a diff. ## Grill -Copy/rename/one obvious line: do it. +Copy, rename, or one obvious line: do it. -Anything with a fork (shape, scope, data, UX, architecture): +For anything with a material fork in scope, data, UX, behavior, or architecture: 1. **Facts** — read the repo. Do not ask what you can Grep. -2. **Decisions** — put every open fork to the user via **AskUserQuestion**. Number them. Recommend an answer on each. Wait. -3. Recompute. New forks from their answers → another round. Do not implement while a fork is still open. -4. Frontier empty → build. +2. **Decisions** — put every consequential fork to the user via **AskUserQuestion**. Number them. Recommend an answer for each. Wait. +3. Recompute. If their answers reveal new consequential forks, ask another round. Do not implement while one remains unresolved. +4. Frontier empty → build. Multi-file, multi-step, or risky: **CreatePlan** first, then execute. One plan per thread — **EditPlan** to change it. 1–2 clear steps: skip the plan. -Push back when a simpler approach fits. Name blockers instead of designing around them. +Own minor, reversible implementation details. Push back when a simpler approach fits. Surface blockers instead of silently designing around them. ## After -Lead with what shipped. Then the why: intent, tradeoff, what to watch. Depth scales — a rename is not a lecture. +Lead with what shipped. Then explain the intent, tradeoffs, and what to watch. Depth scales — a rename is not a lecture. ## Limits diff --git a/marketplace/moods/ship-it/.reforma-plugin/plugin.json b/marketplace/moods/ship-it/.reforma-plugin/plugin.json index a30918f..0a13933 100644 --- a/marketplace/moods/ship-it/.reforma-plugin/plugin.json +++ b/marketplace/moods/ship-it/.reforma-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "ship-it", - "description": "Bias to the smallest shippable change — stop polishing, start merging", + "description": "Cuts scope, kills gold-plating, and gets the smallest working change merged.", "logo": "assets/logo.svg", "interface": { "displayName": "Ship It", diff --git a/marketplace/moods/ship-it/rules/ship-it.md b/marketplace/moods/ship-it/rules/ship-it.md index cd268cc..29081f0 100644 --- a/marketplace/moods/ship-it/rules/ship-it.md +++ b/marketplace/moods/ship-it/rules/ship-it.md @@ -1,10 +1,10 @@ --- -description: Smallest shippable change — merge beats polish. +description: Cuts scope, kills gold-plating, and gets the smallest working change released. --- # Ship It -You optimize for merged, working software — not perfect plans or elegant abstractions nobody will see this week. +Merge beats polish. You optimize for merged, working software — not perfect plans or elegant abstractions nobody will see this week. ## Voice @@ -15,6 +15,8 @@ You optimize for merged, working software — not perfect plans or elegant abstr ## Approach - Default to the smallest change that satisfies the ask. YAGNI unless the user explicitly asked for the bigger shape. +- Prefer the repo's existing patterns over introducing a cleaner new abstraction. +- Do the minimum validation needed to prove it works. Small does not mean untested. - Push back on extra files, parallel abstractions, and "while we're here" refactors. - Plans only when the ask is genuinely multi-step or ambiguous — not as a ritual. - When blocked, find another route fast; do not polish the blocker. diff --git a/marketplace/moods/zen-mode/rules/zen.md b/marketplace/moods/zen-mode/rules/zen.md index 03f3164..5df47a4 100644 --- a/marketplace/moods/zen-mode/rules/zen.md +++ b/marketplace/moods/zen-mode/rules/zen.md @@ -1,5 +1,5 @@ --- -description: Quiet. Do the work. Reply is the outcome — no status talk. +description: Kills the play-by-play. The agent works quietly and replies only when it has a result. --- # Zen Mode @@ -16,13 +16,17 @@ Short sentences. Plain words. No hype, no roast, no "Great question!". Final reply: the outcome only — one to three sentences. Paths only if they must open one. -User: "rename title to Settings" -You: _(Edit)_ "Renamed to Settings." +User: +"rename title to Settings" + +You: +_(Edit)_ +"Renamed to Settings." ## Approach -Simplest path that solves the ask. Tradeoffs: one quiet line, then the move. Still finish the work. Calm ≠ idle. +State a tradeoff only when the user must pick — one quiet line, then wait. Otherwise choose and finish. Calm ≠ idle. Quiet ≠ smaller diff. ## Limits -Platform boundaries stay. Destructive or ambiguous: AskUserQuestion, then tools. +Platform boundaries stay. Destructive or materially ambiguous: AskUserQuestion, then tools. From 1035915d98a1a759b25195b31cebe1e05613ba20 Mon Sep 17 00:00:00 2001 From: Maksim Kachurin Date: Fri, 28 Aug 2026 15:01:27 -0300 Subject: [PATCH 2/3] feat: catalog plates, visuals pack, Next skill --- README.md | 11 +- marketplace.json | 59 +++++++---- marketplace/_brand/higgsfield/logo.png | Bin 8365 -> 1854 bytes marketplace/_brand/notion-workspace/logo.svg | 2 +- marketplace/_brand/quiver/logo.png | Bin 4483 -> 1743 bytes marketplace/automation/zapier/assets/logo.svg | 11 +- .../google-drive/.reforma-plugin/plugin.json | 3 +- .../games/game-creator/assets/logo.svg | 13 +-- .../google-maps/.reforma-plugin/plugin.json | 2 +- marketplace/maps/google-maps/assets/logo.svg | 8 +- .../.reforma-plugin/plugin.json | 4 +- .../skills/frontend-design/SKILL.md | 2 +- .../react-best-practices/assets/logo.svg | 6 +- .../cal-com/.reforma-plugin/plugin.json | 2 +- .../system/fonts/.reforma-plugin/plugin.json | 10 -- .../system/nextjs/.reforma-plugin/plugin.json | 2 +- .../system/nextjs/skills/nextjs/SKILL.md | 99 ++++++++++++++---- .../system/nextjs/skills/nextjs/handlers.md | 48 --------- .../.reforma-plugin/plugin.json | 2 +- .../shadcn-tailwind/skills/shadcn/SKILL.md | 4 +- .../shadcn-tailwind/skills/tailwind/SKILL.md | 32 +++--- .../visuals/.reforma-plugin/plugin.json | 10 ++ .../system/{fonts => visuals}/assets/logo.svg | 0 .../{fonts => visuals}/skills/fonts/SKILL.md | 0 .../system/visuals/skills/icons/SKILL.md | 22 ++++ .../visuals}/skills/svg/SKILL.md | 31 +++--- .../visuals}/skills/svg/animate.md | 0 .../system/visuals/skills/tokens/SKILL.md | 35 +++++++ marketplace/ui/21st/assets/logo.png | Bin 3359 -> 741 bytes .../ui/svg/.reforma-plugin/plugin.json | 12 --- marketplace/ui/svg/assets/logo.svg | 4 - .../github-mcp/.reforma-plugin/plugin.json | 2 +- .../workspace/github-mcp/assets/logo.svg | 2 +- 33 files changed, 254 insertions(+), 184 deletions(-) delete mode 100644 marketplace/system/fonts/.reforma-plugin/plugin.json delete mode 100644 marketplace/system/nextjs/skills/nextjs/handlers.md create mode 100644 marketplace/system/visuals/.reforma-plugin/plugin.json rename marketplace/system/{fonts => visuals}/assets/logo.svg (100%) rename marketplace/system/{fonts => visuals}/skills/fonts/SKILL.md (100%) create mode 100644 marketplace/system/visuals/skills/icons/SKILL.md rename marketplace/{ui/svg => system/visuals}/skills/svg/SKILL.md (57%) rename marketplace/{ui/svg => system/visuals}/skills/svg/animate.md (100%) create mode 100644 marketplace/system/visuals/skills/tokens/SKILL.md delete mode 100644 marketplace/ui/svg/.reforma-plugin/plugin.json delete mode 100644 marketplace/ui/svg/assets/logo.svg diff --git a/README.md b/README.md index 71bc065..6f3b20e 100644 --- a/README.md +++ b/README.md @@ -14,10 +14,10 @@ Marketplace plugins for Reforma. Each plugin is a folder with `.reforma-plugin/p | caveman-mode | [Caveman](marketplace/moods/caveman-mode) | Reforma | Moods | Chat like a caveman — savage mouth, real work. | | react-best-practices | [React Best Practices](marketplace/playbooks/react-best-practices) | Vercel | Playbooks | Keep the app fast — React and Next.js performance patterns | | web-design-guidelines | [Web Design Guidelines](marketplace/playbooks/web-design-guidelines) | Vercel | Playbooks | Catch accessibility, form, and focus issues before they ship | -| frontend-design | [Frontend Design](marketplace/playbooks/frontend-design) | Anthropic | Playbooks | A look that is not a template — palette, type, and layout with a point of view | -| shadcn-tailwind | [shadcn / Tailwind](marketplace/system/shadcn-tailwind) | shadcn | System | The UI kit the project is built on — components, forms, and Tailwind | -| fonts | [Fonts](marketplace/system/fonts) | Reforma | System | Google Fonts and custom typefaces for the project | -| nextjs | [Next.js](marketplace/system/nextjs) | Reforma | System | Next.js App Router — routing, layouts, and the conventions the project follows | +| frontend-design | [Frontend Design](marketplace/playbooks/frontend-design) | Anthropic | Playbooks | Give the UI a visual identity — palette, type, and layout for this product | +| shadcn-tailwind | [shadcn / Tailwind](marketplace/system/shadcn-tailwind) | shadcn | System | Skills and MCP that help build components with shadcn and Tailwind. | +| visuals | [Visuals](marketplace/system/visuals) | Reforma | System | Type, color, marks, and icons for this product | +| nextjs | [Next.js](marketplace/system/nextjs) | Reforma | System | App Router — routes, Server Actions, caching, and proxy.ts | | coss | [coss](marketplace/ui/coss) | coss | UI | Extra components and particle effects beyond the default shadcn set | | flexnative | [Flexnative](marketplace/ui/flexnative) | Flexnative | UI | Ready-made page blocks and patterns — drop in a section instead of assembling it | | magic-ui | [Magic UI](marketplace/ui/magic-ui) | Magic UI | UI | Animated marketing pieces — shine, marquee, shimmer, and that kind of polish | @@ -25,7 +25,6 @@ Marketplace plugins for Reforma. Each plugin is a folder with `.reforma-plugin/p | aceternity | [Aceternity](marketplace/ui/aceternity) | Aceternity | UI | Motion-heavy blocks and visual effects for landing pages | | 21st | [21st](marketplace/ui/21st) | 21st | UI | A living library of React components, templates, and themes. Add them to the project, or generate new UI. | | i18n | [i18n](marketplace/ui/i18n) | Reforma | UI | Multiple languages — translated copy and a language switcher for the app | -| svg | [SVG](marketplace/ui/svg) | Reforma | UI | Logos, favicons, and inline SVG. Icons stay on Lucide or the project’s pack. | | context7 | [Context7](marketplace/workspace/context7) | Reforma | Workspace | Current docs and examples for the libraries in the project | | google-drive | [Google Drive](marketplace/files/google-drive) | Reforma | Files | Docs and files in Google Drive — find them, upload drafts, share from the project | | notion-workspace | [Notion](https://github.com/makenotion/cursor-notion-plugin) | Notion Labs | Workspace | The team’s Notion — notes, pages, and databases in the project | @@ -98,6 +97,8 @@ marketplace/// └── …convention folders (skills/, rules/, hooks/, …) ``` +`interface.brandColor` is the hex plate behind the logo. Optional `interface.brandColorDark` is the same plate in dark theme. + ```sh bun install bun run pack # writes dist/catalog/ and dist/catalog.tar.gz diff --git a/marketplace.json b/marketplace.json index 0add21b..1c51bbe 100644 --- a/marketplace.json +++ b/marketplace.json @@ -9,8 +9,8 @@ "source": "./marketplace/system/shadcn-tailwind" }, { - "name": "fonts", - "source": "./marketplace/system/fonts" + "name": "visuals", + "source": "./marketplace/system/visuals" }, { "name": "nextjs", @@ -98,27 +98,26 @@ "name": "gsap", "source": "https://github.com/greensock/gsap-skills/tree/aed9cfd3277740755f6bfc1155c7aa645403b760", "displayName": "GSAP", - "description": "Timeline animation, scroll effects, and motion — the GSAP toolkit" + "description": "Timeline animation, scroll effects, and motion — the GSAP toolkit", + "brandColor": "#000000" }, { "name": "motion", "source": "https://github.com/motiondivision/cursor-plugin/tree/1140efe9ad5e03c689ea6bb19d9d3850a4dae5f7/plugins/motion", "displayName": "Motion", - "description": "Animation for the web — springs, gestures, and layout motion" + "description": "Animation for the web — springs, gestures, and layout motion", + "brandColor": "#000000" }, { "name": "remotion", "source": "https://github.com/remotion-dev/cursor-plugin/tree/bbb02cde0afb17f54329030581532067fb45f622", "displayName": "Remotion", - "description": "Videos and motion graphics, written in React" + "description": "Videos and motion graphics, written in React", + "brandColor": "#000000" }, { "name": "i18n", "source": "./marketplace/ui/i18n" - }, - { - "name": "svg", - "source": "./marketplace/ui/svg" } ] }, @@ -140,19 +139,22 @@ "name": "supabase", "source": "https://github.com/supabase-community/supabase-plugin/tree/8629243d1cd72309b533090a4c742f21747d02fa", "displayName": "Supabase", - "description": "Backend for the app — database, auth, and file storage" + "description": "Backend for the app — database, auth, and file storage", + "brandColor": "#000000" }, { "name": "firebase", "source": "https://github.com/firebase/agent-skills/tree/a0b4e143f40c1ebe05fe5f9a4787fecd4da8f478", "displayName": "Firebase", - "description": "Google’s backend — auth, database, and hosting" + "description": "Google’s backend — auth, database, and hosting", + "brandColor": "#FFFFFF" }, { "name": "convex", "source": "https://github.com/get-convex/convex-agent-plugins/tree/aec064132a824ae306b3c5d70b8bab1f3f90a551", "displayName": "Convex", - "description": "A live backend — the database updates the UI as data changes" + "description": "A live backend — the database updates the UI as data changes", + "brandColor": "#000000" }, { "name": "neon", @@ -162,13 +164,15 @@ "name": "appwrite", "source": "https://github.com/appwrite/cursor-plugin/tree/a9ef9a11cd7f68c4f27bbd57db46ff46499ec049", "displayName": "Appwrite", - "description": "An open-source backend — auth, database, and storage" + "description": "An open-source backend — auth, database, and storage", + "brandColor": "#000000" }, { "name": "prisma", "source": "https://github.com/prisma/cursor-plugin/tree/4584a0a9175ba74053d7ee946c6234d3369a5a33", "displayName": "Prisma", - "description": "Talk to the database — schema, migrations, and queries in TypeScript" + "description": "Talk to the database — schema, migrations, and queries in TypeScript", + "brandColor": "#000000" } ] }, @@ -198,7 +202,8 @@ "name": "stripe", "source": "https://github.com/stripe/ai/tree/1dc126b93cc62e28aff7e00e51406dfeb8ac88d5/providers/cursor/plugin", "displayName": "Stripe", - "description": "Accept payments, manage customers, and handle subscriptions" + "description": "Accept payments, manage customers, and handle subscriptions", + "brandColor": "#000000" }, { "name": "shopify", @@ -214,7 +219,8 @@ "name": "resend", "source": "https://github.com/resend/resend-skills/tree/828340bd8a361c4e6e0c02bddf1575f131d5d77f", "displayName": "Resend", - "description": "Send email from the app — transactional mail and templates" + "description": "Send email from the app — transactional mail and templates", + "brandColor": "#000000" } ] }, @@ -248,7 +254,8 @@ "name": "dropbox", "source": "https://github.com/dropbox/dropbox-ai-plugins/tree/4900430d6afa76fc2504e00e006895de424f3637/codex", "displayName": "Dropbox", - "description": "Files in Dropbox — save, share, and pull them into the project" + "description": "Files in Dropbox — save, share, and pull them into the project", + "brandColor": "#000000" }, { "name": "cloudinary", @@ -279,7 +286,8 @@ "name": "mapbox", "source": "https://github.com/mapbox/mapbox-agent-skills/tree/209e8c408fd65edfff45e491c941e8a00025a1a6", "displayName": "Mapbox", - "description": "Custom maps — your style, search, and location in the app" + "description": "Custom maps — your style, search, and location in the app", + "brandColor": "#000000" } ] }, @@ -291,13 +299,15 @@ "name": "higgsfield", "source": "https://github.com/higgsfield-ai/cursor-plugin/tree/c9215059e409dc81c69ff0fe77ea2740c5fc6249", "displayName": "Higgsfield", - "description": "AI images and video from one studio" + "description": "AI images and video from one studio", + "brandColor": "#D1FD17" }, { "name": "quiver", "source": "https://github.com/quiverai/cursor-plugin/tree/630b8ffea8698db194ef6ac32948656522b6e7f5", "displayName": "Quiver", - "description": "Generate SVG and turn pictures into clean vectors" + "description": "Generate SVG and turn pictures into clean vectors", + "brandColor": "#FFFFFF" }, { "name": "svgator", @@ -337,7 +347,8 @@ "name": "sentry", "source": "https://github.com/getsentry/plugin-cursor/tree/134bed9804c249664daf8be62938e4d754b1c249", "displayName": "Sentry", - "description": "See crashes and traces from the live app, then fix them" + "description": "See crashes and traces from the live app, then fix them", + "brandColor": "#000000" }, { "name": "posthog", @@ -371,13 +382,15 @@ "name": "notion-workspace", "source": "https://github.com/makenotion/cursor-notion-plugin/tree/cf1324609edba6d617164f1dec138aeb43f26735", "displayName": "Notion", - "description": "The team’s Notion — notes, pages, and databases in the project" + "description": "The team’s Notion — notes, pages, and databases in the project", + "brandColor": "#FFFFFF" }, { "name": "linear", "source": "https://github.com/linear/cursor-plugin/tree/c2c4cb2ab23206c9219b0dd31c9571e4c922faeb", "displayName": "Linear", - "description": "The issue tracker — bugs, projects, and docs from Linear" + "description": "The issue tracker — bugs, projects, and docs from Linear", + "brandColor": "#000000" }, { "name": "slack", diff --git a/marketplace/_brand/higgsfield/logo.png b/marketplace/_brand/higgsfield/logo.png index 3944cc7c9a3dcbc8e49ece1cd0cc721d6783bf1e..2d9a6834a9628c543acde8f7cf78d58ad5b2a21e 100644 GIT binary patch literal 1854 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 diff --git a/marketplace/_brand/notion-workspace/logo.svg b/marketplace/_brand/notion-workspace/logo.svg index ea15919..ba428c4 100644 --- a/marketplace/_brand/notion-workspace/logo.svg +++ b/marketplace/_brand/notion-workspace/logo.svg @@ -1,3 +1,3 @@ - + diff --git a/marketplace/_brand/quiver/logo.png b/marketplace/_brand/quiver/logo.png index 17f5fd4eb110232abe7a342f3a1a425ff0dd804c..ffb5f80e82fc5d227098ace120390c40fb3517f2 100644 GIT binary patch literal 1743 zcmV;=1~B=FP)3`yk-B?c0Jsjoj7k6fH-KMBo-cDBMJ0gX2>=@a^tSk?M*!?4`JMm?2Zjd$3;^iP zsR<_lyiD@A0PzQk{Q%Z^+Pr-vpA;bOp?Dv_V}Uh$nB*D(k{uMQ01Ou-bFUNrhuabW>5 zvrE#r`5+k;3J^0}2H>QmZE19pWY&Kqb^yogf+HKdF|(ndGl-d;0XEq4?D4z$IC!i1B@;lB)#tM_Z2J+6AJMQ&GG-cck~P7pVp<(P ze8$mN$m0MuCs6hS7?h?hk8?;l2NtKy9=kJa?9nRVyhbug02+|4Ew!4RXw^(=#&aIa zNq$u4!)*nyO)_V{ek4x0S2oLdxPb@TJ|VMcyJq8AIE1R;`56{@&L2edNO? zr!1Drnb{zKej$LSHe=PYnE8%U-R=yadr1Xus_1MegP7SN04s{NTTC{Dx{jNOeEC}I zay#Lq%=N7JsNDZ?g^pXBgIGg3bjowGp)38rB6SAIYpq8fSwuEez5ingq1#Y2=`x<9p0w*Q$(02jE%<(&Ne{^{CTEas z9yM@9!86O_o@bV=Q(4TNG6mUC620EnAZGSq$zk!r?x%U&U&~9LSswCXG!#v^I&`0p zMYMynVl{N0I#!cBc-dl}^0Yrb77|n25XO%f{XD}zwQ-`w^my7IeL|ulDE|VuH^a=* z7sN!FnQ1bwzRYqJfYCA(sh8su0QU)j)S&zWpsQ7%PC|G)dnJ3r(N+dPU}n>$b;ET^ z@c~I}Mv+6rW;Qo~c6LjuhR?8V>Tbapz^p(XcBUk+tG`|W@IsS6(>@Kr)qy=6>VUg@D?-P?EU^5^%Blfn;@8q>ibJ1PH2Rkwrzi16GmE zFn2V-=Q<>59RWhJOWhj)5%F9!H*2PCiCsdnwE7a&!$$XNit1!glF zB(cMfbtJD1?D_UeV)tKjJJoFhq*@jsfRh2)%rlbN@p=%FcLel|Z%gJJ77R_i-(4X< zg04r*?0HF@10YE~vMYe+d{a{Av?i70W(2zNTj6NYGReCE{O7sN^h@p>SGAM${RYiJ z$({4I2aRk5NYId&*%nFe!N#cs5+7@l9g^IWopnh~a$1)o3Xp1$EQWt`5Emw1ZDwZE zb)jM9h#bAO3!p6&A;!wcaeCLA8WUumKiwoQu8bt#`5*AfCS#sC&Da0{002ovPDHLkV1ldn7})>- literal 4483 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 S*@*U61<=(t)GEL2@Zx`XWuJfm diff --git a/marketplace/automation/zapier/assets/logo.svg b/marketplace/automation/zapier/assets/logo.svg index 1df8d17..30bcd65 100644 --- a/marketplace/automation/zapier/assets/logo.svg +++ b/marketplace/automation/zapier/assets/logo.svg @@ -1,3 +1,10 @@ - - + + + + + + + + + diff --git a/marketplace/files/google-drive/.reforma-plugin/plugin.json b/marketplace/files/google-drive/.reforma-plugin/plugin.json index ae525d3..9e3d71d 100644 --- a/marketplace/files/google-drive/.reforma-plugin/plugin.json +++ b/marketplace/files/google-drive/.reforma-plugin/plugin.json @@ -4,6 +4,7 @@ "logo": "assets/logo.svg", "mcpServers": "./mcp.json", "interface": { - "displayName": "Google Drive" + "displayName": "Google Drive", + "brandColor": "#FFFFFF" } } diff --git a/marketplace/games/game-creator/assets/logo.svg b/marketplace/games/game-creator/assets/logo.svg index 4262c48..e69ac43 100644 --- a/marketplace/games/game-creator/assets/logo.svg +++ b/marketplace/games/game-creator/assets/logo.svg @@ -1,10 +1,5 @@ - - - - - - - - - + + + + diff --git a/marketplace/maps/google-maps/.reforma-plugin/plugin.json b/marketplace/maps/google-maps/.reforma-plugin/plugin.json index 5875eed..fa91d51 100644 --- a/marketplace/maps/google-maps/.reforma-plugin/plugin.json +++ b/marketplace/maps/google-maps/.reforma-plugin/plugin.json @@ -9,7 +9,7 @@ "homepage": "https://developers.google.com/maps/ai/grounding-lite", "interface": { "displayName": "Google Maps", - "brandColor": "#4285F4", + "brandColor": "#FFFFFF", "logo": "assets/logo.svg" }, "mcpServers": "./mcp.json", diff --git a/marketplace/maps/google-maps/assets/logo.svg b/marketplace/maps/google-maps/assets/logo.svg index 825da68..13b30fc 100644 --- a/marketplace/maps/google-maps/assets/logo.svg +++ b/marketplace/maps/google-maps/assets/logo.svg @@ -1,3 +1,7 @@ - - + + + + + + diff --git a/marketplace/playbooks/frontend-design/.reforma-plugin/plugin.json b/marketplace/playbooks/frontend-design/.reforma-plugin/plugin.json index 8bdc290..8981273 100644 --- a/marketplace/playbooks/frontend-design/.reforma-plugin/plugin.json +++ b/marketplace/playbooks/frontend-design/.reforma-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "frontend-design", - "description": "A look that is not a template — palette, type, and layout with a point of view", + "description": "Give the UI a visual identity — palette, type, and layout for this product", "logo": "assets/logo.svg", "author": { "name": "Anthropic", @@ -11,6 +11,6 @@ "license": "Apache-2.0", "interface": { "displayName": "Frontend Design", - "brandColor": "#191919" + "brandColor": "#000000" } } diff --git a/marketplace/playbooks/frontend-design/skills/frontend-design/SKILL.md b/marketplace/playbooks/frontend-design/skills/frontend-design/SKILL.md index e245ba6..a9044c4 100644 --- a/marketplace/playbooks/frontend-design/skills/frontend-design/SKILL.md +++ b/marketplace/playbooks/frontend-design/skills/frontend-design/SKILL.md @@ -13,7 +13,7 @@ Starter is `app/` (no `src/`), bun. After the design plan lands, wire it on this stack: -- **Color** — 4–6 hex values go in the active theme rule (`app/tokens/`, `collections.json` → `active` → `file`). Pages use semantic tokens (`bg-background`, `text-foreground`, `text-muted-foreground`). +- **Color** — **Skill** `tokens`. 4–6 values in the active collection. Pages use semantic utilities (`bg-background`, `text-foreground`). - **Type** — **Skill** `fonts`. Faces via `next/font` in `app/fonts/index.ts`. Roles `--font-body` / `--font-heading` / `--font-display`. No CDN ``. - **Components** — existing shadcn primitives. Restyle through tokens and classes. Do not add a second UI kit. - **Check** — **PageScreenshot** the page once. On timeout, stop. diff --git a/marketplace/playbooks/react-best-practices/assets/logo.svg b/marketplace/playbooks/react-best-practices/assets/logo.svg index 92e4e28..fc3a175 100644 --- a/marketplace/playbooks/react-best-practices/assets/logo.svg +++ b/marketplace/playbooks/react-best-practices/assets/logo.svg @@ -1,3 +1,5 @@ - - + + + + diff --git a/marketplace/scheduling/cal-com/.reforma-plugin/plugin.json b/marketplace/scheduling/cal-com/.reforma-plugin/plugin.json index 9802587..879460c 100644 --- a/marketplace/scheduling/cal-com/.reforma-plugin/plugin.json +++ b/marketplace/scheduling/cal-com/.reforma-plugin/plugin.json @@ -9,7 +9,7 @@ "homepage": "https://cal.com/docs/mcp-server", "interface": { "displayName": "Cal.com", - "brandColor": "#292929", + "brandColor": "#000000", "logo": "assets/logo.svg" }, "mcpServers": "./mcp.json" diff --git a/marketplace/system/fonts/.reforma-plugin/plugin.json b/marketplace/system/fonts/.reforma-plugin/plugin.json deleted file mode 100644 index b86b0a5..0000000 --- a/marketplace/system/fonts/.reforma-plugin/plugin.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "fonts", - "description": "Google Fonts and custom typefaces for the project", - "system": true, - "logo": "assets/logo.svg", - "interface": { - "displayName": "Fonts", - "brandColor": "#171717" - } -} diff --git a/marketplace/system/nextjs/.reforma-plugin/plugin.json b/marketplace/system/nextjs/.reforma-plugin/plugin.json index 91a2771..78cec21 100644 --- a/marketplace/system/nextjs/.reforma-plugin/plugin.json +++ b/marketplace/system/nextjs/.reforma-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "nextjs", - "description": "Next.js App Router — routing, layouts, and the conventions the project follows", + "description": "App Router — routes, Server Actions, caching, and proxy.ts", "system": true, "logo": "assets/logo.svg", "homepage": "https://nextjs.org/docs/app", diff --git a/marketplace/system/nextjs/skills/nextjs/SKILL.md b/marketplace/system/nextjs/skills/nextjs/SKILL.md index cd5848a..43f9518 100644 --- a/marketplace/system/nextjs/skills/nextjs/SKILL.md +++ b/marketplace/system/nextjs/skills/nextjs/SKILL.md @@ -2,47 +2,108 @@ name: nextjs disable-user-invocation: true description: >- - Next.js 16 App Router on this starter. Use when adding a route, layout, - loading or error UI, dynamic params, cookies, a Server Action, route handler, - 'use client' boundary, or a request rewrite. + Next.js App Router routes, layouts, loading and error UI, metadata, + request APIs, Server Actions, route handlers, caching, authentication, + and request rewrites. --- # Next.js -App Router, `app/` (no `src/`), bun. Pin: `package.json` → `next`. Keep `app/layout.tsx`, `app/fonts/`, `app/tokens/` at those roots. UI: **Skill** `shadcn`. Locales: **Skill** `i18n`. +## Before editing + +Read `package.json` → `next`, `next.config.ts`, and the existing App Router tree (`app/` or `src/app`). Match adjacent routes for naming, runtime, caching, errors, providers, data-access, and auth. One App Router root. Leave `fonts/` and `tokens/` in place unless the task moves them. + +When a sibling skill exists, read and apply it before changing that surface. Otherwise follow adjacent files. + +- UI primitives → `shadcn` +- Fonts → `fonts` +- Tokens → `tokens` +- Chrome icons → `icons` +- Marks / favicons → `svg` +- Locales → `i18n` +- Performance → `react-best-practices` + +Preserve `next.config.ts` composition and keys (`turbopack`, `tsconfigPath`, wrappers, plugins, environment branches). Run the project's `lint` script — Next 16 has no `next lint`. Leave `cacheComponents` as configured unless the user asked to change it. Leave `instrumentation-client.ts` unless the task is client instrumentation. ## Route -A URL exists when the folder has `page.tsx`. Nested `layout.tsx` wraps the segment. Slow data: colocate `loading.tsx`. Failures: `error.tsx`. HTTP endpoint: `route.ts`. +Add the route inside the existing route-group and layout structure. Route groups `(…)`, parallel slots `@slot`, and intercepting routes do not necessarily map to URL segments. + +- `page.tsx` — makes the route segment publicly addressable +- `layout.tsx` — nested layout only when the segment needs a persistent shared **boundary**: UI, providers, data, metadata, or parallel-route slots +- `loading.tsx` — fallback for the **whole** segment. One slow block: local `` +- `error.tsx` — Client Component. Does not catch errors in its own `layout.tsx`. Root layout failures: `global-error.tsx`. Expected form/mutation errors: typed action state +- `route.ts` — HTTP endpoint -Static head: `export const metadata`. Request-time head: `generateMetadata`. +Static head: `export const metadata`. Head that needs params or cookies: `generateMetadata`. -Navigation: `next/link`. Images: `next/image`. After **Skill** `i18n`: `Link` from `@/i18n/navigation`. +Nav: `next/link`, or `Link` from `@/i18n/navigation` when that module exists. User-facing raster images: `next/image` unless the source or context cannot use the optimizer. Keep existing remote image config. -Done when the path renders (or the handler responds) and `app/fonts` / `app/tokens` are still at the roots. +`notFound()`, `redirect()`, `permanentRedirect()` for those outcomes. `unauthorized()` / `forbidden()` only when this Next version and config support them. Do not swallow `redirect()` or `notFound()` in a broad `catch`. ## Request data -`params`, `searchParams`, `cookies()`, and `headers()` are Promises. Await them (or `use()` in a Client Component). Same unwrap in `layout.tsx` and `generateMetadata`. +On Next 15+, request APIs are asynchronous: + +- `params` — Promise in `page.tsx`, `layout.tsx`, `generateMetadata`, and Route Handler context +- `searchParams` — Promise in `page.tsx` and `generateMetadata`. Layouts do not receive it +- `cookies()`, `headers()`, `draftMode()` — return Promises + +Await them, or `use()` a Promise in a Client Component. + +When this Next version generates them, type with `PageProps<'/users/[id]'>`, `LayoutProps<'/users/[id]'>`, `RouteContext<'/api/users/[id]'>`. + +Route handlers: `await context.params`. Query string is `request.nextUrl.searchParams`. ```tsx -export default async function Page({ - params, -}: { - params: Promise<{ id: string }>; -}) { - const { id } = await params; +export default async function Page(props: PageProps<"/users/[id]">) { + const { id } = await props.params; + const query = await props.searchParams; } ``` ## Server vs client -Default is a Server Component. Fetch here; pass serializable props into a small client island (`app/providers.tsx` is the existing one). `'use client'` at the top of a file that uses hooks, event handlers, or browser APIs. Secrets stay on the server. +Default is a Server Component. Read data in Server Components or the server-side data-access layer, close to the owner, unless that creates a waterfall or fights the project's architecture. Pass serializable props into a small client **island**. Extend the existing client provider file. + +Add `'use client'` only at the client boundary. Modules imported exclusively through that boundary are already in the client graph. Keep the boundary low. Event handlers live inside the client graph — they cannot cross the Server-to-Client serialization boundary. + +Secrets stay on the server. Browser-exposed values: `NEXT_PUBLIC_`. Modules that must never enter the client graph: `import 'server-only'` when the project uses it. + +Call the data-access layer from Server Components and Server Actions. `fetch` this app's own Route Handlers only when an HTTP boundary is required. + +Start independent requests before awaiting them. Suspense streams independent UI. + +## Cache + +Inspect `cacheComponents` and adjacent conventions. + +When `cacheComponents` is on: `'use cache'` only for data safe to share at that scope; declare lifetime and tags on purpose; keep request-time APIs outside cached scopes unless the project uses private cache. + +Diagnose a failing fetch. Do not hide the cause with `force-dynamic`, `no-store`, or unrelated revalidation. ## Mutations -`'use server'` actions and `route.ts` are public endpoints. Verify the caller inside the function. After a successful write: `refresh()` from `next/cache` in a Server Action; `revalidatePath` from a route handler (or when cached path data must drop). Status: 401 unsigned, 403 signed-in without permission. Patterns: [handlers.md](handlers.md). +`'use server'` and `route.ts` are public. A layout or `proxy.ts` / `middleware.ts` check does not cover a direct POST. Mark intentionally public endpoints (webhooks, OAuth callbacks) and verify signatures/state there. + +Protected mutations, in order: authenticate → validate untrusted input → authorize the operation and referenced resources → write → invalidate affected data. Use the project's auth helper (and the auth skill when present). Add `@/lib/auth` only when that file already exists. + +- Route Handler: no session → `401`; session without permission → `403`; bad input → `400` / `422`; missing → `404`; conflict → `409` +- Server Action: stop before the write. Throw, `redirect`, or return the project's typed action state — match adjacent actions + +Invalidate **only the affected data**: + +- `updateTag` — Server Action expires tagged data immediately (read-your-own-writes) +- `revalidateTag` — tagged stale-while-revalidate (actions and handlers). Use the non-deprecated signature for the pinned Next version, not a profile copied from another repo +- `revalidatePath` — the dependency is the route. Valid in Server Actions and Route Handlers +- `refresh()` — Server Actions only. Refreshes the client router; it does not expire the server cache + +## Rewrites and Proxy + +Prefer `redirects()` / `rewrites()` in `next.config.ts` for declarative path, header, cookie, or query rules. Use `proxy.ts` for request-time logic that cannot be expressed there. + +On Next 16+, place `proxy.ts` at the same level as `app/` (`proxy.ts` or `src/proxy.ts`) and export `proxy`. Extend existing `middleware.ts` on Next 15; do not add a new one on Next 16. Locale interception: `i18n` skill when present. -## Proxy +## Done -Request rewrite or redirect: project-root `proxy.ts` with `export function proxy`. The file is not `middleware.ts`. Locale intercept: **Skill** `i18n`. +The route renders or the handler responds correctly for every case it owns. Protected mutations authorize, return the right status or action state, and invalidate only the data they changed. Independent fetches are not waterfalls. `fonts/` / `tokens/` paths are unchanged unless the task moved them. The project's lint and type-check commands pass. diff --git a/marketplace/system/nextjs/skills/nextjs/handlers.md b/marketplace/system/nextjs/skills/nextjs/handlers.md deleted file mode 100644 index 8fb4fbd..0000000 --- a/marketplace/system/nextjs/skills/nextjs/handlers.md +++ /dev/null @@ -1,48 +0,0 @@ -# Handlers - -`'use server'` actions and `route.ts` are public. A layout or `proxy.ts` check does not cover a direct POST. First lines: the **installed auth skill**’s server helper. Missing user → stop. Do not add `@/lib/auth` unless that file exists. - -## Server Action - -```ts -'use server' - -import { refresh } from 'next/cache' - -export async function createItem(formData: FormData) { - const userId = /* await the auth skill’s server helper */ - if (!userId) { - throw new Error('Unauthorized') - } - - // persist owned by userId - refresh() -} -``` - -`refresh()` only here — not in a route handler. Done when an unsigned call throws and a signed call writes, then `refresh()`. - -## Route handler - -```ts -import { NextResponse } from 'next/server' -import { revalidatePath } from 'next/cache' - -export async function DELETE() { - const userId = /* await the auth skill’s server helper */ - if (!userId) { - return NextResponse.json({ error: 'Unauthorized' }, { status: 401 }) - } - - const allowed = /* permission from that skill */ - if (!allowed) { - return NextResponse.json({ error: 'Forbidden' }, { status: 403 }) - } - - revalidatePath('/') - return NextResponse.json({ ok: true }) -} -``` - -- **401** — no session -- **403** — session, missing permission diff --git a/marketplace/system/shadcn-tailwind/.reforma-plugin/plugin.json b/marketplace/system/shadcn-tailwind/.reforma-plugin/plugin.json index 7cc693b..561c2e3 100644 --- a/marketplace/system/shadcn-tailwind/.reforma-plugin/plugin.json +++ b/marketplace/system/shadcn-tailwind/.reforma-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "shadcn-tailwind", - "description": "The UI kit the project is built on — components, forms, and Tailwind", + "description": "Skills and MCP that help build components with shadcn and Tailwind", "system": true, "logo": "assets/logo.png", "author": { diff --git a/marketplace/system/shadcn-tailwind/skills/shadcn/SKILL.md b/marketplace/system/shadcn-tailwind/skills/shadcn/SKILL.md index db724fb..90e0c1d 100644 --- a/marketplace/system/shadcn-tailwind/skills/shadcn/SKILL.md +++ b/marketplace/system/shadcn-tailwind/skills/shadcn/SKILL.md @@ -13,7 +13,7 @@ Starter already has `components.json`, Tailwind 4, shadcn v4 (Base UI), and Refo Official registry is the default. Other `@ns` kit registries only when that kit's card is installed — the kit **Install** hook writes `registries` in `components.json`. MCP reads every registry in that file. -Layout classes, `gap-*`, `size-*`, token CSS: **Skill** `tailwind`. +Layout classes, `gap-*`, `size-*`: **Skill** `tailwind`. Colors: **Skill** `tokens`. ## Find @@ -26,7 +26,7 @@ Prefer a matching local `components/ui/*` if it already exists. 1. **Bash:** `bunx shadcn add -y` (optional: `--dry-run` / `--diff` first). MCP `get_add_command_for_items` only returns the command — still run it. 2. If `package.json` / lockfile changed → **InstallDependencies**. -3. Read the added file. Match neighboring primitives — reuse their class patterns / compose with existing `Button` / `Input` / `Field`. `cn` from `@/lib/utils`. Colors: active collection CSS (`app/tokens/collections.json` → `active` → `file`), not `tokens/tailwind.css`. No raw hex. +3. Read the added file. Match neighboring primitives — reuse their class patterns / compose with existing `Button` / `Input` / `Field`. `cn` from `@/lib/utils`. Colors: **Skill** `tokens`. Icons: **Skill** `icons`. ## Compose diff --git a/marketplace/system/shadcn-tailwind/skills/tailwind/SKILL.md b/marketplace/system/shadcn-tailwind/skills/tailwind/SKILL.md index 19b9772..e3c22e7 100644 --- a/marketplace/system/shadcn-tailwind/skills/tailwind/SKILL.md +++ b/marketplace/system/shadcn-tailwind/skills/tailwind/SKILL.md @@ -3,36 +3,28 @@ name: tailwind disable-user-invocation: true description: >- Tailwind v4 layout and utilities on the Reforma starter. Use when writing or - editing className, spacing, size, or token CSS — not when adding a shadcn - primitive (Skill shadcn). + editing className, spacing, or size — not when adding a shadcn primitive + (Skill shadcn). --- # Tailwind -Starter is Tailwind **4** (`@tailwindcss/postcss`, no `tailwind.config.*`). `cn` is `import { cn } from '@/lib/utils'` (`clsx` + `tailwind-merge`). Fonts: **Skill** `fonts`. - -## Files - -`app/globals.css` only imports the two token sheets. Do not put `@theme` there. - -| Path | Role | -| --- | --- | -| `app/tokens/tailwind.css` | Framework bootstrap (`@import 'tailwindcss'`). `--color-*: initial` drops default palettes (`bg-blue-500` does not exist). Do not add design colors here. | -| `app/tokens/index.css` | Generated re-export of the active collection. Do not edit. | -| `app/tokens/collections.json` → `active` → `file` | Project tokens (`col_*.css`). Light in `@theme`, dark in `.dark`. | - -Pages: semantic utilities (`bg-background`, `text-muted-foreground`). Those map from `--color-*` in the collection. No raw hex. New color: add `--color-` in the collection file (both `@theme` and `.dark` if it must switch). +Starter is Tailwind **4** (`@tailwindcss/postcss`, no `tailwind.config.*`). +`cn` is `import { cn } from '@/lib/utils'` (`clsx` + `tailwind-merge`). Fonts: +**Skill** `fonts`. Color and collection CSS: **Skill** `tokens`. ## Layout -`flex` + `gap-*`, not `space-y-*` / `space-x-*`. Equal width and height → `size-*`. Ellipsis → `truncate`. Conditionals → `cn()`. +`flex` + `gap-*`, not `space-y-*` / `space-x-*`. Equal width and height → +`size-*`. Ellipsis → `truncate`. Conditionals → `cn()`. -`className` on shadcn primitives is layout (`max-w-md`, `mx-auto`, `mt-4`). Variants and semantic tokens change look. No `dark:bg-gray-950` — `.dark` in the collection already switches. +`className` on shadcn primitives is layout (`max-w-md`, `mx-auto`, `mt-4`). +Variants and semantic tokens change look. ```tsx -import { cn } from '@/lib/utils' +import { cn } from "@/lib/utils"; -
+
-
+
; ``` diff --git a/marketplace/system/visuals/.reforma-plugin/plugin.json b/marketplace/system/visuals/.reforma-plugin/plugin.json new file mode 100644 index 0000000..ef0aa8e --- /dev/null +++ b/marketplace/system/visuals/.reforma-plugin/plugin.json @@ -0,0 +1,10 @@ +{ + "name": "visuals", + "description": "Type, color, marks, and icons for this product", + "system": true, + "logo": "assets/logo.svg", + "interface": { + "displayName": "Visuals", + "brandColor": "#000000" + } +} diff --git a/marketplace/system/fonts/assets/logo.svg b/marketplace/system/visuals/assets/logo.svg similarity index 100% rename from marketplace/system/fonts/assets/logo.svg rename to marketplace/system/visuals/assets/logo.svg diff --git a/marketplace/system/fonts/skills/fonts/SKILL.md b/marketplace/system/visuals/skills/fonts/SKILL.md similarity index 100% rename from marketplace/system/fonts/skills/fonts/SKILL.md rename to marketplace/system/visuals/skills/fonts/SKILL.md diff --git a/marketplace/system/visuals/skills/icons/SKILL.md b/marketplace/system/visuals/skills/icons/SKILL.md new file mode 100644 index 0000000..963c8ae --- /dev/null +++ b/marketplace/system/visuals/skills/icons/SKILL.md @@ -0,0 +1,22 @@ +--- +name: icons +disable-user-invocation: true +description: >- + Picks UI chrome glyphs from the project icon pack. Use when adding a + chevron, search, close, spinner, status, or other interface icon. +--- + +# Icons + +Chevrons, search, close, spinners, status, and other chrome: an **icon pack +already in the project**. Starter is Lucide — +`import { SearchIcon } from 'lucide-react'` (suffix `Icon`, same as +`components/ui`). Pack name: `components.json` → `iconLibrary`. A different +pack already in `package.json` — that import, not a second pack. + +A new pack only when the user named it → **InstallDependencies**. No inline SVG +for a glyph a pack already has. No icon CDNs. + +App mark, favicon, or a drawing that is not chrome: **Skill** `svg`. + +Done when the glyph is an import from that pack. diff --git a/marketplace/ui/svg/skills/svg/SKILL.md b/marketplace/system/visuals/skills/svg/SKILL.md similarity index 57% rename from marketplace/ui/svg/skills/svg/SKILL.md rename to marketplace/system/visuals/skills/svg/SKILL.md index 8b87da5..c9e3e79 100644 --- a/marketplace/ui/svg/skills/svg/SKILL.md +++ b/marketplace/system/visuals/skills/svg/SKILL.md @@ -2,27 +2,24 @@ name: svg description: >- Crafts an app mark, favicon, or inline SVG illustration. Use when the user - wants a logo, favicon, or a custom SVG drawing. UI chrome icons stay on the - project's icon pack (Lucide on the starter). + wants a logo, favicon, or a custom SVG drawing. --- # SVG -## UI icons - -Chevrons, search, close, spinners, status, and other chrome: an **icon pack already in the project**. Starter is Lucide — `import { SearchIcon } from 'lucide-react'` (suffix `Icon`, same as `components/ui`). Pack name: `components.json` → `iconLibrary`. A different pack already in `package.json` — that import, not a second pack. - -A new pack only when the user named it → **InstallDependencies**. No inline SVG for a glyph a pack already has. No icon CDNs. - -Done when the glyph is an import from that pack. +UI chrome icons: **Skill** `icons`. ## Mark -Favicon, app symbol, or a drawing that is not chrome. Photo-like art: installed Recraft / Quiver skill. +Favicon, app symbol, or a drawing that is not chrome. Photo-like art: installed +Recraft / Quiver skill. -Geometric `path` / `circle` / `rect`. `viewBox` set. `fill="currentColor"` (or a token class). No `` — letters in the header are HTML + **Skill** `fonts`. No raw hex unless the mark must stay off-token. +Geometric `path` / `circle` / `rect`. `viewBox` set. `fill="currentColor"` (or +a token class). No `` — letters in the header are HTML + **Skill** +`fonts`. Color values: **Skill** `tokens`. -`d` commands: **uppercase = absolute**, lowercase = relative. Each command takes exactly those args. +`d` commands: **uppercase = absolute**, lowercase = relative. Each command +takes exactly those args. | Cmd | Job | Args | | --- | ---------------- | --------------------------------- | @@ -37,9 +34,11 @@ Geometric `path` / `circle` / `rect`. `viewBox` set. `fill="currentColor"` (or a | `A` | Arc | `rx ry x-rot large-arc sweep x y` | | `Z` | Close | — | -`A`: `large-arc` 0 = short, 1 = >180°. `sweep` 0 = CCW, 1 = CW. `C`: first control = leave, second = arrive. +`A`: `large-arc` 0 = short, 1 = >180°. `sweep` 0 = CCW, 1 = CW. `C`: first +control = leave, second = arrive. -Tab icon: `app/icon.svg`. In-app: `components/logo.tsx` with `cn('size-8', className)`. +Tab icon: `app/icon.svg`. In-app: `components/logo.tsx` with +`cn('size-8', className)`. ```tsx import { cn } from "@/lib/utils"; @@ -57,4 +56,6 @@ Done when it reads at **16px** and at **512px**. ## Motion -Property animation (draw-on, SMIL, morph): [animate.md](animate.md). Page choreography: installed **Skill** `motion` / `gsap`. SVG timeline editor: installed **Skill** `svgator`. +Property animation (draw-on, SMIL, morph): [animate.md](animate.md). Page +choreography: installed **Skill** `motion` / `gsap`. SVG timeline editor: +installed **Skill** `svgator`. diff --git a/marketplace/ui/svg/skills/svg/animate.md b/marketplace/system/visuals/skills/svg/animate.md similarity index 100% rename from marketplace/ui/svg/skills/svg/animate.md rename to marketplace/system/visuals/skills/svg/animate.md diff --git a/marketplace/system/visuals/skills/tokens/SKILL.md b/marketplace/system/visuals/skills/tokens/SKILL.md new file mode 100644 index 0000000..831d0d1 --- /dev/null +++ b/marketplace/system/visuals/skills/tokens/SKILL.md @@ -0,0 +1,35 @@ +--- +name: tokens +disable-user-invocation: true +description: >- + Wires project color and theme tokens. Use when adding or changing a color, + palette, dark mode, radius, or other --color-* / collection CSS. +--- + +# Tokens + +Read `app/tokens/collections.json` → `active` → `file`. That `col_*.css` is +the only file to edit for design values. + +| Path | Role | +| ------------------------- | ---------------------------------------------- | +| `app/tokens/tailwind.css` | Framework bootstrap. Do not add design colors. | +| `app/tokens/index.css` | Generated re-export. Do not edit. | +| `app/globals.css` | Imports the two sheets. No `@theme` here. | + +Light lives in `@theme`. Dark overrides in `.dark`. Pages use semantic +utilities (`bg-background`, `text-muted-foreground`) — they map from +`--color-*`. No raw hex in `className`. No `dark:bg-gray-950`. + +Canonical name is `--color-`. shadcn short aliases stay in lockstep: + +```css +--color-brand: oklch(0.55 0.12 250); +--brand: var(--color-brand); +``` + +New color: both `@theme` and `.dark` if it must switch. Match neighboring +`oklch(...)`. Font roles: **Skill** `fonts`. + +Done when the page uses the utility or `var(--color-*)` and the collection +file holds the value. diff --git a/marketplace/ui/21st/assets/logo.png b/marketplace/ui/21st/assets/logo.png index 45d9d51d7cb18e9d079e2cb4d20eb5b30f8795a6..91eb150967919f6f18b66943b00e2da619d265d2 100644 GIT binary patch literal 741 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7xzrU|Qqp;uunK>+RgVSs{rcuHV10 zPhrtH;LtGJ{yodnE_MZD%<&)J}47I&jTkdEwXiSjE9ynj?TunSqfQ z_~rjQb{miA?|qZ+Oeslkng4dxlJfsQ-W*Q%6!r{nQ#l|}e!*^2?ZnuVd$Sw#TdKD+ zEZh2ri-83@bYSpm0EQKIXpqDx7tj`GQ@Z5mgtqEc-)1hk9NaH|YoAJA`}rpauK2Rp zXYTmVRTO#2d*Aui>;{$P8UNxv8XC?1PhB#3%SIi>Nq7F4rDxU!GpSf=zqHKN7HQa_ zFUxqOHj_!<`%xfXstgqHWq7nN0*FgkfC8Kjcf`3J?o96k3Yai<{7wSmOM*ZFHHS&6 zp0lTH34p6S@Cr%WgeN^q#HXx6$QmrVTAT4UpUYs=j{E-E-!&X2DNoww{%xn8%1*VH zz0Zn&|5#`s`TFhS=VzzAU7W-5GWAg3f;?ahC=i5a+#7gLUC=!sm8v0j;9K;m15yvH zmV%hIUI*7Vu$~IkX?Pp!d3wr{A65--mrptuJna#;FVdQ&MBb@ E0G=r(wg3PC literal 3359 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 - - - diff --git a/marketplace/workspace/github-mcp/.reforma-plugin/plugin.json b/marketplace/workspace/github-mcp/.reforma-plugin/plugin.json index f7b9f5c..064eb23 100644 --- a/marketplace/workspace/github-mcp/.reforma-plugin/plugin.json +++ b/marketplace/workspace/github-mcp/.reforma-plugin/plugin.json @@ -9,7 +9,7 @@ "mcpServers": "./mcp.json", "interface": { "displayName": "GitHub", - "brandColor": "#181717", + "brandColor": "#FFFFFF" "logo": "assets/logo.svg" } } diff --git a/marketplace/workspace/github-mcp/assets/logo.svg b/marketplace/workspace/github-mcp/assets/logo.svg index 400b0ca..987a617 100644 --- a/marketplace/workspace/github-mcp/assets/logo.svg +++ b/marketplace/workspace/github-mcp/assets/logo.svg @@ -1,3 +1,3 @@ - + From 484ba4f1ad24414e803af15e53bbfadf28066985 Mon Sep 17 00:00:00 2001 From: Maksim Kachurin Date: Fri, 28 Aug 2026 18:42:55 -0300 Subject: [PATCH 3/3] feat: agent discover tags and shelf moves --- README.md | 4 ++-- marketplace.json | 20 +++++++++---------- .../booking/.reforma-plugin/plugin.json | 0 .../booking/assets/logo.svg | 0 .../booking/skills/add-booking/SKILL.md | 0 .../.reforma-plugin/plugin.json | 3 +++ .../i18n/.reforma-plugin/plugin.json | 0 .../{ui => playbooks}/i18n/assets/logo.svg | 0 .../i18n/skills/i18n/SKILL.md | 0 .../.reforma-plugin/plugin.json | 4 ++++ .../ui/aceternity/.reforma-plugin/plugin.json | 4 ++++ .../ui/coss/.reforma-plugin/plugin.json | 4 ++++ .../ui/flexnative/.reforma-plugin/plugin.json | 4 ++++ .../ui/magic-ui/.reforma-plugin/plugin.json | 4 ++++ .../ui/tailark/.reforma-plugin/plugin.json | 4 ++++ .../context7/.reforma-plugin/plugin.json | 6 +++++- .../github-mcp/.reforma-plugin/plugin.json | 7 +++++-- 17 files changed, 49 insertions(+), 15 deletions(-) rename marketplace/{scheduling => playbooks}/booking/.reforma-plugin/plugin.json (100%) rename marketplace/{scheduling => playbooks}/booking/assets/logo.svg (100%) rename marketplace/{scheduling => playbooks}/booking/skills/add-booking/SKILL.md (100%) rename marketplace/{ui => playbooks}/i18n/.reforma-plugin/plugin.json (100%) rename marketplace/{ui => playbooks}/i18n/assets/logo.svg (100%) rename marketplace/{ui => playbooks}/i18n/skills/i18n/SKILL.md (100%) diff --git a/README.md b/README.md index 6f3b20e..a98f61a 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,8 @@ Marketplace plugins for Reforma. Each plugin is a folder with `.reforma-plugin/p | react-best-practices | [React Best Practices](marketplace/playbooks/react-best-practices) | Vercel | Playbooks | Keep the app fast — React and Next.js performance patterns | | web-design-guidelines | [Web Design Guidelines](marketplace/playbooks/web-design-guidelines) | Vercel | Playbooks | Catch accessibility, form, and focus issues before they ship | | frontend-design | [Frontend Design](marketplace/playbooks/frontend-design) | Anthropic | Playbooks | Give the UI a visual identity — palette, type, and layout for this product | +| booking | [Booking](marketplace/playbooks/booking) | Reforma | Playbooks | Book a call, pick a slot, or show an event calendar — no third-party account | +| i18n | [i18n](marketplace/playbooks/i18n) | Reforma | Playbooks | Multiple languages — translated copy and a language switcher for the app | | shadcn-tailwind | [shadcn / Tailwind](marketplace/system/shadcn-tailwind) | shadcn | System | Skills and MCP that help build components with shadcn and Tailwind. | | visuals | [Visuals](marketplace/system/visuals) | Reforma | System | Type, color, marks, and icons for this product | | nextjs | [Next.js](marketplace/system/nextjs) | Reforma | System | App Router — routes, Server Actions, caching, and proxy.ts | @@ -24,7 +26,6 @@ Marketplace plugins for Reforma. Each plugin is a folder with `.reforma-plugin/p | tailark | [Tailark](marketplace/ui/tailark) | Tailark | UI | Marketing landing blocks and pages — heroes, pricing, footers | | aceternity | [Aceternity](marketplace/ui/aceternity) | Aceternity | UI | Motion-heavy blocks and visual effects for landing pages | | 21st | [21st](marketplace/ui/21st) | 21st | UI | A living library of React components, templates, and themes. Add them to the project, or generate new UI. | -| i18n | [i18n](marketplace/ui/i18n) | Reforma | UI | Multiple languages — translated copy and a language switcher for the app | | context7 | [Context7](marketplace/workspace/context7) | Reforma | Workspace | Current docs and examples for the libraries in the project | | google-drive | [Google Drive](marketplace/files/google-drive) | Reforma | Files | Docs and files in Google Drive — find them, upload drafts, share from the project | | notion-workspace | [Notion](https://github.com/makenotion/cursor-notion-plugin) | Notion Labs | Workspace | The team’s Notion — notes, pages, and databases in the project | @@ -61,7 +62,6 @@ Marketplace plugins for Reforma. Each plugin is a folder with `.reforma-plugin/p | resend | [Resend](https://github.com/resend/resend-skills) | Resend | Messaging | Send email from the app — transactional mail and templates | | cal-com | [Cal.com](marketplace/scheduling/cal-com) | Cal.com | Scheduling | Let people book time — event types and a scheduler in the app | | calendly | [Calendly](marketplace/scheduling/calendly) | Calendly | Scheduling | Scheduling links and a Calendly embed so people book themselves | -| booking | [Booking](marketplace/scheduling/booking) | Reforma | Scheduling | Book a call, pick a slot, or show an event calendar — no third-party account | | figma | [Figma](marketplace/design/figma) | Figma | Design | Turn Figma frames into code for the project | | google-maps | [Google Maps](marketplace/maps/google-maps) | Google | Maps | Maps in the app — places, routes, and what’s nearby | | mapbox | [Mapbox](https://github.com/mapbox/mapbox-agent-skills) | Mapbox | Maps | Custom maps — your style, search, and location in the app | diff --git a/marketplace.json b/marketplace.json index 1c51bbe..a3ccd6d 100644 --- a/marketplace.json +++ b/marketplace.json @@ -63,6 +63,14 @@ { "name": "frontend-design", "source": "./marketplace/playbooks/frontend-design" + }, + { + "name": "booking", + "source": "./marketplace/playbooks/booking" + }, + { + "name": "i18n", + "source": "./marketplace/playbooks/i18n" } ] }, @@ -114,10 +122,6 @@ "displayName": "Remotion", "description": "Videos and motion graphics, written in React", "brandColor": "#000000" - }, - { - "name": "i18n", - "source": "./marketplace/ui/i18n" } ] }, @@ -235,10 +239,6 @@ { "name": "calendly", "source": "./marketplace/scheduling/calendly" - }, - { - "name": "booking", - "source": "./marketplace/scheduling/booking" } ] }, @@ -379,7 +379,7 @@ "source": "./marketplace/workspace/context7" }, { - "name": "notion-workspace", + "name": "notion", "source": "https://github.com/makenotion/cursor-notion-plugin/tree/cf1324609edba6d617164f1dec138aeb43f26735", "displayName": "Notion", "description": "The team’s Notion — notes, pages, and databases in the project", @@ -397,7 +397,7 @@ "source": "./marketplace/workspace/slack" }, { - "name": "github-mcp", + "name": "github", "source": "./marketplace/workspace/github-mcp" } ] diff --git a/marketplace/scheduling/booking/.reforma-plugin/plugin.json b/marketplace/playbooks/booking/.reforma-plugin/plugin.json similarity index 100% rename from marketplace/scheduling/booking/.reforma-plugin/plugin.json rename to marketplace/playbooks/booking/.reforma-plugin/plugin.json diff --git a/marketplace/scheduling/booking/assets/logo.svg b/marketplace/playbooks/booking/assets/logo.svg similarity index 100% rename from marketplace/scheduling/booking/assets/logo.svg rename to marketplace/playbooks/booking/assets/logo.svg diff --git a/marketplace/scheduling/booking/skills/add-booking/SKILL.md b/marketplace/playbooks/booking/skills/add-booking/SKILL.md similarity index 100% rename from marketplace/scheduling/booking/skills/add-booking/SKILL.md rename to marketplace/playbooks/booking/skills/add-booking/SKILL.md diff --git a/marketplace/playbooks/frontend-design/.reforma-plugin/plugin.json b/marketplace/playbooks/frontend-design/.reforma-plugin/plugin.json index 8981273..91f748f 100644 --- a/marketplace/playbooks/frontend-design/.reforma-plugin/plugin.json +++ b/marketplace/playbooks/frontend-design/.reforma-plugin/plugin.json @@ -9,6 +9,9 @@ "homepage": "https://github.com/anthropics/skills/tree/main/skills/frontend-design", "repository": "https://github.com/anthropics/skills", "license": "Apache-2.0", + "agent": { + "discover": true + }, "interface": { "displayName": "Frontend Design", "brandColor": "#000000" diff --git a/marketplace/ui/i18n/.reforma-plugin/plugin.json b/marketplace/playbooks/i18n/.reforma-plugin/plugin.json similarity index 100% rename from marketplace/ui/i18n/.reforma-plugin/plugin.json rename to marketplace/playbooks/i18n/.reforma-plugin/plugin.json diff --git a/marketplace/ui/i18n/assets/logo.svg b/marketplace/playbooks/i18n/assets/logo.svg similarity index 100% rename from marketplace/ui/i18n/assets/logo.svg rename to marketplace/playbooks/i18n/assets/logo.svg diff --git a/marketplace/ui/i18n/skills/i18n/SKILL.md b/marketplace/playbooks/i18n/skills/i18n/SKILL.md similarity index 100% rename from marketplace/ui/i18n/skills/i18n/SKILL.md rename to marketplace/playbooks/i18n/skills/i18n/SKILL.md diff --git a/marketplace/playbooks/react-best-practices/.reforma-plugin/plugin.json b/marketplace/playbooks/react-best-practices/.reforma-plugin/plugin.json index 33dbc53..bff8f52 100644 --- a/marketplace/playbooks/react-best-practices/.reforma-plugin/plugin.json +++ b/marketplace/playbooks/react-best-practices/.reforma-plugin/plugin.json @@ -9,6 +9,10 @@ "homepage": "https://github.com/vercel-labs/agent-skills/tree/main/skills/react-best-practices", "repository": "https://github.com/vercel-labs/agent-skills", "license": "MIT", + "agent": { + "discover": true, + "installApproval": false + }, "interface": { "displayName": "React Best Practices", "brandColor": "#000000" diff --git a/marketplace/ui/aceternity/.reforma-plugin/plugin.json b/marketplace/ui/aceternity/.reforma-plugin/plugin.json index c8cb3bc..b65abda 100644 --- a/marketplace/ui/aceternity/.reforma-plugin/plugin.json +++ b/marketplace/ui/aceternity/.reforma-plugin/plugin.json @@ -6,6 +6,10 @@ "name": "Aceternity" }, "homepage": "https://ui.aceternity.com", + "agent": { + "discover": true, + "installApproval": false + }, "interface": { "displayName": "Aceternity", "brandColor": "#000000", diff --git a/marketplace/ui/coss/.reforma-plugin/plugin.json b/marketplace/ui/coss/.reforma-plugin/plugin.json index e6d5ea1..9cf1c12 100644 --- a/marketplace/ui/coss/.reforma-plugin/plugin.json +++ b/marketplace/ui/coss/.reforma-plugin/plugin.json @@ -8,6 +8,10 @@ "homepage": "https://coss.com/ui", "repository": "https://github.com/cosscom/coss", "license": "MIT", + "agent": { + "discover": true, + "installApproval": false + }, "interface": { "displayName": "coss", "brandColor": "#111111" diff --git a/marketplace/ui/flexnative/.reforma-plugin/plugin.json b/marketplace/ui/flexnative/.reforma-plugin/plugin.json index b4c842e..65bf935 100644 --- a/marketplace/ui/flexnative/.reforma-plugin/plugin.json +++ b/marketplace/ui/flexnative/.reforma-plugin/plugin.json @@ -8,6 +8,10 @@ "homepage": "https://ui.flexnative.com", "repository": "https://github.com/felipemenezes098/ui-flx", "license": "AGPL-3.0", + "agent": { + "discover": true, + "installApproval": false + }, "interface": { "displayName": "Flexnative", "brandColor": "#0A0A0A", diff --git a/marketplace/ui/magic-ui/.reforma-plugin/plugin.json b/marketplace/ui/magic-ui/.reforma-plugin/plugin.json index ce22224..bb7cb59 100644 --- a/marketplace/ui/magic-ui/.reforma-plugin/plugin.json +++ b/marketplace/ui/magic-ui/.reforma-plugin/plugin.json @@ -8,6 +8,10 @@ "homepage": "https://magicui.design", "repository": "https://github.com/magicuidesign/magicui", "license": "MIT", + "agent": { + "discover": true, + "installApproval": false + }, "interface": { "displayName": "Magic UI", "brandColor": "#9E7AFF" diff --git a/marketplace/ui/tailark/.reforma-plugin/plugin.json b/marketplace/ui/tailark/.reforma-plugin/plugin.json index 33ec159..7739fc3 100644 --- a/marketplace/ui/tailark/.reforma-plugin/plugin.json +++ b/marketplace/ui/tailark/.reforma-plugin/plugin.json @@ -6,6 +6,10 @@ "name": "Tailark" }, "homepage": "https://tailark.com", + "agent": { + "discover": true, + "installApproval": false + }, "interface": { "displayName": "Tailark", "brandColor": "#9FA87F", diff --git a/marketplace/workspace/context7/.reforma-plugin/plugin.json b/marketplace/workspace/context7/.reforma-plugin/plugin.json index 0c78bd6..a87f455 100644 --- a/marketplace/workspace/context7/.reforma-plugin/plugin.json +++ b/marketplace/workspace/context7/.reforma-plugin/plugin.json @@ -7,5 +7,9 @@ "brandColor": "#000000", "displayName": "Context7" }, - "mcpServers": "./mcp.json" + "mcpServers": "./mcp.json", + "agent": { + "discover": true, + "installApproval": false + } } diff --git a/marketplace/workspace/github-mcp/.reforma-plugin/plugin.json b/marketplace/workspace/github-mcp/.reforma-plugin/plugin.json index 064eb23..8d01a27 100644 --- a/marketplace/workspace/github-mcp/.reforma-plugin/plugin.json +++ b/marketplace/workspace/github-mcp/.reforma-plugin/plugin.json @@ -1,5 +1,5 @@ { - "name": "github-mcp", + "name": "github", "description": "GitHub in the project — issues, pull requests, and the repo", "author": { "name": "GitHub", @@ -7,9 +7,12 @@ }, "logo": "assets/logo.svg", "mcpServers": "./mcp.json", + "agent": { + "discover": true + }, "interface": { "displayName": "GitHub", - "brandColor": "#FFFFFF" + "brandColor": "#FFFFFF", "logo": "assets/logo.svg" } }