Status names current state
Every resource reports satisfied, missing, changed, skipped, or failed.
Kitout checks YAML against the Mac in front of you, shows a readable plan, and applies only the resources that need work.
kitout apply
Status remains read-only. Apply always rechecks current state before changing anything.
$ kitout apply
Kitout is planning changes for your Mac setup...
Config: ./kitout.yaml
> Inspecting Homebrew packages...
> Checking directory: ~/.config...
Applying changes:
> Installing formula gh...
> Cloning repository ~/code/example...
✓ done brew: gh — installed formula
✓ done repo: ~/code/example — cloned repository
✓ ok directory: ~/.config — directory exists
✓ ok cask: ghostty — cask is installed
Summary: 2 changed, 2 unchanged
Homebrew is the shortest path. Build from source when you are working on Kitout itself or want to inspect the code first.
brew tap vwall/kitout
brew install kitout
git clone https://github.com/vwall/kitout.git
cd kitout
go install ./cmd/kitout
Initialize a config, check prerequisites, inspect current state, preview planned changes, then apply when you are ready.
Create or reuse ./kitout.yaml in the setup repo.
kitout init
Check macOS, Homebrew, Git, shell, config validity, and paths.
kitout doctor
See satisfied, missing, changed, skipped, and failed resources.
kitout status
Preview changes without filesystem writes or shell execution.
kitout apply --dry-run
Recheck current state and apply only the resources that need work.
kitout apply
Other config:
--config /path/to/kitout.yaml
·
Detailed guide:
first real run
A small config can describe the tools, files, repositories, and safeguards that make a Mac feel like yours. Keep it in any setup repository—dotfiles or otherwise. Relative paths resolve from the folder containing the selected config, not from your shell's working directory.
version: 1
brew:
packages:
- git
- gh
- asdf
casks:
- font-monaspace-nf
asdf:
plugins:
- name: nodejs
url: https://github.com/asdf-vm/asdf-nodejs.git
versions:
- 24.18.0
tool_versions:
- path: ~/.tool-versions
tools:
nodejs: 24.18.0
directories:
- ~/code
- ~/.config
repos:
- path: ~/code/example
url: git@github.com:example/example.git
symlink_groups:
- source_root: ./home
target_root: "~"
target_prefix: "."
paths:
- zshrc
- gitconfig
security:
filevault:
required: true
firewall:
enabled: true
Kitout uses the same plain language from the first check through apply, so current state, planned work, completed changes, and blockers remain easy to distinguish.
Every resource reports satisfied, missing, changed, skipped, or failed.
See the intended changes without filesystem writes or shell execution.
Only resources that need work are applied, and risky changes ask first.
Prerequisites fail early with a concrete next step instead of noisy checks.
Homebrew is not available
fix: Install Homebrew, then rerun
kitout doctor.
1 configured write target(s) may not be writable
fix: Fix ownership or permissions for the listed paths, then rerun
kitout doctor.
Agent guidance is optional. Add it to a setup repo when Codex or another coding agent needs durable context without permission to make hidden changes.
kitout init --agents
kitout context
kitout status --json
kitout explain 'symlink:/Users/example/.zshrc'
Lists declared resources and safe commands without live checks.
Feeds stable status reports to agents and other tools.
Real apply, shell resources, and risky changes stay human-approved.
Optional workflow: agent context guide · Release: latest release
Follow the practical guides, read the complete command and config references, or inspect the architecture behind each resource.