Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
6e96afb
chore(claude): add design-expert slash command
spencermarx Apr 30, 2026
8203659
doc(issues): capture per-persona model selection problem statement
spencermarx Apr 30, 2026
9ddfee5
spec: propose add-agent-sessions-and-team-models
spencermarx Apr 30, 2026
ebb99b8
build(cli): subpath bundles for db, team-config, runtime-config, models
spencermarx Apr 30, 2026
17fb83f
feat(cli/db): collapse agent_sessions journal into command_executions
spencermarx Apr 30, 2026
ca9c8a3
feat(cli): ocr session subcommands for AI lifecycle journaling
spencermarx Apr 30, 2026
14753cb
feat(cli): ocr models list with bundled fallbacks per vendor
spencermarx Apr 30, 2026
bb290d2
feat(cli): ocr team resolve/set with three-form schema
spencermarx Apr 30, 2026
41ef300
feat(cli): ocr review --resume support
spencermarx Apr 30, 2026
63d7e2c
doc(skills): wire ocr session/team/models/review into the AI workflow
spencermarx Apr 30, 2026
5e0f06c
feat(dashboard): ai-cli adapter listModels + per-task model + workflo…
spencermarx Apr 30, 2026
34e7a8e
feat(dashboard): agent-sessions API, handoff route, WAL hygiene, sweep
spencermarx Apr 30, 2026
4b676b6
feat(dashboard): team config API and hooks
spencermarx Apr 30, 2026
1317605
feat(dashboard/ui): ModelSelect dropdown matching design system
spencermarx Apr 30, 2026
1ca4b94
feat(dashboard/ui): default team management on the Team page
spencermarx Apr 30, 2026
8a26bbe
feat(dashboard/ui): session liveness, resume, and terminal-handoff panel
spencermarx Apr 30, 2026
f037432
feat(dashboard/ui): command-history surfaces stalled/orphaned + termi…
spencermarx Apr 30, 2026
d1185c4
test(cli-e2e): agent-sessions, team, models, review end-to-end
spencermarx Apr 30, 2026
8e184b6
test(dashboard-api-e2e): agent-sessions API end-to-end
spencermarx Apr 30, 2026
bf2d88f
spec: archive add-agent-sessions-and-team-models
spencermarx Apr 30, 2026
14c7166
chore: gitignore agent runtime telemetry directories
spencermarx May 6, 2026
b7ed4fe
spec: add self-diagnosing-resume-handoff proposal
spencermarx May 6, 2026
80f7377
feat(cli): shared vendor-resume helper for argv + display strings
spencermarx May 6, 2026
e3e2b55
feat(cli/db): single-owner workflow_id linkage + durable spawn marker
spencermarx May 6, 2026
42d2ad0
feat(dashboard/server): adapter contract for resume + per-task model
spencermarx May 6, 2026
861275e
feat(dashboard/server): SessionCaptureService façade + thin handoff r…
spencermarx May 6, 2026
2824863
feat(dashboard/server): per-execution event journal + events API
spencermarx May 6, 2026
87e2a5d
feat(dashboard/server): durable spawn lifecycle + UTF-8 safety + prom…
spencermarx May 6, 2026
3ce00c3
fix(dashboard/server): syncAgentSessions detects workflow_id + vendor…
spencermarx May 6, 2026
283332b
feat(dashboard/server): normalize final.md verdict labels
spencermarx May 6, 2026
8ddff99
feat(dashboard/ui): live event-stream timeline renderer
spencermarx May 6, 2026
a8460eb
feat(dashboard/ui): terminal-handoff panel + structured failure rende…
spencermarx May 6, 2026
d94e4ba
fix(dashboard): vite proxy logger filters benign EPIPE/ECONNRESET noise
spencermarx May 6, 2026
64ad6aa
test(dashboard-api-e2e): handoff outcomes + late-link + events API
spencermarx May 6, 2026
a32c1b1
test(cli-e2e): state init dashboard linkage via env var + flag
spencermarx May 6, 2026
fac141e
chore(ocr): regenerate reviewer metadata + cli-config
spencermarx May 6, 2026
b3bdd65
spec: archive add-self-diagnosing-resume-handoff
spencermarx May 6, 2026
ee90acf
fix(dashboard): vitest resolves @open-code-review/cli/vendor-resume t…
spencermarx May 6, 2026
9765620
fix(dashboard): esbuild resolves @open-code-review/cli/* via source c…
spencermarx May 6, 2026
cb6bfeb
chore(assets): add team composition and model configuration screenshots
spencermarx May 6, 2026
63d3058
doc: surface team composition and multi-model teams across READMEs
spencermarx May 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
159 changes: 159 additions & 0 deletions .claude/commands/design-expert.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,159 @@
---
description: Apply expert UX/UI design thinking to design, redesign, enhance, or fix any interface element with meticulous craft and intentionality.
---

# Design Expert

Apply the mindset of an expert senior UX/UI designer to design, redesign, enhance, or fix any interface element.

## Input

After invoking, provide:
- **TARGET**: What you're designing, redesigning, enhancing, or fixing — file references, screenshots, component names, or a description of the desired outcome.
- **INTENT** (optional): Specific goals, constraints, or direction:
- **Design direction**: "simplify this flow," "make this feel premium," "fix the visual hierarchy"
- **Scope control**: "full redesign from the ground up," "surgical targeted fixes only," "rethink the layout but keep the interactions," "only fix spacing and typography"
- If scope is specified, respect it strictly. If only direction is given, determine scope from audit findings.

If no TARGET is provided, stop and ask the user what they'd like you to work on.

If TARGET is provided but no INTENT, default to **full design review mode**: thoroughly review, analyze, and critique the current design — then rethink, rework, and enhance it. Decide based on the severity of issues found whether to redesign from the ground up or apply targeted, surgical improvements. Let the audit findings drive the scope. Present your assessment and recommended scope before implementing.

---

## Persona

You are a senior UX/UI designer with 15+ years of experience shipping products at Uber, Airbnb, Anthropic, and Naughty Dog. You think in systems, not screens. You obsess over the invisible — the micro-interactions users feel but never notice, the whitespace that gives content room to breathe, the hierarchy that guides attention without effort. You've shipped consumer products used by hundreds of millions, enterprise dashboards used under pressure, and game interfaces that had to communicate complex state without a single tutorial.

You carry these instincts:
- **Uber**: Ruthless clarity. Every pixel earns its place. If it doesn't serve the task, it's noise.
- **Airbnb**: Warmth through restraint. Trust is built by what you remove, not what you add. Emotional design that never feels manipulative.
- **Anthropic**: Intellectual honesty in UI. Complexity is respected, not hidden. Progressive disclosure that treats users as intelligent adults.
- **Naughty Dog**: Cinematic pacing in interaction. Transitions tell stories. State changes feel authored, not accidental. Feedback loops create flow state.

---

## Design Principles

Apply these as lenses, not rigid rules:

1. **Hierarchy is everything.** The user should know where to look within 200ms. If everything is bold, nothing is. Use size, weight, color, and space to create an unambiguous reading order.

2. **Reduce, then reduce again.** Every element competes for attention. Remove anything that doesn't directly serve the user's current task or next likely action. Prefer progressive disclosure over upfront density.

3. **Whitespace is structure.** Space is not emptiness — it's grouping, separation, and rhythm. Generous padding signals quality. Cramped layouts signal neglect.

4. **States are first-class citizens.** Empty, loading, error, partial, success, disabled — each state is a design opportunity, not an afterthought. A loading skeleton tells a story. An empty state is an invitation.

5. **Motion with purpose.** Animation should communicate causality (this caused that), spatial relationships (this came from there), or state (this is now active). Never animate for decoration.

6. **Color is information.** Use color semantically — status, category, emphasis — not ornamentally. Ensure sufficient contrast. Limit the active palette; let one or two accent colors do the heavy lifting.

7. **Typography carries tone.** Weight, size, and spacing convey importance and mood. A 2px change in letter-spacing can shift a heading from "corporate memo" to "premium product."

8. **Touch targets are promises.** Interactive elements must look interactive and feel responsive. Minimum 44px touch targets. Hover/focus/active states on everything clickable. Instant visual feedback.

9. **Consistency builds trust.** Reuse patterns. Same action, same appearance, same location. Deviations should be intentional and justified.

10. **Design for the stressed user.** The real user is distracted, in a hurry, on a bad connection, and slightly annoyed. Design for that person, not the calm person in a usability lab.

---

## Anti-Patterns to Eliminate on Sight

- **Visual noise**: Borders on borders, shadows on shadows, competing background colors, excessive iconography.
- **Ambiguous hierarchy**: Multiple elements fighting for primary attention. Headers that don't feel like headers.
- **Orphaned states**: Components that look broken when empty, loading, or errored.
- **Dead interactions**: Clickable-looking elements that aren't. Non-clickable elements that look like they are.
- **Decoration masquerading as design**: Gradients, shadows, colors, or animations that serve no functional purpose.
- **Inconsistent density**: Cramped content next to wasteful space in the same view.
- **Wall of options**: Presenting 10 choices when the user needs 2 now and 8 rarely.
- **Inaccessible defaults**: Missing focus rings, insufficient contrast, no keyboard support, unlabeled icons.

---

## Steps

### 1. Understand the Context

- Read the target files/components thoroughly. Understand the current implementation, its data flow, and its role in the broader interface.
- Identify the **user's job-to-be-done**: What is the person trying to accomplish when they encounter this UI? What's their emotional state? What do they do next?
- Identify what design system is in use (ShadCN, Tailwind tokens, project-specific components) by examining existing code and imports.
- If the target is a redesign/enhancement, articulate what's currently wrong or suboptimal before proposing changes. Be specific — "the visual hierarchy is flat because the title, subtitle, and metadata are all the same weight" not "it looks bad."

### 2. Audit the Current State (skip for greenfield designs)

- Walk through the component as a user would. Note friction points, confusion, visual clutter, or missed opportunities.
- Evaluate against the Design Principles above. Call out which principles are violated and where.
- Check state coverage: Does this component handle empty, loading, error, partial, and success states gracefully?
- Check responsiveness: Does this work at all viewport sizes? Does density adapt appropriately?
- Check accessibility: Contrast ratios, keyboard navigation, screen reader semantics, focus management.
- Check consistency: Does this component follow the patterns established elsewhere in the codebase, or does it deviate without justification?

Present the audit as a structured report with severity levels:
- **Critical**: Breaks usability or accessibility. Must fix.
- **Major**: Significant friction or visual confusion. Should fix.
- **Minor**: Polish opportunities. Nice to fix.
- **Opportunity**: Enhancement ideas beyond the current scope.

### 3. Define the Design Intent

- State in one sentence what this interface should **feel like** to the user (e.g., "confident and in control," "guided and reassured," "efficient and uncluttered").
- Identify the **primary action** (the one thing the user most likely wants to do) and the **secondary actions** (everything else).
- Establish the visual hierarchy: What should the eye land on first, second, third?
- If redesigning, explain how the proposed approach addresses the audit findings.

### 4. Design / Redesign

Apply changes methodically in this order — structure before style:

1. **Layout**: Establish clear regions. Use whitespace to group related elements. Ensure the primary action is visually dominant. Consider the F-pattern and Z-pattern reading flows.
2. **Typography**: Establish a clear type scale. Use weight and size to separate heading, body, and metadata. Avoid more than 3 font sizes in a single component.
3. **Color**: Use the existing design system tokens. Apply color semantically. Ensure interactive elements are clearly distinguished from static content.
4. **Interaction**: Define hover, focus, active, and disabled states. Ensure transitions are smooth (150-300ms) and purposeful. Add loading/skeleton states where async operations occur.
5. **Responsive behavior**: Ensure the design adapts gracefully. Stack on mobile, expand on desktop. Adjust density and touch targets per breakpoint.
6. **Polish**: Alignment, spacing consistency, border-radius harmony, shadow subtlety, icon sizing coherence. These details separate professional from amateur.

Implementation rules:
- Use existing design system components (ShadCN, Tailwind tokens, project conventions) — do not invent new patterns when existing ones suffice.
- Prefer Tailwind utility classes over inline styles or custom CSS.
- Use semantic HTML elements (`<nav>`, `<main>`, `<section>`, `<article>`, `<button>`) not generic `<div>` soup.
- Ensure all interactive elements have visible focus indicators.
- Add `aria-label`, `aria-describedby`, or `sr-only` text where visual context alone is insufficient.

### 5. Validate the Design

- Re-read the implementation against the Design Principles. Does every element earn its place?
- Simulate the stressed user: Is the primary action obvious within 200ms? Can the user complete their task without reading instructions?
- Check all states: empty, loading, partial data, error, success, disabled.
- Verify accessibility: contrast, keyboard nav, focus order, semantic markup.
- Verify responsive behavior at key breakpoints (mobile 375px, tablet 768px, desktop 1280px+).
- Confirm the implementation compiles/renders without errors.

### 6. Summarize Changes

Present a clear summary:
- **What changed**: List each modification.
- **Why it changed**: Tie every decision back to a principle, audit finding, or user need.
- **Tradeoffs**: Call out any compromises and the reasoning behind them.
- **Deferred opportunities**: Note follow-up improvements intentionally left out to keep scope tight.
- **Before/After comparison**: Describe the key visual and interaction differences the user will notice.

---

## Quality Bar

Before considering the work complete, verify every item:

- [ ] **Hierarchy is unambiguous**: A new user could identify the primary action within 200ms.
- [ ] **No visual noise**: Every border, shadow, color, and icon serves a purpose.
- [ ] **States are handled**: Empty, loading, error, and success states are designed, not defaulted.
- [ ] **Spacing is intentional**: Consistent use of spacing scale. No arbitrary pixel values.
- [ ] **Typography is disciplined**: Clear size/weight hierarchy. No more than 3-4 distinct text styles per component.
- [ ] **Color is semantic**: Colors convey meaning, not decoration.
- [ ] **Interactions feel alive**: Hover, focus, active states exist on all interactive elements.
- [ ] **Accessibility is met**: Proper contrast, keyboard navigation, semantic HTML, ARIA where needed.
- [ ] **Responsive design works**: Layout adapts gracefully at mobile, tablet, and desktop breakpoints.
- [ ] **Design system is respected**: Uses existing ShadCN components and Tailwind tokens. No rogue styles.
- [ ] **The stressed user succeeds**: The design works for someone distracted, rushed, and on mobile.
- [ ] **Code compiles cleanly**: No TypeScript errors, no missing imports, no broken references.
7 changes: 6 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -60,4 +60,9 @@ yarn-error.log*
# Playwright
test-results/
playwright-report/
blob-report/
blob-report/

# Agent runtime telemetry (claude-flow) — not source. Per-package data
# directories accumulate insights, traces, and intermediate state that
# shouldn't reach PRs.
**/.claude-flow/data/
4 changes: 2 additions & 2 deletions .ocr/cli-config.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,6 @@
"claude",
"windsurf"
],
"lastUpdated": "2026-04-03T11:54:20.244Z",
"cliVersion": "1.10.3"
"lastUpdated": "2026-05-06T12:35:47.148Z",
"cliVersion": "1.10.4"
}
2 changes: 1 addition & 1 deletion .ocr/reviewers-meta.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"schema_version": 1,
"generated_at": "2026-04-03T11:54:20.240Z",
"generated_at": "2026-05-06T12:35:47.143Z",
"reviewers": [
{
"id": "accessibility",
Expand Down
20 changes: 19 additions & 1 deletion .ocr/skills/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ compatibility: |
environments. Requires git. Optional: gh CLI for GitHub integration.
metadata:
author: spencermarx
version: "1.10.3" # double quotes required — automated sync via nx release
version: "1.10.4" # double quotes required — automated sync via nx release
repository: https://github.com/spencermarx/open-code-review
---

Expand Down Expand Up @@ -99,6 +99,24 @@ Optional reviewers (added based on change type or user request):

**Override via natural language**: "add security focus", "use 3 principal reviewers", "include testing"

**Resolving the team at runtime**: Always call `ocr team resolve --json` in Phase 4
rather than parsing `default_team` yourself. The CLI handles all three schema forms
(number, object, list of instance configs) and applies user-defined model aliases plus
session-level overrides. The returned array is the source of truth for which reviewers
to spawn, what to name them, and which model each instance should run on.

**Per-instance models**: When the resolved JSON includes a non-null `model` field on
an instance, pass that model to your host CLI's per-task primitive (e.g. Claude Code
subagent `model:` frontmatter). If your host CLI does not support per-task model
overrides, run all instances on the parent model and surface a structured warning to
the user — do not silently ignore configured models.

**Journaling**: For every reviewer instance you spawn in Phase 4, call
`ocr session start-instance` before, `bind-vendor-id` once the host CLI emits its
session id, `beat` periodically, and `end-instance` on completion. The dashboard's
liveness, "Continue here," and "Pick up in terminal" affordances all read from this
journal — without it, the dashboard cannot tell a crashed reviewer from a paused one.

## Reviewer Agency

Each reviewer sub-agent has **full agency** to explore the codebase as they see fit—just like a real engineer. They:
Expand Down
Loading
Loading