diff --git a/.agents/skills/vite-plugin-rsc/SKILL.md b/.agents/skills/vite-plugin-rsc/SKILL.md
new file mode 100644
index 00000000..25977a3b
--- /dev/null
+++ b/.agents/skills/vite-plugin-rsc/SKILL.md
@@ -0,0 +1,1315 @@
+# @vitejs/plugin-rsc — Framework Author Guide
+
+Comprehensive architecture reference for building RSC-based frameworks on top of
+`@vitejs/plugin-rsc`. Covers philosophy, the three-environment model, build pipeline,
+entry points, client-side navigation, server functions, CSS, HMR, and production deployment.
+
+Source: https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-rsc
+
+## Philosophy
+
+The plugin is **framework-agnostic** and **runtime-agnostic**. It provides the bundler
+plumbing for React Server Components (reference discovery, directive transforms, multi-environment
+builds, RSC runtime re-exports) but does not impose routing, data loading, or navigation patterns.
+Framework authors build those on top.
+
+The plugin's responsibilities:
+- Transform `"use client"` modules into client reference proxies in the RSC environment
+- Transform `"use server"` modules into server reference proxies in client/SSR environments
+- Manage the multi-pass build pipeline (scan + real builds)
+- Provide cross-environment module loading (`import.meta.viteRsc.loadModule`)
+- Handle CSS code-splitting and injection across environments
+- Provide RSC runtime APIs via `@vitejs/plugin-rsc/rsc`, `/ssr`, `/browser`
+- Fire `rsc:update` HMR events when server code changes
+
+The framework's responsibilities:
+- Define the three entry points (RSC, SSR, browser)
+- Implement routing and URL-based rendering
+- Implement client-side navigation (link interception, RSC re-fetching)
+- Handle server action dispatch (progressive enhancement, post-hydration calls)
+- Handle error boundaries and loading states
+- Choose SSR strategy (streaming, static, no-SSR)
+
+
+## The Three Environments
+
+Vite RSC projects run across three separate Vite environments, each with its own module
+graph, transforms, and build output. They share a single Node.js process (no workers).
+
+```
+┌──────────────────────────────────────────────────────────────────┐
+│ Single Vite Process │
+│ │
+│ ┌─────────────────────┐ ┌─────────────────────┐ │
+│ │ RSC environment │ │ SSR environment │ │
+│ │ (react-server cond) │─────>│ (standard React) │ │
+│ │ │ RSC │ │ │
+│ │ renderToReadable │stream│ createFromReadable │ │
+│ │ Stream() │ │ Stream() │ │
+│ │ │ │ renderToReadable │ │
+│ │ Runs server │ │ Stream() [HTML] │ │
+│ │ components + │ │ │ │
+│ │ server actions │ │ Produces HTML + │ │
+│ │ │ │ embeds flight data │ │
+│ └─────────────────────┘ └─────────────────────┘ │
+│ │ │
+│ │ HTML +
+// Client converts to ReadableStream:
+const rscPayload = createFromReadableStream(
+ new ReadableStream({
+ start(controller) {
+ (self.__bun_f ||= []).forEach((__bun_f.push = handleChunk))
+ document.addEventListener('DOMContentLoaded', () => controller.close())
+ },
+ }),
+)
+```
+
+This is similar to spiceflow's `rsc-html-stream` approach but with a different encoding — Bun uses `__bun_f` array with single-quoted string escaping, while spiceflow uses `rsc-html-stream/client` with `` and `