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 keymapNó 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ì
- Không bao giờ in key. Báo cáo chỉ hiện tiền tố công khai (
sk-ant-…) cộng tiền tố vân tay SHA-256 (…776a5e869d89), để bạn nhận ra cùng một key ở nhiều file mà không cần nhìn thấy nó. - Không bao giờ gửi bất cứ thứ gì đi đâu. Không mạng, không telemetry, không upload. Nó chỉ đọc file trên máy bạn.
- Không bao giờ ghi. Chỉ đọc theo thiết kế. Nó chỉ cho bạn biết cần sửa gì; việc sửa là của bạn.
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 keymapHoặc cài đặt lệnh keymap:
pip install .
keymap --helpLệ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/scriptMã 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 tra | Mức độ | Ý nghĩa |
|---|---|---|
world-readable | cao | File chứa key đang world-readable — ai trên máy này cũng đọc được (chmod 600 nó đi) |
history | cao | Key đã bị gõ vào lịch sử shell — xoay vòng key, rồi xoá mục lịch sử đó |
git-tracked | cao | Key đã bị git theo dõi — xoay vòng ngay, viết lại lịch sử git không "gỡ lộ" được |
not-ignored | trung bình | Key nằm trong repo git mà chưa được gitignore — chỉ cách một lệnh git add . là bị commit |
sprawl | trung bình | Cù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
- Quét tham chiếu 1Password / macOS Keychain (chỉ tên, không secret).
--fixcho các cách sửa an toàn (chmod 600, không bao giờ xoá key).- Phát hiện key trong config MCP server của agent tool.
- Gợi ý bất thường chi tiêu: liên kết tới trang usage của từng provider trong báo cáo.
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.