TECHDEV · Công cụ open-source

keymap

Tháng 10/2026, một vụ rò rỉ ở nhà cung cấp công cụ cho agent đã lộ API key của các provider lưu trong console workspace — và mọi developer bị ảnh hưởng đều đối mặt cùng một câu hỏi khó trả lời: mình đang có những key nào, chúng nằm ở đâu, và cần xoay vòng những key nào? Một provider key được dán vào config Claude Code, rồi config Codex, rồi file .env, rồi lịch sử shell — mỗi bản sao là một nơi có thể rò rỉ, một dòng trên hoá đơn nếu bị lạm dụng. keymap trả lời câu hỏi đó ngay trên máy bạn, trong vài giây:

python -m keymap

Nó quét các file config mà agent tool, CLI và shell của bạn thực sự đọc — ~/.claude.json, ~/.codex/config.toml, ~/.env, file rc và lịch sử shell, ~/.aws/credentials, và những file tương tự — rồi báo cáo từng provider key đang nằm ở đâu, cùng một key có bị nhân bản qua nhiều file không, file chứa key có đang world-readable không, key có lọt vào lịch sử shell không, và liệu nó có chỉ cách một lệnh git add . bất cẩn là bị commit hay không. Cuối báo cáo là một checklist xoay vòng key: trang revoke chính xác của từng provider nó tìm thấy.

Python 3.10+ · Chỉ dùng thư viện chuẩn · MIT

Nó không bao giờ làm gì

Dịch từ README của keymap (mục "What it never does").

Báo cáo: bản demo thư mục home giả

Repo đi kèm examples/demo-home/, một thư mục home giả chứa cùng một Anthropic key trong hai file, một OpenAI key trong .env và lịch sử shell, một GitHub token trong ~/.claude.json, và một file .env đang world-readable. Output thật của lệnh sh examples/run-demo.sh:

keymap — API key footprint report
Files scanned: 5  Skipped: 0

Keys found: 5 across 5 file(s) — providers: openai, github, anthropic

Occurrences (prefix + fingerprint only — no key material):
  .claude.json:1  github  (unknown)  ghp_…685d57433a9e  [GitHub classic personal access token]
  .codex/config.toml:5  anthropic  api_key  sk-ant-…776a5e869d89  [Anthropic API key]
  .config/app.json:1  anthropic  (unknown)  sk-ant-…776a5e869d89  [Anthropic API key]
  .env:3  openai  OPENAI_API_KEY  sk-proj-…29289fad0238  [OpenAI project API key]
  .zsh_history:1  openai  OPENAI_API_KEY  sk-proj-…29289fad0238  [OpenAI project API key]

Findings:
  [HIGH] world-readable — .env
      File is mode 0o644 — anyone on this machine can read it. Run: chmod 600 .env
  [HIGH] history — .zsh_history
      openai key (…29289fad0238) was typed into shell history. Rotate the key, then clear that history entry.
  [MEDIUM] sprawl — .env, .zsh_history
      Same openai key (…29289fad0238) lives in 2 files. Keep one canonical home for it and delete the copies.
  [MEDIUM] sprawl — .codex/config.toml, .config/app.json
      Same anthropic key (…776a5e869d89) lives in 2 files. Keep one canonical home for it and delete the copies.

Rotation checklist (revoke at the provider, then replace):
  - openai: https://platform.openai.com/api-keys
  - github: https://github.com/settings/tokens
  - anthropic: https://console.anthropic.com/settings/keys

After rotating: delete the old value from every file above, clear it from shell history, and re-run keymap to confirm.

Output demo sao chép đúng từ README của keymap (mục "Demo (all values fake)" — khớp examples/expected-output.txt).

Bắt đầu nhanh

# Không phụ thuộc thư viện — chỉ cần Python 3.10+ với thư viện chuẩn.
git clone https://github.com/techdevfun/keymap
cd keymap
python -m keymap

Hoặc cài đặt lệnh keymap:

pip install .
keymap --help

Lệnh sao chép đúng từ README của keymap (mục "Install").

Cách dùng

python -m keymap                  # quét thư mục home của bạn
python -m keymap --root ~/work    # quét một thư mục khác
python -m keymap .env .codex/config.toml   # quét các file cụ thể
python -m keymap --json           # output dạng máy đọc cho CI/script

Mã thoát: 0 = không tìm thấy key · 1 = tìm thấy key/phát hiện · 2 = lỗi cách dùng hoặc I/O.

Lệnh và mã thoát sao chép đúng từ README của keymap (mục "Usage").

Nó kiểm tra gì

Kiểm traMức độÝ nghĩa
world-readablecaoFile chứa key đang world-readable — ai trên máy này cũng đọc được (chmod 600 nó đi)
historycaoKey đã bị gõ vào lịch sử shell — xoay vòng key, rồi xoá mục lịch sử đó
git-trackedcaoKey đã bị git theo dõi — xoay vòng ngay, viết lại lịch sử git không "gỡ lộ" được
not-ignoredtrung bìnhKey nằm trong repo git mà chưa được gitignore — chỉ cách một lệnh git add . là bị commit
sprawltrung bìnhCùng một key nằm ở từ 2 file trở lên — giữ một nơi chính tắc, xoá các bản sao

Bảng dịch từ README của keymap (mục "What it checks").

Các provider nhận diện được

Anthropic, OpenAI, Google, GitHub (classic, fine-grained, OAuth, server-to-server), AWS access key ID, Slack, Stripe. Bất cứ thứ gì gán cho biến *_API_KEY / *_TOKEN / *_SECRET / *_PASSWORD mà không khớp mẫu đã biết sẽ được báo là unrecognized thay vì bị bỏ qua. Các giá trị placeholder (your-token-here, ${OPENAI_API_KEY}, xxx…) bị bỏ qua.

Dịch từ README của keymap (mục "Recognised providers").

So sánh trung thực

Các công cụ quét secret như gitleaks / trufflehog đi săn secret bị rò rỉ trong repo. keymap trả lời một câu hỏi khác: những key bạn sở hữu, ngay trên máy của bạn, lúc này — agent tool nào đang giữ chúng, có bao nhiêu bản sao, và nên xoay vòng cái gì trước sau một vụ rò rỉ ở nhà cung cấp. Nó bổ trợ cho công cụ quét repo; không thay thế chúng.

Dịch từ README của keymap (mục "How it's different").

Roadmap — chưa ship

Roadmap dịch từ README của keymap; chưa mục nào ship tính đến 2026-10-30.

Giấy phép

MIT — xem LICENSE trong repository.

Công cụ liên quan

Các công cụ mã nguồn mở khác của TECHDEV: sessguard, runverdict, gheist-guard, vetgate, context-diet, ci-failure-detective, agent-seatbelt, devsecops-os, env-doctor, skill-audit, logtrim, testguard, breakcheck, memgraph, ggufit, leaseguard, factfence, jsonfold

Đóng góp ý kiến

Bình chọn cho công cụ này, đề xuất tính năng, hoặc thảo luận với các vận hành khác trên bảng cộng đồng.