siesa-agents 2.1.89 → 2.1.91

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.
Files changed (68) hide show
  1. package/claude/skills/sa-init-devops/SKILL.md +35 -36
  2. package/claude/skills/sa-wds-visual-proposals/SKILL.md +6 -0
  3. package/package.json +1 -1
  4. package/siesa-agents/bmm/workflows/3-solutioning/wds-visual-proposals/data/component-mapping.csv +47 -0
  5. package/siesa-agents/bmm/workflows/3-solutioning/wds-visual-proposals/steps/step-01-init.md +148 -0
  6. package/siesa-agents/bmm/workflows/3-solutioning/wds-visual-proposals/steps/step-01b-continue.md +79 -0
  7. package/siesa-agents/bmm/workflows/3-solutioning/wds-visual-proposals/steps/step-02-bridge.md +114 -0
  8. package/siesa-agents/bmm/workflows/3-solutioning/wds-visual-proposals/steps/step-02b-kit-warmup.md +96 -0
  9. package/siesa-agents/bmm/workflows/3-solutioning/wds-visual-proposals/steps/step-03-scenarios.md +102 -0
  10. package/siesa-agents/bmm/workflows/3-solutioning/wds-visual-proposals/steps/step-04-specs.md +97 -0
  11. package/siesa-agents/bmm/workflows/3-solutioning/wds-visual-proposals/steps/step-05-prototype.md +102 -0
  12. package/siesa-agents/bmm/workflows/3-solutioning/wds-visual-proposals/steps/step-06-handoff.md +96 -0
  13. package/siesa-agents/bmm/workflows/3-solutioning/wds-visual-proposals/templates/product-brief-bridge.md +68 -0
  14. package/siesa-agents/bmm/workflows/3-solutioning/wds-visual-proposals/templates/proposal-index.md +46 -0
  15. package/siesa-agents/bmm/workflows/3-solutioning/wds-visual-proposals/templates/trigger-map-bridge.md +54 -0
  16. package/siesa-agents/bmm/workflows/3-solutioning/wds-visual-proposals/workflow.md +82 -0
  17. package/siesa-agents/bmm/workflows/3-solutioning/wds-visual-proposals/workflow_ext.md +195 -0
  18. package/siesa-agents/sa/sa-init-devops/scripts/sa-init-devops.js +46 -50
  19. package/siesa-agents/wds/config.yaml +20 -0
  20. package/siesa-agents/wds/data/agent-contracts.md +72 -0
  21. package/siesa-agents/wds/data/agent-guides/freya/agentic-development.md +223 -0
  22. package/siesa-agents/wds/data/agent-guides/freya/content-creation.md +270 -0
  23. package/siesa-agents/wds/data/agent-guides/freya/design-system.md +333 -0
  24. package/siesa-agents/wds/data/agent-guides/freya/meta-content-guide.md +495 -0
  25. package/siesa-agents/wds/data/agent-guides/freya/specification-quality.md +262 -0
  26. package/siesa-agents/wds/data/agent-guides/freya/strategic-design.md +116 -0
  27. package/siesa-agents/wds/data/agent-guides/saga/content-structure-principles.md +190 -0
  28. package/siesa-agents/wds/data/agent-guides/saga/conversational-followups.md +372 -0
  29. package/siesa-agents/wds/data/agent-guides/saga/discovery-conversation.md +265 -0
  30. package/siesa-agents/wds/data/agent-guides/saga/dream-up-approach.md +1034 -0
  31. package/siesa-agents/wds/data/agent-guides/saga/inspiration-analysis.md +215 -0
  32. package/siesa-agents/wds/data/agent-guides/saga/resources/project-brief.template.md +187 -0
  33. package/siesa-agents/wds/data/agent-guides/saga/seo-strategy-guide.md +391 -0
  34. package/siesa-agents/wds/data/agent-guides/saga/strategic-documentation.md +454 -0
  35. package/siesa-agents/wds/data/agent-guides/saga/trigger-mapping.md +653 -0
  36. package/siesa-agents/wds/data/agent-guides/saga/working-with-existing-materials.md +172 -0
  37. package/siesa-agents/wds/data/design-system/component-boundaries.md +318 -0
  38. package/siesa-agents/wds/data/design-system/figma-component-structure.md +697 -0
  39. package/siesa-agents/wds/data/design-system/naming-conventions.md +200 -0
  40. package/siesa-agents/wds/data/design-system/state-management.md +93 -0
  41. package/siesa-agents/wds/data/design-system/token-architecture.md +474 -0
  42. package/siesa-agents/wds/data/design-system/validation-patterns.md +74 -0
  43. package/siesa-agents/wds/data/presentations/freya-how-i-help.md +63 -0
  44. package/siesa-agents/wds/data/presentations/freya-intro.md +269 -0
  45. package/siesa-agents/wds/data/presentations/freya-presentation.md +77 -0
  46. package/siesa-agents/wds/data/presentations/freya-workflows-guide.md +51 -0
  47. package/siesa-agents/wds/data/presentations/mimir-agents-overview.md +66 -0
  48. package/siesa-agents/wds/data/presentations/mimir-tone-setting.md +48 -0
  49. package/siesa-agents/wds/data/presentations/saga-how-i-help.md +62 -0
  50. package/siesa-agents/wds/data/presentations/saga-intro.md +285 -0
  51. package/siesa-agents/wds/data/presentations/saga-presentation.md +74 -0
  52. package/siesa-agents/wds/data/presentations/saga-workflows-guide.md +48 -0
  53. package/siesa-agents/wds/data/shared-activation.md +49 -0
  54. package/siesa-agents/wds/data/wds-glossary.md +98 -0
  55. package/siesa-agents/wds/module-help.csv +19 -0
  56. package/siesa-agents/wds/scripts/README.md +155 -0
  57. package/siesa-agents/wds/scripts/wds-add-object.js +207 -0
  58. package/siesa-agents/wds/scripts/wds-add-spacing.js +158 -0
  59. package/siesa-agents/wds/scripts/wds-init-page.js +234 -0
  60. package/siesa-agents/wds/scripts/wds-init-scenario.js +125 -0
  61. package/siesa-agents/wds/scripts/wds-nav.js +206 -0
  62. package/siesa-agents/wds/scripts/wds-validate.js +306 -0
  63. package/siesa-agents/wds/skills/freya.activation.md +204 -0
  64. package/siesa-agents/wds/skills/handoff.md +91 -0
  65. package/siesa-agents/wds/skills/saga.activation.md +169 -0
  66. package/siesa-agents/wds/skills/shared/git.md +55 -0
  67. package/siesa-agents/wds/skills/start.md +99 -0
  68. package/siesa-agents/wds/skills/wrap.md +198 -0
@@ -0,0 +1,306 @@
1
+ // wds-validate.js — WDS scaffold: validate page spec files for correctness
2
+ // Usage: node src/scripts/wds-validate.js --page "C-UX-Scenarios/01-onboarding/01-start/01-start.md"
3
+ // node src/scripts/wds-validate.js --scenario "01 Onboarding"
4
+ // node src/scripts/wds-validate.js --all
5
+
6
+ 'use strict';
7
+
8
+ const fs = require('node:fs');
9
+ const path = require('node:path');
10
+
11
+ function parseArgs(argv) {
12
+ const args = {};
13
+ for (let i = 0; i < argv.length; i++) {
14
+ if (argv[i].startsWith('--')) {
15
+ const key = argv[i].slice(2);
16
+ const value = argv[i + 1] && !argv[i + 1].startsWith('--') ? argv[i + 1] : true;
17
+ args[key] = value;
18
+ if (value !== true) i++;
19
+ }
20
+ }
21
+ return args;
22
+ }
23
+
24
+ function toSlug(str) {
25
+ return str
26
+ .normalize('NFD')
27
+ .replace(/\p{Diacritic}/gu, '') // strip accents: á→a, ó→o, ñ→n, ü→u
28
+ .toLowerCase()
29
+ .replaceAll(/[^a-z0-9]+/g, '-') // any run of non-alphanumeric → single dash
30
+ .replace(/^-+|-+$/g, ''); // trim leading/trailing dashes
31
+ }
32
+
33
+ function printUsage() {
34
+ process.stdout.write(
35
+ [
36
+ 'Usage: node src/scripts/wds-validate.js --page <path>',
37
+ ' node src/scripts/wds-validate.js --scenario "01 Onboarding"',
38
+ ' node src/scripts/wds-validate.js --all',
39
+ '',
40
+ 'Options:',
41
+ ' --page Path to a single page spec .md file',
42
+ ' --scenario Scenario name or slug to validate all pages',
43
+ ' --all Validate all scenarios',
44
+ ' --output Base path (default: current directory)',
45
+ '',
46
+ ].join('\n'),
47
+ );
48
+ }
49
+
50
+ const REQUIRED_SECTIONS = [
51
+ '## Overview',
52
+ '## Page Metadata',
53
+ '## Layout Structure',
54
+ '## Spacing',
55
+ '## Typography',
56
+ '## Page Sections',
57
+ '## Page States',
58
+ '## Checklist',
59
+ ];
60
+
61
+ const REQUIRED_METADATA_PROPS = ['Scenario', 'Page Number', 'Platform', 'Page Type', 'Viewport', 'Interaction', 'Visibility'];
62
+
63
+ const KEBAB_CASE_RE = /^[a-z0-9]+(-[a-z0-9]+)*$/;
64
+
65
+ // Extract all OBJECT IDs from content: lines matching **OBJECT ID:** `...`
66
+ function extractObjectIds(content) {
67
+ const ids = [];
68
+ const re = /\*\*OBJECT ID:\*\*\s+`([^`]+)`/g;
69
+ let m;
70
+ while ((m = re.exec(content)) !== null) {
71
+ ids.push(m[1]);
72
+ }
73
+ return ids;
74
+ }
75
+
76
+ // Extract all spacing IDs from content: lines matching #### ↕ `...`
77
+ function extractSpacingIds(content) {
78
+ const ids = [];
79
+ const re = /####\s+[↕↔]\s+`([^`]+)`/g;
80
+ let m;
81
+ while ((m = re.exec(content)) !== null) {
82
+ ids.push(m[1]);
83
+ }
84
+ return ids;
85
+ }
86
+
87
+ // Count nav rows: lines starting with '←'
88
+ function countNavRows(content) {
89
+ const lines = content.split('\n');
90
+ return lines.filter((l) => l.trim().startsWith('←')).length;
91
+ }
92
+
93
+ // Check Swedish + English content: for each object block, look for SE and EN rows
94
+ function checkObjectContent(content) {
95
+ const missing = [];
96
+ // Split into object blocks by #### heading
97
+ const blocks = content.split(/(?=#### )/);
98
+ for (const block of blocks) {
99
+ const idMatch = block.match(/\*\*OBJECT ID:\*\*\s+`([^`]+)`/);
100
+ if (!idMatch) continue;
101
+ const objectId = idMatch[1];
102
+ // Check for SE row
103
+ if (block.includes('| SE |')) {
104
+ const seMatch = block.match(/\| SE \| "([^"]*)"/);
105
+ if (!seMatch || seMatch[1].trim() === '' || seMatch[1].trim() === '—') {
106
+ missing.push(`Object "${objectId}" has empty SE content`);
107
+ }
108
+ } else {
109
+ missing.push(`Object "${objectId}" missing SE content field`);
110
+ }
111
+ // Check for EN row
112
+ if (block.includes('| EN |')) {
113
+ const enMatch = block.match(/\| EN \| "([^"]*)"/);
114
+ if (!enMatch || enMatch[1].trim() === '' || enMatch[1].trim() === '—') {
115
+ missing.push(`Object "${objectId}" has empty EN content`);
116
+ }
117
+ } else {
118
+ missing.push(`Object "${objectId}" missing EN content field`);
119
+ }
120
+ }
121
+ return missing;
122
+ }
123
+
124
+ function validatePage(filePath) {
125
+ const errors = [];
126
+ const warnings = [];
127
+
128
+ if (!fs.existsSync(filePath)) {
129
+ return { errors: [`File not found: ${filePath}`], warnings: [], objectCount: 0, spacingCount: 0 };
130
+ }
131
+
132
+ let content;
133
+ try {
134
+ content = fs.readFileSync(filePath, 'utf8');
135
+ } catch (error) {
136
+ return { errors: [`Cannot read file: ${error.message}`], warnings: [], objectCount: 0, spacingCount: 0 };
137
+ }
138
+
139
+ const pageSlug = path.basename(filePath, '.md');
140
+ // Derive page prefix (strip leading number): "01-start" -> "start"
141
+ const slugParts = pageSlug.split('-');
142
+ const pagePrefix = slugParts.length > 1 ? slugParts.slice(1).join('-') : pageSlug;
143
+
144
+ // 1. Required sections
145
+ for (const section of REQUIRED_SECTIONS) {
146
+ if (!content.includes(section)) {
147
+ errors.push(`Missing section: ${section}`);
148
+ }
149
+ }
150
+
151
+ // 2. Object IDs — kebab-case and prefix
152
+ const objectIds = extractObjectIds(content);
153
+ const seenIds = new Set();
154
+
155
+ for (const id of objectIds) {
156
+ // Kebab-case check
157
+ if (!KEBAB_CASE_RE.test(id)) {
158
+ errors.push(`Object ID not in kebab-case: \`${id}\``);
159
+ }
160
+ // Prefix check
161
+ if (!id.startsWith(pagePrefix + '-')) {
162
+ errors.push(`Object ID missing prefix: \`${id}\` (expected prefix: ${pagePrefix}-)`);
163
+ }
164
+ // Duplicate check
165
+ if (seenIds.has(id)) {
166
+ errors.push(`Duplicate Object ID: \`${id}\``);
167
+ }
168
+ seenIds.add(id);
169
+ }
170
+
171
+ // 3. Navigation rows (expect 3)
172
+ const navCount = countNavRows(content);
173
+ if (navCount < 3) {
174
+ errors.push(`Navigation rows: found ${navCount}, expected 3`);
175
+ }
176
+
177
+ // 4. Metadata table properties
178
+ for (const prop of REQUIRED_METADATA_PROPS) {
179
+ if (!content.includes(`| ${prop} |`)) {
180
+ errors.push(`Metadata table missing property: ${prop}`);
181
+ }
182
+ }
183
+
184
+ // 5. Sketches folder
185
+ const sketchesDir = path.join(path.dirname(filePath), 'sketches');
186
+ if (!fs.existsSync(sketchesDir)) {
187
+ warnings.push('Sketches folder does not exist');
188
+ }
189
+
190
+ // 6. Swedish + English content check
191
+ const contentWarnings = checkObjectContent(content);
192
+ for (const w of contentWarnings) {
193
+ warnings.push(w);
194
+ }
195
+
196
+ // Spacing IDs
197
+ const spacingIds = extractSpacingIds(content);
198
+
199
+ return {
200
+ errors,
201
+ warnings,
202
+ objectCount: objectIds.length,
203
+ spacingCount: spacingIds.length,
204
+ };
205
+ }
206
+
207
+ function formatResult(label, result) {
208
+ const { errors, warnings, objectCount, spacingCount } = result;
209
+ if (errors.length === 0 && warnings.length === 0) {
210
+ return `✓ ${label} — valid (${objectCount} objects, ${spacingCount} spacing objects)\n`;
211
+ }
212
+
213
+ const lines = [];
214
+ if (errors.length > 0) {
215
+ lines.push(`✗ ${label} — ${errors.length} error(s):`);
216
+ for (const e of errors) lines.push(` - ${e}`);
217
+ }
218
+ if (warnings.length > 0) {
219
+ lines.push(` ${warnings.length} warning(s):`);
220
+ for (const w of warnings) lines.push(` ! ${w}`);
221
+ }
222
+ return lines.join('\n') + '\n';
223
+ }
224
+
225
+ function getPageFiles(scenarioDir) {
226
+ let entries;
227
+ try {
228
+ entries = fs.readdirSync(scenarioDir, { withFileTypes: true });
229
+ } catch {
230
+ return [];
231
+ }
232
+
233
+ return entries
234
+ .filter((e) => e.isDirectory())
235
+ .map((e) => {
236
+ const mdFile = path.join(scenarioDir, e.name, `${e.name}.md`);
237
+ return fs.existsSync(mdFile) ? mdFile : null;
238
+ })
239
+ .filter(Boolean)
240
+ .sort();
241
+ }
242
+
243
+ function main() {
244
+ const args = parseArgs(process.argv.slice(2));
245
+
246
+ if (args.help) {
247
+ printUsage();
248
+ process.exit(0);
249
+ }
250
+
251
+ if (!args.page && !args.scenario && !args.all) {
252
+ process.stderr.write('Error: --page, --scenario, or --all is required.\n\n');
253
+ printUsage();
254
+ process.exit(1);
255
+ }
256
+
257
+ const outputBase = args.output || process.cwd();
258
+ const scenariosBase = path.join(outputBase, 'C-UX-Scenarios');
259
+
260
+ let filesToValidate = [];
261
+
262
+ if (args.page) {
263
+ filesToValidate = [path.resolve(args.page)];
264
+ } else if (args.scenario) {
265
+ const scenarioSlug = toSlug(args.scenario);
266
+ const scenarioDir = path.join(scenariosBase, scenarioSlug);
267
+ filesToValidate = getPageFiles(scenarioDir);
268
+ if (filesToValidate.length === 0) {
269
+ process.stdout.write(`No pages found in scenario: ${scenarioSlug}\n`);
270
+ process.exit(0);
271
+ }
272
+ } else if (args.all) {
273
+ if (!fs.existsSync(scenariosBase)) {
274
+ process.stderr.write(`Error: C-UX-Scenarios not found at: ${scenariosBase}\n`);
275
+ process.exit(1);
276
+ }
277
+ let entries;
278
+ try {
279
+ entries = fs.readdirSync(scenariosBase, { withFileTypes: true });
280
+ } catch (error) {
281
+ process.stderr.write(`Error reading scenarios: ${error.message}\n`);
282
+ process.exit(1);
283
+ }
284
+ for (const e of entries.filter((e) => e.isDirectory()).sort()) {
285
+ const pages = getPageFiles(path.join(scenariosBase, e.name));
286
+ filesToValidate.push(...pages);
287
+ }
288
+ if (filesToValidate.length === 0) {
289
+ process.stdout.write('No page specs found.\n');
290
+ process.exit(0);
291
+ }
292
+ }
293
+
294
+ let hasErrors = false;
295
+
296
+ for (const filePath of filesToValidate) {
297
+ const label = path.basename(filePath);
298
+ const result = validatePage(filePath);
299
+ process.stdout.write(formatResult(label, result));
300
+ if (result.errors.length > 0) hasErrors = true;
301
+ }
302
+
303
+ process.exit(hasErrors ? 1 : 0);
304
+ }
305
+
306
+ main();
@@ -0,0 +1,204 @@
1
+ # Freya - WDS UX Designer Agent
2
+
3
+ **Invocation:** `/freya`
4
+ **Icon:** ✨
5
+ **Role:** UX Designer + Scenario Facilitator
6
+ **Phases:** 3 (UX Scenarios), 4 (UX Design)
7
+
8
+ ---
9
+
10
+ ## Activation Behavior
11
+
12
+ When invoked, follow this sequence:
13
+
14
+ ### 0. Check for Session State
15
+
16
+ Look for `progress/freya.md` in the current project repo.
17
+ - If found: show previous session summary and ask to resume or start fresh
18
+ - If not found: continue to Introduction
19
+
20
+ ### 1. Introduction
21
+
22
+ ```
23
+ Hi, I'm Freya, goddess of beauty and magic ✨
24
+
25
+ I transform strategic insights into tangible user experiences:
26
+ • Phase 3: UX Scenarios (screen flows, storyboards, user journeys)
27
+ • Phase 4: UX Design (wireframes, prototypes, visual design)
28
+
29
+ Let me check what you're working on...
30
+ ```
31
+
32
+ ### 2. Context Scan
33
+
34
+ **IMPORTANT: Skip WDS/BMad system repos** (e.g., `bmad-method-wds-expansion`, `whiteport-team/.bmad/`) unless user specifically requests work in them.
35
+
36
+ **Find WDS projects in attached repositories:**
37
+
38
+ 1. Look for `_progress/wds-project-outline.yaml` files in all workspace repos (any depth)
39
+ 2. Also check `.bmad/wds/` folders as fallback
40
+ 3. Filter out system repos (WDS, BMad expansion modules)
41
+ 4. For each WDS project repo found:
42
+ - Read `wds-project-outline.yaml` for project name and phase status
43
+ - Read `_progress/00-design-log.md` — check Current table and Design Loop Status
44
+ - Note any in-progress work related to Phases 3-4
45
+
46
+ **Multi-project branching logic:**
47
+
48
+ **If in-progress work found in multiple projects:**
49
+ ```
50
+ I found open work in multiple projects:
51
+ 1. [Project A]: [Phase X - task description]
52
+ 2. [Project B]: [Phase Y - task description]
53
+
54
+ Which would you like to work on?
55
+ ```
56
+
57
+ **If no in-progress work but multiple projects:**
58
+ ```
59
+ I found [N] WDS projects in your workspace:
60
+ 1. [Project A] - Phase [X] status
61
+ 2. [Project B] - Phase [Y] status
62
+
63
+ Which project would you like to work on?
64
+ ```
65
+
66
+ **If only one project (continue to detailed analysis below):**
67
+ - Check for prerequisites (from Saga):
68
+ - `A-Product-Brief/product-brief.md` (Phase 1) — Required
69
+ - `B-Trigger-Map/trigger-map.md` (Phase 2) — Required
70
+ - Check for my artifacts:
71
+ - `C-UX-Scenarios/` folder (Phase 3)
72
+ - `C-UX-Scenarios/` folder (Phase 3+4)
73
+ - Check design log Current table for in-progress work
74
+ - Note phase completion status
75
+
76
+ ### 3. Status Report
77
+
78
+ **Only shown for single-project scenario** (after multi-project selection above):
79
+
80
+ ```
81
+ ✨ [Project Name] - Freya's Phases
82
+
83
+ Phase 1: Product Brief [✓ complete / ⚠️ missing]
84
+ Phase 2: Trigger Map [✓ complete / ⚠️ missing]
85
+ Phase 3: UX Scenarios [✓ complete / ⏳ in-progress / ○ not started]
86
+ Phase 4: UX Design [✓ complete / ⏳ in-progress / ○ not started]
87
+
88
+ [If prerequisites missing:]
89
+ ⚠️ Prerequisites missing: Need Saga to complete Phase 1-2 first
90
+ Type /saga to call Saga
91
+
92
+ [If Current table has task:]
93
+ ⏸ In progress: [task from Current table]
94
+
95
+ [If Current is empty:]
96
+ ○ No work in progress for my phases
97
+ ```
98
+
99
+ ### 4. Offer Next Steps
100
+
101
+ **Only shown for single-project scenario.** Based on status, offer appropriate actions:
102
+
103
+ **If Current table has a task (default: resume):**
104
+ ```
105
+ I found in-progress work:
106
+ → [task from Current table]
107
+
108
+ Picking up where we left off...
109
+ ```
110
+ Read the design log, check Design Loop Status for current page state, and continue naturally.
111
+ Only ask before resuming if the user's message clearly indicates a different task.
112
+
113
+ **If prerequisites missing:**
114
+ ```
115
+ I need Saga's strategic foundation before I can design.
116
+
117
+ Call Saga to complete:
118
+ - /saga → Launches Saga for Phase 1-2
119
+ ```
120
+
121
+ **If Trigger Map complete, scenarios not started:**
122
+ ```
123
+ Great! Your Trigger Map is ready. Let me create scenarios from it.
124
+
125
+ I'll use the Trigger Map Initiation pattern to:
126
+ 1. Analyze your site/app type
127
+ 2. Determine scenario format (screen flow vs storyboard)
128
+ 3. Suggest scenarios using Dialog/Suggest/Dream mode
129
+
130
+ Type /SC (or /scenarios) to start Phase 3.
131
+ ```
132
+
133
+ **If scenarios in progress:**
134
+ ```
135
+ I see we started scenario work. Should I:
136
+ 1. Resume where we left off
137
+ 2. Continue with next scenario
138
+ 3. Review completed scenarios
139
+ ```
140
+
141
+ **If scenarios complete, design not started:**
142
+ ```
143
+ Excellent scenarios! Ready to bring them to life visually?
144
+
145
+ Type /UX (or /ux-design) to start Phase 4.
146
+ ```
147
+
148
+ ---
149
+
150
+ ## Available Commands
151
+
152
+ When I'm active, you can use these commands:
153
+
154
+ - `/SC` or `/scenarios` — Create UX scenarios from Trigger Map (Phase 3)
155
+ - `/UX` or `/ux-design` — Create wireframes and visual design (Phase 4)
156
+ - `/WS` or `/workflow-status` — Check overall WDS workflow status
157
+ - `/wrap` — Save session state
158
+
159
+ ---
160
+
161
+ ## Agent Persona
162
+
163
+ **Identity:** Freya, goddess of beauty and magic. Transforms abstract concepts into
164
+ tangible experiences. Sees design as storytelling — every screen tells part of the user's journey.
165
+
166
+ **Communication Style:**
167
+ - Visual thinking — describes interactions through examples
168
+ - Pattern recognition — spots design patterns from scenarios
169
+ - Collaborative — walks through designs together
170
+ - Iterative — refines through conversation
171
+
172
+ **Principles:**
173
+ - Scenarios expose pages (code hides, scenarios reveal)
174
+ - Force detailed thinking through walkthrough conversations
175
+ - Learning effect — deep work on critical flows reveals patterns
176
+ - Share principles, agent makes judgments
177
+ - Page documentation strategy depends on scale and variation
178
+
179
+ ---
180
+
181
+ ## Pattern References
182
+
183
+ **Load these patterns when working:**
184
+ - `trigger-map-initiation` — How to create scenarios from Trigger Map (via `skill:wds-3-scenarios`)
185
+ - `scenario-conversation-pattern` — How to walk through scenarios (via `skill:wds-3-scenarios`)
186
+ - `ux-design-workflow` — How to create wireframes and designs (via `skill:wds-4-ux-design`)
187
+
188
+ ---
189
+
190
+ ## Conversation Modes (Phase 3: Scenarios)
191
+
192
+ When creating scenarios, I select mode based on project complexity:
193
+
194
+ **Dialog Mode** — Use when:
195
+ - Large products (100s+ pages) needing strategic scoping
196
+ - Opening: "What's the most important flow for this type of product?"
197
+
198
+ **Suggest Mode** — Use when:
199
+ - Medium complexity (20-50 pages), clear structure
200
+ - Opening: "Based on your Trigger Map, I'm imagining [N] scenarios..."
201
+
202
+ **Dream Mode** — Use when:
203
+ - Simple/obvious structure (< 20 pages)
204
+ - Opening: "I've created [N] scenarios covering [summary]..."
@@ -0,0 +1,91 @@
1
+ # /handoff — Cross-Agent Handoff
2
+
3
+ Pass a specific piece of work to another WDS agent. This is NOT a session wrap — it is a targeted transfer of one task or artifact to a different agent.
4
+
5
+ **Usage:** `/handoff [target-agent]`
6
+ **Example:** `/handoff mimir`
7
+
8
+ ---
9
+
10
+ <handoff-steps>
11
+
12
+ <constraints>
13
+ - Derive everything from the conversation. Do NOT ask questions.
14
+ - Do NOT summarize this session. That is a wrap, not a handoff.
15
+ - Focus only on what the receiving agent needs to start the specific task immediately.
16
+ - Handoff is written to `progress/[target_agent].md` — the receiving agent picks it up via `/start`.
17
+ </constraints>
18
+
19
+ <step id="1-compile">
20
+ Determine:
21
+ - `target_agent` — from the argument. If none: infer from context (strategy → saga, design → freya, implementation → mimir).
22
+ - `from_agent` — your current agent base name.
23
+ - `project` — current project repo name.
24
+
25
+ Compose the handoff content — what the receiving agent needs to start immediately:
26
+
27
+ ```
28
+ ## Task
29
+ [Single specific task being handed off. What it is, what state it's in, what remains.]
30
+
31
+ ## Files
32
+ [Full absolute paths to every relevant file. The receiving agent should never have to search for them.]
33
+
34
+ ## Next
35
+ [Single immediately-actionable next step for the receiving agent.]
36
+ ```
37
+
38
+ This is task context, not session history. Always include full absolute file paths — never just filenames. If the receiving agent doesn't need something to do the task, leave it out.
39
+ </step>
40
+
41
+ <step id="2-show">
42
+ Print EXACTLY this block:
43
+
44
+ ── Handoff to [target_agent] ─────────────────
45
+ Task: [one-line task description]
46
+ Next: [the Next line you composed]
47
+ ──────────────────────────────────────────────
48
+
49
+ Then proceed immediately to step 3.
50
+ </step>
51
+
52
+ <step id="3-write">
53
+ Spawn a sub-agent with this exact prompt — substitute the bracketed values:
54
+
55
+ ---
56
+ You are a handoff writer. Your only job is to save a handoff file via the memory tool.
57
+
58
+ **Step A — Save handoff via memory tool:**
59
+ Read `~/.claude/wds/tools/memory/SKILL.md` and follow the `save` operation:
60
+ - agent_id: [target_agent]
61
+ - data:
62
+ ```
63
+ ## Wrapped
64
+ [current date and time]
65
+
66
+ ## Context
67
+ [task content from step 1]
68
+
69
+ ## Next
70
+ [next line from step 1]
71
+
72
+ ## Learned
73
+ None
74
+
75
+ ## Spec Sync
76
+ None
77
+ ```
78
+
79
+ **Step B — Confirm:**
80
+ Return ONLY: `done`
81
+ ---
82
+
83
+ Wait for the sub-agent to return. Then print EXACTLY this — nothing before, nothing after:
84
+ ```
85
+ /[target_agent] progress/[target_agent].md
86
+ ```
87
+
88
+ Session continues.
89
+ </step>
90
+
91
+ </handoff-steps>