oc-ux-engineer — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited oc-ux-engineer (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.
On first invocation, read `references/orchestrator.md` and follow its welcome protocol.
A tri-agent design harness: Design Planner → Design Generator → Design Evaluator. The same architecture that makes oc-app-architect's Phase 6 build loop produce honest quality scores — skeptical evaluation with agent separation — applied to UI/UX design.
Also runs cross-screen flow analysis, maintains a living component library, and enforces fidelity between approved designs and built code.
Works in two modes:
during UI-heavy oc-app-architect Phase 6 build sprints
UX ENGINEER COMMANDS
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
TRI-DESIGN HARNESS
/oc-uxe plan Run the Design Planner on a brief
/oc-uxe build Start or resume Design Generator → Evaluator loop
/oc-uxe eval Run the Design Evaluator ad-hoc on any artifact
MODULES
/oc-uxe flow Map and audit user flows across screens
/oc-uxe components View, update, or audit the living component library
/oc-uxe fidelity Compare built code against approved design artifacts
/oc-uxe dash Route data-heavy UI to oc-dash-forge for specialized design
APP-ARCHITECT PLUGIN
/oc-uxe attach Activate Design Evaluator for current oc-app-architect Phase 6 build session
/oc-uxe detach Deactivate Design Evaluator (code-only evaluation)
UTILITIES
/oc-uxe status Show current design state, scores, component coverage
/oc-uxe export Export component library as interactive HTML
/checkpoint Show checkpoint status
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Type any command to begin. /oc-uxe to see this again.DESIGN BRIEF (from user, oc-app-architect, or prompt)
│
▼
┌──────────────┐
│ DESIGN │ Expands brief → design spec
│ PLANNER │ Outputs: design-spec.md, design-sprints.md
└──────┬───────┘
│
▼
┌──────────────────────────────────────────────┐
│ DESIGN BUILD LOOP (per sprint) │
│ │
│ ┌────────────┐ contract ┌─────────────┐ │
│ │ DESIGN │◄─negotiate──►│ DESIGN │ │
│ │ GENERATOR │ │ EVALUATOR │ │
│ │ │──artifact──►│ │ │
│ │ Builds │ │ Grades │ │
│ │ design │◄──feedback──│ (isolated) │ │
│ └────────────┘ └─────────────┘ │
│ │ │ │
│ │ PASS threshold? │ │
│ │ or max iters? │ │
│ └───────────────────────────┘ │
└──────────────────────────────────────────────┘
│
├──► Component Library (living artifact)
├──► Flow Map (cross-screen navigation)
└──► Design Tokens (source of truth)The same failure modes that plague code generation hit design even harder:
always think it "looks good." A separate evaluator, tuned to be a skeptical senior product designer, catches hierarchy problems, missing states, and accessibility gaps that the generator would wave through.
settling on one. That exploration context makes the chosen option feel more justified than it is. An evaluator with clean context judges the output on its merits, not the journey.
the approved tokens (slightly different spacing, one-off colors). The evaluator catches drift because it reads the design spec fresh each time.
/oc-uxe dash)Some screens are primarily data display: dashboards, BI views, analytics, monitoring consoles, dense reports. These have their own design discipline (Tufte density, scannability hierarchy, semantic color, chart selection) that is poorly served by the general-purpose tri-design harness.
For these screens, oc-ux-engineer routes to oc-dash-forge — a specialized skill for dashboard and dense-information UI.
During /oc-uxe plan or when evaluating a brief, oc-ux-engineer should recognize dashboard surfaces and surface the routing option. Triggers:
data-architect-handoff.mdWhen detected, offer:
This screen looks data-heavy. Route design to oc-dash-forge?
oc-dash-forge specializes in:
- Exec / Ops / Analyst archetype branching
- Density tuning, semantic color, chart selection
- Working React prototype with archetype-appropriate viz stack (Tremor / Recharts / D3)
(Y) Route to oc-dash-forge
(N) Continue with oc-ux-engineer tri-design harness/oc-uxe dashUser can force routing with /oc-uxe dash [brief]. oc-ux-engineer packages its current context (tokens, component library, design spec if any) and invokes oc-dash-forge's /oc-data-forge with upstream context pre-populated.
Keep the work in oc-ux-engineer if:
Rule of thumb: if the screen IS the dashboard, route. If the screen CONTAINS a small data widget, handle it in oc-ux-engineer.
/oc-uxe plan)The Design Planner takes a brief and expands it into a design specification.
The Planner is an experienced design director. Key behaviors:
Commit to a direction and justify it.
source: oc-dash-forge and stop detailed design work for that screen — oc-dash-forge will own it.design-spec.md:
# Design Specification — [project]
## Design Direction
[2-3 sentences: mood, personality, visual philosophy]
[Reference: what existing products feel like this?]
## Design Tokens
### Colors
[Full palette: primary, secondary, accent, neutrals, semantic]
[Each with: hex, usage rule, contrast ratio]
### Typography
[Typefaces, type scale with sizes/weights, line heights]
### Spacing
[Base unit, spacing scale, container widths, grid]
### Surfaces
[Border radii, shadows, border colors]
## Component Inventory (planned)
[List every component needed, grouped by category]
[For each: expected variants, states, a11y requirements]
## Screen Inventory (planned)
[List every screen with route, purpose, key components]
## Interaction Patterns
[How things move: transitions, loading patterns, feedback]
[Gesture support: swipe, pull-to-refresh, long-press]
## Constraints
[Device targets, performance budgets, a11y requirements]design-sprints.md:
## Design Sprint 1: Foundation
Deliverables: Style book HTML, base component set
Definition of done: All tokens rendered, 6 base components with all states
## Design Sprint 2: Screens
Deliverables: Screen prototypes for primary flows
Definition of done: Clickable prototype covering auth + core action
## Design Sprint 3: Polish & Flows
Deliverables: Secondary screens, transitions, empty/error states
Definition of done: All screens from inventory, flow map completePresent the spec and sprint plan. Do NOT proceed until approved. Write checkpoint: phase "planned".
/oc-uxe build)For each design sprint, run the Generator → Evaluator loop.
Design Generator proposes a sprint contract:
## Design Sprint [N] Contract
### Deliverables
- [Specific artifacts to produce]
### Evaluation Criteria
1. [Criterion]: [How to verify — specific, measurable]
2. [Criterion]: [How to verify]
### Token Compliance
- All colors from approved palette
- All spacing from approved scale
- All typography from approved type scale
- No hardcoded valuesDesign Evaluator reviews and pushes back if:
Save contract to design/sprints/sprint-N/contract.md.
The Generator produces design artifacts against the contract:
Key Generator behaviors:
The Design Evaluator grades with isolated context — it reads the design spec and the contract fresh, then evaluates the artifact without seeing the generator's exploration or decision process.
Design Evaluator Criteria:
| Criterion | Weight | What it measures |
|---|---|---|
| Visual Hierarchy | 25% | Can the user instantly see what's most important? Z/F-pattern clear? Squint test passes? |
| State Completeness | 25% | Every data-driven element handles loading, empty, error, disabled? |
| Consistency | 25% | Similar elements identical? Tokens used everywhere? No one-off values? |
| Accessibility | 25% | Contrast ≥ 4.5:1, keyboard nav works, focus visible, semantic HTML, ARIA correct? |
Design Evaluator Persona:
The evaluator is a skeptical senior product designer who has shipped 50+ products. Key behaviors:
before you check anything else.
Loading? Failed? Disabled?" If any state is unhandled, that's a finding.
Cards match? Modals match? One inconsistency is a finding.
enough? Text readable without zooming? Key action reachable with one thumb?
from the design spec. Any hardcoded value is a FAIL on consistency.
"spacing scale followed consistently across 8 screens" or "3 different card shadow values — consolidate to 1."
Fight it. A 5/10 means "mediocre" and that's fine to give.
Evaluation Report saved to design/sprints/sprint-N/eval-round-M.md:
## Design Sprint [N] — Evaluation Round [M]
### Scores
- Visual Hierarchy: [X]/10 — [1-2 sentence justification]
- State Completeness: [X]/10 — [1-2 sentence justification]
- Consistency: [X]/10 — [1-2 sentence justification]
- Accessibility: [X]/10 — [1-2 sentence justification]
- **Weighted Score: [X]/10**
### Issues
1. [Specific issue: component, location, what's wrong, how to fix]
2. ...
### Token Compliance
- Colors: [X]/[Y] from palette ([list violations])
- Spacing: [X]/[Y] from scale ([list violations])
- Typography: [X]/[Y] from type scale ([list violations])
### Gaps vs Contract
1. [Criterion] — [PASS/FAIL] — [Evidence]
2. ...
### Verdict: PASS / ITERATE
[If ITERATE: specific, actionable feedback for the generator]Write checkpoint after every round.
| Score | Meaning |
|---|---|
| 9-10 | Portfolio-quality — a design director would approve without notes |
| 7-8 | Solid — consistent, accessible, clear hierarchy, minor polish needed |
| 5-6 | Functional but generic — works without delight or distinction |
| 3-4 | Inconsistent — mixed patterns, missing states, a11y gaps |
| 1-2 | Broken — layout issues, unreadable text, unusable on mobile |
Max iterations per sprint: 3. Pass threshold: all criteria ≥ 6/10.
/oc-uxe flow)Maps every user journey and audits for coherence. This runs as a standalone analysis OR as part of a design sprint focused on flows.
## Flow Map — [project]
### Primary Flows
1. **Onboarding**: Landing → Signup → Verify → First-run → Dashboard
2. **Core action**: Dashboard → [feature] → Confirm → Success
3. **Auth**: Login → Dashboard | Logout → Landing
### Secondary Flows
4. **Settings**: Dashboard → Settings → [sub] → Save → Toast
5. **Error recovery**: Any → Error state → Retry / Navigate away
### Screen Inventory
| Screen | Route | Arrives from | Goes to | States |
|---|---|---|---|---|
| Landing | / | External, Logout | Login, Signup | default |
| Dashboard | /dashboard | Login, Onboarding | Feature, Settings | loading, empty, data, error || Check | What to Look For | Severity |
|---|---|---|
| Dead ends | No exit except browser back | HIGH |
| Orphan screens | Not reachable from navigation | HIGH |
| State loss | Form data lost on navigate away | MEDIUM |
| Back button | Goes somewhere unexpected | MEDIUM |
| Deep link | Screen requires prior nav state | MEDIUM |
| Missing confirmation | Destructive action without prompt | HIGH |
| Inconsistent nav | Different nav patterns across screens | HIGH |
| Loading waterfalls | Nested sequential loads | LOW |
| Score | Meaning |
|---|---|
| A | All flows complete, no dead ends, consistent nav, state preserved |
| B | Flows work, 1-2 minor gaps |
| C | Primary flows work, secondary have issues |
| D | Primary flows have problems |
| F | Critical flows broken or missing |
/oc-uxe components)A component registry that evolves with the build.
Stored in design/component-registry.json:
{
"project": "gtrack",
"last_updated": "2026-04-03T10:00:00Z",
"tokens": {
"source": "design/style-book.html",
"colors": { "primary": "#7C3AED", "secondary": "#06B6D4" },
"spacing_base": 4,
"type_scale": ["12px", "14px", "16px", "18px", "24px", "32px"],
"radii": ["4px", "8px", "12px", "9999px"]
},
"components": [
{
"name": "Button",
"path": "src/components/ui/Button.tsx",
"category": "input",
"variants": ["primary", "secondary", "ghost", "destructive"],
"sizes": ["sm", "md", "lg"],
"states": ["default", "hover", "active", "focused", "disabled", "loading"],
"a11y": { "role": "button", "keyboard": "Enter/Space", "focus_visible": true },
"added_sprint": 1,
"last_modified_sprint": 2,
"status": "stable"
}
],
"coverage": {
"total": 24,
"all_states": 18,
"accessible": 20,
"responsive": 22,
"score": "75%"
}
}/oc-uxe components list Show all with status and coverage
/oc-uxe components add <name> Register a new component
/oc-uxe components audit Consistency check across all components
/oc-uxe components export Generate interactive HTML libraryChecks every registered component:
/oc-uxe fidelity)Compares approved design against built code.
| Design Artifact | Built Artifact | Check |
|---|---|---|
| Style book tokens | CSS variables / Tailwind config | Colors, spacing, type scale match |
| Wireframe layout | Page components | Zone placement, breakpoints |
| Punch list | Component inventory | Every item exists with all states |
| Flow map | Router + navigation | Every flow navigable, no dead ends |
## Design Fidelity — [project]
### Token Fidelity: [X]%
### Layout Fidelity: [X]%
### Punch List Coverage: [X]%
- Missing: [list]
- Extra (scope creep): [list]
### Flow Fidelity: [X]%
- Broken: [list]
### Overall: [A-F]/oc-uxe attach)Adds Design Evaluator alongside Code Evaluator during UI sprints.
/oc-uxe attach during an oc-app-architect Phase 6 build session## Sprint [N] — Evaluation Round [M]
### Code Scores
- Functionality: [X]/10
- Feature Completeness: [X]/10
- Code Quality: [X]/10
- **Code Score: [X]/10**
### Design Scores
- Visual Hierarchy: [X]/10
- State Completeness: [X]/10
- Consistency: [X]/10
- Accessibility: [X]/10
- **Design Score: [X]/10**
### Combined Verdict: PASS / FAIL
[Both must pass]Auto-detect from contract keywords:
/oc-uxe attach --force or /oc-uxe detachproject-dir/
├── .checkpoints/
│ └── oc-ux-engineer.checkpoint.json
├── design/
│ ├── design-spec.md # Design Planner output
│ ├── design-sprints.md # Sprint plan
│ ├── style-book.html # Living style book
│ ├── component-registry.json # Component library data
│ ├── flow-map.md # Cross-screen flow map
│ └── sprints/
│ ├── sprint-1/
│ │ ├── contract.md
│ │ ├── eval-round-1.md
│ │ └── eval-round-2.md
│ └── sprint-2/
│ └── ...{project-dir}/.checkpoints/oc-ux-engineer.checkpoint.json
| Event | What to Save |
|---|---|
| Design spec approved | phase: "planned", spec decisions |
| Sprint contract negotiated | step: "sprint-N-contract" |
| Generator produces artifact | step: "sprint-N-built" |
| Evaluator grades | step: "sprint-N-eval-M", scores |
| Sprint passes | Advance progress_table |
| Flow map generated | Flow data, coherence score |
| Component added/modified | Registry update |
| Fidelity check run | Fidelity scores |
| Attached to oc-app-architect Phase 6 | Session link |
{
"mode": "standalone",
"attached_to_app_architect": false,
"current_sprint": 2,
"total_sprints": 3,
"component_count": 24,
"component_coverage": "75%",
"flow_coherence": "B",
"last_fidelity_score": "82%",
"scores": {
"sprint-1": { "final": 8.1, "rounds": 2, "verdict": "PASS" },
"sprint-2": { "final": null, "rounds": 1, "verdict": null }
}
}| Reads from | Why |
|---|---|
| oc-app-architect | Style book, wireframes, punch list → baseline; Phase 6 sprint contracts → plugin mode context |
| oc-reverse-spec | Extracted design system → existing project baseline |
| oc-code-auditor | /oc-audit ux findings → avoid duplicating work |
| frontend-design | Aesthetic direction → Generator reference |
| Read by | Why |
|---|---|
| oc-app-architect | Design scores → Phase 6 combined sprint verdict |
| oc-code-auditor | Component health → UX audit context |
| oc-deploy-ops | Fidelity score → deploy confidence |
UI sprints have an extra grader (the Design Evaluator) that produces scores design teams care about. v1.2 makes those scores visible in the PM tool. See oc-integrations-engineer for the canonical PM-MCP patterns.
After every Design Evaluator round on a UI sprint, post a structured comment:
Design eval — round {M}: {PASS / FAIL}
Visual hierarchy: {X}/10
State completeness: {X}/10 (loading / empty / error / disabled — {N} of 4)
Consistency: {X}/10
Accessibility: {X}/10 (axe-core: {N} violations)
Top three findings:
1. {component} — {one-line finding}
...
Full report: sprints/sprint-{N}/design-eval-round-{M}.mdAccessibility violations have higher escalation than other design findings — they're not subjective preferences and they have legal / compliance implications. v1.2 files axe-core CRITICAL or SERIOUS violations as sub-tickets parent-linked to the source PR ticket:
issue_type: bug.priority: highest tier for CRITICAL, high for SERIOUS.labels: a11y, severity:<critical|serious>,wcag:<criterion>.
assignee: from .opchain/pm.yaml remediation_owners.frontend.body: violation + offending selector + WCAG criterion +suggested fix from axe-core.
Lower-severity violations stay in the eval report only.
If /oc-uxe consistency finds drift (a new component using off-token colors or off-scale spacing), comment on the linked ticket:
Design-system drift detected:
- 3 new components use raw hex colors (should be tokens).
- 1 new spacing value off the 4/8/12/16 scale.
Action: refactor before merge, or accept as exception with rationale.The skill does not auto-block; the comment is the signal. Whether it's a block depends on team policy + the PR review process.
When oc-ux-engineer detects a dashboard surface and routes to oc-dash-forge, both skills' PM-MCP integrations coordinate: oc-ux-engineer adds a Routed to oc-dash-forge for {screen-name}; handoff bundle attached. comment, oc-dash-forge later appends its own design-spec + prototype comment to the same ticket. The thread reads end-to-end.
no a11y sub-tickets filed (we don't fabricate violations).
sets direction. Mixing these roles degrades all three.
is a finding, not a nice-to-have.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.