Service limits
These are externally meaningful limits enforced by current schemas and runtime code. Use them for validation and capacity planning; do not treat them as billing entitlements or recommended batch sizes.
Last verified: commit 8d1ac043 on 2026-07-20.
Contract
Fixed product limits apply to every Tenant. Runtime bounds marked configurable have deployment defaults within an enforced operator range. A Tenant Quota is self-set token/request protection, while billing measurement is a separate policy described by Usage and quotas.
| Limit | Current value | Scope | On exceed | Kind | Enforcing source |
|---|---|---|---|---|---|
| API keys per Tenant | 5 | Tenant | invalid_request on create | fixed | MAX_API_KEYS_PER_TENANT |
| API key name | 80 characters | API key | validation error | fixed | MAX_API_KEY_NAME_LENGTH |
| API key expiry | when supplied, must be later than the current time | API key create | invalid_request | fixed | servers/api/src/services/api-key-service.ts |
| Agents per Tenant | 100 | Tenant | invalid_request on create | fixed product guard | MAX_AGENTS_PER_TENANT |
| Agent fields | name 80; instructions 3,000 characters | Agent | validation error | fixed | MAX_AGENT_NAME_LENGTH, MAX_AGENT_INSTRUCTIONS_LENGTH |
| MCP Connections per Agent | 10 | Agent | validation error | fixed | MAX_MCP_CONNECTIONS_PER_AGENT |
| Agent Version page | default 50; max 200 | list request | validation error | fixed | DEFAULT_AGENT_VERSIONS_LIST_LIMIT, MAX_AGENT_VERSIONS_LIST_LIMIT |
| Agent avatar upload | 512 KiB; PNG, JPEG, or WebP matching filename extension | upload | 413 for size; 415 for media type; code invalid_request | fixed | maxAvatarBytes — servers/api/src/services/agent-service.ts |
| Providers per Tenant | 20 | Tenant | invalid_request on create | fixed | MAX_PROVIDERS_PER_TENANT |
| Provider name | 80 characters | Provider | validation error | fixed | MAX_PROVIDER_NAME_LENGTH |
| Custom Provider base URL | required, non-empty, valid URL on create and unsaved test; a stored custom Provider cannot update it to null | custom Provider config | validation error | fixed | packages/core/src/entities/providers.ts, servers/api/src/services/provider-service.ts |
| MCP Connections per Tenant | 50 | Tenant | invalid_request on create | fixed | MAX_MCP_CONNECTIONS_PER_TENANT |
| MCP Connection input | name 80; URL/client ID/scope 2,048; bearer token/client secret 8,192 characters | connection request | validation error | fixed | MAX_MCP_CONNECTION_NAME_LENGTH, MAX_MCP_CONNECTION_URL_LENGTH, MAX_MCP_OAUTH_CLIENT_ID_LENGTH, MAX_MCP_OAUTH_SCOPE_LENGTH, MAX_MCP_BEARER_TOKEN_LENGTH, MAX_MCP_OAUTH_CLIENT_SECRET_LENGTH |
| MCP Tools | 128 per Connection; 256 per Turn | remote MCP catalog | connection/Turn fails safely | fixed | MAX_MCP_TOOLS_PER_CONNECTION, MAX_MCP_TOOLS_PER_TURN |
| MCP payloads | definition 256 KiB; definitions per Connection 1 MiB; Tool result 1 MiB; request context 16 KiB | MCP setup/call | connection/Tool error | fixed | MAX_MCP_TOOL_DEFINITION_BYTES, MAX_MCP_CONNECTION_TOOL_DEFINITIONS_BYTES, MAX_MCP_TOOL_RESULT_BYTES, MAX_MCP_REQUEST_CONTEXT_BYTES |
| MCP forwarded metadata | 32 keys, each 64 characters | MCP Attachment | validation error | fixed | MAX_MCP_ATTACHMENT_METADATA_KEYS, MAX_MCP_ATTACHMENT_METADATA_KEY_LENGTH |
| Tenant Skills per Tenant | 100; platform Skills excluded | Tenant | invalid_request on create | fixed | MAX_SKILLS_PER_TENANT |
| Skill archive | 3 MiB ZIP; 10 MiB total uncompressed; 90 files | upload | invalid_request or 413 | fixed | MAX_SKILL_ZIP_BYTES, MAX_SKILL_UNCOMPRESSED_BYTES, MAX_SKILL_FILES |
| Skill fields | name 80; description 500 characters | Skill | validation error | fixed | MAX_SKILL_NAME_LENGTH, MAX_SKILL_DESCRIPTION_LENGTH |
| Prompts per Tenant | 100 | Tenant | invalid_request on create | fixed | MAX_PROMPTS_PER_TENANT |
| Prompt fields | name 80; template 10,240 JavaScript string units; 10 distinct variables | Prompt | validation error | fixed | MAX_PROMPT_NAME_LENGTH, MAX_PROMPT_TEMPLATE_BYTES, MAX_PROMPT_VARIABLES |
| Tasks per Tenant | 100 | Tenant | invalid_request on create | fixed | MAX_TASKS_PER_TENANT |
| Task fields | name 80; prompt 6,000 characters | Task | validation error | fixed | MAX_TASK_NAME_LENGTH, MAX_TASK_PROMPT_LENGTH |
| Task schedule fields | cron expression 120; timezone 64 characters | Task cron schedule | validation error | fixed | packages/core/src/entities/tasks.ts |
| Task interval | minimum 60,000 ms | interval schedule | validation error | fixed | MIN_TASK_INTERVAL_MS |
| Active Task run | 1 per Task | Task | overlapping schedule fire is skipped | fixed | packages/server-core/src/task.ts |
| Task recent-run preview | 3 terminal runs | Task response | older preview entries drop out | fixed | taskRecentRunsSchema — packages/core/src/entities/tasks.ts |
| Task run lifetime | default 35 minutes; minimum 1 minute | Task run | lifetime cancellation stops the Turn | deployment-configurable | TASK_RUN_TIMEOUT_MS — servers/task-worker/src/env.ts, servers/task-worker/src/task-run-execution.ts |
| File write input | 512,000 UTF-8 bytes | one write Tool call | Tool error output | fixed | MAX_WRITE_BYTES — packages/server-core/src/agent-tools/shared.ts |
| File edit input | 256,000 UTF-8 bytes across old and new text | one edit Tool call | Tool error output | fixed | MAX_EDIT_INPUT_BYTES — packages/server-core/src/agent-tools/shared.ts |
| File Tool output bytes | 50 KiB | one Tool result | output is truncated | fixed | OUTPUT_MAX_BYTES — packages/server-core/src/agent-tools/shared.ts |
| File Tool output lines | 2,000 lines | one Tool result | output is truncated | fixed | OUTPUT_MAX_LINES — packages/server-core/src/agent-tools/shared.ts |
| File grep output | 100 matches; 500 characters per rendered match line | one grep Tool call | extra matches and line text are truncated | fixed | GREP_MAX_MATCHES, GREP_MAX_LINE_CHARS — packages/server-core/src/agent-tools/shared.ts |
| File glob output | 1,000 paths | one glob Tool call | extra paths are truncated | fixed | GLOB_MAX_RESULTS — packages/server-core/src/agent-tools/shared.ts |
| Artifact file | 10 MiB | save_artifacts | Tool error output | fixed | MAX_ARTIFACT_BYTES |
| Artifact batch | 10 paths; 25 MiB total | one save_artifacts call | Tool error output | fixed | MAX_ARTIFACT_PATHS_PER_CALL, MAX_ARTIFACT_BATCH_BYTES |
| Artifacts per Session | 100 | Session | invalid_request while recording | fixed | MAX_ARTIFACTS_PER_SESSION |
| Memories per Agent | 500 across all Attribution partitions | Agent | least-recently-accessed rows are evicted on create | fixed | MAX_MEMORIES_PER_AGENT |
| Memory text | 10 KiB UTF-8 bytes | Memory | validation error | fixed | MAX_MEMORY_TEXT_BYTES, supabase/migrations/20260719000000_tables_memories.sql |
| Memory page | default 50; max 100 | list request | validation error | fixed | DEFAULT_MEMORIES_LIST_LIMIT, MAX_MEMORIES_LIST_LIMIT |
| Memory Tool search | default 10; max 20 | Tool call | Tool validation error | fixed | DEFAULT_MEMORY_TOOL_SEARCH_LIMIT, MAX_MEMORY_TOOL_SEARCH_LIMIT |
| Session or Task-run message page | default 50; max 200 | list request | validation error | fixed | DEFAULT_SESSION_MESSAGES_LIMIT, MAX_SESSION_MESSAGES_LIMIT |
| Tool approval decision reason | 1,000 characters | approval decision | validation error | fixed | decideToolApprovalBodySchema — packages/core/src/entities/sessions.ts |
| Other cursored resource pages | Sessions, Sandboxes, Tasks, Task runs default 50/max 200; Artifacts fixed 50 | list request | validation error | fixed | packages/core/src/entities/sessions.ts, sandboxes.ts, tasks.ts; servers/api/src/routes/artifacts/list.ts |
| Usage query window | default last 30 UTC days; bounds differ by at most 31 days | query | validation error | fixed | DEFAULT_USAGE_RANGE_DAYS, MAX_USAGE_RANGE_DAYS |
| Usage Session top-N | default 50; max 200 | groupBy=session | validation error | fixed | DEFAULT_USAGE_SESSION_TOP_N, MAX_USAGE_SESSION_TOP_N |
| Quota reset day | 1–28 | Tenant Quota | validation error | Tenant-configurable | MIN_QUOTA_RESET_DAY, MAX_QUOTA_RESET_DAY |
| Quota ceilings | positive token/request integers or null; null/absent is unlimited | Tenant | Turn returns quota_exceeded; Task preflight becomes blocked | Tenant-configurable | quotaSchema — packages/core/src/entities/tenants.ts |
| Tenant display name | 80 characters | Tenant settings | validation error | fixed | MAX_TENANT_NAME_LENGTH |
| Sandbox name | 80 characters | Sandbox | validation error | fixed | sandboxNameSchema — packages/core/src/entities/sandboxes.ts |
| Agent loop steps | 64 | Turn | loop reaches its terminal bound | fixed | MAX_STEPS — packages/server-core/src/agent-loop/run-agent.ts, run-stateless.ts |
| Turn deadline | default 30 minutes; operator range 1–60 minutes | Turn | cancellation/deadline stops new dispatch | deployment-configurable | MCP_RUNTIME_LIMITS.turnMs — packages/server-core/src/mcp/mcp-runtime-config.ts, packages/server-core/src/turn-service.ts |
| MCP runtime timeouts | connect 10 s (1–30); auth 10 s (1–30); discovery 15 s (1–60); Tool 60 s (1–300); cleanup 5 s (0.1–10) | MCP operation | operation fails safely | deployment-configurable | MCP_RUNTIME_LIMITS — packages/server-core/src/mcp/mcp-runtime-config.ts; ranges: servers/api/src/env.ts, servers/task-worker/src/env.ts; consumers: packages/server-core/src/mcp/mcp-tool-runtime.ts, packages/server-core/src/mcp/validate-mcp-connection.ts, packages/server-core/src/mcp/mcp-client-lifecycle.ts |
Byte values use binary units (1 MiB = 1,048,576 bytes). String .max()
values are character/string-unit limits unless a byte refinement proves
otherwise. In particular, the current Prompt template schema enforces 10,240
JavaScript string units despite the constant's historical ...BYTES name.
Limit behavior is not uniform. Memory capacity evicts rather than rejects;
Task overlap skips without a Task-run row; Sandbox contention queues rather
than returning SANDBOX_BUSY; context-window overflow is a Provider failure
because the full Session history is sent without platform truncation. A Turn
deadline does not roll back an external operation already accepted by a Tool.
Internal deployment values such as SANDBOX_CAPACITY, DBOS polling and pool
sizes, scheduler repair intervals, service ports, and cleanup batch sizes are
not public service limits. Draft plan entitlements and TBD billing rates in
docs/billing.md are also excluded until they are enforced and settled.
Session Turns, stateless generation, and Task execution are metered Turns. Memory rows are explicitly excluded from the Durable storage meter. A Tenant's self-set Quota is not a billing plan or a rate limit.
Examples
An oversized Skill archive can return HTTP 413 with this valid envelope:
{
"error": {
"code": "invalid_request",
"message": "Skill zip must be at most 3145728 bytes"
}
}Monitor totals against an optional Tenant ceiling without calculating a bill:
const [usage, settings] = await Promise.all([
client.usage.get({ from: "2026-07-01", to: "2026-07-20" }),
client.tenant.get(),
]);
const ceiling = settings.quota?.monthlyRequestLimit;
if (ceiling !== null && ceiling !== undefined) {
const remaining = ceiling - usage.totals.requestCount;
if (remaining < ceiling * 0.1) console.warn("Request Quota is nearly used");
}Used by
- Errors
- Pagination and filtering
- SDK Usage
- SDK Tenant settings
- REST Usage
- REST Tenant settings
- Limits and reliability
- Usage and quotas
- Monitor usage and quotas
- Troubleshoot a failed integration
Resource-specific rows also apply to their matching SDK, REST, and Capability pages.
Source of truth
packages/core/src/limitations.tspackages/core/src/limitations.test.tspackages/core/src/entities/agents.tspackages/core/src/entities/apikeys.tspackages/core/src/entities/mcp-connections.tspackages/core/src/entities/memories.tspackages/core/src/entities/prompts.tspackages/core/src/entities/providers.tspackages/core/src/entities/sandboxes.tspackages/core/src/entities/sessions.tspackages/core/src/entities/skills.tspackages/core/src/entities/tasks.tspackages/core/src/entities/tenants.tspackages/core/src/entities/usage.tspackages/core/src/entities/agents.test.tspackages/core/src/entities/agent-tools.tspackages/core/src/entities/agent-tools.test.tspackages/core/src/entities/apikeys.test.tspackages/core/src/entities/mcp-connections.test.tspackages/core/src/entities/memories.test.tspackages/core/src/entities/prompts.test.tspackages/core/src/entities/providers.test.tspackages/core/src/entities/sandboxes.test.tspackages/core/src/entities/sessions.test.tspackages/core/src/entities/skills.test.tspackages/core/src/entities/tasks-inputs.test.tspackages/core/src/entities/tasks-schedules.test.tspackages/core/src/entities/tenants.test.tspackages/core/src/entities/usage.test.tsservers/api/src/services/agent-service.tsservers/api/src/services/agent-service-create.test.tsservers/api/src/services/agent-service-versions.test.tsservers/api/src/services/api-key-service.tsservers/api/src/services/api-key-service.test.tsservers/api/src/services/mcp-connection-service.tsservers/api/src/services/mcp-connection-service.test.tsservers/api/src/services/prompt-service.tsservers/api/src/services/prompt-service.test.tsservers/api/src/services/provider-service.tsservers/api/src/services/provider-service-create.test.tsservers/api/src/services/provider-service-update.test.tspackages/server-core/src/skill-service.tspackages/server-core/src/skill-service-create.test.tspackages/server-core/src/artifact-service.tspackages/server-core/src/artifact-service-record.test.tspackages/server-core/src/memory-service.tspackages/server-core/src/memory-service-create.test.tspackages/server-core/src/memory-service-list.test.tspackages/server-core/src/task.tspackages/server-core/src/task-service-create.test.tspackages/server-core/src/task-service-queries.test.tspackages/server-core/src/agent-tools/save-artifacts.tspackages/server-core/src/agent-tools/save-artifacts.test.tspackages/server-core/src/agent-tools/shared.tspackages/server-core/src/agent-tools/write.tspackages/server-core/src/agent-tools/edit.tspackages/server-core/src/agent-tools/grep.tspackages/server-core/src/agent-tools/glob.tspackages/server-core/src/agent-tools/tools-files.test.tspackages/server-core/src/agent-tools/tools-search.test.tspackages/server-core/src/agent-loop/run-agent.tspackages/server-core/src/agent-loop/run-agent-errors.test.tspackages/server-core/src/agent-loop/run-stateless.tspackages/server-core/src/agent-loop/run-stateless.test.tspackages/server-core/src/mcp/mcp-runtime-config.tspackages/server-core/src/mcp/mcp-tool-runtime.tspackages/server-core/src/mcp/mcp-tool-runtime.test.tspackages/server-core/src/mcp/validate-mcp-connection.tspackages/server-core/src/mcp/mcp-client-lifecycle.tsservers/api/src/env.tsservers/api/src/env.test.tsservers/task-worker/src/env.tsservers/task-worker/src/env.test.tsservers/task-worker/src/task-run-execution.tssupabase/migrations/20260719000000_tables_memories.sqldocs/billing.mdfor settled billing distinctions only
Related guides
See the capability and guide links under Used by.
Reference
See the implementation inventory under Source of truth.