@olegkoval/agent-skills 1.0.0-beta.1

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 (79) hide show
  1. package/.claude-plugin/marketplace.json +58 -0
  2. package/.cursor-plugin/index.json +55 -0
  3. package/LICENSE +21 -0
  4. package/README.md +181 -0
  5. package/catalog/skills.json +202 -0
  6. package/collections/creative-tools.json +5 -0
  7. package/collections/docs-tools.json +5 -0
  8. package/collections/git-tools.json +5 -0
  9. package/collections/marketing.json +5 -0
  10. package/collections/music.json +5 -0
  11. package/collections/photography.json +5 -0
  12. package/collections/product-tools.json +5 -0
  13. package/collections/prompt-tools.json +5 -0
  14. package/collections/release-tools.json +5 -0
  15. package/collections/software-development.json +13 -0
  16. package/package.json +47 -0
  17. package/packages/marketing/viral-launch/SKILL.md +101 -0
  18. package/packages/marketing/viral-launch/adapters/claude/plugin.json +10 -0
  19. package/packages/marketing/viral-launch/adapters/codex/README.md +3 -0
  20. package/packages/marketing/viral-launch/adapters/cursor/plugin.json +6 -0
  21. package/packages/marketing/viral-launch/adapters/cursor/skills/viral-launch/SKILL.md +103 -0
  22. package/packages/marketing/viral-launch/references/external-skills.md +12 -0
  23. package/packages/marketing/viral-launch/references/launch-checklist.md +42 -0
  24. package/packages/music/fill-music-player/LICENSE +21 -0
  25. package/packages/music/fill-music-player/SKILL.md +108 -0
  26. package/packages/music/fill-music-player/adapters/claude/plugin.json +10 -0
  27. package/packages/music/fill-music-player/adapters/codex/README.md +3 -0
  28. package/packages/music/fill-music-player/adapters/cursor/plugin.json +6 -0
  29. package/packages/music/fill-music-player/adapters/cursor/skills/fill-music-player/SKILL.md +110 -0
  30. package/packages/photography/gallery/.skillfish.json +10 -0
  31. package/packages/photography/gallery/SKILL.md +233 -0
  32. package/packages/photography/gallery/adapters/claude/plugin.json +10 -0
  33. package/packages/photography/gallery/adapters/codex/README.md +3 -0
  34. package/packages/photography/gallery/adapters/cursor/plugin.json +6 -0
  35. package/packages/photography/gallery/adapters/cursor/skills/gallery/SKILL.md +235 -0
  36. package/packages/software-development/changelog-generator/SKILL.md +111 -0
  37. package/packages/software-development/changelog-generator/adapters/claude/plugin.json +10 -0
  38. package/packages/software-development/changelog-generator/adapters/codex/README.md +3 -0
  39. package/packages/software-development/changelog-generator/adapters/cursor/plugin.json +6 -0
  40. package/packages/software-development/changelog-generator/adapters/cursor/skills/changelog-generator/SKILL.md +113 -0
  41. package/packages/software-development/docs-index-keeper/SKILL.md +62 -0
  42. package/packages/software-development/docs-index-keeper/adapters/claude/plugin.json +10 -0
  43. package/packages/software-development/docs-index-keeper/adapters/codex/README.md +5 -0
  44. package/packages/software-development/docs-index-keeper/adapters/cursor/plugin.json +6 -0
  45. package/packages/software-development/docs-index-keeper/adapters/cursor/skills/docs-index-keeper/SKILL.md +64 -0
  46. package/packages/software-development/gh-cli/SKILL.md +2196 -0
  47. package/packages/software-development/gh-cli/adapters/claude/plugin.json +10 -0
  48. package/packages/software-development/gh-cli/adapters/codex/README.md +3 -0
  49. package/packages/software-development/gh-cli/adapters/cursor/plugin.json +6 -0
  50. package/packages/software-development/gh-cli/adapters/cursor/skills/gh-cli/SKILL.md +2198 -0
  51. package/packages/software-development/git-commit/SKILL.md +131 -0
  52. package/packages/software-development/git-commit/adapters/claude/plugin.json +10 -0
  53. package/packages/software-development/git-commit/adapters/codex/README.md +3 -0
  54. package/packages/software-development/git-commit/adapters/cursor/plugin.json +6 -0
  55. package/packages/software-development/git-commit/adapters/cursor/skills/git-commit/SKILL.md +133 -0
  56. package/packages/software-development/product-builder/LICENSE +21 -0
  57. package/packages/software-development/product-builder/SKILL.md +221 -0
  58. package/packages/software-development/product-builder/adapters/claude/plugin.json +10 -0
  59. package/packages/software-development/product-builder/adapters/codex/README.md +3 -0
  60. package/packages/software-development/product-builder/adapters/cursor/plugin.json +6 -0
  61. package/packages/software-development/product-builder/adapters/cursor/skills/product-builder/SKILL.md +223 -0
  62. package/packages/software-development/promptctl/SKILL.md +86 -0
  63. package/packages/software-development/promptctl/adapters/claude/plugin.json +10 -0
  64. package/packages/software-development/promptctl/adapters/codex/README.md +3 -0
  65. package/packages/software-development/promptctl/adapters/cursor/plugin.json +6 -0
  66. package/packages/software-development/promptctl/adapters/cursor/skills/promptctl/SKILL.md +88 -0
  67. package/packages/software-development/semantic-release-beta/SKILL.md +55 -0
  68. package/packages/software-development/semantic-release-beta/adapters/claude/plugin.json +10 -0
  69. package/packages/software-development/semantic-release-beta/adapters/codex/README.md +3 -0
  70. package/packages/software-development/semantic-release-beta/adapters/cursor/plugin.json +6 -0
  71. package/packages/software-development/semantic-release-beta/adapters/cursor/skills/semantic-release-beta/SKILL.md +57 -0
  72. package/packages/software-development/semantic-release-beta/references/github-actions.md +16 -0
  73. package/packages/software-development/semantic-release-beta/references/node-semantic-release.md +13 -0
  74. package/packages/software-development/semantic-release-beta/references/preset.md +47 -0
  75. package/packages/software-development/semantic-release-beta/references/validation.md +17 -0
  76. package/scripts/build-adapters.sh +115 -0
  77. package/scripts/install-codex-symlinks.sh +37 -0
  78. package/scripts/sync-from-sources.sh +44 -0
  79. package/scripts/validate-catalog.sh +90 -0
@@ -0,0 +1,101 @@
1
+ ---
2
+
3
+ name: viral-launch
4
+ description: Set up a project repository and launch plan for shareable marketing, public launch readiness, and growth loops without pretending virality is guaranteed.
5
+ compatibility: Codex, Claude Code, Cursor, GitHub Copilot, and other Agent Skills compatible tools. Useful for product repos, open-source packages, SaaS launches, waitlists, and creator tools.
6
+ metadata:
7
+ author: Oleg Koval
8
+ tags:
9
+ - marketing
10
+ - launch
11
+ - growth
12
+ - virality
13
+ - positioning
14
+ - github
15
+
16
+ ---
17
+
18
+ # viral-launch
19
+
20
+ Use this skill when a user wants to launch a project, make a repo marketable, improve discoverability, or build shareable launch assets.
21
+
22
+ This skill is opinionated: virality is not a promise. The goal is to make the project easy to understand, easy to share, and easy to act on.
23
+
24
+ ## Trigger phrases
25
+
26
+ - make this repo launch-ready
27
+ - set this up to go viral
28
+ - prepare a product launch
29
+ - create marketing assets for this project
30
+ - improve the README for launch
31
+ - prepare Product Hunt / Hacker News / X / LinkedIn launch copy
32
+ - set up an open-source repo for growth
33
+
34
+ ## Workflow
35
+
36
+ 1. Inspect the project first:
37
+ - product purpose
38
+ - target user
39
+ - core use case
40
+ - current README and docs
41
+ - install or demo path
42
+ - screenshots, videos, or visual proof
43
+ - analytics or waitlist capture if present
44
+ 2. Define the launch angle in one sentence:
45
+ - who it is for
46
+ - what painful job it solves
47
+ - why now
48
+ - what makes it different
49
+ 3. Make the repo launch-ready:
50
+ - clear README headline and first paragraph
51
+ - demo or quickstart within the first screen
52
+ - installation steps that work from a clean checkout
53
+ - screenshots, GIF, or demo link where possible
54
+ - feature list based on outcomes, not implementation trivia
55
+ - examples for the highest-intent use cases
56
+ - badges only when they add trust
57
+ - license, contributing notes, and issue templates when useful
58
+ 4. Create launch assets:
59
+ - short tagline
60
+ - 1-paragraph announcement
61
+ - 5 social post variants
62
+ - Product Hunt tagline and description when relevant
63
+ - Hacker News title candidates when relevant
64
+ - launch email or DM when relevant
65
+ - creator/influencer outreach list criteria, not spam copy
66
+ 5. Design share loops:
67
+ - a reason users would show the output to someone else
68
+ - a public artifact worth linking
69
+ - a before/after demo
70
+ - a template, benchmark, checklist, or gallery that can travel
71
+ - referral or waitlist loop only if it fits the product
72
+ 6. Define proof and metrics:
73
+ - activation event
74
+ - share event
75
+ - conversion event
76
+ - retention proxy
77
+ - launch-day dashboard or simple tracking checklist
78
+ 7. Keep claims grounded:
79
+ - do not invent traction, logos, benchmarks, testimonials, or user counts
80
+ - mark assumptions explicitly
81
+ - prefer specific proof over hype
82
+ - avoid dark patterns and spam
83
+
84
+ ## Output format
85
+
86
+ When planning, produce:
87
+
88
+ - Launch angle
89
+ - Repo changes
90
+ - Launch assets
91
+ - Share loops
92
+ - Metrics
93
+ - Risks and assumptions
94
+ - Next actions
95
+
96
+ When editing a repository, make the smallest useful set of changes first, then validate by reading the README from a new user's perspective.
97
+
98
+ ## References
99
+
100
+ - `references/launch-checklist.md`
101
+ - `references/external-skills.md`
@@ -0,0 +1,10 @@
1
+ {
2
+ "name": "olko:viral-launch",
3
+ "description": "Set up a project repository and launch plan for shareable marketing, public launch readiness, and growth loops.",
4
+ "skills": [
5
+ {
6
+ "name": "olko:viral-launch",
7
+ "source": "../../SKILL.md"
8
+ }
9
+ ]
10
+ }
@@ -0,0 +1,3 @@
1
+ # Codex adapter
2
+
3
+ Use the canonical skill directly from `packages/marketing/viral-launch/SKILL.md`.
@@ -0,0 +1,6 @@
1
+ {
2
+ "name": "olko:viral-launch",
3
+ "version": "0.1.0",
4
+ "description": "Set up a project repository and launch plan for shareable marketing, public launch readiness, and growth loops.",
5
+ "skills": "skills/"
6
+ }
@@ -0,0 +1,103 @@
1
+ <!-- Generated by scripts/build-adapters.sh. Do not edit directly. -->
2
+
3
+ ---
4
+
5
+ name: viral-launch
6
+ description: Set up a project repository and launch plan for shareable marketing, public launch readiness, and growth loops without pretending virality is guaranteed.
7
+ compatibility: Codex, Claude Code, Cursor, GitHub Copilot, and other Agent Skills compatible tools. Useful for product repos, open-source packages, SaaS launches, waitlists, and creator tools.
8
+ metadata:
9
+ author: Oleg Koval
10
+ tags:
11
+ - marketing
12
+ - launch
13
+ - growth
14
+ - virality
15
+ - positioning
16
+ - github
17
+
18
+ ---
19
+
20
+ # viral-launch
21
+
22
+ Use this skill when a user wants to launch a project, make a repo marketable, improve discoverability, or build shareable launch assets.
23
+
24
+ This skill is opinionated: virality is not a promise. The goal is to make the project easy to understand, easy to share, and easy to act on.
25
+
26
+ ## Trigger phrases
27
+
28
+ - make this repo launch-ready
29
+ - set this up to go viral
30
+ - prepare a product launch
31
+ - create marketing assets for this project
32
+ - improve the README for launch
33
+ - prepare Product Hunt / Hacker News / X / LinkedIn launch copy
34
+ - set up an open-source repo for growth
35
+
36
+ ## Workflow
37
+
38
+ 1. Inspect the project first:
39
+ - product purpose
40
+ - target user
41
+ - core use case
42
+ - current README and docs
43
+ - install or demo path
44
+ - screenshots, videos, or visual proof
45
+ - analytics or waitlist capture if present
46
+ 2. Define the launch angle in one sentence:
47
+ - who it is for
48
+ - what painful job it solves
49
+ - why now
50
+ - what makes it different
51
+ 3. Make the repo launch-ready:
52
+ - clear README headline and first paragraph
53
+ - demo or quickstart within the first screen
54
+ - installation steps that work from a clean checkout
55
+ - screenshots, GIF, or demo link where possible
56
+ - feature list based on outcomes, not implementation trivia
57
+ - examples for the highest-intent use cases
58
+ - badges only when they add trust
59
+ - license, contributing notes, and issue templates when useful
60
+ 4. Create launch assets:
61
+ - short tagline
62
+ - 1-paragraph announcement
63
+ - 5 social post variants
64
+ - Product Hunt tagline and description when relevant
65
+ - Hacker News title candidates when relevant
66
+ - launch email or DM when relevant
67
+ - creator/influencer outreach list criteria, not spam copy
68
+ 5. Design share loops:
69
+ - a reason users would show the output to someone else
70
+ - a public artifact worth linking
71
+ - a before/after demo
72
+ - a template, benchmark, checklist, or gallery that can travel
73
+ - referral or waitlist loop only if it fits the product
74
+ 6. Define proof and metrics:
75
+ - activation event
76
+ - share event
77
+ - conversion event
78
+ - retention proxy
79
+ - launch-day dashboard or simple tracking checklist
80
+ 7. Keep claims grounded:
81
+ - do not invent traction, logos, benchmarks, testimonials, or user counts
82
+ - mark assumptions explicitly
83
+ - prefer specific proof over hype
84
+ - avoid dark patterns and spam
85
+
86
+ ## Output format
87
+
88
+ When planning, produce:
89
+
90
+ - Launch angle
91
+ - Repo changes
92
+ - Launch assets
93
+ - Share loops
94
+ - Metrics
95
+ - Risks and assumptions
96
+ - Next actions
97
+
98
+ When editing a repository, make the smallest useful set of changes first, then validate by reading the README from a new user's perspective.
99
+
100
+ ## References
101
+
102
+ - `references/launch-checklist.md`
103
+ - `references/external-skills.md`
@@ -0,0 +1,12 @@
1
+ # External skills
2
+
3
+ Skill search found these related launch and marketing skills:
4
+
5
+ - `coreyhaines31/marketingskills@launch-strategy` - broad launch strategy skill, about 37K installs in Skills CLI search; source repo `coreyhaines31/marketingskills` has about 20K GitHub stars.
6
+ - `refoundai/lenny-skills@launch-marketing` - product management and launch marketing skill, under 1K installs in Skills CLI search.
7
+
8
+ Prefer this local `olko:viral-launch` skill when the work is specifically to make a repository launch-ready. Consider installing `coreyhaines31/marketingskills@launch-strategy` when the user wants a broader marketing strategy workflow:
9
+
10
+ ```bash
11
+ npx skills add coreyhaines31/marketingskills@launch-strategy -g -y
12
+ ```
@@ -0,0 +1,42 @@
1
+ # Launch checklist
2
+
3
+ Use this checklist before calling a project launch-ready.
4
+
5
+ ## Repo
6
+
7
+ - README headline says what the project does and for whom.
8
+ - First screen contains a demo, screenshot, or quickstart.
9
+ - Install steps work from a clean checkout.
10
+ - Examples cover the highest-intent use cases.
11
+ - License and contribution expectations are clear.
12
+ - Known limitations are stated without weakening the launch angle.
13
+
14
+ ## Message
15
+
16
+ - One-sentence positioning is specific.
17
+ - The hook names a real problem or desire.
18
+ - Differentiation is concrete.
19
+ - Claims are backed by repo content, screenshots, demos, benchmarks, or examples.
20
+ - Copy avoids fake urgency, fake social proof, and generic hype.
21
+
22
+ ## Distribution
23
+
24
+ - Launch channels are chosen for the actual audience.
25
+ - Each channel gets native copy, not pasted generic copy.
26
+ - Assets include at least one short post, one longer post, and one direct outreach note.
27
+ - Launch timing includes a response window for comments, issues, and feedback.
28
+
29
+ ## Shareability
30
+
31
+ - There is a public artifact people can link to.
32
+ - The demo shows a before/after or clear transformation.
33
+ - Users have a reason to share the output, not only the product.
34
+ - Any referral or waitlist mechanism is tied to user value.
35
+
36
+ ## Metrics
37
+
38
+ - Activation event is defined.
39
+ - Share event is defined.
40
+ - Conversion event is defined.
41
+ - Feedback collection path is defined.
42
+ - Launch review date is defined before launch.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Oleg Koval
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,108 @@
1
+ ---
2
+ name: fill-music-player
3
+ description: Use when a user wants to fill a portable music player (Walkman, iPod, USB drive) with a curated random selection from a music library on a NAS or local directory. Handles format filtering, artist/album diversity balancing, and size targeting.
4
+ license: MIT
5
+ compatibility: Codex, Claude Code, Cursor, and other Agent Skills compatible tools. Requires shell access and the fill-music-player CLI or underlying script in the target environment.
6
+ metadata:
7
+ author: Oleg Koval
8
+ tags:
9
+ - music
10
+ - media
11
+ - curation
12
+ - copy
13
+ - cli
14
+ ---
15
+
16
+ # fill-music-player
17
+
18
+ Curates a DJ-balanced selection of tracks from a source music library and copies them to a portable player, respecting device capacity and supported formats.
19
+
20
+ ## Quick Reference
21
+
22
+ ```bash
23
+ # Dry run first (always recommend this)
24
+ fill-music-player --source /Volumes/music --dest /Volumes/WALKMAN/MUSIC --dry-run
25
+
26
+ # Copy for real
27
+ fill-music-player --source /Volumes/music --dest /Volumes/WALKMAN/MUSIC
28
+
29
+ # Or run the script directly with uv
30
+ uv run fill_music_player.py --source ~/Music --dest /Volumes/USB --dry-run
31
+ ```
32
+
33
+ Run `fill-music-player --help` for all options.
34
+
35
+ ## Key Parameters
36
+
37
+ | Flag | Default | Purpose |
38
+ |------|---------|---------|
39
+ | `--source` / `-s` | required | Source music root (NAS mount, ~/Music, etc.) |
40
+ | `--dest` / `-d` | required | Player destination directory |
41
+ | `--target-gb` | 95% of free space | How many GB to fill |
42
+ | `--formats` | mp3,m4a,wma,aac | Allowed extensions |
43
+ | `--max-per-artist` | 4 | Artist diversity cap |
44
+ | `--max-per-album` | 3 | Album diversity cap |
45
+ | `--skip-dirs` | (none) | Top-level dirs to skip |
46
+ | `--dry-run` | false | Preview without copying |
47
+
48
+ ## Workflow
49
+
50
+ 1. Always do `--dry-run` first
51
+ 2. Review the per-genre breakdown
52
+ 3. Adjust `--skip-dirs`, `--max-file-mb`, or `--max-per-artist` if needed
53
+ 4. Run without `--dry-run` to copy
54
+
55
+ ## Device Formats
56
+
57
+ | Device | Recommended `--formats` |
58
+ |--------|------------------------|
59
+ | Sony Walkman NWZ series | `mp3,m4a,wma` |
60
+ | iPod (classic/nano) | `mp3,m4a,aac` |
61
+ | Generic USB player | `mp3` |
62
+ | Any modern player | `mp3,m4a,wma,aac,ogg,flac` |
63
+
64
+ ## Edge Cases and Troubleshooting
65
+
66
+ | Situation | What happens | Fix |
67
+ |-----------|-------------|-----|
68
+ | NAS disconnects mid-copy | Copy fails for that file, logged as error, continues with next track | Re-run; already-copied files are skipped (`if not dst.exists()`) |
69
+ | Source has only FLAC/lossless | 0 files selected (FLAC not in default formats) | Use `--formats flac` or `--formats mp3,flac` |
70
+ | FAT32 filename too long or illegal chars | Filenames are sanitized: `<>:"/\|?*` replaced with `_`, truncated to 80 chars | Automatic — no action needed |
71
+ | Mixed/broken ID3 tags | Falls back to folder name parsing (`Genre/Artist - Album/track.mp3`) | Works transparently; folder structure is the reliable fallback |
72
+ | Very large files (DJ mixes, radio shows) | Skipped by default (>20 MB) | Adjust with `--max-file-mb 50` to include mixes |
73
+ | Tiny files (jingles, corrupt) | Skipped by default (<300 KB) | Adjust with `--min-file-kb 100` to be more permissive |
74
+ | One artist dominates the library | Capped at 4 tracks per artist, 3 per album | Lower with `--max-per-artist 2` for more variety |
75
+ | Empty genre directories | Silently skipped, no error | Normal behavior |
76
+ | Destination already has files | Existing files are not overwritten or deleted; new tracks added alongside | Clear destination first if you want a fresh set |
77
+ | SMB/NFS mount is slow | Scanning with mutagen tag reading can take 5-10 min for large libraries | Expected; the dry-run output appears once scanning completes |
78
+
79
+ ## Real-World Example
80
+
81
+ Filling a **Sony Walkman NWZ-B183F (4 GB)** from a **Synology DS918+ NAS** with ~9,000 tracks across blues, funk, hip-hop, soul, IDM, dubstep, dub, indie, and post-rock:
82
+
83
+ ```bash
84
+ # Step 1: Preview
85
+ fill-music-player \
86
+ --source /Volumes/music \
87
+ --dest /Volumes/WALKMAN/MUSIC \
88
+ --skip-dirs "jingles,!recordings,!restored,dubrecords" \
89
+ --formats mp3,m4a,wma \
90
+ --dry-run
91
+
92
+ # Output:
93
+ # Found 8914 candidate tracks across 14 genres
94
+ # Funk → 86 tracks (440.8 MB)
95
+ # blues → 38 tracks (316.7 MB)
96
+ # hiphop → 33 tracks (234.7 MB)
97
+ # ...
98
+ # Selected 348 tracks (2473.0 MB)
99
+
100
+ # Step 2: Copy
101
+ fill-music-player \
102
+ --source /Volumes/music \
103
+ --dest /Volumes/WALKMAN/MUSIC \
104
+ --skip-dirs "jingles,!recordings,!restored,dubrecords" \
105
+ --formats mp3,m4a,wma
106
+ ```
107
+
108
+ Result: 348 tracks, 2.4 GB, balanced across 14 genres with max 4 tracks per artist. Artists included Fela Kuti, ZZ Top, Mobb Deep, Gregory Porter, Tinariwen, Chick Corea, Hudson Mohawke, and Funkadelic. Total copy time over SMB: ~12 minutes.
@@ -0,0 +1,10 @@
1
+ {
2
+ "name": "olko:fill-music-player",
3
+ "description": "Fill a portable music player with a curated random selection from a source music library.",
4
+ "skills": [
5
+ {
6
+ "name": "olko:fill-music-player",
7
+ "source": "../../SKILL.md"
8
+ }
9
+ ]
10
+ }
@@ -0,0 +1,3 @@
1
+ # Codex adapter
2
+
3
+ Use the canonical skill directly from `packages/music/fill-music-player/SKILL.md`.
@@ -0,0 +1,6 @@
1
+ {
2
+ "name": "olko:fill-music-player",
3
+ "version": "0.1.0",
4
+ "description": "Fill a portable music player with a curated random selection from a source music library.",
5
+ "skills": "skills/"
6
+ }
@@ -0,0 +1,110 @@
1
+ <!-- Generated by scripts/build-adapters.sh. Do not edit directly. -->
2
+
3
+ ---
4
+ name: fill-music-player
5
+ description: Use when a user wants to fill a portable music player (Walkman, iPod, USB drive) with a curated random selection from a music library on a NAS or local directory. Handles format filtering, artist/album diversity balancing, and size targeting.
6
+ license: MIT
7
+ compatibility: Codex, Claude Code, Cursor, and other Agent Skills compatible tools. Requires shell access and the fill-music-player CLI or underlying script in the target environment.
8
+ metadata:
9
+ author: Oleg Koval
10
+ tags:
11
+ - music
12
+ - media
13
+ - curation
14
+ - copy
15
+ - cli
16
+ ---
17
+
18
+ # fill-music-player
19
+
20
+ Curates a DJ-balanced selection of tracks from a source music library and copies them to a portable player, respecting device capacity and supported formats.
21
+
22
+ ## Quick Reference
23
+
24
+ ```bash
25
+ # Dry run first (always recommend this)
26
+ fill-music-player --source /Volumes/music --dest /Volumes/WALKMAN/MUSIC --dry-run
27
+
28
+ # Copy for real
29
+ fill-music-player --source /Volumes/music --dest /Volumes/WALKMAN/MUSIC
30
+
31
+ # Or run the script directly with uv
32
+ uv run fill_music_player.py --source ~/Music --dest /Volumes/USB --dry-run
33
+ ```
34
+
35
+ Run `fill-music-player --help` for all options.
36
+
37
+ ## Key Parameters
38
+
39
+ | Flag | Default | Purpose |
40
+ |------|---------|---------|
41
+ | `--source` / `-s` | required | Source music root (NAS mount, ~/Music, etc.) |
42
+ | `--dest` / `-d` | required | Player destination directory |
43
+ | `--target-gb` | 95% of free space | How many GB to fill |
44
+ | `--formats` | mp3,m4a,wma,aac | Allowed extensions |
45
+ | `--max-per-artist` | 4 | Artist diversity cap |
46
+ | `--max-per-album` | 3 | Album diversity cap |
47
+ | `--skip-dirs` | (none) | Top-level dirs to skip |
48
+ | `--dry-run` | false | Preview without copying |
49
+
50
+ ## Workflow
51
+
52
+ 1. Always do `--dry-run` first
53
+ 2. Review the per-genre breakdown
54
+ 3. Adjust `--skip-dirs`, `--max-file-mb`, or `--max-per-artist` if needed
55
+ 4. Run without `--dry-run` to copy
56
+
57
+ ## Device Formats
58
+
59
+ | Device | Recommended `--formats` |
60
+ |--------|------------------------|
61
+ | Sony Walkman NWZ series | `mp3,m4a,wma` |
62
+ | iPod (classic/nano) | `mp3,m4a,aac` |
63
+ | Generic USB player | `mp3` |
64
+ | Any modern player | `mp3,m4a,wma,aac,ogg,flac` |
65
+
66
+ ## Edge Cases and Troubleshooting
67
+
68
+ | Situation | What happens | Fix |
69
+ |-----------|-------------|-----|
70
+ | NAS disconnects mid-copy | Copy fails for that file, logged as error, continues with next track | Re-run; already-copied files are skipped (`if not dst.exists()`) |
71
+ | Source has only FLAC/lossless | 0 files selected (FLAC not in default formats) | Use `--formats flac` or `--formats mp3,flac` |
72
+ | FAT32 filename too long or illegal chars | Filenames are sanitized: `<>:"/\|?*` replaced with `_`, truncated to 80 chars | Automatic — no action needed |
73
+ | Mixed/broken ID3 tags | Falls back to folder name parsing (`Genre/Artist - Album/track.mp3`) | Works transparently; folder structure is the reliable fallback |
74
+ | Very large files (DJ mixes, radio shows) | Skipped by default (>20 MB) | Adjust with `--max-file-mb 50` to include mixes |
75
+ | Tiny files (jingles, corrupt) | Skipped by default (<300 KB) | Adjust with `--min-file-kb 100` to be more permissive |
76
+ | One artist dominates the library | Capped at 4 tracks per artist, 3 per album | Lower with `--max-per-artist 2` for more variety |
77
+ | Empty genre directories | Silently skipped, no error | Normal behavior |
78
+ | Destination already has files | Existing files are not overwritten or deleted; new tracks added alongside | Clear destination first if you want a fresh set |
79
+ | SMB/NFS mount is slow | Scanning with mutagen tag reading can take 5-10 min for large libraries | Expected; the dry-run output appears once scanning completes |
80
+
81
+ ## Real-World Example
82
+
83
+ Filling a **Sony Walkman NWZ-B183F (4 GB)** from a **Synology DS918+ NAS** with ~9,000 tracks across blues, funk, hip-hop, soul, IDM, dubstep, dub, indie, and post-rock:
84
+
85
+ ```bash
86
+ # Step 1: Preview
87
+ fill-music-player \
88
+ --source /Volumes/music \
89
+ --dest /Volumes/WALKMAN/MUSIC \
90
+ --skip-dirs "jingles,!recordings,!restored,dubrecords" \
91
+ --formats mp3,m4a,wma \
92
+ --dry-run
93
+
94
+ # Output:
95
+ # Found 8914 candidate tracks across 14 genres
96
+ # Funk → 86 tracks (440.8 MB)
97
+ # blues → 38 tracks (316.7 MB)
98
+ # hiphop → 33 tracks (234.7 MB)
99
+ # ...
100
+ # Selected 348 tracks (2473.0 MB)
101
+
102
+ # Step 2: Copy
103
+ fill-music-player \
104
+ --source /Volumes/music \
105
+ --dest /Volumes/WALKMAN/MUSIC \
106
+ --skip-dirs "jingles,!recordings,!restored,dubrecords" \
107
+ --formats mp3,m4a,wma
108
+ ```
109
+
110
+ Result: 348 tracks, 2.4 GB, balanced across 14 genres with max 4 tracks per artist. Artists included Fela Kuti, ZZ Top, Mobb Deep, Gregory Porter, Tinariwen, Chick Corea, Hudson Mohawke, and Funkadelic. Total copy time over SMB: ~12 minutes.
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 2,
3
+ "name": "gallery",
4
+ "owner": "chufucious",
5
+ "repo": "chu-gallery-plugin",
6
+ "path": "skills/gallery",
7
+ "branch": "main",
8
+ "sha": "24083efe2eb3c38bcf8960276d37fd98fb94ba16",
9
+ "source": "manual"
10
+ }