Local-first, read-only AWS audit CLI. Generate a VP/CFO-ready AWS audit report in minutes.
Project description
Kulshan
Generate a VP/CFO-ready AWS audit report in minutes.
Local-first. Read-only. No CUR. No Athena. No SaaS.
pip install kulshan
aws sso login
kulshan report
What is Kulshan?
Kulshan is a local-first AWS audit tool that generates a business-ready report from your AWS account.
Think of it as a blood test for your AWS bill.
One command. Ten audit packs. HTML and JSON output. No data leaves your machine.
Install
pip install kulshan # macOS, Linux, Windows
Requires Python 3.9+. Works with the AWS credentials you already use.
Quick Start
pip install kulshan
aws sso login
kulshan report
Generates HTML and JSON reports locally using your existing AWS credentials.
What You Get
The default kulshan report runs the Cost Explorer baseline:
- Cost analysis: multi-method anomaly detection (z-score, IQR, MAD), cross-referenced against AWS Cost Anomaly Detection
- Commitment health: RI/SP coverage, utilization, on-demand exposure
- Spend concentration: which services dominate, diversification assessment
- Spend trend: daily average, direction, acceleration
- Addressable savings: what can be optimized and how much
- Executive summary: one paragraph for stakeholders
Additional Packs (Opt-In)
- Security posture: 50+ checks across IAM, encryption, network exposure, logging, public access
- Waste detection: orphaned EBS volumes, idle ALBs, unused EIPs, NAT gateway waste
- DR readiness: backup coverage, multi-AZ deployment, single points of failure
- Lifecycle audit: EOL runtimes, expiring certificates, staleness tax
- IaC drift: CloudFormation drift detection, IaC coverage gaps
- Tag compliance: tag governance, unattributed spend, dark money
- Observability: alarm coverage, logging gaps, blind-spot heatmap
- Quota headroom: service limits, scaling event planner
- Network topology: VPC mapping, CIDR overlaps, route integrity
Output formats: terminal, JSON, HTML, SARIF, CSV.
More Commands
kulshan doctor # Verify credentials and permissions
kulshan report --quick # Fast scan (3 regions, ~60s)
kulshan report -o report.html # Save as HTML
kulshan report --packs security,sweep # Run specific packs
kulshan report --packs all # Full 10-pack diagnostic
kulshan shell # Interactive REPL
Trust & Security
- Read-only: 147 explicit audit actions, zero write actions
- Local-first: reports stay on your machine, no uploads
- No telemetry: no phone-home, no tracking
- Published IAM policy: inspect every action before granting access
- Open source: Apache 2.0, read every line on GitHub
AWS API Costs
| Mode | AWS Cost |
|---|---|
| Default (Cost Explorer baseline) | ~$0.20 (CE @ $0.01/request) |
| Security, sweep, DR, tag, etc. | $0 (free-tier APIs) |
kulshan report --packs all |
~$0.20 (only cost pack charges) |
This is charged by AWS to your account, not by Kulshan.
About the Name
Kulshan is the Lummi name for the mountain known colonially as Mt. Baker, meaning "great white watcher." We acknowledge the Lummi and Nooksack peoples as the original namers of this mountain.
Built by
Mission FinOps | Mission, BC, Canada.
AI Agents
Kulshan works with Claude Code, Codex, Kiro, Cursor, and any agent that can run shell commands. See agents/ for integration docs.
License
Apache 2.0. Free and open source forever.
Project details
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 kulshan-0.1.1.tar.gz.
File metadata
- Download URL: kulshan-0.1.1.tar.gz
- Upload date:
- Size: 219.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a12f2455f05bd44ddf1aecdda5adbbdda6c1632f8f489ec07955115339e8aa01
|
|
| MD5 |
949efdf77abafab8574eb512bbd8aeb5
|
|
| BLAKE2b-256 |
7dd6b31ec333487b2d0def7ac80816257bb63df49a97d15db3e75fbc448f0c11
|
Provenance
The following attestation bundles were made for kulshan-0.1.1.tar.gz:
Publisher:
publish.yml on azz-kikkr/kulshan
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
kulshan-0.1.1.tar.gz -
Subject digest:
a12f2455f05bd44ddf1aecdda5adbbdda6c1632f8f489ec07955115339e8aa01 - Sigstore transparency entry: 1866859043
- Sigstore integration time:
-
Permalink:
azz-kikkr/kulshan@8ef92d6c4062182ea25de4778cbd676c6344ce1a -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/azz-kikkr
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@8ef92d6c4062182ea25de4778cbd676c6344ce1a -
Trigger Event:
push
-
Statement type:
File details
Details for the file kulshan-0.1.1-py3-none-any.whl.
File metadata
- Download URL: kulshan-0.1.1-py3-none-any.whl
- Upload date:
- Size: 287.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
103583648473858127333afb2c7a0c5836045050e880abe6d5da829a029c1b80
|
|
| MD5 |
b19f46f560c80d19d76086cbbac54b51
|
|
| BLAKE2b-256 |
a7bbb52e7ecb7932084878ee307eef18d73840a2b5e997c276651536ffc163f7
|
Provenance
The following attestation bundles were made for kulshan-0.1.1-py3-none-any.whl:
Publisher:
publish.yml on azz-kikkr/kulshan
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
kulshan-0.1.1-py3-none-any.whl -
Subject digest:
103583648473858127333afb2c7a0c5836045050e880abe6d5da829a029c1b80 - Sigstore transparency entry: 1866859128
- Sigstore integration time:
-
Permalink:
azz-kikkr/kulshan@8ef92d6c4062182ea25de4778cbd676c6344ce1a -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/azz-kikkr
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@8ef92d6c4062182ea25de4778cbd676c6344ce1a -
Trigger Event:
push
-
Statement type: