Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use when a SPEC, INNOVATE, or VALIDATE (Layer 2) approach hinges on an unverified runtime/library/external mechanism: run a probe from the 8-family taxonomy and produce a VIABLE/NOT-VIABLE/INCONCLUSIVE VERDICT artifact.
.claude/skills/withkynam-vc-feasibility-test/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-17 | ✗→✓ | ▲ Improved | 58% | 0% |
| case-01 | ✗→✓ | ▲ Improved | 1575% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 30% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 125% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 70% | 0% |
> Output style: Follow process/development-protocols/communication-standards.md — answer-first, plain language, no unexplained jargon, TL;DR on long responses.
One-shot empirical probe skill. Used when SPEC or INNOVATE encounters an approach hinging on an unverified external/runtime/library mechanism — the question is "does this mechanism actually work the way the design assumes?", asked before the decision locks.
These two skills are complementary and must not be confused:
vc-feasibility-test (this skill) = PRE-decision. "Does the mechanism work atall?" Run before SPEC/INNOVATE locks an approach, when the answer is unknown. Output: a one-shot VERDICT artifact.
vc-test-coverage-plan = POST-plan. "How do I cover this blast radius acrossthe 4 test tiers?" Run after a plan exists, when the design is already chosen. Output: a per-area tier table.
If the approach is already decided and you are assigning test tiers → use vc-test-coverage-plan. If you cannot decide because a mechanism is unverified → use this skill first.
VC-FEASIBILITY-PROBE-NEEDEDAlways executed by vc-debugger (via the VC-FEASIBILITY-PROBE-NEEDED signal routing in orchestration.md). SPEC, INNOVATE, and VALIDATE Layer 2 agents do not run probes themselves.
Every probe belongs to one of these 8 families. Name the chosen family in the VERDICT. Each family has a default cost/safety class (see next section) — the probe inherits it.
| # | Family | What it probes | Typical method | Default cost class | |---|---|---|---|---| | 1 | Local process / Node script | pure library/runtime behavior in isolation | run a .mjs/Bun script, regex/parse check, call the lib fn directly | cheap-local | | 2 | Unit/integration test harness | behavior under the project's own test runner | pnpm --filter … test (Vitest) or bun test on a scratch case | cheap-local | | 3 | tRPC / Prisma / DB query | route shape, query behavior, index/constraint semantics | hit a tRPC route or run a Prisma/raw-SQL query against a test DB | needs-container (only if it needs the live app DB) / else cheap-local | | 4 | External API shape capture | real response shape/behavior of a 3rd-party API | one live request to OpenRouter / Stripe / Composio / Clerk / Bright Data | needs-live-provider | | 5 | Container exec / internal-port curl | in-container service behavior, proxy injection, file-server, supervisord | docker exec … curl http://localhost:{port} on a disposable container | needs-container | | 6 | Browser / CDP capture | anti-detect quirks, CDP events, SPA nav, popup behavior | Playwright/CDP client, page.on(...), snapshot | needs-browser | | 7 | WS / SSE handshake & timing | gateway WS framing, SSE delivery/reconnect, JSONL shape | raw ws/EventSource client + frame/timing capture | needs-container (if against in-container service) / else cheap-local | | 8 | Cloudflare worker runtime | KV staleness, step-replay/idempotency, edge JWT verify | wrangler dev + curl, deploy a throwaway worker | needs-cf |
If none of the 8 fit, the question is probably not a feasibility probe — reconsider whether vc-research-agent (unknown context) or vc-test-coverage-plan (known design) is the right tool instead.
Every VERDICT declares one cost class. The class governs whether the probe may run unattended or needs explicit opt-in. A probe that cannot be run within its safety gate produces an INCONCLUSIVE verdict — it is never silently skipped or faked.
| Cost class | Safety gate | If gate not met | |---|---|---| | cheap-local | none — run freely (local script, test harness, parse check) | n/a | | needs-container | use a disposable container only. NEVER docker exec the shared dev container (app-*) or shared Postgres. Disposable live-E2E containers need the disposable-cleanup env gate enabled. | verdict INCONCLUSIVE, note "no disposable container available" | | needs-live-provider | requires explicit double opt-in from the user before any billed/live 3rd-party call (OpenRouter, Stripe, Composio, Bright Data, Clerk). Default local mode is BYOK Mistral. | verdict INCONCLUSIVE, note "live-provider opt-in not granted" | | needs-browser | a browser/CDP session must be available; never drive a shared user session | verdict INCONCLUSIVE, note "no browser session available" | | needs-cf | a wrangler dev/throwaway-worker sandbox; never touch a deployed production worker | verdict INCONCLUSIVE, note "no CF sandbox available" |
The emitted VC-FEASIBILITY-PROBE-NEEDED signal SHOULD carry the anticipated cost class so the orchestrator can resolve the opt-in gate before dispatching vc-debugger (see orchestration.md §VC-FEASIBILITY-PROBE-NEEDED Signal Routing).
VC-FEASIBILITY-PROBE-NEEDED signalINCONCLUSIVE verdict with the gate-not-met reason and stop. Do NOT escalate to a higher-cost probe or run against a shared resource.
VIABLE | NOT-VIABLE | INCONCLUSIVEFilename: {slug}_FEASIBILITY_{dd-mm-yy}.md Location: same active task folder as the SPEC/plan that triggered the probe
Required frontmatter fields (MUST be present — validated by validate-feasibility-verdict.mjs):
yaml--- slug: [task-slug] date: YYYY-MM-DD verdict: VIABLE | NOT-VIABLE | INCONCLUSIVE originating-phase: spec | innovate | pvl ---
The originating-phase: field is REQUIRED. Valid values:
spec — probe triggered by vc-spec-agent (SP3])innovate — probe triggered by vc-innovate-agent (I2.5])pvl — probe triggered by vc-validate-agent Layer 2 (V2-PROBE])Required sections (MUST be present — validated by validate-feasibility-verdict.mjs):
One-sentence statement of what is being tested.
The specific external, runtime, or library behavior being probed.
One of the 8 families above (e.g. 5 — Container exec / internal-port curl).
One of: cheap-local | needs-container | needs-live-provider | needs-browser | needs-cf. State whether the safety gate was met.
The exact command(s) or steps run to test the hypothesis.
The raw output from the probe (trimmed to relevant lines). For an INCONCLUSIVE gate-not-met verdict, state explicitly that the probe was not run and why.
One of: VIABLE | NOT-VIABLE | INCONCLUSIVE
The "action consequence" of the probe, split into three explicit parts:
treated as an open risk (for INCONCLUSIVE, this is the main content).
After writing the VERDICT artifact, emit:
VC-FEASIBILITY-VERDICT-READY: [verdict keyword] — [full path to VERDICT file]Example:
VC-FEASIBILITY-VERDICT-READY: NOT-VIABLE — process/features/model-selector/active/model-selector_10-06-26/model-selector_FEASIBILITY_10-06-26.mdThe orchestrator reads the VERDICT artifact and extracts a Prior Feasibility: summary. Format passed to the re-spawned agent:
Prior Feasibility: [hypothesis] — verdict: [VIABLE|NOT-VIABLE|INCONCLUSIVE] — licenses: [one line] — forbids: [one line] — uncertain: [one line]Example:
Prior Feasibility: Does the gateway forward params.provider.sort? — verdict: NOT-VIABLE — licenses: nothing new — forbids: any approach depending on params.provider.sort being forwarded (the layer strips it) — uncertain: whether a different forwarding field survivesThe re-spawned SPEC, INNOVATE, or VALIDATE agent reads this block and uses the verdict to lock or reject the approach. When originating-phase: pvl, the re-spawned vc-validate-agent resumes from V1 and records resolved probes in a ## Feasibility Probes Resolved subsection of the validate-contract (omitted when no probe ran).
Other measured skills in the registry, with their headline benchmark lift.