GrowBlocks is a browser gaming platform for LLM-native developers: creators who use coding agents to build games. Its Dev Kit provides a JavaScript API, game engine, characters, and multiplayer rooms, with instructions for Claude Code, Cursor, and similar tools.

Sage extends that toolkit with runtime decisions through gb.ai. Rogblox, a turn-based 3D roguelike built for the platform, demonstrates the workflow with 40 monster types and adaptive dungeon encounters authored through natural language and LLM assistance.
Levanto Labs’ Sage decision model caught my eye because of its ability to return accurate judgment cheaper and faster than an LLM, but the real unlock for Growblocks was incorporating it as a developer tool to enable LLM-native developers to rapidly build game mechanics using natural language with Sage instead of complex deterministic codebases.
CEO of Growblocks
From descriptions to decisions
Conventional combat AI encodes action priorities, conditions, and state transitions in code or behavior trees. Developers implement those rules and test how they interact. LLMs can help generate this logic, but it still needs validation.
Within the existing game, Rogblox’s developer used two authoring passes:
- Define the monsters. Describe each type’s personality and characteristics, including what makes it attack, retreat, or rely on allies.
- Draft the strategies. Use an LLM to turn those descriptions into combat instructions that Sage reads alongside the current game state and legal actions.
At runtime, Sage selects a move and the game executes it. A personality change can be made in the description, reducing the need to rewrite selection rules or tune weights for each type.
Movement, damage, legal actions, integration, and playtesting remain part of development.
A personality becomes a playable decision
The Goblin Intern fears the hero, but fears its supervisor more. Its description says it becomes braver when allies outnumber the player or the player is hurt.
Sage receives that personality alongside health, nearby allies, and an 11 × 11 map. Each available action includes its consequences: whether an attack can reach the player, how much damage it deals, or what retreat would do. The selected move appears above the monster before the player acts.
All monsters needing a choice share one batched request per round. A monster with only one legal move needs no model decision. A null answer becomes a visible hesitation, which the game presents as a question mark above the monster.
Combat AI, in code
Compare this example of deterministic combat AI from Rogblox's combat system.
Tune the weights
Conditions and numeric priorities shape the monster’s choices.
const h = game.hero,
far = game.dist(e, h),
hurt = e.hp / e.max;
const w = {};
for (const o of options)
w[o.option] = 0.1;
if (w.attack !== undefined)
w.attack = e.type === 'rat' ? 1.2
: e.type === 'skeleton' ? 1.4
: 1.0 - (1 - hurt) * 0.6;
if (w.flee !== undefined)
w.flee = hurt < 0.5 ? 0.9 : 0.12;
if (w.call_supervisor !== undefined)
w.call_supervisor =
far <= 3 ? 0.35 : 0.15;
if (w.jeer !== undefined)
w.jeer = far > 4 ? 0.3 : 0.12;Excerpt from the local fallback. More action weights and weighted sampling follow.
Ask for a decision
Personality, current state, and legal moves become a Choice question.
{
"content": "A nervous goblin intern on day three of the job. Scared of the hero, but far more scared of Gorbo, his supervisor, who is watching and fires interns who don't fight. Brave when the hero is hurt or when he outnumbers them.\nYou are Goblin Intern (Y), 2/2 hearts. The hero (H) has 11/12 hearts. Allies (e): Goblin Intern.\nMap around you (# blocked, ^ known trap): …",
"questions": [
{
"id": "goblin3",
"kind": "choice",
"instructions": "You are the Goblin Intern. Pick your move for this round, true to your personality.",
"options": [
{
"option": "attack",
"description": "Go after the hero and stab for 1. They are 3 tiles away; you can reach them this turn. They see this coming and may step away."
},
{
"option": "flee",
"description": "Back away from the hero. You have 2 of 2 hearts."
},
{
"option": "jeer",
"description": "Stay put and make rude noises. Achieves nothing, and Gorbo is writing down who isn't fighting."
}
]
}
]
}Example from the integration write-up. Personality and state are supplied with the available choices; the map is abbreviated.
The local code is excerpted from Rogblox’s brain.js. The Sage example shows a Goblin Intern request from the integration write-up, including its personality and three available choices; the map is abbreviated. Each monster’s request joins the same round’s batch.
The local implementation remains available as a fallback. Both paths use the game’s action system; movement, damage, and legal-action checks stay in game code. With Sage, developers can change the personality text without adding another action-weight condition.
The same workflow applies to dungeon design
Developers can describe pacing goals to help author encounters and selection instructions. Rogblox gives Sage the player’s health, deck, resources, and run history. Sage assesses difficulty and chooses room line-ups from 111 authored encounters.
The seeded generator builds rooms, corridors, traps, and props. Sage controls encounter composition and difficulty within that generated layout.
| Decision | Sage output | Game behavior |
|---|---|---|
| Monster action | Choice | Execute a move from the legal options and show its intent to the player. |
| Floor difficulty | Scale, 0–4 | Set pacing; scores of 3 or 4 add a heart to non-boss monsters. |
| Room encounter | Choice | Select an eligible line-up for each fight room. |
Available to other GrowBlocks developers
GrowBlocks Dev Kit SDK 1.2 exposes the same decision types to every game through gb.ai. Developers supply game state, instructions, and allowed choices. The platform manages Sage access, rate limits, and per-game allowances.
The Dev Kit is in beta. Developers can build and test games locally, upload a build, and share a test link. GrowBlocks reviews games and updates before public release.
Rogblox already groups requests as {content, questions}, matching gb.ai.decideGroups. That removes the need for a separate Sage proxy in its GrowBlocks build. SDK documentation, type definitions, and worked examples also give coding agents the context to implement combat and dungeon decisions.
Observed during development
The supplied development log summary records 557 batched calls. Calls run between turns. A local fallback takes over if a request fails or exceeds 3.5 seconds.
Rogblox’s web build already uses Sage. Its GrowBlocks build is scheduled to switch from local decisions to gb.ai in the next test build.
Sources
Rogblox integration write-up, developer-workflow account, and Gio Sanchez’s supplied quote, September 2026. Implementation details and measurements are reported by the project team. Platform workflow: GrowBlocks developer documentation. This case study reflects the supplied September 2026 development status.
Build with Sage
Start with one decision.
Bring structured intelligence to your application.
