എന്റെ കോഡിംഗ് ഏജന്റുകൾക്കായി ഞാൻ ഒരു ലോക്കൽ കൺട്രോൾ പ്ലെയിൻ നിർമ്മിച്ചു
വ്യത്യസ്ത AI ഏജന്റുകൾ ഉപയോഗിക്കുന്നത് വലിയൊരു കുഴപ്പമായിരുന്നു.
ഞാൻ Copilot, Claude Code, OpenCode എന്നിവ ഉപയോഗിച്ചിരുന്നു. ഓരോ ടൂളിനും അതിന്റേതായ ഹോം ഡയറക്ടറിയും, സെറ്റിംഗ്സും, മെമ്മറിയും ഉണ്ടായിരുന്നു. ഓരോ തവണ പുതിയൊരു സ്കില്ലോ റൂളോ ചേർക്കുമ്പോഴും ഞാൻ സ്വയം ചോദിക്കേണ്ടി വരുമായിരുന്നു: ഈ ടൂൾ ഇത് എവിടെയാണ് പ്രതീക്ഷിക്കുന്നത്?
എന്റെ ഹോം ഡയറക്ടറി AI ഫോൾഡറുകൾ നിറഞ്ഞ ഒരു അലങ്കോലമായ ശേഖരമായി മാറി.
ഏജന്റുകൾക്കിടയിൽ പ്ലാനുകൾ കൈമാറാൻ ഞാൻ Markdown ഫയലുകൾ ഉപയോഗിക്കാൻ ശ്രമിച്ചു. അത് സഹായിച്ചുവെങ്കിലും പരാജയപ്പെട്ടു. ഒരു ഏജന്റ് ഒരു അനുമാനം (assumption) വിട്ടുപോയാൽ, അടുത്ത ഏജന്റ് തെറ്റായ ഫലം നൽകും. ഫയലുകൾ ഡാറ്റ നൽകിയെങ്കിലും അവയ്ക്ക് ഒരു പൊതുവായ സന്ദർഭം (shared context) നൽകാൻ കഴിഞ്ഞില്ല.
എനിക്ക് താഴെ പറയുന്ന കാര്യങ്ങൾ ചെയ്യാൻ ഒരു മാർഗ്ഗം ആവശ്യമായിരുന്നു:
- ഉയർന്ന തലത്തിലുള്ള (high-level) നിയമങ്ങൾ ഒരിക്കൽ മാത്രം എഴുതുക.
- പെർമിഷൻ നിയമങ്ങൾ ഒരിടത്ത് തന്നെ സൂക്ഷിക്കുക.
- സ്കില്ലുകൾ കൈകൊണ്ട് കോപ്പി ചെയ്യുന്നത് ഒഴിവാക്കുക.
- വിവിധ പ്രോജക്റ്റുകൾക്കും സെഷനുകൾക്കും ഇടയിൽ മെമ്മറി പങ്കിടുക.
ഇത് പരിഹരിക്കാനായി ഞാൻ ഒരു ലോക്കൽ കൺട്രോൾ പ്ലെയിൻ നിർമ്മിച്ചു.
എന്റെ സെറ്റപ്പിലെ പ്രധാന ഭാഗം ഒരു സിംഗിൾ ഡയറക്ടറിയാണ്: ~/.ai.
ചിതറിക്കിടക്കുന്ന ഫോൾഡറുകൾക്ക് പകരം ഞാൻ symlinks ഉപയോഗിക്കുന്നു. ടൂളുകൾ അവ അവരുടേതായ സ്ഥലത്താണെന്ന് കരുതും, എന്നാൽ യഥാർത്ഥ ഘടന ഒരിടത്ത് മാത്രമാണ് നിലനിൽക്കുന്നത്. ഞാൻ എല്ലാ മോഡൽ ട്രാഫിക്കും ഒരു ലോക്കൽ പ്രോക്സിയിലൂടെ റൂട്ട് ചെയ്യുകയും MCP വഴി മെമ്മറിക്കായി ഒരു ഷെയർഡ് SQLite ഡാറ്റാബേസ് ഉപയോഗിക്കുകയും ചെയ്യുന്നു.
ഇത് രണ്ട് വ്യത്യസ്ത ജോലികളെ വേർതിരിക്കുന്നു:
- റൂട്ടിംഗ് (Routing): മോഡൽ റിക്വസ്റ്റുകൾ പ്രൊവൈഡറിലേക്ക് എത്തുന്നതിന് മുമ്പ് ഒരു ലോക്കൽ പ്രോക്സിയിലൂടെ കടന്നുപോകുന്നു.
- മെമ്മറി (Memory): ദീർഘകാലം നിലനിൽക്കുന്ന വസ്തുതകൾ ഒരു ലോക്കൽ സ്റ്റോറിൽ സൂക്ഷിക്കുന്നു.
ഒരു മോഡൽ വിചിത്രമായി പെരുമാറിയാൽ, ഞാൻ പ്രോക്സി പരിശോധിക്കും. ഒരു ഏജന്റ് ഒരു കാര്യം മറന്നുപോയാൽ, ഞാൻ മെമ്മറി പരിശോധിക്കും. ഇത് ഡീബഗ്ഗിംഗ് (debugging) എളുപ്പമാക്കുന്നു.
വീണ്ടും കണ്ടെത്താൻ പ്രയാസമുള്ള കാര്യങ്ങൾ എന്റെ ഷെയർഡ് മെമ്മറി സൂക്ഷിക്കുന്നു:
- പ്രോജക്റ്റ് തീരുമാനങ്ങൾ.
- ആർക്കിടെക്ചർ കുറിപ്പുകൾ.
- വർക്ക്ഫ്ലോ മുൻഗണനകൾ (Workflow preferences).
- ആവർത്തിച്ചു വരുന്ന ബഗുകൾ.
ഞാൻ എന്റെ സെക്യൂരിറ്റിയും കേന്ദ്രീകരിച്ചു. കോഡിംഗ് സ്റ്റാൻഡേർഡുകൾക്കും നിരോധിച്ച കമാൻഡുകൾക്കുമായി (denied commands) ഞാൻ ഷെയർഡ് ഫയലുകൾ ഉപയോഗിക്കുന്നു. ഇത് ഒരു ഏജന്റിൽ നിന്ന് മറ്റൊന്നിലേക്ക് മാറുമ്പോൾ എൻവയോൺമെന്റിന്റെ സുരക്ഷയിൽ മാറ്റം വരുന്നില്ലെന്ന് ഉറപ്പാക്കുന്നു.
ഇത് ഒരു മികച്ച ഏജന്റിനെ കണ്ടെത്തുന്നതിനെക്കുറിച്ചല്ല. എന്റെ ഏജന്റുകൾക്ക് ആവശ്യമായ സന്ദർഭങ്ങൾ (context) പങ്കിടാൻ കഴിയുന്നുണ്ടെന്ന് ഉറപ്പാക്കുന്നതിനെക്കുറിച്ചാണ്, അങ്ങനെ അവയ്ക്കിടയിൽ മാറുന്നത് വീണ്ടും ആദ്യം മുതൽ തുടങ്ങുന്നത് പോലെ തോന്നില്ല.
Source: https://dev.to/sperekrestova/i-built-a-local-control-plane-for-my-coding-agents-1bf7
Optional learning community: https://t.me/GyaanSetuAi