set <path> [value] changes one field of agent.json. The path is dotted, and the fields it may change are these.
modelvoice.*, which isgreeting,eager,bargeIn,keypressInterrupts,harness,filler.*,stt.*andtts.*email.addressweb.titleandweb.greetingmemory.*limits.stepsapprovals.<tool>
true, 12, { "minWords": 2 }, and anything else as a string, so a value is quoted to keep it a string. The result is checked against the schema before anything is written, and a change that would leave agent.json invalid is refused with each problem named. The checks that need the rest of the project, the instruction and entry files, the secrets a model or an MCP server needs, and approvals without tools, run at validate, dev and deploy. A block set in parts must be complete before it is valid, which is why memory above is set whole first. On a terminal, set model with no value opens the same searchable list as the wizard.
A field another verb owns is refused with the verb to use. phone, channels, tools and secrets belong to add and remove; instructions names a file that is edited directly; name is the directory’s; kind and entry change through export; deployed is deploy’s record.
The next deploy ships the change, and a running dev reloads it, except web.title and web.greeting, which the page reads as dev starts.