Skill: marjoriebroad/skillboss-4 (version 1.0.0)

--- name: skillboss description: "Swiss-knife for AI agents. 50+ models for image generation, video generation, text-to-speech, speech-to-text, music, chat, web search, document parsing, email, and SMS — with smart routing for cost saving." allowed-tools: Bash, Read metadata: {"clawdbot":{"requires":{"bins":["node"],"env":["SKILLBOSS_API_KEY"]},"primaryEnv":"SKILLBOSS_API_KEY"}} --- # SkillBoss One API key, 50+ models across providers (Bedrock, OpenAI, Vertex, ElevenLabs, Replicate, Minimax, and more). Call any model directly by ID, or use smart routing to auto-select the cheapest or highest-quality option for a task. Free trial with $0.25 credit — no signup, no browser needed. ## List Models ```bash node {baseDir}/scripts/run.mjs models node {baseDir}/scripts/run.mjs models image node {baseDir}/scripts/run.mjs models chat node {baseDir}/scripts/run.mjs models tts ``` ## Run a Model ```bash node {baseDir}/scripts/run.mjs run bedrock/claude-4-5-sonnet "Explain quantum computing" node {baseDir}/scripts/run.mjs run mm/img "A sunset over mountains" node {baseDir}/scripts/run.mjs run minimax/speech-01-turbo "Hello world" node {baseDir}/scripts/run.mjs run mm/t2v "A cat playing" ``` ## Smart Mode (auto-select best model) ```bash node {baseDir}/scripts/run.mjs tasks node {baseDir}/scripts/run.mjs task image "A sunset" node {baseDir}/scripts/run.mjs task chat "Hello" node {baseDir}/scripts/run.mjs task tts "Hello world" node {baseDir}/scripts/run.mjs task music "upbeat electronic" node {baseDir}/scripts/run.mjs task video "A cat playing" ``` ## Save Media Image/video/audio results print a URL. Save with curl: ```bash URL=$(node {baseDir}/scripts/run.mjs run mm/img "A sunset") curl -sL "$URL" -o sunset.png ``` ## Available Models (50+) | Category | Models | Details | |----------|--------|---------| | Chat | 25+ models — Claude, GPT, Gemini, DeepSeek, Qwen, HuggingFace | `chat-models.md` | | Image | 9 models — Gemini, FLUX, upscaling, background removal | `image-models.md` | | Video | 3 models — Veo, text-to-video, image-to-video | `video-models.md` | | Audio | 11 models — TTS, STT, music generation | `audio-models.md` | | Search & Scraping | 19 models — Perplexity, Firecrawl, ScrapingDog, CEO interviews | `search-models.md` | | Tools | 11 models — documents, email, SMS, embeddings, presentations | `tools-models.md` | Notes: - Get SKILLBOSS_API_KEY at https://www.skillboss.co - Use `models` to discover available models - Use `task` for smart routing (auto-selects cheapest/best model)

path: audio-models.md
content: # Audio Models

## Text-to-Speech (TTS)

| Model ID | Description |
|----------|-------------|
| `elevenlabs/eleven_multilingual_v2` | 29 languages, highest quality |
| `elevenlabs/sound_generation` | Sound effects |
| `minimax/speech-01-turbo` | Chinese optimized |
| `openai/tts-1` | Standard quality |
| `openai/tts-1-hd` | HD quality |
| `replicate/lucataco/xtts-v2` | XTTS v2 |

## Speech-to-Text (STT)

| Model ID | Description |
|----------|-------------|
| `openai/whisper-1` | Audio transcription |

## Music Generation

| Model ID | Description |
|----------|-------------|
| `replicate/elevenlabs/music` | High quality with natural vocals |
| `replicate/google/lyria-2` | DeepMind's advanced music AI |
| `replicate/meta/musicgen` | Open-source, diverse styles |
| `replicate/stability-ai/stable-audio-2.5` | Up to 3 minutes |

```bash
run.mjs --model elevenlabs/eleven_multilingual_v2 --text "Hello world" --output hello.mp3
run.mjs --model openai/whisper-1 --file recording.m4a
run.mjs --model replicate/meta/musicgen --prompt "upbeat electronic" --duration 30 --output track.mp3
```

path: chat-models.md
content: # Chat Models

| Model ID | Description |
|----------|-------------|
| `bedrock/claude-4-6-opus` | Claude 4.6 Opus — most powerful, 1M context |
| `bedrock/claude-4-5-sonnet` | Claude 4.5 Sonnet — balanced performance and cost |
| `bedrock/claude-4-5-haiku` | Claude 4.5 Haiku — fastest, simple tasks |
| `bedrock/claude-4-sonnet` | Claude 4 Sonnet |
| `bedrock/claude-3-7-sonnet` | Claude 3.7 Sonnet |
| `openai/gpt-5` | GPT-5 latest |
| `openai/gpt-5-mini` | GPT-5 Mini |
| `openai/gpt-4.1` | GPT-4.1 |
| `openai/gpt-4.1-mini` | GPT-4.1 Mini |
| `openai/gpt-4o` | GPT-4o multimodal |
| `openai/gpt-4o-mini` | GPT-4o Mini — fast and economical |
| `openai/o4-mini` | O4 Mini reasoning |
| `openai/o3-mini` | O3 Mini reasoning |
| `openai/o1` | O1 advanced reasoning |
| `vertex/gemini-2.5-pro` | Gemini 2.5 Pro |
| `vertex/gemini-2.5-flash` | Gemini 2.5 Flash — fast |
| `vertex/gemini-3-pro-preview` | Gemini 3 Pro Preview |
| `vertex/gemini-3-flash-preview` | Gemini 3 Flash Preview |
| `openrouter/deepseek/deepseek-r1` | DeepSeek R1 |
| `openrouter/google/gemini-2.5-pro-preview` | Gemini 2.5 Pro via OpenRouter |
| [REDACTED_SECRET] | Qwen 3 Coder Plus |
| `perplexity/sonar-pro` | AI search with citations |
| `perplexity/sonar` | AI search |
| `minimax/abab6.5s-chat` | Chinese optimized (fast) |
| `huggingface/{org}/{model}` | Any HuggingFace model — dynamic, no pre-registration |

```bash
run.mjs --model bedrock/claude-4-5-sonnet --prompt "Explain quantum computing"
run.mjs --model openai/gpt-4o-mini --prompt "Summarize this" --context "Be concise"
```

path: image-models.md
content: # Image Models

## Generation

| Model ID | Description |
|----------|-------------|
| `mm/img` | Default image generation |
| `vertex/gemini-2.5-flash-image-preview` | Gemini 2.5 Flash Image (preferred) |
| [REDACTED_SECRET] | Gemini 3 Pro Image |
| `replicate/black-forest-labs/flux-schnell` | FLUX Schnell — fast |
| `replicate/black-forest-labs/flux-dev` | FLUX Dev — high quality |

## Processing

| Model ID | Description |
|----------|-------------|
| `fal/upscale` | Creative upscaler (2x or 4x) |
| `fal/img2img` | Image-to-image transformation (FLUX dev) |
| `replicate/lucataco/remove-bg` | Background removal |
| [REDACTED_SECRET] | Background removal v2 |

```bash
run.mjs --model mm/img --prompt "A sunset over mountains" --output sunset.png
run.mjs --model vertex/gemini-3-pro-image-preview --prompt "A cat" --output cat.png
```

path: scripts/run.mjs
content: #!/usr/bin/env node

const API_BASE = "https://api.heybossai.com/v1";

function usage() {
  console.error(`Usage: run.mjs <command> [options]

Commands:
  models [type]        List models (chat, image, video, tts, stt, music)
  run <model> <prompt> Call a model directly
  task <type> <prompt> Auto-select best model for a task
  tasks                List task types

Examples:
  run.mjs models
  run.mjs models image
  run.mjs run bedrock/claude-4-5-sonnet "Explain quantum computing"
  run.mjs run mm/img "A sunset over mountains"
  run.mjs task image "A sunset"
  run.mjs task chat "Hello"`);
  process.exit(2);
}

const args = process.argv.slice(2);
if (args.length === 0 || args[0] === "-h" || args[0] === "--help") usage();

const [REDACTED_SECRET] ?? "").trim();
if (!apiKey) {
  console.error("Missing SKILLBOSS_API_KEY. Get one at https://www.skillboss.co");
  process.exit(1);
}

const cmd = args[0];

if (cmd === "models") {
  const body = { [REDACTED_SECRET] };
  if (args[1]) body.types = args[1];

  const resp = await fetch(`${API_BASE}/models`, {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify(body),
  });

  if (!resp.ok) {
    const text = await resp.text().catch(() => "");
    throw new Error(`Failed (${resp.status}): ${text}`);
  }
  console.log(JSON.stringify(await resp.json(), null, 2));

} else if (cmd === "run" && args[1] && args[2]) {
  const model = args[1];
  const prompt = args[2];

  const inputs = model.match(/tts|speech|eleven/i)
    ? { text: prompt, input: prompt, voice: "alloy" }
    : model.match(/whisper|stt/i)
    ? { text: prompt }
    : model.match(/img|image|flux|gemini.*image|video|veo/i)
    ? { prompt }
    : { messages: [{ role: "user", content: prompt }] };

  const resp = await fetch(`${API_BASE}/run`, {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({ [REDACTED_SECRET], model, inputs }),
  });

  if (!resp.ok) {
    const text = await resp.text().catch(() => "");
    throw new Error(`API failed (${resp.status}): ${text}`);
  }

  const data = await resp.json();
  if (data._balance_warning) {
    const w = data._balance_warning;
    console.error(`[skillboss] ${typeof w === "string" ? w : w.message || JSON.stringify(w)}`);
  }

  const r = data.result || data;
  const url = r.image_url || r.video_url || r.audio_url || r.url
    || r.data?.[0] || r.generated_images?.[0] || null;
  if (url) {
    console.log(url);
  } else if (r.choices?.[0]?.message?.content) {
    console.log(r.choices[0].message.content);
  } else if (r.content?.[0]?.text) {
    console.log(r.content[0].text);
  } else if (r.text) {
    console.log(r.text);
  } else {
    console.log(JSON.stringify(data, null, 2));
  }

} else if (cmd === "task" && args[1] && args[2]) {
  const type = args[1];
  const prompt = args[2];

  const inputs = type === "tts"
    ? { text: prompt, input: prompt, voice: "alloy" }
    : type === "chat"
    ? { messages: [{ role: "user", content: prompt }] }
    : { prompt };

  const resp = await fetch(`${API_BASE}/pilot`, {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({ [REDACTED_SECRET], type, inputs }),
  });

  if (!resp.ok) {
    const text = await resp.text().catch(() => "");
    throw new Error(`API failed (${resp.status}): ${text}`);
  }

  const data = await resp.json();
  if (data._balance_warning) {
    const w = data._balance_warning;
    console.error(`[skillboss] ${typeof w === "string" ? w : w.message || JSON.stringify(w)}`);
  }

  const r = data.result || data;
  const url = r.image_url || r.video_url || r.audio_url || r.url
    || r.data?.[0] || r.generated_images?.[0] || null;
  if (url) {
    console.log(url);
  } else if (r.choices?.[0]?.message?.content) {
    console.log(r.choices[0].message.content);
  } else if (r.content?.[0]?.text) {
    console.log(r.content[0].text);
  } else if (r.text) {
    console.log(r.text);
  } else {
    console.log(JSON.stringify(data, null, 2));
  }

} else if (cmd === "tasks") {
  const resp = await fetch(`${API_BASE}/pilot`, {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({ [REDACTED_SECRET], discover: true }),
  });

  if (!resp.ok) {
    const text = await resp.text().catch(() => "");
    throw new Error(`Failed (${resp.status}): ${text}`);
  }
  console.log(JSON.stringify(await resp.json(), null, 2));

} else {
  console.error(`Unknown command: ${cmd}`);
  usage();
}


path: search-models.md
content: # Search & Scraping Models

## Web Search

| Model ID | Description |
|----------|-------------|
| `perplexity/sonar-pro` | AI search with citations |
| `perplexity/sonar` | AI search |
| `linkup/search` | Structured web search (standard) |
| `linkup/search-deep` | Structured web search (deep) |
| `linkup/fetch` | URL-to-markdown fetcher |
| `scrapingdog/google_search` | Google search results |

## Web Scraping

| Model ID | Description |
|----------|-------------|
| `firecrawl/scrape` | Single page scraping |
| `firecrawl/extract` | AI structured extraction |
| `firecrawl/map` | Website sitemap |
| `scrapingdog/screenshot` | Web page screenshot |
| `scrapingdog/google_images` | Google Images |
| `scrapingdog/google_news` | Google News |
| `scrapingdog/amazon_product` | Amazon product data |
| `scrapingdog/amazon_search` | Amazon search results |
| `scrapingdog/linkedin_person` | LinkedIn profile |
| `scrapingdog/linkedin_company` | LinkedIn company |
| `scrapingdog/youtube_search` | YouTube search |

## CEO Interviews

| Model ID | Description |
|----------|-------------|
| `ceointerviews/get_feed` | CEO/executive conversation transcripts |
| `ceointerviews/get_quotes` | Notable quotes from CEOs and executives |

path: tools-models.md
content: # Tool Models

## Document Processing (Reducto)

| Model ID | Description |
|----------|-------------|
| `reducto/parse` | Parse PDF/DOCX to markdown |
| `reducto/extract` | Extract structured data with JSON schema |

## Email

| Model ID | Description |
|----------|-------------|
| `email/send` | Send single email |
| `email/batch` | Send batch emails |

## SMS (Prelude)

| Model ID | Description |
|----------|-------------|
| `prelude/verify-send` | Send OTP verification code |
| `prelude/verify-check` | Check OTP verification code |
| `prelude/notify-send` | Send SMS notification |
| `prelude/notify-batch` | Batch SMS notifications |

## Embeddings

| Model ID | Description |
|----------|-------------|
| `openai/text-embedding-3-small` | Small embeddings |
| `openai/text-embedding-3-large` | Large embeddings |

## Presentations

| Model ID | Description |
|----------|-------------|
| `gamma/generation` | AI presentation/slide generation |

path: video-models.md
content: # Video Models

| Model ID | Description |
|----------|-------------|
| `mm/t2v` | Default text-to-video |
| `mm/i2v` | Default image-to-video |
| `vertex/veo-3.1-fast-generate-preview` | Google Veo 3.1 |

```bash
run.mjs --model mm/t2v --prompt "A cat playing" --output video.mp4
run.mjs --model mm/i2v --prompt "Zoom in slowly" --image "https://example.com/photo.jpg" --output video.mp4
```

Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)