Community

Extend Zubo with community skills

Browse, search, and install skills built by the community. One command to add new capabilities to your agent.

Loading skills...
Build

Create your own skill

Skills are self-contained TypeScript modules. Build one in four steps.

1

Scaffold

Run zubo skills new to generate a skill directory with a handler.ts template.

2

Define

Export a skill config object with your tool's name, description, and parameters.

3

Implement

Write your logic as the default export function. Access inputs and return a JSON string.

4

Publish

Run zubo publish to submit to the skill registry. Others can install with one command.

handler.ts
export const skill = { name: "my_skill", description: "A brief description of what this skill does", params: { query: { type: "string", required: true }, limit: { type: "number" } } }; export default async function (input): Promise<string> { // your logic here return JSON.stringify({ result: "..." }); }
AI-Powered

Build with AI

Copy this prompt and send it to your Zubo agent to build a new skill on the fly.

Skill Builder Prompt
I want to build a Zubo skill. A skill is a single TypeScript file (handler.ts)
that lives in its own directory under ~/.zubo/skills/.

The file must:
1. Export a `skill` config object with name, description, and params
2. Export a default async function that takes input and returns a string

Format:

  export const skill = {
    name: "tool_name",           // lowercase + underscores only, [a-z0-9_]+
    description: "What it does", // shown to the AI to decide when to use it
    params: {
      param_name: { type: "string", description: "...", required: true },
      optional_param: { type: "number", description: "..." }
    }
  };

  export default async function (input: Record<string, unknown>): Promise<string> {
    const param_name = input.param_name as string;
    // your logic here
    return JSON.stringify({ result: "..." });
  }

Example — a complete working skill:

  export const skill = {
    name: "word_count",
    description: "Count words, characters, and sentences in text",
    params: {
      text: { type: "string", description: "The text to analyze", required: true }
    }
  };

  export default async function (input: Record<string, unknown>): Promise<string> {
    const text = input.text as string;
    const words = text.split(/\s+/).filter(Boolean).length;
    const chars = text.length;
    const sentences = text.split(/[.!?]+/).filter(Boolean).length;
    return JSON.stringify({ words, characters: chars, sentences });
  }

Rules:
- name must match [a-z0-9_]+ (no hyphens, no uppercase)
- The function must return a JSON string
- You can use fetch(), Bun APIs, and any built-in Node/Bun modules
- For API keys, read from process.env (e.g., process.env.MY_API_KEY)
- Keep it focused — one tool, one purpose

Please build me a skill that: [DESCRIBE WHAT YOU WANT]

Ready to build your perfect AI agent?

Install skills with one command. Build your own in minutes.