ReferenceProtocols and contracts

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.

LimitCurrent valueScopeOn exceedKindEnforcing source
API keys per Tenant5Tenantinvalid_request on createfixedMAX_API_KEYS_PER_TENANT
API key name80 charactersAPI keyvalidation errorfixedMAX_API_KEY_NAME_LENGTH
API key expirywhen supplied, must be later than the current timeAPI key createinvalid_requestfixedservers/api/src/services/api-key-service.ts
Agents per Tenant100Tenantinvalid_request on createfixed product guardMAX_AGENTS_PER_TENANT
Agent fieldsname 80; instructions 3,000 charactersAgentvalidation errorfixedMAX_AGENT_NAME_LENGTH, MAX_AGENT_INSTRUCTIONS_LENGTH
MCP Connections per Agent10Agentvalidation errorfixedMAX_MCP_CONNECTIONS_PER_AGENT
Agent Version pagedefault 50; max 200list requestvalidation errorfixedDEFAULT_AGENT_VERSIONS_LIST_LIMIT, MAX_AGENT_VERSIONS_LIST_LIMIT
Agent avatar upload512 KiB; PNG, JPEG, or WebP matching filename extensionupload413 for size; 415 for media type; code invalid_requestfixedmaxAvatarBytesservers/api/src/services/agent-service.ts
Providers per Tenant20Tenantinvalid_request on createfixedMAX_PROVIDERS_PER_TENANT
Provider name80 charactersProvidervalidation errorfixedMAX_PROVIDER_NAME_LENGTH
Custom Provider base URLrequired, non-empty, valid URL on create and unsaved test; a stored custom Provider cannot update it to nullcustom Provider configvalidation errorfixedpackages/core/src/entities/providers.ts, servers/api/src/services/provider-service.ts
MCP Connections per Tenant50Tenantinvalid_request on createfixedMAX_MCP_CONNECTIONS_PER_TENANT
MCP Connection inputname 80; URL/client ID/scope 2,048; bearer token/client secret 8,192 charactersconnection requestvalidation errorfixedMAX_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 Tools128 per Connection; 256 per Turnremote MCP catalogconnection/Turn fails safelyfixedMAX_MCP_TOOLS_PER_CONNECTION, MAX_MCP_TOOLS_PER_TURN
MCP payloadsdefinition 256 KiB; definitions per Connection 1 MiB; Tool result 1 MiB; request context 16 KiBMCP setup/callconnection/Tool errorfixedMAX_MCP_TOOL_DEFINITION_BYTES, MAX_MCP_CONNECTION_TOOL_DEFINITIONS_BYTES, MAX_MCP_TOOL_RESULT_BYTES, MAX_MCP_REQUEST_CONTEXT_BYTES
MCP forwarded metadata32 keys, each 64 charactersMCP Attachmentvalidation errorfixedMAX_MCP_ATTACHMENT_METADATA_KEYS, MAX_MCP_ATTACHMENT_METADATA_KEY_LENGTH
Tenant Skills per Tenant100; platform Skills excludedTenantinvalid_request on createfixedMAX_SKILLS_PER_TENANT
Skill archive3 MiB ZIP; 10 MiB total uncompressed; 90 filesuploadinvalid_request or 413fixedMAX_SKILL_ZIP_BYTES, MAX_SKILL_UNCOMPRESSED_BYTES, MAX_SKILL_FILES
Skill fieldsname 80; description 500 charactersSkillvalidation errorfixedMAX_SKILL_NAME_LENGTH, MAX_SKILL_DESCRIPTION_LENGTH
Prompts per Tenant100Tenantinvalid_request on createfixedMAX_PROMPTS_PER_TENANT
Prompt fieldsname 80; template 10,240 JavaScript string units; 10 distinct variablesPromptvalidation errorfixedMAX_PROMPT_NAME_LENGTH, MAX_PROMPT_TEMPLATE_BYTES, MAX_PROMPT_VARIABLES
Tasks per Tenant100Tenantinvalid_request on createfixedMAX_TASKS_PER_TENANT
Task fieldsname 80; prompt 6,000 charactersTaskvalidation errorfixedMAX_TASK_NAME_LENGTH, MAX_TASK_PROMPT_LENGTH
Task schedule fieldscron expression 120; timezone 64 charactersTask cron schedulevalidation errorfixedpackages/core/src/entities/tasks.ts
Task intervalminimum 60,000 msinterval schedulevalidation errorfixedMIN_TASK_INTERVAL_MS
Active Task run1 per TaskTaskoverlapping schedule fire is skippedfixedpackages/server-core/src/task.ts
Task recent-run preview3 terminal runsTask responseolder preview entries drop outfixedtaskRecentRunsSchemapackages/core/src/entities/tasks.ts
Task run lifetimedefault 35 minutes; minimum 1 minuteTask runlifetime cancellation stops the Turndeployment-configurableTASK_RUN_TIMEOUT_MSservers/task-worker/src/env.ts, servers/task-worker/src/task-run-execution.ts
File write input512,000 UTF-8 bytesone write Tool callTool error outputfixedMAX_WRITE_BYTESpackages/server-core/src/agent-tools/shared.ts
File edit input256,000 UTF-8 bytes across old and new textone edit Tool callTool error outputfixedMAX_EDIT_INPUT_BYTESpackages/server-core/src/agent-tools/shared.ts
File Tool output bytes50 KiBone Tool resultoutput is truncatedfixedOUTPUT_MAX_BYTESpackages/server-core/src/agent-tools/shared.ts
File Tool output lines2,000 linesone Tool resultoutput is truncatedfixedOUTPUT_MAX_LINESpackages/server-core/src/agent-tools/shared.ts
File grep output100 matches; 500 characters per rendered match lineone grep Tool callextra matches and line text are truncatedfixedGREP_MAX_MATCHES, GREP_MAX_LINE_CHARSpackages/server-core/src/agent-tools/shared.ts
File glob output1,000 pathsone glob Tool callextra paths are truncatedfixedGLOB_MAX_RESULTSpackages/server-core/src/agent-tools/shared.ts
Artifact file10 MiBsave_artifactsTool error outputfixedMAX_ARTIFACT_BYTES
Artifact batch10 paths; 25 MiB totalone save_artifacts callTool error outputfixedMAX_ARTIFACT_PATHS_PER_CALL, MAX_ARTIFACT_BATCH_BYTES
Artifacts per Session100Sessioninvalid_request while recordingfixedMAX_ARTIFACTS_PER_SESSION
Memories per Agent500 across all Attribution partitionsAgentleast-recently-accessed rows are evicted on createfixedMAX_MEMORIES_PER_AGENT
Memory text10 KiB UTF-8 bytesMemoryvalidation errorfixedMAX_MEMORY_TEXT_BYTES, supabase/migrations/20260719000000_tables_memories.sql
Memory pagedefault 50; max 100list requestvalidation errorfixedDEFAULT_MEMORIES_LIST_LIMIT, MAX_MEMORIES_LIST_LIMIT
Memory Tool searchdefault 10; max 20Tool callTool validation errorfixedDEFAULT_MEMORY_TOOL_SEARCH_LIMIT, MAX_MEMORY_TOOL_SEARCH_LIMIT
Session or Task-run message pagedefault 50; max 200list requestvalidation errorfixedDEFAULT_SESSION_MESSAGES_LIMIT, MAX_SESSION_MESSAGES_LIMIT
Tool approval decision reason1,000 charactersapproval decisionvalidation errorfixeddecideToolApprovalBodySchemapackages/core/src/entities/sessions.ts
Other cursored resource pagesSessions, Sandboxes, Tasks, Task runs default 50/max 200; Artifacts fixed 50list requestvalidation errorfixedpackages/core/src/entities/sessions.ts, sandboxes.ts, tasks.ts; servers/api/src/routes/artifacts/list.ts
Usage query windowdefault last 30 UTC days; bounds differ by at most 31 daysqueryvalidation errorfixedDEFAULT_USAGE_RANGE_DAYS, MAX_USAGE_RANGE_DAYS
Usage Session top-Ndefault 50; max 200groupBy=sessionvalidation errorfixedDEFAULT_USAGE_SESSION_TOP_N, MAX_USAGE_SESSION_TOP_N
Quota reset day1–28Tenant Quotavalidation errorTenant-configurableMIN_QUOTA_RESET_DAY, MAX_QUOTA_RESET_DAY
Quota ceilingspositive token/request integers or null; null/absent is unlimitedTenantTurn returns quota_exceeded; Task preflight becomes blockedTenant-configurablequotaSchemapackages/core/src/entities/tenants.ts
Tenant display name80 charactersTenant settingsvalidation errorfixedMAX_TENANT_NAME_LENGTH
Sandbox name80 charactersSandboxvalidation errorfixedsandboxNameSchemapackages/core/src/entities/sandboxes.ts
Agent loop steps64Turnloop reaches its terminal boundfixedMAX_STEPSpackages/server-core/src/agent-loop/run-agent.ts, run-stateless.ts
Turn deadlinedefault 30 minutes; operator range 1–60 minutesTurncancellation/deadline stops new dispatchdeployment-configurableMCP_RUNTIME_LIMITS.turnMspackages/server-core/src/mcp/mcp-runtime-config.ts, packages/server-core/src/turn-service.ts
MCP runtime timeoutsconnect 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 operationoperation fails safelydeployment-configurableMCP_RUNTIME_LIMITSpackages/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

Resource-specific rows also apply to their matching SDK, REST, and Capability pages.

Source of truth

  • packages/core/src/limitations.ts
  • packages/core/src/limitations.test.ts
  • packages/core/src/entities/agents.ts
  • packages/core/src/entities/apikeys.ts
  • packages/core/src/entities/mcp-connections.ts
  • packages/core/src/entities/memories.ts
  • packages/core/src/entities/prompts.ts
  • packages/core/src/entities/providers.ts
  • packages/core/src/entities/sandboxes.ts
  • packages/core/src/entities/sessions.ts
  • packages/core/src/entities/skills.ts
  • packages/core/src/entities/tasks.ts
  • packages/core/src/entities/tenants.ts
  • packages/core/src/entities/usage.ts
  • packages/core/src/entities/agents.test.ts
  • packages/core/src/entities/agent-tools.ts
  • packages/core/src/entities/agent-tools.test.ts
  • packages/core/src/entities/apikeys.test.ts
  • packages/core/src/entities/mcp-connections.test.ts
  • packages/core/src/entities/memories.test.ts
  • packages/core/src/entities/prompts.test.ts
  • packages/core/src/entities/providers.test.ts
  • packages/core/src/entities/sandboxes.test.ts
  • packages/core/src/entities/sessions.test.ts
  • packages/core/src/entities/skills.test.ts
  • packages/core/src/entities/tasks-inputs.test.ts
  • packages/core/src/entities/tasks-schedules.test.ts
  • packages/core/src/entities/tenants.test.ts
  • packages/core/src/entities/usage.test.ts
  • servers/api/src/services/agent-service.ts
  • servers/api/src/services/agent-service-create.test.ts
  • servers/api/src/services/agent-service-versions.test.ts
  • servers/api/src/services/api-key-service.ts
  • servers/api/src/services/api-key-service.test.ts
  • servers/api/src/services/mcp-connection-service.ts
  • servers/api/src/services/mcp-connection-service.test.ts
  • servers/api/src/services/prompt-service.ts
  • servers/api/src/services/prompt-service.test.ts
  • servers/api/src/services/provider-service.ts
  • servers/api/src/services/provider-service-create.test.ts
  • servers/api/src/services/provider-service-update.test.ts
  • packages/server-core/src/skill-service.ts
  • packages/server-core/src/skill-service-create.test.ts
  • packages/server-core/src/artifact-service.ts
  • packages/server-core/src/artifact-service-record.test.ts
  • packages/server-core/src/memory-service.ts
  • packages/server-core/src/memory-service-create.test.ts
  • packages/server-core/src/memory-service-list.test.ts
  • packages/server-core/src/task.ts
  • packages/server-core/src/task-service-create.test.ts
  • packages/server-core/src/task-service-queries.test.ts
  • packages/server-core/src/agent-tools/save-artifacts.ts
  • packages/server-core/src/agent-tools/save-artifacts.test.ts
  • packages/server-core/src/agent-tools/shared.ts
  • packages/server-core/src/agent-tools/write.ts
  • packages/server-core/src/agent-tools/edit.ts
  • packages/server-core/src/agent-tools/grep.ts
  • packages/server-core/src/agent-tools/glob.ts
  • packages/server-core/src/agent-tools/tools-files.test.ts
  • packages/server-core/src/agent-tools/tools-search.test.ts
  • packages/server-core/src/agent-loop/run-agent.ts
  • packages/server-core/src/agent-loop/run-agent-errors.test.ts
  • packages/server-core/src/agent-loop/run-stateless.ts
  • packages/server-core/src/agent-loop/run-stateless.test.ts
  • packages/server-core/src/mcp/mcp-runtime-config.ts
  • packages/server-core/src/mcp/mcp-tool-runtime.ts
  • packages/server-core/src/mcp/mcp-tool-runtime.test.ts
  • packages/server-core/src/mcp/validate-mcp-connection.ts
  • packages/server-core/src/mcp/mcp-client-lifecycle.ts
  • servers/api/src/env.ts
  • servers/api/src/env.test.ts
  • servers/task-worker/src/env.ts
  • servers/task-worker/src/env.test.ts
  • servers/task-worker/src/task-run-execution.ts
  • supabase/migrations/20260719000000_tables_memories.sql
  • docs/billing.md for settled billing distinctions only

See the capability and guide links under Used by.

Reference

See the implementation inventory under Source of truth.

On this page