greptile 3.5.3 → 3.6.0

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.
package/CHANGELOG.md CHANGED
@@ -4,6 +4,52 @@ All notable changes to the Greptile CLI.
4
4
 
5
5
  ## Unreleased
6
6
 
7
+ ## 3.6.0 - 2026-09-25
8
+
9
+ ### Added
10
+
11
+ - `greptile review --plus` and `greptile review --apex` run a review at plus
12
+ or apex effort. The two flags are mutually exclusive and cannot be combined
13
+ with `--resume`. Output shows the effort level; JSON output adds `effort`.
14
+ - Exit code `6` when a feature is not enabled for your account. The CLI prints
15
+ a `notice:` instead of an error.
16
+
17
+ ## 3.5.4 - 2026-09-21
18
+
19
+ ### Changed
20
+
21
+ - Review summaries now lead with confidence and a concise safety assessment,
22
+ followed by the generated summary and any supplied instructions. Reviews
23
+ with no findings also show up to seven "What we checked" items when available.
24
+ Terminal and plain-text output omit the separate security-summary section;
25
+ JSON output retains `securitySummary` and the full `confidenceReasoning`.
26
+ - Organization review settings now follow the active SCM summary layout.
27
+ For the new layout, the editor and settings list label the issues section
28
+ "Findings" and hide collapse/open controls for findings and confidence.
29
+ Legacy servers retain the existing controls, and the setting keys still work
30
+ with `get`, `set`, and `unset`.
31
+ - `greptile review` no longer refuses reviews that touch more than 500 files;
32
+ the remaining preflight limits (50 `.greptile` config files, payload size)
33
+ are unchanged.
34
+ - Help text and descriptions for authentication, `init`, `config`, `settings`,
35
+ `review`, `skills`, `update`, and Fix bridge commands now spell out
36
+ accepted inputs, produced outputs, and how to follow up on a review.
37
+ - `greptile update` recognises a bundle vendored by the Codex plugin as well
38
+ as the Claude Code plugin and points you at the plugin's own update path
39
+ instead of trying to upgrade in place.
40
+
41
+ ### Fixed
42
+
43
+ - Both comment and diff layouts keep the review summary and diagram above
44
+ findings, using the same summary layout.
45
+ - Usage telemetry now reports `cli_command_completed` (command name,
46
+ duration, exit code) and `cli_transport_error` (failure kind and count
47
+ only) events, batched during execution, so failed and invalid invocations
48
+ are counted. A failing first run still does not enable anonymous telemetry
49
+ or print its disclosure. The README documents the new events and the
50
+ distinction from service-side API records. The final telemetry flush waits
51
+ at most 100 ms, reduced from 400 ms.
52
+
7
53
  ## 3.5.3 - 2026-09-18
8
54
 
9
55
  ### Changed
package/README.md CHANGED
@@ -47,30 +47,54 @@ Comments appear in the terminal as they come in.
47
47
 
48
48
  ## Commands
49
49
 
50
- | Command | What it does |
51
- | --------------------------- | --------------------------------------------------------------------- |
52
- | `greptile review` | Review the current branch against its base. |
53
- | `greptile review show [ID]` | Reopen a previous review. Omit the ID to pick from a list. |
54
- | `greptile review status` | Report the most recent review status for a commit (HEAD by default). |
55
- | `greptile init` | Enable Greptile on the current repository when you have admin access. |
56
- | `greptile login` | Sign in through your browser, or with `--api-key`. |
57
- | `greptile logout` | Remove stored credentials. |
58
- | `greptile whoami` | Show who you are signed in as and your organizations. |
59
- | `greptile settings` | Manage CLI preferences, repositories, review settings, and team. |
60
- | `greptile skills` | Install the Greptile agent skills for your AI coding agents. |
61
- | `greptile fix` | Set up or remove Fix in Claude Code on macOS. |
62
- | `greptile update` | Update the CLI to the latest version. |
63
-
64
- Run any command with `--help` for its full flag list.
50
+ | Command | What it does |
51
+ | --------------------------- | ------------------------------------------------------------------------ |
52
+ | `greptile review` | Review committed changes from the branch merge base through `HEAD`. |
53
+ | `greptile review show [ID]` | Fetch one review by UUID, or choose/list recent local history. |
54
+ | `greptile review status` | Report the latest saved review for a commit with scriptable exits. |
55
+ | `greptile config [PATH]` | Resolve the review config for the repository or one file. |
56
+ | `greptile init` | Enable the current repository with an OAuth-signed-in admin account. |
57
+ | `greptile login` | Sign in through your browser, or with `--api-key`. |
58
+ | `greptile logout` | Remove stored credentials. |
59
+ | `greptile whoami` | Show who you are signed in as and your organizations. |
60
+ | `greptile settings` | Manage local preferences, organization review settings, repos, and team. |
61
+ | `greptile skills` | List, install, and update Greptile-authored agent skills. |
62
+ | `greptile fix` | Set up or remove Fix in Claude Code on macOS. |
63
+ | `greptile update` | Update the CLI to the latest version. |
64
+
65
+ Run any command with `--help` for its installed flag list. This README documents the unreleased CLI 3.5.4;
66
+ the installed help wins if it differs.
65
67
 
66
68
  ## Reviewing
67
69
 
68
- Review against a specific base branch:
70
+ `greptile review` compares the merge base of the selected base and `HEAD` with `HEAD`. It sends
71
+ committed, non-binary changes only. Uncommitted and binary files stay local and produce warnings.
72
+
73
+ Terminal output starts with a box containing confidence, a short verdict, and the change summary.
74
+ Clean reviews include a list of available checks. Any diagram follows the box, before findings
75
+ and diffs. Plain text output omits the box. JSON output keeps the full `confidenceReasoning`
76
+ and `securitySummary` fields.
77
+
78
+ Review against a specific base branch or add one-run instructions:
69
79
 
70
80
  ```sh
71
81
  greptile review -b main
82
+ greptile review --instructions "focus on retry cancellation"
72
83
  ```
73
84
 
85
+ Choose review effort for a new run:
86
+
87
+ ```sh
88
+ greptile review # base
89
+ greptile review --plus # plus
90
+ greptile review --apex # apex
91
+ ```
92
+
93
+ `--plus` and `--apex` are mutually exclusive and cannot be combined with `--resume`.
94
+ They require the organization's effort feature and an effort-specific routing rule. If either
95
+ is unavailable, the review fails without running a fallback. Results include the effective
96
+ effort. Saved settings do not change effort.
97
+
74
98
  Show findings beside the changed code instead of as a comment list:
75
99
 
76
100
  ```sh
@@ -87,7 +111,7 @@ Reopen an earlier review:
87
111
 
88
112
  ```sh
89
113
  greptile review show # pick from recent reviews
90
- greptile review show abc123 # open one by ID
114
+ greptile review show b3e4f72a-1d6c-4f81-9c0e-2a7d3b9e5f10
91
115
  ```
92
116
 
93
117
  List recent reviews non-interactively (for scripts and agents):
@@ -101,7 +125,7 @@ Check whether the current commit has been reviewed (for a pre-push hook):
101
125
 
102
126
  ```sh
103
127
  greptile review status # checks HEAD
104
- greptile review status --commit abc123
128
+ greptile review status --commit 9f2c6a43d99b9de72f4f7853b4d4cb650ed451b8
105
129
  greptile review status --json
106
130
  ```
107
131
 
@@ -121,10 +145,48 @@ esac
121
145
 
122
146
  ```sh
123
147
  greptile review --json > review.json # structured JSON
124
- greptile review --text # plain text (default when piped)
125
- greptile review --agent # alias for --text, for AI agents
148
+ greptile review --text # force plain text, overriding saved output mode
149
+ greptile review --agent # plain text, without interactive sign-in or setup
126
150
  ```
127
151
 
152
+ A completed review prints one JSON object. This fictional example uses the exact emitted fields:
153
+
154
+ ```json
155
+ {
156
+ "summary": "The retry path now preserves cancellation.",
157
+ "confidence": 4,
158
+ "confidenceReasoning": "The change is focused, with one cleanup suggestion.",
159
+ "securitySummary": null,
160
+ "instructions": "focus on retry cancellation",
161
+ "comments": [
162
+ {
163
+ "id": "comment-7312",
164
+ "path": "src/retry.ts",
165
+ "startLine": 42,
166
+ "endLine": 42,
167
+ "side": "new",
168
+ "severity": "P2",
169
+ "securityIssue": false,
170
+ "category": "comment",
171
+ "body": "Clear the timer after the request settles.",
172
+ "verifiedEvidence": null,
173
+ "suggestion": "clearTimeout(timer)",
174
+ "hunk": {
175
+ "header": "@@ -39,6 +39,7 @@ async function retry() {",
176
+ "oldRange": { "start": 39, "lines": 6 },
177
+ "newRange": { "start": 39, "lines": 7 },
178
+ "before": "return result",
179
+ "after": "clearTimeout(timer)"
180
+ }
181
+ }
182
+ ]
183
+ }
184
+ ```
185
+
186
+ `comments` is empty on a review with no findings. A successful review exits `0` even when it has
187
+ findings. After a dispatched review is interrupted or cannot finish locally, stderr gives its UUID
188
+ and the follow-up command `greptile review show <UUID>`.
189
+
128
190
  Exit codes are stable for scripting; see [Reference](#reference).
129
191
 
130
192
  > ℹ️ **Note:** `greptile review show` with no ID now prints the recent-reviews
@@ -160,6 +222,10 @@ When `GREPTILE_API_KEY` is set, it takes precedence over a stored sign-in.
160
222
 
161
223
  > ℹ️ **Note:** API keys are scoped to an organization, not a person, so reviews run under the organization's identity. Use OAuth sign-in if you want per-developer attribution.
162
224
 
225
+ `greptile init` and the organization-management surfaces use account OAuth. They reject API-key
226
+ authentication because repository and organization changes must be attributed to a signed-in user.
227
+ Run `greptile login` first, or make those changes in the dashboard.
228
+
163
229
  ## Sensitive files
164
230
 
165
231
  Before sending anything, `greptile review` holds back changed files that look like they contain secrets, so a mistakenly committed `.env` file or private key stays on your machine. When files are held back, the review prints a one-line note naming them. A file is held back when:
@@ -217,11 +283,43 @@ greptile settings unset review.layout # back to the default
217
283
  | `review.context` | `0` to `60` (default `15`) | `--context` |
218
284
  | `review.width` | `40` to `240` (default: terminal width) | `--width` |
219
285
  | `telemetry` | `true`, `false` (unset until you decide) | — (see [Telemetry](#telemetry)) |
286
+ | `apiBaseUrl` | HTTPS origin, with no path | Self-hosted API target |
287
+ | `webBaseUrl` | HTTPS origin, with no path | Self-hosted dashboard target |
220
288
 
221
289
  A flag passed on the command line always wins over a saved setting for that run.
222
290
 
223
291
  Settings live in `~/.config/greptile/settings.json` (or `$XDG_CONFIG_HOME/greptile/settings.json`); `greptile settings path` prints the exact location. The file includes a `$schema` reference to a published JSON Schema, so editors can validate and autocomplete it if you edit it by hand.
224
292
 
293
+ The settings file contains preferences and deployment origins, never credentials. OAuth and stored
294
+ API-key credentials live separately in `~/.greptile/auth.json`; do not print or copy that file.
295
+
296
+ Organization review settings use `org.*` keys and are stored on the server. Pass `--org <slug-or-id>`
297
+ when you administer more than one organization; with exactly one eligible organization it is selected
298
+ automatically. For example:
299
+
300
+ ```sh
301
+ greptile settings list --org acme-platform --json
302
+ greptile settings get org.review.strictness --org acme-platform --json
303
+ greptile settings set org.review.triggerOnUpdates true --org acme-platform
304
+ greptile settings unset org.review.strictness --org acme-platform
305
+ ```
306
+
307
+ `unset` removes a local key, but for an `org.*` key it writes the documented server default. The
308
+ organization keys cover review strictness, update reviews, PR-description updates, Fix with AI buttons,
309
+ coding-agent buttons, and each PR-summary section's inclusion, collapsibility, and initial state. Run
310
+ `greptile settings --help` for the installed key list.
311
+
312
+ Member operations are server-backed and available to every organization member where the server
313
+ allows the action. Listing a roster is member-readable; pending invitations are shown only to admins.
314
+ Members may invite the `member` role, while inviting admins and revoking invitations require admin
315
+ permission.
316
+
317
+ ```sh
318
+ greptile settings members list --org acme-platform --json
319
+ greptile settings members invite dev@example.com --role member --org acme-platform
320
+ greptile settings members revoke dev@example.com --org acme-platform
321
+ ```
322
+
225
323
  ## Agent skills
226
324
 
227
325
  Skills are instructions AI coding agents read. Greptile provides two for the CLI:
@@ -240,6 +338,7 @@ greptile skills install --global # all your projects, no prompt
240
338
  greptile skills install greploop # just one
241
339
  greptile skills install --force # replace installed copies
242
340
  greptile skills update # update installed copies
341
+ greptile skills update --json # report updated, current, incompatible, and retired entries
243
342
  ```
244
343
 
245
344
  Skills are written to `.agents/skills/<name>/`, which Codex, Cursor, Gemini CLI, Copilot and other
@@ -252,6 +351,8 @@ are available. Run `greptile skills update` to apply them.
252
351
 
253
352
  An installed skill is left alone unless you pass `--force`, so local edits are kept. A skill left
254
353
  incomplete by a failed write is repaired on the next install. Updates replace stale installed files.
354
+ Bare `greptile skills` is the same as `greptile skills list`: it reports installed copies from the
355
+ current project root and your home directory; it does not fetch the catalog.
255
356
 
256
357
  ## Diagrams
257
358
 
@@ -295,12 +396,22 @@ greptile reports anonymous usage events to help us see which commands people
295
396
  run and where they get stuck. The events are lifecycle signals —
296
397
  `cli_first_run`, `cli_login_started`, `cli_login_failed`,
297
398
  `cli_onboarding_started`, `cli_skill_installed`, `cli_skill_updated`,
298
- `cli_review_blocked`, `cli_update_completed` — carrying how you installed the
399
+ `cli_review_blocked`, `cli_update_completed`, `cli_command_completed`, and
400
+ `cli_transport_error` — carrying how you installed the
299
401
  CLI, your OS and architecture, whether the run was interactive, and which agent
300
402
  surface it ran under if any. Never your code, repository or branch names, file
301
403
  paths, or review content. Event-specific fields are fixed values: `method`,
302
404
  `exit_code`, `reason`, the version strings on an update, and the name of the
303
405
  Greptile-authored skill on `cli_skill_installed` and `cli_skill_updated`.
406
+ Command completion includes the registered command name, duration in milliseconds,
407
+ and exit code, including invalid input and failed commands when telemetry is
408
+ already eligible. A fresh nonzero exit does not initialize anonymous
409
+ telemetry or append its disclosure to stderr; that failure is omitted until a
410
+ prior opt-in, notice, or normal workflow makes telemetry eligible. Help, version,
411
+ and internal helpers are excluded. Transport failures include only their kind and
412
+ count for that command: network, TLS, timeout, cancellation, or an oversized
413
+ response. They never include URLs, error messages, arguments, or credentials.
414
+ Events are batched during execution; the final network flush waits at most 100 ms.
304
415
 
305
416
  There are two tiers, and they are treated differently:
306
417
 
@@ -314,9 +425,9 @@ Until you answer that prompt, greptile stays anonymous — including in runs tha
314
425
  cannot show it at all, such as every run inside an AI coding agent. Once you
315
426
  have answered, your answer is what applies: accept, and later agent and script
316
427
  runs are account-linked too, because the decision is yours and not the
317
- terminal's. Declining silences both tiers, not just the linked one.
428
+ terminal's. Declining silences both tiers of client-generated usage events.
318
429
 
319
- Any one of these turns it off:
430
+ Any one of these turns off client-generated usage events:
320
431
 
321
432
  ```sh
322
433
  greptile settings set telemetry false # persistent
@@ -324,8 +435,13 @@ export GREPTILE_TELEMETRY_DISABLED=1 # this shell
324
435
  export DO_NOT_TRACK=1 # this shell, and every tool that honors it
325
436
  ```
326
437
 
327
- It is also off automatically when `CI` is set, and a CLI pointed at a
328
- self-hosted Greptile sends no telemetry at all.
438
+ Client-generated usage events are also off automatically when `CI` is set or
439
+ the CLI points at a self-hosted Greptile.
440
+
441
+ These settings control the client-generated events listed above. Greptile
442
+ separately records service-side API usage and review events. Those records can
443
+ include the authenticated account and organization and are not disabled by the
444
+ CLI's telemetry setting or environment switches.
329
445
 
330
446
  ## Reference
331
447
 
@@ -334,15 +450,43 @@ self-hosted Greptile sends no telemetry at all.
334
450
  ```sh
335
451
  greptile login [--api-key] | logout | whoami
336
452
  greptile review [-b BRANCH] [--layout comments|diff | --diff] [--resume] [--include PATH...]
337
- [--json | --text | --agent] [--context LINES] [--width COLUMNS] [--no-color]
453
+ [--instructions TEXT] [--plus | --apex] [--json | --text | --agent] [--context LINES]
454
+ [--width COLUMNS] [--color | --no-color]
338
455
  greptile review show [ID] # same output flags as review
339
456
  greptile review status [--commit REF] [--json | --text | --agent]
340
- greptile settings list | get KEY | set KEY VALUE | unset KEY | path
457
+ greptile config [PATH] [--json]
458
+ greptile init [--json]
459
+ greptile settings list [--json] [--org [SLUG_OR_ID]]
460
+ greptile settings get KEY [--json] [--org [SLUG_OR_ID]]
461
+ greptile settings set KEY VALUE [--org [SLUG_OR_ID]]
462
+ greptile settings unset KEY [--org [SLUG_OR_ID]]
463
+ greptile settings members [list] [--json] [--org [SLUG_OR_ID]]
464
+ greptile settings members invite EMAIL... [--role member|admin] [--org [SLUG_OR_ID]]
465
+ greptile settings members revoke EMAIL_OR_ID [--org [SLUG_OR_ID]]
466
+ greptile settings path
341
467
  greptile skills list [--json] | install [NAME...] [-g] [-f] [--json] | update [--json]
342
468
  greptile fix install | status [--json] | uninstall [--remove-mappings]
343
469
  greptile update
344
470
  ```
345
471
 
472
+ Bare groups have useful defaults: `greptile review` starts a review, non-interactive
473
+ `greptile settings` lists local settings, `greptile settings members` lists the roster, bare
474
+ `greptile skills` lists installed skills, and bare `greptile fix` reports Fix service health.
475
+
476
+ ### Compatibility and non-public commands
477
+
478
+ `greptile review run` is a hidden compatibility alias for `greptile review`. `greptile onboard` is
479
+ deprecated and hidden; interactive setup now starts when needed. The hidden `__bridge-open` and
480
+ `__bridge-server` commands are implementation details of Fix in Claude Code and are not user entry
481
+ points.
482
+
483
+ CLI 3.4.1 and later also contain the gated `greptile environment` private beta, registered only
484
+ when `GREPTILE_CVMS_PRIVATE_BETA=true`. It manages repository build environments, setup scripts,
485
+ TREX instructions, secret or visible variables, builds and logs, simulations, invalidation, and
486
+ deletion. Access and server support are required. Run `greptile environment --help` on an enabled
487
+ installation for its authoritative surface; secret values must be supplied by a masked prompt,
488
+ stdin, or dotenv input, never as command arguments. Secret values are never shown again.
489
+
346
490
  ### Environment variables
347
491
 
348
492
  | Variable | What it does |
@@ -362,17 +506,19 @@ greptile update
362
506
  | Code | Meaning |
363
507
  | ----- | -------------------------------------------------------------------------------- |
364
508
  | `0` | Review finished, or (`review status`) the commit has a completed review. |
365
- | `1` | Couldn't finish, or (`review status`) no review exists / signed out / no origin. |
366
- | `2` | Invalid invocation (not inside a git repo, unknown flag, unresolvable commit). |
509
+ | `1` | Couldn't finish, or (`review status`) no review exists / signed out / no remote. |
510
+ | `2` | Invalid invocation, flag value, review UUID, path, or commit reference. |
367
511
  | `3` | `review status` only: a review for the commit is still running. |
368
512
  | `4` | `review status` only: the most recent review failed. |
369
513
  | `5` | `review status` only: the most recent review was cancelled. |
514
+ | `6` | The feature isn't enabled for this account; stderr has a `notice:` line. |
370
515
  | `130` | Interrupted with Ctrl-C. |
371
516
 
372
517
  ### Files
373
518
 
374
- | Path | Contents |
375
- | ---------------------------------- | ------------------------------------------ |
376
- | `~/.greptile/auth.json` | Credentials (refreshed automatically). |
377
- | `~/.config/greptile/settings.json` | Saved settings (`greptile settings path`). |
378
- | `~/.cache/greptile/` | Downloaded diagram renderer. |
519
+ | Path | Contents |
520
+ | ---------------------------------- | ---------------------------------------------------- |
521
+ | `~/.greptile/auth.json` | Credentials (refreshed automatically). |
522
+ | `~/.greptile/reviews.json` | Account- and repository-scoped local review history. |
523
+ | `~/.config/greptile/settings.json` | Saved settings (`greptile settings path`). |
524
+ | `~/.cache/greptile/` | Downloaded diagram renderer. |