agileflow 2.33.1 → 2.35.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.
Files changed (63) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +536 -0
  3. package/package.json +1 -1
  4. package/src/core/agents/adr-writer.md +3 -19
  5. package/src/core/agents/api.md +9 -43
  6. package/src/core/agents/ci.md +8 -40
  7. package/src/core/agents/configuration/archival.md +301 -0
  8. package/src/core/agents/configuration/attribution.md +318 -0
  9. package/src/core/agents/configuration/ci.md +1077 -0
  10. package/src/core/agents/configuration/git-config.md +511 -0
  11. package/src/core/agents/configuration/hooks.md +507 -0
  12. package/src/core/agents/configuration/verify.md +540 -0
  13. package/src/core/agents/devops.md +7 -35
  14. package/src/core/agents/documentation.md +0 -1
  15. package/src/core/agents/epic-planner.md +3 -22
  16. package/src/core/agents/mentor.md +8 -24
  17. package/src/core/agents/research.md +0 -7
  18. package/src/core/agents/security.md +0 -5
  19. package/src/core/agents/ui.md +8 -42
  20. package/src/core/commands/PATTERNS-AskUserQuestion.md +474 -0
  21. package/src/core/commands/adr.md +5 -0
  22. package/src/core/commands/agent.md +4 -0
  23. package/src/core/commands/assign.md +1 -0
  24. package/src/core/commands/auto.md +1 -1
  25. package/src/core/commands/babysit.md +147 -31
  26. package/src/core/commands/baseline.md +7 -0
  27. package/src/core/commands/blockers.md +2 -0
  28. package/src/core/commands/board.md +9 -0
  29. package/src/core/commands/configure.md +415 -0
  30. package/src/core/commands/context.md +1 -0
  31. package/src/core/commands/deps.md +2 -0
  32. package/src/core/commands/diagnose.md +0 -41
  33. package/src/core/commands/epic.md +8 -0
  34. package/src/core/commands/handoff.md +4 -0
  35. package/src/core/commands/impact.md +1 -1
  36. package/src/core/commands/metrics.md +10 -0
  37. package/src/core/commands/research.md +3 -0
  38. package/src/core/commands/retro.md +11 -1
  39. package/src/core/commands/sprint.md +2 -1
  40. package/src/core/commands/status.md +1 -0
  41. package/src/core/commands/story-validate.md +1 -1
  42. package/src/core/commands/story.md +29 -2
  43. package/src/core/commands/template.md +8 -0
  44. package/src/core/commands/update.md +1 -1
  45. package/src/core/commands/velocity.md +9 -0
  46. package/src/core/commands/verify.md +6 -0
  47. package/src/core/templates/validate-tokens.sh +0 -15
  48. package/src/core/templates/worktrees-guide.md +0 -4
  49. package/tools/agileflow-npx.js +21 -9
  50. package/tools/cli/commands/config.js +284 -0
  51. package/tools/cli/commands/doctor.js +221 -4
  52. package/tools/cli/commands/setup.js +4 -1
  53. package/tools/cli/commands/update.js +59 -15
  54. package/tools/cli/installers/core/installer.js +369 -37
  55. package/tools/cli/installers/ide/claude-code.js +1 -1
  56. package/tools/cli/installers/ide/cursor.js +1 -1
  57. package/tools/cli/installers/ide/windsurf.js +1 -1
  58. package/tools/cli/lib/docs-setup.js +52 -28
  59. package/tools/cli/lib/npm-utils.js +62 -0
  60. package/tools/cli/lib/ui.js +9 -2
  61. package/tools/postinstall.js +71 -13
  62. package/src/core/agents/context7.md +0 -164
  63. package/src/core/commands/setup.md +0 -708
@@ -27,7 +27,7 @@ class CursorSetup extends BaseIdeSetup {
27
27
  * @param {Object} options - Setup options
28
28
  */
29
29
  async setup(projectDir, agileflowDir, options = {}) {
30
- console.log(chalk.hex('#C15F3C')(` Setting up ${this.displayName}...`));
30
+ console.log(chalk.hex('#e8683a')(` Setting up ${this.displayName}...`));
31
31
 
32
32
  // Clean up old installation first
33
33
  await this.cleanup(projectDir);
@@ -27,7 +27,7 @@ class WindsurfSetup extends BaseIdeSetup {
27
27
  * @param {Object} options - Setup options
28
28
  */
29
29
  async setup(projectDir, agileflowDir, options = {}) {
30
- console.log(chalk.hex('#C15F3C')(` Setting up ${this.displayName}...`));
30
+ console.log(chalk.hex('#e8683a')(` Setting up ${this.displayName}...`));
31
31
 
32
32
  // Clean up old installation first
33
33
  await this.cleanup(projectDir);
@@ -9,6 +9,10 @@ const fs = require('fs-extra');
9
9
  const path = require('node:path');
10
10
  const chalk = require('chalk');
11
11
 
12
+ // Load AgileFlow version from package.json (used for docs metadata)
13
+ const packageJsonPath = path.join(__dirname, '..', '..', '..', 'package.json');
14
+ const packageJson = require(packageJsonPath);
15
+
12
16
  /**
13
17
  * Directory structure to create
14
18
  * @param {string} docsFolder - Name of the docs folder (default: "docs")
@@ -226,9 +230,12 @@ Use \`/AgileFlow:research\` to create new research notes.
226
230
  * Create docs structure with README files
227
231
  * @param {string} targetDir - Target directory for installation
228
232
  * @param {string} docsFolder - Name of the docs folder (default: "docs")
233
+ * @param {Object} options - Options
234
+ * @param {boolean} options.updateGitignore - Whether to create/update .gitignore (default: true)
229
235
  * @returns {Promise<Object>} Result object with counts
230
236
  */
231
- async function createDocsStructure(targetDir, docsFolder = 'docs') {
237
+ async function createDocsStructure(targetDir, docsFolder = 'docs', options = {}) {
238
+ const { updateGitignore = true } = options;
232
239
  const result = {
233
240
  success: false,
234
241
  counts: {
@@ -240,7 +247,7 @@ async function createDocsStructure(targetDir, docsFolder = 'docs') {
240
247
  };
241
248
 
242
249
  try {
243
- console.log(chalk.hex('#C15F3C')(`\nCreating ${docsFolder}/ structure...`));
250
+ console.log(chalk.hex('#e8683a')(`\nCreating ${docsFolder}/ structure...`));
244
251
 
245
252
  // Create directories
246
253
  const directories = getDirectoryStructure(docsFolder);
@@ -270,7 +277,7 @@ async function createDocsStructure(targetDir, docsFolder = 'docs') {
270
277
  const metadataPath = path.join(targetDir, docsFolder, '00-meta', 'agileflow-metadata.json');
271
278
  if (!fs.existsSync(metadataPath)) {
272
279
  const metadata = {
273
- version: '2.30.1',
280
+ version: packageJson.version,
274
281
  created: new Date().toISOString(),
275
282
  updated: new Date().toISOString(),
276
283
  docsFolder: docsFolder,
@@ -283,14 +290,29 @@ async function createDocsStructure(targetDir, docsFolder = 'docs') {
283
290
  result.counts.filesCreated++;
284
291
  console.log(chalk.green(` ✓ Created ${docsFolder}/00-meta/agileflow-metadata.json`));
285
292
  } else {
286
- // Update existing metadata with docsFolder if missing
293
+ // Update existing metadata (keep docsFolder and version in sync)
287
294
  try {
288
295
  const existing = JSON.parse(await fs.readFile(metadataPath, 'utf8'));
296
+ const updates = [];
297
+
289
298
  if (!existing.docsFolder) {
290
299
  existing.docsFolder = docsFolder;
300
+ updates.push('docsFolder');
301
+ }
302
+
303
+ if (existing.version !== packageJson.version) {
304
+ existing.version = packageJson.version;
305
+ updates.push('version');
306
+ }
307
+
308
+ if (updates.length > 0) {
291
309
  existing.updated = new Date().toISOString();
292
310
  await fs.writeFile(metadataPath, JSON.stringify(existing, null, 2), 'utf8');
293
- console.log(chalk.yellow(` ↻ Updated ${docsFolder}/00-meta/agileflow-metadata.json (added docsFolder)`));
311
+ console.log(
312
+ chalk.yellow(
313
+ ` ↻ Updated ${docsFolder}/00-meta/agileflow-metadata.json (${updates.join(', ')})`
314
+ )
315
+ );
294
316
  }
295
317
  } catch (err) {
296
318
  console.log(chalk.yellow(` ⚠ Could not update metadata: ${err.message}`));
@@ -358,30 +380,32 @@ Document your CI/CD workflows and configuration here.
358
380
  }
359
381
  }
360
382
 
361
- // Create .gitignore additions for docs folder
362
- const gitignorePath = path.join(targetDir, '.gitignore');
363
- const gitignoreEntries = [
364
- '.env',
365
- '.env.*',
366
- '!.env.example',
367
- '.DS_Store',
368
- 'node_modules/',
369
- 'dist/',
370
- 'build/',
371
- 'coverage/',
372
- ];
373
-
374
- if (fs.existsSync(gitignorePath)) {
375
- const existingGitignore = await fs.readFile(gitignorePath, 'utf8');
376
- const newEntries = gitignoreEntries.filter(entry => !existingGitignore.includes(entry));
377
- if (newEntries.length > 0) {
378
- await fs.appendFile(gitignorePath, '\n' + newEntries.join('\n') + '\n', 'utf8');
379
- console.log(chalk.yellow(` ↻ Updated .gitignore with ${newEntries.length} entries`));
383
+ if (updateGitignore) {
384
+ // Create .gitignore additions for docs folder
385
+ const gitignorePath = path.join(targetDir, '.gitignore');
386
+ const gitignoreEntries = [
387
+ '.env',
388
+ '.env.*',
389
+ '!.env.example',
390
+ '.DS_Store',
391
+ 'node_modules/',
392
+ 'dist/',
393
+ 'build/',
394
+ 'coverage/',
395
+ ];
396
+
397
+ if (fs.existsSync(gitignorePath)) {
398
+ const existingGitignore = await fs.readFile(gitignorePath, 'utf8');
399
+ const newEntries = gitignoreEntries.filter((entry) => !existingGitignore.includes(entry));
400
+ if (newEntries.length > 0) {
401
+ await fs.appendFile(gitignorePath, '\n' + newEntries.join('\n') + '\n', 'utf8');
402
+ console.log(chalk.yellow(` ↻ Updated .gitignore with ${newEntries.length} entries`));
403
+ }
404
+ } else {
405
+ await fs.writeFile(gitignorePath, gitignoreEntries.join('\n') + '\n', 'utf8');
406
+ result.counts.filesCreated++;
407
+ console.log(chalk.green(` ✓ Created .gitignore`));
380
408
  }
381
- } else {
382
- await fs.writeFile(gitignorePath, gitignoreEntries.join('\n') + '\n', 'utf8');
383
- result.counts.filesCreated++;
384
- console.log(chalk.green(` ✓ Created .gitignore`));
385
409
  }
386
410
 
387
411
  result.success = true;
@@ -0,0 +1,62 @@
1
+ /**
2
+ * AgileFlow CLI - npm Registry Utilities
3
+ *
4
+ * Utilities for interacting with the npm registry.
5
+ */
6
+
7
+ const https = require('https');
8
+
9
+ /**
10
+ * Get the latest version of a package from npm registry
11
+ * @param {string} packageName - Name of the package
12
+ * @returns {Promise<string|null>} Latest version or null if error
13
+ */
14
+ async function getLatestVersion(packageName) {
15
+ return new Promise((resolve) => {
16
+ const options = {
17
+ hostname: 'registry.npmjs.org',
18
+ port: 443,
19
+ path: `/${packageName}/latest`,
20
+ method: 'GET',
21
+ headers: {
22
+ 'User-Agent': 'agileflow-cli',
23
+ },
24
+ };
25
+
26
+ const req = https.request(options, (res) => {
27
+ let data = '';
28
+
29
+ res.on('data', (chunk) => {
30
+ data += chunk;
31
+ });
32
+
33
+ res.on('end', () => {
34
+ try {
35
+ if (res.statusCode === 200) {
36
+ const json = JSON.parse(data);
37
+ resolve(json.version || null);
38
+ } else {
39
+ resolve(null);
40
+ }
41
+ } catch (err) {
42
+ resolve(null);
43
+ }
44
+ });
45
+ });
46
+
47
+ req.on('error', () => {
48
+ resolve(null);
49
+ });
50
+
51
+ req.setTimeout(5000, () => {
52
+ req.destroy();
53
+ resolve(null);
54
+ });
55
+
56
+ req.end();
57
+ });
58
+ }
59
+
60
+ module.exports = {
61
+ getLatestVersion,
62
+ };
@@ -24,7 +24,7 @@ function displayLogo() {
24
24
  ██╔══██║██║ ██║██║██║ ██╔══╝ ██╔══╝ ██║ ██║ ██║██║███╗██║
25
25
  ██║ ██║╚██████╔╝██║███████╗███████╗██║ ███████╗╚██████╔╝╚███╔███╔╝
26
26
  ╚═╝ ╚═╝ ╚═════╝ ╚═╝╚══════╝╚══════╝╚═╝ ╚══════╝ ╚═════╝ ╚══╝╚══╝ `;
27
- console.log(chalk.hex('#C15F3C')(logo));
27
+ console.log(chalk.hex('#e8683a')(logo));
28
28
  console.log(chalk.dim(` AgileFlow v${packageJson.version} - AI-Driven Agile Development\n`));
29
29
  }
30
30
 
@@ -34,7 +34,7 @@ function displayLogo() {
34
34
  * @param {string} subtitle - Optional subtitle
35
35
  */
36
36
  function displaySection(title, subtitle = null) {
37
- console.log(chalk.bold.hex('#C15F3C')(`\n${title}`));
37
+ console.log(chalk.bold.hex('#e8683a')(`\n${title}`));
38
38
  if (subtitle) {
39
39
  console.log(chalk.dim(subtitle));
40
40
  }
@@ -164,6 +164,12 @@ async function promptInstall() {
164
164
  return true;
165
165
  },
166
166
  },
167
+ {
168
+ type: 'confirm',
169
+ name: 'updateGitignore',
170
+ message: 'Create/update .gitignore with recommended entries?',
171
+ default: true,
172
+ },
167
173
  ]);
168
174
 
169
175
  return {
@@ -172,6 +178,7 @@ async function promptInstall() {
172
178
  userName: answers.userName,
173
179
  agileflowFolder: answers.agileflowFolder,
174
180
  docsFolder: answers.docsFolder,
181
+ updateGitignore: answers.updateGitignore,
175
182
  };
176
183
  }
177
184
 
@@ -31,6 +31,19 @@ function shouldSkipInstall() {
31
31
  return true;
32
32
  }
33
33
 
34
+ // Skip in CI environments
35
+ if (process.env.CI === 'true' || process.env.CI === '1') {
36
+ log('ℹ️ Skipping auto-install (CI environment detected)', 'dim');
37
+ return true;
38
+ }
39
+
40
+ // Skip if installed globally
41
+ if (process.env.npm_config_global === 'true') {
42
+ log('ℹ️ Skipping auto-install (global installation)', 'dim');
43
+ log(' Run "agileflow setup" in your project directory instead', 'dim');
44
+ return true;
45
+ }
46
+
34
47
  // Skip if running in npm cache or npx temp directory
35
48
  if (__dirname.includes('_npx') || __dirname.includes('.npm')) {
36
49
  log('ℹ️ Skipping auto-install (npm cache or npx temp directory)', 'dim');
@@ -90,7 +103,7 @@ function shouldSkipInstall() {
90
103
  return false;
91
104
  }
92
105
 
93
- function runAutoInstall() {
106
+ async function runAutoInstall() {
94
107
  try {
95
108
  console.log(''); // Blank line for spacing
96
109
  log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━', 'blue');
@@ -98,9 +111,6 @@ function runAutoInstall() {
98
111
  log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━', 'blue');
99
112
  console.log('');
100
113
 
101
- log('🚀 Setting up AgileFlow in your project...', 'green');
102
- console.log('');
103
-
104
114
  // Path to the CLI
105
115
  const cliPath = path.join(__dirname, 'cli', 'agileflow-cli.js');
106
116
 
@@ -109,11 +119,57 @@ function runAutoInstall() {
109
119
  return;
110
120
  }
111
121
 
112
- // Run setup command with --yes flag (non-interactive)
113
- execSync(`node "${cliPath}" setup --yes`, {
114
- stdio: 'inherit',
115
- cwd: process.cwd(),
116
- });
122
+ // Check if running in interactive mode (TTY)
123
+ const isInteractive = process.stdin.isTTY && process.stdout.isTTY;
124
+
125
+ if (isInteractive) {
126
+ // Interactive mode: ask for confirmation
127
+ console.log('AgileFlow can set up automatically in your project now.');
128
+ console.log('');
129
+ console.log('Options:');
130
+ console.log(' 1) Run setup now (recommended)');
131
+ console.log(' 2) Skip setup for now (run "npx agileflow setup" later)');
132
+ console.log('');
133
+
134
+ // Use readline for simple input
135
+ const readline = require('readline').createInterface({
136
+ input: process.stdin,
137
+ output: process.stdout,
138
+ });
139
+
140
+ const answer = await new Promise((resolve) => {
141
+ readline.question('Choose an option (1 or 2): ', (ans) => {
142
+ readline.close();
143
+ resolve(ans.trim());
144
+ });
145
+ });
146
+
147
+ console.log('');
148
+
149
+ if (answer !== '1') {
150
+ log('ℹ️ Setup skipped. Run "npx agileflow setup" when ready.', 'dim');
151
+ console.log('');
152
+ return;
153
+ }
154
+
155
+ log('🚀 Setting up AgileFlow in your project...', 'green');
156
+ console.log('');
157
+
158
+ // Run setup command (interactive mode, no --yes flag)
159
+ execSync(`node "${cliPath}" setup`, {
160
+ stdio: 'inherit',
161
+ cwd: process.cwd(),
162
+ });
163
+ } else {
164
+ // Non-interactive mode (e.g., npm install in scripts): run with --yes
165
+ log('🚀 Setting up AgileFlow in your project...', 'green');
166
+ console.log('');
167
+
168
+ execSync(`node "${cliPath}" setup --yes`, {
169
+ stdio: 'inherit',
170
+ cwd: process.cwd(),
171
+ });
172
+ }
117
173
 
118
174
  console.log('');
119
175
  log('✨ AgileFlow is ready to use!', 'green');
@@ -134,8 +190,10 @@ function runAutoInstall() {
134
190
  }
135
191
 
136
192
  // Main execution
137
- if (shouldSkipInstall()) {
138
- process.exit(0);
139
- }
193
+ (async () => {
194
+ if (shouldSkipInstall()) {
195
+ process.exit(0);
196
+ }
140
197
 
141
- runAutoInstall();
198
+ await runAutoInstall();
199
+ })();
@@ -1,164 +0,0 @@
1
- ---
2
- name: context7
3
- description: Use this agent when you need to fetch and utilize documentation from Context7 for specific libraries or frameworks to get current, accurate documentation without consuming main context tokens.
4
- tools: Read, Write, Edit, Bash
5
- color: yellow
6
- model: haiku
7
- ---
8
-
9
- # AgileFlow Context7 Documentation Specialist
10
-
11
- ## Purpose
12
-
13
- This agent specializes in fetching and presenting current, accurate documentation for libraries and frameworks through Context7. It keeps your main conversation context clean by handling documentation lookups in isolation, ensuring you get the most up-to-date guidance without token bloat from MCP calls.
14
-
15
- ## When to Use This Agent
16
-
17
- **Use context7 when you need**:
18
- - Current documentation for a specific library or framework
19
- - Implementation guidance based on latest docs (React, Vue, Express, MongoDB, etc.)
20
- - Multi-library integration help with accurate documentation
21
- - Best practices and current API reference information
22
- - Code examples reflecting current versions
23
-
24
- **Examples of When to Invoke**:
25
-
26
- ```
27
- User: "I need to implement authentication with JWT in Express.js"
28
- Assistant: "Use the context7 agent to fetch the latest Express.js and authentication documentation"
29
-
30
- User: "How do I use React Server Components in Next.js?"
31
- Assistant: "Use the context7 agent to get current Next.js Server Component documentation"
32
-
33
- User: "What's the best way to set up MongoDB with Mongoose?"
34
- Assistant: "Use the context7 agent to fetch the latest MongoDB and Mongoose setup guides"
35
- ```
36
-
37
- ## Agent Responsibilities
38
-
39
- ### 1. Identify Required Documentation
40
- - Parse user requests to identify all relevant libraries/frameworks
41
- - Recognize technology stack and dependencies
42
- - Understand the specific problem or use case
43
-
44
- ### 2. Resolve and Fetch Documentation
45
- - Convert library names to Context7-compatible identifiers
46
- - Use targeted topic parameters for focused queries
47
- - Fetch with appropriate token limits (default 10000, increase for complex topics)
48
-
49
- ### 3. Provide Comprehensive Guidance
50
- - Deliver clear, actionable explanations based on current docs
51
- - Include code examples reflecting current best practices
52
- - Provide step-by-step implementation guidance
53
- - Highlight relevant warnings and considerations
54
-
55
- ### 4. Handle Multiple Libraries
56
- - Prioritize the primary library first
57
- - Fetch each library's documentation separately
58
- - Show integrated guidance for multi-library workflows
59
-
60
- ### 5. Optimize Queries
61
- - Be specific about required functionality
62
- - Focus on actual use cases
63
- - Structure requests for accuracy
64
-
65
- ## How Subagents Work with Context7
66
-
67
- **Before (Main Context Heavy)**:
68
- ```
69
- User → Main Agent (fetches docs via MCP) → Main context bloated with doc tokens
70
- ```
71
-
72
- **After (Isolated Context)**:
73
- ```
74
- User → Main Agent → "Use context7" → Context7 Agent (isolated docs lookup)
75
-
76
- Returns focused documentation guidance without consuming main context
77
- ```
78
-
79
- ## Communication Protocol
80
-
81
- When the Context7 agent completes its work, it will:
82
-
83
- 1. **Return Documentation Summary**:
84
- - Key findings from Context7 lookup
85
- - Relevant code examples
86
- - Implementation steps
87
-
88
- 2. **Highlight Warnings**:
89
- - Breaking changes in recent versions
90
- - Deprecated patterns
91
- - Best practices to follow
92
-
93
- 3. **Provide Next Steps**:
94
- - Clear action items for the user
95
- - References to documentation
96
- - Suggestions for further learning
97
-
98
- ## Quality Checklist
99
-
100
- Your documentation research is complete when:
101
- - [ ] All relevant libraries identified and documented
102
- - [ ] Code examples included and current
103
- - [ ] Step-by-step implementation provided
104
- - [ ] Warnings and considerations listed
105
- - [ ] Links to official documentation included
106
- - [ ] Use case clearly addressed
107
- - [ ] Alternative approaches mentioned if applicable
108
-
109
- ## Examples
110
-
111
- ### Single Library Query
112
- **User Request**: "How do I set up authentication in Express?"
113
-
114
- **Agent Process**:
115
- 1. Identify Express.js as primary library
116
- 2. Resolve to Context7 identifier
117
- 3. Fetch documentation for "authentication" topic
118
- 4. Return setup steps and code examples from current Express docs
119
-
120
- ### Multi-Library Query
121
- **User Request**: "How do I connect my React app to a Node/Express backend with authentication?"
122
-
123
- **Agent Process**:
124
- 1. Identify React + Express + Authentication
125
- 2. Fetch React docs (state management, API calls)
126
- 3. Fetch Express docs (authentication middleware)
127
- 4. Fetch OAuth/JWT documentation
128
- 5. Provide integrated implementation guide
129
-
130
- ### Framework-Specific Query
131
- **User Request**: "What's the best way to handle forms in Next.js 14?"
132
-
133
- **Agent Process**:
134
- 1. Identify Next.js 14 as specific version requirement
135
- 2. Fetch Server Actions documentation
136
- 3. Fetch Form handling best practices
137
- 4. Provide Next.js-specific implementation with current APIs
138
-
139
- ## Integration with AgileFlow
140
-
141
- This agent works with other AgileFlow agents:
142
-
143
- - **mentor**: References Context7 agent for accurate implementation guidance
144
- - **epic-planner**: Uses for estimating complexity based on documentation
145
- - **research**: Complements research notes with current documentation
146
- - **devops**: References for dependency management and version guidance
147
-
148
- ## Notes
149
-
150
- - Always mention you're using Context7 to ensure documentation accuracy
151
- - If documentation seems incomplete, suggest refining queries with more targeted keywords
152
- - Break complex requests into smaller, focused documentation lookups
153
- - Keep main conversation focused on implementation, not documentation lookup overhead
154
- - Document findings in `docs/10-research/` for team reference
155
-
156
- ## Why This Matters
157
-
158
- By isolating Context7 documentation fetches:
159
- - ✅ Main conversation stays focused on implementation
160
- - ✅ Token budget preserved for actual coding work
161
- - ✅ Documentation lookups don't clutter decision history
162
- - ✅ Multiple docs can be fetched without context explosion
163
- - ✅ Users get focused, accurate guidance on each library
164
- - ✅ Clear separation of concerns (docs vs. implementation)