kekkai-cli 1.1.1__tar.gz → 2.0.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (146) hide show
  1. kekkai_cli-2.0.0/PKG-INFO +317 -0
  2. kekkai_cli-2.0.0/README.md +306 -0
  3. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/pyproject.toml +3 -3
  4. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/cli.py +114 -3
  5. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/output.py +2 -3
  6. kekkai_cli-2.0.0/src/kekkai/triage/fix_screen.py +232 -0
  7. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/triage/screens.py +1 -0
  8. kekkai_cli-2.0.0/src/kekkai_cli.egg-info/PKG-INFO +317 -0
  9. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai_cli.egg-info/SOURCES.txt +1 -0
  10. kekkai_cli-1.1.1/PKG-INFO +0 -379
  11. kekkai_cli-1.1.1/README.md +0 -368
  12. kekkai_cli-1.1.1/src/kekkai_cli.egg-info/PKG-INFO +0 -379
  13. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/setup.cfg +0 -0
  14. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/__init__.py +0 -0
  15. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/compliance/__init__.py +0 -0
  16. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/compliance/hipaa.py +0 -0
  17. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/compliance/mappings.py +0 -0
  18. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/compliance/owasp.py +0 -0
  19. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/compliance/owasp_agentic.py +0 -0
  20. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/compliance/pci_dss.py +0 -0
  21. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/compliance/soc2.py +0 -0
  22. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/config.py +0 -0
  23. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/dojo.py +0 -0
  24. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/dojo_import.py +0 -0
  25. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/fix/__init__.py +0 -0
  26. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/fix/audit.py +0 -0
  27. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/fix/differ.py +0 -0
  28. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/fix/engine.py +0 -0
  29. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/fix/prompts.py +0 -0
  30. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/github/__init__.py +0 -0
  31. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/github/commenter.py +0 -0
  32. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/github/models.py +0 -0
  33. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/github/sanitizer.py +0 -0
  34. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/installer/__init__.py +0 -0
  35. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/installer/errors.py +0 -0
  36. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/installer/extract.py +0 -0
  37. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/installer/manager.py +0 -0
  38. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/installer/manifest.py +0 -0
  39. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/installer/verify.py +0 -0
  40. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/manifest.py +0 -0
  41. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/paths.py +0 -0
  42. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/policy.py +0 -0
  43. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/report/__init__.py +0 -0
  44. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/report/compliance_matrix.py +0 -0
  45. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/report/generator.py +0 -0
  46. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/report/html.py +0 -0
  47. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/report/pdf.py +0 -0
  48. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/report/unified.py +0 -0
  49. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/runner.py +0 -0
  50. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/scanners/__init__.py +0 -0
  51. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/scanners/backends/__init__.py +0 -0
  52. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/scanners/backends/base.py +0 -0
  53. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/scanners/backends/docker.py +0 -0
  54. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/scanners/backends/native.py +0 -0
  55. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/scanners/base.py +0 -0
  56. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/scanners/container.py +0 -0
  57. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/scanners/falco.py +0 -0
  58. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/scanners/gitleaks.py +0 -0
  59. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/scanners/semgrep.py +0 -0
  60. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/scanners/trivy.py +0 -0
  61. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/scanners/url_policy.py +0 -0
  62. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/scanners/zap.py +0 -0
  63. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/threatflow/__init__.py +0 -0
  64. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/threatflow/artifacts.py +0 -0
  65. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/threatflow/chunking.py +0 -0
  66. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/threatflow/core.py +0 -0
  67. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/threatflow/mermaid.py +0 -0
  68. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/threatflow/model_adapter.py +0 -0
  69. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/threatflow/prompts.py +0 -0
  70. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/threatflow/redaction.py +0 -0
  71. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/threatflow/sanitizer.py +0 -0
  72. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/triage/__init__.py +0 -0
  73. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/triage/app.py +0 -0
  74. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/triage/audit.py +0 -0
  75. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/triage/ignore.py +0 -0
  76. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/triage/loader.py +0 -0
  77. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/triage/models.py +0 -0
  78. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai/triage/widgets.py +0 -0
  79. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai_cli.egg-info/dependency_links.txt +0 -0
  80. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai_cli.egg-info/entry_points.txt +0 -0
  81. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai_cli.egg-info/requires.txt +0 -0
  82. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai_cli.egg-info/top_level.txt +0 -0
  83. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai_core/__init__.py +0 -0
  84. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai_core/ci/__init__.py +0 -0
  85. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai_core/ci/benchmarks.py +0 -0
  86. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai_core/ci/metadata.py +0 -0
  87. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai_core/ci/validators.py +0 -0
  88. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai_core/docker/__init__.py +0 -0
  89. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai_core/docker/metadata.py +0 -0
  90. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai_core/docker/sbom.py +0 -0
  91. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai_core/docker/security.py +0 -0
  92. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai_core/docker/signing.py +0 -0
  93. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai_core/redaction.py +0 -0
  94. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai_core/slsa/__init__.py +0 -0
  95. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai_core/slsa/verify.py +0 -0
  96. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai_core/windows/__init__.py +0 -0
  97. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai_core/windows/chocolatey.py +0 -0
  98. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai_core/windows/installer.py +0 -0
  99. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai_core/windows/scoop.py +0 -0
  100. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/src/kekkai_core/windows/validators.py +0 -0
  101. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_cli_output.py +0 -0
  102. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_compliance.py +0 -0
  103. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_dojo_import.py +0 -0
  104. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_fix_engine.py +0 -0
  105. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_github_commenter_filter.py +0 -0
  106. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_github_commenter_format.py +0 -0
  107. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_github_commenter_limit.py +0 -0
  108. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_github_commenter_sanitize.py +0 -0
  109. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_installer_checksum.py +0 -0
  110. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_installer_extract.py +0 -0
  111. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_installer_manager.py +0 -0
  112. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_installer_manifest.py +0 -0
  113. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_installer_platform.py +0 -0
  114. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_kekkai_cli.py +0 -0
  115. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_kekkai_config.py +0 -0
  116. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_kekkai_dojo.py +0 -0
  117. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_kekkai_dojo_cli.py +0 -0
  118. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_kekkai_manifest.py +0 -0
  119. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_kekkai_paths.py +0 -0
  120. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_kekkai_runner.py +0 -0
  121. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_mermaid.py +0 -0
  122. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_policy.py +0 -0
  123. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_redaction.py +0 -0
  124. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_report.py +0 -0
  125. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_scanner_backends.py +0 -0
  126. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_scanner_base.py +0 -0
  127. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_scanner_container.py +0 -0
  128. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_scanner_digest_defaults.py +0 -0
  129. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_scanner_falco.py +0 -0
  130. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_scanner_gitleaks.py +0 -0
  131. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_scanner_native.py +0 -0
  132. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_scanner_semgrep.py +0 -0
  133. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_scanner_trivy.py +0 -0
  134. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_scanner_zap.py +0 -0
  135. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_slsa_provenance.py +0 -0
  136. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_threatflow_chunking.py +0 -0
  137. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_threatflow_model_adapter.py +0 -0
  138. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_threatflow_prompts.py +0 -0
  139. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_threatflow_redaction.py +0 -0
  140. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_threatflow_sanitizer.py +0 -0
  141. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_triage_audit.py +0 -0
  142. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_triage_ignore.py +0 -0
  143. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_triage_loader.py +0 -0
  144. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_triage_models.py +0 -0
  145. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_unified_report.py +0 -0
  146. {kekkai_cli-1.1.1 → kekkai_cli-2.0.0}/tests/test_url_policy.py +0 -0
@@ -0,0 +1,317 @@
1
+ Metadata-Version: 2.4
2
+ Name: kekkai-cli
3
+ Version: 2.0.0
4
+ Summary: Terminal UI for Trivy/Semgrep/Gitleaks. Local-first security triage.
5
+ Requires-Python: >=3.12
6
+ Description-Content-Type: text/markdown
7
+ Requires-Dist: rich>=13.0.0
8
+ Requires-Dist: jsonschema>=4.20.0
9
+ Requires-Dist: textual>=0.50.0
10
+ Requires-Dist: httpx>=0.24.0
11
+
12
+ <p align="center">
13
+ <img src="https://raw.githubusercontent.com/kademoslabs/assets/main/logos/kekkai-slim.png" alt="Kekkai CLI Logo" width="250"/>
14
+ </p>
15
+
16
+ <p align="center"><strong>Stop parsing JSON. Security triage in your terminal.</strong></p>
17
+
18
+ <p align="center">
19
+ <img src="https://img.shields.io/github/actions/workflow/status/kademoslabs/kekkai/docker-publish.yml?logo=github"/>
20
+ <img src="https://img.shields.io/circleci/build/github/kademoslabs/kekkai?logo=circleci"/>
21
+ <img src="https://img.shields.io/pypi/v/kekkai-cli?pypiBaseUrl=https%3A%2F%2Fpypi.org&logo=pypi"/>
22
+ </p>
23
+
24
+ ---
25
+
26
+ # Kekkai
27
+
28
+ **Interactive security triage in the terminal.**
29
+
30
+ Kekkai is a small open-source CLI that wraps existing security scanners (Trivy, Semgrep, Gitleaks) and focuses on the part that tends to be slow and frustrating: reviewing and triaging results.
31
+
32
+ Running scanners is easy. Interpreting noisy output, dealing with false positives, and making CI usable is not. Kekkai exists to make that part tolerable..
33
+
34
+ ![Hero GIF](https://raw.githubusercontent.com/kademoslabs/assets/main/screenshots/kekkai-start.gif)
35
+
36
+ ---
37
+
38
+ ## What it does
39
+
40
+ - Runs Trivy (dependencies), Semgrep (code), and Gitleaks (secrets)
41
+ - Normalizes their outputs into a single report format
42
+ - Provides an interactive terminal UI for reviewing findings
43
+ - Lets you mark findings as false positives and persist decisions locally
44
+ - Supports CI mode with severity-based failure thresholds
45
+
46
+ Kekkai does not replace scanners or introduce proprietary detection logic. It sits on top of existing tools and focuses on workflow and UX.
47
+
48
+ ---
49
+
50
+ ## Quick Start
51
+
52
+ > Requires Docker and Python 3.12
53
+
54
+ ### 1. Install
55
+
56
+ ```bash
57
+ pipx install kekkai-cli
58
+ ```
59
+
60
+ ### 2. Scan
61
+
62
+ ```bash
63
+ kekkai scan
64
+ # Runs Trivy (CVEs), Semgrep (code), Gitleaks (secrets)
65
+ # Outputs unified kekkai-report.json
66
+ ```
67
+
68
+ ### 3. Triage
69
+
70
+ ```bash
71
+ kekkai triage
72
+ # Interactive TUI to review findings with keyboard navigation
73
+ ```
74
+
75
+ No signup, no cloud service required.
76
+
77
+ ---
78
+
79
+ ## Why Kekkai?
80
+
81
+ | Problem | Kekkai Solution |
82
+ |---------|-----------------|
83
+ | **Juggling 3+ tools** | One CLI for Trivy, Semgrep, Gitleaks |
84
+ | **Reading JSON logs** | Interactive terminal UI |
85
+ | **Installing scanners** | Auto-pulls Docker containers |
86
+ | **Parsing different formats** | Unified `kekkai-report.json` |
87
+ | **False positives** | Mark and ignore with `.kekkaiignore` |
88
+ | **CI/CD integration** | `kekkai scan --ci --fail-on high` |
89
+
90
+ ---
91
+
92
+ ## Features
93
+
94
+ ### Interactive Triage TUI
95
+
96
+ Stop reading JSON. Use keyboard navigation to review findings, mark false positives, and generate ignore files.
97
+
98
+ ```bash
99
+ kekkai triage
100
+ ```
101
+
102
+ **Controls:**
103
+ - `j/k` or `↑/↓`: Navigate findings
104
+ - `f`: Mark as false positive
105
+ - `c`: Confirm finding
106
+ - `d`: Defer/ignore
107
+ - `Ctrl+S`: Save decisions
108
+ - `q`: Quit
109
+
110
+ <!-- Screenshot placeholder: ![Triage TUI](https://raw.githubusercontent.com/kademoslabs/assets/main/screenshots/triage-tui.png) -->
111
+
112
+ [Full Triage Documentation →](docs/triage/README.md)
113
+
114
+ ---
115
+
116
+ ### CI/CD Policy Gate
117
+
118
+ Break builds on severity thresholds.
119
+
120
+ Kekkai can be used as a CI gate based on severity thresholds.
121
+
122
+ ```bash
123
+ # Fail on any critical or high findings
124
+ kekkai scan --ci --fail-on high
125
+
126
+ # Fail only on critical
127
+ kekkai scan --ci --fail-on critical
128
+ ```
129
+
130
+ **Exit Codes:**
131
+ | Code | Meaning |
132
+ |------|---------|
133
+ | 0 | No findings above threshold |
134
+ | 1 | Findings exceed threshold |
135
+ | 2 | Scanner error |
136
+
137
+ **GitHub Actions Example:**
138
+
139
+ ```yaml
140
+ - name: Security Scan
141
+ run: |
142
+ pipx install kekkai-cli
143
+ kekkai scan --ci --fail-on high
144
+ ```
145
+
146
+ [Full CI Documentation →](docs/ci/ci-mode.md)
147
+
148
+ ---
149
+
150
+ ### GitHub PR Comments
151
+
152
+ Get security feedback directly in pull requests.
153
+
154
+ ```bash
155
+ export GITHUB_TOKEN="ghp_..."
156
+ kekkai scan --pr-comment
157
+ ```
158
+ ---
159
+
160
+ ### Unified Scanning
161
+
162
+ Run industry-standard scanners without installing them individually. Each scanner runs in an isolated Docker container.
163
+
164
+ ```bash
165
+ kekkai scan # Scan current directory
166
+ kekkai scan --repo /path/to/project # Scan specific path
167
+ kekkai scan --output results.json # Custom output path
168
+ ```
169
+
170
+ **Scanners Included:**
171
+ | Scanner | Finds | Image |
172
+ |---------|-------|-------|
173
+ | Trivy | CVEs in dependencies | `aquasec/trivy:latest` |
174
+ | Semgrep | Code vulnerabilities | `semgrep/semgrep:latest` |
175
+ | Gitleaks | Hardcoded secrets | `zricethezav/gitleaks:latest` |
176
+
177
+ **Container Security:**
178
+ - Read-only filesystem
179
+ - No network access
180
+ - Memory limited (2GB)
181
+ - No privilege escalation
182
+
183
+ ---
184
+
185
+ #### Design choices
186
+
187
+ - Local-first: no SaaS required, runs entirely on your machine or CI
188
+ - No network access for scanner containers
189
+ - Read-only filesystems, memory-limited containers
190
+ - Uses existing tools instead of reimplementing scanners
191
+ - Terminal-first UX instead of dashboards
192
+
193
+ ---
194
+
195
+ ## Optional features
196
+
197
+ These are opt-in and not required for basic use:
198
+
199
+ ### Local-First AI Threat Modeling
200
+
201
+ Generate STRIDE threat models with AI that runs on **your machine**. No API keys. No cloud.
202
+
203
+ ```bash
204
+ # Ollama (recommended - easy setup, privacy-preserving)
205
+ ollama pull mistral
206
+ kekkai threatflow --repo . --model-mode ollama --model-name mistral
207
+
208
+ # Output: THREATS.md with attack surface analysis and Mermaid.js diagrams
209
+ ```
210
+
211
+ **Supports:**
212
+ - Ollama (recommended)
213
+ - Local GGUF models (llama.cpp)
214
+ - OpenAI/Anthropic (if you trust them with your code)
215
+
216
+ [Full Local-First AI Threat Modeling Documentation →](docs/threatflow/README.md)
217
+
218
+ ---
219
+
220
+ ### DefectDojo Integration
221
+
222
+ Spin up a vulnerability management dashboard locally if you need it.
223
+
224
+ ```bash
225
+ kekkai dojo up --wait # Start DefectDojo
226
+ kekkai upload # Import scan results
227
+ ```
228
+
229
+ **What You Get:**
230
+ - DefectDojo web UI at `http://localhost:8080`
231
+ - Automatic credential generation
232
+ - Pre-configured for Kekkai imports
233
+
234
+ [DefectDojo Quick Start →](docs/dojo/dojo-quickstart.md)
235
+
236
+ ---
237
+
238
+ ### AI-Powered Fix Engine
239
+
240
+ Generate code patches for findings (experimental).
241
+
242
+ ```bash
243
+ kekkai fix --input scan-results.json --apply
244
+ ```
245
+
246
+ ---
247
+
248
+ ### Compliance Reporting
249
+
250
+ Map findings to PCI-DSS, OWASP, HIPAA, SOC 2.
251
+
252
+ ```bash
253
+ kekkai report --input scan-results.json --format pdf --frameworks PCI-DSS,OWASP
254
+ ```
255
+
256
+ ---
257
+
258
+ ## What this is not
259
+
260
+ - Not a replacement for commercial AppSec platforms
261
+ - Not a new scanner or detection engine
262
+ - Not optimized for large enterprises (yet)
263
+ - Not a hosted service
264
+
265
+ Right now, Kekkai is aimed at individual developers and small teams who already run scanners but want better triage and less noise.
266
+
267
+ ---
268
+
269
+ ## Security
270
+
271
+ Kekkai is designed with security as a core principle:
272
+
273
+ - **Container Isolation**: Scanners run in hardened Docker containers
274
+ - **No Network Access**: Containers cannot reach external networks
275
+ - **Local-First AI**: run entirely on your machine
276
+ - **SLSA Level 3**: Release artifacts include provenance attestations
277
+ - **Signed Images**: Docker images are Cosign-signed
278
+
279
+ For vulnerability reports, see [SECURITY.md](SECURITY.md).
280
+
281
+ ---
282
+
283
+ ## Documentation
284
+
285
+ | Guide | Description |
286
+ |-------|-------------|
287
+ | [Installation](docs/README.md#installation-methods) | All installation methods |
288
+ | [ThreatFlow](docs/threatflow/README.md) | AI threat modeling setup |
289
+ | [Triage TUI](docs/triage/README.md) | Interactive finding review |
290
+ | [CI Mode](docs/ci/ci-mode.md) | Pipeline integration |
291
+ | [DefectDojo](docs/dojo/dojo-quickstart.md) | Optional vulnerability management |
292
+ | [Security](docs/security/slsa-provenance.md) | SLSA provenance verification |
293
+
294
+ ---
295
+
296
+ ## Roadmap (short-term)
297
+
298
+ 1. Persistent triage state across runs (baselines)
299
+ 2. “New findings only” diffs
300
+ 3. Better PR-level workflows
301
+ 4. Cleaner reporting for small teams
302
+
303
+ ---
304
+
305
+ ## Contributing
306
+
307
+ We welcome contributions! See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
308
+
309
+ ---
310
+
311
+ ## License
312
+
313
+ Apache-2.0 — See [LICENSE](LICENSE) for details.
314
+
315
+ ---
316
+
317
+ <p align="center"><i>Built by <a href="https://kademos.org">Kademos Labs</a></i></p>
@@ -0,0 +1,306 @@
1
+ <p align="center">
2
+ <img src="https://raw.githubusercontent.com/kademoslabs/assets/main/logos/kekkai-slim.png" alt="Kekkai CLI Logo" width="250"/>
3
+ </p>
4
+
5
+ <p align="center"><strong>Stop parsing JSON. Security triage in your terminal.</strong></p>
6
+
7
+ <p align="center">
8
+ <img src="https://img.shields.io/github/actions/workflow/status/kademoslabs/kekkai/docker-publish.yml?logo=github"/>
9
+ <img src="https://img.shields.io/circleci/build/github/kademoslabs/kekkai?logo=circleci"/>
10
+ <img src="https://img.shields.io/pypi/v/kekkai-cli?pypiBaseUrl=https%3A%2F%2Fpypi.org&logo=pypi"/>
11
+ </p>
12
+
13
+ ---
14
+
15
+ # Kekkai
16
+
17
+ **Interactive security triage in the terminal.**
18
+
19
+ Kekkai is a small open-source CLI that wraps existing security scanners (Trivy, Semgrep, Gitleaks) and focuses on the part that tends to be slow and frustrating: reviewing and triaging results.
20
+
21
+ Running scanners is easy. Interpreting noisy output, dealing with false positives, and making CI usable is not. Kekkai exists to make that part tolerable..
22
+
23
+ ![Hero GIF](https://raw.githubusercontent.com/kademoslabs/assets/main/screenshots/kekkai-start.gif)
24
+
25
+ ---
26
+
27
+ ## What it does
28
+
29
+ - Runs Trivy (dependencies), Semgrep (code), and Gitleaks (secrets)
30
+ - Normalizes their outputs into a single report format
31
+ - Provides an interactive terminal UI for reviewing findings
32
+ - Lets you mark findings as false positives and persist decisions locally
33
+ - Supports CI mode with severity-based failure thresholds
34
+
35
+ Kekkai does not replace scanners or introduce proprietary detection logic. It sits on top of existing tools and focuses on workflow and UX.
36
+
37
+ ---
38
+
39
+ ## Quick Start
40
+
41
+ > Requires Docker and Python 3.12
42
+
43
+ ### 1. Install
44
+
45
+ ```bash
46
+ pipx install kekkai-cli
47
+ ```
48
+
49
+ ### 2. Scan
50
+
51
+ ```bash
52
+ kekkai scan
53
+ # Runs Trivy (CVEs), Semgrep (code), Gitleaks (secrets)
54
+ # Outputs unified kekkai-report.json
55
+ ```
56
+
57
+ ### 3. Triage
58
+
59
+ ```bash
60
+ kekkai triage
61
+ # Interactive TUI to review findings with keyboard navigation
62
+ ```
63
+
64
+ No signup, no cloud service required.
65
+
66
+ ---
67
+
68
+ ## Why Kekkai?
69
+
70
+ | Problem | Kekkai Solution |
71
+ |---------|-----------------|
72
+ | **Juggling 3+ tools** | One CLI for Trivy, Semgrep, Gitleaks |
73
+ | **Reading JSON logs** | Interactive terminal UI |
74
+ | **Installing scanners** | Auto-pulls Docker containers |
75
+ | **Parsing different formats** | Unified `kekkai-report.json` |
76
+ | **False positives** | Mark and ignore with `.kekkaiignore` |
77
+ | **CI/CD integration** | `kekkai scan --ci --fail-on high` |
78
+
79
+ ---
80
+
81
+ ## Features
82
+
83
+ ### Interactive Triage TUI
84
+
85
+ Stop reading JSON. Use keyboard navigation to review findings, mark false positives, and generate ignore files.
86
+
87
+ ```bash
88
+ kekkai triage
89
+ ```
90
+
91
+ **Controls:**
92
+ - `j/k` or `↑/↓`: Navigate findings
93
+ - `f`: Mark as false positive
94
+ - `c`: Confirm finding
95
+ - `d`: Defer/ignore
96
+ - `Ctrl+S`: Save decisions
97
+ - `q`: Quit
98
+
99
+ <!-- Screenshot placeholder: ![Triage TUI](https://raw.githubusercontent.com/kademoslabs/assets/main/screenshots/triage-tui.png) -->
100
+
101
+ [Full Triage Documentation →](docs/triage/README.md)
102
+
103
+ ---
104
+
105
+ ### CI/CD Policy Gate
106
+
107
+ Break builds on severity thresholds.
108
+
109
+ Kekkai can be used as a CI gate based on severity thresholds.
110
+
111
+ ```bash
112
+ # Fail on any critical or high findings
113
+ kekkai scan --ci --fail-on high
114
+
115
+ # Fail only on critical
116
+ kekkai scan --ci --fail-on critical
117
+ ```
118
+
119
+ **Exit Codes:**
120
+ | Code | Meaning |
121
+ |------|---------|
122
+ | 0 | No findings above threshold |
123
+ | 1 | Findings exceed threshold |
124
+ | 2 | Scanner error |
125
+
126
+ **GitHub Actions Example:**
127
+
128
+ ```yaml
129
+ - name: Security Scan
130
+ run: |
131
+ pipx install kekkai-cli
132
+ kekkai scan --ci --fail-on high
133
+ ```
134
+
135
+ [Full CI Documentation →](docs/ci/ci-mode.md)
136
+
137
+ ---
138
+
139
+ ### GitHub PR Comments
140
+
141
+ Get security feedback directly in pull requests.
142
+
143
+ ```bash
144
+ export GITHUB_TOKEN="ghp_..."
145
+ kekkai scan --pr-comment
146
+ ```
147
+ ---
148
+
149
+ ### Unified Scanning
150
+
151
+ Run industry-standard scanners without installing them individually. Each scanner runs in an isolated Docker container.
152
+
153
+ ```bash
154
+ kekkai scan # Scan current directory
155
+ kekkai scan --repo /path/to/project # Scan specific path
156
+ kekkai scan --output results.json # Custom output path
157
+ ```
158
+
159
+ **Scanners Included:**
160
+ | Scanner | Finds | Image |
161
+ |---------|-------|-------|
162
+ | Trivy | CVEs in dependencies | `aquasec/trivy:latest` |
163
+ | Semgrep | Code vulnerabilities | `semgrep/semgrep:latest` |
164
+ | Gitleaks | Hardcoded secrets | `zricethezav/gitleaks:latest` |
165
+
166
+ **Container Security:**
167
+ - Read-only filesystem
168
+ - No network access
169
+ - Memory limited (2GB)
170
+ - No privilege escalation
171
+
172
+ ---
173
+
174
+ #### Design choices
175
+
176
+ - Local-first: no SaaS required, runs entirely on your machine or CI
177
+ - No network access for scanner containers
178
+ - Read-only filesystems, memory-limited containers
179
+ - Uses existing tools instead of reimplementing scanners
180
+ - Terminal-first UX instead of dashboards
181
+
182
+ ---
183
+
184
+ ## Optional features
185
+
186
+ These are opt-in and not required for basic use:
187
+
188
+ ### Local-First AI Threat Modeling
189
+
190
+ Generate STRIDE threat models with AI that runs on **your machine**. No API keys. No cloud.
191
+
192
+ ```bash
193
+ # Ollama (recommended - easy setup, privacy-preserving)
194
+ ollama pull mistral
195
+ kekkai threatflow --repo . --model-mode ollama --model-name mistral
196
+
197
+ # Output: THREATS.md with attack surface analysis and Mermaid.js diagrams
198
+ ```
199
+
200
+ **Supports:**
201
+ - Ollama (recommended)
202
+ - Local GGUF models (llama.cpp)
203
+ - OpenAI/Anthropic (if you trust them with your code)
204
+
205
+ [Full Local-First AI Threat Modeling Documentation →](docs/threatflow/README.md)
206
+
207
+ ---
208
+
209
+ ### DefectDojo Integration
210
+
211
+ Spin up a vulnerability management dashboard locally if you need it.
212
+
213
+ ```bash
214
+ kekkai dojo up --wait # Start DefectDojo
215
+ kekkai upload # Import scan results
216
+ ```
217
+
218
+ **What You Get:**
219
+ - DefectDojo web UI at `http://localhost:8080`
220
+ - Automatic credential generation
221
+ - Pre-configured for Kekkai imports
222
+
223
+ [DefectDojo Quick Start →](docs/dojo/dojo-quickstart.md)
224
+
225
+ ---
226
+
227
+ ### AI-Powered Fix Engine
228
+
229
+ Generate code patches for findings (experimental).
230
+
231
+ ```bash
232
+ kekkai fix --input scan-results.json --apply
233
+ ```
234
+
235
+ ---
236
+
237
+ ### Compliance Reporting
238
+
239
+ Map findings to PCI-DSS, OWASP, HIPAA, SOC 2.
240
+
241
+ ```bash
242
+ kekkai report --input scan-results.json --format pdf --frameworks PCI-DSS,OWASP
243
+ ```
244
+
245
+ ---
246
+
247
+ ## What this is not
248
+
249
+ - Not a replacement for commercial AppSec platforms
250
+ - Not a new scanner or detection engine
251
+ - Not optimized for large enterprises (yet)
252
+ - Not a hosted service
253
+
254
+ Right now, Kekkai is aimed at individual developers and small teams who already run scanners but want better triage and less noise.
255
+
256
+ ---
257
+
258
+ ## Security
259
+
260
+ Kekkai is designed with security as a core principle:
261
+
262
+ - **Container Isolation**: Scanners run in hardened Docker containers
263
+ - **No Network Access**: Containers cannot reach external networks
264
+ - **Local-First AI**: run entirely on your machine
265
+ - **SLSA Level 3**: Release artifacts include provenance attestations
266
+ - **Signed Images**: Docker images are Cosign-signed
267
+
268
+ For vulnerability reports, see [SECURITY.md](SECURITY.md).
269
+
270
+ ---
271
+
272
+ ## Documentation
273
+
274
+ | Guide | Description |
275
+ |-------|-------------|
276
+ | [Installation](docs/README.md#installation-methods) | All installation methods |
277
+ | [ThreatFlow](docs/threatflow/README.md) | AI threat modeling setup |
278
+ | [Triage TUI](docs/triage/README.md) | Interactive finding review |
279
+ | [CI Mode](docs/ci/ci-mode.md) | Pipeline integration |
280
+ | [DefectDojo](docs/dojo/dojo-quickstart.md) | Optional vulnerability management |
281
+ | [Security](docs/security/slsa-provenance.md) | SLSA provenance verification |
282
+
283
+ ---
284
+
285
+ ## Roadmap (short-term)
286
+
287
+ 1. Persistent triage state across runs (baselines)
288
+ 2. “New findings only” diffs
289
+ 3. Better PR-level workflows
290
+ 4. Cleaner reporting for small teams
291
+
292
+ ---
293
+
294
+ ## Contributing
295
+
296
+ We welcome contributions! See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
297
+
298
+ ---
299
+
300
+ ## License
301
+
302
+ Apache-2.0 — See [LICENSE](LICENSE) for details.
303
+
304
+ ---
305
+
306
+ <p align="center"><i>Built by <a href="https://kademos.org">Kademos Labs</a></i></p>
@@ -1,7 +1,7 @@
1
1
  [project]
2
2
  name = "kekkai-cli"
3
- version = "1.1.1"
4
- description = "Kekkai monorepo (local-first AppSec orchestration + compliance checker)"
3
+ version = "2.0.0"
4
+ description = "Terminal UI for Trivy/Semgrep/Gitleaks. Local-first security triage."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
7
7
  dependencies = [
@@ -55,7 +55,7 @@ source = ["src"]
55
55
  [tool.coverage.report]
56
56
  show_missing = true
57
57
  skip_covered = false
58
- fail_under = 68
58
+ fail_under = 65
59
59
  exclude_lines = [
60
60
  "pragma: no cover",
61
61
  "if TYPE_CHECKING:",