Multi Tool Orchestration Skill logo

Multi Tool Orchestration Skill

Community
zeenie-ai
multi-tool-orchestration-skill

Coordinate multiple tools together for complex multi-step tasks

Overview

Publisherzeenie-ai
RepositoryOpenCompany
Skill namemulti-tool-orchestration-skill
Stars
912
Forks
137
Bundled files
Instructions only
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by zeenie-ai on GitHub. Read the source before you install it.

Installation

Install the Multi Tool Orchestration Skill AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/zeenie-ai/OpenCompany.git /tmp/OpenCompany
mkdir -p .claude/skills
cp -r /tmp/OpenCompany/server/skills/autonomous/multi-tool-orchestration-skill .claude/skills/multi-tool-orchestration-skill
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Multi Tool Orchestration Skill in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Multi Tool Orchestration Skill on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Multi Tool Orchestration Skill is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Multi-Tool Orchestration Pattern

You are an agent skilled at coordinating multiple tools together to accomplish complex tasks that require combining different capabilities.

Why Multi-Tool Orchestration?

Complex real-world tasks often require multiple tools working together:

  • Data gathering (web_search, http_request) + Processing (python_code) + Delivery (whatsapp_send)
  • Time awareness (current_time) + Calculation (calculator) + Scheduling (scheduler)
  • Location (gmaps) + Communication (social_send) + Memory (memory)

Orchestration Patterns

Pattern 1: Sequential Pipeline

Tools execute in order, each passing results to the next:

┌─────────────────────────────────────────────────────────────┐
│              SEQUENTIAL PIPELINE                             │
├─────────────────────────────────────────────────────────────┤
│                                                              │
│   [web_search] ──▶ [python_code] ──▶ [whatsapp_send]       │
│       │                │                   │                │
│       │                │                   │                │
│   "Find stock      "Calculate         "Send summary        │
│    prices"          average"           to user"            │
│       │                │                   │                │
│       ▼                ▼                   ▼                │
│   Raw data ──────▶ Processed ──────▶ Delivered             │
│                                                              │
└─────────────────────────────────────────────────────────────┘
Example: Stock Price Alert

Task: "Get the current prices of AAPL, GOOGL, and MSFT, calculate the average, and send me a WhatsApp message with the results"

Orchestration Steps:

  1. Gather Data (web_search):
json
{"tool": "web_search", "query": "AAPL GOOGL MSFT stock price today"}
  1. Process Data (python_code):
python
import json

# Data from previous step
prices = {"AAPL": 185.50, "GOOGL": 141.25, "MSFT": 378.90}

# Calculate statistics
average = sum(prices.values()) / len(prices)
highest = max(prices.items(), key=lambda x: x[1])
lowest = min(prices.items(), key=lambda x: x[1])

output = {
    "prices": prices,
    "average": round(average, 2),
    "highest": {"symbol": highest[0], "price": highest[1]},
    "lowest": {"symbol": lowest[0], "price": lowest[1]},
    "summary": f"Average: ${average:.2f} | High: {highest[0]} | Low: {lowest[0]}"
}
print(json.dumps(output, indent=2))
  1. Deliver Result (whatsapp_send):
json
{
  "tool": "whatsapp_send",
  "recipient": "user",
  "message": "Stock Update:\n- AAPL: $185.50\n- GOOGL: $141.25\n- MSFT: $378.90\n\nAverage: $235.22"
}

Pattern 2: Parallel Gather, Sequential Process

Gather data from multiple sources simultaneously, then process together:

┌─────────────────────────────────────────────────────────────┐
│           PARALLEL GATHER + SEQUENTIAL PROCESS               │
├─────────────────────────────────────────────────────────────┤
│                                                              │
│   [web_search: weather] ──────┐                             │
│                               │                              │
│   [web_search: news] ─────────┼──▶ [python_code] ──▶ Output │
│                               │     "Combine &               │
│   [current_time] ─────────────┘      Format"                │
│                                                              │
│   All three run independently, results combined             │
│                                                              │
└─────────────────────────────────────────────────────────────┘
Example: Daily Briefing

Task: "Create a morning briefing with weather, top news, and today's schedule"

Orchestration:

python
import json
from datetime import datetime

# Results from parallel tool calls (simulated)
weather_data = {"temp": 72, "condition": "Sunny", "high": 78, "low": 65}
news_data = [
    {"title": "Tech stocks rally", "source": "Reuters"},
    {"title": "New AI breakthrough", "source": "TechCrunch"}
]
current_time = datetime.now()

# Combine into briefing
briefing = {
    "date": current_time.strftime("%A, %B %d, %Y"),
    "time": current_time.strftime("%I:%M %p"),
    "weather": {
        "summary": f"{weather_data['condition']}, {weather_data['temp']}F",
        "range": f"High: {weather_data['high']}F, Low: {weather_data['low']}F"
    },
    "news": [f"- {n['title']} ({n['source']})" for n in news_data],
    "formatted": None
}

# Create formatted output
briefing["formatted"] = f"""
Good Morning! {briefing['date']}

WEATHER
{briefing['weather']['summary']}
{briefing['weather']['range']}

TOP NEWS
{chr(10).join(briefing['news'])}
"""

print(json.dumps(briefing, indent=2))

Pattern 3: Conditional Branching

Choose different tools based on intermediate results:

┌─────────────────────────────────────────────────────────────┐
│              CONDITIONAL BRANCHING                           │
├─────────────────────────────────────────────────────────────┤
│                                                              │
│                    [initial_check]                          │
│                          │                                   │
│              ┌───────────┼───────────┐                      │
│              ▼           ▼           ▼                      │
│         Condition A  Condition B  Condition C               │
│              │           │           │                      │
│              ▼           ▼           ▼                      │
│         [tool_A]     [tool_B]    [tool_C]                  │
│              │           │           │                      │
│              └───────────┼───────────┘                      │
│                          ▼                                   │
│                    [final_tool]                             │
│                                                              │
└─────────────────────────────────────────────────────────────┘
Example: Smart Communication

Task: "Contact John with the meeting update - use the best available channel"

Orchestration Logic:

1. CHECK availability:
   - Is John online on WhatsApp? → Use whatsapp_send
   - Is John's email available? → Use email (via http_request)
   - Neither? → Schedule reminder for later

2. EXECUTE chosen channel

3. CONFIRM delivery status

Pattern 4: Iterative Refinement

Use tool results to improve subsequent tool calls:

┌─────────────────────────────────────────────────────────────┐
│              ITERATIVE REFINEMENT                            │
├─────────────────────────────────────────────────────────────┤
│                                                              │
│   [web_search v1] ──▶ [python_code: analyze]                │
│         │                      │                             │
│         │              "Results incomplete"                  │
│         │                      │                             │
│         │                      ▼                             │
│         │            [web_search v2]                        │
│         │            (refined query)                        │
│         │                      │                             │
│         │              "Results better"                      │
│         │                      │                             │
│         └──────────────────────┼──▶ [python_code: combine]  │
│                                │                             │
│                                ▼                             │
│                          Final Result                        │
│                                                              │
└─────────────────────────────────────────────────────────────┘
Example: Research Task

Task: "Find comprehensive information about quantum computing applications in finance"

Iteration 1:

json
{"tool": "web_search", "query": "quantum computing finance applications"}

Result: General overview, but missing specific use cases

Iteration 2 (refined):

json
{"tool": "web_search", "query": "quantum computing portfolio optimization risk analysis"}

Result: Specific applications found

Combine with Code:

python
import json

# Results from both searches
search_1 = ["Overview of quantum finance", "Major players"]
search_2 = ["Portfolio optimization algorithms", "Risk modeling with qubits"]

combined = {
    "topic": "Quantum Computing in Finance",
    "general": search_1,
    "specific_applications": search_2,
    "summary": "Quantum computing in finance focuses on portfolio optimization and risk analysis..."
}
print(json.dumps(combined, indent=2))

Complex Multi-Tool Examples

Example 1: Travel Planning Assistant

Task: "Plan a trip from New York to San Francisco next week, find hotels, and send me an itinerary"

Tools Used: current_time, web_search, python_code, whatsapp_send

Orchestration:

Step 1: Get current date (current_time)
Step 2: Calculate "next week" dates (python_code)
Step 3: Search for flights (web_search: "NYC to SFO flights [dates]")
Step 4: Search for hotels (web_search: "San Francisco hotels [dates]")
Step 5: Combine and format itinerary (python_code)
Step 6: Send to user (whatsapp_send)

Code for Step 5:

python
import json
from datetime import datetime, timedelta

# Inputs from previous steps
today = datetime.now()
trip_start = today + timedelta(days=7)
trip_end = trip_start + timedelta(days=3)

flights = [
    {"airline": "United", "departure": "8:00 AM", "price": "$350"},
    {"airline": "Delta", "departure": "11:30 AM", "price": "$380"}
]

hotels = [
    {"name": "Marriott Union Square", "price": "$250/night", "rating": 4.5},
    {"name": "Hilton Financial District", "price": "$280/night", "rating": 4.3}
]

itinerary = {
    "trip": {
        "from": "New York (JFK)",
        "to": "San Francisco (SFO)",
        "dates": f"{trip_start.strftime('%b %d')} - {trip_end.strftime('%b %d, %Y')}"
    },
    "recommended_flight": flights[0],
    "recommended_hotel": hotels[0],
    "estimated_total": "$1,100",
    "formatted_message": f"""
Travel Itinerary: NYC → SFO

DATES
{trip_start.strftime('%b %d')} - {trip_end.strftime('%b %d, %Y')}

FLIGHT (Recommended)
{flights[0]['airline']} - {flights[0]['departure']} - {flights[0]['price']}

HOTEL (Recommended)
{hotels[0]['name']}
{hotels[0]['price']} | Rating: {hotels[0]['rating']}/5

ESTIMATED TOTAL: $1,100
"""
}

print(json.dumps(itinerary, indent=2))

Example 2: Automated Report Generation

Task: "Generate a weekly sales report with charts and email it to the team"

Tools Used: http_request (API), python_code, http_request (email)

Orchestration:

Step 1: Fetch sales data from API (http_request)
Step 2: Process and analyze data (python_code)
Step 3: Generate text summary (python_code)
Step 4: Format as HTML report (python_code)
Step 5: Send via email API (http_request)

Example 3: Smart Home Automation

Task: "When I get home, turn on the lights, set temperature to 72F, and play my evening playlist"

Tools Used: location, http_request (smart home API), python_code

Orchestration:

Step 1: Check current location (location tool)
Step 2: Calculate distance to home (python_code)
Step 3: If within 1 mile:
        ├── Turn on lights (http_request to smart home API)
        ├── Set thermostat (http_request to smart home API)
        └── Start playlist (http_request to music API)
Step 4: Confirm all actions (python_code)

Orchestration with Delegation

For complex multi-tool tasks, delegate sub-tasks to yourself:

json
{
  "task": "Continue: Execute delivery phase of travel planning",
  "context": "Iteration: 3/4
Previous: Gathered flight and hotel data
Current state: Itinerary formatted and ready
Data: {flight: United $350, hotel: Marriott $250/night}
Next: Send itinerary via WhatsApp and confirm delivery"
}

Tool Combination Matrix

Task TypePrimary ToolsSupporting Tools
Researchweb_search, http_requestpython_code (analysis)
Calculationcalculator, python_codecurrent_time
Communicationwhatsapp_send, http_requestpython_code (formatting)
Schedulingcurrent_time, calculatorpython_code (date math)
Data Processingpython_code, javascript_codehttp_request (APIs)
Location-basedgmaps, locationpython_code, whatsapp_send

Best Practices

1. Plan Before Executing

Before calling tools, outline:
1. What data do I need?
2. What tools provide that data?
3. What order should they run?
4. How will results combine?

2. Minimize Tool Calls

BAD:  web_search("AAPL price") → web_search("GOOGL price") → web_search("MSFT price")
GOOD: web_search("AAPL GOOGL MSFT stock prices today")

3. Use Code for Complex Logic

Instead of multiple calculator calls:
calculator(10 * 5) → calculator(50 + 20) → calculator(70 / 2)

Use python_code:
result = ((10 * 5) + 20) / 2  # Single execution

4. Pass Context Between Tools

Tool 1 output: {"temperature": 72, "unit": "F"}
Tool 2 input: Use the temperature (72F) in the message

5. Handle Partial Failures

If tool 2 of 4 fails:
- Continue with remaining tools if possible
- Use partial data from successful tools
- Report what succeeded and what failed

Anti-Patterns

1. Serial When Parallel is Possible

// Unnecessary waiting
await web_search("weather")
await web_search("news")     // Could run in parallel
await web_search("stocks")   // Could run in parallel

2. Over-Orchestration

// Don't use 5 tools when 1 suffices
Task: "What's 2 + 2?"
BAD:  current_time → python_code → calculator → format → return
GOOD: calculator(2 + 2) or just respond "4"

3. Ignoring Tool Results

// Always use the actual results
BAD:  Call web_search, ignore result, make up answer
GOOD: Call web_search, process result, return based on actual data

Frequently asked questions

What does the Multi Tool Orchestration Skill AI skill do?

Coordinate multiple tools together for complex multi-step tasks

Why use Multi Tool Orchestration Skill on TypingMind?

Because you install it once and use it with any model. Multi Tool Orchestration Skill is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Multi Tool Orchestration Skill in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/zeenie-ai/OpenCompany/tree/main/server/skills/autonomous/multi-tool-orchestration-skill. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Multi Tool Orchestration Skill?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Multi Tool Orchestration Skill?

As many as you like. As long as a model supports skills, you can use Multi Tool Orchestration Skill with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Multi Tool Orchestration Skill AI skill free?

Yes. It is published on GitHub by zeenie-ai under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇