Web Application Testing
anthropics/skills
Tests local web applications with Python Playwright scripts, checking frontend behavior, capturing screenshots and reading browser console logs.
Update the SDK test service implementations to match a new version of the e2e conformance contracts.
$ npx skills add restatedev/sdk-typescript --skill update-sdk-test-contracts -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install restatedev/sdk-typescript update-sdk-test-contracts --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/restatedev/sdk-typescript.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/update-sdk-test-contracts .claude/skills/update-sdk-test-contracts && 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 "update-sdk-test-contracts" agent skill from https://github.com/restatedev/sdk-typescript/tree/main/.claude/skills/update-sdk-test-contracts into .claude/skills/update-sdk-test-contracts/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "update-sdk-test-contracts", 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/restatedev/sdk-typescript/tree/main/.claude/skills/update-sdk-test-contractsType 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 restatedev/sdk-typescript --skill update-sdk-test-contracts -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install restatedev/sdk-typescript update-sdk-test-contracts --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/restatedev/sdk-typescript.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/update-sdk-test-contracts .agents/skills/update-sdk-test-contracts && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "update-sdk-test-contracts" agent skill from https://github.com/restatedev/sdk-typescript/tree/main/.claude/skills/update-sdk-test-contracts into .agents/skills/update-sdk-test-contracts/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "update-sdk-test-contracts", 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 restatedev/sdk-typescript --skill update-sdk-test-contracts -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install restatedev/sdk-typescript update-sdk-test-contracts --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/restatedev/sdk-typescript.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/update-sdk-test-contracts .cursor/skills/update-sdk-test-contracts && 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 "update-sdk-test-contracts" agent skill from https://github.com/restatedev/sdk-typescript/tree/main/.claude/skills/update-sdk-test-contracts into .cursor/skills/update-sdk-test-contracts/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "update-sdk-test-contracts", 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/restatedev/sdk-typescript.git --path .claude/skills/update-sdk-test-contracts--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 restatedev/sdk-typescript --skill update-sdk-test-contracts -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install restatedev/sdk-typescript update-sdk-test-contracts --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/restatedev/sdk-typescript.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/update-sdk-test-contracts .gemini/skills/update-sdk-test-contracts && 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 "update-sdk-test-contracts" agent skill from https://github.com/restatedev/sdk-typescript/tree/main/.claude/skills/update-sdk-test-contracts into .gemini/skills/update-sdk-test-contracts/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "update-sdk-test-contracts", 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 restatedev/sdk-typescript update-sdk-test-contractsInstalls 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 restatedev/sdk-typescript --skill update-sdk-test-contracts -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/restatedev/sdk-typescript.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/update-sdk-test-contracts .github/skills/update-sdk-test-contracts && 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 "update-sdk-test-contracts" agent skill from https://github.com/restatedev/sdk-typescript/tree/main/.claude/skills/update-sdk-test-contracts into .github/skills/update-sdk-test-contracts/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "update-sdk-test-contracts", 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 restatedev/sdk-typescript --skill update-sdk-test-contracts -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install restatedev/sdk-typescript update-sdk-test-contracts --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/restatedev/sdk-typescript.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/update-sdk-test-contracts .opencode/skills/update-sdk-test-contracts && 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 "update-sdk-test-contracts" agent skill from https://github.com/restatedev/sdk-typescript/tree/main/.claude/skills/update-sdk-test-contracts into .opencode/skills/update-sdk-test-contracts/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "update-sdk-test-contracts", 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.
update-sdk-test-contractsUpdate the SDK test service implementations to match a new version of the e2e conformance contracts.
Update SDK Test Contracts is an agent skill from restatedev/sdk-typescript. Update the SDK test service implementations to match a new version of the e2e conformance contracts. Use when the user says "update sdk tests", "update test contracts", or gives a specific e2e release tag to update to.
Its SKILL.md is about 1.6k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Testing & QA, covering End-to-end testing. The repository describes itself as: Restate SDK for JavaScript/Typescript. The licence is MIT.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 79b8358. 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.
Shell commands in SKILL.md call:
pnpmpodmanghFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use pnpm and gh, which can reach the network depending on how they are called.
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.
Update SDK Test Contracts loads about 1.6k tokens when it runs. Until then it costs about 61 tokens; SKILL.md has 369 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 restatedev/sdk-typescript at commit 79b8358, republished under its MIT licence (© restatedev). 369 words, ~1,578 tokens.
.claude/skills/update-sdk-test-contracts/SKILL.md (or your agent's skills folder).The conformance test suite (restatedev/e2e) defines contracts that every SDK must implement. When the contracts change, both service implementations in this repo must be updated.
The user will provide a release tag (e.g. v1.2.3). Fetch the GitHub release to understand what changed:
gh release view v1.2.3 --repo restatedev/e2eRead the release body carefully — it describes which contract interfaces changed, what new commands/handlers were added, and what was removed. This tells you exactly what to implement.
Both live in this repo:
| Implementation | Path | SDK |
|---|---|---|
| Main e2e services | packages/tests/restate-e2e-services/src/ | @restatedev/restate-sdk (async/await) |
| Gen test services | packages/libs/restate-sdk-gen/test-services/src/ | @restatedev/restate-sdk-gen (generator functions) |
The key files are:
virtual_object_command_interpreter.ts / vo-command-interpreter.ts — implements VirtualObjectCommandInterpretertest_utils.ts / test-utils.ts — implements TestUtilsServiceOther services (awakeable-holder, failing, counter, etc.) rarely change.
The contracts (Kotlin interfaces) in restatedev/e2e define:
@SerialName("camelCase") string, which becomes the type discriminator in JSONcamelCase fields map directly to JSON — match them exactlyVirtualObjectCommandInterpreter:AwaitOne / AwaitAny / AwaitFirstCompleted / AwaitFirstSucceededOrAllFailed → return the resolved string value; Sleep returns "sleep"AwaitAllSucceededOrFirstFailed → pipe-joined values: "val0|val1|val2"; throws on first failureAwaitAllCompleted → pipe-joined settled results: "ok:val0|err:reason|ok:val2"packages/tests/restate-e2e-services/src/)These use the standard async/await Restate SDK. Patterns:
New AwaitableCommand sub-type (e.g. createSignal):
// Add to the SubCommand union type and parseAwaitableCommand switch:
case "createSignal": {
const ctxInternal = ctx as unknown as restate.internal.ContextInternal;
return ctxInternal.signal<string>(command.signalName); // returns RestatePromise<string>
}New Command combinator (e.g. awaitAllCompleted):
// Add to the Command union type and interpretCommands switch:
case "awaitAllCompleted": {
const settled = await RestatePromise.allSettled(
command.commands.map((cmd) => parseAwaitableCommand(ctx, cmd))
);
lastResult = settled
.map((r) => r.status === "fulfilled" ? `ok:${r.value}` : `err:${(r.reason as Error).message}`)
.join("|");
break;
}New TestUtilsService handler (e.g. resolveSignal):
resolveSignal(
ctx: restate.Context,
req: { invocationId: string; signalName: string; value: string }
): Promise<void> {
const ctxInternal = ctx as unknown as restate.internal.ContextInternal;
ctxInternal
.invocation(restate.InvocationIdParser.fromString(req.invocationId))
.signal(req.signalName)
.resolve(req.value);
return Promise.resolve();
},Signals use the internal ContextInternal API — always cast with as unknown as restate.internal.ContextInternal (double cast required; direct cast from ObjectContext is rejected by tsc).
packages/libs/restate-sdk-gen/test-services/src/)These use generator functions. The gen SDK exports: all, allSettled, any, race, signal, invocation, sleep, run, awakeable, select, state, sharedState.
New AwaitableCommand sub-type (e.g. createSignal):
case "createSignal":
return { kind: "awakeable", future: signal<string>(cmd.signalName) };New Command combinator (e.g. awaitAllCompleted):
case "awaitAllCompleted": {
const subs: SubEntry[] = [];
for (const c of cmd.commands) subs.push(yield* createSub(c));
const settled = (yield* allSettled(subs.map((s) => s.future))) as FutureSettledResult<unknown>[];
result = settled
.map((r, i) =>
r.status === "rejected"
? `err:${(r.reason as Error).message}`
: `ok:${valueToString(r.value, subs[i]!.kind)}`
)
.join("|");
break;
}IMPORTANT — do NOT use spawn for multi-future combinators: spawn creates a structured child fiber, and the parent handler waits for ALL spawned children before completing. For race/any, this means a pending signal fiber would prevent the handler from ever returning. Pass the futures directly to all/allSettled/any/race.
New TestUtilsService handler (e.g. resolveSignal):
*resolveSignal(req: { invocationId: string; signalName: string; value: string }) {
invocation(req.invocationId).signal(req.signalName).resolve(req.value);
},# Type-check both packages
pnpm --filter restate-e2e-services run _check:types
pnpm --filter restate-sdk-gen build
# Build Docker images (from repo root)
podman build -t e2e-ts:local -f packages/tests/restate-e2e-services/Dockerfile .
podman build -t e2e-ts-gen:local -f packages/libs/restate-sdk-gen/test-services/Dockerfile .
# Run the affected test classes against both images (from ../e2e)
cd ../e2e
./gradlew :sdk-tests:run --args='run --sequential --image-pull-policy=CACHED --test-suite=default --test-name=<TestClass> --service-container-image=localhost/e2e-ts:local'
./gradlew :sdk-tests:run --args='run --sequential --image-pull-policy=CACHED --test-suite=default --test-name=<TestClass> --service-container-image=localhost/e2e-ts-gen:local'All tests must pass on both images before the update is complete.
© restatedev, 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 .claude/skills/update-sdk-test-contracts of restatedev/sdk-typescript.
Open the folder on GitHubat commit 79b8358
Update SDK Test Contracts 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 |
|---|---|---|---|---|---|---|
| Update SDK Test Contracts this skillrestatedev/sdk-typescript | 125 | — | ~1.6k | Automated safety check: Pass | MIT | |
| Web Application Testinganthropics/skills | 180k | 51 repos | ~966 | Automated safety check: Pass | Apache-2.0 | |
| TDD WorkflowhellangleZ/burn-in-cceverywhere-ralph | 112 | 11 repos | ~2.4k | Automated safety check: Pass | None | |
| Uloop Replay Inputkurotu/VRCQuestTools | 373 | 3 repos | ~615 | Automated safety check: Pass | MIT | |
| Ui4 Convert Testspayloadcms/payload | 45k | — | ~3.5k | Automated safety check: Pass | MIT | |
| E2Estackia/rtp2httpd | 2.2k | — | ~517 | Automated safety check: Pass | GPL-2.0 |
anthropics/skills
Tests local web applications with Python Playwright scripts, checking frontend behavior, capturing screenshots and reading browser console logs.
hellangleZ/burn-in-cceverywhere-ralph
A skill your agent uses when writing new features, fixing bugs, or refactoring code.
kurotu/VRCQuestTools
Replay recorded PlayMode keyboard and mouse input. An agent skill from kurotu/VRCQuestTools.
payloadcms/payload
A skill your agent uses when UI changes are complete and e2e tests need updating.
stackia/rtp2httpd
Write, run, review, or debug rtp2httpd E2E tests and their harness in e2e/ and scripts/run-e2e.sh.
MotherofallVPNs/MoaV
Run and debug MoaV's end-to-end tests — real protocol connectivity (client-test.sh) and the moav CLI smoke test — against a LIVE server, via the self-hosted e2e workflow or a local test VPS.
restatedev/sdk-typescript
Run the Restate SDK conformance test suite locally against this SDK's Docker image.
restatedev/sdk-typescript
When the user asks to add a new option/field/config to service, handler, endpoint, ServiceOptions, HandlerOpts, ObjectOptions, WorkflowOptions, or the discovery schema
restatedev/sdk-typescript
When the user asks to add a new e2e test to the restate-e2e-services package
Categories
Update the SDK test service implementations to match a new version of the e2e conformance contracts. Update SDK Test Contracts is an agent skill from restatedev/sdk-typescript. Update the SDK test service implementations to match a new version of the e2e conformance contracts.
Update SDK Test Contracts fits situations like: the user says update sdk tests; update test contracts; gives a specific e2e release tag to update to.
Run `npx skills add restatedev/sdk-typescript --skill update-sdk-test-contracts -a claude-code`. Or copy the skill folder (.claude/skills/update-sdk-test-contracts in restatedev/sdk-typescript) into .claude/skills/update-sdk-test-contracts in your project. Claude Code loads it when a task matches its description.
Run `npx skills add restatedev/sdk-typescript --skill update-sdk-test-contracts -a codex`. Or copy the skill folder (.claude/skills/update-sdk-test-contracts in restatedev/sdk-typescript) into .agents/skills/update-sdk-test-contracts 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 restatedev/sdk-typescript --skill update-sdk-test-contracts -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/update-sdk-test-contracts, .gemini/skills/update-sdk-test-contracts, .github/skills/update-sdk-test-contracts and .opencode/skills/update-sdk-test-contracts in your project.
Going by SKILL.md and its folder, Update SDK Test Contracts needs the command-line tools its instructions call (pnpm, podman and gh). Our summary lists: Docker.
SKILL.md contains no URLs. Its commands use gh, which can reach the network depending on how they are called. 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.
Update SDK Test Contracts is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.6k tokens (SKILL.md is roughly 6.3k 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 Update SDK Test Contracts: Web Application Testing (anthropics/skills, 180k stars), TDD Workflow (hellangleZ/burn-in-cceverywhere-ralph, 112 stars), Uloop Replay Input (kurotu/VRCQuestTools, 373 stars) and Ui4 Convert Tests (payloadcms/payload, 45k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
restatedev (a GitHub organization) maintains it in restatedev/sdk-typescript, which has 125 GitHub stars. The repository holds 4 skills in this directory. The repository was last updated on October 6, 2026.
Source: restatedev/sdk-typescript on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.