Rebuno: an execution runtime for production agents
Introducing Rebuno, an open-source runtime for running agents in production.
Rebuno brings durability and guardrails together in one place. It works across frameworks, so you can operate your agents consistently.
How it works
The tool and model calls you connect to Rebuno become steps. Each step records what was requested and the result.
Before a new step runs, Rebuno evaluates it against the agent's policy. It either allows the step, denies it, or holds it for human approval. Your agent carries out the work, and Rebuno keeps track of its progress.
You can use that record to follow a run as it happens or review it later. It shows what the agent did and why an action was allowed or stopped.
Continuing after an interruption
Rebuno records the result of each step as it finishes. If the agent stops before completing the run, it can reuse those results after restarting instead of repeating completed work.
Each tool has its own recovery behavior. If an interruption leaves its outcome unknown, Rebuno retries it only when it has been marked safe to repeat. Otherwise, it reports the uncertainty without running the action again.
Policy and approvals
Rebuno enforces the agent's policy independently of the model's prompt.
When approval is needed, the run pauses with its progress saved. A person can review the request and approve or deny it. The agent then continues with that decision, which is recorded with the rest of the run.
The agent can stop running while it waits. The request stays available for someone to review later.
How it compares
Workflow engines organize applications around workflows and tasks. Rebuno leaves the agent's structure to its framework and makes its tool and model calls durable.
Frameworks that use checkpoints can restore saved progress, but unfinished actions may run again. Rebuno lets each tool specify whether an action with an unknown outcome can be retried.
Guardrails defined in code are maintained with the application. Rebuno enforces policies in a shared runtime, where they can be updated independently of agent code.
Using Rebuno
This excerpt shows how to connect a LangChain agent to Rebuno:
from langchain.agents import create_agentfrom langchain_openai import ChatOpenAIfrom rebuno import Agent, http_client, tool @tool("send_email", idempotency="at_most_once")async def send_email(body: str) -> dict: """Email a written brief to a colleague.""" return await mail.send("[email protected]", body) async def process(query: str) -> dict: llm = ChatOpenAI(model="gpt-5.5", http_async_client=http_client()) graph = create_agent(model=llm, tools=[send_email]) result = await graph.ainvoke({"messages": [{"role": "user", "content": query}]}) return {"answer": result["messages"][-1].content} agent = Agent("mailer")agent.run(process)
The highlighted lines connect an agent's model and tools to Rebuno. Any step submitted to Rebuno is recorded.
Rebuno is available on GitHub under the MIT license. The repository includes more examples, and the getting started guide walks you through running your first agent with Rebuno.
Use GitHub issues to share feedback on how Rebuno fits your work or report problems.