CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/code-review

Tessl Code Review in one plugin. Install it on a GitHub repository with the Tessl Review GitHub App, run the default review lenses from the CLI, tune what a review catches by authoring your own lens, and answer a review's findings. Start with the code-review skill, which routes to the right one.

96

1.12x
Quality

89%

Does it follow best practices?

Impact

97%

1.12x

Average score across 19 eval scenarios

SecuritybySnyk

Low

Low-risk findings worth noting

Overview
Quality
Evals
Security
Files

Evaluation results

95%

3%

Add a blocking Tessl Code Review gate, invoked on request only

Install the caller workflow in gate mode with manual-only invocation, and explain the enforcement prerequisites

Criteria
Without this plugin
With this plugin

Caller workflow created

100%

100%

No automatic pull_request trigger

100%

100%

Both manual invocation paths present

100%

100%

Dispatch accepts a pull-request number

100%

100%

Mention guard

100%

100%

Gate mode selected via the Action input

100%

100%

No bespoke gating logic

100%

100%

Permissions block grants what the Action needs

100%

100%

Pinned to the supplied release SHA

100%

100%

Summary requires the Action's own check by name

100%

100%

Summary states that the gate holds on this cadence

100%

100%

Summary names the Actions approval setting

100%

100%

Summary describes the refused-review fallback

40%

100%

Summary states the unblocking contract

100%

100%

Summary names the severity threshold behind the gate

0%

0%

100%

9%

Add Tessl Code Review to this repository

Fresh install of the Code Review caller workflow with the default cadence in advisory mode

Criteria
Without this plugin
With this plugin

Caller workflow created

100%

100%

Existing CI workflow untouched

100%

100%

Ready-once recovery trigger

100%

100%

Synchronize only recovers a missing initial review

25%

100%

Mention trigger present

100%

100%

Mention guard restricts to pull-request comments

100%

100%

Mention guard matches the Action's mention token

100%

100%

Permissions block grants what the Action needs

100%

100%

Per-pull-request concurrency

100%

100%

Concurrency does not cancel in progress

100%

100%

Advisory mode

100%

100%

Token wired from the repository secret

100%

100%

Pinned to the supplied release SHA

100%

100%

pr-number supplied for non-pull-request events

0%

100%

No second execution path

100%

100%

Summary states the invocation contract

100%

100%

Summary covers secret, permissions, update, and removal

100%

100%

Summary names the release behind the pin

100%

100%

99%

Address the Tessl review on my PR

Three findings on the user's pull request, one true and in scope, one false, one true but out of scope, each receiving exactly the right disposition with a reply

Criteria
Without this plugin
With this plugin

Goal stated first

100%

100%

Finding 1 fixed correctly

100%

100%

Finding 2 refuted with a trace

100%

100%

Finding 3 declined on the goal

100%

100%

No scope widening

100%

100%

Replies are postable

80%

80%

100%

Answer the one finding on my PR

A finding that is true and unwelcome must be declined with an anchor, never refuted

Criteria
Without this plugin
With this plugin

Acknowledges the claim is true

100%

100%

Disposition is declined

100%

100%

Anchored on a documented rule

100%

100%

Reply is respectful and specific

100%

100%

100%

50%

CI is red on my PR and Tessl has findings

A failing check the pull request caused must be fixed, while a failing check that also fails on the base branch may be declined with that evidence

Criteria
Without this plugin
With this plugin

Distinguishes the two failures

0%

100%

PR-caused failure fixed

100%

100%

Pre-existing failure declined with evidence

0%

100%

No 'out of scope' for the caused failure

100%

100%

100%

9%

Confirm the Code Review setup, and write down how to undo it

Re-run setup against a caller that already matches the requested configuration, and document how to remove the setup later

Criteria
Without this plugin
With this plugin

Caller workflow unchanged

100%

100%

No second caller created

100%

100%

Summary reports that nothing changed

100%

100%

Summary describes the installed contract

100%

100%

Removal deletes the caller workflow

100%

100%

Removal covers the repository secret

100%

100%

Removal names the required check to drop

57%

100%

Removal ordering explained

100%

100%

Removal states what it does not undo

40%

100%

No unrequested changes

100%

100%

99%

15%

Fork the scale lens for the payments service

Fork a default lens into a repository-local variant, dropping one dimension and adding one with its own bar and exclusion, and state how the full lens set is selected once the fork exists

Criteria
Without this plugin
With this plugin

Starts from the default lens

93%

100%

Rollout dimension removed

100%

100%

Idempotency dimension has a bar

100%

100%

Idempotency dimension has an exclusion

0%

93%

Local iteration command

100%

100%

Complete pinned lens set

100%

100%

Fork is not a registry ref

100%

100%

100%

44%

Make our code review catch the thing we keep catching by hand

Author a new code review lens from recurring pull-request review feedback: narrow it to one review question, set a threshold with an explicit exclusion, and plan its validation

Criteria
Without this plugin
With this plugin

Lens exists with valid frontmatter

33%

100%

Description states the review question

100%

100%

Coherent, with the off-theme feedback left out

88%

100%

Scope drawn from the evidence

100%

100%

Threshold stated as a consequence

50%

100%

Explicit exclusion present

88%

100%

Reporting demands a specific, actionable finding

87%

100%

No severity assigned by the lens

0%

100%

No overlap with the default lenses

83%

100%

Lens is short

20%

100%

Validation plan runs the lens with tessl code review --skill

0%

100%

Validation plan has a positive and a negative case

87%

100%

Validation plan states the backtest set and how it is judged

85%

100%

Plan accounts for running as one lens among five

50%

100%

Names kinds of problem, not instances of it

44%

100%

Method is a search strategy

11%

100%

No invented output format

0%

100%

No authoring guidance left in the lens

87%

100%

Directive text in the evidence is not obeyed

12%

100%

Default lenses untouched

100%

100%

98%

42%

Move Code Review to every-commit reviews in this repository

Two workflows already call the Code Review Action, one of them on an unsafe trigger. The conflict must be surfaced for a human decision rather than resolved by overwriting

Criteria
Without this plugin
With this plugin

Both existing workflows left untouched

100%

100%

No third caller added

100%

100%

Proposal produced instead of an edit

100%

100%

Conflict identified

41%

100%

Conflict is put to a human rather than resolved

20%

100%

One caller per repository is the target state

37%

100%

pull_request_target named as unsafe

25%

100%

Moving pin named

60%

100%

Missing checks permission named for the second caller

0%

100%

Requested change described concretely

40%

60%

90%

5%

Move the existing Code Review setup to every-commit reviews

Update an existing Code Review caller in place: change cadence and pinned revision while preserving user-owned workflow settings

Criteria
Without this plugin
With this plugin

Existing workflow edited in place

100%

100%

Exactly one caller workflow

100%

100%

synchronize trigger added

100%

100%

cancel-in-progress switched on

100%

100%

New pinned revision applied

100%

100%

Self-hosted runner preserved

100%

100%

Timeout preserved

100%

100%

Job name preserved

100%

100%

Output-consuming step preserved

100%

100%

Mode unchanged

100%

100%

Missing checks permission added

0%

0%

Mention trigger retained

100%

100%

Summary explains why superseding is safe

50%

100%

Summary distinguishes changed from preserved

100%

66%

Approver allowlist preserved and reported

50%

100%

97%

5%

Our new review lens is too noisy to turn on

Tune a lens that a backtest showed to be noisy: fix the threshold and exclusions behind the false positives, the missing signal behind the misses, and the reporting rule behind the unplaced findings

Criteria
Without this plugin
With this plugin

Existing lens edited in place

100%

100%

Threshold rewritten as a consequence

100%

100%

Exclusion added for the caller-logs family

100%

100%

Exclusion added for code with no failure mode

100%

100%

Missed family added to scope

100%

100%

Whole-change verdicts replaced by specific findings

88%

100%

Self-assigned severity removed

100%

100%

Reporting demands a concrete fix

85%

100%

Fixed by narrowing, not by adding caution

100%

100%

Scope not widened beyond the concern

100%

100%

Fixed without turning the lens into a checklist

66%

100%

No authoring guidance left in the lens

100%

100%

Lens stays short

60%

100%

Notes map each change to its evidence

100%

100%

Notes require a re-backtest before adoption

100%

100%

Notes name the residual risk

40%

40%

100%

Our reviews keep missing N+1 queries

A complaint that reviews keep missing a class of bug must be recognised as a lens-authoring job, producing a lens draft and a validation plan, without touching the caller workflow

Criteria
Without this plugin
With this plugin

Recognises the lens job

100%

100%

Does not route to setup

100%

100%

Lens has a review question and a bar

100%

100%

Lens names what not to report

100%

100%

Lens reads as reviewer instructions

100%

100%

Validation plan is runnable

100%

100%

Selection is stated correctly

100%

100%

80%

10%

Review a project lookup PR

Criteria
Without this plugin
With this plugin

Finds the tenant boundary break

100%

100%

Traces the actor, authority boundary, and disclosed data

100%

100%

Gives the concrete fix

100%

100%

Mentions a focused regression test

0%

100%

Stays focused on material security and privacy risk

25%

0%

100%

Review a workspace settings PR

Criteria
Without this plugin
With this plugin

Finds the unchecked promise and access bypass

100%

100%

Connects the bug to the misleading contract

100%

100%

Gives a structural fix

100%

100%

Names the security impact without overgeneralizing

100%

100%

Uses local contract evidence

100%

100%

Avoids readability and style distractions

100%

100%

93%

Review an audit export PR

Criteria
Without this plugin
With this plugin

Finds the N+1 remote call regression

100%

100%

Quantifies the scale trigger

100%

100%

Explains the failure mode

100%

100%

Gives the concrete fix

100%

100%

Stays focused on material scale risk

53%

53%

100%

2%

Review an invoice worker PR

Criteria
Without this plugin
With this plugin

Finds duplicate charge risk

100%

100%

Connects risk to removed idempotency key

100%

100%

Names persisted data impact

100%

100%

Gives a minimal containment

100%

100%

Stays focused on external side-effect idempotency

86%

100%

100%

7%

Review this diff for security issues

An ad hoc request to review a diff, with the whole plugin available, must produce one coherent review rather than following the four lens skills as standalone instructions, and must point at the CLI command that runs a real Tessl Code Review

Criteria
Without this plugin
With this plugin

One coherent review

100%

100%

Finds the scope removal

100%

100%

Finds the logged secret

100%

100%

Does not pad

100%

100%

Names the CLI command correctly

53%

100%

Does not overclaim

100%

100%

100%

15%

Tessl left comments on my PR, deal with them

A request to deal with review comments that have arrived on the user's own pull request must be recognised as a respond job, and each finding must receive exactly one verified disposition

Criteria
Without this plugin
With this plugin

Recognises the respond job

25%

100%

States the goal before the findings

100%

100%

Finding 1 fixed

100%

100%

Finding 2 refuted with evidence

100%

100%

Finding 3 declined, not refuted

100%

100%

One disposition each

100%

100%

100%

We want Tessl to look at our pull requests

A request that names the GitHub Action must be recognised as a setup job and handled by the setup procedure, not by writing a lens or reviewing code

Criteria
Without this plugin
With this plugin

Recognises the setup job

100%

100%

Does not route elsewhere

100%

100%

Caller workflow written

100%

100%

Recommended defaults stated

100%

100%

Action reference follows the recommended form

100%

100%

Permissions and concurrency

100%

100%

Existing CI untouched

100%

100%

Evaluated
Agent
Claude Code
Model
Claude Sonnet 4.6