Agent skill

Test Specialist

by travisjneuman in travisjneuman/.claude

Test-writing patterns for JS/TS, Python, Go, and Rust (unit, integration, E2E, visual regression).

MITAuto-check passedTesting & QA

Install Test Specialist

skills CLI
$ npx skills add travisjneuman/.claude --skill test-specialist -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install travisjneuman/.claude test-specialist --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/travisjneuman/.claude.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/test-specialist .claude/skills/test-specialist && rm -rf skills-src

Use ~/.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/

Facts

Skill name
test-specialist
GitHub stars
100
Token cost
~3.7k tokens
SKILL.md length
440 words
Files
7 (incl. scripts, references)
Skills in repo
17
Repo updated
First seen
Licence
MIT

At a glance

Test-writing patterns for JS/TS, Python, Go, and Rust (unit, integration, E2E, visual regression).

  • Works in 5 steps: Reproduce - Document exact steps,… → Isolate - Binary search, minimal… → Root Cause - Trace execution, check… → …
  • Explicitly asks for tests
  • SKILL.md covers When to Use, Testing Stack by Project, Test Patterns and Bug Analysis Process, plus 11 more sections
  • Runs Python and JavaScript scripts from its folder; calls npx

What it does

Test Specialist is an agent skill from travisjneuman/.claude. Test-writing patterns for JS/TS, Python, Go, and Rust (unit, integration, E2E, visual regression). Use only when the user explicitly asks for tests or test coverage; for debugging without a test request, use debug-systematic.

Its SKILL.md is about 3.7k tokens, which your agent loads only when the skill is triggered. The skill folder holds 8 other files, including scripts and reference files (for example `index.js`, `package.json` and `references/bug_analysis.md`).

It sits in Testing & QA, covering End-to-end testing, Unit testing and Test coverage. It works with Python, Rust, Playwright and Jest. The repository describes itself as: The Ultimate Claude Code Toolkit: 180 skills, 10 agents, 29 commands, 7 hooks, and 81 marketplace repos (11,000+ community skills). Drop-in ~/.claude config with a generated… The licence is MIT.

When your agent uses it

  • Explicitly asks for tests
  • For debugging without a test request
  • Use debug-systematic

Example prompts

  • “/test-specialist”

Requirements

  • Python 3
  • Node.js

Workflow steps

5 steps, taken from the first numbered list in SKILL.md.

  1. Reproduce - Document exact steps, expected vs actual
  2. Isolate - Binary search, minimal reproduction
  3. Root Cause - Trace execution, check assumptions, git blame
  4. Fix - Fix the root cause (write a failing test first only when the user asked for tests)
  5. Validate - Review the diff and the code paths it touches against the reproduction and edge cases

What it can do on your machine

Read from SKILL.md and the folder at commit 446a461. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Ships 2 files in scripts/ (Python and JavaScript), which the agent can run.

    Shell commands in SKILL.md call:

    • npx

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use npx, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Test Specialist loads about 3.7k tokens when it runs, and up to ~9.1k if it reads all its reference files. Until then it costs about 60 tokens; SKILL.md has 440 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~60
When it runs · the whole SKILL.md, loaded when a task matches
~3.7k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~9.1k

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.

Safety

Auto-check passed

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); the scripts in this folder are not scanned.

SKILL.md

The full file from travisjneuman/.claude at commit 446a461, republished under its MIT licence (© travisjneuman). 440 words, ~3,735 tokens.

Download SKILL.mdSave it as .claude/skills/test-specialist/SKILL.md (or your agent's skills folder). This skill also uses 6 other files; get the full folder from GitHub.
name
test-specialist
description
Test-writing patterns for JS/TS, Python, Go, and Rust (unit, integration, E2E, visual regression). Use only when the user explicitly asks for tests or test coverage; for debugging without a test request, use debug-systematic.

Test Specialist

Test-writing patterns for JS/TS, Python, Go, and Rust, plus bug-analysis habits that apply when tests are requested.

When to Use

Use this skill only when the user explicitly asks for tests. Without that request, validate by reviewing the diff and the code it touches.

Use for (when tests are requested):

  • Writing unit, integration, or E2E tests
  • Improving test coverage
  • Security and performance tests

Don't use when:

  • Debugging without a test request → use debug-systematic
  • Code review → use generic-code-reviewer
  • Technical debt → use tech-debt-analyzer
  • Feature development → use generic-feature-developer

Testing Stack by Project

Project TypeUnit TestsComponentE2E
React/Next.jsVitest/JestTesting LibraryPlaywright
Node.jsVitest/JestSupertestPlaywright
StaticJest-Playwright

Browser automation (Playwright, Percy, Chromatic, npx browser installs) is not installed or run on the owner's Mac. Run it only when the user asks, through an environment they have approved for it.

Test Patterns

Unit Tests (AAA Pattern)
typescript
describe("calculateTotal", () => {
  test("sums amounts correctly", () => {
    // Arrange
    const items = [{ amount: 100 }, { amount: 50 }];
    // Act
    const total = calculateTotal(items);
    // Assert
    expect(total).toBe(150);
  });

  test("handles empty list", () => {
    expect(calculateTotal([])).toBe(0);
  });
});
Component Tests (User Behavior)
typescript
// ✅ Test user behavior, not implementation
it('creates item when user clicks Add', async () => {
  const user = userEvent.setup();
  render(<ItemList />);

  await user.click(screen.getByRole('button', { name: /add/i }));
  await user.type(screen.getByLabelText(/title/i), 'New item');
  await user.click(screen.getByRole('button', { name: /save/i }));

  expect(screen.getByText('New item')).toBeInTheDocument();
});
E2E Tests (Playwright)
typescript
import { test, expect } from "@playwright/test";

test("user can complete checkout", async ({ page }) => {
  await page.goto("/products");

  // Add to cart
  await page.click('button:has-text("Add to Cart")');
  await page.click('a:has-text("Cart")');

  // Checkout
  await page.click('button:has-text("Checkout")');
  await page.fill('[name="email"]', "test@example.com");
  await page.click('button:has-text("Place Order")');

  // Verify
  await expect(page.locator("h1")).toContainText("Order Confirmed");
});
Integration Tests
typescript
test("POST /items creates item", async () => {
  const response = await request(app)
    .post("/api/items")
    .send({ name: "Test" })
    .expect(201);

  expect(response.body).toMatchObject({ id: expect.any(Number) });
});

Bug Analysis Process

  1. Reproduce - Document exact steps, expected vs actual
  2. Isolate - Binary search, minimal reproduction
  3. Root Cause - Trace execution, check assumptions, git blame
  4. Fix - Fix the root cause (write a failing test first only when the user asked for tests)
  5. Validate - Review the diff and the code paths it touches against the reproduction and edge cases

Debugging Checklist

When debugging an issue:

  • Can reproduce consistently
  • Minimal reproduction created
  • Console/network logs checked
  • State at failure point inspected
  • Git blame checked for recent changes
  • Fix reviewed against the reproduction (failing test only if tests were requested)

Common Bug Patterns

Race Conditions
typescript
test("handles concurrent updates", async () => {
  const promises = Array.from({ length: 100 }, () => increment());
  await Promise.all(promises);
  expect(getCount()).toBe(100);
});
Null Safety
typescript
test.each([null, undefined, "", 0])("handles invalid input: %p", (input) => {
  expect(() => process(input)).toThrow("Invalid");
});
Boundary Values
typescript
test("handles edge cases", () => {
  expect(paginate([], 1, 10)).toEqual([]); // empty
  expect(paginate([item], 1, 10)).toEqual([item]); // single
  expect(paginate(items25, 3, 10)).toHaveLength(5); // partial last page
});
Show full SKILL.md (176 more words)Show less

Security Tests

typescript
test("prevents SQL injection", async () => {
  const malicious = "'; DROP TABLE users; --";
  await expect(search(malicious)).resolves.not.toThrow();
});

test("sanitizes XSS", () => {
  const xss = '<script>alert("xss")</script>';
  expect(sanitize(xss)).not.toContain("<script>");
});

test("requires auth", async () => {
  await request(app).post("/api/items").expect(401);
});

Performance Tests

typescript
test("handles large datasets efficiently", () => {
  const largeList = Array.from({ length: 10000 }, (_, i) => ({ value: i }));
  const start = performance.now();
  process(largeList);
  expect(performance.now() - start).toBeLessThan(100);
});

Coverage Targets

Code TypeTarget
Critical paths90%+
Business logic85%+
UI components75%+
Utilities70%+

Test Quality Principles

  1. One behavior per test
  2. Descriptive names - test names explain scenario
  3. Independent tests - no shared state
  4. Cover edge cases - null, empty, boundaries, errors
  5. Mock external deps - tests should be fast
  6. Test behavior - not implementation details

Workflow Decision Tree

SituationAction
Adding feature (tests requested)Write test first (TDD)
Fixing bug (tests requested)Write failing test, then fix
Improving coverageFind gaps, prioritize critical paths
Code reviewCheck edge cases, error handling

Python Testing (pytest)

Fixtures and Parametrize
python
import pytest
from myapp.services import UserService

@pytest.fixture
def user_service(db_session):
    """Provide a UserService with test database."""
    return UserService(session=db_session)

@pytest.fixture
def sample_user(user_service):
    """Create and return a sample user."""
    return user_service.create(name="Test User", email="test@example.com")

class TestUserService:
    def test_create_user(self, user_service):
        user = user_service.create(name="John", email="john@example.com")
        assert user.name == "John"
        assert user.id is not None

    def test_get_user_not_found(self, user_service):
        with pytest.raises(UserNotFoundError, match="User 999 not found"):
            user_service.get(999)

    @pytest.mark.parametrize("email,is_valid", [
        ("user@example.com", True),
        ("user@sub.domain.com", True),
        ("invalid", False),
        ("@example.com", False),
        ("", False),
    ])
    def test_validate_email(self, user_service, email: str, is_valid: bool):
        assert user_service.validate_email(email) == is_valid
Mocking
python
from unittest.mock import Mock, patch, AsyncMock

def test_send_notification(user_service):
    with patch("myapp.services.email_client") as mock_email:
        mock_email.send = Mock(return_value=True)
        user_service.notify(user_id=1, message="Hello")
        mock_email.send.assert_called_once_with(
            to="test@example.com",
            body="Hello",
        )

# Async mocking
@pytest.mark.asyncio
async def test_fetch_data():
    with patch("myapp.client.fetch", new_callable=AsyncMock) as mock_fetch:
        mock_fetch.return_value = {"status": "ok"}
        result = await process_data()
        assert result["status"] == "ok"
conftest.py Patterns
python
# tests/conftest.py
import pytest
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

@pytest.fixture(scope="session")
def engine():
    return create_engine("sqlite:///:memory:")

@pytest.fixture(scope="function")
def db_session(engine):
    Base.metadata.create_all(engine)
    Session = sessionmaker(bind=engine)
    session = Session()
    yield session
    session.rollback()
    session.close()
    Base.metadata.drop_all(engine)

Go Testing

Table-Driven Tests
go
func TestCalculateDiscount(t *testing.T) {
    tests := []struct {
        name     string
        amount   float64
        code     string
        want     float64
        wantErr  bool
    }{
        {
            name:   "valid 10% discount",
            amount: 100.0,
            code:   "SAVE10",
            want:   90.0,
        },
        {
            name:   "no discount",
            amount: 100.0,
            code:   "",
            want:   100.0,
        },
        {
            name:    "invalid code",
            amount:  100.0,
            code:    "INVALID",
            wantErr: true,
        },
        {
            name:   "zero amount",
            amount: 0,
            code:   "SAVE10",
            want:   0,
        },
    }

    for _, tt := range tests {
        t.Run(tt.name, func(t *testing.T) {
            got, err := CalculateDiscount(tt.amount, tt.code)
            if (err != nil) != tt.wantErr {
                t.Errorf("CalculateDiscount() error = %v, wantErr %v", err, tt.wantErr)
                return
            }
            if got != tt.want {
                t.Errorf("CalculateDiscount() = %v, want %v", got, tt.want)
            }
        })
    }
}
Testify Assertions and Mocks
go
import (
    "testing"
    "github.com/stretchr/testify/assert"
    "github.com/stretchr/testify/mock"
    "github.com/stretchr/testify/require"
)

// Mock
type MockUserRepo struct {
    mock.Mock
}

func (m *MockUserRepo) FindByID(id string) (*User, error) {
    args := m.Called(id)
    if args.Get(0) == nil {
        return nil, args.Error(1)
    }
    return args.Get(0).(*User), args.Error(1)
}

func TestGetUser(t *testing.T) {
    repo := new(MockUserRepo)
    repo.On("FindByID", "123").Return(&User{ID: "123", Name: "John"}, nil)

    service := NewUserService(repo)
    user, err := service.GetUser("123")

    require.NoError(t, err)
    assert.Equal(t, "John", user.Name)
    repo.AssertExpectations(t)
}

// HTTP handler testing
func TestGetUserHandler(t *testing.T) {
    req := httptest.NewRequest("GET", "/users/123", nil)
    w := httptest.NewRecorder()

    handler := NewHandler(mockService)
    handler.GetUser(w, req)

    assert.Equal(t, http.StatusOK, w.Code)

    var user User
    err := json.NewDecoder(w.Body).Decode(&user)
    require.NoError(t, err)
    assert.Equal(t, "123", user.ID)
}

Rust Testing

Unit and Integration Tests
rust
// src/lib.rs - Unit tests (same file)
pub fn calculate_discount(amount: f64, percentage: f64) -> Result<f64, DiscountError> {
    if percentage < 0.0 || percentage > 100.0 {
        return Err(DiscountError::InvalidPercentage(percentage));
    }
    Ok(amount * (1.0 - percentage / 100.0))
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_valid_discount() {
        let result = calculate_discount(100.0, 10.0).unwrap();
        assert!((result - 90.0).abs() < f64::EPSILON);
    }

    #[test]
    fn test_zero_discount() {
        assert_eq!(calculate_discount(100.0, 0.0).unwrap(), 100.0);
    }

    #[test]
    fn test_invalid_percentage() {
        assert!(matches!(
            calculate_discount(100.0, 150.0),
            Err(DiscountError::InvalidPercentage(_))
        ));
    }

    #[test]
    fn test_negative_percentage() {
        assert!(calculate_discount(100.0, -10.0).is_err());
    }
}

// tests/integration_test.rs - Integration tests (separate file)
use my_crate::calculate_discount;

#[test]
fn test_full_workflow() {
    let original = 200.0;
    let discounted = calculate_discount(original, 25.0).unwrap();
    assert_eq!(discounted, 150.0);
}
Property-Based Testing (proptest)
rust
use proptest::prelude::*;

proptest! {
    #[test]
    fn discount_never_exceeds_original(amount in 0.0f64..10000.0, pct in 0.0f64..100.0) {
        let result = calculate_discount(amount, pct).unwrap();
        prop_assert!(result <= amount);
        prop_assert!(result >= 0.0);
    }

    #[test]
    fn roundtrip_serialization(name in "[a-zA-Z]{1,50}", age in 0u32..150) {
        let user = User { name: name.clone(), age };
        let json = serde_json::to_string(&user).unwrap();
        let deserialized: User = serde_json::from_str(&json).unwrap();
        prop_assert_eq!(user, deserialized);
    }
}

Visual Regression Testing

Playwright Screenshots
typescript
import { test, expect } from "@playwright/test";

test("homepage visual regression", async ({ page }) => {
  await page.goto("/");
  await expect(page).toHaveScreenshot("homepage.png", {
    maxDiffPixelRatio: 0.01,
  });
});

test("component states", async ({ page }) => {
  await page.goto("/components");

  // Default state
  await expect(page.locator(".card")).toHaveScreenshot("card-default.png");

  // Hover state
  await page.locator(".card").hover();
  await expect(page.locator(".card")).toHaveScreenshot("card-hover.png");

  // Full page with specific viewport
  await page.setViewportSize({ width: 375, height: 812 }); // iPhone
  await expect(page).toHaveScreenshot("homepage-mobile.png");
});

// Update snapshots: npx playwright test --update-snapshots
Percy (Cloud Visual Testing)
typescript
import percySnapshot from "@percy/playwright";

test("visual test with Percy", async ({ page }) => {
  await page.goto("/dashboard");
  await percySnapshot(page, "Dashboard");
  // Percy compares across browsers and viewport sizes
});
Chromatic (Storybook Visual Testing)
bash
# Run Chromatic on Storybook stories
npx chromatic --project-token=<token>

# CI integration
# Chromatic captures every story as a visual snapshot
# and detects pixel-level changes across PRs
ToolApproachBest For
PlaywrightLocal screenshot comparisonE2E visual tests, free
PercyCloud cross-browser comparisonMulti-browser, team review
ChromaticStorybook story snapshotsComponent library visual QA

See Also

© travisjneuman, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 6 other files (scripts, references) in skills/test-specialist of travisjneuman/.claude.

  • SKILL.md
  • index.js
  • package.json
  • references/bug_analysis.md
  • references/testing_patterns.md
  • scripts/analyze_coverage.py
  • scripts/find_untested_code.py

Open the folder on GitHubat commit 446a461

Compare with similar skills

Test Specialist 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.

Test Specialist compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Test Specialist this skilltravisjneuman/.claude100—~3.7kAutomated safety check: PassMIT
Playwright Testingchongdashu/vibejam-starter-pack149—~2.2kAutomated safety check: PassNone
Senior QAalirezarezvani/claude-skills28k1 repos~2.1kAutomated safety check: PassMIT
Sanity Visual Regressionsanity-io/sanity6.4k—~3.4kAutomated safety check: PassMIT
Test CommanderEliasOulkadi/shokunin114—~3kAutomated safety check: NotesMIT
Error Explanation GeneratorArabelaTso/Skills-4-SE253—~3.8kAutomated safety check: PassApache-2.0

Similar skills

  • Playwright Testing

    chongdashu/vibejam-starter-pack

    Plan, implement, and debug frontend tests: unit/integration/E2E/visual/a11y.

    149 GitHub stars~2.2k tokensUpdated 5 mo ago
    Testing & QAAuto-check passed
  • Senior QA

    alirezarezvani/claude-skills

    Generates unit tests, integration tests, and E2E tests for React/Next.js applications.

    28k GitHub starsUsed in 1 repo~2.1k tokens
    Testing & QAAuto-check passed
  • Sanity Visual Regression

    sanity-io/sanity

    Official

    Add, review, and maintain Chromatic visual regression coverage in the Sanity monorepo via dev/storybook stories, the vitest browser-mode suite, and Playwright e2e snapshots.

    6.4k GitHub stars~3.4k tokensUpdated yesterday
    Testing & QAAuto-check passed
  • Test Commander

    EliasOulkadi/shokunin

    Generate unit, integration, E2E, and visual regression tests following the Testing Trophy methodology (80% integration).

    114 GitHub stars~3k tokensUpdated 5 days ago
    Testing & QAAuto-check: notes
  • Error Explanation Generator

    ArabelaTso/Skills-4-SE

    Explains test failures and provides actionable debugging guidance.

    253 GitHub stars~3.8k tokensUpdated 1 mo ago
    Testing & QAAuto-check passed
  • Playwright Testing

    chongdashu/vibejam-starter-pack

    Plan, implement, and debug frontend tests: unit/integration/E2E/visual/a11y.

    149 GitHub stars~2.1k tokensUpdated 5 mo ago
    Testing & QAAuto-check passed

More from travisjneuman/.claude

All 17 skills in this repo
  • Codebase Documenter

    travisjneuman/.claude

    Write codebase documentation: READMEs, architecture docs, getting-started guides, API docs, and code comments.

    100 GitHub stars~1.1k tokensUpdated yesterday
    Auto-check passed
  • Business Strategy

    travisjneuman/.claude

    Business strategy expertise for strategic planning, competitive analysis, market entry, M&A strategy, portfolio management, and strategic decision-making.

    100 GitHub stars~2.7k tokensUpdated yesterday
    Auto-check passed
  • Data Science

    travisjneuman/.claude

    Data science and analytics expertise for statistical analysis, machine learning pipelines, data governance, business intelligence, predictive modeling, and analytics strategy.

    100 GitHub stars~2.3k tokensUpdated yesterday
    Auto-check passed
  • Finance

    travisjneuman/.claude

    Financial analysis expertise for financial modeling (DCF, LBO, M&A), valuation, financial statement analysis, capital allocation, treasury management, and corporate finance decisions.

    100 GitHub stars~3k tokensUpdated yesterday
    Auto-check passed
  • Health Wellness

    travisjneuman/.claude

    Workplace health and wellness expertise for employee wellness programs, mental health initiatives, ergonomics and safety, healthcare benefits strategy, and health analytics.

    100 GitHub stars~2.4k tokensUpdated yesterday
    Auto-check passed
  • Hr Talent

    travisjneuman/.claude

    HR and talent management expertise for talent acquisition, performance management, compensation strategy, organizational design, culture building, succession planning, and D&I programs.

    100 GitHub stars~3.2k tokensUpdated yesterday
    Auto-check passed

Categories

Questions about Test Specialist

What does Test Specialist do?

Test-writing patterns for JS/TS, Python, Go, and Rust (unit, integration, E2E, visual regression). claude. Test-writing patterns for JS/TS, Python, Go, and Rust (unit, integration, E2E, visual regression).

When should I use Test Specialist?

Test Specialist fits situations like: explicitly asks for tests; for debugging without a test request; use debug-systematic.

How do I install Test Specialist in Claude Code?

Run `npx skills add travisjneuman/.claude --skill test-specialist -a claude-code`. Or copy the skill folder (skills/test-specialist in travisjneuman/.claude) into .claude/skills/test-specialist in your project. Claude Code loads it when a task matches its description.

How do I install Test Specialist in Codex?

Run `npx skills add travisjneuman/.claude --skill test-specialist -a codex`. Or copy the skill folder (skills/test-specialist in travisjneuman/.claude) into .agents/skills/test-specialist in your project. Codex loads it when a task matches its description.

Can I use Test Specialist in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add travisjneuman/.claude --skill test-specialist -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/test-specialist, .gemini/skills/test-specialist, .github/skills/test-specialist and .opencode/skills/test-specialist in your project.

What does Test Specialist need to run?

Going by SKILL.md and its folder, Test Specialist needs Python and JavaScript for the scripts in its folder and the command-line tools its instructions call (npx). Our summary lists: Python 3; Node.js.

Does Test Specialist access the network?

SKILL.md contains no URLs. Its commands use npx, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Test Specialist safe to install?

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. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Test Specialist use?

Test Specialist is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Test Specialist use?

About 3.7k 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. Its references folder adds about 5.4k tokens, read only when the agent opens those files.

What are the alternatives to Test Specialist?

Skills that share tags, products or a category with Test Specialist: Playwright Testing (chongdashu/vibejam-starter-pack, 149 stars), Senior QA (alirezarezvani/claude-skills, 28k stars), Sanity Visual Regression (sanity-io/sanity, 6.4k stars) and Test Commander (EliasOulkadi/shokunin, 114 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Test Specialist?

travisjneuman (a GitHub user) maintains it in travisjneuman/.claude, which has 100 GitHub stars. The repository holds 17 skills in this directory. The repository was last updated on October 9, 2026.

Source: travisjneuman/.claude on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.