JetBrains의 go-modern-guidelines는 Go 코딩 에이전트가 낡은 코드를 만드는 이유를 모델의 지식 부족 하나로 설명하지 않습니다. 최신 기능이 학습 데이터에 충분히 남아 있지 않은 문제도 있지만, 모델이 기능을 알고 있어도 더 자주 본 예전 패턴을 고르는 빈도 편향이 남습니다. 이 저장소는 그 문제를 별도의 실행 흐름으로 다룹니다.
에이전트는 작업을 시작할 때 프로젝트의 go.mod에서 Go 버전을 확인합니다. 그리고 그 버전까지 사용할 수 있는 언어 기능과 표준 라이브러리를 기준으로 코드를 선택합니다. 예시는 구체적입니다. max(a, b)로 짧게 쓸 수 있는 if-else를 피하고, slices.Contains로 직접 만든 탐색 루프를 줄이며, cmp.Or(a, b, c)로 이어지는 nil 체크를 대신합니다. Go 1.26 환경이라면 new(42)로 값의 포인터를 만들거나 errors.AsType[T](err)로 타입 안전한 오류 매칭을 사용할 수도 있습니다.
이 방식의 장점은 “최신 Go를 써라”라는 추상적인 지시를 실제 판정 순서로 바꾼다는 데 있습니다. 프로젝트 버전을 먼저 읽고, 허용 가능한 기능 범위를 좁힌 다음, 그 안에서 현대적인 관용구를 우선합니다. 새로 생성된 코드가 나중에 modernize analyzer의 대상이 될 만한 패턴을 덜 포함하도록 처음부터 유도하는 구조입니다. 플러그인은 이 흐름을 여러 에이전트에 전달하는 포장 방식에 가깝습니다.
배포 경로는 Junie, Claude Code, Codex, Cursor마다 다릅니다. 각 도구의 marketplace나 plugin으로 설치할 수 있고, 다른 에이전트는 npx skills add JetBrains/go-modern-guidelines로 같은 skill을 가져옵니다. CLI는 첫 사용 때 go install로 설치되며 프로젝트를 수정하지 않고 ~/.cache/go-modern-guidelines 같은 로컬 캐시에 저장됩니다. 기본 대상은 Go 1.25 이상이고, 더 오래된 환경에서도 GOTOOLCHAIN=auto가 활성화되어 있으면 호환 툴체인을 내려받아 실행할 수 있습니다.
로컬 개발 경로는 이 저장소의 성격을 더 잘 보여줍니다. make dev-install을 실행하고 GO_MODERN_GUIDELINES_DEV=1을 에이전트 프로세스에 넘기면 Claude Code, Codex, Cursor가 릴리스 버전 대신 현재 체크아웃한 CLI를 사용합니다. CLI를 수정한 뒤 다시 설치하면 다음 호출에 변경 사항이 반영됩니다. 에이전트용 wrapper와 빌드용 dev-install 스크립트를 분리한 것도 눈여겨볼 만합니다. 에이전트가 작업 중에 빌드를 임의로 실행하지 못하게 하면서, 개발자는 같은 캐시 경로에서 동작을 검증할 수 있습니다.
물론 전제 조건은 있습니다. Go toolchain이 설치되어 PATH에 있어야 하고, 프로젝트의 go.mod가 실제 지원 버전과 어긋나면 에이전트의 선택도 틀어질 수 있습니다. Cursor는 설치 플러그인을 비대화식 CLI 명령 하나로 갱신하지 못해 재설치가 필요할 수 있습니다. 최신 문법을 많이 아는 것보다 중요한 건, 현재 프로젝트가 허용하는 문법을 정확히 판별하는 일입니다.
그래서 이 저장소를 볼 때는 “어느 에이전트용 플러그인인가”보다 “에이전트가 코드를 고르기 전에 무엇을 읽고 어떤 순서로 판단하는가”를 보는 편이 맞습니다. go-modern-guidelines는 Go의 최신 관용구 목록을 제공하는 데서 멈추지 않고, 버전 감지와 skill 호출, 캐시된 CLI 실행을 하나의 경로로 묶습니다. AI 코딩 품질을 모델의 기억력만으로 해결하지 않고, 실행 전에 주어지는 규칙과 판정 순서의 문제로 옮겨 놓은 사례입니다.