Marketplace

swimlane-visualization

Design swimlane UI patterns for visualizing ADW execution. Use when building observability dashboards, monitoring agent workflows, or creating real-time status displays.

allowed_tools: Read, Grep, Glob

$ Installer

git clone https://github.com/melodic-software/claude-code-plugins /tmp/claude-code-plugins && cp -r /tmp/claude-code-plugins/plugins/tac/skills/swimlane-visualization ~/.claude/skills/claude-code-plugins

// tip: Run this command in your terminal to install the skill


name: swimlane-visualization description: Design swimlane UI patterns for visualizing ADW execution. Use when building observability dashboards, monitoring agent workflows, or creating real-time status displays. allowed-tools: Read, Grep, Glob

Swimlane Visualization

Design swimlane UI patterns for visualizing AI Developer Workflow execution in real-time.

When to Use

  • Building ADW observability dashboards
  • Monitoring agent workflow progress
  • Creating real-time status displays
  • Designing event inspection interfaces
  • Implementing workflow debugging tools

Prerequisites

  • Understanding of @websocket-architecture.md for real-time updates
  • Familiarity with @hook-event-patterns.md for event types
  • Frontend development capabilities (Vue, React, etc.)

SDK Requirement

Implementation Note: Swimlane visualization requires frontend development. This skill provides UI specifications and component patterns.

Swimlane Layout

Basic Structure

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ ADW: a1b2c3d4 - Feature: Add rate limiting                      โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚    Plan    โ”‚   Build    โ”‚   Review   โ”‚    Fix     โ”‚   Status    โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ โœ… Complete โ”‚ โšก Active  โ”‚ โ—‹ Pending  โ”‚ โ—‹ Pending  โ”‚ โ— Running   โ”‚
โ”‚            โ”‚            โ”‚            โ”‚            โ”‚             โ”‚
โ”‚ ๐Ÿ’ฌ Created โ”‚ ๐Ÿ› ๏ธ Write   โ”‚            โ”‚            โ”‚ Cost: $0.42 โ”‚
โ”‚    spec    โ”‚   auth.py  โ”‚            โ”‚            โ”‚             โ”‚
โ”‚            โ”‚ ๐Ÿ› ๏ธ Write   โ”‚            โ”‚            โ”‚ Tokens: 12K โ”‚
โ”‚            โ”‚   tests.py โ”‚            โ”‚            โ”‚             โ”‚
โ”‚            โ”‚ ๐Ÿง  Thinkingโ”‚            โ”‚            โ”‚ Duration:   โ”‚
โ”‚            โ”‚   ...      โ”‚            โ”‚            โ”‚   45s       โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
```text

### Lane States

| State | Icon | Color | Meaning |
| --- | --- | --- | --- |
| Pending | โ—‹ | Gray | Not started |
| Active | โšก | Blue | Currently executing |
| Complete | โœ… | Green | Successfully finished |
| Failed | โŒ | Red | Error occurred |

## Event Card Design

### Event Card Structure

```text
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ ๐Ÿ› ๏ธ ToolUseBlock                 โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Write: src/auth/middleware.py   โ”‚
โ”‚                                 โ”‚
โ”‚ "Implementing JWT validation    โ”‚
โ”‚  middleware for API routes"     โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ 10:32:15 | 45ms                 โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
```text

### Event Type Icons

| Event Type | Icon | Card Style |
| --- | --- | --- |
| TextBlock | ๐Ÿ’ฌ | Blue border |
| ToolUseBlock | ๐Ÿ› ๏ธ | Orange border |
| ThinkingBlock | ๐Ÿง  | Purple border |
| PreToolUse | ๐Ÿช | Light gray |
| PostToolUse | ๐Ÿช | Light gray |
| StepStart | โš™๏ธ | Green accent |
| StepEnd | โš™๏ธ | Green accent |

## Component Specifications

### Lane Component

```vue
<template>
  <div class="lane" :class="{ active: isActive }">
    <div class="lane-header">
      <span class="lane-icon">{{ stateIcon }}</span>
      <span class="lane-name">{{ step.name }}</span>
    </div>
    <div class="lane-content">
      <EventCard
        v-for="event in events"
        :key="event.id"
        :event="event"
        @click="$emit('select', event)"
      />
    </div>
  </div>
</template>
```text

### Event Card Component

```vue
<template>
  <div class="event-card" :class="eventTypeClass">
    <div class="event-header">
      <span class="event-icon">{{ typeIcon }}</span>
      <span class="event-type">{{ event.event_type }}</span>
    </div>
    <div class="event-body">
      <p class="event-summary">{{ event.summary }}</p>
    </div>
    <div class="event-footer">
      <span class="event-time">{{ formattedTime }}</span>
      <span class="event-duration" v-if="event.duration_ms">
        {{ event.duration_ms }}ms
      </span>
    </div>
  </div>
</template>
```text

### Status Panel Component

```vue
<template>
  <div class="status-panel">
    <div class="status-indicator" :class="overallStatus">
      <span class="status-dot"></span>
      <span class="status-text">{{ statusText }}</span>
    </div>
    <div class="metrics">
      <div class="metric">
        <span class="metric-label">Cost</span>
        <span class="metric-value">${{ totalCost.toFixed(2) }}</span>
      </div>
      <div class="metric">
        <span class="metric-label">Tokens</span>
        <span class="metric-value">{{ formatTokens(totalTokens) }}</span>
      </div>
      <div class="metric">
        <span class="metric-label">Duration</span>
        <span class="metric-value">{{ formatDuration(totalDuration) }}</span>
      </div>
    </div>
  </div>
</template>
```text

## Real-Time Update Pattern

### WebSocket Integration

```typescript
class SwimlaneLive {
  private ws: ADWWebSocket;
  private lanes: Map<string, Lane> = new Map();

  connect(adwId: string) {
    this.ws = new ADWWebSocket();
    this.ws.connect();
    this.ws.subscribe(adwId, this.handleEvent.bind(this));
  }

  handleEvent(event: ADWEvent) {
    const lane = this.lanes.get(event.step);
    if (lane) {
      lane.addEvent(event);
      this.updateLaneState(event.step);
    }
  }

  updateLaneState(step: string) {
    // Update lane visual state based on latest event
  }
}
```text

### Event Buffering

```typescript
class EventBuffer {
  private buffer: ADWEvent[] = [];
  private flushInterval = 100; // ms

  add(event: ADWEvent) {
    this.buffer.push(event);
  }

  flush(): ADWEvent[] {
    const events = [...this.buffer];
    this.buffer = [];
    return events;
  }
}
```text

## Filtering and Navigation

### Filter Controls

```text
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Filters:                                                         โ”‚
โ”‚ [Step: All โ–ผ] [Type: All โ–ผ] [Search: _____________] [๐Ÿ”„ Live]  โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
```text

### Filter Implementation

```typescript
interface SwimlineFilters {
  step: string | null;
  eventTypes: string[];
  searchQuery: string;
  liveMode: boolean;
}

function filterEvents(events: ADWEvent[], filters: SwimlineFilters) {
  return events.filter(event => {
    if (filters.step && event.step !== filters.step) return false;
    if (filters.eventTypes.length && !filters.eventTypes.includes(event.event_type)) return false;
    if (filters.searchQuery && !event.summary.includes(filters.searchQuery)) return false;
    return true;
  });
}
```text

## Event Detail Panel

### Expanded Event View

```text
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Event Details                                              [X]  โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Type: ToolUseBlock                                              โ”‚
โ”‚ Step: build                                                     โ”‚
โ”‚ Time: 2026-01-01 10:32:15 UTC                                  โ”‚
โ”‚ Duration: 45ms                                                  โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Tool: Write                                                     โ”‚
โ”‚ Path: src/auth/middleware.py                                    โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Summary:                                                        โ”‚
โ”‚ "Implementing JWT validation middleware for API routes"        โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Raw Payload:                                                    โ”‚
โ”‚ {                                                               โ”‚
โ”‚   "tool_name": "Write",                                        โ”‚
โ”‚   "file_path": "src/auth/middleware.py",                       โ”‚
โ”‚   "content": "..."                                             โ”‚
โ”‚ }                                                               โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
```text

## Design Checklist

- [ ] Lane layout defined for all steps
- [ ] Event card components designed
- [ ] Status indicators specified
- [ ] Real-time WebSocket integration
- [ ] Event type icons and colors
- [ ] Filter controls designed
- [ ] Event detail panel specified
- [ ] Responsive layout considered
- [ ] Loading and error states
- [ ] Accessibility requirements

## Output Format

```markdown
## Swimlane Visualization Design

### Layout Specification

```text
[ASCII layout diagram]
```text

### Lane States

| State | Visual | Trigger |
| --- | --- | --- |
| [state] | [description] | [when applied] |

### Event Cards

[Card specifications per event type]

### Components

**Lane Component:**
[Props, events, slots]

**Event Card Component:**
[Props, events, styling]

**Status Panel:**
[Metrics displayed]

### Real-Time Updates

[WebSocket integration pattern]

### Filtering

[Filter controls and logic]

```text

## Anti-Patterns

| Anti-Pattern | Problem | Solution |
| --- | --- | --- |
| No live updates | Stale display | WebSocket streaming |
| Overwhelming events | UI unusable | Filtering and pagination |
| No event details | Can't debug | Detail panel on click |
| Missing status | Unknown state | Status indicators |
| Sync rendering | UI freezes | Buffered updates |

## Cross-References

- @websocket-architecture.md - Real-time streaming
- @hook-event-patterns.md - Event types
- @multi-agent-observability skill - Metrics patterns
- @production-patterns.md - Backend integration

## Version History

- **v1.0.0** (2026-01-01): Initial release (Lesson 14)

---

## Last Updated

**Date:** 2026-01-01
**Model:** claude-opus-4-5-20251101