@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.
- package/CONTRIBUTING.md +231 -0
- package/README.md +93 -58
- package/package.json +19 -31
- package/registry/community/.gitkeep +0 -0
- package/registry/curated/1password/SKILL.md +53 -0
- package/registry/curated/account-manager/SKILL.md +60 -0
- package/registry/curated/agent-config/SKILL.md +22 -0
- package/registry/curated/amazon-polly/SKILL.md +74 -0
- package/registry/curated/apple-notes/SKILL.md +45 -0
- package/registry/curated/apple-reminders/SKILL.md +46 -0
- package/registry/curated/audio-generation/SKILL.md +231 -0
- package/registry/curated/blog-publisher/SKILL.md +110 -0
- package/registry/curated/bluesky-bot/SKILL.md +93 -0
- package/registry/curated/cli-tools/SKILL.md +137 -0
- package/registry/curated/cloud-ops/SKILL.md +124 -0
- package/registry/curated/code-safety/SKILL.md +42 -0
- package/registry/curated/coding-agent/SKILL.md +40 -0
- package/registry/curated/company-research/SKILL.md +46 -0
- package/registry/curated/content-creator/SKILL.md +53 -0
- package/registry/curated/deep-research/SKILL.md +56 -0
- package/registry/curated/diarization/SKILL.md +83 -0
- package/registry/curated/discord-helper/SKILL.md +43 -0
- package/registry/curated/document-export/SKILL.md +54 -0
- package/registry/curated/email-intelligence/SKILL.md +41 -0
- package/registry/curated/emergent-tools/SKILL.md +225 -0
- package/registry/curated/endpoint-semantic/SKILL.md +72 -0
- package/registry/curated/facebook-bot/SKILL.md +94 -0
- package/registry/curated/git/SKILL.md +49 -0
- package/registry/curated/github/SKILL.md +142 -0
- package/registry/curated/google-cloud-stt/SKILL.md +71 -0
- package/registry/curated/google-cloud-tts/SKILL.md +71 -0
- package/registry/curated/grounding-guard/SKILL.md +38 -0
- package/registry/curated/healthcheck/SKILL.md +43 -0
- package/registry/curated/image-editing/SKILL.md +25 -0
- package/registry/curated/image-gen/SKILL.md +141 -0
- package/registry/curated/instagram-bot/SKILL.md +60 -0
- package/registry/curated/interactive-widgets/SKILL.md +85 -0
- package/registry/curated/linkedin-bot/SKILL.md +86 -0
- package/registry/curated/mastodon-bot/SKILL.md +104 -0
- package/registry/curated/memory-manager/SKILL.md +127 -0
- package/registry/curated/ml-content-classifier/SKILL.md +38 -0
- package/registry/curated/movie-lookup/SKILL.md +48 -0
- package/registry/curated/multimodal-rag/SKILL.md +153 -0
- package/registry/curated/notion/SKILL.md +43 -0
- package/registry/curated/obsidian/SKILL.md +42 -0
- package/registry/curated/openwakeword/SKILL.md +75 -0
- package/registry/curated/pii-redaction/SKILL.md +56 -0
- package/registry/curated/pinterest-bot/SKILL.md +45 -0
- package/registry/curated/piper/SKILL.md +72 -0
- package/registry/curated/porcupine/SKILL.md +74 -0
- package/registry/curated/reddit-bot/SKILL.md +74 -0
- package/registry/curated/seo-campaign/SKILL.md +51 -0
- package/registry/curated/site-deploy/SKILL.md +119 -0
- package/registry/curated/slack-helper/SKILL.md +43 -0
- package/registry/curated/social-broadcast/SKILL.md +145 -0
- package/registry/curated/spotify-player/SKILL.md +45 -0
- package/registry/curated/streaming-stt-deepgram/SKILL.md +84 -0
- package/registry/curated/streaming-stt-whisper/SKILL.md +82 -0
- package/registry/curated/streaming-tts-elevenlabs/SKILL.md +84 -0
- package/registry/curated/streaming-tts-openai/SKILL.md +83 -0
- package/registry/curated/structured-output/SKILL.md +22 -0
- package/registry/curated/summarize/SKILL.md +40 -0
- package/registry/curated/threads-bot/SKILL.md +82 -0
- package/registry/curated/tiktok-bot/SKILL.md +104 -0
- package/registry/curated/topicality/SKILL.md +37 -0
- package/registry/curated/trello/SKILL.md +44 -0
- package/registry/curated/twitter-bot/SKILL.md +63 -0
- package/registry/curated/video-generation/SKILL.md +225 -0
- package/registry/curated/vision-ocr/SKILL.md +82 -0
- package/registry/curated/voice-conversation/SKILL.md +65 -0
- package/registry/curated/vosk/SKILL.md +74 -0
- package/registry/curated/weather/SKILL.md +37 -0
- package/registry/curated/web-scraper/SKILL.md +60 -0
- package/registry/curated/web-search/SKILL.md +49 -0
- package/registry/curated/whisper-transcribe/SKILL.md +58 -0
- package/registry/curated/youtube-bot/SKILL.md +104 -0
- package/registry.json +2446 -0
- package/scripts/update-registry.mjs +126 -0
- package/scripts/validate-skill.mjs +304 -0
- package/types.d.ts +160 -0
- package/dist/SkillLoader.d.ts +0 -50
- package/dist/SkillLoader.d.ts.map +0 -1
- package/dist/SkillLoader.js +0 -291
- package/dist/SkillLoader.js.map +0 -1
- package/dist/SkillRegistry.d.ts +0 -135
- package/dist/SkillRegistry.d.ts.map +0 -1
- package/dist/SkillRegistry.js +0 -455
- package/dist/SkillRegistry.js.map +0 -1
- package/dist/index.d.ts +0 -13
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -13
- package/dist/index.js.map +0 -1
- package/dist/paths.d.ts +0 -35
- package/dist/paths.d.ts.map +0 -1
- package/dist/paths.js +0 -71
- package/dist/paths.js.map +0 -1
- package/dist/types.d.ts +0 -231
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -21
- 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
|