Part of the Agent Substrate epic ⬆️. Depends on #A (budget) + #B (WorkerPool).
Goal
Keep Substrate within the 3-node budget and scale it to demand — ideally scale-to-zero when idle.
Today (grounded)
3-node GKE, autoscaling pool maxes ~5/zone but the operator constraint is "can't go beyond 3 nodes atm." Classic kagent's standing pods is exactly what we avoided. We have a KEDA pattern in mind (we wrote a nats-jetstream ScaledObject for the run-dispatch worker in docs/plans/nats-dispatch-workqueue/).
Tasks
Open decisions
- Scale-to-zero (cold start per first call) vs warm floor (cost) — depends on #A cold-start numbers.
- Dedicated sandbox node pool (cleaner isolation/scaling) vs shared.
Acceptance
Substrate runs within the 3-node budget, scales up under load and down (toward zero) when idle, with no impact on core DevAI services.
Refs: docs/plans/nats-dispatch-workqueue/IMPLEMENTATION-PLAN.md (KEDA pattern), KAGENT-INTEGRATION.md §0 (3-node rationale); memory: NATS WorkQueue Dispatch, Agent Harness + kagent.
— Part of #69
Part of the Agent Substrate epic ⬆️. Depends on #A (budget) + #B (WorkerPool).
Goal
Keep Substrate within the 3-node budget and scale it to demand — ideally scale-to-zero when idle.
Today (grounded)
3-node GKE, autoscaling pool maxes ~5/zone but the operator constraint is "can't go beyond 3 nodes atm." Classic kagent's standing pods is exactly what we avoided. We have a KEDA pattern in mind (we wrote a
nats-jetstreamScaledObject for the run-dispatch worker indocs/plans/nats-dispatch-workqueue/).Tasks
Open decisions
Acceptance
Substrate runs within the 3-node budget, scales up under load and down (toward zero) when idle, with no impact on core DevAI services.
Refs:
docs/plans/nats-dispatch-workqueue/IMPLEMENTATION-PLAN.md(KEDA pattern),KAGENT-INTEGRATION.md§0 (3-node rationale); memory: NATS WorkQueue Dispatch, Agent Harness + kagent.— Part of #69