# Tool Orchestration

> inference shell provides hundreds of pre-built integrations as tools for your agents. oauth flows, token refresh, and credential management are handled by the platform.

**URL:** https://inference.sh/docs/runtime/tool-orchestration
**Last updated:** 2026-09-24

---

inference shell provides hundreds of pre-built integrations as tools for your agents. oauth flows, token refresh, and credential management are handled by the platform.

## the integration tax

every tool your agent needs is an integration project:

- implement the api calls
- handle authentication (often oauth)
- manage token storage and refresh
- handle rate limits and errors
- maintain as apis change

multiply this by every tool your agent needs. the integration work can exceed the agent work.

## what the runtime provides

on inference shell, integrations are ready to use:

| category | examples |
|----------|----------|
| communication | gmail, slack, discord, x |
| productivity | google calendar, notion, github |
| data | google sheets, databases, file storage |
| search | web search, knowledge bases |
| ai | image generation, transcription |

connect once in the web app. your agents use them without additional code.

## managed authentication

for each integration:

- oauth flows are handled
- tokens are stored securely (aes-256-gcm)
- refresh happens automatically
- credentials are injected at runtime

your agent code never touches credentials.

## structured execution

tool calls are:

- logged with full inputs and outputs
- timed for performance analysis
- retried on transient failures
- subject to approval gates when configured

## building custom tools

need something not in the library? build custom tools with the sdk:

```python
from inferencesh import Tool

@Tool
def my_custom_tool(param: str) -> str:
    """description for the agent"""
    # your implementation
    return result
```

custom tools get the same runtime benefits: logging, retries, approval gates.

## tool types in one agent

Agents combine several tool kinds. The runtime schedules them through the same dependency graph — parallel when the model emits multiple calls in one turn, sequential across turns.

| Type | What it runs | Typical use |
|------|----------------|-------------|
| **Grid / app** | inference shell app (`POST /run`) | Image gen, transcription, your deployed apps |
| **Flow** | Multi-step flow as one tool | Pipelines you built in the flow editor |
| **Call** | HTTP request you define (REST APIs) | Internal services, third-party APIs with secrets |
| **Connector (MCP)** | Tool on a connected MCP server | Linear, Slack, GitHub, etc. |
| **Sub-agent** | Another agent in its own chat | Research, writing, specialized workers |
| **Webhook** | Your HTTP endpoint (async callback) | Email, tickets, custom integrations |

**Call** and **connector** tools use workspace secrets or OAuth, and credentials never appear in the model context. **Sub-agent** and **app** runs are async: the parent turn waits at a sync barrier until every call in that turn completes.

→ [Call tools](/docs/api/agent/call-tools)  
→ [Connectors](/docs/connectors/overview)  
→ [Sub-agents](/docs/agents/sub-agents) — parallel fan-out and join behavior  
→ [Adding tools](/docs/agents/adding-tools)

## learn more

- [adding tools to agents](/docs/agents/adding-tools)
- [building custom apps](/docs/extend/creating-app)
- [blog: the tool integration tax](https://inference.sh/blog/tools/integration-tax)

