dfseo 1.0.0__tar.gz

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 (61) hide show
  1. dfseo-1.0.0/.github/workflows/publish.yml +21 -0
  2. dfseo-1.0.0/.gitignore +9 -0
  3. dfseo-1.0.0/Dfseo-CLI-openclaw-skill.md +524 -0
  4. dfseo-1.0.0/Dfseo-agent-plan.md +457 -0
  5. dfseo-1.0.0/LICENSE +21 -0
  6. dfseo-1.0.0/MANIFEST.in +8 -0
  7. dfseo-1.0.0/PKG-INFO +252 -0
  8. dfseo-1.0.0/PYPI-TODO.md +108 -0
  9. dfseo-1.0.0/README.md +214 -0
  10. dfseo-1.0.0/SKILL.md +656 -0
  11. dfseo-1.0.0/dfseo-CLI spec.md +560 -0
  12. dfseo-1.0.0/dfseo-CLI-landing-brief.md +557 -0
  13. dfseo-1.0.0/dfseo-CLI-pypi-brief.md +347 -0
  14. dfseo-1.0.0/dfseo-CLI-spec-v1.1.md +750 -0
  15. dfseo-1.0.0/dfseo-CLI-spec-v1.2.md +804 -0
  16. dfseo-1.0.0/dfseo-CLI-spec-v1.3.md +745 -0
  17. dfseo-1.0.0/pyproject.toml +82 -0
  18. dfseo-1.0.0/src/dfseo/__init__.py +3 -0
  19. dfseo-1.0.0/src/dfseo/banner.py +85 -0
  20. dfseo-1.0.0/src/dfseo/cli.py +81 -0
  21. dfseo-1.0.0/src/dfseo/client.py +466 -0
  22. dfseo-1.0.0/src/dfseo/commands/__init__.py +1 -0
  23. dfseo-1.0.0/src/dfseo/commands/auth.py +86 -0
  24. dfseo-1.0.0/src/dfseo/commands/backlinks.py +1661 -0
  25. dfseo-1.0.0/src/dfseo/commands/backlinks.py.bak +1450 -0
  26. dfseo-1.0.0/src/dfseo/commands/config.py +90 -0
  27. dfseo-1.0.0/src/dfseo/commands/describe.py +629 -0
  28. dfseo-1.0.0/src/dfseo/commands/keywords.py +1862 -0
  29. dfseo-1.0.0/src/dfseo/commands/keywords.py.bak +1631 -0
  30. dfseo-1.0.0/src/dfseo/commands/serp.py +546 -0
  31. dfseo-1.0.0/src/dfseo/commands/site.py +2085 -0
  32. dfseo-1.0.0/src/dfseo/commands/site.py.bak +2012 -0
  33. dfseo-1.0.0/src/dfseo/config.py +198 -0
  34. dfseo-1.0.0/src/dfseo/models.py +105 -0
  35. dfseo-1.0.0/src/dfseo/output.py +409 -0
  36. dfseo-1.0.0/src/dfseo/polling.py +245 -0
  37. dfseo-1.0.0/src/dfseo/pricing.py +125 -0
  38. dfseo-1.0.0/src/dfseo/validation.py +240 -0
  39. dfseo-1.0.0/tests/__init__.py +1 -0
  40. dfseo-1.0.0/tests/fixtures/auth_error_response.json +10 -0
  41. dfseo-1.0.0/tests/fixtures/bing_serp_response.json +101 -0
  42. dfseo-1.0.0/tests/fixtures/google_ads_suggestions_response.json +51 -0
  43. dfseo-1.0.0/tests/fixtures/google_ads_volume_response.json +57 -0
  44. dfseo-1.0.0/tests/fixtures/google_serp_response.json +206 -0
  45. dfseo-1.0.0/tests/fixtures/insufficient_balance_response.json +10 -0
  46. dfseo-1.0.0/tests/fixtures/keyword_difficulty_response.json +49 -0
  47. dfseo-1.0.0/tests/fixtures/keyword_suggestions_response.json +86 -0
  48. dfseo-1.0.0/tests/fixtures/keyword_volume_response.json +86 -0
  49. dfseo-1.0.0/tests/fixtures/keywords_for_site_response.json +58 -0
  50. dfseo-1.0.0/tests/fixtures/languages_response.json +91 -0
  51. dfseo-1.0.0/tests/fixtures/locations_response.json +136 -0
  52. dfseo-1.0.0/tests/fixtures/rate_limit_response.json +10 -0
  53. dfseo-1.0.0/tests/fixtures/search_intent_response.json +55 -0
  54. dfseo-1.0.0/tests/fixtures/user_data_response.json +50 -0
  55. dfseo-1.0.0/tests/fixtures/youtube_serp_response.json +87 -0
  56. dfseo-1.0.0/tests/test_backlinks.py +259 -0
  57. dfseo-1.0.0/tests/test_client.py +462 -0
  58. dfseo-1.0.0/tests/test_keywords.py +661 -0
  59. dfseo-1.0.0/tests/test_serp.py +508 -0
  60. dfseo-1.0.0/tests/test_site.py +273 -0
  61. dfseo-1.0.0/uv.lock +1023 -0
@@ -0,0 +1,21 @@
1
+ name: Publish to PyPI
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+
7
+ permissions:
8
+ id-token: write
9
+
10
+ jobs:
11
+ publish:
12
+ runs-on: ubuntu-latest
13
+ environment: pypi
14
+ steps:
15
+ - uses: actions/checkout@v4
16
+ - uses: actions/setup-python@v5
17
+ with:
18
+ python-version: "3.12"
19
+ - run: pip install build
20
+ - run: python -m build
21
+ - uses: pypa/gh-action-pypi-publish@release/v1
dfseo-1.0.0/.gitignore ADDED
@@ -0,0 +1,9 @@
1
+ __pycache__/
2
+ *.pyc
3
+ *.pyo
4
+ *.egg-info/
5
+ dist/
6
+ build/
7
+ .pytest_cache/
8
+ .mypy_cache/
9
+ .ruff_cache/
@@ -0,0 +1,524 @@
1
+ # dfseo-cli β€” OpenClaw Skill Integration Brief
2
+
3
+ > Brief per Claude Code β€” Pubblicazione come skill OpenClaw
4
+ > Autore: Ricc | Data: Marzo 2026
5
+ > Prerequisito: dfseo-cli installato e funzionante
6
+
7
+ -----
8
+
9
+ ## Obiettivo
10
+
11
+ Creare una skill OpenClaw completa per `dfseo-cli` che permetta a qualsiasi agente OpenClaw di fare SEO research, keyword analysis, site audit e backlink analysis in autonomia.
12
+
13
+ La skill deve essere:
14
+
15
+ 1. Installabile da ClawHub (`clawhub install dfseo`)
16
+ 1. Installabile manualmente copiando la cartella in `~/.openclaw/skills/`
17
+ 1. Completa di riferimenti per ogni command group
18
+
19
+ -----
20
+
21
+ ## Struttura cartella skill
22
+
23
+ ```
24
+ dfseo/
25
+ β”œβ”€β”€ SKILL.md # Main skill file (frontmatter + istruzioni)
26
+ β”œβ”€β”€ references/
27
+ β”‚ β”œβ”€β”€ serp.md # Reference completo comandi SERP
28
+ β”‚ β”œβ”€β”€ keywords.md # Reference completo comandi Keywords
29
+ β”‚ β”œβ”€β”€ site.md # Reference completo comandi Site Audit
30
+ β”‚ └── backlinks.md # Reference completo comandi Backlinks
31
+ β”œβ”€β”€ examples/
32
+ β”‚ β”œβ”€β”€ keyword-research.md # Workflow: keyword research completo
33
+ β”‚ β”œβ”€β”€ competitor-audit.md # Workflow: audit competitor
34
+ β”‚ └── link-building.md # Workflow: trovare opportunitΓ  link building
35
+ └── scripts/
36
+ └── install.sh # Script di installazione (pip install dfseo)
37
+ ```
38
+
39
+ -----
40
+
41
+ ## SKILL.md β€” File principale
42
+
43
+ ```markdown
44
+ ---
45
+ name: dfseo
46
+ description: "SEO data from the terminal using DataForSEO APIs. Use when the user asks to check keyword rankings, analyze SERPs, run site audits, check backlink profiles, find keyword opportunities, compare competitors, do link gap analysis, check keyword difficulty or search volume, audit on-page SEO, or get Lighthouse scores. Triggers on: 'SEO', 'SERP', 'keyword research', 'backlinks', 'site audit', 'keyword difficulty', 'search volume', 'link building', 'competitor analysis', 'on-page SEO', 'Lighthouse', 'keyword ranking', 'referring domains', 'anchor text'."
47
+ metadata:
48
+ openclaw:
49
+ emoji: "πŸ”"
50
+ requires:
51
+ bins:
52
+ - dfseo
53
+ env:
54
+ - DATAFORSEO_LOGIN
55
+ - DATAFORSEO_PASSWORD
56
+ install:
57
+ - id: pip
58
+ kind: pip
59
+ package: dfseo
60
+ bins:
61
+ - dfseo
62
+ label: "Install dfseo CLI (pip)"
63
+ ---
64
+
65
+ # dfseo-cli β€” SEO Data from Your Terminal
66
+
67
+ A CLI tool wrapping DataForSEO APIs. 43 commands for SERP analysis, keyword research, site audits, and backlink analysis. All output is JSON by default (machine-readable). Add `--output table` for human-readable format.
68
+
69
+ ## Authentication
70
+
71
+ Requires DataForSEO API credentials. Set them as environment variables:
72
+
73
+ ```bash
74
+ export DATAFORSEO_LOGIN="your@email.com"
75
+ export DATAFORSEO_PASSWORD="your_api_password"
76
+ ```
77
+
78
+ Or run `dfseo auth setup` for interactive configuration (saves to `~/.config/dfseo/config.toml`).
79
+
80
+ Verify with: `dfseo auth status`
81
+
82
+ ## Quick Reference
83
+
84
+ ### SERP Analysis
85
+
86
+ ```bash
87
+ # Google SERP for any keyword + location
88
+ dfseo serp google "keyword" --location "Country" --language "Language"
89
+
90
+ # Compare Google vs Bing
91
+ dfseo serp compare "keyword" --engines google,bing
92
+
93
+ # YouTube results
94
+ dfseo serp youtube "keyword"
95
+ ```
96
+
97
+ ### Keyword Research
98
+
99
+ ```bash
100
+ # Volume, CPC, difficulty, search intent
101
+ dfseo keywords volume "kw1" "kw2" --location "Country" --include-serp-info
102
+
103
+ # Long-tail suggestions
104
+ dfseo keywords suggestions "seed keyword" --min-volume 100 --max-difficulty 40
105
+
106
+ # Semantically related keywords
107
+ dfseo keywords ideas "seed1" "seed2" --limit 100
108
+
109
+ # Bulk difficulty check (up to 1000)
110
+ dfseo keywords difficulty "kw1" "kw2" "kw3"
111
+ # Or from file:
112
+ dfseo keywords difficulty --from-file keywords.txt
113
+
114
+ # Keywords a domain ranks for
115
+ dfseo keywords for-site "domain.com" --min-volume 50 --sort volume
116
+ ```
117
+
118
+ ### Site Audit
119
+
120
+ ```bash
121
+ # Full audit (crawl + wait + summary)
122
+ dfseo site audit "domain.com" --max-pages 100 --wait
123
+
124
+ # Quick single-page check
125
+ dfseo site audit "https://domain.com/page" --max-pages 1
126
+
127
+ # Drill down after audit
128
+ dfseo site pages "$TASK_ID" --errors-only
129
+ dfseo site links "$TASK_ID" --type broken
130
+ dfseo site duplicates "$TASK_ID" --type title
131
+
132
+ # Lighthouse performance
133
+ dfseo site lighthouse "https://domain.com" --categories performance --wait
134
+ ```
135
+
136
+ ### Backlink Analysis
137
+
138
+ ```bash
139
+ # Backlink profile summary
140
+ dfseo backlinks summary "domain.com"
141
+
142
+ # List backlinks (new, lost, broken)
143
+ dfseo backlinks list "domain.com" --dofollow-only --sort rank
144
+ dfseo backlinks list "domain.com" --status new
145
+ dfseo backlinks list "domain.com" --status lost
146
+
147
+ # Anchor text analysis
148
+ dfseo backlinks anchors "domain.com" --search "brand" --sort backlinks
149
+
150
+ # Link gap: who links to competitors but not to you
151
+ dfseo backlinks gap "your-site.com" "competitor1.com" "competitor2.com"
152
+
153
+ # Bulk rank comparison (up to 1000 domains)
154
+ dfseo backlinks bulk ranks "site1.com" "site2.com" "site3.com"
155
+ dfseo backlinks bulk ranks --from-file domains.txt
156
+
157
+ # Historical backlink data (since 2019)
158
+ dfseo backlinks history "domain.com" --from 2024-01 --to 2026-03
159
+ ```
160
+
161
+ ## Output Conventions
162
+
163
+ - **Default output: JSON on stdout** β€” always parseable, no decorative text
164
+ - **Errors and progress: stderr** β€” never mixed with results
165
+ - **`--output table`** β€” human-readable formatted tables
166
+ - **`--output csv`** β€” for spreadsheets and data pipelines
167
+ - **`-q` / `--quiet`** β€” suppress everything except the result
168
+
169
+ Exit codes: 0 = success, 1 = error, 2 = auth failed, 3 = rate limited, 4 = bad params, 5 = insufficient funds.
170
+
171
+ ## Common Patterns
172
+
173
+ ### Keyword research workflow
174
+
175
+ ```bash
176
+ # 1. Get seed keyword data
177
+ dfseo keywords volume "email hosting" --location "Italy" --language "Italian" --include-serp-info
178
+
179
+ # 2. Expand with suggestions
180
+ dfseo keywords suggestions "email hosting" --min-volume 50 --max-difficulty 40 --limit 50
181
+
182
+ # 3. Check difficulty for best candidates
183
+ dfseo keywords difficulty "email hosting professionale" "hosting email aziendale" --location "Italy"
184
+ ```
185
+
186
+ ### Competitor analysis workflow
187
+
188
+ ```bash
189
+ # 1. Check competitor SERP presence
190
+ dfseo serp google "target keyword" --location "Italy" --depth 100
191
+
192
+ # 2. Find their keywords
193
+ dfseo keywords for-site "competitor.com" --location "Italy" --min-volume 100
194
+
195
+ # 3. Analyze their backlinks
196
+ dfseo backlinks summary "competitor.com"
197
+
198
+ # 4. Find link gap opportunities
199
+ dfseo backlinks gap "your-site.com" "competitor.com" --min-rank 200
200
+ ```
201
+
202
+ ### Site health check
203
+
204
+ ```bash
205
+ # 1. Full audit
206
+ dfseo site audit "domain.com" --max-pages 200 --wait
207
+
208
+ # 2. Performance check
209
+ dfseo site lighthouse "https://domain.com" --wait
210
+
211
+ # 3. Check for broken links
212
+ dfseo site links "$TASK_ID" --type broken
213
+ ```
214
+
215
+ ## Service References
216
+
217
+ For detailed command documentation, load the specific reference file:
218
+
219
+ - **SERP commands** β€” See <references/serp.md>
220
+ - **Keywords commands** β€” See <references/keywords.md>
221
+ - **Site Audit commands** β€” See <references/site.md>
222
+ - **Backlinks commands** β€” See <references/backlinks.md>
223
+
224
+ ## Important Notes
225
+
226
+ - Site audits are async: `dfseo site audit` with `--wait` blocks until crawl completes. Without `--wait`, it returns a task_id for later retrieval.
227
+ - Google Ads endpoints (`keywords ads-volume`, `keywords ads-suggestions`) have a 12 req/min rate limit.
228
+ - Backlinks API requires a $100/month minimum DataForSEO commitment.
229
+ - The `--from-file` flag accepts text files with one item per line (# comments and blank lines ignored).
230
+ - All location/language defaults can be set globally via `dfseo config set location "Italy"`.
231
+
232
+ ```
233
+ ---
234
+
235
+ ## Reference Files
236
+
237
+ ### references/serp.md
238
+
239
+ Deve contenere per ogni comando SERP:
240
+ - Sintassi completa con tutti i flag
241
+ - Descrizione di ogni flag
242
+ - Un esempio di comando
243
+ - Un esempio di output JSON (abbreviato)
244
+
245
+ Comandi da documentare:
246
+ - `dfseo serp google`
247
+ - `dfseo serp bing`
248
+ - `dfseo serp youtube`
249
+ - `dfseo serp compare`
250
+ - `dfseo serp locations`
251
+ - `dfseo serp languages`
252
+ - `dfseo auth setup`
253
+ - `dfseo auth status`
254
+ - `dfseo config set` / `dfseo config show`
255
+
256
+ ### references/keywords.md
257
+
258
+ Comandi da documentare:
259
+ - `dfseo keywords volume`
260
+ - `dfseo keywords suggestions`
261
+ - `dfseo keywords ideas`
262
+ - `dfseo keywords difficulty`
263
+ - `dfseo keywords search-intent`
264
+ - `dfseo keywords for-site`
265
+ - `dfseo keywords ads-volume`
266
+ - `dfseo keywords ads-suggestions`
267
+
268
+ ### references/site.md
269
+
270
+ Comandi da documentare:
271
+ - `dfseo site audit`
272
+ - `dfseo site crawl`
273
+ - `dfseo site summary`
274
+ - `dfseo site pages`
275
+ - `dfseo site links`
276
+ - `dfseo site duplicates`
277
+ - `dfseo site redirects`
278
+ - `dfseo site non-indexable`
279
+ - `dfseo site resources`
280
+ - `dfseo site lighthouse`
281
+ - `dfseo site tasks`
282
+
283
+ ### references/backlinks.md
284
+
285
+ Comandi da documentare:
286
+ - `dfseo backlinks summary`
287
+ - `dfseo backlinks list`
288
+ - `dfseo backlinks anchors`
289
+ - `dfseo backlinks referring-domains`
290
+ - `dfseo backlinks history`
291
+ - `dfseo backlinks competitors`
292
+ - `dfseo backlinks gap`
293
+ - `dfseo backlinks pages`
294
+ - `dfseo backlinks bulk ranks`
295
+ - `dfseo backlinks bulk backlinks`
296
+ - `dfseo backlinks bulk spam-score`
297
+ - `dfseo backlinks bulk referring-domains`
298
+ - `dfseo backlinks bulk new-lost`
299
+
300
+ **Per ogni reference file:** genera il contenuto usando l'output di `dfseo <command> --help` come fonte primaria. Non inventare flag β€” leggi l'help reale.
301
+
302
+ ---
303
+
304
+ ## Example Files
305
+
306
+ ### examples/keyword-research.md
307
+
308
+ ```markdown
309
+ # Keyword Research Workflow
310
+
311
+ Complete workflow for finding and evaluating keyword opportunities.
312
+
313
+ ## Step 1: Explore seed keywords
314
+ Run volume check for your initial ideas:
315
+ \`\`\`bash
316
+ dfseo keywords volume "email hosting" "smtp service" "business email" \
317
+ --location "Italy" --language "Italian" --include-serp-info
318
+ \`\`\`
319
+ Look for: high volume, low-medium difficulty, commercial/transactional intent.
320
+
321
+ ## Step 2: Expand with suggestions
322
+ \`\`\`bash
323
+ dfseo keywords suggestions "email hosting" \
324
+ --location "Italy" --language "Italian" \
325
+ --min-volume 50 --max-difficulty 40 --limit 100
326
+ \`\`\`
327
+
328
+ ## Step 3: Find related ideas
329
+ \`\`\`bash
330
+ dfseo keywords ideas "email hosting" "smtp service" \
331
+ --location "Italy" --limit 100
332
+ \`\`\`
333
+
334
+ ## Step 4: Bulk difficulty check
335
+ Save best candidates to a file and check difficulty:
336
+ \`\`\`bash
337
+ dfseo keywords difficulty --from-file candidates.txt --location "Italy"
338
+ \`\`\`
339
+
340
+ ## Step 5: Check SERP landscape
341
+ For top candidates, check what's currently ranking:
342
+ \`\`\`bash
343
+ dfseo serp google "best keyword" --location "Italy" --depth 20
344
+ \`\`\`
345
+ ```
346
+
347
+ ### examples/competitor-audit.md
348
+
349
+ ```markdown
350
+ # Competitor Audit Workflow
351
+
352
+ Comprehensive competitor analysis: keywords, backlinks, on-page.
353
+
354
+ ## Step 1: Find competitor keywords
355
+ \`\`\`bash
356
+ dfseo keywords for-site "competitor.com" \
357
+ --location "Italy" --min-volume 100 --sort volume --limit 200
358
+ \`\`\`
359
+
360
+ ## Step 2: Backlink profile
361
+ \`\`\`bash
362
+ dfseo backlinks summary "competitor.com"
363
+ \`\`\`
364
+
365
+ ## Step 3: Top referring domains
366
+ \`\`\`bash
367
+ dfseo backlinks referring-domains "competitor.com" \
368
+ --sort rank --limit 50 --exclude-internal
369
+ \`\`\`
370
+
371
+ ## Step 4: Link gap (find their backlinks you don't have)
372
+ \`\`\`bash
373
+ dfseo backlinks gap "your-site.com" "competitor.com" --min-rank 200
374
+ \`\`\`
375
+
376
+ ## Step 5: On-page audit comparison
377
+ \`\`\`bash
378
+ dfseo site audit "competitor.com" --max-pages 50 --wait
379
+ \`\`\`
380
+ ```
381
+
382
+ ### examples/link-building.md
383
+
384
+ ```markdown
385
+ # Link Building Workflow
386
+
387
+ Find link building opportunities using backlink gap analysis.
388
+
389
+ ## Step 1: Identify competitors
390
+ \`\`\`bash
391
+ dfseo backlinks competitors "your-site.com" --sort rank --limit 20
392
+ \`\`\`
393
+
394
+ ## Step 2: Run link gap analysis
395
+ \`\`\`bash
396
+ dfseo backlinks gap "your-site.com" "competitor1.com" "competitor2.com" "competitor3.com" \
397
+ --min-rank 200 --dofollow-only --limit 100
398
+ \`\`\`
399
+
400
+ ## Step 3: Analyze top opportunities
401
+ For each high-rank domain from the gap:
402
+ \`\`\`bash
403
+ dfseo backlinks list "your-site.com" --from-domain "opportunity-domain.com"
404
+ \`\`\`
405
+
406
+ ## Step 4: Check anchor text distribution
407
+ \`\`\`bash
408
+ dfseo backlinks anchors "your-site.com" --sort backlinks
409
+ \`\`\`
410
+ Healthy profile: branded anchors > exact-match keyword anchors.
411
+ ```
412
+
413
+ -----
414
+
415
+ ## scripts/install.sh
416
+
417
+ ```bash
418
+ #!/usr/bin/env bash
419
+ set -euo pipefail
420
+
421
+ echo "Installing dfseo-cli..."
422
+
423
+ if command -v pip &> /dev/null; then
424
+ pip install dfseo
425
+ elif command -v pip3 &> /dev/null; then
426
+ pip3 install dfseo
427
+ else
428
+ echo "Error: pip not found. Install Python 3.11+ first." >&2
429
+ exit 1
430
+ fi
431
+
432
+ if command -v dfseo &> /dev/null; then
433
+ echo "βœ“ dfseo-cli installed successfully"
434
+ dfseo --version
435
+ else
436
+ echo "Error: dfseo command not found after installation." >&2
437
+ echo "Make sure ~/.local/bin is in your PATH." >&2
438
+ exit 1
439
+ fi
440
+
441
+ echo ""
442
+ echo "Next steps:"
443
+ echo " 1. Set credentials:"
444
+ echo " export DATAFORSEO_LOGIN='your@email.com'"
445
+ echo " export DATAFORSEO_PASSWORD='your_api_password'"
446
+ echo " 2. Verify: dfseo auth status"
447
+ echo " 3. Try: dfseo serp google 'test keyword'"
448
+ ```
449
+
450
+ -----
451
+
452
+ ## Pubblicazione su ClawHub
453
+
454
+ ### Step 1: Verifica la skill localmente
455
+
456
+ ```bash
457
+ # Copia la skill nella cartella locale
458
+ cp -r dfseo/ ~/.openclaw/skills/dfseo/
459
+
460
+ # Apri OpenClaw e verifica che la skill appaia
461
+ # L'emoji πŸ” dovrebbe essere visibile nella lista skill
462
+ ```
463
+
464
+ ### Step 2: Pubblica su ClawHub
465
+
466
+ ```bash
467
+ # Installa clawhub CLI se non presente
468
+ npm install -g clawhub
469
+
470
+ # Pubblica
471
+ clawhub publish ./dfseo/
472
+ ```
473
+
474
+ ### Step 3: Includi nel repo GitHub
475
+
476
+ Aggiungi la cartella `skill/` (o `openclaw-skill/`) nella root del repo `dfseo-cli` su GitHub, così chi clona il repo ha già la skill pronta:
477
+
478
+ ```
479
+ dfseo-cli/
480
+ β”œβ”€β”€ src/
481
+ β”œβ”€β”€ tests/
482
+ β”œβ”€β”€ skill/ # OpenClaw skill
483
+ β”‚ β”œβ”€β”€ SKILL.md
484
+ β”‚ β”œβ”€β”€ references/
485
+ β”‚ β”œβ”€β”€ examples/
486
+ β”‚ └── scripts/
487
+ β”œβ”€β”€ SKILL.md # Copia semplificata nella root (per Claude Code e altri agent)
488
+ β”œβ”€β”€ pyproject.toml
489
+ └── README.md
490
+ ```
491
+
492
+ La `SKILL.md` nella root Γ¨ la versione compatta (giΓ  presente dalla v1.0). La cartella `skill/` Γ¨ la versione completa per OpenClaw con reference files ed esempi.
493
+
494
+ -----
495
+
496
+ ## Istruzioni per Claude Code
497
+
498
+ ### Cosa fare
499
+
500
+ 1. **Crea la struttura cartella** `skill/` con tutti i file
501
+ 1. **Genera il SKILL.md** con il frontmatter esatto indicato sopra β€” il campo `description` Γ¨ critico per il triggering automatico
502
+ 1. **Genera i 4 reference files** usando `dfseo <command> --help` come fonte per ogni comando. Esegui i comandi help reali, non inventare flag
503
+ 1. **Crea i 3 example files** con workflow completi e realistici
504
+ 1. **Crea install.sh** e rendilo eseguibile (`chmod +x`)
505
+ 1. **Testa localmente** copiando in `~/.openclaw/skills/` e verificando che OpenClaw la carichi
506
+ 1. **Pubblica su ClawHub** con `clawhub publish`
507
+
508
+ ### Cosa NON fare
509
+
510
+ - Non inventare flag o comandi β€” tutto deve corrispondere al CLI reale
511
+ - Non mettere troppo testo nel SKILL.md principale β€” gli agenti hanno context window limitati. I dettagli vanno nei reference files
512
+ - Non usare `metadata.clawdbot` β€” usa `metadata.openclaw` (il formato corrente)
513
+ - Non dimenticare il campo `requires.bins` β€” senza questo OpenClaw non sa che serve `dfseo` installato
514
+ - Non dimenticare `requires.env` β€” senza questo l’agente non chiederΓ  le credenziali
515
+
516
+ -----
517
+
518
+ ## Riferimenti
519
+
520
+ - OpenClaw Skills Docs: https://docs.openclaw.ai/tools/skills
521
+ - ClawHub (registry): https://github.com/openclaw/clawhub
522
+ - Skill format reference: https://github.com/openclaw/clawhub/blob/main/docs/skill-format.md
523
+ - Example skills: https://github.com/VoltAgent/awesome-openclaw-skills
524
+ - gogcli skill (ispirazione): https://lobehub.com/skills/ninehills-skills-gogcli