plexavo 0.2.2__tar.gz → 0.2.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 (50) hide show
  1. {plexavo-0.2.2 → plexavo-0.2.4}/PKG-INFO +66 -146
  2. {plexavo-0.2.2 → plexavo-0.2.4}/README.md +65 -145
  3. {plexavo-0.2.2 → plexavo-0.2.4}/plexavo/__init__.py +1 -1
  4. {plexavo-0.2.2 → plexavo-0.2.4}/plexavo/__main__.py +1 -1
  5. {plexavo-0.2.2 → plexavo-0.2.4}/plexavo.egg-info/PKG-INFO +66 -146
  6. {plexavo-0.2.2 → plexavo-0.2.4}/pyproject.toml +1 -1
  7. {plexavo-0.2.2 → plexavo-0.2.4}/tests/test_cli_entrypoint.py +4 -3
  8. {plexavo-0.2.2 → plexavo-0.2.4}/LICENSE +0 -0
  9. {plexavo-0.2.2 → plexavo-0.2.4}/plexavo/auth.py +0 -0
  10. {plexavo-0.2.2 → plexavo-0.2.4}/plexavo/aws_profile_setup.py +0 -0
  11. {plexavo-0.2.2 → plexavo-0.2.4}/plexavo/checks/__init__.py +0 -0
  12. {plexavo-0.2.2 → plexavo-0.2.4}/plexavo/checks/encryption.py +0 -0
  13. {plexavo-0.2.2 → plexavo-0.2.4}/plexavo/checks/iam.py +0 -0
  14. {plexavo-0.2.2 → plexavo-0.2.4}/plexavo/checks/iam_hygiene.py +0 -0
  15. {plexavo-0.2.2 → plexavo-0.2.4}/plexavo/checks/logging.py +0 -0
  16. {plexavo-0.2.2 → plexavo-0.2.4}/plexavo/checks/network.py +0 -0
  17. {plexavo-0.2.2 → plexavo-0.2.4}/plexavo/checks/storage.py +0 -0
  18. {plexavo-0.2.2 → plexavo-0.2.4}/plexavo/checks/usage.py +0 -0
  19. {plexavo-0.2.2 → plexavo-0.2.4}/plexavo/cli.py +0 -0
  20. {plexavo-0.2.2 → plexavo-0.2.4}/plexavo/findings.py +0 -0
  21. {plexavo-0.2.2 → plexavo-0.2.4}/plexavo/interactive.py +0 -0
  22. {plexavo-0.2.2 → plexavo-0.2.4}/plexavo/principals.py +0 -0
  23. {plexavo-0.2.2 → plexavo-0.2.4}/plexavo/report/__init__.py +0 -0
  24. {plexavo-0.2.2 → plexavo-0.2.4}/plexavo/report/ai_narration.py +0 -0
  25. {plexavo-0.2.2 → plexavo-0.2.4}/plexavo/report/fonts/DejaVuSans-Bold.ttf +0 -0
  26. {plexavo-0.2.2 → plexavo-0.2.4}/plexavo/report/fonts/DejaVuSans-BoldOblique.ttf +0 -0
  27. {plexavo-0.2.2 → plexavo-0.2.4}/plexavo/report/fonts/DejaVuSans-Oblique.ttf +0 -0
  28. {plexavo-0.2.2 → plexavo-0.2.4}/plexavo/report/fonts/DejaVuSans.ttf +0 -0
  29. {plexavo-0.2.2 → plexavo-0.2.4}/plexavo/report/fonts/GEIST-FONT-LICENSE.txt +0 -0
  30. {plexavo-0.2.2 → plexavo-0.2.4}/plexavo/report/html_report.py +0 -0
  31. {plexavo-0.2.2 → plexavo-0.2.4}/plexavo/report/pdf.py +0 -0
  32. {plexavo-0.2.2 → plexavo-0.2.4}/plexavo/report/templates/report.html.j2 +0 -0
  33. {plexavo-0.2.2 → plexavo-0.2.4}/plexavo/scoring.py +0 -0
  34. {plexavo-0.2.2 → plexavo-0.2.4}/plexavo.egg-info/SOURCES.txt +0 -0
  35. {plexavo-0.2.2 → plexavo-0.2.4}/plexavo.egg-info/dependency_links.txt +0 -0
  36. {plexavo-0.2.2 → plexavo-0.2.4}/plexavo.egg-info/entry_points.txt +0 -0
  37. {plexavo-0.2.2 → plexavo-0.2.4}/plexavo.egg-info/requires.txt +0 -0
  38. {plexavo-0.2.2 → plexavo-0.2.4}/plexavo.egg-info/top_level.txt +0 -0
  39. {plexavo-0.2.2 → plexavo-0.2.4}/setup.cfg +0 -0
  40. {plexavo-0.2.2 → plexavo-0.2.4}/tests/test_ai_narration_offline.py +0 -0
  41. {plexavo-0.2.2 → plexavo-0.2.4}/tests/test_auth_offline.py +0 -0
  42. {plexavo-0.2.2 → plexavo-0.2.4}/tests/test_encryption_offline.py +0 -0
  43. {plexavo-0.2.2 → plexavo-0.2.4}/tests/test_iam_hygiene_offline.py +0 -0
  44. {plexavo-0.2.2 → plexavo-0.2.4}/tests/test_iam_offline.py +0 -0
  45. {plexavo-0.2.2 → plexavo-0.2.4}/tests/test_logging_offline.py +0 -0
  46. {plexavo-0.2.2 → plexavo-0.2.4}/tests/test_network_offline.py +0 -0
  47. {plexavo-0.2.2 → plexavo-0.2.4}/tests/test_report_offline.py +0 -0
  48. {plexavo-0.2.2 → plexavo-0.2.4}/tests/test_scoring.py +0 -0
  49. {plexavo-0.2.2 → plexavo-0.2.4}/tests/test_storage_offline.py +0 -0
  50. {plexavo-0.2.2 → plexavo-0.2.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.2.2
3
+ Version: 0.2.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
@@ -125,187 +125,107 @@ scoped by a Condition block, or a CloudTrail lookup that hit its page cap on
125
125
  `--report-html`/`--report-pdf` render this same data as a full report; see
126
126
  [Cost](#cost) for what `--explain` needs and what it costs.
127
127
 
128
- ## Quick start
128
+ ## Install
129
129
 
130
- The install path depends on your OS — **uv on macOS & Linux**, **pip on
131
- Windows**. Either way it's a one-command install with no venv to create,
132
- activate, or reactivate in every new terminal.
130
+ Plexavo is a command-line tool. Pick your OS below every path installs
131
+ it into its own isolated environment, so it never clashes with your other
132
+ Python packages.
133
133
 
134
- ### macOS & Linux — uv
134
+ ### macOS & Linux
135
135
 
136
- [uv](https://docs.astral.sh/uv/) installs Plexavo into its own isolated
137
- environment automatically.
138
-
139
- **1. Install uv** (if you don't already have it):
140
-
141
- ```bash
142
- curl -LsSf https://astral.sh/uv/install.sh | sh
143
- ```
144
-
145
- (Full options: [uv installation docs](https://docs.astral.sh/uv/getting-started/installation/).)
146
-
147
- **2. Install Plexavo:**
136
+ [uv](https://docs.astral.sh/uv/) puts a single `plexavo` command on your
137
+ PATH, in every terminal, with nothing to activate:
148
138
 
149
139
  ```bash
140
+ curl -LsSf https://astral.sh/uv/install.sh | sh # skip if you have uv
150
141
  uv tool install plexavo
151
142
  ```
152
143
 
153
- That's it `plexavo` is now on your PATH in every terminal, until you
154
- uninstall it. No activate step, ever.
155
-
156
- **Have an Anthropic API key and want AI-narrated explanations** (see
157
- [Cost](#cost) — it's optional and costs a few cents per scan, not
158
- free)? Install with the `[ai]` extra instead — same package, just with
159
- the `anthropic` library included:
160
-
161
- ```bash
162
- uv tool install "plexavo[ai]"
163
- ```
164
-
165
- No key yet, or not sure? Skip it for now — the plain install is
166
- genuinely complete on its own. Add it later with:
167
-
168
- ```bash
169
- uv tool install --reinstall "plexavo[ai]"
170
- ```
171
-
172
- Just want to try it once without installing anything?
144
+ Update or remove later with `uv tool upgrade plexavo` /
145
+ `uv tool uninstall plexavo`. Prefer [pipx](https://pipx.pypa.io/)?
146
+ `pipx install plexavo` works the same way.
173
147
 
174
- ```bash
175
- uvx plexavo scan --profile my-aws-profile
176
- ```
148
+ ### Windows
177
149
 
178
- Updating or removing later:
179
-
180
- ```bash
181
- uv tool upgrade plexavo
182
- uv tool uninstall plexavo
183
- ```
150
+ `uv` and `pipx` install fine, but the small `plexavo.exe` launcher they
151
+ drop on your PATH is unsigned, and Windows Smart App Control refuses to
152
+ run unsigned executables it doesn't recognise. The way around it is to
153
+ run Plexavo through Python directly. Two ways — both isolated, pick one:
184
154
 
185
- ### Windowspip
186
-
187
- Install with `pip` and run the tool as `py -m plexavo`:
155
+ #### Option 1 uv (recommended)
188
156
 
189
157
  ```powershell
190
- py -m pip install --user plexavo
191
- py -m plexavo
192
- ```
193
-
194
- `py -m plexavo` with no arguments opens the interactive menu, exactly
195
- like the `plexavo` command does on macOS/Linux — flags are only for
196
- scripting/CI.
197
-
198
- > **Why not uv/pipx on Windows?** Both work by putting a small generated
199
- > `plexavo.exe` launcher on your PATH. That launcher is unsigned, and
200
- > Windows Smart App Control blocks unsigned executables it doesn't
201
- > recognise — so `plexavo` can fail to start with a "can't confirm who
202
- > published" message. `py -m plexavo` calls Python directly and never
203
- > touches that launcher, so it always works. (If your machine doesn't
204
- > enforce Smart App Control, `uv tool install plexavo` works here too.)
158
+ uv tool install plexavo
205
159
 
206
- **AI-narrated explanations** (see [Cost](#cost)):
160
+ Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
207
161
 
208
- ```powershell
209
- py -m pip install --user "plexavo[ai]"
162
+ if (!(Test-Path $PROFILE)) { New-Item -ItemType File -Path $PROFILE -Force }
163
+ Add-Content $PROFILE 'function plexavo { & "$env:APPDATA\uv\tools\plexavo\Scripts\python.exe" -m plexavo @args }'
210
164
  ```
211
165
 
212
- Updating or removing later:
213
-
214
- ```powershell
215
- py -m pip install --user --upgrade plexavo
216
- py -m pip uninstall plexavo
217
- ```
166
+ Open a new terminal and `plexavo` works exactly like it does on
167
+ macOS/Linux.
218
168
 
219
- ### Optional: type `plexavo` instead of `py -m plexavo`
169
+ `uv tool install` still leaves the blocked `plexavo.exe` on your PATH.
170
+ The line you add to your PowerShell profile shadows it with a command
171
+ that calls uv's bundled `python.exe` directly — that Python is signed by
172
+ the Python Software Foundation, so Smart App Control never stops it. You
173
+ add it once; the `Set-ExecutionPolicy` line (also once) is what lets
174
+ PowerShell load your profile at all. Update later with
175
+ `uv tool upgrade plexavo`.
220
176
 
221
- Add a shortcut to your PowerShell profile once:
177
+ #### Option 2 virtual environment (no uv)
222
178
 
223
179
  ```powershell
224
- Add-Content $PROFILE 'function plexavo { py -m plexavo @args }'
180
+ py -m venv plexavo-venv
181
+ .\plexavo-venv\Scripts\Activate.ps1
182
+ python -m pip install plexavo
183
+ python -m plexavo
225
184
  ```
226
185
 
227
- Open a new terminal and `plexavo` then works just like it does on
228
- macOS/Linux.
186
+ Use `python -m` for everything inside the venv. Creating a venv also
187
+ generates its own `pip.exe` and `plexavo.exe`, and those are exactly the
188
+ unsigned launcher stubs Smart App Control blocks — but the venv's
189
+ `python.exe` is a copy of your real Python with its signature intact, so
190
+ going through it (`python -m pip`, `python -m plexavo`) always works.
229
191
 
230
- ### Run a scan
192
+ Activating the venv (`.\plexavo-venv\Scripts\Activate.ps1`) just points
193
+ `python` at this environment for the current terminal — you re-run it in
194
+ each new terminal, and `deactivate` leaves it. If PowerShell blocks the
195
+ activate script, run `Set-ExecutionPolicy -Scope CurrentUser RemoteSigned`
196
+ once. Update with `python -m pip install --upgrade plexavo` inside the
197
+ activated environment.
231
198
 
232
- ```bash
233
- plexavo scan --profile my-aws-profile --report-html report.html
234
- ```
199
+ ### AI-narrated explanations (optional, any OS)
235
200
 
236
- (On Windows without the shortcut above: `py -m plexavo scan --profile
237
- my-aws-profile --report-html report.html`.)
201
+ Plexavo is complete without this. If you have an Anthropic API key and
202
+ want each finding rewritten as a full narrative (see [Cost](#cost)),
203
+ install `"plexavo[ai]"` in place of `plexavo` in any command above.
238
204
 
239
- No `--profile`? It uses your default profile / environment variables,
240
- same resolution order as the AWS CLI. No AI, no API key, no cost — and
241
- findings still come with free Next Step / Full Fix Detail guidance
242
- wherever a template exists (10 common check types); this alone is a
243
- complete, genuinely useful scan.
244
-
245
- Want a full AI-written explanation for *every* finding instead (needs
246
- the `[ai]` install above)?
247
-
248
- ```bash
249
- export ANTHROPIC_API_KEY="sk-ant-..." # your own key, your own account
250
- plexavo scan --profile my-aws-profile --explain --report-html report.html --report-pdf report.pdf
251
- ```
252
-
253
- - Drop `--explain` and findings still get free template remediation where
254
- available (no API key needed) and raw technical detail otherwise.
255
- `--explain` replaces that with a live AI narrative for every finding,
256
- including the templated ones.
257
- - Drop `--report-html`/`--report-pdf` to just see the console table.
258
- - `--explain-limit N` (default 25) caps how many findings get a live AI
259
- call when `--explain` is passed, as a safety rail against unexpectedly
260
- large real scans — it doesn't limit the free template remediation.
261
- - No `ANTHROPIC_API_KEY` set, or a call fails for any reason (invalid key,
262
- rate limit, network issue)? The scan and report are completely
263
- unaffected — that finding falls back to template/raw detail instead of
264
- an AI narrative, not an error. See [Cost](#cost).
265
-
266
- ### Alternative: pipx
267
-
268
- Already use [pipx](https://pipx.pypa.io/) on macOS/Linux? It works exactly
269
- the same way as uv — its own isolated environment, one global command, no
270
- venv:
205
+ ### From source (for contributing, or trying an unreleased change)
271
206
 
272
207
  ```bash
273
- pipx install plexavo
274
- pipx install "plexavo[ai]" # with AI-narrated explanations
208
+ git clone https://github.com/plexavo/plexavo.git
209
+ cd plexavo
210
+ uv pip install -e . # or: pip install -e . (inside a venv)
275
211
  ```
276
212
 
277
- On Windows, pipx has the same Smart App Control caveat as uv (see the
278
- Windows section above) — if the `plexavo` command is blocked, run
279
- `py -m plexavo` instead, or use the `pip` install.
280
-
281
- ### Alternative: pip + venv
213
+ ## Using Plexavo
282
214
 
283
- Want full isolation and prefer to manage the environment yourself? Modern
284
- Python (PEP 668) blocks a plain `pip install` outside a venv on many
285
- Linux and Homebrew setups, so create one first:
215
+ Run it with no arguments and it walks you through everything choosing an
216
+ AWS profile (or setting a new one up), picking whether you want an HTML or
217
+ PDF report, then running the scan and showing your 0-100 score with every
218
+ finding and its plain-English fix. Nothing to memorise.
286
219
 
287
220
  ```bash
288
- python -m venv plexavo-env
289
- plexavo-env\Scripts\activate # Windows
290
- source plexavo-env/bin/activate # Mac/Linux
291
-
292
- pip install plexavo
293
- pip install "plexavo[ai]" # with AI-narrated explanations
221
+ plexavo # macOS/Linux, and Windows Option 1
222
+ python -m plexavo # Windows Option 2 — inside the activated venv
294
223
  ```
295
224
 
296
- You'll need to reactivate this venv (`plexavo-env\Scripts\activate` /
297
- `source plexavo-env/bin/activate`) every time you open a new terminal
298
- `deactivate` exits it without uninstalling anything. On Windows, run
299
- `python -m plexavo` if the `plexavo` command is blocked by Smart App
300
- Control.
301
-
302
- ### From source (for contributing, or trying an unreleased change)
303
-
304
- ```bash
305
- git clone https://github.com/plexavo/plexavo.git
306
- cd plexavo
307
- uv pip install -e . # or: pip install -e . (inside a venv)
308
- ```
225
+ Scripting a scan into CI or a scheduled job? Add `scan` and flags —
226
+ `plexavo scan --help` (or `python -m plexavo scan --help`) covers the
227
+ flag-driven form (`--profile`, `--region`, `--report-html`,
228
+ `--report-pdf`, `--explain`).
309
229
 
310
230
  ## Project structure
311
231
 
@@ -96,187 +96,107 @@ scoped by a Condition block, or a CloudTrail lookup that hit its page cap on
96
96
  `--report-html`/`--report-pdf` render this same data as a full report; see
97
97
  [Cost](#cost) for what `--explain` needs and what it costs.
98
98
 
99
- ## Quick start
99
+ ## Install
100
100
 
101
- The install path depends on your OS — **uv on macOS & Linux**, **pip on
102
- Windows**. Either way it's a one-command install with no venv to create,
103
- activate, or reactivate in every new terminal.
101
+ Plexavo is a command-line tool. Pick your OS below every path installs
102
+ it into its own isolated environment, so it never clashes with your other
103
+ Python packages.
104
104
 
105
- ### macOS & Linux — uv
105
+ ### macOS & Linux
106
106
 
107
- [uv](https://docs.astral.sh/uv/) installs Plexavo into its own isolated
108
- environment automatically.
109
-
110
- **1. Install uv** (if you don't already have it):
111
-
112
- ```bash
113
- curl -LsSf https://astral.sh/uv/install.sh | sh
114
- ```
115
-
116
- (Full options: [uv installation docs](https://docs.astral.sh/uv/getting-started/installation/).)
117
-
118
- **2. Install Plexavo:**
107
+ [uv](https://docs.astral.sh/uv/) puts a single `plexavo` command on your
108
+ PATH, in every terminal, with nothing to activate:
119
109
 
120
110
  ```bash
111
+ curl -LsSf https://astral.sh/uv/install.sh | sh # skip if you have uv
121
112
  uv tool install plexavo
122
113
  ```
123
114
 
124
- That's it `plexavo` is now on your PATH in every terminal, until you
125
- uninstall it. No activate step, ever.
126
-
127
- **Have an Anthropic API key and want AI-narrated explanations** (see
128
- [Cost](#cost) — it's optional and costs a few cents per scan, not
129
- free)? Install with the `[ai]` extra instead — same package, just with
130
- the `anthropic` library included:
131
-
132
- ```bash
133
- uv tool install "plexavo[ai]"
134
- ```
135
-
136
- No key yet, or not sure? Skip it for now — the plain install is
137
- genuinely complete on its own. Add it later with:
138
-
139
- ```bash
140
- uv tool install --reinstall "plexavo[ai]"
141
- ```
142
-
143
- Just want to try it once without installing anything?
115
+ Update or remove later with `uv tool upgrade plexavo` /
116
+ `uv tool uninstall plexavo`. Prefer [pipx](https://pipx.pypa.io/)?
117
+ `pipx install plexavo` works the same way.
144
118
 
145
- ```bash
146
- uvx plexavo scan --profile my-aws-profile
147
- ```
119
+ ### Windows
148
120
 
149
- Updating or removing later:
150
-
151
- ```bash
152
- uv tool upgrade plexavo
153
- uv tool uninstall plexavo
154
- ```
121
+ `uv` and `pipx` install fine, but the small `plexavo.exe` launcher they
122
+ drop on your PATH is unsigned, and Windows Smart App Control refuses to
123
+ run unsigned executables it doesn't recognise. The way around it is to
124
+ run Plexavo through Python directly. Two ways — both isolated, pick one:
155
125
 
156
- ### Windowspip
157
-
158
- Install with `pip` and run the tool as `py -m plexavo`:
126
+ #### Option 1 uv (recommended)
159
127
 
160
128
  ```powershell
161
- py -m pip install --user plexavo
162
- py -m plexavo
163
- ```
164
-
165
- `py -m plexavo` with no arguments opens the interactive menu, exactly
166
- like the `plexavo` command does on macOS/Linux — flags are only for
167
- scripting/CI.
168
-
169
- > **Why not uv/pipx on Windows?** Both work by putting a small generated
170
- > `plexavo.exe` launcher on your PATH. That launcher is unsigned, and
171
- > Windows Smart App Control blocks unsigned executables it doesn't
172
- > recognise — so `plexavo` can fail to start with a "can't confirm who
173
- > published" message. `py -m plexavo` calls Python directly and never
174
- > touches that launcher, so it always works. (If your machine doesn't
175
- > enforce Smart App Control, `uv tool install plexavo` works here too.)
129
+ uv tool install plexavo
176
130
 
177
- **AI-narrated explanations** (see [Cost](#cost)):
131
+ Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
178
132
 
179
- ```powershell
180
- py -m pip install --user "plexavo[ai]"
133
+ if (!(Test-Path $PROFILE)) { New-Item -ItemType File -Path $PROFILE -Force }
134
+ Add-Content $PROFILE 'function plexavo { & "$env:APPDATA\uv\tools\plexavo\Scripts\python.exe" -m plexavo @args }'
181
135
  ```
182
136
 
183
- Updating or removing later:
184
-
185
- ```powershell
186
- py -m pip install --user --upgrade plexavo
187
- py -m pip uninstall plexavo
188
- ```
137
+ Open a new terminal and `plexavo` works exactly like it does on
138
+ macOS/Linux.
189
139
 
190
- ### Optional: type `plexavo` instead of `py -m plexavo`
140
+ `uv tool install` still leaves the blocked `plexavo.exe` on your PATH.
141
+ The line you add to your PowerShell profile shadows it with a command
142
+ that calls uv's bundled `python.exe` directly — that Python is signed by
143
+ the Python Software Foundation, so Smart App Control never stops it. You
144
+ add it once; the `Set-ExecutionPolicy` line (also once) is what lets
145
+ PowerShell load your profile at all. Update later with
146
+ `uv tool upgrade plexavo`.
191
147
 
192
- Add a shortcut to your PowerShell profile once:
148
+ #### Option 2 virtual environment (no uv)
193
149
 
194
150
  ```powershell
195
- Add-Content $PROFILE 'function plexavo { py -m plexavo @args }'
151
+ py -m venv plexavo-venv
152
+ .\plexavo-venv\Scripts\Activate.ps1
153
+ python -m pip install plexavo
154
+ python -m plexavo
196
155
  ```
197
156
 
198
- Open a new terminal and `plexavo` then works just like it does on
199
- macOS/Linux.
157
+ Use `python -m` for everything inside the venv. Creating a venv also
158
+ generates its own `pip.exe` and `plexavo.exe`, and those are exactly the
159
+ unsigned launcher stubs Smart App Control blocks — but the venv's
160
+ `python.exe` is a copy of your real Python with its signature intact, so
161
+ going through it (`python -m pip`, `python -m plexavo`) always works.
200
162
 
201
- ### Run a scan
163
+ Activating the venv (`.\plexavo-venv\Scripts\Activate.ps1`) just points
164
+ `python` at this environment for the current terminal — you re-run it in
165
+ each new terminal, and `deactivate` leaves it. If PowerShell blocks the
166
+ activate script, run `Set-ExecutionPolicy -Scope CurrentUser RemoteSigned`
167
+ once. Update with `python -m pip install --upgrade plexavo` inside the
168
+ activated environment.
202
169
 
203
- ```bash
204
- plexavo scan --profile my-aws-profile --report-html report.html
205
- ```
170
+ ### AI-narrated explanations (optional, any OS)
206
171
 
207
- (On Windows without the shortcut above: `py -m plexavo scan --profile
208
- my-aws-profile --report-html report.html`.)
172
+ Plexavo is complete without this. If you have an Anthropic API key and
173
+ want each finding rewritten as a full narrative (see [Cost](#cost)),
174
+ install `"plexavo[ai]"` in place of `plexavo` in any command above.
209
175
 
210
- No `--profile`? It uses your default profile / environment variables,
211
- same resolution order as the AWS CLI. No AI, no API key, no cost — and
212
- findings still come with free Next Step / Full Fix Detail guidance
213
- wherever a template exists (10 common check types); this alone is a
214
- complete, genuinely useful scan.
215
-
216
- Want a full AI-written explanation for *every* finding instead (needs
217
- the `[ai]` install above)?
218
-
219
- ```bash
220
- export ANTHROPIC_API_KEY="sk-ant-..." # your own key, your own account
221
- plexavo scan --profile my-aws-profile --explain --report-html report.html --report-pdf report.pdf
222
- ```
223
-
224
- - Drop `--explain` and findings still get free template remediation where
225
- available (no API key needed) and raw technical detail otherwise.
226
- `--explain` replaces that with a live AI narrative for every finding,
227
- including the templated ones.
228
- - Drop `--report-html`/`--report-pdf` to just see the console table.
229
- - `--explain-limit N` (default 25) caps how many findings get a live AI
230
- call when `--explain` is passed, as a safety rail against unexpectedly
231
- large real scans — it doesn't limit the free template remediation.
232
- - No `ANTHROPIC_API_KEY` set, or a call fails for any reason (invalid key,
233
- rate limit, network issue)? The scan and report are completely
234
- unaffected — that finding falls back to template/raw detail instead of
235
- an AI narrative, not an error. See [Cost](#cost).
236
-
237
- ### Alternative: pipx
238
-
239
- Already use [pipx](https://pipx.pypa.io/) on macOS/Linux? It works exactly
240
- the same way as uv — its own isolated environment, one global command, no
241
- venv:
176
+ ### From source (for contributing, or trying an unreleased change)
242
177
 
243
178
  ```bash
244
- pipx install plexavo
245
- pipx install "plexavo[ai]" # with AI-narrated explanations
179
+ git clone https://github.com/plexavo/plexavo.git
180
+ cd plexavo
181
+ uv pip install -e . # or: pip install -e . (inside a venv)
246
182
  ```
247
183
 
248
- On Windows, pipx has the same Smart App Control caveat as uv (see the
249
- Windows section above) — if the `plexavo` command is blocked, run
250
- `py -m plexavo` instead, or use the `pip` install.
251
-
252
- ### Alternative: pip + venv
184
+ ## Using Plexavo
253
185
 
254
- Want full isolation and prefer to manage the environment yourself? Modern
255
- Python (PEP 668) blocks a plain `pip install` outside a venv on many
256
- Linux and Homebrew setups, so create one first:
186
+ Run it with no arguments and it walks you through everything choosing an
187
+ AWS profile (or setting a new one up), picking whether you want an HTML or
188
+ PDF report, then running the scan and showing your 0-100 score with every
189
+ finding and its plain-English fix. Nothing to memorise.
257
190
 
258
191
  ```bash
259
- python -m venv plexavo-env
260
- plexavo-env\Scripts\activate # Windows
261
- source plexavo-env/bin/activate # Mac/Linux
262
-
263
- pip install plexavo
264
- pip install "plexavo[ai]" # with AI-narrated explanations
192
+ plexavo # macOS/Linux, and Windows Option 1
193
+ python -m plexavo # Windows Option 2 — inside the activated venv
265
194
  ```
266
195
 
267
- You'll need to reactivate this venv (`plexavo-env\Scripts\activate` /
268
- `source plexavo-env/bin/activate`) every time you open a new terminal
269
- `deactivate` exits it without uninstalling anything. On Windows, run
270
- `python -m plexavo` if the `plexavo` command is blocked by Smart App
271
- Control.
272
-
273
- ### From source (for contributing, or trying an unreleased change)
274
-
275
- ```bash
276
- git clone https://github.com/plexavo/plexavo.git
277
- cd plexavo
278
- uv pip install -e . # or: pip install -e . (inside a venv)
279
- ```
196
+ Scripting a scan into CI or a scheduled job? Add `scan` and flags —
197
+ `plexavo scan --help` (or `python -m plexavo scan --help`) covers the
198
+ flag-driven form (`--profile`, `--region`, `--report-html`,
199
+ `--report-pdf`, `--explain`).
280
200
 
281
201
  ## Project structure
282
202
 
@@ -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.2.2"
7
+ __version__ = "0.2.4"
@@ -4,7 +4,7 @@ This is the exact same entry point as the installed `plexavo` command, so
4
4
  running it with no arguments still opens the interactive menu. It exists so
5
5
  Windows users can install with plain `pip` and run the tool without going
6
6
  through the generated `plexavo.exe` launcher, which Windows Smart App Control
7
- blocks on some machines (it's unsigned). See the README's Quick start.
7
+ blocks on some machines (it's unsigned). See the README's Install section.
8
8
  """
9
9
 
10
10
  from plexavo.cli import main
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: plexavo
3
- Version: 0.2.2
3
+ Version: 0.2.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
@@ -125,187 +125,107 @@ scoped by a Condition block, or a CloudTrail lookup that hit its page cap on
125
125
  `--report-html`/`--report-pdf` render this same data as a full report; see
126
126
  [Cost](#cost) for what `--explain` needs and what it costs.
127
127
 
128
- ## Quick start
128
+ ## Install
129
129
 
130
- The install path depends on your OS — **uv on macOS & Linux**, **pip on
131
- Windows**. Either way it's a one-command install with no venv to create,
132
- activate, or reactivate in every new terminal.
130
+ Plexavo is a command-line tool. Pick your OS below every path installs
131
+ it into its own isolated environment, so it never clashes with your other
132
+ Python packages.
133
133
 
134
- ### macOS & Linux — uv
134
+ ### macOS & Linux
135
135
 
136
- [uv](https://docs.astral.sh/uv/) installs Plexavo into its own isolated
137
- environment automatically.
138
-
139
- **1. Install uv** (if you don't already have it):
140
-
141
- ```bash
142
- curl -LsSf https://astral.sh/uv/install.sh | sh
143
- ```
144
-
145
- (Full options: [uv installation docs](https://docs.astral.sh/uv/getting-started/installation/).)
146
-
147
- **2. Install Plexavo:**
136
+ [uv](https://docs.astral.sh/uv/) puts a single `plexavo` command on your
137
+ PATH, in every terminal, with nothing to activate:
148
138
 
149
139
  ```bash
140
+ curl -LsSf https://astral.sh/uv/install.sh | sh # skip if you have uv
150
141
  uv tool install plexavo
151
142
  ```
152
143
 
153
- That's it `plexavo` is now on your PATH in every terminal, until you
154
- uninstall it. No activate step, ever.
155
-
156
- **Have an Anthropic API key and want AI-narrated explanations** (see
157
- [Cost](#cost) — it's optional and costs a few cents per scan, not
158
- free)? Install with the `[ai]` extra instead — same package, just with
159
- the `anthropic` library included:
160
-
161
- ```bash
162
- uv tool install "plexavo[ai]"
163
- ```
164
-
165
- No key yet, or not sure? Skip it for now — the plain install is
166
- genuinely complete on its own. Add it later with:
167
-
168
- ```bash
169
- uv tool install --reinstall "plexavo[ai]"
170
- ```
171
-
172
- Just want to try it once without installing anything?
144
+ Update or remove later with `uv tool upgrade plexavo` /
145
+ `uv tool uninstall plexavo`. Prefer [pipx](https://pipx.pypa.io/)?
146
+ `pipx install plexavo` works the same way.
173
147
 
174
- ```bash
175
- uvx plexavo scan --profile my-aws-profile
176
- ```
148
+ ### Windows
177
149
 
178
- Updating or removing later:
179
-
180
- ```bash
181
- uv tool upgrade plexavo
182
- uv tool uninstall plexavo
183
- ```
150
+ `uv` and `pipx` install fine, but the small `plexavo.exe` launcher they
151
+ drop on your PATH is unsigned, and Windows Smart App Control refuses to
152
+ run unsigned executables it doesn't recognise. The way around it is to
153
+ run Plexavo through Python directly. Two ways — both isolated, pick one:
184
154
 
185
- ### Windowspip
186
-
187
- Install with `pip` and run the tool as `py -m plexavo`:
155
+ #### Option 1 uv (recommended)
188
156
 
189
157
  ```powershell
190
- py -m pip install --user plexavo
191
- py -m plexavo
192
- ```
193
-
194
- `py -m plexavo` with no arguments opens the interactive menu, exactly
195
- like the `plexavo` command does on macOS/Linux — flags are only for
196
- scripting/CI.
197
-
198
- > **Why not uv/pipx on Windows?** Both work by putting a small generated
199
- > `plexavo.exe` launcher on your PATH. That launcher is unsigned, and
200
- > Windows Smart App Control blocks unsigned executables it doesn't
201
- > recognise — so `plexavo` can fail to start with a "can't confirm who
202
- > published" message. `py -m plexavo` calls Python directly and never
203
- > touches that launcher, so it always works. (If your machine doesn't
204
- > enforce Smart App Control, `uv tool install plexavo` works here too.)
158
+ uv tool install plexavo
205
159
 
206
- **AI-narrated explanations** (see [Cost](#cost)):
160
+ Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
207
161
 
208
- ```powershell
209
- py -m pip install --user "plexavo[ai]"
162
+ if (!(Test-Path $PROFILE)) { New-Item -ItemType File -Path $PROFILE -Force }
163
+ Add-Content $PROFILE 'function plexavo { & "$env:APPDATA\uv\tools\plexavo\Scripts\python.exe" -m plexavo @args }'
210
164
  ```
211
165
 
212
- Updating or removing later:
213
-
214
- ```powershell
215
- py -m pip install --user --upgrade plexavo
216
- py -m pip uninstall plexavo
217
- ```
166
+ Open a new terminal and `plexavo` works exactly like it does on
167
+ macOS/Linux.
218
168
 
219
- ### Optional: type `plexavo` instead of `py -m plexavo`
169
+ `uv tool install` still leaves the blocked `plexavo.exe` on your PATH.
170
+ The line you add to your PowerShell profile shadows it with a command
171
+ that calls uv's bundled `python.exe` directly — that Python is signed by
172
+ the Python Software Foundation, so Smart App Control never stops it. You
173
+ add it once; the `Set-ExecutionPolicy` line (also once) is what lets
174
+ PowerShell load your profile at all. Update later with
175
+ `uv tool upgrade plexavo`.
220
176
 
221
- Add a shortcut to your PowerShell profile once:
177
+ #### Option 2 virtual environment (no uv)
222
178
 
223
179
  ```powershell
224
- Add-Content $PROFILE 'function plexavo { py -m plexavo @args }'
180
+ py -m venv plexavo-venv
181
+ .\plexavo-venv\Scripts\Activate.ps1
182
+ python -m pip install plexavo
183
+ python -m plexavo
225
184
  ```
226
185
 
227
- Open a new terminal and `plexavo` then works just like it does on
228
- macOS/Linux.
186
+ Use `python -m` for everything inside the venv. Creating a venv also
187
+ generates its own `pip.exe` and `plexavo.exe`, and those are exactly the
188
+ unsigned launcher stubs Smart App Control blocks — but the venv's
189
+ `python.exe` is a copy of your real Python with its signature intact, so
190
+ going through it (`python -m pip`, `python -m plexavo`) always works.
229
191
 
230
- ### Run a scan
192
+ Activating the venv (`.\plexavo-venv\Scripts\Activate.ps1`) just points
193
+ `python` at this environment for the current terminal — you re-run it in
194
+ each new terminal, and `deactivate` leaves it. If PowerShell blocks the
195
+ activate script, run `Set-ExecutionPolicy -Scope CurrentUser RemoteSigned`
196
+ once. Update with `python -m pip install --upgrade plexavo` inside the
197
+ activated environment.
231
198
 
232
- ```bash
233
- plexavo scan --profile my-aws-profile --report-html report.html
234
- ```
199
+ ### AI-narrated explanations (optional, any OS)
235
200
 
236
- (On Windows without the shortcut above: `py -m plexavo scan --profile
237
- my-aws-profile --report-html report.html`.)
201
+ Plexavo is complete without this. If you have an Anthropic API key and
202
+ want each finding rewritten as a full narrative (see [Cost](#cost)),
203
+ install `"plexavo[ai]"` in place of `plexavo` in any command above.
238
204
 
239
- No `--profile`? It uses your default profile / environment variables,
240
- same resolution order as the AWS CLI. No AI, no API key, no cost — and
241
- findings still come with free Next Step / Full Fix Detail guidance
242
- wherever a template exists (10 common check types); this alone is a
243
- complete, genuinely useful scan.
244
-
245
- Want a full AI-written explanation for *every* finding instead (needs
246
- the `[ai]` install above)?
247
-
248
- ```bash
249
- export ANTHROPIC_API_KEY="sk-ant-..." # your own key, your own account
250
- plexavo scan --profile my-aws-profile --explain --report-html report.html --report-pdf report.pdf
251
- ```
252
-
253
- - Drop `--explain` and findings still get free template remediation where
254
- available (no API key needed) and raw technical detail otherwise.
255
- `--explain` replaces that with a live AI narrative for every finding,
256
- including the templated ones.
257
- - Drop `--report-html`/`--report-pdf` to just see the console table.
258
- - `--explain-limit N` (default 25) caps how many findings get a live AI
259
- call when `--explain` is passed, as a safety rail against unexpectedly
260
- large real scans — it doesn't limit the free template remediation.
261
- - No `ANTHROPIC_API_KEY` set, or a call fails for any reason (invalid key,
262
- rate limit, network issue)? The scan and report are completely
263
- unaffected — that finding falls back to template/raw detail instead of
264
- an AI narrative, not an error. See [Cost](#cost).
265
-
266
- ### Alternative: pipx
267
-
268
- Already use [pipx](https://pipx.pypa.io/) on macOS/Linux? It works exactly
269
- the same way as uv — its own isolated environment, one global command, no
270
- venv:
205
+ ### From source (for contributing, or trying an unreleased change)
271
206
 
272
207
  ```bash
273
- pipx install plexavo
274
- pipx install "plexavo[ai]" # with AI-narrated explanations
208
+ git clone https://github.com/plexavo/plexavo.git
209
+ cd plexavo
210
+ uv pip install -e . # or: pip install -e . (inside a venv)
275
211
  ```
276
212
 
277
- On Windows, pipx has the same Smart App Control caveat as uv (see the
278
- Windows section above) — if the `plexavo` command is blocked, run
279
- `py -m plexavo` instead, or use the `pip` install.
280
-
281
- ### Alternative: pip + venv
213
+ ## Using Plexavo
282
214
 
283
- Want full isolation and prefer to manage the environment yourself? Modern
284
- Python (PEP 668) blocks a plain `pip install` outside a venv on many
285
- Linux and Homebrew setups, so create one first:
215
+ Run it with no arguments and it walks you through everything choosing an
216
+ AWS profile (or setting a new one up), picking whether you want an HTML or
217
+ PDF report, then running the scan and showing your 0-100 score with every
218
+ finding and its plain-English fix. Nothing to memorise.
286
219
 
287
220
  ```bash
288
- python -m venv plexavo-env
289
- plexavo-env\Scripts\activate # Windows
290
- source plexavo-env/bin/activate # Mac/Linux
291
-
292
- pip install plexavo
293
- pip install "plexavo[ai]" # with AI-narrated explanations
221
+ plexavo # macOS/Linux, and Windows Option 1
222
+ python -m plexavo # Windows Option 2 — inside the activated venv
294
223
  ```
295
224
 
296
- You'll need to reactivate this venv (`plexavo-env\Scripts\activate` /
297
- `source plexavo-env/bin/activate`) every time you open a new terminal
298
- `deactivate` exits it without uninstalling anything. On Windows, run
299
- `python -m plexavo` if the `plexavo` command is blocked by Smart App
300
- Control.
301
-
302
- ### From source (for contributing, or trying an unreleased change)
303
-
304
- ```bash
305
- git clone https://github.com/plexavo/plexavo.git
306
- cd plexavo
307
- uv pip install -e . # or: pip install -e . (inside a venv)
308
- ```
225
+ Scripting a scan into CI or a scheduled job? Add `scan` and flags —
226
+ `plexavo scan --help` (or `python -m plexavo scan --help`) covers the
227
+ flag-driven form (`--profile`, `--region`, `--report-html`,
228
+ `--report-pdf`, `--explain`).
309
229
 
310
230
  ## Project structure
311
231
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "plexavo"
7
- version = "0.2.2"
7
+ version = "0.2.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" }
@@ -1,9 +1,10 @@
1
1
  """Checks that `python -m plexavo` works and is equivalent to the installed
2
2
  `plexavo` command / `python -m plexavo.cli`.
3
3
 
4
- This is the Windows install path (README Quick start): install with pip, run
5
- via `py -m plexavo` instead of the Smart-App-Control-blocked `plexavo.exe`
6
- launcher. If the `plexavo/__main__.py` shim regresses, that path breaks.
4
+ This is the Windows install path (README Install section): the venv option
5
+ runs the tool via `py -m plexavo` instead of the Smart-App-Control-blocked
6
+ `plexavo.exe` launcher. If the `plexavo/__main__.py` shim regresses, that
7
+ path breaks.
7
8
 
8
9
  Run: python test_cli_entrypoint.py
9
10
  """
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