From agi-super-team
Generates AI music on Suno.com with custom lyrics and style, including artist-specific styles like G.E.M.邓紫棋. Can search for lyrics, fill the Suno create form, and download songs.
How this skill is triggered — by the user, by Claude, or both
Slash command
/agi-super-team:suno-createThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Create songs on Suno.com by filling the form with lyrics + style and triggering generation. Download songs and send to Telegram.
Create songs on Suno.com by filling the form with lyrics + style and triggering generation. Download songs and send to Telegram.
Browser must be logged into Suno. If not logged in:
browser(action=navigate, url="https://suno.com/create")
sleep 5
If user provides lyrics → use provided lyrics.
If user provides song name → search online for correct lyrics:
duckduckgo.com search → find lyrics from mojigeci.com, kkbox.com, lyrics.com.twSearch URLs:
https://html.duckduckgo.com/html/?q={song_name}+歌词+{artist}
https://html.duckduckgo.com/html/?q={song_name}+lyrics+{artist}
Lyrics format for Suno - Use clean text without formatting tags:
[Verse]
歌词内容...
[Chorus]
副歌内容...
G.E.M. 邓紫棋 style prompt (reference: references/gem_style.md):
G.E.M.邓紫棋风格, 强大的 belting 声乐, 沙哑音色, R&B 流行, 宽广音域, 情感化中文演唱, 呼吸感副歌, 灵魂情歌, 2000s-2020s 华语天后气质, 怀旧浪漫
Use React-compatible input method (Suno uses React - plain fill/type won't work):
// Fill lyrics
const LYRICS = `...`; // multi-line lyrics string
// Fill style
const STYLE = `G.E.M.邓紫棋风格, 强大的 belting 声乐...`;
browser(action=act, targetId="<current_targetId>", kind=evaluate, fn=r'''() => {
const LYRICS = `...`;
const STYLE = `...`;
// Fill lyrics textarea
const textareas = document.querySelectorAll('textarea');
for (const ta of textareas) {
const ph = ta.placeholder || '';
if (ph.includes('lyrics') || ph.includes('Write some')) {
Object.getOwnPropertyDescriptor(window.HTMLTextAreaElement.prototype, 'value').set.call(ta, LYRICS);
ta.dispatchEvent(new Event('input', {bubbles: true}));
ta.dispatchEvent(new Event('change', {bubbles: true}));
}
}
// Fill style textarea (find by placeholder "Meditative" or existing "moody" value)
for (const ta of textareas) {
const ph = ta.placeholder || '';
const val = ta.value || '';
if (ph.includes('Meditative') || (val.includes('moody') && !val.includes('G.E.M.'))) {
Object.getOwnPropertyDescriptor(window.HTMLTextAreaElement.prototype, 'value').set.call(ta, STYLE);
ta.dispatchEvent(new Event('input', {bubbles: true}));
ta.dispatchEvent(new Event('change', {bubbles: true}));
}
}
// Click Create
setTimeout(() => {
const buttons = Array.from(document.querySelectorAll('button'));
for (const btn of buttons) {
const txt = btn.textContent.trim();
if (txt === 'Create' || txt === 'Create song') {
if (!btn.disabled) { btn.click(); }
break;
}
}
}, 500);
return 'Done';
}''')
Wait 30-40 seconds, then take screenshot to verify:
sleep 35
browser(action=screenshot, targetId="<targetId>", fullPage=true)
New songs appear in right sidebar workspace.
// Get song IDs and titles from page
browser(action=act, kind=evaluate, fn=r'''() => {
const songs = Array.from(document.querySelectorAll('a[href*="/song/"]')).map(a => {
const match = a.href.match(/\/song\/([^\/]+)/);
return match ? { title: a.textContent.trim(), id: match[1] } : null;
}).filter(s => s);
return JSON.stringify(songs.slice(0, 10));
}''')
Song audio URL pattern: https://cdn1.suno.ai/{song_id}.mp3
# Download song
curl -sL -o "/tmp/song_{id}.mp3" "https://cdn1.suno.ai/{song_id}.mp3"
# Copy to workspace for Telegram
cp "/tmp/song_{id}.mp3" "/home/aa/.openclaw/workspace-content/song_{id}.mp3"
# Via message tool
message(action=send, channel="telegram", target="<chat_id>",
filePath="/home/aa/.openclaw/workspace-content/song_{id}.mp3",
caption="🎵 {song_title}")
Or send links:
message(action=send, channel="telegram", target="<chat_id>",
message=f"🎵 {song_title}\n🎧 https://suno.com/song/{song_id}\n📥 https://cdn1.suno.ai/{song_id}.mp3")
nativeInputValueSetter + input event with bubbles: true to update React statehttps://cdn1.suno.ai/{id}.mp3 (verified working)browser(action=start) then retryevaluate with nativeInputValueSetternpx claudepluginhub aaaaqwq/agi-super-team --plugin agi-super-teamAutomates Suno.com via Playwright to generate AI music with custom lyrics, manage creations, and download audio. Useful for batch song generation or integrating Suno into workflows.
Generates AI music, songs with vocals (Suno/Udio), and instrumentals (Google Lyria). Guides API selection, prompt crafting, and workflow for genres, moods, BPM.
Creates professional Suno AI music prompts with lyrics, genre strategies, metadata optimization, artist research, and character counting utilities via Python/Node.js scripts. Activates on Suno-related requests.