Requirements
rizsotto/Bear
Write, modify, or review a requirement file under docs/requirements -- pick the single owning file, keep the text contract-only, name IDs so they need no explanation, and verify cross-references and…
On-demand test coverage analysis. An agent skill from MadAppGang/claude-code.
$ npx skills add MadAppGang/claude-code --skill test-coverage -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install MadAppGang/claude-code test-coverage --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/MadAppGang/claude-code.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/dev/skills/test-coverage .claude/skills/test-coverage && rm -rf skills-srcUse ~/.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/
Install the "test-coverage" agent skill from https://github.com/MadAppGang/claude-code/tree/main/plugins/dev/skills/test-coverage into .claude/skills/test-coverage/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "test-coverage", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/MadAppGang/claude-code/tree/main/plugins/dev/skills/test-coverageType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add MadAppGang/claude-code --skill test-coverage -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install MadAppGang/claude-code test-coverage --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/MadAppGang/claude-code.git skills-src && mkdir -p .agents/skills && cp -r skills-src/plugins/dev/skills/test-coverage .agents/skills/test-coverage && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "test-coverage" agent skill from https://github.com/MadAppGang/claude-code/tree/main/plugins/dev/skills/test-coverage into .agents/skills/test-coverage/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "test-coverage", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add MadAppGang/claude-code --skill test-coverage -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install MadAppGang/claude-code test-coverage --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/MadAppGang/claude-code.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/plugins/dev/skills/test-coverage .cursor/skills/test-coverage && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "test-coverage" agent skill from https://github.com/MadAppGang/claude-code/tree/main/plugins/dev/skills/test-coverage into .cursor/skills/test-coverage/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "test-coverage", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/MadAppGang/claude-code.git --path plugins/dev/skills/test-coverage--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add MadAppGang/claude-code --skill test-coverage -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install MadAppGang/claude-code test-coverage --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/MadAppGang/claude-code.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/plugins/dev/skills/test-coverage .gemini/skills/test-coverage && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "test-coverage" agent skill from https://github.com/MadAppGang/claude-code/tree/main/plugins/dev/skills/test-coverage into .gemini/skills/test-coverage/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "test-coverage", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install MadAppGang/claude-code test-coverageInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add MadAppGang/claude-code --skill test-coverage -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/MadAppGang/claude-code.git skills-src && mkdir -p .github/skills && cp -r skills-src/plugins/dev/skills/test-coverage .github/skills/test-coverage && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "test-coverage" agent skill from https://github.com/MadAppGang/claude-code/tree/main/plugins/dev/skills/test-coverage into .github/skills/test-coverage/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "test-coverage", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add MadAppGang/claude-code --skill test-coverage -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install MadAppGang/claude-code test-coverage --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/MadAppGang/claude-code.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/plugins/dev/skills/test-coverage .opencode/skills/test-coverage && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "test-coverage" agent skill from https://github.com/MadAppGang/claude-code/tree/main/plugins/dev/skills/test-coverage into .opencode/skills/test-coverage/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "test-coverage", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
test-coverageOn-demand test coverage analysis. An agent skill from MadAppGang/claude-code.
Test Coverage is an agent skill from MadAppGang/claude-code. On-demand test coverage analysis. Use when identifying untested code, finding test gaps, measuring coverage metrics, or improving test quality. Trigger keywords - "test coverage", "coverage report", "untested code", "test gaps", "missing tests", "coverage metrics".
Its SKILL.md is about 5k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Testing & QA, covering Test coverage. The repository describes itself as: claude code plugins marketplace. The licence is MIT.
7 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 6097ad4. It shows what the files ask for, not the result of running them.
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.
Shell commands in SKILL.md call:
npmgogitcargoFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use npm and git, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Test Coverage loads about 5k tokens when it runs. Until then it costs about 70 tokens; SKILL.md has 1,025 words of instructions outside code blocks.
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.
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); files beside SKILL.md are not scanned.
The full file from MadAppGang/claude-code at commit 6097ad4, republished under its MIT licence (© MadAppGang). 1,025 words, ~4,961 tokens.
.claude/skills/test-coverage/SKILL.md (or your agent's skills folder).The test-coverage skill provides comprehensive on-demand test coverage analysis for your codebase. It identifies untested code paths, measures coverage metrics, finds test gaps, evaluates test quality, and provides actionable recommendations for improving test coverage across all supported technology stacks.
When to Use:
Technology Coverage:
Definition: Percentage of executable lines that are executed by tests.
Example:
function divide(a: number, b: number): number {
if (b === 0) { // Line 1: COVERED
throw new Error('Div 0'); // Line 2: NOT COVERED
}
return a / b; // Line 3: COVERED
}
// Test only covers normal case
test('divides numbers', () => {
expect(divide(10, 2)).toBe(5);
});
// Line Coverage: 66% (2/3 lines)Interpretation:
Definition: Percentage of decision branches (if/else, switch, ternary) that are tested.
Example:
function getUserStatus(user: User): string {
if (user.isActive) { // Branch 1: true (COVERED)
if (user.isPremium) { // Branch 2: true (NOT COVERED)
return 'premium'; // NOT COVERED
}
return 'active'; // COVERED
}
return 'inactive'; // Branch 1: false (NOT COVERED)
}
// Test only covers active non-premium
test('returns status', () => {
expect(getUserStatus({ isActive: true, isPremium: false })).toBe('active');
});
// Branch Coverage: 33% (1/3 branches)
// Line Coverage: 60% (3/5 lines)Why Important: Higher than line coverage, catches edge cases.
Definition: Percentage of functions that are called at least once in tests.
Example:
// auth.ts
export function login(user: string, pass: string) { ... } // COVERED
export function logout() { ... } // COVERED
export function resetPassword(email: string) { ... } // NOT COVERED
export function changePassword(old: string, new: string) { ... } // NOT COVERED
// Function Coverage: 50% (2/4 functions)Red Flag: Exported functions with 0% coverage.
Definition: Percentage of statements executed (similar to line coverage but more granular).
Difference from Line Coverage:
// Single line, multiple statements
const x = 1, y = 2, z = 3;
// Line coverage: 1 line
// Statement coverage: 3 statementsUse Case: More precise for minified or compact code.
Priority Levels:
CRITICAL (Must Test):
HIGH (Should Test):
MEDIUM (Nice to Test):
LOW (Optional):
# Test Coverage Gap Analysis
**Generated**: 2026-01-28 14:32:00
**Coverage**: 68% (Target: 80%)
**Files Analyzed**: 247
**Critical Gaps**: 12 files
## Executive Summary
**Overall Coverage**:
- Line Coverage: 68% (Target: 80%) - 12% below
- Branch Coverage: 54% (Target: 75%) - 21% below
- Function Coverage: 71% (Target: 85%) - 14% below
**Risk Assessment**: MEDIUM-HIGH
- 12 critical files under 50% coverage
- 23 high-priority functions untested
- 47 error handling branches untested
## Critical Gaps (Priority 1)
### [GAP-001] Authentication Module
**File**: src/auth/AuthService.ts
**Line Coverage**: 34% (Target: 95%+)
**Branch Coverage**: 22%
**Risk**: CRITICAL
**Untested Code Paths**:
```typescript
// CRITICAL: No tests for password reset flow
async resetPassword(email: string): Promise<void> {
const user = await this.userRepo.findByEmail(email);
if (!user) {
throw new NotFoundError('User not found'); // UNTESTED
}
const token = generateResetToken(); // UNTESTED
await this.emailService.sendResetEmail( // UNTESTED
user.email,
token
);
}
// CRITICAL: No tests for token expiry
validateResetToken(token: string): boolean {
const decoded = jwt.verify(token, SECRET);
if (Date.now() > decoded.exp) { // UNTESTED
return false;
}
return true;
}Impact: Security vulnerability, potential for unauthorized access.
Recommendation: Add comprehensive tests for all auth flows.
Required Tests:
Estimated Coverage After: 88%
File: src/payments/PaymentService.ts Line Coverage: 41% (Target: 99%+) Branch Coverage: 29% Risk: CRITICAL
Untested Code Paths:
async processPayment(order: Order): Promise<PaymentResult> {
try {
const charge = await stripe.charges.create({ // TESTED
amount: order.total,
currency: 'usd',
source: order.paymentToken
});
if (charge.status === 'failed') { // UNTESTED
await this.handleFailedPayment(order); // UNTESTED
throw new PaymentError('Payment failed');
}
await this.fulfillOrder(order); // TESTED
return { success: true, chargeId: charge.id };
} catch (error) {
if (error.code === 'card_declined') { // UNTESTED
await this.notifyCardDeclined(order); // UNTESTED
}
throw error; // UNTESTED
}
}Impact: Financial loss, failed orders without proper handling.
Recommendation: Mock Stripe, test all payment scenarios.
Required Tests:
Estimated Coverage After: 94%
File: src/users/UserService.ts Line Coverage: 62% Branch Coverage: 48% Risk: HIGH
Untested Validation Logic:
validateUserData(data: UserInput): ValidationResult {
const errors: string[] = [];
if (!data.email || !data.email.includes('@')) { // Partially tested
errors.push('Invalid email');
}
if (data.password.length < 8) { // UNTESTED
errors.push('Password too short');
}
if (!/[A-Z]/.test(data.password)) { // UNTESTED
errors.push('Password needs uppercase');
}
if (!/[0-9]/.test(data.password)) { // UNTESTED
errors.push('Password needs number');
}
return { valid: errors.length === 0, errors };
}Recommendation: Test all validation branches.
File: src/api/handlers/UserHandler.ts Line Coverage: 59% Branch Coverage: 41% Risk: HIGH
Untested Error Paths:
async getUser(req: Request, res: Response) {
try {
const user = await this.userService.getById(req.params.id);
res.json(user); // TESTED
} catch (error) {
if (error instanceof NotFoundError) { // UNTESTED
res.status(404).json({ error: 'Not found' });
} else if (error instanceof ValidationError) { // UNTESTED
res.status(400).json({ error: error.message });
} else {
res.status(500).json({ error: 'Server error' }); // UNTESTED
}
}
}Recommendation: Test all error types and status codes.
| File | Coverage | Untested Lines | Priority |
|---|---|---|---|
| src/utils/DateFormatter.ts | 67% | 12 | MEDIUM |
| src/services/EmailService.ts | 65% | 23 | MEDIUM |
| src/middleware/RateLimiter.ts | 63% | 18 | MEDIUM |
| src/database/Migrations.ts | 58% | 34 | LOW |
Module Coverage Breakdown:
├── src/auth/ 34% (CRITICAL - needs work)
├── src/payments/ 41% (CRITICAL - needs work)
├── src/users/ 62% (below target)
├── src/api/handlers/ 59% (below target)
├── src/services/ 72% (above target ✓)
├── src/utils/ 84% (good ✓)
├── src/database/ 91% (excellent ✓)
└── src/components/ 77% (good ✓)
Overall: 68%
Target: 80%
Gap: -12%Authentication:
Payments:
Data Validation:
Error Handling:
Add auth module tests - Priority: CRITICAL
Add payment processing tests - Priority: CRITICAL
Test all error handling paths - Priority: HIGH
Expected Coverage After: 68% → 76%
Expected Coverage After: 76% → 82%
Target Coverage: 85%
Coverage is not the only metric. Test quality matters:
1. Tests Without Assertions (4 tests)
// BAD: No assertion
test('creates user', async () => {
await createUser({ name: 'John' });
});
// GOOD: Verify behavior
test('creates user', async () => {
const user = await createUser({ name: 'John' });
expect(user.id).toBeDefined();
expect(user.name).toBe('John');
});2. Tests That Don't Test Anything (7 tests)
// BAD: Always passes
test('validates email', () => {
const result = validateEmail('test@example.com');
expect(result).toBeTruthy(); // Any truthy value passes
});
// GOOD: Specific assertion
test('validates email', () => {
expect(validateEmail('test@example.com')).toBe(true);
expect(validateEmail('invalid')).toBe(false);
});3. Overly Broad Mocks (12 tests)
// BAD: Mocks everything, tests nothing
jest.mock('../UserService');
// GOOD: Mock only external dependencies
jest.mock('../EmailService');
// UserService tested with real implementation4. Flaky Tests (3 tests)
// BAD: Depends on timing
test('debounces input', async () => {
fireEvent.change(input, { target: { value: 'test' } });
await new Promise(resolve => setTimeout(resolve, 100)); // Flaky!
expect(mockFn).toHaveBeenCalledTimes(1);
});
// GOOD: Use fake timers
test('debounces input', () => {
jest.useFakeTimers();
fireEvent.change(input, { target: { value: 'test' } });
jest.advanceTimersByTime(300);
expect(mockFn).toHaveBeenCalledTimes(1);
});
## Coverage Report Format
### Standard Coverage Output
**Jest/Vitest**:----------------|---------|----------|---------|---------|-------------------
| File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s |
|---|---|---|---|---|---|
| All files | 68.23 | 54.12 | 71.45 | 68.23 | |
| auth/ | 34.56 | 22.31 | 41.23 | 34.56 | |
| AuthService | 34.56 | 22.31 | 41.23 | 34.56 | 42-67,89-102 |
| payments/ | 41.23 | 29.45 | 50.00 | 41.23 | |
| PaymentSvc | 41.23 | 29.45 | 50.00 | 41.23 | 23-34,56-78 |
| users/ | 62.34 | 48.12 | 65.23 | 62.34 | |
| UserService | 62.34 | 48.12 | 65.23 | 62.34 | 112-123,145 |
| ---------------- | --------- | ---------- | --------- | --------- | ------------------- |
**Go**:coverage: 68.2% of statements
ok github.com/user/project/auth 0.234s coverage: 34.5% of statements ok github.com/user/project/payments 0.156s coverage: 41.2% of statements ok github.com/user/project/users 0.189s coverage: 62.3% of statements
**Rust (tarpaulin)**:|| Tested/Total Lines: || src/auth.rs: 23/67 (34.3%) || src/payments.rs: 34/82 (41.5%) || src/users.rs: 89/143 (62.2%) || 68.23% coverage, 146/214 lines covered
## Integration with Dev Plugin
### With Test Architect Agent
Request comprehensive test creation:
Analyze test coverage and generate tests for all critical gaps
The test-architect agent will:
1. Identify gaps using this skill
2. Generate test files
3. Run tests and verify coverage improvement
### With Audit Skill
Combine coverage with security:
Identify untested security-critical code paths
### With Optimize Skill
Balance coverage with performance:
Check test coverage impact on build time
## Best Practices
### 1. Set Coverage Targets by Risk
**Critical Code** (95%+ coverage):
- Authentication and authorization
- Payment processing
- Data validation
- Security checks
**Business Logic** (80%+ coverage):
- Core features
- API endpoints
- State management
**Utilities** (70%+ coverage):
- Helper functions
- Formatters
- Parsers
**Infrastructure** (50%+ coverage):
- Configuration
- Build scripts
- Tooling
### 2. Focus on Untested Branches
Branch coverage > line coverage for finding bugs.
**Example**:
```typescript
// 100% line coverage, 50% branch coverage
function process(data: Data | null) {
const result = data ? data.value : 0; // Both branches needed
return result * 2;
}
// Test only null case - 100% lines, 50% branches
test('handles null', () => {
expect(process(null)).toBe(0);
});
// Need both cases
test('handles data', () => {
expect(process({ value: 5 })).toBe(10);
});Bad (tests implementation):
test('calls getUserById', () => {
const spy = jest.spyOn(service, 'getUserById');
component.loadUser(123);
expect(spy).toHaveBeenCalledWith(123);
});Good (tests behavior):
test('displays user name after loading', async () => {
render(<UserProfile userId={123} />);
await waitFor(() => {
expect(screen.getByText('John Doe')).toBeInTheDocument();
});
});Coverage is a tool, not a target.
Anti-pattern: Writing useless tests to hit 100% Better: Writing meaningful tests, accepting 85-90%
CI/CD Integration:
# .github/workflows/test.yml
- name: Run tests with coverage
run: npm test -- --coverage
- name: Check coverage threshold
run: |
COVERAGE=$(jq '.total.lines.pct' coverage/coverage-summary.json)
if (( $(echo "$COVERAGE < 80" | bc -l) )); then
echo "Coverage $COVERAGE% below 80%"
exit 1
fiPre-commit Hook:
#!/bin/bash
# Run tests on changed files
CHANGED_FILES=$(git diff --cached --name-only --diff-filter=ACM | grep '\.ts$')
if [ -n "$CHANGED_FILES" ]; then
npm test -- --findRelatedTests $CHANGED_FILES --coverage
fiRequest:
I just added user profile editing. Check test coverage for this feature.Analysis Process:
Report:
User Profile Feature Coverage: 58%
Files:
- UserProfile.tsx: 72% (needs: error handling tests)
- useUserProfile.ts: 45% (needs: loading state, error state)
- updateUser.ts: 67% (needs: validation error cases)
Critical Gaps:
- No test for update failure
- No test for network error
- No test for validation errors
Recommended Tests: 8
Estimated Coverage After: 89%Request:
Check if we meet 80% coverage threshold for deploymentAnalysis:
Current Coverage: 76% (Target: 80%)
Status: BLOCKED
Modules Below Target:
- auth/: 34% (need +46%)
- payments/: 41% (need +39%)
- api/handlers/: 59% (need +21%)
Quickest Path to 80%:
1. Add auth error handling tests (+8%)
2. Add payment failure tests (+6%)
3. Add API validation tests (+4%)
Estimated Effort: 2 daysRequest:
We're refactoring the auth module. What's our test coverage there?Analysis:
Auth Module Coverage: 34%
Risk Assessment: HIGH
- 66% of code is untested
- No tests for password reset
- No tests for session expiry
- Limited tests for error cases
Recommendation: STOP
Before refactoring:
1. Increase coverage to 80%+ (add 23 tests)
2. Add integration tests for auth flow
3. Document expected behavior
Refactoring without tests = high regression riskCoverage Command:
npm test -- --coverage --collectCoverageFrom='src/**/*.{ts,tsx}'Common Gaps:
Coverage Command:
go test -coverprofile=coverage.out ./...
go tool cover -html=coverage.outCommon Gaps:
Coverage Command:
cargo tarpaulin --out Html --output-dir coverageCommon Gaps:
Test coverage analysis identifies gaps, prioritizes testing efforts, and ensures code quality. Use this skill regularly to maintain high coverage, catch regressions early, and ship with confidence.
Key Takeaways:
For security analysis, see the audit skill. For performance optimization, see the optimize skill.
© MadAppGang, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in plugins/dev/skills/test-coverage of MadAppGang/claude-code.
Open the folder on GitHubat commit 6097ad4
Test Coverage 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Test Coverage this skillMadAppGang/claude-code | 284 | — | ~5k | Automated safety check: Pass | MIT | |
| Requirementsrizsotto/Bear | 6.5k | — | ~2k | Automated safety check: Pass | GPL-3.0 | |
| Crap Analysisardalis/RiverBooks | 135 | 2 repos | ~3.4k | Automated safety check: Pass | None | |
| Code Coverages3s-project/s3s | 311 | — | ~789 | Automated safety check: Pass | Apache-2.0 | |
| Project Statusbactopia/bactopia | 522 | — | ~787 | Automated safety check: Pass | MIT | |
| Check Coverageldayton/Dippy | 243 | — | ~403 | Automated safety check: Pass | MIT |
rizsotto/Bear
Write, modify, or review a requirement file under docs/requirements -- pick the single owning file, keep the text contract-only, name IDs so they need no explanation, and verify cross-references and…
ardalis/RiverBooks
Analyze code coverage and CRAP (Change Risk Anti-Patterns) scores to identify high-risk code.
s3s-project/s3s
Measure and grow the line coverage of the s3s crate. An agent skill from s3s-project/s3s.
bactopia/bactopia
Show a live snapshot of the Bactopia project state — component counts, GroovyDoc coverage, nf-test coverage, and structural issues.
ldayton/Dippy
Ensure comprehensive test coverage for a CLI handler. An agent skill from ldayton/Dippy.
kajisho5/ffmpeg-skill
Add and review preconditions on operations that delete, overwrite, rewrite history, or resolve a caller-supplied name to a filesystem path — refusing instead of warning, placing the guard ahead of…
MadAppGang/claude-code
Analyzes API documentation from OpenAPI specs to provide TypeScript interfaces, request/response formats, and implementation guidance.
MadAppGang/claude-code
Content brief template and creation methodology for SEO-optimized content.
MadAppGang/claude-code
A skill your agent uses when detecting project technology stack from files/configs/directory structure, auto-loading framework-specific skills, or analyzing multi-stack fullstack projects (e.g…
MadAppGang/claude-code
On-page SEO optimization techniques including keyword density, meta tags, heading structure, and readability.
MadAppGang/claude-code
Techniques for expanding seed keywords and clustering by topic and intent.
MadAppGang/claude-code
SERP analysis techniques for intent classification, feature identification, and competitive intelligence.
Categories
On-demand test coverage analysis. An agent skill from MadAppGang/claude-code. Test Coverage is an agent skill from MadAppGang/claude-code. On-demand test coverage analysis.
Test Coverage fits situations like: identifying untested code; finding test gaps; measuring coverage metrics; improving test quality.
Run `npx skills add MadAppGang/claude-code --skill test-coverage -a claude-code`. Or copy the skill folder (plugins/dev/skills/test-coverage in MadAppGang/claude-code) into .claude/skills/test-coverage in your project. Claude Code loads it when a task matches its description.
Run `npx skills add MadAppGang/claude-code --skill test-coverage -a codex`. Or copy the skill folder (plugins/dev/skills/test-coverage in MadAppGang/claude-code) into .agents/skills/test-coverage in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add MadAppGang/claude-code --skill test-coverage -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-coverage, .gemini/skills/test-coverage, .github/skills/test-coverage and .opencode/skills/test-coverage in your project.
Going by SKILL.md and its folder, Test Coverage needs the command-line tools its instructions call (npm, go, git and cargo). Our summary lists: Python 3.
SKILL.md contains no URLs. Its commands use npm and git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
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. Review the folder before installing.
Test Coverage is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 5k tokens (SKILL.md is roughly 20k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Test Coverage: Requirements (rizsotto/Bear, 6.5k stars), Crap Analysis (ardalis/RiverBooks, 135 stars), Code Coverage (s3s-project/s3s, 311 stars) and Project Status (bactopia/bactopia, 522 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
MadAppGang (a GitHub organization) maintains it in MadAppGang/claude-code, which has 284 GitHub stars. The repository holds 69 skills in this directory. The repository was last updated on March 15, 2026.
Source: MadAppGang/claude-code on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.