# Perch vs Greptile: catch an agent edit that skips expired entries

Preserve collection updates with a saved Perch requirement, inspect the public review inputs, and compare Greptile’s committed-branch review and seat pricing.

Source: https://perchscan.com/compare/perch-vs-greptile/
Published: 2026-10-14

Perch checks the requirement an agent must preserve while editing. Removing reservations from the same list being iterated can skip a neighboring expired entry:

```python
def release_expired(stock, reservations, now):
    for reservation in reservations:
        if reservation.expires_at < now:
            stock[reservation.sku] = stock.get(reservation.sku, 0) + reservation.quantity
            reservations.remove(reservation)
```

The clean control iterates a copy while updating the original:

```python
def release_expired(stock, reservations, now):
    for reservation in reservations.copy():
        if reservation.expires_at < now:
            stock[reservation.sku] = stock.get(reservation.sku, 0) + reservation.quantity
            reservations.remove(reservation)
```

The scenario comes from Perch’s public [order-service inventory fixture at commit 4af67af](https://github.com/lakeday-org/perch/blob/4af67af46d76ac99398d61c7ad0a45441760d4dc/test/fixtures/order-service/inventory.py). The [public regression](https://github.com/lakeday-org/perch/blob/46dd1d0d0ea7ceb0e690203d24fca21c428818ec/review-evaluation/order_service.py) and [clean control](https://github.com/lakeday-org/perch/blob/b9ce63ac935739a998ebb40ca6881a261571d208/review-evaluation/order_service.py) are the exact evaluated inputs; the excerpts above omit their docstrings.

## Recheck the collection requirement after the fix

The captured evaluation used this scoped file rule:

```yaml
- name: eval-adjacent-expirations
  where: "review-evaluation/order_service.py"
  ensure: >-
    Read release_expired only. It releases every expired reservation,
    including adjacent expired entries, removes those entries, and leaves
    unexpired reservations intact.
```

On October 14, 2026, Perch using jev-latest flagged the requirement at 69% on the regression input and passed it on the clean input. The CLI used its configured direct SystemOne endpoint, `https://api.typesafe.ai/v1/systemone`; the elapsed times describe that execution path. The complete file check asked all four disclosed requirements:

```sh
perch check review-evaluation/order_service.py \
  --rules eval-all-stock-lines,eval-malformed-order-errors,eval-adjacent-expirations,eval-complete-subtotal \
  --force --json
```

The [raw command results](/demos/review-evaluation/perch-results.json) record the base and head commits, source and patch hashes, CLI version, settings, findings and elapsed time.

## Inspect the matched evaluation

| Result | Perch | Greptile |
| --- | --- | --- |
| Targeted regression requirements flagged | 4/4 | Review not run |
| Clean-control requirements flagged | 0/4 | Unscored |
| Review time | 0.436 seconds regression; 0.389 seconds clean | Unavailable |
| Cost for both Perch runs | 0.08 US cents estimated from eight fresh checks at the published rate; actual bill unavailable | Unavailable |

Executable contracts pass on the baseline and clean source and fail on the regression source. The [public evaluation report](https://perch-review-comparisons.j-brown9513.workers.dev/evaluations/order-service/) includes the input downloads, protocol and identical reviewer instructions. Greptile CLI 3.6.2 is installed, but an authenticated review session is not available. Its missing results remain unscored. These disclosed behavior controls do not establish general comparative accuracy.

## Check the working file before committing

Greptile’s [CLI](https://www.greptile.com/docs/code-review/greptile-cli) reviews committed branch changes and excludes uncommitted changes. It supports additional review instructions and JSON output. Greptile also offers [repository configuration](https://www.greptile.com/docs/code-review/greptile-config-reference) and repository-aware PR review.

Perch’s `perch check` reads the files on disk, including uncommitted edits. The agent can run one selected requirement, inspect its finding, repair the code and repeat the same check before committing. Save the English rule so the next session and CI can use it.

Greptile’s [Pro plan](https://www.greptile.com/pricing) costs $30 per seat per month with 50 credits per seat; Base, Plus and Apex reviews use 1, 3 and 10 credits. Extra credits cost $1 each. Starter has free access for one active developer.

For five Pro seats, the subscription floor is $150 per month before extra credits. Perch’s September–October 2026 estimate for 100 mid-sized PRs is about $50, using about 50¢ per PR with approximately 150 methods read. Review modes, scope and allowances differ. Perch charges 10¢ per 1,000 fresh rule checks, with cached checks free and no seat fees.

## Install the saved requirement in your agent workflow

[Download the scoped rule pack](https://perch-review-comparisons.j-brown9513.workers.dev/evaluations/order-service/rule-pack.zip). Extract it with `unzip -n` from the public input checkout to preserve existing files. Adapt its example selectors before using it in an application.

Use the [Perch quick start](https://docs.perchscan.com/install/), then run the relevant setup command: `perch setup claude-code`, `perch setup codex`, `perch setup cursor`, or `perch setup pi`. Ask the agent to check after the edit, inspect and fix a finding, and run the identical check again. Commit the rule, agent configuration and regression tests.

Unchanged requests reuse cached answers; fresh judgments can vary. Keep executable application tests beside the model check.
