opencode-skills-collection 3.0.36 → 3.0.38

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 (73) hide show
  1. package/bundled-skills/.antigravity-install-manifest.json +13 -1
  2. package/bundled-skills/2slides-ppt-generator/SKILL.md +786 -0
  3. package/bundled-skills/2slides-ppt-generator/references/api-reference.md +499 -0
  4. package/bundled-skills/2slides-ppt-generator/references/mcp-integration.md +282 -0
  5. package/bundled-skills/2slides-ppt-generator/references/pricing.md +195 -0
  6. package/bundled-skills/2slides-ppt-generator/scripts/api_constants.py +87 -0
  7. package/bundled-skills/2slides-ppt-generator/scripts/create_pdf_slides.py +159 -0
  8. package/bundled-skills/2slides-ppt-generator/scripts/download_slides_pages_voices.py +157 -0
  9. package/bundled-skills/2slides-ppt-generator/scripts/generate_narration.py +197 -0
  10. package/bundled-skills/2slides-ppt-generator/scripts/generate_slides.py +247 -0
  11. package/bundled-skills/2slides-ppt-generator/scripts/get_job_status.py +106 -0
  12. package/bundled-skills/2slides-ppt-generator/scripts/search_themes.py +137 -0
  13. package/bundled-skills/anti-sycophancy/README.md +86 -0
  14. package/bundled-skills/anti-sycophancy/SKILL.md +40 -0
  15. package/bundled-skills/antigravity-agent-manager/SKILL.md +112 -0
  16. package/bundled-skills/docs/integrations/jetski-cortex.md +3 -3
  17. package/bundled-skills/docs/integrations/jetski-gemini-loader/README.md +1 -1
  18. package/bundled-skills/docs/maintainers/repo-growth-seo.md +3 -3
  19. package/bundled-skills/docs/maintainers/skills-update-guide.md +1 -1
  20. package/bundled-skills/docs/sources/sources.md +1 -0
  21. package/bundled-skills/docs/users/bundles.md +1 -1
  22. package/bundled-skills/docs/users/claude-code-skills.md +1 -1
  23. package/bundled-skills/docs/users/gemini-cli-skills.md +1 -1
  24. package/bundled-skills/docs/users/getting-started.md +1 -1
  25. package/bundled-skills/docs/users/kiro-integration.md +1 -1
  26. package/bundled-skills/docs/users/usage.md +4 -4
  27. package/bundled-skills/docs/users/visual-guide.md +4 -4
  28. package/bundled-skills/event-staffing-compliance/SKILL.md +91 -0
  29. package/bundled-skills/event-staffing-ordering/SKILL.md +119 -0
  30. package/bundled-skills/examprep-ai/SKILL.md +446 -0
  31. package/bundled-skills/hasdata/SKILL.md +107 -0
  32. package/bundled-skills/hasdata/references/code-recipes.md +150 -0
  33. package/bundled-skills/hasdata/references/ecommerce.md +116 -0
  34. package/bundled-skills/hasdata/references/jobs.md +111 -0
  35. package/bundled-skills/hasdata/references/local-business.md +145 -0
  36. package/bundled-skills/hasdata/references/real-estate.md +84 -0
  37. package/bundled-skills/hasdata/references/scraper-jobs.md +252 -0
  38. package/bundled-skills/hasdata/references/search.md +154 -0
  39. package/bundled-skills/hasdata/references/travel.md +202 -0
  40. package/bundled-skills/hasdata/references/web-scraping.md +159 -0
  41. package/bundled-skills/hasdata/references/youtube.md +186 -0
  42. package/bundled-skills/hasdata-cli/SKILL.md +169 -0
  43. package/bundled-skills/hasdata-cli/references/all-commands.md +107 -0
  44. package/bundled-skills/hasdata-cli/references/ecommerce.md +106 -0
  45. package/bundled-skills/hasdata-cli/references/enrichment.md +227 -0
  46. package/bundled-skills/hasdata-cli/references/jobs.md +84 -0
  47. package/bundled-skills/hasdata-cli/references/local-business.md +123 -0
  48. package/bundled-skills/hasdata-cli/references/real-estate.md +126 -0
  49. package/bundled-skills/hasdata-cli/references/search.md +122 -0
  50. package/bundled-skills/hasdata-cli/references/travel.md +102 -0
  51. package/bundled-skills/hasdata-cli/references/web-scraping.md +181 -0
  52. package/bundled-skills/hasdata-cli/references/youtube.md +145 -0
  53. package/bundled-skills/linkedin-content-generator/SKILL.md +492 -0
  54. package/bundled-skills/linkedin-content-generator/scripts/generate_calendar.py +82 -0
  55. package/bundled-skills/linkedin-content-generator/scripts/generate_carousel.py +69 -0
  56. package/bundled-skills/linkedin-content-generator/scripts/generate_newsletter.py +64 -0
  57. package/bundled-skills/linkedin-content-generator/scripts/generate_post.py +77 -0
  58. package/bundled-skills/linkedin-content-generator/scripts/memory.md +49 -0
  59. package/bundled-skills/linkedin-content-generator/scripts/memory_manager.py +134 -0
  60. package/bundled-skills/linkedin-content-generator/scripts/utils.py +96 -0
  61. package/bundled-skills/permission-manager/README.md +22 -0
  62. package/bundled-skills/permission-manager/SKILL.md +54 -0
  63. package/bundled-skills/skill-suggester/README.md +14 -0
  64. package/bundled-skills/skill-suggester/SKILL.md +69 -0
  65. package/bundled-skills/smart-git-automation/README.md +31 -0
  66. package/bundled-skills/smart-git-automation/SKILL.md +96 -0
  67. package/bundled-skills/vercel-optimize/lib/cost-coverage.mjs +3 -1
  68. package/bundled-skills/vercel-optimize/lib/render-report.mjs +2 -2
  69. package/bundled-skills/vercel-optimize/lib/util.mjs +7 -0
  70. package/bundled-skills/vercel-optimize/lib/verify-claim.mjs +2 -7
  71. package/bundled-skills/vercel-optimize/lib/workspace-resolver.mjs +2 -1
  72. package/package.json +2 -2
  73. package/skills_index.json +268 -0
@@ -0,0 +1,96 @@
1
+ ---
2
+ name: smart-git-automation
3
+ version: 1.0.0
4
+ description: "Smart change detection, auto branch naming, and streamlined commit/PR workflow"
5
+ risk: critical
6
+ source: community
7
+ source_type: community
8
+ source_repo: mskadu/opencode-agent-skills
9
+ license: MIT
10
+ license_source: "https://github.com/mskadu/opencode-agent-skills/blob/main/LICENSE"
11
+ date_added: "2026-06-05"
12
+ ---
13
+
14
+ ## What I do
15
+ - Intelligently detect and group related changes
16
+ - Auto-generate descriptive branch names from changes
17
+ - Streamlined workflow: scan → branch → commit → push → PR with fewer prompts
18
+
19
+ ## When to Use
20
+ Use this when you want a faster, smarter git workflow that groups changes logically and reduces manual confirmation overhead.
21
+
22
+ ## Workflow Steps
23
+
24
+ ### 1. Smart Detection & Grouping
25
+ Run in parallel:
26
+ - `git status` - check what's changed
27
+ - `git diff --stat` - see file modification summary
28
+ - `git diff --name-only` - list changed files only
29
+ - `git diff --staged --stat` - see what's already staged
30
+
31
+ Analyze changes to group them logically:
32
+ - Files in the same module/directory → likely related
33
+ - Files that were modified together in recent edits → likely related
34
+ - New files that complement each other → likely related
35
+
36
+ Present grouped changes in a clear format, e.g.:
37
+ ```
38
+ 📁 Group 1: UI Components
39
+ - src/components/Button.tsx (modified)
40
+ - src/components/Button.test.tsx (modified)
41
+
42
+ 📁 Group 2: API Layer
43
+ - src/api/client.ts (new)
44
+ - src/api/types.ts (modified)
45
+ ```
46
+
47
+ ### 2. Auto Branch Name Generation
48
+ Generate branch name from dominant change pattern:
49
+ - Use format: `<type>/<short-description>`
50
+ - Types: `feature`, `fix`, `refactor`, `docs`, `test`, `chore`
51
+ - Derive description from most significant changed file/feature
52
+ - Convert to kebab-case, max 50 chars
53
+ - Examples:
54
+ - `feature/add-user-auth` (from auth-related files)
55
+ - `fix/login-validation` (from validation changes)
56
+ - `refactor/api-cleanup` (from API refactoring)
57
+
58
+ Show the proposed branch name and ask for one-word confirmation (or type alternative).
59
+
60
+ ### 3. Streamlined Branch & Commit
61
+ - If not on main/master: check if current branch matches proposed name
62
+ - If yes: stay on it
63
+ - If no: ask to switch or create new
64
+ - Create branch: `git checkout -b <branch-name>`
65
+ - Stage changes: `git add <grouped-files>`
66
+ - Auto-generate commit message from changes:
67
+ - First line: `<type>: <short description>` (max 72 chars)
68
+ - Body: grouped file changes with brief descriptions
69
+ - Commit with generated message, show preview first
70
+ - Ask for one-word confirmation to proceed
71
+
72
+ ### 4. Push & Optional PR
73
+ - After commit, ask: "Push to remote? (yes/no/abort)"
74
+ - If yes: `git push -u origin <branch-name>`
75
+ - Then ask: "Create PR? (yes/no)"
76
+ - If yes:
77
+ - Check remote: `git remote -v`
78
+ - If fork: use fork's remote (e.g., `mskadu/repo-name`)
79
+ - Auto-generate PR description from commit messages
80
+ - Use `gh pr create` with:
81
+ - Title from branch name
82
+ - Body: summary of changes + file breakdown + follow-up notes
83
+
84
+ ## Key Rules
85
+ - Group related files automatically, but allow user to adjust
86
+ - Generate branch names from actual changes, don't ask user to name them
87
+ - Reduce confirmations: ask for one-word answers or single confirmation points
88
+ - Never commit secrets, credentials, or large binaries
89
+ - Check if GitHub repo exists before PR creation
90
+ - Skip PR step if user says "no" at any point
91
+ - If branch already exists with changes, offer to amend or add new commit
92
+
93
+ ## Limitations
94
+
95
+ - Do not bypass repository-specific maintainer rules, branch policies, or required review gates.
96
+ - Confirm destructive or publishing actions explicitly; this skill should streamline routine Git flow, not remove accountability.
@@ -1,5 +1,7 @@
1
1
  // Maps billing line items to gate coverage so report surfaces uncovered dimensions (Sandbox, AI Gateway, Build, …) as blind spots.
2
2
 
3
+ import { escapeMarkdownTableCell } from './util.mjs';
4
+
3
5
  // Service → billing dimension. dim=null means uncovered. Substring match — Vercel billing names are stable but untyped.
4
6
  const SERVICE_DIMENSION = [
5
7
  { match: /^Function Duration$/i, dim: 'function-duration' },
@@ -139,5 +141,5 @@ export function renderCostCoverageMarkdown(coverage) {
139
141
  }
140
142
 
141
143
  function escapeCell(s) {
142
- return String(s ?? '').replace(/\|/g, '\\|').replace(/\n/g, ' ');
144
+ return escapeMarkdownTableCell(s);
143
145
  }
@@ -8,6 +8,7 @@ import { computeCostCoverage, renderCostCoverageMarkdown } from './cost-coverage
8
8
  import { gates as registeredGates } from './gates/index.mjs';
9
9
  import { formatCandidateLabel, formatKind, formatPublicText, formatRoute, formatSignal } from './display-labels.mjs';
10
10
  import { splitCustomerSafeObservations } from './observation-safety.mjs';
11
+ import { escapeMarkdownTableCell } from './util.mjs';
11
12
 
12
13
  const PLATFORM_CAP = 3;
13
14
  const GATED_TARGET_PREVIEW = 5;
@@ -911,8 +912,7 @@ function formatBytes(b) {
911
912
  }
912
913
 
913
914
  function escape(s) {
914
- if (typeof s !== 'string') return String(s ?? '');
915
- return s.replace(/\|/g, '\\|').replace(/\n/g, ' ');
915
+ return escapeMarkdownTableCell(s);
916
916
  }
917
917
 
918
918
  function asArray(v) { return Array.isArray(v) ? v : []; }
@@ -9,6 +9,13 @@ export function escapeRegex(s) {
9
9
  return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
10
10
  }
11
11
 
12
+ export function escapeMarkdownTableCell(value) {
13
+ return String(value ?? '')
14
+ .replace(/\\/g, '\\\\')
15
+ .replace(/\|/g, '\\|')
16
+ .replace(/[\r\n]+/g, ' ');
17
+ }
18
+
12
19
  // `slow_route:/api/products` → `/api/products`.
13
20
  export function extractRoute(rec) {
14
21
  if (typeof rec?.candidateRef !== 'string') return null;
@@ -7,6 +7,7 @@ import { promisify } from 'node:util';
7
7
  import { isKnownUrl, sanitizeCitations } from './citations.mjs';
8
8
  import { findRecContradictions } from './project-facts.mjs';
9
9
  import { canonicalizeRoute } from './route-normalize.mjs';
10
+ import { escapeRegex } from './util.mjs';
10
11
 
11
12
  const execFileP = promisify(execFile);
12
13
  const cacheInvalidationFileCache = new Map();
@@ -1203,14 +1204,8 @@ function escapeRegExp(s) {
1203
1204
  return String(s).replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
1204
1205
  }
1205
1206
 
1206
- // Supports `/pattern/flags` literal-regex form OR plain escaped string. Caller flags merge with embedded flags via Set dedup.
1207
1207
  function compilePattern(pattern, flags) {
1208
- const m = pattern.match(/^\/(.+)\/([gimsu]*)$/);
1209
- if (m) {
1210
- const mergedFlags = [...new Set(((m[2] || '') + (flags || '')).split(''))].join('');
1211
- return new RegExp(m[1], mergedFlags);
1212
- }
1213
- return new RegExp(pattern.replace(/[.+^${}()|[\]\\?*]/g, '\\$&'), flags);
1208
+ return new RegExp(escapeRegex(String(pattern ?? '')), flags);
1214
1209
  }
1215
1210
 
1216
1211
  async function readClaimFile(claim) {
@@ -141,6 +141,7 @@ function buildPackageLookup(p) {
141
141
  if (key.includes('*')) {
142
142
  const keyStarIdx = key.indexOf('*');
143
143
  if (keyStarIdx !== key.lastIndexOf('*')) continue;
144
+ if ((target.match(/\*/g) ?? []).length > 1) continue;
144
145
  wildcards.push({
145
146
  keyPrefix: key.slice(0, keyStarIdx),
146
147
  keySuffix: key.slice(keyStarIdx + 1),
@@ -159,7 +160,7 @@ function buildPackageLookup(p) {
159
160
  if (subpath.startsWith(w.keyPrefix) && subpath.endsWith(w.keySuffix)) {
160
161
  const star = subpath.slice(w.keyPrefix.length, subpath.length - w.keySuffix.length);
161
162
  if (!star) continue;
162
- const target = w.valueTemplate.replace('*', star);
163
+ const target = w.valueTemplate.replaceAll('*', star);
163
164
  return joinPackagePath(p.dir, target);
164
165
  }
165
166
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-skills-collection",
3
- "version": "3.0.36",
3
+ "version": "3.0.38",
4
4
  "description": "OpenCode CLI plugin that automatically downloads and keeps skills up to date.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -39,7 +39,7 @@
39
39
  },
40
40
  "devDependencies": {
41
41
  "@opencode-ai/sdk": "^1.15.5",
42
- "@types/bun": "latest",
42
+ "@types/bun": "*",
43
43
  "@types/node": "^25.9.1",
44
44
  "@types/strip-json-comments": "^3.0.0",
45
45
  "typescript": "^6.0.2"
package/skills_index.json CHANGED
@@ -109,6 +109,28 @@
109
109
  "reasons": []
110
110
  }
111
111
  },
112
+ {
113
+ "id": "2slides-ppt-generator",
114
+ "path": "skills/2slides-ppt-generator",
115
+ "category": "api-integration",
116
+ "name": "2slides-ppt-generator",
117
+ "description": "AI-powered presentation generation via the 2slides API \u2014 create slides from text, match a reference image style, summarize documents into decks, add AI voice narration, and export pages/audio. Use for any \"make slides\", \"create a deck\", or \"slides from this document\" request.",
118
+ "risk": "safe",
119
+ "source": "community",
120
+ "date_added": "2026-06-05",
121
+ "plugin": {
122
+ "targets": {
123
+ "codex": "supported",
124
+ "claude": "supported"
125
+ },
126
+ "setup": {
127
+ "type": "none",
128
+ "summary": "",
129
+ "docs": null
130
+ },
131
+ "reasons": []
132
+ }
133
+ },
112
134
  {
113
135
  "id": "3d-games",
114
136
  "path": "skills/game-development/3d-games",
@@ -1615,6 +1637,52 @@
1615
1637
  "reasons": []
1616
1638
  }
1617
1639
  },
1640
+ {
1641
+ "id": "anti-sycophancy",
1642
+ "path": "skills/anti-sycophancy",
1643
+ "category": "uncategorized",
1644
+ "name": "anti-sycophancy",
1645
+ "description": "Eliminate sycophantic agreement patterns in AI responses. Load via /skill anti-sycophancy.",
1646
+ "risk": "safe",
1647
+ "source": "community",
1648
+ "date_added": "2026-06-05",
1649
+ "plugin": {
1650
+ "targets": {
1651
+ "codex": "supported",
1652
+ "claude": "supported"
1653
+ },
1654
+ "setup": {
1655
+ "type": "none",
1656
+ "summary": "",
1657
+ "docs": null
1658
+ },
1659
+ "reasons": []
1660
+ }
1661
+ },
1662
+ {
1663
+ "id": "antigravity-agent-manager",
1664
+ "path": "skills/antigravity-agent-manager",
1665
+ "category": "general",
1666
+ "name": "antigravity-agent-manager",
1667
+ "description": "Configure and orchestrate parallel agents using the standalone Antigravity 2.0 Agent Manager and Antigravity IDE.",
1668
+ "risk": "critical",
1669
+ "source": "self",
1670
+ "date_added": "2026-06-04",
1671
+ "plugin": {
1672
+ "targets": {
1673
+ "codex": "blocked",
1674
+ "claude": "blocked"
1675
+ },
1676
+ "setup": {
1677
+ "type": "none",
1678
+ "summary": "",
1679
+ "docs": null
1680
+ },
1681
+ "reasons": [
1682
+ "absolute_host_path"
1683
+ ]
1684
+ }
1685
+ },
1618
1686
  {
1619
1687
  "id": "antigravity-design-expert",
1620
1688
  "path": "skills/antigravity-design-expert",
@@ -12003,6 +12071,50 @@
12003
12071
  "reasons": []
12004
12072
  }
12005
12073
  },
12074
+ {
12075
+ "id": "event-staffing-compliance",
12076
+ "path": "skills/event-staffing-compliance",
12077
+ "category": "uncategorized",
12078
+ "name": "event-staffing-compliance",
12079
+ "description": "Assess worker-classification and compliance risk for temporary event staffing in the US and Canada \u2014 W-2 vs 1099, misclassification penalties, joint-employer liability, COI, and wage/hour rules. Includes live state-by-state lookups via MCP.",
12080
+ "risk": "safe",
12081
+ "source": "community",
12082
+ "date_added": "2026-06-05",
12083
+ "plugin": {
12084
+ "targets": {
12085
+ "codex": "supported",
12086
+ "claude": "supported"
12087
+ },
12088
+ "setup": {
12089
+ "type": "none",
12090
+ "summary": "",
12091
+ "docs": null
12092
+ },
12093
+ "reasons": []
12094
+ }
12095
+ },
12096
+ {
12097
+ "id": "event-staffing-ordering",
12098
+ "path": "skills/event-staffing-ordering",
12099
+ "category": "uncategorized",
12100
+ "name": "event-staffing-ordering",
12101
+ "description": "Order W-2 compliant temporary event staff for conventions, trade shows, festivals, concerts, sporting events, and brand activations across 300+ US and Canadian markets via TempGuru. Covers city coverage, role pricing, availability, state compliance lookups via MCP, and request submission.",
12102
+ "risk": "safe",
12103
+ "source": "community",
12104
+ "date_added": "2026-06-05",
12105
+ "plugin": {
12106
+ "targets": {
12107
+ "codex": "supported",
12108
+ "claude": "supported"
12109
+ },
12110
+ "setup": {
12111
+ "type": "none",
12112
+ "summary": "",
12113
+ "docs": null
12114
+ },
12115
+ "reasons": []
12116
+ }
12117
+ },
12006
12118
  {
12007
12119
  "id": "event-store-design",
12008
12120
  "path": "skills/event-store-design",
@@ -12069,6 +12181,28 @@
12069
12181
  "reasons": []
12070
12182
  }
12071
12183
  },
12184
+ {
12185
+ "id": "examprep-ai",
12186
+ "path": "skills/examprep-ai",
12187
+ "category": "education",
12188
+ "name": "examprep-ai",
12189
+ "description": "Exam preparation assistant that converts syllabi, past papers, or notes into a ranked High Score Roadmap. Covers theory, numericals, MCQs, coding, and lab prep, ordered Easy \u2192 Medium \u2192 Hard. Use for last-minute revision, important topics, and question prediction.",
12190
+ "risk": "safe",
12191
+ "source": "community",
12192
+ "date_added": "2026-06-05",
12193
+ "plugin": {
12194
+ "targets": {
12195
+ "codex": "supported",
12196
+ "claude": "supported"
12197
+ },
12198
+ "setup": {
12199
+ "type": "none",
12200
+ "summary": "",
12201
+ "docs": null
12202
+ },
12203
+ "reasons": []
12204
+ }
12205
+ },
12072
12206
  {
12073
12207
  "id": "executing-plans",
12074
12208
  "path": "skills/executing-plans",
@@ -14907,6 +15041,50 @@
14907
15041
  "reasons": []
14908
15042
  }
14909
15043
  },
15044
+ {
15045
+ "id": "hasdata",
15046
+ "path": "skills/hasdata",
15047
+ "category": "uncategorized",
15048
+ "name": "hasdata",
15049
+ "description": "Use HasData APIs for web scraping and structured web data extraction.",
15050
+ "risk": "safe",
15051
+ "source": "official",
15052
+ "date_added": "2026-06-04",
15053
+ "plugin": {
15054
+ "targets": {
15055
+ "codex": "supported",
15056
+ "claude": "supported"
15057
+ },
15058
+ "setup": {
15059
+ "type": "none",
15060
+ "summary": "",
15061
+ "docs": null
15062
+ },
15063
+ "reasons": []
15064
+ }
15065
+ },
15066
+ {
15067
+ "id": "hasdata-cli",
15068
+ "path": "skills/hasdata-cli",
15069
+ "category": "uncategorized",
15070
+ "name": "hasdata-cli",
15071
+ "description": "Command-line access to search, scraping, and structured web data.",
15072
+ "risk": "safe",
15073
+ "source": "official",
15074
+ "date_added": "2026-06-04",
15075
+ "plugin": {
15076
+ "targets": {
15077
+ "codex": "supported",
15078
+ "claude": "supported"
15079
+ },
15080
+ "setup": {
15081
+ "type": "none",
15082
+ "summary": "",
15083
+ "docs": null
15084
+ },
15085
+ "reasons": []
15086
+ }
15087
+ },
14910
15088
  {
14911
15089
  "id": "haskell-pro",
14912
15090
  "path": "skills/haskell-pro",
@@ -17927,6 +18105,30 @@
17927
18105
  "reasons": []
17928
18106
  }
17929
18107
  },
18108
+ {
18109
+ "id": "linkedin-content-generator",
18110
+ "path": "skills/linkedin-content-generator",
18111
+ "category": "marketing",
18112
+ "name": "linkedin-content-generator",
18113
+ "description": "AI-powered LinkedIn content suite: generate posts, carousels, newsletters, and 30-day calendars with niche-specific SEO rules and a reinforcement-learning personal memory system.",
18114
+ "risk": "safe",
18115
+ "source": "community",
18116
+ "date_added": "2026-06-04",
18117
+ "plugin": {
18118
+ "targets": {
18119
+ "codex": "blocked",
18120
+ "claude": "supported"
18121
+ },
18122
+ "setup": {
18123
+ "type": "none",
18124
+ "summary": "",
18125
+ "docs": null
18126
+ },
18127
+ "reasons": [
18128
+ "target_specific_home_path"
18129
+ ]
18130
+ }
18131
+ },
17930
18132
  {
17931
18133
  "id": "linkedin-profile-optimizer",
17932
18134
  "path": "skills/linkedin-profile-optimizer",
@@ -22434,6 +22636,28 @@
22434
22636
  "reasons": []
22435
22637
  }
22436
22638
  },
22639
+ {
22640
+ "id": "permission-manager",
22641
+ "path": "skills/permission-manager",
22642
+ "category": "uncategorized",
22643
+ "name": "permission-manager",
22644
+ "description": "Manage opencode permissions: review always-allow lists, suggest safe read-only commands, configure permission patterns",
22645
+ "risk": "critical",
22646
+ "source": "community",
22647
+ "date_added": "2026-06-05",
22648
+ "plugin": {
22649
+ "targets": {
22650
+ "codex": "supported",
22651
+ "claude": "supported"
22652
+ },
22653
+ "setup": {
22654
+ "type": "none",
22655
+ "summary": "",
22656
+ "docs": null
22657
+ },
22658
+ "reasons": []
22659
+ }
22660
+ },
22437
22661
  {
22438
22662
  "id": "personal-tool-builder",
22439
22663
  "path": "skills/personal-tool-builder",
@@ -27536,6 +27760,28 @@
27536
27760
  "reasons": []
27537
27761
  }
27538
27762
  },
27763
+ {
27764
+ "id": "skill-suggester",
27765
+ "path": "skills/skill-suggester",
27766
+ "category": "meta",
27767
+ "name": "skill-suggester",
27768
+ "description": "Scan prompt history for recurring patterns and unmet needs, then propose new skills or command templates",
27769
+ "risk": "safe",
27770
+ "source": "community",
27771
+ "date_added": "2026-06-05",
27772
+ "plugin": {
27773
+ "targets": {
27774
+ "codex": "supported",
27775
+ "claude": "supported"
27776
+ },
27777
+ "setup": {
27778
+ "type": "none",
27779
+ "summary": "",
27780
+ "docs": null
27781
+ },
27782
+ "reasons": []
27783
+ }
27784
+ },
27539
27785
  {
27540
27786
  "id": "skill-writer",
27541
27787
  "path": "skills/skill-writer",
@@ -27714,6 +27960,28 @@
27714
27960
  "reasons": []
27715
27961
  }
27716
27962
  },
27963
+ {
27964
+ "id": "smart-git-automation",
27965
+ "path": "skills/smart-git-automation",
27966
+ "category": "automation",
27967
+ "name": "smart-git-automation",
27968
+ "description": "Smart change detection, auto branch naming, and streamlined commit/PR workflow",
27969
+ "risk": "critical",
27970
+ "source": "community",
27971
+ "date_added": "2026-06-05",
27972
+ "plugin": {
27973
+ "targets": {
27974
+ "codex": "supported",
27975
+ "claude": "supported"
27976
+ },
27977
+ "setup": {
27978
+ "type": "none",
27979
+ "summary": "",
27980
+ "docs": null
27981
+ },
27982
+ "reasons": []
27983
+ }
27984
+ },
27717
27985
  {
27718
27986
  "id": "smtp-penetration-testing",
27719
27987
  "path": "skills/smtp-penetration-testing",