Reviewing Changes
bitwarden/ios
Performs comprehensive code reviews for Bitwarden iOS projects, verifying architecture compliance, style guidelines, compilation safety, test coverage, and security requirements.
Checklist for wiring a new linter into Opik's Code Quality pipeline: the four files to edit, the silent-failure gotchas and the pass/fail verification loop.
$ npx skills add comet-ml/opik --skill add-code-quality-hook -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install comet-ml/opik add-code-quality-hook --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/comet-ml/opik.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/add-code-quality-hook .claude/skills/add-code-quality-hook && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "add-code-quality-hook" agent skill from https://github.com/comet-ml/opik/tree/main/.agents/skills/add-code-quality-hook into .claude/skills/add-code-quality-hook/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "add-code-quality-hook", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/comet-ml/opik/tree/main/.agents/skills/add-code-quality-hookType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add comet-ml/opik --skill add-code-quality-hook -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install comet-ml/opik add-code-quality-hook --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/comet-ml/opik.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/add-code-quality-hook .agents/skills/add-code-quality-hook && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "add-code-quality-hook" agent skill from https://github.com/comet-ml/opik/tree/main/.agents/skills/add-code-quality-hook into .agents/skills/add-code-quality-hook/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "add-code-quality-hook", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add comet-ml/opik --skill add-code-quality-hook -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install comet-ml/opik add-code-quality-hook --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/comet-ml/opik.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/add-code-quality-hook .cursor/skills/add-code-quality-hook && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "add-code-quality-hook" agent skill from https://github.com/comet-ml/opik/tree/main/.agents/skills/add-code-quality-hook into .cursor/skills/add-code-quality-hook/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "add-code-quality-hook", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/comet-ml/opik.git --path .agents/skills/add-code-quality-hook--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add comet-ml/opik --skill add-code-quality-hook -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install comet-ml/opik add-code-quality-hook --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/comet-ml/opik.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/add-code-quality-hook .gemini/skills/add-code-quality-hook && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "add-code-quality-hook" agent skill from https://github.com/comet-ml/opik/tree/main/.agents/skills/add-code-quality-hook into .gemini/skills/add-code-quality-hook/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "add-code-quality-hook", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install comet-ml/opik add-code-quality-hookInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add comet-ml/opik --skill add-code-quality-hook -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/comet-ml/opik.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/add-code-quality-hook .github/skills/add-code-quality-hook && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "add-code-quality-hook" agent skill from https://github.com/comet-ml/opik/tree/main/.agents/skills/add-code-quality-hook into .github/skills/add-code-quality-hook/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "add-code-quality-hook", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add comet-ml/opik --skill add-code-quality-hook -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install comet-ml/opik add-code-quality-hook --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/comet-ml/opik.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/add-code-quality-hook .opencode/skills/add-code-quality-hook && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "add-code-quality-hook" agent skill from https://github.com/comet-ml/opik/tree/main/.agents/skills/add-code-quality-hook into .opencode/skills/add-code-quality-hook/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "add-code-quality-hook", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
add-code-quality-hookChecklist for wiring a new linter into Opik's Code Quality pipeline: the four files to edit, the silent-failure gotchas and the pass/fail verification loop.
Opik runs all linters through one pipeline: pre-commit locally and a Code Quality workflow in CI that works out, for each pull request, which hooks have files to check and runs one job per matched linter. Because of that design, a missed edit produces a silent gap rather than a loud failure. The skill lists the four files every new linter touches: `.pre-commit-config.yaml`, `scripts/precommit-hook-descriptions.tsv`, `scripts/precommit-detect-hooks.py` and `CONTRIBUTING.md`.
It stresses details such as pinning a hook's `rev` to a tag or SHA, writing an explicit `files:` path regex because CI routes work by path rather than by `types:`, choosing a hook name that the description keyword can match, and the blank-description trap. It also covers the `TOOLCHAIN_BY_ID` and `TYPED_IDS` settings, a policy for fixing versus suppressing existing violations, and a verification loop. The worked examples are actionlint and hadolint, the first Docker-image hook; the excerpt stops partway through the first file's notes.
4 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit f217a86. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
python3hadolintmakeapt-getFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
github.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Add Opik Code Quality Hook loads about 2.3k tokens when it runs. Until then it costs about 151 tokens; SKILL.md has 1,173 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from comet-ml/opik at commit f217a86, republished under its Apache-2.0 licence (© comet-ml). 1,173 words, ~2,292 tokens.
.claude/skills/add-code-quality-hook/SKILL.md (or your agent's skills folder).Opik runs all linters through one pipeline: pre-commit locally, and the 🐙 Code Quality workflow (.github/workflows/code_quality.yml) in CI. CI does not run pre-commit wholesale — it derives, per PR, the set of hooks that actually have work using scripts/precommit-detect-hooks.py, then runs one CI job per matched linter. That design makes adding a linter a small, fixed set of edits — but each edit is load-bearing, and skipping one produces a silent gap (the hook runs nowhere, or renders blank in the summary, or provisions the wrong runtime) rather than a loud failure. This skill is the checklist.
The whole recipe is a generalization of two real PRs: actionlint (live in .pre-commit-config.yaml today — grep it as you read) and hadolint (OPIK-6673, PR #7352 — the first Docker-image hook, toolchain: none). Read the actionlint hook alongside this doc; it is the canonical, verifiable example.
Each linter touches these four files. Do all four.
.pre-commit-config.yaml — add the hookAdd the upstream hook (repo / rev / id). Pin rev to a tag or SHA — never a floating ref.
An explicit files: regex is mandatory, not optional. This is the single most common miss. The CI matrix detector (precommit-detect-hooks.py) routes work to hooks by path regex, not by pre-commit's types:. Most upstream hooks (actionlint, hadolint) ship a types:-only match with no files:. If you copy them verbatim, the detector cannot route any file to your hook and CI silently never runs it — pre-commit locally still works, so the gap hides until something slips through. The detector guards against this: it raises loudly if a hook has types:/types_or: without files: (see precommit-detect-hooks.py lines ~115). So a missing files: fails the detect step rather than regressing silently — but you still must write the regex.
Write a files: regex that captures exactly the paths the linter should gate. Example (actionlint — workflows only):
- repo: https://github.com/rhysd/actionlint
rev: v1.7.12
hooks:
- id: actionlint
name: ⚙️ actionlint — github workflows
files: ^\.github/workflows/.+\.(yml|yaml)$The name: is what the reader and the CI summary see — give it a clear, emoji-prefixed display name matching the house style of the other hooks. The description keyword you add in step 2 is matched against this name, so pick a name containing a stable, distinctive substring (e.g. actionlint, hadolint).
scripts/precommit-hook-descriptions.tsv — add the description rowThis TSV is the single source of truth for the per-hook descriptions shown in the Code Quality timing/skipped tables (the CI summary comment). Format: <keyword>\t<description>. The keyword is matched as a substring of the hook display name (name: from step 1).
Miss this and the hook renders with a blank description in the CI summary. Add a row:
hadolint Lint DockerfilesOrder matters — most-specific first. Matching is first-substring-wins top-to-bottom, so a more specific keyword must precede any that it contains (the file already does this: ruff-format before ruff). If your keyword is a substring of an existing one, place it above that line.
scripts/precommit-detect-hooks.py — toolchain and content-type mapsTwo maps in this file may need an entry. Most new hooks need neither (default is toolchain: none, no content-type narrowing) — but decide deliberately:
TOOLCHAIN_BY_ID — add your hook id here only if the leg's CI job must provision a heavy runtime: java (shells out to mvn), node-fe / node-ts (shells out to npm). Pre-commit's own hooks self-provision in isolated envs and need nothing; a language: golang hook (actionlint) self-builds; a Docker-image hook (hadolint) runs the image — all of these are none. code_quality.yml branches its setup steps on matrix.leg.toolchain, so a wrong value means a job either wastes minutes provisioning an unused runtime or lacks the runtime it needs.
TYPED_IDS — add your hook id here only if it carries an upstream types: that narrows its files: match to a content suffix, so the detector doesn't emit a leg that would no-op at runtime. Value is the tuple of suffixes the hook actually acts on (e.g. (".py", ".pyi")). Symptom of a missing entry: the CI timing comment reports fewer ran rows than emitted legs ("detect over-emitted a leg"). If your files: regex is already suffix-precise (like actionlint's \.(yml|yaml)$), you don't need TYPED_IDS.
Rule of thumb by hook type:
| Hook type | TOOLCHAIN_BY_ID | TYPED_IDS |
|---|---|---|
| Docker-image linter (hadolint) | none (omit) | usually omit — make files: suffix-precise |
language: golang/self-built (actionlint) | none (omit) | omit if files: is suffix-precise |
| Python tool (ruff, mypy) | none (omit) | add suffixes if files: is a broad dir regex |
| Shells out to mvn | java | as needed |
| Shells out to npm (FE/TS) | node-fe / node-ts | as needed |
CONTRIBUTING.md — "how to run locally" noteAdd a short section alongside the existing GitHub Actions workflows (actionlint) note: what the linter checks, that it runs in the unified 🐙 Code Quality workflow and locally via pre-commit, and that make hooks enables it. If the hook needs a local dependency (a Docker daemon for hadolint, etc.), say so; if pre-commit self-provisions it (actionlint builds from source), say that instead.
Adding a linter to a repo that has never run it will surface pre-existing violations. The gate must be green on day one. Policy, in order of preference:
apt-get install foo=1.2.3), which rots as mirrors move — the honest answer is an inline # hadolint ignore=DL3008 with a one-line why. Inline suppression is scoped to that one line and visible in review..hadolint.yaml ignored: list, an eslint config-level disable) fails open on every future file — it silently exempts code no one has reviewed. Inline-with-reason keeps the gate strict on everything new.See the OPIK-6673 discussion for a worked case where some rules genuinely couldn't be honestly fixed and inline-with-reason was the right call.
Before opening the PR, confirm the wiring end-to-end — don't trust that the four edits compose:
Detect emits a leg for a target file. Run the detector against a file the hook should gate and confirm your hook id appears in legs with the right toolchain:
python3 scripts/precommit-detect-hooks.py .pre-commit-config.yaml path/to/target.fileIf it lands in skipped instead, your files: regex doesn't match. If it errors about types: without files:, add the files: regex (step 1).
Hook passes clean. Run it on the current tree and confirm green (this is also the retroactive check):
pre-commit run <hook-id> --all-filesHook fails on a new violation. Introduce a deliberate violation in a target file and confirm the hook catches it, then revert. A hook that can't fail isn't gating anything.
Description resolves. Confirm the summary won't render blank:
echo "<your hook display name>" | python3 scripts/precommit-hook-desc.pyExpect <name>\t<description> — an empty second column means the keyword row (step 2) is missing or mis-ordered.
.pre-commit-config.yaml: hook added with pinned rev and an explicit files: regexscripts/precommit-hook-descriptions.tsv: keyword→description row, most-specific-first orderingscripts/precommit-detect-hooks.py: TOOLCHAIN_BY_ID entry iff heavy runtime needed; TYPED_IDS entry iff types:-narrowed and files: isn't suffix-preciseCONTRIBUTING.md: local "how to run" note added© comet-ml, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .agents/skills/add-code-quality-hook of comet-ml/opik.
Open the folder on GitHubat commit f217a86
Add Opik Code Quality Hook next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Add Opik Code Quality Hook this skillcomet-ml/opik | 22k | — | ~2.3k | Automated safety check: Pass | Apache-2.0 | |
| Reviewing Changesbitwarden/ios | 694 | — | ~1.1k | Automated safety check: Pass | GPL-3.0 | |
| ReviewdogAgentSecOps/SecOpsAgentKit | 219 | 1 repos | ~3k | Automated safety check: Pass | Custom licence | |
| Standards Autofixshopsys/shopsys | 350 | — | ~2.5k | Automated safety check: Pass | Custom licence | |
| Authoring CI WorkflowsPostHog/posthog-foss | 721 | — | ~11k | Automated safety check: Pass | MIT | |
| Babysit PRZenUml/web-sequence | 150 | — | ~871 | Automated safety check: Pass | MIT |
bitwarden/ios
Performs comprehensive code reviews for Bitwarden iOS projects, verifying architecture compliance, style guidelines, compilation safety, test coverage, and security requirements.
AgentSecOps/SecOpsAgentKit
Automated code review and security linting integration for CI/CD pipelines using reviewdog.
shopsys/shopsys
Fixes the violations reported by a failed coding-standards check (ecs, phpstan, phplint, twig-lint, markdown, yaml, and the storefront's tsc, biome and knip) by editing the source directly from the…
PostHog/posthog-foss
A skill your agent uses when adding or editing a GitHub Actions workflow, composite action, or reusable workflow under .github/ — new CI jobs, triggers, matrices, checkout/clone tuning, action…
ZenUml/web-sequence
Monitor and diagnose GitHub Actions checks on ZenUML web-sequence PRs, fixing code-caused CI failures when appropriate.
devantler-tech/ksail
Codifies devantler-tech engineering practices: agent-first development workflow, TDD, CI/CD pipelines, GitHub Flow, code quality gates, and Kubernetes workflows with ksail.
comet-ml/opik
Shows how to add product analytics events to Opik's frontend, Java backend and Python SDK, all reporting through Segment to PostHog with an opik_ name prefix.
comet-ml/opik
Investigates a failed Opik end-to-end test from CI, TestOps or a local run, decides regression versus flake, and proposes a fix without editing tests.
comet-ml/opik
Rules for writing PR descriptions, changelog entries and feature documentation in the Opik repository, including the exact headings that CI requires.
comet-ml/opik
Turns a code change into one committed, passing Playwright end-to-end spec by resolving the change scope and handing authoring to a companion skill.
comet-ml/opik
Starts, rebuilds, and troubleshoots the Opik local dev stack, including an optional Comet Platform integration mode for the Opik team.
comet-ml/opik
Specifies how to instrument an opik-backend pipeline with per-stage OpenTelemetry metrics for throughput, latency, errors and queue delay by workspace.
Works with
Categories
Checklist for wiring a new linter into Opik's Code Quality pipeline: the four files to edit, the silent-failure gotchas and the pass/fail verification loop. Opik runs all linters through one pipeline: pre-commit locally and a Code Quality workflow in CI that works out, for each pull request, which hooks have files to check and runs one job per matched linter. Because of that design, a missed edit produces a silent gap rather than a loud failure.
Add Opik Code Quality Hook fits situations like: adding a pre-commit linter or formatter to the Opik repo; checking that a new hook also runs in the CI Code Quality workflow; deciding whether to fix or suppress existing violations when enabling a linter.
Run `npx skills add comet-ml/opik --skill add-code-quality-hook -a claude-code`. Or copy the skill folder (.agents/skills/add-code-quality-hook in comet-ml/opik) into .claude/skills/add-code-quality-hook in your project. Claude Code loads it when a task matches its description.
Run `npx skills add comet-ml/opik --skill add-code-quality-hook -a codex`. Or copy the skill folder (.agents/skills/add-code-quality-hook in comet-ml/opik) into .agents/skills/add-code-quality-hook in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add comet-ml/opik --skill add-code-quality-hook -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/add-code-quality-hook, .gemini/skills/add-code-quality-hook, .github/skills/add-code-quality-hook and .opencode/skills/add-code-quality-hook in your project.
Going by SKILL.md and its folder, Add Opik Code Quality Hook needs the command-line tools its instructions call (python3, hadolint, make and apt-get). Our summary lists: A checkout of the Opik repository that uses pre-commit.
SKILL.md names 1 domain. In commands or code: github.com; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Add Opik Code Quality Hook is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.3k tokens (SKILL.md is roughly 9.2k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Add Opik Code Quality Hook: Reviewing Changes (bitwarden/ios, 694 stars), Reviewdog (AgentSecOps/SecOpsAgentKit, 219 stars), Standards Autofix (shopsys/shopsys, 350 stars) and Authoring CI Workflows (PostHog/posthog-foss, 721 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
comet-ml (a GitHub organization) maintains it in comet-ml/opik, which has 22,412 GitHub stars. The repository holds 19 skills in this directory. The repository was last updated on October 7, 2026.
Source: comet-ml/opik on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.