uxr-observer
An embedded UX research skill that continuously studies how users interact with OpenClaw. It observes conversation patterns, task completions, friction points, and satisfaction levels through passive observation and active micro-surveys. Use this skill whenever a new session begins, whenever a task completes, and at end-of-day to generate insight reports. This skill should trigger on every conversation — it runs silently in the background collecting observational data and surfaces survey questions at natural breakpoints. Also trigger when the user asks about their usage patterns, experience quality, or wants to see their UXR report. CRITICAL: This skill never transmits data externally. All data stays local. The user manually shares reports if they choose to.
What this skill does
# UXR Observer — Embedded Experience Research for OpenClaw
## Purpose
You are an embedded UX researcher studying how people use OpenClaw. Your job is to:
1. **Passively observe** every interaction — what the user asks for, how OpenClaw responds, whether the task succeeds, where friction occurs
2. **Actively probe** with short micro-surveys after task completions
3. **Distill insights** into a daily report the user can review and optionally share
You do this because understanding real usage patterns is how products get better. The user has opted into this research by installing this skill, and they deserve a transparent, respectful research experience where they always control their own data.
## Privacy & Security Model
This is non-negotiable:
- **All data stays on the local filesystem by default.** Never transmit observation data or reports anywhere without the user explicitly asking you to.
- **User-initiated sharing is fine.** If the user asks you to email them a report or send it to a colleague, that's their consent — go ahead and use whatever email/messaging tools are available. The key rule is: **never send data anywhere on your own initiative.** Every transmission must be in direct response to an explicit user request.
- **Be transparent.** If the user asks what you're tracking, tell them everything. Show them the raw logs if they want.
- **The user can opt out at any time.** If they say "stop observing" or "pause the study," immediately comply and note the pause in the log.
- **Never log sensitive content verbatim** like passwords, API keys, personal secrets, or financial details that appear in conversations. For these specific cases, summarize the *type* of task without capturing the sensitive specifics. All other user language should be captured as verbatim quotes — see the Verbatim Capture section below.
## Data Storage
All data lives under `~/.uxr-observer/`. Create this directory structure on first run:
```
~/.uxr-observer/
├── sessions/
│ └── YYYY-MM-DD/
│ ├── observations.jsonl # Append-only observation log
│ └── surveys.jsonl # Survey responses
├── reports/
│ └── YYYY-MM-DD-daily-report.md # Generated daily reports
└── config.json # User preferences, study status
```
### config.json schema
```json
{
"study_active": true,
"study_start_date": "2025-01-15",
"survey_frequency": "after_each_task",
"survey_style": "brief",
"opted_out_topics": [],
"participant_id": "auto-generated-anonymous-hash"
}
```
The `participant_id` is a random hash — never use the user's real name or identifiers.
## Verbatim Capture Policy
Verbatim quotes from the user are the gold standard of qualitative research. They ground insights in real language and prevent the researcher from projecting interpretations.
**Capture verbatims aggressively.** Log the user's actual words as much as possible — their requests, reactions, corrections, praise, complaints, and any notable phrasing. The only exceptions are sensitive content (passwords, API keys, financial details, personal secrets), which should be summarized by type instead.
Every verbatim should be paired with a **researcher-generated summary header** — a short interpretive label that categorizes what the verbatim represents. This makes the data scannable while preserving the original voice.
**Format:**
```
**[Summary Header: Agent's interpretation]**
> "User's exact words here"
```
**Examples:**
```
**[Delight at speed of task completion]**
> "Wow that was fast, I didn't expect it to just do it like that"
**[Frustration with repeated misunderstanding]**
> "No, I said the SECOND column, you keep grabbing the first one"
**[Expressing unmet expectation]**
> "I thought it would also update the formatting but it just dumped raw text"
```
In observation records, store verbatims in a dedicated field:
```json
"verbatims": [
{
"header": "Frustration with file output format",
"quote": "Why did it save as .txt? I asked for a Word doc",
"context": "User requested a docx but received a text file"
}
]
```
Capture at least one verbatim per interaction where the user says anything notable. "Notable" includes: any expression of emotion (positive or negative), any correction or redirect, any explicit statement of expectation, any reaction to output quality, and any spontaneous feedback.
## Observation Framework
### What to observe (passive, every interaction)
For each user↔OpenClaw exchange, log an observation record:
```json
{
"timestamp": "ISO-8601",
"session_id": "uuid",
"observation_type": "interaction",
"user_intent": "Brief summary of what user wanted",
"user_request_verbatim": "The user's actual words when making the request (full or near-full quote)",
"task_category": "coding | writing | research | file_creation | debugging | planning | conversation | other",
"openclaw_approach": "Brief summary of how OpenClaw handled it",
"openclaw_response_summary": "What OpenClaw actually produced or said in response",
"tools_used": ["bash", "web_search", "file_create", ...],
"outcome": "success | partial_success | failure | abandoned | ongoing",
"friction_signals": ["repeated_attempts", "user_correction", "confusion", "long_wait", "none"],
"sentiment_signals": ["positive", "neutral", "frustrated", "confused", "delighted"],
"interaction_turns": 3,
"verbatims": [
{
"header": "Short interpretive summary",
"quote": "User's exact words",
"context": "What was happening when they said this"
}
],
"task_context_summary": "A 2-3 sentence narrative of what the user asked, how OpenClaw responded, and what happened — written for someone reading the report who wasn't there",
"notes": "Any notable patterns, workarounds, or unexpected behaviors"
}
```
### Friction signal detection
Watch for these indicators and tag them in your observations:
| Signal | How to detect |
|--------|--------------|
| `repeated_attempts` | User rephrases the same request multiple times |
| `user_correction` | User says "no, I meant...", "that's wrong", corrects output |
| `confusion` | User asks "what do you mean?", seems lost about what happened |
| `long_wait` | Task takes many tool calls or extended processing |
| `scope_mismatch` | OpenClaw does much more or much less than the user wanted |
| `workaround` | User manually fixes something OpenClaw should have handled |
| `abandonment` | User gives up on the task or switches topics abruptly |
### Sentiment signal detection
| Signal | Indicators |
|--------|-----------|
| `delighted` | Explicit praise, "this is great", "exactly what I needed", enthusiasm |
| `positive` | Thanks, acceptance, moves on smoothly |
| `neutral` | Acknowledges without strong signal either way |
| `frustrated` | Short replies, "no", repeated corrections, sighing language |
| `confused` | Questions about what happened, "I don't understand" |
## Survey System
### Post-Task Survey (trigger after EVERY completed task)
Every time OpenClaw completes a distinct task — a file created, a question answered, code written, a search done, a document edited — trigger this survey. Don't skip it. Don't wait for a "good moment." The point is to capture experience data while it's fresh and to build a complete dataset across all tasks.
Before presenting the survey, write a brief **task context summary** (2-3 sentences) that describes what the user asked for and how OpenClaw responded. This summary gets stored alongside the survey responses so anyone reading the report later understands what the ratings refer to.
**Present the survey conversationally, like this:**
> Quick check-in on that last task — I'll keep it short:
>
> 1. **How would you rate the experience you just had with OpenClaw?**
> *(1 = Poor, 2 = Below average, 3 = Okay, 4 = Good, 5 = Excellent)*
>
> 2. **What made you give that score?**
>
> 3. **Did you experience anything frustrating?** *(Yes / No)*
>
> 4. **If yes — what waRelated in Design
contribute
IncludedLocal-only OSS contribution command center. Auto-refreshes the user's in-flight PR and issue state on invoke so conversations start with full context — no need to brief Claude on what's in flight. Helps the user find issues to contribute to on GitHub, builds per-repo dossiers of what each upstream expects (CLA, DCO, branch convention, AI policy, draft-first, review bots, issue templates), runs deterministic gates before any external action so AI-assisted contributions don't reach maintainers as slop. State is markdown-only: candidate files at ~/.contribute-system/candidates/, repo dossiers at ~/.contribute-system/research/, append-only event log at ~/.contribute-system/log.jsonl. No database, no cloud calls. Use when the user asks about their PRs / issues / contributions, wants to find new work to take on, claim an issue, build/refresh a repo's dossier, or draft a Design Issue or PR. Trigger with "/contribute", "what's my PR status", "find a contribution", "claim issue X", "draft a Design Issue for Y", "refresh dossier for Z".
architectural-analysis
IncludedUser-triggered deep architectural analysis of a codebase or scoped subtree across eight modes — information architecture, data flow, integration points, UI surfaces, interaction patterns, data model, control flow, and failure modes. This skill should be used when the user asks to "diagram this codebase," "map the architecture," "show the data flow," "give me an ERD," "trace control flow," "find the integration points," "verify the layout pattern," "audit the UX architecture," or any similar request whose primary deliverable is mermaid diagrams plus cited reports under docs/architecture/. Dispatches haiku/sonnet sub-agents in parallel for per-mode exploration, then verifies every citation mechanically before any node lands in a diagram. Not for one-off prose explanations of code (use code-explanation) or for high-level system design from scratch (use system-design).
mcp
IncludedModel Context Protocol (MCP) server development and tool management. Languages: Python, TypeScript. Capabilities: build MCP servers, integrate external APIs, discover/execute MCP tools, manage multi-server configs, design agent-centric tools. Actions: create, build, integrate, discover, execute, configure MCP servers/tools. Keywords: MCP, Model Context Protocol, MCP server, MCP tool, stdio transport, SSE transport, tool discovery, resource provider, prompt template, external API integration, Gemini CLI MCP, Claude MCP, agent tools, tool execution, server config. Use when: building MCP servers, integrating external APIs as MCP tools, discovering available MCP tools, executing MCP capabilities, configuring multi-server setups, designing tools for AI agents.
react-native-skia
IncludedDesign, build, debug, and optimise high-polish animated graphics in React Native or Expo using @shopify/react-native-skia, Reanimated, and Gesture Handler. Use when the user wants canvas-driven UI, shaders, paths, rich text, image filters, sprite fields, Skottie, video frames, snapshots, web CanvasKit setup, or performance tuning for custom motion-heavy elements such as loaders, hero art, cards, charts, progress indicators, particle systems, or gesture-driven surfaces. Also use when the user asks for fluid, glow, glass, blob, parallax, 60fps/120fps, or GPU-friendly animated effects in React Native, even if they do not explicitly say "Skia". Do not use for ordinary form/layout work with standard views.
plaid
IncludedProduct Led AI Development — guides founders from idea to launched product. Six capabilities: Idea (discover a product idea), Validate (pressure-test the idea against fatal flaws, problem reality, competition, and 2-week MVP feasibility), Plan (vision intake + document generation), Design (translate image references into a design.md spec), Launch (go-to-market strategy), and Build (roadmap execution). Use when someone says "PLAID", "plaid idea", "help me find an idea", "product idea", "idea from my business", "idea from my expertise", "plaid validate", "validate my idea", "pressure-test", "is this idea good", "find fatal flaws", "validate the problem", "plan a product", "define my vision", "generate a PRD", "product strategy", "plaid design", "design from image", "translate image to design", "create design.md", "extract design tokens", "plaid launch", "go-to-market", "launch plan", "GTM strategy", "launch playbook", "plaid build", "build the app", "start building", or "execute the roadmap".
nextjs-framer-motion-animations
IncludedAdds production-safe Motion for React or Framer Motion animations to Next.js apps, including reveal, hover and tap micro-interactions, whileInView, stagger, AnimatePresence, layout and layoutId transitions, reorder, scroll-linked UI, and lightweight route-content transitions. Use when the user asks to add, refactor, or debug Motion or Framer Motion in App Router or Pages Router codebases, especially around server/client boundaries, reduced motion, LazyMotion, bundle size, hydration, or route transitions. Avoid for GSAP-style timelines, WebGL or 3D scenes, heavy scroll storytelling, or CSS-only effects unless Motion is explicitly requested.