E2E Test
crowdin/crowdin-api-client-js
Run end-to-end tests against the real Crowdin or Crowdin Enterprise API using credentials from .env.
Hunt for instrumentation bugs by analyzing code gaps and running e2e tests through DISABLED/RECORD/REPLAY cycle
$ npx skills add Use-Tusk/drift-node-sdk --skill bug-hunt -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install Use-Tusk/drift-node-sdk bug-hunt --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/Use-Tusk/drift-node-sdk.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/bug-hunt .claude/skills/bug-hunt && 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 "bug-hunt" agent skill from https://github.com/Use-Tusk/drift-node-sdk/tree/main/.claude/skills/bug-hunt into .claude/skills/bug-hunt/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "bug-hunt", 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/Use-Tusk/drift-node-sdk/tree/main/.claude/skills/bug-huntType 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 Use-Tusk/drift-node-sdk --skill bug-hunt -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install Use-Tusk/drift-node-sdk bug-hunt --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Use-Tusk/drift-node-sdk.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/bug-hunt .agents/skills/bug-hunt && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "bug-hunt" agent skill from https://github.com/Use-Tusk/drift-node-sdk/tree/main/.claude/skills/bug-hunt into .agents/skills/bug-hunt/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "bug-hunt", 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 Use-Tusk/drift-node-sdk --skill bug-hunt -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install Use-Tusk/drift-node-sdk bug-hunt --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Use-Tusk/drift-node-sdk.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/bug-hunt .cursor/skills/bug-hunt && 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 "bug-hunt" agent skill from https://github.com/Use-Tusk/drift-node-sdk/tree/main/.claude/skills/bug-hunt into .cursor/skills/bug-hunt/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "bug-hunt", 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/Use-Tusk/drift-node-sdk.git --path .claude/skills/bug-hunt--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 Use-Tusk/drift-node-sdk --skill bug-hunt -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install Use-Tusk/drift-node-sdk bug-hunt --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Use-Tusk/drift-node-sdk.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/bug-hunt .gemini/skills/bug-hunt && 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 "bug-hunt" agent skill from https://github.com/Use-Tusk/drift-node-sdk/tree/main/.claude/skills/bug-hunt into .gemini/skills/bug-hunt/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "bug-hunt", 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 Use-Tusk/drift-node-sdk bug-huntInstalls 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 Use-Tusk/drift-node-sdk --skill bug-hunt -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/Use-Tusk/drift-node-sdk.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/bug-hunt .github/skills/bug-hunt && 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 "bug-hunt" agent skill from https://github.com/Use-Tusk/drift-node-sdk/tree/main/.claude/skills/bug-hunt into .github/skills/bug-hunt/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "bug-hunt", 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 Use-Tusk/drift-node-sdk --skill bug-hunt -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install Use-Tusk/drift-node-sdk bug-hunt --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Use-Tusk/drift-node-sdk.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/bug-hunt .opencode/skills/bug-hunt && 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 "bug-hunt" agent skill from https://github.com/Use-Tusk/drift-node-sdk/tree/main/.claude/skills/bug-hunt into .opencode/skills/bug-hunt/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "bug-hunt", 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.
bug-huntHunt for instrumentation bugs by analyzing code gaps and running e2e tests through DISABLED/RECORD/REPLAY cycle
Bug Hunt is an agent skill from Use-Tusk/drift-node-sdk. Hunt for instrumentation bugs by analyzing code gaps and running e2e tests through DISABLED/RECORD/REPLAY cycle
Its SKILL.md is about 3.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. It works with Node.js, Testing Library, TypeScript and Redis. The repository describes itself as: Node.js SDK for capturing and replaying API calls made to/from your service. The licence is Apache-2.0.
7 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 6b2016d. 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:
dockergitnpmFrom 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.
Bug Hunt loads about 3.6k tokens when it runs. Until then it costs about 30 tokens; SKILL.md has 1,182 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 Use-Tusk/drift-node-sdk at commit 6b2016d, republished under its Apache-2.0 licence (© Use-Tusk). 1,182 words, ~3,626 tokens.
.claude/skills/bug-hunt/SKILL.md (or your agent's skills folder).$ARGUMENTS - The library name, optionally followed by focus context.
Format: <library> [focus on <area>]
Examples:
/bug-hunt redis — broad bug hunting across all redis functionality/bug-hunt redis focus on pub sub interactions — prioritize pub/sub patterns/bug-hunt mysql2 focus on prepared statements and transactions — prioritize those areasParsing: The first word of $ARGUMENTS is always the library name. Everything after it is the optional focus context. All references to <library> below mean this parsed first word — NOT the raw $ARGUMENTS string.
Use this mapping to clone the package source code for analysis:
| Library | GitHub Repo | Notes |
|---|---|---|
| mysql2 | https://github.com/sidorares/node-mysql2 | |
| redis | https://github.com/redis/node-redis | Monorepo — focus on packages/client/ |
| pg | https://github.com/brianc/node-postgres | Monorepo — focus on packages/pg/ |
| mongodb | https://github.com/mongodb/node-mongodb-native | |
| ioredis | https://github.com/redis/ioredis | |
| postgres | https://github.com/porsager/postgres | (postgres.js) |
| prisma | https://github.com/prisma/prisma | Monorepo — focus on packages/client/ |
| firestore | https://github.com/googleapis/nodejs-firestore | |
| grpc | https://github.com/grpc/grpc-node | Monorepo — focus on packages/grpc-js/ |
| fetch | N/A | Built-in Node.js API — no repo to clone |
| http | N/A | Built-in Node.js API — no repo to clone |
| mysql | https://github.com/mysqljs/mysql | |
| nextjs | https://github.com/vercel/next.js | Monorepo — focus on packages/next/ |
| upstash-redis-js | https://github.com/upstash/redis-js |
Each library has ESM and CJS variants. Use the CJS variant as the primary target for bug hunting:
| Library | CJS variant path |
|---|---|
| mysql2 | src/instrumentation/libraries/mysql2/e2e-tests/cjs-mysql2/ |
| redis | src/instrumentation/libraries/redis/e2e-tests/cjs-redis/ |
| pg | src/instrumentation/libraries/pg/e2e-tests/cjs-pg/ |
| mongodb | src/instrumentation/libraries/mongodb/e2e-tests/cjs-mongodb/ |
| ioredis | src/instrumentation/libraries/ioredis/e2e-tests/cjs-ioredis/ |
| postgres | src/instrumentation/libraries/postgres/e2e-tests/cjs-postgres/ |
| prisma | src/instrumentation/libraries/prisma/e2e-tests/cjs-prisma/ |
| firestore | src/instrumentation/libraries/firestore/e2e-tests/cjs-firestore/ |
| grpc | src/instrumentation/libraries/grpc/e2e-tests/cjs-grpc/ |
| fetch | src/instrumentation/libraries/fetch/e2e-tests/cjs-fetch/ |
| http | src/instrumentation/libraries/http/e2e-tests/cjs-http/ |
| mysql | src/instrumentation/libraries/mysql/e2e-tests/cjs-mysql/ |
| nextjs | src/instrumentation/libraries/nextjs/e2e-tests/cjs-nextjs/ |
| upstash-redis-js | src/instrumentation/libraries/upstash-redis-js/e2e-tests/cjs-upstash-redis-js/ |
Extract the library name (first word) and optional focus context (remaining words) from the arguments.
The library must be one of: fetch, firestore, grpc, http, ioredis, mongodb, mysql, mysql2, nextjs, pg, postgres, prisma, redis, upstash-redis-js.
If the library is invalid, list the valid options and stop.
If focus context is provided, it will guide Phases 1 and 2 to prioritize that area of the library's functionality.
Check if Docker is running. If not, start it:
dockerd --storage-driver=vfs &>/tmp/dockerd.log &
# Wait for Docker to be ready
for i in $(seq 1 30); do
docker info &>/dev/null 2>&1 && break
sleep 1
done
docker info &>/dev/null 2>&1 || { echo "Docker failed to start. Check /tmp/dockerd.log"; exit 1; }If Docker is already running, skip this step.
If the library has a GitHub repo (see mapping above), clone it for reference:
git clone --depth 1 <repo-url> /tmp/<library-name>-sourceThis is read-only reference material — you will NOT modify this repo.
Skip this step if you are already on a dedicated branch (e.g., in Claude Code Web where each session has its own branch).
git checkout -b bug-hunt/<library>-$(date +%Y-%m-%d)If focus context was provided, prioritize your analysis around that area. For example, if the focus is "pub sub interactions", concentrate on pub/sub-related code paths in the instrumentation, tests, and package source.
Read the instrumentation code at:
src/instrumentation/libraries/<library>/Instrumentation.tsIdentify:
Review the CJS variant's test files:
src/instrumentation/libraries/<library>/e2e-tests/cjs-<library>/src/index.ts — all test endpointssrc/instrumentation/libraries/<library>/e2e-tests/cjs-<library>/src/test_requests.mjs — which endpoints are calledUnderstand what functionality is already tested and identify coverage gaps.
If you cloned the package source, read it to understand:
If focus context was provided, prioritize bugs related to that area. You may still note other potential issues, but test the focus area first.
Reason about potential issues. Consider:
Produce a prioritized list of potential bugs to investigate.
Create BUG_TRACKING.md in the CJS e2e test directory:
# Path: src/instrumentation/libraries/<library>/e2e-tests/cjs-<library>/BUG_TRACKING.md# <library> Instrumentation Bug Tracking
Generated: <current date and time>
## Summary
- Total tests attempted: 0
- Confirmed bugs: 0
- No bugs found: 0
- Skipped tests: 0
---
## Test Results
(Tests will be documented below as they are completed)For each potential bug, follow this workflow:
Navigate to the CJS e2e test directory:
cd src/instrumentation/libraries/<library>/e2e-tests/cjs-<library>/Start Docker containers:
docker compose up -d --build --waitInstall dependencies:
docker compose exec -T app npm installrm -rf .tusk/traces/* .tusk/logs/*Add a new endpoint to src/index.ts that exercises the potential bug. Also add the corresponding request to src/test_requests.mjs.
Example:
app.get("/test/my-new-test", async (req, res) => {
// Your test code here
res.json({ success: true });
});Start server without instrumentation:
docker compose exec -d -e TUSK_DRIFT_MODE=DISABLED app sh -c "npm run build && npm run dev"Wait for server to start:
sleep 5Hit the endpoint:
docker compose exec app curl -s http://localhost:3000/test/my-new-testVerify: Response is correct and endpoint works.
Stop the server:
docker compose exec app pkill -f "node" || true
sleep 2If the endpoint fails in DISABLED mode:
BUG_TRACKING.md with status: "Skipped - Failed in DISABLED mode"Clean traces and logs:
rm -rf .tusk/traces/* .tusk/logs/*Start server in RECORD mode:
docker compose exec -d -e TUSK_DRIFT_MODE=RECORD app sh -c "npm run build && npm run dev"Wait for server to start:
sleep 5Hit the endpoint:
docker compose exec app curl -s http://localhost:3000/test/my-new-testWait for spans to export:
sleep 3Stop the server:
docker compose exec app pkill -f "node" || true
sleep 2Check for issues:
Endpoint returns error or wrong response vs DISABLED mode:
BUG_TRACKING.md: Status "Confirmed Bug - RECORD mode failure", Failure Point "RECORD"No traces created (ls .tusk/traces/):
BUG_TRACKING.md: Status "Confirmed Bug - No traces captured", Failure Point "RECORD"Run the Tusk CLI to replay:
docker compose exec -T -e TUSK_ANALYTICS_DISABLED=1 app tusk drift run --print --output-format "json" --enable-service-logs --disable-sandboxCheck for issues:
Test fails ("passed": false in JSON output):
BUG_TRACKING.md: Status "Confirmed Bug - REPLAY mismatch", Failure Point "REPLAY"No logs created (ls .tusk/logs/):
BUG_TRACKING.md: Status "Confirmed Bug - No replay logs", Failure Point "REPLAY"Logs contain TCP warnings:
docker compose exec app cat .tusk/logs/*.log | grep -i "TCP called from inbound request context"BUG_TRACKING.md: Status "Confirmed Bug - Unpatched dependency", Failure Point "REPLAY"If all modes pass with no issues:
BUG_TRACKING.md: Status "No Bug - Test passed all modes"src/index.ts and src/test_requests.mjsAfter each test, append to BUG_TRACKING.md:
### Test N: [Brief description]
**Status**: [Confirmed Bug | No Bug | Skipped]
**Endpoint**: `/test/endpoint-name`
**Failure Point**: [DISABLED | RECORD | REPLAY | N/A]
**Description**:
[What this test was trying to uncover]
**Expected Behavior**:
[What should happen]
**Actual Behavior**:
[What actually happened]
**Error Logs**:[Relevant error messages, stack traces, or warnings]
**Additional Notes**:
[Observations, potential root causes, context]
---Important: Update BUG_TRACKING.md immediately after each test — do not batch updates.
After testing all potential bugs:
docker compose downClean up cloned package source:
rm -rf /tmp/*-sourceFinal state of the e2e test files:
src/index.ts should contain ONLY the original endpoints + new endpoints that expose confirmed bugssrc/test_requests.mjs should be updated to include requests to bug-exposing endpointsBUG_TRACKING.md should have accurate summary counts and all test resultsCommit the changes:
git add src/instrumentation/libraries/<library>/e2e-tests/cjs-<library>/
git commit -m "bug-hunt(<library>): add e2e tests exposing instrumentation bugs
Found N confirmed bugs in <library> instrumentation.
See BUG_TRACKING.md for details."Push the branch (skip if in Claude Code Web where the session handles this):
git push origin bug-hunt/<library>-$(date +%Y-%m-%d)BUG_TRACKING.md before starting any testsBUG_TRACKING.md after each individual testBUG_TRACKING.mdbug-hunt/ branch© Use-Tusk, Apache-2.0. 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/bug-hunt of Use-Tusk/drift-node-sdk.
Open the folder on GitHubat commit 6b2016d
Bug Hunt 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 |
|---|---|---|---|---|---|---|
| Bug Hunt this skillUse-Tusk/drift-node-sdk | 173 | — | ~3.6k | Automated safety check: Pass | Apache-2.0 | |
| E2E Testcrowdin/crowdin-api-client-js | 139 | — | ~893 | Automated safety check: Notes | MIT | |
| Testingar-io/ar-io-node | 127 | — | ~2.6k | Automated safety check: Notes | AGPL-3.0 | |
| Frontmcp Guidesagentfront/frontmcp | 146 | — | ~6.3k | Automated safety check: Pass | Apache-2.0 | |
| Frontend Typescript Testingshinpr/ai-coding-project-boilerplate | 233 | — | ~1.5k | Automated safety check: Pass | MIT | |
| Test CommanderEliasOulkadi/shokunin | 114 | — | ~3k | Automated safety check: Notes | MIT |
crowdin/crowdin-api-client-js
Run end-to-end tests against the real Crowdin or Crowdin Enterprise API using credentials from .env.
ar-io/ar-io-node
Decision guide for testing in the ar-io-node repo — which test layer to use, how to run it, and which helpers to reach for.
agentfront/frontmcp
Tutorials, end-to-end walkthroughs, and complete reference projects for FrontMCP.
shinpr/ai-coding-project-boilerplate
Designs frontend tests using the repository's configured React test and browser harnesses, including RTL, MSW, Vitest, and Playwright when present.
EliasOulkadi/shokunin
Generate unit, integration, E2E, and visual regression tests following the Testing Trophy methodology (80% integration).
macalbert/envilder
Mandatory testing conventions for TypeScript stacks (Vitest for CLI/SDK/Website/CDK).
Works with
Categories
Hunt for instrumentation bugs by analyzing code gaps and running e2e tests through DISABLED/RECORD/REPLAY cycle. Bug Hunt is an agent skill from Use-Tusk/drift-node-sdk.
Bug Hunt fits situations like: tasks that involve End-to-end testing.
Run `npx skills add Use-Tusk/drift-node-sdk --skill bug-hunt -a claude-code`. Or copy the skill folder (.claude/skills/bug-hunt in Use-Tusk/drift-node-sdk) into .claude/skills/bug-hunt in your project. Claude Code loads it when a task matches its description.
Run `npx skills add Use-Tusk/drift-node-sdk --skill bug-hunt -a codex`. Or copy the skill folder (.claude/skills/bug-hunt in Use-Tusk/drift-node-sdk) into .agents/skills/bug-hunt 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 Use-Tusk/drift-node-sdk --skill bug-hunt -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/bug-hunt, .gemini/skills/bug-hunt, .github/skills/bug-hunt and .opencode/skills/bug-hunt in your project.
Going by SKILL.md and its folder, Bug Hunt needs the command-line tools its instructions call (docker, git and npm). Our summary lists: Node.js; Docker.
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.
Bug Hunt is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.6k tokens (SKILL.md is roughly 15k 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 Bug Hunt: E2E Test (crowdin/crowdin-api-client-js, 139 stars), Testing (ar-io/ar-io-node, 127 stars), Frontmcp Guides (agentfront/frontmcp, 146 stars) and Frontend Typescript Testing (shinpr/ai-coding-project-boilerplate, 233 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Use-Tusk (a GitHub organization) maintains it in Use-Tusk/drift-node-sdk, which has 173 GitHub stars. The repository was last updated on May 7, 2026.
Source: Use-Tusk/drift-node-sdk on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.