A collection of CLI tools I've written for myself that have been useful. Yes, there was help from the robots here, mostly Claude.
| Tool | Description | Language | Version | Released |
|---|---|---|---|---|
asm |
AWS Secrets Manager CLI (get, create, update, delete, search secrets). Supports key/value pairs, files, TLS certs, and binary data. |
Python | v1.0.0 | 2026-02-18 |
aws-secret-replication-check |
Check Secrets Manager replication status. Lists all secrets in a region with their cross-region replication state. |
Python | v1.0.0 | 2026-02-18 |
brew-python |
Manage Homebrew Python symlinks. Lists available versions, shows current status, switches between installed versions. |
Bash | v1.0.0 | 2026-02-18 |
ec2-search |
Search and display EC2 instances across regions and profiles. Displays Profile, Instance ID, Type, AZ, State, and tags. Supports multiple AWS profiles and custom tag filtering. |
Python | v1.0.0 | 2026-02-18 |
ec2-state |
Manage EC2 instance state (get status, stop, start, terminate). Auto-discovers region across all AWS regions. |
Python | v1.0.0 | 2026-02-18 |
fcd |
Fuzzy directory finder (interactive cd). Searches directories by name with interactive selection. Configurable exclusions, depth control, and k8s context switching. |
Bash | v1.0.0 | 2026-02-18 |
gh-cleanup-runners |
Clean up GitHub Actions self-hosted runners. Identifies and removes offline runners at org or repo level. |
Bash | v1.0.0 | 2026-02-18 |
gh-runner-audit |
Audit GitHub Actions runner usage across an org. Lists repos with workflow status, runner groups, and runner counts. |
Python | v1.0.0 | 2026-02-18 |
gh-search |
Search repos in GitHub or a specific organization for a string. Displays matching repos with option to clone and open in VS Code. |
Python | v1.0.0 | 2026-02-18 |
git-audit |
Generate audit report of GitHub PRs and direct commits with filtering. Reports filtered by date, file patterns, PR titles, and ticket numbers. Outputs as list or CSV. |
Python | v1.0.0 | 2026-02-18 |
git-cleanup |
Manage branches and GitHub Actions runs. Delete merged branches, clear workflow runs, and bulk cleanup. |
Python | v1.0.0 | 2026-02-18 |
git-copy-branch |
Copy file changes between git branches. Copies modified/added/deleted files from origin to destination branch. Auto-commits deleted files. |
Python | v1.0.0 | 2026-02-18 |
git-force-quit-job |
Force-cancel a stuck GitHub Actions run. Parses the run URL and issues a force-cancel via gh api. |
Bash | v1.0.0 | 2026-02-18 |
git-update-branches |
Batch update git repositories. Iterates through a directory of repos and updates the default branch. Preserves state (stash, current branch) and restores after update. |
Bash | v1.0.1 | 2026-02-18 |
github-delete-pr-comments |
Delete all comments on a GitHub pull request. Removes comments by PR URL; reads credentials from ~/.git-credentials. |
Python | v1.0.0 | 2026-02-18 |
k8s-label-search |
Search Kubernetes resources by labels and annotations. Match by key, value, or key=value across multiple clusters. Supports JSON and matrix output formats. |
Python | v1.0.0 | 2026-02-18 |
ktail |
Tail Kubernetes logs with filtering and multi-pod support. Streams logs from all matching pods simultaneously. Supports colored output, JSON format, and include/exclude regex. |
Bash | v1.0.0 | 2026-02-18 |
ktx |
Fuzzy search and switch Kubernetes contexts. Numbered menu when multiple contexts match; optionally switches namespace. |
Bash | v1.0.0 | 2026-02-18 |
merge-yaml |
Deep-merge two YAML files. Second file's values override the first. Optionally annotates changed lines with a comment. |
Python | v1.0.0 | 2026-02-18 |
open-github-repo |
Search and open a GitHub repository in browser. Opens current repo without arguments; supports org-scoped search. |
Python | v1.0.0 | 2026-02-18 |
sort-manifests |
Sort Kubernetes manifests by kind and name. Sorts multi-document YAML and writes output with a -sorted suffix. |
Python | v1.0.0 | 2026-02-18 |
sort-yaml-key |
Sort a YAML file by a specified key. Reorders each block so the sort key appears first. |
Python | v1.0.0 | 2026-02-18 |
testpod |
Deploy or delete a netshoot debug pod in Kubernetes. Creates a nicolaka/netshoot pod with optional interactive shell.Supports easy cleanup with -d flag. |
Python | v1.0.0 | 2026-02-18 |
tf-sort |
Sort Terraform resource definitions alphabetically. Organizes Terraform and OpenTofu ( .tofu) files for better readability and git diffs.Preserves comments and formatting. |
Bash | v1.1.0 | 2026-09-24 |
tfdel |
Delete .terraform directories and lock files.Recursively removes Terraform and OpenTofu caches and reports disk space reclaimed. |
Python | v1.0.0 | 2026-02-18 |
tfplan-all |
Run terraform (or tofu) init+plan on all subdirectories containing .tf (or .tofu) files. Parallel execution with filtering, output saving, and graceful cancellation. |
Python | v1.1.0 | 2026-09-24 |
make install # Install Python dependencies
make link # Symlink tools to ~/.local/binEnsure ~/.local/bin is in your PATH, or specify a different location:
make link INSTALL_DIR=~/binPython: 3.10 or later (for type hints and modern syntax)
CLI tools (verified with make check-deps):
git- Required for most toolsgh(GitHub CLI) - Required for git-cleanup, git-audit, gh-cleanup-runners, gh-runner-audit, gh-search, git-force-quit-job, open-github-repo, github-delete-pr-commentsaws(AWS CLI) - Required for ec2-search, ec2-state, asm, aws-secret-replication-checkkubectl- Required for k8s-label-search, ktail, ktx, testpodkubectx,kubens- Required for ktxterraformortofu(OpenTofu) - Required for tfplan-alljq- Required for gh-cleanup-runners
Python packages (installed via make install):
typer- CLI frameworkGitPython- Git operations for git-copy-branch, git-audittabulate- Table formattingrequests- HTTP client for gh-search, github-delete-pr-commentsboto3- AWS SDK for asm, aws-secret-replication-checkPyYAML- YAML parsing for merge-yaml, sort-manifests, sort-yaml-keyPyGithub- GitHub API for open-github-repo
Run make check-deps to verify required CLI tools are installed.
make unlink # Remove symlinks
make uninstall # Remove Python dependenciesmake install-dev # Install dependencies + pre-commit hooks
make lint # Run all linters
make clean # Clean caches and bytecodeEach tool is versioned independently using tags in the format <tool-name>/v<version>.
To release a new version of a tool:
git tag brew-python/v1.0.0
git push origin brew-python/v1.0.0This triggers a GitHub release with the tool files attached.