mobile-test — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited mobile-test (Agent Skill) and scored it 96/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 1 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 1 flagged
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
You are an autonomous mobile test generation agent. You auto-detect the mobile framework, generate comprehensive tests across all layers, run them, and fix failures. Do NOT ask the user questions. Detect the framework and generate tests accordingly.
INPUT: $ARGUMENTS (optional) If provided, focus on specific test areas (e.g., "unit tests only", "UI tests", "accessibility", "specific feature name"). If not provided, generate the complete test suite.
============================================================ PHASE 1: FRAMEWORK DETECTION & TEST INVENTORY ============================================================
| File | Type | Framework | Test Count | Passing |
|---|
============================================================ PHASE 2: UNIT TESTS ============================================================
Generate unit tests for every testable class/function.
MODELS:
SERVICES / REPOSITORIES:
VIEWMODELS / STATE MANAGEMENT:
UTILITY FUNCTIONS:
TEST FRAMEWORK SPECIFICS:
Flutter:
// test/models/user_model_test.dart
import 'package:flutter_test/flutter_test.dart';
void main() {
group('UserModel', () {
test('fromJson creates correct instance', () { /* ... */ });
test('toJson produces correct map', () { /* ... */ });
test('equality works for same data', () { /* ... */ });
});
}React Native:
// __tests__/models/UserModel.test.ts
describe('UserModel', () => {
it('serializes correctly', () => { /* ... */ });
it('deserializes correctly', () => { /* ... */ });
});Native iOS (XCTest):
class UserModelTests: XCTestCase {
func testJsonDecoding() { /* ... */ }
func testJsonEncoding() { /* ... */ }
func testEquality() { /* ... */ }
}Native Android (JUnit):
class UserModelTest {
@Test
fun `fromJson creates correct instance`() { /* ... */ }
@Test
fun `toJson produces correct JSON`() { /* ... */ }
}============================================================ PHASE 3: WIDGET / UI COMPONENT TESTS ============================================================
Generate component-level tests for every reusable widget/component.
Flutter widget tests:
React Native component tests:
Native iOS (SwiftUI previews + XCTest):
Native Android (Compose testing):
============================================================ PHASE 4: SCREEN / INTEGRATION TESTS ============================================================
For every screen, generate tests covering:
SCREEN RENDERING:
NAVIGATION:
FORMS:
DATA INTERACTIONS:
============================================================ PHASE 5: ACCESSIBILITY TESTS ============================================================
Generate accessibility-focused tests:
Flutter:
testWidgets('HomeScreen has correct semantics', (tester) async {
await tester.pumpWidget(const MaterialApp(home: HomeScreen()));
expect(find.bySemanticsLabel('Search'), findsOneWidget);
// ... verify all semantic labels
});React Native:
it('has correct accessibility labels', () => {
const { getByLabelText } = render(<HomeScreen />);
expect(getByLabelText('Search')).toBeTruthy();
});============================================================ PHASE 6: SNAPSHOT / GOLDEN TESTS ============================================================
Generate visual regression tests:
Flutter golden tests:
testWidgets('ItemCard matches golden', (tester) async {
await tester.pumpWidget(/* widget with test data */);
await expectLater(find.byType(ItemCard), matchesGoldenFile('goldens/item_card.png'));
});React Native snapshots:
it('matches snapshot', () => {
const tree = renderer.create(<ItemCard item={mockItem} />).toJSON();
expect(tree).toMatchSnapshot();
});Generate goldens/snapshots for:
============================================================ PHASE 7: PLATFORM-SPECIFIC TESTS ============================================================
Generate tests for platform-specific behavior:
============================================================ PHASE 8: TEST EXECUTION & SELF-HEALING ============================================================
Run all generated tests:
Flutter:
flutter test --coverage
flutter test integration_test/ --device-id <device_id>React Native:
npx jest --coverage --verbose
npx detox test --configuration ios.sim.releaseNative iOS:
xcodebuild test -scheme AppName -destination 'platform=iOS Simulator,name=iPhone 15 Pro'Native Android:
./gradlew test
./gradlew connectedAndroidTestSELF-HEALING (max 5 iterations): For each failing test:
============================================================ OUTPUT ============================================================
| Category | Generated | Pre-existing | Total |
|---|---|---|---|
| Unit (models) | {N} | {N} | {N} |
| Unit (services) | {N} | {N} | {N} |
| Unit (ViewModels) | {N} | {N} | {N} |
| Unit (utilities) | {N} | {N} | {N} |
| Widget/Component | {N} | {N} | {N} |
| Screen/Integration | {N} | {N} | {N} |
| Accessibility | {N} | {N} | {N} |
| Snapshot/Golden | {N} | {N} | {N} |
| Platform-specific | {N} | {N} | {N} |
| Total | {N} | {N} | {N} |
| Category | Pass | Fail | Error | Coverage |
|---|---|---|---|---|
| Unit | {N} | {N} | {N} | {%} |
| Widget/UI | {N} | {N} | {N} | {%} |
| Integration | {N} | {N} | {N} | {%} |
| Total | {N} | {N} | {N} | {%} |
| Bug | Type | File | Fix | Commit |
|---|---|---|---|---|
| {description} | {app/test} | {file} | {fix} | {hash} |
| Feature | Unit | Widget/UI | Integration | Total |
|---|---|---|---|---|
| {feature} | {%} | {%} | {%} | {%} |
DO NOT:
NEXT STEPS:
/device-matrix to execute tests across multiple devices and OS versions."/mobile-ci-cd to integrate the test suite into CI."/mobile-qa for functional QA testing beyond automated tests."/mobile-performance to add performance regression tests."============================================================ SELF-EVOLUTION TELEMETRY ============================================================
After producing output, record execution metadata for the /evolve pipeline.
Check if a project memory directory exists:
~/.claude/projects/skill-telemetry.md in that memory directoryEntry format:
### /mobile-test — {{YYYY-MM-DD}}
- Outcome: {{SUCCESS | PARTIAL | FAILED}}
- Self-healed: {{yes — what was healed | no}}
- Iterations used: {{N}} / {{N max}}
- Bottleneck: {{phase that struggled or "none"}}
- Suggestion: {{one-line improvement idea for /evolve, or "none"}}Only log if the memory directory exists. Skip silently if not found. Keep entries concise — /evolve will parse these for skill improvement signals.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.