Repositories
Pass up to 32 repositories in repos:
{
"repos": [
{
"url": "https://github.com/acme/backend",
"branch": "main",
"token": "github_pat_..."
},
{
"url": "https://github.com/acme/public-docs"
}
]
}
| Field | Required | Description |
|---|---|---|
url | yes | HTTPS or git@host:owner/repo repository URL |
branch | no | Branch to check out; an empty value uses the repository default |
token | no | Credential for a private GitHub, GitLab, or Bitbucket repository |
SSH-style URLs are normalized to HTTPS. Token injection is adapted for GitHub, GitLab, and Bitbucket. Public repositories need no token.
Repositories are per-turn values and are accepted when resuming a chat. The repository payload and its tokens live on the queued job for that run rather than being stored on the chat.
Inline input files
Attach base64-encoded bytes:
{
"input_files": [
{
"name": "data.csv",
"content": "YSxiLGMKMSwyLDMK"
}
]
}
Epho stores the bytes privately and gives the sandbox a temporary download URL.
URL input files
If the file already has an accessible URL, avoid base64 overhead:
{
"input_files": [
{
"name": "spec.pdf",
"url": "https://files.example.com/spec.pdf?signature=..."
}
]
}
Production URLs must use HTTPS. Each entry must contain exactly one of
content or url.
Input limits
- Maximum 20 files per turn.
- Maximum 25 MiB for one decoded base64 file.
- Maximum 50 MiB total decoded base64 content.
- File names must be valid, unique basenames.
- URL and base64 inputs may be used together in one request.
The runner downloads every attachment into:
/tmp/inputs/<name>
Epho also prepends the exact file paths to the prompt so the agent knows where to look.
Output artifacts
A completed turn may expose files created by the agent:
{
"artifacts": [
{
"name": "report.csv",
"size": 1240,
"url": "https://..."
}
]
}
Artifacts live in private object storage. The returned URL is a short-lived presigned download, normally valid for about ten minutes. Call a response or events read endpoint again to mint fresh URLs.
Internal agent-session snapshots are never exposed as user artifacts.