CtrlK
BlogDocsLog inGet started
Tessl Logo

team-visual-a11y

Unified team skill for visual accessibility QA. OKLCH color contrast, typography readability, focus management, WCAG AA/AAA audit at rendered level. Uses team-worker agent architecture. Triggers on "team visual a11y", "accessibility audit", "visual a11y".

64

Quality

76%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide

SecuritybySnyk

Low

Low-risk findings worth noting

Fix and improve this skill with Tessl

tessl review fix ./.codex/skills/team-visual-a11y/SKILL.md
SKILL.md
Quality
Evals
Security

Team Visual Accessibility

Deep visual accessibility QA: OKLCH-based perceptual color contrast, typography readability at all viewports, focus-visible completeness, WCAG AA/AAA audit at rendered level. Built on team-worker agent architecture -- all worker roles share a single agent definition with role-specific Phase 2-4 loaded from roles/<role>/role.md.

Architecture

Skill(skill="team-visual-a11y", args="task description")
                    |
         SKILL.md (this file) = Router
                    |
     +--------------+--------------+
     |                             |
  no --role flag              --role <name>
     |                             |
  Coordinator                  Worker
  roles/coordinator/role.md    roles/<name>/role.md
     |
     +-- analyze -> dispatch -> spawn workers -> STOP
                                    |
                    +-------+-------+-------+
                    v       v       v       |
           [3 auditors spawn in PARALLEL]   |
        color-auditor  typo-auditor  focus-auditor
                    |       |       |
                    +---+---+---+---+
                        v
               remediation-planner
                        |
                        v
               fix-implementer (inner_loop)
                        |
                        v
               [re-audit: color + focus in PARALLEL]

Role Registry

RolePathPrefixInner Loop
coordinatorroles/coordinator/role.md----
color-auditorroles/color-auditor/role.mdCOLOR-*false
typo-auditorroles/typo-auditor/role.mdTYPO-*false
focus-auditorroles/focus-auditor/role.mdFOCUS-*false
remediation-plannerroles/remediation-planner/role.mdREMED-*false
fix-implementerroles/fix-implementer/role.mdFIX-*true

Role Router

Parse $ARGUMENTS:

  • Has --role <name> -> Read roles/<name>/role.md, execute Phase 2-4
  • No --role -> roles/coordinator/role.md, execute entry router

Delegation Lock

Coordinator is a PURE ORCHESTRATOR. It coordinates, it does NOT do.

Before calling ANY tool, apply this check:

Tool CallVerdictReason
spawn_agent, wait_agent, close_agent, send_message, followup_taskALLOWEDOrchestration
list_agentsALLOWEDAgent health check
request_user_inputALLOWEDUser interaction
mcp__ccw-tools__team_msgALLOWEDMessage bus
Read/Write on .workflow/.team/ filesALLOWEDSession state
Read on roles/, commands/, specs/ALLOWEDLoading own instructions
Read/Grep/Glob on project source codeBLOCKEDDelegate to worker
Edit on any file outside .workflow/BLOCKEDDelegate to worker
Bash("ccw cli ...")BLOCKEDOnly workers call CLI
Bash running build/test/lint commandsBLOCKEDDelegate to worker

If a tool call is BLOCKED: STOP. Create a task, spawn a worker.

No exceptions for "simple" tasks. Even a single-file read-and-report MUST go through spawn_agent.


Shared Constants

  • Session prefix: VA
  • Session path: .workflow/.team/VA-<date>-<slug>/
  • team_name: visual-a11y
  • CLI tools: ccw cli --mode analysis (read-only), ccw cli --mode write (modifications)
  • Message bus: mcp__ccw-tools__team_msg(session_id=<session-id>, ...)
  • Max GC rounds: 2

Worker Spawn Template

Coordinator spawns workers using this template:

spawn_agent({
  agent_type: "team_worker",
  task_name: "<task-id>",
  fork_turns: "none",
  message: `## Role Assignment
role: <role>
role_spec: <skill_root>/roles/<role>/role.md
session: <session-folder>
session_id: <session-id>
requirement: <task-description>
inner_loop: <true|false>

Read role_spec file (<skill_root>/roles/<role>/role.md) to load Phase 2-4 domain instructions.

## Task Context
task_id: <task-id>
title: <task-title>
description: <task-description>
pipeline_phase: <pipeline-phase>

## Upstream Context
<prev_context>`
})

Parallel Fan-in Spawn (3 Auditors)

The 3 auditors run in parallel. Spawn all 3, then wait for all 3:

// Spawn 3 auditors in parallel
spawn_agent({
  agent_type: "team_worker",
  task_name: "COLOR-001",
  fork_turns: "none",
  message: `## Role Assignment
role: color-auditor
role_spec: ${skillRoot}/roles/color-auditor/role.md
session: ${sessionFolder}
session_id: ${sessionId}
requirement: ${colorTaskDescription}
inner_loop: false

Read role_spec file to load Phase 2-4 domain instructions.

## Task Context
task_id: COLOR-001
title: OKLCH Color Contrast Audit
description: ${colorTaskDescription}
pipeline_phase: audit`
})

spawn_agent({
  agent_type: "team_worker",
  task_name: "TYPO-001",
  fork_turns: "none",
  message: `## Role Assignment
role: typo-auditor
role_spec: ${skillRoot}/roles/typo-auditor/role.md
session: ${sessionFolder}
session_id: ${sessionId}
requirement: ${typoTaskDescription}
inner_loop: false

Read role_spec file to load Phase 2-4 domain instructions.

## Task Context
task_id: TYPO-001
title: Typography Readability Audit
description: ${typoTaskDescription}
pipeline_phase: audit`
})

spawn_agent({
  agent_type: "team_worker",
  task_name: "FOCUS-001",
  fork_turns: "none",
  message: `## Role Assignment
role: focus-auditor
role_spec: ${skillRoot}/roles/focus-auditor/role.md
session: ${sessionFolder}
session_id: ${sessionId}
requirement: ${focusTaskDescription}
inner_loop: false

Read role_spec file to load Phase 2-4 domain instructions.

## Task Context
task_id: FOCUS-001
title: Focus & Keyboard Accessibility Audit
description: ${focusTaskDescription}
pipeline_phase: audit`
})

// Wait for ALL 3 auditors to complete
wait_agent({ timeout_ms: 1800000 })  // 30 min — apply timeout cascade if timed_out

// Close all 3
close_agent({ target: "COLOR-001" })
close_agent({ target: "TYPO-001" })
close_agent({ target: "FOCUS-001" })

// Then spawn remediation-planner with all 3 audit results as upstream context

After spawning, use wait_agent({ timeout_ms: 1800000 }) to collect results. If result.timed_out, send STATUS_CHECK via followup_task (wait 3 min), then FINALIZE with interrupt (wait 3 min), then mark timed_out and close agents. Use close_agent({ target }) each worker.

Model Selection Guide

Visual accessibility is a precision pipeline where auditors need thorough analysis and fix-implementer needs careful code changes.

Rolereasoning_effortRationale
color-auditorhighOKLCH calculations, contrast ratio precision
typo-auditorhighMulti-breakpoint analysis, clamp() validation
focus-auditorhighARIA patterns, keyboard navigation completeness
remediation-plannerhighSynthesize 3 audit reports into actionable plan
fix-implementermediumImplementation follows defined remediation plan

Audit-to-Remediation Context Flow

All 3 audit findings must reach remediation-planner via coordinator's upstream context:

// After COLOR-001 + TYPO-001 + FOCUS-001 all complete, coordinator sends findings to planner
spawn_agent({
  agent_type: "team_worker",
  task_name: "REMED-001",
  fork_turns: "none",
  message: `## Upstream Context
Color audit: <session>/audits/color/color-audit-001.md
Typography audit: <session>/audits/typography/typo-audit-001.md
Focus audit: <session>/audits/focus/focus-audit-001.md`
})

User Commands

CommandAction
check / statusView execution status graph
resume / continueAdvance to next step

Specs Reference

Session Directory

.workflow/.team/VA-<date>-<slug>/
+-- .msg/
|   +-- messages.jsonl         # Team message bus
|   +-- meta.json              # Pipeline config + GC state
+-- audits/
|   +-- color/                 # Color auditor output
|   |   +-- color-audit-001.md
|   +-- typography/            # Typography auditor output
|   |   +-- typo-audit-001.md
|   +-- focus/                 # Focus auditor output
|       +-- focus-audit-001.md
+-- remediation/               # Remediation planner output
|   +-- remediation-plan.md
+-- fixes/                     # Fix implementer output
|   +-- fix-summary-001.md
+-- re-audit/                  # Re-audit output (GC loop)
|   +-- color-audit-002.md
|   +-- focus-audit-002.md
+-- evidence/                  # Screenshots, traces

v4 Agent Coordination

Message Semantics

IntentAPIExample
Queue supplementary info (don't interrupt)send_messageSend audit findings to running remediation-planner
Assign new work from reviewed planfollowup_taskAssign FIX task after remediation plan ready
Check running agentslist_agentsVerify agent health during resume

Agent Health Check

Use list_agents({}) in handleResume and handleComplete:

// Reconcile session state with actual running agents
const running = list_agents({})
// Compare with tasks.json active tasks
// Reset orphaned tasks (in_progress but agent gone) to pending

Named Agent Targeting

Workers are spawned with task_name: "<task-id>" enabling direct addressing:

  • send_message({ target: "REMED-001", message: "..." }) -- send additional audit findings to remediation-planner
  • followup_task({ target: "FIX-001", message: "..." }) -- assign implementation from remediation plan
  • close_agent({ target: "COLOR-001" }) -- cleanup after color audit

Error Handling

ScenarioResolution
Unknown commandError with available command list
Role not foundError with role registry
Session corruptionAttempt recovery, fallback to manual
Fast-advance conflictCoordinator reconciles on next callback
Completion action failsDefault to Keep Active
GC loop stuck > 2 roundsEscalate to user: accept / retry / terminate
Chrome DevTools unavailableDegrade to static analysis only
Repository
catlog22/Claude-Code-Workflow
Last updated
First committed

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.