Fl-AI Me to the Moon
Inspiration
AI agents can already read your inbox, check your calendar and look things up for you, but using them still feels like filling in a form or talking to a terminal. That's a problem when they have real access to your life: you can't see what they're doing, and it's hard to trust them. We wanted agents you could actually live with: somewhere you can watch them work, talk to them like people, and approve anything important before it happens. And, we took the hackathon theme, Fly Me to the Moon, literally.
What it does
Fl-AI Me to the Moon is a cozy, Stardew-style life sim on the Moon where every villager (a "moonfolk") is a real AI agent connected to your real accounts. You rebuild an abandoned lunar colony, and each moonfolk who moves in brings a real skill with them:
- Yutu the Jade Rabbit is your guide and the town's mayor. Once two moonfolk live in town, she can split a bigger job across them.
- Nova the Stargazer searches the web.
- Hoot the Postmaster reads and drafts your Gmail.
- Cog the Timekeeper manages your Google Calendar.
- Mabel the Scholar checks your Canvas courses and deadlines (read-only, and it works at any school).
- Echo the DJ plays and controls your Spotify.
- Tinker the Mechanic works with your GitHub.
- Ada the Team Lead runs the Office, a live view of your coding agents. Every Claude Code subagent walks in and takes a desk, and you can watch its live feed. There's also a corkboard where you brief a team of AI workers who hand in one finished report.
Everything in the game is something an agent is actually doing. A villager walking to the Post Office is reading your inbox. A little star that runs off and glows is one finished tool call, and you pop it for coins. Two villagers meeting and passing a letter is a handoff between agents. A smoking building is a tool that failed. A lantern rising is a finished task.
Nothing leaves your accounts without your OK. Sending an email or booking an event means the moonfolk walks to your door with a letter for you to approve. The same approval can arrive as an iMessage that you answer with "yes".
In the end, your whole colony lives in your iMessage. Every moonfolk who moves in joins your texts, and a text reaches the real agent, tools and all. Text "Hoot: anything important in my inbox?", "Mabel: what's due this week?" or "Nova: when's the next eclipse?" and they do the work and text you back. Anything else goes to Yutu, who can split a bigger job across the whole town. Anything that would send an email or book an event texts you first, and you reply YES or NO. By the time the colony is complete, you can put the game down and still use every agent's skills from your phone.
You talk to them like people. Walk up and just speak (the mic is optional). They answer out loud in speech bubbles with their own voices, and you can interrupt them. Every chat, in person or by text, builds the friendship: they remember what you tell them, and friendship hearts grow.
The game is fun on its own. It has an animated intro and story chapters, a town of four landmarks to restore from ruins to grand, and materials to gather: boulders, moondust, falling meteors and 12 hidden Moon Shards. There are daily colony requests, a decoration shop, paint-your-own paths, and moonfolk who wander, gossip and wish for things for their yards.
It's multiplayer. Sign in with Google and you get your own private village, with its own save and its own connected accounts. Add friends by code, fly your rocket to their island, chat, help them gather and leave gifts. You can only ask a friend's moonfolk for help if the owner allows it, and even then it runs on your own accounts.
How we built it
- Game client: TypeScript + Phaser 3, bundled with Vite. The game renders at art resolution with whole-number scaling, so every pixel is the same size. The music is a chiptune tune played live with the Web Audio API, with no audio files.
- Agent server: Node.js + TypeScript with a WebSocket (
ws) connection to the game. Each moonfolk runs its own tool-use loop, and every tool call is sent to the game as it happens so the villagers can act it out. - AI models:
- Groq, running
openai/gpt-oss-120bas the villagers' main brain andopenai/gpt-oss-20bwith browser search for Nova's web research. - Anthropic Claude, via the Anthropic SDK, as an optional brain and for the Office's AI-team lead.
- OpenRouter, so players can bring their own model for the AI team.
- Groq, running
- APIs:
- Google Gmail and Calendar APIs (OAuth with
google-auth-library) - Canvas LMS REST API
- Spotify Web API and Web Playback SDK
- GitHub REST API
- Photon Spectrum for iMessage texting
- ElevenLabs for villager voices, falling back to the browser's built-in voices
- The browser's Web Speech API for hands-free talking
- Google Gmail and Calendar APIs (OAuth with
- The Office reads Claude Code's local session logs (read-only) to show your coding agents live.
- Online: a small gateway handles Google sign-in and starts a separate copy of the colony server for each player, each with its own save and its own connections. The deploy target is Render.
Build story
What we finished during the build window: everything above. That includes the full game loop, story and intro, all eight moonfolk wired to real services, approvals by letter and by text, doing real work over iMessage, voice conversation, the Office, and online multiplayer with friends and visits.
Challenges:
- Making agents legible. Deciding what each tool call looks like in the world took a lot of iteration. It had to be readable at a glance without cluttering a cozy game.
- Safety with real accounts. Reading is free, but sending and booking always wait for approval. Canvas is read-only. Email and web content are treated as data, never as instructions, to guard against prompt injection.
- Rate limits. Groq's free tier is fast but small. Instead of showing errors, villagers show "waiting for the line to Earth" and retry.
- Multiplayer. Giving every player their own isolated server copy was the easy part. The harder part was getting rid of "ghost" players left behind when someone flew home, and noticing when another browser tab signed in as a different account.
- Pixel-perfection. We never scale or rotate sprites, so every animation and UI element had to be drawn to the pixel.
Surprises: watching real Claude Code subagents walk into the Office and sit down at desks was more fun than we expected. Some of our best bugs were tiny: one pop-up never showed what you'd gathered because every server event reused the field that held its position for a timestamp.
What we learned: people trust agents more when they can see them work and have to say "yes" before anything leaves their account. Giving agents a place, a routine and a personality makes them much easier to understand than a log.
What's next: a public deployment with a persistent disk and Google's app verification, more moonfolk for more services, and a mobile-friendly version so you can check on your colony from your phone.
Credits
- Open-source libraries and services we built on: Phaser 3, Vite, TypeScript, Node.js,
ws,tsx/esbuild,qrcode, the Groq, Anthropic, Google APIs and Spotify SDKs, Photon Spectrum, ElevenLabs, OpenRouter and Render. The Jade Rabbit is from the traditional Moon legend. The theme, Fly Me to the Moon, is HackWashU's. - AI coding assistance: we used Claude Code while building, and our commit history shows it.
- Our contribution: the game design, story, all of the pixel art and music (made in code), the agent-to-game-world mapping, the approval system, the multiplayer server and every integration were built by our team during the hackathon.
Source code: https://github.com/XDTerminated/hackwashu-2026 Try it: https://moonstead.onrender.com/
Built With
- anthropic
- canvas-lms
- claude
- claude-code
- elevenlabs
- github-api
- gmail-api
- google-calendar-api
- google-oauth
- gpt-oss
- groq
- imessage
- javascript
- node.js
- openrouter
- phaser.js
- photon
- spotify
- typescript
- vite
- web-audio-api
- web-speech-api
- websockets
Log in or sign up for Devpost to join the conversation.