Interactive CLI to scaffold an .opencode/ folder with frameworks, MCP tools, and skills for any project.
Works in new or existing repos.
npx opcupRun it in any project directory — it prompts you to select frameworks, MCP tools, and skills.
A .opencode/ folder is generated automatically.
.opencode/
├── opencode.json # plugins + MCP config
├── package.json # dependencies
├── .gitignore # bun.lock, node_modules, token files
├── .npmrc # package-lock=false
└── commands/ # 34 Svelte + 3 generic skills
OpenCode picks these up automatically.
No manual setup needed.
| Category | Options |
|---|---|
| Frameworks | Svelte 5 / SvelteKit — @sveltejs/opencode plugin + 34 skills |
| MCP Tools | Sanity (mcp.sanity.io) |
| Generic Skills | Pure Commit (auto-group commits), Env Safety (secrets), Docs Conventions |
| Skill | Description |
|---|---|
purecommit.md |
Auto-group changed files by topic into logical commits |
env.md |
Environment variable safety — never expose secrets in terminal output |
docs.md |
Writing documentation guidelines — numbered headings, Why/What/How code blocks |
When Svelte is selected, 34 command files are generated covering the full Svelte 5 + SvelteKit API:
| Skill | Topics |
|---|---|
svelte.md |
Runes, routing, data loading, forms, SvelteKit |
explicit-env-vars.md |
$app/env/private, $app/env/public, src/env.ts |
attach.md |
{@attach ...} — modern replacement for use:action |
function-bindings.md |
bind:value={get, set} — function bindings |
parallel-loading.md |
Data loading, invalidation, getRequestEvent |
error-handling.md |
handleError, handleValidationError |
loading-states.md |
$effect.pending(), settled(), tick() |
reactive-classes.md |
SvelteMap, SvelteSet, SvelteURL, MediaQuery |
hydratable-imperative.md |
hydratable(), mount(), hydrate(), fork() |
images.md |
@sveltejs/enhanced-img, CDN images, LCP best practices |
context-state.md |
createContext(), snapshots, {#key} blocks |
motion-transitions.md |
Spring, Tween, 8 built-in transitions, easing |
template-styling.md |
Declaration tags, svelte:* elements, scoped/global styles |
typescript-svelte.md |
Generic $props, Component/ComponentProps types |
remote-fns-advanced.md |
query.batch, query.live, single-flight mutations |
platform.md |
Accessibility, icons, auth, service workers, observability |
async-svelte.md |
await in components, synchronized updates, $state.eager |
remote-functions.md |
Full remote functions: query, form, command, prerender |
testing.md |
Vitest, Playwright, mount(), flushSync() |
custom-elements.md |
Web components, $host, shadow modes |
performance.md |
Waterfalls, preloading, optimization |
packaging.md |
@sveltejs/package, exports map, TypeScript |
adapters.md |
Node, Cloudflare, Netlify, Vercel deployment |
glossary.md |
CSR, SSR, SSG, hydration, ISR, edge |
debugging.md |
VS Code, Chrome DevTools breakpoints |
compiler-errors.md |
Complete error code reference |
runtime-errors.md |
All runtime errors and warnings |
type-defs.md |
Full @sveltejs/kit TypeScript API reference |
faq.md |
Svelte + SvelteKit troubleshooting |
compiler-warnings.md |
A11y checks, CSS warnings, deprecated features |
svelte-5-migration.md |
Upgrade guide: Svelte 4 → 5 |
browser-support.md |
Minimum browser versions |
svelte-events.md |
on() from svelte/events for event delegation |
svelte-easing.md |
30 easing functions for custom transitions |
svelte-all.md |
Meta-command — loads all 34 files at once |
Use /svelte in OpenCode for quick reference, or /svelte-all to load the complete knowledge base.
If .opencode/ already exists, you can choose how to proceed:
| Mode | Behavior |
|---|---|
| Merge | Adds new skills without touching your existing commands, opencode.json, or package.json. Safe for adding to a configured project. |
| Overwrite | Wipes commands/ and tokens/ completely, then regenerates from your new selection. Use when you want a clean slate. |
opencode.json and package.json are always regenerated to match your current selection — stale plugins and MCP configs are cleaned up.
- Node.js 20+
MIT © robots4life