← ClaudeAtlas

withvibe-plugin-creatorlisted

Help a developer build a new WithVibe plugin from scratch — manifest.yaml, Dockerfile, HTTP server with health/UI/MCP endpoints, optional shared-postgres storage. Trigger when the user asks to build, scaffold, create, or write a WithVibe plugin (e.g. "I want to build a plugin for withvibe", "scaffold a withvibe plugin", "how do I add a plugin to withvibe", "write a roadmap-like plugin for X"). Walks through scope decisions (env vs workspace), storage, UI, MCP tools, builds the container, and installs it via the workspace admin Plugins page.
withvibe/withvibe-skills · ★ 0 · DevOps & Infrastructure · score 72
Install: claude install-skill withvibe/withvibe-skills
# Build a WithVibe plugin You're helping a developer create a new WithVibe plugin. A WithVibe plugin is **a single Docker container** the platform spawns according to a `manifest.yaml`. The container exposes HTTP endpoints for health, optional UI, and optional MCP tools the AI orchestrator can call. The reference implementation is the [withvibe-roadmap plugin](https://github.com/withvibe/withvibe-roadmap) — read it before doing anything bespoke. It's ~250 lines and exercises every plugin surface (env scope, shared-postgres, htmx UI, MCP). Your job: ask just enough questions to lock the shape, scaffold the files, build the image, and walk the user through installing it. ## The contract — what a WithVibe plugin is A plugin is an OCI image plus a manifest. WithVibe handles spawning, networking, proxying, and storage provisioning; the plugin just serves HTTP on port `8080`. ### `manifest.yaml` — the install input The entire install input is one YAML file. Users paste it into **Plugins → Install plugin** in the workspace admin UI. ```yaml id: withvibe.<name> # reverse-DNS-ish; becomes URL + MCP tool prefix name: <Display Name> description: <one-line summary shown in admin UI> version: 1.0.0 icon: <lucide-icon-name> # e.g. list-todo, calendar, sticky-note image: local/<name>:1.0 # OCI ref the platform pulls/locates scope: env # see "Scope" below storage: # omit if stateless kind: shared-postgres ui: