Codex ऑर्केस्ट्रेशनसाठी एक ओपन-सोर्स स्पेक: Symphony
Alex Kotliarskyi, Victor Zhu आणि Zach Brock यांच्याकडून
सहा महिन्यांपूर्वी, एका अंतर्गत उत्पादकता साधनावर काम करत असताना, आमच्या टीमने एक (त्या वेळी) वादग्रस्त निर्णय घेतला: आम्ही आमचे रेपो कोणत्याही मानवी-लिखित कोडशिवाय तयार करणार होतो. आमच्या प्रोजेक्ट रिपॉझिटरीमधील प्रत्येक ओळ Codex द्वारे तयार केली जाणे आवश्यक होते.
ते यशस्वी करण्यासाठी, आम्ही आमच्या इंजिनिअरिंग वर्कफ्लोची मुळापासून पुनर्रचना केली. आम्ही एक एजंट-अनुकूल रिपॉझिटरी तयार केली, स्वयंचलित चाचण्या आणि सुरक्षा उपायांमध्ये मोठी गुंतवणूक केली, आणि Codex ला एक पूर्ण-वेळ सहकारी म्हणून मानले. आम्ही तो प्रवास आमच्या हार्नेस इंजिनिअरिंगवरील मागील ब्लॉग पोस्टमध्ये नोंदवला आहे.
आणि ते यशस्वी झाले, पण मग आमच्यासमोर पुढची अडचण आली: कॉन्टेक्स्ट स्विचिंग.
ही नवीन समस्या सोडवण्यासाठी, आम्ही Symphony नावाची एक सिस्टिम तयार केली आहे. Symphony(नवीन विंडोमध्ये उघडेल) हा एक एजंट ऑर्केस्ट्रेटर आहे, जो Linear सारख्या प्रोजेक्ट-मॅनेजमेंट बोर्डला एजंट्सच्या कोडिंगसाठी कंट्रोल प्लेनमध्ये रूपांतरित करतो. प्रत्येक चालू असलेल्या टास्कला एक एजंट मिळतो, एजंट्स सतत कार्यरत राहतात आणि व्यक्ती परिणामांचे पुनरावलोकन करतात.
या पोस्टमध्ये आम्ही Symphony कसे तयार केले—ज्यामुळे काही टीम्समध्ये यशस्वी pull request मध्ये 500% वाढ झाली—आणि त्याचा वापर करून तुमच्या स्वतःच्या इश्यू ट्रॅकरला एका नेहमी कार्यरत असणाऱ्या एजंट ऑर्केस्ट्रेटरमध्ये कसे रूपांतरित करायचे, हे स्पष्ट केले आहे.
इंटरॅक्टिव्ह कोडिंग एजंट्सची मर्यादा
वापरण्यास सोपे होत असले तरी, कोडिंग एजंट—मग ते वेब ॲप्सद्वारे वापरले जावोत किंवा CLI द्वारे— ते अजूनही परस्परसंवादी टूल्सच आहेत.
OpenAI मध्ये एजंटच्या कामाचा आवाका जसजसा वाढत गेला, तसतसा आमच्यावर एका नव्या प्रकारचा भार येऊ लागला. प्रत्येक इंजिनिअर काही Codex सेशन्स उघडायचा, टास्क सोपवायचा, आउटपुट तपासायचा, एजंटला नियंत्रित करायचा आणि हीच प्रक्रिया पुन्हा पुन्हा करायचा. प्रत्यक्षात, कॉन्टेक्स्ट स्विचिंग त्रासदायक होईपर्यंत बहुतेक लोक एका वेळी तीन ते पाच सेशन्स आरामात हाताळू शकत होते. त्यापुढे उत्पादकता कमी व्हायची. कोणते सेशन काय करत आहे हे आम्ही विसरून जायचो, एजंटना पुन्हा मार्गावर आणण्यासाठी टर्मिनल्स बदलावे लागायचे आणि मध्येच थांबलेल्या दीर्घकाळ चालणाऱ्या टास्कमधील चुका दुरुस्त कराव्या लागायच्या.
एजंट्स वेगवान होते, पण आमच्या सिस्टीममध्ये एक अडचण होती: मानवी लक्ष. आम्ही अत्यंत सक्षम ज्युनियर इंजिनिअर्सची एक टीम तयार केली होती आणि मग आमच्या मानवी इंजिनिअर्सना त्यांच्यावर बारीक लक्ष ठेवण्याचे काम दिले होते. ही पद्धत मोठ्या प्रमाणावर राबवता येण्यासारखी नव्हती.
दृष्टीकोनात बदल
आमच्या लक्षात आले की आम्ही चुकीच्या गोष्टीला ऑप्टिमाइझ करत होतो. आम्ही आमची सिस्टीम कोडिंग सेशन्स आणि मर्ज केलेल्या PR भोवती केंद्रित करत होतो, पण खरे तर PR आणि सेशन्स हे ध्येय साध्य करण्याचे केवळ साधने आहेत. सॉफ्टवेअर वर्कफ्लो मुख्यत्वे डिलिव्हरेबल्सभोवती आयोजित केलेले असतात: इश्यूज, टास्क, तिकीट्स, माइलस्टोन्स.
म्हणून आम्ही स्वतःला विचारले की, जर आपण एजंट्सवर थेट देखरेख करणे थांबवून त्याऐवजी त्यांना आमच्या टास्क ट्रॅकरमधून काम घेऊ दिले, तर काय होईल.
त्या कल्पनेतून Symphony साकार झाले, जी एक लिखित स्पेक असून ते एजंटिक कामाचे नियोजन करण्यासाठी पर्यवेक्षकाप्रमाणे कार्य करते.
आमच्या इश्यू ट्रॅकरला एजंट ऑर्केस्ट्रेटरमध्ये रूपांतरित करणे
Symphony ची सुरुवात एका साध्या संकल्पनेतून झाली: कोणतेही प्रलंबित काम एजंटने हाती घेऊन पूर्ण करावे. अनेक टॅबमध्ये Codex सेशन्स व्यवस्थापित करण्याऐवजी, आम्ही आमच्या इश्यू ट्रॅकरलाच कंट्रोल प्लेन बनवले.
या सेटअपमध्ये, प्रत्येक ओपन Linear इश्यू एका समर्पित एजंट वर्कस्पेसशी मॅप केलेला असतो. Symphony सतत टास्क बोर्डवर लक्ष ठेवते आणि प्रत्येक सक्रिय टास्क पूर्ण होईपर्यंत त्याच्यासाठी एक एजंट लूपमध्ये चालू असल्याची खात्री करते. जर एखादा एजंट क्रॅश झाला किंवा थांबला, तर Symphony त्याला पुन्हा सुरू करते. जर नवीन काम आले, तर Symphony ते हाती घेते आणि कामाची मांडणी करण्यास सुरुवात करते.
आम्ही Linear या टास्क मॅनेजरचा स्टेट मशीन म्हणून वापर करून, तिकीटच्या स्थितीनुसार आमचा वर्कफ्लो तयार केला.
प्रत्यक्षात, Symphony कामाला सेशन्स आणि pull request पासून वेगळे ठेवते. काही समस्यांमुळे विविध रिपॉझिटरीजमध्ये अनेक PR तयार होतात; तर इतर समस्या निव्वळ तपासणी किंवा विश्लेषणाच्या असतात, ज्यात कोडबेसमध्ये कधीही बदल केला जात नाही.
एकदा कामाचे अशा प्रकारे अमूर्तीकरण झाले की, तिकिटे कामाच्या अधिक मोठ्या एककांचे प्रतिनिधित्व करू शकतात.
आम्ही जटिल फीचर्स आणि इन्फ्रास्ट्रक्चर मायग्रेशन्सचे नियोजन करण्यासाठी Symphony चा नियमितपणे वापर करतो. उदाहरणार्थ, आम्ही एजंटला कोडबेस, Slack किंवा Notion चे विश्लेषण करून अंमलबजावणी योजना तयार करण्यास सांगणारे एक टास्क दाखल करू शकतो. एकदा का आम्ही योजनेवर समाधानी झालो की, एजंट टास्कचे एक ट्री तयार करतो, कामाला टप्प्यांमध्ये विभागतो आणि टास्कमधील अवलंबित्व परिभाषित करतो.
एजंट्स फक्त अशाच कामांवर काम सुरू करतात जी ब्लॉक केलेली नाहीत, त्यामुळे या DAG (एक्झिक्युशन स्टेप्सचा क्रम) साठी एक्झिक्युशन नैसर्गिकरित्या आणि उत्तम प्रकारे समांतरपणे पुढे जाते. खालील उदाहरणात, आम्ही Vite मध्ये मायग्रेशन झाल्यावर React अपग्रेड ब्लॉक केले आहे असे चिन्हांकित केले आहे. अपेक्षेप्रमाणे, Vite मध्ये मायग्रेशन पूर्ण झाल्यावरच एजंट्सनी React अपग्रेड करण्यास सुरुवात केली.
एजंट्स स्वतः देखील काम तयार करू शकतात. अंमलबजावणी किंवा पुनरावलोकनादरम्यान, अनेकदा त्यांच्या लक्षात अशा सुधारणा येतात ज्या सध्याच्या टास्कच्या व्याप्तीबाहेरच्या असतात: जसे की परफॉर्मन्सची समस्या, रिफॅक्टरिंगची संधी किंवा अधिक चांगले आर्किटेक्चर. असे झाल्यावर, ते फक्त एक नवीन इश्यू दाखल करतात, ज्याचे आम्ही मूल्यांकन करून नंतर शेड्यूल करू शकतो—यापैकी अनेक फॉलो-अप कामे देखील एजंट्सद्वारेच हाती घेतली जातात. आम्ही या प्रक्रियेवर देखरेख करत असताना, एजंट्स संघटित राहतात आणि काम पुढे चालू ठेवतात.
काम करण्याच्या या पद्धतीमुळे अस्पष्ट काम सुरू करण्याचा बौद्धिक खर्च लक्षणीयरीत्या कमी होतो. एजंटने काही चूक केली तरी, ती उपयुक्त माहितीच ठरते आणि आपला खर्च जवळजवळ शून्य असतो. आपण एजंटला ChatGPT Go प्रोटोटाइपसाठी तयार करून शोध घेण्यासाठी अगदी कमी खर्चात तिकीट दाखल करू शकतो आणि आपल्याला न आवडणारे कोणतेही शोधकार्य रद्द करू शकतो.
ऑर्केस्ट्रेटर डेव्हबॉक्सेसवर चालत असल्यामुळे आणि कधीही निष्क्रिय राहत नसल्यामुळे, आम्ही कुठूनही टास्क जोडू शकतो आणि आम्हाला खात्री असते की एखादा एजंट ते काम हाती घेईल. उदाहरणार्थ, आमच्या टीममधील एका इंजिनिअरने खराब वायफायवर एका आरामदायक केबिनमधून, त्याच्या फोनवरील Linear ॲपमधून तीन महत्त्वपूर्ण बदल केले.
या पद्धतीने काम केल्याने संशोधनात वाढ होते
Symphony सोबत काम करण्याच्या परिणामांचे निरीक्षण करताना, सर्वात स्पष्ट बदल आउटपुटमध्ये दिसून आला. OpenAI मधील काही टीम्समध्ये, पहिल्या तीन आठवड्यांत लँडेड PR ची संख्या 6 पटीने वाढल्याचे आम्ही पाहिले. OpenAI च्या बाहेर, Linear चे संस्थापक Karri Saarinen यांनी, आम्ही Symphony रिलीज केल्यावर तयार केलेल्या वर्कस्पेसेसमध्ये मोठी वाढ(नवीन विंडोमध्ये उघडेल) झाल्याचे अधोरेखित केले. तथापि, यामागील अधिक खोलवरचा बदल म्हणजे टीम्स कामाबद्दल कसा विचार करतात हा आहे.
जेव्हा आमचे इंजिनीअर Codex सेशन्सवर देखरेख ठेवण्यात वेळ घालवत नाहीत, तेव्हा कोडचे अर्थशास्त्र पूर्णपणे बदलते. प्रत्येक बदलाचा जाणवलेला खर्च कमी होतो, कारण आम्ही प्रत्यक्ष अंमलबजावणी करण्यासाठी मानवी श्रम गुंतवत नाही.
त्यामुळे आमची कार्यपद्धती बदलली. Symphony मध्ये अनुमानित टास्क सुरू करणे आता अगदी सोपे झाले आहे. एखादी कल्पना आजमावून पहा, रिफॅक्टरचा शोध घ्या, एखादे गृहीतक तपासा आणि केवळ आशादायक वाटणारेच परिणाम ठेवा.
यामुळे काम सुरू करू शकणाऱ्यांची संख्याही वाढते. आमचे प्रॉडक्ट मॅनेजर आणि डिझायनर आता थेट Symphony मध्ये फीचर रिक्वेस्ट दाखल करू शकतात. त्यांना रेपो चेक आउट करण्याची किंवा Codex सेशन व्यवस्थापित करण्याची गरज नाही. ते फीचरचे वर्णन करतात आणि त्यांना एक रिव्ह्यू पॅकेट परत मिळते, ज्यामध्ये प्रत्यक्ष प्रॉडक्टमध्ये ते फीचर कसे काम करते याचा व्हिडिओ वॉकथ्रू समाविष्ट असतो.
Symphony मोठ्या मोनोरिपोमध्ये (जसे की आमच्याकडे OpenAI मध्ये आहे) देखील उत्कृष्ट कामगिरी करते, जिथे PR लँड करण्याची शेवटची पायरी मंद आणि नाजूक असते. ही सिस्टिम CI वर लक्ष ठेवते, आवश्यकतेनुसार रिबेस करते, कॉन्फ्लिक्ट्स सोडवते, अस्थिर तपासण्या पुन्हा करून पाहते आणि सर्वसाधारणपणे पाइपलाइनमधून बदलांना योग्य दिशेने पुढे नेते. जेव्हा एखादे तिकीट मर्जिंग टप्प्यावर पोहोचते, तेव्हा आम्हाला पूर्ण खात्री असते की तो बदल कोणत्याही मानवी हस्तक्षेपाशिवाय मुख्य ब्रांचमध्ये समाविष्ट होईल.
प्रगतीसोबत नवीन आणि वेगळ्या समस्या येतात
या स्तरावर काम करताना काही तडजोडी कराव्या लागतात. जेव्हा आम्ही एजंट्सना परस्परसंवादीपणे मार्गदर्शन करण्याऐवजी त्यांना तिकीट स्तरावर काम सोपवू लागलो, तेव्हा कामाच्या मध्यात त्यांना सतत आठवण करून देण्याची आणि आवश्यकतेनुसार सुधारणा करण्याची क्षमता आम्ही गमावली. कधीकधी एजंटकडून असे काहीतरी तयार व्हायचे जे पूर्णपणे चुकीचे असायचे. हे उपयुक्त ठरले—या चुकांमुळे सिस्टिममधील त्रुटी उघड झाल्या आणि आम्हाला ती अधिक मजबूत बनविण्यात मदत झाली.
परिणाम मॅन्युअली दुरुस्त करण्याऐवजी, आम्ही काही सुरक्षा उपाययोजना आणि कौशल्ये जोडली, जेणेकरून एजंट पुढच्या वेळी यशस्वी होऊ शकतील. कालांतराने, यामुळे आम्ही आमच्या कार्यप्रणालीमध्ये नवीन क्षमता जोडल्या, जसे की एंड-टू-एंड टेस्ट्स चालवणे, Chrome DevTools द्वारे ॲप चालवणे आणि QA स्मोक टेस्ट्स व्यवस्थापित करणे. आम्ही आमच्या डॉक्युमेंटेशनमध्ये लक्षणीय सुधारणा केली आणि 'उत्तम' म्हणजे काय हे अधिक स्पष्ट केले.
प्रत्येक टास्क Symphony च्या कार्यशैलीला जुळत नाही. काही समस्यांसाठी इंजिनिअर्सला अजूनही इंटरॅक्टिव्ह Codex सेशन्ससोबत थेट काम करावे लागते, विशेषतः अशा कामांसाठी ज्यात संदिग्धता असते किंवा ज्यासाठी प्रखर निर्णयक्षमता आणि कौशल्याची आवश्यकता असते. प्रत्यक्षात, आमच्या इंजिनिअर्ससाठी वेळ घालवण्याकरिता हीच कामे सहसा सर्वात मनोरंजक आणि आनंददायक असतात.
फरक हा आहे की Symphony बहुतांश नियमित अंमलबजावणीचे काम हाताळू शकते. त्यामुळे इंजिनिअर्सला लहान-सहान कामांमध्ये कॉन्टेक्स्ट स्विचिंग करण्याऐवजी एका वेळी एकाच कठीण समस्येवर लक्ष केंद्रित करता येते.
आम्ही हे देखील शिकलो की एजंट्सना स्टेट मशीनमधील ताठर नोड्स म्हणून हाताळणे योग्य ठरत नाही. मॉडेल्स अधिक हुशार होतात आणि आपण त्यांना ज्या चौकटीत बसवण्याचा प्रयत्न करतो, त्या चौकटीच्या पलीकडे जाऊन मोठ्या समस्या सोडवू शकतात. उदाहरणार्थ, सुरुवातीच्या आवृत्त्यांमध्ये सर्व GitHub इंटिग्रेशन्स बाह्य रचनेचा भाग म्हणून समाविष्ट होते—उदाहरणार्थ, सुरुवातीच्या आवृत्त्यांमध्ये Codex ने फक्त कोडमध्ये बदल करावेत अशी अपेक्षा होती, आणि बाकीची प्रक्रिया (बदल सबमिट करणे, टेस्ट्स चालवणे) कोडमध्येच नमूद केली जात होती. एजंटिक कामाच्या आमच्या सुरुवातीच्या आवृत्त्यांमध्ये आम्ही Codex ला फक्त ते टास्क अंमलात आणायला सांगत होतो. तो दृष्टिकोन खूपच मर्यादित ठरला. Codex अनेक PR तयार करण्यास, तसेच रिव्ह्यू फीडबॅक वाचून त्यावर उपाययोजना करण्यास पूर्णपणे सक्षम आहे. म्हणून आम्ही त्याला टूल्स दिली—gh CLI, CI लॉग्स वाचण्याची कौशल्ये, इत्यादी—आणि आता आम्ही Codex ला अधिक कामे करायला सांगू शकतो, जसे की जुने PR बंद करणे किंवा पूर्ण झालेल्या विरुद्ध अर्धवट राहिलेल्या कामाचे अहवाल काढणे. या प्रकारचे टास्क सुरुवातीच्या फीचर अंमलबजावणीच्या चौकटीच्या खूपच पलीकडची होते.
म्हणून आम्ही अखेरीस एजंट्सना केवळ ठराविक संक्रमणे देण्याऐवजी उद्दिष्टे देण्याकडे वळलो, अगदी जसे एखादा चांगला व्यवस्थापक आपल्या टीममधील हाताखालच्या कर्मचाऱ्याला एखादे ध्येय नेमून देतो. मॉडेल्सची ताकद त्यांच्या तर्क करण्याच्या क्षमतेतून येते, म्हणून त्यांना टूल्स आणि संदर्भ द्या आणि त्यांना त्यांचे काम करू द्या.
Symphony तयार करण्यासाठी Symphony चा वापर
जेव्हा तुम्ही Symphony रिपॉझिटरी उघडता, तेव्हा तुमच्या लक्षात येणारी पहिली गोष्ट म्हणजे Symphony ही तांत्रिकदृष्ट्या केवळ एक SPEC.md फाईल आहे—जी समस्येची आणि अपेक्षित उपायाची व्याख्या करते. एक जटिल पर्यवेक्षण सिस्टिम तयार करण्याऐवजी, आम्ही समस्या आणि अपेक्षित उपाय परिभाषित केले, ज्यामुळे एजंट्सना उच्च-स्तरीय नियंत्रण मिळते.
संदर्भ अंमलबजावणी एलिक्झिरमध्ये लिहिलेली आहे—कारण जेव्हा कोड प्रभावीपणे विनामूल्य असतो, तेव्हा तुम्ही अखेरीस एलिक्झिरच्या समवर्तीतेसारख्या भाषा त्यांच्या सामर्थ्यासाठी निवडू शकता—परंतु मूळ कल्पना एका साध्या मार्कडाउन दस्तऐवजात व्यक्त केली जाऊ शकते. आम्ही तुम्हाला प्रोत्साहित करतो की तुम्ही तुमच्या आवडत्या कोडिंग एजंटला हे स्पेक दाखवावे आणि त्याच्याकडून त्याची स्वतःची आवृत्ती तयार करून घ्यावी.
Symphony ची पहिली आवृत्ती म्हणजे tmux मध्ये चालणारे एक Codex सेशन होते, जे Linear ला पोल करून नवीन कामांसाठी सब-एजंट्स तयार करत असे. ते काम करत होते, पण ते विशेष विश्वसनीय नव्हते. दुसरी आवृत्ती आमच्या मुख्य प्रोजेक्ट रिपॉझिटरीमध्ये होती, जी एजंट्सना डोळ्यासमोर ठेवून तयार केली गेली होती. या रेपोमध्ये एजंट्सना उच्च दर्जाचे काम करण्यासाठी आवश्यक कौशल्ये आणि संदर्भ देण्यासाठी आम्ही एजंट हार्नेस आधीच तयार केले होते, त्यामुळे Symphony फक्त या सर्वांना जोडते.
एकदा मूलभूत कार्यक्षमता अस्तित्वात आल्यावर, आम्ही Symphony तयार करण्यासाठी Symphony चा वापर केला.
जेव्हा आम्ही अंतर्गत स्तरावर टास्क व्यवस्थापित करणाऱ्या आणि कामाच्या पुराव्याचा व्हिडिओ जोडणाऱ्या सिस्टिमचे प्रात्यक्षिक दाखवले, तेव्हा त्याला प्रचंड सकारात्मक प्रतिसाद मिळाला: आमचे Symphony प्रोजेक्ट चॅनल वाढले आणि संस्थेतील सर्व टीम्स त्याचा आपोआप वापर करण्यास सुरुवात केली. OpenAI मध्ये बाह्यतः उत्पादन सादर करण्यासाठी अंतर्गत उत्पादन-बाजार सुसंगतता ही एक पूर्वअट आहे. OpenAI मध्ये आम्ही पाहिलेल्या वापराच्या आधारावर, हे स्पष्ट झाले की आपण Symphony ला कंपनीच्या मर्यादांपलीकडे शेअर केले पाहिजे.
म्हणून आम्ही ती कल्पना एका स्वतंत्र SPEC.md मध्ये मांडली आणि Codex ला ती कार्यान्वित करण्यास सांगितले. संदर्भ अंमलबजावणीसाठी, आम्ही एलिक्झिर निवडली, जी एकाच वेळी चालणाऱ्या प्रक्रियांचे संचालन आणि पर्यवेक्षण करण्यासाठी उत्कृष्ट मूलभूत घटक असलेली एक तुलनेने विशिष्ट भाषा आहे. Codex ने एलिक्झिरमधील अंमलबजावणी वन-शॉटमध्ये तयार केली, आणि तिथून पुढे आम्ही स्पेक आणि अंमलबजावणी या दोन्हींमध्ये सुधारणा करत राहिलो. स्पेक अधिक स्पष्ट करण्यासाठी, आम्ही Codex ला ते TypeScript, Go, Rust, Java, Python यांसारख्या इतर अनेक भाषांमध्ये कार्यान्वित करण्यास सांगितले आणि त्या परिणामांचा वापर करून संदिग्धता ओळखण्यास व सिस्टिम सोपी करण्यास सांगितले. हे प्रत्येक भाषेत यशस्वी झाले.
Codex तयार करण्याच्या प्रक्रियेतून, आम्ही विशिष्ट रिपॉझिटरीज किंवा Linear MCP वरील अवलंबित्व यांसारखी बरीच अनावश्यक गुंतागुंत दूर केली. Symphony आता आमच्या अंतर्गत रिपॉझिटरीज किंवा वर्कफ्लोवर अवलंबून नाही. मूळ दृष्टिकोन सोपा झाला:
प्रत्येक चालू असलेल्या टास्कसाठी, एजंट त्याच्या स्वतःच्या वर्कस्पेसमध्ये कार्यरत असल्याची खात्री करा.
सक्रिय कामात मदत करण्याव्यतिरिक्त, डेव्हलपमेंट वर्कफ्लो आता एजंट्सना माहीत असतो आणि ते त्याचे पालन करतात. डेव्हलपमेंट वर्कफ्लो—एखाद्या इश्यूवर काम करणे, रेपो चेक आउट करणे, ते प्रोग्रेसमध्ये ठेवणे जेणेकरून PM ला कळेल की त्यावर काम सुरू आहे, PR जोडणे, त्याला रिव्ह्यू स्टेटसवर हलवणे, व्हिडिओ जोडणे, इत्यादी—आता एका साध्या WORKFLOW.md फाईलमध्ये नोंदवलेला आहे. ही सर्व एक अशी प्रक्रिया आहे जी व्यक्ती पाळत असत, परंतु ती कधीही डॉक्युमेंट केली गेली नाही. या अप्रत्यक्ष पायऱ्यांच्या संचावर अवलंबून राहण्याऐवजी, आम्ही आता ते डॉक्युमेंट करतो आणि Symphony हे सुनिश्चित करते की एजंट्स त्याचे पालन करतील. यामुळे आम्हाला असे एजंट्स तयार करता येतात जे आमच्यासोबत काम करतात. जर आम्ही ठरवले की एजंट्सनी पूर्ण झालेल्या कामासोबत आत्म-चिंतन देखील जोडावे, तर आम्ही ते WORKFLOW.md मध्ये जोडू आणि Symphony एजंट्सना त्या पायरीपर्यंत मार्गदर्शन करेल.
आम्हाला Codex ॲप सर्व्हर मोड(नवीन विंडोमध्ये उघडेल) मध्ये वापरण्याची संधी मिळाली, जो Codex चा एक अंगभूत हेडलेस मोड आहे. या मोडमुळे आम्हाला Codex चालवणे आणि थ्रेड सुरू करणे किंवा पाळीला प्रतिसाद देणे यांसारख्या गोष्टींसाठी, एका सुस्पष्टपणे दस्तऐवजीकरण केलेल्या JSON-RPC API द्वारे त्याच्याशी प्रोग्रामॅटिकली संवाद साधणे शक्य झाले. CLI किंवा थेट tmux सेशन्सद्वारे Codex शी संवाद साधण्याचा प्रयत्न करण्यापेक्षा हा एक अधिक सोयीस्कर आणि स्केलेबल मार्ग आहे.
Codex ॲप सर्व्हर आमच्या वापरासाठी अगदी योग्य होता: आम्ही Codex ने प्रदान केलेल्या सिस्टिमचा फायदा घेतो आणि त्यात जोडणीसाठी अनेक पर्यायही उपलब्ध आहेत. उदाहरणार्थ, Linear ॲक्सेस टोकन सबएजंट्ससमोर उघड होऊ नये म्हणून, आम्ही MCP वर अवलंबून न राहता किंवा कंटेनर्ससमोर ॲक्सेस टोकन उघड न करता, Linear वर कोणत्याही विनंत्या कार्यान्वित करणारे मूळ linear_graphql फंक्शन उपलब्ध करून देण्यासाठी डायनॅमिक टूल कॉल्स(नवीन विंडोमध्ये उघडेल) वापरतो.
पुढे काय
Symphony हा एक हेतुपुरस्सर किमान घटकांचा ऑर्केस्ट्रेशन लेयर आहे. Linear सारख्या विविध वर्कफ्लो टूल्ससोबत वापरल्यास Codex ॲप सर्व्हरची शक्ती दाखवण्यासाठी आम्ही ते ओपन सोर्स करत आहोत. त्यामुळे, Symphony ला एक स्वतंत्र उत्पादन म्हणून सांभाळण्याची आमची योजना नाही. याला एक संदर्भ अंमलबजावणी समजा. ज्याप्रमाणे अनेक डेव्हलपर्सनी त्यांचे रिपॉझिटरीज तयार करण्यासाठी त्यांचे कोडिंग एजंट हार्नेस इंजिनिअरिंग पोस्टकडे निर्देशित केले, त्याचप्रमाणे आम्ही आशा करतो की तुम्ही तुमच्या वातावरणानुसार तयार केलेल्या स्वतःच्या आवृत्त्या बनवण्यासाठी तुमचा आवडता कोडिंग एजंट Symphony च्या स्पेक(नवीन विंडोमध्ये उघडेल) आणि रिपॉझिटरी(नवीन विंडोमध्ये उघडेल) कडे निर्देशित कराल.
याची शक्ती Codex आणि त्याच्या ॲप सर्व्हरमधून येते. कार्य व्यवस्थापनाची समस्या सोडवण्यासाठी, आम्ही आधीपासूनच वापरत असलेल्या Codex आणि Linear या दोन गोष्टींना जोडण्याचा Symphony हा एक मार्ग होता. जसे जसे कोडिंग एजंट्स रीझनिंग आणि सूचनांचे पालन करण्यात अधिक पारंगत होतील, तसे तसे इतर कंपन्यांमधील अडथळादेखील कोड लिहिण्याऐवजी एजंटच्या कामाचे व्यवस्थापन करण्याकडे वळेल, असा आम्हाला अंदाज आहे. सर्वात रोमांचक गोष्ट ही आहे की, या कोडिंग एजंट सिस्टीम्ससोबत प्रयोग करण्याचा अडथळा आता आश्चर्यकारकपणे कमी झाला आहे. तुम्ही Codex वापरून सहजपणे गोष्टी तयार करू शकता.
समुदायातील उल्लेखनीय प्रतिसाद
रिलीज झाल्यापासूनच्या काही आठवड्यांत इंजिनिअरिंग समुदाय Symphony चा वापर करत असल्याचे पाहून आम्हाला खूप आनंद होत आहे, आणि 23 एप्रिलपर्यंत याला 15 हजारांहून अधिक GitHub स्टार्स(नवीन विंडोमध्ये उघडेल) मिळाले आहेत.