강화 학습 환경 검증기를 조사하여 잘못된 통과(false pass)나 잘못된 실패(false fail)와 같은 보상 함수 결함을 식별합니다.
다른 이름 Super-Eric/falsepass
- 스타
- 1
- Tools
- 1
- 다운로드, 30일
- —
- 최신 버전
- 0.15.0
- 마지막 커밋
- 2026년 11월 8일
- 라이선스
- Apache-2.0
falsepass MCP란?
falsepass은(는) MCP server입니다. 강화 학습 환경 검증기를 조사하여 잘못된 통과(false pass)나 잘못된 실패(false fail)와 같은 보상 함수 결함을 식별합니다. 1개 도구를 제공합니다. 예: ratctl.
프로젝트 README에서 생성된 요약
falsepass MCP server 정보
falsepass의 주요 목적은 강화 학습 보상 함수의 결함을 식별하는 것입니다. 개발자가 잘못된 완료에 보상이 주어지는 false pass와 올바른 완료에 페널티가 부여되는 false fail을 찾는 데 도움을 줍니다. 검증기를 테스트 대상 시스템으로 취급하여, 모델이나 롤아웃, GPU 없이도 정답 여부를 알고 있는 완료 데이터에 대해 보상 코드를 호출하고 불일치 사항을 보고합니다.
이 도구는 Prime Intellect 검증기, Hugging Face OpenEnv, TRL GRPOTrainer 보상 함수, Inspect AI 및 HUD를 포함한 여러 프레임워크를 지원합니다. 로컬 폴더, 공개된 Hub 환경 또는 특정 Python 모듈을 감사할 수 있습니다. 사용자는 falsepass init 명령으로 감사를 초기화하고 audit 명령으로 프로브를 실행하여 결과 요약을 생성할 수 있습니다. 시스템은 uv를 사용하여 매 감사마다 일회성 가상 환경을 관리하므로 깨끗한 테스트 프로세스를 보장합니다.
활용 사례
- 1보상 함수 허점 탐지정책이 정답 대신 모든 후보 답변을 나열하는 것만으로 전체 보상을 획득할 수 있는지 확인합니다.
- 2TRL 보상 함수 감사TRL GRPOTrainer에서 사용하는 보상 함수를 트레이너와 동일한 데이터셋 컬럼 및 가중치로 호출하여 검증합니다.
- 3OpenEnv 환경 테스트환경 클래스를 프로세스 내에서 reset 및 step 호출을 통해 구동하여 채점 결함을 확인합니다.
프로젝트의 README를 바탕으로 작성되었습니다. 모든 활용 사례는 해당 내용의 인용문과 대조하여 확인합니다.
falsepass MCP 설치 방법
형식 확인: 2026년 11월 10일Cursor에 추가Goose에 추가Claude Code에 falsepass MCP 설치
$ claude mcp add falsepass -- uvx falsepassCursor에 falsepass MCP 설치
~/.cursor/mcp.json
{
"mcpServers": {
"falsepass": {
"command": "uvx",
"args": [
"falsepass"
]
}
}
}VS Code에 falsepass MCP 설치
.vscode/mcp.json
{
"servers": {
"falsepass": {
"type": "stdio",
"command": "uvx",
"args": [
"falsepass"
]
}
}
}VS Code CLI에 falsepass MCP 설치
$ code --add-mcp '{"name":"falsepass","type":"stdio","command":"uvx","args":["falsepass"]}'Claude Desktop에 falsepass MCP 설치
claude_desktop_config.json
{
"mcpServers": {
"falsepass": {
"command": "uvx",
"args": [
"falsepass"
]
}
}
}Codex에 falsepass MCP 설치
$ codex mcp add falsepass -- uvx falsepassCodex config.toml에 falsepass MCP 설치
~/.codex/config.toml
[mcp_servers.falsepass] command = "uvx" args = ["falsepass"]
Gemini CLI에 falsepass MCP 설치
$ gemini mcp add -s user falsepass uvx -- falsepassGemini settings.json에 falsepass MCP 설치
~/.gemini/settings.json
{
"mcpServers": {
"falsepass": {
"command": "uvx",
"args": [
"falsepass"
]
}
}
}falsepass MCP 도구 1
README에서 감지됨ratctl
| ratctl | — |
자동 검사
2026년 11월 13일에 실행됨전체 보고서 →자동 검사를 통과했습니다. 이는 보안 감사가 아닙니다. 코드를 직접 읽고 서버에 필요한 최소한의 권한만 부여하십시오. 검사 방식
- 소스 저장소 연결 및 접근 가능super-eric/falsepass is public and reachablegithub.com/super-eric/falsepass ↗통과
- 패키지가 이 저장소를 소스로 명시falsepass names super-eric/falsepass as sourcepypi.org/project/falsepass/ ↗통과
- 빌드 출처(Sigstore 증명)Sigstore attestation for falsepasspypi.org/project/falsepass/ ↗통과
- 오픈 소스 라이선스 (OSI)Apache-2.0spdx.org/licenses/Apache-2.0.html ↗통과
- 최근 1년 내 커밋 또는 릴리스Last commit or release 2026-11-08github.com/super-eric/falsepass ↗통과
- OpenSSF Scorecard검사되지 않음
- 패키지 이름이 인기 패키지와 유사하지 않음No popular package one edit away from falsepass통과
- 패키지 및 해당 종속성에 중요한 보안 권고 없음1 resolved dependencies checked; no critical advisoryosv.dev ↗통과
- 모델에 대한 숨겨진 지침 없음1 tool description and the README read; no override phrases, credential paths or hidden characters통과
- 파괴적인 도구에 라벨 표시됨No tool named like delete, drop or exec통과
- 원격 엔드포인트가 MCP 핸드셰이크에 응답검사되지 않음
README
GitHub에서 보기falsepass
English | 中文
Probe RL environment verifiers for false passes (a known-bad completion is rewarded) and false fails (a known-good completion is not).
Website and docs: https://super-eric.github.io/falsepass/ · write-up: Your reward function is an assertion
In one public environment, echoing the question back earned full reward on every task: each question listed all of its candidate answers, and the grader only checked that the right one appeared somewhere in the reply, so a policy could collect full reward by listing everything. falsepass finds this kind of hole before training does.

An RL environment is a task dataset plus a verifier that turns a model's output into
reward. falsepass treats that verifier as the system under test: it calls the
environment's own reward code on completions whose correctness is known in advance and
reports every disagreement. No model, no rollouts, no GPU.
It works with four frameworks and with plain reward functions, published or still in a local folder:
| Framework | What falsepass runs | falsepass init … |
|---|---|---|
| verifiers (Prime Intellect Environments Hub), all three API generations | the environment's rubric or taskset | owner/environment, or ./folder |
| OpenEnv (Hugging Face Spaces) | the environment class's own reset() and step(), in-process, no Docker |
hf:owner/space, or ./folder (an openenv.yaml) |
Reward functions for TRL's GRPOTrainer (or anything with that signature) |
the functions, called as the trainer calls them, summed with their weights | rewards.py --dataset data.jsonl, or a module such as trl.rewards |
| Inspect AI | the task's solver chain with a scripted model, then its scorers | path/to/task.py, ./project, or inspect_evals/gsm8k |
| HUD | the task template's grader, driven like HUD's server | path/to/env-folder (add --answers refs.json for every probe) |
Install
Needs uv on the PATH (every audit runs in its own throw-away virtualenv) and Python 3.11 or newer.
uvx falsepass demo # try it, nothing to install
uv tool install falsepass # or keep `falsepass` on the PATH
pip install falsepass # or into an existing environment
uvx --from git+https://github.com/Super-Eric/falsepass falsepass --version # the unreleased main branch
Quick start
falsepass demo # audits a bundled toy environment with one planted defect (about a minute)
falsepass init owner/environment # a Hub environment: package, version and verifiers pin read from the Hub
falsepass init ./my-environment # or your own, from its folder (pyproject.toml); edits are picked up on every run
falsepass audit my-environment # probe it; results in audits/my-environment/summary.md
falsepass results my-environment --json # headline numbers and failing probes, for scripts and agents
demo writes the toy environment to ./falsepass-demo and audits it. Its grader pays
when the reference appears anywhere in the answer, and the summary shows that one line
from several sides: the static scan points at it, and the probes that list several
answers (P5), retract the answer (P9) or deny it inside the answer slot (P15) are paid.
A condensed excerpt of the real output (full file: examples/toy-env/summary.md):
- False-pass ceiling: 1 of 1 (highest reward given to a known-bad completion; via P5 shotgun/all_in_one_slot)
- Lazy-policy reward: 0 (best average reward of one fixed strategy that never uses the reference answer; via P3 empty/empty)
- False-fail rate: 0.108 (93 known-good completions)
| Probe | Variant | Expect | Runs | Failed | Score min / mean / max |
| P5 shotgun | all_in_one_slot | zero | 10 | 10 | 1 / 1 / 1 |
| P9 oversized | correct_then_retracted | zero | 10 | 10 | 1 / 1 / 1 |
| P15 hedged_in_slot | denied | zero | 10 | 10 | 1 / 1 / 1 |
Static hint: falsepass_toy_env.py:26 reference_substring_match
return 1.0 if answer in reply else 0.0
confirmed: P9 failed 10/20, P5 failed 10/30
Reward functions (TRL GRPOTrainer style)
falsepass init rewards.py --dataset data.jsonl # every function in the file that takes `completions`
falsepass init rewards.py --dataset hf:owner/name --split test \
--func accuracy_reward --func format_reward --weight 1 --weight 0.2 # which functions, with the trainer's reward_weights
falsepass init trl.rewards --framework reward --dataset hf:trl-lib/DeepMath-103K --func accuracy_reward --with math-verify
falsepass init train.py --dataset call:get_dataset --map to_prompt # a loader and a row mapper defined in the script itself
falsepass audit rewards
Many graders are not packaged as an environment: a training script defines functions such
as accuracy_reward(completions, solution, **kwargs) and hands them to GRPOTrainer with a
dataset. falsepass calls each function the way the trainer does, one completion at a time,
with every dataset column as a keyword argument (prompts, completions, completion_ids,
trainer_state, log_extra, log_metric too), and sums the results with their weights, a
None counting as nothing. A completion is a one-message list when the dataset's prompts are
conversations or a function reads completion[0]["content"], else text. The reference column
is the one a function names (solution), else answer, solution, ground_truth, ...
(--answer-column to choose); a worked solution is reduced to its last \boxed{} or what
follows #### for the probes, while the functions always receive the column as it is. The
dataset is a .jsonl/.json/.csv/.parquet file, hf:owner/name (streamed through
datasets), or call:function in the file. The file's third-party imports are installed
for the audit (--with adds, --without drops). examples/reward-toy/ has one planted defect.
OpenEnv
falsepass init hf:owner/space # a Space on the Hugging Face Hub: cloned next to the audit
falsepass init ./my_env # or a local environment folder (openenv.yaml, server/app.py)
falsepass init hf:owner/space --answers refs.json # with reference answers: every probe runs
falsepass audit space
An OpenEnv environment computes its reward in step(), so falsepass drives the
environment class the way a session on its server does: reset() to a task, then step()
with the reply as the action, in-process, with the Space's own requirements installed and no
Docker. (The server's HTTP /reset and /step routes build a fresh environment per request,
so they cannot grade a reset followed by a step.) Tasks: audits/<name>/tasks.json lists the
keyword sets reset() is called with (most environments pick a task through task_id,
task_name, difficulty or a seed; each set may carry an answer), else the Task API when
the environment implements it, else repeated reset() calls, one task per distinct prompt;
an environment that draws a task at random is reset again until the recorded one comes up.
Without a reference answer only the answer-free probes run. A plain reply goes into the
action's free-text field; other required fields (a decision enum, a flag) are filled with a
constant, and O1 plays every value of such a decision field (a fixed strategy, reported as
the lazy-policy reward) while O2 moves a self-reported field (confidence, score) between
its minimum and maximum. A reply that is a JSON object naming the action's fields is the
action itself: an adapter, or an answers file of such objects, fills several fields that way.
examples/openenv-toy/ has one planted defect to try.
MCP tool environments (the action is a CallToolAction), and environments whose reward comes
after several steps, are played with policies: falsepass init <target> --policies writes an
adapter whose policies play whole episodes in this process, the task's reset() and then one
step() per action until the environment says done. A policy is act(messages, tools): the
task's text is the first user message, a tool's result a tool message (with its name), a text
environment's next observation a user message; it returns call("tool", arg=value) for a tool
call, or a string (the action's text in a text environment; the end of its turn, and of the
episode, in a tool environment). Fill in solver(example) (the control; it may read
example.raw, example.answer or the live environment through ENV()) and
exploits(example) (policies that never read the task). The reward is the episode's return
(REWARD = "last" takes the last step's). repro replays each stored episode step by step with
openenv alone. examples/openenv-tool-toy/ is an MCP refund desk with a planted defect. The
run is inconclusive when the solver earns less than the maximum on most tasks or every tool
call failed, and the summary's load notes say what is odd (a step() override the server
never calls, tasks drawn at random). init --var NAME=VALUE sets a variable the Space reads
(a data path) on every run.
Inspect AI and HUD
falsepass init inspect_evals/gsm8k # a task from inspect_evals (pinned from PyPI)
falsepass init my_eval.py --task hard_split # a task file; --task picks one of several
falsepass init ./my-hud-env # a HUD environment folder (env.py + tasks.py)
falsepass init ./my-hud-env --answers refs.json # with reference answers: every probe runs
Inspect: the scripted model replaces only the call to generate(); prompt templates,
system messages and answer parsing (multiple_choice()) are the task's own code. A
solver or scorer that calls a model itself (self-critique, model_graded_qa) is flagged
on every row instead of being scored. Tasks that need a sandbox are not supported.
HUD: a task template keeps its expected answer inside the grader, so without
--answers only answer-free probes run: an empty reply, the prompt echoed back, and
replies that list every integer from 0 to 1000, every letter, yes/no words or the
prompt's words (A1; it also runs, with every other probe, when answers are given). A
grader that pays those is a substring test in practice. The answers file is JSON: an
object from task slug to answer ({"add-2-3": "5"}) or a list in task order
(["5", "12"]). To add answers to an existing audit, rerun init with --force.
examples/inspect-toy/ and examples/hud-toy/ each have one planted defect to try.
For environment authors: check before you publish
Run falsepass init ./your-env && falsepass audit your-env locally, or add the GitHub
Action to the environment's repository so every push is checked:
# .github/workflows/falsepass.yml
on: [push, pull_request]
jobs:
falsepass:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: Super-Eric/falsepass@main
with:
path: . # folder with the environment's pyproject.toml
fail-on: "ceiling>0.1 errors>0" # fail when a known-bad answer earns over 0.1, or scoring raises
The step summary shows the probe table. Gate names: ceiling (highest reward any
known-bad completion got), lazy (best average reward of one fixed strategy that never
uses the answer), false_fail (share of correct answers refused), errors. Datasets that
need a login or an API key at load time cannot be audited in CI without that secret.
For coding agents
- MCP server.
falsepass mcpserves the commands as tools (falsepass_scan,_init,_audit,_audit_status,_results,_completion,_reach,_repro,_draft,_upstream,_verify_fix,_discover) over stdio. Audits run in the background, so a client's tool-call timeout never cuts one off; failures come back as tool errors with the reason. Any MCP client starts it withuvx --from "falsepass[mcp]" falsepass mcp; in Claude Code, for example:claude mcp add falsepass -- uvx --from "falsepass[mcp]" falsepass mcp. - Skill. skills/falsepass/SKILL.md is a ready-made audit procedure in the Agent
Skills format: how to run an audit, how to tell a defect from a design choice, and how
to write it up for a maintainer. Copy the folder into the agent's skills directory
(for Claude Code,
~/.claude/skills/). - Plain CLI. Every command is non-interactive and writes files;
init --json,results --jsonandscan --jsonprint JSON;results --completion IDprints one completion in full;audit --fail-on ...exits 1 when a condition is met. The output formats are described in docs/OUTPUT.md.
Whatever drives it, the output is a list of leads. An agent should reproduce a lead and read the reward code before calling it a defect, and should not report an environment as broken on the strength of a probe table.
All commands
falsepass init owner/environment # set up audits/<name>/ for a Hub environment, or pass a local folder
falsepass init hf:owner/space # an OpenEnv Space on the Hugging Face Hub (cloned into audits/<name>/space)
falsepass init rewards.py --dataset d.jsonl # reward functions written for TRL's GRPOTrainer, with their dataset
falsepass audit environment # no adapter needed for Q&A tasks: the answer format is inferred
falsepass audit environment --search 120 # add mutation search (scorer calls per direction and example)
falsepass audit environment --jobs 1 # score one task at a time (default: up to 8 at once where that is safe)
falsepass audit environment --offline # a cached Hugging Face dataset without the Hub check (also reach, repro --run, verify-fix)
falsepass audit environment --fail-on 'ceiling>0.1' --fail-on 'errors>0' # CI gate, exit 1 when met
falsepass results environment [--json] # the last run: summary.md, or a compact JSON digest
falsepass results environment --completion ID # one completion in full (IDs are in the JSON digest)
falsepass scan path/to/source [--json] # static pre-scan only, nothing is installed or run
falsepass discover --days 90 --limit 160 # recently maintained Hub environments and what each needs
falsepass discover --hub hf --days 30 # OpenEnv Spaces on the Hugging Face Hub, most liked first
falsepass reach environment --probe P15/denied # how many tasks one failing probe row reaches (every task by default)
falsepass reach environment --template '{wrong} or {answer}' # ...or a completion of your own, filled per task
falsepass repro environment # stand-alone script that re-scores the exact failing completions
falsepass repro environment --run # ...and run it twice in fresh virtualenvs, compare, store the first run
falsepass rollout environment -n 20 # what a local model's own replies earn (Ollama)
falsepass propose environment -n 5 # a local model writes wrong answers and climbs on the reward
falsepass draft environment # REPORT.draft.md: candidate findings for manual review
falsepass overview -o RESULTS.md # one table over every audit on disk
falsepass container environment # container tasks: the key, and mutations of it, written as the output file (Docker)
falsepass upstream environment # find the source repository on GitHub and compare it with the audit
falsepass verify-fix environment --source ../patched/pkg # rerun the stored repro on a patch: which lines change
falsepass demo # the toy environment above
falsepass mcp # MCP server over stdio (`falsepass[mcp]`)
Each audit runs in a throw-away virtualenv pinned by audits/<env>/env.toml, because
Hub environments are built for mutually incompatible verifiers versions. Output:
audits/<env>/probe-results.json and summary.md. In a clone of this repository, prefix
the commands with uv run; uv run pytest runs the kit's own tests.
falsepass MCP 질문
falsepass MCP를 Claude Code에 추가하려면 어떻게 하나요?
터미널에서 claude mcp add falsepass -- uvx falsepass를 실행합니다. 모든 프로젝트에서 사용할 수 있게 하려면 --scope user를 추가합니다.
falsepass MCP를 Cursor에 추가하려면 어떻게 하나요?
~/.cursor/mcp.json를 열고 mcpServers 아래에 서버를 추가합니다. 위 설치 섹션에 표시된 Cursor 구성을 사용합니다.
falsepass MCP는 어떤 도구를 제공하나요?
1개 도구를 제공합니다. 예: ratctl.
falsepass는 어떤 역할을 하나요?
RL 환경 검증기를 조사하여 잘못된 완료에 보상이 주어지는 false pass 상황과, 올바른 완료에 보상이 주어지지 않는 false fail 상황을 찾아냅니다.
falsepass를 실행하려면 모델이나 GPU가 필요한가요?
아니요, 검증기를 테스트 대상 시스템으로 취급하므로 모델, 롤아웃(rollouts) 또는 GPU가 필요하지 않습니다.
어떤 프레임워크를 지원하나요?
검증기, OpenEnv, TRL의 GRPOTrainer 보상 함수, Inspect AI 및 HUD를 지원합니다.