feat: add user research workflow with skills, command, and agent#194
feat: add user research workflow with skills, command, and agent#194mattthomps1 wants to merge 15 commits intoEveryInc:mainfrom
Conversation
8e33fce to
b76a28d
Compare
|
This is cool! LEt me try it out a bit! |
kieranklaassen
left a comment
There was a problem hiding this comment.
Code Review: PR #194 — feat: add user research workflow
Review by: 5 parallel agents (pattern-recognition, architecture, simplicity, agent-native, security) + manual analysis
Overall Assessment
This is a well-designed PR that adds a cohesive user research workflow (1 command, 3 skills, 1 agent) to the compound engineering loop. The "Do No Harm" integration pattern is elegant — the producer handles absence with a message while the consumer handles it with silence. The architecture follows established plugin conventions (naming, frontmatter, directory structure, progressive disclosure). Component counts are accurate across all files.
However, the branch is stale relative to main and will silently regress features from v2.35.1 and v2.35.2 when merged. This is the critical blocking issue.
🔴 P1 — Critical (BLOCKS MERGE)
1. Stale branch will regress v2.35.1 and v2.35.2 features from main
The PR branch was forked before several important changes landed on main. The plan.md diff shows removals of features that exist on main but were never added to this branch:
Features that would be reverted:
origin:frontmatter field in all 3 plan templates (v2.35.2)- Brainstorm cross-check in Section 6 (v2.35.2)
- "Sources" sections linking plans to brainstorms (v2.35.2)
- "System-Wide Impact" sections in MORE and A LOT templates (v2.35.1)
- "Write Plan File" mandatory step before interactive prompts (v2.35.0 fix)
- Pipeline mode note for LFG/SLFG invocation (v2.35.0 fix)
compound-engineering:workflow:spec-flow-analyzerqualified namespace (v2.35.0 fix — would revert to unqualifiedspec-flow-analyzer)
Version conflict: Main is at v2.35.2, this PR sets v2.35.0 — a downgrade.
Fix: Rebase on main, resolve conflicts in plan.md, and bump version to 2.36.0.
2. Incomplete .gitignore pattern — non-markdown transcripts not protected
docs/research/transcripts/*.md
This only ignores .md files. Transcripts saved as .txt, .docx, .json, or .csv (common for exports from Otter.ai, Rev, etc.) would be committed with full PII.
Fix: Change to:
docs/research/transcripts/*
!docs/research/transcripts/.gitkeep🟡 P2 — Important (Should Fix)
3. .claude/settings.json should not be committed
This personal dev config forces compound-engineering@every-marketplace enablement on all repo clones. Similar to committing .vscode/settings.json with personal preferences. Remove from PR and add to .gitignore.
4. Anonymization is advisory, not enforced — PII could leak into committed files
The transcript-insights skill has a "Privacy Note" section at the bottom, but there's no dedicated anonymization pass before quotes are extracted in Step 4c. The AI processes the transcript top-to-bottom and may extract quotes before encountering the privacy instructions.
Fix: Add a "Step 4.0: Anonymization Pass" before insight extraction, and add - [ ] No real names, email addresses, or company names in output to both the transcript-insights and persona-builder Human Review Checklists.
5. Stale privacy language in research-plan/SKILL.md
Consider adding `docs/research/transcripts/` to `.gitignore` if transcripts
contain personally identifiable information.The .gitignore entry already exists in this PR. "Consider adding" is stale and uses weak language. Update to: "Transcripts in docs/research/transcripts/ contain PII and MUST NOT be committed to version control."
6. No headless/batch mode for transcript processing (agent-native gap)
The write-side of this workflow requires 7+ AskUserQuestion calls per transcript (selection, plan linking, 5 metadata fields, handoff menu). When an orchestrating agent calls /workflows:research process, every decision point blocks on human input.
The read-side (user-research-analyst searching artifacts) is fully agent-native and well-designed. The inline transcript routing (Rule 1) is also a model of good agent-native design.
Recommendation for future: Add structured-input / headless paths so agents can pass metadata as arguments and skip interactive prompts. This is non-blocking for v1 since the primary use case is human-driven.
🔵 P3 — Nice to Have
7. Skills are large relative to the gold standard
| Skill | Words | Gold Standard (dhh-rails-style) |
|---|---|---|
research-plan |
~1,400 | ~846 |
transcript-insights |
~2,000 | ~846 |
persona-builder |
~1,600 | ~846 |
Output template sections are ~40-50% of each file. These could move to references/output-template.md files for better progressive disclosure.
8. Discovery playbook could be trimmed
414 lines, but ~264 lines are non-actionable educational content (team structure advice, tool lists, bibliography, motivational sections). The skills already embed the relevant methodology. Consider trimming to ~150 lines covering just interview structure, snapshot format, transcript analysis, and OST framing.
9. Persona merge spec is over-engineered for v1
The merge specification has percentage thresholds (40/60 split detection), detailed field-by-field update tables, and hypothesis status definitions for a feature that will typically operate on 1-4 interviews. Consider collapsing to concise prose rules.
10. Agent search strategy over-prescribed
8 steps / 77 lines for what amounts to "grep the research directory for relevant files and summarize." The scoring rubric and fallback layers add complexity for a directory that will typically contain 0-10 files.
11. Plan docs should have status: completed
The two plan files in docs/plans/ still have status: active but the feature is built.
What's Working Well
- "Do No Harm" integration is elegant. The two-layer graceful degradation (producer handles absence with message, consumer handles with silence) ensures zero behavioral change for teams without research data.
- Parallel execution —
user-research-analystruns alongsiderepo-research-analystandlearnings-researcherwith no serial bottleneck. - Reference deduplication — single canonical
discovery-playbook.mdreferenced by all 3 skills via relative paths. Avoids tripling 414 lines. - Inline transcript routing (Rule 1) — accepts data, not decisions. An agent can pass a full transcript inline and the command saves + processes it without interaction.
- Privacy architecture — clean separation of raw transcripts (gitignored) from anonymized snapshots and personas (committed).
- All naming conventions, frontmatter, directory structure, component counts are correct and consistent with existing patterns.
- Context token budget — all descriptions within targets (100-300 for skills, 100-250 for agents, 40-120 for commands).
- Solution docs are excellent — the "Adding Optional Workflow Phases with Graceful Degradation" doc is a valuable pattern reference.
Review Agents Used
| Agent | Focus |
|---|---|
pattern-recognition-specialist |
Codebase consistency, naming, conventions |
architecture-strategist |
Structural design, integration quality, coupling |
code-simplicity-reviewer |
YAGNI, over-engineering, LOC reduction |
agent-native-reviewer |
Agent accessibility, interactive blocking points |
security-sentinel |
PII handling, gitignore, anonymization, consent |
Next Steps
- Rebase on main — resolve conflicts in
plan.md, preserve both research integration AND v2.35.1/v2.35.2 features - Bump version to 2.36.0 (minor: new functionality)
- Fix gitignore pattern —
docs/research/transcripts/*with!.gitkeep - Remove
.claude/settings.jsonfrom PR - Update stale privacy language in
research-plan/SKILL.md
Brainstorm and deepened plan for adding a user research workflow to the compound-engineering plugin — a /workflows:research command with three skills (research-plan, transcript-insights, persona-builder) and one agent (user-research-analyst). Plan was enhanced by 7 parallel research agents covering architecture, patterns, simplicity, best practices, and skill/agent conventions. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add a parallel research track to the compound engineering plugin: - `/workflows:research` command orchestrating plan/process/personas phases - `research-plan` skill for structured research plans with discussion guides - `transcript-insights` skill for processing transcripts into tagged snapshots - `persona-builder` skill for synthesizing personas with merge logic - `user-research-analyst` agent for searching research artifacts - Discovery playbook reference bundled with each research skill Fixes pre-existing README count drift (25→24 commands, 16→18 skills) and marketplace.json version drift (2.31.0→2.32.0). 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Test the full research workflow (plan → process → personas) with real transcripts from SAM interviews, producing a research plan, two interview snapshots, and a synthesized persona. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
… workflows Explores 16 integration ideas across 5 tiers, narrows to 6 items in a phased approach: - Phase 1: Wire user-research-analyst into brainstorm Phase 1.1 and plan Step 1 - Phase 2: Deeper brainstorm integrations (opportunity-driven initiation, research-informed questions, persona-grounded evaluation, evidence in capture docs) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> https://claude.ai/code/session_014DYcTSd4s126qgbtYiXaVA
…, wire research into workflows - Remove 6 sample data files containing real names, company names, and confidential discussions (P1 privacy blocker) - Add docs/research/transcripts/*.md to .gitignore - Deduplicate discovery-playbook.md (keep canonical copy in research-plan, reference from other skills via relative path) - Wire user-research-analyst into brainstorm Phase 1.1 and plan Step 1 as parallel agent with silent graceful degradation when no data exists - Strengthen PII stripping guidance in transcript-insights skill - Simplify persona-builder evidence strength / hypothesis status tables - Fix research command phase recommendation to prioritize unprocessed transcripts over missing plans Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Document 4 patterns learned during review: 1. "Do no harm" integration — producer handles absence with message, consumer handles absence with silence 2. PII-safe research artifacts — gitignore before create, MUST not consider 3. Reference file deduplication — one canonical copy, relative paths 4. Phase recommendation priority — actionable data over missing prerequisites Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Research process phase stalled when used as the first research action. Two fixes: (1) workflows:research now saves inline transcript content to a file before processing instead of requiring pre-existing files, and (2) transcript-insights skill gracefully handles empty plans directory by defaulting to ad-hoc. Closes EveryInc#187 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Documents the root cause, fix, and prevention checklist for the workflow-skill input mismatch that caused /workflows:research process to stall on first use with empty directories. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
… leak The model was running Phase Selection (artifact status checks) even when inline transcript content was provided. Replaced soft "jump to Phase 2" instruction with numbered rules (Rule 1-4) with explicit "follow FIRST match and STOP" semantics. Inline content handling now happens at the routing point itself rather than deferring to a distant section. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Warp <agent@warp.dev>
Address code review feedback: - Rebase onto upstream/main (v2.35.2), bump to v2.36.0 - Fix .gitignore to catch all transcript types, not just .md - Remove .claude/settings.json from tracking, add to .gitignore - Add Step 4.0 Anonymization During Processing to transcript-insights (positioned before insight extraction, not after) - Add privacy verification items to persona-builder checklist - Fix stale "Consider adding" privacy language in research-plan - Update downstream references to match new gitignore pattern - Mark completed plan docs with status: completed Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
07e30fe to
a8eecc8
Compare
|
Thanks @kieranklaassen! Made some changes, will test in the morning and confirm it's good to re-review. |
Enhance the research workflow documentation by adding a "Created by" column to the artifact path table, clarifying directory creation processes, and improving inline transcript handling instructions. Introduce a first-run check for the research workspace setup and refine artifact status reporting for better user guidance.
|
Hi @kieranklaassen, addressed the P1 and P2 except for the headless mode. Will address that and some of the nice to have in future PR's. Also had the initial folder creation process mirror similar patterns of keeping them in the Skills rather than creating all at once. Ready for review / merge! |
|
Thanks, I'll try it out a bit myself! |
Summary
Adds an optional Research phase to the compound engineering loop. Just as Plan grounds work in codebase context and Review catches issues before shipping, Research grounds product decisions in user evidence — personas, interview insights, and identified opportunities.
1 command, 3 skills, 1 agent. Integrates into brainstorm and plan workflows but is entirely optional — teams without research data experience zero behavioral change.
New Components
/workflows:researchresearch-plantranscript-insightspersona-builderuser-research-analystHow It Fits the Loop
Key Decisions
1. "Do No Harm" — Producer Messages, Consumer Silences
The most important design constraint: existing workflows must behave identically when no research data exists.
How it works:
user-research-analystruns in parallel during brainstorm/plan. Whendocs/research/is empty, the agent returns "No data found." But the consuming workflows don't surface that — they skip silently:Pattern: the producer handles absence with a message; the consumer handles absence with silence. This prevents nagging users who don't use research.
2. Privacy by Design
Transcripts contain PII and are gitignored by default. Only anonymized snapshots and personas get committed. Skills enforce PII stripping with MUST language, not advisory "consider" language.
docs/research/plans/docs/research/transcripts/docs/research/interviews/docs/research/personas/3. No Hard Prerequisites Between Phases
Transcripts can be processed without creating a research plan first — select "Ad-hoc / no plan" during processing. The phase recommender prioritizes actionable data (unprocessed transcripts) over missing prerequisites (no plan).
4. Single Canonical Reference — Extensible by Design
discovery-playbook.md(Teresa Torres + Mom Test methodology, 414 lines / 10 sections) lives inresearch-plan/references/and is referenced by the other two skills via relative path. No duplication.5. Parallel Execution
user-research-analystruns alongsiderepo-research-analyst(brainstorm) andlearnings-researcher(plan). No serial bottleneck added.Also Included
/workflows:brainstormand/workflows:plancommandsdocs/solutions/integration-issues/adding-optional-workflow-phases-with-graceful-degradation.mdTest Plan
"Do no harm" tests (most important):
/workflows:brainstormwith NO research data — verify zero behavioral change (no mention of research)/workflows:planwith NO research data — verify zero behavioral changeFeature tests:
/workflows:research plan— verify research plan created atdocs/research/plans//workflows:research processwith a transcript — verify anonymized snapshot atdocs/research/interviews//workflows:research processwithout a plan — verify "Ad-hoc / no plan" option works/workflows:research personaswith existing snapshots — verify persona atdocs/research/personas//workflows:brainstormWITH research data — verify personas/insights surfaced before dialogue/workflows:planWITH research data — verify user evidence in Step 1.6 consolidationExtensibility:
discovery-playbook.md— verify all 3 skills load updated content on next invocationVerification:
.gitignoreincludesdocs/research/transcripts/*.mdPost-Deploy Monitoring & Validation
No additional operational monitoring required: plugin-only change with no runtime/server component. Existing workflows remain unaffected when
docs/research/is empty.