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