@framers/agentos-skills 0.2.1 → 0.4.0
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 +99 -58
- package/package.json +22 -34
- 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,45 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: spotify-player
|
|
3
|
+
version: '1.0.0'
|
|
4
|
+
description: Control Spotify playback, manage playlists, search music, and get recommendations via the Spotify API.
|
|
5
|
+
author: Wunderland
|
|
6
|
+
namespace: wunderland
|
|
7
|
+
category: media
|
|
8
|
+
tags: [spotify, music, playback, playlists, streaming, audio]
|
|
9
|
+
requires_secrets: [spotify.client_id, spotify.client_secret, spotify.refresh_token]
|
|
10
|
+
requires_tools: []
|
|
11
|
+
metadata:
|
|
12
|
+
agentos:
|
|
13
|
+
emoji: "\U0001F3B5"
|
|
14
|
+
primaryEnv: SPOTIFY_CLIENT_ID
|
|
15
|
+
secondaryEnvs: [SPOTIFY_CLIENT_SECRET, SPOTIFY_REFRESH_TOKEN]
|
|
16
|
+
homepage: https://developer.spotify.com
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
# Spotify Playback Control
|
|
20
|
+
|
|
21
|
+
You can control Spotify playback, manage playlists, search the music catalog, and get personalized recommendations using the Spotify Web API. This skill requires OAuth credentials with appropriate scopes for the operations requested.
|
|
22
|
+
|
|
23
|
+
For playback control, you can play, pause, skip, seek, adjust volume, toggle shuffle, and set repeat mode on the user's active devices. Always check for an active device before sending playback commands -- if no device is active, inform the user they need to open Spotify on a device first. Queue tracks for upcoming playback with the add-to-queue endpoint.
|
|
24
|
+
|
|
25
|
+
When searching for music, use Spotify's search API with type filters (track, album, artist, playlist) for precise results. Present search results with artist name, track/album title, and duration. For playlist management, create, modify, and reorder playlists. When adding tracks, check for duplicates unless the user explicitly wants them.
|
|
26
|
+
|
|
27
|
+
For recommendations, use the recommendations endpoint with seed tracks, artists, or genres, combined with tunable attributes (energy, danceability, tempo, valence) to match the user's mood or activity. Present recommendations with enough context (genre, popularity, preview) for the user to make informed choices.
|
|
28
|
+
|
|
29
|
+
## Examples
|
|
30
|
+
|
|
31
|
+
- "Play 'Bohemian Rhapsody' by Queen"
|
|
32
|
+
- "Skip to the next track"
|
|
33
|
+
- "Create a playlist called 'Morning Focus' with chill electronic tracks"
|
|
34
|
+
- "What's currently playing?"
|
|
35
|
+
- "Recommend upbeat tracks similar to Daft Punk for a workout"
|
|
36
|
+
- "Add this song to my 'Favorites 2026' playlist"
|
|
37
|
+
|
|
38
|
+
## Constraints
|
|
39
|
+
|
|
40
|
+
- Playback control requires Spotify Premium on the target account.
|
|
41
|
+
- An active Spotify device (app, web player, smart speaker) must be open for playback commands.
|
|
42
|
+
- OAuth scopes needed: `user-modify-playback-state`, `user-read-playback-state`, `playlist-modify-public`, `playlist-modify-private`, `user-library-read`.
|
|
43
|
+
- Spotify API rate limits apply; batch operations when possible.
|
|
44
|
+
- 30-second preview URLs are available for most tracks but full playback requires the Spotify client.
|
|
45
|
+
- Cannot download or export audio files.
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: streaming-stt-deepgram
|
|
3
|
+
version: '1.0.0'
|
|
4
|
+
description: Real-time streaming speech-to-text via Deepgram WebSocket API — sub-300 ms latency, Nova-2 model, speaker diarization, auto-reconnect.
|
|
5
|
+
author: Wunderland
|
|
6
|
+
namespace: wunderland
|
|
7
|
+
category: voice
|
|
8
|
+
tags: [voice, stt, speech-to-text, deepgram, streaming, real-time, diarization]
|
|
9
|
+
requires_secrets: [deepgram.apiKey]
|
|
10
|
+
requires_tools: []
|
|
11
|
+
metadata:
|
|
12
|
+
agentos:
|
|
13
|
+
emoji: "\U0001F3A4"
|
|
14
|
+
primaryEnv: DEEPGRAM_API_KEY
|
|
15
|
+
homepage: https://developers.deepgram.com/docs/getting-started-with-live-streaming-audio
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# Deepgram Streaming STT
|
|
19
|
+
|
|
20
|
+
Use this skill when the user needs real-time speech-to-text transcription with the lowest possible latency. Deepgram's WebSocket API provides sub-300 ms interim transcripts using the Nova-2 model.
|
|
21
|
+
|
|
22
|
+
Prefer this provider over file-based Whisper when the agent needs live voice input during a conversation, or when speaker identification (diarization) is required without a separate processing step.
|
|
23
|
+
|
|
24
|
+
## Setup
|
|
25
|
+
|
|
26
|
+
Set `DEEPGRAM_API_KEY` in the environment or agent secrets store before starting a voice session.
|
|
27
|
+
|
|
28
|
+
## Configuration
|
|
29
|
+
|
|
30
|
+
```json
|
|
31
|
+
{
|
|
32
|
+
"voice": {
|
|
33
|
+
"stt": "deepgram"
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
To enable diarization and keyword boosting:
|
|
39
|
+
|
|
40
|
+
```json
|
|
41
|
+
{
|
|
42
|
+
"voice": {
|
|
43
|
+
"stt": "deepgram",
|
|
44
|
+
"providerOptions": {
|
|
45
|
+
"model": "nova-2",
|
|
46
|
+
"diarize": true,
|
|
47
|
+
"keywords": ["AgentOS:2"],
|
|
48
|
+
"endpointing": 300
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Provider Rules
|
|
55
|
+
|
|
56
|
+
- Use `nova-2` as the default model — highest accuracy on Deepgram's current tier.
|
|
57
|
+
- Enable `diarize: true` when the conversation involves multiple speakers; word-level `speaker` labels are included in the transcript events.
|
|
58
|
+
- Tune `endpointing` (ms of silence before finalization) to balance responsiveness vs. over-splitting. Default 300 ms is suitable for most conversations.
|
|
59
|
+
- The provider auto-reconnects on WebSocket drops using exponential back-off (100 ms → 5 s cap).
|
|
60
|
+
- Use `providerOptions.keywords` to boost domain-specific terms (e.g. product names, abbreviations).
|
|
61
|
+
|
|
62
|
+
## Events
|
|
63
|
+
|
|
64
|
+
| Event | Description |
|
|
65
|
+
|------------------------|-------------------------------------------------|
|
|
66
|
+
| `transcript` | Every hypothesis (interim + final) |
|
|
67
|
+
| `interim_transcript` | Non-final hypothesis |
|
|
68
|
+
| `final_transcript` | Stable, final hypothesis |
|
|
69
|
+
| `speech_start` | First non-empty word in an utterance |
|
|
70
|
+
| `speech_end` | Deepgram `speech_final` flag raised |
|
|
71
|
+
| `error` | Unrecoverable provider error |
|
|
72
|
+
| `close` | Session fully terminated |
|
|
73
|
+
|
|
74
|
+
## Examples
|
|
75
|
+
|
|
76
|
+
- "Start a live voice session using Deepgram for transcription."
|
|
77
|
+
- "Enable speaker diarization for this multi-person meeting transcription."
|
|
78
|
+
- "Use Deepgram with keyword boosting for AgentOS and Wunderland terms."
|
|
79
|
+
|
|
80
|
+
## Constraints
|
|
81
|
+
|
|
82
|
+
- Requires `DEEPGRAM_API_KEY`. Free tier available at console.deepgram.com.
|
|
83
|
+
- Audio must be streamed as PCM/WebSocket-compatible frames.
|
|
84
|
+
- Diarization adds slight latency; disable if single-speaker performance is the priority.
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: streaming-stt-whisper
|
|
3
|
+
version: '1.0.0'
|
|
4
|
+
description: Chunked sliding-window streaming speech-to-text via OpenAI Whisper HTTP API — compatible with local Faster-Whisper, Groq, and OpenRouter endpoints.
|
|
5
|
+
author: Wunderland
|
|
6
|
+
namespace: wunderland
|
|
7
|
+
category: voice
|
|
8
|
+
tags: [voice, stt, speech-to-text, whisper, openai, streaming, local, offline-compatible]
|
|
9
|
+
requires_secrets: [openai.apiKey]
|
|
10
|
+
requires_tools: []
|
|
11
|
+
metadata:
|
|
12
|
+
agentos:
|
|
13
|
+
emoji: "\U0001F399\uFE0F"
|
|
14
|
+
primaryEnv: OPENAI_API_KEY
|
|
15
|
+
homepage: https://platform.openai.com/docs/guides/speech-to-text
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# Whisper Chunked Streaming STT
|
|
19
|
+
|
|
20
|
+
Use this skill when OpenAI Whisper is the preferred STT provider, especially when a single API key should cover both LLM and speech. This provider uses a sliding-window ring buffer to simulate streaming over the file-based Whisper HTTP endpoint.
|
|
21
|
+
|
|
22
|
+
Prefer this over the Deepgram adapter when real-time WebSocket streaming is not required, when the user wants to route through a local Whisper-compatible server (e.g. Faster-Whisper, Groq), or when OpenAI is the only configured provider.
|
|
23
|
+
|
|
24
|
+
## Setup
|
|
25
|
+
|
|
26
|
+
Set `OPENAI_API_KEY` in the environment or agent secrets store. For local endpoints, override `baseUrl` in `providerOptions`.
|
|
27
|
+
|
|
28
|
+
## Configuration
|
|
29
|
+
|
|
30
|
+
```json
|
|
31
|
+
{
|
|
32
|
+
"voice": {
|
|
33
|
+
"stt": "whisper"
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
For a local Faster-Whisper endpoint:
|
|
39
|
+
|
|
40
|
+
```json
|
|
41
|
+
{
|
|
42
|
+
"voice": {
|
|
43
|
+
"stt": "whisper",
|
|
44
|
+
"providerOptions": {
|
|
45
|
+
"model": "whisper-1",
|
|
46
|
+
"language": "en",
|
|
47
|
+
"baseUrl": "http://localhost:8000"
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Provider Rules
|
|
54
|
+
|
|
55
|
+
- Audio is accumulated in a 1 s sliding window with 200 ms overlap to avoid word boundary clipping.
|
|
56
|
+
- The previous chunk transcript is forwarded as `prompt` to the next request for cross-chunk continuity.
|
|
57
|
+
- On fetch failure the provider emits `error` and continues — no session crash.
|
|
58
|
+
- Use `language` to force a specific language code (BCP-47); omit for automatic detection.
|
|
59
|
+
- Compatible with any OpenAI `/v1/audio/transcriptions`-compatible server.
|
|
60
|
+
|
|
61
|
+
## Events
|
|
62
|
+
|
|
63
|
+
| Event | Description |
|
|
64
|
+
|------------------------|-------------------------------------------------|
|
|
65
|
+
| `interim_transcript` | Emitted after each chunk is transcribed |
|
|
66
|
+
| `final_transcript` | Emitted after flush() completes |
|
|
67
|
+
| `speech_start` | RMS energy crossed threshold |
|
|
68
|
+
| `speech_end` | RMS energy dropped below threshold |
|
|
69
|
+
| `error` | Fetch failure (session continues) |
|
|
70
|
+
| `close` | Session fully terminated |
|
|
71
|
+
|
|
72
|
+
## Examples
|
|
73
|
+
|
|
74
|
+
- "Use Whisper for live speech transcription during our voice session."
|
|
75
|
+
- "Transcribe my speech through a local Faster-Whisper server."
|
|
76
|
+
- "Use OpenAI for both the LLM and the STT provider."
|
|
77
|
+
|
|
78
|
+
## Constraints
|
|
79
|
+
|
|
80
|
+
- Requires `OPENAI_API_KEY` or a compatible local endpoint via `providerOptions.baseUrl`.
|
|
81
|
+
- Latency is higher than native WebSocket providers (Deepgram) due to HTTP chunking overhead.
|
|
82
|
+
- Speaker diarization is not natively supported; use the `diarization` extension for post-processing.
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: streaming-tts-elevenlabs
|
|
3
|
+
version: '1.0.0'
|
|
4
|
+
description: Real-time streaming text-to-speech via ElevenLabs WebSocket API — persistent connection, sentence-boundary flushing, turbo and multilingual models.
|
|
5
|
+
author: Wunderland
|
|
6
|
+
namespace: wunderland
|
|
7
|
+
category: voice
|
|
8
|
+
tags: [voice, tts, text-to-speech, elevenlabs, streaming, websocket, high-quality]
|
|
9
|
+
requires_secrets: [elevenlabs.apiKey]
|
|
10
|
+
requires_tools: []
|
|
11
|
+
metadata:
|
|
12
|
+
agentos:
|
|
13
|
+
emoji: "\U0001F50A"
|
|
14
|
+
primaryEnv: ELEVENLABS_API_KEY
|
|
15
|
+
homepage: https://elevenlabs.io/docs/api-reference/text-to-speech
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# ElevenLabs Streaming TTS
|
|
19
|
+
|
|
20
|
+
Use this skill when voice quality or voice cloning is the highest priority. ElevenLabs uses a persistent WebSocket connection per session and streams MP3 audio chunks as soon as each sentence boundary is reached, enabling near-instant audio playback with premium voice quality.
|
|
21
|
+
|
|
22
|
+
Prefer this over OpenAI TTS when the user cares about expressiveness, accent accuracy, or has a custom cloned voice configured via a ElevenLabs voice ID.
|
|
23
|
+
|
|
24
|
+
## Setup
|
|
25
|
+
|
|
26
|
+
Set `ELEVENLABS_API_KEY` in the environment or agent secrets store.
|
|
27
|
+
|
|
28
|
+
## Configuration
|
|
29
|
+
|
|
30
|
+
```json
|
|
31
|
+
{
|
|
32
|
+
"voice": {
|
|
33
|
+
"tts": "elevenlabs"
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
With a custom voice and model:
|
|
39
|
+
|
|
40
|
+
```json
|
|
41
|
+
{
|
|
42
|
+
"voice": {
|
|
43
|
+
"tts": "elevenlabs",
|
|
44
|
+
"providerOptions": {
|
|
45
|
+
"voiceId": "21m00Tcm4TlvDq8ikWAM",
|
|
46
|
+
"modelId": "eleven_turbo_v2",
|
|
47
|
+
"stability": 0.5,
|
|
48
|
+
"similarityBoost": 0.75,
|
|
49
|
+
"style": 0.0,
|
|
50
|
+
"useSpeakerBoost": true
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Provider Rules
|
|
57
|
+
|
|
58
|
+
- Use `eleven_turbo_v2` for low-latency interactions; use `eleven_multilingual_v2` for highest quality or non-English speech.
|
|
59
|
+
- The WebSocket connection is kept alive for the duration of the session — no per-request handshake overhead.
|
|
60
|
+
- Sentence boundaries (`.`, `?`, `!`) trigger immediate audio flush; the provider does not wait for full LLM output.
|
|
61
|
+
- Voice settings (`stability`, `similarityBoost`, `style`) tune the expressiveness tradeoff. Higher stability = more consistent but less expressive.
|
|
62
|
+
- If no `voiceId` is provided, ElevenLabs uses the account's default voice.
|
|
63
|
+
|
|
64
|
+
## Events
|
|
65
|
+
|
|
66
|
+
| Event | Description |
|
|
67
|
+
|----------------------|----------------------------------------------------|
|
|
68
|
+
| `audio_chunk` | MP3 audio buffer ready for playback |
|
|
69
|
+
| `utterance_complete` | ElevenLabs signalled final audio generation done |
|
|
70
|
+
| `cancelled` | Session cancelled; remaining text not rendered |
|
|
71
|
+
| `error` | WebSocket or synthesis error |
|
|
72
|
+
| `close` | Session fully terminated |
|
|
73
|
+
|
|
74
|
+
## Examples
|
|
75
|
+
|
|
76
|
+
- "Use ElevenLabs TTS with my custom cloned voice for this session."
|
|
77
|
+
- "Switch to ElevenLabs for higher-quality speech synthesis."
|
|
78
|
+
- "Use the turbo model for real-time low-latency voice responses."
|
|
79
|
+
|
|
80
|
+
## Constraints
|
|
81
|
+
|
|
82
|
+
- Requires `ELEVENLABS_API_KEY`. Free tier available at elevenlabs.io.
|
|
83
|
+
- Voice IDs are specific to the ElevenLabs account. Use the ElevenLabs dashboard or API to list available voices.
|
|
84
|
+
- MP3 output at 44.1 kHz / 128 kbps. Playback requires an MP3-capable audio pipeline.
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: streaming-tts-openai
|
|
3
|
+
version: '1.0.0'
|
|
4
|
+
description: Low-latency streaming text-to-speech via OpenAI TTS API — adaptive sentence chunking, concurrent fetch pipelining, six voices.
|
|
5
|
+
author: Wunderland
|
|
6
|
+
namespace: wunderland
|
|
7
|
+
category: voice
|
|
8
|
+
tags: [voice, tts, text-to-speech, openai, streaming, low-latency]
|
|
9
|
+
requires_secrets: [openai.apiKey]
|
|
10
|
+
requires_tools: []
|
|
11
|
+
metadata:
|
|
12
|
+
agentos:
|
|
13
|
+
emoji: "\U0001F50A"
|
|
14
|
+
primaryEnv: OPENAI_API_KEY
|
|
15
|
+
homepage: https://platform.openai.com/docs/guides/text-to-speech
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# OpenAI Streaming TTS
|
|
19
|
+
|
|
20
|
+
Use this skill when the agent needs to synthesize speech from LLM output with low latency using OpenAI's TTS API. The provider buffers incoming tokens into sentence chunks before making API requests, enabling audio to begin playing within the first sentence rather than waiting for the full response.
|
|
21
|
+
|
|
22
|
+
Prefer this provider when a single `OPENAI_API_KEY` should cover both LLM and TTS, or when voice quality is important but ElevenLabs is not configured.
|
|
23
|
+
|
|
24
|
+
## Setup
|
|
25
|
+
|
|
26
|
+
Set `OPENAI_API_KEY` in the environment or agent secrets store.
|
|
27
|
+
|
|
28
|
+
## Configuration
|
|
29
|
+
|
|
30
|
+
```json
|
|
31
|
+
{
|
|
32
|
+
"voice": {
|
|
33
|
+
"tts": "openai"
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
With voice and model options:
|
|
39
|
+
|
|
40
|
+
```json
|
|
41
|
+
{
|
|
42
|
+
"voice": {
|
|
43
|
+
"tts": "openai",
|
|
44
|
+
"providerOptions": {
|
|
45
|
+
"model": "tts-1",
|
|
46
|
+
"voice": "nova",
|
|
47
|
+
"format": "opus",
|
|
48
|
+
"maxBufferMs": 2000
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Provider Rules
|
|
55
|
+
|
|
56
|
+
- Prefer `tts-1` for real-time interactions; use `tts-1-hd` when audio quality matters more than latency.
|
|
57
|
+
- Default voice is `nova`. Available voices: `alloy`, `echo`, `fable`, `onyx`, `nova`, `shimmer`.
|
|
58
|
+
- The provider fetches the next sentence concurrently while the current one plays to minimize gaps.
|
|
59
|
+
- All in-flight requests use `AbortController` for cancellation when the session is interrupted.
|
|
60
|
+
- Use `maxBufferMs` to tune the fallback flush timer for fragments without terminal punctuation.
|
|
61
|
+
|
|
62
|
+
## Events
|
|
63
|
+
|
|
64
|
+
| Event | Description |
|
|
65
|
+
|----------------------|----------------------------------------------------|
|
|
66
|
+
| `utterance_start` | Sentence chunk dispatched for synthesis |
|
|
67
|
+
| `audio_chunk` | Synthesized audio buffer ready for playback |
|
|
68
|
+
| `utterance_complete` | Synthesis complete for a sentence chunk |
|
|
69
|
+
| `cancelled` | Session cancelled; remaining text not rendered |
|
|
70
|
+
| `error` | Synthesis request failed |
|
|
71
|
+
| `close` | Session fully terminated |
|
|
72
|
+
|
|
73
|
+
## Examples
|
|
74
|
+
|
|
75
|
+
- "Use OpenAI TTS with the nova voice for this conversation."
|
|
76
|
+
- "Switch to the HD model for a podcast recording."
|
|
77
|
+
- "Start a voice session where OpenAI handles both LLM and speech synthesis."
|
|
78
|
+
|
|
79
|
+
## Constraints
|
|
80
|
+
|
|
81
|
+
- Requires `OPENAI_API_KEY`.
|
|
82
|
+
- Latency is bounded by the first sentence chunk — longer sentence fragments before a punctuation mark will delay audio start.
|
|
83
|
+
- `tts-1-hd` has higher latency than `tts-1`.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: structured-output
|
|
3
|
+
description: Extract structured JSON data from text using Zod schemas
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
tags: [structured-output, json, extraction, schema, zod]
|
|
6
|
+
tools_required: []
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Structured Output
|
|
10
|
+
|
|
11
|
+
Extract structured data from unstructured text using Zod schema validation. Supports generateObject (blocking) and streamObject (streaming with partial objects).
|
|
12
|
+
|
|
13
|
+
## Capabilities
|
|
14
|
+
- **Entity extraction**: Pull names, dates, amounts from text
|
|
15
|
+
- **Classification**: Categorize content into predefined types
|
|
16
|
+
- **Data transformation**: Convert prose into structured JSON
|
|
17
|
+
- **Streaming**: Get partial objects as they build up
|
|
18
|
+
|
|
19
|
+
## Example
|
|
20
|
+
"Extract all people, dates, and locations from this article"
|
|
21
|
+
"Classify this support ticket as billing/technical/account"
|
|
22
|
+
"Convert this meeting notes into structured action items"
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: summarize
|
|
3
|
+
version: '1.0.0'
|
|
4
|
+
description: Summarize text content, web pages, documents, and long-form articles into concise, structured summaries.
|
|
5
|
+
author: Wunderland
|
|
6
|
+
namespace: wunderland
|
|
7
|
+
category: information
|
|
8
|
+
tags: [summarization, text-processing, tldr, reading, content-analysis]
|
|
9
|
+
requires_secrets: []
|
|
10
|
+
requires_tools: [web-search]
|
|
11
|
+
metadata:
|
|
12
|
+
agentos:
|
|
13
|
+
emoji: "\U0001F4DD"
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# Text and URL Summarization
|
|
17
|
+
|
|
18
|
+
You can summarize text content, web pages, articles, documents, and other long-form material into concise, structured summaries. Adapt the summary format and depth to the user's needs and the source material type.
|
|
19
|
+
|
|
20
|
+
When summarizing, first identify the content type (news article, technical documentation, research paper, meeting transcript, etc.) and adjust your approach accordingly. For news and articles, lead with the key takeaway followed by supporting details. For technical documents, preserve critical specifications, code examples, and architectural decisions. For meeting transcripts, extract action items, decisions made, and open questions.
|
|
21
|
+
|
|
22
|
+
Provide summaries at multiple levels when appropriate: a one-line TLDR, a paragraph-length executive summary, and a structured bullet-point breakdown of key sections. Always preserve proper nouns, specific numbers, dates, and quoted statements accurately. Flag any claims that appear unsubstantiated or controversial.
|
|
23
|
+
|
|
24
|
+
When summarizing URLs, fetch the page content and extract the main article body, ignoring navigation, ads, and sidebar content. For paywalled or inaccessible content, clearly state that the full content could not be retrieved and summarize whatever is available. Support chaining multiple URLs for comparative summaries.
|
|
25
|
+
|
|
26
|
+
## Examples
|
|
27
|
+
|
|
28
|
+
- "Summarize this article: https://example.com/long-article"
|
|
29
|
+
- "Give me a TLDR of the last 3 messages in this conversation"
|
|
30
|
+
- "Summarize these meeting notes into action items and decisions"
|
|
31
|
+
- "Compare and summarize these two technical proposals"
|
|
32
|
+
- "Summarize this research paper, focusing on methodology and findings"
|
|
33
|
+
|
|
34
|
+
## Constraints
|
|
35
|
+
|
|
36
|
+
- Summary quality depends on the completeness of source material available.
|
|
37
|
+
- Paywalled or authentication-gated content may not be fully accessible.
|
|
38
|
+
- Very long documents (100+ pages) should be summarized in sections rather than all at once.
|
|
39
|
+
- Summaries are interpretive; always offer to provide the original text for verification of specific claims.
|
|
40
|
+
- Cannot summarize audio/video content directly (requires transcription first).
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: threads-bot
|
|
3
|
+
version: '1.0.0'
|
|
4
|
+
description: Threads automation — conversational engagement, text-first content, real-time discussions, and community building.
|
|
5
|
+
author: Wunderland
|
|
6
|
+
namespace: wunderland
|
|
7
|
+
category: social-automation
|
|
8
|
+
tags: [threads, social-media, conversational, text-first, engagement, automation]
|
|
9
|
+
requires_secrets: [threads.accessToken]
|
|
10
|
+
requires_tools: [threadsPost, threadsReply, threadsLike, threadsSearch, threadsAnalytics, threadsQuote]
|
|
11
|
+
metadata:
|
|
12
|
+
agentos:
|
|
13
|
+
emoji: "\U0001F9F5"
|
|
14
|
+
primaryEnv: THREADS_ACCESS_TOKEN
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
# Threads Bot
|
|
18
|
+
|
|
19
|
+
You are an autonomous Threads engagement agent. You thrive in real-time, text-first conversations — posting hot takes, engaging in discussions, quoting interesting posts, and building community through authentic, casual interaction.
|
|
20
|
+
|
|
21
|
+
## Core Capabilities
|
|
22
|
+
|
|
23
|
+
- **Post** — text-first updates with optional images (max 500 characters)
|
|
24
|
+
- **Reply** to posts and join ongoing conversations
|
|
25
|
+
- **Like** content that resonates with your persona
|
|
26
|
+
- **Quote post** — reshare with your commentary using `threadsQuote`
|
|
27
|
+
- **Search** — find relevant conversations and trending topics
|
|
28
|
+
- **Analytics** — track engagement and audience growth
|
|
29
|
+
|
|
30
|
+
## Posting Strategy
|
|
31
|
+
|
|
32
|
+
1. **Be conversational** — Threads rewards authentic, real-time discussion
|
|
33
|
+
2. **Text-first content** — words carry more weight here than visuals
|
|
34
|
+
3. **Post frequently** — 3-8 posts per day keeps you visible
|
|
35
|
+
4. **Join conversations early** — first replies get the most visibility
|
|
36
|
+
5. **Quote interesting takes** — add your perspective, don't just reshare
|
|
37
|
+
6. **Keep it casual** — professional polish feels out of place on Threads
|
|
38
|
+
7. **Use minimal hashtags** — 2-3 at most, or none at all
|
|
39
|
+
|
|
40
|
+
## Content Types
|
|
41
|
+
|
|
42
|
+
- **Hot takes**: Short, punchy observations on trending topics
|
|
43
|
+
- **Conversations**: Reply threads that develop a discussion
|
|
44
|
+
- **Quote posts**: Reshare interesting content with your commentary
|
|
45
|
+
- **Questions**: Ask your audience for opinions and experiences
|
|
46
|
+
- **Updates**: Quick status updates and real-time reactions
|
|
47
|
+
- **Photo posts**: Optional image with caption for visual moments
|
|
48
|
+
|
|
49
|
+
## Engagement Rules
|
|
50
|
+
|
|
51
|
+
- **Be genuine** — authenticity is the currency on Threads
|
|
52
|
+
- **Join conversations** — don't just broadcast, participate in discussions
|
|
53
|
+
- **Add value in replies** — expand on ideas, share experiences, be witty
|
|
54
|
+
- **Quote-post thoughtfully** — add a meaningful take, not just "this"
|
|
55
|
+
- **Don't over-promote** — self-promotion is obvious and off-putting
|
|
56
|
+
- **Read the room** — match the casual, conversational energy of the platform
|
|
57
|
+
|
|
58
|
+
## Personality Guidelines
|
|
59
|
+
|
|
60
|
+
- Stay in character — your HEXACO traits should influence your conversational style
|
|
61
|
+
- High Openness agents: share eclectic observations, connect unexpected dots
|
|
62
|
+
- High Agreeableness agents: be warm and engaging, build up others
|
|
63
|
+
- Low Agreeableness agents: post spicy takes, challenge mainstream opinions
|
|
64
|
+
- High Conscientiousness agents: share well-thought-out observations
|
|
65
|
+
|
|
66
|
+
## Safety Limits
|
|
67
|
+
|
|
68
|
+
- Maximum 10 posts per day
|
|
69
|
+
- Maximum 500 characters per post
|
|
70
|
+
- Minimum 30 seconds between actions
|
|
71
|
+
- Don't spam replies across many conversations
|
|
72
|
+
- Follow Threads Community Guidelines
|
|
73
|
+
- Avoid engagement bait and rage-bait
|
|
74
|
+
- Vary your posting times and engagement patterns
|
|
75
|
+
|
|
76
|
+
## Workflow
|
|
77
|
+
|
|
78
|
+
1. **Discover** — Search for trending conversations and relevant topics
|
|
79
|
+
2. **Evaluate** — Score each opportunity for conversational fit and engagement potential
|
|
80
|
+
3. **Engage** — Reply, like, or quote-post based on evaluation
|
|
81
|
+
4. **Create** — Post original takes and observations on schedule
|
|
82
|
+
5. **Analyze** — Review engagement and adjust conversational approach
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tiktok-bot
|
|
3
|
+
version: '1.0.0'
|
|
4
|
+
description: TikTok automation — short-form video publishing, trending sound discovery, hashtag challenges, and community engagement.
|
|
5
|
+
author: Wunderland
|
|
6
|
+
namespace: wunderland
|
|
7
|
+
category: social-automation
|
|
8
|
+
tags: [tiktok, video, short-form, social-media, trending, hashtag-challenges, automation]
|
|
9
|
+
requires_secrets: [tiktok.accessToken]
|
|
10
|
+
requires_tools: [tiktokUpload, tiktokDiscover, tiktokEngage, tiktokSearch, tiktokTrending, tiktokAnalytics]
|
|
11
|
+
metadata:
|
|
12
|
+
agentos:
|
|
13
|
+
emoji: "\U0001F3B5"
|
|
14
|
+
primaryEnv: TIKTOK_ACCESS_TOKEN
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
# TikTok Bot
|
|
18
|
+
|
|
19
|
+
You are an autonomous TikTok content and engagement agent. You create and publish short-form video content — riding trending sounds, participating in hashtag challenges, engaging with the community, and growing your audience through the For You Page algorithm.
|
|
20
|
+
|
|
21
|
+
## Core Capabilities
|
|
22
|
+
|
|
23
|
+
- **Upload videos** — publish short-form vertical video with captions, sounds, and effects
|
|
24
|
+
- **Discover** — find trending sounds, hashtags, and content via `tiktokDiscover`
|
|
25
|
+
- **Engage** — like, comment, and interact with relevant content via `tiktokEngage`
|
|
26
|
+
- **Search** — find relevant creators, videos, and hashtags
|
|
27
|
+
- **Trending** — monitor trending sounds, effects, and challenges
|
|
28
|
+
- **Analytics** — track views, likes, shares, comments, and follower growth
|
|
29
|
+
|
|
30
|
+
## Content Strategy
|
|
31
|
+
|
|
32
|
+
1. **Hook in the first 3 seconds** — this is the most critical moment for retention
|
|
33
|
+
2. **Use trending sounds** — videos with popular audio get boosted by the algorithm
|
|
34
|
+
3. **Post 1-3 times per day** — consistency matters more than volume
|
|
35
|
+
4. **Participate in challenges** — hashtag challenges drive massive discovery
|
|
36
|
+
5. **Keep it short** — 15-30 seconds performs best, never exceed 3 minutes
|
|
37
|
+
6. **Native content only** — don't repost from other platforms (watermarks get penalized)
|
|
38
|
+
7. **Post at peak times** — 7-9am, 12-3pm, 7-11pm local time
|
|
39
|
+
|
|
40
|
+
## Content Types
|
|
41
|
+
|
|
42
|
+
- **Trending sounds**: Create content around popular audio clips
|
|
43
|
+
- **Tutorials**: Quick how-to videos (step-by-step, under 60s)
|
|
44
|
+
- **Reactions**: React to trending content or current events
|
|
45
|
+
- **Hashtag challenges**: Participate in viral challenges
|
|
46
|
+
- **Duets and stitches**: Engage with other creators' content
|
|
47
|
+
- **Behind-the-scenes**: Authentic, unpolished glimpses
|
|
48
|
+
- **Storytelling**: Narrative content that hooks viewers for multiple parts
|
|
49
|
+
|
|
50
|
+
## Video Best Practices
|
|
51
|
+
|
|
52
|
+
- **Vertical format** — 9:16 aspect ratio (1080x1920)
|
|
53
|
+
- **Text overlays** — most viewers watch on mute initially
|
|
54
|
+
- **Strong hook** — first frame should stop the scroll
|
|
55
|
+
- **Call-to-action** — ask viewers to follow, comment, or check part 2
|
|
56
|
+
- **Captions** — use TikTok's auto-captions or add your own for accessibility
|
|
57
|
+
- **Hashtags in caption** — 3-5 relevant hashtags (mix trending + niche)
|
|
58
|
+
- **Caption length** — up to 2200 characters, but shorter is better
|
|
59
|
+
|
|
60
|
+
## Engagement Rules
|
|
61
|
+
|
|
62
|
+
- **Reply to comments** — especially in the first hour after posting
|
|
63
|
+
- **Duet and stitch** creators in your niche to build relationships
|
|
64
|
+
- **Like and comment** on content from creators in your community
|
|
65
|
+
- **Follow relevant creators** — build genuine connections
|
|
66
|
+
- **Don't chase every trend** — only participate when it fits your niche
|
|
67
|
+
- **Be authentic** — TikTok's audience values genuine over polished
|
|
68
|
+
|
|
69
|
+
## Algorithm Tips
|
|
70
|
+
|
|
71
|
+
- **Watch time is king** — the algorithm prioritizes completion rate
|
|
72
|
+
- **Shares > Comments > Likes** — shares have the highest algorithmic weight
|
|
73
|
+
- **Post when your audience is online** — check analytics for best times
|
|
74
|
+
- **Use trending sounds early** — early adopters get more reach
|
|
75
|
+
- **Engage immediately after posting** — reply to every comment in the first hour
|
|
76
|
+
- **Don't delete and repost** — the algorithm may suppress re-uploads
|
|
77
|
+
|
|
78
|
+
## Personality Guidelines
|
|
79
|
+
|
|
80
|
+
- Stay in character — your HEXACO traits should influence your video style
|
|
81
|
+
- High Openness agents: experimental formats, niche trends, creative edits
|
|
82
|
+
- High Agreeableness agents: positive content, duets, community building
|
|
83
|
+
- Low Agreeableness agents: hot takes, controversial opinions, debate content
|
|
84
|
+
- High Conscientiousness agents: educational content, well-edited, informative
|
|
85
|
+
|
|
86
|
+
## Safety Limits
|
|
87
|
+
|
|
88
|
+
- Maximum 5 videos per day
|
|
89
|
+
- Maximum 2200 characters per caption
|
|
90
|
+
- Minimum 30 seconds between engagement actions
|
|
91
|
+
- Don't use copyrighted music outside TikTok's library
|
|
92
|
+
- Follow TikTok Community Guidelines
|
|
93
|
+
- No misleading content or misinformation
|
|
94
|
+
- Don't buy followers or engagement
|
|
95
|
+
- Respect creator attribution in duets and stitches
|
|
96
|
+
|
|
97
|
+
## Workflow
|
|
98
|
+
|
|
99
|
+
1. **Discover** — Browse trending sounds, hashtags, and challenges
|
|
100
|
+
2. **Plan** — Choose trends that fit your niche and persona
|
|
101
|
+
3. **Create** — Produce short-form video with hook, content, and CTA
|
|
102
|
+
4. **Publish** — Upload with optimized caption, hashtags, and sound
|
|
103
|
+
5. **Engage** — Reply to comments, duet creators, build community
|
|
104
|
+
6. **Analyze** — Review completion rate, shares, and follower growth
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: topicality
|
|
3
|
+
version: '1.0.0'
|
|
4
|
+
description: Enforce allowed and forbidden conversation topics using semantic embedding similarity with session-aware drift detection
|
|
5
|
+
author: Frame.dev
|
|
6
|
+
namespace: wunderland
|
|
7
|
+
category: security
|
|
8
|
+
tags: [guardrails, topics, topicality, off-topic, embeddings, drift-detection]
|
|
9
|
+
requires_tools: [check_topic]
|
|
10
|
+
metadata:
|
|
11
|
+
agentos:
|
|
12
|
+
emoji: "\U0001F3AF"
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# Topicality
|
|
16
|
+
|
|
17
|
+
A guardrail automatically enforces conversation topic boundaries. Messages
|
|
18
|
+
matching forbidden topics are blocked. Messages outside allowed topics are
|
|
19
|
+
flagged. Gradual off-topic drift across multiple turns is detected.
|
|
20
|
+
|
|
21
|
+
## When to Use check_topic
|
|
22
|
+
|
|
23
|
+
- To verify if RAG retrieval results are relevant to allowed topics
|
|
24
|
+
- Before presenting user-submitted content to the agent
|
|
25
|
+
- In content moderation workflows
|
|
26
|
+
|
|
27
|
+
## What It Enforces
|
|
28
|
+
|
|
29
|
+
- **Allowed topics**: messages must be semantically related to at least one allowed topic
|
|
30
|
+
- **Forbidden topics**: messages matching a forbidden topic are blocked
|
|
31
|
+
- **Drift detection**: gradual off-topic steering across multiple turns is caught
|
|
32
|
+
|
|
33
|
+
## Constraints
|
|
34
|
+
|
|
35
|
+
- Requires an embedding provider (OpenAI, etc.) to be configured
|
|
36
|
+
- Topic embeddings are computed lazily on first evaluation
|
|
37
|
+
- Drift detection tracks per-session state (cleaned up after 1 hour of inactivity)
|