refactor(core): MCP 역할별 접근 제어 + asyncio.Lock 추가

- ROLE_MCP_ACCESS: agent만 MCP 도구 접근, 나머지 역할은 제거
- _settings_lock: settings.json 쓰기~프로세스 시작 직렬화
- agent.md: 쉘 명령 금지, MCP 도구 강제 사용 지시 추가
- config.py: WORKSPACE_BASE_DIR 경로 수정 (Variet-Worker)
- run_bot.bat: conda 환경 variet-agent로 변경
- workspaces.json: orphan 정리 + 경로 수정
- known-issues: MCP 접근제어, yolo 자율성, Nyaa 카테고리 이슈 추가
- devlog: 002 entry 및 index 업데이트
This commit is contained in:
2026-03-12 22:03:00 +09:00
parent 092bd588be
commit 63818999d9
8 changed files with 112 additions and 80 deletions

View File

@@ -63,3 +63,21 @@
- **원인**: Gemini CLI는 `cwd` 기준으로 `.gemini/settings.json`을 탐색. cwd가 다른 워크스페이스면 MCP 설정 못 찾음
- **해결**: `~/.gemini/settings.json` (홈 레벨)에 mcpServers 등록. `_set_thinking_budget`에서 자동 관리
- **주의**: MCP 서버 설정은 반드시 홈 레벨 settings.json에 등록. 프로젝트 레벨은 불충분
### [2026-03-12] MCP 역할별 접근 제어 — 모든 역할이 MCP 도구 접근
- **증상**: coder, reviewer 등 텍스트 전용 역할도 anime/infra MCP 도구에 접근 가능
- **원인**: `_set_thinking_budget()`이 역할 무관하게 모든 MCP 서버를 settings.json에 등록
- **해결**: `ROLE_MCP_ACCESS` dict 추가, agent만 MCP 등록, 나머지는 제거. `asyncio.Lock` 추가로 settings.json 레이스 방지
- **주의**: settings.json은 글로벌 파일이므로, 역할 전환 시 반드시 이전 설정을 정리해야 함
### [2026-03-12] Gemini CLI yolo — 에이전트 자율성 위험
- **증상**: 애니 다운로드 요청 시 에이전트가 음악/만화를 다운로드하고 엉뚱한 폴더 생성
- **원인**: `--approval-mode yolo`는 MCP 도구 + 쉘 + 파일 조작 모두 무승인 허용. 프롬프트 제한은 강제력 없음
- **해결 (검토중)**: MCP 대신 Python 도구를 소스코드로 직접 제공하여 Gemini CLI가 읽고 사용하는 방식 검토
- **주의**: 프롬프트는 "부탁"이지 "강제"가 아님. 안전장치는 코드(도구) 레벨에 구현해야 함
### [2026-03-12] Nyaa 검색 — anime 카테고리 미지정
- **증상**: 애니 검색 시 음악, 만화, 라이트노벨 등 무관한 토렌트가 다운로드됨
- **원인**: `NyaaClient.search()` 기본 category가 `0_0`(전체). Music, Manga 등 포함
- **해결 (예정)**: 기본 category를 `1_2`(Anime English) 또는 `1_0`(Anime 전체)로 변경
- **주의**: 외부 검색 API 사용 시 반드시 카테고리/필터를 명시적으로 지정