Skip to main content

Skills System

The Bindu Skills System provides rich agent capability advertisement for intelligent orchestration and agent discovery. Inspired by Claude’s skills architecture, it enables agents to provide detailed documentation about their capabilities for orchestrators to make informed routing decisions.

What are Skills?

Skills in Bindu serve as rich advertisement metadata that help orchestrators:
  • 🔍 Discover the right agent for a task
  • 📖 Understand detailed capabilities and limitations
  • Validate requirements before execution
  • 📊 Estimate performance and resource needs
  • 🔗 Chain multiple agents intelligently
Skills are not executable code—they’re structured metadata that describe what your agent can do.

Architecture

How It Works

  1. Agent defines skills - YAML files describe capabilities
  2. Skills API exposes - REST endpoints provide skill information
  3. Orchestrator discovers - Queries available skills
  4. Capability matching - Finds agents that meet requirements
  5. Task routing - Sends tasks to optimal agent

Why Skills Matter

For Agent Developers

  • Clear documentation - Define capabilities in one place
  • Standardized format - YAML-based, human-readable
  • Easy maintenance - Update skills without code changes
  • Better discovery - Help users find your agent

For Orchestrators

  • Intelligent routing - Match tasks to the right agent
  • Capability validation - Check requirements before execution
  • Performance estimation - Predict resource needs
  • Multi-agent workflows - Chain agents based on capabilities

For Users

  • Transparency - Understand what agents can do
  • Reliability - Know limitations upfront
  • Better results - Tasks routed to optimal agents

Skill Definition Format

Bindu uses YAML files as the single source of truth for skill definitions.

Benefits of YAML

  • Human-readable - Easy to write and understand
  • Structured data - Programmatic access for orchestrators
  • Rich documentation - Everything in one place
  • LLM-friendly - Easy for AI to parse and understand
  • No duplication - Single source of truth

Directory Structure

examples/skills/
├── text-analysis/
│   └── skill.yaml
├── image-generation/
│   └── skill.yaml
└── data-processing/
    └── skill.yaml

Basic Skill Example

Here’s a minimal skill definition:
# Basic Metadata
id: text-analysis-v1
name: text-analysis
version: 1.0.0
author: [email protected]

# Description
description: |
  Analyzes text for sentiment, entities, and key phrases.
  Supports multiple languages and formats.

# Tags
tags:
  - nlp
  - text-analysis
  - sentiment

# Input/Output Modes
input_modes:
  - text/plain
  - application/json

output_modes:
  - application/json

# Example Queries
examples:
  - "Analyze the sentiment of this review"
  - "Extract entities from this document"
  - "Identify key phrases in this text"

# Capabilities
capabilities_detail:
  sentiment_analysis:
    supported: true
    types:
      - positive
      - negative
      - neutral
    limitations: "Supports English only"

  entity_recognition:
    supported: true
    types:
      - person
      - organization
      - location

# Requirements
requirements:
  packages:
    - transformers>=4.0.0
    - torch>=2.0.0
  min_memory_mb: 512

# Performance
performance:
  avg_processing_time_ms: 2000
  max_file_size_mb: 10
  concurrent_requests: 5

Complete Skill Structure

A full skill definition includes:

1. Basic Metadata

id: skill-id-v1
name: skill-name
version: 1.0.0
author: [email protected]
description: |
  What this skill does

2. Tags and Modes

tags:
  - category
  - feature

input_modes:
  - text/plain
  - application/json

output_modes:
  - application/json

3. Capabilities Detail

capabilities_detail:
  feature_1:
    supported: true
    types:
      - type_a
      - type_b
    limitations: "Optional limitations"

  feature_2:
    supported: false
    planned_version: "2.0.0"

4. Requirements

requirements:
  packages:
    - package1>=1.0.0
    - package2>=2.0.0
  system:
    - system-dependency
  min_memory_mb: 512

5. Performance Metrics

performance:
  avg_processing_time_ms: 2000
  max_file_size_mb: 50
  concurrent_requests: 5
  memory_per_request_mb: 500

6. Documentation

documentation:
  overview: |
    Comprehensive description of the skill

  use_cases:
    when_to_use:
      - Scenario 1
      - Scenario 2
    when_not_to_use:
      - Anti-pattern 1

  input_structure: |
    Expected input format with examples

  output_format: |
    Output format with examples

  error_handling:
    - "Error type 1: How it's handled"

  examples:
    - title: "Example 1"
      input: "input data"
      output: "output data"

  best_practices:
    for_developers:
      - "Best practice 1"
    for_orchestrators:
      - "Routing guideline 1"

Creating a New Skill

1

Create Directory

mkdir -p examples/skills/my-skill
2

Create skill.yaml

cd examples/skills/my-skill
touch skill.yaml
3

Define Skill

id: my-skill-v1
name: my-skill
version: 1.0.0
author: [email protected]

description: |
  What your skill does

tags:
  - relevant
  - tags

input_modes:
  - text/plain

output_modes:
  - application/json

capabilities_detail:
  main_feature:
    supported: true
    description: "What it does"

requirements:
  packages: []
  min_memory_mb: 100

performance:
  avg_processing_time_ms: 500
  concurrent_requests: 10

documentation:
  overview: |
    Detailed description

  use_cases:
    when_to_use:
      - Use case 1
    when_not_to_use:
      - Anti-pattern 1
4

Reference in Config

Add to your agent config:
{
  "skills": [
    "examples/skills/my-skill"
  ]
}
5

Test

# Start agent
python your_agent.py

# Test endpoints
curl http://localhost:3773/agent/skills
curl http://localhost:3773/agent/skills/my-skill-v1
curl http://localhost:3773/agent/skills/my-skill-v1/documentation

API Endpoints

List All Skills

GET /agent/skills
Response:
{
  "skills": [
    {
      "id": "text-analysis-v1",
      "name": "text-analysis",
      "version": "1.0.0",
      "description": "Analyzes text for sentiment...",
      "tags": ["nlp", "text-analysis"]
    }
  ]
}

Get Skill Details

GET /agent/skills/{skill_id}
Response:
{
  "id": "text-analysis-v1",
  "name": "text-analysis",
  "version": "1.0.0",
  "capabilities_detail": {...},
  "requirements": {...},
  "performance": {...}
}

Get Skill Documentation

GET /agent/skills/{skill_id}/documentation
Response:
{
  "overview": "Comprehensive description...",
  "use_cases": {...},
  "examples": [...]
}

Orchestrator Integration

Discovery Example

import requests

# Discover available skills
response = requests.get("http://agent:3773/agent/skills")
skills = response.json()["skills"]

# Find skills with specific tags
nlp_skills = [s for s in skills if "nlp" in s["tags"]]

# Get detailed capabilities
for skill in nlp_skills:
    details = requests.get(
        f"http://agent:3773/agent/skills/{skill['id']}"
    ).json()
    
    if details["capabilities_detail"]["sentiment_analysis"]["supported"]:
        print(f"Found sentiment analysis: {skill['name']}")

Capability Matching

def find_agent_for_task(task_requirements):
    """Find best agent based on requirements."""
    agents = discover_agents()
    
    for agent in agents:
        skills = get_agent_skills(agent)
        
        for skill in skills:
            if matches_requirements(skill, task_requirements):
                return agent, skill
    
    return None, None

LLM-Based Orchestration

# Provide skills to LLM for routing
skills_context = """
Available agents and their skills:

1. Text Analysis Agent
   - Sentiment analysis (English only)
   - Entity recognition
   - Key phrase extraction
   - Avg time: 2s, Max size: 10MB

2. Translation Agent
   - 50+ language pairs
   - Document translation
   - Avg time: 5s, Max size: 5MB
"""

# LLM can now make informed routing decisions

Best Practices

For Skill Authors

  1. Be specific - Clearly define capabilities and limitations
  2. Include examples - Show real usage scenarios
  3. Document errors - Explain how errors are handled
  4. Update versions - Increment version on changes
  5. Test thoroughly - Validate YAML and endpoints

For Agent Developers

  1. Keep skills updated - Reflect actual capabilities
  2. Use semantic versioning - Major.Minor.Patch
  3. Provide rich documentation - Help orchestrators understand
  4. Include performance metrics - Enable capacity planning
  5. Tag appropriately - Improve discoverability

For Orchestrators

  1. Cache skill data - Reduce API calls
  2. Validate before routing - Check requirements match
  3. Consider performance - Route based on metrics
  4. Handle failures - Have fallback strategies
  5. Monitor usage - Track which skills are used

Configuration

{
  "name": "my-agent",
  "skills": [
    "examples/skills/text-analysis",
    "examples/skills/data-processing"
  ]
}

Inline Skills (Legacy)

{
  "name": "my-agent",
  "capabilities": {
    "text-analysis": {
      "description": "Analyzes text",
      "tags": ["nlp"]
    }
  }
}

Mixed Approach

{
  "name": "my-agent",
  "skills": [
    "examples/skills/text-analysis"
  ],
  "capabilities": {
    "legacy-skill": {
      "description": "Old format"
    }
  }
}

Troubleshooting

Check:
  • Path is correct in config
  • skill.yaml exists in directory
  • YAML syntax is valid
  • Agent has read permissions
Solution:
  • Validate YAML syntax online
  • Check indentation (use spaces, not tabs)
  • Ensure all required fields are present
  • Use quotes for special characters
Cause: Documentation section not definedSolution: Add documentation section to skill.yaml
Cause: Fields not exposed in APISolution: Check API endpoint returns expected fields

Examples

Text Analysis Skill

id: text-analysis-v1
name: text-analysis
version: 1.0.0
author: [email protected]

description: |
  Advanced text analysis with sentiment, entities, and key phrases

tags:
  - nlp
  - sentiment
  - entities

capabilities_detail:
  sentiment_analysis:
    supported: true
    types: [positive, negative, neutral]
    languages: [en]
  
  entity_recognition:
    supported: true
    types: [person, org, location]

Image Generation Skill

id: image-gen-v1
name: image-generation
version: 1.0.0
author: [email protected]

description: |
  Generate images from text descriptions

tags:
  - image
  - generation
  - ai-art

capabilities_detail:
  text_to_image:
    supported: true
    styles: [realistic, artistic, cartoon]
    max_resolution: "1024x1024"

performance:
  avg_processing_time_ms: 15000
  max_concurrent_requests: 2

Next Steps


Resources