Repository navigation
4.4.0 was not published to npm. 4.5.0 is the first release with everything in it (the [4.4.0] section below), plus these changes.
New since the first 4.5.0 cut: privacy-safe telemetry v2 with a one-time notice, videos (MP4, MOV, WebM) that convert to .ogv on import, and a game that goes from export to live over MCP with no staff wait.
-
The
launch-readyskill: get a game ready to launch and take it live. Whererelease-checklistreports what is missing,launch-readymakes it pass: it exports and uploads the build, captures real gameplay screenshots withsummer_capture_gameplay, makes the key art, icons, tall cover and capsules from a real capture under thestore-artrules, writes the store text and fills every listing detail from the project (GameSoul, project memory, README, what it saw in play), runs the checklist again until it passes, shows the creator the preview link, every image and all text, and goes live withsummer_go_liveafter one yes. It asks the creator once, before anything is uploaded or spent, for what the project can't tell (price, support contact, developer name, release stage), and has the creator confirm the content rating, the content questionnaire and the AI disclosure. It never invents a fact, never edits a screenshot and picks only true tags, genres and features. Library-only, because the installed-description budget is full:release-checklist,publish-your-gameand/summerpoint to it. It uses only operations the engine profile already has, so the tool count does not change. -
Telemetry: a few more fields and a one-time notice. Every field is listed in the README section "Telemetry". Summer never sends prompts, code, file contents, file names or paths, project names, tool arguments or results.
SUMMER_NO_TELEMETRY=1orDO_NOT_TRACK=1turns all of it off.- First run: the first
summercommand on a computer (summer mcptoo) prints a one-time notice to stderr and sends one anonymouscli_first_runline: a random install id, the command name, the agent app and the operating system. Not in CI. Signing in joins that line to the account. - New fields on signed-in tool-call and command lines, when they apply:
projectIdHash(the hash of the random project id the engine already uses for routing; never the project name or path),templateId(the catalog template the project started from; onsummer createalso its library domains),instanceCount(how many game clientsengine.playstarted) andengineState(four yes/no facts onengine_not_running: engine installed, engine running, project open, signed in).
- First run: the first
-
Videos import as Ogg Theora by themselves. Summer Engine plays video only as
.ogv, and an.mp4,.movor.webmimport used to fail and roll back.summer_import_from_url, its batch,summer_import_asset_by_idandsummer_import_assetnow convert a video on the way in: a video Summer generated or stores imports as its Theora rendition from Summer's media host; any other video converts with ffmpeg on this computer when it has Theora (video quality 8, Vorbis audio, same frame rate, at most 1920x1080), else on summerengine.com (needs the Summer sign-in). The.ogvlands at the requested path with the extension swapped, and the answer says so (videoConversions,note). A generated video saved withoutinto a Godot project saves as.ogvtoo. Theanimated-loop,cinematic-cutsceneandtrailer-shotskills no longer tell agents to run ffmpeg by hand. -
From export to live over MCP, with no staff wait. A game goes live as soon as Summer's automated checks pass; Summer's staff review it afterwards, and no tool or skill tells a creator to wait for a review any more.
summer_go_live(store.go_live,summer store go-live): releases the uploaded Build to every platform that passed its checks and publishes the store page, through the same store routes Studio uses, then watches until players get it. It needs no owner approval link while the person's Agent permissions allow Publish (the default; otherwiseneeds_permission). Confirm-gated. It answerslive,blocked(each failure with its fix),needs_changes(Summer's feedback) orwaiting; a hold on Summer's side is reported as Summer's, with nothing to fix. Calling again continues without asking twice.summer_store_set_details(store.set_details): the store page sectionsstore.update_listingdoes not edit: the content questionnaire, the AI disclosure, genres, features, credits, language support and system requirements.summer_publish_buildwaits for Summer's automated checks and reports each platform (checks: passed, or failed withcode,ownerandfix). A running malware scan is a wait, not a failure. Intake refusals the platform names (engine_build_unreleased,malware_detected,verifying_failedand others) come back with a fix.summer.bundle.v2exports are read.summer_export_gameandsummer_publish_buildrefused every export from Summer Engine 0.7.4 and newer (the fixed layout); they now take v2 with its six paths and still take v1.summer_export_gamereports the export's paths.- The
release-checklistskill: before going live, check the export (preset, Summer version, the fixed layout, a server pack for a game with a server), the upload and its checks, the store art per slot and every required listing field, each rule with its MCP check, its fix and the platform rule it comes from. - The engine profile leaves out the hosted
summer_store_releasesandsummer_store_version_status, whichsummer_go_livesupersedes, so the two new tools fit its tool limit.
From adding Summer to an agent to editing a good-looking scene with one OK: summer dev installs the engine (with the person's yes), creates a starter project and opens it; the MCP opens the project itself; agents with no shell use projects.create_local and projects.open_local; Claude Code Desktop's Browser pane shows the game; and summer preview serves the running game to the agent's own browser.
painted-25d-worldplug-in characters are public:SummerEngine/painted-characters(man, woman, man with a sword, old man; 8 directions; idle, walk, run), pinned in the skill with raw-URL imports.painted-25d-world: a 1.8 m/s default walk, and a walk clip whose stride fits it. Cozy, exploration and RPG games walk at about 1.8 m/s and run on Shift at about 4 m/s. The walk cycle's playback stays within about 1.5x its natural speed: when a clip's natural walk is too slow, regenerate it with the brisk long-stride prompt (now the skill's walk prompt, word for word) instead of over-speeding a short-step clip. Stride examples updated to the plug-in sheets (walk 0.94 m per cycle at 1.8 m).painted-25d-worldafter a blind test run and a gait rule.- A first-time agent built a harbour from the skill alone. Its findings are in:
- a project step;
seedream-5-proat 2048x1152 (no Summer image model returns 4K), plus a tiled 4K detail pass;idempotencyKeyandnumImages: 1on every generation;- a lit blockout capture, and the player set up in capture mode;
- no CSG;
- the
.tscnpaint camera line; - two-part gable roofs;
- water blockers and two-sided ground;
- a 14 m room frame;
- the upload fields;
- the plug-in character paths.
- New building blocks:
blockout_builder.gd(a JSON blockout spec),paintcam_check.gd, andtools/(cam.pypixel-to-ground,preview.pywireframe over the concept,overlay.pyalignment check,detail4k.pytiled 4K pass). - Gait: cozy, exploration and RPG games walk by default (about 2 m/s, walk cycle) and run on Shift (about 4 m/s, run cycle). Action games may run by default. Playback stays speed / natural speed.
- A first-time agent built a harbour from the skill alone. Its findings are in:
summer devshows the game in Claude Code Desktop's Browser pane. It adds thesummer-previewentry to.claude/launch.jsonin the folder it runs in (only adds; never in the home folder;cwdset when the project sits below that folder;--no-launch-jsonskips it), so Desktop startssummer previewand checks the game after each edit. TheConnected:line ends with the preview URL (http://localhost:5199) and, outside Desktop,npx -y summer-engine@latest preview --open.projects.open_localdoes the same for the folder the agent session runs in and answerspreview.url.- Launches and installs, follow-ups from review. An editor that exits cleanly (code 0) before its API answers is followed when a new editor takes the project over within 5 s (it restarted itself); otherwise it is reported as closed early, never as a broken install. A stale install lock is taken over by one waiter only (an atomic rename, checked). A second
projects.create_localwith no name makesmy-game-2,my-game-3, ... instead of returning the first game. summer dev [template] [dir]: from nothing to an editor your agent can drive, in one command.npx -y summer-engine@latest devinstalls Summer Engine when it is missing (only with--yesor the person's yes at a terminal; an agent without--yesgetsneeds_confirmationand the question to ask), creates a starter project (the built-in3d-basicunless you name a template) in the project this folder is in, else in this folder when it is empty or only has dotfiles (never the home folder or a filesystem root), else in./my-game, opens it in the background withsummer run's launch and waits up to 3 minutes for the editor's local API, with a progress line every 10 s. It ends with oneConnected:line naming the project and the next step. A folder that already holdsproject.godotis just opened, so running it again is safe.- The MCP opens the project itself. When a tool needs the engine and no editor runs, the engine is installed and the session has a project (the agent's folder or
--project), the local MCP launches it in the background, waits and retries; a slow first open answers "call again in 30 seconds". It never starts a second editor while one is registered for the project, was launched on it and still runs, or does not answer (busy); an editor that exits at once ends the wait, and Linux with no display answers at once. When the agent's folder has no project, it uses the project the lastsummer devopened from that folder (or below it) while that editor runs, for up to 10 minutes. Otherwiseengine_not_runningnames the one step for the case: not installed, ask the person first, thennpx -y summer-engine@latest dev --yes; no project,summer dev; another project open, that project.SUMMER_AUTO_LAUNCH=0turns the launch off. The engine-free note names the 4.x tools (summer_docs_search,summer_assets_generate_*,summer_jobs_get, ...). - New local operations
projects.create_localandprojects.open_local:summer devfor agents with no shell (Claude Desktop, chat apps).summer_projects_create_localwrites a project from a template (3d-basicby default) todir, or to<name>next to the session's project, in the session's folder (one of the person's own inside home), or in~/Documents/Summer(a chat app's server starts in an app folder); never inside another project. A folder that already holdsproject.godotis left as it is, and a slow template download answers "still creating, call again".summer_projects_open_localopens a project in Summer Engine in the background, waits until it connects and binds the session to it; a missing engine is installed only withinstall: true, after the person's yes, and a long install or first open answers "call again in 30 seconds". Both are listed on the v4 surface in the full profile (new toolsetprojects; the cappedengineprofile reaches them throughsummer_call), and run from a shell assummer projects create-local/open-local.engine_not_runningnow names them next tosummer dev. 3d-basiclooks like a game: a procedural sky on a real Environment (ACES tonemapping, ambient light and reflections from the sky), a sun with soft shadows, a tinted ground and one lit hero the camera frames. Before, the sky material was never attached and the scene was a grey box.- Pinned templates download without git.
summer create(andsummer dev) fetch the pinned commit's GitHub tarball, compute the same tree digest from the archive and refuse a mismatch, then fall back togitonly when the tarball path fails. On a Mac without the Command Line Tools this no longer opens their install dialog. summer installnames why it failed:release_info,download,checksum,disk_space,mount,copy,permission,app_running,needs_confirmation,installerorunsupported_platform, in the message (with one next step) and in the usage line, instead ofexit_1. A busy DMG detach no longer fails a finished install, one install runs at a time (~/.summer/install.lock, shared bysummer install,summer dev --yesandprojects.open_local), a non-admin Mac installs to~/Applications, a running engine is never replaced, free space is checked before the download, and the size printed is the real one.- Sign-in is off the build path. The README first run,
/summer:startand the setup prompt build without signing in (engine tools never needed it) and sign in only when a cloud operation answersnot_signed_in./summer:startasks one question ("I'll install Summer Engine (about 660 MB, free) if needed and open a starter project in<folder>. OK?") and runssummer dev. summer engine <action>takes 3.x names (summer engine summer_get_scene_tree,camera-bookmark,search_library) and a miss names the closest actions as commands.painted-25d-world: hard rules from a playtest of the detailed run. Hero scale from door height (2.5 m doors, 2.15 m hero), speeds from each sheet's natural cycle speeds (move on the jog cycle at about 4.2 m/s, Shift sprint up to 1.8x natural, Alt stroll on the walk cycle, never a walk above 1.5x natural) withspeed_scale = speed / naturalso the feet do not slide, a 16 m outdoor view clamped with the real viewport aspect and the painting's edge colour as the clear colour, rooms framed whole, at least one enterable building per village (cut-away room, own paint-over, doors both ways), eight facings by 45 degree sectors (mirroring only where every frame holds up), dormers on the roof slope and door/step slabs hidden in game, contact shadows only in the paint, and a--shots=<dir>run that walks the hero through the level and saves frames from the real window. New building blocks:painted_location.gd(one painted frame) andpainted_door.gd;painted_world.gdnow manages locations, doors and shots;painted_player.gddoes eight facings, jog, sprint and stroll at natural-speed-matched animation speed.- The
summer-cliskill teachessummer preview, so agents use it: run it in the background from the session's folder to watch the game in their own browser (Claude Code Desktop's Browser pane, the Codex app's in-app browser), with Refresh for a game frame now and keys and clicks going to the running game. summer preview: the running game in the agent's own browser. A local page athttp://127.0.0.1:5199shows the running game, or the editor viewport when no game runs, with the project and scene and a status line that says what to do ("Editor not running: run npx -y summer-engine@latest dev"). It shows only the editor of the project it was started for. It adds asummer-previewentry to.claude/launch.jsonin the folder it runs in, so Claude Code Desktop's Browser pane starts it and checks the game after each edit, the way it checks a web app; other entries, settings and the file's indentation stay as they are. The Codex app can open the same URL in its in-app browser. The pace follows the measured capture time: the editor up to 5 frames a second while it changes and 2 when it does not; a game frame about every 20 s, since reading one stalls the game, and a fresh one on load, on Refresh or with?fresh=1. A hidden tab costs nothing. Keys and clicks on the frame reach the running game, and key releases always do. The page is loopback only, makes no outside request, holds no token, and its API refuses requests from other sites.viewportSnapshotandgameSnapshottake{saveFile: false}so the preview never writes frames to the temp folder.summer_game_inputnames the right arrow key code:4194321(it said4194320, which is the up arrow).painted-25d-worldupdated from the second, detailed lab run.- The paint-over no longer passes the whole concept: frontier edit models copied it even over a one-to-one blockout. It passes a 2x2 sheet of material close-ups cropped from the concept, marked style-only, and adds a colour key to the prompt.
- New rule: paint richness follows blockout density (low blocks for flower beds, crates, barrels, benches, window boxes).
- The camera is 30 degrees down, the dimetric angle image models draw as "isometric". The skill shows how to read footprints off the concept by inverting the orthographic camera.
- The follow camera clamps with the real viewport aspect (the editor's game view is not 16:9).
- A 4K painting over a 40 m frame stays sharp at a 2x zoom.
painted-25d-world:painted_player.gdreads an fps dictionary by kind ({"idle": 6, "walk": 10, "run": 14}) as well as by row or one number, so the painted plug-in character sheets (idle, walk and run in four directions) drop in unchanged.- New skill
painted-25d-world: 2D and 2.5D games as a painted world. Build the level from cheap blocks under one fixed orthographic camera (35 degrees down, 45 around), render the blockout, have an image model paint over it strictly image to image, then project the painting back onto the blocks with a shader (paint_projection.gdshader: UV from the paint camera's frame, unshaded). The game camera keeps that direction and only translates; characters are sprite sheets on Y-billboards. Covers concept, one-to-one blockout, the paint-over prompt and alignment check, the 4K rule, interiors as cut-away rooms, characters (turnaround, in-place clips, sheet), weapons and side-scrollers. Building blocks: the shader,painted_world.gd,painted_player.gd,capture_paint_view.gdand an optional Blender route. Library-only (the installed-description budget is full);make-gameandnew-projectnow route every 2D or 2.5D request to it instead of a Node2D root or a 2D template. - The MCP says agents may open the editor and play the game in a window. The server instructions (v4 and 3.x), the agent playbook and the
summer_play,summer_screenshotandsummer_frame_shottexts say it is allowed and expected: play, then look with a screenshot or frame shot, close what you opened, one editor at a time.headless-scriptingnow scopes its--headlessrule to engine processes started from a shell, andnavigate-summerno longer reads as "do not open the editor". No behavior changes.
[4.4.0] - 2026-10-18
Not published to npm: these changes ship in 4.5.0.
The store skills say how an item really becomes buyable and name items by slug, area commands answer --help, and summer content make follows the live make-request ops.
-
summer-storesays how an item becomes buyable today. After the owner approves a sync plan, Summer reviews each item, then the owner activates each approved item in Studio (Review activation), and players can buy it only while the Game is live: it stops while the Game is unlisted and sells again when it is listed. Editing a live item makes a new revision, reviewed and activated again, while the live one keeps selling. It notes the coming change (items go on sale without waiting for Summer's review; staff review afterwards and can take one down) without claiming it has shipped. Slugs: the platform sendsStoreItem.slugandInventoryItem.definition_slugsince 2026-10-16; the in-game getters come with the next Summer Engine release that carries them (0.7.4, in progress). Staging: a separate sign-in and Games, and sandbox Sparks from test payments. -
in-game-purchasesnames items by slug (has_owned_slug,get_slug) instead of hard-codeditem_sworddefinition ids, which differ between staging and production, and sends the rest of the store tosummer-store. -
--helpworks on area commands.summer economy sync-items --helpprints the command's fields as flags, what it does, who approves and the sign-in it needs (it answered "help: not a field of this operation"), andsummer economy --helplists the area's actions. Both work signed out and offline. -
ops describesays which local operations need a sign-in.economy.sync_items,store.upload_file,apps.publish_folderandcontent.makeanswerauth: account(they saidnone); sync and upload need the store sign-in,summer loginorsummer login --store. -
Store tool texts name 4.x operations. The
summer_sync_itemsandsummer_publish_builddescriptions and the upload, export and sync recovery steps saygames.list,games.create,store.publish,store.update_listing,store.set_artandassets.upload_begininstead of the 3.xsummer_store_*tools. -
summer_sync_itemsblocks a Passport collectible with the same slug instead of planning an update to it; Passport items are never synced. -
The shipped operation catalog matches PublicSummerEngine main again: the content area's make-request ops (
content.make,content.claim_make,content.get_make,content.update_make,content.today,content.skip,content.delete_learning) and the current inputs of nine more, andstore.upload_begin'stargetPlatformstext. -
summer content makefollows the live make-request ops (PublicSummerEngine #1151). It opens its own request withcontent.make {contentGameId, referenceId, note, footage}and claims it byrequestId.claimtakes the named request (requestId), else the team's oldest open one. Stages report aspick,study,footage,plan,voice,render,checks,compareandupload, withstaterunning, done or failed, a plainmessage, and on failure the onemissingthing; done on upload carries the piece.notereplacesbrief, andkey,sourceandworkerare gone, matching the hosted op's input. Before this,--claimalways answered nothing_queued and the stage reports were refused. -
summer content make(content.make, MCPsummer_content_make): one finished piece of content for a game, made on this computer and saved to the team's Review. It picks the reference from Summer's library that fits today (a format the game has not posted, what changed in the repo's recent commits, its breakout), studies it (hard cuts, finer cuts for card and page flips, black beats, its caption look), measures the footage folders (motion and brightness per half second, notes fromshots.jsonor<clip>.json), maps each reference shot to a clip window with motion (one lead clip moving forward in time; no repeats on fast cuts; no frozen stretches, black screens or white flashes), cuts to the reference's timings, draws captions in its style with ImageMagick (held, per beat, or word by word from a voice-over's Whisper word times), starts a song where the most cuts land on its accents, mixes at -14 LUFS, then checks the hook, motion per shot, safe zones, length, loudness and gameplay seconds, swaps still shots for moving ones, renders the reference side by side (synced on every beat, our sound only) with a contact sheet, uploads everything and saves the piece (a draft when the hook, motion or safe-zone check fails). It never writes words: the first call answersneeds_wordswith the beats; the caller sends ourlines. A reference that speaks also needsvoiceFile, the lines in the team's own voice (needs_voice). Every stage keeps its record in the work folder, so the sameworkDircontinues where a run stopped, and each file is uploaded once. It runs directly (its own make request, keyed by HEAD and reference, orkey) or withclaimtakes the oldest queued make request (the daily scheduler's, a Change pressed on Today:needs_changeswith what the team asked, thencontent.update_piece), and reports every stage to Today throughcontent.update_make(picking_reference...saving;cannot_makenames the one missing thing).content.save_piecegetswhy(the reference, one line on why it fits today with the commit it saw, the reference's numbers),checkswith measured values (hook_time,lowest_motion,safe_zones,loudness,length,gameplay_seconds),sideBySideItemId,contactSheetItemId,learningIds(the kit learnings the caller applied, listed inneeds_words),makeIdandtomorrow(the next best reference). A reference's study is kept on this computer and reused by every piece that copies it. Needs ffmpeg and ImageMagick; yt-dlp fetches a reference video that is not cached; Whisper only for a voice-over. -
The shipped operation catalog matches PublicSummerEngine main again.
registry/operations/public-catalog.jsonnow listsstore.set_bundles,store.set_sales,economy.propose_itemsand the content area, sosummer ops searchandops describefind them signed out.legacy-names.jsonmapssummer_store_set_bundlesandsummer_store_set_salesto them, andsummer-store's "From a shell" table listssummer store set-bundlesandsummer store set-sales.content make-video --dry-runreplaces the deprecatedmarketing make-video --dry-runin the commands an agent may run without asking. -
Search: a query that is an operation's title, word for word, puts that operation first. "list my games" finds
games.list("List my games") before the content area'scontent.list_games("List the team's games"): the phrase bonus doubles when the query is the whole title. -
summer-storedescribes how creators set bundles and sales. Studio's store page now has Bundles and Sales cards and a "Sold only in bundles" toggle (PublicSummerEngine #1086, live on summerengine.com), so the skill walks through them instead of saying Studio cannot set them yet. It adds the agent path,store.set_bundlesandstore.set_sales: each replaces the whole list,store.get_listingreturnsitemStorewith the totals, Save %, sale prices and the Game's Items, and a refusal names the field. Saving never publishes; players see them after the owner publishes the store page. -
summer-storeknows the store that shipped on 2026-10-16. Game code names items by slug (Studio's "Item key"), which is the same in staging and production, with definition ids as the fallback. The skill says plainly that the slug getters need a Summer version newer than 0.7.3, and that hosted reads return""until slugs are delivered; it shows how to check both. It replaces "code never creates items" with the real rule: game code never creates items at runtime, and creators define them in Studio or throughsummer.items.jsonandsummer_sync_items(dry-run plan, then the owner's approval, at most 50 items per approval, an image for every new item, staging and production through the gateway settings andsummer login --store --force). It also covers unique items,maxOwnedand thealready_ownedrefusal ("Owned" instead of Buy); bundles with "Save N%", the lower price for players who already own some of a bundle's items, timed sales, "This offer ended" and bundle-only items, including what an in-game shop sees of them; and Local Play slugs throughcatalog_item_slugs. -
New skill:
make-content. Ask your agent for content for your game and it makes a finished, postable video: it picks one real reference video from the reference library and copies it beat for beat with your game (same cuts, text pattern and voice structure), captures real gameplay, cuts one version per platform (TikTok, Reels, Shorts, X, YouTube), checks it side by side with the reference and with a fresh critic, and saves it to the team's Today view withcontent.save_piece, with why it fits and its measured checks. It follows every Change note and Skip reason the team left (the kit's learnings) without being told.