feat(agent): add maxConcurrent config for parallel message handling

Adds `agent.maxConcurrent` config option to control how many agent runs
can execute in parallel across all conversations. Default remains 1
(sequential) for backwards compatibility.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Rolf Fredheim
2025-12-25 10:05:15 +00:00
committed by Peter Steinberger
parent 198f8ea700
commit 2295cbb815
2 changed files with 4 additions and 0 deletions

View File

@@ -325,6 +325,8 @@ export type ClawdisConfig = {
typingIntervalSeconds?: number;
/** Periodic background heartbeat runs (minutes). 0 disables. */
heartbeatMinutes?: number;
/** Max concurrent agent runs across all conversations. Default: 1 (sequential). */
maxConcurrent?: number;
/** Bash tool defaults. */
bash?: {
/** Default time (ms) before a bash command auto-backgrounds. */
@@ -582,6 +584,7 @@ const ClawdisSchema = z.object({
mediaMaxMb: z.number().positive().optional(),
typingIntervalSeconds: z.number().int().positive().optional(),
heartbeatMinutes: z.number().nonnegative().optional(),
maxConcurrent: z.number().int().positive().optional(),
bash: z
.object({
backgroundMs: z.number().int().positive().optional(),

View File

@@ -1736,6 +1736,7 @@ export async function startGatewayServer(
{ controller: AbortController; sessionId: string; sessionKey: string }
>();
setCommandLaneConcurrency("cron", cfgAtStart.cron?.maxConcurrentRuns ?? 1);
setCommandLaneConcurrency("main", cfgAtStart.agent?.maxConcurrent ?? 1);
const cronStorePath = resolveCronStorePath(cfgAtStart.cron?.store);
const cronLogger = getChildLogger({