feat(delegation): add passthrough args for claude cli flags

Support passing through additional CLI flags like --agent, --system-prompt-file
to the underlying Claude CLI when using delegation mode.
This commit is contained in:
kaitranntt
2025-12-05 16:43:08 -05:00
parent fff40b6a27
commit 26d72cfa5b
2 changed files with 41 additions and 0 deletions
+34
View File
@@ -16,6 +16,7 @@ interface ParsedArgs {
timeout?: number;
resumeSession?: boolean;
sessionId?: string;
extraArgs?: string[]; // Passthrough args for Claude CLI
};
}
@@ -185,6 +186,39 @@ export class DelegationHandler {
options.timeout = parseInt(args[timeoutIndex + 1], 10);
}
// Collect extra args to pass through to Claude CLI
// CCS-handled flags with values (skip these and their values):
const ccsFlagsWithValue = new Set(['-p', '--prompt', '--timeout', '--permission-mode']);
const extraArgs: string[] = [];
const profile = this._extractProfile(args);
for (let i = 0; i < args.length; i++) {
const arg = args[i];
// Skip profile name (non-flag first arg)
if (arg === profile && !arg.startsWith('-')) continue;
// Skip CCS-handled flags and their values
if (ccsFlagsWithValue.has(arg)) {
i++; // Skip next arg (the value)
continue;
}
// Collect flags and their values as passthrough
if (arg.startsWith('-')) {
extraArgs.push(arg);
// If next arg exists and doesn't start with '-', it's likely a value
if (i + 1 < args.length && !args[i + 1].startsWith('-')) {
extraArgs.push(args[i + 1]);
i++; // Skip the value we just added
}
}
}
if (extraArgs.length > 0) {
options.extraArgs = extraArgs;
}
return options;
}
+7
View File
@@ -45,6 +45,7 @@ interface ExecutionOptions {
resumeSession?: boolean;
sessionId?: string;
maxRetries?: number;
extraArgs?: string[]; // Passthrough args for Claude CLI
}
interface ExecutionResult {
@@ -112,6 +113,7 @@ export class HeadlessExecutor {
permissionMode = 'acceptEdits',
resumeSession = false,
sessionId = null,
extraArgs = [],
} = options;
// Validate permission mode
@@ -210,6 +212,11 @@ export class HeadlessExecutor {
// Note: No max-turns limit - using time-based limits instead (default 10min timeout)
// Passthrough extra args (from Claude CLI flags like --agent, --system-prompt-file, etc.)
if (extraArgs.length > 0) {
args.push(...extraArgs);
}
// Debug log args
if (process.env.CCS_DEBUG) {
console.error(`[i] Claude CLI args: ${args.join(' ')}`);