AI SDK
vercel-labs/ai-facts
Answer questions about the AI SDK and help build AI-powered features.
React Server Components, Suspense boundaries, streaming SSR, partial prerendering patterns for Next.js App Router.
$ npx skills add vibeeval/vibecosystem --skill server-components -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install vibeeval/vibecosystem server-components --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/vibeeval/vibecosystem.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/server-components .claude/skills/server-components && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "server-components" agent skill from https://github.com/vibeeval/vibecosystem/tree/main/skills/server-components into .claude/skills/server-components/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "server-components", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/vibeeval/vibecosystem/tree/main/skills/server-componentsType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add vibeeval/vibecosystem --skill server-components -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install vibeeval/vibecosystem server-components --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/vibeeval/vibecosystem.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/server-components .agents/skills/server-components && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "server-components" agent skill from https://github.com/vibeeval/vibecosystem/tree/main/skills/server-components into .agents/skills/server-components/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "server-components", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add vibeeval/vibecosystem --skill server-components -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install vibeeval/vibecosystem server-components --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/vibeeval/vibecosystem.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/server-components .cursor/skills/server-components && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "server-components" agent skill from https://github.com/vibeeval/vibecosystem/tree/main/skills/server-components into .cursor/skills/server-components/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "server-components", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/vibeeval/vibecosystem.git --path skills/server-components--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add vibeeval/vibecosystem --skill server-components -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install vibeeval/vibecosystem server-components --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/vibeeval/vibecosystem.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/server-components .gemini/skills/server-components && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "server-components" agent skill from https://github.com/vibeeval/vibecosystem/tree/main/skills/server-components into .gemini/skills/server-components/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "server-components", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install vibeeval/vibecosystem server-componentsInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add vibeeval/vibecosystem --skill server-components -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/vibeeval/vibecosystem.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/server-components .github/skills/server-components && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "server-components" agent skill from https://github.com/vibeeval/vibecosystem/tree/main/skills/server-components into .github/skills/server-components/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "server-components", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add vibeeval/vibecosystem --skill server-components -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install vibeeval/vibecosystem server-components --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/vibeeval/vibecosystem.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/server-components .opencode/skills/server-components && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "server-components" agent skill from https://github.com/vibeeval/vibecosystem/tree/main/skills/server-components into .opencode/skills/server-components/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "server-components", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
server-componentsReact Server Components, Suspense boundaries, streaming SSR, partial prerendering patterns for Next.js App Router.
Server Components is an agent skill from vibeeval/vibecosystem. React Server Components, Suspense boundaries, streaming SSR, partial prerendering patterns for Next.js App Router.
Its SKILL.md is about 2.3k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It works with React and Next.js. The repository describes itself as: AI software team for Claude Code - 138 agents, 295 skills, 73 hooks. Self-learning, multi-agent swarm, autonomous skill evolution. The licence is MIT.
Read from SKILL.md and the folder at commit 3b763b1. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are typescript).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Server Components loads about 2.3k tokens when it runs. Until then it costs about 33 tokens; SKILL.md has 60 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from vibeeval/vibecosystem at commit 3b763b1, republished under its MIT licence (© vibeeval). 60 words, ~2,284 tokens.
.claude/skills/server-components/SKILL.md (or your agent's skills folder).RSC + Next.js App Router patterns for streaming, caching, and minimal client JS.
Use Server Component (default) when:
- Fetching data from DB / API
- Accessing backend resources (filesystem, secrets)
- No interactivity (useState, useEffect, event listeners)
- Heavy dependencies (no bundle cost)
Use Client Component ("use client") when:
- useState / useReducer / useRef
- useEffect / lifecycle hooks
- Browser APIs (window, navigator, IntersectionObserver)
- Event listeners (onClick, onChange)
- Third-party client libraries (charts, drag-drop)
Rule: Push "use client" as LOW in the tree as possible.// app/dashboard/page.tsx — Server Component (no directive needed)
import { db } from '@/lib/db'
import { StatsCounter } from './stats-counter' // client component
export default async function DashboardPage() {
const stats = await db.query.stats.findMany()
// Can pass serializable props to client components
return <StatsCounter initialCount={stats.length} />
}
// app/dashboard/stats-counter.tsx — Client Component
'use client'
import { useState } from 'react'
export function StatsCounter({ initialCount }: { initialCount: number }) {
const [count, setCount] = useState(initialCount)
return <button onClick={() => setCount(c => c + 1)}>{count}</button>
}
// Server Action in separate file
// app/actions.ts
'use server'
export async function createItem(formData: FormData) {
// runs on server, called from client
}// Place Suspense around slow data — fast data renders immediately
export default async function Page() {
const fastData = await db.query.config.findFirst() // fast: cached
return (
<div>
<Header config={fastData} /> {/* instant */}
<Suspense fallback={<StatsSkeleton />}>
<SlowStats /> {/* streams in */}
</Suspense>
<Suspense fallback={<FeedSkeleton rows={5} />}>
<ActivityFeed /> {/* streams in */}
</Suspense>
</div>
)
}
async function SlowStats() {
const stats = await fetch('/api/stats', { cache: 'no-store' })
.then(r => r.json())
return <StatsGrid stats={stats} />
}app/
dashboard/
page.tsx ← async server component (data fetching)
loading.tsx ← shown while page.tsx is streaming
error.tsx ← shown if page.tsx throws
layout.tsx ← wraps all, always renders immediately// app/dashboard/loading.tsx — instant skeleton, no async needed
export default function Loading() {
return (
<div className="animate-pulse space-y-4">
<div className="h-8 bg-gray-200 rounded w-1/3" />
<div className="grid grid-cols-3 gap-4">
{Array.from({ length: 3 }).map((_, i) => (
<div key={i} className="h-24 bg-gray-200 rounded" />
))}
</div>
</div>
)
}// next.config.ts — enable PPR (Next.js 14+)
export default {
experimental: { ppr: true },
}
// page.tsx — static shell + dynamic holes
import { Suspense } from 'react'
import { unstable_noStore as noStore } from 'next/cache'
export default function ProductPage({ params }: { params: { id: string } }) {
return (
<div>
{/* Static: prerendered at build time */}
<ProductShell id={params.id} />
{/* Dynamic hole: streams in per request */}
<Suspense fallback={<PriceSkeleton />}>
<LivePrice id={params.id} />
</Suspense>
</div>
)
}
async function LivePrice({ id }: { id: string }) {
noStore() // opt out of caching — always fresh
const price = await fetchLivePrice(id)
return <span>${price}</span>
}// app/actions.ts
'use server'
import { revalidatePath, revalidateTag } from 'next/cache'
import { redirect } from 'next/navigation'
import { z } from 'zod'
const Schema = z.object({
title: z.string().min(1).max(200),
priority: z.enum(['low', 'medium', 'high']),
})
// Form submission action
export async function createTask(prevState: unknown, formData: FormData) {
const parsed = Schema.safeParse({
title: formData.get('title'),
priority: formData.get('priority'),
})
if (!parsed.success) {
return { error: parsed.error.flatten().fieldErrors }
}
await db.insert(tasks).values(parsed.data)
revalidatePath('/tasks') // invalidate cached page
revalidateTag('tasks') // invalidate tagged fetches
redirect('/tasks')
}
// Mutation action (called programmatically)
export async function deleteTask(id: string) {
await db.delete(tasks).where(eq(tasks.id, id))
revalidatePath('/tasks')
}
// Usage in client component
'use client'
import { useFormState, useFormStatus } from 'react-dom'
import { createTask } from './actions'
function SubmitButton() {
const { pending } = useFormStatus()
return <button disabled={pending}>{pending ? 'Saving...' : 'Save'}</button>
}
export function TaskForm() {
const [state, action] = useFormState(createTask, null)
return (
<form action={action}>
<input name="title" />
{state?.error?.title && <p>{state.error.title}</p>}
<SubmitButton />
</form>
)
}// Fetch with Next.js extended fetch (auto deduplication + caching)
async function UserProfile({ id }: { id: string }) {
const user = await fetch(`/api/users/${id}`, {
next: { revalidate: 60, tags: ['users', `user-${id}`] }, // ISR: 60s
}).then(r => r.json())
return <div>{user.name}</div>
}
// Direct DB query (server only — no API round-trip)
import { db } from '@/lib/db'
async function TaskList() {
const tasks = await db.query.tasks.findMany({
where: (t, { eq }) => eq(t.userId, await getCurrentUserId()),
orderBy: (t, { desc }) => [desc(t.createdAt)],
})
return <ul>{tasks.map(t => <li key={t.id}>{t.title}</li>)}</ul>
}import { unstable_cache } from 'next/cache'
import { cache } from 'react'
// React cache — deduplicate within a single request
const getUser = cache(async (id: string) => {
return db.query.users.findFirst({ where: (u, { eq }) => eq(u.id, id) })
})
// Next.js unstable_cache — persist across requests (like ISR)
const getCachedStats = unstable_cache(
async () => db.query.stats.findMany(),
['global-stats'],
{ revalidate: 300, tags: ['stats'] } // 5 min TTL
)
// Manual revalidation from Server Action
import { revalidateTag, revalidatePath } from 'next/cache'
export async function updateUser(id: string, data: unknown) {
await db.update(users).set(data).where(eq(users.id, id))
revalidateTag(`user-${id}`) // targeted cache bust
revalidatePath('/dashboard') // page cache bust
}// Parallel: both requests fire simultaneously
export default async function Layout({ children }: { children: React.ReactNode }) {
const [user, notifications] = await Promise.all([
getUser(),
getNotifications(),
])
return (
<div>
<Header user={user} notificationCount={notifications.length} />
<main>{children}</main>
</div>
)
}// app/dashboard/error.tsx — must be "use client"
'use client'
export default function Error({
error,
reset,
}: {
error: Error & { digest?: string }
reset: () => void
}) {
return (
<div role="alert" className="p-6 border border-red-200 rounded-lg">
<h2 className="text-lg font-semibold text-red-800">Something went wrong</h2>
<p className="text-red-600 mt-1 text-sm">
{process.env.NODE_ENV === 'development' ? error.message : 'An error occurred'}
</p>
<button onClick={reset} className="mt-4 btn btn-sm">Try again</button>
</div>
)
}// PITFALL 1: Non-serializable props RSC → Client
// WRONG: passing functions, class instances, Dates
<ClientComp handler={someFunction} /> // functions not serializable
<ClientComp date={new Date()} /> // Date not serializable
// RIGHT: serialize before passing
<ClientComp dateString={date.toISOString()} />
<ClientComp timestamp={date.getTime()} />
// PITFALL 2: Importing server-only code into client component
// Add 'server-only' package to throw at build time
import 'server-only' // add to lib/db.ts, lib/auth.ts
// PITFALL 3: Hydration mismatch (browser extensions, dynamic dates)
// WRONG:
<span>{new Date().toLocaleString()}</span> // server/client differ
// RIGHT: suppress or use useEffect
'use client'
const [time, setTime] = useState<string>('')
useEffect(() => setTime(new Date().toLocaleString()), [])© vibeeval, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/server-components of vibeeval/vibecosystem.
Open the folder on GitHubat commit 3b763b1
Server Components next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Server Components this skillvibeeval/vibecosystem | 531 | — | ~2.3k | Automated safety check: Pass | MIT | |
| AI SDKvercel-labs/ai-facts | 168 | 21 repos | ~1.2k | Automated safety check: Pass | None | |
| Chakra UI v3 Builderchakra-ui/chakra-ui | 41k | — | ~3.1k | Automated safety check: Pass | MIT | |
| Remotion Best Practiceslyonjs/shortvid.io | 147 | 32 repos | ~1k | Automated safety check: Pass | MIT | |
| React View Transitions Guidevercel-labs/next-beats | 167 | 10 repos | ~3.1k | Automated safety check: Pass | MIT | |
| Website ClonerJCodesMore/ai-website-cloner-template | 36k | — | ~1.7k | Automated safety check: Pass | MIT |
vercel-labs/ai-facts
Answer questions about the AI SDK and help build AI-powered features.
chakra-ui/chakra-ui
Builds responsive, accessible Chakra UI v3 components and layouts, sets up Chakra in new or existing projects, and designs themes with tokens, semantic tokens and recipes.
lyonjs/shortvid.io
Best practices for Remotion - Video creation in React. An agent skill from lyonjs/shortvid.io.
vercel-labs/next-beats
Guides implementing animated page and state transitions in React with the native View Transition API, covering shared elements, list reorders and directional navigation.
JCodesMore/ai-website-cloner-template
Rebuilds existing web pages as editable local code that matches their content, assets, responsive layout and interactions, including Framer sites and animated pages.
vmDeshpande/ai-agent-automation
Conduct WCAG 2.2 accessibility audits with automated testing, manual verification, and remediation guidance.
vibeeval/vibecosystem
Framework for measuring and tracking agent response quality over time.
vibeeval/vibecosystem
Security-focused differential code review with blast radius analysis, risk-adaptive depth (DEEP/FOCUSED/SURGICAL), git history correlation, and structured finding format.
vibeeval/vibecosystem
A skill your agent uses when making any factual claim about the codebase — existence, absence, or behavior.
vibeeval/vibecosystem
Systematic false positive verification for security findings.
vibeeval/vibecosystem
n8n otomasyon workflow'lari. An agent skill from vibeeval/vibecosystem.
vibeeval/vibecosystem
A skill your agent uses when context compression is imminent, when resuming a session, or when preserving critical decisions across long tasks.
React Server Components, Suspense boundaries, streaming SSR, partial prerendering patterns for Next.js App Router. Server Components is an agent skill from vibeeval/vibecosystem.js App Router.
Run `npx skills add vibeeval/vibecosystem --skill server-components -a claude-code`. Or copy the skill folder (skills/server-components in vibeeval/vibecosystem) into .claude/skills/server-components in your project. Claude Code loads it when a task matches its description.
Run `npx skills add vibeeval/vibecosystem --skill server-components -a codex`. Or copy the skill folder (skills/server-components in vibeeval/vibecosystem) into .agents/skills/server-components in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add vibeeval/vibecosystem --skill server-components -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/server-components, .gemini/skills/server-components, .github/skills/server-components and .opencode/skills/server-components in your project.
SKILL.md names no scripts, command-line tools or credentials: Server Components is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Server Components is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.3k tokens (SKILL.md is roughly 9.1k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Server Components: AI SDK (vercel-labs/ai-facts, 168 stars), Chakra UI v3 Builder (chakra-ui/chakra-ui, 41k stars), Remotion Best Practices (lyonjs/shortvid.io, 147 stars) and React View Transitions Guide (vercel-labs/next-beats, 167 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
vibeeval (a GitHub user) maintains it in vibeeval/vibecosystem, which has 531 GitHub stars. The repository holds 144 skills in this directory. The repository was last updated on August 8, 2026.
Source: vibeeval/vibecosystem on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.