opencode-skills-collection 3.1.14 → 3.1.16

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 (164) hide show
  1. package/bundled-skills/.antigravity-install-manifest.json +36 -1
  2. package/bundled-skills/007/scripts/full_audit.py +34 -22
  3. package/bundled-skills/007/scripts/quick_scan.py +24 -15
  4. package/bundled-skills/007/scripts/scanners/dependency_scanner.py +31 -19
  5. package/bundled-skills/007/scripts/scanners/injection_scanner.py +24 -14
  6. package/bundled-skills/007/scripts/scanners/secrets_scanner.py +24 -14
  7. package/bundled-skills/007/scripts/score_calculator.py +25 -13
  8. package/bundled-skills/2slides-ppt-generator/scripts/download_slides_pages_voices.py +15 -1
  9. package/bundled-skills/aegisops-ai/SKILL.md +1 -1
  10. package/bundled-skills/agent-self-scheduling/SKILL.md +88 -0
  11. package/bundled-skills/alpha-vantage/SKILL.md +3 -1
  12. package/bundled-skills/anti-sleep/SKILL.md +90 -0
  13. package/bundled-skills/api-security-best-practices/SKILL.md +1 -1
  14. package/bundled-skills/app-store-optimization/SKILL.md +7 -0
  15. package/bundled-skills/audio-transcriber/scripts/transcribe.py +17 -4
  16. package/bundled-skills/azure-mgmt-botservice-py/SKILL.md +2 -1
  17. package/bundled-skills/azure-resource-manager-mysql-dotnet/SKILL.md +2 -1
  18. package/bundled-skills/azure-resource-manager-postgresql-dotnet/SKILL.md +2 -1
  19. package/bundled-skills/azure-resource-manager-sql-dotnet/SKILL.md +2 -1
  20. package/bundled-skills/biopython/SKILL.md +2 -1
  21. package/bundled-skills/brain-to-docs/SKILL.md +54 -0
  22. package/bundled-skills/browser-harness/SKILL.md +220 -0
  23. package/bundled-skills/browser-harness/references/install.md +132 -0
  24. package/bundled-skills/bumblebee/scripts/render_report.py +16 -3
  25. package/bundled-skills/bun-development/SKILL.md +1 -1
  26. package/bundled-skills/cc-skill-security-review/SKILL.md +2 -2
  27. package/bundled-skills/claude-monitor/scripts/monitor.py +15 -2
  28. package/bundled-skills/cmux/SKILL.md +250 -0
  29. package/bundled-skills/code-polish/SKILL.md +192 -0
  30. package/bundled-skills/code-review-checklist/SKILL.md +1 -1
  31. package/bundled-skills/codex-subagent/SKILL.md +117 -0
  32. package/bundled-skills/competitor-analysis/scripts/capture_screenshots.mjs +24 -3
  33. package/bundled-skills/competitor-analysis/scripts/compile_report.mjs +13 -2
  34. package/bundled-skills/competitor-analysis/scripts/extract_vs_names.mjs +23 -2
  35. package/bundled-skills/competitor-analysis/scripts/gate_candidates.mjs +21 -0
  36. package/bundled-skills/competitor-analysis/scripts/list_urls.mjs +23 -2
  37. package/bundled-skills/competitor-analysis/scripts/merge_partials.mjs +24 -3
  38. package/bundled-skills/container-security-hardening/SKILL.md +1 -1
  39. package/bundled-skills/content-creator/scripts/brand_voice_analyzer.py +15 -1
  40. package/bundled-skills/content-creator/scripts/seo_optimizer.py +15 -1
  41. package/bundled-skills/context-kit/SKILL.md +135 -0
  42. package/bundled-skills/cyber-audit/SKILL.md +138 -0
  43. package/bundled-skills/deepapi/SKILL.md +649 -0
  44. package/bundled-skills/delegating-to-agents/SKILL.md +64 -0
  45. package/bundled-skills/developer-signup-flow/SKILL.md +1 -1
  46. package/bundled-skills/diary/scripts/fetch_diaries.py +14 -1
  47. package/bundled-skills/diary/scripts/prepare_context.py +15 -2
  48. package/bundled-skills/diary/scripts/sync_to_notion.py +14 -1
  49. package/bundled-skills/dispatch/SKILL.md +19 -7
  50. package/bundled-skills/distribute-skill-to-all-agents/SKILL.md +85 -0
  51. package/bundled-skills/docs/integrations/jetski-cortex.md +3 -3
  52. package/bundled-skills/docs/integrations/jetski-gemini-loader/README.md +1 -1
  53. package/bundled-skills/docs/maintainers/repo-growth-seo.md +3 -3
  54. package/bundled-skills/docs/maintainers/skills-update-guide.md +1 -1
  55. package/bundled-skills/docs/users/bundles.md +1 -1
  56. package/bundled-skills/docs/users/claude-code-skills.md +1 -1
  57. package/bundled-skills/docs/users/gemini-cli-skills.md +1 -1
  58. package/bundled-skills/docs/users/getting-started.md +1 -1
  59. package/bundled-skills/docs/users/kiro-integration.md +1 -1
  60. package/bundled-skills/docs/users/usage.md +4 -4
  61. package/bundled-skills/docs/users/visual-guide.md +4 -4
  62. package/bundled-skills/docx-official/ooxml/scripts/pack.py +30 -3
  63. package/bundled-skills/docx-official/ooxml/scripts/unpack.py +16 -3
  64. package/bundled-skills/drizzle-migration-conflict/scripts/check_drizzle_migrations.py +27 -17
  65. package/bundled-skills/ecl-harness-engineer/agents/creator-config.md +17 -3
  66. package/bundled-skills/ecl-harness-engineer/references/environment-detection-guide.md +9 -5
  67. package/bundled-skills/effective-agent-skills/SKILL.md +333 -0
  68. package/bundled-skills/electron-development/SKILL.md +6 -2
  69. package/bundled-skills/environment-setup-guide/SKILL.md +2 -5
  70. package/bundled-skills/expo-ui/scripts/list-components.js +5 -1
  71. package/bundled-skills/fable-safe-prompt/SKILL.md +79 -0
  72. package/bundled-skills/folder-specific-claude-and-agents-md/SKILL.md +96 -0
  73. package/bundled-skills/frontend-slides/scripts/extract-pptx.py +18 -4
  74. package/bundled-skills/gcp-cloud-run/SKILL.md +2 -1
  75. package/bundled-skills/gemini-api-integration/SKILL.md +3 -1
  76. package/bundled-skills/gemini-live-api-dev/SKILL.md +2 -1
  77. package/bundled-skills/gemini-omni-flash-api/scripts/video/generate_video.py +49 -14
  78. package/bundled-skills/goal-loop/SKILL.md +175 -0
  79. package/bundled-skills/hugging-face-evaluation/SKILL.md +1 -1
  80. package/bundled-skills/hugging-face-jobs/SKILL.md +1 -1
  81. package/bundled-skills/hugging-face-jobs/scripts/finepdfs-stats.py +14 -1
  82. package/bundled-skills/hugging-face-model-trainer/scripts/convert_to_gguf.py +10 -1
  83. package/bundled-skills/hugo-to-markdown/scripts/inventory_hugo_rules.py +14 -1
  84. package/bundled-skills/image-generator/SKILL.md +3 -1
  85. package/bundled-skills/instagram/scripts/export.py +18 -7
  86. package/bundled-skills/interview-style-doc-building/SKILL.md +86 -0
  87. package/bundled-skills/junta-leiloeiros/scripts/export.py +19 -10
  88. package/bundled-skills/landing-page-generator/scripts/landing_page_scaffolder.py +15 -1
  89. package/bundled-skills/linear-claude-skill/SKILL.md +4 -2
  90. package/bundled-skills/linkedin-post-writer/SKILL.md +159 -0
  91. package/bundled-skills/linkedin-post-writer/references/hook-formulas.md +482 -0
  92. package/bundled-skills/llm-council/SKILL.md +4 -2
  93. package/bundled-skills/loki-mode/examples/todo-app-generated/backend/package-lock.json +5 -6
  94. package/bundled-skills/loki-mode/examples/todo-app-generated/backend/package.json +2 -3
  95. package/bundled-skills/markdown-rendering/SKILL.md +72 -0
  96. package/bundled-skills/matematico-tao/scripts/complexity_analyzer.py +14 -1
  97. package/bundled-skills/matematico-tao/scripts/dependency_graph.py +15 -2
  98. package/bundled-skills/mobile-design/scripts/mobile_audit.py +20 -6
  99. package/bundled-skills/monte-carlo-validation-notebook/scripts/resolve_dbt_schema.py +15 -2
  100. package/bundled-skills/multi-agent-architect/SKILL.md +1 -1
  101. package/bundled-skills/odoo-rpc-api/SKILL.md +2 -1
  102. package/bundled-skills/pci-compliance/SKILL.md +3 -1
  103. package/bundled-skills/pdf-official/scripts/create_validation_image.py +17 -3
  104. package/bundled-skills/pdf-official/scripts/extract_form_field_info.py +1 -1
  105. package/bundled-skills/personal-tool-builder/SKILL.md +1 -1
  106. package/bundled-skills/pi-custom-model/SKILL.md +68 -0
  107. package/bundled-skills/pi-web-search/SKILL.md +74 -0
  108. package/bundled-skills/playwright-skill/run.js +19 -1
  109. package/bundled-skills/pptx-official/ooxml/scripts/pack.py +30 -3
  110. package/bundled-skills/pptx-official/ooxml/scripts/unpack.py +16 -3
  111. package/bundled-skills/pptx-official/scripts/inventory.py +17 -4
  112. package/bundled-skills/pptx-official/scripts/rearrange.py +15 -2
  113. package/bundled-skills/pptx-official/scripts/replace.py +16 -3
  114. package/bundled-skills/product-manager-toolkit/scripts/customer_interview_analyzer.py +15 -1
  115. package/bundled-skills/production-code-audit/SKILL.md +1 -1
  116. package/bundled-skills/push-skill-to-github/SKILL.md +61 -0
  117. package/bundled-skills/rclone-cli/references/commands/rclone_completion_powershell.md +3 -2
  118. package/bundled-skills/read-all-adrs/SKILL.md +35 -0
  119. package/bundled-skills/remote-gpu-trainer/scripts/verify_local.py +14 -1
  120. package/bundled-skills/research-prompt/SKILL.md +63 -0
  121. package/bundled-skills/run-deep-swe/SKILL.md +120 -0
  122. package/bundled-skills/senior-architect/scripts/architecture_diagram_generator.py +15 -2
  123. package/bundled-skills/senior-architect/scripts/dependency_analyzer.py +15 -2
  124. package/bundled-skills/senior-architect/scripts/project_architect.py +15 -2
  125. package/bundled-skills/senior-frontend/scripts/bundle_analyzer.py +14 -1
  126. package/bundled-skills/senior-frontend/scripts/frontend_scaffolder.py +14 -1
  127. package/bundled-skills/senior-fullstack/scripts/code_quality_analyzer.py +15 -2
  128. package/bundled-skills/senior-fullstack/scripts/fullstack_scaffolder.py +15 -2
  129. package/bundled-skills/senior-fullstack/scripts/project_scaffolder.py +15 -2
  130. package/bundled-skills/setup-help/SKILL.md +50 -0
  131. package/bundled-skills/shodan-reconnaissance/SKILL.md +2 -1
  132. package/bundled-skills/short/SKILL.md +28 -0
  133. package/bundled-skills/skill-creator/scripts/init_skill.py +15 -2
  134. package/bundled-skills/skill-creator/scripts/package_skill.py +29 -12
  135. package/bundled-skills/skill-creator/scripts/quick_validate.py +14 -2
  136. package/bundled-skills/skill-creator-ms/SKILL.md +1 -1
  137. package/bundled-skills/skill-installer/scripts/install_skill.py +42 -8
  138. package/bundled-skills/skill-installer/scripts/package_skill.py +29 -17
  139. package/bundled-skills/skill-installer/scripts/validate_skill.py +37 -22
  140. package/bundled-skills/stripe-integration/SKILL.md +7 -3
  141. package/bundled-skills/swiftui-expert-skill/scripts/instruments_parser/xctrace.py +7 -1
  142. package/bundled-skills/swiftui-expert-skill/scripts/instruments_parser/xml_utils.py +7 -1
  143. package/bundled-skills/taisly-social-media-posting/SKILL.md +79 -0
  144. package/bundled-skills/technical-tutorials/SKILL.md +1 -1
  145. package/bundled-skills/telegram/scripts/setup_project.py +17 -2
  146. package/bundled-skills/time-ledger/SKILL.md +118 -0
  147. package/bundled-skills/trading-ledger/SKILL.md +121 -0
  148. package/bundled-skills/videodb/scripts/ws_listener.py +17 -4
  149. package/bundled-skills/voice-ai-development/SKILL.md +2 -1
  150. package/bundled-skills/vps-server-management/SKILL.md +72 -0
  151. package/bundled-skills/weaviate/scripts/weaviate_conn.py +20 -18
  152. package/bundled-skills/wgm/SKILL.md +137 -0
  153. package/bundled-skills/whatsapp-cloud-api/scripts/setup_project.py +16 -1
  154. package/bundled-skills/workorai/SKILL.md +137 -0
  155. package/bundled-skills/wp-site-health-auditor/SKILL.md +341 -0
  156. package/bundled-skills/wp-site-health-auditor/references/catalog.md +135 -0
  157. package/bundled-skills/writing-skills/render-graphs.js +13 -2
  158. package/bundled-skills/x-twitter-scraper/SKILL.md +3 -1
  159. package/bundled-skills/youtube-notetaker/scripts/serve.py +41 -31
  160. package/bundled-skills/youtube-notetaker/scripts/vtt_to_transcript.py +16 -2
  161. package/bundled-skills/youtube-notetaker/scripts/write_library_item.py +15 -1
  162. package/bundled-skills/youtube-transcript/SKILL.md +120 -0
  163. package/package.json +5 -1
  164. package/skills_index.json +786 -6
@@ -0,0 +1,137 @@
1
+ ---
2
+ name: workorai
3
+ description: "WorkorAI talent-marketplace skill: candidates search jobs and manage applications; employers run the job lifecycle and get ranked candidate matches with white-box fit explanations."
4
+ category: productivity
5
+ risk: critical
6
+ source: community
7
+ source_repo: work0r-ai/agent-kit
8
+ source_type: community
9
+ date_added: "2026-07-03"
10
+ author: work0r-ai
11
+ tags: [job-search, hiring, recruiting, talent-marketplace, mcp]
12
+ tools: [claude, cursor, gemini]
13
+ license: "MIT"
14
+ license_source: "https://github.com/work0r-ai/agent-kit/blob/main/skills/workorai/LICENSE.txt"
15
+ ---
16
+
17
+ # WorkorAI
18
+
19
+ ## Overview
20
+
21
+ WorkorAI is a talent marketplace exposed to agents through an MCP server
22
+ (streamable HTTP at https://workorai.com/mcp, listed on the official MCP
23
+ Registry as `io.github.work0r-ai/workorai`). This skill routes requests by
24
+ intent across the dual-role tool surface: 9 `candidate.*` tools (job search,
25
+ job detail, applications, apply, invitations, saved jobs) and the
26
+ `employer.*` tools (job lifecycle, candidate discovery, invitations,
27
+ applicant review). Employer candidate discovery returns tiered rankings
28
+ (best/good/weak) with a white-box match explanation per candidate — fit
29
+ score, skills proven in interview, gaps, and a quotable rationale — instead
30
+ of a black-box score.
31
+
32
+ ## When to Use This Skill
33
+
34
+ - Use when a user asks to find a job, search vacancies, apply to a position,
35
+ or track their applications ("find me a job", "ищу работу").
36
+ - Use when an employer wants to post, publish, update, close, or archive a
37
+ job on WorkorAI.
38
+ - Use when an employer asks to find, rank, compare, or evaluate candidates,
39
+ or asks why a candidate matches a role.
40
+ - Use when a user needs to set up or troubleshoot the WorkorAI MCP
41
+ connection and API key onboarding.
42
+
43
+ ## How It Works
44
+
45
+ ### Step 1: Connect the MCP server
46
+
47
+ Add the WorkorAI MCP server to your agent's MCP configuration. For Claude
48
+ Code:
49
+
50
+ ```bash
51
+ claude mcp add --transport http workorai https://workorai.com/mcp
52
+ ```
53
+
54
+ If the user has no API key yet, call the `request_access` tool and follow
55
+ the onboarding it returns.
56
+
57
+ ### Step 2: Route by role and intent
58
+
59
+ Detect whether the request is a candidate flow or an employer flow, then use
60
+ the matching tool group:
61
+
62
+ - Candidate: `candidate.search_jobs`, `candidate.get_job`,
63
+ `candidate.apply_to_job`, `candidate.get_applications`,
64
+ `candidate.accept_invitation` / `candidate.decline_invitation`,
65
+ `candidate.withdraw_application`, `candidate.set_saved_job`,
66
+ `candidate.get_saved_jobs`.
67
+ - Employer: `employer.create_job` → `employer.publish_job` →
68
+ `employer.close_job` / `employer.archive_job` for the lifecycle;
69
+ `employer.search_candidates_for_job` or
70
+ `employer.search_candidates_by_query` for discovery;
71
+ `employer.invite_candidate`, `employer.list_applicants`,
72
+ `employer.get_applicant_detail`, `employer.set_review_status` for
73
+ pipeline work.
74
+
75
+ ### Step 3: Explain matches with white-box data
76
+
77
+ When presenting employer search results, keep the tier structure
78
+ (best/good/weak) and surface each candidate's `matchExplanation`: fit score,
79
+ interview-proven skills, gaps, and rationale. For deeper comparison, fetch
80
+ per-candidate interview evidence with `employer.get_candidate_evidence` and
81
+ `employer.get_applicant_transcript`.
82
+
83
+ ## Examples
84
+
85
+ ### Example 1: Candidate job search
86
+
87
+ ```
88
+ User: "Find me remote TypeScript jobs and apply to the best one."
89
+ Agent: candidate.search_jobs(query="TypeScript", remote=true)
90
+ → present ranked results → candidate.get_job(id)
91
+ → confirm with the user → candidate.apply_to_job(id)
92
+ ```
93
+
94
+ ### Example 2: Employer candidate discovery
95
+
96
+ ```
97
+ User: "Who are the best candidates for my Senior Backend role?"
98
+ Agent: employer.search_candidates_for_job(jobId)
99
+ → report Best tier with each candidate's fit score, proven
100
+ skills, and gaps → employer.invite_candidate on approval
101
+ ```
102
+
103
+ ## Best Practices
104
+
105
+ - ✅ Confirm with the user before applying, inviting, or changing job
106
+ status — these are visible, stateful marketplace actions.
107
+ - ✅ Quote the white-box match explanation when recommending a candidate,
108
+ so the employer sees why, not just a score.
109
+ - ✅ Use `request_access` for key onboarding instead of asking users to
110
+ paste credentials into chat.
111
+ - ❌ Don't fabricate fit scores or ranks — only report what the tools
112
+ return.
113
+ - ❌ Don't apply to jobs or send invitations in bulk without explicit
114
+ user approval.
115
+
116
+ ## Limitations
117
+
118
+ - Requires a WorkorAI account and API key; tools fail without a valid key.
119
+ - This skill does not replace environment-specific validation, testing, or
120
+ expert review.
121
+ - Stop and ask for clarification if required inputs, permissions, or safety
122
+ boundaries are missing.
123
+
124
+ ## Security & Safety Notes
125
+
126
+ - All operations go through the remote WorkorAI MCP server over HTTPS; the
127
+ skill itself runs no shell commands.
128
+ - Mutating tools (apply, withdraw, invite, publish, close, delete) should
129
+ be preceded by an explicit user confirmation.
130
+ - Treat API keys as secrets: store them in MCP client configuration, never
131
+ in chat transcripts or committed files.
132
+
133
+ ## Additional Resources
134
+
135
+ - [Source repository](https://github.com/work0r-ai/agent-kit) — full skill
136
+ with reference files and agents (npm: `@workorai/agent-kit`)
137
+ - [WorkorAI MCP endpoint](https://workorai.com/mcp)
@@ -0,0 +1,341 @@
1
+ ---
2
+ name: wp-site-health-auditor
3
+ description: "Turns a WordPress Site Health report into a risk-tiered, backup-first fix plan with exact WP-CLI/PHP snippets. Use for site health, recommended improvements, or critical issue reports."
4
+ category: development
5
+ risk: critical
6
+ source: self
7
+ source_type: self
8
+ date_added: "2026-07-03"
9
+ author: whoisabhishekadhikari
10
+ tags: [wordpress, site-health, wp-cli, seo, performance, security, hardening]
11
+ tools: [claude, cursor, codex, gemini]
12
+ ---
13
+
14
+ # WP Site Health Auditor
15
+
16
+ ## When to Use This Skill
17
+
18
+ - The user pastes a WordPress Site Health report (`Tools > Site Health`), as text or screenshot
19
+ - The user pastes raw Site Health debug info (`Tools > Site Health > Info`) and asks what's wrong
20
+ - The user mentions "site health", "recommended improvements," or "critical issues" for a WordPress site
21
+ - The user asks to clean up, harden, or speed up a WP install based on that screen
22
+
23
+ Turns a WordPress Site Health report (Critical issues / Recommended improvements / Passed tests) into a
24
+ prioritized, risk-tiered fix plan — then executes the safe fixes and hands off the rest with exact
25
+ commands or code.
26
+
27
+ ## ⚠️ Safety — read before touching any file
28
+
29
+ This skill edits `wp-config.php`, `.htaccess`, and `php.ini`-equivalent settings, and deletes plugins and
30
+ themes. All three are one bad edit away from a white-screen-of-death or a broken upload path. **Never skip
31
+ this section, even for a one-line change, even if the user is in a hurry.**
32
+
33
+ **Before any edit or deletion, in this order:**
34
+ 1. **Back up the specific file(s) you're about to touch outside the web root**, not just "have a backup somewhere":
35
+ ```
36
+ umask 077
37
+ backup_dir="../wp-site-health-backups/$(date +%Y%m%d-%H%M%S)"
38
+ mkdir -p "$backup_dir"
39
+ cp -p wp-config.php "$backup_dir/wp-config.php"
40
+ cp -p .htaccess "$backup_dir/.htaccess"
41
+ ```
42
+ If shell access isn't available, tell the user to download the current file via SFTP/host file
43
+ manager first, and don't proceed until they confirm they have it.
44
+ 2. **Confirm a full site/database backup exists** before deleting any plugin or theme, or running
45
+ `wp search-replace`. If the user doesn't have one and has a backup plugin active (UpdraftPlus, etc.),
46
+ trigger a backup first: `wp updraftplus backup` or the plugin's own WP-CLI command, or tell them to
47
+ click "Backup Now" and wait for confirmation before continuing.
48
+ 3. **Never run `wp search-replace` without `--dry-run` first**, and always show the dry-run output to the
49
+ user before running it for real. This command rewrites the database in place — a wrong pattern can
50
+ corrupt serialized data across every table it touches.
51
+ 4. **After any PHP file edit, lint it before reloading the site**:
52
+ ```
53
+ php -l wp-config.php
54
+ ```
55
+ For `.htaccess` changes, run `apachectl configtest` if available, or check the site immediately.
56
+ A syntax error in `wp-config.php` takes the entire site down immediately. Do not skip the lint check to
57
+ save a step.
58
+ 5. **Change one thing at a time, then verify the site still loads** (homepage + wp-admin) before making
59
+ the next change. Don't batch multiple Tier 2 file edits into one pass — if something breaks, you want to
60
+ know which change did it.
61
+ 6. **Give the user the exact rollback command** alongside every edit:
62
+ ```
63
+ cp ../wp-site-health-backups/<timestamp>/wp-config.php wp-config.php
64
+ ```
65
+ State this even if nothing goes wrong — it costs one line and saves a panicked user later.
66
+
67
+ If the user says "just do it, skip the backup" — still create the backup silently as part of the edit
68
+ sequence and tell them you did. Refuse to skip step 1 or step 4 entirely; those two are non-negotiable
69
+ regardless of urgency, since the failure mode (corrupted `wp-config.php`, dead site) is worse than the ten
70
+ seconds a backup costs.
71
+
72
+ ## Overview
73
+
74
+ The Site Health screen is diagnostic, not prescriptive. It tells the site owner *that* something is wrong
75
+ (e.g. "you should use a persistent object cache") but not *how* to fix it, and it mixes items that are
76
+ one-click-safe (deactivate a plugin) with items that require host-level changes (php.ini, object cache
77
+ backend) or are purely informational (SQL server version — no action needed). This skill sorts that out —
78
+ safely.
79
+
80
+ ## Phase 1 — Parse the report
81
+
82
+ Input is usually one of:
83
+ - Pasted plain text copied from `Tools > Site Health` (Status tab)
84
+ - Pasted plain text from `Tools > Site Health > Info` (the debug data export)
85
+ - A screenshot of the Status tab
86
+ - WP-CLI output (`wp site-health check` is not a core command; note that up front, don't invent one — see Phase 4)
87
+
88
+ Extract three buckets exactly as WordPress labels them:
89
+ 1. **Critical issues** (red) — always fix first, always confirm before touching.
90
+ 2. **Recommended improvements** (yellow) — the bulk of real work; triage by risk tier below.
91
+ 3. **Passed tests** (green) — skip. Do not "fix" or re-verify passed tests unless the user asks. Do not
92
+ invent problems with green items — a common failure mode is treating "SQL server is up to date" as
93
+ something to act on. It isn't.
94
+
95
+ If the report is a screenshot, transcribe item titles + category tags (Security/Performance/SEO/Privacy)
96
+ verbatim before triaging — don't paraphrase the WordPress-generated title, it's used for the fix lookup in
97
+ Phase 3.
98
+
99
+ If no report was pasted and the user just says "audit my site health," ask them to paste the Status tab
100
+ text (fastest) rather than guessing — Site Health results are host- and config-specific and guessing wastes
101
+ a turn.
102
+
103
+ ## Phase 2 — Risk-tiered triage
104
+
105
+ Classify every non-passed item into one of three tiers before touching anything. Present this triage table
106
+ to the user first for anything above Tier 1 count of 3+ items — don't silently start deactivating plugins.
107
+
108
+ **Tier 1 — Safe, reversible, auto-fixable in wp-admin or via WP-CLI**
109
+ No data loss risk, no downtime, fully reversible. Still back up per the Safety section before deleting
110
+ anything. Fix directly once the user confirms the item list.
111
+ - Remove inactive plugins/themes (they aren't running, deactivation already happened — this is just
112
+ deletion of dead code)
113
+ - Turn off `WP_DEBUG` display in production (`WP_DEBUG_DISPLAY`, not `WP_DEBUG` itself if the user still
114
+ wants logging)
115
+ - Enable search engine indexing / fix robots visibility toggle
116
+ - Update the site tagline off "Just another WordPress site"
117
+
118
+ **Tier 2 — Requires host/server-level access — Claude drafts the change, user or host applies it**
119
+ Cannot be fixed purely from wp-admin; needs php.ini, .htaccess, wp-config.php, or hosting panel access.
120
+ Draft the exact snippet, explain where it goes, remind the user of the backup + lint steps above, and flag
121
+ that a server restart or host support ticket may be needed.
122
+ - Permalink structure change (migration — existing URLs break without redirects; require a redirect plan and CDN/cache flush before applying)
123
+ - `post_max_size` < `upload_max_filesize` mismatch
124
+ - Persistent object cache not available (Redis/Memcached)
125
+ - Page cache not detected
126
+ - PHP version/module changes
127
+ - HTTPS/SSL configuration
128
+ - Loopback/REST API failures caused by firewall or security plugin blocking
129
+
130
+ **Tier 3 — Informational / host-dependent, no fix exists or none needed**
131
+ Report as informational only. Do not attempt a fix, do not suggest one unless directly asked.
132
+ - SQL server version notices when already current
133
+ - "Autoloaded options are acceptable" type passed-adjacent info
134
+ - Anything already green in Passed tests
135
+
136
+ ## Phase 3 — Fix recipes by item
137
+
138
+ Match the WordPress-generated item title (case-insensitive substring match is fine) to a recipe below.
139
+ Every recipe below assumes the Safety section has already been followed for that file. If an item doesn't
140
+ match anything here, say so explicitly rather than fabricating a fix — Site Health's item set changes
141
+ across WP core versions and this list isn't exhaustive (see `references/catalog.md` for the fuller list
142
+ including rarer items).
143
+
144
+ ### You should remove inactive plugins / themes — Tier 1
145
+ ```
146
+ # confirm full site backup exists first (Safety step 2)
147
+ wp plugin list --status=inactive --field=name
148
+ wp plugin delete <plugin-slug>
149
+
150
+ wp theme list --status=inactive --field=name
151
+ wp theme delete <theme-slug>
152
+ ```
153
+ Never delete the currently active theme's parent if the active theme is a child theme. Never delete
154
+ Twenty Twenty-Five (or the current default core theme) if it's the only fallback theme — WordPress needs
155
+ at least one broken-theme fallback; recommend keeping one bundled default even if inactive.
156
+ Confirm the exact plugin/theme names with the user before deleting — inactive isn't the same as unused;
157
+ some plugins are intentionally kept inactive as a staged rollback.
158
+
159
+ ### post_max_size smaller than upload_max_filesize — Tier 2
160
+ This breaks large file uploads (post data gets truncated before the file size limit is even reached).
161
+ Fix by raising `post_max_size` to be >= `upload_max_filesize`, typically with headroom for form overhead.
162
+
163
+ Where to set it (pick whichever the host supports, in this order of preference):
164
+ 1. Host control panel PHP settings (cPanel "Select PHP Version" > Options, Plesk, etc.) — no code needed,
165
+ safest option, skip the file-backup steps entirely.
166
+ 2. `php.ini` (if the user has server access) — back up first (`cp php.ini php.ini.bak-<timestamp>`):
167
+ ```ini
168
+ upload_max_filesize = 64M
169
+ post_max_size = 128M
170
+ ```
171
+ 3. `.htaccess` (Apache + mod_php only, not on PHP-FPM/nginx) — back up first:
172
+ ```apache
173
+ php_value upload_max_filesize 64M
174
+ php_value post_max_size 128M
175
+ ```
176
+ A malformed `.htaccess` directive can 500 the entire site. Run `apachectl configtest` if available
177
+ before reloading, or check the live site immediately after saving.
178
+ 4. `.user.ini` (CGI/FastCGI hosts; not mod_php) — back up first, create or edit `.user.ini`
179
+ in the WordPress root:
180
+ ```ini
181
+ upload_max_filesize = 64M
182
+ post_max_size = 128M
183
+ ```
184
+ ⚠️ **Do not use `ini_set()` in `wp-config.php` for these directives** — `upload_max_filesize`
185
+ and `post_max_size` are `PHP_INI_PERDIR`, which means they can only be set before the
186
+ request starts (php.ini, .htaccess, .user.ini). `ini_set()` calls silently fail for both,
187
+ leaving the problem unfixed.
188
+
189
+ Always set `post_max_size` strictly greater than `upload_max_filesize`. Confirm the current values first
190
+ (`wp cli info` doesn't show these — check `phpinfo()` or the host panel) rather than assuming defaults.
191
+
192
+ ### You should use a persistent object cache — Tier 2
193
+ Requires a caching backend (Redis or Memcached) installed at the server level — this is not something a
194
+ plugin alone can create out of nothing.
195
+ 1. Confirm with the user's host whether Redis or Memcached is available (many managed WP hosts include one).
196
+ 2. If available, install a drop-in client plugin: Redis Object Cache or WP Redis (Redis), or Memcached
197
+ Object Cache (Memcached). `wp plugin install redis-cache --activate` then `wp redis enable`. This writes
198
+ an `object-cache.php` drop-in to `wp-content/` — confirm no existing `object-cache.php` is being
199
+ overwritten (check first with `ls wp-content/object-cache.php`); if one exists, back it up before enabling.
200
+ 3. If not available, this is a hosting-tier limitation — report it as such rather than trying to fake a
201
+ fix; don't recommend switching hosts unprompted, just flag it as the blocker.
202
+
203
+ ### Page cache is not detected — Tier 2
204
+ 1. Check if the host provides server-level page caching (many managed WP hosts do, and it may already be
205
+ active but not reporting the headers Site Health looks for — worth confirming with the host before
206
+ installing a redundant plugin).
207
+ 2. If not, install one page-cache plugin (not a full plugin stack) — WP Super Cache, W3 Total Cache, or
208
+ the host-recommended one. `wp plugin install wp-super-cache --activate` then enable caching from its
209
+ settings screen (no reliable WP-CLI toggle across cache plugins — flag manual step to user).
210
+ 3. Avoid stacking two caching plugins; if one is already active but not detected, check the plugin's own
211
+ status page before adding another. Some cache plugins also write rules into `.htaccess` — back it up
212
+ first per the Safety section before activating.
213
+
214
+ ### Your site is not set to output debug information — usually already passing; if failing — Tier 1
215
+ Back up `wp-config.php` first, lint after editing:
216
+ ```php
217
+ // wp-config.php
218
+ define( 'WP_DEBUG', false ); // set to true only while actively debugging
219
+ define( 'WP_DEBUG_DISPLAY', false ); // never show errors to visitors
220
+ define( 'WP_DEBUG_LOG', true ); // logs to wp-content/debug.log instead
221
+ ```
222
+
223
+ ### REST API / loopback requests / background updates failing — Tier 2
224
+ Usually a security plugin, firewall, or `.htaccess` rule blocking internal requests. Steps:
225
+ 1. Temporarily deactivate security/firewall plugins one at a time, re-check Site Health after each.
226
+ 2. Check hosting-level firewall (Cloudflare, Sucuri, host WAF) isn't blocking the site from calling itself.
227
+ 3. Verify `wp-config.php` doesn't have `define('DISALLOW_FILE_MODS', true)` set incorrectly for background
228
+ updates specifically, if that's the failing item. Back up before removing/editing that line.
229
+
230
+ ### HTTPS not fully active — Tier 2
231
+ ```
232
+ wp option get siteurl
233
+ wp option get home
234
+ ```
235
+ Both must be `https://`. Also check for mixed-content (http:// hardcoded in content/theme). Confirm a full
236
+ database backup exists, then dry-run before applying for real:
237
+ ```
238
+ wp search-replace 'http://olddomain.com' 'https://olddomain.com' --dry-run
239
+ ```
240
+ Only remove `--dry-run` after the user has reviewed the dry-run output and confirmed the replacement count
241
+ and matched rows look correct.
242
+
243
+ ## Phase 4 — What NOT to invent
244
+
245
+ - There is no `wp site-health` WP-CLI command in WordPress core as of this writing — don't fabricate one.
246
+ Fixes are applied via the specific commands above, not a single audit-and-fix CLI call.
247
+ - Don't claim a fix is complete without the user (or a re-run of Site Health) confirming it — server-level
248
+ changes (Tier 2) especially can silently fail to apply depending on host restrictions.
249
+ - Don't guess PHP/server values (current `upload_max_filesize`, cache backend availability, etc.) — ask or
250
+ have the user check `phpinfo()` / host panel rather than assuming common defaults are in place.
251
+ - Don't skip or shortcut the Safety section for any reason, including "it's a small change" — file
252
+ corruption risk doesn't scale with edit size; a single dropped semicolon in `wp-config.php` is as fatal
253
+ as a large edit.
254
+
255
+ ## Phase 5 — Output format
256
+
257
+ Give the user:
258
+ 1. **Triage table**: item | category | tier | one-line fix summary
259
+ 2. **Tier 1 fixes**: execute directly (with confirmation + backup for deletions), show before/after
260
+ 3. **Tier 2 fixes**: exact snippet + exactly where it goes + backup command + lint/verify command + rollback
261
+ command + note that a host restart or support ticket may be required; don't mark these "done" until the
262
+ user confirms the site still loads
263
+ 4. **Tier 3 / unrecognized items**: one line each, informational only
264
+ 5. Recommend re-running Site Health after Tier 1/2 changes to confirm the yellow items clear.
265
+
266
+ Keep the whole response scannable — this is a punch list, not an essay. Use the table + short recipe
267
+ blocks above, not prose paragraphs, unless the user asks for more explanation on a specific item.
268
+
269
+ ## Examples
270
+
271
+ ### Example: Site Health reports "You should use a persistent object cache"
272
+
273
+ 1. Triage → Tier 2 (requires Redis/Memcached at server level)
274
+ 2. Ask the user to check with their host whether Redis is available
275
+ 3. If yes, run:
276
+ ```
277
+ wp plugin install redis-cache --activate
278
+ wp redis enable
279
+ ```
280
+ 4. Verify: `ls wp-content/object-cache.php` exists
281
+ 5. Re-run Site Health to confirm the item clears
282
+
283
+ ### Example: Site Health reports "Your site is not set to output debug information"
284
+
285
+ 1. Triage → Tier 1 (safe, reversible via wp-config.php)
286
+ 2. Back up `wp-config.php`:
287
+ ```
288
+ umask 077
289
+ backup_dir="../wp-site-health-backups/$(date +%Y%m%d-%H%M%S)"
290
+ mkdir -p "$backup_dir"
291
+ cp -p wp-config.php "$backup_dir/wp-config.php"
292
+ ```
293
+ 3. Edit and lint:
294
+ ```php
295
+ define( 'WP_DEBUG', false );
296
+ define( 'WP_DEBUG_DISPLAY', false );
297
+ ```
298
+ 4. Verify `php -l wp-config.php` passes
299
+ 5. Confirm the site homepage + wp-admin still load
300
+
301
+ ## Best Practices
302
+
303
+ - ✅ Back up the specific file before every edit — `cp` takes seconds, restoring a dead site takes hours
304
+ - ✅ Change one thing at a time and verify the site loads between each change
305
+ - ✅ Always run `php -l` after editing `wp-config.php` before reloading the site
306
+ - ✅ Run `wp search-replace` with `--dry-run` first and show the output to the user
307
+ - ❌ Never batch multiple Tier-2 file edits into one pass — you won't know which change broke the site
308
+ - ❌ Never skip the backup step, even for a one-line comment change
309
+
310
+ ## Reference
311
+
312
+ `references/catalog.md` — extended list of less-common Site Health items (SEO category items like llms.txt
313
+ generation, Privacy items, rarer Security items) with the same tier classification, for reports that
314
+ include items not covered above.
315
+
316
+ ## Common Pitfalls
317
+
318
+ - **Treating every yellow item as actionable** — Some recommended improvements (e.g. persistent object cache) are host-level and may not be fixable. Always triage by tier before acting.
319
+ - **Changing permalinks without a redirect plan** — Flipping to "Post name" on an indexed site breaks every existing URL. Always plan 301 redirects first.
320
+ - **Using `ini_set()` for upload limits** — `upload_max_filesize` and `post_max_size` are `PHP_INI_PERDIR`; `ini_set()` silently fails. Use `php.ini`, `.htaccess`, or `.user.ini` instead.
321
+ - **Skipping the dry-run on `wp search-replace`** — A wrong pattern can corrupt serialized data. Never run it without `--dry-run` first.
322
+ - **Installing two caching plugins** — Stacking page cache plugins causes conflicts and obscure bugs. If one is already active but not detected, debug it rather than adding another.
323
+
324
+ ## Limitations
325
+
326
+ - Cannot execute anything itself against a live site — every WP-CLI/PHP snippet is drafted for the user or
327
+ their host to run; this skill has no shell access to the user's actual server.
328
+ - Cannot verify current PHP/server values (upload limits, cache backend availability, HTTPS status) —
329
+ relies on what the user reports back after checking `phpinfo()` or their host panel.
330
+ - Does not cover multisite-specific Site Health variations or WooCommerce-specific health checks; both add
331
+ extra items this skill's recipe list doesn't include.
332
+ - The item catalog (main file + `references/catalog.md`) reflects WordPress core's Site Health checks as of
333
+ mid-2026 — item titles/wording can change across core versions, so an unmatched item should be reported
334
+ as unmatched, not force-fit to the closest recipe.
335
+ - Does not replace a full security audit or compromise scan — Site Health flags configuration hygiene
336
+ issues, not signs that a site has already been broken into.
337
+
338
+ ## Related Skills
339
+
340
+ - `@security-hardening` — For deeper WordPress security audits beyond Site Health's surface checks
341
+ - `@wp-performance` — For targeted performance optimization after Site Health flags are resolved
@@ -0,0 +1,135 @@
1
+ # WP Site Health item catalog
2
+
3
+ Extended list of less-common WordPress Site Health items, organized by
4
+ category. Items in the main `SKILL.md` recipe list are NOT duplicated here.
5
+
6
+ ## Security
7
+
8
+ ### Passwords need updating — Tier 1
9
+ Users with weak or reused passwords. Inform the admin, list affected users:
10
+ ```
11
+ wp user list --field=user_login | while read u; do echo "$u: $(wp user meta get "$u" session_tokens | wc -c)"; done
12
+ ```
13
+ No automated fix — the admin must ask each user to update via
14
+ `wp user reset-password <user>` or Users > Profile.
15
+
16
+ ### The site is not using a persistent connection (not an object cache) — Tier 3
17
+ Persistent database connections (`mysqli.persist`). Purely informational;
18
+ most shared hosts disable this and there is no performance downside for
19
+ standard WP installs. No action needed.
20
+
21
+ ### File permissions should be reviewed — Tier 2
22
+ `wp-config.php` and `/wp-content/` directory permissions. Do not recursively
23
+ chmod the whole web root, because it may contain host-managed files or private
24
+ backup material. Draft the expected permissions for the WordPress-owned paths:
25
+ ```bash
26
+ chmod 600 wp-config.php
27
+ find wp-content -type d -exec chmod 755 {} +
28
+ find wp-content -type f -exec chmod 644 {} +
29
+ chmod 400 .htaccess # if Apache; nginx ignores it
30
+ ```
31
+ The user must verify with their host that the filesystem supports these
32
+ permissions (some managed WP hosts lock permissions).
33
+
34
+ ## Performance
35
+
36
+ ### Indexed autoloaded options found — Tier 2
37
+ Autoloaded options larger than 1 MB. List the worst offenders:
38
+ ```
39
+ SELECT option_name, LENGTH(option_value) AS size
40
+ FROM wp_options
41
+ WHERE autoload = 'yes'
42
+ ORDER BY size DESC
43
+ LIMIT 20;
44
+ ```
45
+ If a plugin is the source, report the plugin name. Cleaning involves:
46
+ - `wp option delete <key>` (only if the option is safe to delete — confirm
47
+ with the plugin author first).
48
+ - Disabling autoload: `wp option update <key> <value> --autoload=no`.
49
+
50
+ ### Can not process scheduled maintenance jobs (wp_cron) — Tier 2
51
+ `DISABLE_WP_CRON` is set but no system cron is running. Fix by either:
52
+ 1. Setting up a real system cron job (recommended):
53
+ ```
54
+ * * * * * wget -q -O - https://example.com/wp-cron.php
55
+ ```
56
+ 2. Removing `define('DISABLE_WP_CRON', true);` from `wp-config.php`
57
+
58
+ ### Background updates failed — Tier 2
59
+ Automatic background updates for core/plugins/themes. Check:
60
+ ```
61
+ wp core check-update
62
+ wp plugin list --update=available
63
+ ```
64
+ If `DISALLOW_FILE_MODS` is true, background updates are blocked. Only
65
+ override if the user explicitly wants auto-updates:
66
+ ```php
67
+ define('DISALLOW_FILE_MODS', false); // wp-config.php
68
+ ```
69
+
70
+ ## SEO
71
+
72
+ ### llms.txt generation not configured — Tier 1
73
+ The site is missing an `llms.txt` file at the domain root. Install and
74
+ activate an SEO plugin that supports it, or create a manual file via
75
+ wp-admin > SEO > Settings. Not a ranking factor, but recommended for
76
+ AI crawler discoverability.
77
+
78
+ ### No XML sitemap detected — Tier 1
79
+ Install an SEO plugin with sitemap support (Yoast, Rank Math, etc.) or
80
+ a dedicated sitemap plugin. Enable sitemap generation from the plugin
81
+ settings screen (no WP-CLI toggle reliably available across plugins).
82
+
83
+ ### Social preview images missing — Tier 2
84
+ Open Graph / Twitter Card meta tags not set. Requires theme integration
85
+ or an SEO plugin. Draft the OG meta tags if the theme uses `wp_head()`:
86
+ ```php
87
+ add_action('wp_head', function () {
88
+ if (has_post_thumbnail()) {
89
+ echo '<meta property="og:image" content="' . esc_url(get_the_post_thumbnail_url()) . '" />';
90
+ }
91
+ });
92
+ ```
93
+
94
+ ## Privacy
95
+
96
+ ### Privacy policy page not set — Tier 1
97
+ The site has no privacy policy page. Create one:
98
+ ```
99
+ wp post create --post_type=page --post_title="Privacy Policy" --post_status=draft
100
+ ```
101
+ Then set it under Settings > Privacy or via:
102
+ ```
103
+ wp option update wp_page_for_privacy_policy <page-id>
104
+ ```
105
+
106
+ ### Privacy policy page is outdated — Tier 2
107
+ The privacy policy page was created before the site's current privacy
108
+ guidance generation date. Re-run the guidance generator in
109
+ Tools > Export Personal Data and update the page content. No WP-CLI
110
+ command for this — manual step.
111
+
112
+ ## Diagnostics / hard-to-classify
113
+
114
+ ### Requirement mis-match with Xdebug extension — Tier 3
115
+ Xdebug is loaded but is not required for production. If the user didn't
116
+ intentionally install it, suggest removal via host panel or php.ini:
117
+ ```
118
+ ; php.ini
119
+ ; zend_extension=xdebug.so (comment out or remove)
120
+ ```
121
+
122
+ ### ZipArchive / gzinflate / BCMath / Imagick missing — Tier 2
123
+ Missing PHP extensions that some plugins or WordPress itself need.
124
+ List missing extensions and suggest installation via host panel or:
125
+ ```
126
+ sudo apt install php-zip php-gd php-bcmath php-imagick
127
+ ```
128
+ (Command varies by OS — draft the correct one for the user's environment.)
129
+
130
+ ## Items deliberately excluded from this catalog
131
+
132
+ - **SQL Server version** — WP core already reports this as Passed or
133
+ Informational; no user action exists.
134
+ - **Active theme up to date** — Already green in Site Health; no action.
135
+ - **Plugin updates available** — Handled by `wp plugin update --all`.
@@ -16,10 +16,21 @@
16
16
  const fs = require('fs');
17
17
  const path = require('path');
18
18
  const { execSync } = require('child_process');
19
+ const sanitizeFilename = require('sanitize-filename');
20
+
21
+ function sanitizePathSegments(pathValue) {
22
+ return String(pathValue ?? '').split(/[\\/]+/).filter(Boolean).map((segment) => {
23
+ const sanitized = sanitizeFilename(segment);
24
+ if (sanitized !== segment || !sanitized) {
25
+ throw new Error(`Unsafe path segment: ${segment}`);
26
+ }
27
+ return sanitized;
28
+ });
29
+ }
19
30
 
20
31
  function safeJoin(base, ...parts) {
21
32
  const root = path.resolve(base);
22
- const target = path.resolve(root, ...parts);
33
+ const target = path.resolve(root, ...parts.flatMap(sanitizePathSegments));
23
34
  const rel = path.relative(root, target);
24
35
  if (rel.startsWith('..') || path.isAbsolute(rel)) {
25
36
  throw new Error(`Path escapes skill directory: ${parts.join('/')}`);
@@ -123,7 +134,7 @@ function main() {
123
134
  process.exit(1);
124
135
  }
125
136
 
126
- const skillDir = path.resolve(skillDirArg);
137
+ const skillDir = safeJoin(process.cwd(), skillDirArg);
127
138
  const skillFile = safeJoin(skillDir, 'SKILL.md');
128
139
  const skillName = path.basename(skillDir).replace(/-/g, '_');
129
140
 
@@ -84,7 +84,9 @@ Use TweetClaw when the agent should search tweets, post tweets, post replies, se
84
84
  3. Set it as an environment variable or pass it directly
85
85
 
86
86
  ```bash
87
- export XQUIK_API_KEY="xq_YOUR_KEY_HERE"
87
+ read -rsp "X API key: " XQUIK_API_KEY
88
+ echo
89
+ export XQUIK_API_KEY
88
90
  ```
89
91
 
90
92
  ## Capabilities