How to run falsegreen: CLI, API token, and the other ways

July 2, 2026 ยท View on GitHub

There is more than one way to run this skill. They share the same J1-J6 protocol and the same three modes (A analysis, B authoring, C fix); they differ only in what drives the model and where the prompt comes from. This page is the map.

1. CLI

The falsegreen-skill command (bin/falsegreen-llm.js) sends the test file (or the spec, for generate) to a provider with the protocol as system prompt and prints the result. Zero npm dependencies, Node >= 18.

npx falsegreen-skill analyze tests/test_payment.py            # Mode A
npx falsegreen-skill generate spec.yaml --lang python         # Mode B
npx falsegreen-skill fix tests/test_x.py --case C2b --line 14 --sut src/x.py  # Mode C

Full flag reference: cli.md.

2. Via API token (which provider you point the CLI at)

The CLI is provider-agnostic. "Via token" means: set the provider's key in the environment and point the CLI at it. This is the same three commands above - the only thing that changes is --provider, --base-url, and the key.

PathKey env varHow
AnthropicANTHROPIC_API_KEYdefault provider, nothing else needed
OpenAIOPENAI_API_KEY--provider openai
Google GeminiGEMINI_API_KEY--provider gemini
Any OpenAI-compatible hostFALSEGREEN_API_KEY--provider openai-compatible --base-url <root> --model <id>

The OpenAI-compatible path covers Groq, Cerebras, OpenRouter, NVIDIA NIM, DeepInfra, Mistral, DeepSeek, Fireworks, Alibaba Qwen, Hugging Face, Cohere, and Ollama (local or cloud). Base URLs and example models for each are in the provider table in cli.md.

One caveat worth stating up front. The system prompt carries the full catalog (llm.md + reference.md), around 33k tokens. Providers with a small per-minute token cap on their free tier reject the request outright. This is not a bug in the CLI; it is the size of the protocol. Pick a host whose tier accepts a ~35k-token request, or run Ollama locally where there is no cap.

3. The other ways

Editor-host skill (Claude Code, Cursor, Gemini, Codex)

Installed as a plugin, the skill runs inside the assistant with no CLI and no key of yours - it uses the host's model. This is the only path that runs interactive Mode B: it asks you for the pyramid level, the language, and the oracle, then writes and self-checks the test. The CLI cannot ask questions, so it takes those answers from a spec file instead.

/plugin marketplace add vinicq/falsegreen-skill
/plugin install falsegreen-skill@falsegreen

Then attach a test file and ask for analysis, or ask it to "write a test for this function against this spec". Setup per host: providers.md.

Raw protocol in any LLM

llm.md is the whole protocol as a single system prompt. Paste it into any chat model, then paste your test - no install, no CLI. This is the lowest-common- denominator path and what the CLI automates.

Static scanner first, skill second

For Python, the companion falsegreen pip package is a deterministic scanner. Run it to get the structural findings fast, then hand its output to the skill (via --conventions or in the host) so the LLM only does the semantic judgment on top.

pip install falsegreen && falsegreen tests/

CI (GitHub Actions)

analyze --json --fail-on-high gates a pipeline on HIGH findings; the workflow example is in cli.md. This is Mode A only - authoring and fix are interactive/propose steps, not gates.

Provider validation snapshot

Snapshot as of 2026-07-02; free-tier caps and model ids drift, so re-check before relying on a specific row. Live end-to-end runs of generate (Mode B: render + self-check) through the OpenAI-compatible path, to record what actually works:

ProviderReached APIgenerate result
OpenRouteryesGenerated the test; self-check ran. On a small model (llama-3.1-8b) the Mode A report was incomplete, so the self-check reported UNVERIFIED - the designed degrade, not a crash. A larger model is needed for a clean PASSED.
GroqyesHTTP 413 - the 33k prompt exceeds the free 12k TPM cap.
CerebrasyesHTTP 429 - free token quota exceeded.
DeepInfrayesHTTP 402 - needs positive balance.
MistralyesTimed out at 120s on the free path.
NVIDIA NIMyesHTTP 404 on a stale model id; base URL is correct, pass a current --model.
Alibaba QwenyesHTTP 403 AccessDenied.Unpurchased - the model must be enabled on the account.

Offline paths (no key) are covered by test/smoke.cjs: the generate guards (unknown --lang, missing spec, spec with no oracle) and the output extractor.

Takeaway. The CLI and both self-check degrade paths work. The bottleneck for a large batch is the provider tier, not the code: free tiers either cap tokens below 33k or rate-limit, so a broad run needs a host that fits the prompt (Ollama local, or a paid/large-context model). The generate self-check specifically needs a model strong enough to emit a valid Mode A JSON report, or it reports UNVERIFIED.

Running a broad batch audit

To audit many repositories (Mode A over their existing tests), point the CLI at a host that fits the prompt and loop:

export FALSEGREEN_API_KEY=...     # a host from the table that fits 33k
for repo in $(cat repos.txt); do
  git clone --depth 1 "$repo" _audit/$(basename "$repo")
  find _audit/$(basename "$repo") \( -name 'test_*.py' -o -name '*.test.ts' \) | while read f; do
    falsegreen-skill analyze "$f" --json \
      --provider openai-compatible \
      --base-url https://openrouter.ai/api/v1 \
      --model meta-llama/llama-3.3-70b-instruct --max-tokens 8192 \
      >> _audit/report.jsonl
  done
  rm -rf _audit/$(basename "$repo")
done

There is no offline batch mode - every analysis is one model call, so the batch cost and rate limits are the provider's, not the CLI's. Size the run to the tier you have.