Runtime Provisioner logo

Runtime Provisioner

Community
nealbridges
runtime-provisioner

VulnHunter sandbox-depth decision procedure. For each confirmed finding, classify its proof requirements, choose the cheapest sufficient sandbox (Docker container by default), record the runtime on the finding, and ensure Medium+ findings execute against the real dependency — no mocks at the boundary without an explicit, severity-capping EXECUTED-MOCK record. Use during the vulnhunt scan's Phase 2b after a finding is confirmed.

Overview

Publishernealbridges
RepositoryVulnHunter
Skill nameruntime-provisioner
Stars
701
Forks
112
Bundled files
Instructions only
LicenseApache-2.0
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by nealbridges on GitHub. Read the source before you install it.

Installation

Install the Runtime Provisioner AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/nealbridges/VulnHunter/tree/main/skills/runtime-provisioner
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/nealbridges/VulnHunter.git /tmp/VulnHunter
mkdir -p .claude/skills
cp -r /tmp/VulnHunter/skills/runtime-provisioner .claude/skills/runtime-provisioner
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Runtime Provisioner in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Runtime Provisioner on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Runtime Provisioner is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Runtime Provisioner — the sandbox-depth decision

Purpose

Every VulnHunter finding makes two claims: a mechanism (this input reaches this sink) and an impact (an attacker gains something they did not have). The mechanism claim is cheap to assert; the impact claim is only proven by execution against the real dependency. This procedure decides, per finding, how much runtime the impact claim needs, executes it, and records the choice so the report can show what was done to prove it — not just that something was done.

Placement in the methodology

Phase 2b, per candidate — after confirmation (Phase 2b's adversarial verify), because the sandbox decision depends on what the finding needs to prove. The decision feeds poc-impact (Phase 3): the provisioned runtime is where the PoC executes and the impact is measured.

Step 1 — Classify proof requirements

For the candidate finding, enumerate what execution the impact claim needs:

  • Boundary type — what does the sink live behind? (query grammar, HTTP client, queue, filesystem, crypto primitive, auth service, parser, ORM…)
  • Attacker-reachable surface — which attacker-controlled inputs must flow to the sink for the impact to materialize?
  • Observable outcome — what does "the attacker wins" look like? (a row returned, a file read, a request issued, a state change, a payload executed). If you cannot state the outcome in one sentence, return to the finding and restate it as an outcome before choosing a runtime.

Step 2 — Choose the cheapest sufficient sandbox

Fixed preference order; never skip a cheaper option without written cause:

  1. Docker container (default — uniform, disposable, matches CI, immune to host drift). Record the image and version tag.
  2. In-process harness, only if the dependency cannot containerize cheaply (e.g. a licensed mainframe-backed service in the target's own infra). Record the harness description and the exact dependency version pinned.
  3. Static trace only when the boundary genuinely cannot be exercised. This MUST be justified in writing on the finding — it is never the default.

Step 3 — Execute at the chosen depth

Medium and above must execute in a container. No exceptions. A mock is allowed only when the real dependency is genuinely unavailable, and then the finding MUST record EXECUTED-MOCK and its severity ceiling is Low until a real-boundary run is done.

Step 4 — Record the runtime on the finding

Every finding MUST carry a Runtime line in one of these forms:

  • Runtime: docker:<image>@<tag>
  • Runtime: in-process:<description>
  • Runtime: static — <justification>
  • Runtime: EXECUTED-MOCK — <what was mocked and why>; severity ceiling Low

A finding without a Runtime line is incomplete and MUST NOT be reported.

Step 5 — Cross-check before hand-off

Before handing the finding to poc-impact, verify:

  • the Runtime line is present and well-formed;
  • the recorded runtime actually executed the boundary (not a proxy for it);
  • for Medium+: the run was in a container, or EXECUTED-MOCK is recorded with the severity ceiling noted.

The blunt sentence

A mechanism-proving assertion is not an impact measurement. "The query string contains OR WorkflowId IS NOT NULL" is the mechanism. The finding is "a victim tenant's row was returned to the attacker's listing." If your test asserts the first, it has not proven the second.

Env contract

VariableRequiredPurpose
VULNHUNT_SKILLS_DIRnoOverride the skills root this skill is loaded from.
VULNHUNT_HOST_CMDnoCommand prefix for harness session invocation, when the host harness must be driven explicitly.
VULNHUNT_DIRnoFindings directory, when operating on a prepared scan workspace.

Frequently asked questions

What does the Runtime Provisioner AI skill do?

VulnHunter sandbox-depth decision procedure. For each confirmed finding, classify its proof requirements, choose the cheapest sufficient sandbox (Docker container by default), record the runtime on the finding, and ensure Medium+ findings execute against the real dependency — no mocks at the boundary without an explicit, severity-capping EXECUTED-MOCK record. Use during the vulnhunt scan's Phase 2b after a finding is confirmed.

Why use Runtime Provisioner on TypingMind?

Because you install it once and use it with any model. Runtime Provisioner is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Runtime Provisioner in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/nealbridges/VulnHunter/tree/main/skills/runtime-provisioner. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Runtime Provisioner?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Runtime Provisioner?

As many as you like. As long as a model supports skills, you can use Runtime Provisioner with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Runtime Provisioner AI skill free?

Yes. It is published on GitHub by nealbridges under the Apache-2.0 license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇