@yeongjaeyou/claude-code-config 0.5.1 → 0.6.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/.claude/commands/generate-llmstxt.md +49 -0
- package/.claude/guidelines/cv-guidelines.md +13 -13
- package/.claude/skills/feature-implementer/SKILL.md +317 -0
- package/.claude/skills/feature-implementer/plan-template.md +605 -0
- package/README.md +26 -16
- package/bin/cli.js +71 -69
- package/package.json +1 -1
- package/.claude/agents/generate-llmstxt.md +0 -165
- package/.claude/agents/langconnect-rag-expert.md +0 -98
- package/.claude/commands/plan.md +0 -26
- package/.claude/commands/tm/review-prd-with-codex.md +0 -442
package/README.md
CHANGED
|
@@ -14,7 +14,7 @@ A collection of custom slash commands, agents, and skills for Claude Code CLI.
|
|
|
14
14
|
│ ├── commit-and-push.md # Automate Git commit and push
|
|
15
15
|
│ ├── council.md # Consult multiple AI models (LLM Council)
|
|
16
16
|
│ ├── edit-notebook.md # Safely edit Jupyter Notebooks
|
|
17
|
-
│ ├──
|
|
17
|
+
│ ├── generate-llmstxt.md # Generate llms.txt from URL or directory
|
|
18
18
|
│ ├── gh/
|
|
19
19
|
│ │ ├── create-issue-label.md # Create GitHub issue labels
|
|
20
20
|
│ │ ├── decompose-issue.md # Decompose large work into issues
|
|
@@ -25,21 +25,21 @@ A collection of custom slash commands, agents, and skills for Claude Code CLI.
|
|
|
25
25
|
│ ├── convert-prd.md # Convert PRD draft to TaskMaster format
|
|
26
26
|
│ ├── post-merge.md # TaskMaster-integrated post-merge cleanup
|
|
27
27
|
│ ├── resolve-issue.md # TaskMaster-based issue resolution
|
|
28
|
-
│ ├── review-prd-with-codex.md # Review PRD with Codex
|
|
29
28
|
│ └── sync-to-github.md # Sync TaskMaster -> GitHub
|
|
30
29
|
├── guidelines/ # Shared guidelines
|
|
31
30
|
│ ├── work-guidelines.md # Common work guidelines
|
|
32
31
|
│ └── id-reference.md # GitHub/TaskMaster ID reference
|
|
33
32
|
├── agents/ # Custom agents
|
|
34
33
|
│ ├── web-researcher.md # Multi-platform web research
|
|
35
|
-
│
|
|
36
|
-
│ ├── generate-llmstxt.md # Generate llms.txt
|
|
37
|
-
│ └── langconnect-rag-expert.md # RAG-based document search
|
|
34
|
+
│ └── python-pro.md # Python expert
|
|
38
35
|
└── skills/ # Skills (reusable tool collections)
|
|
39
36
|
├── code-explorer/ # GitHub/HuggingFace code exploration
|
|
40
37
|
│ ├── SKILL.md
|
|
41
38
|
│ ├── scripts/
|
|
42
39
|
│ └── references/
|
|
40
|
+
├── feature-implementer/ # TDD-based feature planning
|
|
41
|
+
│ ├── SKILL.md
|
|
42
|
+
│ └── plan-template.md
|
|
43
43
|
├── notion-md-uploader/ # Upload Markdown to Notion
|
|
44
44
|
│ ├── SKILL.md
|
|
45
45
|
│ ├── scripts/
|
|
@@ -55,10 +55,10 @@ A collection of custom slash commands, agents, and skills for Claude Code CLI.
|
|
|
55
55
|
|
|
56
56
|
| Command | Description |
|
|
57
57
|
|---------|-------------|
|
|
58
|
-
| `/plan` | Analyze requirements and create implementation plan (no coding) |
|
|
59
58
|
| `/commit-and-push` | Analyze changes and commit with Conventional Commits format |
|
|
60
59
|
| `/code-review` | Process external code review results and apply auto-fixes |
|
|
61
60
|
| `/edit-notebook` | Safely edit Jupyter Notebook files with NotebookEdit tool |
|
|
61
|
+
| `/generate-llmstxt` | Generate llms.txt from URL or local directory |
|
|
62
62
|
| `/ask-deepwiki` | Deep query GitHub repositories via DeepWiki MCP |
|
|
63
63
|
| `/ask-codex` | Request code review via Codex MCP (with Claude cross-check) |
|
|
64
64
|
| `/ask-gemini` | Request code review via Gemini CLI (with Claude cross-check) |
|
|
@@ -81,7 +81,6 @@ A collection of custom slash commands, agents, and skills for Claude Code CLI.
|
|
|
81
81
|
| `/tm/convert-prd` | Convert PRD draft to TaskMaster PRD format |
|
|
82
82
|
| `/tm/sync-to-github` | Sync TaskMaster tasks.json to GitHub Issues/Milestones |
|
|
83
83
|
| `/tm/resolve-issue` | Resolve GitHub Issues by TaskMaster subtask units |
|
|
84
|
-
| `/tm/review-prd-with-codex` | Review PRD with Codex MCP and Claude cross-check |
|
|
85
84
|
| `/tm/post-merge` | TaskMaster status update and branch cleanup after PR merge |
|
|
86
85
|
|
|
87
86
|
## Agents
|
|
@@ -90,8 +89,6 @@ A collection of custom slash commands, agents, and skills for Claude Code CLI.
|
|
|
90
89
|
|-------|-------------|
|
|
91
90
|
| `web-researcher` | Multi-platform tech research (Reddit, GitHub, SO, HF, arXiv, etc.) |
|
|
92
91
|
| `python-pro` | Python advanced features expert (decorators, generators, async/await) |
|
|
93
|
-
| `generate-llmstxt` | Generate llms.txt documentation from websites or local directories |
|
|
94
|
-
| `langconnect-rag-expert` | Retrieve and synthesize information from document collections |
|
|
95
92
|
|
|
96
93
|
## Skills
|
|
97
94
|
|
|
@@ -107,6 +104,15 @@ python scripts/search_github.py "object detection" --limit 10
|
|
|
107
104
|
python scripts/search_huggingface.py "qwen vl" --type models
|
|
108
105
|
```
|
|
109
106
|
|
|
107
|
+
### feature-implementer
|
|
108
|
+
|
|
109
|
+
TDD-based feature planning with quality gates.
|
|
110
|
+
|
|
111
|
+
- Phase-based plans with 1-4 hour increments
|
|
112
|
+
- Test-First Development (Red-Green-Refactor)
|
|
113
|
+
- Quality gates before each phase transition
|
|
114
|
+
- Risk assessment and rollback strategies
|
|
115
|
+
|
|
110
116
|
### notion-md-uploader
|
|
111
117
|
|
|
112
118
|
Upload Markdown files to Notion pages with full formatting support.
|
|
@@ -195,8 +201,8 @@ cp node_modules/@yeongjaeyou/claude-code-config/.mcp.json .
|
|
|
195
201
|
## Usage Examples
|
|
196
202
|
|
|
197
203
|
```bash
|
|
198
|
-
#
|
|
199
|
-
/
|
|
204
|
+
# Generate llms.txt from website
|
|
205
|
+
/generate-llmstxt https://docs.example.com
|
|
200
206
|
|
|
201
207
|
# Commit and push
|
|
202
208
|
/commit-and-push src/auth.ts src/utils.ts
|
|
@@ -210,11 +216,10 @@ cp node_modules/@yeongjaeyou/claude-code-config/.mcp.json .
|
|
|
210
216
|
|
|
211
217
|
## Key Features
|
|
212
218
|
|
|
213
|
-
### `/
|
|
214
|
-
-
|
|
215
|
-
-
|
|
216
|
-
-
|
|
217
|
-
- **No immediate coding - plan only**
|
|
219
|
+
### `/generate-llmstxt` - LLM Documentation
|
|
220
|
+
- Generate llms.txt from URL or local directory
|
|
221
|
+
- Use Firecrawl MCP for web scraping
|
|
222
|
+
- Organize content into logical sections
|
|
218
223
|
|
|
219
224
|
### `/commit-and-push` - Git Automation
|
|
220
225
|
- Follow Conventional Commits format (feat, fix, refactor, docs, etc.)
|
|
@@ -236,6 +241,11 @@ cp node_modules/@yeongjaeyou/claude-code-config/.mcp.json .
|
|
|
236
241
|
- Official documentation via Context7/DeepWiki
|
|
237
242
|
- Auto-generate research reports
|
|
238
243
|
|
|
244
|
+
### `feature-implementer` Skill
|
|
245
|
+
- TDD-based feature planning with quality gates
|
|
246
|
+
- Phase-based delivery (1-4 hours per phase)
|
|
247
|
+
- Risk assessment and rollback strategies
|
|
248
|
+
|
|
239
249
|
### `code-explorer` Skill
|
|
240
250
|
- GitHub repository/code search via `gh` CLI
|
|
241
251
|
- Hugging Face model/dataset/Spaces search via `huggingface_hub` API
|
package/bin/cli.js
CHANGED
|
@@ -8,44 +8,45 @@ const readline = require('readline');
|
|
|
8
8
|
const pkg = require('../package.json');
|
|
9
9
|
const args = process.argv.slice(2);
|
|
10
10
|
|
|
11
|
-
//
|
|
12
|
-
const INSTALL_FOLDERS = ['commands', 'agents', 'skills'];
|
|
11
|
+
// Installation target folders (non-user data only)
|
|
12
|
+
const INSTALL_FOLDERS = ['commands', 'agents', 'skills', 'guidelines'];
|
|
13
13
|
|
|
14
|
-
//
|
|
14
|
+
// Parse options
|
|
15
15
|
const isGlobal = args.includes('--global') || args.includes('-g');
|
|
16
16
|
const showHelp = args.includes('--help') || args.includes('-h');
|
|
17
17
|
const showVersion = args.includes('--version') || args.includes('-v');
|
|
18
18
|
|
|
19
|
-
//
|
|
19
|
+
// Version output
|
|
20
20
|
if (showVersion) {
|
|
21
21
|
console.log(pkg.version);
|
|
22
22
|
process.exit(0);
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
//
|
|
25
|
+
// Help output
|
|
26
26
|
if (showHelp) {
|
|
27
27
|
console.log(`
|
|
28
28
|
Claude Code Config v${pkg.version}
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
npx @yeongjaeyou/claude-code-config [
|
|
30
|
+
Usage:
|
|
31
|
+
npx @yeongjaeyou/claude-code-config [options]
|
|
32
32
|
|
|
33
|
-
|
|
34
|
-
-g, --global
|
|
35
|
-
-h, --help
|
|
36
|
-
-v, --version
|
|
33
|
+
Options:
|
|
34
|
+
-g, --global Global install (~/.claude/)
|
|
35
|
+
-h, --help Show help
|
|
36
|
+
-v, --version Show version
|
|
37
37
|
|
|
38
|
-
|
|
39
|
-
npx @yeongjaeyou/claude-code-config #
|
|
40
|
-
npx @yeongjaeyou/claude-code-config --global #
|
|
38
|
+
Examples:
|
|
39
|
+
npx @yeongjaeyou/claude-code-config # Install to current project
|
|
40
|
+
npx @yeongjaeyou/claude-code-config --global # Global install
|
|
41
41
|
|
|
42
|
-
|
|
43
|
-
- commands/
|
|
44
|
-
- agents/
|
|
45
|
-
- skills/
|
|
42
|
+
Installed folders:
|
|
43
|
+
- commands/ : Slash commands
|
|
44
|
+
- agents/ : Custom agents
|
|
45
|
+
- skills/ : Skills (reusable tool collections)
|
|
46
|
+
- guidelines/ : Shared guidelines
|
|
46
47
|
|
|
47
|
-
|
|
48
|
-
--global
|
|
48
|
+
Note:
|
|
49
|
+
With --global install, existing user data (settings.json, history.jsonl, etc.) is preserved.
|
|
49
50
|
`);
|
|
50
51
|
process.exit(0);
|
|
51
52
|
}
|
|
@@ -56,14 +57,14 @@ const dest = isGlobal
|
|
|
56
57
|
: path.join(process.cwd(), '.claude');
|
|
57
58
|
|
|
58
59
|
/**
|
|
59
|
-
*
|
|
60
|
-
* @param {string} question -
|
|
61
|
-
* @returns {Promise<string>} -
|
|
60
|
+
* Ask user a question and get answer
|
|
61
|
+
* @param {string} question - Question content
|
|
62
|
+
* @returns {Promise<string>} - User answer
|
|
62
63
|
*/
|
|
63
64
|
function askQuestion(question) {
|
|
64
|
-
//
|
|
65
|
+
// Detect non-interactive environment (CI/CD, pipelines, etc.)
|
|
65
66
|
if (!process.stdin.isTTY) {
|
|
66
|
-
console.log('
|
|
67
|
+
console.log('Non-interactive environment detected. Using default (merge).');
|
|
67
68
|
return Promise.resolve('merge');
|
|
68
69
|
}
|
|
69
70
|
|
|
@@ -81,8 +82,8 @@ function askQuestion(question) {
|
|
|
81
82
|
}
|
|
82
83
|
|
|
83
84
|
/**
|
|
84
|
-
*
|
|
85
|
-
* @returns {string[]} -
|
|
85
|
+
* Check existing installation folders
|
|
86
|
+
* @returns {string[]} - List of existing folders
|
|
86
87
|
*/
|
|
87
88
|
function checkExistingFolders() {
|
|
88
89
|
const existing = [];
|
|
@@ -96,22 +97,22 @@ function checkExistingFolders() {
|
|
|
96
97
|
}
|
|
97
98
|
|
|
98
99
|
/**
|
|
99
|
-
*
|
|
100
|
-
* @param {string} src -
|
|
101
|
-
* @param {string} dst -
|
|
102
|
-
* @param {boolean} mergeMode -
|
|
100
|
+
* Copy folder recursively
|
|
101
|
+
* @param {string} src - Source path
|
|
102
|
+
* @param {string} dst - Destination path
|
|
103
|
+
* @param {boolean} mergeMode - Whether to use merge mode
|
|
103
104
|
*/
|
|
104
105
|
function copyFolder(src, dst, mergeMode = false) {
|
|
105
106
|
if (!fs.existsSync(src)) {
|
|
106
107
|
return;
|
|
107
108
|
}
|
|
108
109
|
|
|
109
|
-
//
|
|
110
|
+
// Create destination folder
|
|
110
111
|
if (!fs.existsSync(dst)) {
|
|
111
112
|
try {
|
|
112
113
|
fs.mkdirSync(dst, { recursive: true });
|
|
113
114
|
} catch (err) {
|
|
114
|
-
throw new Error(
|
|
115
|
+
throw new Error(`Failed to create folder: ${dst} - ${err.message}`);
|
|
115
116
|
}
|
|
116
117
|
}
|
|
117
118
|
|
|
@@ -124,21 +125,21 @@ function copyFolder(src, dst, mergeMode = false) {
|
|
|
124
125
|
if (entry.isDirectory()) {
|
|
125
126
|
copyFolder(srcPath, dstPath, mergeMode);
|
|
126
127
|
} else {
|
|
127
|
-
//
|
|
128
|
+
// In merge mode, keep existing files
|
|
128
129
|
if (mergeMode && fs.existsSync(dstPath)) {
|
|
129
130
|
continue;
|
|
130
131
|
}
|
|
131
132
|
try {
|
|
132
133
|
fs.copyFileSync(srcPath, dstPath);
|
|
133
134
|
} catch (err) {
|
|
134
|
-
throw new Error(
|
|
135
|
+
throw new Error(`Failed to copy file: ${srcPath} -> ${dstPath} - ${err.message}`);
|
|
135
136
|
}
|
|
136
137
|
}
|
|
137
138
|
}
|
|
138
139
|
}
|
|
139
140
|
|
|
140
141
|
/**
|
|
141
|
-
*
|
|
142
|
+
* Selectively copy installation target folders
|
|
142
143
|
* @param {string} mode - 'merge' | 'overwrite'
|
|
143
144
|
*/
|
|
144
145
|
function installFolders(mode) {
|
|
@@ -152,12 +153,12 @@ function installFolders(mode) {
|
|
|
152
153
|
continue;
|
|
153
154
|
}
|
|
154
155
|
|
|
155
|
-
//
|
|
156
|
+
// In overwrite mode, delete existing folder before copying
|
|
156
157
|
if (!mergeMode && fs.existsSync(dstFolder)) {
|
|
157
158
|
try {
|
|
158
159
|
fs.rmSync(dstFolder, { recursive: true });
|
|
159
160
|
} catch (err) {
|
|
160
|
-
throw new Error(
|
|
161
|
+
throw new Error(`Failed to delete folder: ${dstFolder} - ${err.message}`);
|
|
161
162
|
}
|
|
162
163
|
}
|
|
163
164
|
|
|
@@ -166,7 +167,7 @@ function installFolders(mode) {
|
|
|
166
167
|
}
|
|
167
168
|
|
|
168
169
|
/**
|
|
169
|
-
*
|
|
170
|
+
* Main function
|
|
170
171
|
*/
|
|
171
172
|
async function main() {
|
|
172
173
|
console.log('');
|
|
@@ -174,90 +175,91 @@ async function main() {
|
|
|
174
175
|
console.log('==================');
|
|
175
176
|
console.log('');
|
|
176
177
|
|
|
177
|
-
//
|
|
178
|
+
// Check source folder exists
|
|
178
179
|
if (!fs.existsSync(source)) {
|
|
179
|
-
console.error('
|
|
180
|
+
console.error('Error: Source .claude/ folder not found.');
|
|
180
181
|
process.exit(1);
|
|
181
182
|
}
|
|
182
183
|
|
|
183
|
-
//
|
|
184
|
+
// Display installation location
|
|
184
185
|
if (isGlobal) {
|
|
185
|
-
console.log('
|
|
186
|
+
console.log('Global install mode: Installing to ~/.claude/');
|
|
186
187
|
} else {
|
|
187
|
-
console.log('
|
|
188
|
+
console.log('Local install mode: Installing to current directory.');
|
|
188
189
|
}
|
|
189
|
-
console.log(
|
|
190
|
+
console.log(`Install path: ${dest}`);
|
|
190
191
|
console.log('');
|
|
191
192
|
|
|
192
|
-
//
|
|
193
|
+
// Create destination folder if not exists
|
|
193
194
|
if (!fs.existsSync(dest)) {
|
|
194
195
|
try {
|
|
195
196
|
fs.mkdirSync(dest, { recursive: true });
|
|
196
197
|
} catch (err) {
|
|
197
|
-
console.error(
|
|
198
|
-
console.error(
|
|
198
|
+
console.error(`Error: Cannot create destination folder: ${dest}`);
|
|
199
|
+
console.error(`Details: ${err.message}`);
|
|
199
200
|
process.exit(1);
|
|
200
201
|
}
|
|
201
202
|
}
|
|
202
203
|
|
|
203
|
-
//
|
|
204
|
+
// Check existing installation folders
|
|
204
205
|
const existingFolders = checkExistingFolders();
|
|
205
206
|
let installMode = 'overwrite';
|
|
206
207
|
|
|
207
208
|
if (existingFolders.length > 0) {
|
|
208
|
-
console.log('
|
|
209
|
+
console.log('Existing installation folders found:');
|
|
209
210
|
existingFolders.forEach(folder => {
|
|
210
211
|
console.log(` - ${folder}/`);
|
|
211
212
|
});
|
|
212
213
|
console.log('');
|
|
213
214
|
|
|
214
215
|
if (isGlobal) {
|
|
215
|
-
console.log('(
|
|
216
|
+
console.log('(User data will be preserved: settings.json, history.jsonl, etc.)');
|
|
216
217
|
console.log('');
|
|
217
218
|
}
|
|
218
219
|
|
|
219
|
-
console.log('
|
|
220
|
-
console.log(' [m] merge -
|
|
221
|
-
console.log(' [o] overwrite -
|
|
222
|
-
console.log(' [c] cancel -
|
|
220
|
+
console.log('Installation options:');
|
|
221
|
+
console.log(' [m] merge - Add new files only (keep existing)');
|
|
222
|
+
console.log(' [o] overwrite - Overwrite above folders only');
|
|
223
|
+
console.log(' [c] cancel - Cancel installation');
|
|
223
224
|
console.log('');
|
|
224
225
|
|
|
225
|
-
const answer = await askQuestion('
|
|
226
|
+
const answer = await askQuestion('Choose (m/o/c) [default: m]: ');
|
|
226
227
|
|
|
227
228
|
if (answer === 'c' || answer === 'cancel') {
|
|
228
|
-
console.log('
|
|
229
|
+
console.log('Installation cancelled.');
|
|
229
230
|
process.exit(0);
|
|
230
231
|
} else if (answer === 'o' || answer === 'overwrite') {
|
|
231
232
|
installMode = 'overwrite';
|
|
232
233
|
console.log('');
|
|
233
|
-
console.log('
|
|
234
|
+
console.log('Installing in overwrite mode...');
|
|
234
235
|
} else {
|
|
235
|
-
//
|
|
236
|
+
// Default: merge (empty, 'm', 'merge', etc.)
|
|
236
237
|
installMode = 'merge';
|
|
237
238
|
console.log('');
|
|
238
|
-
console.log('
|
|
239
|
+
console.log('Installing in merge mode (keeping existing files)...');
|
|
239
240
|
}
|
|
240
241
|
}
|
|
241
242
|
|
|
242
|
-
//
|
|
243
|
+
// Install folders
|
|
243
244
|
installFolders(installMode);
|
|
244
245
|
|
|
245
246
|
console.log('');
|
|
246
|
-
console.log('.claude/
|
|
247
|
+
console.log('.claude/ folder installed successfully!');
|
|
247
248
|
console.log('');
|
|
248
|
-
console.log('
|
|
249
|
-
console.log(' - commands/
|
|
250
|
-
console.log(' - agents/
|
|
251
|
-
console.log(' - skills/
|
|
249
|
+
console.log('Installed:');
|
|
250
|
+
console.log(' - commands/ : Slash commands');
|
|
251
|
+
console.log(' - agents/ : Custom agents');
|
|
252
|
+
console.log(' - skills/ : Skills (reusable tool collections)');
|
|
253
|
+
console.log(' - guidelines/ : Shared guidelines');
|
|
252
254
|
console.log('');
|
|
253
255
|
|
|
254
256
|
if (isGlobal) {
|
|
255
|
-
console.log('
|
|
256
|
-
console.log('
|
|
257
|
+
console.log('Global installation complete.');
|
|
258
|
+
console.log('Claude Code commands are now available in all projects.');
|
|
257
259
|
}
|
|
258
260
|
}
|
|
259
261
|
|
|
260
262
|
main().catch((error) => {
|
|
261
|
-
console.error('
|
|
263
|
+
console.error('Error:', error.message);
|
|
262
264
|
process.exit(1);
|
|
263
265
|
});
|
package/package.json
CHANGED
|
@@ -1,165 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: generate-llmstxt
|
|
3
|
-
description: Expert at generating llms.txt files from websites or local directories. Use when user requests to create llms.txt documentation from URLs or local folders.
|
|
4
|
-
tools: Task, mcp__firecrawl__firecrawl_map, mcp__firecrawl__firecrawl_scrape, Bash, Read, Write, Glob, Grep
|
|
5
|
-
model: sonnet
|
|
6
|
-
color: orange
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
You are an expert at creating llms.txt documentation files following the llms.txt standard specification.
|
|
10
|
-
|
|
11
|
-
# Your Primary Responsibilities
|
|
12
|
-
|
|
13
|
-
1. Generate well-structured llms.txt files from websites or local directories
|
|
14
|
-
2. Follow the llms.txt format specification precisely
|
|
15
|
-
3. Use parallel processing for efficient content gathering
|
|
16
|
-
4. Summarize content concisely while preserving key information
|
|
17
|
-
|
|
18
|
-
# llms.txt Format Specification
|
|
19
|
-
|
|
20
|
-
The llms.txt file should contain:
|
|
21
|
-
1. An H1 with the project/site name (required)
|
|
22
|
-
2. An optional blockquote with a short project summary
|
|
23
|
-
3. Optional detailed markdown sections
|
|
24
|
-
4. Optional markdown sections with H2 headers listing URLs
|
|
25
|
-
|
|
26
|
-
Example Format:
|
|
27
|
-
```markdown
|
|
28
|
-
# Title
|
|
29
|
-
|
|
30
|
-
> Optional description goes here
|
|
31
|
-
|
|
32
|
-
Optional details go here
|
|
33
|
-
|
|
34
|
-
## Section name
|
|
35
|
-
|
|
36
|
-
- [Link title](https://link_url): Optional link details
|
|
37
|
-
|
|
38
|
-
## Optional
|
|
39
|
-
|
|
40
|
-
- [Link title](https://link_url)
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
Key Guidelines:
|
|
44
|
-
- Use concise, clear language
|
|
45
|
-
- Provide brief, informative descriptions for linked resources (10-15 words max)
|
|
46
|
-
- Avoid ambiguous terms or unexplained jargon
|
|
47
|
-
- Group related links under appropriate section headings
|
|
48
|
-
- Each description should be SPECIFIC to the content, not generic
|
|
49
|
-
|
|
50
|
-
## URL Format Best Practices
|
|
51
|
-
|
|
52
|
-
When documenting projects with official documentation:
|
|
53
|
-
1. **Always prefer official web documentation URLs** over GitHub/repository URLs
|
|
54
|
-
- ✅ Good: `https://docs.example.com/guide.html`
|
|
55
|
-
- ❌ Avoid: `https://github.com/example/repo/blob/main/docs/guide.md`
|
|
56
|
-
2. **Check for published documentation sites** even if source is on GitHub
|
|
57
|
-
- Many projects publish to readthedocs.io, GitHub Pages, or custom domains
|
|
58
|
-
- Example: TorchServe uses `https://pytorch.org/serve/` not GitHub URLs
|
|
59
|
-
3. **Use HTML versions** when both .md and .html exist
|
|
60
|
-
- Published docs usually have .html extension
|
|
61
|
-
- Some sites append .html.md for markdown versions
|
|
62
|
-
4. **Verify URL accessibility** before including in llms.txt
|
|
63
|
-
|
|
64
|
-
# Workflow for URL Input
|
|
65
|
-
|
|
66
|
-
When given a URL to generate llms.txt from:
|
|
67
|
-
|
|
68
|
-
1. Use firecrawl_map to discover all URLs on the website
|
|
69
|
-
2. Create multiple parallel Task agents to scrape each URL concurrently
|
|
70
|
-
- Each task should use firecrawl_scrape to fetch page content
|
|
71
|
-
- Each task should extract key information: page title, main concepts, important links
|
|
72
|
-
3. Collect and synthesize all results
|
|
73
|
-
4. Organize content into logical sections
|
|
74
|
-
5. Generate the final llms.txt file following the specification
|
|
75
|
-
|
|
76
|
-
Important: DO NOT use firecrawl_generate_llmstxt - build the llms.txt manually from scraped content.
|
|
77
|
-
|
|
78
|
-
# Workflow for Local Directory Input
|
|
79
|
-
|
|
80
|
-
When given a local directory path:
|
|
81
|
-
|
|
82
|
-
1. **Comprehensive Discovery**: Use Bash (ls/find) or Glob to list ALL files
|
|
83
|
-
- Check main directory (e.g., `docs/`)
|
|
84
|
-
- IMPORTANT: Also check subdirectories (e.g., `docs/hardware_support/`)
|
|
85
|
-
- Use recursive listing to avoid missing files
|
|
86
|
-
- Example: `ls -1 /path/to/docs/*.md` AND `ls -1 /path/to/docs/*/*.md`
|
|
87
|
-
|
|
88
|
-
2. **Verify Completeness**: Count total files and cross-reference
|
|
89
|
-
- Use `wc -l` to count total markdown files
|
|
90
|
-
- Compare against what's included in llms.txt
|
|
91
|
-
- Example: If docs/ has 36 files, ensure all 36 are considered
|
|
92
|
-
|
|
93
|
-
3. Filter for documentation-relevant files (README, docs, markdown files, code files)
|
|
94
|
-
|
|
95
|
-
4. Create parallel Task agents to read and analyze relevant files
|
|
96
|
-
- Each task should use Read to get file contents
|
|
97
|
-
- Each task should extract: file purpose, key functions/classes, important concepts
|
|
98
|
-
|
|
99
|
-
5. Collect and synthesize all results
|
|
100
|
-
|
|
101
|
-
6. Organize content into logical sections (e.g., "Core Modules", "Documentation", "Examples")
|
|
102
|
-
|
|
103
|
-
7. Generate the final llms.txt file following the specification
|
|
104
|
-
|
|
105
|
-
# Content Summarization Strategy
|
|
106
|
-
|
|
107
|
-
For each page or file, extract:
|
|
108
|
-
- Main purpose or topic
|
|
109
|
-
- Key APIs, functions, or classes (for code)
|
|
110
|
-
- Important concepts or features
|
|
111
|
-
- Usage examples or patterns
|
|
112
|
-
- Related resources
|
|
113
|
-
|
|
114
|
-
**CRITICAL: Read actual content, don't assume!**
|
|
115
|
-
- ✅ Good: "Configure batch size and delay for optimized throughput with dynamic batching"
|
|
116
|
-
- ❌ Bad: "Information about batch inference configuration"
|
|
117
|
-
- Each description MUST be based on actually reading the page/file content
|
|
118
|
-
- Descriptions should be 10-15 words and SPECIFIC to that document
|
|
119
|
-
- Avoid generic phrases like "documentation about X" or "guide for Y"
|
|
120
|
-
- Include concrete details: specific features, APIs, tools, or concepts mentioned
|
|
121
|
-
|
|
122
|
-
Keep descriptions brief (1-2 sentences per item) but informative and specific.
|
|
123
|
-
|
|
124
|
-
# Section Organization
|
|
125
|
-
|
|
126
|
-
Organize content into logical sections such as:
|
|
127
|
-
- Documentation (for docs, guides, tutorials)
|
|
128
|
-
- API Reference (for API documentation)
|
|
129
|
-
- Examples (for code examples, tutorials)
|
|
130
|
-
- Resources (for additional materials)
|
|
131
|
-
- Tools (for utilities, helpers)
|
|
132
|
-
|
|
133
|
-
Adapt section names to fit the content being documented.
|
|
134
|
-
|
|
135
|
-
# Parallel Processing
|
|
136
|
-
|
|
137
|
-
When processing multiple URLs or files:
|
|
138
|
-
1. Create one Task agent per item (up to reasonable limits)
|
|
139
|
-
2. Launch all tasks in a single message for parallel execution
|
|
140
|
-
3. Wait for all tasks to complete before synthesis
|
|
141
|
-
4. If there are too many items (>50), process in batches
|
|
142
|
-
|
|
143
|
-
# Error Handling
|
|
144
|
-
|
|
145
|
-
- If a URL cannot be scraped, note it and continue with others
|
|
146
|
-
- If a file cannot be read, note it and continue with others
|
|
147
|
-
- Always generate a llms.txt file even if some sources fail
|
|
148
|
-
- Include a note in the output about any failures
|
|
149
|
-
|
|
150
|
-
# Output
|
|
151
|
-
|
|
152
|
-
Always write the generated llms.txt to a file named `llms.txt` in the current directory or a location specified by the user.
|
|
153
|
-
|
|
154
|
-
Provide a summary of:
|
|
155
|
-
- Number of sources processed
|
|
156
|
-
- Number of sections created
|
|
157
|
-
- Any errors or warnings
|
|
158
|
-
- Location of the generated file
|
|
159
|
-
|
|
160
|
-
# Important Constraints
|
|
161
|
-
|
|
162
|
-
- Never use emojis in the generated llms.txt file
|
|
163
|
-
- Keep descriptions concise and technical
|
|
164
|
-
- Prioritize clarity and usefulness for LLMs
|
|
165
|
-
- Follow the user's specific requirements if they provide any customization requests
|