Speċifikazzjoni b’sors miftuħ għall-orkestrazzjoni ta’ Codex: Symphony
Minn Alex Kotliarskyi, Victor Zhu u Zach Brock
Sitt xhur ilu, waqt li konna qed naħdmu fuq għodda interna għall-produttività, it-tim tagħna ħa deċiżjoni kontroversjali (dak iż-żmien): konna se nibnu r-repożitorju tagħna mingħajr kodiċi miktub minn bniedem. Kull linja fir-repożitorju tal-proġett tagħna kellha tiġi ġġenerata minn Codex.
Biex dan jaħdem, iddisinjajna mill-ġdid il-fluss tax-xogħol tal-inġinerija tagħna mill-bidu nett. Bnejna repożitorju faċli għall-aġenti, investejna ħafna f’testijiet awtomatizzati u salvagwardji u trattajna lil Codex bħala membru sħiħ tat-tim. Iddokumentajna dak il-vjaġġ fil-post tal-blogg preċedenti tagħna dwar l-inġinerija tal-harness.
U dan ħadem, iżda mbagħad iltqajna mal-ostaklu li jmiss: bidla fil-kuntest.
Biex insolvu din il-problema ġdida, bnejna sistema msejħa Symphony. Symphony(jinfetaħ f’tieqa ġdida) huwa orkestratur tal-aġenti li jibdel bord tal-ġestjoni tal-proġetti bħal Linear fi pjan ta’ kontroll għall-aġenti tal-kodifikazzjoni. Kull kompitu miftuħ jingħata aġent, l-aġenti jaħdmu kontinwament u l-bnedmin jirrevedu r-riżultati.
Din il-kariga tispjega kif ħloqna Symphony—li wassal għal żieda ta’ 500% fit-talba pull integrati f’xi timijiet—u kif tużah biex tbiddel is-sistema ta’ segwitu tal-problemi tiegħek f’orkestratur ta’ aġenti dejjem attiv.
Il-limitu massimu tal-aġenti interattivi tal-kodifikazzjoni.
Anke hekk kif isiru aktar faċli biex jintużaw, l-aġenti tal-kodifikazzjoni—kemm jekk jiġu aċċessati permezz ta’ applikazzjonijiet tal-web jew CLI—għadhom għodod interattivi.
Hekk kif l-iskala tax-xogħol aġentiku żdiedet f’OpenAI, sibna piż ġdid. Kull inġinier kien jiftaħ ftit sessjonijiet ta’ Codex, jassenja kompiti, jirrevedi r-riżultat, jiggwida lill-aġent u jirrepeti. Fil-prattika, ħafna nies setgħu jimmaniġġjaw b’mod komdu bejn tliet u ħames sessjonijiet fl-istess ħin qabel ma l-bidla fil-kuntest saret ta’ piż. Lil hinn minn dak, il-produttività naqset. Konna ninsew liema sessjoni kienet qed tagħmel xiex, naqbżu bejn terminals biex nerġgħu nġibu lill-aġenti fit-triq it-tajba u niddebuggjaw kompiti li jdumu fit-tul li kienu jeħlu nofs triq.
L-aġenti kienu veloċi, iżda kellna ostaklu fis-sistema: l-attenzjoni umana. Fil-fatt konna bnejna tim ta’ inġiniera junior estremament kapaċi, imbagħad tajna lill-inġiniera umani tagħna l-kompitu li jimmaniġġjawhom sal-iżgħar dettall. Dak ma kienx se jiskala.
Bidla fil-perspettiva
Indunajna li konna qed nottimizzaw il-ħaġa żbaljata. Konna qed norjentaw is-sistema tagħna fuq sessjonijiet ta’ kodifikazzjoni u PRs magħquda, meta fil-fatt dawn huma biss mezz biex jintlaħaq għan. Il-flussi tax-xogħol tas-software huma fil-biċċa l-kbira organizzati madwar riżultati li jridu jintlaħqu: problemi, kompiti, biljetti, stadji importanti.
Għalhekk staqsejna lilna nfusna x’jiġri kieku nieqfu nissorveljaw lill-aġenti direttament u minflok inħalluhom jieħdu xogħol mit-tracker tal-kompiti tagħna.
Dik l-idea saret Symphony, speċifikazzjoni miktuba li taġixxi bħala superviżur biex tikkordina xogħol awtonomu.
Nibdlu t-tracker tal-problemi tagħna f’orkestratur tal-aġenti.
Symphony bdiet b’kunċett sempliċi: kwalunkwe kompitu miftuħ għandu jittieħed f’idejn aġent u jitlesta minnu. Minflok ma nimmaniġġjaw is-sessjonijiet ta’ Codex f’diversi tabs, għamilna t-tracker tal-issues tagħna l-pjan ta’ kontroll.
F’din il-konfigurazzjoni, kull issue miftuħa ta’ Linear tiġi mmappjata għal workspace ddedikat ta’ aġent. Symphony tissorvelja kontinwament il-bord tal-kompiti u tiżgura li kull kompitu attiv ikollu aġent jaħdem fil-loop sakemm jitlesta. Jekk aġent jikkraxxja jew jeħel, Symphony terġa’ tibdieh. Jekk jidher xogħol ġdid, Symphony jieħdu f’idejh u jibda jorganizza x-xogħol.
Bnejna l-fluss tax-xogħol tagħna abbażi tal-istatusijiet tat-tickets, billi użajna l-maniġer tal-kompiti Lineari bħala magna tal-istati f'kuntest tekniku.
Fil-prattika, Symphony jissepara x-xogħol mis-sessjonijiet u mill-pull requests. Ċerti problemi jiġġeneraw PRs multipli f'diversi repożitorji; oħrajn huma purament investigazzjoni jew analiżi li qatt ma jmissu l-bażi tal-kodiċi.
Ladarba x-xogħol jiġi astratt b’dan il-mod, il-biljetti jistgħu jirrappreżentaw unitajiet ta’ xogħol ħafna akbar.
Nużaw Symphony regolarment biex norkestraw funzjonalitajiet kumplessi u migrazzjonijiet tal-infrastruttura. Pereżempju, nistgħu niftħu kompitu fejn nitolbu lill-aġent janalizza l-codebase, Slack jew Notion u jipproduċi pjan ta’ implimentazzjoni. Ladarba nkunu sodisfatti bil-pjan, l-aġent jiġġenera siġra ta’ kompiti, jaqsam ix-xogħol fi stadji u jiddefinixxi d-dipendenzi bejn il-kompiti.
L-aġenti jibdew jaħdmu biss fuq kompiti li mhumiex imblukkati, għalhekk l-eżekuzzjoni tiżvolġi b’mod naturali u ottimali b’mod parallel għal dan id-DAG (sekwenza ta’ passi ta’ eżekuzzjoni). Pereżempju, immarkajna l-aġġornament ta’ React bħala imblukkat sakemm issir migrazzjoni għal Vite. Kif mistenni, l-aġenti bdew jaġġornaw React biss wara li l-migrazzjoni għal Vite kienet tlestiet.
L-aġenti jistgħu wkoll joħolqu xogħol huma stess. Matul l-implimentazzjoni jew ir-reviżjoni, spiss jinnutaw titjib li jaqa’ barra mill-ambitu tal-kompitu attwali: kwistjoni ta’ prestazzjoni, opportunità ta’ rifattorizzazzjoni, jew arkitettura aħjar. Meta jiġri dan, huma sempliċement jiftħu kwistjoni ġdida li nistgħu nevalwaw u niskedaw aktar tard—ħafna minn dawn il-kompiti ta’ segwitu jittieħdu wkoll mill-aġenti. Filwaqt li nissorveljaw dan il-proċess, l-aġenti jibqgħu organizzati u jkomplu jmexxu x-xogħol ’il quddiem.
Dan il-mod ta’ ħidma jnaqqas b’mod drastiku l-piż konjittiv biex jinbeda xogħol ambigwu. Jekk l-aġent jiżbalja xi ħaġa, dik xorta tkun informazzjoni utli u l-ispiża għalina tkun kważi żero. Nistgħu niftħu tickets bi spiża baxxa ħafna biex l-aġent Go joħloq prototipi u jesplora u narmu kwalunkwe esplorazzjonijiet li ma jogħġbuniex.
Peress li l-orkestratur jaħdem fuq devboxes u qatt ma jorqod, nistgħu nżidu kompiti minn kullimkien u nkunu nafu li aġent se jieħu ħsiebhom. Pereżempju, inġinier wieħed fit-tim tagħna għamel tliet bidliet sinifikanti mill-app Linear fuq it-telefon tiegħu waqt li kien f’kabina komda b’Wi‑Fi fqir.
Żieda fl-esplorazzjoni li tirriżulta minn xogħol b’dan il-mod
Meta ġew osservati l-effetti tal-ħidma ma’ Symphony, il-bidla l-aktar ovvja kienet fl-output. Fost xi timijiet f’OpenAI, rajna żieda ta’ 500% fin-numru ta’ PRs integrati fl-ewwel tliet ġimgħat. Barra minn OpenAI, il-fundatur ta’ Linear, Karri Saarinen, enfasizza żieda qawwija fil-workspaces maħluqa(jinfetaħ f’tieqa ġdida) hekk kif nedejna Symphony. Madankollu, il-bidla l-aktar profonda hija kif it-timijiet jaħsbu dwar ix-xogħol.
Meta l-inġiniera tagħna ma jibqgħux iqattgħu ħin jissorveljaw is-sessjonijiet ta’ Codex, l-ekonomija tal-bidliet fil-kodiċi tinbidel kompletament. L-ispiża perċepita ta’ kull bidla tonqos għax m’għadniex ninvestu sforz uman biex immexxu l-implimentazzjoni nnifisha.
Dak biddel l-imġiba tagħna. Sar faċli ħafna li tniedi kompiti spekulattivi f’Symphony. Ipprova idea, esplora ristrutturar, ittestja ipoteżi u żomm biss ir-riżultati li jidhru promettenti.
Dan iwessa’ wkoll min jista’ jibda x-xogħol. Il-maniġer tal-prodott u d-disinjatur tagħna issa jistgħu jissottomettu talbiet għal funzjonalitajiet direttament f’Symphony. M’għandhomx għalfejn jagħmlu checkout tar-repożitorju jew jimmaniġġjaw sessjoni ta’ Codex. Huma jiddeskrivu l-funzjonalità u jirċievu lura pakkett ta’ reviżjoni li jinkludi gwida bil-vidjo tal-funzjonalità taħdem fi ħdan il-prodott reali.
Symphony jispikka wkoll f’monorepos kbar (bħal dak li għandna f’OpenAI), fejn l-aħħar pass biex PR jiġi inkorporat huwa kajman u fraġli. Is-sistema tissorvelja s-CI, tagħmel rebase meta jkun meħtieġ, issolvi l-kunflitti, terġa’ tipprova l-verifiki instabbli u b’mod ġenerali tiggwida l-bidliet tul il-pipeline. Sa meta biljett jasal għal Immerġjar, ikollna fiduċja kbira li l-bidla se tidħol fil-fergħa prinċipali mingħajr ma tkun teħtieġ superviżjoni umana kontinwa.
Wara l-implimentazzjoni ta’ Symphony, niddelegaw aktar xogħol lill-aġenti u niffukaw fuq kompiti aktar diffiċli u aktar esploratorji.
Il-progress iġib miegħu problemi ġodda u differenti
It-tħaddim f’dan il-livell jinvolvi kompromessi. Meta għaddejna milli niggwidaw l-aġenti b’mod interattiv għal li nassenjawlhom xogħol fil-livell tat-ticket, tlifna l-ħila li nagħtuhom gwida kontinwament u naġġustaw ir-rotta meta jkun meħtieġ. Kultant l-aġent ipproduċa xi ħaġa li ma laqtitx il-mira xejn. Dan kien utli—dawk il-fallimenti żvelaw lakuni fis-sistema u għenuna nagħmluha aktar robusta.
Minflok ma rranġajna r-riżultat manwalment, żidna salvagwardji u ħiliet sabiex l-aġenti jkunu jistgħu jirnexxu d-darba li jmiss. Maż-żmien, dan wassalna biex inżidu kapaċitajiet ġodda mal-harness tagħna, bħal li nħaddmu testijiet end-to-end, nimmaniġġjaw l-app permezz ta’ Chrome DevTools u nimmaniġġjaw testijiet smoke tal-QA. Tejjibna b’mod sinifikanti d-dokumentazzjoni tagħna u ċċarajna kif jidher xogħol tajjeb.
Mhux kull kompitu jaqbel mal-istil ta’ xogħol ta’ Symphony. Xi problemi għadhom jeħtieġu li l-inġiniera jaħdmu direttament ma’ sessjonijiet interattivi ta’ Codex, speċjalment problemi ambigwi jew xogħol li jeħtieġ ġudizzju sod u għarfien espert. Fil-prattika, dawn ġeneralment ikunu l-aktar kompiti interessanti u pjaċevoli biex l-inġiniera tagħna jqattgħu ħinhom fuqhom.
Id-differenza hija li Symphony jista’ jimmaniġġja l-biċċa l-kbira tax-xogħol ta’ implimentazzjoni ta’ rutina. Dan jippermetti lill-inġiniera jiffokaw fuq problema diffiċli waħda kull darba minflok ma jaqilbu kontinwament il-kuntest bejn kompiti iżgħar.
Tgħallimna wkoll li t-trattament tal-aġenti bħala nodi riġidi f’magna tal-istati ma jaħdimx tajjeb. Il-mudelli jsiru aktar intelliġenti u jistgħu jsolvu problemi akbar mill-kaxxa li nippruvaw indaħħluhom fiha. Il-verżjonijiet bikrija tagħna tax-xogħol aġentiku kienu jikkonsistu biss f’li nitolbu lil Codex jimplimenta l-kompitu. Dak l-approċċ irriżulta li kien restrittiv wisq. Codex huwa perfettament kapaċi joħloq diversi PRs u kif ukoll jaqra l-feedback tar-reviżjoni u jindirizzah. Allura tajnieh għodod—gh CLI, ħiliet biex jaqra l-logs tas-CI, eċċ.—u issa nistgħu nitolbu lil Codex jagħmel aktar, bħal jagħlaq PRs qodma jew jiġbed rapporti dwar xogħol komplut vs. xogħol abbandunat. Dawn it-tipi ta’ kompiti kienu ferm lil hinn mill-qafas tal-implimentazzjoni inizjali tal-karatteristika.
Għalhekk, eventwalment imxejna lejn li nagħtu lill-aġenti għanijiet minflok tranżizzjonijiet stretti, bħalma maniġer tajjeb jassenja għan lil xi ħadd fit-tim tiegħu li jirrapporta direttament lilu. Il-qawwa tal-mudelli ġejja mill-kapaċità tagħhom li jirraġunaw, għalhekk agħtihom għodod u kuntest u ħallihom jagħmlu xogħolhom.
Nużaw Symphony biex nibnu Symphony
Meta tiftaħ ir-repożitorju ta’ Symphony,(jinfetaħ f’tieqa ġdida) l-ewwel ħaġa li tinduna biha hija li teknikament Symphony huwa biss fajl SPEC.md —definizzjoni tal-problema u tas-soluzzjoni maħsuba. Minflok ma bnejna sistema kumplessa ta’ superviżjoni, iddefinixxejna l-problema u s-soluzzjonijiet maħsuba u tajna lill-aġenti gwida ta’ livell għoli.
L-implimentazzjoni ta’ referenza hija miktuba f’Elixir—għax meta l-kodiċi effettivament ikun bla ħlas, fl-aħħar tista’ tagħżel il-lingwi ta’ programmazzjoni skont il-punti b’saħħithom tagħhom, bħall-konkorrenza ta’ Elixir—iżda l-idea ewlenija tista’ tiġi espressa f’dokument ta' Markdown sempliċi. Inħeġġuk tidderieġi l-aġent tal-kodifikazzjoni preferut tiegħek lejn l-ispeċifikazzjoni u tħallih jimplimenta l-verżjoni tiegħu stess.
L-ewwel verżjoni ta’ Symphony kienet biss sessjoni ta’ Codex li kienet qed taħdem fi tmux, tagħmel polling lil Linear u tniedi aġenti sekondarji għal kompiti ġodda. Ħadmet, iżda ma kinitx partikolarment affidabbli. It-tieni verżjoni kienet tinsab ġewwa r-repożitorju ewlieni tal-proġett tagħna, li kien mibni bil-ħsieb tal-aġenti. Konna diġà bnejna l-qafas għall-aġenti biex nagħtu lill-aġenti l-ħiliet u l-kuntest biex jagħmlu xogħol ta’ kwalità għolja f’dan ir-repo, għalhekk Symphony sempliċiment jgħaqqad kollox.
Ladarba l-funzjonalità bażika kienet teżisti użajna Symphony biex nibnu Symphony.
Meta għamilna dimostrazzjoni interna tas-sistema li timmaniġġja l-kompiti u tehmeż il-vidjow tagħha ta’ prova tax-xogħol, ir-reazzjoni kienet pożittiva ħafna: il-kanal tal-proġett Symphony tagħna kiber u t-timijiet fl-organizzazzjoni kollha bdew jużawha b’mod spontanju. L-adattament intern tal-prodott mas-suq huwa prerekwiżit għat-tnedija esterna f’OpenAI. Abbażi tal-użu li rajna f’OpenAI, sar ċar li għandna naqsmu Symphony lil hinn mill-konfini tal-kumpanija.
Għalhekk ħadna l-idea u poġġejnieha f’fajl SPEC.md indipendenti u tlabna lil Codex jimplimentaha. Għall-implimentazzjoni ta’ referenza, għażilna Elixir, lingwa relattivament niċċa bi primitivi eċċellenti għall-orkestrazzjoni u s-superviżjoni ta’ proċessi konkorrenti. Codex bena l-implimentazzjoni ta’ Elixir f’tentattiv wieħed u minn hemm komplejna nirfinaw kemm fuq l-ispeċifikazzjoni kif ukoll fuq l-implimentazzjoni. Biex nirfinaw l-ispeċifikazzjoni, saħansitra tlabna lil Codex jimplimentaha f’diversi lingwi oħra—TypeScript, Go, Rust, Java, Python—u użajna r-riżultati biex nidentifikaw ambigwitajiet u nissimplifikaw is-sistema. Irnexxa f’kull lingwa.
Matul il-proċess tal-bini ta’ Symphony, neħħejna ħafna kumplessità inċidentali, bħal dipendenzi fuq repożitorji speċifiċi jew fuq Linear MCP. Symphony m’għadhiex tiddependi fuq ir-repożitorji jew il-flussi tax-xogħol interni tagħna. L-approċċ ewlieni sar sempliċi:
Għal kull kompitu miftuħ, żgura li aġent ikun qed jaħdem fil-workspace tiegħu stess.
Minbarra li jgħinu fix-xogħol attiv, il-fluss tax-xogħol tal-iżvilupp issa huwa xi ħaġa li l-aġenti jafu u jsegwu. Il-fluss tax-xogħol tal-iżvilupp—taħdem fuq problema, tiċċekkja repożitorju, tqiegħdu bħala għaddej sabiex il-PM ikun jaf li qed jinħadem fuqu, iżżid il-PR, tmexxih għall-istatus Review, tehmeż vidjows, eċċ.—issa huwa maqbud f’fajl sempliċi WORKFLOW.md. Dan kollu huwa proċess li l-bnedmin kienu jsegwu, iżda qatt ma ġie dokumentat. Minflok ma niddependu fuq dan is-sett impliċitu ta’ passi, issa niddokumentawh u Symphony tiżgura li l-aġenti jsegwuh. Dan jippermettilna nibnu aġenti li jaħdmu magħna. Jekk niddeċiedu li l-aġenti għandhom jehmżu wkoll awtoriflessjoni max-xogħol mitmum, se nżidu dan mal-WORKFLOW.md. u Symphony se tiggwida lill-aġenti lejn dak il-pass.
Stajna nużaw ukoll Codex f’ modalità ta’ server tal-app(jinfetaħ f’tieqa ġdida), modalità headless inkorporata għal Codex. Din il-modalità ppermettietilna nħaddmu Codex u nitkellmu miegħu b’mod programmatiku permezz ta’ API JSON-RPC iddokumentata tajjeb għal affarijiet bħall-bidu ta’ thread jew ir-reazzjoni għal turns. Dan huwa aktar konvenjenti u skalabbli milli tipprova tinteraġixxi ma’ Codex permezz tas-CLI jew sessjonijiet live ta’ tmux.
Codex App Server kien jaqbel perfettament mal-każ tal-użu tagħna: nieħdu vantaġġ mill-qafas li jipprovdi Codex, filwaqt li jkollna kontrolli u hooks li nistgħu nintegraw magħhom. Għal eżempju, biex nevitaw li nesponu t-token ta’ aċċess ta’ Linear lill-aġenti sekondarji, nużaw sejħiet dinamiċi tal-għodda(jinfetaħ f’tieqa ġdida) biex nesponu l-funzjoni mhux ipproċessata linear_graphql li teżegwixxi talbiet arbitrarji kontra Linear, mingħajr ma niddependu fuq MCP jew nesponu t-token ta’ aċċess lill-kontenituri.
X'hemm wara?
Symphony huwa saff ta’ orkestrazzjoni intenzjonalment minimu. Aħna qed nippubblikawh bħala sors miftuħ biex nuru l-potenzjal ta’ Codex App Server meta jintuża ma’ għodod differenti għall-flussi tax-xogħol, bħal Linear. Għaldaqstant, ma nippjanawx li nżommu Symphony bħala prodott indipendenti. Aħsibha bħala implimentazzjoni ta’ referenza. B’mod simili għal kif ħafna żviluppaturi użaw l-aġenti tal-kodifikazzjoni tagħhom mal-post dwar l-inġinerija tal-harness biex joħolqu qafas inizjali għar-repożitorji tagħhom, nittamaw li tipponta l-aġent favorit tiegħek lejn l-ispeċifikazzjoni(jinfetaħ f’tieqa ġdida) u r-repożitorju(jinfetaħ f’tieqa ġdida) ta’ Symphony biex tibni verżjonijiet personalizzati għall-ambjenti tiegħek.
Il-qawwa tiġi minn Codex u mis-server tal-app tiegħu. Symphony kien mod kif nikkollegaw Codex ma’ Linear, żewġ affarijiet li konna diġà nużaw, biex insolvu l-problema tal-ġestjoni tax-xogħol. Hekk kif l-aġenti tal-kodifikazzjoni jsiru aħjar fir-raġunament u fis-segwitu tal-istruzzjonijiet, nissuspettaw li l-konġestjoni f’kumpaniji oħra se tiċċaqlaq ukoll mill-kitba tal-kodiċi lejn il-ġestjoni tax-xogħol b’aġenti. Il-parti eċċitanti hi li l-ostaklu biex wieħed jesperimenta b’dawn is-sistemi ta’ aġenti tal-kodiċi issa huwa sorprendentement baxx. Tista’ sempliċement toħloq affarijiet permezz ta' Codex.
Rikonoxximenti tal-komunità
Ninsabu ferħanin ħafna li naraw lill-komunità tal-inġinerija tuża Symphony fil-ġimgħat minn meta ġie rilaxxat u kiseb aktar minn 15K stilla fuq GitHub(jinfetaħ f’tieqa ġdida) sal-23 ta’ April.