Scrydon
DeploymentPrerequisites

Resources

CPU, memory, disk, and GPU requirements for Scrydon deployments

Use these requirements to size the cluster before running helm install.

Minimum (evaluation / small teams)

ResourceRequirement
CPU6 vCPU
RAM32 GB
Disk80 GB (database + StarRocks + images)
GPUNot required

These numbers assume the full default stack: Platform UI, Agentic, Cortex, Analytics, the bundled Postgres, SeaweedFS, and a single-pod StarRocks for Managed Tables. To run on smaller nodes (4 vCPU / 16 GB), trim the optional components. See Helm → Trimming for low-resource installs.

ResourceRequirement
CPU16 vCPU
RAM64 GB
Disk200 GB SSD
GPUOptional. Required only for local AI model inference, such as running Ollama in-cluster.

Note: GPU resources are contractually licensed (your license JWT reflects your entitlement), but Scrydon does not runtime-enforce GPU limits. GPU nodes are only needed if you plan to run local inference models inside your cluster.

Per-service memory

The Helm chart sets these per-pod memory requests and limits for single-replica defaults. The request is what the scheduler reserves. Your node pool must satisfy the sum of requests for enabled services before pods will schedule, so it is your reserved floor. The limit is the burst ceiling before a pod is OOM-killed.

To size node pools: sum the requests as the reserved floor, check the sum of limits for worst-case burst, then add ~30% headroom for kube-system pods, Dapr sidecars (~250 MiB each), the Dapr control plane, and small bundled infra such as OPA / Lakekeeper (~128 MiB each).

ServiceMemory requestMemory limitNotes
platform (UI)1 GiB2 GiBSSR shell + control-plane routes
agentic (workflow app)2 GiB4 GiBHeaviest app: workflow engine + Dapr Workflow runtime
agentic-realtime256 MiB512 MiBWebSocket fan-out
analytics (UI)1.5 GiB2 GiBSSR + chart rendering; heaviest steady-state RSS
cortex (chat UI)1 GiB2 GiBSSR + LLM streaming proxy
api-platform (auth/API)1 GiB2 GiBCatalog + workspace sources
api-ontology256 MiB512 MiBOptional
api-table256 MiB512 MiBEnabled by default; backs Managed Tables. Disable with apiTable.enabled: false.
marimo-document128 MiB512 MiBStateless, compute-free notebook document renderer
infra.db (Postgres)256 MiB1 GiBBundled. Disable if using managed Postgres.
infra.seaweedfs256 MiB1 GiBBundled. Disable if using managed S3.
infra.starrocks2 GiB8 GiBEnabled by default (single-pod allin1). Disable with infra.starrocks.enabled: false or replace with the StarRocks Operator for multi-AZ.

Isolated notebook compute is additional and schedules in runtimePlane.workloadNamespace. Each active interactive runtime reserves 4 GiB for Marimo plus 1 GiB for source control, 512 MiB for its broker, and 128 MiB for the egress enforcer (5.625 GiB total). A notebook job reserves 4 GiB for its runner plus 128 MiB each for its broker and enforcer (4.25 GiB total). Size the Kata/KVM node pool for expected concurrent sessions and jobs; opening documents does not consume this capacity.

Limits were last revised on 2026-05-18 (v1.3.5-rc.54 binary-minification rollout, PR #1142, which roughly doubled steady-state RSS for the SSR apps; the platform limit was subsequently raised to 2 GiB on 2026-05-29). Requests were right-sized on 2026-07-06 (PR #2257) to track measured steady-state RSS. The previous requests understated real usage 2-4x, so the scheduler over-packed nodes and pods were evicted mid-rollout under memory pressure. If you upgrade across either boundary on a pre-existing cluster, verify your node pool has headroom before running helm upgrade.

AI Gateway

The AI Gateway runs inside the api-platform pod, so its cost lands on that Deployment's CPU rather than on a service of its own. The chart ships auth.resources at a 500m request and a 2000m limit. That default carries the control-plane traffic api-platform already serves; router traffic is additional, and is the one workload on this page that scales with how your people work rather than with how many services you enabled.

What one turn costs

A turn's CPU cost is a small fixed part plus a part that scales with the number of streamed events, not with the number of bytes. Your DLP posture changes the per-event term, so there are three curves rather than one:

DLP modeCPU per turn
disabled0.017 vCPU-s + 0.14 ms × events
audit0.025 vCPU-s + 0.18 ms × events
enforce0.026 vCPU-s + 0.20 ms × events

The event term is the one that matters. A coding agent streams roughly one event per generated token, so a turn that writes 600 tokens costs about five times a turn that writes 100 — even though both are small responses. Note that DLP is almost entirely a per-event cost, not a fixed one: it inspects the stream as it passes, so a longer answer pays more.

Response lengthStreamed eventsdisabledauditenforce
~200 tokens (short answer, tool call)~2000.05 vCPU-s0.06 vCPU-s0.07 vCPU-s
~600 tokens (typical agent turn)~6000.10 vCPU-s0.13 vCPU-s0.15 vCPU-s
~1 000 tokens~1 0000.16 vCPU-s0.20 vCPU-s0.23 vCPU-s
~2 000 tokens (long code write)~2 0000.30 vCPU-s0.38 vCPU-s0.43 vCPU-s

Prompt size is close to free by comparison: a 150 KB prompt costs about the same as a 16 KB one, because the router parses a request once and does not re-read it.

enforce also adds a consistent ~11 ms to time-to-first-token — it releases the stream in governed 512-character windows and holds back a 256-character tail so a finding straddling a boundary is still caught. That cost is flat: it does not grow with the length of the answer. audit adds no measurable TTFT, because it inspects without holding anything back.

Sizing for a developer population

Size from turns per second, not from how many developers hold an account. A developer with an agent open is not streaming continuously — they read, edit, and think between turns. The fraction of time their tool is actually streaming is the duty cycle, and it is the number that decides your CPU.

For 1 000 developers issuing typical 600-token turns of roughly 15 seconds each:

Provisioned vCPU below is at a 65 % utilisation target, for all three DLP modes:

Duty cycleConcurrent streamsTurns/sdisabledauditenforceReplicas
10 % — occasional use1006.71.1 vCPU1.3 vCPU1.5 vCPU2
25 % — steady coding-agent use25016.72.6 vCPU3.3 vCPU3.8 vCPU4
50 % — heavy, agent-driven50033.35.3 vCPU6.7 vCPU7.5 vCPU8
100 % — every developer streaming at once1 00066.710.5 vCPU13.4 vCPU15.1 vCPU16

Turning DLP on costs roughly 25 % more CPU per turn in audit and 50 % in enforce, on a typical agent turn. That is a real cost but rarely the deciding one — the replica count below moves first.

The replica count is usually the binding number, not the vCPU total. Each pod accepts auth.llmRouter.maxInFlight open turns (default 64), so the minimum replica count is concurrent streams ÷ 64 regardless of how much CPU headroom a pod has. At 250 concurrent streams that is 4 replicas holding about 3.5 vCPU between them — well under the 2000m limit each one is allowed. Raise maxInFlight and the CPU limit together, or add replicas; do not raise one alone.

Validating your own numbers

The figures above are a starting point, not a substitute for measuring your own traffic. Turn length, DLP posture, and how agent-heavy your developers are all move the result by more than the modelling error. Once traffic is real, the metrics on the AI Gateway capacity section tell you where you actually are:

  • scrydon_llm_router_streams_in_flight against your maxInFlight — how close a pod is to shedding.
  • scrydon_llm_router_admission_rejections_total — sustained non-zero at steady state means add a replica, not client retries.
  • scrydon_llm_router_overhead_ms versus scrydon_llm_router_provider_ttfb_ms — separates time your platform spent from time the provider spent, so you can tell a capacity problem from a slow model.

A single organisation has a second ceiling, independent of CPU. Each turn writes hash-chained audit evidence, and that evidence is ordered per organisation — so one tenant's sustained turn rate is bounded by how fast its audit chain commits, and adding replicas does not move it. Two audit writes per turn, or four when DLP runs in enforce.

Our capacity suite measures that commit at 3-10 ms, which puts one organisation somewhere between roughly 100 and 380 audit writes per second — comfortably above every row in the table above except the last one under enforce. If you are placing all 1 000 developers in one organisation and running DLP in enforce and expecting them to stream simultaneously, validate that combination before committing to it. Traffic spread across several organisations does not share the ordering and is not affected.

On this page

On this page