์—…๋ฐ์ดํŠธ๋กœ ๋Œ์•„๊ฐ€๊ธฐ
New releaseSep 11, 2026

foxguard v0.13.0

๋น ๋ฅธ ๋ฒ”์šฉ ์ฝ”๋“œ ๋ณด์•ˆ ์Šค์บ๋„ˆ๋กœ, Rust๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ธฐ๋Šฅ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค: 14๊ฐœ ์–ธ์–ด ์ง€์›, ๋ถ„๋ฅ˜๋ฅผ ์œ„ํ•œ TUI, ๋น„๋ฐ€ ์ •๋ณด, ์–‘์ž ์ดํ›„ ๊ฐ์‚ฌ, ์ฐจ์ด ์ธ์‹ ์Šค์บ” ๋“ฑ ๐“ƒฅ

๊ณต์œ 

foxguard

foxguard

์ฝ”๋“œ, ์‹œํฌ๋ฆฟ, ์˜์กด์„ฑ, ์•”ํ˜ธํ™” ์œ„ํ—˜์„ ์œ„ํ•œ ๋น ๋ฅธ ๋กœ์ปฌ ๋ณด์•ˆ ์Šค์บ๋‹.
์˜คํ”ˆ ์‚ฌ์ด๋ฒ„๋ณด์•ˆ ํ•˜๋„ค์Šค์ธ 0sec์— ํ†ตํ•ฉ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

CI foxguard: clean crates.io npm PyPI Install GitHub App

npx foxguard .

foxguard scan demo

์™œ ํ•„์š”ํ•œ๊ฐ€

  • ย  12๊ฐœ ์†Œ์Šค ์–ธ์–ด์— ๊ฑธ์นœ 200๊ฐœ ์ด์ƒ์˜ ๋‚ด์žฅ ๊ทœ์น™๊ณผ ๊ตฌ์„ฑ ๋ฐ ๋งค๋‹ˆํŽ˜์ŠคํŠธ ๊ฒ€์‚ฌ
  • ย  14๊ฐœ ์–ธ์–ด์— ๋Œ€ํ•œ ํ…Œ์ธํŠธ ์ถ”์ , Python, JavaScript, Go, Java, Ruby, PHP, C#, Kotlin์— ๋Œ€ํ•œ ํŒŒ์ผ ๊ฐ„ ๋ถ„์„ ์ง€์›
  • ย  ๋น ๋ฅธ ๋กœ์ปฌ ๋ฐ CI ์Šค์บ”, "์ด ๋ธŒ๋žœ์น˜๊ฐ€ ๋ฌด์—‡์„ ์ถ”๊ฐ€ํ–ˆ๋Š”๊ฐ€?"๋ฅผ ์œ„ํ•œ diff ๋ชจ๋“œ ์ง€์›
  • ย  ์‹œํฌ๋ฆฟ ์Šค์บ๋‹, OSV ๊ธฐ๋ฐ˜ ์˜์กด์„ฑ ์Šค์บ๋‹, ํฌ์ŠคํŠธ ์–‘์ž ์•”ํ˜ธํ™” ๊ฐ์‚ฌ
  • ย  ๊ณต๊ฐœ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์˜ ์•ฝ 98%๋ฅผ ๋กœ๋“œํ•˜๋Š” Semgrep/OpenGrep ํ˜ธํ™˜ YAML ๋ธŒ๋ฆฌ์ง€ (์ปค๋ฒ„๋ฆฌ์ง€ ๋ณด๊ณ ์„œ)
  • ย  ํ„ฐ๋ฏธ๋„, JSON, SARIF, CycloneDX 1.6 CBOM, Semgrep ํ˜ธํ™˜ JSON ์ถœ๋ ฅ

์„ค์น˜

npx foxguard .                                      # ์„ค์น˜ ๋ถˆํ•„์š”
pipx install foxguard                               # PyPI์˜ ์‚ฌ์ „ ๋นŒ๋“œ๋œ CLI
curl -fsSL https://foxguard.dev/install.sh | sh     # ์‚ฌ์ „ ๋นŒ๋“œ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ (macOS/Linux)
cargo install foxguard                              # ์†Œ์Šค์—์„œ ์„ค์น˜

๋…๋ฆฝ ์‹คํ–‰ํ˜• ๋ฐ”์ด๋„ˆ๋ฆฌ ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์€ GitHub ๋ฆด๋ฆฌ์Šค ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ checksums.txt์™€ ๋Œ€์กฐํ•˜์—ฌ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค. ๋ฆด๋ฆฌ์Šค ๋ฐ”์ด๋„ˆ๋ฆฌ๋Š” GitHub ์•„ํ‹ฐํŒฉํŠธ ์ฆ๋ช…๋„ ๊ฒŒ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜๋™ ๊ฒ€์ฆ์—๋Š” gh attestation verify๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฆด๋ฆฌ์Šค ์ถœ์ฒ˜๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

PyPI ํœ ์€ Linux glibc 2.28+ (x86_64/ARM64), macOS (Intel/Apple Silicon), Windows x86_64์—์„œ Python 3.9+๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด Python ๊ฐ€์ƒ ํ™˜๊ฒฝ์—์„œ๋Š” python -m pip install foxguard๋ฅผ ๋Œ€์‹  ์‚ฌ์šฉํ•˜์„ธ์š”. ์ด๋“ค์€ Rust ์ปดํŒŒ์ผ๋Ÿฌ๋‚˜ ๋Ÿฐํƒ€์ž„ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋‹ค์šด๋กœ๋“œ ์—†์ด ๋„ค์ดํ‹ฐ๋ธŒ CLI๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. Python API๋Š” ์ œ๊ณต๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Alpine/musl ์‚ฌ์šฉ์ž๋Š” ๋…๋ฆฝ ์‹คํ–‰ํ˜• Linux ๋ฆด๋ฆฌ์Šค ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

GitHub Action:

- uses: 0sec-labs/foxguard/[email protected]
  with:
    path: .
    severity: medium
    fail-on-findings: "true"
    upload-sarif: "true"

pre-commit:

repos:
  - repo: https://github.com/0sec-labs/foxguard
    rev: v0.14.0
    hooks:
      - id: foxguard

ํ†ตํ•ฉ: GitHub App, VS Code, Claude Code ํ”Œ๋Ÿฌ๊ทธ์ธ, MCP ์„œ๋ฒ„.

ํ˜ธ์ŠคํŒ…๋œ GitHub App ์šด์˜

foxguard-github-app์€ ์ค„๋ฐ”๊ฟˆ์œผ๋กœ ๊ตฌ๋ถ„๋œ JSON ๋กœ๊ทธ๋ฅผ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ์™„๋ฃŒ ๋ฐ ์‹คํŒจํ•œ ์Šค์บ”์€ event=foxguard.scan.completed์™€ event=foxguard.scan.failed๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ƒ๊ด€ ๊ด€๊ณ„๋ฅผ ์œ„ํ•œ ์ „๋‹ฌ, ์„ค์น˜, ์ €์žฅ์†Œ, PR, ์ปค๋ฐ‹, ๊ธฐ๊ฐ„, usage_scope ํ•„๋“œ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์‹๋ณ„์ž๋Š” ๋ฉ”ํŠธ๋ฆญ ๋ ˆ์ด๋ธ”์ด ์•„๋‹Œ ๋กœ๊ทธ ํ•„๋“œ๋กœ ์œ ์ง€ํ•˜์„ธ์š”.

FOXGUARD_INTERNAL_ACCOUNTS๋ฅผ ์ž์‹ ์˜ GitHub ๊ณ„์ • ๋ฐ ์กฐ์ง์˜ ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„๋œ ๋ชฉ๋ก์œผ๋กœ ์„ค์ •ํ•˜์„ธ์š”. ์ผ์น˜ ์—ฌ๋ถ€๋Š” ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์†Œ์œ ์ž๋Š” external๋กœ ๋ถ„๋ฅ˜๋˜๋ฉฐ, ๋ชฉ๋ก์ด ์„ค์ •๋˜์ง€ ์•Š์•˜๊ฑฐ๋‚˜ ์†Œ์œ ์ž๊ฐ€ ๋ˆ„๋ฝ๋œ ๊ฒฝ์šฐ unknown์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์™ธ๋ถ€ ํ™œ๋™์€ ์œ ๋ฃŒ ๊ณ ๊ฐ์˜ ์ฆ๊ฑฐ๊ฐ€ ์•„๋‹ˆ๋ฉฐ, ์Šค์บ”์€ ์‚ฌ๋žŒ์ด ์•„๋‹™๋‹ˆ๋‹ค.

์„ค์น˜ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋Š” ์‹œ์ž‘ ์‹œ ๋ฐ ๋งค์‹œ๊ฐ„ GitHub์˜ App ์„ค์น˜ API์˜ ๋ชจ๋“  ํŽ˜์ด์ง€์™€ ๋Œ€์กฐํ•˜์—ฌ ์กฐ์ •๋ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กœ ๊ณ ์นจ ์‹คํŒจ ์‹œ ๊ธฐ์กด ์ƒํƒœ๊ฐ€ ์œ ์ง€๋˜๋ฉฐ, ๋™์‹œ ์›นํ›…์ด ์šฐ์„ ํ•ฉ๋‹ˆ๋‹ค. ํฌ์†Œํ•œ ์›นํ›… ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋Š” ์•Œ๋ ค์ง„ ๊ณ„์ • ์„ธ๋ถ€ ์ •๋ณด์™€ ๊ด€์ฐฐ๋œ ์ €์žฅ์†Œ ์ด๋ฆ„์„ ๋ณด์กดํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ด๋ฆ„์€ ์„ค์น˜์˜ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ์ €์žฅ์†Œ์— ๋Œ€ํ•œ ์™„์ „ํ•œ ์ธ๋ฒคํ† ๋ฆฌ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

FOXGUARD_INSTALLATIONS_PATH์™€ FOXGUARD_PULL_REQUEST_JOBS_PATH๋ฅผ ์˜๊ตฌ ์ €์žฅ์†Œ์— ์œ ์ง€ํ•˜์„ธ์š”. ์Šค์บ” ์‹คํŒจ์™€ ํ•จ๊ป˜ foxguard.installations.reconcile_failed๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜์„ธ์š”. foxguard.installations.reconciled๋Š” ์„ฑ๊ณต์ ์ธ ์ƒˆ๋กœ ๊ณ ์นจ ํ›„ ์ด ์„ค์น˜ ์ˆ˜์™€ ๋‚ด๋ถ€/์™ธ๋ถ€/์•Œ ์ˆ˜ ์—†๋Š” ์„ค์น˜ ์ˆ˜๋ฅผ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค. FOXGUARD_PR_WORKERS๋Š” ์ธก์ •๋œ ์Šค์บ๋„ˆ ์ตœ๋Œ€ ๋ฉ”๋ชจ๋ฆฌ์™€ ์ปจํ…Œ์ด๋„ˆ ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ์— ๋งž๊ฒŒ ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•˜์„ธ์š”. ์ž์‹ ํ”„๋กœ์„ธ์Šค์˜ OOM ์ข…๋ฃŒ๋Š” ํ˜ธ์ŠคํŒ…๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์žฌ์‹œ์ž‘ํ•˜์ง€ ์•Š๊ณ  ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋น ๋ฅธ ์‹œ์ž‘

foxguard .                              # ๋ชจ๋“  ํ•ญ๋ชฉ ์Šค์บ”
foxguard diff main .                    # main ๋Œ€๋น„ ์ƒˆ๋กœ์šด ๋ฐœ๊ฒฌ๋งŒ
foxguard tui .                          # ๋Œ€ํ™”ํ˜• ํ„ฐ๋ฏธ๋„ ๊ฒ€ํ† 
foxguard secrets .                      # ์œ ์ถœ๋œ ์ž๊ฒฉ ์ฆ๋ช… ๋ฐ ํ‚ค
foxguard sca .                          # OSV์˜ ์˜์กด์„ฑ ์ทจ์•ฝ์ 
foxguard pqc .                          # ํฌ์ŠคํŠธ ์–‘์ž ์•”ํ˜ธํ™” ๊ฐ์‚ฌ
foxguard --format sarif . > results.sarif
foxguard --format semgrep-json .        # Semgrep CLI ํ˜ธํ™˜ JSON

foxguard --fix src/ ๋˜๋Š” foxguard --fix src/app.py๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง€์›๋˜๋Š” ํ…Œ์ธํŠธ ์ˆ˜์ •์„ ์ œ์ž๋ฆฌ์—์„œ ์ ์šฉํ•˜์„ธ์š”. ๋Œ€์ƒ์€ ํ‘œ์ค€ ์Šค์บ” ๋””๋ ‰ํ„ฐ๋ฆฌ ๋˜๋Š” ์„ ํƒํ•œ ํŒŒ์ผ๊ณผ ๋Œ€์กฐํ•˜์—ฌ ํ™•์ธ๋˜๋ฉฐ, ํ•ด๋‹น ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚œ ๋ฐœ๊ฒฌ์€ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค. Python ๋ช…๋ น ์ฃผ์ž… ์ˆ˜์ •์€ ํ•„์š”ํ•  ๋•Œ import subprocess๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉฐ, ๋ชจ๋“ˆ docstring๊ณผ future import๋ฅผ ๋ณด์กดํ•ฉ๋‹ˆ๋‹ค. ์ปค๋ฐ‹ํ•˜๊ธฐ ์ „์— ์ƒ์„ฑ๋œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฒ€ํ† ํ•˜์„ธ์š”.

๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ ์Šค์บ๋„ˆ์˜ ํŒŒ์ผ ์ฝ๊ธฐ, ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ, ๋””๋ ‰ํ„ฐ๋ฆฌ ์ˆœํšŒ ์‹คํŒจ๋Š” ์„ฑ๊ณต์ ์ธ ๋ณด๊ณ ์„œ๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ๋ฒ ์ด์Šค๋ผ์ธ์„ ๋ฎ์–ด์“ฐ๋Š” ๋Œ€์‹  ์ข…๋ฃŒ ์ฝ”๋“œ 2๋กœ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค. ์˜๋„์ ์ธ ์ œ์™ธ์™€ ์ง€์›๋˜์ง€ ์•Š๊ฑฐ๋‚˜ ๋ฐ”์ด๋„ˆ๋ฆฌ์ด๊ฑฐ๋‚˜ ํฌ๊ธฐ๊ฐ€ ํฐ ํŒŒ์ผ์€ ๊ฑด๋„ˆ๋›ฐ๊ธฐ๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ์Šค์บ” ์ปค๋ฒ„๋ฆฌ์ง€๋ฅผ ํ™•์ธํ•  ๋•Œ ๊ฑด๋„ˆ๋›ด ํŒŒ์ผ ์•Œ๋ฆผ์„ ๊ฒ€์‚ฌํ•˜์„ธ์š”.

ํ„ฐ๋ฏธ๋„ ๊ฒ€ํ† 

foxguard tui .๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ํ™”์‚ดํ‘œ ๋˜๋Š” Tab์œผ๋กœ Scan, Diff, Secrets, PQC๋ฅผ ์„ ํƒํ•˜์„ธ์š”. Diff ๋ชจ๋“œ์—์„œ๋Š” Enter๋ฅผ ๋ˆ„๋ฅด๊ธฐ ์ „์— ๋Œ€์ƒ ๋ธŒ๋žœ์น˜๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”. ๋„“์€ ํ„ฐ๋ฏธ๋„์€ ๋ฐœ๊ฒฌ ํ•ญ๋ชฉ์„ ์„ธ๋ถ€ ์ •๋ณด ์˜†์— ํ‘œ์‹œํ•˜๊ณ , ์ž‘์€ ํ„ฐ๋ฏธ๋„์€ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์„ธ๋ถ€ ์ •๋ณด ๋ณด๊ธฐ๊ฐ€ ์žˆ๋Š” ๋ชฉ๋ก์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์†Œ์Šค ์ปจํ…์ŠคํŠธ, ๋ฐ์ดํ„ฐ ํ๋ฆ„, ์ˆ˜์ • ์‚ฌํ•ญ์€ ๋ฐœ๊ฒฌ ํ•ญ๋ชฉ์ด ์ œ๊ณตํ•˜๋Š” ๊ฒฝ์šฐ ํ•ญ์ƒ ์Šคํฌ๋กคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ—ค๋”๋Š” ์Šค์บ” ํ†ต๊ณ„์™€ ๋ฒ ์ด์Šค๋ผ์ธ ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์„ ํƒ๋œ ์†Œ์Šค ๋ฒ”์œ„๋Š” ์ถ”๊ฐ€ ์ฃผ์„ ํ–‰ ์—†์ด ์ธ๋ผ์ธ์œผ๋กœ ๊ฐ•์กฐ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์—ด๊ธฐ ์ปจํŠธ๋กค์€ ์ฝ˜ํ…์ธ ๊ฐ€ ์Šคํฌ๋กค๋˜๋Š” ๋™์•ˆ ๋ผ์ด๋ธŒ ์„ธ๋ถ€ ์ •๋ณด ์ฐฝ ์•„๋ž˜์— ์œ ์ง€๋˜๋ฉฐ, ์ถ•์•ฝ๋œ ํŒŒ์ผ ์œ„์น˜๋Š” ์ค„ ๋ฐ ์—ด ์ ‘๋ฏธ์‚ฌ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๊ฒ€์ƒ‰ ๋ฐ ๋Œ€ํ™” ์ƒ์ž๋Š” ํ™œ์„ฑ ์ƒํƒœ์ผ ๋•Œ ์ž์ฒด ๋‹จ์ถ•ํ‚ค๋ฅผ ์†Œ์œ ํ•ฉ๋‹ˆ๋‹ค.

์†Œ์Šค ์ปจํ…์ŠคํŠธ๋ฅผ ๋กœ๋“œํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ์ €์žฅ๋œ ๋ฐœ๊ฒฌ ์Šค๋‹ˆํŽซ์„ ๊ณ„์† ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹œํฌ๋ฆฟ์€ ์›์‹œ ์†Œ์Šค๋ฅผ ์„ธ๋ถ€ ์ •๋ณด ์ฐฝ์— ๋กœ๋“œํ•˜๋Š” ๋Œ€์‹  ์ˆ˜์ •๋œ ์Šค๋‹ˆํŽซ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋กœ๋”ฉ ์นด๋“œ๋Š” ๋ฐฑ๋ถ„์œจ ์ถ”์ •์น˜๊ฐ€ ์•„๋‹Œ ๋ถˆํ™•์ • ํ™œ๋™๊ณผ ์‹ค์ œ ๊ฒฝ๊ณผ ์‹œ๊ฐ„์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์Šค์บ” ์ค‘์—๋Š” Ctrl+C๋กœ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

ํ‚ค๋™์ž‘
j / k, ํ™”์‚ดํ‘œ, Home / End๋ฐœ๊ฒฌ ํ•ญ๋ชฉ ๊ฐ„ ์ด๋™
v์„ธ๋ถ€ ์ •๋ณด ํ™•์žฅ ๋˜๋Š” ๋ชฉ๋ก/๋ถ„ํ•  ๋ณด๊ธฐ๋กœ ๋Œ์•„๊ฐ€๊ธฐ
PageUp / PageDown๋ชฉ๋ก ํŽ˜์ด์ง€ ์ด๋™ ๋˜๋Š” ๋ณด์ด๋Š” ์„ธ๋ถ€ ์ •๋ณด ์Šคํฌ๋กค
/, Enter๊ฒ€์ƒ‰ ํŽธ์ง‘ ๋ฐ ์ ์šฉ
Ctrl+UํŽธ์ง‘ ์ค‘์ธ ๊ฒ€์ƒ‰ ์ง€์šฐ๊ธฐ
Esc๋ชจ๋‹ฌ ๋‹ซ๊ธฐ, ๊ฒ€์ƒ‰ ํŽธ์ง‘ ์ทจ์†Œ, ํ™•์žฅ๋œ ์„ธ๋ถ€ ์ •๋ณด ๋‚˜๊ฐ€๊ธฐ ๋˜๋Š” ์ ์šฉ๋œ ํ•„ํ„ฐ ์ง€์šฐ๊ธฐ
0โ€“4, c, Shift+C์ตœ์†Œ ์‹ฌ๊ฐ๋„, ์‹ ๋ขฐ๋„ ์ž„๊ณ„๊ฐ’, ์ •๋ ฌ ์ˆœ์„œ
fAll โ†’ Unreviewed โ†’ Todo โ†’ Reviewed โ†’ Ignore ์ˆœํ™˜
i๋ถ„๋ฅ˜ ์ž‘์—… ๋ฏธ๋ฆฌ ๋ณด๊ธฐ ๋ฐ ์ ์šฉ
Space, a, x๋ฐœ๊ฒฌ ํ•ญ๋ชฉ ํ•˜๋‚˜ ์ฒดํฌ, ๋ณด์ด๋Š” ์„ ํƒ ํ† ๊ธ€, ์ผ๊ด„ ์ž‘์—… ๋ฏธ๋ฆฌ ๋ณด๊ธฐ
Shift+F๋ช…๋ช…๋œ ํ•„ํ„ฐ ์ €์žฅ, ๋กœ๋“œ, ๊ต์ฒด ๋˜๋Š” ์‚ญ์ œ; ๊ฒ€ํ†  ์ €์žฅ์†Œ ๋ณต๊ตฌ
b๋น„๊ต๊ฐ€ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ๋ฒ ์ด์Šค๋ผ์ธ ์นดํ…Œ๊ณ ๋ฆฌ ์ˆœํ™˜
Tab, Enter / o๋ฐœ๊ฒฌ ํ•ญ๋ชฉ/์†Œ์Šค/์‹ฑํฌ ์„ ํƒ ๋ฐ ํŽธ์ง‘๊ธฐ์—์„œ ์—ด๊ธฐ
w, [ / ]์•Œ๋ฆผ ํ‘œ์‹œ ๋ฐ ๊ธฐ๋ก ์Šคํฌ๋กค; ์ตœ์‹  ์•Œ๋ฆผ์ด ๋จผ์ € ํ‘œ์‹œ๋จ
eCBOM, JSON ๋˜๋Š” SARIF ๋‚ด๋ณด๋‚ด๊ธฐ
?, q / Ctrl+C๋„์›€๋ง ๋ฐ ์ข…๋ฃŒ; Ctrl+C๋Š” ๋ชจ๋“  ๋ชจ๋‹ฌ ๋‚ด์—์„œ๋„ ์ž‘๋™

Enter์™€ o๋Š” ๋น„์–ด ์žˆ์ง€ ์•Š์€ $VISUAL์„ ์‚ฌ์šฉํ•œ ๋‹ค์Œ $EDITOR๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‘ ์„ค์ •์ด ๋ชจ๋‘ ์—†์œผ๋ฉด foxguard๋Š” ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฐ์Šคํฌํ†ฑ ์˜คํ”„๋„ˆ๋ฅผ ๊ณ ๋ คํ•˜๊ธฐ ์ „์— PATH์—์„œ nvim, vim, nano, vi๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค. ํ—ค๋“œ๋ฆฌ์Šค ํ„ฐ๋ฏธ๋„์€ xdg-open์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด VISUAL="nvim" foxguard tui .๋ฅผ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ EDITOR='code --wait'๋ฅผ ์„ค์ •ํ•˜์„ธ์š”. ์ž˜๋ชป๋œ ๋ช…์‹œ์  ํŽธ์ง‘๊ธฐ ์„ค์ •์€ ์กฐ์šฉํžˆ ๋Œ€์ฒด๋˜์ง€ ์•Š๊ณ  ๋ณด๊ณ ๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํŽธ์ง‘๊ธฐ๊ฐ€ ์—†์œผ๋ฉด TUI๋Š” ์„ค์ • ์•ˆ๋‚ด์™€ ํ•จ๊ป˜ ์—ด๋ฆฐ ์ƒํƒœ๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ์ง€์›๋˜๋Š” ํŽธ์ง‘๊ธฐ๋Š” ์„ ํƒํ•œ ๋ฐœ๊ฒฌ ํ•ญ๋ชฉ/์†Œ์Šค/์‹ฑํฌ ์ค„๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

์นดํ…Œ๊ณ ๋ฆฌ