From odin
Installs git pre-commit hooks for commit-time formatting, linting, type-checking, and tests, auto-detecting ecosystem (Node/husky-lint-staged, Python/OCaml/pre-commit, Go/lefthook, Rust/cargo-husky).
npx claudepluginhub outlinedriven/odin-claude-plugin --plugin odinThis skill uses the workspace's default tool permissions.
Detect the ecosystem, pick the right hook tool, install with formatter + type-check + test gates.
Sets up Husky pre-commit hooks with lint-staged (Prettier), type checking, and tests in the current repo. Useful for adding commit-time formatting, linting, type checks, and testing.
Sets up pre-commit, pre-push, and commit-msg git hooks for Node.js (husky, lint-staged) and Python (pre-commit) projects to automate linting, testing, formatting, and commit conventions.
Configures pre-commit or prek git hooks for code quality automation, formatting, linting, and commit message processing across multi-language projects.
Share bugs, ideas, or general feedback.
Detect the ecosystem, pick the right hook tool, install with formatter + type-check + test gates.
Dispatch Explore agent — or for a single-language repo, probe directly via fd for lockfile / manifest signature. Map the first manifest hit to an ecosystem. Multi-language repos: ask the maintainer which surface to gate, or apply both.
| Ecosystem | Hook tool | Install command |
|---|---|---|
| npm / yarn / pnpm / bun | husky + lint-staged | <pm> add -D husky lint-staged prettier && npx husky init |
| Python (poetry/pip) | pre-commit (framework) | pipx install pre-commit && pre-commit install |
| Go | lefthook (or pre-commit) | go install github.com/evilmartians/lefthook@latest && lefthook install |
| Rust (cargo) | cargo-husky (or pre-commit) | add cargo-husky as [dev-dependencies]; runs on cargo test |
| OCaml (dune) | pre-commit + dune hooks | pipx install pre-commit && pre-commit install |
Node ecosystems — write .husky/pre-commit:
npx lint-staged
<pm> run typecheck
<pm> run test
Drop missing scripts and tell the user. Write .lintstagedrc:
{ "*": "prettier --ignore-unknown --write" }
Formatter policy is out of scope for this skill. Do NOT auto-create .prettierrc. If no Prettier config exists, surface that fact and ask the user.
Python — write .pre-commit-config.yaml:
repos:
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.6.0
hooks:
- id: ruff
- id: ruff-format
- repo: local
hooks:
- id: pyright
name: pyright
entry: pyright
language: system
pass_filenames: false
- id: pytest
name: pytest
entry: pytest -q
language: system
pass_filenames: false
stages: [pre-commit]
Go — write lefthook.yml:
pre-commit:
parallel: true
commands:
fmt: { run: gofmt -l -w {staged_files} }
vet: { run: go vet ./... }
test: { run: go test -race ./... }
Rust — Cargo.toml:
[dev-dependencies]
cargo-husky = { version = "1", default-features = false, features = ["precommit-hook", "run-cargo-test", "run-cargo-clippy", "run-cargo-fmt"] }
OCaml — .pre-commit-config.yaml:
repos:
- repo: local
hooks:
- id: dune-fmt
name: dune fmt
entry: dune fmt
language: system
pass_filenames: false
- id: dune-build
name: dune build
entry: dune build
language: system
pass_filenames: false
- id: dune-test
name: dune runtest
entry: dune runtest
language: system
pass_filenames: false
fd -d 2 -t f '\.husky|\.pre-commit-config\.yaml|lefthook\.yml' shows the expected file.git commit --allow-empty -m "chore: verify hooks") — every gate must run and pass.chore: install pre-commit hooks (<tool>). The commit itself trips the new hook — first-class smoke test.