diff --git a/packages/opencode/src/agent/agent.ts b/packages/opencode/src/agent/agent.ts index a2ff825d9..add120f91 100644 --- a/packages/opencode/src/agent/agent.ts +++ b/packages/opencode/src/agent/agent.ts @@ -256,9 +256,9 @@ export namespace Agent { return state().then((x) => Object.values(x)) } - export async function generate(input: { description: string }) { + export async function generate(input: { description: string; model?: { providerID: string; modelID: string } }) { const cfg = await Config.get() - const defaultModel = await Provider.defaultModel() + const defaultModel = input.model ?? (await Provider.defaultModel()) const model = await Provider.getModel(defaultModel.providerID, defaultModel.modelID) const language = await Provider.getLanguage(model) const system = SystemPrompt.header(defaultModel.providerID) diff --git a/packages/opencode/src/cli/cmd/agent.ts b/packages/opencode/src/cli/cmd/agent.ts index 2cbcfbfe9..60dd9cc75 100644 --- a/packages/opencode/src/cli/cmd/agent.ts +++ b/packages/opencode/src/cli/cmd/agent.ts @@ -3,6 +3,7 @@ import * as prompts from "@clack/prompts" import { UI } from "../ui" import { Global } from "../../global" import { Agent } from "../../agent/agent" +import { Provider } from "../../provider/provider" import path from "path" import fs from "fs/promises" import matter from "gray-matter" @@ -47,6 +48,11 @@ const AgentCreateCommand = cmd({ .option("tools", { type: "string", describe: `comma-separated list of tools to enable (default: all). Available: "${AVAILABLE_TOOLS.join(", ")}"`, + }) + .option("model", { + type: "string", + alias: ["m"], + describe: "model to use in the format of provider/model", }), async handler(args) { await Instance.provide({ @@ -114,7 +120,8 @@ const AgentCreateCommand = cmd({ // Generate agent const spinner = prompts.spinner() spinner.start("Generating agent configuration...") - const generated = await Agent.generate({ description }).catch((error) => { + const model = args.model ? Provider.parseModel(args.model) : undefined + const generated = await Agent.generate({ description, model }).catch((error) => { spinner.stop(`LLM failed to generate agent: ${error.message}`, 1) if (isFullyNonInteractive) process.exit(1) throw new UI.CancelledError()