Agent skill

Extend Discovery Type

by runwhen-contrib in runwhen-contrib/runwhen-local

Add or enrich a resource type in an existing RunWhen Local discovery indexer (Azure azureapi, GCP gcpapi, AWS, or Kubernetes).

Apache-2.0Auto-check passedDevOps & Cloud

Install Extend Discovery Type

skills CLI
$ npx skills add runwhen-contrib/runwhen-local --skill extend-discovery-type -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install runwhen-contrib/runwhen-local extend-discovery-type --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/runwhen-contrib/runwhen-local.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.cursor/skills/extend-discovery-type .claude/skills/extend-discovery-type && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
extend-discovery-type
GitHub stars
163
Token cost
~1.7k tokens
SKILL.md length
623 words
Files
1
Skills in repo
3
Repo updated
First seen
Licence
Apache-2.0

At a glance

Add or enrich a resource type in an existing RunWhen Local discovery indexer (Azure azureapi, GCP gcpapi, AWS, or Kubernetes).

  • Works in 10 steps: Identify target + table name → Edit the overrides YAML → Regenerate the registry → …
  • Asked to support a new cloud resource type
  • SKILL.md covers Golden rules and Workflow
  • Calls python, docker and bash

What it does

Extend Discovery Type is an agent skill from runwhen-contrib/runwhen-local. Add or enrich a resource type in an existing RunWhen Local discovery indexer (Azure azureapi, GCP gcpapi, AWS, or Kubernetes). Use when asked to support a new cloud resource type, add a typed SDK collector, fix a resource type mapping, or extend what an indexer discovers. Enforces the registry sync, collector registration, normalizer, tests, docs, and generation-rule contract.

Its SKILL.md is about 1.7k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in DevOps & Cloud, covering Container orchestration. It works with Kubernetes, Google Cloud, Microsoft Azure and Amazon Web Services. The repository describes itself as: RunWhen Local provides a tailored troubleshooting cheat sheet for Kubernetes environments. The licence is Apache-2.0.

When your agent uses it

  • Asked to support a new cloud resource type
  • Add a typed SDK collector
  • Fix a resource type mapping
  • Extend what an indexer discovers

Example prompts

  • “/extend-discovery-type”

Requirements

  • Python 3
  • Docker

Workflow steps

10 steps, taken from the step headings in SKILL.md.

  1. Identify target + table name
  2. Edit the overrides YAML
  3. Regenerate the registry
  4. Implement a typed collector (only for rich-payload types)
  5. Extend the normalizer if the shape is new
  6. Dependencies
  7. Tests (required)
  8. Docs (required)
  9. Generation-rule contract (required)
  10. Run tests

What it can do on your machine

Read from SKILL.md and the folder at commit ecf77b7. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • python
    • docker
    • bash
    • poetry

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use docker, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Extend Discovery Type loads about 1.7k tokens when it runs. Until then it costs about 100 tokens; SKILL.md has 623 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~100
When it runs · the whole SKILL.md, loaded when a task matches
~1.7k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from runwhen-contrib/runwhen-local at commit ecf77b7, republished under its Apache-2.0 licence (© runwhen-contrib). 623 words, ~1,712 tokens.

Download SKILL.mdSave it as .claude/skills/extend-discovery-type/SKILL.md (or your agent's skills folder).
name
extend-discovery-type
description
Add or enrich a resource type in an existing RunWhen Local discovery indexer (Azure azureapi, GCP gcpapi, AWS, or Kubernetes). Use when asked to support a new cloud resource type, add a typed SDK collector, fix a resource type mapping, or extend what an indexer discovers. Enforces the registry sync, collector registration, normalizer, tests, docs, and generation-rule contract.

Extend a discovery type

Use this when an existing indexer should discover a new resource type or return richer data for one it already covers. To stand up a brand-new platform, use the add-discovery-type skill instead.

The native SDK indexers (azureapi, gcpapi, future awsapi) all share the same shape: a generated registry maps CloudQuery table names to native cloud API types, a generic collector provides broad parity, and a small set of typed collectors provide rich payloads for high-value types. Read the canonical worked examples before editing:

  • Azure: docs/architecture/azure-indexer-internals.md
  • GCP: docs/architecture/gcp-indexer-internals.md

Golden rules

  1. Never hand-edit a generated registry YAML (src/indexers/*_resource_type_registry.yaml). Edit the overrides file and re-run the sync script.
  2. Maintain CloudQuery parity. The CloudQuery table name is the public resource_type contract used in generation rules. New types must resolve by their canonical CloudQuery table name (or a registered alias).
  3. Done means done: code + registry + tests + docs + generation-rule verification. A change that doesn't update docs is not complete.

Workflow

Copy this checklist and track it:

- [ ] 1. Identify the target indexer + canonical CloudQuery table name
- [ ] 2. Edit the overrides YAML (type mapping / alias / typed_collector flag)
- [ ] 3. Regenerate the registry via the sync script (never hand-edit the YAML)
- [ ] 4. (typed only) Implement collector + register in _TYPED_COLLECTORS
- [ ] 5. (if needed) Extend the normalizer for the new payload shape
- [ ] 6. Add/extend the SDK dependency (pyproject + locked) if required
- [ ] 7. Update tests (registry + normalizer + selective)
- [ ] 8. Update docs (indexed-resources + indexer internals)
- [ ] 9. Verify the generation-rule contract still holds
- [ ] 10. Run the unit tests
1. Identify target + table name

Determine which backend (azureapi / gcpapi / aws / Kubernetes) owns the type and the canonical CloudQuery table name (e.g. gcp_compute_instances, azure_compute_disks). This name is the registry key and the generation-rule resource_type.

2. Edit the overrides YAML

Per platform:

PlatformOverrides file
Azurescripts/azure/azure_resource_type_overrides.yaml
GCPscripts/gcp/gcp_resource_type_overrides.yaml

Edit only what the heuristic gets wrong:

  • Wrong native type: add an entry under arm_type_overrides (Azure) or cai_type_overrides (GCP). Set it to null if the table has no native API equivalent (so the generic pass skips it).
  • Alias: add under aliases so older/alternate names still resolve.
  • Typed collector: append the table name to typed_collectors.
  • Service host remap (GCP): add under service_api_hosts.
3. Regenerate the registry
bash
# GCP (round-trips existing table list, picks up override changes):
python scripts/gcp/sync_gcp_resource_type_registry.py

# Azure:
python scripts/azure/sync_azure_resource_type_registry.py

The script reports added / removed / changed. Inspect the diff in the generated YAML; it should reflect only your intended change.

4. Implement a typed collector (only for rich-payload types)

Skip this for types that are fine coming from the generic pass (Azure resources.list() envelope, GCP Cloud Asset Inventory full payload).

GCP (src/indexers/gcpapi_resource_types.py):

python
def _collect_<type>(credentials, project_id):
    from google.cloud import <client_module>  # lazy import
    client = <Client>(credentials=credentials)
    return list(client.list_<entity>(project=project_id))

Register it keyed by canonical table name:

python
_TYPED_COLLECTORS: dict[str, GcpCollector] = {
    "gcp_compute_instances": _collect_compute_instances,
    "gcp_<service>_<entity>": _collect_<type>,
}

Azure (src/indexers/azureapi_resource_types.py): implement both _collect_<type>_all(credential, subscription_id) and _collect_<type>_in_rg(credential, subscription_id, rg_name), then register in _TYPED_COLLECTORS keyed by canonical table name (pass None for the second slot only if no per-RG SDK call exists).

A typed type is automatically excluded from the generic pass, so the resource is written exactly once.

Show full SKILL.md (235 more words)Show less
5. Extend the normalizer if the shape is new

Normalizers (*_normalizers.py) convert raw SDK/API objects into the CloudQuery-shaped dict the platform handler expects. Reuse the existing normalize_* helpers when possible. Only add code for genuinely new fields, and always map cloud labels/tags into the canonical tags field.

6. Dependencies

If the typed collector needs an SDK that isn't already a dependency, add it to src/pyproject.toml and regenerate the lock inside the pinned Python container:

bash
docker run --rm -v "$PWD/src:/app" -w /app python:3.14-slim \
  bash -lc "pip install poetry && poetry lock"

Lazy-import SDK clients inside the collector so importing the indexer module never hard-requires the SDK.

7. Tests (required)
  • test_<platform>_resource_type_registry.py: assert the new type resolves and, if typed, appears in the typed-collector set.
  • test_<platform>api_normalizers.py: a round-trip through the platform handler for the new payload shape.
  • test_<platform>api_selective.py: if dispatch/selection logic changed.
8. Docs (required)
  • docs/authoring/indexed-resources/<platform>.md: list the new matchable type and note whether it's typed (rich) or generic.
  • The indexer internals doc if collector counts or behavior changed.
9. Generation-rule contract (required)

Generation rules reference the type by its CloudQuery table name as resource_type. Confirm:

  • The new type resolves via the registry's find/find_spec by that exact table name (and any aliases you added).
  • The normalized dict carries the qualifier fields the tag/hierarchy templates expect (resource_name, scope qualifiers, tags). See the template-tags-hierarchy rule for the tag/hierarchy contract.

If a contrib generation rule should start matching the new type, update or note it; do not silently change matching behavior for existing rules.

10. Run tests
bash
cd src && python -m unittest discover -s indexers -p 'test_*.py'

© runwhen-contrib, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .cursor/skills/extend-discovery-type of runwhen-contrib/runwhen-local.

Open the folder on GitHubat commit ecf77b7

Compare with similar skills

Extend Discovery Type next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Extend Discovery Type compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Extend Discovery Type this skillrunwhen-contrib/runwhen-local163—~1.7kAutomated safety check: PassApache-2.0
Provider Bug Reviewmondoohq/mql411—~2.9kAutomated safety check: PassCustom licence
Kcli Cluster Deploymentkarmab/kcli653—~1.5kAutomated safety check: PassApache-2.0
Kclikarmab/kcli653—~2.6kAutomated safety check: WarnApache-2.0
Azure Arcvinayaklatthe/microsoft-security-skills175—~1.9kAutomated safety check: PassMIT
Provider API Call Dedupmondoohq/mql411—~7.7kAutomated safety check: PassCustom licence

Similar skills

  • Deep static code review of an mql provider for logic errors, nil-handling bugs, pagination truncation, caching/id collisions, and other defects that silently give users wrong data.

    411 GitHub stars~2.9k tokensUpdated today
    DevOps & CloudAuto-check passed
  • Guides deployment and management of Kubernetes clusters with kcli.

    653 GitHub stars~1.5k tokensUpdated yesterday
    DevOps & CloudAuto-check passed
  • Kcli

    karmab/kcli

    Comprehensive guide for kcli usage. An agent skill from karmab/kcli.

    653 GitHub stars~2.6k tokensUpdated yesterday
    DevOps & CloudAuto-check: warnings
  • Azure Arc

    vinayaklatthe/microsoft-security-skills

    Guidance for Azure Arc — projecting on-premises, multicloud (AWS/GCP), and edge servers, Kubernetes, and data services into Azure Resource Manager for unified governance, security, and management.

    175 GitHub stars~1.9k tokensUpdated 3 mo ago
    DevOps & CloudAuto-check passed
  • A skill your agent uses when a provider scan is slow, times out, or trips rate limits (429, throttling, Retry-After), when the same request URL appears many times in a debug log, when an asset's…

    411 GitHub stars~7.7k tokensUpdated today
    DevOps & CloudAuto-check passed
  • Cloud Devops

    davila7/claude-code-templates

    Cloud infrastructure and DevOps workflow covering AWS, Azure, GCP, Kubernetes, Terraform, CI/CD, monitoring, and cloud-native development.

    32k GitHub starsUsed in 4 repos~1.4k tokens
    DevOps & CloudAuto-check passed

More from runwhen-contrib/runwhen-local

  • Add Discovery Type

    runwhen-contrib/runwhen-local

    Stand up a brand-new RunWhen Local discovery platform / indexer from scratch (a new cloud or resource source) following the native SDK pattern used by azureapi and gcpapi.

    163 GitHub stars~2k tokensUpdated yesterday
    Auto-check passed
  • Author Generation Rules

    runwhen-contrib/runwhen-local

    Write generation rules using bundled references in this repo (airgap).

    163 GitHub stars~185 tokensUpdated yesterday
    Auto-check passed

Categories

Questions about Extend Discovery Type

What does Extend Discovery Type do?

Add or enrich a resource type in an existing RunWhen Local discovery indexer (Azure azureapi, GCP gcpapi, AWS, or Kubernetes). Extend Discovery Type is an agent skill from runwhen-contrib/runwhen-local. Add or enrich a resource type in an existing RunWhen Local discovery indexer (Azure azureapi, GCP gcpapi, AWS, or Kubernetes).

When should I use Extend Discovery Type?

Extend Discovery Type fits situations like: asked to support a new cloud resource type; add a typed SDK collector; fix a resource type mapping; extend what an indexer discovers.

How do I install Extend Discovery Type in Claude Code?

Run `npx skills add runwhen-contrib/runwhen-local --skill extend-discovery-type -a claude-code`. Or copy the skill folder (.cursor/skills/extend-discovery-type in runwhen-contrib/runwhen-local) into .claude/skills/extend-discovery-type in your project. Claude Code loads it when a task matches its description.

How do I install Extend Discovery Type in Codex?

Run `npx skills add runwhen-contrib/runwhen-local --skill extend-discovery-type -a codex`. Or copy the skill folder (.cursor/skills/extend-discovery-type in runwhen-contrib/runwhen-local) into .agents/skills/extend-discovery-type in your project. Codex loads it when a task matches its description.

Can I use Extend Discovery Type in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add runwhen-contrib/runwhen-local --skill extend-discovery-type -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/extend-discovery-type, .gemini/skills/extend-discovery-type, .github/skills/extend-discovery-type and .opencode/skills/extend-discovery-type in your project.

What does Extend Discovery Type need to run?

Going by SKILL.md and its folder, Extend Discovery Type needs the command-line tools its instructions call (python, docker, bash and poetry). Our summary lists: Python 3; Docker.

Does Extend Discovery Type access the network?

SKILL.md contains no URLs. Its commands use docker, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Extend Discovery Type safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Extend Discovery Type use?

Extend Discovery Type is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Extend Discovery Type use?

About 1.7k tokens (SKILL.md is roughly 6.8k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Extend Discovery Type?

Skills that share tags, products or a category with Extend Discovery Type: Provider Bug Review (mondoohq/mql, 411 stars), Kcli Cluster Deployment (karmab/kcli, 653 stars), Kcli (karmab/kcli, 653 stars) and Azure Arc (vinayaklatthe/microsoft-security-skills, 175 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Extend Discovery Type?

runwhen-contrib (a GitHub organization) maintains it in runwhen-contrib/runwhen-local, which has 163 GitHub stars. The repository holds 3 skills in this directory. The repository was last updated on October 7, 2026.

Source: runwhen-contrib/runwhen-local on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.