Cheapest model per turn
Drop a SmartProvider into your score. Every turn classified, dispatched to the right tier. Destructive-tool aware. Budget-aware. No SaaS gateway.
Sixteen official voices, 116 tools, an inbox that reaches users on Telegram / Slack / Discord / email / WhatsApp, scheduled jobs that deliver their reply on the same channels, self-improving skills synthesised from observed trajectories, destructive operations gated by default, a smart router that picks the cheapest model per turn, hard cost budgets, and one-command deploys to Docker, Railway, Fly, Modal, and Daytona. The plugin ecosystem is the framework.
tutti-ai run to a containerised service in one command.
Drop a SmartProvider into your score. Every turn classified, dispatched to the right tier. Destructive-tool aware. Budget-aware. No SaaS gateway.
max_cost_usd_per_day throws BudgetExceededError. tutti-ai analyze costs shows top runs, daily sparkline, optimisation hints.
tutti-ai deploy --target railway. Pre-flight secrets scanner blocks plaintext API keys. deploy status / logs / rollback wraps the platform CLI.
@tuttiai/skills turns repeated tool sequences into operator-reviewed skills the agent calls as one tool. Schedules deliver their reply to Slack, email, Discord, Telegram, or WhatsApp. And tutti-ai deploy --target modal ships scale-to-zero in one command — with a verify-hibernate precheck so cold starts don't drop state on the floor.
@tuttiai/inbox wires Telegram, Slack, Discord, email and WhatsApp to one agent. Allow-list, per-user rate limit, per-chat queue, and identity linking applied uniformly above the adapter.
Each call is classified by content, dispatched to the right tier, and emitted as a span — so you can audit every routing decision and every dollar.
Your whole agent system in one typed file. Reviewed in PRs, versioned with your code.
// tutti.score.ts import { defineScore } from '@tuttiai/core' export default defineScore(({ agents: { reviewer: { voice: 'github', model: 'claude-opus-4-7', guardrails: ['read-only', 'no-secrets'], }, }, })
Secret redaction, path sandboxing, prompt-injection filters, per-voice permissions. Enforced at the runtime boundary, not in a README.
anyClaude, GPT, Gemini, Llama, Mistral, OpenAI-compatible endpoints. No vendor lock-in, ever.
OTEL out of the box. Replay any run, diff any output, export to your warehouse.
Install @tuttiai/mcp and wrap any Model Context Protocol server as a typed Tutti voice. Tools auto-discovered, permissions enforced.
$ tutti-ai add mcp ✓ installed @tuttiai/mcp · wrap any MCP server
Write a tutti.score.ts that names your agents, their voices, and their permissions.
$ tutti-ai init my-agent Pull voices from npm — or write your own as a typed Voice + Tool implementation.
$ tutti-ai add github slack One CLI command, streamed output, replayable traces. REPL, one-shot, or HTTP server.
$ tutti-ai run reviewer -p "review PR #42" One agent fetches PRs from GitHub, reads the changed files from the working tree, and posts a structured review. Posting is destructive and gated by HITL when enabled.
import { defineScore, AnthropicProvider } from '@tuttiai/core'
import { GitHubVoice } from '@tuttiai/github'
import { FilesystemVoice } from '@tuttiai/filesystem'
export default defineScore({
provider: new AnthropicProvider(),
agents: {
reviewer: {
name: 'reviewer',
model: 'claude-sonnet-4-6',
system_prompt:
'You review GitHub pull requests. Read the diff and the affected files, then post a structured review.',
voices: [new GitHubVoice(), new FilesystemVoice()],
permissions: ['network', 'filesystem'],
},
},
}) 16 official voices today — semver-versioned, with per-voice permission scopes the runtime enforces. Install like npm packages. Build your own as a typed Voice + Tool. Bridge any MCP server with one install.
Read, write, search, move — with path sandbox.
Issues, PRs, code search, repos.
Headless browser — navigate, click, type, screenshot.
Search, fetch URL, fetch sitemap. Citation metadata.
Run TypeScript, Python, Bash in an isolate.
Ingest, chunk, embed, retrieve. Postgres or local.
Channels, threads, DMs — Socket Mode inbound for inbox.
Messages, channels, DMs — Gateway inbound for inbox.
Meta Cloud API — text + Message Templates with HMAC webhook.
Query, execute, schema introspection.
Customers, payments, subs, invoices, balance.
Wrap any MCP server as a typed Tutti voice.
Comparison against frameworks you're probably also evaluating, based on what each project's docs claim today. We'd rather hear corrections than ship a misleading checkbox — open an issue if anything looks wrong.
| Feature | Tutti | LangGraph | CrewAI | AutoGen | Mastra |
|---|---|---|---|---|---|
| Years in production at scale | |||||
| Multi-language SDKs (Py + TS) | |||||
| Visual debugger / Studio | |||||
| Type-safe declarative config | |||||
| Voice plugin ecosystem on npm | |||||
| Per-voice permission scopes (runtime-enforced) | |||||
| Destructive-tool HITL by default | |||||
| MCP native | |||||
| Model-agnostic by config | |||||
| Auto model routing per turn | |||||
| Hard cost budgets (run / day / month) | |||||
| One-command deploy (Docker/Railway/Fly) |
Every competitor builds agents.
Tutti conducts them.
Tutti treats agents as declarative score files instead of Python graphs or role decorators. Everything — models, voices, guardrails — is typed and diff-reviewable. The voice marketplace is the extension model, not a pattern you reimplement per project.
Claude, GPT, Gemini, Llama, Mistral, and any OpenAI-compatible endpoint. Swap providers by changing a single config line — your score file doesn't change.
Tutti is in early preview — public APIs may shift before 1.0. Core has extensive test coverage, every voice declares its permission scope, destructive tools are gated by default. v0.26 ships self-improving skills, scheduled delivery to Slack / email / Discord / Telegram / WhatsApp, and serverless deploy via Modal (with a verify-hibernate precheck) and Daytona. v0.25 shipped inbound messaging across five platforms; v0.24 shipped hard cost budgets, a deploy bundler, and a live cost-analysis CLI. We'd rather you try it on a real workload and tell us what breaks than wait for a 1.0 stamp.
Tutti is Apache 2.0 — free forever, self-hostable. There's no hosted product or paid tier today; you bring your own LLM provider keys and run it on your own infra.
Every voice declares its permission scope. Secrets are redacted from logs by default, paths are sandboxed, and prompt-injection defences run on every tool response before the model sees it.
One install. Your first agent running in 60 seconds. No signup. No telemetry.