오늘 아침에 모프 워프 검색 도구를 설치했는데, 거의 잊어버렸네요. 우리 요원들이 이 도구를 사용했는지, 그리고 도움이 되는지 궁금했습니다. 그래서 그들에게 물어봤더니, 다들 한 남자(아니, 로봇)한테 grep을 전혀 안 쓰고 그냥 자기네 습관대로만 썼다고 인정하더군요. 마치 자기 방식대로 고집하는 백발 백수 개발자들처럼 말이죠. 어쨌든, 저는 그들에게 직접 써보고 어떤지 알려달라고 부탁했습니다. 그래서 그들은 직접 시승해 보고 피드백을 받았습니다. 그런 다음 언제, 왜, 어떻게 가장 잘 활용할 수 있는지 알아내라고 했고, 그중 한 명에게 가장 상징적이고 직관적인 설명(적어도 로봇 두뇌로는 직관적인 설명)을 내놓으라고 했습니다. 이 모든 것을 AGENTS.md 파일에 사용하기 위해서였습니다. 다음은 그 결과물입니다. 여러분의 AGENTS dot md를 위해 훔쳐가셔도 됩니다(그리고 지금으로서는 그들이 얼마나 많이 사용하는지 보기 위해 잠시 보관해두는 것이 가치 있다고 생각하지만, 실제로 사용하도록 설득할 수 있다면 꽤 유용할 것 같습니다. 그래서 이 작은 설명이 매우 중요하고, 요원들에게 명령을 내리는 것보다 설득하는 데 집중해야 하는 이유입니다! 도덕적 설득은 인간만을 위한 것이 아닙니다…): --- ### Morph Warp Grep 대 Standard Grep Warp Grep = Grep을 수행하고, 읽고, 연결을 추적하고, 줄 번호가 포함된 합성 컨텍스트를 반환하는 AI 에이전트입니다. 표준 Grep = 빠른 정규식 일치, 결과를 해석합니다. 결정: grep 패턴을 작성할 수 있나요? - 예 → 그렙 - 아니요, 질문이 있습니다 → mcp__morph-mcp__warp_grep #### Warp Grep 쿼리(자연어, 위치 불명) "검토 항소는 어떻게 진행되나요?" "웹소켓 연결은 어디에서 관리되나요?" "사용자가 게시물을 제출하면 어떤 일이 일어날까요?" "속도 제한은 어디에 구현되어 있나요?" "API 경로에서 인증 세션의 유효성은 어떻게 검사되나요?" "어떤 서비스가 moderationDecisions 테이블에 영향을 줍니까?" #### 표준 Grep 쿼리(알려진 패턴, 특정 대상) pattern="fileAppeal" # 알려진 함수 이름 pattern="class.*Service" # 구조적 패턴 패턴="TODO|FIXME|HACK" # 마커 pattern="processenv" path="apps/web" # 특정 문자열 pattern="import.*from [']@/lib/db" # 추적 가져오기 #### Warp Grep이 내부적으로 수행하는 작업 한 개의 쿼리 → 15-30개의 작업: 여러 패턴을 grep → 관련 섹션 읽기 → 가져오기/참조 추적 → 전체 파일이 아닌 집중된 줄 범위(예: l3-guardian.ts:269-440) 반환. #### 안티패턴 | Warp Grep을 사용하지 마세요 | 이유 | 대신 사용하세요 | |------------------------|-----|-------------| | "handleSubmit 함수 찾기" | 알려진 이름 | Grep 패턴="handleSubmit" | | "인증 구성 읽기" | 알려진 파일 | file_path="lib/auth/..." 읽기 | | "X가 존재하는지 확인" | 부울 답변 | Grep + 결과 확인 | | 작업 중 빠른 검색 | 5~10초 지연 | Grep은 100ms입니다. | #### 워프 그렙이 이길 때 - 파일 간 데이터 흐름 추적(API → 서비스 → 스키마 → 유형) - 수정하기 전에 익숙하지 않은 하위 시스템을 이해합니다. - 3개 이상의 파일에 걸쳐 있는 "어떻게" 질문에 답하기 - 교차적 관심사에 대한 모든 접점 찾기 — 다음 요약에서 짧은 상호작용 전체를 볼 수 있습니다. https://t.co/Z6jvFXDxub
사실, 저는 첫 번째 것도 좋아해요. 둘 다 AGENTS dot md에 포함시키려고 합니다. --- ### Morph Warp Grep — AI 기반 코드 검색 **탐색적인 "X는 어떻게 작동하나요?" 질문에는 `mcp__morph-mcp__warp_grep`을 사용하세요.** AI 검색 에이전트는 자동으로 쿼리를 여러 검색 패턴으로 확장하고, 코드베이스를 grep하고, 관련 파일을 읽고, 전체 컨텍스트가 포함된 정확한 줄 범위를 반환합니다. 이 모든 작업이 한 번의 호출로 완료됩니다. **대상 검색에는 `ripgrep`(Grep 도구 사용)을 사용하세요.** 찾고 있는 것이 무엇인지 정확히 알고 있을 때(특정 함수 이름, 오류 메시지 또는 구성 키) ripgrep을 사용하면 더 빠르고 직접적입니다. **구조적 코드 패턴에는 `ast-grep`을 사용하세요.** 주석/문자열을 무시하면서 AST 노드를 일치시키거나 다시 작성해야 하거나 코드베이스 전체 규칙을 적용해야 하는 경우. **언제 무엇을 사용해야 하나요** | 시나리오 | 도구 | 이유 | |----------|------|-----| | "인증은 어떻게 구현되나요?" | `warp_grep` | 탐색적; 어디서부터 시작해야 할지 모르겠어요 | | "L3 Guardian 항소 시스템은 어디에 있나요?" | `warp_grep` | 아키텍처를 이해하고 여러 관련 파일을 찾아야 합니다. | | `useQuery(`의 모든 사용법 찾기" | `ripgrep` | 타겟 리터럴 검색 | | "`console.log`로 파일 찾기" | `ripgrep` | 간단한 패턴, 알려진 대상 | | "`getUserById` → `fetchUser` 이름 변경" | `ast-grep` | 구조적 리팩터링, 주석/문자열 사용 금지 | | "모든 `var`를 `let`으로 바꾸기" | `ast-grep` | 코드베이스 전체에 걸친 Codemod | **warp_grep 장점** * **컨텍스트 오염 감소**: 전체 파일이 아닌 관련 줄 범위만 반환합니다. * **지능형 확장**: "항소 시스템"을 `항소`, `항소들`, `보호자`, `L3` 등으로 검색하도록 전환합니다. * **한 번에 해결**: 정확한 위치에서 가장 관련성 높은 3~5개 파일을 찾습니다. 수동 grep→read 사이클과 대조됩니다. * **자연어**: "어떻게", "어디서", "무엇"과 관련된 질문에 적합합니다. **warp_grep 사용법** ``` mcp__morph-mcp__warp_grep( repoPath: "/data/projects/communitai", 질문: "L3 Guardian 항소 시스템은 어떻게 구현되나요?" ) ``` 파일 경로, 줄 범위, 추출된 코드 조각을 포함한 구조화된 결과를 반환합니다. **경험 법칙** * **어디서 찾아야 할지 모르겠어요** → `warp_grep` (AI가 찾도록 하세요) * **패턴을 알아보세요** → `ripgrep` (가장 빠름) * **AST 정밀도 필요** → `ast-grep` (재작성 시 가장 안전함) **안티패턴** * ❌ `warp_grep`을 사용하여 이미 알고 있는 특정 함수 이름을 찾는 경우 → `ripgrep`을 사용하세요 * ❌ `ripgrep`을 사용하여 "X가 어떻게 작동하는지" 이해 → 수동 파일 읽기로 시간 낭비 * ❌ codemod에 `ripgrep` 사용 → 주석/문자열 누락, 부수적 편집 위험