Agent skill

Add Discovery Type

by runwhen-contrib in 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.

Apache-2.0Auto-check passedDevOps & Cloud

Install Add Discovery Type

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

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

GitHub CLI
$ gh skill install runwhen-contrib/runwhen-local add-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/add-discovery-type .claude/skills/add-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
add-discovery-type
GitHub stars
163
Token cost
~2k tokens
SKILL.md length
573 words
Files
1
Skills in repo
3
Repo updated
First seen
Licence
Apache-2.0

At a glance

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.

  • Works in 2 steps: Pipeline wiring → Verify
  • Asked to add a new platform
  • SKILL.md covers Architecture (what you are…, Core principles and Workflow
  • Calls python

What it does

Add Discovery Type is an agent skill from 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. Use when asked to add a new platform, new cloud provider, or new top-level discovery source. Covers the parity registry, indexer modules, platform handler, tag/hierarchy templates, pipeline wiring, tests, and docs.

Its SKILL.md is about 2k 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 Meeting notes and agendas. It works with Google Cloud, Kubernetes and Microsoft Azure. 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 add a new platform
  • New cloud provider
  • New top-level discovery source

Example prompts

  • “/add-discovery-type”

Requirements

  • Python 3

Workflow steps

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

  1. Pipeline wiring
  2. Verify

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

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

  • Network

    No URLs in SKILL.md.

    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

Add Discovery Type loads about 2k tokens when it runs. Until then it costs about 101 tokens; SKILL.md has 573 words of instructions outside code blocks.

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

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). 573 words, ~1,970 tokens.

Download SKILL.mdSave it as .claude/skills/add-discovery-type/SKILL.md (or your agent's skills folder).
name
add-discovery-type
description
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. Use when asked to add a new platform, new cloud provider, or new top-level discovery source. Covers the parity registry, indexer modules, platform handler, tag/hierarchy templates, pipeline wiring, tests, and docs.

Add a new discovery type

Use this to add a new platform (a new cloud provider or discovery source). To add a single resource type to an existing indexer, use the extend-discovery-type skill instead.

gcpapi is the most recent end-to-end example — read docs/architecture/gcp-indexer-internals.md first; it documents every piece you are about to replicate. azureapi is the second reference. The mandate is to build native SDK indexers so CloudQuery can eventually be removed entirely.

Architecture (what you are building)

scripts/<platform>/
├── <platform>_cloudquery_tables.txt        # parity source (CloudQuery hub table list)
├── <platform>_resource_type_overrides.yaml # hand-curated overrides
└── sync_<platform>_resource_type_registry.py  # registry generator

src/indexers/
├── <platform>_resource_type_registry.yaml  # GENERATED catalog (never hand-edit)
├── <platform>_resource_type_registry.py     # read-only loader
├── <platform>_common.py                      # credentials + scope resolution + tag filters
├── <platform>api_normalizers.py              # raw SDK/API -> CloudQuery-shaped dict
├── <platform>api_resource_types.py           # generic collector + typed collectors + specs
├── <platform>api.py                          # orchestration loop
└── test_<platform>*.py                       # unit tests

src/enrichers/<platform>.py                   # PlatformHandler.parse_resource_data
src/templates/<platform>-tags.yaml            # tag template
src/templates/<platform>-hierarchy.yaml       # hierarchy template
docs/architecture/<platform>-indexer-internals.md
docs/authoring/indexed-resources/<platform>.md

Core principles

  1. Parity first. Seed the registry from the upstream CloudQuery plugin's table list (use the CloudQuery hub, not the old in-container plugin version). Every CloudQuery table must resolve via the registry by canonical name/alias.
  2. CloudQuery table name is the public contract. Generation rules reference it as resource_type. The native indexer normalizes payloads into the same shape so rules don't change when the backend flips.
  3. Generic collector is the workhorse, typed collectors are enrichment. Pick the broadest first-party API for the generic pass (Azure resources.list(), GCP Cloud Asset Inventory, AWS Cloud Control API).
  4. Selective, generation-rule-driven discovery. Only collect types referenced by loaded generation rules (plus the mandatory anchor), and respect Level-of-Detail scoping.
  5. Never hand-edit the generated registry YAML.

Workflow

- [ ] 1. Obtain upstream CloudQuery table list -> scripts/<p>/<p>_cloudquery_tables.txt
- [ ] 2. Author the overrides YAML (type remaps, aliases, typed flags, anchor, nulls)
- [ ] 3. Write the sync script (heuristic table-name -> native-type mapping)
- [ ] 4. Generate the registry YAML + write the read-only loader
- [ ] 5. Add SDK deps to pyproject + regenerate lock in python:3.14-slim
- [ ] 6. Write <p>_common.py (credentials, scope/LOD, tag filters)
- [ ] 7. Write <p>api_normalizers.py (raw -> CloudQuery-shaped dict)
- [ ] 8. Write <p>api_resource_types.py (generic collector + typed + specs)
- [ ] 9. Write <p>api.py orchestrator (phases: bootstrap -> anchors -> typed -> generic)
- [ ] 10. Add/confirm the enricher PlatformHandler.parse_resource_data
- [ ] 11. Add src/templates/<p>-tags.yaml + <p>-hierarchy.yaml
- [ ] 12. Wire pipeline: component.py, run.sh, run.py setting, cloudquery skip
- [ ] 13. Tests: registry + normalizers + selective
- [ ] 14. Docs: indexer-internals + indexed-resources + READMEs
- [ ] 15. Run the full indexer test suite
1–4. Registry pipeline

Mirror scripts/gcp/:

  • Table list: scrape the CloudQuery hub plugin table reference into a .txt with a header noting source + version. This is the parity source.
  • Overrides: a YAML with native-type remaps, aliases, typed_collectors, the mandatory anchor type (e.g. GCP gcp_projects, Azure azure_resources_resource_groups), and null native types for tables with no API equivalent.
  • Sync script: heuristic <plugin>_<service>_<entity_plural> -> <host>/<EntitySingularPascal>, plus override application. Copy sync_gcp_resource_type_registry.py and adapt the heuristic.
  • Loader (<platform>_resource_type_registry.py): copy the GCP loader; provide load_registry, find, and a find_by_<native>_type lookup.
Show full SKILL.md (289 more words)Show less
6–9. Indexer modules
  • <platform>_common.py: resolve credentials (K8s secret, inline key, ADC / env) and the account/project/subscription scope; provide has_included_tags / has_excluded_tags label filters.
  • <platform>api_normalizers.py: convert raw SDK/API objects to the CloudQuery-shaped dict the handler expects; hoist the full payload, map cloud labels/tags to tags, normalize names/IDs/regions. Include a make_<anchor>_resource_data helper for the synthesized anchor.
  • <platform>api_resource_types.py: a *ResourceTypeSpec dataclass, the generic collector over the broad API, typed collectors (lazy-import SDK clients), _TYPED_COLLECTORS keyed by canonical table name, and find_spec / find_spec_by_<native>_type.
  • <platform>api.py index(ctx) phases:
    1. Bootstrap: check <platform>IndexerBackend, resolve creds + scope, mirror into the enricher, resolve LOD (skip scopes with LOD none).
    2. Phase 0: emit the synthesized anchor resource first so children link to it at parse time.
    3. Phase 1: typed collectors for accessed types that have one.
    4. Phase 2: one generic pass per scope, filtered to accessed native types not already covered by a typed collector. Every resource flows: normalize -> tag filter -> handler.parse_resource_data -> writer.add_resource.
10–11. Handler + templates
  • Confirm/extend src/enrichers/<platform>.py parse_resource_data consumes the normalized dict and links children to the anchor.
  • Add src/templates/<platform>-tags.yaml and -hierarchy.yaml following the template-tags-hierarchy rule exactly (hierarchy ends with resource_name; emit platform, resource_type, resource_name, child_resource; specificity-ordered resource_name; dedup loop).
12. Pipeline wiring
  • src/component.py: add "<platform>api" to the INDEXER stage.
  • src/run.sh: include <platform>api in COMPONENTS.
  • src/run.py: coalesce <platform>IndexerBackend from workspaceInfo or WB_<PLATFORM>_INDEXER_BACKEND into request data.
  • src/indexers/cloudquery.py: skip this platform when the native backend is selected (mutual exclusion).
13–14. Tests + docs (required)
  • Tests mirroring test_gcp*.py: registry loader contract, normalizer + handler round-trip, selective discovery + generic-pass filter dispatch.
  • docs/architecture/<platform>-indexer-internals.md (link it from docs/architecture/README.md).
  • docs/authoring/indexed-resources/<platform>.md documenting both backends, the matchable types, and the stable generation-rule contract.
  • Update top-level README.md / docs indexes if the platform is newly listed.
15. Verify
bash
cd src && python -m unittest discover -s indexers -p 'test_*.py'
python scripts/<platform>/sync_<platform>_resource_type_registry.py --dry-run

The sync dry-run must report 0 drift (registry matches overrides + table list).

© 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/add-discovery-type of runwhen-contrib/runwhen-local.

Open the folder on GitHubat commit ecf77b7

Compare with similar skills

Add 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.

Add Discovery Type compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Add Discovery Type this skillrunwhen-contrib/runwhen-local163—~2kAutomated 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
Kcli Configurationkarmab/kcli653—~1.5kAutomated safety check: WarnApache-2.0
Multi Cloud ArchitectureHermeticOrmus/LibreUIUX-Claude-Code11211 repos~1.2kAutomated safety check: PassMIT

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
  • Guides kcli configuration and provider setup. An agent skill from karmab/kcli.

    653 GitHub stars~1.5k tokensUpdated yesterday
    DevOps & CloudAuto-check: warnings
  • Multi Cloud Architecture

    HermeticOrmus/LibreUIUX-Claude-Code

    Design multi-cloud architectures using a decision framework to select and integrate services across AWS, Azure, and GCP.

    112 GitHub starsUsed in 11 repos~1.2k tokens
    DevOps & CloudAuto-check passed
  • Staged Discovery

    mondoohq/mql

    Add staged discovery support to a provider. An agent skill from mondoohq/mql.

    411 GitHub stars~2.9k tokensUpdated today
    DevOps & CloudAuto-check passed

More from runwhen-contrib/runwhen-local

  • Extend Discovery Type

    runwhen-contrib/runwhen-local

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

    163 GitHub stars~1.7k 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

Questions about Add Discovery Type

What does Add Discovery Type do?

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. Add Discovery Type is an agent skill from 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.

When should I use Add Discovery Type?

Add Discovery Type fits situations like: asked to add a new platform; new cloud provider; new top-level discovery source.

How do I install Add Discovery Type in Claude Code?

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

How do I install Add Discovery Type in Codex?

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

Can I use Add 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 add-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/add-discovery-type, .gemini/skills/add-discovery-type, .github/skills/add-discovery-type and .opencode/skills/add-discovery-type in your project.

What does Add Discovery Type need to run?

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

Does Add Discovery Type access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Add 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 Add Discovery Type use?

Add 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 Add Discovery Type use?

About 2k tokens (SKILL.md is roughly 7.9k 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 Add Discovery Type?

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

Who maintains Add 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.