Codex ऑर्केस्ट्रेशन के लिए एक ओपन-सोर्स स्पेक: Symphony
Alex Kotliarskyi, Victor Zhu, और Zach Brock द्वारा
छह महीने पहले, एक इंटरनल प्रोडक्टिविटी टूल पर काम करते हुए, हमारी टीम ने उस समय एक विवादास्पद फैसला लिया: हम अपनी रिपॉ बिना किसी इंसान द्वारा लिखे गए कोड के बनाएँगे. हमारे प्रोजेक्ट रिपॉज़िटरी की हर लाइन Codex द्वारा जनरेट की जानी थी.
इसे सफल बनाने के लिए, हमने अपने इंजीनियरिंग वर्कफ़्लो को पूरी तरह से नए सिरे से डिज़ाइन किया. हमने एक एजेंट-फ्रेंडली रिपॉज़िटरी बनाई, ऑटोमेटेड टेस्ट्स और गार्डरेल्स में भारी निवेश किया, और Codex को एक फुल-फ्लेज्ड टीममेट की तरह ट्रीट किया. हमने इस सफर को अपने पिछले harness engineering पर ब्लॉग पोस्ट में डॉक्यूमेंट किया.
यह काम कर गया, लेकिन फिर हमें अगली बॉटलनेक का सामना करना पड़ा: कॉन्टेक्स्ट स्विचिंग.
इस नई समस्या को हल करने के लिए, हमने Symphony नाम का एक सिस्टम बनाया. Symphony(एक नई विंडो में खुलेगा) एक एजेंट ऑर्केस्ट्रेटर है, जो Linear जैसे प्रोजेक्ट-मैनेजमेंट बोर्ड को कोडिंग एजेंट्स के लिए एक कंट्रोल प्लेन में बदल देता है. हर ओपन टास्क को एक एजेंट मिलता है, एजेंट्स लगातार चलते रहते हैं, और इंसान रिज़ल्ट्स को रिव्यू करते हैं.
यह पोस्ट बताता है कि हमने Symphony कैसे बनाया—जिससे कुछ टीमों में मर्ज हुए पुल रिक्वेस्ट्स में 500% की बढ़ोतरी हुई—और आप इसे कैसे इस्तेमाल करके अपने इश्यू ट्रैकर को एक हमेशा चालू रहने वाले एजेंट ऑर्केस्ट्रेटर में बदल सकते हैं.
इंटरैक्टिव कोडिंग एजेंट्स की सीमा
चाहे इन्हें वेब ऐप्स या CLI के जरिए एक्सेस किया जाए, कोडिंग एजेंट्स इस्तेमाल में आसान होते जा रहे हैं, लेकिन वे अभी भी इंटरैक्टिव टूल्स ही हैं.
OpenAI में जैसे-जैसे एजेंटिक काम का स्केल बढ़ा, हमें एक नया तरह का बोझ महसूस हुआ. हर इंजीनियर कुछ Codex सेशन्स खोलता, टास्क असाइन करता, आउटपुट रिव्यू करता, एजेंट को गाइड करता, और यह प्रक्रिया दोहराता. व्यवहार में, ज़्यादातर लोग एक समय में तीन से पाँच सेशन्स ही आराम से मैनेज कर पाते थे, उसके बाद कॉन्टेक्स्ट स्विचिंग मुश्किल हो जाती थी. इससे आगे प्रोडक्टिविटी गिरने लगती थी. हमें याद नहीं रहता था कि कौन सा सेशन क्या कर रहा है, हम अलग-अलग टर्मिनल्स के बीच स्विच करते रहते थे ताकि एजेंट्स को ट्रैक पर ला सकें, और उन लंबे टास्क्स को डिबग करते थे जो बीच में रुक जाते थे.
एजेंट्स तेज़ थे, लेकिन हमारे सिस्टम में एक बॉटलनेक था: इंसानी ध्यान. हमने असल में बहुत सक्षम जूनियर इंजीनियर्स की एक टीम बना ली थी, और फिर अपने ह्यूमन इंजीनियर्स को उन्हें माइक्रोमैनेज करने के लिए लगा दिया था. यह स्केल नहीं कर सकता था.
सोच में बदलाव
हमें एहसास हुआ कि हम गलत चीज़ को ऑप्टिमाइज़ कर रहे थे. हम अपने सिस्टम को कोडिंग सेशन्स और मर्ज हुए PRs के आसपास डिज़ाइन कर रहे थे, जबकि PRs और सेशन्स असल में सिर्फ एक माध्यम हैं. सॉफ्टवेयर वर्कफ़्लोज़ ज़्यादातर डिलीवेरेबल्स के आसपास ऑर्गनाइज़ होते हैं: इश्यूज़, टास्क्स, टिकट्स, माइलस्टोन्स.
फिर हमने सोचा कि क्या होगा अगर हम एजेंट्स को सीधे सुपरवाइज़ करना बंद कर दें और उन्हें अपने टास्क ट्रैकर से खुद काम उठाने दें.
यही आइडिया Symphony बना, एक लिखित स्पेक जो एजेंटिक काम को ऑर्केस्ट्रेट करने के लिए एक सुपरवाइज़र की तरह काम करता है.
अपने इश्यू ट्रैकर को एजेंट ऑर्केस्ट्रेटर में बदलना
Symphony एक सिंपल कॉन्सेप्ट से शुरू हुआ: हर ओपन टास्क को एक एजेंट उठाए और पूरा करे. कई टैब्स में Codex सेशन्स मैनेज करने की बजाय, हमने अपने इश्यू ट्रैकर को कंट्रोल प्लेन बना दिया.
इस सेटअप में, हर ओपन Linear इश्यू एक डेडिकेटेड एजेंट वर्कस्पेस से मैप होता है. Symphony लगातार टास्क बोर्ड को मॉनिटर करता है और यह सुनिश्चित करता है कि हर एक्टिव टास्क के लिए एक एजेंट लूप में चलता रहे जब तक वह पूरा न हो जाए. अगर कोई एजेंट क्रैश हो जाता है या रुक जाता है, तो Symphony उसे फिर से स्टार्ट करता है. अगर नया काम आता है, तो Symphony उसे पिक करता है और काम को ऑर्गनाइज़ करना शुरू कर देता है.
हमने अपना वर्कफ़्लो टिकट स्टेटस के आधार पर बनाया, जिसमें टास्क मैनेजर Linear को एक स्टेट मशीन की तरह इस्तेमाल किया गया.
प्रैक्टिस में, Symphony काम को सेशन्स और पुल रिक्वेस्ट्स से अलग कर देता है. कुछ इश्यूज़ अलग-अलग रिपोज़ में कई PRs बनाते हैं; जबकि कुछ सिर्फ इन्वेस्टिगेशन या एनालिसिस होते हैं जो कभी codebase को छूते भी नहीं हैं.
इस तरह काम को एब्स्ट्रैक्ट करने के बाद, टिकट्स बहुत बड़े यूनिट्स ऑफ वर्क को रिप्रेज़ेंट कर सकते हैं.
हम नियमित रूप से Symphony का इस्तेमाल जटिल फीचर्स और इंफ्रास्ट्रक्चर माइग्रेशन्स को ऑर्केस्ट्रेट करने के लिए करते हैं. उदाहरण के लिए, हम एक टास्क बना सकते हैं जिसमें एजेंट से कहा जाता है कि वह codebase, Slack, या Notion का एनालिसिस करे और एक इम्प्लीमेंटेशन प्लान तैयार करे. जब हम प्लान से संतुष्ट हो जाते हैं, तो एजेंट टास्क्स का एक ट्री बनाता है, काम को अलग-अलग स्टेज में तोड़ता है और टास्क्स के बीच डिपेंडेंसीज़ तय करता है.
एजेंट्स सिर्फ उन टास्क्स पर काम शुरू करते हैं जो ब्लॉक नहीं होते, इसलिए इस DAG (एक्ज़ीक्यूशन स्टेप्स की एक सीक्वेंस) के लिए काम नैचुरली और ऑप्टिमली पैरलल में आगे बढ़ता है. नीचे दिए उदाहरण में, हमने React अपग्रेड को Vite माइग्रेशन पर ब्लॉक किया था. जैसा उम्मीद था, एजेंट्स ने React को तभी अपग्रेड करना शुरू किया जब Vite माइग्रेशन पूरा हो गया.
एजेंट्स खुद भी नया काम क्रिएट कर सकते हैं. इम्प्लीमेंटेशन या रिव्यू के दौरान, वे अक्सर ऐसे इम्प्रूवमेंट्स नोटिस करते हैं जो मौजूदा टास्क के स्कोप से बाहर होते हैं: जैसे परफॉर्मेंस इश्यू, रिफैक्टरिंग का मौका, या बेहतर आर्किटेक्चर. जब ऐसा होता है, तो वे बस एक नया issue फाइल कर देते हैं जिसे हम बाद में इवैल्यूएट और शेड्यूल कर सकते हैं—इनमें से कई फॉलो-अप टास्क्स को एजेंट्स खुद ही पिक कर लेते हैं. जबकि हम इस प्रोसेस को ओवरसी करते हैं, एजेंट्स ऑर्गनाइज़्ड रहते हैं और काम को आगे बढ़ाते रहते हैं.
इस तरीके से काम करने पर अस्पष्ट काम शुरू करने की कॉग्निटिव लागत काफी कम हो जाती है. अगर एजेंट कुछ गलत भी करता है, तो वह भी उपयोगी जानकारी होती है, और हमारे लिए इसकी लागत लगभग शून्य होती है. हम बहुत आसानी से टिकट्स फाइल कर सकते हैं ताकि एजेंट प्रोटोटाइप बनाए और एक्सप्लोर करे, और जो एक्सप्लोरेशन हमें पसंद न आए, उसे हटा सकते हैं.
क्योंकि ऑर्केस्ट्रेटर devboxes पर चलता है और कभी नहीं सोता, हम कहीं से भी टास्क्स जोड़ सकते हैं और भरोसा कर सकते हैं कि कोई एजेंट उन्हें उठा लेगा. उदाहरण के लिए, हमारी टीम के एक इंजीनियर ने खराब wifi के साथ एक आरामदायक केबिन से अपने फोन पर Linear ऐप के जरिए तीन महत्वपूर्ण बदलाव किए.
इस तरीके से काम करने पर एक्सप्लोरेशन में बढ़ोतरी
Symphony के साथ काम करने के प्रभाव को देखते हुए, सबसे स्पष्ट बदलाव आउटपुट में था. OpenAI की कुछ टीमों में, पहले तीन हफ्तों में मर्ज हुए PRs की संख्या 6X बढ़ गई. OpenAI के बाहर, Linear के फाउंडर Karri Saarinen ने Symphony रिलीज़ के बाद बने हुए वर्कस्पेसेज़ में बढ़ोतरी(एक नई विंडो में खुलेगा) को हाइलाइट किया. लेकिन असली बदलाव इस बात में है कि टीमें काम के बारे में कैसे सोचती हैं.
जब हमारे इंजीनियर्स Codex सेशन्स को सुपरवाइज़ करने में समय नहीं लगाते, तो कोड बदलावों की इकोनॉमिक्स पूरी तरह बदल जाती है. हर बदलाव की महसूस होने वाली लागत कम हो जाती है, क्योंकि अब हम इम्प्लीमेंटेशन को आगे बढ़ाने में इंसानी मेहनत नहीं लगा रहे होते.
इससे हमारा व्यवहार बदल गया. अब Symphony में स्पेकुलेटिव टास्क्स शुरू करना बहुत आसान हो गया है. कोई आइडिया ट्राय करें, रिफैक्टर एक्सप्लोर करें, हाइपोथेसिस टेस्ट करें, और सिर्फ वही रिज़ल्ट्स रखें जो प्रॉमिसिंग लगते हैं.
यह इस बात को भी बढ़ाता है कि कौन काम शुरू कर सकता है. अब हमारे प्रोडक्ट मैनेजर और डिज़ाइनर सीधे Symphony में फीचर रिक्वेस्ट फाइल कर सकते हैं. उन्हें रिपॉ चेकआउट करने या Codex सेशन मैनेज करने की ज़रूरत नहीं है. वे फीचर का वर्णन करते हैं और बदले में एक रिव्यू पैकेट पाते हैं, जिसमें असली प्रोडक्ट में काम करते हुए फीचर का वीडियो वॉकथ्रू शामिल होता है.
Symphony बड़े monorepos (जैसे OpenAI में हमारा है) में भी शानदार काम करता है, जहाँ PR को लैंड कराने का आखिरी चरण धीमा और नाज़ुक होता है. यह सिस्टम CI को मॉनिटर करता है, ज़रूरत पड़ने पर रीबेस करता है, कॉन्फ्लिक्ट्स को रिज़ॉल्व करता है, फ्लेकी चेक्स को दोबारा ट्राय करता है, और कुल मिलाकर बदलावों को पाइपलाइन से आगे बढ़ाता है. जब कोई टिकट मर्जिंग तक पहुँचता है, तब हमें पूरा भरोसा होता है कि बदलाव बिना इंसानी निगरानी के मेन ब्रांच में चला जाएगा.
प्रगति के साथ नई और अलग समस्याएँ भी आती हैं
इस स्तर पर काम करने के साथ कुछ ट्रेड-ऑफ्स भी आते हैं. जब हमने एजेंट्स को इंटरैक्टिव तरीके से गाइड करने के बजाय उन्हें टिकट लेवल पर काम असाइन करना शुरू किया, तो हमने उन्हें बीच में लगातार नज देने और ज़रूरत पड़ने पर कोर्स-करेक्ट करने की क्षमता खो दी. कभी-कभी एजेंट ऐसा आउटपुट देता था जो पूरी तरह लक्ष्य से चूक जाता था. लेकिन यह भी उपयोगी था—इन फेल्यर्स ने सिस्टम की कमियाँ दिखाईं और इसे और मज़बूत बनाने में मदद की.
रिज़ल्ट को मैन्युअली पैच करने की बजाय, हमने गार्डरेल्स और स्किल्स जोड़ीं ताकि अगली बार एजेंट्स सफल हो सकें. समय के साथ, इससे हमने अपने हार्नेस में नई कैपेबिलिटीज़ जोड़ीं, जैसे एंड-टू-एंड टेस्ट्स चलाना, Chrome DevTools के जरिए ऐप को कंट्रोल करना, और QA स्मोक टेस्ट्स मैनेज करना. हमने अपनी डॉक्यूमेंटेशन को काफी बेहतर किया और यह साफ किया कि अच्छा आउटपुट कैसा दिखता है.
हर टास्क Symphony के काम करने के तरीके में फिट नहीं बैठता. कुछ समस्याएँ अभी भी ऐसी हैं जिनमें इंजीनियर्स को सीधे इंटरैक्टिव Codex सेशन्स के साथ काम करना पड़ता है, खासकर वे जो अस्पष्ट हों या जिनमें मजबूत जजमेंट और एक्सपर्टीज़ की ज़रूरत हो. व्यवहार में, यही काम हमारे इंजीनियर्स के लिए सबसे दिलचस्प और मज़ेदार होते हैं.
फर्क यह है कि Symphony रूटीन इम्प्लीमेंटेशन के ज़्यादातर काम को संभाल सकता है. इससे इंजीनियर्स को एक समय में एक कठिन समस्या पर फोकस करने का मौका मिलता है, बजाय इसके कि वे लगातार छोटे-छोटे टास्क्स के बीच कॉन्टेक्स्ट स्विच करें.
हमने यह भी सीखा कि एजेंट्स को स्टेट मशीन के कठोर नोड्स की तरह ट्रीट करना सही नहीं है. मॉडल्स लगातार स्मार्ट होते जा रहे हैं और उन सीमाओं से बड़े प्रॉब्लम सॉल्व कर सकते हैं जिनमें हम उन्हें फिट करने की कोशिश करते हैं. उदाहरण के लिए, शुरुआती वर्ज़न्स में सभी GitHub इंटीग्रेशन्स बाहरी हार्नेस का हिस्सा थे—यानी Codex से सिर्फ कोड चेंज कराने की उम्मीद थी, और बाकी प्रोसेस (चेंज सबमिट करना, टेस्ट्स चलाना) कोड में तय था. हमारे शुरुआती एजेंटिक सेटअप में Codex से सिर्फ टास्क इम्प्लीमेंट करने को कहा जाता था. यह तरीका बहुत सीमित साबित हुआ. Codex आसानी से कई PRs बना सकता है, रिव्यू फीडबैक पढ़ सकता है और उसे एड्रेस कर सकता है. इसलिए हमने उसे टूल्स दिए—gh CLI, CI लॉग्स पढ़ने की स्किल्स आदि—और अब हम Codex से और ज़्यादा काम करवा सकते हैं, जैसे पुराने PRs बंद करना या पूरे और छोड़े गए काम की रिपोर्ट निकालना. इस तरह के टास्क्स शुरुआती फीचर इम्प्लीमेंटेशन के दायरे से काफी बाहर थे.
इसलिए हमने अंत में एजेंट्स को सख्त ट्रांज़िशन्स देने के बजाय उन्हें objectives देना शुरू किया, ठीक वैसे जैसे एक अच्छा मैनेजर अपनी टीम के किसी सदस्य को लक्ष्य देता है. मॉडल्स की ताकत उनकी रीजनिंग क्षमता में होती है, इसलिए उन्हें टूल्स और कॉन्टेक्स्ट दें और उन्हें अपना काम करने दें.
Symphony का इस्तेमाल करके Symphony बनाना
जब आप Symphony रिपॉज़िटरी खोलते हैं, तो सबसे पहले यह दिखता है कि Symphony तकनीकी रूप से सिर्फ एक SPEC.md फ़ाइल है—जिसमें समस्या और उसके इच्छित समाधान की परिभाषा दी गई है. एक जटिल सुपरविजन सिस्टम बनाने के बजाय, हमने समस्या और उसके समाधान को परिभाषित किया, जिससे एजेंट्स को हाई-लेवल गाइडेंस मिलती है.
रेफरेंस इम्प्लीमेंटेशन Elixir में लिखा गया है—क्योंकि जब कोड लगभग फ्री हो जाता है, तब आप लैंग्वेज को उसकी स्ट्रेंथ्स के आधार पर चुन सकते हैं, जैसे Elixir की कॉन्करेंसी—लेकिन इसका कोर आइडिया एक सिंपल मार्कडाउन डॉक्यूमेंट में भी एक्सप्रेस किया जा सकता है. हम आपको प्रोत्साहित करते हैं कि आप अपने पसंदीदा कोडिंग एजेंट को इस स्पेक पर पॉइंट करें और उससे इसका अपना वर्ज़न इम्प्लीमेंट करवाएँ.
Symphony का पहला वर्ज़न बस एक Codex सेशन था जो tmux में चल रहा था, Linear को पोल कर रहा था और नए टास्क्स के लिए सब-एजेंट्स स्पॉन कर रहा था. यह काम करता था, लेकिन बहुत ज़्यादा भरोसेमंद नहीं था. दूसरा वर्ज़न हमारे मुख्य प्रोजेक्ट रिपॉज़िटरी के अंदर था, जिसे एजेंट्स को ध्यान में रखकर बनाया गया था. हमने पहले ही एजेंट हार्नेस बना लिया था ताकि एजेंट्स को इस रिपॉ में उच्च गुणवत्ता का काम करने के लिए स्किल्स और कॉन्टेक्स्ट मिल सके, इसलिए Symphony बस इन सबको जोड़ता है.
जब बेसिक फंक्शनैलिटी तैयार हो गई, तब हमने Symphony का इस्तेमाल करके Symphony को ही बनाया.
जब हमने इंटरनली इस सिस्टम का डेमो दिया—जो टास्क्स मैनेज कर रहा था और अपना प्रूफ-ऑफ-वर्क वीडियो अटैच कर रहा था—तो प्रतिक्रिया बेहद पॉज़िटिव थी: हमारा Symphony प्रोजेक्ट चैनल बढ़ा, और पूरी ऑर्गनाइज़ेशन में टीमें इसे ऑर्गेनिक तरीके से इस्तेमाल करने लगीं. OpenAI में किसी चीज़ को बाहर लॉन्च करने से पहले इंटरनल प्रोडक्ट-मार्केट फिट ज़रूरी होता है. OpenAI में इसके इस्तेमाल को देखकर साफ हो गया कि Symphony को कंपनी के बाहर भी शेयर करना चाहिए.
इसलिए हमने इस आइडिया को एक स्टैंडअलोन SPEC.md में निकाला और Codex से इसे इम्प्लीमेंट करने के लिए कहा. रेफरेंस इम्प्लीमेंटेशन के लिए हमने Elixir चुना, जो एक niche लैंग्वेज है और कॉन्करेंट प्रोसेसेस को ऑर्केस्ट्रेट और सुपरवाइज़ करने के लिए बेहतरीन प्रिमिटिव्स देती है. Codex ने Elixir इम्प्लीमेंटेशन एक ही बार में बना दिया, और उसके बाद हम स्पेक और इम्प्लीमेंटेशन दोनों पर इटरेट करते रहे. स्पेक को और बेहतर बनाने के लिए, हमने Codex से इसे कई दूसरी लैंग्वेजेज—TypeScript, Go, Rust, Java, Python—में भी इम्प्लीमेंट करवाया और उन रिज़ल्ट्स का इस्तेमाल करके एम्बिग्युटीज़ पहचानने और सिस्टम को सिंप्लिफाई करने में किया. यह हर लैंग्वेज में सफल रहा.
Codex को बनाते हुए हमने बहुत सी अतिरिक्त जटिलता हटा दी, जैसे किसी खास रिपॉज़िटरी या Linear MCP पर निर्भरता. अब Symphony हमारे इंटरनल रिपॉज़िटरी या वर्कफ़्लो पर निर्भर नहीं है. इसका कोर अप्रोच अब काफ़ी सरल हो गया है:
हर ओपन टास्क के लिए यह सुनिश्चित करें कि एक एजेंट अपने अलग वर्कस्पेस में चल रहा हो.
एक्टिव काम में मदद करने के अलावा, डेवलपमेंट वर्कफ़्लो अब ऐसी चीज़ बन गया है जिसे एजेंट्स जानते हैं और फॉलो करते हैं. डेवलपमेंट वर्कफ़्लो—जैसे किसी इश्यू पर काम करना, रिपो चेकआउट करना, उसे इन प्रोग्रेस में डालना ताकि PM को पता चले कि उस पर काम हो रहा है, PR जोड़ना, उसे रिव्यू स्टेटस में ले जाना, वीडियो अटैच करना आदि—अब एक सिंपल WORKFLOW.md फ़ाइल में कैप्चर किया गया है. यह पूरा प्रोसेस पहले इंसान फॉलो करते थे, लेकिन कभी डॉक्यूमेंट नहीं हुआ था. अब इस इम्प्लिसिट स्टेप्स पर निर्भर रहने के बजाय, हम इसे डॉक्यूमेंट करते हैं, और Symphony सुनिश्चित करता है कि एजेंट्स इसे फॉलो करें. इससे हम ऐसे एजेंट्स बना पाते हैं जो हमारे साथ मिलकर काम करते हैं. अगर हम तय करते हैं कि एजेंट्स को फिनिश्ड काम के साथ सेल्फ-रिफ्लेक्शन भी अटैच करना चाहिए, तो हम उसे WORKFLOW.md में जोड़ देंगे, और Symphony एजेंट्स को उस स्टेप तक गाइड करेगा.
हमें Codex को app server mode(एक नई विंडो में खुलेगा) में इस्तेमाल करने का मौका भी मिला, जो Codex का एक बिल्ट-इन हेडलेस मोड है. इस मोड की मदद से हम Codex को रन कर सकते थे और उससे प्रोग्रामेटिक तरीके से बात कर सकते थे, एक अच्छे से डॉक्यूमेंटेड JSON-RPC API के जरिए—जैसे थ्रेड शुरू करना या टर्न्स पर रिएक्ट करना. यह तरीका CLI या लाइव tmux सेशन्स के जरिए इंटरैक्ट करने से कहीं ज़्यादा सुविधाजनक और स्केलेबल है.
Codex App Server हमारे यूज़ केस के लिए बिल्कुल सही फिट था: हम Codex द्वारा दिए गए हार्नेस का फायदा उठाते हैं, साथ ही हमारे पास कनेक्ट करने के लिए knobs और hooks भी होते हैं. उदाहरण के लिए, Linear का एक्सेस टोकन सब-एजेंट्स को एक्सपोज़ न हो, इसके लिए हम डायनामिक टूल कॉल्स(एक नई विंडो में खुलेगा) का इस्तेमाल करते हैं, जिससे raw linear_graphql फ़ंक्शन एक्सपोज़ होता है जो Linear पर arbitrary रिक्वेस्ट्स चला सकता है—बिना MCP पर निर्भर हुए या एक्सेस टोकन को कंटेनर्स में एक्सपोज़ किए.
आगे क्या है
Symphony एक जानबूझकर मिनिमल ऑर्केस्ट्रेशन लेयर है. हम इसे ओपन सोर्स कर रहे हैं ताकि यह दिखाया जा सके कि Codex ऐप सर्वर कितना शक्तिशाली है जब इसे Linear जैसे अलग-अलग वर्कफ़्लो टूल्स के साथ इस्तेमाल किया जाए. इसलिए, हम Symphony को एक स्टैंडअलोन प्रोडक्ट के रूप में मेंटेन करने की योजना नहीं रखते. इसे एक रेफरेंस इम्प्लीमेंटेशन की तरह समझें. जैसे कई डेवलपर्स ने हार्नेस इंजीनियरिंग पोस्ट का इस्तेमाल करके अपने रिपॉज़िटरी सेटअप किए, वैसे ही हम उम्मीद करते हैं कि आप अपने पसंदीदा कोडिंग एजेंट को Symphony स्पेक(एक नई विंडो में खुलेगा) और रिपॉज़िटरी(एक नई विंडो में खुलेगा) पर पॉइंट करके अपने एनवायरनमेंट के हिसाब से अपने वर्ज़न बनाएँगे.
असली ताकत Codex और उसके ऐप सर्वर से आती है. Symphony एक तरीका था Codex और Linear को जोड़ने का—दो ऐसे टूल्स जिन्हें हम पहले से इस्तेमाल कर रहे थे—ताकि वर्क मैनेजमेंट की समस्या हल की जा सके. जैसे-जैसे कोडिंग एजेंट्स रीजनिंग और इंस्ट्रक्शन्स फॉलो करने में बेहतर होते जा रहे हैं, हमें लगता है कि दूसरी कंपनियों में बॉटलनेक कोड लिखने से हटकर एजेंटिक काम को मैनेज करने पर शिफ्ट हो जाएगा. सबसे रोमांचक बात यह है कि अब इन कोडिंग एजेंट सिस्टम्स के साथ एक्सपेरिमेंट करने की बाधा काफी कम हो गई है. आप सीधे Codex के साथ चीज़ें बना सकते हैं.
कम्युनिटी शाउटआउट्स
रिलीज़ के बाद के हफ्तों में इंजीनियरिंग कम्युनिटी को Symphony इस्तेमाल करते देखना हमारे लिए बेहद उत्साहजनक है, और 23 अप्रैल तक इसे 15K GitHub stars(एक नई विंडो में खुलेगा) मिल चुके हैं.