Agent skill

Nextjs Idioms

by irahardianto in irahardianto/awesome-agv

Next.js App Router architecture: React Server Components (RSC), Server Actions, nested layouts, route handlers, and streaming.

MITAuto-check: notesDevelopment

Install Nextjs Idioms

skills CLI
$ npx skills add irahardianto/awesome-agv --skill nextjs-idioms -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install irahardianto/awesome-agv nextjs-idioms --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/irahardianto/awesome-agv.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/nextjs-idioms .claude/skills/nextjs-idioms && rm -rf skills-src

Use ~/.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/

Facts

Skill name
nextjs-idioms
GitHub stars
156
Token cost
~4.2k tokens
SKILL.md length
862 words
Files
2 (incl. references)
Skills in repo
34
Repo updated
First seen
Licence
MIT

At a glance

Next.js App Router architecture: React Server Components (RSC), Server Actions, nested layouts, route handlers, and streaming.

  • Works in 4 steps: Keep Server Component (default) when:… → Add 'use client' only when: using hooks… → Composition pattern — server parent… → …
  • Refactoring Next.js web applications
  • SKILL.md covers Next.js Idioms and Patterns and When to Load References
  • Calls npx; needs SESSION_SECRET

What it does

Nextjs Idioms is an agent skill from irahardianto/awesome-agv. Next.js App Router architecture: React Server Components (RSC), Server Actions, nested layouts, route handlers, and streaming. Use when building or refactoring Next.js web applications. Pair with react-idioms and typescript-idioms.

Its SKILL.md is about 4.2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including reference files (for example `references/project-structure.md`).

It sits in Development, covering Refactoring. It works with Next.js, React, TypeScript and Zod. The repository describes itself as: Comprehensive sets of standards and practices designed to elevate the capabilities of AI coding agents. The licence is MIT.

When your agent uses it

  • Refactoring Next.js web applications
  • Tasks that involve Refactoring

Example prompts

  • “/nextjs-idioms”

Requirements

  • Node.js
  • A credential in SESSION_SECRET

Workflow steps

4 steps, taken from the first numbered list in SKILL.md.

  1. Keep Server Component (default) when: fetching data, accessing DB/secrets, using heavy deps, or rendering static/cacheable content.
  2. Add 'use client' only when: using hooks (useState, useEffect), attaching event handlers, calling browser APIs (window, localStorage), or…
  3. Composition pattern — server parent fetches, client child handles interactivity
  4. Push 'use client' as deep as possible — never mark an entire page as client

What it can do on your machine

Read from SKILL.md and the folder at commit 9e997ba. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Shell commands in SKILL.md call:

    • npx

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use npx, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • SESSION_SECRET

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Nextjs Idioms loads about 4.2k tokens when it runs, and up to ~5.7k if it reads all its reference files. Until then it costs about 61 tokens; SKILL.md has 862 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~61
When it runs · the whole SKILL.md, loaded when a task matches
~4.2k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~5.7k

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.

Safety

Auto-check: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NoteMentions a .env fileSKILL.md:277
    4. **`.env.local`** for local overrides (gitignored). **`.env`** for defaults (committed, no secrets).

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.

SKILL.md

The full file from irahardianto/awesome-agv at commit 9e997ba, republished under its MIT licence (© irahardianto). 862 words, ~4,245 tokens.

Download SKILL.mdSave it as .claude/skills/nextjs-idioms/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
nextjs-idioms
description
Next.js App Router architecture: React Server Components (RSC), Server Actions, nested layouts, route handlers, and streaming. Use when building or refactoring Next.js web applications. Pair with react-idioms and typescript-idioms.

Next.js Idioms and Patterns

Next.js (15+) rewards App Router, Server Components, and Server Actions. Idiomatic Next.js = server-first, streaming, edge-ready. Push logic to the server, keep the client thin.

Scope: Next.js-specific patterns only. For React: @.agents/skills/react-idioms/SKILL.md. For TypeScript: @.agents/skills/typescript-idioms/SKILL.md. For project layout: references/project-structure.md.

Loading guard: This skill assumes the Next.js App Router (Next.js 15+, app/ directory). For Pages Router (pages/) legacy code, most React idioms still apply but App-Router-specific sections (RSC, Server Actions, parallel/intercepting routes, 'use cache') do not. Co-load @.agents/skills/react-idioms/SKILL.md for client-component patterns.

When to Load References

Load these before writing code in the matching context — not after.

SituationReference to Load
Starting a Next.js project or reviewing file layoutreferences/project-structure.md
TypeScript type system, async, Zod, error types@.agents/skills/typescript-idioms/SKILL.md (always co-load)
Zod schemas / boundary validation (API routes, Server Actions, env)@.agents/skills/typescript-idioms/references/zod-patterns.md
Async / I/O / coercion / security pitfalls@.agents/skills/typescript-idioms/references/ts-patterns-and-anti-patterns.md
Client-component hooks/state/forms (non-App-Router)@.agents/skills/react-idioms/SKILL.md

Server vs Client Component Decision Tree
  1. Keep Server Component (default) when: fetching data, accessing DB/secrets, using heavy deps, or rendering static/cacheable content.
  2. Add 'use client' only when: using hooks (useState, useEffect), attaching event handlers, calling browser APIs (window, localStorage), or wrapping third-party client libs.
  3. Composition pattern — server parent fetches, client child handles interactivity:
    tsx
    // app/tasks/page.tsx (Server)
    export default async function TasksPage() {
      const tasks = await getTasks();
      return <TaskBoard tasks={tasks} />;   // Client component for drag-and-drop
    }
    
    // features/task/components/task-board.tsx ('use client')
    export function TaskBoard({ tasks }: { tasks: Task[] }) {
      const [sorted, setSorted] = useState(tasks);
      return <DndContext>...</DndContext>;
    }
  4. Push 'use client' as deep as possible — never mark an entire page as client:
    tsx
    // ❌ 'use client' at page level loses all server benefits
    // ✅ Only wrap the interactive leaf:
    export default async function TasksPage() {
      const tasks = await getTasks();
      return (
        <>
          <TaskStats count={tasks.length} />   {/* Server */}
          <TaskFilterBar />                     {/* Client — has state */}
        </>
      );
    }

App Router (Default)
  1. Server Components by default — add 'use client' only per the decision tree above.
  2. Layouts for shared UI — never duplicate headers/sidebars.
  3. Loading/Error boundaries per route segment:
    app/tasks/
    ├── page.tsx        # Server Component
    ├── loading.tsx     # Suspense fallback
    ├── error.tsx       # Error boundary ('use client')
    └── layout.tsx      # Shared layout
  4. Route groups for organization without URL impact:
    app/
    ├── (auth)/login/page.tsx          # /login
    ├── (auth)/register/page.tsx       # /register
    └── (dashboard)/
        ├── layout.tsx                 # Shared dashboard layout
        ├── tasks/page.tsx             # /tasks
        └── settings/page.tsx          # /settings

Parallel & Intercepting Routes
  1. @slot parallel routes — render multiple pages simultaneously in the same layout:
    app/(dashboard)/
    ├── layout.tsx                          # Receives { children, modal }
    ├── @modal/default.tsx                  # Required: null fallback
    ├── @modal/(.)tasks/[id]/page.tsx       # Intercepting route → modal
    ├── tasks/page.tsx                      # Main content
    └── tasks/[id]/page.tsx                 # Full page (direct nav)
  2. Layout consumes parallel slots as props:
    tsx
    export default function DashboardLayout({
      children, modal,
    }: {
      children: React.ReactNode; modal: React.ReactNode;
    }) {
      return <>{children}{modal}</>;
    }
  3. default.tsx is required for every @slot — returns null when no active match.
  4. Intercepting conventions: (.) same level, (..) one level up, (...) from root.

Data Fetching
  1. Server Components fetch data directly — no useEffect:
    tsx
    export default async function TasksPage() {
      const tasks = await db.tasks.findMany();
      return <TaskList tasks={tasks} />;
    }
  2. Server Actions for mutations:
    tsx
    'use server';
    import { revalidatePath } from 'next/cache';
    import { redirect } from 'next/navigation';
    
    export async function createTask(formData: FormData) {
      const title = formData.get('title');
      if (!title || typeof title !== 'string') return { error: 'Title is required' };
      await db.tasks.create({ data: { title } });
      revalidatePath('/tasks');
      redirect('/tasks');
    }
  3. Parallel data fetching — never sequential await:
    tsx
    const [user, tasks, stats] = await Promise.all([getUser(), getTasks(), getStats()]);

Caching Strategy
  1. fetch cache options — Next.js extends fetch:
    tsx
    await fetch(url, { cache: 'force-cache' });                // Cached indefinitely
    await fetch(url, { cache: 'no-store' });                   // Fresh every request
    await fetch(url, { next: { revalidate: 3600 } });          // Time-based ISR
    await fetch(url, { next: { tags: ['tasks'] } });           // Tag-based invalidation
  2. 'use cache' directive for non-fetch data (DB queries, computations — Next.js 15+):
    tsx
    'use cache';
    import { cacheLife, cacheTag } from 'next/cache';
    
    export async function getCachedTasks(userId: string) {
      cacheLife('minutes');               // Built-in profile: 'seconds' | 'minutes' | 'hours' | 'days' | 'weeks' | 'max'
      cacheTag('tasks', `user-${userId}`);
      return db.tasks.findMany({ where: { userId } });
    }

    Legacy: unstable_cache (deprecated in Next.js 15+) works the same way but is being replaced by 'use cache'.

  3. Per-route segment config:
    tsx
    export const revalidate = 60;            // ISR every 60s
    export const dynamic = 'force-dynamic';  // Always fresh
  4. On-demand revalidation in Server Actions:
    tsx
    'use server';
    export async function updateTask(id: string, data: TaskUpdate) {
      await db.tasks.update({ where: { id }, data });
      revalidateTag('tasks');       // Invalidate tagged fetches
      revalidatePath('/tasks');     // Rebuild the page
    }
  5. Decision tree: Static → force-cache. User-specific → no-store. Semi-dynamic → revalidate: N. After mutation → revalidateTag/revalidatePath.

API Route Handlers
  1. Export named functions per HTTP method — validate with Zod, never trust raw input:
    tsx
    // app/api/tasks/route.ts
    import { NextRequest, NextResponse } from 'next/server';
    import { z } from 'zod';
    
    const createTaskSchema = z.object({
      title: z.string().min(1).max(200),
      priority: z.enum(['low', 'medium', 'high']).default('medium'),
    });
    
    export async function GET(request: NextRequest) {
      const tasks = await db.tasks.findMany();
      return NextResponse.json(tasks);
    }
    
    export async function POST(request: NextRequest) {
      const parsed = createTaskSchema.safeParse(await request.json());
      if (!parsed.success) {
        return NextResponse.json({ error: parsed.error.flatten() }, { status: 400 });
      }
      const task = await db.tasks.create({ data: parsed.data });
      return NextResponse.json(task, { status: 201 });
    }
  2. Dynamic route params (Next.js 15+ — params is a Promise):
    tsx
    // app/api/tasks/[id]/route.ts
    export async function GET(
      request: NextRequest,
      { params }: { params: Promise<{ id: string }> }
    ) {
      const { id } = await params;
      const task = await db.tasks.findUnique({ where: { id } });
      if (!task) return NextResponse.json({ error: 'Not found' }, { status: 404 });
      return NextResponse.json(task);
    }
  3. Streaming responses for large datasets:
    tsx
    export async function GET() {
      const stream = new ReadableStream({
        async start(controller) {
          for await (const chunk of db.tasks.stream()) {
            controller.enqueue(new TextEncoder().encode(JSON.stringify(chunk) + '\n'));
          }
          controller.close();
        },
      });
      return new Response(stream, { headers: { 'Content-Type': 'application/x-ndjson' } });
    }

Middleware
  1. middleware.ts at project root (or src/middleware.ts):
    tsx
    import { NextResponse } from 'next/server';
    import type { NextRequest } from 'next/server';
    
    export function middleware(request: NextRequest) {
      const token = request.cookies.get('session')?.value;
      if (!token && request.nextUrl.pathname.startsWith('/dashboard')) {
        return NextResponse.redirect(new URL('/login', request.url));
      }
      const response = NextResponse.next();
      response.headers.set('x-request-id', crypto.randomUUID());
      return response;
    }
    
    export const config = {
      matcher: ['/dashboard/:path*', '/api/:path*'],
    };
  2. Always scope with config.matcher — never run middleware on every request.
  3. Edge Runtime constraints — no Node.js APIs (fs, path). Web APIs only.
  4. Common patterns: auth redirects, i18n locale detection, rate limiting headers, CSP injection.

Show full SKILL.md (629 more words)Show less
Environment Config
  1. NEXT_PUBLIC_ prefix exposes vars to client — use only for non-secrets:
    tsx
    const apiUrl = process.env.NEXT_PUBLIC_API_URL;  // ✅ Client + server
    const dbUrl = process.env.DATABASE_URL;           // ✅ Server-only
  2. Type-safe env validation — validate at startup, fail fast. Use the Zod EnvSchema.parse(process.env) pattern from @.agents/skills/typescript-idioms/references/zod-patterns.md §Environment Variable Validation. Add Next.js-specific vars (NEXT_PUBLIC_*, SESSION_SECRET) to the schema. Never use process.env in business logic — import from the validated env module.
  3. Never use process.env in business logic — import from validated env module.
  4. .env.local for local overrides (gitignored). .env for defaults (committed, no secrets).

Error Handling
  1. error.tsx boundary ('use client' required) with reset for retry:
    tsx
    'use client';
    export default function ErrorBoundary({ error, reset }: {
      error: Error & { digest?: string }; reset: () => void;
    }) {
      return <div><h2>Something went wrong</h2><button onClick={reset}>Retry</button></div>;
    }
  2. not-found.tsx for 404 — call notFound() when data is missing:
    tsx
    import { notFound } from 'next/navigation';
    export default async function TaskPage({ params }: { params: Promise<{ id: string }> }) {
      const task = await getTask((await params).id);
      if (!task) notFound();
      return <TaskDetail task={task} />;
    }
  3. Server Action error returns — don't throw, return typed discriminated unions:
    tsx
    'use server';
    type ActionResult = { success: true } | { success: false; error: string };
    export async function createTask(formData: FormData): Promise<ActionResult> {
      try {
        await db.tasks.create({ data: { title: formData.get('title') as string } });
        revalidatePath('/tasks');
        return { success: true };
      } catch { return { success: false, error: 'Failed to create task' }; }
    }

Performance & SEO
  1. Static generation by default — use export const dynamic = 'force-dynamic' only when data changes per request.
  2. Image optimization — always use next/image with width, height, and priority for above-fold.
  3. Route prefetching via next/link.
  4. Streaming with Suspense for progressive rendering:
    tsx
    <Suspense fallback={<TasksSkeleton />}>
      <TaskList />  {/* Server Component — streams when ready */}
    </Suspense>
  5. Metadata API for per-page SEO:
    tsx
    import type { Metadata } from 'next';
    export const metadata: Metadata = {
      title: 'Tasks | MyApp',
      description: 'Manage your tasks efficiently',
      openGraph: { title: 'Tasks', description: 'Manage your tasks efficiently', type: 'website' },
    };
  6. Dynamic metadata for data-driven pages:
    tsx
    export async function generateMetadata({ params }: Props): Promise<Metadata> {
      const { id } = await params;
      const task = await getTask(id);
      return { title: task.title, description: task.description };
    }

Anti-Patterns
  • ❌ useEffect for data fetching in Server Components — fetch directly
  • ❌ 'use client' on everything — Server Components are the default for a reason
  • ❌ Fetching in layout.tsx then passing via props — fetch in each component that needs data
  • ❌ getServerSideProps / getStaticProps — App Router uses async components
  • ❌ Sequential await in Server Components — use Promise.all() for parallel fetching
  • ❌ Large client bundles — keep 'use client' components small, push logic to server
  • ❌ Hardcoded fetch URLs — use environment variables and centralized API client
  • ❌ Raw process.env everywhere — validate once in env.ts, import the typed object
  • ❌ Unscoped middleware — always use config.matcher to limit to relevant routes
  • ❌ Node.js APIs in middleware — Edge Runtime supports Web APIs only

Testing

For universal testing principles, see .agents/rules/testing-strategy.md. Below: framework-specific patterns only.

  1. React Testing Library + Vitest/Jest for component tests.
  2. next/jest for jest configuration:
    javascript
    const nextJest = require('next/jest')({ dir: './' });
    module.exports = nextJest({ /* custom config */ });
  3. MSW (Mock Service Worker) for Server Component data fetching mocks.
  4. Testing Server Actions — import and call directly:
    tsx
    import { createTask } from '@/app/actions';
    it('returns error for empty title', async () => {
      const formData = new FormData();
      formData.set('title', '');
      const result = await createTask(formData);
      expect(result).toEqual({ error: 'Title is required' });
    });
  5. Testing API Route Handlers — create Request and call handler:
    tsx
    import { GET } from '@/app/api/tasks/route';
    it('returns tasks as JSON', async () => {
      const request = new NextRequest('http://localhost/api/tasks');
      const response = await GET(request);
      expect(response.status).toBe(200);
    });
  6. Testing Middleware — invoke with mocked NextRequest:
    tsx
    import { middleware } from '@/middleware';
    it('redirects unauthenticated users', () => {
      const request = new NextRequest('http://localhost/dashboard');
      const response = middleware(request);
      expect(response.status).toBe(307);
      expect(response.headers.get('location')).toContain('/login');
    });

Formatting and Static Analysis
ToolPurposeCommand
PrettierFormattingnpx prettier --write .
ESLint + eslint-config-nextLintingnpx eslint . (next lint was removed in Next.js 16 — use the ESLint CLI directly with eslint-config-next/core-web-vitals)
TypeScriptType checkingnpx tsc --noEmit

  • Code Idioms and Conventions @.agents/rules/code-idioms-and-conventions.md
  • React Idioms @.agents/skills/react-idioms/SKILL.md
  • TypeScript Idioms @.agents/skills/typescript-idioms/SKILL.md
  • Frontend Design @.agents/skills/frontend-design/SKILL.md
  • Security Principles @.agents/rules/security-principles.md
  • Accessibility Principles @.agents/rules/accessibility-principles.md
  • Project Structure — Next.js @.agents/skills/nextjs-idioms/references/project-structure.md
  • Architectural Patterns @.agents/rules/architectural-pattern.md
  • Testing Strategy @.agents/rules/testing-strategy.md
  • Error Handling Principles @.agents/rules/error-handling-principles.md
  • Logging and Observability @.agents/rules/logging-and-observability-mandate.md

© irahardianto, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 1 other file (references) in .agents/skills/nextjs-idioms of irahardianto/awesome-agv.

  • SKILL.md
  • references/project-structure.md

Open the folder on GitHubat commit 9e997ba

Compare with similar skills

Nextjs Idioms 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.

Nextjs Idioms compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Nextjs Idioms this skillirahardianto/awesome-agv156—~4.2kAutomated safety check: NotesMIT
Angularericrisco/rsc-harness190—~3.4kAutomated safety check: PassMIT
Nuqstrycompai/crm11k1 repos~1.7kAutomated safety check: PassMIT
Ultraciteagustinusnathaniel/nextarter-tailwind1252 repos~1.2kAutomated safety check: PassMIT
React Best Practicesshapeshift/web2061 repos~2kAutomated safety check: PassMIT
Nextjs App Architecturejakubwarkusz/themes1231 repos~2.5kAutomated safety check: PassMIT

Similar skills

  • Angular

    ericrisco/rsc-harness

    A skill your agent uses when building, refactoring, or debugging Angular (v20/21+): standalone components, signals, zoneless change detection, @if/@for/@defer control flow, inject() DI…

    190 GitHub stars~3.4k tokensUpdated today
    DevelopmentAuto-check passed
  • Nuqs

    trycompai/crm

    nuqs (type-safe URL query state) best practices for Next.js and other React frameworks.

    11k GitHub starsUsed in 1 repo~1.7k tokens
    DevelopmentAuto-check passed
  • Ultracite

    agustinusnathaniel/nextarter-tailwind

    Ultracite is a zero-config linting and formatting preset for JavaScript/TypeScript projects.

    125 GitHub starsUsed in 2 repos~1.2k tokens
    DevelopmentAuto-check passed
  • React Best Practices

    shapeshift/web

    Comprehensive React and Next.js performance optimization guide with 40+ rules for eliminating waterfalls, optimizing bundles, and improving rendering.

    206 GitHub starsUsed in 1 repo~2k tokens
    DevelopmentAuto-check passed
  • Nextjs App Architecture

    jakubwarkusz/themes

    Build or audit Next.js 16 App Router apps using a next-beats-style React Server Components architecture.

    123 GitHub starsUsed in 1 repo~2.5k tokens
    DevelopmentAuto-check passed
  • Code Refactor Review

    kcsujeet/ilamy-calendar

    Reviews code changes for reuse, composition, codebase consistency, and slop.

    351 GitHub starsUsed in 2 repos~1.6k tokens
    DevelopmentAuto-check passed

More from irahardianto/awesome-agv

All 34 skills in this repo
  • Distinctive Frontend Design Builder

    irahardianto/awesome-agv

    Commits to one bold aesthetic direction, sets up a CSS token system for it, then builds the interface in Vue or plain HTML using those tokens.

    156 GitHub stars~2.4k tokensUpdated 6 days ago
    Auto-check passed
  • Perf Optimization

    irahardianto/awesome-agv

    Profile-driven performance optimization protocol. An agent skill from irahardianto/awesome-agv.

    156 GitHub stars~4.3k tokensUpdated 6 days ago
    Auto-check passed
  • Angular Idioms and Patterns

    irahardianto/awesome-agv

    Coding conventions for Angular 19 and later: standalone components, signals, OnPush change detection, lazy routes and where RxJS still belongs.

    156 GitHub stars~3.8k tokensUpdated 6 days ago
    Auto-check passed
  • CI/CD Pipeline Principles

    irahardianto/awesome-agv

    Rules for designing CI/CD pipelines in layers: universal lint, test and scan stages, container builds with SBOM attestation, and GitOps for orchestrated deployments.

    156 GitHub stars~2.7k tokensUpdated 6 days ago
    Auto-check: notes
  • Hono Idioms

    irahardianto/awesome-agv

    Hono lightweight web framework patterns: type-safe route handlers, middleware composition, Zod validation, and RPC clients for Cloudflare Workers, Node, or Bun.

    156 GitHub stars~3k tokensUpdated 6 days ago
    Auto-check passed
  • Mobile Testing

    irahardianto/awesome-agv

    Mobile E2E testing patterns — Flutter integrationtest, Patrol, Maestro, golden testing, device matrix, and test data management.

    156 GitHub stars~1.8k tokensUpdated 6 days ago
    Auto-check: notes

Categories

Questions about Nextjs Idioms

What does Nextjs Idioms do?

Next.js App Router architecture: React Server Components (RSC), Server Actions, nested layouts, route handlers, and streaming. Nextjs Idioms is an agent skill from irahardianto/awesome-agv.js App Router architecture: React Server Components (RSC), Server Actions, nested layouts, route handlers, and streaming.

When should I use Nextjs Idioms?

Nextjs Idioms fits situations like: refactoring Next.js web applications; tasks that involve Refactoring.

How do I install Nextjs Idioms in Claude Code?

Run `npx skills add irahardianto/awesome-agv --skill nextjs-idioms -a claude-code`. Or copy the skill folder (.agents/skills/nextjs-idioms in irahardianto/awesome-agv) into .claude/skills/nextjs-idioms in your project. Claude Code loads it when a task matches its description.

How do I install Nextjs Idioms in Codex?

Run `npx skills add irahardianto/awesome-agv --skill nextjs-idioms -a codex`. Or copy the skill folder (.agents/skills/nextjs-idioms in irahardianto/awesome-agv) into .agents/skills/nextjs-idioms in your project. Codex loads it when a task matches its description.

Can I use Nextjs Idioms in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add irahardianto/awesome-agv --skill nextjs-idioms -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/nextjs-idioms, .gemini/skills/nextjs-idioms, .github/skills/nextjs-idioms and .opencode/skills/nextjs-idioms in your project.

What does Nextjs Idioms need to run?

Going by SKILL.md and its folder, Nextjs Idioms needs the command-line tools its instructions call (npx) and credentials named SESSION_SECRET. Our summary lists: Node.js; A credential in SESSION_SECRET.

Does Nextjs Idioms access the network?

SKILL.md contains no URLs. Its commands use npx, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Nextjs Idioms safe to install?

Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.

What licence does Nextjs Idioms use?

Nextjs Idioms is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Nextjs Idioms use?

About 4.2k tokens (SKILL.md is roughly 17k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 1.5k tokens, read only when the agent opens those files.

What are the alternatives to Nextjs Idioms?

Skills that share tags, products or a category with Nextjs Idioms: Angular (ericrisco/rsc-harness, 190 stars), Nuqs (trycompai/crm, 11k stars), Ultracite (agustinusnathaniel/nextarter-tailwind, 125 stars) and React Best Practices (shapeshift/web, 206 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Nextjs Idioms?

irahardianto (a GitHub user) maintains it in irahardianto/awesome-agv, which has 156 GitHub stars. The repository holds 34 skills in this directory. The repository was last updated on October 5, 2026.

Source: irahardianto/awesome-agv on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.