Playwright Core
testdino-hq/playwright-skill
Battle-tested Playwright patterns for writing and debugging reliable E2E, API, component, visual, accessibility, and security tests.
Tag server-side fetches with the x-test-rcrd-id session header so SSR is recorded under the correct Playwright test session.
$ npx skills add asmyshlyaev177/test-proxy-recorder --skill nextjs-ssr -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install asmyshlyaev177/test-proxy-recorder nextjs-ssr --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/asmyshlyaev177/test-proxy-recorder.git skills-src && mkdir -p .claude/skills && cp -r skills-src/packages/test-proxy-recorder/skills/nextjs-ssr .claude/skills/nextjs-ssr && 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 "nextjs-ssr" agent skill from https://github.com/asmyshlyaev177/test-proxy-recorder/tree/master/packages/test-proxy-recorder/skills/nextjs-ssr into .claude/skills/nextjs-ssr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "nextjs-ssr", 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/asmyshlyaev177/test-proxy-recorder/tree/master/packages/test-proxy-recorder/skills/nextjs-ssrType 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 asmyshlyaev177/test-proxy-recorder --skill nextjs-ssr -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install asmyshlyaev177/test-proxy-recorder nextjs-ssr --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/asmyshlyaev177/test-proxy-recorder.git skills-src && mkdir -p .agents/skills && cp -r skills-src/packages/test-proxy-recorder/skills/nextjs-ssr .agents/skills/nextjs-ssr && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "nextjs-ssr" agent skill from https://github.com/asmyshlyaev177/test-proxy-recorder/tree/master/packages/test-proxy-recorder/skills/nextjs-ssr into .agents/skills/nextjs-ssr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "nextjs-ssr", 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 asmyshlyaev177/test-proxy-recorder --skill nextjs-ssr -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install asmyshlyaev177/test-proxy-recorder nextjs-ssr --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/asmyshlyaev177/test-proxy-recorder.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/packages/test-proxy-recorder/skills/nextjs-ssr .cursor/skills/nextjs-ssr && 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 "nextjs-ssr" agent skill from https://github.com/asmyshlyaev177/test-proxy-recorder/tree/master/packages/test-proxy-recorder/skills/nextjs-ssr into .cursor/skills/nextjs-ssr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "nextjs-ssr", 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/asmyshlyaev177/test-proxy-recorder.git --path packages/test-proxy-recorder/skills/nextjs-ssr--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 asmyshlyaev177/test-proxy-recorder --skill nextjs-ssr -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install asmyshlyaev177/test-proxy-recorder nextjs-ssr --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/asmyshlyaev177/test-proxy-recorder.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/packages/test-proxy-recorder/skills/nextjs-ssr .gemini/skills/nextjs-ssr && 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 "nextjs-ssr" agent skill from https://github.com/asmyshlyaev177/test-proxy-recorder/tree/master/packages/test-proxy-recorder/skills/nextjs-ssr into .gemini/skills/nextjs-ssr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "nextjs-ssr", 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 asmyshlyaev177/test-proxy-recorder nextjs-ssrInstalls 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 asmyshlyaev177/test-proxy-recorder --skill nextjs-ssr -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/asmyshlyaev177/test-proxy-recorder.git skills-src && mkdir -p .github/skills && cp -r skills-src/packages/test-proxy-recorder/skills/nextjs-ssr .github/skills/nextjs-ssr && 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 "nextjs-ssr" agent skill from https://github.com/asmyshlyaev177/test-proxy-recorder/tree/master/packages/test-proxy-recorder/skills/nextjs-ssr into .github/skills/nextjs-ssr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "nextjs-ssr", 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 asmyshlyaev177/test-proxy-recorder --skill nextjs-ssr -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install asmyshlyaev177/test-proxy-recorder nextjs-ssr --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/asmyshlyaev177/test-proxy-recorder.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/packages/test-proxy-recorder/skills/nextjs-ssr .opencode/skills/nextjs-ssr && 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 "nextjs-ssr" agent skill from https://github.com/asmyshlyaev177/test-proxy-recorder/tree/master/packages/test-proxy-recorder/skills/nextjs-ssr into .opencode/skills/nextjs-ssr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "nextjs-ssr", 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.
nextjs-ssrTag server-side fetches with the x-test-rcrd-id session header so SSR is recorded under the correct Playwright test session.
Nextjs Ssr is an agent skill from asmyshlyaev177/test-proxy-recorder. Tag server-side fetches with the x-test-rcrd-id session header so SSR is recorded under the correct Playwright test session. Lead with registerProxyFetch (patch global fetch in the root layout, any runtime) and registerProxyAxios (per-axios-instance interceptor); createHeadersWithRecordingId is the patch-free per-call option. Covers the build+start vs next dev caveat, why the setNextProxyHeaders middleware (proxy.ts / middleware.ts) is optional (it only exposes the id, it does not tag fetches), getRecordingId…
Its SKILL.md is about 4.5k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including reference files (for example `references/caching-and-isr.md`).
It sits in Backend & APIs, covering Backend development, Serverless and Browser testing. It works with Next.js, Playwright and React. The repository describes itself as: Record & replay API responses for Playwright E2E tests — SSR proxy + browser HAR + WebSockets. Deterministic CI, no backend, no manual mocks. The licence is MIT.
Read from SKILL.md and the folder at commit a443417. 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 and json).
From the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
github.comFrom 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.
Nextjs Ssr loads about 4.5k tokens when it runs, and up to ~6k if it reads all its reference files. Until then it costs about 189 tokens; SKILL.md has 1,120 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 asmyshlyaev177/test-proxy-recorder at commit a443417, republished under its MIT licence (© asmyshlyaev177). 1,120 words, ~4,466 tokens.
.claude/skills/nextjs-ssr/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.This skill builds on test-proxy-recorder/proxy-setup. Read it first for proxy CLI setup, playwright.config.ts, and fixtures before applying Next.js patterns.
The proxy correlates SSR fetches to the right test session via the x-test-rcrd-id header. Playwright sets it on every browser request (via playwrightProxy.before()), including the navigation that triggers SSR — so the id is already in the server render scope (next/headers). The one thing left to do is attach it to outgoing server-side fetches. A middleware (setNextProxyHeaders) only exposes the id; it does not tag fetches, so one of the helpers below is required (the middleware itself is optional — see the end of Setup).
All helpers from test-proxy-recorder/nextjs are no-ops in production (NODE_ENV=production) unless TEST_PROXY_RECORDER_ENABLED=true is set.
Record against a production build (
next build && next start), notnext dev. The dev server could reset a globalfetchpatch on subsequent requests (vercel/next.js#47596, fixed in newer versions); build+start has no such issue and is faster/less flaky.
registerProxyFetch() in the root layout (any runtime)One line tags every server-side fetch (Server Components, Route Handlers, Node and Edge runtimes). Call it at the top level of the root layout — not instrumentation.ts (see Common Mistakes).
// app/layout.tsx
import { registerProxyFetch } from 'test-proxy-recorder/nextjs';
registerProxyFetch(); // no-op in production unless TEST_PROXY_RECORDER_ENABLED=true
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
<html lang="en">
<body>{children}</body>
</html>
);
}registerProxyAxios(instance)For apps whose server-side requests go through axios, register each server-side instance once. It adds a request interceptor that stamps the id, and never touches global fetch, so it's immune to the dev-mode patch caveat.
import { registerProxyAxios } from 'test-proxy-recorder/nextjs';
registerProxyAxios(axiosForServer);
registerProxyAxios(axiosWithAuth);Replaces the hand-rolled interceptor + React.cache() helper (still documented below for reference). No-op in production / in the browser; idempotent per instance; never overwrites a caller-set id.
createHeadersWithRecordingId()Patch-free and works under next dev too (reads the id from headers() directly). Use it when you'd rather not patch global fetch, or for one fetch:
import { headers } from 'next/headers';
import { createHeadersWithRecordingId } from 'test-proxy-recorder/nextjs';
const res = await fetch('http://localhost:8100/api/data', {
cache: 'no-store',
headers: createHeadersWithRecordingId(await headers(), {
'Content-Type': 'application/json',
}),
});setNextProxyHeaders)A proxy.ts (Next.js 16+, exported proxy) / middleware.ts (15 and earlier, exported middleware) calling setNextProxyHeaders makes the id available via next/headers, but does not tag outgoing fetches — so it is not required when you use a helper above. Reach for it only if you already own a middleware for other reasons (auth, etc.); still pair it with a helper above to do the actual tagging.
// proxy.ts (Next.js 16+) — exported `proxy`; use middleware.ts / `middleware` on 15 and earlier
import { NextResponse } from 'next/server';
import type { NextRequest } from 'next/server';
import { setNextProxyHeaders } from 'test-proxy-recorder/nextjs';
export function proxy(request: NextRequest) {
const response = NextResponse.next();
setNextProxyHeaders(request, response);
return response;
}
export const config = {
matcher: ['/((?!_next/static|_next/image|favicon.ico).*)'],
};// app/api/data/route.ts
import { headers } from 'next/headers';
import { createHeadersWithRecordingId } from 'test-proxy-recorder/nextjs';
export async function GET(request: Request) {
const res = await fetch('http://localhost:8100/api/data', {
cache: 'no-store',
headers: createHeadersWithRecordingId(await headers(), {
'Content-Type': 'application/json',
}),
});
return Response.json(await res.json());
}createHeadersWithRecordingId merges the session ID into your headers object. It is a no-op when the session ID is absent (browser-only tests, or production).
registerProxyFetch — detailSet up in Setup above. It reads the id via next/headers, so it only acts inside a request scope and leaves build-time/non-request fetches untouched. It tags every server-side fetch (the id is inert anywhere but the proxy and never affects replay matching, and during tests everything you record routes through the proxy anyway). Works on Node and Edge runtimes. Call it from the root layout, not instrumentation.ts (see Common Mistakes). Source: apps/example-nextjs-edge/app/layout.tsx
Don't disable caching for tests — record/replay works with ISR, but only one design is deterministic. The rule: replaying an SSR fetch needs the page to run that fetch at request time, so cache it with fetch-level next.revalidate + next.tags (a hard purge on revalidateTag), not unstable_cache (which is stale-while-revalidate and flakes). Before the replay navigation, revalidateTag to drop the cache left from the record phase; one navigation is then enough — no polling. During tests the patched fetch reads headers(), so the page renders dynamically and runs the fetch; in production it's still static ISR. Gate the revalidate route behind a secret (privileged, DoS-able) supplied via Playwright extraHTTPHeaders.
Full rationale, the flaky approaches to avoid, and the auth pattern are in references/caching-and-isr.md. Source: apps/example-nextjs16/app/isr/page.tsx, app/api/revalidate/route.ts, e2e/isr.spec.ts
Avoid calling headers() in every individual fetch helper. Wrap it once with React.cache() so it is called once per request and shared across all server-side imports.
// lib/recording-id.ts
import { cache } from 'react';
import { RECORDING_ID_HEADER } from 'test-proxy-recorder/nextjs';
export const getServerRecordingId = cache(async () => {
try {
const { headers } = await import('next/headers');
const headersList = await headers();
return headersList.get(RECORDING_ID_HEADER.toLowerCase()) || undefined;
} catch {
return undefined; // Not in a Server Component request context
}
});Prefer registerProxyAxios(instance) (Setup) — it does exactly this. Use the manual interceptor below only if you need custom logic around it. It also shows the React.cache() helper (above) in context.
// lib/axios-server.ts
import axios from 'axios';
import { RECORDING_ID_HEADER } from 'test-proxy-recorder/nextjs';
import { getServerRecordingId } from './recording-id';
const isTestMode = process.env.NODE_ENV !== 'production';
export const axiosForServer = axios.create();
axiosForServer.interceptors.request.use(async (config) => {
if (typeof window === 'undefined' && isTestMode) {
try {
const recordingId = await getServerRecordingId();
if (recordingId) {
config.headers.set(RECORDING_ID_HEADER, recordingId);
}
} catch {
// Not in a Server Component context — silently skip
}
}
return config;
});import { getRecordingId, RECORDING_ID_HEADER } from 'test-proxy-recorder/nextjs';
import { headers } from 'next/headers';
import type { NextRequest } from 'next/server';
// From headers() in a Server Component
const fromServerComponent = getRecordingId(await headers());
// From NextRequest in middleware, forwarded by hand
export function middleware(request: NextRequest) {
const recordingId = getRecordingId(request.headers);
const requestHeaders = new Headers(request.headers);
if (recordingId) {
requestHeaders.set(RECORDING_ID_HEADER, recordingId);
}
}Wrong:
// middleware.ts — ignored in Next.js 16, session header never forwarded
import { setNextProxyHeaders } from 'test-proxy-recorder/nextjs';
export function middleware(request) {
const response = NextResponse.next();
setNextProxyHeaders(request, response);
return response;
}Correct:
// proxy.ts — Next.js 16 middleware entry point, at project root
import { setNextProxyHeaders } from 'test-proxy-recorder/nextjs';
export function proxy(request) {
const response = NextResponse.next();
setNextProxyHeaders(request, response);
return response;
}
export const config = {
matcher: ['/((?!_next/static|_next/image|favicon.ico).*)'],
};Next.js 16 replaced middleware.ts with proxy.ts as the middleware entry point, and the exported function is named proxy, not middleware. Keeping either old name silently does nothing — the session header is never forwarded and all SSR recordings are grouped under the wrong session.
Source: apps/example-nextjs16/proxy.ts
Wrong:
// instrumentation.ts — register() runs in a different context than the one
// rendering Edge routes, so this globalThis.fetch is NOT the one your Server
// Components call. The patch silently never fires; SSR fetches stay untagged.
export async function register() {
const { registerProxyFetch } = await import('test-proxy-recorder/nextjs');
registerProxyFetch();
}Correct:
// app/layout.tsx — the root layout shares the request runtime with your pages,
// so the patch lands on the fetch the Edge route actually uses.
import { registerProxyFetch } from 'test-proxy-recorder/nextjs';
registerProxyFetch();On the Edge runtime, instrumentation.ts's register() runs in a separate context from route rendering, so a globalThis.fetch patch installed there does not affect Server Component fetches. Call registerProxyFetch() from the root layout instead. Also remember that next start runs in production mode, so set TEST_PROXY_RECORDER_ENABLED=true on the app process or the patch is a no-op.
Source: apps/example-nextjs-edge/app/layout.tsx; packages/test-proxy-recorder/src/nextjs/registerProxyFetch.ts
Wrong:
// proxy.ts / middleware.ts only — nothing actually tags the outgoing fetch
export function proxy(request) {
const response = NextResponse.next();
setNextProxyHeaders(request, response);
return response;
}
// app/page.tsx — bare SSR fetch, no helper
const data = await fetch('http://localhost:8100/api/data');Correct — add one of the forwarding helpers (Setup):
// app/layout.tsx — tags every server-side fetch
import { registerProxyFetch } from 'test-proxy-recorder/nextjs';
registerProxyFetch();
// (axios apps: registerProxyAxios(instance); or per-call createHeadersWithRecordingId)setNextProxyHeaders only exposes the id via next/headers; it does not inject it into outgoing fetch/axios calls. With middleware alone, SSR requests go out untagged and parallel replay fails — the proxy can't tell which session a request belongs to (verified: middleware-only → fail; registerProxyFetch-only, no middleware → pass, on both Node and Edge runtimes). The middleware is optional; a forwarding helper is what's required.
Source: experiment in repo TODO.md; apps/example-nextjs-edge
Wrong:
{
"scripts": {
"start:proxy": "concurrently \"pnpm proxy\" \"INTERNAL_API_URL=http://localhost:8100 next start\""
}
}Correct:
{
"scripts": {
"start:proxy": "concurrently \"pnpm proxy\" \"INTERNAL_API_URL=http://localhost:8100 TEST_PROXY_RECORDER_ENABLED=true next start\""
}
}Recording should run against a production build (next build && next start — see proxy-setup), but next build sets NODE_ENV=production, which turns setNextProxyHeaders and createHeadersWithRecordingId into silent no-ops. SSR requests still flow through the proxy but lose their session ID, so they are recorded under the wrong session — or not at all. Set TEST_PROXY_RECORDER_ENABLED=true on the app process whenever testing a production build.
Source: packages/test-proxy-recorder/src/nextjs/middleware.ts — isRecorderEnabled()
Wrong:
import { headers } from 'next/headers'; // throws when evaluated on the client
axiosForServer.interceptors.request.use(async (config) => {
const id = (await headers()).get('x-test-rcrd-id');
config.headers.set('x-test-rcrd-id', id);
return config;
});Correct:
axiosForServer.interceptors.request.use(async (config) => {
if (typeof window === 'undefined' && isTestMode) {
try {
const { getServerRecordingId } = await import('./recording-id');
const recordingId = await getServerRecordingId();
if (recordingId) config.headers.set(RECORDING_ID_HEADER, recordingId);
} catch {
// Not in a Server Component context — silently skip
}
}
return config;
});next/headers throws when imported outside a Server Component request context (including on the client). Always lazy-import it inside the interceptor, guard with typeof window === 'undefined', and wrap in try/catch.
Source: channels/web/core/api/axios.ts
Wrong:
// Called independently in each server utility — redundant async header reads
async function fetchUsers() {
const { headers } = await import('next/headers');
const id = (await headers()).get('x-test-rcrd-id');
return fetch(url, { headers: { 'x-test-rcrd-id': id ?? '' } });
}
async function fetchPosts() {
const { headers } = await import('next/headers');
const id = (await headers()).get('x-test-rcrd-id');
return fetch(url2, { headers: { 'x-test-rcrd-id': id ?? '' } });
}Correct:
// lib/recording-id.ts — memoized once per request via React cache()
import { cache } from 'react';
import { RECORDING_ID_HEADER } from 'test-proxy-recorder/nextjs';
export const getServerRecordingId = cache(async () => { /* ... */ });
// Each utility reuses the cached value
async function fetchUsers() {
const id = await getServerRecordingId();
return fetch(url, { headers: id ? { [RECORDING_ID_HEADER]: id } : {} });
}Wrap the headers() call in React.cache() once. The memoized function is called once per server request regardless of how many fetch utilities invoke it.
Source: channels/web/lib/recording-id.ts
Wrong:
// No production guard — leaks session IDs in prod if env var is misconfigured
response.headers.set('x-test-rcrd-id', request.headers.get('x-test-rcrd-id') ?? '');Correct:
import { setNextProxyHeaders } from 'test-proxy-recorder/nextjs';
setNextProxyHeaders(request, response); // automatically skips in productionUse the library helpers instead of manually reading/setting x-test-rcrd-id. setNextProxyHeaders and createHeadersWithRecordingId both check NODE_ENV !== 'production' (or TEST_PROXY_RECORDER_ENABLED) and are no-ops when the guard fails.
Source: packages/test-proxy-recorder/src/nextjs/middleware.ts — isRecorderEnabled()
If the user encounters unexpected behavior, a bug, or a use case not covered by these patterns, direct them to open a GitHub issue at https://github.com/asmyshlyaev177/test-proxy-recorder/issues/new. A minimal reproduction helps the maintainer resolve it quickly.
See also: test-proxy-recorder/proxy-setup — for proxy CLI, fixtures, and record/replay lifecycle
© asmyshlyaev177, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file (references) in packages/test-proxy-recorder/skills/nextjs-ssr of asmyshlyaev177/test-proxy-recorder.
Open the folder on GitHubat commit a443417
Nextjs Ssr 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 |
|---|---|---|---|---|---|---|
| Nextjs Ssr this skillasmyshlyaev177/test-proxy-recorder | 78 | — | ~4.5k | Automated safety check: Pass | MIT | |
| Playwright Coretestdino-hq/playwright-skill | 390 | 1 repos | ~1.4k | Automated safety check: Pass | MIT | |
| Menu Testing Ssrasmyshlyaev177/react-horizontal-scrolling-menu | 790 | — | ~3.5k | Automated safety check: Pass | MIT | |
| Senior QAalirezarezvani/claude-skills | 28k | 1 repos | ~2.1k | Automated safety check: Pass | MIT | |
| Senior QAborghei/Claude-Skills | 891 | — | ~1.6k | Automated safety check: Pass | MIT | |
| Fix Frontend Review CommentsJetBrains/kotlin-web-site | 1.6k | — | ~444 | Automated safety check: Pass | Apache-2.0 |
testdino-hq/playwright-skill
Battle-tested Playwright patterns for writing and debugging reliable E2E, API, component, visual, accessibility, and security tests.
asmyshlyaev177/react-horizontal-scrolling-menu
Server rendering and testing for react-horizontal-scrolling-menu: the library is client-only ('use client' required in React Server Components, else "createContext is not a function"), SSR first…
alirezarezvani/claude-skills
Generates unit tests, integration tests, and E2E tests for React/Next.js applications.
borghei/Claude-Skills
Testing for React/Next.js with Jest, React Testing Library, and Playwright.
JetBrains/kotlin-web-site
Apply pull-request review comments to the frontend of kotlinlang.org (Next.js, React, TypeScript, CSS Modules under blocks/, components/, pages/, hooks/, utils/, test/).
julianromli/opencode-template
Optimize Next.js App Router data fetching by converting slow client-side fetching to fast server-side fetching using React Server Components (RSC).
asmyshlyaev177/test-proxy-recorder
Set up test-proxy-recorder for any Playwright project. An agent skill from asmyshlyaev177/test-proxy-recorder.
asmyshlyaev177/test-proxy-recorder
Record and replay TanStack Start SSR with test-proxy-recorder.
Works with
Categories
Tag server-side fetches with the x-test-rcrd-id session header so SSR is recorded under the correct Playwright test session. Nextjs Ssr is an agent skill from asmyshlyaev177/test-proxy-recorder. Tag server-side fetches with the x-test-rcrd-id session header so SSR is recorded under the correct Playwright test session.
Nextjs Ssr fits situations like: tasks that involve Backend development; tasks that involve Serverless; tasks that involve Browser testing.
Run `npx skills add asmyshlyaev177/test-proxy-recorder --skill nextjs-ssr -a claude-code`. Or copy the skill folder (packages/test-proxy-recorder/skills/nextjs-ssr in asmyshlyaev177/test-proxy-recorder) into .claude/skills/nextjs-ssr in your project. Claude Code loads it when a task matches its description.
Run `npx skills add asmyshlyaev177/test-proxy-recorder --skill nextjs-ssr -a codex`. Or copy the skill folder (packages/test-proxy-recorder/skills/nextjs-ssr in asmyshlyaev177/test-proxy-recorder) into .agents/skills/nextjs-ssr 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 asmyshlyaev177/test-proxy-recorder --skill nextjs-ssr -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-ssr, .gemini/skills/nextjs-ssr, .github/skills/nextjs-ssr and .opencode/skills/nextjs-ssr in your project.
SKILL.md names no scripts, command-line tools or credentials: Nextjs Ssr is instructions for the agent only.
SKILL.md names 1 domain. As links in the text: github.com. 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.
Nextjs Ssr is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.5k tokens (SKILL.md is roughly 18k 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.
Skills that share tags, products or a category with Nextjs Ssr: Playwright Core (testdino-hq/playwright-skill, 390 stars), Menu Testing Ssr (asmyshlyaev177/react-horizontal-scrolling-menu, 790 stars), Senior QA (alirezarezvani/claude-skills, 28k stars) and Senior QA (borghei/Claude-Skills, 891 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
asmyshlyaev177 (a GitHub user) maintains it in asmyshlyaev177/test-proxy-recorder, which has 78 GitHub stars. The repository holds 3 skills in this directory. The repository was last updated on October 9, 2026.
Source: asmyshlyaev177/test-proxy-recorder on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.