@dzhechkov/skills-feature-adr 1.1.0 → 1.3.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.
package/README.md CHANGED
@@ -9,14 +9,17 @@
9
9
  ## Quick Start
10
10
 
11
11
  ```bash
12
- # One-command install via npx
13
- npx @dzhechkov/skills-feature-adr
12
+ # Core install (feature-adr pipeline only)
13
+ npx @dzhechkov/skills-feature-adr init
14
+
15
+ # Full install with learning + knowledge extraction
16
+ npx @dzhechkov/skills-feature-adr init --with-learning --knowledge-extractor
14
17
 
15
18
  # Or install globally
16
19
  npm install -g @dzhechkov/skills-feature-adr
17
- skills-feature-adr init
20
+ skills-feature-adr init --with-learning --knowledge-extractor
18
21
 
19
- # Install into a project that already has @dzhechkov/keysarium
22
+ # Already have @dzhechkov/keysarium? Just install core (learning & harvest included)
20
23
  npx @dzhechkov/skills-feature-adr init
21
24
  ```
22
25
 
@@ -44,7 +47,10 @@ Everything is installed into your project's `.claude/` directory and works nativ
44
47
 
45
48
  ```bash
46
49
  npx @dzhechkov/skills-feature-adr # Full install (same as init)
47
- npx @dzhechkov/skills-feature-adr init # Install all components
50
+ npx @dzhechkov/skills-feature-adr init # Install core components
51
+ npx @dzhechkov/skills-feature-adr init --with-learning # + reward learning
52
+ npx @dzhechkov/skills-feature-adr init --knowledge-extractor # + knowledge extractor
53
+ npx @dzhechkov/skills-feature-adr init --with-learning --knowledge-extractor # + both
48
54
  npx @dzhechkov/skills-feature-adr init --force # Overwrite existing files
49
55
  npx @dzhechkov/skills-feature-adr init --dry-run # Preview without making changes
50
56
  npx @dzhechkov/skills-feature-adr update # Update to latest version
@@ -209,6 +215,50 @@ After installation, feature-adr auto-detects agentic-qe when you use the `--full
209
215
 
210
216
  ---
211
217
 
218
+ ## Optional Features: Learning & Knowledge Extraction
219
+
220
+ Feature ADR can be extended with reward learning and knowledge extraction — no additional packages required.
221
+
222
+ ### `--with-learning` — Reward Learning
223
+
224
+ Adds the Memory Protocol and Reward Tracker. The pipeline **learns from your feedback** at every checkpoint:
225
+ - Stores reward scores based on your responses (immediate approval = 1.0, minor adjustments = 0.7, rework = 0.3)
226
+ - Loads historical patterns at the start of each step
227
+ - Detects domain-specific bottlenecks and skill effectiveness trends
228
+
229
+ ```bash
230
+ npx @dzhechkov/skills-feature-adr init --with-learning
231
+ ```
232
+
233
+ **Installs:** `lib/memory-protocol.md`, `lib/reward-tracker.md`, `.claude/rules/reward-learning.md`
234
+
235
+ ### `--knowledge-extractor` — Knowledge Harvesting
236
+
237
+ Adds the Knowledge Extractor skill with the `/harvest` command. After completing a feature, extract reusable patterns:
238
+
239
+ ```bash
240
+ npx @dzhechkov/skills-feature-adr init --knowledge-extractor
241
+
242
+ # After completing a feature:
243
+ /harvest features/<feature-slug>/
244
+ ```
245
+
246
+ **Installs:** `.claude/skills/knowledge-extractor/` (5 agents, 7 categories, 8 quality gates), `.claude/commands/harvest.md`
247
+
248
+ ### Both at once
249
+
250
+ ```bash
251
+ npx @dzhechkov/skills-feature-adr init --with-learning --knowledge-extractor
252
+ ```
253
+
254
+ ### Already using `@dzhechkov/keysarium`?
255
+
256
+ > **If you have `@dzhechkov/keysarium` installed, these flags are not needed.**
257
+ > Keysarium already includes reward learning, knowledge extraction, and more.
258
+ > The installer auto-detects keysarium and skips optional components to avoid duplication.
259
+
260
+ ---
261
+
212
262
  ## Shared Skills
213
263
 
214
264
  Feature ADR uses these skills from `@dzhechkov/keysarium` (if installed):
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@dzhechkov/skills-feature-adr",
3
- "version": "1.1.0",
4
- "description": "Adaptive Feature Development skill pack for Claude Code — 11-step pipeline with Complexity Router (S/M/L/XL), ADR-driven architecture, 15 agentic-qe skills, and multi-agent fleet QE. Supports --full-qe and --full-qe-extended modes.",
3
+ "version": "1.3.0",
4
+ "description": "Adaptive Feature Development skill pack for Claude Code — 11-step pipeline with Complexity Router (S/M/L/XL), ADR-driven architecture, 15 agentic-qe skills, multi-agent fleet QE. Supports --full-qe, --full-qe-extended, --with-learning, and --knowledge-extractor modes.",
5
5
  "main": "src/cli.js",
6
6
  "bin": {
7
7
  "skills-feature-adr": "./bin/cli.js"
@@ -30,7 +30,10 @@
30
30
  "quality-engineering",
31
31
  "agentic-qe",
32
32
  "shift-left",
33
- "fleet-qe"
33
+ "fleet-qe",
34
+ "reward-learning",
35
+ "knowledge-extractor",
36
+ "harvest"
34
37
  ],
35
38
  "author": "dzhechko",
36
39
  "license": "MIT",
package/src/cli.js CHANGED
@@ -10,7 +10,7 @@ function showBanner() {
10
10
  console.log('');
11
11
  console.log(cyan('\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557'));
12
12
  console.log(cyan('\u2551') + bold(' FEATURE-ADR \u2014 Adaptive Feature Development ') + cyan('\u2551'));
13
- console.log(cyan('\u2551') + ' 9-step pipeline with Complexity Router (S/M/L/XL) ' + cyan('\u2551'));
13
+ console.log(cyan('\u2551') + ' 11-step pipeline with Complexity Router (S/M/L/XL) ' + cyan('\u2551'));
14
14
  console.log(cyan('\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D'));
15
15
  console.log('');
16
16
  }
@@ -37,20 +37,24 @@ function showHelp() {
37
37
  console.log(' ' + green('doctor') + ' Check Feature ADR installation health');
38
38
  console.log('');
39
39
  console.log(bold('Options:'));
40
- console.log(' ' + yellow('--force') + ' Overwrite existing files without prompting');
41
- console.log(' ' + yellow('--dry-run') + ' Show what would be done without making changes');
42
- console.log(' ' + yellow('--help, -h') + ' Show this help message');
43
- console.log(' ' + yellow('--version, -v') + ' Show version number');
40
+ console.log(' ' + yellow('--force') + ' Overwrite existing files without prompting');
41
+ console.log(' ' + yellow('--dry-run') + ' Show what would be done without making changes');
42
+ console.log(' ' + yellow('--with-learning') + ' Add reward learning (memory protocol + reward tracker)');
43
+ console.log(' ' + yellow('--knowledge-extractor') + ' Add knowledge extractor skill (/harvest)');
44
+ console.log(' ' + yellow('--help, -h') + ' Show this help message');
45
+ console.log(' ' + yellow('--version, -v') + ' Show version number');
44
46
  console.log('');
45
47
  console.log(bold('Examples:'));
46
48
  console.log(dim(' $ ') + 'npx @dzhechkov/skills-feature-adr init');
49
+ console.log(dim(' $ ') + 'npx @dzhechkov/skills-feature-adr init --with-learning');
50
+ console.log(dim(' $ ') + 'npx @dzhechkov/skills-feature-adr init --with-learning --knowledge-extractor');
47
51
  console.log(dim(' $ ') + 'npx @dzhechkov/skills-feature-adr init --force');
48
- console.log(dim(' $ ') + 'npx @dzhechkov/skills-feature-adr update --dry-run');
49
52
  console.log(dim(' $ ') + 'npx @dzhechkov/skills-feature-adr doctor');
50
53
  console.log('');
51
54
  console.log(bold('Integration:'));
52
55
  console.log(' Works alongside @dzhechkov/keysarium and @dzhechkov/skills-bto.');
53
- console.log(' Install all three for the full toolkit.');
56
+ console.log(' If @dzhechkov/keysarium is already installed, --with-learning and');
57
+ console.log(' --knowledge-extractor are not needed (already included in keysarium).');
54
58
  console.log('');
55
59
  }
56
60
 
@@ -63,6 +67,8 @@ function parseArgs(argv) {
63
67
  const flags = {
64
68
  force: false,
65
69
  dryRun: false,
70
+ withLearning: false,
71
+ knowledgeExtractor: false,
66
72
  targetDir: process.cwd(),
67
73
  };
68
74
 
@@ -76,6 +82,12 @@ function parseArgs(argv) {
76
82
  case '--dry-run':
77
83
  flags.dryRun = true;
78
84
  break;
85
+ case '--with-learning':
86
+ flags.withLearning = true;
87
+ break;
88
+ case '--knowledge-extractor':
89
+ flags.knowledgeExtractor = true;
90
+ break;
79
91
  case '--help':
80
92
  case '-h':
81
93
  command = 'help';
@@ -8,7 +8,7 @@ const {
8
8
  copyDirRecursive, copyDirFiltered, fileExists, readJSON,
9
9
  ensureDir, getRelativePaths, getRelativePathsFiltered,
10
10
  createManifest, writeManifest, getTemplatesDir,
11
- COMPONENTS, MANIFEST_FILE, getComponentFilter,
11
+ COMPONENTS, OPTIONAL_COMPONENTS, MANIFEST_FILE, getComponentFilter,
12
12
  } = require('../utils');
13
13
 
14
14
  // ---------------------------------------------------------------------------
@@ -47,6 +47,13 @@ function installComponent(key, comp, templatesDir, targetDir) {
47
47
  return [];
48
48
  }
49
49
 
50
+ // Single file copy (for isFile components)
51
+ if (comp.isFile) {
52
+ ensureDir(path.dirname(dest));
53
+ fs.copyFileSync(src, dest);
54
+ return [comp.src];
55
+ }
56
+
50
57
  const filterFn = getComponentFilter(comp);
51
58
 
52
59
  if (filterFn) {
@@ -58,12 +65,33 @@ function installComponent(key, comp, templatesDir, targetDir) {
58
65
  return getRelativePaths(dest).map((rel) => path.join(comp.src, rel));
59
66
  }
60
67
 
68
+ // Resolve which optional component keys to install based on flags
69
+ function getOptionalKeys(flags, keysariumDetected) {
70
+ if (keysariumDetected) return []; // keysarium already provides these
71
+
72
+ const keys = [];
73
+
74
+ if (flags.withLearning) {
75
+ for (const [key, comp] of Object.entries(OPTIONAL_COMPONENTS)) {
76
+ if (comp.group === 'learning') keys.push(key);
77
+ }
78
+ }
79
+
80
+ if (flags.knowledgeExtractor) {
81
+ for (const [key, comp] of Object.entries(OPTIONAL_COMPONENTS)) {
82
+ if (comp.group === 'knowledge-extractor') keys.push(key);
83
+ }
84
+ }
85
+
86
+ return keys;
87
+ }
88
+
61
89
  // ---------------------------------------------------------------------------
62
90
  // Main command
63
91
  // ---------------------------------------------------------------------------
64
92
 
65
93
  async function run(options) {
66
- const { force, dryRun, targetDir } = options;
94
+ const { force, dryRun, targetDir, withLearning, knowledgeExtractor } = options;
67
95
  const manifestPath = path.join(targetDir, MANIFEST_FILE);
68
96
 
69
97
  // ── a) Check for existing installation ─────────────────────────────────
@@ -78,12 +106,23 @@ async function run(options) {
78
106
 
79
107
  // ── b) Detect keysarium integration ────────────────────────────────────
80
108
  const keysariumManifest = detectKeysarium(targetDir);
109
+ const keysariumDetected = !!keysariumManifest;
110
+
81
111
  if (keysariumManifest) {
82
112
  showKeysariumIntegration(keysariumManifest);
83
113
  }
84
114
 
115
+ // Warn if flags used but keysarium already provides these
116
+ if (keysariumDetected && (withLearning || knowledgeExtractor)) {
117
+ console.log('');
118
+ warn('Keysarium is already installed \u2014 it includes learning and knowledge extraction.');
119
+ info('Flags --with-learning and --knowledge-extractor are not needed. Skipping optional components.');
120
+ console.log('');
121
+ }
122
+
85
123
  // ── c) Determine components ────────────────────────────────────────────
86
124
  const componentKeys = Object.keys(COMPONENTS);
125
+ const optionalKeys = getOptionalKeys(options, keysariumDetected);
87
126
  const templatesDir = getTemplatesDir();
88
127
 
89
128
  // ── d) Show plan ───────────────────────────────────────────────────────
@@ -97,6 +136,16 @@ async function run(options) {
97
136
  console.log(` ${green('+')} ${comp.label}${filterNote}`);
98
137
  }
99
138
 
139
+ if (optionalKeys.length > 0) {
140
+ console.log('');
141
+ info(bold('Optional components:'));
142
+ console.log('');
143
+ for (const key of optionalKeys) {
144
+ const comp = OPTIONAL_COMPONENTS[key];
145
+ console.log(` ${yellow('+')} ${comp.label}`);
146
+ }
147
+ }
148
+
100
149
  console.log('');
101
150
 
102
151
  if (dryRun) {
@@ -104,14 +153,25 @@ async function run(options) {
104
153
  process.exit(0);
105
154
  }
106
155
 
107
- // ── e) Install components ──────────────────────────────────────────────
108
- const totalComponents = componentKeys.length;
156
+ // ── e) Install core components ─────────────────────────────────────────
157
+ const totalComponents = componentKeys.length + optionalKeys.length;
109
158
  const installedFiles = [];
159
+ let stepNum = 0;
110
160
 
111
- for (let i = 0; i < totalComponents; i++) {
112
- const key = componentKeys[i];
161
+ for (const key of componentKeys) {
162
+ stepNum++;
113
163
  const comp = COMPONENTS[key];
114
- step(i + 1, totalComponents, `Installing ${comp.label}...`);
164
+ step(stepNum, totalComponents, `Installing ${comp.label}...`);
165
+
166
+ const files = installComponent(key, comp, templatesDir, targetDir);
167
+ installedFiles.push(...files);
168
+ }
169
+
170
+ // ── e2) Install optional components ────────────────────────────────────
171
+ for (const key of optionalKeys) {
172
+ stepNum++;
173
+ const comp = OPTIONAL_COMPONENTS[key];
174
+ step(stepNum, totalComponents, `Installing ${comp.label}...`);
115
175
 
116
176
  const files = installComponent(key, comp, templatesDir, targetDir);
117
177
  installedFiles.push(...files);
@@ -122,7 +182,15 @@ async function run(options) {
122
182
  const pkg = readJSON(pkgPath);
123
183
  const version = pkg ? pkg.version : '0.0.0';
124
184
 
125
- const manifest = createManifest(version, componentKeys, installedFiles.sort());
185
+ const allKeys = [...componentKeys, ...optionalKeys];
186
+ const manifest = createManifest(version, allKeys, installedFiles.sort());
187
+
188
+ // Track optional features in manifest
189
+ manifest.optional = {
190
+ withLearning: optionalKeys.some((k) => OPTIONAL_COMPONENTS[k]?.group === 'learning'),
191
+ knowledgeExtractor: optionalKeys.some((k) => OPTIONAL_COMPONENTS[k]?.group === 'knowledge-extractor'),
192
+ };
193
+
126
194
  writeManifest(targetDir, manifest);
127
195
  info(`Created ${MANIFEST_FILE} manifest`);
128
196
 
@@ -136,6 +204,10 @@ async function run(options) {
136
204
  const comp = COMPONENTS[key];
137
205
  console.log(` ${green('\u2713')} ${comp.label}`);
138
206
  }
207
+ for (const key of optionalKeys) {
208
+ const comp = OPTIONAL_COMPONENTS[key];
209
+ console.log(` ${green('\u2713')} ${comp.label} ${yellow('[optional]')}`);
210
+ }
139
211
 
140
212
  console.log('');
141
213
  console.log(bold('Next steps:'));
@@ -143,6 +215,14 @@ async function run(options) {
143
215
  console.log(` 2. Run ${cyan('/feature-adr [description]')} to start the pipeline`);
144
216
  console.log(` 3. The Complexity Router will classify your feature as S/M/L/XL`);
145
217
  console.log(` 4. Then the pipeline adapts: fewer steps for S, full DAG for XL`);
218
+
219
+ if (manifest.optional.withLearning) {
220
+ console.log(` 5. Reward learning is active \u2014 pipeline improves from your feedback`);
221
+ }
222
+ if (manifest.optional.knowledgeExtractor) {
223
+ console.log(` ${manifest.optional.withLearning ? '6' : '5'}. Run ${cyan('/harvest features/<slug>/')} after completing a feature to extract knowledge`);
224
+ }
225
+
146
226
  console.log('');
147
227
 
148
228
  console.log(bold('Complexity Tiers:'));
@@ -152,10 +232,19 @@ async function run(options) {
152
232
  console.log(` ${bold('XL')} ${dim('\u2014 30+ files, ~4h+ (Full DAG + multi-agent swarm)')}`);
153
233
  console.log('');
154
234
 
235
+ if (!withLearning && !knowledgeExtractor && !keysariumDetected) {
236
+ console.log(bold('Optional features:'));
237
+ console.log(` ${dim('Add reward learning:')} npx @dzhechkov/skills-feature-adr init --with-learning --force`);
238
+ console.log(` ${dim('Add knowledge extractor:')} npx @dzhechkov/skills-feature-adr init --knowledge-extractor --force`);
239
+ console.log(` ${dim('Add both:')} npx @dzhechkov/skills-feature-adr init --with-learning --knowledge-extractor --force`);
240
+ console.log('');
241
+ }
242
+
155
243
  if (keysariumManifest) {
156
244
  console.log(bold('Integration:'));
157
245
  console.log(` Feature ADR is available alongside your Keysarium pipeline.`);
158
246
  console.log(` Use ${cyan('/casarium')} for research, ${cyan('/feature-adr')} for feature development.`);
247
+ console.log(` Learning and knowledge extraction are provided by Keysarium.`);
159
248
  console.log('');
160
249
  }
161
250
 
package/src/utils.js CHANGED
@@ -247,9 +247,24 @@ function getTemplatesDir() {
247
247
  const COMPONENTS = {
248
248
  skill: {
249
249
  src: '.claude/skills/feature-adr',
250
- label: 'Feature ADR Skill (9 modules + 4 references)',
250
+ label: 'Feature ADR Skill (11 modules + references + agentic-qe)',
251
251
  group: 'core',
252
252
  },
253
+ skill_explore: {
254
+ src: '.claude/skills/explore',
255
+ label: 'Explore Skill (task clarification)',
256
+ group: 'deps',
257
+ },
258
+ skill_solver: {
259
+ src: '.claude/skills/problem-solver-enhanced',
260
+ label: 'Problem Solver Enhanced (TRIZ + Game Theory)',
261
+ group: 'deps',
262
+ },
263
+ skill_frontend: {
264
+ src: '.claude/skills/frontend-design',
265
+ label: 'Frontend Design Skill (UI implementation)',
266
+ group: 'deps',
267
+ },
253
268
  commands: {
254
269
  src: '.claude/commands',
255
270
  label: 'Feature ADR Command (1 command)',
@@ -270,6 +285,41 @@ const COMPONENTS = {
270
285
  },
271
286
  };
272
287
 
288
+ // Optional components — installed only with explicit flags
289
+ const OPTIONAL_COMPONENTS = {
290
+ // --with-learning
291
+ learning_lib_memory: {
292
+ src: 'lib/memory-protocol.md',
293
+ label: 'Memory Protocol (reward-calibrated learning)',
294
+ group: 'learning',
295
+ isFile: true,
296
+ },
297
+ learning_lib_reward: {
298
+ src: 'lib/reward-tracker.md',
299
+ label: 'Reward Tracker (analytics & pattern detection)',
300
+ group: 'learning',
301
+ isFile: true,
302
+ },
303
+ learning_rule: {
304
+ src: '.claude/rules/reward-learning.md',
305
+ label: 'Reward Learning Rules',
306
+ group: 'learning',
307
+ isFile: true,
308
+ },
309
+ // --knowledge-extractor
310
+ knowledge_extractor_skill: {
311
+ src: '.claude/skills/knowledge-extractor',
312
+ label: 'Knowledge Extractor Skill (5 agents, 7 categories, 8 gates)',
313
+ group: 'knowledge-extractor',
314
+ },
315
+ knowledge_extractor_command: {
316
+ src: '.claude/commands',
317
+ label: 'Harvest Command (/harvest)',
318
+ group: 'knowledge-extractor',
319
+ filter: 'harvest',
320
+ },
321
+ };
322
+
273
323
  // ===========================================================================
274
324
  // Filter helpers
275
325
  // ===========================================================================
@@ -328,6 +378,7 @@ module.exports = {
328
378
 
329
379
  // Components
330
380
  COMPONENTS,
381
+ OPTIONAL_COMPONENTS,
331
382
 
332
383
  // Filters
333
384
  getComponentFilter,
@@ -0,0 +1,218 @@
1
+ ---
2
+ name: explore
3
+ description: >
4
+ Adaptive task exploration and clarification skill for transforming vague
5
+ requests into actionable specifications. Use when a user presents any task,
6
+ problem, or goal that requires clarification before execution. Triggers on
7
+ ambiguous requests, complex multi-part tasks, "I want to...", "help me with...",
8
+ strategic decisions, product ideas, creative briefs, and any situation where
9
+ understanding the real need is essential before proposing solutions. Does NOT
10
+ provide solutions until task is fully explored.
11
+ trust_tier: 1
12
+ trust_tier_label: "Structured"
13
+ trust_tier_path: "Run /bto-test to promote to Tier 2"
14
+ ---
15
+
16
+ # Explore: Adaptive Task Clarification
17
+
18
+ Transform vague requests into crystal-clear, actionable task specifications through systematic Socratic questioning.
19
+
20
+ ## Core Philosophy
21
+
22
+ **Never solve before you understand.** Most failed solutions solve the wrong problem. This skill ensures the real problem is understood before any solution is proposed.
23
+
24
+ Key principles:
25
+ - Questions unlock understanding; answers often hide assumptions
26
+ - The stated goal is rarely the real goal
27
+ - Constraints reveal opportunities
28
+ - Success criteria prevent scope creep
29
+
30
+ ## Task Classification
31
+
32
+ Before asking questions, classify the task type to select appropriate exploration dimensions:
33
+
34
+ | Task Type | Indicators | Primary Dimensions |
35
+ |-----------|------------|-------------------|
36
+ | **Product/Feature** | "build", "create app", "develop" | Outcome, Users, Constraints, Success |
37
+ | **Problem Solving** | "fix", "solve", "issue with" | Root Cause, Constraints, Attempted Solutions |
38
+ | **Decision Making** | "should I", "choose between", "evaluate" | Criteria, Tradeoffs, Timeline, Reversibility |
39
+ | **Creative** | "write", "design", "make content" | Audience, Tone, Format, Examples |
40
+ | **Research** | "find out", "analyze", "understand" | Scope, Depth, Sources, Deliverable |
41
+ | **Process/Workflow** | "how to", "improve process" | Current State, Desired State, Blockers |
42
+
43
+ ## Exploration Dimensions
44
+
45
+ Select 3-5 dimensions based on task type. Each dimension has multiple question variants—choose the most natural for context.
46
+
47
+ ### 1. The Real Objective
48
+ Uncover what success truly looks like, beyond the stated request.
49
+
50
+ **Questions:**
51
+ - "If this worked perfectly, what would be different in your [work/life/business]?"
52
+ - "What outcome would make you say 'this was absolutely worth it'?"
53
+ - "Is this goal a means to something else, or the end itself?"
54
+ - "If you could wave a magic wand and have any result, what would you choose?"
55
+
56
+ **Red flags to probe:** Generic goals ("make it better"), proxy metrics, solutions presented as requirements.
57
+
58
+ ### 2. Constraints & Boundaries
59
+ Identify hard limits that shape the solution space.
60
+
61
+ **Questions:**
62
+ - "What's absolutely off the table—budget, time, technology, or approach-wise?"
63
+ - "What existing systems, processes, or decisions must this work with?"
64
+ - "Who needs to approve this, and what are their non-negotiables?"
65
+ - "What would disqualify a solution, even if it technically works?"
66
+
67
+ **Red flags to probe:** No constraints mentioned (usually means hidden ones), unrealistic expectations.
68
+
69
+ ### 3. Available Resources
70
+ Understand leverage points and existing assets.
71
+
72
+ **Questions:**
73
+ - "What do you already have that we could build on—data, tools, people, prior work?"
74
+ - "Who else is involved, and what can they contribute?"
75
+ - "What similar problems have you solved before, and what worked?"
76
+ - "What's your actual capacity to implement this?"
77
+
78
+ **Red flags to probe:** Overestimated capabilities, unacknowledged dependencies.
79
+
80
+ ### 4. Timeline & Urgency
81
+ Distinguish real deadlines from arbitrary ones.
82
+
83
+ **Questions:**
84
+ - "What happens if this takes 2x longer than expected?"
85
+ - "Is there a hard deadline, and what's driving it?"
86
+ - "Would you prefer a quick 80% solution or a slower 100% solution?"
87
+ - "What's the cost of delay vs. the cost of getting it wrong?"
88
+
89
+ **Red flags to probe:** Artificial urgency, no clear driver for deadline.
90
+
91
+ ### 5. Success Criteria
92
+ Define what "done" actually means.
93
+
94
+ **Questions:**
95
+ - "How will you know this is successful? What will you measure?"
96
+ - "Who decides if this is good enough, and what will they look for?"
97
+ - "What's the minimum viable outcome that would still be valuable?"
98
+ - "In 6 months, what would make you regret the approach we took?"
99
+
100
+ **Red flags to probe:** Vague criteria ("stakeholders will be happy"), moving targets.
101
+
102
+ ### 6. Attempted Solutions (for problems)
103
+ Learn from what hasn't worked.
104
+
105
+ **Questions:**
106
+ - "What have you already tried, and why didn't it work?"
107
+ - "What solutions have you considered but rejected?"
108
+ - "What would the obvious solution be, and why isn't that good enough?"
109
+
110
+ ### 7. Audience & Stakeholders (for products/content)
111
+ Understand who this serves.
112
+
113
+ **Questions:**
114
+ - "Who specifically will use this, and what's their context when they do?"
115
+ - "What does your audience already know or believe about this?"
116
+ - "Who might be negatively affected, and does that matter?"
117
+
118
+ ## Execution Protocol
119
+
120
+ ### Phase 1: Initial Assessment (1 turn)
121
+
122
+ 1. Parse the user's request
123
+ 2. Identify what's already clear from context
124
+ 3. Classify task type
125
+ 4. Select 3-5 most critical dimensions
126
+ 5. Note any immediate red flags or assumptions
127
+
128
+ ### Phase 2: Adaptive Questioning (3-7 turns)
129
+
130
+ **Rules:**
131
+ - Ask ONE question at a time
132
+ - Make questions specific and decision-shaping, not generic
133
+ - Challenge vague answers: "Can you be more specific about...?"
134
+ - Acknowledge answers before next question
135
+ - Skip dimensions already clarified
136
+ - Stop when you have enough to create a clear brief
137
+
138
+ **Question Sequencing:**
139
+ 1. Start with Real Objective (reveals the most)
140
+ 2. Follow with Constraints (narrows solution space)
141
+ 3. Then Success Criteria (defines done)
142
+ 4. Fill gaps with other dimensions as needed
143
+
144
+ **Adaptive behavior:**
145
+ - If user gives detailed answer → compress follow-ups
146
+ - If user seems frustrated → summarize and ask if they want to continue
147
+ - If contradiction detected → gently probe: "Earlier you mentioned X, but now Y—help me understand?"
148
+
149
+ ### Phase 3: Task Brief Synthesis (1 turn)
150
+
151
+ After sufficient exploration, synthesize into a **Task Brief**:
152
+
153
+ ```
154
+ ## Task Brief
155
+
156
+ **Objective:** [Clear statement of what we're actually solving]
157
+
158
+ **Context:** [Relevant background and constraints]
159
+
160
+ **Success Criteria:**
161
+ - [Measurable criterion 1]
162
+ - [Measurable criterion 2]
163
+
164
+ **Constraints:**
165
+ - [Hard constraint 1]
166
+ - [Hard constraint 2]
167
+
168
+ **Resources Available:** [What we can leverage]
169
+
170
+ **Timeline:** [Deadline and urgency level]
171
+
172
+ **Key Assumptions:** [Things we're assuming that could change the approach]
173
+
174
+ **Out of Scope:** [Explicitly excluded items]
175
+ ```
176
+
177
+ Ask user: "Does this capture what you need? Anything to add or correct?"
178
+
179
+ ### Phase 4: Handoff
180
+
181
+ Once validated, either:
182
+ - Proceed to solution (if user wants immediate help)
183
+ - Export brief for later use
184
+ - Suggest appropriate next steps/skills
185
+
186
+ ## Anti-Patterns to Avoid
187
+
188
+ ❌ **Interrogation mode:** Don't fire questions robotically
189
+ ❌ **Assuming context:** Don't skip clarification because you "think" you understand
190
+ ❌ **Premature solutions:** Don't hint at solutions before exploration is complete
191
+ ❌ **Over-questioning:** Stop when you have enough clarity
192
+ ❌ **Generic questions:** Each question should be tailored to this specific task
193
+ ❌ **Ignoring signals:** If user provides info proactively, don't re-ask
194
+
195
+ ## Example Flow
196
+
197
+ **User:** "I want to create a dashboard for my team"
198
+
199
+ **Claude (Phase 1 assessment):**
200
+ - Task type: Product/Feature
201
+ - Unclear: Who uses it, what data, what decisions it enables, timeline
202
+ - Dimensions needed: Real Objective, Audience, Constraints, Success Criteria
203
+
204
+ **Claude:** "Before we dive in—what decisions will your team make differently once they have this dashboard? What's the main insight they're missing today?"
205
+
206
+ *[User answers about tracking project delays]*
207
+
208
+ **Claude:** "Got it—so the core need is visibility into project health to catch delays early. How do you know a project is delayed today? What's the current process for catching these issues?"
209
+
210
+ *[Continues adaptively based on answers...]*
211
+
212
+ ## Integration Notes
213
+
214
+ After exploration, this skill can hand off to:
215
+ - problem-solver-enhanced (for complex problems)
216
+ - goap-research (for research tasks)
217
+ - frontend-design (for UI/product tasks)
218
+ - Any implementation skill with the structured Task Brief