aiblueprint-cli 1.4.23 → 1.4.24
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-code-config/skills/git-commit/SKILL.md +42 -0
- package/claude-code-config/{commands/git/create-pr.md → skills/git-create-pr/SKILL.md} +12 -18
- package/claude-code-config/skills/git-fix-pr-comments/SKILL.md +51 -0
- package/claude-code-config/skills/git-merge/SKILL.md +68 -0
- package/claude-code-config/skills/{claude-memory → meta-claude-memory}/SKILL.md +7 -2
- package/claude-code-config/skills/meta-claude-memory/references/rules-directory-guide.md +298 -0
- package/claude-code-config/skills/meta-prompt-creator/SKILL.md +285 -0
- package/claude-code-config/skills/meta-prompt-creator/references/anthropic-best-practices.md +126 -0
- package/claude-code-config/skills/meta-prompt-creator/references/anti-patterns.md +57 -0
- package/claude-code-config/skills/meta-prompt-creator/references/clarity-principles.md +54 -0
- package/claude-code-config/skills/meta-prompt-creator/references/context-management.md +389 -0
- package/claude-code-config/skills/meta-prompt-creator/references/few-shot-patterns.md +47 -0
- package/claude-code-config/skills/meta-prompt-creator/references/openai-best-practices.md +50 -0
- package/claude-code-config/skills/meta-prompt-creator/references/prompt-templates.md +110 -0
- package/claude-code-config/skills/meta-prompt-creator/references/reasoning-techniques.md +52 -0
- package/claude-code-config/skills/meta-prompt-creator/references/system-prompt-patterns.md +48 -0
- package/claude-code-config/skills/meta-prompt-creator/references/xml-structure.md +36 -0
- package/claude-code-config/skills/meta-skill-creator/LICENSE.txt +202 -0
- package/claude-code-config/skills/meta-skill-creator/SKILL.md +421 -0
- package/claude-code-config/skills/meta-skill-creator/package.json +5 -0
- package/claude-code-config/skills/meta-skill-creator/references/output-patterns.md +82 -0
- package/claude-code-config/skills/meta-skill-creator/references/progressive-disclosure-patterns.md +374 -0
- package/claude-code-config/skills/meta-skill-creator/references/prompting-integration.md +363 -0
- package/claude-code-config/skills/meta-skill-creator/references/real-world-examples.md +513 -0
- package/claude-code-config/skills/meta-skill-creator/references/script-patterns.md +385 -0
- package/claude-code-config/skills/meta-skill-creator/references/workflows.md +28 -0
- package/claude-code-config/skills/meta-skill-creator/references/xml-tag-guide.md +606 -0
- package/claude-code-config/skills/meta-skill-creator/scripts/init-skill.ts +214 -0
- package/claude-code-config/skills/meta-skill-creator/scripts/package-skill.ts +146 -0
- package/claude-code-config/skills/meta-skill-creator/scripts/validate.ts +138 -0
- package/claude-code-config/skills/{create-subagents → meta-subagent-creator}/SKILL.md +41 -15
- package/claude-code-config/skills/{setup-ralph → ralph-loop}/steps/step-00-init.md +2 -3
- package/claude-code-config/skills/utils-fix-errors/SKILL.md +61 -0
- package/claude-code-config/skills/utils-fix-grammar/SKILL.md +59 -0
- package/claude-code-config/skills/utils-oneshot/SKILL.md +56 -0
- package/claude-code-config/skills/workflow-apex/SKILL.md +303 -0
- package/claude-code-config/skills/workflow-apex/scripts/setup-templates.sh +134 -0
- package/claude-code-config/skills/workflow-apex/scripts/update-progress.sh +80 -0
- package/claude-code-config/skills/workflow-apex/steps/step-00-init.md +288 -0
- package/claude-code-config/skills/workflow-apex/steps/step-00b-branch.md +126 -0
- package/claude-code-config/skills/workflow-apex/steps/step-00b-economy.md +244 -0
- package/claude-code-config/skills/workflow-apex/steps/step-00b-interactive.md +153 -0
- package/claude-code-config/skills/workflow-apex/steps/step-01-analyze.md +361 -0
- package/claude-code-config/skills/workflow-apex/steps/step-02-plan.md +264 -0
- package/claude-code-config/skills/workflow-apex/steps/step-03-execute.md +239 -0
- package/claude-code-config/skills/workflow-apex/steps/step-04-validate.md +264 -0
- package/claude-code-config/skills/workflow-apex/steps/step-05-examine.md +294 -0
- package/claude-code-config/skills/workflow-apex/steps/step-06-resolve.md +237 -0
- package/claude-code-config/skills/workflow-apex/steps/step-07-tests.md +250 -0
- package/claude-code-config/skills/workflow-apex/steps/step-08-run-tests.md +308 -0
- package/claude-code-config/skills/workflow-apex/steps/step-09-finish.md +193 -0
- package/claude-code-config/skills/workflow-apex/templates/00-context.md +51 -0
- package/claude-code-config/skills/workflow-apex/templates/01-analyze.md +10 -0
- package/claude-code-config/skills/workflow-apex/templates/02-plan.md +10 -0
- package/claude-code-config/skills/workflow-apex/templates/03-execute.md +10 -0
- package/claude-code-config/skills/workflow-apex/templates/04-validate.md +10 -0
- package/claude-code-config/skills/workflow-apex/templates/05-examine.md +10 -0
- package/claude-code-config/skills/workflow-apex/templates/06-resolve.md +10 -0
- package/claude-code-config/skills/workflow-apex/templates/07-tests.md +10 -0
- package/claude-code-config/skills/workflow-apex/templates/08-run-tests.md +10 -0
- package/claude-code-config/skills/workflow-apex/templates/09-finish.md +10 -0
- package/claude-code-config/skills/workflow-apex/templates/README.md +195 -0
- package/claude-code-config/skills/workflow-apex/templates/step-complete.md +7 -0
- package/package.json +1 -1
- package/claude-code-config/commands/explore.md +0 -90
- package/claude-code-config/commands/git/commit.md +0 -60
- package/claude-code-config/commands/git/fix-pr-comments.md +0 -59
- package/claude-code-config/commands/oneshot.md +0 -57
- package/claude-code-config/skills/create-slash-commands/SKILL.md +0 -1110
- package/claude-code-config/skills/create-slash-commands/references/arguments.md +0 -273
- package/claude-code-config/skills/create-slash-commands/references/patterns.md +0 -947
- package/claude-code-config/skills/create-slash-commands/references/prompt-examples.md +0 -656
- package/claude-code-config/skills/create-slash-commands/references/tool-restrictions.md +0 -389
- /package/claude-code-config/skills/{claude-memory → meta-claude-memory}/references/comprehensive-example.md +0 -0
- /package/claude-code-config/skills/{claude-memory → meta-claude-memory}/references/project-patterns.md +0 -0
- /package/claude-code-config/skills/{claude-memory → meta-claude-memory}/references/prompting-techniques.md +0 -0
- /package/claude-code-config/skills/{claude-memory → meta-claude-memory}/references/section-templates.md +0 -0
- /package/claude-code-config/skills/{create-subagents → meta-subagent-creator}/references/context-management.md +0 -0
- /package/claude-code-config/skills/{create-subagents → meta-subagent-creator}/references/debugging-agents.md +0 -0
- /package/claude-code-config/skills/{create-subagents → meta-subagent-creator}/references/error-handling-and-recovery.md +0 -0
- /package/claude-code-config/skills/{create-subagents → meta-subagent-creator}/references/evaluation-and-testing.md +0 -0
- /package/claude-code-config/skills/{create-subagents → meta-subagent-creator}/references/orchestration-patterns.md +0 -0
- /package/claude-code-config/skills/{create-subagents → meta-subagent-creator}/references/subagents.md +0 -0
- /package/claude-code-config/skills/{create-subagents → meta-subagent-creator}/references/writing-subagent-prompts.md +0 -0
- /package/claude-code-config/skills/{setup-ralph → ralph-loop}/SKILL.md +0 -0
- /package/claude-code-config/skills/{setup-ralph → ralph-loop}/scripts/setup.sh +0 -0
- /package/claude-code-config/skills/{setup-ralph → ralph-loop}/steps/step-01-interactive-prd.md +0 -0
- /package/claude-code-config/skills/{setup-ralph → ralph-loop}/steps/step-02-create-stories.md +0 -0
- /package/claude-code-config/skills/{setup-ralph → ralph-loop}/steps/step-03-finish.md +0 -0
|
@@ -0,0 +1,606 @@
|
|
|
1
|
+
<overview>
|
|
2
|
+
Complete guide to XML tags and structure for Claude Code skills. Skills must use pure XML structure (no markdown headings) for consistent parsing and efficient token usage.
|
|
3
|
+
</overview>
|
|
4
|
+
|
|
5
|
+
<critical_rule>
|
|
6
|
+
**Remove ALL markdown headings (#, ##, ###) from skill body content.**
|
|
7
|
+
|
|
8
|
+
Replace with semantic XML tags. Keep markdown formatting WITHIN content (bold, italic, lists, code blocks, links).
|
|
9
|
+
|
|
10
|
+
❌ **Bad**:
|
|
11
|
+
|
|
12
|
+
```markdown
|
|
13
|
+
# PDF Processing
|
|
14
|
+
|
|
15
|
+
## Quick start
|
|
16
|
+
|
|
17
|
+
Extract text...
|
|
18
|
+
|
|
19
|
+
## Advanced features
|
|
20
|
+
|
|
21
|
+
Form filling...
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
✅ **Good**:
|
|
25
|
+
|
|
26
|
+
```xml
|
|
27
|
+
<objective>
|
|
28
|
+
PDF processing with text extraction, form filling, and merging.
|
|
29
|
+
</objective>
|
|
30
|
+
|
|
31
|
+
<quick_start>
|
|
32
|
+
Extract text...
|
|
33
|
+
</quick_start>
|
|
34
|
+
|
|
35
|
+
<advanced_features>
|
|
36
|
+
Form filling...
|
|
37
|
+
</advanced_features>
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
</critical_rule>
|
|
41
|
+
|
|
42
|
+
<required_tags>
|
|
43
|
+
Every skill MUST have these three tags:
|
|
44
|
+
|
|
45
|
+
<tag name="objective">
|
|
46
|
+
**Purpose**: What the skill does and why it matters
|
|
47
|
+
|
|
48
|
+
**Content**: 1-3 paragraphs explaining the skill's purpose and value
|
|
49
|
+
|
|
50
|
+
**Example**:
|
|
51
|
+
|
|
52
|
+
```xml
|
|
53
|
+
<objective>
|
|
54
|
+
Extract text and tables from PDF files, fill forms, and merge documents using Python libraries.
|
|
55
|
+
|
|
56
|
+
This skill provides comprehensive PDF processing capabilities for data extraction, form automation, and document manipulation tasks.
|
|
57
|
+
</objective>
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
</tag>
|
|
61
|
+
|
|
62
|
+
<tag name="quick_start">
|
|
63
|
+
**Purpose**: Immediate, actionable guidance
|
|
64
|
+
|
|
65
|
+
**Content**: Minimal working example to get started quickly
|
|
66
|
+
|
|
67
|
+
**Example**:
|
|
68
|
+
|
|
69
|
+
````xml
|
|
70
|
+
<quick_start>
|
|
71
|
+
Extract text with pdfplumber:
|
|
72
|
+
|
|
73
|
+
```python
|
|
74
|
+
import pdfplumber
|
|
75
|
+
with pdfplumber.open("file.pdf") as pdf:
|
|
76
|
+
text = pdf.pages[0].extract_text()
|
|
77
|
+
````
|
|
78
|
+
|
|
79
|
+
Extract tables:
|
|
80
|
+
|
|
81
|
+
```python
|
|
82
|
+
with pdfplumber.open("file.pdf") as pdf:
|
|
83
|
+
tables = pdf.pages[0].extract_tables()
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
</quick_start>
|
|
87
|
+
|
|
88
|
+
````
|
|
89
|
+
</tag>
|
|
90
|
+
|
|
91
|
+
<tag name="success_criteria">
|
|
92
|
+
**Purpose**: How to know the task was completed correctly
|
|
93
|
+
|
|
94
|
+
**Content**: Specific, measurable criteria for success
|
|
95
|
+
|
|
96
|
+
**Alternative**: Can use `<when_successful>` instead
|
|
97
|
+
|
|
98
|
+
**Example**:
|
|
99
|
+
```xml
|
|
100
|
+
<success_criteria>
|
|
101
|
+
- Text extracted successfully from PDF
|
|
102
|
+
- Output is clean and properly formatted
|
|
103
|
+
- No encoding errors
|
|
104
|
+
- Tables parsed into structured data
|
|
105
|
+
</success_criteria>
|
|
106
|
+
````
|
|
107
|
+
|
|
108
|
+
Or:
|
|
109
|
+
|
|
110
|
+
```xml
|
|
111
|
+
<when_successful>
|
|
112
|
+
The task is successful when:
|
|
113
|
+
- All pages processed without errors
|
|
114
|
+
- Output matches expected format
|
|
115
|
+
- Data is complete and accurate
|
|
116
|
+
</when_successful>
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
</tag>
|
|
120
|
+
</required_tags>
|
|
121
|
+
|
|
122
|
+
<conditional_tags>
|
|
123
|
+
Add based on skill complexity and domain requirements:
|
|
124
|
+
|
|
125
|
+
<tag name="context">
|
|
126
|
+
**When to use**: Background information needed to understand the skill
|
|
127
|
+
|
|
128
|
+
**Content**: Situational context, domain background, prerequisites
|
|
129
|
+
|
|
130
|
+
**Example**:
|
|
131
|
+
|
|
132
|
+
```xml
|
|
133
|
+
<context>
|
|
134
|
+
PDF files use the Portable Document Format standard, which encapsulates fonts, images, and layout information. Text extraction requires parsing this structure while preserving meaning.
|
|
135
|
+
|
|
136
|
+
Modern PDF libraries like pdfplumber provide high-level APIs for extraction while handling the underlying complexity.
|
|
137
|
+
</context>
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
</tag>
|
|
141
|
+
|
|
142
|
+
<tag name="workflow">
|
|
143
|
+
**When to use**: Step-by-step procedures needed
|
|
144
|
+
|
|
145
|
+
**Content**: Numbered or ordered steps to complete a task
|
|
146
|
+
|
|
147
|
+
**Alternative**: Can use `<process>` instead
|
|
148
|
+
|
|
149
|
+
**Example**:
|
|
150
|
+
|
|
151
|
+
```xml
|
|
152
|
+
<workflow>
|
|
153
|
+
1. **Analyze PDF structure**: Use `pdfplumber.open()` to inspect pages
|
|
154
|
+
2. **Extract content**: Call `extract_text()` or `extract_tables()`
|
|
155
|
+
3. **Process data**: Clean and structure extracted content
|
|
156
|
+
4. **Validate output**: Verify completeness and accuracy
|
|
157
|
+
5. **Save results**: Write to JSON, CSV, or database
|
|
158
|
+
</workflow>
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
</tag>
|
|
162
|
+
|
|
163
|
+
<tag name="advanced_features">
|
|
164
|
+
**When to use**: Deep-dive topics for experienced users
|
|
165
|
+
|
|
166
|
+
**Content**: Complex features, optimizations, edge cases
|
|
167
|
+
|
|
168
|
+
**Example**:
|
|
169
|
+
|
|
170
|
+
````xml
|
|
171
|
+
<advanced_features>
|
|
172
|
+
<form_filling>
|
|
173
|
+
Fill PDF forms programmatically:
|
|
174
|
+
|
|
175
|
+
```python
|
|
176
|
+
from pdfrw import PdfReader, PdfWriter
|
|
177
|
+
|
|
178
|
+
template_pdf = PdfReader('template.pdf')
|
|
179
|
+
# Modify form fields
|
|
180
|
+
PdfWriter('filled.pdf', trailer=template_pdf).write()
|
|
181
|
+
````
|
|
182
|
+
|
|
183
|
+
See [references/form-filling.md](references/form-filling.md) for complete guide.
|
|
184
|
+
</form_filling>
|
|
185
|
+
|
|
186
|
+
<performance_optimization>
|
|
187
|
+
For large PDFs, process pages in parallel. See [references/performance.md](references/performance.md).
|
|
188
|
+
</performance_optimization>
|
|
189
|
+
</advanced_features>
|
|
190
|
+
|
|
191
|
+
````
|
|
192
|
+
</tag>
|
|
193
|
+
|
|
194
|
+
<tag name="validation">
|
|
195
|
+
**When to use**: Output verification is critical
|
|
196
|
+
|
|
197
|
+
**Content**: How to verify outputs are correct
|
|
198
|
+
|
|
199
|
+
**Example**:
|
|
200
|
+
```xml
|
|
201
|
+
<validation>
|
|
202
|
+
<text_extraction>
|
|
203
|
+
Verify extracted text:
|
|
204
|
+
- Check character count matches expected range
|
|
205
|
+
- Ensure no mojibake (encoding issues)
|
|
206
|
+
- Validate special characters preserved
|
|
207
|
+
</text_extraction>
|
|
208
|
+
|
|
209
|
+
<table_extraction>
|
|
210
|
+
Verify extracted tables:
|
|
211
|
+
- Row count matches PDF
|
|
212
|
+
- Column alignment preserved
|
|
213
|
+
- Numeric values unchanged
|
|
214
|
+
</table_extraction>
|
|
215
|
+
</validation>
|
|
216
|
+
````
|
|
217
|
+
|
|
218
|
+
</tag>
|
|
219
|
+
|
|
220
|
+
<tag name="examples">
|
|
221
|
+
**When to use**: Multiple examples help understanding
|
|
222
|
+
|
|
223
|
+
**Content**: Multi-shot learning examples with input/output pairs
|
|
224
|
+
|
|
225
|
+
**Example**:
|
|
226
|
+
|
|
227
|
+
````xml
|
|
228
|
+
<examples>
|
|
229
|
+
<example number="1">
|
|
230
|
+
<task>Extract text from simple PDF</task>
|
|
231
|
+
<code>
|
|
232
|
+
```python
|
|
233
|
+
import pdfplumber
|
|
234
|
+
with pdfplumber.open("simple.pdf") as pdf:
|
|
235
|
+
text = pdf.pages[0].extract_text()
|
|
236
|
+
print(text)
|
|
237
|
+
````
|
|
238
|
+
|
|
239
|
+
</code>
|
|
240
|
+
<output>
|
|
241
|
+
This is the text from the PDF...
|
|
242
|
+
</output>
|
|
243
|
+
</example>
|
|
244
|
+
|
|
245
|
+
<example number="2">
|
|
246
|
+
<task>Extract tables with custom settings</task>
|
|
247
|
+
<code>
|
|
248
|
+
```python
|
|
249
|
+
with pdfplumber.open("tables.pdf") as pdf:
|
|
250
|
+
table = pdf.pages[0].extract_table({
|
|
251
|
+
"vertical_strategy": "lines",
|
|
252
|
+
"horizontal_strategy": "lines"
|
|
253
|
+
})
|
|
254
|
+
```
|
|
255
|
+
</code>
|
|
256
|
+
</example>
|
|
257
|
+
</examples>
|
|
258
|
+
```
|
|
259
|
+
</tag>
|
|
260
|
+
|
|
261
|
+
<tag name="anti_patterns">
|
|
262
|
+
**When to use**: Common mistakes should be avoided
|
|
263
|
+
|
|
264
|
+
**Content**: Bad practices with explanations and alternatives
|
|
265
|
+
|
|
266
|
+
**Example**:
|
|
267
|
+
|
|
268
|
+
````xml
|
|
269
|
+
<anti_patterns>
|
|
270
|
+
<pitfall name="reading_entire_pdf">
|
|
271
|
+
❌ **Bad**: Reading entire PDF into memory at once
|
|
272
|
+
|
|
273
|
+
```python
|
|
274
|
+
text = "".join([page.extract_text() for page in pdf.pages])
|
|
275
|
+
````
|
|
276
|
+
|
|
277
|
+
**Why bad**: Large PDFs cause memory issues
|
|
278
|
+
|
|
279
|
+
✅ **Good**: Process page by page
|
|
280
|
+
|
|
281
|
+
```python
|
|
282
|
+
for page in pdf.pages:
|
|
283
|
+
text = page.extract_text()
|
|
284
|
+
process(text)
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
</pitfall>
|
|
288
|
+
</anti_patterns>
|
|
289
|
+
```
|
|
290
|
+
</tag>
|
|
291
|
+
|
|
292
|
+
<tag name="security_checklist">
|
|
293
|
+
**When to use**: Security is critical (APIs, auth, payments)
|
|
294
|
+
|
|
295
|
+
**Content**: Non-negotiable security patterns and checks
|
|
296
|
+
|
|
297
|
+
**Example**:
|
|
298
|
+
|
|
299
|
+
```xml
|
|
300
|
+
<security_checklist>
|
|
301
|
+
**Before deploying**:
|
|
302
|
+
|
|
303
|
+
- [ ] API keys stored in environment variables (never hardcoded)
|
|
304
|
+
- [ ] Input validation for all user-provided data
|
|
305
|
+
- [ ] Rate limiting implemented
|
|
306
|
+
- [ ] Error messages don't leak sensitive information
|
|
307
|
+
- [ ] HTTPS used for all API calls
|
|
308
|
+
- [ ] Authentication tokens refreshed properly
|
|
309
|
+
</security_checklist>
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
</tag>
|
|
313
|
+
|
|
314
|
+
<tag name="testing">
|
|
315
|
+
**When to use**: Testing workflows are important
|
|
316
|
+
|
|
317
|
+
**Content**: How to test the skill's functionality
|
|
318
|
+
|
|
319
|
+
**Example**:
|
|
320
|
+
|
|
321
|
+
````xml
|
|
322
|
+
<testing>
|
|
323
|
+
<unit_tests>
|
|
324
|
+
Test individual functions:
|
|
325
|
+
|
|
326
|
+
```python
|
|
327
|
+
def test_extract_text():
|
|
328
|
+
with pdfplumber.open("test.pdf") as pdf:
|
|
329
|
+
text = pdf.pages[0].extract_text()
|
|
330
|
+
assert len(text) > 0
|
|
331
|
+
assert "expected content" in text
|
|
332
|
+
````
|
|
333
|
+
|
|
334
|
+
</unit_tests>
|
|
335
|
+
|
|
336
|
+
<integration_tests>
|
|
337
|
+
Test full workflow:
|
|
338
|
+
|
|
339
|
+
```python
|
|
340
|
+
def test_full_extraction():
|
|
341
|
+
result = extract_pdf_to_json("input.pdf")
|
|
342
|
+
assert result["page_count"] == 5
|
|
343
|
+
assert len(result["text"]) > 1000
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
</integration_tests>
|
|
347
|
+
</testing>
|
|
348
|
+
|
|
349
|
+
````
|
|
350
|
+
</tag>
|
|
351
|
+
|
|
352
|
+
<tag name="common_patterns">
|
|
353
|
+
**When to use**: Reusable code patterns exist
|
|
354
|
+
|
|
355
|
+
**Content**: Code examples and recipes for common tasks
|
|
356
|
+
|
|
357
|
+
**Example**:
|
|
358
|
+
```xml
|
|
359
|
+
<common_patterns>
|
|
360
|
+
<pattern name="batch_processing">
|
|
361
|
+
Process multiple PDFs:
|
|
362
|
+
|
|
363
|
+
```python
|
|
364
|
+
from pathlib import Path
|
|
365
|
+
|
|
366
|
+
pdf_dir = Path("pdfs/")
|
|
367
|
+
for pdf_file in pdf_dir.glob("*.pdf"):
|
|
368
|
+
with pdfplumber.open(pdf_file) as pdf:
|
|
369
|
+
text = pdf.pages[0].extract_text()
|
|
370
|
+
output_file = pdf_file.with_suffix(".txt")
|
|
371
|
+
output_file.write_text(text)
|
|
372
|
+
````
|
|
373
|
+
|
|
374
|
+
</pattern>
|
|
375
|
+
|
|
376
|
+
<pattern name="error_handling">
|
|
377
|
+
Handle corrupted PDFs gracefully:
|
|
378
|
+
|
|
379
|
+
```python
|
|
380
|
+
try:
|
|
381
|
+
with pdfplumber.open(pdf_path) as pdf:
|
|
382
|
+
text = pdf.pages[0].extract_text()
|
|
383
|
+
except Exception as e:
|
|
384
|
+
print(f"Failed to process {pdf_path}: {e}")
|
|
385
|
+
continue
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
</pattern>
|
|
389
|
+
</common_patterns>
|
|
390
|
+
```
|
|
391
|
+
</tag>
|
|
392
|
+
|
|
393
|
+
<tag name="reference_guides">
|
|
394
|
+
**When to use**: Detailed content exists in reference files
|
|
395
|
+
|
|
396
|
+
**Content**: Links to reference files with descriptions
|
|
397
|
+
|
|
398
|
+
**Alternative**: Can use `<detailed_references>` instead
|
|
399
|
+
|
|
400
|
+
**Example**:
|
|
401
|
+
|
|
402
|
+
```xml
|
|
403
|
+
<reference_guides>
|
|
404
|
+
For deeper topics, see reference files:
|
|
405
|
+
|
|
406
|
+
- **`references/form-filling.md`** - Complete guide to PDF form filling
|
|
407
|
+
- **`references/performance.md`** - Performance optimization techniques
|
|
408
|
+
- **`references/troubleshooting.md`** - Common issues and solutions
|
|
409
|
+
- **`references/api-reference.md`** - Complete API documentation
|
|
410
|
+
</reference_guides>
|
|
411
|
+
```
|
|
412
|
+
|
|
413
|
+
</tag>
|
|
414
|
+
</conditional_tags>
|
|
415
|
+
|
|
416
|
+
<xml_nesting>
|
|
417
|
+
<principle>
|
|
418
|
+
Properly nest XML tags for hierarchical content. Always close tags.
|
|
419
|
+
</principle>
|
|
420
|
+
|
|
421
|
+
<examples>
|
|
422
|
+
<simple_nesting>
|
|
423
|
+
```xml
|
|
424
|
+
<objective>
|
|
425
|
+
Content here
|
|
426
|
+
</objective>
|
|
427
|
+
```
|
|
428
|
+
</simple_nesting>
|
|
429
|
+
|
|
430
|
+
<nested_structure>
|
|
431
|
+
|
|
432
|
+
```xml
|
|
433
|
+
<examples>
|
|
434
|
+
<example number="1">
|
|
435
|
+
<input>User input here</input>
|
|
436
|
+
<output>Expected output here</output>
|
|
437
|
+
</example>
|
|
438
|
+
|
|
439
|
+
<example number="2">
|
|
440
|
+
<input>Another input</input>
|
|
441
|
+
<output>Another output</output>
|
|
442
|
+
</example>
|
|
443
|
+
</examples>
|
|
444
|
+
```
|
|
445
|
+
|
|
446
|
+
</nested_structure>
|
|
447
|
+
|
|
448
|
+
<deep_nesting>
|
|
449
|
+
|
|
450
|
+
````xml
|
|
451
|
+
<advanced_features>
|
|
452
|
+
<feature_a>
|
|
453
|
+
<overview>Feature A overview</overview>
|
|
454
|
+
<usage>
|
|
455
|
+
```python
|
|
456
|
+
# Code example
|
|
457
|
+
````
|
|
458
|
+
|
|
459
|
+
</usage>
|
|
460
|
+
</feature_a>
|
|
461
|
+
|
|
462
|
+
<feature_b>
|
|
463
|
+
<overview>Feature B overview</overview>
|
|
464
|
+
<usage>
|
|
465
|
+
|
|
466
|
+
```python
|
|
467
|
+
# Code example
|
|
468
|
+
```
|
|
469
|
+
|
|
470
|
+
</usage>
|
|
471
|
+
</feature_b>
|
|
472
|
+
</advanced_features>
|
|
473
|
+
```
|
|
474
|
+
</deep_nesting>
|
|
475
|
+
</examples>
|
|
476
|
+
</xml_nesting>
|
|
477
|
+
|
|
478
|
+
<tag_naming_conventions>
|
|
479
|
+
<use_descriptive_names>
|
|
480
|
+
Use descriptive, semantic names:
|
|
481
|
+
|
|
482
|
+
✅ `<workflow>` not `<steps>`
|
|
483
|
+
✅ `<success_criteria>` not `<done>`
|
|
484
|
+
✅ `<anti_patterns>` not `<dont_do>`
|
|
485
|
+
✅ `<reference_guides>` not `<links>`
|
|
486
|
+
</use_descriptive_names>
|
|
487
|
+
|
|
488
|
+
<be_consistent>
|
|
489
|
+
Be consistent within your skill. If you use `<workflow>`, don't also use `<process>` for the same purpose (unless they serve different roles).
|
|
490
|
+
</be_consistent>
|
|
491
|
+
|
|
492
|
+
<use_underscores>
|
|
493
|
+
For multi-word tag names, use underscores:
|
|
494
|
+
|
|
495
|
+
✅ `<success_criteria>`
|
|
496
|
+
✅ `<advanced_features>`
|
|
497
|
+
✅ `<reference_guides>`
|
|
498
|
+
|
|
499
|
+
Not hyphens or camelCase:
|
|
500
|
+
|
|
501
|
+
❌ `<success-criteria>`
|
|
502
|
+
❌ `<successCriteria>`
|
|
503
|
+
</use_underscores>
|
|
504
|
+
</tag_naming_conventions>
|
|
505
|
+
|
|
506
|
+
<markdown_within_xml>
|
|
507
|
+
<allowed_formatting>
|
|
508
|
+
Markdown formatting is allowed WITHIN XML tag content:
|
|
509
|
+
|
|
510
|
+
✅ **Bold**: `**text**`
|
|
511
|
+
✅ **Italic**: `*text*`
|
|
512
|
+
✅ **Lists**: `- item`
|
|
513
|
+
✅ **Code blocks**: ` ```python `
|
|
514
|
+
✅ **Links**: `[text](url)`
|
|
515
|
+
✅ **Inline code**: `` `code` ``
|
|
516
|
+
|
|
517
|
+
**Example**:
|
|
518
|
+
|
|
519
|
+
````xml
|
|
520
|
+
<quick_start>
|
|
521
|
+
Extract text with **pdfplumber**:
|
|
522
|
+
|
|
523
|
+
```python
|
|
524
|
+
import pdfplumber
|
|
525
|
+
with pdfplumber.open("file.pdf") as pdf:
|
|
526
|
+
text = pdf.pages[0].extract_text()
|
|
527
|
+
````
|
|
528
|
+
|
|
529
|
+
For _advanced_ usage, see [references/advanced.md](references/advanced.md).
|
|
530
|
+
</quick_start>
|
|
531
|
+
|
|
532
|
+
````
|
|
533
|
+
</allowed_formatting>
|
|
534
|
+
|
|
535
|
+
<not_allowed>
|
|
536
|
+
❌ **Markdown headings**: `# Heading`
|
|
537
|
+
❌ **Horizontal rules**: `---`
|
|
538
|
+
❌ **HTML tags**: `<div>` (unless they're semantic XML tags)
|
|
539
|
+
</not_allowed>
|
|
540
|
+
</markdown_within_xml>
|
|
541
|
+
|
|
542
|
+
<intelligence_rules>
|
|
543
|
+
<simple_skills>
|
|
544
|
+
**Use**: Required tags only
|
|
545
|
+
|
|
546
|
+
**Example domains**: Text extraction, file format conversion, simple API calls
|
|
547
|
+
|
|
548
|
+
```xml
|
|
549
|
+
<objective>...</objective>
|
|
550
|
+
<quick_start>...</quick_start>
|
|
551
|
+
<success_criteria>...</success_criteria>
|
|
552
|
+
````
|
|
553
|
+
|
|
554
|
+
</simple_skills>
|
|
555
|
+
|
|
556
|
+
<medium_skills>
|
|
557
|
+
**Use**: Required tags + workflow/examples as needed
|
|
558
|
+
|
|
559
|
+
**Example domains**: Document processing with steps, API integration with configuration
|
|
560
|
+
|
|
561
|
+
```xml
|
|
562
|
+
<objective>...</objective>
|
|
563
|
+
<quick_start>...</quick_start>
|
|
564
|
+
<workflow>...</workflow>
|
|
565
|
+
<examples>...</examples>
|
|
566
|
+
<success_criteria>...</success_criteria>
|
|
567
|
+
```
|
|
568
|
+
|
|
569
|
+
</medium_skills>
|
|
570
|
+
|
|
571
|
+
<complex_skills>
|
|
572
|
+
**Use**: Required tags + conditional tags as appropriate
|
|
573
|
+
|
|
574
|
+
**Example domains**: Payment processing, authentication systems, multi-step workflows with validation
|
|
575
|
+
|
|
576
|
+
```xml
|
|
577
|
+
<objective>...</objective>
|
|
578
|
+
<context>...</context>
|
|
579
|
+
<quick_start>...</quick_start>
|
|
580
|
+
<workflow>...</workflow>
|
|
581
|
+
<validation>...</validation>
|
|
582
|
+
<security_checklist>...</security_checklist>
|
|
583
|
+
<anti_patterns>...</anti_patterns>
|
|
584
|
+
<reference_guides>...</reference_guides>
|
|
585
|
+
<success_criteria>...</success_criteria>
|
|
586
|
+
```
|
|
587
|
+
|
|
588
|
+
</complex_skills>
|
|
589
|
+
|
|
590
|
+
<principle>
|
|
591
|
+
Don't over-engineer simple skills. Don't under-specify complex skills. Match tag selection to actual complexity and user needs.
|
|
592
|
+
</principle>
|
|
593
|
+
</intelligence_rules>
|
|
594
|
+
|
|
595
|
+
<validation_checklist>
|
|
596
|
+
Before finalizing, verify:
|
|
597
|
+
|
|
598
|
+
- [ ] No markdown headings in body (#, ##, ###)
|
|
599
|
+
- [ ] All required tags present (objective, quick_start, success_criteria)
|
|
600
|
+
- [ ] All XML tags properly closed
|
|
601
|
+
- [ ] Conditional tags appropriate for complexity
|
|
602
|
+
- [ ] Nested tags have correct indentation
|
|
603
|
+
- [ ] Tag names are descriptive and consistent
|
|
604
|
+
- [ ] Markdown formatting used only within tags
|
|
605
|
+
- [ ] Reference links use relative paths
|
|
606
|
+
</validation_checklist>
|