Getting AI to work in complex codebases