plexavo 0.4.3__tar.gz → 0.4.4__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 (55) hide show
  1. {plexavo-0.4.3 → plexavo-0.4.4}/PKG-INFO +101 -42
  2. {plexavo-0.4.3 → plexavo-0.4.4}/README.md +100 -41
  3. {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/__init__.py +1 -1
  4. {plexavo-0.4.3 → plexavo-0.4.4}/plexavo.egg-info/PKG-INFO +101 -42
  5. {plexavo-0.4.3 → plexavo-0.4.4}/pyproject.toml +1 -1
  6. {plexavo-0.4.3 → plexavo-0.4.4}/LICENSE +0 -0
  7. {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/__main__.py +0 -0
  8. {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/attack_paths.py +0 -0
  9. {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/auth.py +0 -0
  10. {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/aws_profile_setup.py +0 -0
  11. {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/checks/__init__.py +0 -0
  12. {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/checks/encryption.py +0 -0
  13. {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/checks/iam.py +0 -0
  14. {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/checks/iam_hygiene.py +0 -0
  15. {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/checks/logging.py +0 -0
  16. {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/checks/network.py +0 -0
  17. {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/checks/storage.py +0 -0
  18. {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/checks/usage.py +0 -0
  19. {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/cli.py +0 -0
  20. {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/findings.py +0 -0
  21. {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/interactive.py +0 -0
  22. {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/principals.py +0 -0
  23. {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/report/__init__.py +0 -0
  24. {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/report/ai_narration.py +0 -0
  25. {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/report/fonts/DejaVuSans-Bold.ttf +0 -0
  26. {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/report/fonts/DejaVuSans-BoldOblique.ttf +0 -0
  27. {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/report/fonts/DejaVuSans-Oblique.ttf +0 -0
  28. {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/report/fonts/DejaVuSans.ttf +0 -0
  29. {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/report/fonts/GEIST-FONT-LICENSE.txt +0 -0
  30. {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/report/html_report.py +0 -0
  31. {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/report/json_report.py +0 -0
  32. {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/report/pdf.py +0 -0
  33. {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/report/templates/report.html.j2 +0 -0
  34. {plexavo-0.4.3 → plexavo-0.4.4}/plexavo/scoring.py +0 -0
  35. {plexavo-0.4.3 → plexavo-0.4.4}/plexavo.egg-info/SOURCES.txt +0 -0
  36. {plexavo-0.4.3 → plexavo-0.4.4}/plexavo.egg-info/dependency_links.txt +0 -0
  37. {plexavo-0.4.3 → plexavo-0.4.4}/plexavo.egg-info/entry_points.txt +0 -0
  38. {plexavo-0.4.3 → plexavo-0.4.4}/plexavo.egg-info/requires.txt +0 -0
  39. {plexavo-0.4.3 → plexavo-0.4.4}/plexavo.egg-info/top_level.txt +0 -0
  40. {plexavo-0.4.3 → plexavo-0.4.4}/setup.cfg +0 -0
  41. {plexavo-0.4.3 → plexavo-0.4.4}/tests/test_ai_narration_offline.py +0 -0
  42. {plexavo-0.4.3 → plexavo-0.4.4}/tests/test_attack_paths_offline.py +0 -0
  43. {plexavo-0.4.3 → plexavo-0.4.4}/tests/test_auth_offline.py +0 -0
  44. {plexavo-0.4.3 → plexavo-0.4.4}/tests/test_cli_entrypoint.py +0 -0
  45. {plexavo-0.4.3 → plexavo-0.4.4}/tests/test_encryption_offline.py +0 -0
  46. {plexavo-0.4.3 → plexavo-0.4.4}/tests/test_fail_on_offline.py +0 -0
  47. {plexavo-0.4.3 → plexavo-0.4.4}/tests/test_iam_hygiene_offline.py +0 -0
  48. {plexavo-0.4.3 → plexavo-0.4.4}/tests/test_iam_offline.py +0 -0
  49. {plexavo-0.4.3 → plexavo-0.4.4}/tests/test_json_report_offline.py +0 -0
  50. {plexavo-0.4.3 → plexavo-0.4.4}/tests/test_logging_offline.py +0 -0
  51. {plexavo-0.4.3 → plexavo-0.4.4}/tests/test_network_offline.py +0 -0
  52. {plexavo-0.4.3 → plexavo-0.4.4}/tests/test_report_offline.py +0 -0
  53. {plexavo-0.4.3 → plexavo-0.4.4}/tests/test_scoring.py +0 -0
  54. {plexavo-0.4.3 → plexavo-0.4.4}/tests/test_storage_offline.py +0 -0
  55. {plexavo-0.4.3 → plexavo-0.4.4}/tests/test_usage_offline.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: plexavo
3
- Version: 0.4.3
3
+ Version: 0.4.4
4
4
  Summary: Open-source AWS misconfiguration scanner — runs with your own local AWS credentials, nothing sent to anyone else.
5
5
  Author: Kavee
6
6
  License: AGPL-3.0-or-later
@@ -45,7 +45,7 @@ Dynamic: license-file
45
45
  <img src="https://img.shields.io/pypi/v/plexavo?style=for-the-badge&logo=pypi&logoColor=white&label=PYPI" alt="PyPI version">
46
46
  </a>
47
47
  <a href="https://github.com/plexavo/plexavo/actions">
48
- <img src="https://img.shields.io/github/actions/workflow/status/plexavo/plexavo/ci.yml?style=for-the-badge&label=BUILD" alt="Build status">
48
+ <img src="https://img.shields.io/github/actions/workflow/status/plexavo/plexavo/tests.yml?style=for-the-badge&label=BUILD" alt="Build status">
49
49
  </a>
50
50
  </p>
51
51
 
@@ -68,7 +68,7 @@ for real-world misconfigurations, using your own local AWS credentials
68
68
  the same way `aws s3 ls` does, so nothing about your account ever
69
69
  leaves your machine.
70
70
 
71
- Each scan produces a **0–100 security score** and a plain-English report:
71
+ Each scan produces a **0-100 security score** and a plain-English report:
72
72
  what's wrong, what an attacker would actually do with it, and the exact
73
73
  command to fix it.
74
74
 
@@ -83,7 +83,7 @@ command to fix it.
83
83
  > conversational security briefing. See
84
84
  > [Using it from Claude Code](#using-it-from-claude-code).
85
85
 
86
- ## ✦ What it checks
86
+ ## What it checks
87
87
 
88
88
  **32 checks across 6 categories**, run against real AWS accounts:
89
89
 
@@ -101,7 +101,26 @@ See `docs/*-TEST-MATRIX.md` for how each check was verified.
101
101
  > [!TIP]
102
102
  > **Don't just trust the number.** Plexavo keeps severity, confidence, and evidence as separate signals, so a low-confidence Critical does not read the same as a high-confidence Medium.
103
103
 
104
- ## ⚡ Installation
104
+ ## How Plexavo works
105
+
106
+ ```text
107
+ AWS account
108
+ ↓
109
+ Plexavo deterministic checks
110
+ ↓
111
+ Evidence + findings
112
+ ↓
113
+ Severity / confidence / remediation
114
+ ↓
115
+ HTML / PDF report
116
+ ↓
117
+ Optional AI narration
118
+ ```
119
+
120
+ The checks alone decide what counts as a finding. AI is optional and
121
+ only helps explain results that already exist.
122
+
123
+ ## Installation
105
124
 
106
125
  Every path below installs Plexavo into its own isolated environment.
107
126
 
@@ -149,7 +168,7 @@ Use `python -m` for everything here too. The venv's own `pip.exe` and
149
168
  Want each finding rewritten as a full narrative? Install `"plexavo[ai]"`
150
169
  instead of `plexavo`, and set `ANTHROPIC_API_KEY`. See [Cost](#cost).
151
170
 
152
- ## 🚀 Using Plexavo
171
+ ## Using Plexavo
153
172
 
154
173
  Run it with no arguments and it walks you through everything: picking an
155
174
  AWS profile, choosing HTML or PDF, then scanning and showing your score
@@ -164,16 +183,30 @@ python -m plexavo # Windows Option 2
164
183
  <img src="assets/screenshot-cli.png" alt="Plexavo interactive CLI" width="700">
165
184
  </div>
166
185
 
167
- ### Running it on a schedule
186
+ ## The report
168
187
 
169
- Plexavo can also run unattended from cron or a GitHub Actions workflow,
170
- and flag a run when something regresses so you get notified without
171
- opening a report. See [`docs/automation.md`](docs/automation.md).
188
+ Reports are generated as HTML, PDF, or both. Every finding gets a free,
189
+ template-based fix by default, no key, no cost. Full AI-written
190
+ narration kicks in automatically once an `ANTHROPIC_API_KEY` is
191
+ detected, see [Cost](#cost).
172
192
 
173
- > [!NOTE]
174
- > **Think of a scan as a snapshot, not a finish line.** Run it repeatedly to catch regressions as your infrastructure changes.
193
+ <div align="center">
194
+ <img src="assets/screenshot-report.png" alt="Plexavo HTML report" width="700">
195
+ </div>
196
+
197
+ ## Cost
198
+
199
+ Detection and the free templates always cost nothing. Live AI only runs
200
+ with `--explain`, using **your own** `ANTHROPIC_API_KEY` in **your own**
201
+ Anthropic account.
202
+
203
+ Plexavo never sees your key and never calls the API without it. A full
204
+ scan with `--explain` typically costs a few cents.
175
205
 
176
- ### 🤖 Using it from Claude Code
206
+ > [!IMPORTANT]
207
+ > **No hidden AI bill.** If you don't provide an Anthropic API key, Plexavo does not make an AI API call.
208
+
209
+ ## Using it from Claude Code
177
210
 
178
211
  Using [Claude Code](https://claude.com/claude-code)? Install the
179
212
  `plexavo-scan` plugin, then just ask: "scan my AWS account for security
@@ -195,62 +228,88 @@ to `~/.claude/skills/plexavo-scan/SKILL.md`
195
228
  (`%USERPROFILE%\.claude\skills\plexavo-scan\SKILL.md` on Windows) instead,
196
229
  same skill, just without automatic updates.
197
230
 
198
- ## 📊 The report
231
+ ## Running it on a schedule
199
232
 
200
- Reports are generated as HTML, PDF, or both. Every finding gets a free,
201
- template-based fix by default, no key, no cost. Full AI-written
202
- narration kicks in automatically once an `ANTHROPIC_API_KEY` is
203
- detected, see [Cost](#cost).
233
+ Plexavo can also run unattended from cron or a GitHub Actions workflow,
234
+ and flag a run when something regresses so you get notified without
235
+ opening a report. See [`docs/automation.md`](docs/automation.md).
204
236
 
205
- <div align="center">
206
- <img src="assets/screenshot-report.png" alt="Plexavo HTML report" width="700">
207
- </div>
237
+ > [!NOTE]
238
+ > **Think of a scan as a snapshot, not a finish line.** Run it repeatedly to catch regressions as your infrastructure changes.
208
239
 
209
- ## 💰 Cost
240
+ ## Want to help?
210
241
 
211
- Detection and the free templates always cost nothing. Live AI only runs
212
- with `--explain`, using **your own** `ANTHROPIC_API_KEY` in **your own**
213
- Anthropic account.
242
+ You don't need to understand the whole codebase to contribute.
214
243
 
215
- Plexavo never sees your key and never calls the API without it. A full
216
- scan with `--explain` typically costs a few cents.
244
+ There are several ways to help:
217
245
 
218
- > [!IMPORTANT]
219
- > **No hidden AI bill.** If you don't provide an Anthropic API key, Plexavo does not make an AI API call.
246
+ - **Break Plexavo:** find a security blind spot or confusing result
247
+ - **Add a security check:** extend Plexavo's AWS coverage
248
+ - **Improve test coverage:** add or strengthen a test
249
+ - **Improve documentation:** make Plexavo easier to understand
250
+ - **Suggest an improvement:** tell us what would make a scan more useful
220
251
 
221
- ## 🤝 Contributing
252
+ > [!TIP]
253
+ > **First contribution?** Start with issues labeled
254
+ > [`good first issue`](../../issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22).
255
+ > Not sure where to start? Open an issue or comment on an existing one.
256
+ > You don't need to figure out the codebase alone.
222
257
 
223
- ```bash
224
- git clone https://github.com/plexavo/plexavo.git
225
- cd plexavo
226
- uv pip install -e .
227
- ```
258
+ ### Pick a way to contribute
228
259
 
229
- See [`CONTRIBUTING.md`](CONTRIBUTING.md) for the pattern used to add a
230
- new check.
260
+ | If you are... | You can... |
261
+ |---|---|
262
+ | A security researcher | Break Plexavo / report a blind spot |
263
+ | A Python developer | Add a check or improve existing logic |
264
+ | A cloud engineer | Test Plexavo against real AWS setups |
265
+ | A tester | Reproduce bugs and improve test coverage |
266
+ | A technical writer | Improve docs and examples |
267
+ | Just curious | Run a scan and tell us what was confusing |
231
268
 
232
- ### 🧨 Break Plexavo
269
+ You don't need to be a Plexavo expert.
233
270
 
234
- Think you can make Plexavo miss something, or give confusing guidance?
271
+ ## Break Plexavo
272
+
273
+ Security tools should be challenged.
274
+
275
+ Run Plexavo and tell us if you find:
276
+
277
+ - a security issue Plexavo misses
278
+ - a false positive
279
+ - a misleading severity
280
+ - incorrect remediation
281
+ - confusing report output
282
+ - an AWS resource Plexavo doesn't understand
283
+ - a case where the evidence isn't clear
284
+
285
+ You don't need to write code. If you find something useful, open an issue
286
+ and explain what happened.
235
287
 
236
288
  [**Report it →**](../../issues/new?template=break-plexavo.yml)
237
289
 
238
290
  Every confirmed, genuinely new finding gets fixed and shipped, and you
239
- get a permanent credit in the [Hall of Bugs](HALL_OF_BUGS.md).
291
+ get a permanent credit in the [Hall of Bugs](HALL_OF_BUGS.md). Check the
292
+ "what doesn't count" list there first, since some gaps are already
293
+ documented.
240
294
 
241
295
  **No bounty. Public credit only.**
242
296
 
243
297
  > [!TIP]
244
298
  > **The best security tool is one that gets challenged.** If you find a blind spot, break it, report it, and help make the next scan better.
245
299
 
246
- ## 🔐 Security
300
+ ## Contributing code
301
+
302
+ Ready to write code? [`CONTRIBUTING.md`](CONTRIBUTING.md) covers setup,
303
+ the pattern for adding a new check, and how to run the tests.
304
+
305
+ ## Security
247
306
 
248
307
  Found a vulnerability in the tool itself, not a misconfiguration in your
249
308
  own AWS account (that's the tool working correctly)?
250
309
 
251
310
  See [`SECURITY.md`](SECURITY.md) for a private reporting path.
252
311
 
253
- ## 📄 License
312
+ ## License
254
313
 
255
314
  AGPL-3.0, see [`LICENSE`](LICENSE).
256
315
 
@@ -16,7 +16,7 @@
16
16
  <img src="https://img.shields.io/pypi/v/plexavo?style=for-the-badge&logo=pypi&logoColor=white&label=PYPI" alt="PyPI version">
17
17
  </a>
18
18
  <a href="https://github.com/plexavo/plexavo/actions">
19
- <img src="https://img.shields.io/github/actions/workflow/status/plexavo/plexavo/ci.yml?style=for-the-badge&label=BUILD" alt="Build status">
19
+ <img src="https://img.shields.io/github/actions/workflow/status/plexavo/plexavo/tests.yml?style=for-the-badge&label=BUILD" alt="Build status">
20
20
  </a>
21
21
  </p>
22
22
 
@@ -39,7 +39,7 @@ for real-world misconfigurations, using your own local AWS credentials
39
39
  the same way `aws s3 ls` does, so nothing about your account ever
40
40
  leaves your machine.
41
41
 
42
- Each scan produces a **0–100 security score** and a plain-English report:
42
+ Each scan produces a **0-100 security score** and a plain-English report:
43
43
  what's wrong, what an attacker would actually do with it, and the exact
44
44
  command to fix it.
45
45
 
@@ -54,7 +54,7 @@ command to fix it.
54
54
  > conversational security briefing. See
55
55
  > [Using it from Claude Code](#using-it-from-claude-code).
56
56
 
57
- ## ✦ What it checks
57
+ ## What it checks
58
58
 
59
59
  **32 checks across 6 categories**, run against real AWS accounts:
60
60
 
@@ -72,7 +72,26 @@ See `docs/*-TEST-MATRIX.md` for how each check was verified.
72
72
  > [!TIP]
73
73
  > **Don't just trust the number.** Plexavo keeps severity, confidence, and evidence as separate signals, so a low-confidence Critical does not read the same as a high-confidence Medium.
74
74
 
75
- ## ⚡ Installation
75
+ ## How Plexavo works
76
+
77
+ ```text
78
+ AWS account
79
+ ↓
80
+ Plexavo deterministic checks
81
+ ↓
82
+ Evidence + findings
83
+ ↓
84
+ Severity / confidence / remediation
85
+ ↓
86
+ HTML / PDF report
87
+ ↓
88
+ Optional AI narration
89
+ ```
90
+
91
+ The checks alone decide what counts as a finding. AI is optional and
92
+ only helps explain results that already exist.
93
+
94
+ ## Installation
76
95
 
77
96
  Every path below installs Plexavo into its own isolated environment.
78
97
 
@@ -120,7 +139,7 @@ Use `python -m` for everything here too. The venv's own `pip.exe` and
120
139
  Want each finding rewritten as a full narrative? Install `"plexavo[ai]"`
121
140
  instead of `plexavo`, and set `ANTHROPIC_API_KEY`. See [Cost](#cost).
122
141
 
123
- ## 🚀 Using Plexavo
142
+ ## Using Plexavo
124
143
 
125
144
  Run it with no arguments and it walks you through everything: picking an
126
145
  AWS profile, choosing HTML or PDF, then scanning and showing your score
@@ -135,16 +154,30 @@ python -m plexavo # Windows Option 2
135
154
  <img src="assets/screenshot-cli.png" alt="Plexavo interactive CLI" width="700">
136
155
  </div>
137
156
 
138
- ### Running it on a schedule
157
+ ## The report
139
158
 
140
- Plexavo can also run unattended from cron or a GitHub Actions workflow,
141
- and flag a run when something regresses so you get notified without
142
- opening a report. See [`docs/automation.md`](docs/automation.md).
159
+ Reports are generated as HTML, PDF, or both. Every finding gets a free,
160
+ template-based fix by default, no key, no cost. Full AI-written
161
+ narration kicks in automatically once an `ANTHROPIC_API_KEY` is
162
+ detected, see [Cost](#cost).
143
163
 
144
- > [!NOTE]
145
- > **Think of a scan as a snapshot, not a finish line.** Run it repeatedly to catch regressions as your infrastructure changes.
164
+ <div align="center">
165
+ <img src="assets/screenshot-report.png" alt="Plexavo HTML report" width="700">
166
+ </div>
167
+
168
+ ## Cost
169
+
170
+ Detection and the free templates always cost nothing. Live AI only runs
171
+ with `--explain`, using **your own** `ANTHROPIC_API_KEY` in **your own**
172
+ Anthropic account.
173
+
174
+ Plexavo never sees your key and never calls the API without it. A full
175
+ scan with `--explain` typically costs a few cents.
146
176
 
147
- ### 🤖 Using it from Claude Code
177
+ > [!IMPORTANT]
178
+ > **No hidden AI bill.** If you don't provide an Anthropic API key, Plexavo does not make an AI API call.
179
+
180
+ ## Using it from Claude Code
148
181
 
149
182
  Using [Claude Code](https://claude.com/claude-code)? Install the
150
183
  `plexavo-scan` plugin, then just ask: "scan my AWS account for security
@@ -166,62 +199,88 @@ to `~/.claude/skills/plexavo-scan/SKILL.md`
166
199
  (`%USERPROFILE%\.claude\skills\plexavo-scan\SKILL.md` on Windows) instead,
167
200
  same skill, just without automatic updates.
168
201
 
169
- ## 📊 The report
202
+ ## Running it on a schedule
170
203
 
171
- Reports are generated as HTML, PDF, or both. Every finding gets a free,
172
- template-based fix by default, no key, no cost. Full AI-written
173
- narration kicks in automatically once an `ANTHROPIC_API_KEY` is
174
- detected, see [Cost](#cost).
204
+ Plexavo can also run unattended from cron or a GitHub Actions workflow,
205
+ and flag a run when something regresses so you get notified without
206
+ opening a report. See [`docs/automation.md`](docs/automation.md).
175
207
 
176
- <div align="center">
177
- <img src="assets/screenshot-report.png" alt="Plexavo HTML report" width="700">
178
- </div>
208
+ > [!NOTE]
209
+ > **Think of a scan as a snapshot, not a finish line.** Run it repeatedly to catch regressions as your infrastructure changes.
179
210
 
180
- ## 💰 Cost
211
+ ## Want to help?
181
212
 
182
- Detection and the free templates always cost nothing. Live AI only runs
183
- with `--explain`, using **your own** `ANTHROPIC_API_KEY` in **your own**
184
- Anthropic account.
213
+ You don't need to understand the whole codebase to contribute.
185
214
 
186
- Plexavo never sees your key and never calls the API without it. A full
187
- scan with `--explain` typically costs a few cents.
215
+ There are several ways to help:
188
216
 
189
- > [!IMPORTANT]
190
- > **No hidden AI bill.** If you don't provide an Anthropic API key, Plexavo does not make an AI API call.
217
+ - **Break Plexavo:** find a security blind spot or confusing result
218
+ - **Add a security check:** extend Plexavo's AWS coverage
219
+ - **Improve test coverage:** add or strengthen a test
220
+ - **Improve documentation:** make Plexavo easier to understand
221
+ - **Suggest an improvement:** tell us what would make a scan more useful
191
222
 
192
- ## 🤝 Contributing
223
+ > [!TIP]
224
+ > **First contribution?** Start with issues labeled
225
+ > [`good first issue`](../../issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22).
226
+ > Not sure where to start? Open an issue or comment on an existing one.
227
+ > You don't need to figure out the codebase alone.
193
228
 
194
- ```bash
195
- git clone https://github.com/plexavo/plexavo.git
196
- cd plexavo
197
- uv pip install -e .
198
- ```
229
+ ### Pick a way to contribute
199
230
 
200
- See [`CONTRIBUTING.md`](CONTRIBUTING.md) for the pattern used to add a
201
- new check.
231
+ | If you are... | You can... |
232
+ |---|---|
233
+ | A security researcher | Break Plexavo / report a blind spot |
234
+ | A Python developer | Add a check or improve existing logic |
235
+ | A cloud engineer | Test Plexavo against real AWS setups |
236
+ | A tester | Reproduce bugs and improve test coverage |
237
+ | A technical writer | Improve docs and examples |
238
+ | Just curious | Run a scan and tell us what was confusing |
202
239
 
203
- ### 🧨 Break Plexavo
240
+ You don't need to be a Plexavo expert.
204
241
 
205
- Think you can make Plexavo miss something, or give confusing guidance?
242
+ ## Break Plexavo
243
+
244
+ Security tools should be challenged.
245
+
246
+ Run Plexavo and tell us if you find:
247
+
248
+ - a security issue Plexavo misses
249
+ - a false positive
250
+ - a misleading severity
251
+ - incorrect remediation
252
+ - confusing report output
253
+ - an AWS resource Plexavo doesn't understand
254
+ - a case where the evidence isn't clear
255
+
256
+ You don't need to write code. If you find something useful, open an issue
257
+ and explain what happened.
206
258
 
207
259
  [**Report it →**](../../issues/new?template=break-plexavo.yml)
208
260
 
209
261
  Every confirmed, genuinely new finding gets fixed and shipped, and you
210
- get a permanent credit in the [Hall of Bugs](HALL_OF_BUGS.md).
262
+ get a permanent credit in the [Hall of Bugs](HALL_OF_BUGS.md). Check the
263
+ "what doesn't count" list there first, since some gaps are already
264
+ documented.
211
265
 
212
266
  **No bounty. Public credit only.**
213
267
 
214
268
  > [!TIP]
215
269
  > **The best security tool is one that gets challenged.** If you find a blind spot, break it, report it, and help make the next scan better.
216
270
 
217
- ## 🔐 Security
271
+ ## Contributing code
272
+
273
+ Ready to write code? [`CONTRIBUTING.md`](CONTRIBUTING.md) covers setup,
274
+ the pattern for adding a new check, and how to run the tests.
275
+
276
+ ## Security
218
277
 
219
278
  Found a vulnerability in the tool itself, not a misconfiguration in your
220
279
  own AWS account (that's the tool working correctly)?
221
280
 
222
281
  See [`SECURITY.md`](SECURITY.md) for a private reporting path.
223
282
 
224
- ## 📄 License
283
+ ## License
225
284
 
226
285
  AGPL-3.0, see [`LICENSE`](LICENSE).
227
286
 
@@ -4,4 +4,4 @@ Runs entirely with your own local AWS credentials. Nothing is sent to
4
4
  anyone else. See README.md for usage, or `plexavo scan --help`.
5
5
  """
6
6
 
7
- __version__ = "0.4.3"
7
+ __version__ = "0.4.4"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: plexavo
3
- Version: 0.4.3
3
+ Version: 0.4.4
4
4
  Summary: Open-source AWS misconfiguration scanner — runs with your own local AWS credentials, nothing sent to anyone else.
5
5
  Author: Kavee
6
6
  License: AGPL-3.0-or-later
@@ -45,7 +45,7 @@ Dynamic: license-file
45
45
  <img src="https://img.shields.io/pypi/v/plexavo?style=for-the-badge&logo=pypi&logoColor=white&label=PYPI" alt="PyPI version">
46
46
  </a>
47
47
  <a href="https://github.com/plexavo/plexavo/actions">
48
- <img src="https://img.shields.io/github/actions/workflow/status/plexavo/plexavo/ci.yml?style=for-the-badge&label=BUILD" alt="Build status">
48
+ <img src="https://img.shields.io/github/actions/workflow/status/plexavo/plexavo/tests.yml?style=for-the-badge&label=BUILD" alt="Build status">
49
49
  </a>
50
50
  </p>
51
51
 
@@ -68,7 +68,7 @@ for real-world misconfigurations, using your own local AWS credentials
68
68
  the same way `aws s3 ls` does, so nothing about your account ever
69
69
  leaves your machine.
70
70
 
71
- Each scan produces a **0–100 security score** and a plain-English report:
71
+ Each scan produces a **0-100 security score** and a plain-English report:
72
72
  what's wrong, what an attacker would actually do with it, and the exact
73
73
  command to fix it.
74
74
 
@@ -83,7 +83,7 @@ command to fix it.
83
83
  > conversational security briefing. See
84
84
  > [Using it from Claude Code](#using-it-from-claude-code).
85
85
 
86
- ## ✦ What it checks
86
+ ## What it checks
87
87
 
88
88
  **32 checks across 6 categories**, run against real AWS accounts:
89
89
 
@@ -101,7 +101,26 @@ See `docs/*-TEST-MATRIX.md` for how each check was verified.
101
101
  > [!TIP]
102
102
  > **Don't just trust the number.** Plexavo keeps severity, confidence, and evidence as separate signals, so a low-confidence Critical does not read the same as a high-confidence Medium.
103
103
 
104
- ## ⚡ Installation
104
+ ## How Plexavo works
105
+
106
+ ```text
107
+ AWS account
108
+ ↓
109
+ Plexavo deterministic checks
110
+ ↓
111
+ Evidence + findings
112
+ ↓
113
+ Severity / confidence / remediation
114
+ ↓
115
+ HTML / PDF report
116
+ ↓
117
+ Optional AI narration
118
+ ```
119
+
120
+ The checks alone decide what counts as a finding. AI is optional and
121
+ only helps explain results that already exist.
122
+
123
+ ## Installation
105
124
 
106
125
  Every path below installs Plexavo into its own isolated environment.
107
126
 
@@ -149,7 +168,7 @@ Use `python -m` for everything here too. The venv's own `pip.exe` and
149
168
  Want each finding rewritten as a full narrative? Install `"plexavo[ai]"`
150
169
  instead of `plexavo`, and set `ANTHROPIC_API_KEY`. See [Cost](#cost).
151
170
 
152
- ## 🚀 Using Plexavo
171
+ ## Using Plexavo
153
172
 
154
173
  Run it with no arguments and it walks you through everything: picking an
155
174
  AWS profile, choosing HTML or PDF, then scanning and showing your score
@@ -164,16 +183,30 @@ python -m plexavo # Windows Option 2
164
183
  <img src="assets/screenshot-cli.png" alt="Plexavo interactive CLI" width="700">
165
184
  </div>
166
185
 
167
- ### Running it on a schedule
186
+ ## The report
168
187
 
169
- Plexavo can also run unattended from cron or a GitHub Actions workflow,
170
- and flag a run when something regresses so you get notified without
171
- opening a report. See [`docs/automation.md`](docs/automation.md).
188
+ Reports are generated as HTML, PDF, or both. Every finding gets a free,
189
+ template-based fix by default, no key, no cost. Full AI-written
190
+ narration kicks in automatically once an `ANTHROPIC_API_KEY` is
191
+ detected, see [Cost](#cost).
172
192
 
173
- > [!NOTE]
174
- > **Think of a scan as a snapshot, not a finish line.** Run it repeatedly to catch regressions as your infrastructure changes.
193
+ <div align="center">
194
+ <img src="assets/screenshot-report.png" alt="Plexavo HTML report" width="700">
195
+ </div>
196
+
197
+ ## Cost
198
+
199
+ Detection and the free templates always cost nothing. Live AI only runs
200
+ with `--explain`, using **your own** `ANTHROPIC_API_KEY` in **your own**
201
+ Anthropic account.
202
+
203
+ Plexavo never sees your key and never calls the API without it. A full
204
+ scan with `--explain` typically costs a few cents.
175
205
 
176
- ### 🤖 Using it from Claude Code
206
+ > [!IMPORTANT]
207
+ > **No hidden AI bill.** If you don't provide an Anthropic API key, Plexavo does not make an AI API call.
208
+
209
+ ## Using it from Claude Code
177
210
 
178
211
  Using [Claude Code](https://claude.com/claude-code)? Install the
179
212
  `plexavo-scan` plugin, then just ask: "scan my AWS account for security
@@ -195,62 +228,88 @@ to `~/.claude/skills/plexavo-scan/SKILL.md`
195
228
  (`%USERPROFILE%\.claude\skills\plexavo-scan\SKILL.md` on Windows) instead,
196
229
  same skill, just without automatic updates.
197
230
 
198
- ## 📊 The report
231
+ ## Running it on a schedule
199
232
 
200
- Reports are generated as HTML, PDF, or both. Every finding gets a free,
201
- template-based fix by default, no key, no cost. Full AI-written
202
- narration kicks in automatically once an `ANTHROPIC_API_KEY` is
203
- detected, see [Cost](#cost).
233
+ Plexavo can also run unattended from cron or a GitHub Actions workflow,
234
+ and flag a run when something regresses so you get notified without
235
+ opening a report. See [`docs/automation.md`](docs/automation.md).
204
236
 
205
- <div align="center">
206
- <img src="assets/screenshot-report.png" alt="Plexavo HTML report" width="700">
207
- </div>
237
+ > [!NOTE]
238
+ > **Think of a scan as a snapshot, not a finish line.** Run it repeatedly to catch regressions as your infrastructure changes.
208
239
 
209
- ## 💰 Cost
240
+ ## Want to help?
210
241
 
211
- Detection and the free templates always cost nothing. Live AI only runs
212
- with `--explain`, using **your own** `ANTHROPIC_API_KEY` in **your own**
213
- Anthropic account.
242
+ You don't need to understand the whole codebase to contribute.
214
243
 
215
- Plexavo never sees your key and never calls the API without it. A full
216
- scan with `--explain` typically costs a few cents.
244
+ There are several ways to help:
217
245
 
218
- > [!IMPORTANT]
219
- > **No hidden AI bill.** If you don't provide an Anthropic API key, Plexavo does not make an AI API call.
246
+ - **Break Plexavo:** find a security blind spot or confusing result
247
+ - **Add a security check:** extend Plexavo's AWS coverage
248
+ - **Improve test coverage:** add or strengthen a test
249
+ - **Improve documentation:** make Plexavo easier to understand
250
+ - **Suggest an improvement:** tell us what would make a scan more useful
220
251
 
221
- ## 🤝 Contributing
252
+ > [!TIP]
253
+ > **First contribution?** Start with issues labeled
254
+ > [`good first issue`](../../issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22).
255
+ > Not sure where to start? Open an issue or comment on an existing one.
256
+ > You don't need to figure out the codebase alone.
222
257
 
223
- ```bash
224
- git clone https://github.com/plexavo/plexavo.git
225
- cd plexavo
226
- uv pip install -e .
227
- ```
258
+ ### Pick a way to contribute
228
259
 
229
- See [`CONTRIBUTING.md`](CONTRIBUTING.md) for the pattern used to add a
230
- new check.
260
+ | If you are... | You can... |
261
+ |---|---|
262
+ | A security researcher | Break Plexavo / report a blind spot |
263
+ | A Python developer | Add a check or improve existing logic |
264
+ | A cloud engineer | Test Plexavo against real AWS setups |
265
+ | A tester | Reproduce bugs and improve test coverage |
266
+ | A technical writer | Improve docs and examples |
267
+ | Just curious | Run a scan and tell us what was confusing |
231
268
 
232
- ### 🧨 Break Plexavo
269
+ You don't need to be a Plexavo expert.
233
270
 
234
- Think you can make Plexavo miss something, or give confusing guidance?
271
+ ## Break Plexavo
272
+
273
+ Security tools should be challenged.
274
+
275
+ Run Plexavo and tell us if you find:
276
+
277
+ - a security issue Plexavo misses
278
+ - a false positive
279
+ - a misleading severity
280
+ - incorrect remediation
281
+ - confusing report output
282
+ - an AWS resource Plexavo doesn't understand
283
+ - a case where the evidence isn't clear
284
+
285
+ You don't need to write code. If you find something useful, open an issue
286
+ and explain what happened.
235
287
 
236
288
  [**Report it →**](../../issues/new?template=break-plexavo.yml)
237
289
 
238
290
  Every confirmed, genuinely new finding gets fixed and shipped, and you
239
- get a permanent credit in the [Hall of Bugs](HALL_OF_BUGS.md).
291
+ get a permanent credit in the [Hall of Bugs](HALL_OF_BUGS.md). Check the
292
+ "what doesn't count" list there first, since some gaps are already
293
+ documented.
240
294
 
241
295
  **No bounty. Public credit only.**
242
296
 
243
297
  > [!TIP]
244
298
  > **The best security tool is one that gets challenged.** If you find a blind spot, break it, report it, and help make the next scan better.
245
299
 
246
- ## 🔐 Security
300
+ ## Contributing code
301
+
302
+ Ready to write code? [`CONTRIBUTING.md`](CONTRIBUTING.md) covers setup,
303
+ the pattern for adding a new check, and how to run the tests.
304
+
305
+ ## Security
247
306
 
248
307
  Found a vulnerability in the tool itself, not a misconfiguration in your
249
308
  own AWS account (that's the tool working correctly)?
250
309
 
251
310
  See [`SECURITY.md`](SECURITY.md) for a private reporting path.
252
311
 
253
- ## 📄 License
312
+ ## License
254
313
 
255
314
  AGPL-3.0, see [`LICENSE`](LICENSE).
256
315
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "plexavo"
7
- version = "0.4.3"
7
+ version = "0.4.4"
8
8
  description = "Open-source AWS misconfiguration scanner — runs with your own local AWS credentials, nothing sent to anyone else."
9
9
  readme = "README.md"
10
10
  license = { text = "AGPL-3.0-or-later" }
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes