"use client"; import { useState } from "react"; import { Loader2, Save, Plus, Trash2, } from "lucide-react"; import type { Agent } from "@multica/core/types"; import { createSafeId } from "@multica/core/utils"; import { Button } from "@multica/ui/components/ui/button"; import { Input } from "@multica/ui/components/ui/input"; import { Label } from "@multica/ui/components/ui/label"; import { toast } from "sonner"; interface ArgEntry { id: string; value: string; } function argsToEntries(args: string[]): ArgEntry[] { return args.map((value) => ({ id: createSafeId(), value })); } function entriesToArgs(entries: ArgEntry[]): string[] { return entries.flatMap((e) => e.value.trim().split(/\s+/)).filter(Boolean); } export function CustomArgsTab({ agent, onSave, }: { agent: Agent; onSave: (updates: Partial) => Promise; }) { const [entries, setEntries] = useState( argsToEntries(agent.custom_args ?? []), ); const [saving, setSaving] = useState(false); const currentArgs = entriesToArgs(entries); const originalArgs = agent.custom_args ?? []; const dirty = JSON.stringify(currentArgs) !== JSON.stringify(originalArgs); const addEntry = () => { setEntries([...entries, { id: createSafeId(), value: "" }]); }; const removeEntry = (index: number) => { setEntries(entries.filter((_, i) => i !== index)); }; const updateEntry = (index: number, value: string) => { setEntries( entries.map((entry, i) => (i === index ? { ...entry, value } : entry)), ); }; const handleSave = async () => { setSaving(true); try { await onSave({ custom_args: currentArgs }); toast.success("Custom arguments saved"); } catch { toast.error("Failed to save custom arguments"); } finally { setSaving(false); } }; return (

Additional CLI arguments appended to the agent command at launch (e.g. --model claude-sonnet-4-20250514)

{entries.length > 0 && (
{entries.map((entry, index) => (
updateEntry(index, e.target.value)} placeholder="--model claude-sonnet-4-20250514" className="flex-1 font-mono text-xs" />
))}
)}
); }