plexavo 0.4.2__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.2 → plexavo-0.4.4}/PKG-INFO +107 -46
  2. {plexavo-0.4.2 → plexavo-0.4.4}/README.md +106 -45
  3. {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/__init__.py +1 -1
  4. {plexavo-0.4.2 → plexavo-0.4.4}/plexavo.egg-info/PKG-INFO +107 -46
  5. {plexavo-0.4.2 → plexavo-0.4.4}/pyproject.toml +1 -1
  6. {plexavo-0.4.2 → plexavo-0.4.4}/LICENSE +0 -0
  7. {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/__main__.py +0 -0
  8. {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/attack_paths.py +0 -0
  9. {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/auth.py +0 -0
  10. {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/aws_profile_setup.py +0 -0
  11. {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/checks/__init__.py +0 -0
  12. {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/checks/encryption.py +0 -0
  13. {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/checks/iam.py +0 -0
  14. {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/checks/iam_hygiene.py +0 -0
  15. {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/checks/logging.py +0 -0
  16. {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/checks/network.py +0 -0
  17. {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/checks/storage.py +0 -0
  18. {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/checks/usage.py +0 -0
  19. {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/cli.py +0 -0
  20. {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/findings.py +0 -0
  21. {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/interactive.py +0 -0
  22. {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/principals.py +0 -0
  23. {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/report/__init__.py +0 -0
  24. {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/report/ai_narration.py +0 -0
  25. {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/report/fonts/DejaVuSans-Bold.ttf +0 -0
  26. {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/report/fonts/DejaVuSans-BoldOblique.ttf +0 -0
  27. {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/report/fonts/DejaVuSans-Oblique.ttf +0 -0
  28. {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/report/fonts/DejaVuSans.ttf +0 -0
  29. {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/report/fonts/GEIST-FONT-LICENSE.txt +0 -0
  30. {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/report/html_report.py +0 -0
  31. {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/report/json_report.py +0 -0
  32. {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/report/pdf.py +0 -0
  33. {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/report/templates/report.html.j2 +0 -0
  34. {plexavo-0.4.2 → plexavo-0.4.4}/plexavo/scoring.py +0 -0
  35. {plexavo-0.4.2 → plexavo-0.4.4}/plexavo.egg-info/SOURCES.txt +0 -0
  36. {plexavo-0.4.2 → plexavo-0.4.4}/plexavo.egg-info/dependency_links.txt +0 -0
  37. {plexavo-0.4.2 → plexavo-0.4.4}/plexavo.egg-info/entry_points.txt +0 -0
  38. {plexavo-0.4.2 → plexavo-0.4.4}/plexavo.egg-info/requires.txt +0 -0
  39. {plexavo-0.4.2 → plexavo-0.4.4}/plexavo.egg-info/top_level.txt +0 -0
  40. {plexavo-0.4.2 → plexavo-0.4.4}/setup.cfg +0 -0
  41. {plexavo-0.4.2 → plexavo-0.4.4}/tests/test_ai_narration_offline.py +0 -0
  42. {plexavo-0.4.2 → plexavo-0.4.4}/tests/test_attack_paths_offline.py +0 -0
  43. {plexavo-0.4.2 → plexavo-0.4.4}/tests/test_auth_offline.py +0 -0
  44. {plexavo-0.4.2 → plexavo-0.4.4}/tests/test_cli_entrypoint.py +0 -0
  45. {plexavo-0.4.2 → plexavo-0.4.4}/tests/test_encryption_offline.py +0 -0
  46. {plexavo-0.4.2 → plexavo-0.4.4}/tests/test_fail_on_offline.py +0 -0
  47. {plexavo-0.4.2 → plexavo-0.4.4}/tests/test_iam_hygiene_offline.py +0 -0
  48. {plexavo-0.4.2 → plexavo-0.4.4}/tests/test_iam_offline.py +0 -0
  49. {plexavo-0.4.2 → plexavo-0.4.4}/tests/test_json_report_offline.py +0 -0
  50. {plexavo-0.4.2 → plexavo-0.4.4}/tests/test_logging_offline.py +0 -0
  51. {plexavo-0.4.2 → plexavo-0.4.4}/tests/test_network_offline.py +0 -0
  52. {plexavo-0.4.2 → plexavo-0.4.4}/tests/test_report_offline.py +0 -0
  53. {plexavo-0.4.2 → plexavo-0.4.4}/tests/test_scoring.py +0 -0
  54. {plexavo-0.4.2 → plexavo-0.4.4}/tests/test_storage_offline.py +0 -0
  55. {plexavo-0.4.2 → 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.2
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,23 +183,39 @@ 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
180
- issues using Plexavo." It relays exactly what Plexavo found, and never
181
- runs a state-changing AWS command without asking first. Don't have Plexavo
182
- installed yet? It notices, and with your approval at each step installs uv
183
- and Plexavo for you, including the Windows Smart App Control workaround.
213
+ issues using Plexavo." It relays exactly what Plexavo found, shows
214
+ Plexavo's own fix commands word for word, and never runs one itself: you
215
+ do. It only reads your AWS profile names, never your credentials. Don't
216
+ have Plexavo installed yet? It notices, and with a click on a yes/no
217
+ choice at each step installs uv and Plexavo for you, including the Windows
218
+ Smart App Control workaround.
184
219
 
185
220
  ```
186
221
  /plugin marketplace add plexavo/Plexavo
@@ -193,62 +228,88 @@ to `~/.claude/skills/plexavo-scan/SKILL.md`
193
228
  (`%USERPROFILE%\.claude\skills\plexavo-scan\SKILL.md` on Windows) instead,
194
229
  same skill, just without automatic updates.
195
230
 
196
- ## 📊 The report
231
+ ## Running it on a schedule
197
232
 
198
- Reports are generated as HTML, PDF, or both. Every finding gets a free,
199
- template-based fix by default, no key, no cost. Full AI-written
200
- narration kicks in automatically once an `ANTHROPIC_API_KEY` is
201
- 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).
202
236
 
203
- <div align="center">
204
- <img src="assets/screenshot-report.png" alt="Plexavo HTML report" width="700">
205
- </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.
206
239
 
207
- ## 💰 Cost
240
+ ## Want to help?
208
241
 
209
- Detection and the free templates always cost nothing. Live AI only runs
210
- with `--explain`, using **your own** `ANTHROPIC_API_KEY` in **your own**
211
- Anthropic account.
242
+ You don't need to understand the whole codebase to contribute.
212
243
 
213
- Plexavo never sees your key and never calls the API without it. A full
214
- scan with `--explain` typically costs a few cents.
244
+ There are several ways to help:
215
245
 
216
- > [!IMPORTANT]
217
- > **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
218
251
 
219
- ## 🤝 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.
220
257
 
221
- ```bash
222
- git clone https://github.com/plexavo/plexavo.git
223
- cd plexavo
224
- uv pip install -e .
225
- ```
258
+ ### Pick a way to contribute
226
259
 
227
- See [`CONTRIBUTING.md`](CONTRIBUTING.md) for the pattern used to add a
228
- 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 |
229
268
 
230
- ### 🧨 Break Plexavo
269
+ You don't need to be a Plexavo expert.
231
270
 
232
- 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.
233
287
 
234
288
  [**Report it →**](../../issues/new?template=break-plexavo.yml)
235
289
 
236
290
  Every confirmed, genuinely new finding gets fixed and shipped, and you
237
- 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.
238
294
 
239
295
  **No bounty. Public credit only.**
240
296
 
241
297
  > [!TIP]
242
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.
243
299
 
244
- ## 🔐 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
245
306
 
246
307
  Found a vulnerability in the tool itself, not a misconfiguration in your
247
308
  own AWS account (that's the tool working correctly)?
248
309
 
249
310
  See [`SECURITY.md`](SECURITY.md) for a private reporting path.
250
311
 
251
- ## 📄 License
312
+ ## License
252
313
 
253
314
  AGPL-3.0, see [`LICENSE`](LICENSE).
254
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,23 +154,39 @@ 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
151
- issues using Plexavo." It relays exactly what Plexavo found, and never
152
- runs a state-changing AWS command without asking first. Don't have Plexavo
153
- installed yet? It notices, and with your approval at each step installs uv
154
- and Plexavo for you, including the Windows Smart App Control workaround.
184
+ issues using Plexavo." It relays exactly what Plexavo found, shows
185
+ Plexavo's own fix commands word for word, and never runs one itself: you
186
+ do. It only reads your AWS profile names, never your credentials. Don't
187
+ have Plexavo installed yet? It notices, and with a click on a yes/no
188
+ choice at each step installs uv and Plexavo for you, including the Windows
189
+ Smart App Control workaround.
155
190
 
156
191
  ```
157
192
  /plugin marketplace add plexavo/Plexavo
@@ -164,62 +199,88 @@ to `~/.claude/skills/plexavo-scan/SKILL.md`
164
199
  (`%USERPROFILE%\.claude\skills\plexavo-scan\SKILL.md` on Windows) instead,
165
200
  same skill, just without automatic updates.
166
201
 
167
- ## 📊 The report
202
+ ## Running it on a schedule
168
203
 
169
- Reports are generated as HTML, PDF, or both. Every finding gets a free,
170
- template-based fix by default, no key, no cost. Full AI-written
171
- narration kicks in automatically once an `ANTHROPIC_API_KEY` is
172
- 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).
173
207
 
174
- <div align="center">
175
- <img src="assets/screenshot-report.png" alt="Plexavo HTML report" width="700">
176
- </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.
177
210
 
178
- ## 💰 Cost
211
+ ## Want to help?
179
212
 
180
- Detection and the free templates always cost nothing. Live AI only runs
181
- with `--explain`, using **your own** `ANTHROPIC_API_KEY` in **your own**
182
- Anthropic account.
213
+ You don't need to understand the whole codebase to contribute.
183
214
 
184
- Plexavo never sees your key and never calls the API without it. A full
185
- scan with `--explain` typically costs a few cents.
215
+ There are several ways to help:
186
216
 
187
- > [!IMPORTANT]
188
- > **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
189
222
 
190
- ## 🤝 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.
191
228
 
192
- ```bash
193
- git clone https://github.com/plexavo/plexavo.git
194
- cd plexavo
195
- uv pip install -e .
196
- ```
229
+ ### Pick a way to contribute
197
230
 
198
- See [`CONTRIBUTING.md`](CONTRIBUTING.md) for the pattern used to add a
199
- 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 |
200
239
 
201
- ### 🧨 Break Plexavo
240
+ You don't need to be a Plexavo expert.
202
241
 
203
- 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.
204
258
 
205
259
  [**Report it →**](../../issues/new?template=break-plexavo.yml)
206
260
 
207
261
  Every confirmed, genuinely new finding gets fixed and shipped, and you
208
- 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.
209
265
 
210
266
  **No bounty. Public credit only.**
211
267
 
212
268
  > [!TIP]
213
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.
214
270
 
215
- ## 🔐 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
216
277
 
217
278
  Found a vulnerability in the tool itself, not a misconfiguration in your
218
279
  own AWS account (that's the tool working correctly)?
219
280
 
220
281
  See [`SECURITY.md`](SECURITY.md) for a private reporting path.
221
282
 
222
- ## 📄 License
283
+ ## License
223
284
 
224
285
  AGPL-3.0, see [`LICENSE`](LICENSE).
225
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.2"
7
+ __version__ = "0.4.4"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: plexavo
3
- Version: 0.4.2
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,23 +183,39 @@ 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
180
- issues using Plexavo." It relays exactly what Plexavo found, and never
181
- runs a state-changing AWS command without asking first. Don't have Plexavo
182
- installed yet? It notices, and with your approval at each step installs uv
183
- and Plexavo for you, including the Windows Smart App Control workaround.
213
+ issues using Plexavo." It relays exactly what Plexavo found, shows
214
+ Plexavo's own fix commands word for word, and never runs one itself: you
215
+ do. It only reads your AWS profile names, never your credentials. Don't
216
+ have Plexavo installed yet? It notices, and with a click on a yes/no
217
+ choice at each step installs uv and Plexavo for you, including the Windows
218
+ Smart App Control workaround.
184
219
 
185
220
  ```
186
221
  /plugin marketplace add plexavo/Plexavo
@@ -193,62 +228,88 @@ to `~/.claude/skills/plexavo-scan/SKILL.md`
193
228
  (`%USERPROFILE%\.claude\skills\plexavo-scan\SKILL.md` on Windows) instead,
194
229
  same skill, just without automatic updates.
195
230
 
196
- ## 📊 The report
231
+ ## Running it on a schedule
197
232
 
198
- Reports are generated as HTML, PDF, or both. Every finding gets a free,
199
- template-based fix by default, no key, no cost. Full AI-written
200
- narration kicks in automatically once an `ANTHROPIC_API_KEY` is
201
- 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).
202
236
 
203
- <div align="center">
204
- <img src="assets/screenshot-report.png" alt="Plexavo HTML report" width="700">
205
- </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.
206
239
 
207
- ## 💰 Cost
240
+ ## Want to help?
208
241
 
209
- Detection and the free templates always cost nothing. Live AI only runs
210
- with `--explain`, using **your own** `ANTHROPIC_API_KEY` in **your own**
211
- Anthropic account.
242
+ You don't need to understand the whole codebase to contribute.
212
243
 
213
- Plexavo never sees your key and never calls the API without it. A full
214
- scan with `--explain` typically costs a few cents.
244
+ There are several ways to help:
215
245
 
216
- > [!IMPORTANT]
217
- > **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
218
251
 
219
- ## 🤝 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.
220
257
 
221
- ```bash
222
- git clone https://github.com/plexavo/plexavo.git
223
- cd plexavo
224
- uv pip install -e .
225
- ```
258
+ ### Pick a way to contribute
226
259
 
227
- See [`CONTRIBUTING.md`](CONTRIBUTING.md) for the pattern used to add a
228
- 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 |
229
268
 
230
- ### 🧨 Break Plexavo
269
+ You don't need to be a Plexavo expert.
231
270
 
232
- 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.
233
287
 
234
288
  [**Report it →**](../../issues/new?template=break-plexavo.yml)
235
289
 
236
290
  Every confirmed, genuinely new finding gets fixed and shipped, and you
237
- 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.
238
294
 
239
295
  **No bounty. Public credit only.**
240
296
 
241
297
  > [!TIP]
242
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.
243
299
 
244
- ## 🔐 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
245
306
 
246
307
  Found a vulnerability in the tool itself, not a misconfiguration in your
247
308
  own AWS account (that's the tool working correctly)?
248
309
 
249
310
  See [`SECURITY.md`](SECURITY.md) for a private reporting path.
250
311
 
251
- ## 📄 License
312
+ ## License
252
313
 
253
314
  AGPL-3.0, see [`LICENSE`](LICENSE).
254
315
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "plexavo"
7
- version = "0.4.2"
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