§ 00 — Productivity booster for dev tools

Your toolchain, finally written down.

klim maps the tools a project depends on, turns the answer into a .klim.yaml contract, and runs install · audit · diff · upgrade · restore through the package managers your machine already trusts.

$ Get klim Read the manual Free · MIT · macOS · Linux · Windows
~/projects/api ⟩ klim plan show
zsh · klim 0.1.0
$ klim plan show

Planning changes for .klim.yaml  (7 tools, 1 pack)

  ~ kubectl     1.29.4  →  1.30.1   brew    confidence 98%  low risk
  ~ terraform   1.6.6   →  1.8.2    brew    confidence 71%  review changelog
  + sops             —  →  3.9.1    brew    confidence 99%
   gh          2.50.0  already matches contract

────────────────────────────────────────────────────────
summary   +1  ~2  ·4   disk 142 MB    38s
checkpoint pre-apply-2026-06-15T11:42Z will be captured

$ klim plan apply --yes     # or: klim plan diff teammate.yaml

§ 01 — The idea

Three verbs. One binary.

Most dev environments are a folk tradition — passed down in READMEs, Slack threads, and the dotfiles repo nobody dares to touch. klim makes the tradition literal.

  1. 01

    Map

    Everything installed on this machine — version, source, binary path, supplier — collected into one local inventory you can actually grep.

    $ klim tool list --output json

    { "tool":"terraform", "version":"1.8.2", "source":"brew", "path":"/opt/homebrew/bin/terraform" }
  2. 02

    Standardize

    Turn the inventory into a versioned contract. One file. The same contract drives onboarding, CI, devcontainers, and Dockerfiles — generated from one source.

    $ klim project generate --target github-actions

    wrote .github/workflows/setup-toolchain.yml ✓
  3. 03

    Automate

    Install · upgrade · audit · diff · restore · share. klim never reinvents package management; it delegates to brew, winget, apt, scoop, choco, snap, npm.

    $ klim plan apply && klim security score

    environment score: 94 / 100 · 3 advisories · 0 blocked licenses

klim is the layer above packages, scripts, and prompts — the contract they can all read from.

§ 02 — What it does

Six things you'll actually use.

01 / contract

A file your repo can own.

.klim.yaml lives next to your code. Required tools, version ranges, a pack or two. klim project init scaffolds it from what your repo already references.

.klim.yaml

project: api-gateway
requires:
  go:         "~1.22"     # range
  terraform:  ">=1.6 <2.0"
  kubectl:    "^1.30"
  sops:       "3.9.x"
packs:
  - platform/cloud-native
policy:
  allowed_licenses: [MIT, Apache-2.0, BSD-3-Clause]
  max_severity: high

$ klim plan diff teammate.yaml

  tool         you                they
  go           1.22.4             1.22.4            match
  terraform    1.6.6              1.8.2             differs
  docker       25.0     via brew  26.1    via colima  source differs
  terraform-docs                            0.18.0            remote only

exit 1  // CI-friendly: nonzero on drift

02 / diff

"Works on my machine," answered.

Diff your toolchain against a teammate's export, a share token, or the contract checked into the repo. Exits nonzero on drift, which is what CI wants to hear.


03 / plan · apply · rollback

Terraform-style, for your tools.

Every change is previewed with a confidence score, applied through a native package manager, and bracketed by an auto-captured checkpoint you can roll back to with a single command.

$ klim plan apply — postcheck + auto checkpoint

capturing checkpoint pre-apply-2026-06-15T11:42Z+ sops 3.9.1            brew install sops~ terraform 1.8.2       brew upgrade terraform~ kubectl 1.30.1        brew upgrade kubectl       ✓

postcheck:
   shell resolution    binary validation
   PATH consistency    manager integrity

to undo: klim plan rollback pre-apply-2026-06-15T11:42Z

$ klim security score --badge

environment score      94 / 100   grade A

  freshness        98     last update 2d ago
  security         86     3 advisories (low / med)
  PATH hygiene     100    no shadowed binaries
  contract match   92     1 tool out of range

shields.io badge written to README.md

04 / score

A number you can put on the readme.

A 0–100 health grade with a per-category breakdown — freshness, security, PATH hygiene, contract match. Embeds as a shields.io badge so the README has skin in the game.


05 / share

Send your toolchain in a chat message.

Compact klim:v1:… tokens encode the essentials. The recipient runs klim share link open and lands on the same setup.

$ klim share link → paste → klim share link open

you  $ klim share link
klim:v1:eyJ0b29scyI6WyJnbyIsInRlcmYiLCJrdWJlIl0sInBhY2tzIjpb

them $ klim share link open klim:v1:eyJ0b29scyI6...
reading 8 tools, 1 pack…
install plan ready — run klim plan apply to continue

agent · stable JSON · deterministic exit codes

$ klim project check --output json
{
  "project":  ".klim.yaml",
  "status":   "needs_action",
  "missing":  ["terraform"],
  "outdated": ["kubectl"],
  "score":    94
}
exit 2  // 0=ok 1=drift 2=needs_action

06 / agents

An interface agents won't improvise around.

Same flags, same JSON, same exit codes — whether the caller is you, CI, or an LLM. Agents stop guessing brew commands and start calling a contract.

§ 03 — In motion

Same data, different surface.

klim ships with an interactive TUI that mirrors what the CLI exposes — pick whichever fits the moment, the underlying data and operations are the same.

fig. 2 — klim TUI, recorded session

fig. 2 — klim TUI, recorded session.

§ 04 — Install

One line. Pick your shell.

klim ships as a single binary. No runtime, no daemon, no account.

~ $ — Homebrew (recommended)

$ brew install nassiharel/tap/klim

or, via curl

$ curl -fsSL https://raw.githubusercontent.com/nassiharel/klim/main/install.sh | bash

~ $ — curl (recommended)

$ curl -fsSL https://raw.githubusercontent.com/nassiharel/klim/main/install.sh | bash

or, via Homebrew on Linux

$ brew install nassiharel/tap/klim

PS > — winget (recommended)

> winget install nassiharel.klim

or, via PowerShell installer

> irm https://raw.githubusercontent.com/nassiharel/klim/main/install.ps1 | iex
More ways to install (Scoop, Go, releases)

Scoop (Windows)

> scoop bucket add nassiharel
   https://github.com/nassiharel/scoop-bucket
> scoop install klim

Go install

$ go install github.com/nassiharel/klim/cmd/klim@latest

Pre-built binaries for macOS, Linux, and Windows (amd64 + arm64) on GitHub Releases.

§ 05 — Honest answers

Three things people always ask.

Does klim replace my package manager?
No. klim never installs anything itself — every install · upgrade · remove call is delegated to brew, winget, apt, scoop, choco, snap, or npm. klim is the layer that decides what to ask them to do.
Do I need an account or a server?
No. There is no auth, no telemetry, no required network. The marketplace catalog is cached locally; sharing happens via a token you paste into chat.
How is this different from a devcontainer or asdf?
Devcontainers and version managers cover one part of the toolchain (containerized runtimes, managed languages). klim covers the full set of tools a project depends on — CLIs, plugins, formatters, infra binaries — across the native package managers your machine already has.