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

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543
  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. "compactSidebar": {
  12. "description": "Use the compact TUI sidebar layout. Defaults to true; set false to use the expanded layout.",
  13. "type": "boolean"
  14. },
  15. "stripOrchestratorModel": {
  16. "description": "When true, omit orchestrator.model and orchestrator.variant from the SDK config so OpenCode uses the session model selected with /model after subagent dispatch. An explicitly selected preset that sets orchestrator.model is preserved. Defaults to false.",
  17. "type": "boolean"
  18. },
  19. "autoUpdate": {
  20. "description": "Disable automatic installation of plugin updates when false. Defaults to true.",
  21. "type": "boolean"
  22. },
  23. "presets": {
  24. "type": "object",
  25. "propertyNames": {
  26. "type": "string"
  27. },
  28. "additionalProperties": {
  29. "type": "object",
  30. "properties": {
  31. "agents": {
  32. "default": {},
  33. "type": "object",
  34. "propertyNames": {
  35. "type": "string"
  36. },
  37. "additionalProperties": {
  38. "type": "object",
  39. "properties": {
  40. "model": {
  41. "anyOf": [
  42. {
  43. "type": "string"
  44. },
  45. {
  46. "minItems": 1,
  47. "type": "array",
  48. "items": {
  49. "anyOf": [
  50. {
  51. "type": "string"
  52. },
  53. {
  54. "type": "object",
  55. "properties": {
  56. "id": {
  57. "type": "string"
  58. },
  59. "variant": {
  60. "type": "string"
  61. }
  62. },
  63. "required": [
  64. "id"
  65. ]
  66. }
  67. ]
  68. }
  69. }
  70. ]
  71. },
  72. "inheritModelFrom": {
  73. "type": "string",
  74. "enum": [
  75. "session",
  76. "orchestrator"
  77. ]
  78. },
  79. "baseRole": {
  80. "type": "string",
  81. "enum": [
  82. "explorer",
  83. "librarian",
  84. "oracle",
  85. "designer",
  86. "fixer",
  87. "observer"
  88. ]
  89. },
  90. "temperature": {
  91. "type": "number",
  92. "minimum": 0,
  93. "maximum": 2
  94. },
  95. "variant": {
  96. "type": "string"
  97. },
  98. "skills": {
  99. "type": "array",
  100. "items": {
  101. "type": "string"
  102. }
  103. },
  104. "skills_add": {
  105. "description": "Skill names to add to this agent's effective skills list. Applied after the resolved `skills` list during config resolution; removal via `skills_remove` wins. Folded into `skills` at resolution time.",
  106. "type": "array",
  107. "items": {
  108. "type": "string"
  109. }
  110. },
  111. "skills_remove": {
  112. "description": "Skill names to remove from this agent's effective skills list. Applied after `skills_add` during config resolution, so removal wins over addition. Folded into `skills` at resolution time.",
  113. "type": "array",
  114. "items": {
  115. "type": "string"
  116. }
  117. },
  118. "mcps": {
  119. "type": "array",
  120. "items": {
  121. "type": "string"
  122. }
  123. },
  124. "prompt": {
  125. "type": "string",
  126. "minLength": 1
  127. },
  128. "orchestratorPrompt": {
  129. "type": "string",
  130. "minLength": 1
  131. },
  132. "options": {
  133. "type": "object",
  134. "propertyNames": {
  135. "type": "string"
  136. },
  137. "additionalProperties": {}
  138. },
  139. "displayName": {
  140. "type": "string",
  141. "minLength": 1
  142. },
  143. "color": {
  144. "description": "Agent display color as #RRGGBB or an OpenCode theme color",
  145. "anyOf": [
  146. {
  147. "type": "string",
  148. "pattern": "^#[0-9a-fA-F]{6}$"
  149. },
  150. {
  151. "type": "string",
  152. "enum": [
  153. "primary",
  154. "secondary",
  155. "accent",
  156. "success",
  157. "warning",
  158. "error",
  159. "info"
  160. ]
  161. }
  162. ]
  163. },
  164. "description": {
  165. "type": "string",
  166. "minLength": 1
  167. },
  168. "permission": {
  169. "anyOf": [
  170. {
  171. "type": "string",
  172. "enum": [
  173. "ask",
  174. "allow",
  175. "deny"
  176. ]
  177. },
  178. {
  179. "type": "object",
  180. "properties": {
  181. "read": {
  182. "anyOf": [
  183. {
  184. "type": "string",
  185. "enum": [
  186. "ask",
  187. "allow",
  188. "deny"
  189. ]
  190. },
  191. {
  192. "type": "object",
  193. "propertyNames": {
  194. "type": "string"
  195. },
  196. "additionalProperties": {
  197. "type": "string",
  198. "enum": [
  199. "ask",
  200. "allow",
  201. "deny"
  202. ]
  203. }
  204. }
  205. ]
  206. },
  207. "edit": {
  208. "anyOf": [
  209. {
  210. "type": "string",
  211. "enum": [
  212. "ask",
  213. "allow",
  214. "deny"
  215. ]
  216. },
  217. {
  218. "type": "object",
  219. "propertyNames": {
  220. "type": "string"
  221. },
  222. "additionalProperties": {
  223. "type": "string",
  224. "enum": [
  225. "ask",
  226. "allow",
  227. "deny"
  228. ]
  229. }
  230. }
  231. ]
  232. },
  233. "glob": {
  234. "anyOf": [
  235. {
  236. "type": "string",
  237. "enum": [
  238. "ask",
  239. "allow",
  240. "deny"
  241. ]
  242. },
  243. {
  244. "type": "object",
  245. "propertyNames": {
  246. "type": "string"
  247. },
  248. "additionalProperties": {
  249. "type": "string",
  250. "enum": [
  251. "ask",
  252. "allow",
  253. "deny"
  254. ]
  255. }
  256. }
  257. ]
  258. },
  259. "grep": {
  260. "anyOf": [
  261. {
  262. "type": "string",
  263. "enum": [
  264. "ask",
  265. "allow",
  266. "deny"
  267. ]
  268. },
  269. {
  270. "type": "object",
  271. "propertyNames": {
  272. "type": "string"
  273. },
  274. "additionalProperties": {
  275. "type": "string",
  276. "enum": [
  277. "ask",
  278. "allow",
  279. "deny"
  280. ]
  281. }
  282. }
  283. ]
  284. },
  285. "list": {
  286. "anyOf": [
  287. {
  288. "type": "string",
  289. "enum": [
  290. "ask",
  291. "allow",
  292. "deny"
  293. ]
  294. },
  295. {
  296. "type": "object",
  297. "propertyNames": {
  298. "type": "string"
  299. },
  300. "additionalProperties": {
  301. "type": "string",
  302. "enum": [
  303. "ask",
  304. "allow",
  305. "deny"
  306. ]
  307. }
  308. }
  309. ]
  310. },
  311. "bash": {
  312. "anyOf": [
  313. {
  314. "type": "string",
  315. "enum": [
  316. "ask",
  317. "allow",
  318. "deny"
  319. ]
  320. },
  321. {
  322. "type": "object",
  323. "propertyNames": {
  324. "type": "string"
  325. },
  326. "additionalProperties": {
  327. "type": "string",
  328. "enum": [
  329. "ask",
  330. "allow",
  331. "deny"
  332. ]
  333. }
  334. }
  335. ]
  336. },
  337. "task": {
  338. "anyOf": [
  339. {
  340. "type": "string",
  341. "enum": [
  342. "ask",
  343. "allow",
  344. "deny"
  345. ]
  346. },
  347. {
  348. "type": "object",
  349. "propertyNames": {
  350. "type": "string"
  351. },
  352. "additionalProperties": {
  353. "type": "string",
  354. "enum": [
  355. "ask",
  356. "allow",
  357. "deny"
  358. ]
  359. }
  360. }
  361. ]
  362. },
  363. "external_directory": {
  364. "anyOf": [
  365. {
  366. "type": "string",
  367. "enum": [
  368. "ask",
  369. "allow",
  370. "deny"
  371. ]
  372. },
  373. {
  374. "type": "object",
  375. "propertyNames": {
  376. "type": "string"
  377. },
  378. "additionalProperties": {
  379. "type": "string",
  380. "enum": [
  381. "ask",
  382. "allow",
  383. "deny"
  384. ]
  385. }
  386. }
  387. ]
  388. },
  389. "lsp": {
  390. "anyOf": [
  391. {
  392. "type": "string",
  393. "enum": [
  394. "ask",
  395. "allow",
  396. "deny"
  397. ]
  398. },
  399. {
  400. "type": "object",
  401. "propertyNames": {
  402. "type": "string"
  403. },
  404. "additionalProperties": {
  405. "type": "string",
  406. "enum": [
  407. "ask",
  408. "allow",
  409. "deny"
  410. ]
  411. }
  412. }
  413. ]
  414. },
  415. "skill": {
  416. "anyOf": [
  417. {
  418. "type": "string",
  419. "enum": [
  420. "ask",
  421. "allow",
  422. "deny"
  423. ]
  424. },
  425. {
  426. "type": "object",
  427. "propertyNames": {
  428. "type": "string"
  429. },
  430. "additionalProperties": {
  431. "type": "string",
  432. "enum": [
  433. "ask",
  434. "allow",
  435. "deny"
  436. ]
  437. }
  438. }
  439. ]
  440. },
  441. "todowrite": {
  442. "type": "string",
  443. "enum": [
  444. "ask",
  445. "allow",
  446. "deny"
  447. ]
  448. },
  449. "question": {
  450. "type": "string",
  451. "enum": [
  452. "ask",
  453. "allow",
  454. "deny"
  455. ]
  456. },
  457. "webfetch": {
  458. "type": "string",
  459. "enum": [
  460. "ask",
  461. "allow",
  462. "deny"
  463. ]
  464. },
  465. "websearch": {
  466. "type": "string",
  467. "enum": [
  468. "ask",
  469. "allow",
  470. "deny"
  471. ]
  472. },
  473. "codesearch": {
  474. "type": "string",
  475. "enum": [
  476. "ask",
  477. "allow",
  478. "deny"
  479. ]
  480. },
  481. "doom_loop": {
  482. "type": "string",
  483. "enum": [
  484. "ask",
  485. "allow",
  486. "deny"
  487. ]
  488. }
  489. },
  490. "additionalProperties": {
  491. "anyOf": [
  492. {
  493. "type": "string",
  494. "enum": [
  495. "ask",
  496. "allow",
  497. "deny"
  498. ]
  499. },
  500. {
  501. "type": "object",
  502. "propertyNames": {
  503. "type": "string"
  504. },
  505. "additionalProperties": {
  506. "type": "string",
  507. "enum": [
  508. "ask",
  509. "allow",
  510. "deny"
  511. ]
  512. }
  513. }
  514. ]
  515. }
  516. }
  517. ]
  518. }
  519. },
  520. "additionalProperties": false
  521. }
  522. },
  523. "marketplace": {
  524. "type": "object",
  525. "properties": {
  526. "agents": {
  527. "type": "array",
  528. "items": {
  529. "type": "string",
  530. "minLength": 1
  531. }
  532. }
  533. },
  534. "additionalProperties": false
  535. }
  536. },
  537. "additionalProperties": false
  538. }
  539. },
  540. "agents": {
  541. "type": "object",
  542. "propertyNames": {
  543. "type": "string"
  544. },
  545. "additionalProperties": {
  546. "type": "object",
  547. "properties": {
  548. "model": {
  549. "anyOf": [
  550. {
  551. "type": "string"
  552. },
  553. {
  554. "minItems": 1,
  555. "type": "array",
  556. "items": {
  557. "anyOf": [
  558. {
  559. "type": "string"
  560. },
  561. {
  562. "type": "object",
  563. "properties": {
  564. "id": {
  565. "type": "string"
  566. },
  567. "variant": {
  568. "type": "string"
  569. }
  570. },
  571. "required": [
  572. "id"
  573. ]
  574. }
  575. ]
  576. }
  577. }
  578. ]
  579. },
  580. "inheritModelFrom": {
  581. "type": "string",
  582. "enum": [
  583. "session",
  584. "orchestrator"
  585. ]
  586. },
  587. "baseRole": {
  588. "type": "string",
  589. "enum": [
  590. "explorer",
  591. "librarian",
  592. "oracle",
  593. "designer",
  594. "fixer",
  595. "observer"
  596. ]
  597. },
  598. "temperature": {
  599. "type": "number",
  600. "minimum": 0,
  601. "maximum": 2
  602. },
  603. "variant": {
  604. "type": "string"
  605. },
  606. "skills": {
  607. "type": "array",
  608. "items": {
  609. "type": "string"
  610. }
  611. },
  612. "skills_add": {
  613. "description": "Skill names to add to this agent's effective skills list. Applied after the resolved `skills` list during config resolution; removal via `skills_remove` wins. Folded into `skills` at resolution time.",
  614. "type": "array",
  615. "items": {
  616. "type": "string"
  617. }
  618. },
  619. "skills_remove": {
  620. "description": "Skill names to remove from this agent's effective skills list. Applied after `skills_add` during config resolution, so removal wins over addition. Folded into `skills` at resolution time.",
  621. "type": "array",
  622. "items": {
  623. "type": "string"
  624. }
  625. },
  626. "mcps": {
  627. "type": "array",
  628. "items": {
  629. "type": "string"
  630. }
  631. },
  632. "prompt": {
  633. "type": "string",
  634. "minLength": 1
  635. },
  636. "orchestratorPrompt": {
  637. "type": "string",
  638. "minLength": 1
  639. },
  640. "options": {
  641. "type": "object",
  642. "propertyNames": {
  643. "type": "string"
  644. },
  645. "additionalProperties": {}
  646. },
  647. "displayName": {
  648. "type": "string",
  649. "minLength": 1
  650. },
  651. "color": {
  652. "description": "Agent display color as #RRGGBB or an OpenCode theme color",
  653. "anyOf": [
  654. {
  655. "type": "string",
  656. "pattern": "^#[0-9a-fA-F]{6}$"
  657. },
  658. {
  659. "type": "string",
  660. "enum": [
  661. "primary",
  662. "secondary",
  663. "accent",
  664. "success",
  665. "warning",
  666. "error",
  667. "info"
  668. ]
  669. }
  670. ]
  671. },
  672. "description": {
  673. "type": "string",
  674. "minLength": 1
  675. },
  676. "permission": {
  677. "anyOf": [
  678. {
  679. "type": "string",
  680. "enum": [
  681. "ask",
  682. "allow",
  683. "deny"
  684. ]
  685. },
  686. {
  687. "type": "object",
  688. "properties": {
  689. "read": {
  690. "anyOf": [
  691. {
  692. "type": "string",
  693. "enum": [
  694. "ask",
  695. "allow",
  696. "deny"
  697. ]
  698. },
  699. {
  700. "type": "object",
  701. "propertyNames": {
  702. "type": "string"
  703. },
  704. "additionalProperties": {
  705. "type": "string",
  706. "enum": [
  707. "ask",
  708. "allow",
  709. "deny"
  710. ]
  711. }
  712. }
  713. ]
  714. },
  715. "edit": {
  716. "anyOf": [
  717. {
  718. "type": "string",
  719. "enum": [
  720. "ask",
  721. "allow",
  722. "deny"
  723. ]
  724. },
  725. {
  726. "type": "object",
  727. "propertyNames": {
  728. "type": "string"
  729. },
  730. "additionalProperties": {
  731. "type": "string",
  732. "enum": [
  733. "ask",
  734. "allow",
  735. "deny"
  736. ]
  737. }
  738. }
  739. ]
  740. },
  741. "glob": {
  742. "anyOf": [
  743. {
  744. "type": "string",
  745. "enum": [
  746. "ask",
  747. "allow",
  748. "deny"
  749. ]
  750. },
  751. {
  752. "type": "object",
  753. "propertyNames": {
  754. "type": "string"
  755. },
  756. "additionalProperties": {
  757. "type": "string",
  758. "enum": [
  759. "ask",
  760. "allow",
  761. "deny"
  762. ]
  763. }
  764. }
  765. ]
  766. },
  767. "grep": {
  768. "anyOf": [
  769. {
  770. "type": "string",
  771. "enum": [
  772. "ask",
  773. "allow",
  774. "deny"
  775. ]
  776. },
  777. {
  778. "type": "object",
  779. "propertyNames": {
  780. "type": "string"
  781. },
  782. "additionalProperties": {
  783. "type": "string",
  784. "enum": [
  785. "ask",
  786. "allow",
  787. "deny"
  788. ]
  789. }
  790. }
  791. ]
  792. },
  793. "list": {
  794. "anyOf": [
  795. {
  796. "type": "string",
  797. "enum": [
  798. "ask",
  799. "allow",
  800. "deny"
  801. ]
  802. },
  803. {
  804. "type": "object",
  805. "propertyNames": {
  806. "type": "string"
  807. },
  808. "additionalProperties": {
  809. "type": "string",
  810. "enum": [
  811. "ask",
  812. "allow",
  813. "deny"
  814. ]
  815. }
  816. }
  817. ]
  818. },
  819. "bash": {
  820. "anyOf": [
  821. {
  822. "type": "string",
  823. "enum": [
  824. "ask",
  825. "allow",
  826. "deny"
  827. ]
  828. },
  829. {
  830. "type": "object",
  831. "propertyNames": {
  832. "type": "string"
  833. },
  834. "additionalProperties": {
  835. "type": "string",
  836. "enum": [
  837. "ask",
  838. "allow",
  839. "deny"
  840. ]
  841. }
  842. }
  843. ]
  844. },
  845. "task": {
  846. "anyOf": [
  847. {
  848. "type": "string",
  849. "enum": [
  850. "ask",
  851. "allow",
  852. "deny"
  853. ]
  854. },
  855. {
  856. "type": "object",
  857. "propertyNames": {
  858. "type": "string"
  859. },
  860. "additionalProperties": {
  861. "type": "string",
  862. "enum": [
  863. "ask",
  864. "allow",
  865. "deny"
  866. ]
  867. }
  868. }
  869. ]
  870. },
  871. "external_directory": {
  872. "anyOf": [
  873. {
  874. "type": "string",
  875. "enum": [
  876. "ask",
  877. "allow",
  878. "deny"
  879. ]
  880. },
  881. {
  882. "type": "object",
  883. "propertyNames": {
  884. "type": "string"
  885. },
  886. "additionalProperties": {
  887. "type": "string",
  888. "enum": [
  889. "ask",
  890. "allow",
  891. "deny"
  892. ]
  893. }
  894. }
  895. ]
  896. },
  897. "lsp": {
  898. "anyOf": [
  899. {
  900. "type": "string",
  901. "enum": [
  902. "ask",
  903. "allow",
  904. "deny"
  905. ]
  906. },
  907. {
  908. "type": "object",
  909. "propertyNames": {
  910. "type": "string"
  911. },
  912. "additionalProperties": {
  913. "type": "string",
  914. "enum": [
  915. "ask",
  916. "allow",
  917. "deny"
  918. ]
  919. }
  920. }
  921. ]
  922. },
  923. "skill": {
  924. "anyOf": [
  925. {
  926. "type": "string",
  927. "enum": [
  928. "ask",
  929. "allow",
  930. "deny"
  931. ]
  932. },
  933. {
  934. "type": "object",
  935. "propertyNames": {
  936. "type": "string"
  937. },
  938. "additionalProperties": {
  939. "type": "string",
  940. "enum": [
  941. "ask",
  942. "allow",
  943. "deny"
  944. ]
  945. }
  946. }
  947. ]
  948. },
  949. "todowrite": {
  950. "type": "string",
  951. "enum": [
  952. "ask",
  953. "allow",
  954. "deny"
  955. ]
  956. },
  957. "question": {
  958. "type": "string",
  959. "enum": [
  960. "ask",
  961. "allow",
  962. "deny"
  963. ]
  964. },
  965. "webfetch": {
  966. "type": "string",
  967. "enum": [
  968. "ask",
  969. "allow",
  970. "deny"
  971. ]
  972. },
  973. "websearch": {
  974. "type": "string",
  975. "enum": [
  976. "ask",
  977. "allow",
  978. "deny"
  979. ]
  980. },
  981. "codesearch": {
  982. "type": "string",
  983. "enum": [
  984. "ask",
  985. "allow",
  986. "deny"
  987. ]
  988. },
  989. "doom_loop": {
  990. "type": "string",
  991. "enum": [
  992. "ask",
  993. "allow",
  994. "deny"
  995. ]
  996. }
  997. },
  998. "additionalProperties": {
  999. "anyOf": [
  1000. {
  1001. "type": "string",
  1002. "enum": [
  1003. "ask",
  1004. "allow",
  1005. "deny"
  1006. ]
  1007. },
  1008. {
  1009. "type": "object",
  1010. "propertyNames": {
  1011. "type": "string"
  1012. },
  1013. "additionalProperties": {
  1014. "type": "string",
  1015. "enum": [
  1016. "ask",
  1017. "allow",
  1018. "deny"
  1019. ]
  1020. }
  1021. }
  1022. ]
  1023. }
  1024. }
  1025. ]
  1026. }
  1027. },
  1028. "additionalProperties": false
  1029. }
  1030. },
  1031. "disabled_agents": {
  1032. "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.",
  1033. "type": "array",
  1034. "items": {
  1035. "type": "string"
  1036. }
  1037. },
  1038. "image_routing": {
  1039. "description": "How image attachments are handled. When omitted, preserves legacy conditional behavior: intercept attachments only when observer is enabled. \"auto\": requires observer to be enabled and saves attachments to disk before nudging delegation to @observer. \"direct\": always passes attachments to the orchestrator untouched.",
  1040. "type": "string",
  1041. "enum": [
  1042. "auto",
  1043. "direct"
  1044. ]
  1045. },
  1046. "disabled_mcps": {
  1047. "description": "MCP server names to disable completely. Disabled servers are not started and cannot be used by agents.",
  1048. "type": "array",
  1049. "items": {
  1050. "type": "string"
  1051. }
  1052. },
  1053. "disabled_tools": {
  1054. "description": "Tool names to disable completely. Disabled tools are not registered with OpenCode and cannot be used by agents.",
  1055. "type": "array",
  1056. "items": {
  1057. "type": "string"
  1058. }
  1059. },
  1060. "disabled_skills": {
  1061. "description": "Skill names to disable completely. Disabled skills are not granted to agents, even when referenced by presets or agent overrides.",
  1062. "type": "array",
  1063. "items": {
  1064. "type": "string"
  1065. }
  1066. },
  1067. "multiplexer": {
  1068. "type": "object",
  1069. "properties": {
  1070. "type": {
  1071. "default": "none",
  1072. "type": "string",
  1073. "enum": [
  1074. "auto",
  1075. "tmux",
  1076. "zellij",
  1077. "herdr",
  1078. "kitty",
  1079. "cmux",
  1080. "none"
  1081. ]
  1082. },
  1083. "layout": {
  1084. "default": "main-vertical",
  1085. "type": "string",
  1086. "enum": [
  1087. "main-horizontal",
  1088. "main-vertical",
  1089. "tiled",
  1090. "even-horizontal",
  1091. "even-vertical"
  1092. ]
  1093. },
  1094. "main_pane_size": {
  1095. "default": 60,
  1096. "type": "number",
  1097. "minimum": 20,
  1098. "maximum": 80
  1099. },
  1100. "zellij_pane_mode": {
  1101. "default": "agent-tab",
  1102. "type": "string",
  1103. "enum": [
  1104. "agent-tab",
  1105. "current-tab"
  1106. ]
  1107. }
  1108. }
  1109. },
  1110. "interview": {
  1111. "type": "object",
  1112. "properties": {
  1113. "maxQuestions": {
  1114. "default": 2,
  1115. "type": "integer",
  1116. "minimum": 1,
  1117. "maximum": 10
  1118. },
  1119. "outputFolder": {
  1120. "default": "interview",
  1121. "type": "string",
  1122. "minLength": 1,
  1123. "pattern": "^(?![\\\\/])(?![A-Za-z]:[\\\\/])(?!.*(?:^|[\\\\/])\\.\\.(?:[\\\\/]|$)).+$"
  1124. },
  1125. "autoOpenBrowser": {
  1126. "default": true,
  1127. "description": "Automatically open the interview UI in your default browser during interactive runs. Disabled automatically in tests and CI.",
  1128. "type": "boolean"
  1129. },
  1130. "port": {
  1131. "default": 0,
  1132. "type": "integer",
  1133. "minimum": 0,
  1134. "maximum": 65535
  1135. },
  1136. "dashboard": {
  1137. "default": false,
  1138. "type": "boolean"
  1139. }
  1140. }
  1141. },
  1142. "backgroundJobs": {
  1143. "type": "object",
  1144. "properties": {
  1145. "strategy": {
  1146. "default": "latest",
  1147. "description": "Board injection strategy. \"latest\" replaces prior board messages; \"checkpoint-compatible\" preserves them and appends only changed board snapshots.",
  1148. "type": "string",
  1149. "enum": [
  1150. "latest",
  1151. "checkpoint-compatible"
  1152. ]
  1153. },
  1154. "maxSessionsPerAgent": {
  1155. "default": 2,
  1156. "type": "integer",
  1157. "minimum": 1,
  1158. "maximum": 10
  1159. },
  1160. "maxContextLines": {
  1161. "default": 50000,
  1162. "type": "integer",
  1163. "minimum": 0,
  1164. "maximum": 500000
  1165. },
  1166. "readContextMinLines": {
  1167. "default": 10,
  1168. "type": "integer",
  1169. "minimum": 0,
  1170. "maximum": 1000
  1171. },
  1172. "readContextMaxFiles": {
  1173. "default": 8,
  1174. "type": "integer",
  1175. "minimum": 0,
  1176. "maximum": 50
  1177. },
  1178. "maxRetainedSnapshots": {
  1179. "default": 20,
  1180. "description": "Maximum board snapshots retained per checkpoint cache epoch (1–100). Exceeding the limit starts a new epoch with the current snapshot and intentionally creates one cache miss.",
  1181. "type": "integer",
  1182. "minimum": 1,
  1183. "maximum": 100
  1184. },
  1185. "orchestratorWake": {
  1186. "default": {
  1187. "enabled": true,
  1188. "intervalMs": 300000,
  1189. "mode": "auto"
  1190. },
  1191. "description": "Periodic orchestrator wake scheduler for idle sessions. v1: requires host session APIs (session.get, todo, children, status, promptAsync) and wakes while incomplete todos remain. v2: runs in children-driven degraded mode (requires session.list + promptAsync) and wakes while un-finished child sessions remain. Default enabled at a 5-minute interval.",
  1192. "type": "object",
  1193. "properties": {
  1194. "enabled": {
  1195. "default": true,
  1196. "description": "When true, idle orchestrator sessions with incomplete todos may receive periodic internal wake prompts. Default enabled.",
  1197. "type": "boolean"
  1198. },
  1199. "intervalMs": {
  1200. "default": 300000,
  1201. "description": "Continuous parent-idle interval between orchestrator wake evaluations (60,000–2,147,483,647ms). Default 300,000 (5 minutes). 0 is invalid.",
  1202. "type": "integer",
  1203. "minimum": 60000,
  1204. "maximum": 2147483647
  1205. },
  1206. "mode": {
  1207. "default": "auto",
  1208. "description": "Wake-condition source. \"auto\" uses todo-gating on v1 hosts and children-driven degraded mode on v2 hosts (no todo surface there); \"todo\" or \"children\" pin one mode, degrading to children when the host lacks the todo API. Default \"auto\".",
  1209. "type": "string",
  1210. "enum": [
  1211. "auto",
  1212. "todo",
  1213. "children"
  1214. ]
  1215. }
  1216. }
  1217. },
  1218. "wallClockTimeoutMs": {
  1219. "default": 0,
  1220. "description": "Explicit opt-in wall-clock deadline for native task(..., background: true) child sessions. 0 disables supervision; finite values are 60,000–2,147,483,647ms.",
  1221. "anyOf": [
  1222. {
  1223. "type": "number",
  1224. "const": 0
  1225. },
  1226. {
  1227. "type": "integer",
  1228. "minimum": 60000,
  1229. "maximum": 2147483647
  1230. }
  1231. ]
  1232. },
  1233. "abortGraceMs": {
  1234. "default": 10000,
  1235. "description": "Grace period after a wall-clock deadline while OpenCode confirms the child terminal state (1,000–60,000ms).",
  1236. "type": "integer",
  1237. "minimum": 1000,
  1238. "maximum": 60000
  1239. },
  1240. "concurrency": {
  1241. "default": {
  1242. "defaultConcurrency": 0,
  1243. "providerConcurrency": {},
  1244. "modelConcurrency": {}
  1245. },
  1246. "type": "object",
  1247. "properties": {
  1248. "defaultConcurrency": {
  1249. "default": 0,
  1250. "description": "Maximum concurrently running native background tasks. 0 disables the default cap.",
  1251. "type": "integer",
  1252. "minimum": 0,
  1253. "maximum": 1000
  1254. },
  1255. "providerConcurrency": {
  1256. "default": {},
  1257. "description": "Per-provider concurrency caps keyed by provider ID. The most specific configured cap wins: model > provider > default. 0 means unlimited for that provider.",
  1258. "type": "object",
  1259. "propertyNames": {
  1260. "type": "string",
  1261. "minLength": 1
  1262. },
  1263. "additionalProperties": {
  1264. "type": "integer",
  1265. "minimum": 0,
  1266. "maximum": 1000
  1267. }
  1268. },
  1269. "modelConcurrency": {
  1270. "default": {},
  1271. "description": "Per-model concurrency caps keyed by provider/model ID. The most specific configured cap wins: model > provider > default. 0 means unlimited for that model.",
  1272. "type": "object",
  1273. "propertyNames": {
  1274. "type": "string",
  1275. "minLength": 1
  1276. },
  1277. "additionalProperties": {
  1278. "type": "integer",
  1279. "minimum": 0,
  1280. "maximum": 1000
  1281. }
  1282. }
  1283. },
  1284. "additionalProperties": false
  1285. },
  1286. "sameProviderPolicy": {
  1287. "default": {},
  1288. "description": "Opt-in per-provider policy for native background tasks: when the parent session and the child agent both resolve to a provider listed here with value \"foreground\", the background request is converted to foreground execution (existing foreground path, no concurrency admission). Unlisted or unknown providers keep background behavior. Default {} (no conversion).",
  1289. "type": "object",
  1290. "propertyNames": {
  1291. "type": "string",
  1292. "minLength": 1
  1293. },
  1294. "additionalProperties": {
  1295. "type": "string",
  1296. "const": "foreground"
  1297. }
  1298. },
  1299. "waitForUserGuard": {
  1300. "default": true,
  1301. "description": "When true, intercept wait_for_user calls made while background tasks are still running and the orchestrator wake scheduler is enabled, returning guidance to end the turn instead of blocking on manual input. Default enabled.",
  1302. "type": "boolean"
  1303. }
  1304. }
  1305. },
  1306. "fallback": {
  1307. "type": "object",
  1308. "properties": {
  1309. "enabled": {
  1310. "default": true,
  1311. "type": "boolean"
  1312. },
  1313. "maxRetries": {
  1314. "default": 3,
  1315. "description": "Number of consecutive 429/rate-limit responses tolerated on the same model before aborting (or swapping to the next fallback model when a chain is configured).",
  1316. "type": "integer",
  1317. "minimum": 0,
  1318. "maximum": 9007199254740991
  1319. },
  1320. "initialRetryDelayMs": {
  1321. "default": 0,
  1322. "description": "Delay in milliseconds before triggering the first fallback on a failover-worthy error. Gives intercepting plugins time to recover the current model before the fallback chain advances. 0 disables.",
  1323. "type": "integer",
  1324. "minimum": 0,
  1325. "maximum": 9007199254740991
  1326. },
  1327. "retryDelayMs": {
  1328. "default": 500,
  1329. "description": "Delay in milliseconds between consecutive fallback attempts after the initial trigger. 0 disables.",
  1330. "type": "integer",
  1331. "minimum": 0,
  1332. "maximum": 9007199254740991
  1333. }
  1334. },
  1335. "additionalProperties": false
  1336. },
  1337. "council": {
  1338. "type": "object",
  1339. "properties": {
  1340. "presets": {
  1341. "type": "object",
  1342. "propertyNames": {
  1343. "type": "string"
  1344. },
  1345. "additionalProperties": {
  1346. "type": "object",
  1347. "propertyNames": {
  1348. "type": "string"
  1349. },
  1350. "additionalProperties": {
  1351. "type": "object",
  1352. "propertyNames": {
  1353. "type": "string"
  1354. },
  1355. "additionalProperties": {}
  1356. }
  1357. }
  1358. },
  1359. "default_preset": {
  1360. "default": "default",
  1361. "type": "string"
  1362. }
  1363. },
  1364. "required": [
  1365. "presets"
  1366. ],
  1367. "additionalProperties": {}
  1368. },
  1369. "companion": {
  1370. "type": "object",
  1371. "properties": {
  1372. "enabled": {
  1373. "type": "boolean"
  1374. },
  1375. "binaryPath": {
  1376. "description": "Path to a custom companion binary to launch.",
  1377. "type": "string",
  1378. "minLength": 1
  1379. },
  1380. "position": {
  1381. "type": "string",
  1382. "enum": [
  1383. "bottom-right",
  1384. "bottom-left",
  1385. "top-right",
  1386. "top-left"
  1387. ]
  1388. },
  1389. "size": {
  1390. "type": "string",
  1391. "enum": [
  1392. "small",
  1393. "medium",
  1394. "large"
  1395. ]
  1396. },
  1397. "gifPack": {
  1398. "description": "Bundled companion animation pack to use.",
  1399. "type": "string",
  1400. "enum": [
  1401. "default"
  1402. ]
  1403. },
  1404. "loopStyle": {
  1405. "description": "Companion animation playback style: classic loops or smooth ping-pong playback.",
  1406. "type": "string",
  1407. "enum": [
  1408. "classic",
  1409. "smooth"
  1410. ]
  1411. },
  1412. "speed": {
  1413. "description": "Companion animation playback speed multiplier. Defaults to 1.",
  1414. "type": "number",
  1415. "minimum": 0.25,
  1416. "maximum": 4
  1417. },
  1418. "debug": {
  1419. "description": "Enable verbose native companion debug logs.",
  1420. "type": "boolean"
  1421. }
  1422. }
  1423. },
  1424. "webfetch": {
  1425. "type": "object",
  1426. "properties": {
  1427. "enabled": {
  1428. "default": true,
  1429. "description": "When false, skip registering this enhanced webfetch so OpenCode uses its built-in version.",
  1430. "type": "boolean"
  1431. },
  1432. "model": {
  1433. "description": "Dedicated model(s) for smartfetch secondary-model summarization. Same shape as agent model config (string, array of strings/objects with id+variant). Takes priority over small_model, agents.explorer.model, and agents.librarian.model.",
  1434. "anyOf": [
  1435. {
  1436. "type": "string"
  1437. },
  1438. {
  1439. "minItems": 1,
  1440. "type": "array",
  1441. "items": {
  1442. "anyOf": [
  1443. {
  1444. "type": "string"
  1445. },
  1446. {
  1447. "type": "object",
  1448. "properties": {
  1449. "id": {
  1450. "type": "string"
  1451. },
  1452. "variant": {
  1453. "type": "string"
  1454. }
  1455. },
  1456. "required": [
  1457. "id"
  1458. ]
  1459. }
  1460. ]
  1461. }
  1462. }
  1463. ]
  1464. }
  1465. },
  1466. "additionalProperties": false
  1467. },
  1468. "acpAgents": {
  1469. "type": "object",
  1470. "propertyNames": {
  1471. "type": "string"
  1472. },
  1473. "additionalProperties": {
  1474. "type": "object",
  1475. "properties": {
  1476. "command": {
  1477. "type": "string",
  1478. "minLength": 1
  1479. },
  1480. "args": {
  1481. "default": [],
  1482. "type": "array",
  1483. "items": {
  1484. "type": "string"
  1485. }
  1486. },
  1487. "env": {
  1488. "default": {},
  1489. "type": "object",
  1490. "propertyNames": {
  1491. "type": "string"
  1492. },
  1493. "additionalProperties": {
  1494. "type": "string"
  1495. }
  1496. },
  1497. "cwd": {
  1498. "type": "string",
  1499. "minLength": 1
  1500. },
  1501. "description": {
  1502. "type": "string",
  1503. "minLength": 1
  1504. },
  1505. "prompt": {
  1506. "type": "string",
  1507. "minLength": 1
  1508. },
  1509. "orchestratorPrompt": {
  1510. "type": "string",
  1511. "minLength": 1
  1512. },
  1513. "wrapperModel": {
  1514. "type": "string",
  1515. "pattern": "^[^/\\s]+\\/.+$"
  1516. },
  1517. "timeoutMs": {
  1518. "default": 0,
  1519. "description": "Timeout for a single ACP run in milliseconds. Set to 0 to disable the timeout.",
  1520. "type": "integer",
  1521. "minimum": 0,
  1522. "maximum": 2147483647
  1523. },
  1524. "permissionMode": {
  1525. "default": "ask",
  1526. "type": "string",
  1527. "enum": [
  1528. "ask",
  1529. "allow",
  1530. "reject"
  1531. ]
  1532. }
  1533. },
  1534. "required": [
  1535. "command"
  1536. ],
  1537. "additionalProperties": false
  1538. }
  1539. }
  1540. },
  1541. "title": "oh-my-opencode-slim",
  1542. "description": "Configuration schema for oh-my-opencode-slim plugin for OpenCode"
  1543. }