Gandi CLILet AI build Scratch projects

一句话,
让 AI 做出
一整款游戏

给 AI 用的命令行。连上 Gandi 编辑器,用文本读、改、运行、测试 Scratch 作品。代码、美术、音乐,AI 一个人写完。

hello · 示例程序
向下 一句话安装 → 示意:输入为演示,积木来自示例程序。

01DSL

积木 ⇄ 文本,
结构一致

program.dsl

        

    02写法

    接近 JavaScript,
    AI 不用学新语法

    自研的积木文本语法。变量、循环、分支、模板字符串、对象与列表,都是 AI 最熟悉的写法;其余积木统一写成 category.block(…)。

    data-structures · 示例程序
    
          

    写法像 JavaScript,但只描述积木,从不被执行;部分积木为 Gandi 专有。对象与列表需先安装「高级数据结构」扩展。

    • 分支if (…) { } else if (…) { }
    • 循环for (let i = 1; i <= 5; i++)
    • 变量score += 1;
    • 模板`第 ${i} 个`
    • 对象player.hp += 10;
    • 列表log.push(i * 2);
    0.1.1 · 块式
    
          
    0.2.0 · JS 风格
    
          

    03能力

    AI 需要的,
    都在命令行里

    多场景

    带参数切换场景。命令行用 gandi scenes 管理,gandi run --scene 指定场景。示例程序。

    角色与分组

    ▾战斗
    Player
    Bullet
    ▾敌人
    Enemy
    Director

    名字里写 战斗//Player,角色就进文件夹。

    测试与断言

    $ gandi assert --json '{"checks":[
      "score >= 3",
      "Hero.x > 0"
    ]}'
    $ gandi test REF --expected-rev REV --strict-exit

    断言、保存在作品里的测试套件、逐帧输入。勾选为示意;有 setup 的用例属于受控状态,会如实标出。

    智能排布

    原版「整理积木」新排布

    gandi arrange:按逻辑分组、分列、按尺寸装箱,整次排布是编辑器里的一步撤销。

    Ctrl + V,
    文本直接变积木

    编辑器内:剪贴板里是 DSL,在工作区按 Ctrl V:积木落在鼠标处、不压住已有脚本、新脚本自动选中,整次粘贴是一步撤销。编译失败则一块都不插,并提示第一条诊断。

    右侧为编辑器真实截图,拖动对比。

    粘贴前粘贴后

    对象 · 列表 · 集合

    
              

    对象字面量、属性自增、列表 push,直接对应「高级数据结构」扩展的积木。需先安装该扩展。示例程序。

    扩展自动安装

    读到没装的扩展,先按写入同样的确认与权限安装。扩展会运行第三方代码。

    版本保护

    $ gandi write REF --file draft.js \
        --base-rev REV
    E_CONFLICT

    每次写入带修订号。冲突被拒绝,而不是悄悄覆盖。

    04流程

    六步,
    一个闭环

    1. start
    2. read
    3. check
    4. write
    5. run
    6. verify
    01

    start

    启动本机后台服务,在编辑器里点一次「连接 CLI」,你在本机授权页确认。

    真实输出 · 服务未启动时
    $ gandi doctor
    {"bridge":false,"paired":false,"bound":false,"next":"gandi start"}
    $ gandi start
    # 连上编辑器后:gandi editors · gandi use EDITOR_ID · gandi bind
    02

    read

    编辑器是一棵虚拟源码树。先看概况,再读具体页面,读回来的内容带修订号。

    来自 gandi --help
    $ gandi overview
    $ gandi files --kind blocks
    $ gandi read REF --offset 1 --limit 100
    $ gandi grep 'score' --glob '**/*.js' --context 2
    # 输出连上编辑器后才有 · 示意
    03

    check

    只检查不写入。报错带行、列和改法。

    诊断条目为真实编译器输出 · 外层为示意
    $ gandi check REF --file draft.js
    {"code":"E_UNKNOWN_VAR","message":"Unknown identifier zzz; declare it first",
     "line":2,"column":3,"severity":"error",
     "fix":"const zzz = sprite.variable(\"zzz\", 0);"}
    04

    write

    带着读到的修订号写入。也可以先 --dry-run 预览精确替换的差异。

    来自 gandi --help
    $ gandi write REF --file draft.js --base-rev REV
    $ gandi edit REF --edits-file edits.json --base-rev REV --dry-run
    # 修订号过期 → E_CONFLICT,不会覆盖
    05

    run

    在后台运行器里逐帧运行,注入键盘与鼠标,不碰你正在编辑的作品。

    入参来自 guide testing · 输出为示意
    $ gandi run --json '{"frames":60,"inputs":[
        {"frame":2,"key":"space","down":true},
        {"frame":12,"key":"space","down":false}]}'
    $ gandi state · gandi logs · gandi view --output stage.png
    06

    verify

    断言通过才算数。保存成测试套件,每个用例从同一份快照、在全新的运行时里开始。

    来自 gandi --help · 输出为示意
    $ gandi assert --json '{"checks":["score >= 3","Hero.x > 0"]}'
    $ gandi test REF --expected-rev REV --strict-exit
    $ gandi export --output NEW.sb3

    终端内容为示意,实际输出以你的作品为准。

    06一整款游戏

    一句话,
    一整款游戏

    代码、美术、音乐,
    AI 一个人写完

    01

    写代码

    所有玩法逻辑,直接写成原生积木。写完即检查,再逐帧运行、断言、保存为测试。

    check · run · assert

    02

    画美术

    角色造型、背景与界面,由 AI 自己画,直接写进作品。

    造型 · 背景 · 界面

    03

    作音乐

    旋律、伴奏与音效,由 AI 自己作,直接写进作品。

    旋律 · 伴奏 · 音效

    07安装

    让你的 AI Agent 学会做游戏

    安装只要一句话。丢给 AI,它自己就会了。

    发给你的 AI

    帮我安装 npm install -g @kukemc/gandi-cli 并查看 gandi --help。

    复制,粘贴给任何 AI Agent
    AI Agent示意

    前两行为示意;其余是 gandi --help 的真实输出节选,原文未改。

    或者自己装
    打开编辑器 ↗

    当前版本 0.2.0。文本写法、智能排布、Ctrl + V 粘贴等功能在 Gandi 编辑器中执行。首次授权需要你在本机授权页确认,随时可用 gandi revoke 撤销;扩展安装会运行第三方代码;浏览器可能需要放行本地网络访问。