oh-my-opencode-slim.schema.json 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678
  1. {
  2. "$schema": "https://json-schema.org/draft/2020-12/schema",
  3. "type": "object",
  4. "properties": {
  5. "preset": {
  6. "type": "string"
  7. },
  8. "setDefaultAgent": {
  9. "type": "boolean"
  10. },
  11. "scoringEngineVersion": {
  12. "type": "string",
  13. "enum": [
  14. "v1",
  15. "v2-shadow",
  16. "v2"
  17. ]
  18. },
  19. "balanceProviderUsage": {
  20. "type": "boolean"
  21. },
  22. "showStartupToast": {
  23. "description": "Show the startup activation toast when OpenCode starts. Defaults to true.",
  24. "type": "boolean"
  25. },
  26. "manualPlan": {
  27. "type": "object",
  28. "properties": {
  29. "orchestrator": {
  30. "type": "object",
  31. "properties": {
  32. "primary": {
  33. "type": "string",
  34. "pattern": "^[^/\\s]+\\/[^\\s]+$"
  35. },
  36. "fallback1": {
  37. "type": "string",
  38. "pattern": "^[^/\\s]+\\/[^\\s]+$"
  39. },
  40. "fallback2": {
  41. "type": "string",
  42. "pattern": "^[^/\\s]+\\/[^\\s]+$"
  43. },
  44. "fallback3": {
  45. "type": "string",
  46. "pattern": "^[^/\\s]+\\/[^\\s]+$"
  47. }
  48. },
  49. "required": [
  50. "primary",
  51. "fallback1",
  52. "fallback2",
  53. "fallback3"
  54. ]
  55. },
  56. "oracle": {
  57. "type": "object",
  58. "properties": {
  59. "primary": {
  60. "type": "string",
  61. "pattern": "^[^/\\s]+\\/[^\\s]+$"
  62. },
  63. "fallback1": {
  64. "type": "string",
  65. "pattern": "^[^/\\s]+\\/[^\\s]+$"
  66. },
  67. "fallback2": {
  68. "type": "string",
  69. "pattern": "^[^/\\s]+\\/[^\\s]+$"
  70. },
  71. "fallback3": {
  72. "type": "string",
  73. "pattern": "^[^/\\s]+\\/[^\\s]+$"
  74. }
  75. },
  76. "required": [
  77. "primary",
  78. "fallback1",
  79. "fallback2",
  80. "fallback3"
  81. ]
  82. },
  83. "designer": {
  84. "type": "object",
  85. "properties": {
  86. "primary": {
  87. "type": "string",
  88. "pattern": "^[^/\\s]+\\/[^\\s]+$"
  89. },
  90. "fallback1": {
  91. "type": "string",
  92. "pattern": "^[^/\\s]+\\/[^\\s]+$"
  93. },
  94. "fallback2": {
  95. "type": "string",
  96. "pattern": "^[^/\\s]+\\/[^\\s]+$"
  97. },
  98. "fallback3": {
  99. "type": "string",
  100. "pattern": "^[^/\\s]+\\/[^\\s]+$"
  101. }
  102. },
  103. "required": [
  104. "primary",
  105. "fallback1",
  106. "fallback2",
  107. "fallback3"
  108. ]
  109. },
  110. "explorer": {
  111. "type": "object",
  112. "properties": {
  113. "primary": {
  114. "type": "string",
  115. "pattern": "^[^/\\s]+\\/[^\\s]+$"
  116. },
  117. "fallback1": {
  118. "type": "string",
  119. "pattern": "^[^/\\s]+\\/[^\\s]+$"
  120. },
  121. "fallback2": {
  122. "type": "string",
  123. "pattern": "^[^/\\s]+\\/[^\\s]+$"
  124. },
  125. "fallback3": {
  126. "type": "string",
  127. "pattern": "^[^/\\s]+\\/[^\\s]+$"
  128. }
  129. },
  130. "required": [
  131. "primary",
  132. "fallback1",
  133. "fallback2",
  134. "fallback3"
  135. ]
  136. },
  137. "librarian": {
  138. "type": "object",
  139. "properties": {
  140. "primary": {
  141. "type": "string",
  142. "pattern": "^[^/\\s]+\\/[^\\s]+$"
  143. },
  144. "fallback1": {
  145. "type": "string",
  146. "pattern": "^[^/\\s]+\\/[^\\s]+$"
  147. },
  148. "fallback2": {
  149. "type": "string",
  150. "pattern": "^[^/\\s]+\\/[^\\s]+$"
  151. },
  152. "fallback3": {
  153. "type": "string",
  154. "pattern": "^[^/\\s]+\\/[^\\s]+$"
  155. }
  156. },
  157. "required": [
  158. "primary",
  159. "fallback1",
  160. "fallback2",
  161. "fallback3"
  162. ]
  163. },
  164. "fixer": {
  165. "type": "object",
  166. "properties": {
  167. "primary": {
  168. "type": "string",
  169. "pattern": "^[^/\\s]+\\/[^\\s]+$"
  170. },
  171. "fallback1": {
  172. "type": "string",
  173. "pattern": "^[^/\\s]+\\/[^\\s]+$"
  174. },
  175. "fallback2": {
  176. "type": "string",
  177. "pattern": "^[^/\\s]+\\/[^\\s]+$"
  178. },
  179. "fallback3": {
  180. "type": "string",
  181. "pattern": "^[^/\\s]+\\/[^\\s]+$"
  182. }
  183. },
  184. "required": [
  185. "primary",
  186. "fallback1",
  187. "fallback2",
  188. "fallback3"
  189. ]
  190. }
  191. },
  192. "required": [
  193. "orchestrator",
  194. "oracle",
  195. "designer",
  196. "explorer",
  197. "librarian",
  198. "fixer"
  199. ],
  200. "additionalProperties": false
  201. },
  202. "presets": {
  203. "type": "object",
  204. "propertyNames": {
  205. "type": "string"
  206. },
  207. "additionalProperties": {
  208. "type": "object",
  209. "propertyNames": {
  210. "type": "string"
  211. },
  212. "additionalProperties": {
  213. "type": "object",
  214. "properties": {
  215. "model": {
  216. "anyOf": [
  217. {
  218. "type": "string"
  219. },
  220. {
  221. "type": "array",
  222. "items": {
  223. "anyOf": [
  224. {
  225. "type": "string"
  226. },
  227. {
  228. "type": "object",
  229. "properties": {
  230. "id": {
  231. "type": "string"
  232. },
  233. "variant": {
  234. "type": "string"
  235. }
  236. },
  237. "required": [
  238. "id"
  239. ]
  240. }
  241. ]
  242. }
  243. }
  244. ]
  245. },
  246. "temperature": {
  247. "type": "number",
  248. "minimum": 0,
  249. "maximum": 2
  250. },
  251. "variant": {
  252. "type": "string"
  253. },
  254. "skills": {
  255. "type": "array",
  256. "items": {
  257. "type": "string"
  258. }
  259. },
  260. "mcps": {
  261. "type": "array",
  262. "items": {
  263. "type": "string"
  264. }
  265. },
  266. "options": {
  267. "type": "object",
  268. "propertyNames": {
  269. "type": "string"
  270. },
  271. "additionalProperties": {}
  272. },
  273. "displayName": {
  274. "type": "string",
  275. "minLength": 1
  276. }
  277. }
  278. }
  279. }
  280. },
  281. "agents": {
  282. "type": "object",
  283. "propertyNames": {
  284. "type": "string"
  285. },
  286. "additionalProperties": {
  287. "type": "object",
  288. "properties": {
  289. "model": {
  290. "anyOf": [
  291. {
  292. "type": "string"
  293. },
  294. {
  295. "type": "array",
  296. "items": {
  297. "anyOf": [
  298. {
  299. "type": "string"
  300. },
  301. {
  302. "type": "object",
  303. "properties": {
  304. "id": {
  305. "type": "string"
  306. },
  307. "variant": {
  308. "type": "string"
  309. }
  310. },
  311. "required": [
  312. "id"
  313. ]
  314. }
  315. ]
  316. }
  317. }
  318. ]
  319. },
  320. "temperature": {
  321. "type": "number",
  322. "minimum": 0,
  323. "maximum": 2
  324. },
  325. "variant": {
  326. "type": "string"
  327. },
  328. "skills": {
  329. "type": "array",
  330. "items": {
  331. "type": "string"
  332. }
  333. },
  334. "mcps": {
  335. "type": "array",
  336. "items": {
  337. "type": "string"
  338. }
  339. },
  340. "options": {
  341. "type": "object",
  342. "propertyNames": {
  343. "type": "string"
  344. },
  345. "additionalProperties": {}
  346. },
  347. "displayName": {
  348. "type": "string",
  349. "minLength": 1
  350. }
  351. }
  352. }
  353. },
  354. "disabled_agents": {
  355. "description": "Agent names to disable completely. Disabled agents are not instantiated and cannot be delegated to. Orchestrator and council internal agents (councillor, council-master) cannot be disabled. By default, 'observer' is disabled. Remove it from this list and configure a vision-capable model to enable.",
  356. "type": "array",
  357. "items": {
  358. "type": "string"
  359. }
  360. },
  361. "disabled_mcps": {
  362. "type": "array",
  363. "items": {
  364. "type": "string"
  365. }
  366. },
  367. "multiplexer": {
  368. "type": "object",
  369. "properties": {
  370. "type": {
  371. "default": "none",
  372. "type": "string",
  373. "enum": [
  374. "auto",
  375. "tmux",
  376. "zellij",
  377. "none"
  378. ]
  379. },
  380. "layout": {
  381. "default": "main-vertical",
  382. "type": "string",
  383. "enum": [
  384. "main-horizontal",
  385. "main-vertical",
  386. "tiled",
  387. "even-horizontal",
  388. "even-vertical"
  389. ]
  390. },
  391. "main_pane_size": {
  392. "default": 60,
  393. "type": "number",
  394. "minimum": 20,
  395. "maximum": 80
  396. }
  397. }
  398. },
  399. "tmux": {
  400. "type": "object",
  401. "properties": {
  402. "enabled": {
  403. "default": false,
  404. "type": "boolean"
  405. },
  406. "layout": {
  407. "default": "main-vertical",
  408. "type": "string",
  409. "enum": [
  410. "main-horizontal",
  411. "main-vertical",
  412. "tiled",
  413. "even-horizontal",
  414. "even-vertical"
  415. ]
  416. },
  417. "main_pane_size": {
  418. "default": 60,
  419. "type": "number",
  420. "minimum": 20,
  421. "maximum": 80
  422. }
  423. }
  424. },
  425. "websearch": {
  426. "type": "object",
  427. "properties": {
  428. "provider": {
  429. "default": "exa",
  430. "type": "string",
  431. "enum": [
  432. "exa",
  433. "tavily"
  434. ]
  435. }
  436. }
  437. },
  438. "background": {
  439. "type": "object",
  440. "properties": {
  441. "maxConcurrentStarts": {
  442. "default": 10,
  443. "type": "number",
  444. "minimum": 1,
  445. "maximum": 50
  446. }
  447. }
  448. },
  449. "interview": {
  450. "type": "object",
  451. "properties": {
  452. "maxQuestions": {
  453. "default": 2,
  454. "type": "integer",
  455. "minimum": 1,
  456. "maximum": 10
  457. },
  458. "outputFolder": {
  459. "default": "interview",
  460. "type": "string",
  461. "minLength": 1
  462. },
  463. "autoOpenBrowser": {
  464. "default": true,
  465. "type": "boolean"
  466. },
  467. "port": {
  468. "default": 0,
  469. "type": "integer",
  470. "minimum": 0,
  471. "maximum": 65535
  472. },
  473. "dashboard": {
  474. "default": false,
  475. "type": "boolean"
  476. }
  477. }
  478. },
  479. "todoContinuation": {
  480. "type": "object",
  481. "properties": {
  482. "maxContinuations": {
  483. "default": 5,
  484. "description": "Maximum consecutive auto-continuations before stopping to ask user",
  485. "type": "integer",
  486. "minimum": 1,
  487. "maximum": 50
  488. },
  489. "cooldownMs": {
  490. "default": 3000,
  491. "description": "Delay in ms before auto-continuing (gives user time to abort)",
  492. "type": "integer",
  493. "minimum": 0,
  494. "maximum": 30000
  495. },
  496. "autoEnable": {
  497. "default": false,
  498. "description": "Automatically enable auto-continue when the orchestrator session has enough todos",
  499. "type": "boolean"
  500. },
  501. "autoEnableThreshold": {
  502. "default": 4,
  503. "description": "Number of todos that triggers auto-enable (only used when autoEnable is true)",
  504. "type": "integer",
  505. "minimum": 1,
  506. "maximum": 50
  507. }
  508. }
  509. },
  510. "fallback": {
  511. "type": "object",
  512. "properties": {
  513. "enabled": {
  514. "default": true,
  515. "type": "boolean"
  516. },
  517. "timeoutMs": {
  518. "default": 15000,
  519. "type": "number",
  520. "minimum": 0
  521. },
  522. "retryDelayMs": {
  523. "default": 500,
  524. "type": "number",
  525. "minimum": 0
  526. },
  527. "chains": {
  528. "default": {},
  529. "type": "object",
  530. "properties": {
  531. "orchestrator": {
  532. "minItems": 1,
  533. "type": "array",
  534. "items": {
  535. "type": "string"
  536. }
  537. },
  538. "oracle": {
  539. "minItems": 1,
  540. "type": "array",
  541. "items": {
  542. "type": "string"
  543. }
  544. },
  545. "designer": {
  546. "minItems": 1,
  547. "type": "array",
  548. "items": {
  549. "type": "string"
  550. }
  551. },
  552. "explorer": {
  553. "minItems": 1,
  554. "type": "array",
  555. "items": {
  556. "type": "string"
  557. }
  558. },
  559. "librarian": {
  560. "minItems": 1,
  561. "type": "array",
  562. "items": {
  563. "type": "string"
  564. }
  565. },
  566. "fixer": {
  567. "minItems": 1,
  568. "type": "array",
  569. "items": {
  570. "type": "string"
  571. }
  572. }
  573. },
  574. "additionalProperties": {
  575. "minItems": 1,
  576. "type": "array",
  577. "items": {
  578. "type": "string"
  579. }
  580. }
  581. },
  582. "retry_on_empty": {
  583. "default": true,
  584. "description": "When true (default), empty provider responses are treated as failures, triggering fallback/retry. Set to false to treat them as successes.",
  585. "type": "boolean"
  586. }
  587. }
  588. },
  589. "council": {
  590. "type": "object",
  591. "properties": {
  592. "master": {
  593. "type": "object",
  594. "properties": {
  595. "model": {
  596. "type": "string",
  597. "pattern": "^[^/\\s]+\\/[^\\s]+$",
  598. "description": "Model ID for the council master (e.g. \"anthropic/claude-opus-4-6\")"
  599. },
  600. "variant": {
  601. "type": "string"
  602. },
  603. "prompt": {
  604. "description": "Optional role/guidance injected into the master synthesis prompt",
  605. "type": "string"
  606. }
  607. },
  608. "required": [
  609. "model"
  610. ]
  611. },
  612. "presets": {
  613. "type": "object",
  614. "propertyNames": {
  615. "type": "string"
  616. },
  617. "additionalProperties": {
  618. "type": "object",
  619. "propertyNames": {
  620. "type": "string"
  621. },
  622. "additionalProperties": {
  623. "type": "object",
  624. "propertyNames": {
  625. "type": "string"
  626. },
  627. "additionalProperties": {}
  628. }
  629. }
  630. },
  631. "master_timeout": {
  632. "default": 300000,
  633. "type": "number",
  634. "minimum": 0
  635. },
  636. "councillors_timeout": {
  637. "default": 180000,
  638. "type": "number",
  639. "minimum": 0
  640. },
  641. "default_preset": {
  642. "default": "default",
  643. "type": "string"
  644. },
  645. "master_fallback": {
  646. "description": "Fallback models for the council master. Tried in order if the primary model fails. Example: [\"anthropic/claude-sonnet-4-6\", \"openai/gpt-5.4\"]",
  647. "type": "array",
  648. "items": {
  649. "type": "string",
  650. "pattern": "^[^/\\s]+\\/[^\\s]+$"
  651. }
  652. },
  653. "councillor_execution_mode": {
  654. "default": "parallel",
  655. "description": "Execution mode for councillors. \"serial\" runs them one at a time (required for single-model systems). \"parallel\" runs them concurrently (default, faster for multi-model systems).",
  656. "type": "string",
  657. "enum": [
  658. "parallel",
  659. "serial"
  660. ]
  661. },
  662. "councillor_retries": {
  663. "default": 3,
  664. "description": "Number of retry attempts for councillors and master that return empty responses (e.g. due to provider rate limiting). Default: 3 retries.",
  665. "type": "integer",
  666. "minimum": 0,
  667. "maximum": 5
  668. }
  669. },
  670. "required": [
  671. "master",
  672. "presets"
  673. ]
  674. }
  675. },
  676. "title": "oh-my-opencode-slim",
  677. "description": "Configuration schema for oh-my-opencode-slim plugin for OpenCode"
  678. }