Skip to content

Commit dfd910f

Browse files
committed
feat: add icon rendering script and assets
- Introduced a new script to render icons from SVG to various raster formats using Electron. - Added a new SVG icon asset for the application. - Created a temporary directory for rendering images and implemented functionality to generate PNG, ICO, and ICNS files. - Implemented a banner rendering function for promotional use. - Added a launcher script to execute the icon rendering process.
1 parent eee6078 commit dfd910f

43 files changed

Lines changed: 566 additions & 544 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎CONTRIBUTING.md‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ packages/protocol/ Shared operation, value, and error definitions
2020
packages/server/ Local server: Studio bridge, permissions, CLI, MCP
2121
packages/app/ Electron harness and agent adapters
2222
plugin/ Roblox Studio plugin (Luau)
23-
docs/ Architecture, protocol, MCP, plugin, security
23+
assets/ Icons and shared art
2424
```
2525

2626
## Prerequisites
@@ -50,7 +50,7 @@ luu dev # rebuild into the Studio plugins folder on every save
5050
luu run check # stylua, selene, luau-lsp
5151
```
5252

53-
Restart Studio to pick up a new build. See [docs/plugin.md](docs/plugin.md).
53+
Restart Studio to pick up a new build.
5454

5555
## Adding an operation
5656

@@ -99,7 +99,7 @@ Describe intent:
9999

100100
- `plugin: read script source through ScriptEditorService`
101101
- `server: route commands by realm instead of recency`
102-
- `docs: explain the Nil tag`
102+
- `app: name a thread from its first message`
103103

104104
## Pull requests
105105

‎README.md‎

Lines changed: 54 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -1,118 +1,107 @@
1-
# Luu Code
1+
<div align="center">
2+
<img src="assets/banner.png" alt="Luu Code" width="680">
3+
</div>
24

3-
**Use Claude Code or Codex with Roblox Studio.**
5+
<div align="center">
46

5-
Luu Code is an open-source Roblox Studio harness for coding agents. It gives the agent you already use the ability to inspect and edit your place, run it, watch what happens, interact with it, and check its own work.
7+
**Use Claude Code or Codex with Roblox Studio.**
68

7-
It is not another AI Roblox builder. There are no credits to buy, no model API key to provide, and no proprietary agent inside it. You bring Claude Code or Codex; Luu Code brings Roblox Studio.
9+
</div>
810

911
---
1012

11-
## Why
12-
13-
Coding agents are good at editing files and blind to everything else about a Roblox project.
14-
15-
Most of a Roblox game does not exist on disk at all. The DataModel, script sources, GUI layout, and runtime state live inside Studio, where an agent that only reads files cannot reach them.
13+
Luu Code hands your coding agent the keys to your open place. It can read the DataModel, edit scripts, press Play, watch the output, click around the running game, take screenshots, and fix what it broke — while you watch.
1614

17-
So a coding agent can describe a change but not make it, and certainly not check it: it cannot press Play, read the error that appeared, click the button it just wired up, or tell whether any of it worked.
18-
19-
Luu Code gives it the Studio connection that closes that gap. It works through Studio only — it does not read or write your files.
15+
You bring Claude Code or Codex. Luu Code brings Studio. There are no credits, no API key, and no AI of its own.
2016

2117
## What the agent can do
2218

2319
| | |
2420
|---|---|
25-
| **Inspect** | Services, instance trees, properties, attributes, tags, selection, script source |
26-
| **Edit** | Create, delete, rename, reparent, clone, set properties, targeted script edits |
27-
| **Playtest** | Start and stop Play or Run mode, wait for the session to be ready, restart |
28-
| **Observe** | Studio output with cursors, so "what did *my* change break" is answerable |
29-
| **Runtime** | Live players, characters, PlayerGui, camera, and arbitrary Luau evaluation |
30-
| **See** | Screenshots of the Studio window, passed straight into multimodal agents |
31-
| **Interact** | Keyboard, mouse, and GUI clicks resolved to real on-screen elements |
21+
| **Look around** | Services, instance trees, properties, attributes, tags, your selection, script source |
22+
| **Change things** | Create, delete, rename, reparent, clone, set properties, edit scripts |
23+
| **Playtest** | Start and stop Play and Run mode, restart, wait for the game to be ready |
24+
| **Read output** | Everything Studio prints, including the error your last change caused |
25+
| **Poke the game** | Players, characters, PlayerGui, the camera, and Luau it runs live |
26+
| **See the screen** | Screenshots of Studio, handed straight to the agent |
27+
| **Play the game** | Keyboard, mouse, and clicks on real on-screen buttons |
3228

33-
Every operation reports what it actually changed, or fails with a code the agent can act on.
29+
## Before you start
3430

35-
## Install
31+
- **Roblox Studio**
32+
- **Claude Code or Codex**, installed and signed in — Luu Code drives whichever you have
33+
- **Node 20.11+ and pnpm**, to build the app
34+
- **[Luumen](https://luumen.dev) (`luu`)**, to build the Studio plugin
3635

37-
The harness is a pnpm + Turborepo workspace. The Studio plugin is a [Luumen](https://luumen.dev) project, so it is built with `luu`.
36+
## Install
3837

3938
```bash
4039
pnpm install
4140
pnpm build
4241

4342
cd plugin
44-
luu install # Rojo, StyLua, Selene, luau-lsp, Lune, via Rokit (build tooling only)
43+
luu install # build tools, via Rokit
4544
luu build # builds straight into your Studio plugins folder
4645
```
4746

48-
Then restart Roblox Studio. The Luu Code panel appears in the Plugins tab.
47+
Restart Roblox Studio. **Luu Code** appears in the Plugins tab.
4948

50-
While working on the plugin, `luu dev` rebuilds into the plugins folder on every save.
49+
## Start
5150

52-
### First run
51+
```bash
52+
pnpm dev
53+
```
5354

5455
1. Open your place in Roblox Studio.
55-
2. Start Luu Code (`pnpm dev`) or the server alone (`pnpm serve`).
56-
3. Studio shows a six-digit code. Approve it in Luu Code.
57-
4. Pick Claude Code or Codex, and describe what you want changed.
56+
2. Studio shows a six-digit code.
57+
3. Approve it in Luu Code — check the digits match.
58+
4. Pick a model, and say what you want changed.
5859

59-
The pairing step exists so that discovering the local port is not enough to control your Studio session. See [docs/security.md](docs/security.md).
60+
Try:
6061

61-
## Using it from another agent interface
62+
> The shop errors when I click Buy. Play it, find out why, and fix it.
6263
63-
Luu Code exposes the same Roblox capabilities over a local MCP server, so you can keep whatever agent interface you already prefer:
64+
> Make the lobby spawn brighter, then show me a screenshot.
6465
65-
```bash
66-
claude mcp add luu-code -- luu-code-mcp
67-
```
66+
Chats are saved per place. Open a place and its history is there.
6867

69-
```toml
70-
# ~/.codex/config.toml
71-
[mcp_servers.luu-code]
72-
command = "luu-code-mcp"
73-
```
68+
## What it is allowed to do
7469

75-
It attaches to a running Luu Code server if there is one, and starts its own if not. The Electron app does not need to be open. See [docs/mcp.md](docs/mcp.md).
70+
The chip beside the send button controls the agent's access — looking, editing, playtesting, running Luau, sending input, and screenshots, each on its own switch. Turn any of them off mid-conversation and the agent is told it no longer has them.
7671

77-
## Conversations belong to a place
72+
Studio only connects after you approve a pairing code, so knowing the port is not enough to reach your place. Everything runs on `127.0.0.1` and nothing is sent anywhere.
7873

79-
A chat is filed against the Roblox place it is about, not a folder on disk. Open a place, and its past conversations are there; connect a different place, and you get that one's.
74+
Luu Code works through Studio. It does not read or write your files.
8075

81-
Studio has to be connected before a conversation can start, because otherwise there is nowhere to file it.
76+
## Prefer your own terminal?
8277

83-
## Layout
78+
The same Roblox tools are available over MCP, so you can skip the app:
8479

85-
```
86-
packages/protocol/ Shared operation, value, and error definitions
87-
packages/server/ Local server: Studio bridge, permissions, CLI, MCP
88-
packages/app/ Electron harness and agent adapters
89-
plugin/ Roblox Studio plugin (Luau)
90-
docs/ Architecture, protocol, MCP, plugin, security
80+
```bash
81+
claude mcp add luu-code -- luu-code-mcp
9182
```
9283

93-
## Documentation
84+
```toml
85+
# ~/.codex/config.toml
86+
[mcp_servers.luu-code]
87+
command = "luu-code-mcp"
88+
```
9489

95-
- [Architecture](docs/architecture.md) — how the pieces fit and why
96-
- [Protocol](docs/protocol.md) — operations, values, targets, errors
97-
- [MCP setup](docs/mcp.md) — connecting an external agent
98-
- [Studio plugin](docs/plugin.md) — building, installing, capabilities
99-
- [Security and privacy](docs/security.md) — trust model and what stays local
90+
It joins a running Luu Code server, or starts one. The app does not have to be open — only Studio.
10091

10192
## Development
10293

10394
```bash
104-
pnpm build # protocol, server, app, through Turborepo
105-
pnpm test # protocol and server test suites
106-
pnpm typecheck
107-
pnpm check # all of the above, plus the plugin checks
95+
pnpm dev # the app, with reload
96+
pnpm serve # the server on its own
97+
pnpm check # build, typecheck, test, plugin lint
98+
pnpm assets:icons # re-render the icons from assets/icon.svg
10899

109100
cd plugin
110-
luu run check # stylua, selene, luau-lsp
101+
luu dev # rebuild into the plugins folder on every save
111102
```
112103

113-
## Contributing
114-
115-
See [CONTRIBUTING.md](CONTRIBUTING.md). The Studio connection layer is deliberately isolated so that Roblox changes can be absorbed without touching the harness.
104+
See [CONTRIBUTING.md](CONTRIBUTING.md).
116105

117106
## License
118107

‎assets/README.md‎

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# Assets
2+
3+
Shared art for Luu Code: the app icon, the mark, and anything the README or a
4+
release page needs.
5+
6+
| File | Use |
7+
|---|---|
8+
| `icon.svg` | Master app icon. Everything else is rendered from this. |
9+
| `icon.png` | 1024×1024 app icon. Linux, docs, store listings. |
10+
| `icon.ico` | Windows app and taskbar icon (16–256). |
11+
| `icon.icns` | macOS app icon (16–1024). |
12+
| `png/icon-<size>.png` | Individual sizes, 16 through 1024. |
13+
| `mark.svg` | The Luumen bulb on its own, no background. |
14+
| `banner.png` | 1200×480 header image for the README and release notes. |
15+
16+
## Regenerating
17+
18+
Edit `icon.svg`, then:
19+
20+
```bash
21+
pnpm assets:icons
22+
```
23+
24+
That re-renders every PNG, rebuilds `icon.ico` and `icon.icns`, redraws the
25+
banner, and refreshes the copy of the icon the app uses as its favicon. Commit
26+
what changes — the build copies these files, it does not generate them.
27+
28+
## Colours
29+
30+
| | |
31+
|---|---|
32+
| Brand blue | `#3B82F6` |
33+
| Surface | `#0A0A0B` → `#262A34` |
34+
| Wordmark | Syne, 800 |
35+
| Interface text | DM Sans |

‎assets/banner.png‎

186 KB
Loading

‎assets/icon.icns‎

665 KB
Binary file not shown.

‎assets/icon.ico‎

142 KB
Binary file not shown.

‎assets/icon.png‎

462 KB
Loading

‎assets/icon.svg‎

Lines changed: 37 additions & 0 deletions
Loading

‎assets/mark.svg‎

Lines changed: 6 additions & 0 deletions
Loading

‎assets/png/icon-1024.png‎

462 KB
Loading

0 commit comments

Comments
 (0)