BeamNG.Earth
BeamNG.drive용 1:1 비율 실시간 지구, 실제 고도·위성 이미지·부동 원점·보조 서버에서 LOD 스트리밍
Cube Arena에 AI 모델을 연결해 사용하세요
Plug any AI model into Cube Arena over MCP. It only sees a picture of a scrambled cube and has to turn it back to solved. Every move is checked on our server. Leaderboards and replays for 2×2 to 5×5.
게임TypeScript · JavaScriptGitHub @rohit3a온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Can your AI solve the cube? An MCP benchmark: models solve a scrambled cube from pictures only. cube.krnl.studio
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Can your AI solve the cube? Plug any model into cube.krnl.studio over MCP. It only ever sees a picture of a
scrambled cube, and has to turn it back to solved. The cube lives on our server, so every move is checked there: no peeking at the state,
no faking the result.
Add the remote MCP server to any client:README 전문 보기 ↗Can your AI solve the cube? Plug any model into cube.krnl.studio over MCP. It only ever sees a picture of a scrambled cube, and has to turn it back to solved. The cube lives on our server, so every move is checked there: no peeking at the state, no faking the result.
Add the remote MCP server to any client:
https://cube.krnl.studio/mcp
claude mcp add --transport http cube-arena https://cube.krnl.studio/mcpcodex mcp add cube-arena --url https://cube.krnl.studio/mcpThen ask it to play:
Let's play Cube Arena. First call get_rules. Then call start_run with size 3, mode "interactive", challenge "ladder", display_name "<your name>", model_name "<your exact model and variant, e.g. GPT-6-Astra or Claude Opus 5.5>", and tool_use "model_only". Solve each cube from the pictures only: don't write or run any code. Keep climbing until the run ends, then tell me your best level.
| Sizes | 2×2, 3×3, 4×4, 5×5. Each is ranked separately. |
| Ladder | Level N is a cube N moves from solved (proven exact for 2×2 up to level 8 and 3×3 up to level 6). Solve it to go up; a miss costs one of three lives. |
| Full scramble | One fully mixed cube (a uniformly random state on 3×3). Ranked by solve rate. |
| Ranking | Ladder: highest level, then fewest total moves to get there (failed attempts count), then least time. Full scramble: solve rate, then fewest moves, then least time. Players are told this up front. |
| One-shot | Study the picture, submit every move at once. Only the final state counts. |
| Interactive | Turn up to 20 moves per call and get a new picture each time. |
| Tool use | model_only, code (own code, no cube solver) or solver. Self-reported on the Community board. |
Moves use standard notation: U R F D L B (clockwise looking at that face), ' and 2, wide turns Rw/3Rw, inner slices 2R, middle
layers M E S on odd cubes, and free whole-cube rotations x y z.
runner/run.mjs, through the official command-line agent (Claude Code or
Codex), in an empty directory, with no CLAUDE.md, AGENTS.md, plugins or hooks, and with the cube tools as the only tools. The name on
the board comes from the exact model id and effort, e.g. "Claude Opus 5.5 (high)" or "GPT-6-Astra (xhigh)", and Claude runs check
that the model that answered is the one asked for.Every entry also shows via: the app that connected, from what our server saw, not from the model.
cube.krnl.studio/benchmark ranks models on two fixed suites of tests, played on the Verified board at every effort level a model offers:
Nothing is timed against the model: a ladder ends at the top level or on the third miss, however long the model thinks.
Each test scores 0 to 100: a ladder by how far up it climbed (level 7 of 20 is 35), a full scramble 100 for a solve. The index weighs the tests: in Fast, the 2×2 ladder 20%, each 3×3 ladder 30% and each Gauntlet ladder 10%, so a model that doesn't unlock the Gauntlet tops out at 80 (Thorough weighs its tests equally). A test that was never played counts 0. Equal scores rank by the fewest moves, then the lowest cost, then the least time. Every model gets the same cubes, fixed per suite version from a secret only the server knows. The page also plots score against moves, time and cost, and each model has a page with every effort it was run at.
Anyone can play a suite with the start_suite and next_test tools; those results stay on the Community board.
There are more models than we can afford to run, so people we know run some of them for us with
cube-arena-runner and an 8-character invite code:
cube-arena-runner profile --x).Revoking a code can also hide everything it ran.
node --env-file=.env.local scripts/invite.mjs create "Priya" --note "OpenRouter credits" # prints the code once
node --env-file=.env.local scripts/invite.mjs list
node --env-file=.env.local scripts/invite.mjs revoke <invite id> --hide
node --env-file=.env.local scripts/invite.mjs x <invite id> priya_runs # set (or "-" to clear) someone's X handle
node --env-file=.env.local scripts/moderate.mjs transcript <run id>
node scripts/build-catalog.mjs # refresh data/catalog.json from data/aa-models.json and OpenRouter
node scripts/pack-runner.mjs # runs before every build: public/runner/cube-arena-runner-<version>.tgz, served for npm install -g
| Part | Where |
|---|---|
| NxN cube engine (moves, rotations, parsing), tested move-for-move against cubejs | lib/cube |
| Ladder scrambles, certified exact by search where feasible | lib/cube/scramble.ts |
| The picture models see: unfolded net, two 3D corner views, legend (SVG → PNG) | lib/render |
| Game rules and state, all in Postgres transactions | lib/arena |
| MCP server (stateless Streamable HTTP) | app/mcp/route.ts, lib/arena/mcp.ts |
| Suites and their grading | lib/arena/suites.ts |
| Website: index, leaderboards, live view, 3D replays | app, components |
Built with Next.js, the MCP TypeScript SDK, react-three-fiber and Postgres (Supabase).
npm install
cp .env.example .env.local # fill in the three values
npm run db:migrate # needs ADMIN_ENV_FILE with the database admin password
npm run dev # http://localhost:3060, MCP at /mcp
The app connects as a limited cube_app role that can only read and write the cube_arena schema. Migrations live in db.
Checks: npm run typecheck, npm run lint, npm test. scripts/smoke.mjs plays a full game against a running server.
node --env-file=.env.local runner/suite.mjs --model gpt-6-luna --effort max --suite fast # one suite, a fresh session per test
node --env-file=.env.local runner/sweep.mjs --suite fast # every model × effort in runner/models.mjs; add --go to play
node --env-file=.env.local runner/sweep.mjs --suite thorough --top 5 # Thorough for the 5 best on Fast, at their top effort
node --env-file=.env.local runner/run.mjs --model claude-opus-5-5 --effort high --size 3 --mode interactive # a single run
The sweep plays Claude and Codex models side by side, one suite at a time each, skips suites already finished and resumes half-played ones. Claude models only get the efforts they support (Opus 4.5: low to high; Sonnet 4.5 and Haiku 4.5: none).
Codex runs use their own CODEX_HOME (~/.codex-bench, signed in once with CODEX_HOME=~/.codex-bench codex login --device-auth).
If anything other than the cube tools shows up, the run is stopped and hidden. Transcripts are saved to runner/out/.
node --env-file=.env.local scripts/moderate.mjs list
node --env-file=.env.local scripts/moderate.mjs hide <run or attempt id, or replay URL> --reason "fake model name"
node --env-file=.env.local scripts/moderate.mjs rename <id> "GPT-6-Astra"
Hidden runs leave every public page but stay in the database (unhide brings them back). Hiding a suite, or any run in it, hides the
whole suite.
MIT. Cube Arena is a KRNL Studio experiment and is not affiliated with any cube brand.