Agents that finish the job.
The open-source Python runtime for agents that read code, call tools and MCP servers, run commands in a sandbox and check their own work. On any model.
from shipit_agent import Agent
from shipit_agent.llms import build_llm_from_env
llm = build_llm_from_env("anthropic")
agent = Agent.with_builtins(llm=llm, project_root=".")
task = ("The tests in this repo fail. Find the bug, "
"fix it, and run the tests to confirm they pass.")
for event in agent.stream(task):
print(event.type, event.message)# same code on every provider; the run beside it used claude-haiku-5-5
- turns
- 5
- tool calls
- 6
- tokens
- 782
- cost
- $0.0009
- time
- 9.0s
you › The tests in this repo fail. Find the bug, fix it, and run the tests to confirm they pass.
Starting…shipit chat6 tools · 782 tokens · $0.0009One agent loop, 18 built-in providers
- Anthropic
- OpenAI
- AWS Bedrock
- Google Gemini
- Vertex AI
- Azure OpenAI
- Ollama
- Groq
- Mistral
- Anthropic
- OpenAI
- AWS Bedrock
- Google Gemini
- Vertex AI
- Azure OpenAI
- Ollama
- Groq
- Mistral
- DeepSeek
- xAI
- Together
- Fireworks
- Cerebras
- Cohere
- OpenRouter
- Perplexity
- LiteLLM
- DeepSeek
- xAI
- Together
- Fireworks
- Cerebras
- Cohere
- OpenRouter
- Perplexity
- LiteLLM
Everything an agent needs
17 parts, one runtime.
Models, tools, MCP, connections, RAG, memory, permissions, the sandbox, sub-agents and long runs. Each has a page with how it works and a live example.
- BuildAny model18 built-in providers, one loop
- BuildTools66 built in, plus your own functions
- BuildStructured outputPydantic models in, validated objects out
- BuildStreamingEvery step as a typed event
- BuildAsync SDKquery(), options and typed messages
- ConnectMCP28 servers by name, any server by URL
- ConnectConnectionsSlack, GitHub, Linear, Jira, Notion…
- ConnectRAGSearch your documents, cite the passages
- ConnectSessions and memoryConversations that continue
- ControlPermissionsAllow, ask or deny every tool call
- ControlOS sandboxCommands that can't reach past the project
- ControlVerifierA second model that checks the first
- ControlCost and budgetsKnow and cap what every run costs
- ScaleSub-agentsSplit big work across parallel helpers
- ScaleDeep agentsGoal, reflective, supervisor and crews
- ScaleAutopilotLong runs with budgets and checkpoints
- ScaleTracingEvery run recorded and replayable
One agent, plugged into everything
Bring your model, your tools and your stack.
The model, the tools, the MCP servers and where the results land are separate choices. Change any one without touching the rest.
- AnthropicOpus, Sonnet, Haiku, cached
- OpenAIGPT and o-series
- AWS BedrockGemma, gpt-oss, Llama…
- Google Geminiand Vertex AI
- Azure OpenAIyour deployments
- Ollamalocal models
- Groqfast inference
- Mistraland DeepSeek
- OpenRouterhundreds of models
- LiteLLMany OpenAI-style API
Change one line to change the model. Tools, permissions and streaming behave the same on every provider. Learn more
Two ways in
Plain Python, or the async SDK.
Build with the Agent class, or use shipit_agent.sdk for async messages, options and hooks. Both drive the same loop, on any model.
Every built-in tool, any model, one call.
from shipit_agent import Agent
from shipit_agent.llms import build_llm_from_env
agent = Agent.with_builtins(llm=build_llm_from_env(), project_root=".")
for event in agent.stream("Run the tests and fix what fails."):
print(event.type, event.message)Delegation and verification
Not one loop. A team on every task, and a check before it’s done.
The lead agent splits big work across sub-agents that run side by side, each with its own context. A verifier vetoes bad tool calls as they happen, and with verify_before_stop the run can’t finish until fresh tests pass.
- work moving between agents
- rejected work sent back
- verified
- Your taskprompt, files, images
- Lead agentplans and splits the work
Sub-agents · in parallel
- Explorermaps the code
- Testerruns the suite
- Researchersearches the web
- Reviewerreads the diff
- Your systemsthrough MCP
- Verifierchecks calls
- Verified resulttests pass, it stops
What you get
Everything an agent needs, already working.
One runtime for coding agents, research agents and support agents, with the parts you would otherwise build yourself.
Safety you can see
Every command is judged before it runs.
Reading and testing run freely. Deleting, pushing and sending data out ask first. With the OS sandbox on, commands run without asking because they cannot reach past the project.
from shipit_agent.sdk import AgentOptions
options = AgentOptions(
permission_mode="default",
sandbox={"enabled": False},
)$ pytest -qRunsreads and runs tests$ npm installRunsinstalls into the project$ rm -rf build/Asks youit deletes files$ git push origin mainAsks youit publishes to a remote$ curl -X POST https://api.example.com -d @data.jsonAsks youit sends data to a server$ echo hi > ~/notes.txtAsks youit writes outside the project$ rm -rf /Blockednever runs
These are the verdicts shipit's command classifier gives, in the default permission mode. Permissions · Sandbox
Measured, not claimed
The same 18 tasks, a frontier model and an open one.
Fixing bugs across modules, renaming through eight files, recovering from tool errors, finding a needle in a log. The benchmark ships in the repository; run it on the models you are choosing between.
- Input tokens
- 190k
- Cost for all 18
- $0.20
- Input tokens
- 216k
- Cost for all 18
- $0.03
One run each. Results vary between runs; the benchmark's --repeat flag reports the median.