tripwire은(는) 무엇을 하나요?
Tripwire는 경쟁사가 중요한 페이지를 변경할 때 이를 알려주고, 어떻게 대응할지 조언합니다.
스캐너는 scripts/tripwire.py(Python 3.9+, pyyaml 필요, API 키 불필요)입니다.
모든 데이터는 현재 프로젝트의 감시 목록 watch/targets.yml 옆에 보관됩니다:
watch/targets.yml 감시할 대상
watch/snapshots/*.txt 각 페이지의 마지막 읽을 수 있는 텍스트
watch/data/changes.json 모든 변경 이벤트 (최신순)
watch/data/status.json 마지막 스캔의 페이지별 상태
watch/reports/latest.md 최신 스캔 또는 다이제스트의 Markdown 보고서
SKILL_DIR은 이 파일이 있는 디렉터리를 의미합니다.
1. 감시 목록이 있는지 확인
watch/targets.yml이 존재하지 않으면 python SKILL_DIR/scripts/tripwire.py init을 실행한 후, 사용자에게 감시할 경쟁사와 페이지를 물어보고 파일에 작성하세요. 좋은 페이지: 홈페이지, 가격, 변경 로그/릴리스 노트, 채용, "vs" 또는 비교 페이지. 공식 URL을 사용하고, 로드되는지 확인하세요.
대상을 추가하거나 제거하려면 watch/targets.yml을 편집하세요(페이지를 일시 중지하려면 enabled: false로 설정).
2. 데이터 가져오기
사용자가 요청한 내용에 따라 선택하세요:
| 질문 | 명령어 |
|---|---|
| "무엇이 변경되었는지" / "스캔 실행" (오늘 스캔 아직 없음) | python SKILL_DIR/scripts/tripwire.py scan |
| 특정 경쟁사 하나 | python SKILL_DIR/scripts/tripwire.py scan --only "이름" |
| "이번 주" / 다이제스트 | python SKILL_DIR/scripts/tripwire.py report --days 7 |
| "지난 달" | python SKILL_DIR/scripts/tripwire.py report --days 30 |
리포지토리에 오늘 날짜의 스캔이 이미 있다면(watch/data/status.json의 last_run 확인), 스캔을 건너뛰고 보고서를 읽으세요. 페이지의 첫 번째 스캔은 기준선만 기록합니다. 그 사실을 알리고, 다음 스캔부터 변경 사항이 나타난다고 말하세요.
그런 다음 watch/reports/latest.md(또는 출력된 보고서)를 읽으세요. 강조할 변경 사항이 있으면 watch/data/changes.json에서 전체 added/removed 라인을 확인하여 정확하게 인용하세요.
3. GTM 리포트 작성
사용자의 언어로 응답하세요. 간결하게 유지하고 중요한 것부터 먼저 제시하세요:
- 핵심 변화 (최대 5개, 가장 중요한 순서). 각 항목: 경쟁사, 변경된 내용을 평이한 말로, 구체적인 세부 사항 포함(이전 → 새 가격, 새 기능 이름, 새 헤드라인). 페이지 링크를 포함하세요.
- 중요성: 각 항목당 한 줄. 가격 및 패키징 > 신제품/출시 > 포지셔닝/헤드라인 > 채용 신호 > 사소한 텍스트 수정 순으로 중요도 평가.
- 대응 방안: 1~3가지 구체적인 조치(배틀카드 업데이트, 자사 가격 페이지에 답변, 영업팀에 전달, 비교 포스트 게시). 실행할 가치가 있는 것이 없으면 건너뛰세요.
- 커버리지: 읽을 수 없었던 페이지가 있다면 한 줄로 언급.
규칙:
- diff에 표시된 것만 보고하세요. 동기를 사실로 추측하지 말고, 추론할 때는 "가능성이 높습니다"라고 말하세요.
- 회전식 추천사, 카운터, 날짜, 쿠키 텍스트는 노이즈로 간주하여 보고하지 마세요. 페이지가 매 스캔마다 노이즈가 많다면
watch/targets.yml에 해당 페이지의ignore정규식을 추가하겠다고 제안하세요. - "변경 사항 없음"도 유효한 답변입니다. 한 줄로 말하고 커버리지를 언급하세요.
읽을 수 없는 페이지 문제 해결
HTTP Error 403: 사이트가 봇을 차단합니다. 동일한 정보를 제공하는 다른 공식 URL(문서나 도움말 센터 페이지, RSS 피드)을 시도해 보세요. 그렇지 않으면enabled: false로 설정하고 이유를 설명하는 주석을 추가하세요.no readable text (JS-only page?): 브라우저에서 렌더링되는 페이지입니다. 정적 대안(/대신/pricing, 블로그 피드, 사이트맵 페이지)을 찾아보세요.- 잘못되었거나 이동된 URL: 공식 페이지를 찾아
watch/targets.yml을 업데이트하세요.