Codex ఆర్కెస్ట్రేషన్ కోసం ఓపెన్-సోర్స్ స్పెక్: Symphony
రచయితలు: అలెక్స్ కొట్లియార్స్కీ, విక్టర్ ఝూ, జాక్ బ్రాక్
ఆరు నెలల క్రితం, ఒక ఇంటర్నల్ ప్రొడక్టివిటీ టూల్పై పని చేస్తూ, మా టీమ్ అప్పట్లో కొంత వివాదాస్పదంగా కనిపించిన ఒక నిర్ణయం తీసుకుంది: మా రిపోలో మనుషులు రాసిన కోడ్ లేకుండా నిర్మించాలి. మా ప్రాజెక్ట్ రిపాజిటరీలోని ప్రతి లైన్ Codex ద్వారా జనరేట్ చేయబడాలి.
దాన్ని సాధ్యమయ్యేలా చేయడానికి, మేము మా ఇంజినీరింగ్ వర్క్ఫ్లోను పూర్తిగా కొత్తగా రూపొందించాము. ఏజెంట్కు అనుకూలమైన రిపాజిటరీని నిర్మించాము, ఆటోమేటెడ్ టెస్టులు మరియు గార్డ్రైల్స్లో గణనీయంగా పెట్టుబడి పెట్టాము, మరియు Codexను పూర్తి స్థాయి టీమ్మేట్లా పరిగణించాము. ఆ ప్రయాణాన్ని మా గత హార్నెస్ ఇంజినీరింగ్పై బ్లాగ్ పోస్ట్లో డాక్యుమెంట్ చేశాము.
ఇది పని చేసింది, కానీ తర్వాత మేము ఎదుర్కొన్న తదుపరి బాటిల్నెక్: కాంటెక్స్ట్ స్విచింగ్.
ఈ కొత్త సమస్యను పరిష్కరించడానికి, మేము Symphony అనే సిస్టమ్ను నిర్మించాము. Symphony(కొత్త విండోలో తెరుచుకుంటుంది) అనేది ఒక ఏజెంట్ ఆర్కెస్ట్రేటర్, ఇది Linear వంటి ప్రాజెక్ట్-మేనేజ్మెంట్ బోర్డ్ను కోడింగ్ ఏజెంట్ల కోసం కంట్రోల్ ప్లేన్గా మార్చుతుంది. ప్రతి ఓపెన్ టాస్క్కి ఒక ఏజెంట్ ఉంటుంది, ఏజెంట్లు నిరంతరం నడుస్తూ ఉంటాయి, మరియు మనుషులు ఫలితాలను సమీక్షిస్తారు.
ఈ పోస్ట్లో మేము Symphonyను ఎలా రూపొందించామో—దాని వల్ల కొన్ని టీమ్స్లో మెర్జ్ అయిన పుల్ రిక్వెస్ట్స్ సంఖ్య 500% పెరిగింది—మరియు మీ స్వంత ఇష్యూ ట్రాకర్ను ఎప్పుడూ యాక్టివ్గా ఉండే ఏజెంట్ ఆర్కెస్ట్రేటర్గా ఎలా మార్చుకోవాలో వివరిస్తుంది.
ఇంటరాక్టివ్ కోడింగ్ ఏజెంట్ల పరిమితి
వాటిని ఉపయోగించడం సులభమవుతున్నప్పటికీ, వెబ్ యాప్స్ లేదా CLI ద్వారా యాక్సెస్ చేసే కోడింగ్ ఏజెంట్లు ఇంకా ఇంటరాక్టివ్ టూల్స్గానే ఉంటాయి.
OpenAIలో ఏజెంటిక్ పనుల పరిమాణం పెరిగిన కొద్దీ, మేము ఒక కొత్త రకం భారం గుర్తించాము. ప్రతి ఇంజనీర్ కొన్ని Codex సెషన్లను ఓపెన్ చేసి, టాస్క్లను అసైన్ చేసి, అవుట్పుట్ను రివ్యూ చేసి, ఏజెంట్ను గైడ్ చేసి, మళ్లీ అదే ప్రక్రియను కొనసాగించేవారు. ప్రాక్టీస్లో, కాంటెక్స్ట్ స్విచింగ్ కష్టం అయ్యే ముందు, ఎక్కువ మంది ఒకేసారి మూడు నుంచి ఐదు సెషన్లను మాత్రమే సౌకర్యంగా నిర్వహించగలిగారు. దాని తర్వాత ప్రొడక్టివిటీ తగ్గింది. ఏ సెషన్ ఏ పని చేస్తుందో మర్చిపోవడం, ఏజెంట్లను ట్రాక్లోకి తీసుకురావడానికి టెర్మినల్స్ మధ్య మారడం, మధ్యలో ఆగిపోయిన లాంగ్-రన్నింగ్ టాస్క్లను డీబగ్ చేయడం వంటి సమస్యలు ఎదురయ్యాయి.
ఏజెంట్లు వేగంగా పని చేస్తున్నా, మాకు ఒక సిస్టమ్ బాటిల్నెక్ ఉంది: మనుషుల దృష్టి. మేము అసలు చాలా సామర్థ్యం ఉన్న జూనియర్ ఇంజినీర్ల టీమ్ను నిర్మించినట్లే అయ్యింది, కానీ వారికి మనుషుల ఇంజినీర్లను మైక్రోమ్యానేజ్ చేయమని పెట్టాము. ఇది స్కేల్ కావడం కష్టమే.
దృష్టికోణంలో మార్పు
మేము తప్పు విషయాన్ని ఆప్టిమైజ్ చేస్తున్నామని గ్రహించాము. మేము మా సిస్టమ్ను కోడింగ్ సెషన్లు మరియు మెర్జ్ అయిన PRs చుట్టూ రూపొందించాము, కానీ PRs మరియు సెషన్లు అసలు ఒక లక్ష్యాన్ని చేరుకునే మార్గం మాత్రమే. సాఫ్ట్వేర్ వర్క్ఫ్లోలు ప్రధానంగా డెలివరబుల్స్ చుట్టూ నిర్వహించబడతాయి: ఇష్యూలు, టాస్క్లు, టికెట్లు, మైల్స్టోన్స్.
అందుకే మేము ఒక ప్రశ్న వేసుకున్నాము: ఏజెంట్లను నేరుగా పర్యవేక్షించడం ఆపి, వాటిని మా టాస్క్ ట్రాకర్ నుంచి పని తీసుకునేలా చేస్తే ఏమవుతుంది.
ఆ ఆలోచనే Symphonyగా మారింది, ఇది ఏజెంటిక్ పనిని ఆర్కెస్ట్రేట్ చేయడానికి సూపర్వైజర్లా పనిచేసే ఒక రాసిన స్పెక్.
మా ఇష్యూ ట్రాకర్ను ఏజెంట్ ఆర్కెస్ట్రేటర్గా మార్చడం
Symphony ఒక సింపుల్ కాన్సెప్ట్తో ప్రారంభమైంది: ఏ ఓపెన్ టాస్క్ అయినా ఒక ఏజెంట్ తీసుకుని పూర్తి చేయాలి. అనేక ట్యాబ్లలో Codex సెషన్లను మేనేజ్ చేయడం బదులుగా, మా ఇష్యూ ట్రాకర్ను కంట్రోల్ ప్లేన్గా మార్చాము.
ఈ సెటప్లో, ప్రతి ఓపెన్ Linear ఇష్యూ ఒక ప్రత్యేక ఏజెంట్ వర్క్స్పేస్కి మ్యాప్ అవుతుంది. Symphony నిరంతరం టాస్క్ బోర్డ్ను గమనిస్తూ, ప్రతి యాక్టివ్ టాస్క్ పూర్తయ్యే వరకు లూప్లో ఒక ఏజెంట్ నడుస్తున్నట్టు చూసుకుంటుంది. ఏజెంట్ క్రాష్ అయినా లేదా ఆగిపోయినా, Symphony దాన్ని మళ్లీ రీస్టార్ట్ చేస్తుంది. కొత్త పని కనిపిస్తే, Symphony దాన్ని పికప్ చేసి పని నిర్వహణను ప్రారంభిస్తుంది.
మేము మా వర్క్ఫ్లోను టికెట్ స్టేటస్ల ఆధారంగా రూపొందించాము, టాస్క్ మేనేజర్ Linearను ఒక స్టేట్ మెషిన్లా ఉపయోగిస్తూ.
ప్రాక్టీస్లో, Symphony పని మరియు సెషన్లను, అలాగే పుల్ రిక్వెస్ట్స్ను వేరుచేస్తుంది. కొన్ని ఇష్యూలు వివిధ రిపోలలో అనేక PRsను సృష్టిస్తాయి; మరికొన్ని పూర్తిగా ఇన్వెస్టిగేషన్ లేదా అనాలిసిస్ మాత్రమే, అవి కోడ్బేస్ను అసలు తాకవు.
ఈ విధంగా పనిని అబ్స్ట్రాక్ట్ చేసిన తర్వాత, టికెట్లు చాలా పెద్ద పనుల యూనిట్లను ప్రతినిధ్యం వహించగలవు.
మేము తరచుగా క్లిష్టమైన ఫీచర్లు మరియు ఇన్ఫ్రాస్ట్రక్చర్ మైగ్రేషన్స్ను ఆర్కెస్ట్రేట్ చేయడానికి Symphonyను ఉపయోగిస్తాము. ఉదాహరణకు, కోడ్బేస్, Slack లేదా Notionను విశ్లేషించి ఒక ఇంప్లిమెంటేషన్ ప్లాన్ తయారు చేయమని ఏజెంట్కు టాస్క్ ఇస్తాము. ప్లాన్పై మేము సంతృప్తి చెందిన తర్వాత, ఏజెంట్ టాస్క్ల ట్రీను రూపొందించి, పనిని దశలుగా విభజించి, టాస్క్ల మధ్య డిపెండెన్సీలను నిర్వచిస్తుంది.
ఏజెంట్లు బ్లాక్ కాలేని టాస్క్లపై మాత్రమే పని ప్రారంభిస్తాయి, కాబట్టి ఈ DAG (ఎగ్జిక్యూషన్ స్టెప్స్ సీక్వెన్స్)లో పనులు సహజంగా మరియు ఆప్టిమల్గా ప్యారలల్గా కొనసాగుతాయి. కింద ఇచ్చిన ఉదాహరణలో, React అప్గ్రేడ్ను Vite మైగ్రేషన్ పూర్తయ్యే వరకు బ్లాక్గా మార్క్ చేసాము. ఆశించినట్లుగానే, Vite మైగ్రేషన్ పూర్తయ్యాకే ఏజెంట్లు React అప్గ్రేడ్ను ప్రారంభించాయి. ఏజెంట్లు తమంతట తామే కొత్త పనిని కూడా సృష్టించగలవు. ఇంప్లిమెంటేషన్ లేదా రివ్యూ సమయంలో, ప్రస్తుత టాస్క్ స్కోప్కు బయట ఉన్న మెరుగుదలలను తరచుగా గుర్తిస్తాయి: ఒక పనితీరు సమస్య, రీఫ్యాక్టరింగ్ అవకాశం, లేదా మెరుగైన ఆర్కిటెక్చర్. అప్పుడు, అవి సింపుల్గా ఒక కొత్త ఇష్యూ ఫైల్ చేస్తాయి, దాన్ని మేము తర్వాత ఈవాల్యుయేట్ చేసి షెడ్యూల్ చేయవచ్చు—ఈ ఫాలో-అప్ టాస్క్లలో చాలావరకు మళ్లీ ఏజెంట్లే తీసుకుంటాయి. ఈ ప్రక్రియను మేము పర్యవేక్షిస్తున్నప్పటికీ, ఏజెంట్లు సక్రమంగా ఆర్గనైజ్ అయి పనిని ముందుకు తీసుకెళ్తూనే ఉంటాయి.
ఈ విధంగా పని చేయడం వల్ల స్పష్టంగా నిర్వచించని పనిని ప్రారంభించే సమయంలో ఉండే మానసిక భారం గణనీయంగా తగ్గుతుంది. ఏజెంట్ ఏదైనా తప్పు చేసినా, అది కూడా ఉపయోగకరమైన సమాచారమే, మరియు మనకు ఖర్చు దాదాపు శూన్యం. ఏజెంట్ ప్రోటోటైప్ చేయడానికి, ఎక్స్ప్లోర్ చేయడానికి మేము చాలా తక్కువ ఖర్చుతో టికెట్లు సృష్టించవచ్చు, మరియు నచ్చని ఫలితాలను సులభంగా వదిలేయవచ్చు.
ఆర్కెస్ట్రేటర్ devboxesపై నడుస్తూ ఎప్పుడూ ఆగకుండా ఉండటం వల్ల, మేము ఎక్కడినుంచైనా టాస్క్లను జోడించవచ్చు మరియు ఒక ఏజెంట్ దాన్ని తీసుకుంటుందని నమ్మవచ్చు. ఉదాహరణకు, మా టీమ్లో ఒక ఇంజనీర్ బలహీనమైన wifi ఉన్న ఒక ప్రశాంతమైన కేబిన్లో తన ఫోన్లోని Linear యాప్ ద్వారా మూడు ముఖ్యమైన మార్పులు చేశాడు.
ఈ విధంగా పని చేయడం వల్ల అన్వేషణ పెరుగుదల
Symphonyతో పని చేసిన ప్రభావాలను పరిశీలించినప్పుడు, అత్యంత స్పష్టమైన మార్పు అవుట్పుట్లో కనిపించింది. OpenAIలోని కొన్ని టీమ్స్లో, మొదటి మూడు వారాల్లోనే మెర్జ్ అయిన PRs సంఖ్య 6 రెట్లు పెరిగింది. OpenAI బయట, Linear స్థాపకుడు Karri Saarinen, Symphony విడుదల సమయంలో సృష్టించిన వర్క్స్పేస్ల పెరుగుదల(కొత్త విండోలో తెరుచుకుంటుంది) ను హైలైట్ చేశారు. అయితే, అసలు లోతైన మార్పు టీమ్స్ పని గురించి ఆలోచించే విధానంలో ఉంది.
మా ఇంజినీర్లు ఇకపై Codex సెషన్లను పర్యవేక్షించడానికి సమయం ఖర్చు చేయకపోయినప్పుడు, కోడ్ మార్పుల ఆర్థికత పూర్తిగా మారుతుంది. ప్రతి మార్పు యొక్క అనుభూతి ఖర్చు తగ్గుతుంది, ఎందుకంటే మేము ఇకపై అమలు ప్రక్రియను నడిపించడానికి మనుషుల శ్రమను పెట్టడం లేదు.
దాంతో మా ప్రవర్తన మారింది. Symphonyలో ఊహాత్మక టాస్క్లను ప్రారంభించడం చాలా సులభమైంది. ఒక ఐడియాను ప్రయత్నించండి, రీఫ్యాక్టర్ను అన్వేషించండి, ఒక హైపోథిసిస్ను పరీక్షించండి, మరియు ఆశాజనకంగా కనిపించే ఫలితాలను మాత్రమే ఉంచండి.
ఇది పని ప్రారంభించగలవారి పరిధిని కూడా విస్తరించింది. ఇప్పుడు మా ప్రొడక్ట్ మేనేజర్ మరియు డిజైనర్ నేరుగా Symphonyలో ఫీచర్ రిక్వెస్ట్లను సృష్టించగలరు. వారికి రిపోను చెక్ అవుట్ చేయడం లేదా Codex సెషన్ను మేనేజ్ చేయడం అవసరం లేదు. వారు ఫీచర్ను వివరిస్తే, నిజమైన ప్రొడక్ట్లో అది ఎలా పని చేస్తుందో చూపించే వీడియోతో కూడిన రివ్యూ ప్యాకెట్ను పొందుతారు.
Symphony పెద్ద మోనోరిపోలలో కూడా (OpenAIలో మాదిరిగా) బాగా పని చేస్తుంది, అక్కడ PRను మెర్జ్ చేసే చివరి దశ నెమ్మదిగా మరియు సున్నితంగా ఉంటుంది. ఈ సిస్టమ్ CIను గమనిస్తూ, అవసరమైనప్పుడు రీబేస్ చేస్తుంది, కాన్ఫ్లిక్ట్లను పరిష్కరిస్తుంది, ఫ్లేకీ చెక్లను మళ్లీ ప్రయత్నిస్తుంది, మరియు మొత్తం పైప్లైన్లో మార్పులను ముందుకు తీసుకెళ్తుంది. ఒక టికెట్ Merging దశకు చేరుకునే సమయానికి, మనుషుల జోక్యం లేకుండానే ఆ మార్పు మెయిన్ బ్రాంచ్లోకి వెళ్తుందని మాకు ఎక్కువ నమ్మకం ఉంటుంది.
ప్రగతి కొత్త, భిన్నమైన సమస్యలను తీసుకువస్తుంది
ఈ స్థాయిలో పని చేయడం కొన్ని సమతుల్యాల్ని తీసుకువస్తుంది. ఏజెంట్లను ఇంటరాక్టివ్గా గైడ్ చేయడం నుంచి, టికెట్ స్థాయిలో పని అసైన్ చేయడానికి మారినప్పుడు, మధ్యలో వాటిని తరచుగా సవరించే సామర్థ్యాన్ని కోల్పోయాము. కొన్ని సందర్భాల్లో, ఏజెంట్ పూర్తిగా లక్ష్యాన్ని తప్పిపోయే ఫలితాన్ని ఇచ్చింది. అయితే అది ఉపయోగకరమే—ఆ విఫలాలు సిస్టమ్లోని లోపాలను చూపించి, దాన్ని మరింత బలంగా మార్చడంలో సహాయపడ్డాయి.
ఫలితాన్ని మాన్యువల్గా సరిచేయడం బదులుగా, మేము గార్డ్రైల్స్ మరియు స్కిల్స్ను జోడించి, తదుపరి సారి ఏజెంట్లు విజయవంతం అయ్యేలా చేశాము. కాలక్రమేణా, ఇది మా హార్నెస్లో కొత్త సామర్థ్యాలను జోడించడానికి దారితీసింది, ఉదాహరణకు ఎండ్-టు-ఎండ్ టెస్టులు రన్ చేయడం, Chrome DevTools ద్వారా యాప్ను నడపడం, మరియు QA స్మోక్ టెస్టులను నిర్వహించడం. మేము మా డాక్యుమెంటేషన్ను గణనీయంగా మెరుగుపరిచి, మంచి ఫలితం అంటే ఏమిటో స్పష్టంగా నిర్వచించాము.
ప్రతి టాస్క్ Symphony పని విధానానికి సరిపోదు. కొన్ని సమస్యలు ఇప్పటికీ ఇంజినీర్లు ఇంటరాక్టివ్ Codex సెషన్లతో నేరుగా పని చేయాల్సి ఉంటుంది, ముఖ్యంగా స్పష్టతలేని సమస్యలు లేదా బలమైన నిర్ణయం మరియు నైపుణ్యం అవసరమైన పనులు. ప్రాక్టీస్లో, ఇవే మా ఇంజినీర్లు ఎక్కువగా ఆసక్తిగా మరియు ఆనందంగా చేసే పనులు.
తేడా ఏమిటంటే, సాధారణ ఇంప్లిమెంటేషన్ పనిలో ఎక్కువ భాగాన్ని Symphony నిర్వహించగలదు. దాంతో ఇంజినీర్లు చిన్న చిన్న టాస్క్ల మధ్య కాంటెక్స్ట్ స్విచ్ చేయకుండా, ఒక కఠినమైన సమస్యపై ఒకేసారి దృష్టి పెట్టగలుగుతారు.
మేము మరో విషయం కూడా నేర్చుకున్నాము: ఏజెంట్లను స్టేట్ మెషిన్లో కఠినమైన నోడ్లుగా చూడడం సరిగా పని చేయదు. మోడల్స్ మరింత తెలివిగా మారుతూ, మనం పెట్టే పరిమితులను మించి పెద్ద సమస్యలను పరిష్కరించగలవు. ఉదాహరణకు, ప్రారంభ వెర్షన్లలో GitHub ఇంటిగ్రేషన్స్ అన్నీ అవుటర్ హార్నెస్లో భాగంగా ఉండేవి—అంటే Codex కేవలం కోడ్ మార్పులు చేయాలి, మిగతా ప్రక్రియ (మార్పులు సబ్మిట్ చేయడం, టెస్టులు రన్ చేయడం) కోడ్లోనే నిర్వచించబడేది. ఆ ప్రారంభ దశలో, ఏజెంటిక్ పనిలో Codexను కేవలం టాస్క్ ఇంప్లిమెంట్ చేయమని మాత్రమే అడిగేవాళ్లం. ఆ విధానం చాలా పరిమితంగా ఉందని తేలింది. Codex అనేక PRs సృష్టించడం మాత్రమే కాదు, రివ్యూ ఫీడ్బ్యాక్ను చదివి దాన్ని సరిచేయగలదు కూడా. అందుకే మేము దానికి టూల్స్ ఇచ్చాము—gh CLI, CI లాగ్స్ చదివే స్కిల్స్ మొదలైనవి—ఇప్పుడు మేము Codexను మరిన్ని పనులు చేయమని అడగగలుగుతున్నాము, ఉదాహరణకు పాత PRs మూసివేయడం లేదా పూర్తయిన పనులు vs వదిలేసిన పనులపై రిపోర్ట్స్ తీయడం. ఈ రకమైన పనులు మొదట్లో ఊహించిన ఫీచర్ ఇంప్లిమెంటేషన్ పరిధికి బయటివి.
కాబట్టి చివరికి, కఠినమైన ట్రాన్సిషన్ల బదులుగా ఏజెంట్లకు ఆబ్జెక్టివ్లు ఇవ్వడం వైపు మేము మళ్లాము, మంచి మేనేజర్ తన టీమ్లోని వ్యక్తికి లక్ష్యాన్ని ఇస్తాడిలా. మోడల్స్ యొక్క శక్తి వాటి రీజనింగ్ సామర్థ్యంలో ఉంది, కాబట్టి వాటికి టూల్స్ మరియు కాంటెక్స్ట్ ఇచ్చి, అవి స్వయంగా పని చేయనివ్వాలి.
Symphonyతో Symphonyను నిర్మించడం
మీరు Symphony రిపాజిటరీని ఓపెన్ చేసినప్పుడు, మొదట గమనించేది Symphony అసలు ఒక SPEC.md ఫైల్ మాత్రమే—సమస్య మరియు ఉద్దేశించిన పరిష్కారానికి నిర్వచనం. క్లిష్టమైన సూపర్విజన్ సిస్టమ్ను నిర్మించడం బదులుగా, మేము సమస్యను మరియు పరిష్కారాలను నిర్వచించి, ఏజెంట్లకు హై-లెవల్ దిశను ఇచ్చాము.
రెఫరెన్స్ ఇంప్లిమెంటేషన్ Elixirలో రాయబడింది—ఎందుకంటే కోడ్ దాదాపు ఫ్రీగా ఉన్నప్పుడు, Elixir యొక్క కాంకరెన్సీ వంటి బలాల ఆధారంగా లాంగ్వేజ్లను ఎంచుకోవచ్చు—అయితే ప్రధాన ఐడియాను ఒక సింపుల్ మార్క్డౌన్ డాక్యుమెంట్లో కూడా వ్యక్తపరచవచ్చు. మీ ఫేవరెట్ కోడింగ్ ఏజెంట్ను ఈ స్పెక్కి చూపించి, అది తన సొంత వెర్షన్ను ఇంప్లిమెంట్ చేయాలని మేము ప్రోత్సహిస్తున్నాము.
Symphony యొక్క మొదటి వెర్షన్ కేవలం tmux, లో రన్ అవుతున్న ఒక Codex సెషన్ మాత్రమే. అది Linearను పోలింగ్ చేసి, కొత్త టాస్క్ల కోసం సబ్-ఏజెంట్లను స్పాన్ చేసేది. ఇది పని చేసింది, కానీ అంతగా నమ్మదగినది కాదు. రెండవ వెర్షన్ మా ప్రధాన ప్రాజెక్ట్ రిపాజిటరీలో ఉండేది, ఇది ఏజెంట్స్ను దృష్టిలో పెట్టుకుని రూపొందించబడింది. ఈ రిపోలో హై క్వాలిటీ పని చేయడానికి అవసరమైన స్కిల్స్ మరియు కాంటెక్స్ట్ ఏజెంట్స్కు ఇవ్వడానికి మేము ఇప్పటికే ఏజెంట్ హార్నెస్ను నిర్మించాము, కాబట్టి Symphony ఇవన్నీ సింపుల్గా కలుపుతుంది.
బేసిక్ ఫంక్షనాలిటీ అందుబాటులోకి వచ్చిన తర్వాత, మేము Symphony నే ఉపయోగించి Symphonyను నిర్మించాము.
మేము ఇంటర్నల్గా ఈ సిస్టమ్ టాస్క్లను మేనేజ్ చేయడం, చేసిన పనికి సాక్ష్యంగా వీడియోను అటాచ్ చేయడం డెమో చేసినప్పుడు, స్పందన చాలా పాజిటివ్గా వచ్చింది: మా Symphony ప్రాజెక్ట్ ఛానల్ పెరిగింది, మరియు సంస్థ అంతటా టీమ్స్ దాన్ని సహజంగానే ఉపయోగించడం ప్రారంభించాయి. OpenAIలో బయటకు లాంచ్ చేయడానికి ముందు ఇంటర్నల్ ప్రోడక్ట్-మార్కెట్ ఫిట్ అవసరం. OpenAIలో చూసిన యూజేజ్ ఆధారంగా, Symphonyను కంపెనీ బయట కూడా షేర్ చేయాలని స్పష్టమైంది.
అందుకే మేము ఈ ఐడియాను స్వతంత్ర SPEC.md గా మార్చి, దాన్ని ఇంప్లిమెంట్ చేయమని Codexను అడిగాము. రెఫరెన్స్ ఇంప్లిమెంటేషన్ కోసం, కాంకరెంట్ ప్రాసెస్లను ఆర్కెస్ట్రేట్ చేయడానికి మరియు సూపర్వైజ్ చేయడానికి అద్భుతమైన ప్రిమిటివ్స్ ఉన్న, కొంత ప్రత్యేకమైన Elixir లాంగ్వేజ్ను ఎంచుకున్నాము. Codex ఒకే ప్రయత్నంలో Elixir ఇంప్లిమెంటేషన్ను నిర్మించింది, మరియు అక్కడి నుంచి స్పెక్ మరియు ఇంప్లిమెంటేషన్ రెండింటినీ మేము మెరుగుపరుస్తూ వచ్చాము. స్పెక్ను మరింత మెరుగుపరచడానికి, TypeScript, Go, Rust, Java, Python వంటి ఇతర లాంగ్వేజ్లలో కూడా Codexతో ఇంప్లిమెంట్ చేయించి, వచ్చిన ఫలితాలను ఉపయోగించి అస్పష్టతలను గుర్తించి సిస్టమ్ను సింప్లిఫై చేశాము. ప్రతి లాంగ్వేజ్లో ఇది సక్సెస్ అయింది.
Codexను నిర్మించే ప్రక్రియలో, స్పెసిఫిక్ రిపాజిటరీలు లేదా Linear MCPపై ఉన్న డిపెండెన్సీలు వంటి అనుకోకుండా చేరిన కంప్లెక్సిటీని మేము చాలా వరకు తొలగించాము. Symphony ఇకపై మా ఇంటర్నల్ రిపాజిటరీలు లేదా వర్క్ఫ్లోలపై ఆధారపడదు. ప్రధాన అప్రోచ్ ఇప్పుడు చాలా సింపుల్గా మారింది:
ప్రతి ఓపెన్ టాస్క్కి, తన సొంత వర్క్స్పేస్లో ఒక ఏజెంట్ నడుస్తూ ఉండేలా హామీ ఇవ్వండి.
యాక్టివ్ పనికి సహాయం చేయడమే కాకుండా, ఇప్పుడు డెవలప్మెంట్ వర్క్ఫ్లో అనేది ఏజెంట్లు తెలుసుకుని అనుసరించే విధంగా మారింది. డెవలప్మెంట్ వర్క్ఫ్లో—ఒక ఇష్యూపై పని చేయడం, రిపోను చెక్ అవుట్ చేయడం, PMకి పని జరుగుతోందని తెలియజేయడానికి దాన్ని ఇన్ ప్రోగ్రెస్లో పెట్టడం, PR జోడించడం, దాన్ని రివ్యూ స్టేటస్కు మార్చడం, వీడియోలు అటాచ్ చేయడం మొదలైనవి—ఇప్పుడు ఒక సింపుల్ WORKFLOW.md ఫైల్లో క్యాప్చర్ చేయబడ్డాయి. ఇవన్నీ మనుషులు అనుసరించిన ప్రక్రియలే, కానీ అవి ఎప్పుడూ డాక్యుమెంట్ కాలేదు. ఈ అప్రత్యక్ష దశలపై ఆధారపడడం బదులుగా, ఇప్పుడు మేము వాటిని డాక్యుమెంట్ చేస్తున్నాము, మరియు Symphony ఏజెంట్లు వాటిని అనుసరించేలా చూస్తుంది. ఇది మనతో పాటు పని చేసే ఏజెంట్లను నిర్మించడానికి సహాయపడుతుంది. భవిష్యత్తులో పూర్తి చేసిన పనికి సెల్ఫ్-రిఫ్లెక్షన్ కూడా జోడించాలని అనుకుంటే, దాన్ని WORKFLOW.md లో చేర్చుతాము, మరియు Symphony ఏజెంట్లను ఆ దశకు మార్గనిర్దేశం చేస్తుంది.
మేము Codexను యాప్ సర్వర్ మోడ్(కొత్త విండోలో తెరుచుకుంటుంది), లో కూడా ఉపయోగించాము, ఇది Codex కోసం బిల్ట్-ఇన్ హెడ్లెస్ మోడ్. ఈ మోడ్ ద్వారా, థ్రెడ్ ప్రారంభించడం లేదా టర్న్లకు ప్రతిస్పందించడం వంటి పనుల కోసం, బాగా డాక్యుమెంట్ చేయబడిన JSON-RPC API ద్వారా Codexను ప్రోగ్రామాటిక్గా నడిపించగలిగాము. CLI లేదా లైవ్ tmux సెషన్ల ద్వారా ఇంటరాక్ట్ అవ్వడానికి ప్రయత్నించడం కంటే ఇది చాలా సౌకర్యవంతమైన మరియు స్కేలబుల్ విధానం.
Codex యాప్ సర్వర్ మా యూజ్ కేస్కి పర్ఫెక్ట్ ఫిట్ అయింది: Codex అందించే హార్నెస్ ప్రయోజనాలను ఉపయోగించుకుంటూనే, ప్లగ్ చేసుకునే నాబ్స్ మరియు హుక్స్ కూడా ఉన్నాయి. ఉదాహరణకు, Linear యాక్సెస్ టోకెన్ను సబ్-ఏజెంట్లకు ఎక్స్పోజ్ చేయకుండా ఉండేందుకు, మేము డైనమిక్ టూల్ కాల్స్(కొత్త విండోలో తెరుచుకుంటుంది) ఉపయోగించి raw linear_graphql ఫంక్షన్ను ఎక్స్పోజ్ చేస్తాము, ఇది MCPపై ఆధారపడకుండా లేదా టోకెన్ను కంటైనర్లకు ఇవ్వకుండా Linearపై ఆర్బిట్రరీ రిక్వెస్ట్లను ఎగ్జిక్యూట్ చేస్తుంది.
తర్వాత ఏముంది
Symphony ఉద్దేశపూర్వకంగా మినిమల్ ఆర్కెస్ట్రేషన్ లేయర్గా రూపొందించబడింది. Linear వంటి వర్క్ఫ్లో టూల్స్తో కలిపినప్పుడు Codex యాప్ సర్వర్ శక్తిని చూపించడానికి మేము దీన్ని ఓపెన్ సోర్స్ చేస్తున్నాము. అందువల్ల, Symphonyను ఒక స్వతంత్ర ప్రొడక్ట్గా నిర్వహించే ప్లాన్ మాకు లేదు. దీనిని ఒక రెఫరెన్స్ ఇంప్లిమెంటేషన్గా భావించండి. చాలా మంది డెవలపర్లు హార్నెస్ ఇంజినీరింగ్ పోస్ట్ను ఉపయోగించి తమ రిపాజిటరీలను స్కాఫోల్డ్ చేసినట్లే, మీరు కూడా Symphony స్పెక్(కొత్త విండోలో తెరుచుకుంటుంది) మరియు రిపాజిటరీ(కొత్త విండోలో తెరుచుకుంటుంది) పై మీ ఫేవరెట్ కోడింగ్ ఏజెంట్ను ఉపయోగించి, మీ ఎన్విరాన్మెంట్కు సరిపోయే మీ స్వంత వెర్షన్ను నిర్మిస్తారని మేము ఆశిస్తున్నాము.
శక్తి Codex మరియు దాని యాప్ సర్వర్ నుంచే వస్తుంది. Symphony అనేది Codex మరియు Linear అనే మేము ఇప్పటికే ఉపయోగిస్తున్న రెండు టూల్స్ను కనెక్ట్ చేసి, పని నిర్వహణ సమస్యను పరిష్కరించడానికి ఒక మార్గం. కోడింగ్ ఏజెంట్లు రీజనింగ్ చేయడం మరియు సూచనలను అనుసరించడం లో మెరుగుపడుతున్న కొద్దీ, ఇతర కంపెనీలలో కూడా బాటిల్నెక్ కోడ్ రాయడం నుండి ఏజెంటిక్ పనిని నిర్వహించడం వైపు మారుతుందని మేము భావిస్తున్నాము. ఆసక్తికరమైన విషయం ఏమిటంటే, ఈ కోడింగ్ ఏజెంట్ సిస్టమ్లతో ప్రయోగాలు చేయడానికి ఉన్న అడ్డంకి ఇప్పుడు ఆశ్చర్యకరంగా తక్కువగా ఉంది. మీరు Codexతో సులభంగా విషయాలను నిర్మించవచ్చు.
కమ్యూనిటీ అభినందనలు
రిలీజ్ అయిన తర్వాతి వారాల్లో ఇంజినీరింగ్ కమ్యూనిటీ Symphonyను ఉపయోగించడం మాకు చాలా ఆనందంగా ఉంది, ఏప్రిల్ 23 నాటికి ఇది 15K GitHub స్టార్స్(కొత్త విండోలో తెరుచుకుంటుంది) కంటే ఎక్కువ సంపాదించింది.