---
sidebar_position: 4
title: Limits & quotas
---

# Limits & quotas

## Agent runtime cap

Every agent execution has a **30-minute hard cap**. If an agent exceeds it, the
container is terminated with exit code `124` (timeout) and the execution is marked
`failed` with reason `TIMEOUT`.

Why this exists:
- Stops runaway agents (infinite loops, hung HTTP calls, stuck npm installs)
  from burning unbounded compute
- Predictable per-execution cost ceiling
- Industry standard — GitHub Actions defaults to 6 hours, GitLab CI defaults to
  1 hour, Vercel functions cap at 5 minutes. We picked 30 min as the sweet spot
  for AI-driven agents

If your agent needs to run longer:
- Split it into multiple shorter executions chained via input/output
- Move long-running work (large npm installs, video processing) into your bundled
  artifact at deploy time so the agent itself stays short
- Contact us about a Pro tier with a longer cap

The cap is enforced **inside** the container by a watchdog timer set on startup,
so it works even if the AWS-side controls fail.

## Per-execution resource budget

| Resource | Limit |
|---|---|
| Runtime | 30 min |
| CPU | 1 vCPU |
| Memory | 2 GB |
| Disk | 20 GB ephemeral |
| Outbound bandwidth | Unmetered |

If you hit memory or CPU limits, the container is OOM-killed and the execution is
marked failed.

## Container freedom (what you CAN do)

Inside your container, your agent has **full control**:

- Install any npm package (`npm install`, `pip install`, `apt install` if root)
- Run any shell command (`curl`, `git`, `docker`-in-docker not supported)
- Spawn child processes
- Read/write files in `/workspace`
- Use the full CPU/memory budget for compute

Your code runs in an isolated Fargate task — no shared state with other customers,
no side effects on Zibby infrastructure.

## What you CAN'T do

| Boundary | Why |
|---|---|
| Talk to other customers' agents | Each task is a separate isolated container |
| Use someone else's static IP | Only your account's IP is reachable from your task |
| Run beyond the 30-min cap | Watchdog kills the process |
| Read Zibby infra secrets | Container IAM role only sees your execution data |
| Persist state between runs | Containers are ephemeral — use S3 or your DB for state |

## Outbound network

By default your agent exits via a random AWS IP that changes every run. If you
need a stable IP for whitelisting customer firewalls, see
[Dedicated egress IP](./dedicated-egress) ($50/mo addon).

## Rate limits

| Endpoint | Limit |
|---|---|
| Trigger agent | 60/min per account |
| Read logs | 600/min per account |
| Deploy agent | 30/hour per account |

Hitting a rate limit returns `429 Too Many Requests` with a `Retry-After` header.
