CLI tool for managing Kiro IDE configuration bundles
Project description
Kiro Settings Manager (ksm)
A CLI tool for managing Kiro IDE configuration bundles. ksm lets you install, remove, sync, and organise bundles of skills, steering files, hooks, and agents across local (workspace) and global (~/.kiro/) scopes.
Table of Contents
Features
- Install configuration bundles locally (
.kiro/) or globally (~/.kiro/) - Interactive terminal selector for browsing and choosing bundles
- Dot-notation targeting to install a single item from a bundle (e.g.
git_and_github.skills.github-pr) - Subdirectory filters to install only skills, steering, hooks, or agents
- Registry system with a built-in default registry and support for adding external git registries
- Ephemeral installs from any git URL via
--from - Sync installed bundles to pull the latest changes from their source registries
- Persistent manifest tracking what is installed, where, and when
Prerequisites
- Python 3.10 or later
Installation
From PyPI (recommended)
pip install kiro-settings-manager
Once installed, the ksm command is available in your shell. If you prefer an isolated install that won't affect your global Python environment, use pipx:
pipx install kiro-settings-manager
From GitHub
# Latest from main
pip install git+https://github.com/staneslevski/Kiro-Settings-Manager.git
# Specific version tag
pip install git+https://github.com/staneslevski/Kiro-Settings-Manager.git@v0.1.0
# Specific branch
pip install git+https://github.com/staneslevski/Kiro-Settings-Manager.git@branch-name
From source (for development)
git clone https://github.com/staneslevski/Kiro-Settings-Manager.git
cd Kiro-Settings-Manager
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
See the Development section for the full dev workflow.
Quick Start
# Browse available bundles interactively
ksm add --display
# Install a bundle globally
ksm add python_dev -g
# Install a single skill from a bundle
ksm add git_and_github.skills.github-pr -g
# List installed bundles
ksm ls
# Sync all installed bundles to latest
ksm sync --all --yes
# Remove a bundle
ksm rm python_dev -g
Usage
ksm add
Install a bundle or a specific item from a bundle.
# Install a full bundle locally (into .kiro/)
ksm add python_dev
# Install globally (into ~/.kiro/)
ksm add python_dev -g
# Interactive selector
ksm add --display
# Dot notation — install one item
ksm add git_and_github.skills.github-pr -g
# Install only steering files from a bundle
ksm add project_foundations --steering-only -g
# Install from an external git repo (ephemeral, not registered)
ksm add my-bundle --from https://github.com/org/repo.git -g
Subdirectory filter flags: --skills-only, --steering-only, --hooks-only, --agents-only. These are mutually exclusive with dot notation.
ksm ls
List all installed bundles tracked in the manifest (~/.kiro/ksm/manifest.json). Output is grouped by scope — local (workspace .kiro/) bundles first, then global (~/.kiro/) bundles. Each entry shows the bundle name, source registry, and a relative timestamp of the last install or sync.
# List all installed bundles
ksm ls
# Include the file paths installed by each bundle
ksm ls -v
# Show only workspace-level bundles
ksm ls --scope local
# Show only user-level bundles
ksm ls --scope global
# Machine-readable JSON output (pipe to jq, etc.)
ksm ls --format json
Example output:
Local bundles:
git_and_github (default) 2 days ago
Global bundles:
python_dev (default) 5 minutes ago
aws (default) 1 week ago
With -v (verbose), installed file paths appear under each bundle:
Local bundles:
git_and_github (default) 2 days ago
steering/git-branching.md
skills/github-pr/SKILL.md
If no bundles are installed, a message is printed to stderr and the command exits 0.
ksm sync
Re-install bundles from their source registries to pick up changes. For git-based registries, sync pulls the latest commits before copying.
# Sync specific bundles
ksm sync python_dev
# Sync everything
ksm sync --all
# Skip the confirmation prompt
ksm sync --all --yes
ksm rm
Remove an installed bundle and its files.
# Remove a local bundle
ksm rm python_dev
# Remove a global bundle
ksm rm python_dev -g
# Interactive removal selector
ksm rm --display
ksm add-registry
Register an external git repository as a bundle source. The repo is cloned into ~/.kiro/ksm/cache/ and must contain at least one valid config bundle.
ksm add-registry https://github.com/org/shared-bundles.git
After registering, bundles from that registry appear in ksm add --display and can be installed by name.
Config Bundles
A config bundle is a directory containing one or more of these subdirectories:
my-bundle/
├── skills/ # Kiro skill definitions (SKILL.md + scripts)
├── steering/ # Steering markdown files
├── hooks/ # Hook JSON files
└── agents/ # Custom agent definitions
A bundle is valid if it contains at least one of these four subdirectories.
Built-in Bundles
| Bundle | Contents | Description |
|---|---|---|
aws |
skills, steering | AWS-focused skills and steering rules |
example_conf_bund |
agents, hooks, skills, steering | Example bundle demonstrating all subdirectory types |
git_and_github |
agents, skills, steering | Git branching rules, GitHub PR skill, README writer agent |
kiro_skill_authoring |
skills | Skill for authoring Kiro skills |
project_foundations |
skills, steering | Project structure and scaffolding guidance |
python_dev |
steering | Python development standards |
Authoring a Bundle
- Create a directory under
config_bundles/with your bundle name. - Add one or more subdirectories:
skills/,steering/,hooks/,agents/. - Populate them with the appropriate files (e.g.
SKILL.mdfor skills,.mdfor steering,.jsonfor hooks). - The bundle is automatically discovered by
ksmthrough the default registry.
Architecture
src/ksm/
├── cli.py # Argument parsing and command dispatch
├── commands/
│ ├── add.py # ksm add
│ ├── add_registry.py # ksm add-registry
│ ├── ls.py # ksm ls
│ ├── rm.py # ksm rm
│ └── sync.py # ksm sync
├── scanner.py # Discovers valid bundles in a registry directory
├── resolver.py # Finds a bundle by name across all registries
├── installer.py # Copies bundle files to target .kiro/ directory
├── copier.py # Low-level file/tree copy operations
├── remover.py # Deletes installed bundle files
├── manifest.py # Tracks installed bundles (manifest.json)
├── registry.py # Manages registered bundle sources (registries.json)
├── persistence.py # JSON I/O and path constants
├── selector.py # Interactive terminal bundle selector
├── dot_notation.py # Parses bundle.subdir.item selectors
├── git_ops.py # Git clone/pull operations
└── errors.py # Custom exception types
State is stored in ~/.kiro/ksm/:
manifest.json— records every installed bundle, its scope, source, and file listregistries.json— lists all registered bundle sources (default + any added git registries)cache/— cloned git registries
Development
# Create venv and install
python -m venv .venv
source .venv/bin/activate && pip install -e ".[dev]"
# Run tests
source .venv/bin/activate && pytest
# Run tests with coverage
source .venv/bin/activate && pytest --cov=ksm tests/
# Format
source .venv/bin/activate && black src/ tests/
# Lint
source .venv/bin/activate && flake8 src/ tests/
# Type check
source .venv/bin/activate && mypy src/ tests/
# Run thorough property tests (CI mode)
source .venv/bin/activate && HYPOTHESIS_PROFILE=ci pytest
Utility Scripts
| Script | Purpose |
|---|---|
scripts/install-steering-and-skills.sh |
Copies docs/steering/ and docs/skills/ to ~/.kiro/ |
scripts/sync-to-kiro-settings.sh |
Merges settings/allowed_commands.txt into Kiro's settings.json |
scripts/update-allowed-commands.sh |
Extracts trusted commands from Kiro's settings.json into settings/allowed_commands.txt |
License
Apache 2.0 — see LICENSE for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file kiro_settings_manager-0.2.0.tar.gz.
File metadata
- Download URL: kiro_settings_manager-0.2.0.tar.gz
- Upload date:
- Size: 139.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
274e0018b90ee2dfd9ddc51138e70d0f6256e9f904f1f6942b1bba2fb0fc70ca
|
|
| MD5 |
6461282d655d834813585a1fd44260fe
|
|
| BLAKE2b-256 |
5c134978f09d419bf57f5cf0380cdd6b904e7cfa658ec56ff264a8755b5cec2e
|
File details
Details for the file kiro_settings_manager-0.2.0-py3-none-any.whl.
File metadata
- Download URL: kiro_settings_manager-0.2.0-py3-none-any.whl
- Upload date:
- Size: 54.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fb7cf084911510f1c39ef460be6872040d34ca9842ed215e07601279056c88aa
|
|
| MD5 |
d056d3deb654bbda3b62b21b84d789d8
|
|
| BLAKE2b-256 |
11b02aaf87130d7b1dfe06abb3a75bb63d131e6da3e746504a04d9857c93fff8
|