Skill: Lint-catalog review on a PR
SkillDev toolsLets your agent run a lint review on a pull request and post each finding as a GitHub comment.
Use Skill: Lint-catalog review on a PR in Claude, ChatGPT or Ahel Desktop
Free. Sign in, add Skill: Lint-catalog review on a PR and connect your AI. About a minute.
Also: Claude Code · Cursor · Codex
Then ask your AI: use the Skill: Lint-catalog review on a PR
Details
Instructions available. Your AI can read the instructions. Execution depends on the setup they require.
Account requirements not reviewed. Check the skill instructions before use; Ahel provides instructions and does not run this skill.
No other account needed.
Add Ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.
About this skill
Run the read-only infra/lint PR reporter only when invoked by CI or explicitly requested; do not select it for the commit workflow's fix-and-respond review.
What this skill tells your AI
The instructions your AI receives, as published by marin-community/marin in .agents/skills/lint-review/SKILL.md and read by Ahel’s review.
Run the infra/lint/ catalog review (./infra/pre-commit.py --review)
over a pull request's branch diff and surface every finding — as file:line
inline review comments where the finding's line is available, and as a
single fallback comment for the rest.
Your contract
You are running the review and reporting its output. You are read-only except
for posting comments: never edit, stage, commit, push, or "fix" anything, and
never run a state-changing git/gh command. The review's own lane agents are
already locked read-only.
Report the findings faithfully. The --review run (its lanes + composer) is
the authority on what is a finding: post each surviving finding verbatim —
one comment per finding. Do not drop, merge, reword the substance of, soften,
re-judge, or invent findings. Silently losing a real finding is the one
unforgivable error; so is fabricating one.
Steps
-
Idempotency guard (only with
--comment). Check whether this skill has already posted on this PR head: look for the marker<!-- marin-lint-review:<head SHA> -->in both issue comments (gh pr view <PR> --json comments) and inline review comments (gh api repos/{owner}/{repo}/pulls/<PR>/comments --paginate). If the marker is present, stop now — this PR head already has a lint pass and we do not want duplicate comments. Otherwise continue. -
Run the review. From the repo root:
head_sha="$(git rev-parse HEAD)" MARIN_REVIEW_TRIGGER=ci \ MARIN_REVIEW_PR_NUMBER=<PR> \ MARIN_REVIEW_HEAD_SHA="$head_sha" \ ./infra/pre-commit.py --review --agent-command='codex exec'The command writes its raw per-arm prompts/outputs and the combined findings under
/tmp/marin-linter/<branch>/<timestamp>-<uniq>/(path printed at the end); read it if a run looks wrong. -
Collect the findings. Each finding the command emits on stdout is one line in the canonical catalog format:
<path>:<line>: ml-<code> (<confidence>) <message>e.g.
lib/iris/src/iris/foo.py:42: ml-cruft-dead-branch (0.85) Unreachable else after early return. -
No findings vs. failed run. Distinguish two zero-finding cases:
- Clean — the command exited 0 and printed
Lint review: no findings.(or emitted no finding lines). Post nothing: the green job check is the "lint pass clean" signal, and a second "all clear" comment would only duplicate the high-level review. State "Lint review: no findings." to the terminal and stop. - Failed to run — the command exited non-zero or printed that every lane failed / the agent was not found / the merge-base could not be resolved. Do not report this as clean. State plainly in your final output that the lint review could not run and why; post no comments. (A broken run is a job-log signal, not a PR comment.)
(Without
--comment: just print the findings, if any, to the terminal and stop here regardless.) - Clean — the command exited 0 and printed
-
Post inline comments. With
--commentand findings present, for each finding post one inline review comment on the head commit, using the GitHub tools available in your session, at the finding'spathandline, with a body of exactly this shape:🤖 `ml-<code>` · confidence <confidence> <message> <!-- marin-lint-review:<head SHA> -->The
<message>is copied verbatim from the finding. Post one comment per finding; never post two comments for the same finding. -
Handle un-anchorable findings. GitHub rejects an inline comment on a line that is not part of the PR diff. A finding can land on such a line — e.g. the holistic
metalane anchors on context outside the added hunks. When a post fails for that reason, do not abort: record that finding and keep going through the rest. -
Fallback summary. After attempting every inline comment, if any findings could not be placed inline, post one issue comment with
gh pr comment <PR>so none are dropped. Format:🤖 Lint review: These infra/lint findings anchor on lines not in the PR diff, so they could not be attached inline. - <path>:<line>: ml-<code> (<confidence>) <message> - ... <!-- marin-lint-review:<head SHA> -->List every un-anchorable finding verbatim. If every finding was placed inline, do not post this comment.
Notes
- Use the
ghCLI for GitHub; do not web-fetch. - The review reads the branch diff against the merge base with
origin/main, covering committed and uncommitted work. CI checks out the PR head and fetchesorigin/mainbefore invoking you, so the merge base resolves.
Signals
- GitHub stars
- 4k
- Forks
- 311
- Last commit
- Oct 2026
Advanced
- Item type
- skill
- Key
lint-review- Source
- github.com/marin-community/marin
github.com/marin-community/marin
Related picks
Skill · tddworks
The pick for GitHub Actionsgithub-actions-docs
Skill · devantler-tech
The pick for GitHub Actionspython-performance-optimization
Skill · wshobson
The pick for Pythonpython-pro
Skill · jeffallan
The pick for Pythonteach
Skill · mattpocock
More in Dev toolsimplement
Skill · mattpocock
More in Dev tools