Oh and the other three commands.
update()
render()
swap()
are all taken care of by sync()
Update(time) updates things like sprite animation and physics, it moves them along and a specified time, a bit like the stepphysics() command only with a more global and wider influence on AppGameKit objects beyond just the physics engine.
Render() is a pretty easy one, it's "rendering" the image to the backbuffer ready to be displayed to the user. The backbuffer is basically a bit of memory that stores all visual information you create. You'll come across this term a lot in 3D rendering programs as well.
Swap() brings that backbuffer to the screen so the user can see it on their monitor then destroys that data ready to be written again. This means you don't have to clear it yourself with a command like CLS which is "like, so yesteryear!" (sorry my inner Beverly Hills blonde came out there).
This is all covered in the documentation and written far better than I have here, so they are far from undocumented commands, but here's a quick example.
There's no sprites, it's just a counter and a print command so there's no need to use the Update() command at all.
do
count = count + 1
Print(count)
Render()
Swap()
loop
As you can see, it's basically just taken place of Sync().
To be honest these last 3 commands are not that useful to anyone but the most advanced coder, which goes well beyond my own abilities. I can kinda see how they would be useful in Tier 2 when pushing the engine to it's absolute limit and with specific platform SDK commands added into the mix. But all this is done for you by AppGameKit just by typing in Sync()