GantryGraph v0.8.0 is now live on PyPI

OS-level AI agents
built for Developers.

GantryGraph transforms LangGraph into a secure, fully-controllable engine for desktop and web automation. Built-in guardrails, cost control, and seamless Python integration.

Read the Docs
★ MIT License· LangGraph-native· GuardrailPolicy· BudgetPolicy
agent.py — gantrygraph

// WHY GANTRYGRAPH

Built for production, not demos.

Computer Use APIs give you a black box. GantryGraph gives you a Python library you can audit, extend, and integrate into any backend — with enterprise-grade controls built into the execution loop from day one.

Native security guardrails

ShellDenylist blocks destructive commands — rm -rf /, fork bombs, curl | bash — before they reach the OS. GuardrailPolicy gates any tool behind a human approval step. Zero-trust by default, not bolted on.

API budget kill-switch

BudgetPolicy hard-stops the agent when it exceeds a token count, wall-clock time, or step limit. on_limit="stop" raises immediately — no graceful degradation, no runaway spend. Set it once, sleep soundly.

Full execution control

Built on LangGraph — every node is observable and modifiable. Stream events via astream_events(), inject custom nodes, attach checkpointers for suspend/resume. You own the graph. No magic, no hidden complexity.

Drops into your stack

A Python library, not a Docker container or a SaaS. Import it into FastAPI, Django, or a Lambda. Connect to any MCP server — GitHub, Postgres, Slack — with zero integration code. Model-agnostic: Claude, GPT-4o, Gemini, or local.

// HOW IT WORKS

A ReAct loop, engineered for the OS.

User intent flows through the Gantry Engine, branches across desktop, browser, and local tools, then streams results asynchronously back to your UI.

User Intent"Find the pricing page"Gantry EngineLangGraph state machineobserve → think → act → reviewGuardrailPolicy · BudgetPolicyDesktopScreenpyautogui · mssWebPageplaywright · stealthFileSystemToolsread · write · shellMCPConnectorgithub · slack · pgAsync Streamevents → WebSocket / UI

// USE CASES

Browser, desktop, research — one library.

Real production patterns you can ship today.

browser_automation.py
from gantrygraph import GantryEngine
from gantrygraph.perception import WebPage
from gantrygraph.actions import BrowserTools
 
web = WebPage(url="https://news.ycombinator.com", headless=True)
 
agent = GantryEngine(
llm=ChatAnthropic(model="claude-sonnet-4-6"),
perception=web,
tools=[BrowserTools(web_page=web)],
)
 
# Scrape top stories with screenshots on every step
result = agent.run("Find the top 5 stories and their links")
Stealth mode — UA patch, webdriver undefined, random delays
browser_click_text bypasses CSS-selector failures on dynamic DOM
Combine with WebSearchTool to search + browse in one agent

// COMPARISON

How GantryGraph stacks up.

Computer Use APIs are black boxes optimized for demos. GantryGraph is a library optimized for production.

CapabilityGantryGraphOpenHandsbrowser-useComputer Use APIs
Integration modelPython library — drop into any serviceStandalone platform / DockerBrowser-only libraryHosted API / black box
ScopeFull OS · browser · MCP · local fnsCoding-agent IDEWeb pages onlyScreenshot + mouse only
Shell command firewall
API budget kill-switch~
Human approval gate~
LangGraph-native
Model-agnostic LLM~
Native MCP support
Async event streaming~
Headless / Docker-ready~
LicenseMITMITMITProprietary

✓ supported · ~ partial / requires custom code · — not supported

// FAQ

Questions, answered.

Common questions from engineers evaluating GantryGraph.

GantryGraph is a Python library you drop into any service — not a standalone platform. Its scope spans the entire OS (desktop apps, browsers, local Python functions, and MCP servers) instead of being limited to coding workflows or web pages. GuardrailPolicy, native MCP support, and async event streaming come built-in rather than as add-ons.
No lock-in. GantryEngine accepts any LangChain chat model — Claude, GPT-4o, Gemini, Pixtral, Qwen2-VL, or any local model exposed over an OpenAI-compatible endpoint. Pass it as llm= at construction time.
GantryGraph is zero-trust by design. Use GuardrailPolicy to control which domains can be visited, which shell commands are allowed, and which actions require human approval via approval_callback. You explicitly opt in to capabilities, not out of them.
Yes. Playwright runs headless inside any container. The agent loop is fully async, so it maps cleanly to FastAPI WebSocket endpoints and remote UIs.
BrowserTools ships with stealth=True by default — it patches navigator.webdriver, sets a realistic Chrome UA, populates navigator.plugins and navigator.languages, and adds random delays to clicks. For search queries, use WebSearchTool (Tavily API) instead of navigating to search engines directly.
Pass an MCPConnector instance in tools=[]. Tools are auto-discovered from the server. Connect to GitHub, Slack, Postgres, Notion, arXiv, or any custom MCP server with one import.
Yes — MIT licensed on GitHub and PyPI. Free forever for the core library.

Build your own agent.
Make it yours.

Open source · MIT license · Python 3.10+
Get started →View on GitHub