[{"data":1,"prerenderedAt":271},["ShallowReactive",2],{"docs-page:\u002Fdocs":3,"docs-navigation-links":244},{"id":4,"title":5,"body":6,"description":236,"extension":237,"meta":238,"navigation":239,"path":240,"seo":241,"stem":242,"__hash__":243},"docs\u002Fdocs\u002Findex.md","Overview",{"type":7,"value":8,"toc":229},"minimark",[9,13,16,27,32,44,69,72,76,171,175,186,189,193],[10,11,12],"p",{},"Epho turns coding-agent harnesses into an API. Send a prompt, choose a harness\nand model, and receive the work as a live event stream or collect it\nasynchronously.",[10,14,15],{},"The API base URL is:",[17,18,24],"pre",{"className":19,"code":21,"language":22,"meta":23},[20],"language-text","https:\u002F\u002Fapp.epho.io\u002Fapi\n","text","",[25,26,21],"code",{"__ignoreMap":23},[28,29,31],"h2",{"id":30},"the-execution-model","The execution model",[10,33,34,35,39,40,43],{},"Every request belongs to a team and runs as a ",[36,37,38],"strong",{},"turn"," inside a durable\n",[36,41,42],{},"chat",":",[45,46,47,51,54,57,60,63,66],"ol",{},[48,49,50],"li",{},"Epho accepts a team-scoped API key.",[48,52,53],{},"A turn is created and placed on the run queue.",[48,55,56],{},"Epho creates or resumes an isolated sandbox.",[48,58,59],{},"The selected harness receives the prompt and provider key.",[48,61,62],{},"Progress is persisted as events.",[48,64,65],{},"The final answer and output artifacts are saved.",[48,67,68],{},"The sandbox is stopped so compute billing ends.",[10,70,71],{},"The same persisted events power synchronous streaming, asynchronous polling,\nand reconnectable SSE subscriptions.",[28,73,75],{"id":74},"primary-concepts","Primary concepts",[77,78,79,92],"table",{},[80,81,82],"thead",{},[83,84,85,89],"tr",{},[86,87,88],"th",{},"Concept",[86,90,91],{},"Meaning",[93,94,95,104,112,120,139,147,155,163],"tbody",{},[83,96,97,101],{},[98,99,100],"td",{},"API key",[98,102,103],{},"Authenticates a team and scopes access to that team's chats, credit, and runs",[83,105,106,109],{},[98,107,108],{},"Chat",[98,110,111],{},"A durable conversation with a fixed harness, model, sandbox size, system prompt, and MCP configuration",[83,113,114,117],{},[98,115,116],{},"Turn",[98,118,119],{},"One prompt and one agent run within a chat",[83,121,122,125],{},[98,123,124],{},"Harness",[98,126,127,128,131,132,135,136],{},"The coding-agent runtime: ",[25,129,130],{},"codex",", ",[25,133,134],{},"claude",", or ",[25,137,138],{},"opencode",[83,140,141,144],{},[98,142,143],{},"Provider key",[98,145,146],{},"Your OpenAI, Anthropic, or OpenCode Zen credential for a particular run",[83,148,149,152],{},[98,150,151],{},"Sandbox",[98,153,154],{},"The isolated compute environment created or resumed for the chat",[83,156,157,160],{},[98,158,159],{},"Event",[98,161,162],{},"A lifecycle or agent-generated progress item persisted on the turn",[83,164,165,168],{},[98,166,167],{},"Artifact",[98,169,170],{},"A file produced by the agent and exposed through a short-lived download URL",[28,172,174],{"id":173},"two-ways-to-run","Two ways to run",[10,176,177,178,181,182,185],{},"Use ",[25,179,180],{},"POST \u002Fv1\u002Fchat"," when you want one connection that streams until the turn\nsettles. Use ",[25,183,184],{},"POST \u002Fv1\u002Fchat\u002Fasync"," when a worker, webhook consumer, or scheduled\njob should submit work and return immediately.",[10,187,188],{},"Both modes use the same launch path, persistence, retries, concurrency controls,\nand result format.",[28,190,192],{"id":191},"where-to-go-next","Where to go next",[194,195,196,205,213,221],"ul",{},[48,197,198,199,204],{},"Follow the ",[200,201,203],"a",{"href":202},"\u002Fdocs\u002Fquickstart","Quickstart"," to run your first agent.",[48,206,207,208,212],{},"Understand ",[200,209,211],{"href":210},"\u002Fdocs\u002Fchats-and-turns","Chats and turns"," before building multi-turn workflows.",[48,214,215,216,220],{},"Choose a ",[200,217,219],{"href":218},"\u002Fdocs\u002Fharnesses-and-models","Harness and model",".",[48,222,223,224,228],{},"Use the ",[200,225,227],{"href":226},"\u002Fdocs\u002Fapi","API reference"," for every endpoint and field.",{"title":23,"searchDepth":230,"depth":230,"links":231},2,[232,233,234,235],{"id":30,"depth":230,"text":31},{"id":74,"depth":230,"text":75},{"id":173,"depth":230,"text":174},{"id":191,"depth":230,"text":192},"Run coding agents in isolated cloud sandboxes through one HTTP API.","md",{},true,"\u002Fdocs",{"title":5,"description":236},"docs\u002Findex","KxlqVxSirQbrH-SLele5gXNpIYRysKPDMe-g6vkwb0M",[245,246,249,250,253,256,258,261,262,265,268],{"path":240,"title":5},{"path":247,"title":248},"\u002Fdocs\u002Fauthentication","Authentication",{"path":210,"title":211},{"path":251,"title":252},"\u002Fdocs\u002Ferrors","Errors and statuses",{"path":254,"title":255},"\u002Fdocs\u002Ffiles-and-repositories","Files and repositories",{"path":218,"title":257},"Harnesses and models",{"path":259,"title":260},"\u002Fdocs\u002Fmcp-and-environment","MCP and environment",{"path":202,"title":203},{"path":263,"title":264},"\u002Fdocs\u002Fresources-and-billing","Resources and billing",{"path":266,"title":267},"\u002Fdocs\u002Fresuming-chats","Resuming chats",{"path":269,"title":270},"\u002Fdocs\u002Frunning-agents","Running agents",1785310516371]