Skip to content

Configuration

IpMan needs almost no configuration. Everything it keeps lives under a single home directory, and the interface adapts to your locale automatically.

Environment variables

Variable Default Description
IPMAN_HOME ~/.ipman Root of all ipman state — relocate everything with one variable
IPMAN_STORE_ROOT $IPMAN_HOME/store Override just the central skill store (tests / power users)

IPMAN_HOME is the one that matters: point it somewhere else and the store, scope registry, packs and trash all move with it.

State layout under IPMAN_HOME

~/.ipman/
├── store/                      # one original per skill (live clone + @commit snapshots)
├── scopes/
│   ├── registry.yaml           # known project scopes + skill-sync targets
│   └── <scope-id>/
│       ├── scope.yaml          # custody state + per-skill active/archived
│       └── content/            # a taken-over scope's skills directory
├── packs/
│   └── <name>.yaml             # pack definitions (named skill sets)
├── trash/
│   └── <timestamp>/            # quarantine — clean --apply moves here, never deletes
└── cache/                      # PyPI version check cache, etc.

This whole tree is ipman's to manage — you never edit it by hand. See How It Works for what each piece does.

Per-project files (committed)

File Committed? Written by
ip.yaml yes you (via ipman init) — declares the scope's skills
ip.lock yes ipman (sync) — exact commit + tree-hash pins
.gitignore (managed block) yes ipman — ignores the managed symlinks only

Locale

The interface auto-switches between English and Chinese based on your shell locale. IpMan reads LC_ALL, LANG, then LANGUAGE; if any starts with zh it renders in Chinese, otherwise English.

LANG=zh_CN.UTF-8 ipman status    # 中文界面
LANG=en_US.UTF-8 ipman status    # English interface

This affects everything: status values (real/link/broken become 真目录/软链接/断链), error messages, the interactive TUI, and CLI output alike.

Legacy: ~/.ipman/config.yaml

The pre-M1 config file (security modes, hub URL/mirrors, default agent) is still read by the dormant install/hub commands but has no effect on the core commands. It will be revisited if those features are reactivated — see Dormant Features.