brainstorming
Structured design dialogue that validates ideas before implementation begins.
harness-tester
Testing orchestrator for autonomous harness. Runs comprehensive tests (unit, integration, E2E), coordinates with validation systems, and reports results to Archon. Supports browser automation via Playwright MCP. Use when verifying features, running test suites, or validating code changes.
Full skill instructions
Specialized testing skill for the autonomous harness system. Runs comprehensive tests and reports results to Archon for tracking.
Use this skill when:
Provide thorough testing and verification of features:
Test a specific feature by task ID.
Run all tests in the project.
Quick validation that the project builds and basic tests pass.
UI testing with browser automation.
Identify:
cat .harness/config.json
# Get project configuration
config = find_documents(
project_id=PROJECT_ID,
document_type="guide",
query="Harness Configuration"
)
testing_strategy = config["content"]["testing_strategy"]
# Could be: "unit", "unit+integration", "full-e2e", "manual"
# Node.js / TypeScript
npm test -- --coverage
# Python
pytest tests/unit/ -v --cov
# Go
go test ./... -v -cover
# Rust
cargo test --lib
# .NET
dotnet test --filter Category=Unit
# Node.js
npm run test:integration
# Python
pytest tests/integration/ -v
# Or with specific database/services
docker-compose up -d test-db
npm run test:integration
docker-compose down
For web applications, use Playwright MCP for browser automation:
# Using Playwright MCP
mcp__playwright__browser_navigate(url="http://localhost:3000")
mcp__playwright__browser_snapshot()
# Test user flow
mcp__playwright__browser_type(
element="Email input",
ref="input[name='email']",
text="[email protected]"
)
mcp__playwright__browser_type(
element="Password input",
ref="input[name='password']",
text="testpassword123"
)
mcp__playwright__browser_click(
element="Login button",
ref="button[type='submit']"
)
mcp__playwright__browser_wait_for(text="Dashboard")
# Verify result
snapshot = mcp__playwright__browser_snapshot()
# Check for expected elements
Parse test output to determine:
# Update task with test results
manage_task("update",
task_id="<TASK_ID>",
description=f"""[ORIGINAL_DESCRIPTION]
---
## Test Results (Verified by harness-tester)
**Timestamp**: {timestamp}
**Status**: {"PASSING" if all_passed else "FAILING"}
### Summary
| Type | Passed | Failed | Total |
|------|--------|--------|-------|
| Unit | {unit_passed} | {unit_failed} | {unit_total} |
| Integration | {int_passed} | {int_failed} | {int_total} |
| E2E | {e2e_passed} | {e2e_failed} | {e2e_total} |
### Coverage
- Statements: {stmt_coverage}%
- Branches: {branch_coverage}%
- Functions: {func_coverage}%
{"### Failures" if failures else ""}
{failure_details if failures else ""}
### Verification
- [x] Unit tests executed
- [x] Integration tests executed
- [x] E2E tests executed
- [x] Results logged to Archon
"""
)
Only update session notes for failures or important findings:
if failures:
notes = find_documents(project_id=PROJECT_ID, query="Session Notes")
# Add test failure note
manage_document("update",
project_id=PROJECT_ID,
document_id=notes["id"],
content={
...notes["content"],
"blockers": notes["content"]["blockers"] + [
{
"type": "test_failure",
"task_id": TASK_ID,
"feature": FEATURE_NAME,
"details": failure_summary,
"timestamp": timestamp
}
]
}
)
// Unit test pattern
describe('Component', () => {
it('should render correctly', () => {
render(<Component />);
expect(screen.getByText('Expected')).toBeInTheDocument();
});
});
// Integration test pattern
describe('API Integration', () => {
it('should fetch data', async () => {
const response = await api.getData();
expect(response.status).toBe(200);
});
});
# Run commands
npm test # Unit tests
npm run test:integration # Integration
npx playwright test # E2E
# Unit test pattern
def test_service_function():
result = service.process(input_data)
assert result == expected
# Integration test pattern
def test_api_endpoint(client):
response = client.post("/api/endpoint", json=data)
assert response.status_code == 200
# Run commands
pytest tests/unit/ -v
pytest tests/integration/ -v
pytest tests/e2e/ -v
# Test CLI commands
./mycli --help | grep "Usage"
./mycli process input.txt | diff - expected_output.txt
echo $? # Should be 0
## Tests Passed
**Feature**: [FEATURE_NAME]
**Task**: [TASK_ID]
### Results
| Type | Status | Count |
|------|--------|-------|
| Unit | Pass | 15/15 |
| Integration | Pass | 8/8 |
| E2E | Pass | 3/3 |
### Coverage
- Statements: 87%
- Branches: 72%
- Functions: 91%
**Archon Updated**: Yes
## Tests Failed
**Feature**: [FEATURE_NAME]
**Task**: [TASK_ID]
### Results
| Type | Status | Count |
|------|--------|-------|
| Unit | Pass | 14/15 |
| Integration | Fail | 6/8 |
| E2E | Skip | 0/3 |
### Failures
#### Integration Test: `test_user_creation`
AssertionError: Expected status 201, got 400 at tests/integration/user.test.ts:45
Possible causes:
### Recommended Actions
1. Check validation rules in `src/services/user.ts`
2. Verify database schema matches model
3. Review request payload structure
**Archon Updated**: Yes (marked as failing)
When running E2E browser tests:
# Login flow test
async def test_login():
await navigate("http://localhost:3000/login")
await fill("input[name='email']", "[email protected]")
await fill("input[name='password']", "password123")
await click("button[type='submit']")
await wait_for_text("Dashboard")
snapshot = await take_snapshot()
assert "Welcome" in snapshot
return {"passed": True}
# Form validation test
async def test_form_validation():
await navigate("http://localhost:3000/signup")
await click("button[type='submit']") # Submit empty form
await wait_for_text("Email is required")
snapshot = await take_snapshot()
assert "Email is required" in snapshot
assert "Password is required" in snapshot
return {"passed": True}
Structured design dialogue that validates ideas before implementation begins.
Comprehensive design intelligence for web and mobile UI/UX across 10 technology stacks.
Comprehensive implementation plans for multi-step tasks, breaking down specs into bite-sized, testable steps.
Introduction to the obra skills system with mandatory skill invocation rules and best practices.
Execute a written implementation plan with critical review and task checkpoints.
Delegate independent tasks to specialized agents working concurrently with isolated context.
Isolated git worktrees with smart directory selection and safety verification.
Toolkit for interacting with and testing local web applications using Playwright. Supports verifying frontend functionality, debugging UI behavior, capturing browser screenshots, and viewing browser logs.
Plan searchable and shareable content that drives traffic, builds authority, and generates leads.
README-first repository scanner that extracts commands and classifies reproduction candidates without executing them.
Brainstorm and prioritize marketing strategies tailored to your SaaS stage, budget, and goals.
Plan and optimize your website's page hierarchy, navigation, URL structure, and internal linking.
The world's fastest calendar for remote work
Capture, organize, and utilize your knowledge effortlessly.
Instant Summaries of Audio & Video Interviews with AnySummary
Transform PDFs into engaging mind maps.
Chat with any PDF instantly
Create an optimal daily plan using your voice
A productivity platform to centralize organizational knowledge and workflows with contextual AI assistance.
AskYourPDF Pricing Plans: Tailored to Your Needs