# Limits and Quotas

> Platform limits for agents, API requests, data, and integrations

## Agent Execution

| Limit | Value |
|-------|-------|
| Tool call iterations per request | 10 |
| Multi-agent delegation depth | 3 |
| Cycle detection | Enabled (A → B → A blocked) |
| System prompt template result size | 10 KB per function call |
| Convex action timeout | 10 minutes |

## API

| Limit | Value |
|-------|-------|
| Request body size | Convex default (8 MB) |
| API key environments | `development`, `production`, `eval` |
| Concurrent requests | No platform-enforced limit (Convex limits apply) |

## Data

| Limit | Value |
|-------|-------|
| Default `entity.query` limit | 100 records |
| Maximum `entity.query` limit | 1000 records (internal fetch cap) |
| Default `event.query` limit | 50 events |
| Record soft-delete | Records are soft-deleted (status set to `"deleted"`) |
| Environments | `development`, `production`, `eval` |

## Custom Tool Executor

| Limit | Value |
|-------|-------|
| Fetch | Unrestricted (any domain) |
| Deployment | Fly.io (Hono Node.js) |

## Automations

| Limit | Value |
|-------|-------|
| Retry strategy | Exponential backoff: `delay * 2^(attempt-1)` |
| Maximum retries | Configured per trigger |
| Execution modes | Immediate, scheduled |
| Tracked via | `triggerRuns` table |

## WhatsApp (via Kapso)

| Limit | Value |
|-------|-------|
| Message deduplication | By `messageId` |
| Thread mapping | `whatsapp:{phoneNumber}` per connection |
| Payload version | V2 required (`phone_number_id` at root) |

## Evaluations

| Limit | Value |
|-------|-------|
| LLM judge retry on 429 | Up to 5 retries, 30-second delay |
| Judge score range | 1-5 (pass threshold: 3) |
| Judge temperature | 0 (deterministic) |
| Case execution | Parallel within a suite |
| Fixture reset | Full reset on every `struere dev` sync |
