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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686
  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. "autoUpdate": {
  23. "description": "Disable automatic installation of plugin updates when false. 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. "minItems": 1,
  222. "type": "array",
  223. "items": {
  224. "anyOf": [
  225. {
  226. "type": "string"
  227. },
  228. {
  229. "type": "object",
  230. "properties": {
  231. "id": {
  232. "type": "string"
  233. },
  234. "variant": {
  235. "type": "string"
  236. }
  237. },
  238. "required": [
  239. "id"
  240. ]
  241. }
  242. ]
  243. }
  244. }
  245. ]
  246. },
  247. "temperature": {
  248. "type": "number",
  249. "minimum": 0,
  250. "maximum": 2
  251. },
  252. "variant": {
  253. "type": "string"
  254. },
  255. "skills": {
  256. "type": "array",
  257. "items": {
  258. "type": "string"
  259. }
  260. },
  261. "mcps": {
  262. "type": "array",
  263. "items": {
  264. "type": "string"
  265. }
  266. },
  267. "prompt": {
  268. "type": "string",
  269. "minLength": 1
  270. },
  271. "orchestratorPrompt": {
  272. "type": "string",
  273. "minLength": 1
  274. },
  275. "options": {
  276. "type": "object",
  277. "propertyNames": {
  278. "type": "string"
  279. },
  280. "additionalProperties": {}
  281. },
  282. "displayName": {
  283. "type": "string",
  284. "minLength": 1
  285. }
  286. },
  287. "additionalProperties": false
  288. }
  289. }
  290. },
  291. "agents": {
  292. "type": "object",
  293. "propertyNames": {
  294. "type": "string"
  295. },
  296. "additionalProperties": {
  297. "type": "object",
  298. "properties": {
  299. "model": {
  300. "anyOf": [
  301. {
  302. "type": "string"
  303. },
  304. {
  305. "minItems": 1,
  306. "type": "array",
  307. "items": {
  308. "anyOf": [
  309. {
  310. "type": "string"
  311. },
  312. {
  313. "type": "object",
  314. "properties": {
  315. "id": {
  316. "type": "string"
  317. },
  318. "variant": {
  319. "type": "string"
  320. }
  321. },
  322. "required": [
  323. "id"
  324. ]
  325. }
  326. ]
  327. }
  328. }
  329. ]
  330. },
  331. "temperature": {
  332. "type": "number",
  333. "minimum": 0,
  334. "maximum": 2
  335. },
  336. "variant": {
  337. "type": "string"
  338. },
  339. "skills": {
  340. "type": "array",
  341. "items": {
  342. "type": "string"
  343. }
  344. },
  345. "mcps": {
  346. "type": "array",
  347. "items": {
  348. "type": "string"
  349. }
  350. },
  351. "prompt": {
  352. "type": "string",
  353. "minLength": 1
  354. },
  355. "orchestratorPrompt": {
  356. "type": "string",
  357. "minLength": 1
  358. },
  359. "options": {
  360. "type": "object",
  361. "propertyNames": {
  362. "type": "string"
  363. },
  364. "additionalProperties": {}
  365. },
  366. "displayName": {
  367. "type": "string",
  368. "minLength": 1
  369. }
  370. },
  371. "additionalProperties": false
  372. }
  373. },
  374. "disabled_agents": {
  375. "description": "Agent names to disable completely. Disabled agents are not instantiated and cannot be delegated to. Orchestrator and council internal agents (councillor) cannot be disabled. By default, 'observer' is disabled. Remove it from this list and configure a vision-capable model to enable.",
  376. "type": "array",
  377. "items": {
  378. "type": "string"
  379. }
  380. },
  381. "disabled_mcps": {
  382. "type": "array",
  383. "items": {
  384. "type": "string"
  385. }
  386. },
  387. "multiplexer": {
  388. "type": "object",
  389. "properties": {
  390. "type": {
  391. "default": "none",
  392. "type": "string",
  393. "enum": [
  394. "auto",
  395. "tmux",
  396. "zellij",
  397. "none"
  398. ]
  399. },
  400. "layout": {
  401. "default": "main-vertical",
  402. "type": "string",
  403. "enum": [
  404. "main-horizontal",
  405. "main-vertical",
  406. "tiled",
  407. "even-horizontal",
  408. "even-vertical"
  409. ]
  410. },
  411. "main_pane_size": {
  412. "default": 60,
  413. "type": "number",
  414. "minimum": 20,
  415. "maximum": 80
  416. }
  417. }
  418. },
  419. "tmux": {
  420. "type": "object",
  421. "properties": {
  422. "enabled": {
  423. "default": false,
  424. "type": "boolean"
  425. },
  426. "layout": {
  427. "default": "main-vertical",
  428. "type": "string",
  429. "enum": [
  430. "main-horizontal",
  431. "main-vertical",
  432. "tiled",
  433. "even-horizontal",
  434. "even-vertical"
  435. ]
  436. },
  437. "main_pane_size": {
  438. "default": 60,
  439. "type": "number",
  440. "minimum": 20,
  441. "maximum": 80
  442. }
  443. }
  444. },
  445. "websearch": {
  446. "type": "object",
  447. "properties": {
  448. "provider": {
  449. "default": "exa",
  450. "type": "string",
  451. "enum": [
  452. "exa",
  453. "tavily"
  454. ]
  455. }
  456. }
  457. },
  458. "interview": {
  459. "type": "object",
  460. "properties": {
  461. "maxQuestions": {
  462. "default": 2,
  463. "type": "integer",
  464. "minimum": 1,
  465. "maximum": 10
  466. },
  467. "outputFolder": {
  468. "default": "interview",
  469. "type": "string",
  470. "minLength": 1
  471. },
  472. "autoOpenBrowser": {
  473. "default": true,
  474. "description": "Automatically open the interview UI in your default browser during interactive runs. Disabled automatically in tests and CI.",
  475. "type": "boolean"
  476. },
  477. "port": {
  478. "default": 0,
  479. "type": "integer",
  480. "minimum": 0,
  481. "maximum": 65535
  482. },
  483. "dashboard": {
  484. "default": false,
  485. "type": "boolean"
  486. }
  487. }
  488. },
  489. "sessionManager": {
  490. "type": "object",
  491. "properties": {
  492. "maxSessionsPerAgent": {
  493. "default": 2,
  494. "type": "integer",
  495. "minimum": 1,
  496. "maximum": 10
  497. },
  498. "readContextMinLines": {
  499. "default": 10,
  500. "type": "integer",
  501. "minimum": 0,
  502. "maximum": 1000
  503. },
  504. "readContextMaxFiles": {
  505. "default": 8,
  506. "type": "integer",
  507. "minimum": 0,
  508. "maximum": 50
  509. }
  510. }
  511. },
  512. "todoContinuation": {
  513. "type": "object",
  514. "properties": {
  515. "maxContinuations": {
  516. "default": 5,
  517. "description": "Maximum consecutive auto-continuations before stopping to ask user",
  518. "type": "integer",
  519. "minimum": 1,
  520. "maximum": 50
  521. },
  522. "cooldownMs": {
  523. "default": 3000,
  524. "description": "Delay in ms before auto-continuing (gives user time to abort)",
  525. "type": "integer",
  526. "minimum": 0,
  527. "maximum": 30000
  528. },
  529. "autoEnable": {
  530. "default": false,
  531. "description": "Automatically enable auto-continue when the orchestrator session has enough todos",
  532. "type": "boolean"
  533. },
  534. "autoEnableThreshold": {
  535. "default": 4,
  536. "description": "Number of todos that triggers auto-enable (only used when autoEnable is true)",
  537. "type": "integer",
  538. "minimum": 1,
  539. "maximum": 50
  540. }
  541. }
  542. },
  543. "fallback": {
  544. "type": "object",
  545. "properties": {
  546. "enabled": {
  547. "default": true,
  548. "type": "boolean"
  549. },
  550. "timeoutMs": {
  551. "default": 15000,
  552. "type": "number",
  553. "minimum": 0
  554. },
  555. "retryDelayMs": {
  556. "default": 500,
  557. "type": "number",
  558. "minimum": 0
  559. },
  560. "chains": {
  561. "default": {},
  562. "type": "object",
  563. "properties": {
  564. "orchestrator": {
  565. "minItems": 1,
  566. "type": "array",
  567. "items": {
  568. "type": "string"
  569. }
  570. },
  571. "oracle": {
  572. "minItems": 1,
  573. "type": "array",
  574. "items": {
  575. "type": "string"
  576. }
  577. },
  578. "designer": {
  579. "minItems": 1,
  580. "type": "array",
  581. "items": {
  582. "type": "string"
  583. }
  584. },
  585. "explorer": {
  586. "minItems": 1,
  587. "type": "array",
  588. "items": {
  589. "type": "string"
  590. }
  591. },
  592. "librarian": {
  593. "minItems": 1,
  594. "type": "array",
  595. "items": {
  596. "type": "string"
  597. }
  598. },
  599. "fixer": {
  600. "minItems": 1,
  601. "type": "array",
  602. "items": {
  603. "type": "string"
  604. }
  605. }
  606. },
  607. "additionalProperties": {
  608. "minItems": 1,
  609. "type": "array",
  610. "items": {
  611. "type": "string"
  612. }
  613. }
  614. },
  615. "retry_on_empty": {
  616. "default": true,
  617. "description": "When true (default), empty provider responses are treated as failures, triggering fallback/retry. Set to false to treat them as successes.",
  618. "type": "boolean"
  619. }
  620. }
  621. },
  622. "council": {
  623. "type": "object",
  624. "properties": {
  625. "presets": {
  626. "type": "object",
  627. "propertyNames": {
  628. "type": "string"
  629. },
  630. "additionalProperties": {
  631. "type": "object",
  632. "propertyNames": {
  633. "type": "string"
  634. },
  635. "additionalProperties": {
  636. "type": "object",
  637. "propertyNames": {
  638. "type": "string"
  639. },
  640. "additionalProperties": {}
  641. }
  642. }
  643. },
  644. "timeout": {
  645. "default": 180000,
  646. "type": "number",
  647. "minimum": 0
  648. },
  649. "default_preset": {
  650. "default": "default",
  651. "type": "string"
  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 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. "master": {
  670. "description": "DEPRECATED — ignored. Council agent synthesizes directly."
  671. },
  672. "master_timeout": {
  673. "description": "DEPRECATED — ignored. Use \"timeout\" instead."
  674. },
  675. "master_fallback": {
  676. "description": "DEPRECATED — ignored. No separate master session."
  677. }
  678. },
  679. "required": [
  680. "presets"
  681. ]
  682. }
  683. },
  684. "title": "oh-my-opencode-slim",
  685. "description": "Configuration schema for oh-my-opencode-slim plugin for OpenCode"
  686. }