From 21ade611ddf066fa31d16605994f722d562db0a6 Mon Sep 17 00:00:00 2001 From: Randolf Jung Date: Tue, 10 Mar 2026 20:48:22 -0700 Subject: [PATCH 1/2] chore: bump Node.js to 24 LTS --- .node-version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.node-version b/.node-version index 2bd5a0a..a45fd52 100644 --- a/.node-version +++ b/.node-version @@ -1 +1 @@ -22 +24 From c2a9448b580d03645701c70c755ed97f64dfedf4 Mon Sep 17 00:00:00 2001 From: Randolf Jung Date: Wed, 11 Mar 2026 04:15:45 -0700 Subject: [PATCH 2/2] feat: add model selection to run_agent_across_list Adds an optional `model` parameter to the `run_agent_across_list` tool. When provided, it passes `--model ''` to the agent CLI, enabling per-call model selection without requiring env var configuration. Co-Authored-By: Claude Sonnet 4.6 --- src/index.ts | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/index.ts b/src/index.ts index 6954704..1ec5e34 100644 --- a/src/index.ts +++ b/src/index.ts @@ -639,6 +639,12 @@ VARIABLE SUBSTITUTION: .describe( `Which AI agent to use: ${ENABLED_AGENTS.map((a) => `'${a}'`).join(", ")}. All agents run with permission-skipping flags for autonomous operation.` ), + model: z + .string() + .optional() + .describe( + "Optional model to use. Passed as --model to the agent CLI. Examples: 'claude-opus-4-6', 'claude-sonnet-4-6' for Claude; 'gemini-2.5-pro' for Gemini; 'o3' for Codex." + ), prompt: z .string() .describe( @@ -646,7 +652,7 @@ VARIABLE SUBSTITUTION: ), }, }, - async ({ list_id, agent, prompt }) => { + async ({ list_id, agent, model, prompt }) => { const items = lists.get(list_id); if (!items) { return { @@ -680,27 +686,28 @@ VARIABLE SUBSTITUTION: ): string => { const escapedPrompt = expandedPrompt.replace(/'/g, "'\\''"); const agentArgs = process.env.PAR5_AGENT_ARGS || ""; + const modelFlag = model ? `--model '${model}'` : ""; switch (agentName) { case "claude": { // Claude Code CLI with --dangerously-skip-permissions and streaming output const claudeArgs = process.env.PAR5_CLAUDE_ARGS || ""; - return `claude --dangerously-skip-permissions --output-format text --verbose ${agentArgs} ${claudeArgs} -p '${escapedPrompt}'`; + return `claude --dangerously-skip-permissions --output-format text --verbose ${modelFlag} ${agentArgs} ${claudeArgs} -p '${escapedPrompt}'`; } case "gemini": { // Gemini CLI with yolo mode and streaming JSON output const geminiArgs = process.env.PAR5_GEMINI_ARGS || ""; - return `gemini --yolo --output-format text ${agentArgs} ${geminiArgs} '${escapedPrompt}'`; + return `gemini --yolo --output-format text ${modelFlag} ${agentArgs} ${geminiArgs} '${escapedPrompt}'`; } case "codex": { // Codex CLI exec subcommand with full-auto flag and JSON streaming output const codexArgs = process.env.PAR5_CODEX_ARGS || ""; - return `codex exec --dangerously-bypass-approvals-and-sandbox ${agentArgs} ${codexArgs} '${escapedPrompt}'`; + return `codex exec --dangerously-bypass-approvals-and-sandbox ${modelFlag} ${agentArgs} ${codexArgs} '${escapedPrompt}'`; } case "opencode": { // OpenCode CLI run command for non-interactive autonomous operation const opencodeArgs = process.env.PAR5_OPENCODE_ARGS || ""; - return `opencode run ${agentArgs} ${opencodeArgs} '${escapedPrompt}'`; + return `opencode run ${modelFlag} ${agentArgs} ${opencodeArgs} '${escapedPrompt}'`; } default: throw new Error(`Unknown agent: ${agentName}`);