RE

relentless-tester

An autonomous testing agent that systematically executes CLI commands and verifies output against a quality rubric.

Install

mkdir -p .claude/skills/relentless-tester && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/11120" && unzip -o skill.zip -d .claude/skills/relentless-tester && rm skill.zip

Installs to .claude/skills/relentless-tester

Activation

This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.

Autonomous QA tester that systematically tests every rdst command via tmux harness, applies a quality rubric, and files bugs in beads
133 charsno explicit “when” trigger
Advanced

Key capabilities

  • Systematically test CLI commands
  • Apply quality rubric
  • File bugs in beads
  • Report progress

How it works

It autonomously executes CLI commands in a tmux harness, scrutinizes output, and files bugs for any deviations.

Inputs & outputs

You give it
Test round and area
You get back
Bug reports and progress summary

When to use relentless-tester

  • Systematically test all CLI commands in a project
  • Verify command output stability across test cycles
  • Automate regression testing for a development tool

About this skill

Relentless Tester

You are an obsessively thorough, autonomous QA tester. Your job is to systematically exercise every rdst command, scrutinize every pixel of output, and file bugs for anything that doesn't meet the quality bar. You run for as long as possible, testing area by area, round by round.

Mindset: You are not a developer. You are a hostile, skeptical user who assumes everything is broken until proven otherwise. You read every word of output. You check alignment. You try to break things.

Arguments

  • $ARGUMENTS - Optional: [round-number] [area-name] to resume at a specific point. Default: start from round 1, first area.

Workflow

┌─────────────────────────────────────────────────────────────┐
│ Phase 1: Setup                                              │
│   - Find or create "Relentless Tester" epic in beads        │
│   - Detect available DB targets (rdst configure list)       │
│   - Determine which tiers are testable                      │
│   - Parse $ARGUMENTS for resume point                       │
└─────────────────────────────────────────────────────────────┘
                            ↓
┌─────────────────────────────────────────────────────────────┐
│ Phase 2: Area Loop (autonomous — no user prompts)           │
│   For each test area in current round:                      │
│     1. Start fresh tmux session                             │
│     2. Execute test cases for that area                     │
│     3. Capture and scrutinize all output                    │
│     4. Apply quality rubric to every screen                 │
│     5. File bugs (with dedup check)                         │
│     6. Kill tmux session                                    │
│     7. Report area completion                               │
│   When all areas done → advance to next round               │
└─────────────────────────────────────────────────────────────┘
                            ↓
┌─────────────────────────────────────────────────────────────┐
│ Phase 3: Progress Report                                    │
│   - Summary of areas tested                                 │
│   - Bugs filed (with IDs)                                   │
│   - Areas remaining                                         │
│   - Cost breakdown per area (LLM calls + tokens + $)        │
│   - Total session cost                                      │
└─────────────────────────────────────────────────────────────┘

Phase 1: Setup

1.1 Find or Create Epic

Search for existing epic:

bd search "Relentless Tester"

If no epic found, create one:

bd create --title="Relentless Tester: Automated QA" --type=epic --priority=3 \
  --description="Parent epic for all bugs found by the relentless-tester skill. Each child issue represents a specific bug with reproduction steps."

Save the epic ID for use as --parent when filing bugs.

1.2 Detect DB Targets

Start a tmux session and check for configured targets:

python3 scripts/tmux_harness.py start --session test
python3 scripts/tmux_harness.py send-and-wait -s test --text "uv run rdst.py configure list" --enter --pattern "\\$" --timeout 15
python3 scripts/tmux_harness.py read -s test --last 30
python3 scripts/tmux_harness.py kill -s test
  • If targets exist → both Tier 1 and Tier 2 areas are available
  • If no targets → only Tier 1 areas (skip Tier 2)

1.3 Parse Arguments

If $ARGUMENTS is provided:

  • First token = round number (e.g., 2)
  • Second token = area name to start from (e.g., help-system)
  • Skip ahead to that point in the area list

Phase 2: Testing Loop

Session Lifecycle

CRITICAL: Start a fresh tmux session for each test area. Kill it when done.

# Before each area
python3 scripts/tmux_harness.py kill -s test    # cleanup any leftover
python3 scripts/tmux_harness.py start --session test

# After each area
python3 scripts/tmux_harness.py kill -s test

Session name is always test. Working directory defaults to src/.

Harness Quick Reference

All commands run from the rdst/ directory (e.g. readyset/rdst/ — wherever you cloned the repo):

ActionCommandWhen to use
Start sessionpython3 scripts/tmux_harness.py start --session testBeginning of each area
Run a commandpython3 scripts/tmux_harness.py send-and-wait -s test --text "uv run rdst.py version" --enter --pattern "\\$" --timeout 15Execute rdst command and wait for shell prompt
Read outputpython3 scripts/tmux_harness.py read -s test --last 30Capture screen after command
Send textpython3 scripts/tmux_harness.py send -s test --text "y" --enterAnswer a prompt
Send special keypython3 scripts/tmux_harness.py send -s test --key C-cSend Ctrl-C
Wait for patternpython3 scripts/tmux_harness.py wait-for -s test --pattern "Select.*:" --timeout 10Wait for interactive prompt
Wait until stablepython3 scripts/tmux_harness.py wait-stable -s test --settle 2 --timeout 15Wait for output to stop changing
Kill sessionpython3 scripts/tmux_harness.py kill -s testEnd of each area
List sessionspython3 scripts/tmux_harness.py listDebug: check for leftover sessions

Pattern tips:

  • Use \\$ to match the shell prompt (end of command execution)
  • Use --timeout 15 for commands that take a moment
  • Use --last 50 on read to get enough context
  • Always read output AFTER send-and-wait confirms the prompt returned

Running rdst Commands

Always use uv run rdst.py <command> inside the tmux session. Examples:

# Simple command
python3 scripts/tmux_harness.py send-and-wait -s test \
  --text "uv run rdst.py version" --enter --pattern "\\$" --timeout 15

# Command with arguments
python3 scripts/tmux_harness.py send-and-wait -s test \
  --text "uv run rdst.py analyze --help" --enter --pattern "\\$" --timeout 10

# Interactive command (send command, wait for prompt, then respond)
python3 scripts/tmux_harness.py send -s test --text "uv run rdst.py configure add" --enter
python3 scripts/tmux_harness.py wait-for -s test --pattern "engine" --timeout 10
python3 scripts/tmux_harness.py read -s test --last 20

Cost Tracking

Every area reports its LLM cost. This lets you see which areas are expensive and compare total cost across sessions.

Per-Area Cost Tracking

At the start of each area, initialize a cost accumulator:

AREA_INPUT_TOKENS = 0
AREA_OUTPUT_TOKENS = 0
AREA_LLM_CALLS = 0

For every command that uses --json output and involves an LLM (ask, analyze, guard intent, agent), extract tokens from the JSON after capturing output:

import json, subprocess
data = json.loads(captured_output)

# For `rdst ask --json`:
usage = data.get("token_usage") or data.get("usage") or {}

# For `rdst analyze --json`:
usage = (data.get("llm_analysis") or {}).get("token_usage") or {}

AREA_INPUT_TOKENS  += usage.get("input_tokens", 0)
AREA_OUTPUT_TOKENS += usage.get("output_tokens", 0)
AREA_LLM_CALLS     += 1

If the JSON structure differs or tokens aren't present, log (tokens: N/A) and use the call count to estimate later.

Cost Calculation

Use Sonnet 4.x pricing as the default estimate (adjust if a different model is in use):

  • Input: $3.00 / 1M tokens
  • Output: $15.00 / 1M tokens
cost_usd = (AREA_INPUT_TOKENS / 1_000_000 * 3.00) + (AREA_OUTPUT_TOKENS / 1_000_000 * 15.00)

Area LLM Budget Guide

Use this to know what to expect before running:

AreaTierLLM callsEst. cost
1–15 (no area 28)10$0.00
25–2710$0.00
28 (guard-intent)1+API~2~$0.02
16 (top)20$0.00
17 (analyze-simple)2+API~5~$0.15
18 (analyze-complex)2+API~5~$0.20
19–2220–1~$0.01
23 (ask-basic)2+API~13~$0.10
24 (ask-complex)2+API~17~$0.15
29 (guard-enforcement)2+API~7~$0.15
30 (guard-masking)2+API~4~$0.08
31 (determinism)2+API~27~$0.35
32 (analyze-rules)2+API~12~$0.20

Test Area Catalog

Tier 1: No Database Required

Area 1: version

Test rdst version output.

  • Run uv run rdst.py version — verify it prints version string
  • Check version format (semver-like or reasonable)
  • Check for spelling errors in any surrounding text
  • Check output is clean (no warnings, no tracebacks)

Area 2: help-system

Test rdst --help and rdst help.

  • Run uv run rdst.py --help — verify all commands are listed
  • Run uv run rdst.py help — verify help topic system works
  • Run uv run rdst.py help "how do I analyze a query" — verify contextual help
  • Check every command has a description
  • Check alignment of help text columns
  • Check capitalization consistency (all descriptions start same way?)
  • Check for typos in all help text

Area 3: command-help-pages

Test --help for every command and subcommand.

  • uv run rdst.py configure --help
  • uv run rdst.py configure add --help
  • uv run rdst.py configure list --help
  • uv run rdst.py configure edit --help
  • uv run rdst.py configure remove --help
  • uv run rdst.py configure default --help
  • uv run rdst.py configure test --help
  • uv run rdst.py top --help
  • uv run rdst.py analyze --help
  • uv run rdst.py ask --help
  • uv run rdst.py init --help
  • uv run rdst.py query --help
  • uv run rdst.py query add --help
  • uv run rdst.py query list --help
  • uv run rdst.py query show --help
  • uv run rdst.py query delete --help
  • uv run rdst.py query import --help
  • uv run rdst.py query edit --help
  • uv run rdst.py query run --help
  • uv run rdst.py schema --help
  • uv run rdst.py schema show --help
  • `uv run

Content truncated.

When not to use it

  • When the user wants to perform manual testing
  • When the environment is not a tmux harness

Prerequisites

tmux harness

Limitations

  • Never modify real user configuration
  • Kill tmux session between areas

How it compares

It acts as an autonomous, hostile QA tester rather than a developer, ensuring thoroughness.

Compared to similar skills

relentless-tester side by side with the closest alternatives in the catalog.

SkillInstallsUpdatedSafetyDifficulty
relentless-tester (this skill)03moReviewAdvanced
dev26moReviewAdvanced
overnight-development127dReviewIntermediate
workflow-patterns12moNo flagsIntermediate

Try saying

Example prompts that trigger this skill in your AI assistant.

Search skills

Search the agent skills registry