shipit-agent v3.0.0

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.

Run it with
agent.py
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
~/calc · claude-haiku-5-5running

you › The tests in this repo fail. Find the bug, fix it, and run the tests to confirm they pass.

Starting…
shipit chat

One 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

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.

Read the guide

Every built-in tool, any model, one call.

agent.py
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)
$ pythonexample output
running…

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
  1. Your taskprompt, files, images
  2. Lead agentplans and splits the work
  3. Sub-agents · in parallel

    • Explorermaps the code
    • Testerruns the suite
    • Researchersearches the web
    • Reviewerreads the diff
    • Your systemsthrough MCP
  4. Verifierchecks calls
  5. Verified resulttests pass, it stops

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.

options.py
from shipit_agent.sdk import AgentOptions

options = AgentOptions(
    permission_mode="default",
    sandbox={"enabled": False},
)
agent wants to run…
  • $ pytest -qRuns
  • $ npm installRuns
  • $ rm -rf build/Asks you
  • $ git push origin mainAsks you
  • $ curl -X POST https://api.example.com -d @data.jsonAsks you
  • $ echo hi > ~/notes.txtAsks you
  • $ rm -rf /Blocked

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.

How the benchmark works
Sonnet 5.5Anthropic API18 / 18 passed
Input tokens
190k
Cost for all 18
$0.20
Gemma 4 31BAWS Bedrock18 / 18 passed
Input tokens
216k
Cost for all 18
$0.03

One run each. Results vary between runs; the benchmark's --repeat flag reports the median.