@ericrisco/rsc 3.3.1 → 3.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/manifest.json +43 -22
- package/package.json +1 -1
- package/scripts/lib/default-skill-floor.js +5 -1
- package/scripts/lib/domains.js +2 -2
- package/scripts/lib/retired-skills.js +4 -0
- package/skills/design/SKILL.md +4 -3
- package/skills/design/evals/cases.yaml +2 -2
- package/skills/react/SKILL.md +2 -1
- package/skills/ux/SKILL.md +149 -0
- package/skills/ux/THIRD_PARTY.md +32 -0
- package/skills/ux/evals/cases.yaml +40 -0
- package/skills/ux/references/flows.md +124 -0
- package/skills/ux/upstream/UPSTREAM.json +59 -0
- package/skills/ux/upstream/ux-designer/GUIDE.md +180 -0
- package/skills/ux/upstream/ux-designer/LICENSE +21 -0
- package/skills/ux/upstream/ux-designer/references/01-core-principles.md +251 -0
- package/skills/ux/upstream/ux-designer/references/02-laws-of-ux.md +330 -0
- package/skills/ux/upstream/ux-designer/references/03-accessibility.md +411 -0
- package/skills/ux/upstream/ux-designer/references/04-visual-design.md +433 -0
- package/skills/ux/upstream/ux-designer/references/05-information-architecture.md +432 -0
- package/skills/ux/upstream/ux-designer/references/06-interaction-design.md +495 -0
- package/skills/ux/upstream/ux-designer/references/07-forms-and-inputs.md +491 -0
- package/skills/ux/upstream/ux-designer/references/08-mobile-ux.md +539 -0
- package/skills/ux/upstream/ux-designer/references/09-ux-writing.md +493 -0
- package/skills/ux/upstream/ux-designer/references/10-user-research.md +533 -0
- package/skills/ux/upstream/ux-designer/references/11-design-systems.md +618 -0
- package/skills/ux/upstream/ux-designer/references/12a-presence-awareness.md +395 -0
- package/skills/ux/upstream/ux-designer/references/12b-conflict-resolution-sync.md +420 -0
- package/skills/ux/upstream/ux-designer/references/13a-canvas-navigation.md +388 -0
- package/skills/ux/upstream/ux-designer/references/13b-canvas-objects-performance.md +559 -0
- package/skills/ux/upstream/ux-designer/references/14-ai-ux-patterns.md +511 -0
- package/skills/ux/upstream/ux-designer/references/15-ethical-design.md +419 -0
- package/skills/ux/upstream/ux-designer/references/16-onboarding.md +430 -0
- package/skills/ux/upstream/ux-designer/references/17-notifications.md +461 -0
- package/skills/ux/upstream/ux-designer/references/18-data-visualization.md +453 -0
- package/skills/ux/upstream/ux-designer/references/19-search-ux.md +479 -0
- package/skills/ux/upstream/ux-designer/references/20-emotional-design.md +382 -0
- package/skills/ux/upstream/ux-designer/references/21-data-tables.md +629 -0
- package/skills/ux/upstream/ux-designer/references/22-performance-ux.md +626 -0
- package/skills/ux/upstream/ux-designer/references/23-internationalization.md +347 -0
- package/skills/ux/upstream/ux-designer/references/24-voice-and-multimodal.md +308 -0
- package/skills/ux/upstream/ux-designer/references/25a-barcode-camera-scanning.md +342 -0
- package/skills/ux/upstream/ux-designer/references/25b-barcode-scanner-workflows.md +412 -0
- package/skills/ux/upstream/ux-designer/references/25c-barcode-display.md +277 -0
- package/skills/ux/upstream/ux-usability-foundations/GUIDE.md +285 -0
- package/skills/ux/upstream/ux-usability-foundations/LICENSE +21 -0
- package/skills/ux/upstream/ux-usability-foundations/references/anti-patterns.md +267 -0
- package/skills/ux/upstream/ux-usability-foundations/references/checklists.md +130 -0
- package/skills/ux/upstream/ux-usability-foundations/references/decision-prompts.md +340 -0
- package/skills/ux/upstream/ux-usability-foundations/references/principle-cards.md +449 -0
- package/targets/clone-bootstrap.mjs +1 -1
- package/skills/ui-engineering/SKILL.md +0 -113
- package/skills/ui-engineering/evals/cases.yaml +0 -38
|
@@ -0,0 +1,511 @@
|
|
|
1
|
+
# AI & LLM UX Patterns
|
|
2
|
+
|
|
3
|
+
AI-powered interfaces are now mainstream but have unique UX challenges. This reference covers design patterns for conversational AI, copilots, agents, and generative interfaces.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Contents
|
|
8
|
+
|
|
9
|
+
- AI as a Respectful Copilot, Not an Autopilot
|
|
10
|
+
- Conversational / Chat UI
|
|
11
|
+
- Prompt UX
|
|
12
|
+
- AI Transparency & Trust
|
|
13
|
+
- Hallucination Handling
|
|
14
|
+
- Human-in-the-Loop
|
|
15
|
+
- Generative UI
|
|
16
|
+
- AI Copilot Patterns
|
|
17
|
+
- Agent UX
|
|
18
|
+
- Ethical AI UX
|
|
19
|
+
- Key Metrics
|
|
20
|
+
- Anti-Patterns
|
|
21
|
+
- Sources
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## AI as a Respectful Copilot, Not an Autopilot
|
|
26
|
+
|
|
27
|
+
The defining 2026 framing (NN/g *State of UX 2026* and broad trend consensus): the
|
|
28
|
+
best AI features are a **respectful copilot**—present and helpful, but optional and
|
|
29
|
+
under user control—rather than an **autopilot** that hijacks the flow. As raw UI
|
|
30
|
+
becomes a commodity, the differentiator is judgment about *when not to act*.
|
|
31
|
+
|
|
32
|
+
**What "respectful copilot" looks like:**
|
|
33
|
+
- **Optional, not forced** — AI is offered (a sidebar, overlay, collapsible panel,
|
|
34
|
+
inline suggestion), never shoved into the critical path. The user can ignore it
|
|
35
|
+
and still complete the task the normal way.
|
|
36
|
+
- **Calm and peripheral** — it augments the current context instead of taking over
|
|
37
|
+
the screen; suggestions sit beside the work, not on top of it.
|
|
38
|
+
- **User stays in control** — the human initiates or explicitly accepts; AI
|
|
39
|
+
proposes, the user disposes. Every AI action is previewable, reversible, and
|
|
40
|
+
attributable (see "Hidden AI", "Over-automation", "No AI undo" anti-patterns).
|
|
41
|
+
- **Transparent** — clearly labeled as AI, honest about confidence and limits,
|
|
42
|
+
shows its sources/reasoning when it matters.
|
|
43
|
+
|
|
44
|
+
```
|
|
45
|
+
Autopilot (avoid) Respectful copilot (prefer)
|
|
46
|
+
───────────────── ──────────────────────────
|
|
47
|
+
Auto-rewrites your text Suggests an edit you can accept/dismiss
|
|
48
|
+
Modal hijacks the screen Quiet panel beside your work
|
|
49
|
+
Acts, then maybe tells you Proposes, you confirm, then it acts
|
|
50
|
+
"AI is doing X…" (opaque) Shows what, why, and an undo
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Apply this lens to every pattern below: chat, copilots, and agents should all
|
|
54
|
+
default to *offered and reversible*, never *imposed and silent*.
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Conversational / Chat UI
|
|
59
|
+
|
|
60
|
+
### Message Layout
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
┌─────────────────────────────────────────┐
|
|
64
|
+
│ User message [14:02] │
|
|
65
|
+
│ Right-aligned, accent background │
|
|
66
|
+
├─────────────────────────────────────────┤
|
|
67
|
+
│ [AI avatar] │
|
|
68
|
+
│ AI response [14:02] │
|
|
69
|
+
│ Left-aligned, neutral background │
|
|
70
|
+
│ ┌─────────────────────────────┐ │
|
|
71
|
+
│ │ Source: document.pdf, p.12 │ │
|
|
72
|
+
│ └─────────────────────────────┘ │
|
|
73
|
+
│ [👍] [👎] [Copy] [Regenerate] │
|
|
74
|
+
├─────────────────────────────────────────┤
|
|
75
|
+
│ ┌───────────────────────────────────┐ │
|
|
76
|
+
│ │ Type a message... [Send] │ │
|
|
77
|
+
│ │ [Attach] [Voice] │ │
|
|
78
|
+
│ └───────────────────────────────────┘ │
|
|
79
|
+
└─────────────────────────────────────────┘
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Message Bubbles
|
|
83
|
+
|
|
84
|
+
- **User messages**: Right-aligned, accent color background, rounded corners
|
|
85
|
+
- **AI messages**: Left-aligned, neutral/light background, distinct from user
|
|
86
|
+
- **System messages**: Centered, muted, no bubble (e.g., "Conversation started")
|
|
87
|
+
- **Max width**: 70-80% of container to maintain readability
|
|
88
|
+
- **Timestamps**: Show on hover or at natural breaks, not every message
|
|
89
|
+
|
|
90
|
+
### Streaming Responses
|
|
91
|
+
|
|
92
|
+
```
|
|
93
|
+
AI is typing...
|
|
94
|
+
├── Show cursor/blinking indicator at end of text
|
|
95
|
+
├── Render markdown incrementally (not raw then formatted)
|
|
96
|
+
├── Allow user to stop generation mid-stream [Stop] button
|
|
97
|
+
├── Smooth text appearance (word-by-word or chunk-by-chunk)
|
|
98
|
+
└── Don't auto-scroll if user has scrolled up to read history
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
**Key timings:**
|
|
102
|
+
- First token should appear within 500ms-1s (perceived responsiveness)
|
|
103
|
+
- Show typing indicator immediately on send
|
|
104
|
+
- Skeleton/placeholder for structured outputs (tables, code blocks)
|
|
105
|
+
|
|
106
|
+
### Turn-Taking
|
|
107
|
+
|
|
108
|
+
- Disable send button while AI is responding (or allow interrupt)
|
|
109
|
+
- Clear visual separation between turns
|
|
110
|
+
- Support editing previous user messages and re-generating from that point
|
|
111
|
+
- Show "AI is thinking..." for multi-step reasoning delays
|
|
112
|
+
- Multi-turn context: show thread/conversation history clearly
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## Prompt UX
|
|
117
|
+
|
|
118
|
+
### Input Design
|
|
119
|
+
|
|
120
|
+
```html
|
|
121
|
+
<!-- Expandable textarea that grows with content -->
|
|
122
|
+
<div class="prompt-input">
|
|
123
|
+
<textarea
|
|
124
|
+
placeholder="Ask anything..."
|
|
125
|
+
rows="1"
|
|
126
|
+
aria-label="Message input"
|
|
127
|
+
></textarea>
|
|
128
|
+
<div class="input-actions">
|
|
129
|
+
<button aria-label="Attach file">📎</button>
|
|
130
|
+
<button aria-label="Send message" disabled>→</button>
|
|
131
|
+
</div>
|
|
132
|
+
</div>
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
**Best practices:**
|
|
136
|
+
- Auto-expanding textarea (start 1 row, grow to ~6, then scroll)
|
|
137
|
+
- Send on Enter, Shift+Enter for newline (document this with a tooltip)
|
|
138
|
+
- Enable send button only when input is non-empty
|
|
139
|
+
- Character/token count for limited contexts
|
|
140
|
+
- Support paste of images, files, and rich text
|
|
141
|
+
|
|
142
|
+
### Suggested Prompts
|
|
143
|
+
|
|
144
|
+
```
|
|
145
|
+
┌─────────────────────────────────────────┐
|
|
146
|
+
│ What can I help you with? │
|
|
147
|
+
│ │
|
|
148
|
+
│ ┌──────────┐ ┌──────────────────┐ │
|
|
149
|
+
│ │ Summarize │ │ Compare options │ │
|
|
150
|
+
│ │ this doc │ │ for deployment │ │
|
|
151
|
+
│ └──────────┘ └──────────────────┘ │
|
|
152
|
+
│ ┌──────────────┐ ┌──────────────┐ │
|
|
153
|
+
│ │ Write a test │ │ Explain this │ │
|
|
154
|
+
│ │ for this fn │ │ error │ │
|
|
155
|
+
│ └──────────────┘ └──────────────┘ │
|
|
156
|
+
└─────────────────────────────────────────┘
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
- Show 3-6 contextual suggestions on empty state
|
|
160
|
+
- Update suggestions based on current context (file open, selection, etc.)
|
|
161
|
+
- Use prompt templates for complex tasks with fill-in-the-blank slots
|
|
162
|
+
- Allow users to save and reuse their own prompt templates
|
|
163
|
+
- Provide category-based prompt libraries for discoverability
|
|
164
|
+
|
|
165
|
+
### Multimodal Inputs
|
|
166
|
+
|
|
167
|
+
- Image upload with preview and crop/annotate before sending
|
|
168
|
+
- File attachment with type indicators and size display
|
|
169
|
+
- Voice input with waveform visualization and transcription preview
|
|
170
|
+
- Screen/selection capture with annotation tools
|
|
171
|
+
- Drag-and-drop support with clear drop zone indicators
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
## AI Transparency & Trust
|
|
176
|
+
|
|
177
|
+
### Confidence Indicators
|
|
178
|
+
|
|
179
|
+
```
|
|
180
|
+
High confidence:
|
|
181
|
+
"The capital of France is Paris."
|
|
182
|
+
|
|
183
|
+
Medium confidence:
|
|
184
|
+
"Based on available data, revenue likely increased ~15%."
|
|
185
|
+
⚠️ This estimate is based on partial data
|
|
186
|
+
|
|
187
|
+
Low confidence:
|
|
188
|
+
"I'm not certain, but this might be related to..."
|
|
189
|
+
⚠️ Low confidence — verify independently
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
**Pattern options:**
|
|
193
|
+
- Textual hedging ("I believe", "Based on...", "I'm not sure")
|
|
194
|
+
- Visual indicators (confidence bars, color-coded borders)
|
|
195
|
+
- Explicit disclaimers for uncertain outputs
|
|
196
|
+
- "Verified" badges for factual claims with sources
|
|
197
|
+
|
|
198
|
+
### Source Attribution
|
|
199
|
+
|
|
200
|
+
```
|
|
201
|
+
┌─────────────────────────────────────────┐
|
|
202
|
+
│ AI Response text here with inline │
|
|
203
|
+
│ citations [1] and references [2]. │
|
|
204
|
+
│ │
|
|
205
|
+
│ ┌─ Sources ─────────────────────────┐ │
|
|
206
|
+
│ │ [1] design-system.md, line 42 │ │
|
|
207
|
+
│ │ [2] api-docs.md, §Authentication │ │
|
|
208
|
+
│ └───────────────────────────────────┘ │
|
|
209
|
+
└─────────────────────────────────────────┘
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
- Inline citations linked to expandable source cards
|
|
213
|
+
- Distinguish between direct quotes and paraphrasing
|
|
214
|
+
- Show source reliability/recency metadata
|
|
215
|
+
- Allow click-through to original source
|
|
216
|
+
- Group sources by type (documents, web, code)
|
|
217
|
+
|
|
218
|
+
### "AI-Generated" Labels
|
|
219
|
+
|
|
220
|
+
- Mark AI-generated content clearly: "Generated by AI" or sparkle icon (✨)
|
|
221
|
+
- Distinguish AI suggestions from confirmed/human-edited content
|
|
222
|
+
- Persist labels through copy/paste and export
|
|
223
|
+
- Follow platform regulations (EU AI Act requires labeling)
|
|
224
|
+
|
|
225
|
+
---
|
|
226
|
+
|
|
227
|
+
## Hallucination Handling
|
|
228
|
+
|
|
229
|
+
### Prevention UX
|
|
230
|
+
|
|
231
|
+
- Ground responses in user-provided context (RAG patterns)
|
|
232
|
+
- Show "based on" indicators linking to source material
|
|
233
|
+
- Limit AI to domains where it has verified information
|
|
234
|
+
- Offer "search the web" as explicit fallback for unknown topics
|
|
235
|
+
|
|
236
|
+
### Detection & Recovery
|
|
237
|
+
|
|
238
|
+
```
|
|
239
|
+
┌─────────────────────────────────────────┐
|
|
240
|
+
│ AI: "The function `getData()` returns │
|
|
241
|
+
│ a Promise<User[]>." │
|
|
242
|
+
│ │
|
|
243
|
+
│ ⚠️ Could not verify this in your │
|
|
244
|
+
│ codebase. [Check source] [Report] │
|
|
245
|
+
│ │
|
|
246
|
+
│ Was this response helpful? │
|
|
247
|
+
│ [👍 Yes] [👎 No — incorrect] │
|
|
248
|
+
└─────────────────────────────────────────┘
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
- Provide feedback mechanisms (thumbs up/down, flag as incorrect)
|
|
252
|
+
- "Regenerate" button to get a fresh response
|
|
253
|
+
- User correction flow: allow editing AI output directly
|
|
254
|
+
- Track and surface known inaccuracies for similar future queries
|
|
255
|
+
- Show verification status for factual claims when possible
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
## Human-in-the-Loop
|
|
260
|
+
|
|
261
|
+
### Approval Workflows
|
|
262
|
+
|
|
263
|
+
```
|
|
264
|
+
┌─────────────────────────────────────────┐
|
|
265
|
+
│ AI Suggestion │
|
|
266
|
+
│ ┌───────────────────────────────────┐ │
|
|
267
|
+
│ │ Proposed changes: │ │
|
|
268
|
+
│ │ - Update user.email to new value │ │
|
|
269
|
+
│ │ - Send confirmation email │ │
|
|
270
|
+
│ │ - Log change in audit trail │ │
|
|
271
|
+
│ └───────────────────────────────────┘ │
|
|
272
|
+
│ │
|
|
273
|
+
│ [✓ Apply All] [Review Each] [✗ Cancel] │
|
|
274
|
+
└─────────────────────────────────────────┘
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
### Suggestion vs. Auto-Action Spectrum
|
|
278
|
+
|
|
279
|
+
```
|
|
280
|
+
Full manual ←────────────────────→ Full auto
|
|
281
|
+
|
|
282
|
+
Suggest → Suggest+ → Auto+ → Auto
|
|
283
|
+
only default apply notify silent
|
|
284
|
+
|
|
285
|
+
User User can User can No user
|
|
286
|
+
initiates reject review action
|
|
287
|
+
action suggestion after needed
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
**Best practices:**
|
|
291
|
+
- Default to "suggest" mode for destructive or irreversible actions
|
|
292
|
+
- Allow users to configure automation level per action type
|
|
293
|
+
- Show clear diff/preview before applying changes
|
|
294
|
+
- Provide undo for auto-applied actions (minimum 10 seconds)
|
|
295
|
+
- Log all AI-initiated actions for auditability
|
|
296
|
+
|
|
297
|
+
### Override Patterns
|
|
298
|
+
|
|
299
|
+
- Always provide manual override for AI decisions
|
|
300
|
+
- Make overrides discoverable (not hidden in settings)
|
|
301
|
+
- Don't penalize users for overriding (no "Are you sure?" friction)
|
|
302
|
+
- Learn from overrides to improve future suggestions
|
|
303
|
+
- Show "AI suggested X, you chose Y" in history for context
|
|
304
|
+
|
|
305
|
+
---
|
|
306
|
+
|
|
307
|
+
## Generative UI
|
|
308
|
+
|
|
309
|
+
### AI-Generated Interface Elements
|
|
310
|
+
|
|
311
|
+
- Render structured AI outputs as rich components (tables, charts, forms)
|
|
312
|
+
- Provide fallback to plain text if rendering fails
|
|
313
|
+
- Allow user to toggle between rendered and raw views
|
|
314
|
+
- Maintain accessibility in generated components
|
|
315
|
+
|
|
316
|
+
### Adaptive Layouts
|
|
317
|
+
|
|
318
|
+
```
|
|
319
|
+
Simple query → Single text response
|
|
320
|
+
Data query → Table or chart + summary
|
|
321
|
+
Comparison → Side-by-side cards
|
|
322
|
+
Multi-step → Numbered steps with progress
|
|
323
|
+
Code query → Syntax-highlighted block with copy button
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
- Match output format to query intent
|
|
327
|
+
- Let users request different output formats ("show as table")
|
|
328
|
+
- Remember format preferences per query type
|
|
329
|
+
|
|
330
|
+
---
|
|
331
|
+
|
|
332
|
+
## AI Copilot Patterns
|
|
333
|
+
|
|
334
|
+
### Inline Suggestions
|
|
335
|
+
|
|
336
|
+
```
|
|
337
|
+
┌──────────────────────────────────────────┐
|
|
338
|
+
│ function calculateTotal(items) { │
|
|
339
|
+
│ return items.reduce((sum, item) => │
|
|
340
|
+
│ ░░sum + item.price * item.qty, 0);░░ │ ← ghost text
|
|
341
|
+
│ } │
|
|
342
|
+
│ │
|
|
343
|
+
│ [Tab] to accept [Esc] to dismiss │
|
|
344
|
+
└──────────────────────────────────────────┘
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
**Ghost text / inline completion:**
|
|
348
|
+
- Show suggestion as dimmed/ghost text at cursor position
|
|
349
|
+
- Tab to accept, Esc to dismiss, keep typing to refine
|
|
350
|
+
- Accept word-by-word with Ctrl+Right (partial accept)
|
|
351
|
+
- Show suggestion after 300-750ms pause in typing (debounce)
|
|
352
|
+
- Never show during active, rapid typing
|
|
353
|
+
|
|
354
|
+
### Accept / Reject / Modify
|
|
355
|
+
|
|
356
|
+
- **Accept**: Tab or click — apply suggestion immediately
|
|
357
|
+
- **Reject**: Esc or keep typing — dismiss silently
|
|
358
|
+
- **Modify**: Accept then edit — encourage iteration
|
|
359
|
+
- **Partial accept**: Accept first N words/lines
|
|
360
|
+
- Show acceptance rate metrics to tune suggestion quality
|
|
361
|
+
|
|
362
|
+
### Suggestion Panel (Multi-Option)
|
|
363
|
+
|
|
364
|
+
```
|
|
365
|
+
┌─ AI Suggestions ────────────────────────┐
|
|
366
|
+
│ │
|
|
367
|
+
│ Option 1: Using array.filter() │
|
|
368
|
+
│ ┌────────────────────────────────────┐ │
|
|
369
|
+
│ │ const active = users.filter(u => │ │
|
|
370
|
+
│ │ u.status === 'active'); │ │
|
|
371
|
+
│ └────────────────────────────────────┘ │
|
|
372
|
+
│ │
|
|
373
|
+
│ Option 2: Using for...of loop │
|
|
374
|
+
│ ┌────────────────────────────────────┐ │
|
|
375
|
+
│ │ const active = []; │ │
|
|
376
|
+
│ │ for (const u of users) { ... │ │
|
|
377
|
+
│ └────────────────────────────────────┘ │
|
|
378
|
+
│ │
|
|
379
|
+
│ [Apply #1] [Apply #2] [Dismiss] │
|
|
380
|
+
└──────────────────────────────────────────┘
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
---
|
|
384
|
+
|
|
385
|
+
## Agent UX
|
|
386
|
+
|
|
387
|
+
### Multi-Step Task Visibility
|
|
388
|
+
|
|
389
|
+
```
|
|
390
|
+
┌─ Agent Task: "Deploy to staging" ───────┐
|
|
391
|
+
│ │
|
|
392
|
+
│ ✅ Step 1: Run tests (12s) │
|
|
393
|
+
│ ✅ Step 2: Build application (45s) │
|
|
394
|
+
│ 🔄 Step 3: Push to registry ... │
|
|
395
|
+
│ ⬚ Step 4: Update deployment │
|
|
396
|
+
│ ⬚ Step 5: Run health checks │
|
|
397
|
+
│ │
|
|
398
|
+
│ ├── Elapsed: 1m 23s │
|
|
399
|
+
│ └── [View Logs] [Pause] [Cancel] │
|
|
400
|
+
└──────────────────────────────────────────┘
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
### Progress & Autonomy Controls
|
|
404
|
+
|
|
405
|
+
- Show current step, total steps, and elapsed time
|
|
406
|
+
- Expandable logs/details for each step
|
|
407
|
+
- Pause/Resume to give users control over long-running tasks
|
|
408
|
+
- Cancel with confirmation for destructive operations
|
|
409
|
+
- Estimated remaining time when possible
|
|
410
|
+
|
|
411
|
+
### Tool-Use Transparency
|
|
412
|
+
|
|
413
|
+
```
|
|
414
|
+
┌─────────────────────────────────────────┐
|
|
415
|
+
│ 🔧 Agent used: file_search │
|
|
416
|
+
│ Searched 24 files matching "*.ts" │
|
|
417
|
+
│ Found 3 relevant results │
|
|
418
|
+
│ [Show details ▾] │
|
|
419
|
+
│ │
|
|
420
|
+
│ 🔧 Agent used: code_edit │
|
|
421
|
+
│ Modified: src/utils/auth.ts │
|
|
422
|
+
│ [View diff ▾] │
|
|
423
|
+
└─────────────────────────────────────────┘
|
|
424
|
+
```
|
|
425
|
+
|
|
426
|
+
- Show each tool invocation with name and brief description
|
|
427
|
+
- Collapsible detail view (inputs, outputs, duration)
|
|
428
|
+
- Highlight side effects (file writes, API calls, etc.)
|
|
429
|
+
- Permission prompts before sensitive tool use
|
|
430
|
+
- Full audit log accessible after task completion
|
|
431
|
+
|
|
432
|
+
---
|
|
433
|
+
|
|
434
|
+
## Ethical AI UX
|
|
435
|
+
|
|
436
|
+
### Bias Disclosure
|
|
437
|
+
|
|
438
|
+
- Acknowledge known limitations and biases upfront
|
|
439
|
+
- Provide model card information accessible from the UI
|
|
440
|
+
- Show training data recency ("Knowledge current through [date]")
|
|
441
|
+
- Flag outputs in sensitive domains (medical, legal, financial)
|
|
442
|
+
|
|
443
|
+
### User Control Over AI Behavior
|
|
444
|
+
|
|
445
|
+
```
|
|
446
|
+
┌─ AI Preferences ────────────────────────┐
|
|
447
|
+
│ │
|
|
448
|
+
│ Response style: [Concise ▾] │
|
|
449
|
+
│ Creativity: ████░░░░░ 40% │
|
|
450
|
+
│ Auto-suggest: [✓ Enabled] │
|
|
451
|
+
│ Data usage: [View policy] │
|
|
452
|
+
│ │
|
|
453
|
+
│ [Reset to defaults] │
|
|
454
|
+
└──────────────────────────────────────────┘
|
|
455
|
+
```
|
|
456
|
+
|
|
457
|
+
- Let users adjust tone, verbosity, creativity
|
|
458
|
+
- Opt-out of data collection for model training
|
|
459
|
+
- Clear "forget this conversation" action
|
|
460
|
+
- Per-conversation or global preference settings
|
|
461
|
+
- Transparent about what data is retained and for how long
|
|
462
|
+
|
|
463
|
+
### Opt-Out Mechanisms
|
|
464
|
+
|
|
465
|
+
- Easy toggle to disable AI features entirely
|
|
466
|
+
- Graceful degradation to manual workflows
|
|
467
|
+
- No penalty or reduced functionality for opting out
|
|
468
|
+
- Clear explanation of what changes when AI is disabled
|
|
469
|
+
- Respect opt-out across sessions and devices
|
|
470
|
+
|
|
471
|
+
---
|
|
472
|
+
|
|
473
|
+
## Key Metrics
|
|
474
|
+
|
|
475
|
+
| Metric | Target | Context |
|
|
476
|
+
|--------|--------|---------|
|
|
477
|
+
| Time to first token | < 1s | Perceived responsiveness |
|
|
478
|
+
| Streaming speed | 30-80 tokens/s | Natural reading pace |
|
|
479
|
+
| Suggestion acceptance rate | 25-35% | Copilot usefulness |
|
|
480
|
+
| Response rating (thumbs up) | > 80% | Quality benchmark |
|
|
481
|
+
| Regeneration rate | < 15% | First-response quality |
|
|
482
|
+
| Task completion (agents) | > 90% | Reliability |
|
|
483
|
+
| Hallucination rate | < 5% | Factual accuracy |
|
|
484
|
+
| Human override rate | Track trend | Automation calibration |
|
|
485
|
+
|
|
486
|
+
---
|
|
487
|
+
|
|
488
|
+
## Anti-Patterns
|
|
489
|
+
|
|
490
|
+
1. **Anthropomorphizing too much** — Avoid names, personalities, or claims of emotions that mislead users about AI capabilities
|
|
491
|
+
2. **No streaming** — Showing nothing then dumping a wall of text feels broken
|
|
492
|
+
3. **Hidden AI** — Users should always know when they're interacting with AI
|
|
493
|
+
4. **Ignoring errors** — Silently failing or making up answers instead of admitting uncertainty
|
|
494
|
+
5. **Over-automation** — Applying AI changes without user awareness or consent
|
|
495
|
+
6. **No undo for AI actions** — AI-applied changes must be reversible
|
|
496
|
+
7. **Prompt injection vulnerability** — Showing AI outputs that can execute code or alter UI
|
|
497
|
+
8. **Infinite context illusion** — Not communicating context window limits
|
|
498
|
+
9. **Blocking UI during generation** — Users should be able to navigate or cancel
|
|
499
|
+
10. **No feedback loop** — Not providing thumbs up/down or correction mechanisms
|
|
500
|
+
|
|
501
|
+
---
|
|
502
|
+
|
|
503
|
+
## Sources
|
|
504
|
+
|
|
505
|
+
- [Nielsen Norman Group: UX for AI](https://www.nngroup.com/articles/ai-ux/) — AI interaction research
|
|
506
|
+
- [Nielsen Norman Group: State of UX](https://www.nngroup.com/articles/) — annual UX trend analysis (respectful-copilot framing)
|
|
507
|
+
- [Google PAIR: People + AI Guidebook](https://pair.withgoogle.com/guidebook) — AI design patterns
|
|
508
|
+
- [Apple: Human Interface Guidelines for Machine Learning](https://developer.apple.com/design/human-interface-guidelines/machine-learning)
|
|
509
|
+
- [Microsoft: HAX Toolkit](https://www.microsoft.com/en-us/haxtoolkit/) — Human-AI interaction guidelines
|
|
510
|
+
- [Anthropic: Responsible AI Practices](https://www.anthropic.com/) — Safety and transparency
|
|
511
|
+
- [EU AI Act](https://artificialintelligenceact.eu/) — Regulatory requirements for AI interfaces
|