<div align="center">
<br>
<img src="https://raw.githubusercontent.com/hahwul/gori/HEAD/docs/static/images/gori-wallpaper.webp"><p>빠르고 키보드 기반의 터미널용 HTTP 인터셉팅 프록시 및 펜테스팅 도구로, 인간과 AI 에이전트 모두를 위해 구축되었습니다.</p>
</div >
<p align="center">
<a href="https://github.com/hahwul/gori/blob/main/.github/CONTRIBUTING.md">
<img src="https://img.shields.io/badge/CONTRIBUTIONS-WELCOME-000000?style=for-the-badge&labelColor=black"></a>
<a href="https://github.com/hahwul/gori/releases">
<img src="https://img.shields.io/github/v/release/hahwul/gori?style=for-the-badge&color=black&labelColor=black&logo=web"></a>
<a href="https://crystal-lang.org">
<img src="https://img.shields.io/badge/Crystal-000000?style=for-the-badge&logo=crystal&logoColor=white"></a>
</p>
<p align="center">
<a href="#installation">설치(Installation)</a> •
<a href="#usage">사용법(Usage)</a> •
<a href="docs/">문서화(Documentation)</a> •
<a href=".github/CONTRIBUTING.md">기여(Contributing)</a>
</p>
gori (고리 — 한국어로 ring, link, loop를 의미)는 클라이언트와 대상 사이에 위치하여 모든 요청과 응답을 *흐름(flow)*으로 포착합니다. 이 흐름은 HTTP/1.1, HTTP/2, WebSocket, gRPC, SSE 전반에 걸쳐 리플레이(replay), 퍼징(fuzz), 스캔할 수 있으며, HTTP/1.1 및 HTTP/2에서 인-플라이트(in flight)로 가로챌 수 있습니다. 다양한 표면을 가로지르는 핵심 평가 작업들은 동일한 엔진을 사용하며, 이러한 워크플로우는 gori run과 MCP를 통해서도 사용할 수 있어 스크립트와 AI 에이전트가 동일한 참여를 유도할 수 있습니다. capability matrix에서는 프로토콜 및 표면 제한을 명시적으로 이름 붙이고 있습니다.
gori TUI — the History tab listing captured HTTP flows
<details>
<summary><strong >기능(Features)</strong></summary>
캡처 및 가로채기 (Capture & Intercept)
- HTTP/1.1, HTTP/2, WebSocket, gRPC 및 SSE용 캡처 프록시
- HTTP/1.1 및 HTTP/2 (gRPC 포함)에서 인플라이트(in flight) 중 일시 정지(hold), 편집(edit), 전달(forward), 또는 드롭할 수 있으며 — HTTP/1.1 WebSocket의 경우 메시지별로 가능하며,
proto:ws로 옵트인합니다.
- 모든 플로우에 대한 검색 가능한 기록과 필터링을 위한 쿼리 언어
- 범위 규칙(Scope rules), 호스트 이름 재정의(hostname overrides), 일치 및 대체(match & replace)
리플레이, 퍼징 및 디코딩 (Replay, Fuzz & Decode)
- 요청을 생성하고 재전송하기 위한 리피터 작업대 (WebSocket 및 gRPC 포함)
- 네 가지 공격 모드를 가진 인트루더 스타일 퍼저(Fuzzer)
- 서명된 세션 쿠키를 포함하여 체인형 인코딩/디코딩/해싱을 위한 디코더 파이프라인
- 두 플로우의 차이를 비교하는 나란히 보기 비교기(Side-by-side Comparer)
- 인라인 JWT / SAML / GraphQL / protobuf / MessagePack / CBOR 디코딩, 헥스 보기(hex view), 및 예쁘게 출력하기(pretty-printing)
- 모든 요청을 cURL, Python,
fetch, Go, httpie 또는 CSRF PoC로 복사
발견 및 스캔 (Discover & Scan)
- 수동(passive) 및 가벼운 접촉의 능동 취약점 스캐너인 프로브(Probe)
- 숨겨진 매개변수 발견을 위한 파라미터 마이너(Param Miner)
- 권한 행렬(Authorize matrix): 여러 신원(identity) 하에서 하나의 요청을 재전송하여 접근 제어 오류를 찾습니다.
- 세션, CSRF 및 리셋 토큰의 무작위성을 평가하는 시퀀서(Sequencer)
- Flask / Rack / Django 세션 쿠키를 검증하고, 크랙하고, 재서명하기 위한 쿠키 작업대
- 블라인드 SSRF, XXE 및 아웃 오브 밴드(out of band) 인젝션을 확인하는 OAST 컬렉터
- Markdown / JSON / SARIF 내보내기를 통한 발견 사항 분류(triage)
키보드 우선 워크플로우 (Keyboard-first Workflow)
- 커맨드 팔레트(
Ctrl-P)와 컨텍스트 스페이스 메뉴(Space)를 통해 모든 작업에 접근합니다.
- 재할당 가능한 단축키(hotkeys) 및 전환 가능한 색상 테마
- 마우스 지원, 다중 라인 편집, 그리고 이동할 줄로 이동(go-to-line navigation)
헤드리스 및 스크립팅 (Headless & Scriptable)
gori run은 비대화형 사용을 위해 핵심 프로젝트 및 테스트 워크플로우를 노출합니다.
- MCP 서버(
gori mcp)는 해당 워크플로우를 AI 에이전트에게 노출합니다 (캡처 프록시를 시작하지 않음).
설치 (Installation)
빠른 설치 (macOS / Linux)
curl -fsSL https://gori.hahwul.com/install.sh | bash
나중에 gori update로 업데이트할 수 있습니다 (바이너리 설치의 자체 업데이트; Chocolatey / Homebrew / Snap / AUR에 대한 패키지 관리자 지침 참고).
Windows에서는 Chocolatey를 사용하거나, 릴리스(Releases)에서 gori-windows-x86_64.exe를 다운로드하여 이름을 gori.exe로 변경한 후 PATH에 넣어주세요.
Chocolatey
Chocolatey 패키지는 Windows x86_64 바이너리를 설치합니다:
Homebrew
brew tap hahwul/gori
brew install gori
Nix
이 저장소는 flake 형태이므로 설치 과정 없이 실행됩니다:
nix run github:hahwul/gori
nix profile install github:hahwul/gori
소스에서 빌드 (From source)
Crystal >= 1.21.0 및 pkg-config가 필요합니다.
git clone https://github.com/hahwul/gori.git
cd gori
shards build --release
바이너리는 bin/gori에 작성됩니다.
시스템 라이브러리(Brotli / Zstd), 오프라인 빌드 및 기타 옵션에 대해서는 설치 가이드를 참조하세요.
사용법 (Usage)
gori는 세 가지 진입점(entry points) 뒤에서 하나의 엔진과 하나의 프로젝트를 실행합니다. 직접 구동하거나, AI 에이전트에게 넘기거나, 스크립트로 작성할 수 있으며, 제어권을 누가 가지고 있는지에 맞는 방식을 선택하세요.
One engine, three ways in: you through the TUI, your AI agent through gori mcp, your scripts through gori run
인간 사용자를 위한 경우: gori (TUI)
프록시를 시작하고 대화형 터미널 UI(TUI)를 엽니다. 서브 커맨드가 필요 없습니다:
기본적으로 프록시는 127.0.0.1:8070에서 수신하며, 짧은 첫 실행 마법사(wizard)가 테마를 선택하고 해당 포트가 사용 중일 때 전역 기본값(global default) 바인딩을 설정합니다 (프로젝트는 나중에 자체적으로 고정할 수 있습니다). HTTPS를 가로채기(intercept)하려면 gori의 루트 CA를 신뢰해야 합니다. 가장 빠른 방법은 팔레트의 브라우저 열기(Open browser) (Ctrl-P)이며, 이는 이미 신뢰되고 프록시된 브라우저를 실행합니다. 캡처된 트래픽은 **히스토리(History)**에 저장되며, 커맨드 팔레트는 Ctrl-P를, 컨텍스트 액션은 Space를 누르세요.
gori --listen 0.0.0.0 --port 8080
AI 에이전트를 위한 기능: gori mcp (MCP 서버)
gori mcp는 Model Context Protocol 서버입니다. AI 클라이언트가 stdio를 통해 이를 실행하고(spawn), 사용자의 트래픽을 읽으며, 사용자가 사용하는 것과 동일한 도구를 구동합니다. gori가 에이전트의 설정을 작성하도록 한 후, 클라이언트를 다시 시작하세요:
gori mcp --install-claude-code
gori mcp --install-claude
gori mcp --install-codex
...
Pi는 pi-mcp-adapter와 같은 MCP 어댑터가 필요합니다 (pi install npm:pi-mcp-adapter). 설치 프로그램은 PI_CODING_AGENT_DIR이 설정된 경우 이를 존중합니다.
신뢰할 수 없는 에이전트에게 프로젝트를 전달하려면 --read-only 플래그를 추가하세요 (도구만 읽고, 라이브 요청은 없음). AI 설정 가이드에서는 에이전트를 연결하고 첫 번째 요청을 실행하는 방법을 안내합니다.
스크립트를 위한 기능: gori run (헤드리스 CLI)
gori run은 대화형 UI 없이 동일한 핵심 프로젝트 및 테스트 엔진을 노출합니다. 스크립팅과 CI(지속적 통합)를 위해 구축되었지만, 수동으로 또는 에이전트의 셸에서 사용해도 좋습니다:
gori run history --format json
gori run sitemap
gori run --help
세 가지 진입점 모두 동일한 프로젝트 데이터베이스를 공유합니다. 전체 가이드는 문서(documentation)를 참조하거나 앱에서 도움말(Help) 탭을 여세요.
개발
shards build
shards run gori
undefined BrotliDecoder* 심볼로 링크에 실패하는 경우, libbrotlidec가 누락되었거나 pkg-config가 이를 찾을 수 없는 것입니다. 시스템 라이브러리 및 -Dwithout_native_codecs 오프라인 빌드에 대해서는 설치 가이드를 참조하세요.
기여자
The people who built gori, with what each of them contributed
기여는 환영합니다. 설정 방법은 CONTRIBUTING.md를 참조하세요.
모든 종류의 도움이 커밋(commit)으로 남는 것은 아니므로, 각 이름 아래 줄은 해당 기여가 무엇이었는지 명시합니다: 위에 있는 버그 보고 및 재현(reproductions)을 통해 gori가 스스로 발견하지 못했을 것들을 찾아냈습니다. 누군가에게 공로를 인정하려면 .github/contributor-mural.yml 파일을 수정하세요.
왜 "gori"인가?
gori(고리)는 한국어로 링, 링크 또는 루프를 의미하며—이 도구가 위치하는 바로 그 지점입니다. 클라이언트와 대상 사이의 루프 안에서 통과하는 모든 요청을 포착하고 재구성합니다.
루프 안에 자리 잡다.