Codex آرکیسٹریشن کے لیے اوپن سورس اسپیک: Symphony
از Alex Kotliarskyi، Victor Zhu، اور Zach Brock
چھ ماہ قبل، جب ہم ایک اندرونی پیداواری ٹول پر کام کر رہے تھے، ہماری ٹیم نے ایک متنازعہ فیصلہ کیا: ہم اپنی ریپوزٹری کو بغیر کسی انسان کے لکھے گئے کوڈ کے بنائیں گے۔ ہمارے پروجیکٹ ریپوزٹری کی ہر لائن Codex کے ذریعے تیار کی جانی تھی۔
اسے ممکن بنانے کے لیے ہم نے اپنے انجینئرنگ ورک فلو کو بنیادی سطح سے دوبارہ ڈیزائن کیا۔ ہم نے ایک ایجنٹ کے لیے موزوں ریپوزٹری تیار کی، خودکار ٹیسٹس اور گارڈ ریلز میں بھرپور سرمایہ کاری کی، اور Codex کو ایک مکمل ٹیم ممبر کے طور پر لیا۔ ہم نے اس سفر کو اپنی پچھلی ہارنس انجینئرنگ پر بلاگ پوسٹ میں دستاویز بند کیا۔
اور یہ کام کر گیا، لیکن پھر ہمیں اگلی رکاوٹ کا سامنا ہوا: کانٹیکسٹ سوئچنگ۔
اس نئے مسئلے کو حل کرنے کے لیے، ہم نے Symphony نامی ایک سسٹم بنایا ہے۔ Symphony(نئی ونڈو میں کھلتا ہے) ایک ایجنٹ آرکیسٹریٹر ہے جو Linear جیسے پروجیکٹ مینجمنٹ بورڈ کو کوڈنگ ایجنٹس کے لیے کنٹرول پلین میں تبدیل کرتا ہے۔ ہر کھلے ٹاسک کے لیے ایک ایجنٹ مقرر ہوتا ہے، ایجنٹس مسلسل کام کرتے ہیں، اور انسان نتائج کا جائزہ لیتے ہیں۔
یہ پوسٹ بتاتی ہے کہ ہم نے Symphony کیسے تیار کیا—جس کے نتیجے میں کچھ ٹیموں میں مرج ہونے والی پل ریکویسٹس میں 500% اضافہ ہوا—اور یہ بھی کہ آپ اسے استعمال کر کے اپنے ایشو ٹریکر کو ایک ہمیشہ فعال ایجنٹ آرکیسٹریٹر میں کیسے تبدیل کر سکتے ہیں۔
انٹرایکٹو کوڈنگ ایجنٹس کی حد
اگرچہ ان کا استعمال آسان ہوتا جا رہا ہے، کوڈنگ ایجنٹس—چاہے وہ ویب ایپس کے ذریعے استعمال ہوں یا CLI کے ذریعے—اب بھی انٹرایکٹو ٹولز ہی ہیں۔
جیسے جیسے OpenAI میں ایجنٹک کام کا پیمانہ بڑھا، ہمیں ایک نئی قسم کا بوجھ محسوس ہوا۔ ہر انجینئر چند Codex سیشنز کھولتا، ٹاسکس اسائن کرتا، آؤٹ پٹ کا جائزہ لیتا، ایجنٹ کی رہنمائی کرتا، اور یہ عمل دہراتا۔ عملی طور پر زیادہ تر لوگ ایک وقت میں تین سے پانچ سیشنز کو آرام سے مینج کر سکتے تھے، اس کے بعد کانٹیکسٹ سوئچنگ مشکل ہو جاتی تھی۔ اس سے آگے پروڈکٹیوٹی کم ہونے لگتی تھی۔ ہم بھول جاتے تھے کہ کون سا سیشن کیا کر رہا ہے، ایجنٹس کو درست راستے پر لانے کے لیے مختلف ٹرمینلز کے درمیان آنا جانا کرتے، اور طویل چلنے والے ٹاسکس کو ڈی بگ کرتے جو درمیان میں رک جاتے تھے۔
ایجنٹس تیز تھے، لیکن ہمارے سسٹم میں ایک رکاوٹ تھی: انسانی توجہ۔ ہم نے دراصل نہایت قابل جونیئر انجینئرز کی ایک ٹیم بنا لی تھی، اور پھر اپنے انسانی انجینئرز کو ان کی باریک بینی سے نگرانی کرنے پر لگا دیا تھا۔ یہ طریقہ قابلِ توسیع نہیں تھا۔
نقطۂ نظر میں تبدیلی
ہمیں احساس ہوا کہ ہم غلط چیز کو بہتر بنانے کی کوشش کر رہے تھے۔ ہم اپنے سسٹم کو کوڈنگ سیشنز اور مرج ہونے والی PRs کے گرد ترتیب دے رہے تھے، حالانکہ PRs اور سیشنز دراصل ایک مقصد کے حصول کا ذریعہ ہیں۔ سافٹ ویئر ورک فلوز زیادہ تر ڈیلیور ایبلز کے گرد منظم ہوتے ہیں: ایشوز، ٹاسکس، ٹکٹس، مائل اسٹونز۔
لہٰذا ہم نے خود سے سوال کیا کہ کیا ہوگا اگر ہم ایجنٹس کی براہِ راست نگرانی کرنا چھوڑ دیں اور اس کے بجائے انہیں اپنے ٹاسک ٹریکر سے کام لینے دیں۔
یہی خیال Symphony بن گیا، ایک تحریری وضاحت جو ایجنٹک کام کو منظم کرنے کے لیے ایک نگران کے طور پر کام کرتی ہے۔
اپنے ایشو ٹریکر کو ایک ایجنٹ آرکیسٹریٹر میں تبدیل کرنا
Symphony کی شروعات ایک سادہ تصور سے ہوئی: ہر کھلا ٹاسک ایک ایجنٹ کے ذریعے اٹھایا جائے اور مکمل کیا جائے۔ متعدد ٹیبز میں Codex سیشنز کو منیج کرنے کے بجائے، ہم نے اپنے ایشو ٹریکر کو کنٹرول پلین بنا دیا۔
اس سیٹ اپ میں ہر اوپن Linear ایشو ایک مخصوص ایجنٹ ورک اسپیس سے منسلک ہوتا ہے۔ Symphony مسلسل ٹاسک بورڈ پر نظر رکھتا ہے اور یہ یقینی بناتا ہے کہ ہر ایکٹیو ٹاسک کے لیے ایک ایجنٹ اس وقت تک مسلسل کام کرتا رہے جب تک وہ مکمل نہ ہو جائے۔ اگر کوئی ایجنٹ کریش ہو جائے یا رک جائے تو Symphony اسے ری اسٹارٹ کر دیتا ہے۔ اگر نیا کام سامنے آتا ہے تو Symphony اسے اٹھاتا ہے اور کام کو منظم کرنا شروع کر دیتا ہے۔
ہم نے اپنا ورک فلو ٹکٹ اسٹیٹس کی بنیاد پر تیار کیا، اور ٹاسک مینیجر Linear کو ایک اسٹیٹ مشین کے طور پر استعمال کیا۔
عملی طور پر، Symphony کام کو سیشنز اور pull request سے الگ کر دیتا ہے۔ کچھ ایشوز مختلف ریپوز میں متعدد PRs پیدا کرتے ہیں، جبکہ کچھ صرف تحقیق یا تجزیے پر مبنی ہوتے ہیں اور کبھی بھی کوڈ بیس کو نہیں چھیڑتے۔
جب کام کو اس انداز میں مجرد بنایا جاتا ہے، تو ٹکٹس زیادہ بڑے نوعیت کے کام کی نمائندگی کر سکتے ہیں۔
ہم باقاعدگی سے Symphony کو پیچیدہ فیچرز اور انفراسٹرکچر مائیگریشنز کو منظم کرنے کے لیے استعمال کرتے ہیں۔ مثال کے طور پر، ہم ایک ٹاسک بنا سکتے ہیں جس میں ایجنٹ سے کہا جائے کہ وہ کوڈ بیس، Slack، یا Notion کا تجزیہ کرے اور ایک نفاذی منصوبہ تیار کرے۔ جب ہم اس منصوبے سے مطمئن ہو جاتے ہیں، تو ایجنٹ ٹاسکس کا ایک شجرہ تیار کرتا ہے، کام کو مراحل میں تقسیم کرتا ہے اور ٹاسکس کے درمیان انحصارات کی وضاحت کرتا ہے۔
ایجنٹس صرف اُن ٹاسکس پر کام شروع کرتے ہیں جو بلاک نہیں ہوتے، اس لیے اس DAG میں عمل درآمد قدرتی طور پر اور مؤثر انداز میں متوازی طور پر آگے بڑھتا ہے۔ نیچے دی گئی مثال میں، ہم نے React اپگریڈ کو Vite کی مائیگریشن پر منحصر قرار دیا تھا۔ توقع کے مطابق، ایجنٹس نے React کو اپگریڈ کرنا اسی وقت شروع کیا جب Vite کی مائیگریشن مکمل ہو گئی۔
ایجنٹس خود بھی کام تخلیق کر سکتے ہیں۔ نفاذ یا جائزے کے دوران، وہ اکثر ایسی بہتریوں کی نشاندہی کرتے ہیں جو موجودہ ٹاسک کے دائرے سے باہر ہوتی ہیں: کارکردگی کا مسئلہ، ریفیکٹرنگ کا موقع، یا بہتر آرکیٹیکچر۔ جب ایسا ہوتا ہے، تو وہ ایک نیا ایشو بنا دیتے ہیں جسے ہم بعد میں جانچ اور شیڈول کر سکتے ہیں—ان میں سے بہت سے فالو اپ ٹاسکس بھی ایجنٹس ہی اٹھا لیتے ہیں۔ جبکہ ہم اس عمل کی نگرانی کرتے ہیں، ایجنٹس منظم رہتے ہیں اور کام کو آگے بڑھاتے رہتے ہیں۔
اس طریقۂ کار سے غیر واضح کام شروع کرنے کی ذہنی لاگت نمایاں طور پر کم ہو جاتی ہے۔ اگر ایجنٹ کچھ غلط بھی کرے، تو وہ بھی مفید معلومات فراہم کرتا ہے، اور ہمارے لیے اس کی لاگت تقریباً صفر ہوتی ہے۔ ہم بہت کم خرچ پر ٹکٹس بنا سکتے ہیں تاکہ ایجنٹ تجربہ کرے اور دریافت کرے، اور جو تجربات ہمیں پسند نہ آئیں انہیں آسانی سے رد کر سکتے ہیں۔
چونکہ آرکیسٹریٹر devboxes پر چلتا ہے اور کبھی بند نہیں ہوتا، اس لیے ہم کہیں سے بھی ٹاسکس شامل کر سکتے ہیں اور یقین رکھ سکتے ہیں کہ کوئی ایجنٹ انہیں اٹھا لے گا۔ مثال کے طور پر، ہماری ٹیم کے ایک انجینئر نے ایک آرام دہ کیبن سے کمزور wifi کے باوجود اپنے فون پر Linear ایپ کے ذریعے تین اہم تبدیلیاں کیں۔
اس طریقے سے کام کرنے کے نتیجے میں تحقیق اور دریافت میں اضافہ
جب ہم نے Symphony کے اثرات کا مشاہدہ کیا تو سب سے نمایاں تبدیلی آؤٹ پٹ میں تھی۔ OpenAI کی کچھ ٹیموں میں پہلے تین ہفتوں کے دوران مرج ہونے والی PRs کی تعداد میں 6X اضافہ دیکھا گیا۔ OpenAI سے باہر، Linear کے بانی Karri Saarinen نے Symphony کے ریلیز کے ساتھ ورک اسپیسز کی تخلیق میں اضافے(نئی ونڈو میں کھلتا ہے) کو نمایاں کیا۔ تاہم، اس سے بھی گہری تبدیلی یہ ہے کہ ٹیمیں کام کے بارے میں کیسے سوچتی ہیں۔
جب ہمارے انجینئرز Codex سیشنز کی نگرانی میں وقت صرف نہیں کرتے، تو کوڈ میں تبدیلیوں کی معاشیات مکمل طور پر بدل جاتی ہے۔ ہر تبدیلی کی محسوس ہونے والی لاگت کم ہو جاتی ہے کیونکہ ہم اب خود نفاذ کے عمل میں انسانی محنت شامل نہیں کر رہے ہوتے۔
اس نے ہمارے رویے کو بدل دیا۔ اب Symphony میں تجرباتی ٹاسکس شروع کرنا بہت آسان ہو گیا ہے۔ کوئی آئیڈیا آزمائیں، کسی ریفیکٹرنگ کو ایکسپلور کریں، کوئی مفروضہ ٹیسٹ کریں، اور صرف وہ نتائج رکھیں جو امید افزا لگیں۔
اس نے یہ بھی ممکن بنایا کہ اب کام شروع کرنے کی صلاحیت مزید لوگوں تک پھیل گئی ہے۔ ہمارے پروڈکٹ مینیجر اور ڈیزائنر اب براہِ راست Symphony میں فیچر ریکویسٹس درج کر سکتے ہیں۔ انہیں ریپوزٹری چیک آؤٹ کرنے یا Codex سیشن منیج کرنے کی ضرورت نہیں ہوتی۔ وہ فیچر کی وضاحت کرتے ہیں اور بدلے میں انہیں ایک ریویو پیکج ملتا ہے جس میں اصل پروڈکٹ کے اندر فیچر کے کام کرنے کی ویڈیو واک تھرو شامل ہوتا ہے۔
Symphony بڑے مونوریپوز میں بھی بہترین کارکردگی دکھاتا ہے، جیسے کہ OpenAI میں ہمارا ریپو، جہاں PR کو مرج کرنے کا آخری مرحلہ سست اور نازک ہوتا ہے۔ یہ سسٹم CI پر نظر رکھتا ہے، ضرورت پڑنے پر ری بیس کرتا ہے، تنازعات کو حل کرتا ہے، غیر مستحکم چیکس کو دوبارہ چلاتا ہے، اور عمومی طور پر تبدیلیوں کو پائپ لائن کے ذریعے آگے بڑھاتا ہے۔ جب تک کوئی ٹکٹ مرج کرنے کے مرحلے تک پہنچتا ہے، ہمیں پورا اعتماد ہوتا ہے کہ یہ تبدیلی انسانی نگرانی کے بغیر مین برانچ میں شامل ہو جائے گی۔
Symphony نافذ کرنے کے بعد، ہم زیادہ کام ایجنٹس کو سونپتے ہیں اور زیادہ مشکل اور جستجو پر مبنی کاموں پر توجہ دیتے ہیں۔
ترقی کے ساتھ نئے اور مختلف مسائل بھی سامنے آتے ہیں
اس سطح پر کام کرنے کے ساتھ کچھ سمجھوتے بھی آتے ہیں۔ جب ہم نے ایجنٹس کو انٹرایکٹو طور پر گائیڈ کرنے کے بجائے انہیں ٹکٹ کی سطح پر کام سونپنا شروع کیا، تو ہم نے دورانِ عمل مسلسل رہنمائی کرنے اور ضرورت پڑنے پر راستہ درست کرنے کی صلاحیت کھو دی۔ بعض اوقات ایجنٹ نے ایسا نتیجہ پیش کیا جو مکمل طور پر ہدف سے ہٹا ہوا تھا۔ یہ بھی مفید ثابت ہوا—ایسی ناکامیاں سسٹم میں موجود خلا کو ظاہر کرتی تھیں اور ہمیں اسے مزید مضبوط بنانے میں مدد دیتی تھیں۔
نتائج کو مینوئل طور پر درست کرنے کے بجائے، ہم نے گارڈ ریلز اور مہارتیں شامل کیں تاکہ ایجنٹس اگلی بار کامیاب ہو سکیں۔ وقت کے ساتھ ساتھ وہ ہمیں اپنے ہارنس میں نئی صلاحیتیں شامل کرنے کی طرف لے گیا، جیسے اینڈ ٹو اینڈ ٹیسٹس چلانا، Chrome DevTools کے ذریعے ایپ کو چلانا، اور QA اسموک ٹیسٹس کا انتظام کرنا۔ ہم نے اپنی دستاویزات میں نمایاں بہتری کی اور واضح کیا کہ ایک اچھا نتیجہ کیسا ہونا چاہیے۔
ہر ٹاسک Symphony کے اندازِ کار کے مطابق نہیں ہوتا ہے۔ کچھ مسائل اب بھی ایسے ہوتے ہیں جن کے لیے انجینئرز کو براہِ راست انٹرایکٹو Codex سیشنز کے ساتھ کام کرنا پڑتا ہے، خاص طور پر مبہم مسائل یا وہ کام جن میں مضبوط فیصلہ سازی اور مہارت درکار ہو۔ عملی طور پر یہی وہ ٹاسکس ہوتے ہیں جو ہمارے انجینئرز کے لیے سب سے زیادہ دلچسپ اور لطف اندوز ہونے کے قابل ہوتے ہیں۔
فرق یہ ہے کہ Symphony معمول کے نفاذی کام کا بڑے حصے کو ہینڈل کر سکتا ہے۔ اس سے انجینئرز کو یہ موقع ملتا ہے کہ وہ ایک وقت میں ایک مشکل مسئلے پر توجہ دیں، بجائے اس کے کہ وہ مسلسل چھوٹے ٹاسکس کے درمیان کانٹیکسٹ سوئچنگ کرتے رہیں۔
ہم نے یہ بھی سیکھا کہ ایجنٹس کو اسٹیٹ مشین میں سخت اور محدود نوڈز کے طور پر دیکھنا مؤثر نہیں ہوتا۔ ماڈلز زیادہ ذہین ہوتے جا رہے ہیں اور اس دائرے سے کہیں بڑے مسائل حل کر سکتے ہیں جس میں ہم انہیں محدود کرنے کی کوشش کرتے ہیں۔ مثال کے طور پر، ابتدائی ورژنز میں تمام GitHub انٹیگریشنز بیرونی ہارنس کا حصہ تھیں—یعنی Codex سے صرف کوڈ میں تبدیلیاں کرنے کی توقع کی جاتی تھی، جبکہ باقی عمل جیسے تبدیلیاں جمع کروانا اور ٹیسٹس چلانا کوڈ میں متعین کیا جاتا تھا۔ ابتدائی مرحلے میں ہم صرف Codex سے ٹاسک کو نافذ کرنے کو کہتے تھے، لیکن یہ طریقہ بہت محدود ثابت ہوا۔ Codex متعدد PRs بنانے، ریویو فیڈبیک پڑھنے اور اسے حل کرنے کی مکمل صلاحیت رکھتا ہے۔ چنانچہ ہم نے اسے ٹولز فراہم کیے—gh CLI، CI لاگز پڑھنے کی مہارتیں وغیرہ—اور اب ہم Codex سے مزید کام بھی لے سکتے ہیں، جیسے پرانے PRs بند کرنا یا مکمل اور ادھورے کام کی رپورٹس نکالنا۔ اس طرح کے کام ابتدائی فیچر نفاذ کے دائرے سے کہیں باہر تھے۔
لہٰذا ہم نے بالآخر ایجنٹس کو سخت مراحل کے بجائے مقاصد دینا شروع کیے، بالکل ویسے ہی جیسے ایک اچھا مینیجر اپنی ٹیم کے رکن کو کوئی ہدف سونپتا ہے۔ ماڈلز کی اصل طاقت ان کی استدلال کی صلاحیت میں ہوتی ہے، اس لیے انہیں ٹولز اور سیاق و سباق فراہم کریں اور انہیں کام کرنے دیں۔
Symphony بنانے کے لیے Symphony کا استعمال
جب آپ Symphony کی ریپوزٹری کھولتے ہیں تو سب سے پہلے آپ یہ دیکھتے ہیں کہ Symphony دراصل صرف ایک SPEC.md فائل ہے—مسئلے اور مطلوبہ حل کی ایک وضاحت۔ ایک پیچیدہ نگرانی کا سسٹم بنانے کے بجائے، ہم نے مسئلے اور مطلوبہ حل کی تعریف کی، اور ایجنٹس کو اعلیٰ سطح کی رہنمائی فراہم کی۔
حوالہ جاتی نفاذ Elixir میں لکھا گیا ہے—کیونکہ جب کوڈ مؤثر طور پر مفت ہو، تو آپ آخرکار زبانوں کا انتخاب ان کی خوبیوں کی بنیاد پر کر سکتے ہیں، جیسے Elixir کی بیک وقت عمل کاری—لیکن بنیادی خیال ایک سادہ Markdown دستاویز میں بیان کیا جا سکتا ہے۔ ہم آپ کو ترغیب دیتے ہیں کہ آپ اپنے پسندیدہ کوڈنگ ایجنٹ کو spec کی طرف متوجہ کریں اور اس سے اس کا اپنا ورژن نافذ کروائیں۔
Symphony کا پہلا ورژن بس tmux میں چلتا ہوا ایک Codex سیشن تھا جو Linear کو poll کر رہا تھا اور نئے کاموں کے لیے سب-ایجنٹس شروع کر رہا تھا۔ یہ کام کرتا تھا، لیکن خاص طور پر قابلِ اعتماد نہیں تھا۔ دوسرا ورژن ہمارے مرکزی پروجیکٹ ریپوزٹری کے اندر موجود تھا، جسے ایجنٹس کو مدنظر رکھ کر بنایا گیا تھا۔ ہم پہلے ہی اس ریپو میں ایجنٹس کو اعلیٰ معیار کا کام کرنے کے لیے مہارتیں اور سیاق و سباق فراہم کرنے والا ایجنٹ ہارنس تیار کر چکے تھے، لہٰذا Symphony بس ان سب کو آپس میں جوڑ دیتا ہے۔
جب بنیادی فنکشنلٹی موجود ہو گئی، تو ہم نے Symphony کو بنانے کے لیے Symphony کا ہی استعمال کیا۔
جب ہم نے اندرونی طور پر اس سسٹم کا ڈیمو پیش کیا، جو ٹاسکس کو منیج کر رہا تھا اور اپنی پاور آف ورک ویڈیو منسلک کر رہا تھا، تو ردِعمل بے حد مثبت تھا: ہمارے Symphony پروجیکٹ چینل میں اضافہ ہوا، اور ادارے بھر کی ٹیموں نے اسے فطری طور پر استعمال کرنا شروع کر دیا۔ OpenAI میں بیرونی لانچ سے پہلے اندرونی پروڈکٹ-مارکیٹ فٹ ایک لازمی شرط ہے۔ OpenAI میں نظر آنے والے استعمال کی بنیاد پر یہ واضح ہو گیا کہ ہمیں Symphony کو کمپنی کی حدود سے باہر بھی شیئر کرنا چاہیے۔
لہٰذا ہم نے اس خیال کو ایک علیحدہ SPEC.md میں منتقل کیا اور Codex سے اسے نافذ کرنے کو کہا۔ حوالہ جاتی نفاذ کے لیے ہم نے Elixir کا انتخاب کیا، جو نسبتاً کم معروف زبان ہے لیکن بیک وقت عمل کرنے والے پروسیسز کی ترتیب اور نگرانی کے لیے بہترین بنیادی سہولیات فراہم کرتی ہے۔Codex نے Elixir میں اس کا نفاذ ون-شاٹ میں تیار کر دیا، اور ہم نے اس کے بعد وضاحت اور نفاذ دونوں پر مسلسل بہتری کا عمل جاری رکھا۔ وضاحت کو بہتر بنانے کے لیے ہم نے 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 App Server ہمارے استعمال کے لیے بہترین ثابت ہوا: ہم Codex کے فراہم کردہ ہارنس سے فائدہ اٹھاتے ہیں جبکہ اسے اپنی ضرورت کے مطابق جوڑنے کے لیے کنٹرولز اور ہکس بھی حاصل ہوتے ہیں۔ مثال کے طور پر، Linear کا ایکسیس ٹوکن سب ایجنٹس کے سامنے ظاہر ہونے سے بچانے کے لیے ہم ڈائنامک ٹول کالز(نئی ونڈو میں کھلتا ہے) استعمال کرتے ہیں، جس کے ذریعے ہم linear_graphql فنکشن کو ظاہر کرتے ہیں جو Linear پر براہِ راست درخواستوں کو چلانے کی اجازت دیتا ہے، بغیر MCP پر انحصار کیے یا ایکسیس ٹوکن کو کنٹینرز کے سامنے ظاہر کیے۔
آگے کیا ہے
Symphony ایک دانستہ طور پر سادہ آرکیسٹریشن لیئر ہے۔ ہم اسے اوپن سورس کر رہے ہیں تاکہ یہ دکھایا جا سکے کہ Codex App Server مختلف ورک فلو ٹولز، جیسے Linear، کے ساتھ مل کر کتنی طاقت فراہم کرتا ہے۔ اسی لیے ہم Symphony کو ایک الگ پروڈکٹ کے طور پر برقرار رکھنے کا ارادہ نہیں رکھتے۔ اسے ایک حوالہ جاتی نفاذ کے طور پر دیکھیں۔ جس طرح بہت سے ڈویلپرز نے ہارنس انجینئرنگ والی پوسٹ کو بنیاد بنا کر اپنی ریپوزٹریز تیار کیں، ہم امید کرتے ہیں کہ آپ بھی اپنے پسندیدہ کوڈنگ ایجنٹ کو Symphony کی وضاحت(نئی ونڈو میں کھلتا ہے) اور ریپوزٹری(نئی ونڈو میں کھلتا ہے) کی طرف رہنمائی کریں گے تاکہ آپ اپنے ماحول کے مطابق اپنی ورژنز تیار کر سکیں۔
اصل طاقت Codex اور اس کے ایپ سرور سے آتی ہے۔ Symphony دراصل Codex اور Linear، دو ایسے ٹولز جنہیں ہم پہلے ہی استعمال کر رہے تھے، کو آپس میں جوڑنے کا ایک طریقہ تھا تاکہ کام کے سسٹم و نسق کے مسئلے کو حل کیا جا سکے۔ جیسے جیسے کوڈنگ ایجنٹس استدلال کرنے اور ہدایات پر عمل کرنے میں بہتر ہوتے جا رہے ہیں، ہمیں اندازہ ہے کہ دیگر کمپنیوں میں رکاوٹ کوڈ لکھنے سے ہٹ کر ایجنٹک کام کے نظم و نسق کی طرف منتقل ہو جائے گی۔ دلچسپ بات یہ ہے کہ اب ان کوڈنگ ایجنٹ سسٹمز کے ساتھ تجربہ کرنے کی رکاوٹ حیرت انگیز طور پر کم ہو گئی ہے۔ آپ بس Codex کے ساتھ چیزیں بنانا شروع کر سکتے ہیں۔
کمیونٹی کی جانب سے ستائش
ریلیز کے بعد سے گزشتہ ہفتوں میں انجینئرنگ کمیونٹی کو Symphony استعمال کرتے دیکھ کر ہمیں بہت خوشی ہوئی ہے، اور 23 اپریل تک اسے GitHub پر 15 ہزار سے زائد اسٹارز(نئی ونڈو میں کھلتا ہے) مل چکے ہیں۔