Agent 프롬프트를 매번 다시 읽지 않게 만드는 방법

![Session-start prompt version sync](/uploads/20260627-llmwiki-prompt-sync-v2.png) Agent 정책 프롬프트는 길어지기 쉽다. 처음에는 설치 안내, MCP 연결 방법, 기억 조회 규칙, 저장 규칙, 예외 상황까지 모두 넣어야 하므로 자연스럽다. 문제는 이 프롬프트가 전역 `AGENTS.md` 같은 영구 지침에 들어가면 매 세션마다 토큰을 잡아먹는다는 점이다. Slogs MCP 프롬프트도 같은 문제를 겪었다. 기능은 유지해야 하지만, 전역 Agent 정책은 훨씬 작아져야 했다. 그래서 Slogs는 “전체 프롬프트를 매번 읽는 방식”이 아니라 “세션 시작 시 버전만 확인하는 방식”으로 바꿨다. ## 목표는 압축이지 기능 삭제가 아니다 프롬프트를 compact하게 만든다고 해서 정책을 삭제하면 안 된다. 줄여야 하는 것은 중복 설명이고, 유지해야 하는 것은 동작 계약이다. Slogs MCP 프롬프트에서 유지해야 했던 핵심 계약은 다음과 같다. - 처음 설치 시 MCP 키를 다시 묻는 조건 - 전역/프로젝트/현재 세션 적용 범위 선택 - 토큰을 문서, 로그, LLM Wiki에 기록하지 않는 규칙 - 이전 결정/선호/프로젝트 맥락은 LLM Wiki를 먼저 조회하는 규칙 - 저장 전 관련 기억을 찾고 병합/갱신하는 규칙 - categoryPath를 명시하는 규칙 - 프롬프트 버전 동기화 규칙 compact 버전은 이 계약을 짧게 표현할 뿐, 기능을 줄이지 않는다. ## 세션 시작에는 한 줄 버전만 확인한다 핵심은 `slogs-mcp.version` 엔드포인트다. 세션이 시작되면 Agent나 동기화 스크립트는 먼저 다음 URL의 한 줄 버전 텍스트만 읽는다. ```text https://slogs.dev/prompts/slogs-mcp.version ``` 그 다음 로컬 지침 파일에 설치된 `SLOGS_MCP_PROMPT` 관리 블록의 version과 비교한다. - 버전이 같으면 전체 프롬프트를 읽지 않는다. - 파일을 다시 쓰지 않는다. - 키 요청을 반복하지 않는다. - 적용 범위 질문도 반복하지 않는다. 이 규칙 하나로 평소 세션 시작 비용이 작아진다. 대부분의 세션에서는 한 줄 버전 확인만 하고 기존 정책으로 바로 작업하면 된다. ## 버전이 다를 때만 전체 Markdown을 읽는다 서버 버전과 로컬 버전이 다르거나, 로컬 블록에 버전이 없을 때만 전체 프롬프트를 읽는다. ```text https://slogs.dev/prompts/slogs-mcp.ko.md ``` 읽은 뒤에는 기존 `SLOGS_MCP_PROMPT` 관리 블록을 같은 위치에서 교체한다. 전역에 설치된 블록은 전역 지침에서, 프로젝트에 설치된 블록은 프로젝트 지침에서 갱신한다. 중요한 점은 누적 추가가 아니라 교체라는 것이다. 같은 정책이 여러 번 붙으면 Agent는 어떤 문장을 더 우선해야 하는지 알기 어렵다. 관리 블록은 하나만 있어야 한다. ## 이것은 스케줄러가 아니다 처음에는 `SlogsMcpPromptSync`라는 이름 때문에 주기적 스케줄처럼 보일 수 있었다. 하지만 의도는 백그라운드 스케줄이 아니다. Slogs의 현재 정책은 명확하다. - Windows Scheduled Task로 반복 등록하지 않는다. - 일정 시간마다 자동 갱신하지 않는다. - 세션 시작 시 버전이 다를 때만 동기화한다. - 버전이 같으면 전체 프롬프트를 fetch하지 않는다. Agent 정책은 사용자가 작업을 시작하는 시점에 맞춰 최신이면 충분하다. 백그라운드에서 몰래 지침 파일을 바꾸면 디버깅이 어려워지고, 사용자가 보지 않는 시점에 정책이 변할 수 있다. ## 해시와 관리 블록이 필요한 이유 Slogs 관리 블록은 URL, version, sha256, updated 값을 헤더에 둔다. 버전만으로도 동기화 판단은 가능하지만, 해시는 실제 본문이 기대한 내용인지 검증하는 데 도움이 된다. 관리 블록의 목적은 사람이 읽기 위한 장식이 아니다. Agent와 스크립트가 다음을 명확히 알기 위한 구조다. -…