Inventory discovery
Skill ymedlop/kuberoutectl-skills/skills/inventory-discovery
Discover and refresh what Kubernetes access a user has, and set up a provider for the first time. Handles prompts like 'what clusters do I have', 'list my clusters', 'I only see one AWS account', 'this list looks stale', 'set me up with kuberoutectl'. USE FOR: prerequisites and doctor, AWS SSO multi-account profiles, syncing a provider, refreshing a stale inventory, checking discovery breadth via scopes, telling an empty cache from a permissions boundary. DO NOT USE FOR: choosing or switching to a cluster (use target-selection), or diagnosing why a known cluster is unreachable (use access-triage).From its SKILL.md
npx -y skills add ymedlop/kuberoutectl-skills --skill inventory-discoveryAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its file declares
Copied from the file, not written here
The file declares its own license as Apache-2.0. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
7.4 KB, ~1.8k tokens by cl100k_base, as published. Nobody here has run it
Inventory discovery
Use this when the user asks "what clusters / access do I have?", is starting fresh, says the list looks stale, or found fewer clusters than expected.
kuberoutectl asks each provider's own CLI (Azure, AWS, GCP) or reads local kubeconfig files, then records what it finds in a local JSON cache. Everything else — routing, triage — reads that cache.
Preconditions
kuberoutectlonPATH(install).- The provider's own CLI installed and logged in.
doctorchecks the first, not the second. - AWS across more than one account: profiles must exist in
~/.aws/configfirst — step 3. Without themsync awsfinds one account and the user assumes clusters are missing.
Commands
# read-only
kuberoutectl doctor
kuberoutectl inventory providers
kuberoutectl inventory sources
kuberoutectl inventory scopes
kuberoutectl target list
kuberoutectl target label list <alias|id|name>
# refresh — idempotent; user labels, collections, visibility all survive
kuberoutectl sync azure
kuberoutectl sync aws
kuberoutectl sync gcp
kuberoutectl sync kubeconfig
# writes ~/.aws/config — additive, confirm first
kuberoutectl setup aws-sso --sso-session <name>
kuberoutectl setup aws-sso --sso-session <name> --role <role> --region <region>
# cache cleanup — destructive, confirm first
kuberoutectl target delete <alias|id|name>
kuberoutectl target clear
Steps
- Prerequisites.
doctor. Anything notokis an install problem — resolve it via the matching provider guide. - Providers in scope. Ask, or infer from
doctor. Only sync clouds the user has; each unnecessary sync can trigger a login prompt. - AWS multi-account, if applicable.
setup aws-ssoenumerates every account reachable through an IAM Identity Center session and appends onekr-<account>-<role>profile per account. Needs a live session first —aws sso login --sso-session <name>, which the user runs. Pass--roledeliberately: the default isAdministratorAccesswhen present, over-privileged for inspection. Pass--regionif EKS lives outside the session'ssso_region. - Sync, one provider at a time. Sync is not transactional — a failure midway leaves a partial cache, so read each result before starting the next.
- Verify.
target list, theninventory scopesfor breadth. For AWS, expect one scope per account.
Reading the result
$ kuberoutectl doctor
CHECK STATUS DETAIL
provider:aws ok resolved at /usr/local/bin/aws
provider:gcp ok resolved at /opt/homebrew/bin/gcloud
$ kuberoutectl target list
ALIAS PLATFORM REGION HEALTH PROVIDER
cluster-test gke europe-west3 valid gcp
doctor— binary resolution only.okmeans the CLI was found, not that the user is logged in. A fully green doctor with no session yields an empty sync.target list—ALIASis a short handle but not unique across environments; seereference-resolution. Hidden targets are omitted unless you pass--all.inventory scopes— one row per subscription / account / project. Empty scopes is the diagnostic: the identity sees no administrative boundary, which is an auth or permissions problem, not a kuberoutectl one.
To show exactly what a sync changed, diff the ids:
kuberoutectl target list -o json > /tmp/before.json
kuberoutectl sync gcp
kuberoutectl target list -o json > /tmp/after.json
diff <(jq -r '.[].id' /tmp/before.json | sort) <(jq -r '.[].id' /tmp/after.json | sort)
MCP tools
Prefer the tool; drop to the CLI only where none exists, and say so.
| Step | MCP tool | Fallback |
|---|---|---|
| List what was found | list_targets | — |
| Confirm breadth | list_scopes, list_sources | — |
| Provider capabilities | list_providers | — |
| Freshness of the cache | get_status → synced_at | — |
| Refresh | sync_provider | full mode only; absent under --read-only |
| Prerequisites | no tool | kuberoutectl doctor |
| AWS profile generation | no tool | kuberoutectl setup aws-sso |
| Cache cleanup | withheld on purpose | target delete / target clear, CLI only |
Steps 1 and 3 are the CLI-only parts: doctor and setup aws-sso have no tool, so
an MCP-only client cannot complete first-time setup and should say so rather than
skipping the checks. Map: mcp-tools.
Fields
reading-output for field names, action_hint,
and the freshness rule; selectors for grammar. id
is the stable diff key — alias and name are not.
Safety
doctor,inventory *,target list,label listare Tier 1.syncis Tier 2 — safe to re-run, never discards user labels, collections, or visibility. It may trigger the provider CLI's login; let the user complete it.setup aws-ssowrites~/.aws/config, additive only: appends missing profiles, never modifies existing ones. Name the file and confirm first. It creates nothing in AWS itself.target deleteremoves one target from the cache; a later sync re-adds it. No prompt, so confirm first.target clearremoves all and prompts unless--yes— never pass--yeson the user's behalf.- Never ask the user to paste a token, key, or session value.
Common pitfalls
doctorall green, sync still empty. Not logged in —doctordoes not test sessions.- AWS shows one account when the user has many. Missing
~/.aws/configprofiles, step 3. The single most common cause of "it only found some of my clusters". - Profiles generated but still one scope. The SSO session expired between setup and sync. Re-login, re-sync.
- Empty
target listafter a successful sync. Checkinventory scopesfirst. No scopes = permissions boundary. Scopes but no targets = no clusters there, or the wrong region. - A re-created cluster loses its labels. Labels survive sync but attach to the
target
id; re-creating upstream mints a new id and the labels do not follow. Users mistake this for sync eating their labels. - Reporting
health: unknownas broken. It usually means never observed. target clearwith no resync. Leaves an empty list and no explanation.
References
https://ymedlop.github.io/kuberoutectl/ · provider setup guides
What ships with it: 5 files
24.1 KB alongside SKILL.md
references/
- mcp-tools.md7.8 KB
- reading-output.md5.6 KB
- reference-resolution.md2.3 KB
- safety-model.md3.7 KB
- selectors.md4.6 KB
Gives 0 of the 12 instructions most containers cloud skills give in ~1.8k tokens
Counted across 607 of the 705 authors here whose files we hold, read 2026-09-06
- Run as non-root userin 34 of 607, across 27 files
- Use multi-stage buildsin 29 of 607
- Set resource requests and limitsin 24 of 607, across 20 files
- Configure liveness and readiness probesin 18 of 607, across 14 files
- Use named volumes for persistent datain 14 of 607, across 9 files
- Pin base image versionsin 14 of 607
- Set up environment variablesin 14 of 607, across 10 files
- Pin provider versionsin 14 of 607
- Apply least privilege RBAC permissionsin 10 of 607, across 7 files
- Create a dockerignore filein 10 of 607
- Use remote state with lockingin 9 of 607
- Pin base images by digestin 9 of 607, across 8 files
Said here and by no other author read
- Run kuberoutectl doctor to check prerequisites
- Sync one provider at a time
- Check inventory scopes for breadth
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.