---
title: "Git hooks setup: conventional commits + secrets — GitKit"
source: "https://univerlab.org/gitkit/"
---

[UniverLab · open laboratory](/)EXP-003

# GitKit

// the ritual, automated

One guided flow for hooks, `.gitignore`, `.gitattributes` and git config — then saved as a **build** you can re-apply to any project with a single command.

repository setup → saved, idempotent builds → the same ritual everywhere

[Star on GitHub ↗](https://github.com/UniverLab/gitkit)[Documentation →](/gitkit/docs/)

Install

macOS / LinuxWindows

`curl -fsSL https://install.univerlab.org/gitkit | sh``irm https://install.univerlab.org/gitkit.ps1 | iex`⧉✓

![](/bench/machines/gitkit-day-450.webp)

EXP-003 · active · Sol 91 (2026-04-01) · [release v0.7.0 · 3 weeks ago](https://github.com/UniverLab/gitkit/releases/tag/v0.7.0) · roadmap: · · Built with [Canopy](/canopy/) · Repository set up with [ghScaff](/ghscaff/) · Demo recorded with [DemoStage](/demostage/) · Commits checked by [GitKit](/gitkit/)

Latest release: v0.7.0 (2026-10-06)

Genesis · 2026 · Sol 91 (2026-04-01)

## A line-ending that wouldn’t behave.

It started with a commit that changed nothing — just line endings, silently rewritten somewhere between my work Mac, my Windows box and the agents on WSL. Chasing it down led me to `.gitattributes`. That led to git hooks: built into git, genuinely powerful, and ignored by almost everyone — because wiring them into every repo is a chore. So I deleted the chore. That’s gitkit.

Fig. 1GitKit — recorded with DemoStage

~/repo — gitkit

    $ git commit -m "feat: parse manifests"
      ✓ conventional-commits  (commit-msg)
      ✓ no-secrets            (pre-commit)
    [main 7f3a9c1] feat: parse manifests
    $ git push
      → origin/main  ·  push.autoSetupRemote

One flow

*   Built-in hooks: conventional commits, secret detection, branch naming — embedded, offline.
*   Every gitignore.io template plus curated git config presets, applied idempotently.
*   `gitkit clone` bootstraps a repo the moment it lands on disk.
*   Builds: save a setup once, apply it to every future project.
*   Lock: block commits and pushes via the hooks already installed — `--json` for machine-readable status.

FAQ

## FAQ

How do I prevent AI agents from making bad commits?

GitKit sets up git hooks in one flow — conventional commits, secret detection, branch naming. Hooks run offline, embedded in the repo. Agents can't push code that doesn't compile or contains secrets.

What are GitKit "builds"?

A build saves your git configuration (hooks, ignore, attributes, config) as a reusable template. Apply it to any future project with one command — no need to reconfigure hooks for every repo.

How do I pause writes to a repository?

Run gitkit lock to block commits and pushes through the hooks gitkit already installs. The repository stays readable but unwritable until you run gitkit unlock. Useful when an autonomous agent needs to stop writing while you rebase, reinstall, or inspect the tree.

Field notes