Global tooling setups
Dev Profiles
What they are
A profile is a named set of pins (artifacts and kits) that HubBound materializes into your global tool homes — Claude Code, Cursor, Codex, Copilot, Antigravity, and so on.
Profiles are global only. They do not replace a project's HubBound file (hubbound.json), and they do not apply with --scope local.
What they are for
Use profiles when you want different global tooling setups — for example work vs personal — and need a safe way to swap them.
Switching removes only optional installs owned by the previous profile, then applies the target profile's pins.
- Never uninstalls enforced / RuleMandatory installs.
- Never removes files without HubBound ownership markers.
- Pins with version latest are checked for updates during switch.
Where they are stored
Profiles live under the HubBound user config directory (os.UserConfigDir()/hubbound-lab). On macOS that is typically ~/Library/Application Support/hubbound-lab; on Linux ~/.config/hubbound-lab.
hubbound-lab/
profiles/
active # e.g. work
work/hubbound.json
personal/hubbound.json
state/
artifact_installs.json
kit_installs.json
| profiles/<name>/hubbound.json | Pins for that profile (same shape as a project manifest). |
| profiles/active | Plain-text name of the active profile. |
| state/artifact_installs.json | Install ledger; profile-owned rows carry profile_id. |
| state/kit_installs.json | Kit ledger; same optional profile_id field. |
What they modify
Applying a profile installs or upgrades the pinned kits/artifacts into global tool config directories and stamps profile_id on the ledger rows.
Switching away uninstalls optional installs whose profile_id matches the previous active profile and that are not required by the target.
- Provider files HubBound owns (skills, hooks, rules, etc.) for profile-owned optional installs.
- profiles/active and the profile's hubbound.json pins.
- Ledger entries — ownership lives in profile_id, not in provider marker formats.
Commands that use them
Profiles are driven by the profile subcommands and by install --profile.
$ hubbound profile create work
$ hubbound install artifact author/my-hook --profile work
$ hubbound profile switch personal
$ hubbound profile list
| hubbound profile create | Create profiles/<name>/hubbound.json. First profile becomes active; may absorb existing unprofiled global installs. |
| hubbound profile switch | Teardown previous profile-owned optionals → check latest pins → apply target → write profiles/active. |
| hubbound profile list | Scan profiles/*/hubbound.json; show counts and which one is active. |
| hubbound install … --profile | Always pin into that profile. Active → install now. Inactive → offer TUI switch (or print a hint with --no-tui). |