ContextOps
Claude Code 를 쓰는 팀의 공용 규칙

팀의 기억과 AI의 기억을 한 방향으로

같은 팀인데 AI 마다 답이 다릅니다. 팀의 목표·규칙·결정을 팀장이 한 번 승인하면 모든 팀원의 Claude Code 가 같은 내용을 받고, 로드맵이 실제로 어디까지 됐는지 근거와 함께 보입니다.

샘플 팀으로 둘러보기팀장은 브라우저에서 15분, 개발자는 명령 한 줄.
「CLAUDE.md」라 새겨진 두꺼운 카드 한 장에서 검은 실 세 가닥이 갈라져 아래의 A·B·C 카드 셋에 닿는 클레이 그림 — 승인된 Pack 하나가 모든 기기에 같은 버전으로 닿는다

같은 질문을 같은 팀 두 사람의 Claude Code 에 던졌습니다.

질문

결제사(PSP) 호출이 실패하면 몇 번까지 재시도해?

지금

사람마다 다른 답

A 의 Claude Code팀 문서를 읽었습니다paylab-docs/goals.md §3.1

문서에는 최대 5회, 지수 백오프로 재시도하라고 되어 있습니다. 고정 간격은 금지입니다.

쉬운 말로5번까지기다리는 시간을 점점 늘려 가며

B 의 Claude Code실제 코드를 읽었습니다paylab-api/src/payment/retry.ts:11

코드에는 MAX_RETRY = 3, 간격은 500ms 고정으로 되어 있습니다.

쉬운 말로3번까지0.5초 간격으로 똑같이

A 는 문서를, B 는 코드를 읽었습니다. 둘 다 틀리지 않았는데 팀은 둘로 갈립니다.
ContextOps

Team Context v1.1.0

A · B · C 의 Claude Code팀장이 승인한 규칙을 읽었습니다

PSP 호출은 최대 5회까지 재시도한다. 간격은 지수 백오프(0.5s·1s·2s·4s·8s)이고, 재시도 대상은 타임아웃과 5xx 뿐이다.

쉬운 말로5번까지기다리는 시간은 0.5초 → 8초로 늘리고, 응답이 없거나(타임아웃) 상대 서버가 고장 났을 때(5xx)만

강제 규칙(must) — 지켰는지 코드 리뷰에서 확인합니다
근거
  • paylab-docs/goals.md §3.1
  • paylab-api/src/payment/retry.ts:11–14
  • 팀장 승인
팀장이 승인한 이 한 문장을 A·B·C 모두 같은 버전으로 받습니다.ctx:item_policy_retry

3분이면 됩니다

샘플 팀 Paylab 은 결제 서비스를 만드는 가상의 팀입니다. 아래 네 화면을 차례로 보세요 — 전부 실제로 도는 화면입니다. 위의 [샘플 팀으로 둘러보기]를 누르면 같은 순서로 안내가 붙습니다.

정리 화면 — AI 가 찾은 충돌 카드와 사람의 결정 버튼
정리 화면 — AI 가 찾은 충돌 카드와 사람의 결정 버튼AI 가 찾은 충돌 3건이 카드로 서 있습니다. 문서끼리, 문서와 코드가 다르게 말하는 자리를 질문으로 올렸고, 결정 버튼은 사람 몫입니다./t/demo/p/paylab-api/review
Pack Explorer — 발행된 CLAUDE.md 와 각 줄의 출처
Pack Explorer — 발행된 CLAUDE.md 와 각 줄의 출처발행된 CLAUDE.md 를 열어 아무 문단이나 누르면, 그 문단이 어느 문서 몇 절·어느 코드 몇 줄에서 왔는지 보입니다./t/demo/p/paylab-api/packs
Roadmap — 근거로 채워지는 마일스톤과 완료 확인
Roadmap — 근거로 채워지는 마일스톤과 완료 확인마일스톤마다 완료 조건 3개 중 몇 개에 근거가 붙었는지 보입니다. 근거는 개발자의 AI 가 보고한 파일 경로이고, 완료 확인은 사람이 합니다./t/demo/p/paylab-api/roadmap
Sync 화면 — 기기마다 받은 버전
Sync 화면 — 기기마다 받은 버전기기 14대가 어느 버전을 받았는지 보입니다. 받은 파일이 공식 판과 정말 같은지 서버가 한 줄씩 대조하니 「적용됨」을 믿을 수 있습니다./t/demo/p/paylab-api/sync

위 캡처는 시안이 아니라, 자동 검사가 실제 앱을 띄워 매번 새로 찍은 화면입니다 — 낡은 그림이 남지 않습니다. (검사 스크립트: tools/walkthrough.ps1)

「CLAUDE.md 를 git 에 올리면 되지 않나요?」

CLAUDE.md
개발자의 AI(Claude Code)가 일을 시작하기 전에 읽는 팀 규칙 파일
git
코드를 보관하고 「무엇이 바뀌었나」를 남기는 저장소
레포
저장소 하나 — 보통 서비스 하나에 하나씩 있습니다
결정은 레포 밖에서 납니다

목표·정책은 문서와 회의에서 정해집니다. 그걸 CLAUDE.md 로 옮기는 일은 개발자 각자의 손에 맡겨져 있어서, 사람마다 다른 파일이 됩니다.

예를 들면「재시도는 5번까지」는 회의에서 정해졌는데, 그걸 파일로 옮긴 사람은 A 뿐입니다. B 의 파일에는 그 줄이 없습니다.

한 팀의 규칙은 여러 레포에 걸칩니다

결제 팀의 재시도 규칙은 API·웹훅·정산 레포에 똑같이 적용돼야 합니다. 레포마다 복사해 두면 어느 날 하나만 바뀝니다.

예를 들면결제 API·웹훅·정산, 저장소 셋에 같은 규칙을 복사해 두면 하나가 바뀌어도 나머지 둘은 모릅니다.

git 은 「왜」를 남기지 않습니다

변경 기록(diff)은 무엇이 바뀌었는지만 남깁니다. 누가 어떤 근거로 정했는지가 없으면, AI 도 사람도 그 규칙을 믿을 이유가 없습니다.

예를 들면「3 → 5 로 바뀜」은 남지만, 누가 어떤 회의에서 왜 그렇게 정했는지는 남지 않습니다.

ContextOps 는 흩어진 결정을 팀장이 승인한 한 벌로 만들고, 모든 팀원의 AI 에 같은 버전으로 꽂습니다.

어떻게 동작하나요

팀장은 브라우저에서 세 단계, 개발자는 명령 한 줄입니다.

얇은 클레이 판 다섯 장이 쌓여 있고 거기서 나온 검은 실들이 오른쪽의 「CLAUDE.md」 카드 한 장으로 모이는 그림 — 문서에서 항목을 뽑아 하나로 정리한다

가져와서 정리한다

흩어진 문서·회의·코드에서 팀이 지켜야 할 것을 모읍니다. 서로 어긋난 것은 카드로 물어봅니다.

목표 문서·회의록을 붙여 넣거나 질문 10개에 답하면, AI 가 규칙·마일스톤 후보를 뽑고 서로 어긋난 것을 찾아 질문으로 만듭니다. 결정은 사람이 합니다.

팀장 · 브라우저AI · 후보와 질문만
A·B·C 라 새겨진 클레이 카드 셋(각각 v1.1.0)이 한 줄로 서 있고 검은 실 하나가 셋을 같은 높이로 꿰뚫는 그림 — 같은 버전이 모두에게 닿는다

승인해서 발행한다

팀장이 승인한 것만, 모든 팀원의 AI 에 같은 버전으로 갑니다. 이제 누구에게 물어도 같은 답이 나옵니다.

팀장이 승인한 항목만 CLAUDE.md 한 벌로 묶여 버전이 붙습니다. 모든 팀원의 Claude Code 가 같은 버전을 받고, 받은 파일이 정말 같은지 확인표(해시)로 검증됩니다. 승인 뒤에는 AI 가 끼어들지 않습니다.

팀장 · 브라우저AI 없음 · 정해진 규칙대로
「Roadmap」이라 새겨진 긴 클레이 레일에 검은 조각이 왼쪽부터 삼분의 일 채워져 있고 옆에 확인 표시가 새겨진 작은 타일이 있는 그림 — 진행은 근거만큼 차고 완료는 사람이 확인한다

진행이 근거와 함께 보인다

각자의 AI 가 일을 마칠 때마다 「어느 계획의 무엇이었는지」를 근거와 함께 보고합니다. 그래서 계획이 어디까지 왔는지 보입니다.

개발자의 AI 가 작업을 마치면 어떤 파일을 고쳤는지 보고합니다. 로드맵은 마일스톤 단위로 채워지고, 완료 판정은 사람이 합니다.

개발자의 AI · Claude Code 안완료 확인 · 사람

AI 는 어디까지 쓰나요

AI 는 후보와 질문을 만듭니다. 결정은 사람이 하고, 배포는 AI 없이 정해진 규칙대로 돕니다.

문서를 항목 후보로 바꿉니다
AI후보를 뽑고 근거 위치를 단다사람승인 버튼을 누른다

붙여 넣은 문서에서 규칙·마일스톤 후보를 뽑고 근거 위치를 같이 답니다 (서버쪽 모델은 Gemini). 후보는 후보일 뿐, 승인 버튼은 사람 몫입니다.

서로 어긋난 결정을 찾아 묻습니다
AI충돌 카드로 질문을 올린다사람어느 쪽을 따를지, 아니면 보류할지 고른다

문서끼리, 또는 문서와 코드가 다르게 말하면 충돌 카드로 올립니다. 「지금 규칙 쪽이 맞음 · 옛 규칙 쪽이 맞음 · 둘 다 보류」처럼 어느 쪽을 따를지는 사람이 고릅니다.

승인 뒤에는 쓰지 않습니다
사람발행 버튼을 누른다AI 없음정해진 규칙대로만 파일을 만들고 나눈다

발행과 배포는 AI 없이 정해진 규칙대로만 돕니다. 같은 승인본은 언제나 똑같은 파일이 되고, 어느 기기가 무엇을 받았는지 확인표(해시)로 검증됩니다.

개발자의 AI 는 보고만 합니다
AI고친 파일 경로를 근거로 올린다사람완료를 확인한다

작업 끝에 어떤 경로를 고쳤는지 근거를 올립니다. 완료를 스스로 선언하지 못하고, 사람이 확인해야 완료가 됩니다.

개발자 쪽에서는 이렇게 보입니다

Claude Code 를 열면 설치된 플러그인이 새 버전을 알리고, /contextops:sync 한 줄로 받습니다. 작업을 마치면 AI 가 근거와 함께 보고하고, 오른쪽 Roadmap 이 같은 순간 바뀝니다.

Claude Code
개발자가 쓰는 AI 코딩 도구 — 터미널(검은 창) 안에서 돕니다
플러그인
Claude Code 에 끼우는 ContextOps 의 작은 부품 — 새 버전을 알리고 한 줄로 받게 합니다
Roadmap
계획이 어디까지 왔는지 근거와 함께 보는 화면
훅(Hook)
Claude Code 를 열고 닫을 때 플러그인이 자동으로 도는 작은 장치 — 새 판을 알리고 작업을 보고할 뿐, 파일은 바꾸지 않습니다
ContextOps: 적용 v0.9.0 · 공식 v1.0.0
  파일 8개 · /contextops:sync 로 갱신한다
  Hook은 파일을 변경하지 않습니다.
> /contextops:sync
v0.9.0 → v1.0.0 · 파일 8개를 적용했다
  ✓ .claude/rules/architecture.md
  ✓ .claude/rules/domain-payment.md
  ✓ .claude/rules/domain-refund.md
  ✓ .claude/rules/scoped-src-webhook.md
  ✓ .claude/rules/workflow.md
  ✓ .cursor/rules/contextops.mdc
  ✓ AGENTS.md
  ✓ CLAUDE.md
  원본은 .contextops/backups/20260905T195356Z-0.9.0-to-1.0.0/ 에 남겼다
  서버에 applied 로 보고했다
> /contextops:progress --milestone PL-M1 --criterion "PSP 호출 재시도 정책이 공용 모듈 한 곳에만 있다" --evidence src/psp/psp.client.ts:18-46 --summary "재시도 로직을 psp.client 한 곳으로 모았다"
보고했다 — PL-M1 · criterion_done · 근거 1건 · v1.0.0
Roadmap · 같은 시각
PL-M1재시도·타임아웃 정리
근거 1 / 3
  • 근거 있음PSP 호출 재시도 정책이 공용 모듈 한 곳에만 있다
  • 근거 없음모든 외부 호출에 타임아웃이 걸려 있다
  • 근거 없음재시도 횟수와 간격이 설정값으로 빠져 있다
보고 1건 · v1.0.0 기준
무슨 일이 일어나나
  1. 개발자가 Claude Code 를 열면 플러그인이 알립니다 — 지금 적용된 판은 v0.9.0, 팀의 공식 판은 v1.0.0, 파일 8개.
  2. /contextops:sync 한 줄로 받습니다 — 파일 8개가 v1.0.0 으로 바뀌고, 원본은 백업에 남고, 서버에는 「적용됨」이라고 보고합니다.
  3. 작업을 마친 AI 가 /contextops:progress 로 보고합니다 — 어느 마일스톤의 어느 조건을, 어떤 파일 몇 번째 줄이 근거인지.
  4. 오른쪽 Roadmap 의 「근거 0 / 3」이 「1 / 3」이 됩니다. 완료 확인은 사람이 합니다 — AI 가 스스로 완료를 선언하지 않습니다.

지어낸 대사가 아니라, 배포되는 플러그인을 실제로 돌려 남긴 출력입니다. 사이의 작업은 생략했고, 타이핑과 줄 사이 간격만 읽을 수 있게 늘렸습니다. (녹화 원본: fixtures/replay/sync.json)

서버는 코드를 보지 않습니다

서버로 올라가는 것은 정해진 모양(스키마)을 통과한 항목뿐입니다. 코드 본문·비밀값·개인 메모리·대화는 어떤 경우에도 서버로 가지 않고, 개발자 쪽에서 자동으로 도는 훅은 파일을 바꾸지 않습니다.

서버가 받는 것절대 받지 않는 것
팀·프로젝트 이름과 ID팀 이름과 프로젝트 이름저장소 코드 본문소스 코드 그 자체
정리된 항목 (제목·규칙·마일스톤)정리된 규칙 문장환경변수 · 비밀값(secret)비밀번호·API 키 등 접속 정보
팀장이 직접 등록한 문서 원문팀장이 손수 붙여 넣은 것만개인 설정 파일(CLAUDE.local.md)개인이 따로 쓰는 메모
파일 경로 · 줄 번호 · 커밋 번호「몇 번째 줄」이라는 위치 표시만Claude 의 개인 메모리(Auto Memory)AI 가 혼자 쌓아 둔 기억
버전 · 확인표(해시)몇 판인지 · 내용이 같은지Claude 대화 내용AI 와 주고받은 말 전부

설치는 명령 두 줄, 그 다음은 Claude Code 안에서

개발자만 합니다. 팀장은 설치할 것이 없습니다 — 브라우저로 끝납니다.

  1. 터미널
    claude plugin marketplace add rhdqngusanr/contextops
    플러그인 저장소를 등록합니다
  2. 터미널
    claude plugin install contextops
    자동으로 도는 작은 장치(훅) · Claude Code 안의 명령(Skill) · 실행 도구(CLI) 가 함께 깔립니다
  3. Claude Code 안
    /contextops:setup <Sync 화면이 준 인자>
    Claude Code 안에서. 웹의 Sync → [기기 추가] 가 이 줄을 통째로 줍니다 — 토큰은 저장소 밖에 둡니다
  4. Claude Code 안
    /contextops:init
    Claude Code 안에서 한 번. 저장소를 훑어 첫 항목을 올립니다

Node 22 이상이 필요합니다 (node -v) — 훅과 CLI 가 Node 로 돕니다.

그 다음은 팀장이 웹에서 승인하고, 개발자는 /contextops:sync 로 받습니다.

ContextOps — 팀의 기억과 AI의 기억을 한 방향으로