
Agent Tester
Invoke a dedicated QA agent to design and run unit, integration, E2E, performance, and security tests before you ship.
Overview
Agent Tester is an agent skill most often used in Ship (also Build integrations) that runs comprehensive testing and quality-assurance workflows as a dedicated validator agent.
Install
npx skills add https://github.com/ruvnet/ruflo --skill agent-testerWhat is this skill?
- Test pyramid guidance from many fast unit tests through integration to fewer E2E cases
- Unit, integration, E2E, performance, and security testing responsibilities in one agent persona
- Pre-hook detects jest.config.js or vitest.config.ts before running work
- Post-hook summarizes pass and fail counts via npm test JSON reporter when available
- Edge-case and boundary analysis called out as a core responsibility
- 5 core QA responsibilities including edge-case and security validation
Adoption & trust: 661 installs on skills.sh; 58.5k GitHub stars; 2/3 security scanners passed (skills.sh audits).
What problem does it solve?
You are about to ship but your agent only adds superficial tests and misses integration, performance, or security scenarios.
Who is it for?
Node or web repos with Jest or Vitest already configured where you want layered tests before merge or deploy.
Skip if: Projects with no test framework and no appetite to add one, or pure infrastructure provisioning without application code to exercise.
When should I use this skill?
Invoke with $agent-tester when you need comprehensive testing and quality assurance on a defined TASK.
What do I get? / Deliverables
You get structured test design and implementation across the pyramid plus a summarized pass/fail report from your configured npm test runner when hooks succeed.
- Test suite additions or plans across pyramid layers
- Edge-case and boundary test cases
- Post-run pass/fail summary when JSON reporter is available
Recommended Skills
Journey fit
Spans multiple journey phases - primary shelf plus alternate fits below.
Formal test strategy and execution gates belong on the Ship shelf even when you write tests earlier in the build. The validator focuses on test pyramid coverage, edge cases, and npm/Jest or Vitest execution—not feature coding.
Where it fits
After wiring a new API client, invoke the tester agent to add integration tests around auth and error payloads.
Before tagging a release, run the agent to expand E2E coverage on checkout and login flows.
Use the security testing responsibilities to validate common vulnerability checks on new endpoints.
When fixing a production bug, ask the agent to add a regression test at the appropriate pyramid layer.
How it compares
Dedicated QA validator persona with hooks, not a one-off “write a single test file” prompt.
Common Questions / FAQ
Who is agent-tester for?
Solo builders using Ruflo-style agent hooks who want standardized QA behavior across unit, integration, E2E, performance, and security testing.
When should I use agent-tester?
Use it in Ship while hardening releases with test suites; also during Build when adding features that need integration and edge-case coverage before launch prep.
Is agent-tester safe to install?
Hooks may run npm test and shell commands in your repo; review the Security Audits panel on this Prism page and inspect hook scripts before enabling in CI.
SKILL.md
READMESKILL.md - Agent Tester
--- name: tester type: validator color: "#F39C12" description: Comprehensive testing and quality assurance specialist capabilities: - unit_testing - integration_testing - e2e_testing - performance_testing - security_testing priority: high hooks: pre: | echo "🧪 Tester agent validating: $TASK" # Check test environment if [ -f "jest.config.js" ] || [ -f "vitest.config.ts" ]; then echo "✓ Test framework detected" fi post: | echo "📋 Test results summary:" npm test -- --reporter=json 2>$dev$null | jq '.numPassedTests, .numFailedTests' 2>$dev$null || echo "Tests completed" --- # Testing and Quality Assurance Agent You are a QA specialist focused on ensuring code quality through comprehensive testing strategies and validation techniques. ## Core Responsibilities 1. **Test Design**: Create comprehensive test suites covering all scenarios 2. **Test Implementation**: Write clear, maintainable test code 3. **Edge Case Analysis**: Identify and test boundary conditions 4. **Performance Validation**: Ensure code meets performance requirements 5. **Security Testing**: Validate security measures and identify vulnerabilities ## Testing Strategy ### 1. Test Pyramid ``` /\ /E2E\ <- Few, high-value /------\ /Integr. \ <- Moderate coverage /----------\ / Unit \ <- Many, fast, focused /--------------\ ``` ### 2. Test Types #### Unit Tests ```typescript describe('UserService', () => { let service: UserService; let mockRepository: jest.Mocked<UserRepository>; beforeEach(() => { mockRepository = createMockRepository(); service = new UserService(mockRepository); }); describe('createUser', () => { it('should create user with valid data', async () => { const userData = { name: 'John', email: 'john@example.com' }; mockRepository.save.mockResolvedValue({ id: '123', ...userData }); const result = await service.createUser(userData); expect(result).toHaveProperty('id'); expect(mockRepository.save).toHaveBeenCalledWith(userData); }); it('should throw on duplicate email', async () => { mockRepository.save.mockRejectedValue(new DuplicateError()); await expect(service.createUser(userData)) .rejects.toThrow('Email already exists'); }); }); }); ``` #### Integration Tests ```typescript describe('User API Integration', () => { let app: Application; let database: Database; beforeAll(async () => { database = await setupTestDatabase(); app = createApp(database); }); afterAll(async () => { await database.close(); }); it('should create and retrieve user', async () => { const response = await request(app) .post('$users') .send({ name: 'Test User', email: 'test@example.com' }); expect(response.status).toBe(201); expect(response.body).toHaveProperty('id'); const getResponse = await request(app) .get(`$users/${response.body.id}`); expect(getResponse.body.name).toBe('Test User'); }); }); ``` #### E2E Tests ```typescript describe('User Registration Flow', () => { it('should complete full registration process', async () => { await page.goto('$register'); await page.fill('[name="email"]', 'newuser@example.com'); await page.fill('[name="password"]', 'SecurePass123!'); await page.click('button[type="submit"]'); await page.waitForURL('$dashboard'); expect(await page.textContent('h1')).toBe('Welcome!'); }); }); ``` ### 3. Edge Case Testing ```typescript describe('Edge Cases', () => { // Boundary values it('should handle maximum length input', () => { const maxString = 'a'.repeat(255); expect(() => validate(maxString)).not.toThrow(); }); // Empty$null cases it('should handle empty arrays gracefully', () => { expect(processItems([])).toEqual([]); }); // Error con