datadog/manual-testing
Run a manual test of the current change end-to-end and output reproducible test instructions for the PR "Test instructions" section.
npx skills add https://github.com/DataDog/browser-sdk --skill manual-testing
If you don't have the PR changes in memory, review all commits in the PR to identify what SDK behavior changed and what events/fields need to be verified.
The dev server serves the sandbox/ directory and proxies intake requests locally. Use yarn dev-server --help to list all available commands.
yarn dev-server start
Create sandbox/test-<topic>.html. See sandbox/index.html for a minimal example. Include only the elements needed to exercise the change. Always use proxy: '/proxy'.
cat > sandbox/test-<topic>.html << 'EOF'
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Test <topic></title>
<script src="/datadog-rum.js"></script>
<script>
DD_RUM.init({ clientToken: 'xxx', applicationId: 'xxx', proxy: '/proxy', trackUserInteractions: true })
</script>
</head>
<body>
<!-- elements needed to exercise the change -->
</body>
</html>
EOF
Get the dev server URL from yarn dev-server status. Clear any previous intake data, open the page, interact with it using CSS selectors, flush events by opening a new tab or reloading, then inspect the intake:
yarn dev-server intake clear
agent-browser open <dev-server-url>/test-<topic>.html
agent-browser click '#...'
agent-browser tab new
yarn dev-server intake <selector> | jq '<field>'
Use yarn dev-server intake --help to find the right selector.
To evaluate JavaScript on the page (e.g. to inspect window state set by beforeSend), switch focus back to tab 0 first, then use agent-browser eval:
agent-browser tab 0
agent-browser eval 'window.someValue'
Output a self-contained bash snippet with the exact commands run and the expected output. This goes directly into the PR "Test instructions" section.
yarn dev-server stop
rm sandbox/test-<topic>.html
Take datadog/manual-testing from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.