[{"data":1,"prerenderedAt":4},["ShallowReactive",2],{"readme:openrath":3},"\u003Ch1>OpenRath\u003C\u002Fh1>\n\u003Cp align=\"center\">\n  \u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002FRath-Team\u002Fopenrath\u002FHEAD\u002Fassets\u002Freadme\u002Flogos\u002Fopenrath-logo-white.png\" alt=\"OpenRath logo\" width=\"860\" \u002F>\n\u003C\u002Fp>\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fpypi.org\u002Fproject\u002Fopenrath\u002F\" rel=\"nofollow ugc noopener\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fv\u002Fopenrath.svg\" alt=\"PyPI\" \u002F>\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fpypi.org\u002Fproject\u002Fopenrath\u002F\" rel=\"nofollow ugc noopener\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fpyversions\u002Fopenrath.svg\" alt=\"Python\" \u002F>\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FRath-Team\u002FOpenRath\u002Fblob\u002Fmain\u002FLICENSE\" rel=\"nofollow ugc noopener\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-BSD--3--Clause-blue.svg\" alt=\"License\" \u002F>\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fdocs.openrath.com\" rel=\"nofollow ugc noopener\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fdocs-openrath.com-blue\" alt=\"Docs\" \u002F>\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Farxiv.org\u002Fabs\u002F2606.19409\" rel=\"nofollow ugc noopener\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FarXiv-2606.19409-b31b1b.svg?logo=arxiv&amp;logoColor=white\" alt=\"arXiv\" \u002F>\u003C\u002Fa>\n\u003C\u002Fp>\u003Cdiv align=\"center\">\u003Cp>English | \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FRath-Team\u002Fopenrath\u002Fblob\u002FHEAD\u002FREADME_zh.md\" rel=\"nofollow ugc noopener\">简体中文\u003C\u002Fa>\u003C\u002Fp>\n\u003C\u002Fdiv>\u003Chr \u002F>\n\u003Cp>\u003Cstrong>OpenRath is a PyTorch-like multi-agent &amp; multi-session framework.\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>It turns agent runtime state into explicit, composable Python objects:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Session\u003C\u002Fstrong> carries conversation state and inter-agent collaboration lineage.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Sandbox\u003C\u002Fstrong> decides where tools actually run.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Memory\u003C\u002Fstrong> persists agent memory state across runs.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Tool\u003C\u002Fstrong> is the operator-like callable surface exposed to the model.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Agent\u003C\u002Fstrong> is a reusable, composable session transformation layer.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Workflow\u003C\u002Fstrong> composes multiple agents and workflows into larger systems.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Selector\u003C\u002Fstrong> routes between self-describing workflows at runtime, so \u003Ccode>if\u003C\u002Fcode> \u002F \u003Ccode>while\u003C\u002Fcode> control flow stays plain Python.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Chr \u002F>\n\u003Ch2>OpenRath in the PyTorch Lens\u003C\u002Fh2>\n\u003Cp align=\"center\">\n  \u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002FRath-Team\u002Fopenrath\u002FHEAD\u002Fassets\u002Freadme\u002Fdiagrams\u002Fpytorch-lens.png\" alt=\"OpenRath in the PyTorch Lens\" width=\"860\" \u002F>\n\u003C\u002Fp>\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>PyTorch idea\u003C\u002Fth>\n\u003Cth>OpenRath idea\u003C\u002Fth>\n\u003Cth>What it means\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>\u003Ccode>Tensor\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>Session\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>The flowing runtime value: ordered chunks, placement, lineage, and usage.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>Device\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>Sandbox\u003C\u002Fcode> \u002F \u003Ccode>Backend\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>The execution environment where tools run: local process, OpenSandbox, or another backend.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>Parameter\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>Memory\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Persistent state bound to an agent or store, recalled and committed across runs.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>Function\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>Tool\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>A callable operation with model-visible schema and runtime behavior.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>nn.Linear\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>Agent\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>A reusable layer that maps one session to another using a prompt, provider, tools, and memory.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>nn.Module\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>Workflow\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>A composable container for agents, tools, session transforms, and nested workflows.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>control flow\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>Selector\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>An LLM-backed router that picks the next workflow at runtime, enabling dynamic \u003Ccode>if\u003C\u002Fcode> \u002F \u003Ccode>while\u003C\u002Fcode> over agents.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Cp>Most agent frameworks begin with an agent loop. OpenRath begins with \u003Cstrong>Session\u003C\u002Fstrong>. That difference matters when one application needs multiple agents, multiple branches, durable memory, sandboxed execution, and traceable lineage at the same time.\u003C\u002Fp>\n\u003Cp>OpenRath is designed for this: many agents collaborating across many branchable sessions, while still tracing every role, workspace, memory write, and final output.\u003C\u002Fp>\n\u003Ch2>OpenRath v2.0.0: Built for Production\u003C\u002Fh2>\n\u003Cp>The defining change in OpenRath v2.0.0 is that OpenRath moves beyond a\ncomposable Python framework and becomes a durable runtime designed for\nproduction deployment. The existing Session-first Python API remains intact;\nthe release adds a production execution and operations layer around it.\u003C\u002Fp>\n\u003Cp align=\"center\">\n  \u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002FRath-Team\u002Fopenrath\u002FHEAD\u002Fassets\u002Freadme\u002Fdiagrams\u002Fv2-durable-runtime.png\" alt=\"OpenRath v2.0.0 durable runtime overview\" width=\"860\" \u002F>\n\u003C\u002Fp>\u003Cp>The diagram summarizes this production path: Python definitions compile into\nimmutable plans, durable Runs are governed by checkpoints, leases, effects, and\ninterrupts, and PostgreSQL, Redis, and S3-compatible storage provide the\noperational data plane.\u003C\u002Fp>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Production concern\u003C\u002Fth>\n\u003Cth>What OpenRath provides\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>Durable execution\u003C\u002Ftd>\n\u003Ctd>Explicit \u003Ccode>@step\u003C\u002Fcode> \u002F \u003Ccode>@router\u003C\u002Fcode> boundaries compile into immutable execution plans. Runs, Events, and Checkpoints survive process and worker restarts.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Resili\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n",1788219549548]