Skip to content
Back to skills

Agent Ux Verification

ASecurity

Automate screenshot evidence collection for UX verification assignments. Agents provide **evidence**, humans provide **judgment**. Agents never mark items as verified - they only attach screenshots and comments.

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added November 7, 2026
developmentjavascriptgojavatestingapi

Works with

  • cli
  • api
  • mcp

Security analysis

A100/100

Scanned November 7, 2026

npx -y skills add Next-AI-Labs-Inc/alignment-harness --skill agent-ux-verification --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Agent Ux Verification?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Agent Ux Verification
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/next-ai-labs-inc-agent-ux-verification/badge)](https://www.skillsdirectory.com/skills/next-ai-labs-inc-agent-ux-verification)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
# Agent UX Verification Skill

## Purpose

Automate screenshot evidence collection for UX verification assignments. Agents provide **evidence**, humans provide **judgment**. Agents never mark items as verified - they only attach screenshots and comments.

## Workflow Overview

If the `<your-api>/admin/ux-assignments` endpoints do not exist, keep one JSON file per item, with the fields shown below, in the folder `alignment-harness records ux-assignments` prints, and do each step on those files.

```
┌─────────────────────────────────────────────────────────────────┐
│  1. FETCH:                                                       │
│     SWARM: GET /needs-screenshots (returns 20, triggers swarm)  │
│     SINGLE: GET /needs-screenshots/next?agentId=X (auto-claims) │
└─────────────────────────────────────────────────────────────────┘
                              ↓
┌─────────────────────────────────────────────────────────────────┐
│  2. CLAIM (swarm only):                                         │
│     POST /:assignmentId/items/:itemId/claim                     │
│     → Locks item for 10 minutes (prevents collision)            │
└─────────────────────────────────────────────────────────────────┘
                              ↓
┌─────────────────────────────────────────────────────────────────┐
│  3. EACH AGENT:                                                 │
│     a) Can verification be done with a few clicks?              │
│        YES → Navigate + interact via DevTools MCP               │
│        NO  → Create simulator function first (see below)        │
│     b) Navigate to the correct state                            │
│     c) Take screenshot                                          │
│     d) Call attachScreenshotToItem() - ONE function call        │
│     e) Add comments explaining what was observed                │
└─────────────────────────────────────────────────────────────────┘
                              ↓
┌─────────────────────────────────────────────────────────────────┐
│  4. RESULT:                                                     │
│     → Screenshot stored with 30-day TTL                         │
│     → Comments visible in FB-style feed                         │
│     → Agent does NOT change status                              │
│     → Human sees screenshot in admin UI                         │
│     → Human marks verified/failed                               │
└─────────────────────────────────────────────────────────────────┘
```

## Key Principles

1. **Agents provide evidence, not judgment** - Never mark items as verified/failed
2. **Claim before working** - Prevents swarm collision
3. **10-minute claim TTL** - If agent fails, item becomes available again
4. **One function to attach** - Screenshot + auto-comment in single call
5. **Human verification** - Only humans mark verified/failed status

---

## API Reference

### Fetch Endpoints

#### 1. GET <your-api>/admin/ux-assignments/needs-screenshots

**Purpose**: Fetch batch of items for swarm dispatch

**When to use**: Coordinator agent fetching work for parallel processing

**Query params**:
- `limit` (default: 20) - Number of items to return
- `includeClaimed` (default: false) - Include items claimed by other agents

**Returns**:
```json
{
  "success": true,
  "data": [
    {
      "assignmentId": "...",
      "itemId": "...",
      "title": "Active subscribers can enter app from checkout",
      "uxStory": "When user with active subscription checks out...",
      "steps": ["Go to /checkout", "Enter email of active subscriber", "..."],
      "expectedResult": "Modal shows two buttons...",
      "path": "/checkout",
      "environment": "local",
      "category": "payment",
      "repo": "<landing-repo>",
      "combinedScore": 81,
      "simulatorPath": "/admin2/subscription-simulator",
      "claimedBy": null,
      "claimExpiresAt": null
    }
  ],
  "count": 20,
  "total": 47,
  "hint": "Trigger a swarm: dispatch one agent per item for parallel processing"
}
```

**Agent action**: If count > 1, trigger swarm dispatch (one agent per item)

---

#### 2. GET <your-api>/admin/ux-assignments/needs-screenshots/next

**Purpose**: Fetch single highest-priority item and AUTO-CLAIM it

**When to use**: Single agent working sequentially

**Query params**:
- `agentId` (required) - Your agent identifier

**Returns**:
```json
{
  "success": true,
  "data": { /* single item */ },
  "claimed": true,
  "claimExpiresAt": "2025-01-31T12:10:00Z",
  "message": "Item claimed for 10 minutes. Attach screenshot before expiry."
}
```

**Returns null data**: When no items need screenshots
```json
{
  "success": true,
  "data": null,
  "message": "No items need screenshots at this time"
}
```

---

### Claim Endpoints

#### 3. POST <your-api>/admin/ux-assignments/:assignmentId/items/:itemId/claim

**Purpose**: Explicitly claim an item (for swarm coordinator dispatching)

**Request body**:
```json
{
  "agentId": "claude-opus-4-5-worker-3",
  "durationMinutes": 10
}
```

**Returns**:
```json
{
  "success": true,
  "data": {
    "assignmentId": "...",
    "itemId": "...",
    "claimedBy": "claude-opus-4-5-worker-3",
    "claimExpiresAt": "2025-01-31T12:10:00Z"
  }
}
```

**409 Conflict**: If already claimed by another agent
```json
{
  "success": false,
  "error": "Item already claimed",
  "claimedBy": "other-agent",
  "claimExpiresAt": "2025-01-31T12:05:00Z"
}
```

---

#### 4. DELETE <your-api>/admin/ux-assignments/:assignmentId/items/:itemId/claim

**Purpose**: Release a claim when agent cannot complete

**Request body**:
```json
{
  "agentId": "claude-opus-4-5-worker-3",
  "reason": "Could not reach checkout page - server returned 500"
}
```

**Effect**:
- Clears claim so other agents can try
- Adds `blocker` comment explaining why

---

### Evidence Endpoints

#### 5. POST <your-api>/admin/ux-assignments/:assignmentId/items/:itemId/screenshot

**Purpose**: Attach screenshot evidence (does NOT change status)

**Request body**:
```json
{
  "screenshot": "<base64-encoded-image>",
  "agentId": "claude-opus-4-5",
  "capturedUrl": "http://localhost:3005/admin2/subscription-simulator",
  "notes": "Modal displayed with two buttons as expected"
}
```

**Effect**:
- Stores screenshot with 30-day TTL
- Sets `screenshotCapturedAt`, `screenshotCapturedBy`
- Auto-adds `observation` comment
- Clears claim (item is "done" for agents)

---

#### 6. POST <your-api>/admin/ux-assignments/:assignmentId/items/:itemId/comments

**Purpose**: Add observation/blocker/question to FB-style feed

**Request body**:
```json
{
  "text": "Navigated to subscription simulator, selected 'Active - Same Plan', modal appeared.",
  "agentId": "claude-opus-4-5",
  "type": "observation"
}
```

**Comment types**:
| Type | When to use | UI color |
|------|-------------|----------|
| `observation` | What you saw/did | Gray |
| `blocker` | Can't proceed, needs human | Red |
| `question` | Unsure if behavior is correct | Yellow |
| `resolution` | Human closes the loop | Green |

---

## Swarm Dispatch Pattern

When coordinator receives multiple items:

```javascript
// Coordinator fetches batch
const response = await fetch('<your-api>/admin/ux-assignments/needs-screenshots', {
  headers: { 'x-api-key': process.env.DEVELOPER_API_KEY },
});
const { data: items } = await response.json();

if (items.length > 1) {
  // Dispatch swarm - one agent per item
  for (const item of items) {
    // 1. Claim item
    await fetch(`/api/.../items/${item.itemId}/claim`, {
      method: 'POST',
      body: JSON.stringify({ agentId: `worker-${i}` })
    });

    // 2. Spawn agent with item context
    spawnAgent({
      task: 'capture-ux-screenshot',
      item: item,
      agentId: `worker-${i}`
    });
  }
}
```

---

## When to Create Simulator Functions

If the UX condition **cannot** be reached with a few clicks, check for existing simulator:

1. Check `item.simulatorPath` field
2. If exists, navigate there directly
3. If not, create simulator at `/admin2/{feature}-simulator.tsx`

### Existing Simulators

| Feature | Path | States |
|---------|------|--------|
| Checkout modals | `/admin2/subscription-simulator` | Active-Same, Upgrade, Downgrade, Failed |
| Error boundaries | `/admin2/error-simulator` | (to be created) |
| Auth edge cases | `/admin2/auth-simulator` | (to be created) |

---

## Environment URLs

| Environment | your app | your api | your landing |
|-------------|-----------|-------------|-----------------|
| local | localhost:<app port> | localhost:<api port> | localhost:<landing port> |
| staging | <your staging app domain> | <your staging api domain> | <your staging landing domain> |
| production | <your app domain> | <your api domain> | <your landing domain> |

---

## Self-Correction Protocol

### If This Skill Fails

If you encounter a scenario not covered by this skill file:

1. **Document the gap**: Add a `blocker` comment explaining what's missing
2. **Update Known Gaps**: Add a row to the table below
3. **Propose fix**: Describe how the skill file should be updated

### Known Gaps (Agent-Reported)

| Date | Agent | Gap Description | Proposed Fix | Status |
|------|-------|-----------------|--------------|--------|
| | | | | |

### How to Update This Skill File

```markdown
## Adding a Gap Entry

1. Read this skill file
2. Add row to Known Gaps table with:
   - Date (ISO format)
   - Your agent ID
   - Clear description of what failed
   - Proposed workflow addition
   - Status: "reported"
3. If you can fix it, update the relevant section and change status to "fixed"
```

---

## Example Agent Session

```
Human: verify ux assignments

Agent (Coordinator):
1. Fetching items needing screenshots...
   GET /needs-screenshots
   → Found 5 items, hint says "trigger swarm"

2. Claiming and dispatching agents...
   POST /item-1/claim → worker-1
   POST /item-2/claim → worker-2
   POST /item-3/claim → worker-3
   POST /item-4/claim → worker-4
   POST /item-5/claim → worker-5

Agent (Worker-1):
   → Item: "Active subscribers can enter app from checkout"
   → simulatorPath: /admin2/subscription-simulator
   → Navigating to localhost:3005/admin2/subscription-simulator
   → Selecting "Active - Same Plan"
   → Clicking "Preview Modal"
   → POST /comments: "Modal appeared with two buttons"
   → Taking screenshot...
   → POST /screenshot: [base64 data]
   → Done ✓

Agent (Worker-2):
   → Item: "Error boundary shows friendly message"
   → simulatorPath: null (need to create)
   → Creating /admin2/error-simulator...
   → [creates simulator]
   → Navigating and triggering error...
   → POST /screenshot: [base64 data]
   → Done ✓

3. Summary:
   ✓ 5/5 items have screenshots attached
   → Ready for human verification at /admin2/ux-assignments
```

---

## Related Skills

- `ux-assignment-generator` - Creates the assignments this skill verifies
- `devtools-site-testing` - Chrome DevTools MCP patterns

---

## Triggers

This skill should be invoked when user says:
- "verify ux assignments"
- "capture ux screenshots"
- "run verification swarm"
- "check what needs screenshots"

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.