A simple tool to help you manage multiple AWS profiles, with SSO support and easy account access.
Features
- 🔐 SSO integration: Full support for AWS SSO authentication
- 🚀 Easy profile access: Use any configured profile with a single command
- 🎯 Interactive picker: Run
kee usewith no arguments to pick a profile with fuzzy search - 🐚 Sub-shell isolation: Each profile runs in its own sub-shell with proper credential isolation
- ⚙️ One-shot commands: Run a single command with a profile's credentials via
kee runorkee aws - 📝 Custom aliases: Use friendly names for your AWS profiles
- 🔍 Profile management: Easily list, add, update, and remove profiles
- 🚫 No stored credentials: No AWS credentials are stored anywhere - uses AWS SSO tokens
- 🎨 Shell integration: Shows current profile in your shell prompt
- ⚡ Auto-refresh: Proactively refreshes tokens on every use and keeps sessions alive in the background
- 🚨 Production safety: Mark accounts as production to get a visible warning banner
Security notes
- No credential storage:
Keenever stores AWS access keys or secrets - SSO token management: Uses AWS CLI's built-in SSO token caching
- Sub-shell isolation: Each profile's session is isolated in its own shell
- Automatic cleanup: Environment variables are cleared when exiting sub-shells
Why Rust?
- 🚀 Performance: Compiled binary, faster startup times
- ⛑️ Memory safety: No runtime errors, guaranteed memory safety
- 🌍 Cross-platform: Single binary works across platforms
- 👌 Zero dependencies: No Python runtime required
- ⚡️ Concurrent: Built-in concurrency support for future enhancements
Installation
Prerequisites
- Rust 1.80+ (install from rustup.rs) (On Mac with brew:
brew install rust) - AWS CLI v2 installed and configured
- Configured AWS SSO account access
Install from crates.io
Install from source
Clone this repository:
Option 1: Automated (recommended)
This script will build an optimized
Keebinary, install it (in~/.cargo/bin), and add the folder to yourPATH. It will also install Kee's auto completions.
Option 2: Manual
# Install the binary
# Add Cargo's bin directory to your PATH
# Reload your shell configuration
Option 3: Direct copy
# Build and copy to a directory already in PATH
Quick Start
1. Add your first profile
This will:
- Run
aws configure sso --profile company.dev - Prompt you for your SSO configuration (start URL, region, etc.)
- Open your browser for SSO authentication
- Let you select your AWS account and role interactively
- Automatically save the configuration to
Kee
Tip: A session can be liked to multiple profiles. When prompted for a 'session name', use something generic, like your company name.
2. Use a profile
Pick interactively:
Or jump straight to one by name:
Either path will:
- Check if SSO credentials are valid
- Automatically run
aws sso loginif needed - Start a sub-shell with AWS credentials configured
- Update your shell prompt to show the active profile
3. Work with AWS
Inside the sub-shell, all AWS CLI commands will use the selected profile's credentials:
Commands
Show status or help
With no arguments, Kee shows the current active profile if you are inside a session, or prints help text otherwise.
Add a profile
Interactively configure a new AWS profile with SSO settings. You'll be asked whether this is a production account — production profiles display a warning banner when active.
Use a profile
Use a profile and start a sub-shell with its AWS credentials. With no name, Kee opens a fuzzy picker over your configured profiles. Every kee use proactively refreshes the token to give you the maximum session window.
Run a single command
Use kee aws for AWS CLI commands (the common case):
For anything else, use kee run:
Both run a single command with the profile's credentials and exit. No sub-shell, no prompt change. The wrapped command's exit code is propagated. Kee's own status messages go to stderr so they don't pollute the wrapped command's stdout. Production profiles still print a warning banner to stderr.
The -- separator in kee run is recommended any time the wrapped command starts with a flag, so Kee doesn't try to interpret it.
List all profiles
Show a quick overview of all configured profiles.
Show current profile
Display which profile is currently active (if any).
Update profile settings
Update settings for an existing profile.
Remove a profile
Removes a profile configuration from Kee and the AWS config file.
How It Works
Configuration storage
Keestores its configuration in~/.kee/config.json- AWS profiles are created in
~/.aws/config, following the AWS config pattern - No AWS credentials are stored - only SSO configuration
Sub-shell environment
When you use a profile, Kee:
- Validates SSO credentials (refreshes if needed)
- Updates shell prompt to show current profile
- Starts a new shell session
- Cleans up when you exit
Session management
When you run kee use, your session is refreshed proactively — every invocation gives you the maximum session window regardless of how much time was left.
While the sub-shell is active, a background process monitors the token's expiry and refreshes it automatically before it lapses. This means your session stays alive indefinitely as long as the sub-shell is open (limited only by the refresh token registration, typically ~3 months).
If the refresh token is expired or unavailable, Kee falls back to the full aws sso login flow.
⠹ Refreshing session...
[✓] Session refreshed.
Profile: mycompany.dev
Kee is starting a sub-shell...
Type exit to return to your main shell.
Kee also prevents you from starting a sub-shell while already in one:
Shell prompt integration
Your shell prompt will show the active profile:
()
Production safety
Profiles marked as production display a bold red warning when you enter the sub-shell:
⚠️ PRODUCTION ACCOUNT
Profile: mycompany.prod
Kee is starting a sub-shell...
Type exit to return to your main shell.
Mark a profile as production during kee add or at any time with kee set PROFILE_NAME --production.
Environment variables
When you're using a Kee profile, the following environment variables are set:
AWS_PROFILE- The AWS profile name (e.g.,mycompany.dev)KEE_CURRENT_PROFILE- The currentKeeprofile name (e.g.,mycompany.dev)KEE_ACTIVE_PROFILE- Set to1to indicate an activeKeeprofilePS1- Updated to show the current profile in your prompt (Unix-like systems only)
These variables help Kee manage sessions and prevent nested sub-shells.
Configuration files
Kee configuration (~/.kee/config.json)
AWS config (~/.aws/config)
[profile mycompany.dev]
sso_role_name = AdministratorAccess
sso_session = mycompany
sso_account_id = 123456789098
output = json
[sso-session mycompany]
sso_region = ap-southeast-2
sso_start_url = https://mycompany.awsapps.com/start
sso_registration_scopes = sso:account:access
Cross-platform support
Kee works on:
- macOS: Full support with shell prompt integration
- Linux: Full support with shell prompt integration
- Windows: Full support (prompt integration not available)
Troubleshooting
SSO login issues
If SSO login fails:
# Manual SSO login
# Then try using again
Profile not found
If you get "profile not found" errors:
# Check AWS config
# Re-add the profile if needed
Permission issues
If you get permission errors:
# Check AWS credentials
# Refresh SSO login
Future enhancements
- Built-in AWS SDK integration (no AWS CLI dependency)
- Configuration validation at compile time
- Plugin system with dynamic loading
- TUI interface with real-time updates
Binary distribution:
- Single executable file
- No runtime dependencies
- Easy deployment to servers
- Container-friendly
Package managers:
- Cargo:
cargo install kee - Homebrew:
brew install kee(planned) - Scoop:
scoop install kee(Windows, planned) - APT/YUM: Native packages possible (planned)
Contributing
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests, if applicable
- Test your changes:
make test - Submit a pull request
There is a utilities script which will set up a
pre-commithook to run some basic checks on your code before you commit.
Versioning
We use semantic versioning. Version bumps are handled with cargo-release.
When your changes are ready:
This updates Cargo.toml, commits, and tags in one step. Add --execute to apply (without it, it runs in dry-run mode).
License
MIT License - see LICENSE file for details.
Support
RTFM, then RTFC... If you are still stuck or just need an additional feature, file an issue.