Make games with AI (ESKEES CLI)
Based on the ESKEES Studio alpha (October 2026). May change without notice.
With the ESKEES CLI (the eskees command) you can ask an AI such as Claude Code or Codex to “make this game with ESKEES”.
The AI never drives the ESKEES screen — it writes files and reads short text results — so it uses fewer tokens than working through screenshots.
The result is a regular ESKEES project (.espj), so people can open it in Studio and keep editing.
No sign-up or sign-in needed. Install it with one line and start asking the AI right away (what guests can do, getting started).
You can use it without an account (guest)
The ESKEES CLI works right away, with no sign-up and no sign-in. As a guest you can make games, play and test them, play them on your phone, send a link, and take the file home to put on your own site.
| What you want to do | Guest | Account |
|---|---|---|
| Have an AI make or fix a game | ✓ | ✓ |
Play and test it on your computer (preview, test) | ✓ | ✓ |
Play on your phone or send a link (share; deleted after 5 days) | ✓ | ✓ |
Take the .eskx home and put it on your own site | ✓ (personal, non-commercial use only) | ✓ |
| Publish to showcase (no time limit, ratings, leaderboards) | — | ✓ |
| Open and edit it on screen in ESKEES Studio | — | ✓ |
| Commercial use | — | Contact us |
Create an account on the ESKEES Studio sign-up page. Works you made as a guest carry on as they are.
To edit your games in Studio, apply through the pre-registration form. We'll activate your account and let you know.
1. Getting started (your first game as a guest)
This assumes you have Claude Code or Codex (you'll ask one of them to “make it with ESKEES”). In about 15 minutes you'll have a game you can play on your phone.
Step 1. Install the ESKEES CLI (once)
Open a terminal, paste this one line and press Enter.
- Windows: type “PowerShell” in the Start menu to open it, then
irm https://showcase.eskees.com/install.ps1 | iex - macOS: open Terminal (Linux is the same), then
curl -fsSL https://showcase.eskees.com/install.sh | sh
That one line does three things in order:
- if Node.js 20+ is missing, asks whether to install it, then installs it (winget on Windows, Homebrew on macOS; if neither is available or you say no, it stops and points you to nodejs.org)
- installs the ESKEES CLI (the
eskeescommand) - teaches Claude Code and Codex how to use ESKEES (
eskees setup; what it writes)
When you see 「入りました。」 (installed), you're done. Quit Claude Code / Codex and start them again — they read what was registered when they start.
If you'd rather not use the terminal, ask Claude Code or Codex: “read https://eskees.com/en/docs/cli/ and install the ESKEES CLI”.
Step 2. Ask the AI (more in How to ask the AI)
Start Claude Code or Codex where you want the game to live (an empty folder in Documents, say) and describe what you want.
Make a game with ESKEES where you catch falling apples in a basket. Count how many you catch in 30 seconds.
The AI creates the folder (eskees new), writes the art and the script, builds it and checks how it plays (eskees build, eskees play). When it's ready it opens it in your browser with eskees preview.
You can also start from an official sample and remix it. Starting from a working game keeps the AI on track and gets you something playable quickly.
eskees new apple-catch --from catch # start from “ほしをキャッチ” (Star Catch)
eskees new --list # list the samples
Samples: catch (catch falling things), flappy (flap through gaps), tetris (falling-block puzzle), slide (2048-style sliding puzzle), solitaire and spider (card games), slingshot (pull-and-launch physics puzzle), runner (auto-shooting runner), survivor (survivor-like).
All are playable on showcase. Start the AI in the new folder and ask, for example, “use this game as the base and turn the stars into apples”. Or just ask the AI to “build it from the ESKEES catch sample”.
More examples:
- “Make a game where a hero moves with the arrow keys and dodges enemies to reach the goal”
- “Make it playable on phones with tap controls”
- “Add a title screen and a game over screen”
Step 3. Play it and ask for changes
Play the page the AI opened and tell it what you'd like changed.
The apples fall too fast. Start slow and speed up over time.
While iterating, open a second terminal and leave eskees test running in the game's folder.
The test player (with variables and a log) opens in your browser and reloads every time the AI edits a file. It runs locally (127.0.0.1), so your work isn't sent anywhere. Press Ctrl+C to stop.
Step 4. Play on your phone or send a link
Ask the AI “I want to play it on my phone” or “give me a link to send a friend”. It checks with you, runs eskees share and gives you a play URL (or run eskees share yourself in the game's folder).
- It is deleted five days after you place it. Anyone with the URL can play it (it isn't listed or indexed)
- On a phone, opening the URL is all it takes — no sign-in
Step 5. Keep it, or put it on your own site
Your game stays as files in its folder:
name.eskx— the playable file. Drop it on showcase.eskees.com/test to play it on any computername.espj— the ESKEES project (open it later in Studio to edit; to use Studio, apply through the pre-registration form and we'll activate your account)eskees build --html— also makes a single web page (name.html) you can double-click to play
To put it on your site or blog, upload the .eskx and embed it with the ESKEES Player. Unlike a share link, it doesn't expire.
Works made as a guest are for personal, non-commercial use only (Terms, Article 7).
If something goes wrong
| What happened | What to do |
|---|---|
| It stopped with “Node.js 20 以上が見つかりません” (Node.js 20+ not found) | Install the LTS version from nodejs.org, reopen the terminal and run the line again |
eskees isn't found | Close and reopen the terminal (a window that was already open may not know where it was installed) |
| Windows PowerShell says running scripts is disabled | Type eskees.cmd instead of eskees (Claude Code and Codex can use it as is) |
| macOS / Linux says “permission denied” | Run sudo npm install -g https://showcase.eskees.com/cli/eskees-cli.tgz, then eskees setup |
| “Chrome も Edge も起動できません” (can't start Chrome or Edge) | Install Google Chrome. If it's somewhere unusual, set ESKEES_BROWSER to the executable's path |
| The AI says it doesn't know ESKEES | Restart Claude Code / Codex. If it still doesn't, run eskees setup in a terminal |
| Something the AI made doesn't work | Ask the AI to “look at the eskees check output and fix it” (it lists errors with line numbers, so the AI can fix them directly) |
2. How to ask the AI
Working with the ESKEES CLI is mostly asking the AI for things. How you ask makes a big difference to the result and to how much rework you need.
Starting Claude Code or Codex
Use one folder per game. Open a terminal in that folder, then start the AI.
mkdir apple-catch
cd apple-catch
claude # Claude Code
codex # Codex
Next time, start it in the game's folder (the one with eskees.json). The AI reads the folder's AGENTS.md before it starts.
If you start it outside the game's folder, it may begin a brand-new game.
What to say in your first request
Putting these in one request gets you close to what you want from the start. You don't need to decide everything — the AI fills in anything you leave out.
| Item | Examples |
|---|---|
| Genre | falling-block puzzle, side-scrolling action, tapping game, card game |
| Controls | arrow keys to move and Space to jump; tap and swipe on phones |
| How it ends | highest score in 30 seconds; game over after 3 hits; clear stage 3 to finish |
| Orientation and size | portrait for phones (720 × 1280); landscape for PCs (1280 × 720) |
| Look and feel | graveyard at night, pastel colours, pixel art, simple shapes only |
| Screens you need | title screen, game over screen, leaderboard |
Example:
Make a portrait game for phones with ESKEES.
- Move a basket left and right at the bottom to catch falling apples
- Arrow keys on a PC, drag with a finger on a phone
- 30-second time limit. Apples caught are the score. Occasional rocks take 3 points if they hit
- Add a title screen and a game over screen (score and a play-again button)
- A bright orchard look. Placeholder images are fine
Open it in the browser when it's ready
Using your own images
Put the image files in the game's images/ folder, then say which image is for what.
I put player.png (the hero) and apple.png (the apple) in images/. Replace the placeholder images with them
Transparent PNGs blend in with the background. For character variants (expressions, directions), separate files such as player_left.png and player_right.png are easiest for the AI to work with.
Asking for changes
Ask for one or two changes at a time, and say what is happening and what you want instead.
| Hard to act on | Easy to act on |
|---|---|
| Make it more fun | Make the apples fall a little faster every 10 seconds |
| The movement is weird | The basket goes off the right edge of the screen. Stop it at the edge |
| It's too hard | Too many rocks. No rocks for the first 10 seconds, then at most one every 5 seconds |
| Make it look better | The score is hard to read against the background. Make it white with a black outline |
For numbers you'll want to tune (speeds, time limits, spawn counts), ask the AI to “make them variables so I can change them later”. Then you can tune them in Studio or at the top of script.lua.
When something doesn't work, this gets the AI to find and fix the cause itself:
Check how it runs with eskees check and eskees play, and fix anything wrong
Continuing after editing in Studio
After you adjust positions or colours in Studio and save over the file, just ask the AI to carry on. Your edits are taken in automatically.
I moved the enemies and changed the background colour in Studio. Keep that, and make the enemies move towards the player
Letting people play, and publishing
Make a URL so I can play it on my phone # eskees share (no sign-in; deleted after 5 days)
Bundle it into a single web page # eskees build --html
Publish it to showcase, no remixing allowed # eskees publish (account required)
When asked to allow a command
Claude Code and Codex may ask before running a command. Commands starting with eskees are needed for ESKEES work, so allow them.
eskees share and eskees publish upload your game, though — check before allowing those.
Depending on its settings, Codex may restrict network access or launching a browser. If eskees build or eskees share fails, check Codex's permission settings.
3. Installation details
If you already have Node.js, npm install -g https://showcase.eskees.com/cli/eskees-cli.tgz followed by eskees setup does the same.
The install command asks before installing Node.js. When nobody can answer (for example when an AI runs it), decide in advance with the ESKEES_INSTALL_NODE environment variable (1 installs without asking, 0 doesn't install). With neither an answer nor the variable, it doesn't install and stops with instructions.
# Windows (PowerShell)
$env:ESKEES_INSTALL_NODE = '1'; irm https://showcase.eskees.com/install.ps1 | iex
# macOS / Linux
curl -fsSL https://showcase.eskees.com/install.sh | ESKEES_INSTALL_NODE=1 sh
What eskees setup writes (only for the tools it finds; if it finds neither, it writes both):
- Claude Code:
~/.claude/skills/eskees/SKILL.md(adds one ESKEES skill) - Codex: a section wrapped in
<!-- ESKEES:BEGIN … -->and<!-- ESKEES:END -->inside~/.codex/AGENTS.md(or underCODEX_HOME). Nothing else in the file changes - To undo it, run
eskees setup --remove(removes only what it added). To remove the CLI, runnpm uninstall -g eskees-cli
To verify the download, compare it with the SHA-256 in eskees-cli.sha256.txt (Get-FileHash eskees-cli.tgz on Windows, shasum -a 256 eskees-cli.tgz on macOS / Linux).
It uses Google Chrome or Microsoft Edge without opening a window (Windows already has Edge; point ESKEES_BROWSER at another executable if needed).
check, build, preview, play, shot, test, pull, share and publish use it; new, agents, docs, setup and login don't.
To create a folder yourself: eskees new star-catch (a small playable starter plus AGENTS.md for the AI). To hand someone just the .eskx, have them drop it on showcase.eskees.com/test — it plays right in their browser and never leaves it.
4. Commands
| Command | What it does |
|---|---|
eskees new | Creates a game folder. With --from catch (and so on) it starts from an official sample (--list lists them) |
eskees preview | Builds and opens it in your browser (to play) |
eskees check | Script errors and references to missing parts, UI, sounds or tables, with line numbers and suggestions. Exits with code 1 when there are errors (usable in CI). Also points out things that make the work harder to edit later: the same image in two files, a font missing from fonts, or the same component placed twice without scoped |
eskees build | Creates folder.espj (open it in Studio) and .eskx (to share). --html adds a web page (it loads the player from showcase.eskees.com, so playing it needs an internet connection). After changing only the script, --script swaps just the script in the .eskx in a few seconds |
eskees play | Plays without a window, fast-forwarded, and prints variables and actors as text (input syntax). The clock (var … from clock.*) advances by the seconds played. Times shown are seconds played; if the game was paused with game.pause, the game clock is shown next to them |
eskees shot | Saves the screen as an image (--at 2 --out shot.png). 1280 × 720 by default; --size canvas uses the canvas size and --size 780x1688 a size you choose |
eskees test | Plays the work in the test player (above) |
eskees share | Places the work on showcase temporarily and prints a play URL (below; no sign-in) |
eskees live | Reads YouTube live chat and passes it to your work's reactions (React to YouTube chat) |
eskees open | (Not available yet.) Opens the .espj in the ESKEES desktop app, which is not distributed at the moment |
eskees agents | Replaces the folder's AGENTS.md (instructions for the AI) with the current CLI's (below) |
eskees pull | Writes edits made in Studio back into the folder |
eskees publish | Publishes to showcase (below) |
eskees docs | Prints just the documentation section you need (eskees docs lang 9.5). eskees docs structure covers how to organize a work so people and AI can keep editing it, eskees docs effects how to build flashes, glows and other effects, and eskees docs jizura the text effect engine (JIZURA) |
eskees jizura | Lists the styles and effect names of the text effects (JIZURA). eskees jizura plan name --text "…" shows how long the effect runs with that text and what each cut uses, without opening a window |
eskees --version, eskees command --help | Prints the version, or how to use that command (with --help the command doesn't run) |
Input syntax (play, shot, publish)
All times are seconds since the game started (--until 5 plays up to 5 s; --at 1,3 means at 1 s and 3 s).
--keys "0.5:Space, 1-2.5:ArrowLeft, 3:ArrowUp+Space"—0.5:presses once at that time,1-2.5:holds from 1 s to 2.5 s,+presses together--tap "1:360,640"— taps canvas point (360, 640) at 1 s; separate more taps with;--drag "3-3.5:100,600>300,400"— drags from (100, 600) to (300, 400) between 3 s and 3.5 s--type "1.5:nameInput=Sakura"— types into a UI input field at 1.5 s and confirms--seed 1— fixes the random sequence (same result every run)
5. What's in the folder
| File | Contents |
|---|---|
eskees.json | Name, description, canvas size, assets (images), components and where things are placed |
script.lua | Logic (script language) |
ui.json | On-screen text, buttons, panels (including components pinned to the screen) and scenes |
game.json | Character settings (control, hitbox, physics), sounds, stages, tables, camera, effects, fonts, videos, particles, text effects and live-chat reactions |
images/, sounds/, videos/, fonts/ | Images, audio, video and font files |
Look and fonts
Rounded corners, gradients, borders, shadows and glows, and background blur for the UI are numbers in ui.json — no images needed, and changing a color or a radius later is just editing a number. You can ask the AI things like “round the buttons and make the border glow when it can be pressed”.
- List fonts under
fontsingame.json: a font file you put infonts/, or a Google Fonts family ("google": true). Both the UI text and the text effects use that one list. - If you bundle a font file, check that its license allows redistribution.
- Put videos in
videos/and play them full screen withvideo namein the script (MP4 recommended).
See eskees docs folder for the exact format.
In eskees.json, assets maps asset names to images. There are four forms (the text after // is explanation only — JSON has no comments, so don't put it in a real eskees.json):
"assets": {
"背景": "images/bg.png", // one image
"顔": { "frames": { "笑": "images/face_smile.png", "怒": "images/face_angry.png" } }, // variants (one shown at a time)
"勇者": { "sheet": "images/hero.png", "grid": [4, 2], "sets": { "正面": "1,3", "左": "7-8" } }, // sprite sheet (cells numbered 1, 2, 3… from the top left)
"キャラクター/": "images/chara/" // folder: every image directly inside becomes an asset, in the category 「キャラクター」
}
With a folder entry, adding an image file adds an asset — no need to edit eskees.json. To give a single image a category, write { "image": "images/bg.png", "group": "背景" }.
Write anything that repeats (storage slots, speech bubbles, cards) once, as a component under components in eskees.json. Components can nest, lay themselves out (Auto Layout with repeat), have states (styles) and contain buttons. To use one as on-screen UI, add "component": "Name" to a panel in ui.json. See eskees docs folder for the format. Repeated copies are named cell1…cell35, so scripts can use numbered names: on press cell[i] runs for whichever cell is pressed and puts its number in i, and say cell[i]_n = 3 sets that cell's text to 3 (script language).
canvas, assets and place in eskees.json always win — every build brings the .espj in line with them. The canvas keeps its size even when you place a larger image. Anything removed from or renamed in place is removed from the .espj too (the build says so), as are image assets nothing uses; PSDs and other assets that can't be written to the folder stay. Edits people make in Studio are taken in automatically by the next build (forgetting pull loses nothing). Only when you and the AI changed the same file does build stop, with a message like “ESKEES での編集と、フォルダの編集がぶつかっています: ui.json” (your Studio edits and the folder edits conflict). Run eskees pull to keep the Studio edits, or eskees build --force to keep the folder's.
6. Take turns with the AI
- The AI edits the folder and runs
eskees build. - You open
folder.espj, edit, and press Ctrl+S (「上書き保存」, save over the same file). For now, open it in Studio (Chrome / Edge) with 「プロジェクトを開く…」 (Open project). (The desktop app isn't distributed at the moment; once it is,eskees openor a double-click will work too.) Either way, saving writes straight back to that file. - Ask the AI to continue. Your edits are picked up automatically the next time it builds.
Only when you and the AI changed the same file (the script, say) does it stop, and the AI asks which to keep — your edits are never silently lost. The AI is also told (in AGENTS.md) to build in ways that are easy for people to edit:
- named image assets
- parts placed on the canvas from the start
- text in UI
- character settings for control
- tables for rows of numbers
- commented variables for tuning
- ASCII names for variables, functions and classes
AGENTS.md is written by eskees new. After updating the CLI, run eskees agents in older folders to replace it with the current one (the old one is kept as AGENTS.md.old). If it's out of date, build tells you once.
7. Play on your phone or send a link (no sign-in)
Ask the AI to “let me play it on my phone” or “give me a link”, or run eskees share yourself. It places your work on showcase temporarily and prints a play URL and a download URL.
- It is deleted five days after you place it. Anyone with the URL can play it (it is not listed).
- The 「ダウンロード」 (Download) button on the play page saves the
.eskx. Put that file on your own site and it keeps working with the ESKEES Player. - Placing it online asks for confirmation. When an AI runs it, the AI checks with you first.
- Works made without signing in are for personal, non-commercial use only (Terms, Article 7). For commercial use or publishing to showcase, create an account.
8. Publish to showcase (account required)
Ask the AI to “publish to showcase”, or run eskees publish yourself. You need an ESKEES Studio account.
Run eskees login once; on the page that opens, check the code matches your terminal and press 「許可する」 (Allow).
Where a browser can't open (CI and so on), create a token on the same page (Studio's /cli/) and set it as ESKEES_TOKEN.
A token can do what eskees login can (publish and update your own works) and doesn't expire; revoke it on that page, or delete your account, to stop it working.
- You choose editable (remixing allowed; the project is shared too) or not editable (play only) every time. Run it yourself and it asks; the AI always checks with you first.
- Screenshots are taken from actual play (1 s and 3 s by default;
--shots 1,3,5), or use--shot-files a.png,b.png. - Later runs update the same work; add
--newfor a separate one. - Publishing asks for confirmation. When an AI runs it, the AI checks with you first and then adds
--yes.
You can also publish from the 「公開」 (Publish) button in Studio's top bar.
What is sent
- Building and playing happen on your own computer. It only connects out in these cases:
share,publish: uploads your work (publishalso checks your sign-in)new --from: downloads an official sample from showcaselive: reads YouTube chat. The API key stays on your computer- If the work uses Google Fonts (
"google": true): the fonts are loaded from Google Fonts when it plays or is checked
- After a successful sign-in check, it doesn't check again for 24 hours.