@tgoodington/intuition 5.0.0 → 6.0.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.
@@ -0,0 +1,219 @@
1
+ # `/intuition-design` — Skill Specification (v6.0)
2
+
3
+ **Status:** Implemented
4
+ **Date:** 2026-02-12
5
+ **Source:** Synthesized from skill-guide analysis, user design sessions, and architectural review
6
+
7
+ ---
8
+
9
+ ## 1. Purpose & Position in Workflow
10
+
11
+ Design Exploration fills the gap between strategic planning and execution. Planning decides WHAT to build and WHY. Execution decides the code-level HOW. Design Exploration decides the **architectural/creative HOW** — through collaborative dialogue with the user.
12
+
13
+ **Domain-agnostic:** Design works for code architecture, world building, UI/UX design, document structure, game design, business processes, or any creative/structural work that needs detailed elaboration before implementation.
14
+
15
+ **Workflow position (v6.0):**
16
+ ```
17
+ prompt → handoff → plan → handoff → [design loop] → handoff → execute → handoff
18
+
19
+ Per-item design cycles
20
+ managed by handoff
21
+ ```
22
+
23
+ **When design runs:**
24
+ - Plan auto-flags tasks below 95% design readiness
25
+ - Handoff presents flagged items to user for confirmation
26
+ - User can add/remove items from the design list
27
+ - If no items need design, handoff skips to execute
28
+
29
+ **When design does NOT run:**
30
+ - All plan tasks are straightforward enough for direct execution
31
+ - User explicitly skips design at the confirmation step
32
+
33
+ ---
34
+
35
+ ## 2. Core Design Decisions
36
+
37
+ ### Framework: ECD (Elements, Connections, Dynamics)
38
+
39
+ Three coverage dimensions tracked throughout dialogue:
40
+
41
+ - **E — Elements**: What are the building blocks? The core entities, components, types, content pieces, or structural units. Their properties, boundaries, and definitions.
42
+ - **C — Connections**: How do elements relate? The relationships, interfaces, dependencies, flows, hierarchies, or structural organization. Integration with existing context.
43
+ - **D — Dynamics**: How do things work and change? The behaviors, processes, rules, interactions, state transitions, or operational logic. Edge cases and exceptions.
44
+
45
+ Natural progression: E → C → D. All three must reach sufficiency before formalization.
46
+
47
+ **Why ECD over DIP:**
48
+ - DIP (Data, Interfaces, Process) was code-specific — TypeScript types, API signatures, algorithms
49
+ - ECD is domain-agnostic — adapts language to match what is being designed
50
+ - ECD maps cleanly to DIP for code (E≈D, C≈I, D≈P) while also working for creative domains
51
+
52
+ **Domain adaptation:**
53
+
54
+ | Domain | Elements | Connections | Dynamics |
55
+ |--------|----------|-------------|----------|
56
+ | Code | Types, models, schemas | APIs, interfaces, integration | Algorithms, state transitions |
57
+ | World building | Locations, characters, factions | Alliances, geography, trade | Magic rules, economy, combat |
58
+ | UI/UX | Screens, components, layouts | Navigation, data flow, journeys | Interactions, states, animations |
59
+ | Documents | Sections, arguments, evidence | Logical flow, transitions | Tone, persuasion, pacing |
60
+ | Game design | Mechanics, entities, resources | Progression, feedback loops | Balance, player interactions |
61
+ | Business | Roles, artifacts, stages | Handoffs, approvals, escalations | Timing rules, SLAs |
62
+
63
+ ### Voice: Senior Architect
64
+
65
+ Analytical, decisive, research-informed, concise, appropriately challenging. Domain adapts to what is being designed, but posture stays the same.
66
+
67
+ ### Model: Opus
68
+
69
+ Design decisions have long-term consequences. Worth the cost for nuanced trade-off reasoning, complex system synthesis, and edge case identification.
70
+
71
+ Sub-agents use haiku for research (fast, cheap, parallel). Sonnet for complex trade-off analysis.
72
+
73
+ ### Permission Mode: Plan-like (read-only for code)
74
+
75
+ Design creates specifications, not code. All artifacts are markdown. Write tool used for spec files only.
76
+
77
+ **Tools:** Read, Glob, Grep, Task, AskUserQuestion, Write (for spec files only)
78
+
79
+ ---
80
+
81
+ ## 3. Protocol Structure
82
+
83
+ ```
84
+ Phase 1: SCOPE & CONTEXT (1 turn) Read brief, research context, frame challenge
85
+ Phase 2: ELEMENTS (1-2 turns) Define building blocks and properties [ECD: E]
86
+ Phase 3: CONNECTIONS (1-2 turns) Map relationships and structure [ECD: C]
87
+ Phase 4: DYNAMICS (2-3 turns) Define behaviors, rules, and edge cases [ECD: D]
88
+ Phase 5: FORMALIZATION (1 turn) Draft spec, validate, approve, save
89
+ ```
90
+
91
+ **Total:** 6-9 turns per item. Shorter than discovery because scope is narrower (one item, not the whole problem).
92
+
93
+ ---
94
+
95
+ ## 4. Design Loop Architecture
96
+
97
+ Design runs once per flagged item, with handoff managing the loop:
98
+
99
+ ```
100
+ handoff (plan→design): presents items, user confirms, generates brief for item 1
101
+ → design (item 1): ECD exploration, saves design_spec_item1.md
102
+ → handoff (design→design): processes spec, generates brief for item 2
103
+ → design (item 2): ECD exploration, saves design_spec_item2.md
104
+ → handoff (design→design): processes spec, generates brief for item 3
105
+ → design (item 3): ECD exploration, saves design_spec_item3.md
106
+ → handoff (design→execute): all items done, generates execution_brief.md
107
+ ```
108
+
109
+ **Key properties:**
110
+ - Each design invocation focuses on ONE item (narrow scope, high quality)
111
+ - Handoff tracks which items are completed, pending, or skipped
112
+ - User gets natural breakpoints between items
113
+ - Execute gets ALL design specs before starting (full picture for parallelization)
114
+ - No skip-to-execute mid-loop — complete all confirmed items first
115
+
116
+ ---
117
+
118
+ ## 5. Plan Integration: Auto-Flagging
119
+
120
+ Plan assesses every task for design readiness using a 95% threshold:
121
+
122
+ **Flag as DESIGN REQUIRED if:**
123
+ - Novel territory (no existing pattern)
124
+ - Multiple valid approaches (lasting consequences)
125
+ - User-facing decisions (layout, creative, UX, tone)
126
+ - Complex interactions (interfaces need definition)
127
+ - Ambiguous scope (HOW has genuine options)
128
+
129
+ **Plan output includes:**
130
+ ```markdown
131
+ ### Design Recommendations
132
+
133
+ | Task(s) | Item Name | Recommendation | Rationale |
134
+ |---------|-----------|---------------|-----------|
135
+ | Task 3, 4 | Behavior Tree AI | DESIGN REQUIRED | Novel architecture, multiple approaches |
136
+ | Task 7 | Combat UI | DESIGN REQUIRED | User-facing layout decisions |
137
+ | Task 1, 2 | Core Data Model | Ready for execution | Follows existing patterns |
138
+ ```
139
+
140
+ ---
141
+
142
+ ## 6. Output Format
143
+
144
+ Saved to `docs/project_notes/design_spec_[item_name].md`. Content adapts to the domain being designed. See SKILL.md for full format.
145
+
146
+ ---
147
+
148
+ ## 7. State Schema (v3.0)
149
+
150
+ ```json
151
+ {
152
+ "initialized": true,
153
+ "version": "3.0",
154
+ "workflow": {
155
+ "status": "none | prompt | planning | design | executing | complete",
156
+ "prompt": { "started": false, "completed": false, "completed_at": null, "output_files": [] },
157
+ "planning": { "started": false, "completed": false, "completed_at": null, "approved": false },
158
+ "design": {
159
+ "started": false,
160
+ "completed": false,
161
+ "completed_at": null,
162
+ "items": [
163
+ {
164
+ "name": "item_name_snake_case",
165
+ "display_name": "Human Readable Name",
166
+ "status": "pending | in_progress | completed | skipped",
167
+ "plan_tasks": [3, 4, 5],
168
+ "spec_file": null,
169
+ "flagged_reason": "Why plan flagged this"
170
+ }
171
+ ],
172
+ "current_item": null
173
+ },
174
+ "execution": { "started": false, "completed": false, "completed_at": null }
175
+ },
176
+ "last_handoff": null,
177
+ "last_handoff_transition": null
178
+ }
179
+ ```
180
+
181
+ ---
182
+
183
+ ## 8. Handoff Transitions
184
+
185
+ | # | Transition | Input | Output |
186
+ |---|-----------|-------|--------|
187
+ | 1 | prompt → plan | discovery_brief.md, discovery_output.json | planning_brief.md |
188
+ | 2 | plan → design | plan.md | design_brief.md (first item) |
189
+ | 3 | design → design | design_spec_[item].md | design_brief.md (next item) |
190
+ | 4 | design → execute | all design_spec_*.md, plan.md | execution_brief.md |
191
+ | 4B | plan → execute (skip) | plan.md | execution_brief.md |
192
+ | 5 | execute → complete | execution results | completion summary |
193
+
194
+ ---
195
+
196
+ ## 9. Critical Rules
197
+
198
+ 1. You MUST read design_brief.md before designing. If missing, route to handoff.
199
+ 2. You MUST launch context research in Phase 1 before first question.
200
+ 3. You MUST use ECD coverage tracking. Formalization only when E, C, D are sufficient.
201
+ 4. You MUST ask exactly ONE question per turn via AskUserQuestion.
202
+ 5. You MUST present 2-4 sentences of analysis BEFORE every question.
203
+ 6. You MUST be domain-agnostic. Adapt language to the domain being designed.
204
+ 7. You MUST validate against Design Completeness Checklist before presenting draft.
205
+ 8. You MUST save spec to `docs/project_notes/design_spec_[item_name].md`.
206
+ 9. You MUST route to `/intuition-handoff` after saving. NEVER to `/intuition-execute`.
207
+ 10. You MUST NOT write code — specifications only.
208
+ 11. You MUST NOT modify plan.md or discovery_brief.md.
209
+ 12. You MUST NOT manage .project-memory-state.json — handoff owns state.
210
+
211
+ ---
212
+
213
+ ## 10. Migration from v5.0
214
+
215
+ - Discovery skill removed entirely
216
+ - Prompt becomes sole entry point for problem understanding
217
+ - State schema v2.0 → v3.0 (`discovery` → `prompt`, added `design` phase)
218
+ - Install script auto-removes old `intuition-discovery` from ~/.claude/skills/
219
+ - Start skill no longer offers discovery/prompt choice — directs to prompt only
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tgoodington/intuition",
3
- "version": "5.0.0",
4
- "description": "Three-agent system for software project planning and execution. Waldo (discovery), Magellan (planning), Faraday (execution) with file-based handoffs through project memory.",
3
+ "version": "6.0.0",
4
+ "description": "Four-phase workflow system for Claude Code: prompt, plan, design, execute. Domain-agnostic design exploration with ECD framework, iterative design loop, and file-based handoffs through project memory.",
5
5
  "keywords": [
6
6
  "claude-code",
7
7
  "skills",
@@ -3,8 +3,8 @@
3
3
  /**
4
4
  * Installation script for Intuition skills
5
5
  *
6
- * This script is run after `npm install -g intuition`
7
- * It copies the /plan and /execute skills to ~/.claude/skills/ for global access
6
+ * This script is run after `npm install -g @tgoodington/intuition`
7
+ * It copies skills to ~/.claude/skills/ for global access
8
8
  */
9
9
 
10
10
  const fs = require('fs');
@@ -39,13 +39,26 @@ function error(msg) {
39
39
  console.error(`[intuition-install] ERROR: ${msg}`);
40
40
  }
41
41
 
42
+ // All skills to install
43
+ const skills = [
44
+ 'intuition-start',
45
+ 'intuition-prompt',
46
+ 'intuition-handoff',
47
+ 'intuition-plan',
48
+ 'intuition-design',
49
+ 'intuition-execute',
50
+ 'intuition-initialize',
51
+ 'intuition-agent-advisor',
52
+ 'intuition-skill-guide',
53
+ 'intuition-update'
54
+ ];
55
+
42
56
  // Main installation logic
43
57
  try {
44
58
  const homeDir = os.homedir();
45
59
  const claudeSkillsDir = path.join(homeDir, '.claude', 'skills');
46
60
 
47
- // Get the location of the installed package (where this script is running from)
48
- // In npm global installation, this is typically in node_modules/intuition/
61
+ // Get the location of the installed package
49
62
  const packageRoot = path.dirname(path.dirname(path.resolve(__filename)));
50
63
 
51
64
  log(`Installing Intuition skills...`);
@@ -58,135 +71,40 @@ try {
58
71
  log(`Created ${claudeSkillsDir}`);
59
72
  }
60
73
 
61
- // Copy /intuition-start skill
62
- const startSrc = path.join(packageRoot, 'skills', 'intuition-start');
63
- const startDest = path.join(claudeSkillsDir, 'intuition-start');
64
-
65
- if (fs.existsSync(startSrc)) {
66
- copyDirRecursive(startSrc, startDest);
67
- log(`✓ Installed /intuition-start skill to ${startDest}`);
68
- } else {
69
- error(`intuition-start skill not found at ${startSrc}`);
70
- process.exit(1);
71
- }
72
-
73
- // Copy /intuition-plan skill
74
- const planSrc = path.join(packageRoot, 'skills', 'intuition-plan');
75
- const planDest = path.join(claudeSkillsDir, 'intuition-plan');
76
-
77
- if (fs.existsSync(planSrc)) {
78
- copyDirRecursive(planSrc, planDest);
79
- log(`✓ Installed /intuition-plan skill to ${planDest}`);
80
- } else {
81
- error(`intuition-plan skill not found at ${planSrc}`);
82
- process.exit(1);
83
- }
84
-
85
- // Copy /intuition-execute skill
86
- const executeSrc = path.join(packageRoot, 'skills', 'intuition-execute');
87
- const executeDest = path.join(claudeSkillsDir, 'intuition-execute');
88
-
89
- if (fs.existsSync(executeSrc)) {
90
- copyDirRecursive(executeSrc, executeDest);
91
- log(`✓ Installed /intuition-execute skill to ${executeDest}`);
92
- } else {
93
- error(`intuition-execute skill not found at ${executeSrc}`);
94
- process.exit(1);
95
- }
96
-
97
- // Copy /intuition-initialize skill
98
- const initializeSrc = path.join(packageRoot, 'skills', 'intuition-initialize');
99
- const initializeDest = path.join(claudeSkillsDir, 'intuition-initialize');
100
-
101
- if (fs.existsSync(initializeSrc)) {
102
- copyDirRecursive(initializeSrc, initializeDest);
103
- log(`✓ Installed /intuition-initialize skill to ${initializeDest}`);
104
- } else {
105
- error(`intuition-initialize skill not found at ${initializeSrc}`);
106
- process.exit(1);
74
+ // Remove old discovery skill if it exists (replaced by design in v6.0)
75
+ const oldDiscoveryDest = path.join(claudeSkillsDir, 'intuition-discovery');
76
+ if (fs.existsSync(oldDiscoveryDest)) {
77
+ fs.rmSync(oldDiscoveryDest, { recursive: true, force: true });
78
+ log(`Removed old /intuition-discovery skill (replaced by /intuition-design in v6.0)`);
107
79
  }
108
80
 
109
- // Copy /intuition-discovery skill
110
- const discoverySrc = path.join(packageRoot, 'skills', 'intuition-discovery');
111
- const discoveryDest = path.join(claudeSkillsDir, 'intuition-discovery');
81
+ // Install each skill
82
+ skills.forEach(skillName => {
83
+ const src = path.join(packageRoot, 'skills', skillName);
84
+ const dest = path.join(claudeSkillsDir, skillName);
112
85
 
113
- if (fs.existsSync(discoverySrc)) {
114
- copyDirRecursive(discoverySrc, discoveryDest);
115
- log(`✓ Installed /intuition-discovery skill to ${discoveryDest}`);
116
- } else {
117
- error(`intuition-discovery skill not found at ${discoverySrc}`);
118
- process.exit(1);
119
- }
120
-
121
- // Copy /intuition-handoff skill
122
- const handoffSrc = path.join(packageRoot, 'skills', 'intuition-handoff');
123
- const handoffDest = path.join(claudeSkillsDir, 'intuition-handoff');
124
-
125
- if (fs.existsSync(handoffSrc)) {
126
- copyDirRecursive(handoffSrc, handoffDest);
127
- log(`✓ Installed /intuition-handoff skill to ${handoffDest}`);
128
- } else {
129
- error(`intuition-handoff skill not found at ${handoffSrc}`);
130
- process.exit(1);
131
- }
132
-
133
- // Copy /intuition-agent-advisor skill
134
- const agentAdvisorSrc = path.join(packageRoot, 'skills', 'intuition-agent-advisor');
135
- const agentAdvisorDest = path.join(claudeSkillsDir, 'intuition-agent-advisor');
136
-
137
- if (fs.existsSync(agentAdvisorSrc)) {
138
- copyDirRecursive(agentAdvisorSrc, agentAdvisorDest);
139
- log(`✓ Installed /intuition-agent-advisor skill to ${agentAdvisorDest}`);
140
- } else {
141
- error(`intuition-agent-advisor skill not found at ${agentAdvisorSrc}`);
142
- process.exit(1);
143
- }
144
-
145
- // Copy /intuition-skill-guide skill
146
- const skillGuideSrc = path.join(packageRoot, 'skills', 'intuition-skill-guide');
147
- const skillGuideDest = path.join(claudeSkillsDir, 'intuition-skill-guide');
148
-
149
- if (fs.existsSync(skillGuideSrc)) {
150
- copyDirRecursive(skillGuideSrc, skillGuideDest);
151
- log(`✓ Installed /intuition-skill-guide skill to ${skillGuideDest}`);
152
- } else {
153
- error(`intuition-skill-guide skill not found at ${skillGuideSrc}`);
154
- process.exit(1);
155
- }
156
-
157
- // Copy /intuition-update skill
158
- const updateSrc = path.join(packageRoot, 'skills', 'intuition-update');
159
- const updateDest = path.join(claudeSkillsDir, 'intuition-update');
160
-
161
- if (fs.existsSync(updateSrc)) {
162
- copyDirRecursive(updateSrc, updateDest);
163
- log(`✓ Installed /intuition-update skill to ${updateDest}`);
164
- } else {
165
- error(`intuition-update skill not found at ${updateSrc}`);
166
- process.exit(1);
167
- }
168
-
169
- // Copy /intuition-prompt skill
170
- const promptSrc = path.join(packageRoot, 'skills', 'intuition-prompt');
171
- const promptDest = path.join(claudeSkillsDir, 'intuition-prompt');
172
-
173
- if (fs.existsSync(promptSrc)) {
174
- copyDirRecursive(promptSrc, promptDest);
175
- log(`✓ Installed /intuition-prompt skill to ${promptDest}`);
176
- } else {
177
- error(`intuition-prompt skill not found at ${promptSrc}`);
178
- process.exit(1);
179
- }
86
+ if (fs.existsSync(src)) {
87
+ copyDirRecursive(src, dest);
88
+ log(`\u2713 Installed /${skillName} skill to ${dest}`);
89
+ } else {
90
+ error(`${skillName} skill not found at ${src}`);
91
+ process.exit(1);
92
+ }
93
+ });
180
94
 
181
95
  // Verify installation
182
- if (fs.existsSync(startDest) && fs.existsSync(planDest) && fs.existsSync(executeDest) && fs.existsSync(initializeDest) && fs.existsSync(discoveryDest) && fs.existsSync(handoffDest) && fs.existsSync(agentAdvisorDest) && fs.existsSync(skillGuideDest) && fs.existsSync(updateDest) && fs.existsSync(promptDest)) {
183
- log(`✓ Installation complete!`);
96
+ const allInstalled = skills.every(skillName =>
97
+ fs.existsSync(path.join(claudeSkillsDir, skillName))
98
+ );
99
+
100
+ if (allInstalled) {
101
+ log(`\u2713 Installation complete!`);
184
102
  log(`Skills are now available globally:`);
185
103
  log(` /intuition-start - Load project context and detect workflow phase`);
186
- log(` /intuition-discovery - Exploratory discovery (research-informed dialogue)`);
187
104
  log(` /intuition-prompt - Focused discovery (prompt-engineering refinement)`);
188
- log(` /intuition-handoff - Handoff orchestrator (phase transitions)`);
189
- log(` /intuition-plan - Strategic planning (ARCH protocol)`);
105
+ log(` /intuition-handoff - Handoff orchestrator (phase transitions + design loop)`);
106
+ log(` /intuition-plan - Strategic planning (ARCH protocol + design flagging)`);
107
+ log(` /intuition-design - Design exploration (ECD framework, domain-agnostic)`);
190
108
  log(` /intuition-execute - Execution orchestrator (subagent delegation)`);
191
109
  log(` /intuition-initialize - Project initialization (set up project memory)`);
192
110
  log(` /intuition-agent-advisor - Expert advisor on building custom agents`);
@@ -3,8 +3,8 @@
3
3
  /**
4
4
  * Uninstallation script for Intuition skills
5
5
  *
6
- * This script is run before `npm uninstall -g intuition`
7
- * It removes the /plan and /execute skills from ~/.claude/skills/
6
+ * This script is run before `npm uninstall -g @tgoodington/intuition`
7
+ * It removes all Intuition skills from ~/.claude/skills/
8
8
  */
9
9
 
10
10
  const fs = require('fs');
@@ -40,20 +40,26 @@ try {
40
40
  process.exit(0);
41
41
  }
42
42
 
43
- // Remove all Intuition skills
43
+ // Remove all Intuition skills (current + legacy)
44
44
  const skillsToRemove = [
45
45
  'intuition-start',
46
- 'intuition-initialize',
47
- 'intuition-discovery',
46
+ 'intuition-prompt',
48
47
  'intuition-handoff',
49
48
  'intuition-plan',
50
- 'intuition-execute'
49
+ 'intuition-design',
50
+ 'intuition-execute',
51
+ 'intuition-initialize',
52
+ 'intuition-agent-advisor',
53
+ 'intuition-skill-guide',
54
+ 'intuition-update',
55
+ // Legacy skills (removed in v6.0)
56
+ 'intuition-discovery'
51
57
  ];
52
58
 
53
59
  skillsToRemove.forEach(skillName => {
54
60
  const skillDest = path.join(claudeSkillsDir, skillName);
55
61
  if (removeDir(skillDest)) {
56
- log(`✓ Removed /${skillName} skill from ${skillDest}`);
62
+ log(`\u2713 Removed /${skillName} skill from ${skillDest}`);
57
63
  }
58
64
  });
59
65
 
@@ -62,19 +68,21 @@ try {
62
68
  const remaining = fs.readdirSync(claudeSkillsDir);
63
69
  if (remaining.length === 0) {
64
70
  fs.rmSync(claudeSkillsDir, { force: true });
65
- log(`✓ Removed empty skills directory`);
71
+ log(`\u2713 Removed empty skills directory`);
66
72
 
67
73
  // Also clean up .claude if it's empty
68
74
  const claudeDir = path.join(homeDir, '.claude');
69
- const claudeRemaining = fs.readdirSync(claudeDir);
70
- if (claudeRemaining.length === 0) {
71
- fs.rmSync(claudeDir, { force: true });
72
- log(`✓ Removed empty .claude directory`);
75
+ if (fs.existsSync(claudeDir)) {
76
+ const claudeRemaining = fs.readdirSync(claudeDir);
77
+ if (claudeRemaining.length === 0) {
78
+ fs.rmSync(claudeDir, { force: true });
79
+ log(`\u2713 Removed empty .claude directory`);
80
+ }
73
81
  }
74
82
  }
75
83
  }
76
84
 
77
- log(`✓ Uninstallation complete!`);
85
+ log(`\u2713 Uninstallation complete!`);
78
86
 
79
87
  } catch (err) {
80
88
  error(`Uninstallation failed: ${err.message}`);