문서 유지보수 전략
코드-문서 동기화, 규칙 파일·Skill·MCP Resource 드리프트, 에이전트 smoke test와 CI 검증 루프, freshness 정책과 문서 부채 우선순위까지 docs-as-code로 운영하는 방법.
핵심 요약
- 유지보수 대상은 일반 문서뿐 아니라
AGENTS.md,CLAUDE.md, Skills, Plugins, MCP Resource까지 확장됩니다. - 목표는 문서를 최신처럼 보이게 꾸미는 게 아니라, 에이전트가 낡은 지침·컨텍스트로 작업하지 않게 막는 것입니다.
- 코드 변경 시 관련 문서 갱신 여부를 PR 단위 GitHub Action으로 자동 확인합니다.
- 규칙 파일과 Skill은 사람 눈에 좋아 보여도 틀릴 수 있으니 smoke test로 검증합니다.
- freshness 정책에서 규칙·API·MCP Resource는 짧은 주기로 검토하되 ADR·CHANGELOG는 제외하고, P0~P3 우선순위로 부채를 정리합니다.
문서는 쓰기보다 유지하기가 어렵습니다.
에이전틱 문서화에서는 유지보수 대상이 일반 문서를 넘어 AGENTS.md, CLAUDE.md, Skills, Plugins, MCP Resource까지 늘어납니다.
목표는 "문서를 최신으로 보이게 꾸미기"가 아닙니다. 에이전트가 잘못된 지침이나 낡은 컨텍스트로 작업하지 않게 막는 것입니다.
유지보수 대상
| 대상 | 대표 드리프트 | 검증 방법 |
|---|---|---|
| README/docs | 링크 깨짐, 명령어 변경, 오래된 스크린샷 | 링크 체크, 코드 블록 테스트 |
AGENTS.md | 실제 스크립트와 다른 검증 명령 | package/script 대조, 에이전트 smoke test |
CLAUDE.md | AGENTS.md와 중복·충돌, 과도한 길이 | import 구조 확인, 200줄 안팎 관리 |
.claude/rules/ | 경로 패턴 불일치, 전역 규칙과 충돌 | glob 매칭 테스트, 규칙 리뷰 |
| Skills | 절차가 최신 CI/배포 방식과 불일치 | 샘플 입력으로 실행, supporting file 링크 검증 |
| Plugins | 배포된 버전과 repo 원본 불일치 | manifest 버전, marketplace/source 검증 |
| MCP Resources | 원본 문서·스키마와 불일치 | 원본 링크, 생성 시간, checksum/etag 비교 |
| MCP Tools | 입력 스키마·권한·부작용 설명 누락 | schema validation, 권한 리뷰 |
코드-문서 동기화
코드가 바뀌면 관련 문서도 같이 고쳐야 합니다. 이걸 PR 단위로 자동 확인합니다.
GitHub Action 예시
name: Docs Sync Check
on:
pull_request:
paths:
- 'src/**'
- 'app/**'
- 'docs/**'
- 'AGENTS.md'
- 'CLAUDE.md'
- '.claude/**'
- '.agents/**'
jobs:
check-docs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Check docs need update
run: |
SRC_CHANGED=$(git diff --name-only origin/main...HEAD | grep -E '^(src|app)/' || true)
DOCS_CHANGED=$(git diff --name-only origin/main...HEAD | grep -E '^(docs/|AGENTS.md|CLAUDE.md|\\.claude/|\\.agents/)' || true)
if [ -n "$SRC_CHANGED" ] && [ -z "$DOCS_CHANGED" ]; then
echo "::warning::Code changed without docs or agent instructions update."
echo "Confirm whether docs, AGENTS.md, CLAUDE.md, skills, or MCP resources need changes."
fiAPI 변경 감지
#!/usr/bin/env bash
set -euo pipefail
changed_api=$(git diff --name-only --cached | grep -E '^(src|app)/api/' || true)
changed_docs=$(git diff --name-only --cached | grep -E '^(docs/api|openapi|AGENTS.md|CLAUDE.md)' || true)
if [ -n "$changed_api" ] && [ -z "$changed_docs" ]; then
echo "API code changed. Check API docs, OpenAPI, and agent instructions."
exit 1
fi자동 검증 파이프라인
검증 항목
| 검증 | 도구/방법 | 자동화 |
|---|---|---|
| 내부 링크 | 빌드 또는 link checker | CI |
| 외부 링크 | 주간 크론으로 HTTP 상태 확인 | CI/cron |
| frontmatter | 필수 필드 lint | CI |
| 코드 블록 | shellcheck, typecheck, doctest | CI |
| 명령어 최신성 | package.json scripts와 문서 명령 대조 | CI |
| 규칙 충돌 | AGENTS.md, CLAUDE.md, .claude/rules 중복 키워드 리뷰 | 반자동 |
| Skill 링크 | supporting file 존재 여부 확인 | CI |
| Plugin manifest | version, paths, MCP config schema 확인 | CI |
| MCP Resource | 원본 freshness, schema, access boundary 확인 | CI/cron |
| 에이전트 준수 | 샘플 작업으로 지침 로딩/검증 명령 응답 확인 | 반자동 |
에이전트 가독성 smoke test
문서가 사람 눈에 멀쩡해 보여도 에이전트는 엉뚱하게 읽을 수 있습니다. 규칙 파일과 Skill은 샘플 프롬프트로 검증합니다.
AGENTS.md smoke test
codex --ask-for-approval never "List the active project instructions and summarize the validation commands. Do not modify files."확인할 것:
- 전역/프로젝트/하위 디렉토리 지침이 기대 순서로 로드되는가
- 검증 명령이 실제 scripts와 일치하는가
- 금지사항이 요약에 빠지지 않는가
- 지침이 너무 길어 핵심이 누락되지 않는가
Claude Code smoke test
claude "Run /memory and tell me which CLAUDE.md, CLAUDE.local.md, and rules files are loaded. Do not edit files."확인할 것:
CLAUDE.md가@AGENTS.md를 정상 import하는가.claude/rules/의 path-scoped rule이 의도한 파일에서만 적용되는가CLAUDE.local.md가 gitignore되어 있는가- 긴 절차가 Skill로 분리되어 있는가
Skill smoke test
release-check Skill을 사용해서 현재 diff를 검토해줘.
파일을 수정하지 말고, 실행할 검증 명령과 누락 위험만 보고해줘.확인할 것:
- Skill이 의도한 작업에서만 호출되는가
- supporting file을 필요할 때만 읽는가
- 출력 형식이 반복 가능하게 안정적인가
- side effect가 필요한 경우 사용자 승인을 요구하는가
낡은 문서 탐지
Freshness 정책
freshness:
warn_after_days: 90
critical_after_days: 180
review_required:
- AGENTS.md
- CLAUDE.md
- .claude/rules/**
- .agents/skills/**
- .codex-plugin/plugin.json
- docs/api/**
exclude:
- docs/adr/**
- CHANGELOG.mdADR은 오래됐다고 바로 손대는 문서가 아닙니다. 반면 프로젝트 규칙, Skill, API 문서, MCP Resource 색인은 짧은 주기로 검토해야 합니다.
코드-문서 괴리 탐지 프롬프트
다음 문서와 현재 코드를 비교해서 불일치를 찾아줘.
문서:
- AGENTS.md
- CLAUDE.md
- docs/api/*.md
- .agents/skills/*/SKILL.md
코드:
- package.json
- src/api/**
- app/api/**
- openapi/**
확인할 것:
1. 문서의 명령어가 실제 scripts와 일치하는가
2. API 설명이 실제 route/schema와 일치하는가
3. Skill 절차가 현재 CI/배포 방식과 일치하는가
4. 금지사항과 하위 규칙이 서로 충돌하지 않는가
5. 삭제/이름 변경된 파일 경로가 남아 있는가문서 부채 우선순위
문서가 많아져도 전부 한 번에 고치려 들지 않습니다. 에이전트가 자주 들여다보는 표면부터 정리합니다.
| 우선순위 | 기준 | 조치 |
|---|---|---|
| P0 | 에이전트가 매 작업에서 읽는 규칙이 틀림 | 즉시 수정 |
| P1 | API/운영 문서가 실제 동작과 다름 | 다음 릴리스 전 수정 |
| P2 | Skill/Plugin 절차가 낡았지만 대체 절차가 있음 | 스프린트 계획에 포함 |
| P3 | 거의 읽히지 않는 내부 문서 | 아카이브 또는 삭제 검토 |
Docs-as-Code
문서를 코드와 동일한 방식으로 관리합니다.
| 원칙 | 적용 |
|---|---|
| 버전 관리 | Git으로 문서와 규칙 파일 이력 추적 |
| 코드 리뷰 | PR에서 문서 변경 리뷰 |
| CI/CD | 빌드, 링크, 명령어, 코드 블록 검증 |
| 자동 배포 | main 머지 시 문서 사이트 배포 |
| 소유권 | 규칙, Skill, MCP Resource별 owner 지정 |
| 이슈 관리 | 문서 부채와 freshness 경고를 이슈로 관리 |
Before/After
Before — 수동 관리:
- 위키에 누군가 문서를 업데이트하길 기대
- 코드 변경 후 문서는 나중에 수정
AGENTS.md와 README가 서로 다른 명령어를 안내- Skill은 만들었지만 검증하지 않음
After — 에이전트 운영 체계:
- PR에서 코드-문서 동기화 체크 실행
- 규칙 파일과 Skill을 smoke test
- MCP Resource의 원본 freshness 확인
- 90일 이상 미검토 규칙 파일은 리뷰 요청
- 에이전트가 문서-코드 불일치를 주간 리포트
체크리스트
| 항목 | 확인 |
|---|---|
| 문서, 규칙 파일, Skill, Plugin, MCP Resource의 owner가 있는가 | ☐ |
| 코드 변경 시 관련 문서/규칙 변경 여부를 확인하는가 | ☐ |
AGENTS.md와 CLAUDE.md의 명령어가 실제 scripts와 일치하는가 | ☐ |
.claude/rules/와 하위 AGENTS.md의 충돌을 정기 검토하는가 | ☐ |
| Skill supporting file과 scripts가 존재하고 실행 가능한가 | ☐ |
| Plugin manifest와 MCP config를 배포 전 검증하는가 | ☐ |
| MCP Resource의 원본 freshness와 신뢰 경계를 검증하는가 | ☐ |
| 에이전트 smoke test를 릴리스 전 또는 주기적으로 실행하는가 | ☐ |