Agent skill
shaping-journeys
List user canvases and shape common patterns into journey definitions. Use when consolidating user research into testable user flows.
Install this agent skill to your Project
npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/other/other/shaping-journeys
SKILL.md
Shaping Journeys
Manage user canvases and shape common patterns into journey definitions for flow diagramming and testing.
Triggers
/shape # List all canvases with status
/shape --run # Shape canvases into journeys
/shape --journey {id} # Show journey details
Step 0: Collect All Signal Sources (Pre-Workflow)
Before any mode executes, gather enriched signal data from all canvases.
For each canvas in grimoires/observer/canvas/*.md:
-
Read existing sections:
## Journey Fragments(existing behavioral context)## Feedback Entries (from UI)(sentiment data from/synthesize-feedback)## Score Context(user position for weighting)
-
Merge into unified signal list:
- Journey fragments provide behavioral context (goals, actions, expectations)
- Feedback entries provide sentiment data (FEEL, WEIGHTINGS, ACCURACY, UX)
- Score context provides user weight for pattern prioritization
-
Weight patterns by Score Context:
Signal Weight Multiplier Source HIGH (top 1%, godfather/all_night tier) 3x Patterns from these users are prioritized in detection MEDIUM (top 25%, devoted/regular tier) 1x Standard weight LOW (below 25th percentile) 0.5x De-prioritized but not ignored Apply weight multiplier when counting pattern occurrences in Step 3 (Pattern Detection). A HIGH-weight user's feedback entry counts as 3 occurrences toward confidence thresholds.
List Mode (Default)
When invoked without arguments, display canvas summary.
Step 1: Read All Canvases
grimoires/observer/canvas/*.md
Step 2: Parse Canvas Frontmatter
Extract from each canvas:
- User
- Status
- Quotes count
- Goals count
- Linked journeys
Step 3: Display Summary Table
┌─────────────────────────────────────────────────────────────────┐
│ LABORATORY CANVASES │
├─────────────────────────────────────────────────────────────────┤
│ │
│ User Status Quotes Goals Journeys │
│ ───────────── ─────── ────── ───── ───────── │
│ papa-flavio active 3 2 deposit-flow │
│ tchallason active 5 3 rewards-display │
│ testuser active 1 1 - │
│ │
│ Total: 3 canvases, 9 quotes, 6 goals │
│ │
│ Pending Synthesis: 1 canvas (testuser) │
│ │
└─────────────────────────────────────────────────────────────────┘
Next Steps:
- Add more feedback: /observe @{user} "quote"
- Shape journeys: /shape --run
- View journey: /shape --journey {journey-id}
Run Mode (--run)
Extract patterns from canvases to create journey definitions.
Step 1: Load All Canvases
Read all grimoires/observer/canvas/*.md files.
Parse YAML frontmatter and markdown sections.
Step 2: Extract Level 3 Goals
From each canvas, extract:
- Goal text
- Validation status
- Supporting quotes
- User type
Step 2.5: Load Domain Glossary
Before pattern detection, load domain vocabulary to prevent misinterpretation during synthesis:
- Read
grimoires/observer/glossary.yaml - During pattern detection and goal extraction, check if any glossary term appears in user quotes (case-insensitive match on the
termfield) - If a match is found:
- Use the
meaningfield as the canonical interpretation - Note the
notfield to explicitly avoid the common misinterpretation - Annotate journey steps with
[glossary: {term}]where relevant
- Use the
- If glossary file does not exist, proceed without — log a warning to the operator
Step 3: Pattern Detection
Identify common patterns across canvases:
Grouping Rules:
- Similar Level 3 goals → Journey candidates
- Overlapping journey fragments → Shared steps
- Common expectation gaps → Error states
Confidence Thresholds:
| Canvases | Confidence | Action |
|---|---|---|
| 1 | LOW | Flag for manual review |
| 2 | MEDIUM | Create draft journey |
| 3+ | HIGH | Create journey, auto-validate |
Step 4: Generate Journey Files
For MEDIUM/HIGH confidence patterns, create journey files:
Journey Template:
---
type: journey
id: {journey-id}
title: {Human Readable Title}
source_canvases: [{usernames}]
created: {timestamp}
updated: {timestamp}
status: draft
confidence: medium | high
---
# {Journey Title}
## Summary
{1-2 sentence description synthesized from goals}
---
## User Types
- **Primary**: {most common type from source canvases}
- **Secondary**: [{other types}]
---
## Steps
### Step 1: {Step Name}
- **Trigger**: {what initiates this step}
- **Action**: {what user does}
- **Expected**: {what should happen}
- **Selector**: {suggested data-testid or selector}
- **Potential Errors**:
- {error state from canvas gaps}
### Step 2: {Step Name}
...
---
## Success Condition
{What constitutes successful completion of this journey}
---
## Known Gaps
| Gap | Type | Source Canvas | Resolution |
|-----|------|---------------|------------|
| {gap} | {Bug/Feature/Discoverability} | {canvas} | {status} |
---
## Source Quotes
> "{quote}" — @{user}
Step 5: Update Source Canvases
Add journey link to each source canvas frontmatter:
linked_journeys:
- {journey-id}
Step 5.5: Re-Wire Obsidian Links
After creating or updating journey files and updating source canvas frontmatter, re-wire all affected canvases to reflect the new journey membership:
# Re-wire all canvases and journeys to reflect updated source_canvases
bash scripts/observer/wire-obsidian-links.sh --canvases-journeys
# Verify consistency
bash scripts/observer/wire-obsidian-links.sh --canvases-journeys --verify
This ensures newly created journeys and their source canvases have bidirectional wiki-links. The --canvases-journeys mode is idempotent — safe to re-run.
Step 6: Update Laboratory State
Update grimoires/observer/state.yaml:
active:
phase: synthesis
journeys:
{journey-id}:
status: draft
created: {timestamp}
source_canvases: [{users}]
queue:
pending_synthesis: [] # Clear processed
Step 7: Report Output
✓ Synthesis complete
Journeys Created:
- deposit-flow (HIGH confidence)
Sources: papa-flavio, tchallason
Steps: 4
Gaps: 2
- rewards-display (MEDIUM confidence)
Sources: tchallason
Steps: 3
Gaps: 1
Low Confidence (Manual Review):
- testuser canvas: 1 goal, no pattern match
Next Steps:
- View journey: /shape --journey deposit-flow
- Generate diagram: /diagram deposit-flow
- Add more feedback: /observe @testuser "..."
Journey Details Mode (--journey {id})
Display full journey details:
/shape --journey deposit-flow
Output:
┌─────────────────────────────────────────────────────────────────┐
│ JOURNEY: deposit-flow │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Status: draft │
│ Confidence: HIGH │
│ Sources: papa-flavio, tchallason │
│ │
│ Steps: │
│ 1. Open deposit modal (trigger: click deposit button) │
│ 2. Enter amount (action: input token amount) │
│ 3. Approve token (action: wallet approval) │
│ 4. Confirm deposit (action: execute deposit) │
│ │
│ Known Gaps: 2 │
│ - Approval stuck on some wallets (Bug) │
│ - No loading indicator during tx (Feature) │
│ │
└─────────────────────────────────────────────────────────────────┘
Actions:
- Generate diagram: /diagram deposit-flow
- Generate test: /validate deposit-flow
- Edit journey: Read grimoires/observer/journeys/deposit-flow.md
Journey ID Generation
Journey IDs are generated from goal patterns:
- Lowercase, hyphenated
- Max 30 characters
- Unique within laboratory
Examples:
- "deposit tokens and stake" →
deposit-stake-flow - "view accumulated rewards" →
rewards-display - "plan burn timing" →
burn-planning
Pattern Matching Algorithm
Goal Similarity
Compare goals using semantic patterns:
- Action verbs: deposit, withdraw, claim, stake, view
- Object nouns: tokens, rewards, balance, position
- Intent markers: planning, checking, tracking
Match Criteria:
- Same action verb OR
- Same object noun AND similar intent OR
- Explicit user-stated connection
Fragment Merging
When multiple canvases have journey fragments:
- Align by trigger similarity
- Merge actions into steps
- Combine expected outcomes
- Aggregate error states
Validation
Before creating journey:
- At least 2 canvases match (or explicit manual trigger)
- Steps have clear triggers
- Success condition defined
- YAML frontmatter valid
Error Handling
| Error | Resolution |
|---|---|
| No canvases found | Prompt to create with /observe |
| No patterns detected | List canvases, suggest manual journey |
| Journey ID collision | Append numeric suffix |
| Canvas parse error | Report, skip canvas |
Integration Points
- observing-users: Canvases as input
- diagramming-states: Journeys as input for diagram generation
- Laboratory state: Updates journey registry
Related
/observe- Create canvases from quotes/diagram- Generate diagrams from journeys/validate- Generate tests from diagrams
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
agent-ops-spec
Manage specification documents in .agent/specs/. Use when user provides requirements, acceptance criteria, or feature descriptions that need to be tracked and validated against implementation.
agent-ops-state
Maintain .agent state files. Use at session start, after meaningful steps, and before concluding: read/update constitution/memory/focus/issues/baseline consistently.
agent-ops-spec
Manage specification documents in .agent/specs/. Use when user provides requirements, acceptance criteria, or feature descriptions that need to be tracked and validated against implementation.
agent-ops-testing
Test strategy, execution, and coverage analysis. Use when designing tests, running test suites, or analyzing test results beyond baseline checks.
agent-ops-testing
Test strategy, execution, and coverage analysis. Use when designing tests, running test suites, or analyzing test results beyond baseline checks.
agent-ops-state
Maintain .agent state files. Use at session start, after meaningful steps, and before concluding: read/update constitution/memory/focus/issues/baseline consistently.
Didn't find tool you were looking for?