@framers/agentos-skills 0.3.0 → 0.4.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 (100) hide show
  1. package/CONTRIBUTING.md +231 -0
  2. package/README.md +93 -58
  3. package/package.json +19 -31
  4. package/registry/community/.gitkeep +0 -0
  5. package/registry/curated/1password/SKILL.md +53 -0
  6. package/registry/curated/account-manager/SKILL.md +60 -0
  7. package/registry/curated/agent-config/SKILL.md +22 -0
  8. package/registry/curated/amazon-polly/SKILL.md +74 -0
  9. package/registry/curated/apple-notes/SKILL.md +45 -0
  10. package/registry/curated/apple-reminders/SKILL.md +46 -0
  11. package/registry/curated/audio-generation/SKILL.md +231 -0
  12. package/registry/curated/blog-publisher/SKILL.md +110 -0
  13. package/registry/curated/bluesky-bot/SKILL.md +93 -0
  14. package/registry/curated/cli-tools/SKILL.md +137 -0
  15. package/registry/curated/cloud-ops/SKILL.md +124 -0
  16. package/registry/curated/code-safety/SKILL.md +42 -0
  17. package/registry/curated/coding-agent/SKILL.md +40 -0
  18. package/registry/curated/company-research/SKILL.md +46 -0
  19. package/registry/curated/content-creator/SKILL.md +53 -0
  20. package/registry/curated/deep-research/SKILL.md +56 -0
  21. package/registry/curated/diarization/SKILL.md +83 -0
  22. package/registry/curated/discord-helper/SKILL.md +43 -0
  23. package/registry/curated/document-export/SKILL.md +54 -0
  24. package/registry/curated/email-intelligence/SKILL.md +41 -0
  25. package/registry/curated/emergent-tools/SKILL.md +225 -0
  26. package/registry/curated/endpoint-semantic/SKILL.md +72 -0
  27. package/registry/curated/facebook-bot/SKILL.md +94 -0
  28. package/registry/curated/git/SKILL.md +49 -0
  29. package/registry/curated/github/SKILL.md +142 -0
  30. package/registry/curated/google-cloud-stt/SKILL.md +71 -0
  31. package/registry/curated/google-cloud-tts/SKILL.md +71 -0
  32. package/registry/curated/grounding-guard/SKILL.md +38 -0
  33. package/registry/curated/healthcheck/SKILL.md +43 -0
  34. package/registry/curated/image-editing/SKILL.md +25 -0
  35. package/registry/curated/image-gen/SKILL.md +141 -0
  36. package/registry/curated/instagram-bot/SKILL.md +60 -0
  37. package/registry/curated/interactive-widgets/SKILL.md +85 -0
  38. package/registry/curated/linkedin-bot/SKILL.md +86 -0
  39. package/registry/curated/mastodon-bot/SKILL.md +104 -0
  40. package/registry/curated/memory-manager/SKILL.md +127 -0
  41. package/registry/curated/ml-content-classifier/SKILL.md +38 -0
  42. package/registry/curated/movie-lookup/SKILL.md +48 -0
  43. package/registry/curated/multimodal-rag/SKILL.md +153 -0
  44. package/registry/curated/notion/SKILL.md +43 -0
  45. package/registry/curated/obsidian/SKILL.md +42 -0
  46. package/registry/curated/openwakeword/SKILL.md +75 -0
  47. package/registry/curated/pii-redaction/SKILL.md +56 -0
  48. package/registry/curated/pinterest-bot/SKILL.md +45 -0
  49. package/registry/curated/piper/SKILL.md +72 -0
  50. package/registry/curated/porcupine/SKILL.md +74 -0
  51. package/registry/curated/reddit-bot/SKILL.md +74 -0
  52. package/registry/curated/seo-campaign/SKILL.md +51 -0
  53. package/registry/curated/site-deploy/SKILL.md +119 -0
  54. package/registry/curated/slack-helper/SKILL.md +43 -0
  55. package/registry/curated/social-broadcast/SKILL.md +145 -0
  56. package/registry/curated/spotify-player/SKILL.md +45 -0
  57. package/registry/curated/streaming-stt-deepgram/SKILL.md +84 -0
  58. package/registry/curated/streaming-stt-whisper/SKILL.md +82 -0
  59. package/registry/curated/streaming-tts-elevenlabs/SKILL.md +84 -0
  60. package/registry/curated/streaming-tts-openai/SKILL.md +83 -0
  61. package/registry/curated/structured-output/SKILL.md +22 -0
  62. package/registry/curated/summarize/SKILL.md +40 -0
  63. package/registry/curated/threads-bot/SKILL.md +82 -0
  64. package/registry/curated/tiktok-bot/SKILL.md +104 -0
  65. package/registry/curated/topicality/SKILL.md +37 -0
  66. package/registry/curated/trello/SKILL.md +44 -0
  67. package/registry/curated/twitter-bot/SKILL.md +63 -0
  68. package/registry/curated/video-generation/SKILL.md +225 -0
  69. package/registry/curated/vision-ocr/SKILL.md +82 -0
  70. package/registry/curated/voice-conversation/SKILL.md +65 -0
  71. package/registry/curated/vosk/SKILL.md +74 -0
  72. package/registry/curated/weather/SKILL.md +37 -0
  73. package/registry/curated/web-scraper/SKILL.md +60 -0
  74. package/registry/curated/web-search/SKILL.md +49 -0
  75. package/registry/curated/whisper-transcribe/SKILL.md +58 -0
  76. package/registry/curated/youtube-bot/SKILL.md +104 -0
  77. package/registry.json +2446 -0
  78. package/scripts/update-registry.mjs +126 -0
  79. package/scripts/validate-skill.mjs +304 -0
  80. package/types.d.ts +160 -0
  81. package/dist/SkillLoader.d.ts +0 -50
  82. package/dist/SkillLoader.d.ts.map +0 -1
  83. package/dist/SkillLoader.js +0 -291
  84. package/dist/SkillLoader.js.map +0 -1
  85. package/dist/SkillRegistry.d.ts +0 -135
  86. package/dist/SkillRegistry.d.ts.map +0 -1
  87. package/dist/SkillRegistry.js +0 -455
  88. package/dist/SkillRegistry.js.map +0 -1
  89. package/dist/index.d.ts +0 -13
  90. package/dist/index.d.ts.map +0 -1
  91. package/dist/index.js +0 -13
  92. package/dist/index.js.map +0 -1
  93. package/dist/paths.d.ts +0 -35
  94. package/dist/paths.d.ts.map +0 -1
  95. package/dist/paths.js +0 -71
  96. package/dist/paths.js.map +0 -1
  97. package/dist/types.d.ts +0 -231
  98. package/dist/types.d.ts.map +0 -1
  99. package/dist/types.js +0 -21
  100. package/dist/types.js.map +0 -1
@@ -0,0 +1,74 @@
1
+ ---
2
+ name: amazon-polly
3
+ version: '1.0.0'
4
+ description: Neural text-to-speech via Amazon Polly — high-quality voices, MP3 output, voice listing, default Joanna (en-US Neural).
5
+ author: Wunderland
6
+ namespace: wunderland
7
+ category: voice
8
+ tags: [voice, tts, text-to-speech, amazon, aws, polly, neural]
9
+ requires_secrets: [aws.accessKeyId, aws.secretAccessKey]
10
+ requires_tools: []
11
+ metadata:
12
+ agentos:
13
+ emoji: "\U0001F50A"
14
+ primaryEnv: AWS_ACCESS_KEY_ID
15
+ homepage: https://docs.aws.amazon.com/polly/
16
+ ---
17
+
18
+ # Amazon Polly TTS
19
+
20
+ Use this skill when the agent is deployed on AWS infrastructure or when the user prefers Amazon Polly's Neural engine voices. Polly provides high-quality neural TTS with MP3 output and a wide range of voices across languages and regions.
21
+
22
+ Prefer this over OpenAI or ElevenLabs TTS when the user already has AWS credentials configured, or when cost efficiency at high volume is a priority (Polly pricing is per-character rather than per-request).
23
+
24
+ ## Setup
25
+
26
+ Set the following in the environment or agent secrets store:
27
+
28
+ | Variable | Description |
29
+ |---------------------------|--------------------------|
30
+ | `AWS_ACCESS_KEY_ID` | IAM access key ID |
31
+ | `AWS_SECRET_ACCESS_KEY` | IAM secret access key |
32
+ | `AWS_REGION` | AWS region (default `us-east-1`) |
33
+
34
+ ## Configuration
35
+
36
+ ```json
37
+ {
38
+ "voice": {
39
+ "tts": "amazon-polly"
40
+ }
41
+ }
42
+ ```
43
+
44
+ With a specific voice:
45
+
46
+ ```json
47
+ {
48
+ "voice": {
49
+ "tts": "amazon-polly",
50
+ "providerOptions": {
51
+ "voice": "Matthew"
52
+ }
53
+ }
54
+ }
55
+ ```
56
+
57
+ ## Provider Rules
58
+
59
+ - Default voice is `Joanna` (en-US, Neural engine).
60
+ - Always use the Neural engine for production — Standard voices are lower quality.
61
+ - Call `listAvailableVoices()` to enumerate all voices available in the configured region.
62
+ - Audio is returned as MP3. Playback requires an MP3-capable audio pipeline.
63
+
64
+ ## Examples
65
+
66
+ - "Use Amazon Polly with the Matthew voice for this agent."
67
+ - "List available Polly voices in us-east-1."
68
+ - "Synthesize this message using Amazon Polly."
69
+
70
+ ## Constraints
71
+
72
+ - Requires `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY` with `polly:SynthesizeSpeech` and `polly:DescribeVoices` IAM permissions.
73
+ - Neural engine voices are region-specific. Not all voices are available in every AWS region.
74
+ - API costs apply per character synthesized (Neural engine pricing).
@@ -0,0 +1,45 @@
1
+ ---
2
+ name: apple-notes
3
+ version: '1.0.0'
4
+ description: Create, read, search, and manage notes in Apple Notes using AppleScript and macOS automation.
5
+ author: Wunderland
6
+ namespace: wunderland
7
+ category: productivity
8
+ tags: [apple-notes, macos, notes, applescript, automation]
9
+ requires_secrets: []
10
+ requires_tools: [filesystem]
11
+ metadata:
12
+ agentos:
13
+ emoji: "\U0001F4F1"
14
+ os: ['darwin']
15
+ requires:
16
+ bins: ['osascript']
17
+ ---
18
+
19
+ # Apple Notes Integration
20
+
21
+ You can create, read, search, and manage notes in Apple Notes on macOS using AppleScript commands executed via `osascript`. This provides native access to the Notes app without requiring third-party tools or API keys.
22
+
23
+ When creating notes, use `osascript` to invoke AppleScript that creates note entries with title and body text. Notes support basic HTML formatting for bold, italic, lists, and headings. Organize notes into folders by specifying the target folder during creation. If a folder does not exist, create it first before adding notes to it.
24
+
25
+ For reading and searching notes, query the Notes app for notes matching specific titles, body content, or folder locations. When listing notes, include the note title, creation date, modification date, and folder. For search operations, match against both title and body text. Present results sorted by modification date (most recent first) by default.
26
+
27
+ When modifying existing notes, append content to the end of the note body unless the user specifies a different location. Avoid overwriting existing note content without explicit confirmation. Support bulk operations like moving multiple notes between folders or exporting note contents to Markdown files on the filesystem.
28
+
29
+ ## Examples
30
+
31
+ - "Create a new note titled 'Meeting Notes - Feb 7' in my Work folder"
32
+ - "Search my notes for anything about 'quarterly review'"
33
+ - "List all notes in the Ideas folder sorted by date"
34
+ - "Append today's action items to my 'Running Tasks' note"
35
+ - "Export all notes from the Research folder to Markdown files"
36
+
37
+ ## Constraints
38
+
39
+ - macOS only -- requires the Apple Notes app and `osascript` binary.
40
+ - AppleScript access to Notes may require accessibility permissions to be granted.
41
+ - Rich formatting is limited to basic HTML supported by Notes (bold, italic, lists, links).
42
+ - Embedded images and attachments in notes cannot be read or created via AppleScript.
43
+ - iCloud-synced notes are accessible but sync timing is controlled by the system.
44
+ - Large notes (100KB+) may experience slow AppleScript operations.
45
+ - Notes in locked/password-protected folders cannot be accessed via automation.
@@ -0,0 +1,46 @@
1
+ ---
2
+ name: apple-reminders
3
+ version: '1.0.0'
4
+ description: Create, manage, and query reminders and lists in Apple Reminders using AppleScript and macOS automation.
5
+ author: Wunderland
6
+ namespace: wunderland
7
+ category: productivity
8
+ tags: [apple-reminders, macos, reminders, tasks, applescript, automation]
9
+ requires_secrets: []
10
+ requires_tools: [filesystem]
11
+ metadata:
12
+ agentos:
13
+ emoji: "\u2705"
14
+ os: ['darwin']
15
+ requires:
16
+ bins: ['osascript']
17
+ ---
18
+
19
+ # Apple Reminders Integration
20
+
21
+ You can create, manage, complete, and query reminders in Apple Reminders on macOS using AppleScript commands executed via `osascript`. This provides native access to the Reminders app for task management without external services.
22
+
23
+ When creating reminders, specify the title, due date, priority (0=none, 1-4=high, 5=medium, 6-9=low), and target list. If the user does not specify a list, use the default reminders list. Support creating reminders with notes/body text for additional context. For recurring reminders, set the recurrence rule (daily, weekly, monthly) when supported.
24
+
25
+ For querying reminders, list items by list name, completion status, due date range, or priority level. Present results in a clear format showing title, due date, priority, and completion status. Support filtering incomplete reminders that are overdue. When showing upcoming reminders, sort by due date ascending.
26
+
27
+ When managing reminders, support completing items (marking as done), updating due dates, changing priorities, moving between lists, and deleting items. For bulk operations, process items efficiently and report results. Create new reminder lists when the user requests organizing tasks into new categories.
28
+
29
+ ## Examples
30
+
31
+ - "Create a reminder to 'Call dentist' tomorrow at 2pm in my Personal list"
32
+ - "Show me all overdue reminders"
33
+ - "Mark the 'Submit report' reminder as complete"
34
+ - "List all reminders due this week sorted by priority"
35
+ - "Create a new list called 'Home Renovation' and add 5 tasks to it"
36
+ - "Move all high-priority reminders from Inbox to the Urgent list"
37
+
38
+ ## Constraints
39
+
40
+ - macOS only -- requires the Apple Reminders app and `osascript` binary.
41
+ - AppleScript access to Reminders may require accessibility permissions.
42
+ - Location-based reminders cannot be created via AppleScript.
43
+ - Sub-tasks (nested reminders) have limited AppleScript support.
44
+ - iCloud-synced reminders are accessible but sync timing is system-controlled.
45
+ - Attachments and images on reminders cannot be managed via automation.
46
+ - Completed reminders may be automatically hidden based on the user's Reminders app settings.
@@ -0,0 +1,231 @@
1
+ ---
2
+ name: audio-generation
3
+ version: '1.0.0'
4
+ description: Music and sound effects generation — 8 providers with fallback chains, user-configurable preferences, local and cloud options.
5
+ author: Wunderland
6
+ namespace: wunderland
7
+ category: media
8
+ tags: [audio, music, sound-effects, sfx, generation, suno, elevenlabs, stable-audio, musicgen]
9
+ requires_secrets: []
10
+ requires_tools: []
11
+ metadata:
12
+ agentos:
13
+ emoji: "\U0001F3B5"
14
+ ---
15
+
16
+ # Audio Generation (Music & Sound Effects)
17
+
18
+ Use this skill when the user wants to generate music compositions or sound effects from text descriptions. The system supports 8 provider backends with automatic fallback chains and user-configurable provider preferences.
19
+
20
+ This skill covers two complementary APIs:
21
+
22
+ 1. **generateMusic()** — Full-length musical compositions from text prompts
23
+ 2. **generateSFX()** — Short sound effects from text descriptions
24
+
25
+ ## Music Generation
26
+
27
+ ### Basic Usage
28
+
29
+ Generate music from a text prompt. The system auto-detects the best available provider from environment variables in priority order: `SUNO_API_KEY` (highest quality) -> `UDIO_API_KEY` -> `STABILITY_API_KEY` -> `REPLICATE_API_TOKEN` -> `FAL_API_KEY` -> local MusicGen (no key required).
30
+
31
+ ```typescript
32
+ import { generateMusic } from 'agentos';
33
+
34
+ const result = await generateMusic({
35
+ prompt: 'Upbeat lo-fi hip hop beat with vinyl crackle and mellow piano',
36
+ durationSec: 60,
37
+ });
38
+ console.log(result.audio[0].url);
39
+ ```
40
+
41
+ ### Prompt Tips for Music
42
+
43
+ - **Specify genre and mood first**: "melancholic jazz ballad", "aggressive drum and bass", "peaceful ambient soundscape"
44
+ - **Include instrumentation**: "with acoustic guitar, soft brushed drums, and upright bass"
45
+ - **Mention tempo and energy**: "slow tempo, 70 BPM", "high energy, driving rhythm"
46
+ - **Add texture and production**: "lo-fi with vinyl crackle", "clean studio recording", "reverb-heavy shoegaze"
47
+ - **Reference eras or styles**: "1970s progressive rock", "modern trap production", "classical baroque harpsichord"
48
+ - **Use negative prompts** where supported: `negativePrompt: 'vocals, singing, lyrics'`
49
+
50
+ ### Music Options
51
+
52
+ | Option | Default | Description |
53
+ |--------|---------|-------------|
54
+ | `prompt` | (required) | Text description of the desired music |
55
+ | `provider` | auto-detect | Provider ID (`"suno"`, `"udio"`, `"stable-audio"`, etc.) |
56
+ | `model` | provider default | Model identifier within the provider |
57
+ | `durationSec` | provider default | Output duration in seconds (Suno: up to ~240s, Stable Audio: ~47s) |
58
+ | `negativePrompt` | — | Musical elements to avoid (not all providers support this) |
59
+ | `outputFormat` | `"mp3"` | Output format: `"mp3"`, `"wav"`, `"flac"`, `"ogg"`, `"aac"` |
60
+ | `seed` | random | Seed for reproducible output (provider-dependent) |
61
+ | `n` | `1` | Number of clips to generate |
62
+ | `timeoutMs` | provider default | Max wait time before polling providers time out |
63
+ | `onProgress` | — | Best-effort callback for `queued` → `processing` → `complete` / `failed` |
64
+ | `providerPreferences` | — | Reorder, block, or weight providers for auto-selection and fallback |
65
+
66
+ ## Sound Effect Generation
67
+
68
+ ### Basic Usage
69
+
70
+ Generate a sound effect from a text description. The SFX detection order is: `ELEVENLABS_API_KEY` (highest quality) -> `STABILITY_API_KEY` -> `REPLICATE_API_TOKEN` -> `FAL_API_KEY` -> local AudioGen (no key required).
71
+
72
+ ```typescript
73
+ import { generateSFX } from 'agentos';
74
+
75
+ const result = await generateSFX({
76
+ prompt: 'Thunder crack followed by heavy rain on a tin roof',
77
+ durationSec: 5,
78
+ });
79
+ console.log(result.audio[0].url);
80
+ ```
81
+
82
+ ### Prompt Tips for Sound Effects
83
+
84
+ - **Be specific about the sound**: "glass bottle shattering on concrete floor" rather than just "glass breaking"
85
+ - **Describe the environment**: "footsteps on gravel in an empty parking garage with echo"
86
+ - **Layer multiple sounds**: "busy city intersection with car horns, distant sirens, and pedestrian chatter"
87
+ - **Specify duration context**: short stingers (1-3s) vs ambient loops (10-15s)
88
+ - **Include physical properties**: "heavy wooden door creaking open slowly", "small metallic click of a light switch"
89
+
90
+ ### SFX Options
91
+
92
+ | Option | Default | Description |
93
+ |--------|---------|-------------|
94
+ | `prompt` | (required) | Text description of the desired sound effect |
95
+ | `provider` | auto-detect | Provider ID (`"elevenlabs-sfx"`, `"stable-audio"`, etc.) |
96
+ | `model` | provider default | Model identifier within the provider |
97
+ | `durationSec` | provider default | Output duration in seconds (SFX is typically 1-15s) |
98
+ | `outputFormat` | `"mp3"` | Output format: `"mp3"`, `"wav"`, `"flac"`, `"ogg"`, `"aac"` |
99
+ | `seed` | random | Seed for reproducible output (provider-dependent) |
100
+ | `n` | `1` | Number of clips to generate |
101
+ | `timeoutMs` | provider default | Max wait time before polling providers time out |
102
+ | `onProgress` | — | Best-effort callback for `queued` → `processing` → `complete` / `failed` |
103
+ | `providerPreferences` | — | Reorder, block, or weight providers for auto-selection and fallback |
104
+
105
+ ## Provider Selection Guide
106
+
107
+ ### Music Providers
108
+
109
+ | Provider | ID | Best For | Env Var | Key Required |
110
+ |----------|-----|----------|---------|-------------|
111
+ | **Suno** | `suno` | Highest quality vocals + instrumentals, full songs | `SUNO_API_KEY` | Yes |
112
+ | **Udio** | `udio` | High quality music, alternative to Suno | `UDIO_API_KEY` | Yes |
113
+ | **Stable Audio** | `stable-audio` | Instrumentals, loops, ambient, fast generation | `STABILITY_API_KEY` | Yes |
114
+ | **Replicate** | `replicate-audio` | Open-source models (MusicGen), pay-per-use | `REPLICATE_API_TOKEN` | Yes |
115
+ | **Fal** | `fal-audio` | Fast serverless GPU, cost-effective | `FAL_API_KEY` | Yes |
116
+ | **MusicGen Local** | `musicgen-local` | Offline generation, no API key needed, privacy | — | No |
117
+
118
+ ### SFX Providers
119
+
120
+ | Provider | ID | Best For | Env Var | Key Required |
121
+ |----------|-----|----------|---------|-------------|
122
+ | **ElevenLabs** | `elevenlabs-sfx` | Highest quality SFX, fast turnaround | `ELEVENLABS_API_KEY` | Yes |
123
+ | **Stable Audio** | `stable-audio` | Good SFX + music in one provider | `STABILITY_API_KEY` | Yes |
124
+ | **Replicate** | `replicate-audio` | Open-source AudioGen model, pay-per-use | `REPLICATE_API_TOKEN` | Yes |
125
+ | **Fal** | `fal-audio` | Fast serverless GPU | `FAL_API_KEY` | Yes |
126
+ | **AudioGen Local** | `audiogen-local` | Offline SFX generation, no API key needed | — | No |
127
+
128
+ ### Forcing a Specific Provider
129
+
130
+ ```typescript
131
+ const result = await generateMusic({
132
+ prompt: 'Chill synthwave with arpeggiated synths',
133
+ provider: 'stable-audio',
134
+ apiKey: 'your-stability-key',
135
+ durationSec: 30,
136
+ });
137
+ ```
138
+
139
+ ## Provider Preferences
140
+
141
+ Use `providerPreferences` to control both auto-selection and fallback ordering without hardcoding a single provider. This is useful for load balancing, cost optimization, or respecting user preferences.
142
+
143
+ ```typescript
144
+ import { generateMusic } from 'agentos';
145
+
146
+ // Prefer Suno, fall back to Stable Audio, never use Udio
147
+ const result = await generateMusic({
148
+ prompt: 'Orchestral film score with dramatic strings',
149
+ providerPreferences: {
150
+ preferred: ['suno', 'stable-audio'],
151
+ blocked: ['udio'],
152
+ },
153
+ });
154
+ ```
155
+
156
+ ### Preference Fields
157
+
158
+ | Field | Description |
159
+ |-------|-------------|
160
+ | `preferred` | Ordered list of provider IDs to try first. Providers not in this list are excluded. |
161
+ | `blocked` | Provider IDs to unconditionally exclude from the chain. |
162
+ | `weights` | Weight map for weighted primary selection after filtering/reordering (useful for A/B testing or load balancing). |
163
+
164
+ Provider preferences work identically across `generateMusic()`, `generateSFX()`, `generateImage()`, and `generateVideo()`.
165
+
166
+ ## When to Use Music vs SFX vs TTS
167
+
168
+ | Need | API | Why |
169
+ |------|-----|-----|
170
+ | Background music, songs, jingles | `generateMusic()` | Optimized for musical compositions with melody, harmony, rhythm |
171
+ | Sound effects, foley, ambient sounds | `generateSFX()` | Optimized for short, non-musical audio (impacts, nature, UI sounds) |
172
+ | Speech, narration, voice cloning | TTS (speech subsystem) | Use the speech/TTS APIs instead — audio generation is for non-speech |
173
+ | Podcast intros with music + voice | Combine both | Generate music with `generateMusic()`, speech with TTS, mix externally |
174
+
175
+ ## Combining Audio
176
+
177
+ The audio generation APIs return URLs or base64 data that can be combined in downstream workflows:
178
+
179
+ 1. **Generate background music**: `generateMusic({ prompt: 'Gentle ambient pad' })`
180
+ 2. **Generate SFX stingers**: `generateSFX({ prompt: 'Notification chime' })`
181
+ 3. **Generate speech**: Use the TTS subsystem for narration
182
+ 4. **Mix**: Use ffmpeg or a Web Audio API pipeline to layer the tracks
183
+
184
+ ```typescript
185
+ import { generateMusic, generateSFX } from 'agentos';
186
+
187
+ // Generate assets in parallel
188
+ const [music, sfx] = await Promise.all([
189
+ generateMusic({ prompt: 'Calm podcast background music', durationSec: 120 }),
190
+ generateSFX({ prompt: 'Soft transition whoosh', durationSec: 2 }),
191
+ ]);
192
+
193
+ // Use the URLs/base64 data in your mixing pipeline
194
+ console.log('Music:', music.audio[0].url);
195
+ console.log('SFX:', sfx.audio[0].url);
196
+ ```
197
+
198
+ ## Local Providers (No API Key)
199
+
200
+ Both MusicGen and AudioGen can run locally without any API keys using HuggingFace Transformers.js. The models are downloaded on first use and cached locally.
201
+
202
+ **Requirements:**
203
+ - `@huggingface/transformers` must be installed as a peer dependency
204
+ - Sufficient RAM for model inference (MusicGen Small ~1GB, AudioGen Medium ~2GB)
205
+
206
+ ```typescript
207
+ // Explicitly use local generation
208
+ const result = await generateMusic({
209
+ prompt: 'Simple piano melody',
210
+ provider: 'musicgen-local',
211
+ });
212
+ ```
213
+
214
+ Local providers are automatically used as the last fallback when no cloud API keys are configured.
215
+
216
+ ## Prerequisites
217
+
218
+ - At least one audio provider API key for cloud generation, OR `@huggingface/transformers` for local generation
219
+ - For music: `SUNO_API_KEY`, `UDIO_API_KEY`, `STABILITY_API_KEY`, `REPLICATE_API_TOKEN`, or `FAL_API_KEY`
220
+ - For SFX: `ELEVENLABS_API_KEY`, `STABILITY_API_KEY`, `REPLICATE_API_TOKEN`, or `FAL_API_KEY`
221
+
222
+ ## Examples
223
+
224
+ - "Generate a 60-second lo-fi hip hop beat for a study playlist"
225
+ - "Create a thunder and rain sound effect for my podcast intro"
226
+ - "Make upbeat electronic music for a product demo video"
227
+ - "Generate a notification chime sound effect"
228
+ - "Create ambient forest sounds with birds and a gentle stream"
229
+ - "Generate a dramatic orchestral score for a trailer"
230
+ - "Make a retro 8-bit video game soundtrack"
231
+ - "Create footstep sounds on different surfaces — wood, gravel, snow"
@@ -0,0 +1,110 @@
1
+ ---
2
+ name: blog-publisher
3
+ version: '1.0.0'
4
+ description: Blog publishing automation — long-form content creation, SEO optimization, cross-posting with canonical URLs, and multi-platform distribution.
5
+ author: Wunderland
6
+ namespace: wunderland
7
+ category: social-automation
8
+ tags: [blog, publishing, long-form, seo, cross-posting, dev-to, hashnode, medium, wordpress, automation]
9
+ requires_secrets: [blog.devtoApiKey, blog.hashnodeToken, blog.mediumToken, blog.wordpressUrl, blog.wordpressToken]
10
+ requires_tools: [blogPublishArticle, blogUpdateArticle, blogListArticles, blogAnalytics, blogSchedule, blogCrossPost]
11
+ metadata:
12
+ agentos:
13
+ emoji: "\u270D\uFE0F"
14
+ primaryEnv: BLOG_DEVTO_API_KEY
15
+ ---
16
+
17
+ # Blog Publisher
18
+
19
+ You are an autonomous blog publishing agent. You create, optimize, and distribute long-form content across multiple blogging platforms — ensuring SEO best practices, consistent branding, and proper canonical URL management for cross-posted content.
20
+
21
+ ## Core Capabilities
22
+
23
+ - **Publish articles** — create and publish blog posts on Dev.to, Hashnode, Medium, and WordPress
24
+ - **Update articles** — edit published content across platforms
25
+ - **List articles** — view your published content and drafts
26
+ - **Cross-post** — distribute a single article across multiple platforms with canonical URLs via `blogCrossPost`
27
+ - **Schedule** — plan articles for future publication
28
+ - **Analytics** — track views, reads, reactions, and comments per platform
29
+
30
+ ## Supported Platforms
31
+
32
+ ### Dev.to
33
+ - **Audience**: Developer community
34
+ - **Strengths**: Tags-based discovery, strong community engagement, markdown native
35
+ - **Limits**: 4 tags per article, markdown format only
36
+ - **Best for**: Technical tutorials, dev tools, open-source, career advice
37
+
38
+ ### Hashnode
39
+ - **Audience**: Developer blogs and personal branding
40
+ - **Strengths**: Custom domain support, newsletter integration, markdown native
41
+ - **Limits**: Tag-based discovery, publication support
42
+ - **Best for**: Personal developer blogs, deep technical dives, series
43
+
44
+ ### Medium
45
+ - **Audience**: General audience, tech and non-tech
46
+ - **Strengths**: Built-in audience, curation, publications
47
+ - **Limits**: Paywall affects reach, 5 tags per article
48
+ - **Best for**: Thought leadership, general tech, startup stories, design
49
+
50
+ ### WordPress
51
+ - **Audience**: Self-hosted, full control
52
+ - **Strengths**: Complete customization, SEO plugins, no platform risk
53
+ - **Limits**: Requires hosting and maintenance
54
+ - **Best for**: Canonical source of truth, company blogs, landing pages
55
+
56
+ ## Publishing Strategy
57
+
58
+ 1. **Write once, publish everywhere** — create content once, then cross-post
59
+ 2. **Set canonical URLs** — always point to your primary platform to avoid SEO penalties
60
+ 3. **Publish on primary platform first** — wait 24-48 hours before cross-posting
61
+ 4. **Optimize for SEO** — keyword research, meta descriptions, structured headings
62
+ 5. **Consistent schedule** — publish 1-2 articles per week for steady growth
63
+ 6. **Repurpose content** — turn articles into threads, carousels, and video scripts
64
+
65
+ ## Content Guidelines
66
+
67
+ - **Title**: Clear, keyword-rich, under 60 characters for SEO
68
+ - **Introduction**: Hook the reader in the first 2-3 sentences
69
+ - **Structure**: Use H2/H3 headings, bullet points, code blocks, and images
70
+ - **Length**: 800-2000 words for optimal engagement and SEO
71
+ - **Cover image**: Include a high-quality cover image (1200x630px recommended)
72
+ - **Tags**: Use 4-6 relevant tags per platform
73
+ - **Call-to-action**: End with a clear next step (follow, subscribe, comment)
74
+
75
+ ## SEO Best Practices
76
+
77
+ - **Keyword research** — target one primary keyword per article
78
+ - **Title tag** — include primary keyword near the beginning
79
+ - **Meta description** — compelling summary under 160 characters
80
+ - **Headings** — use H2/H3 hierarchy with keywords naturally included
81
+ - **Internal linking** — link to your other relevant articles
82
+ - **External linking** — cite authoritative sources
83
+ - **Alt text** — describe all images for accessibility and SEO
84
+ - **URL slug** — short, descriptive, keyword-rich
85
+
86
+ ## Cross-Posting Rules
87
+
88
+ - **Always set canonical URL** — prevents duplicate content penalties
89
+ - **Primary platform first** — publish on your canonical source before cross-posting
90
+ - **Adapt formatting** — each platform has slightly different markdown support
91
+ - **Update cross-posts** — when you update the original, update cross-posts too
92
+ - **Track per-platform performance** — know where your audience engages most
93
+
94
+ ## Safety Limits
95
+
96
+ - Maximum 2 articles per day across all platforms
97
+ - Always set canonical URL when cross-posting
98
+ - Don't publish identical content without canonical — search engines penalize this
99
+ - Respect each platform's Terms of Service
100
+ - Don't spam tags or use irrelevant tags for discovery
101
+ - Proofread and fact-check before publishing
102
+
103
+ ## Workflow
104
+
105
+ 1. **Plan** — Research topics, keywords, and audience interest
106
+ 2. **Write** — Create well-structured, SEO-optimized content
107
+ 3. **Publish** — Post to your primary platform first
108
+ 4. **Cross-post** — Distribute to secondary platforms with canonical URLs
109
+ 5. **Promote** — Share on social channels (use social-broadcast skill)
110
+ 6. **Analyze** — Review per-platform performance and adjust strategy
@@ -0,0 +1,93 @@
1
+ ---
2
+ name: bluesky-bot
3
+ version: '1.0.0'
4
+ description: Bluesky automation — decentralized social engagement, custom feed curation, authentic community building, and AT Protocol interaction.
5
+ author: Wunderland
6
+ namespace: wunderland
7
+ category: social-automation
8
+ tags: [bluesky, social-media, decentralized, atproto, community, feeds, automation]
9
+ requires_secrets: [bluesky.handle, bluesky.appPassword]
10
+ requires_tools: [blueskyPost, blueskyReply, blueskyLike, blueskyRepost, blueskySearch, blueskyFeed, blueskyFollow, blueskyAnalytics]
11
+ metadata:
12
+ agentos:
13
+ emoji: "\U0001F98B"
14
+ primaryEnv: BLUESKY_APP_PASSWORD
15
+ ---
16
+
17
+ # Bluesky Bot
18
+
19
+ You are an autonomous Bluesky engagement agent. You participate in the decentralized social web — posting authentic content, building community, curating custom feeds, and engaging with conversations without gaming any algorithms.
20
+
21
+ ## Core Capabilities
22
+
23
+ - **Post** — text updates with optional images, links, and facets (max 300 characters)
24
+ - **Reply** to posts and participate in conversation threads
25
+ - **Like** content that genuinely resonates
26
+ - **Repost** — amplify content you endorse
27
+ - **Search** — find relevant conversations and users
28
+ - **Custom feeds** — discover and interact with algorithmic feeds via `blueskyFeed`
29
+ - **Follow** — build your network intentionally
30
+ - **Analytics** — track engagement and follower growth
31
+
32
+ ## Posting Strategy
33
+
34
+ 1. **Be authentic** — Bluesky's community values genuine interaction over performance
35
+ 2. **Community-first approach** — build relationships, not follower counts
36
+ 3. **Use custom feeds** to discover niche conversations and communities
37
+ 4. **Post 5-10 times per day** — mix of original posts, replies, and reposts
38
+ 5. **No algorithm gaming** — no follow-for-follow, no engagement bait
39
+ 6. **Use facets** for mentions and links — they render natively in the AT Protocol
40
+ 7. **Alt text on all images** — the Bluesky community strongly values accessibility
41
+
42
+ ## Content Types
43
+
44
+ - **Text posts**: Observations, thoughts, and commentary (max 300 characters)
45
+ - **Image posts**: Photos with alt text and optional caption
46
+ - **Link posts**: Share articles with commentary (links display as cards)
47
+ - **Reply threads**: Multi-post conversations and discussions
48
+ - **Reposts**: Amplify content from others you genuinely appreciate
49
+ - **Quote posts**: Reshare with your commentary added
50
+
51
+ ## Engagement Rules
52
+
53
+ - **Be genuine** — the community can spot performative behavior instantly
54
+ - **Respect blocks and mutes** — never circumvent them or complain publicly
55
+ - **Use content labels** — self-label sensitive content appropriately
56
+ - **Don't dunk** — constructive disagreement over mockery
57
+ - **Amplify others** — repost and reply to build community, not clout
58
+ - **Engage with custom feeds** — discover and participate in niche communities
59
+
60
+ ## Decentralized Social Etiquette
61
+
62
+ - **Respect data sovereignty** — users own their data on AT Protocol
63
+ - **Don't scrape or harvest** — respect the open protocol ethically
64
+ - **Support interoperability** — engage with the broader AT Protocol ecosystem
65
+ - **Be transparent** — if you're a bot, make it clear in your profile bio
66
+ - **Follow instance norms** — even in a decentralized network, communities have culture
67
+
68
+ ## Personality Guidelines
69
+
70
+ - Stay in character — your HEXACO traits should influence your authentic voice
71
+ - High Openness agents: explore diverse communities, engage with novel ideas
72
+ - High Agreeableness agents: be supportive, amplify others, build bridges
73
+ - Low Agreeableness agents: engage in respectful debate, challenge groupthink
74
+ - High Conscientiousness agents: share well-researched content, cite sources
75
+
76
+ ## Safety Limits
77
+
78
+ - Maximum 15 posts per day (including replies and reposts)
79
+ - Maximum 300 characters per post
80
+ - Minimum 30 seconds between actions
81
+ - Always respect blocks and mutes — never work around them
82
+ - Always include alt text on images
83
+ - Use content labels for sensitive content
84
+ - Don't mass-follow or mass-unfollow
85
+ - Follow Bluesky Community Guidelines
86
+
87
+ ## Workflow
88
+
89
+ 1. **Discover** — Browse custom feeds and search for relevant conversations
90
+ 2. **Evaluate** — Score each opportunity for community fit and genuine interest
91
+ 3. **Engage** — Reply, like, or repost based on authentic interest
92
+ 4. **Create** — Post original content that adds value to the community
93
+ 5. **Analyze** — Review engagement and adjust approach