roblox-opencode 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +112 -122
- package/commands/setup-game.md +108 -108
- package/commands/sync-check.md +53 -53
- package/core/roblox-core.md +93 -93
- package/dist/server.js +189 -167
- package/package.json +35 -35
- package/skills/roblox-analytics/SKILL.md +277 -277
- package/skills/roblox-analytics/references/event-batcher.luau +75 -75
- package/skills/roblox-animation-vfx/SKILL.md +1325 -1325
- package/skills/roblox-architecture/SKILL.md +863 -863
- package/skills/roblox-architecture/references/combat-systems.md +1381 -1381
- package/skills/roblox-code-review/SKILL.md +686 -686
- package/skills/roblox-data/SKILL.md +889 -889
- package/skills/roblox-data/references/inventory-systems.md +1729 -1729
- package/skills/roblox-debug/SKILL.md +98 -98
- package/skills/roblox-gui/SKILL.md +1103 -1103
- package/skills/roblox-gui-fusion/SKILL.md +150 -150
- package/skills/roblox-gui-fusion/references/inventory.luau +427 -427
- package/skills/roblox-gui-fusion/references/settings-menu.luau +579 -579
- package/skills/roblox-gui-fusion/references/shop.luau +411 -411
- package/skills/roblox-luau-mastery/SKILL.md +1519 -1519
- package/skills/roblox-monetization/SKILL.md +1084 -1084
- package/skills/roblox-monetization/references/process-receipt.luau +131 -131
- package/skills/roblox-networking/SKILL.md +669 -669
- package/skills/roblox-networking/references/remote-validator.luau +193 -193
- package/skills/roblox-publish-checklist/SKILL.md +127 -127
- package/skills/roblox-runtime/SKILL.md +753 -753
- package/skills/roblox-sharp-edges/SKILL.md +294 -294
- package/skills/roblox-sync/SKILL.md +126 -126
- package/skills/roblox-testing/SKILL.md +943 -943
- package/skills/roblox-tooling/SKILL.md +149 -149
- package/vendor/LICENSES/ProfileStore-LICENSE +201 -201
- package/vendor/LICENSES/RbxUtil-LICENSE +7 -7
- package/vendor/LICENSES/promise-LICENSE +20 -20
- package/vendor/LICENSES/t-LICENSE +21 -21
- package/vendor/LICENSES/testez-LICENSE +200 -200
- package/vendor/README.md +83 -83
- package/vendor/fusion/Animation/ExternalTime.luau +83 -83
- package/vendor/fusion/Animation/Spring.luau +321 -321
- package/vendor/fusion/Animation/Stopwatch.luau +127 -127
- package/vendor/fusion/Animation/Tween.luau +187 -187
- package/vendor/fusion/Animation/getTweenDuration.luau +27 -27
- package/vendor/fusion/Animation/getTweenRatio.luau +47 -47
- package/vendor/fusion/Animation/lerpType.luau +163 -163
- package/vendor/fusion/Animation/packType.luau +99 -99
- package/vendor/fusion/Animation/springCoefficients.luau +80 -80
- package/vendor/fusion/Animation/unpackType.luau +102 -102
- package/vendor/fusion/Colour/Oklab.luau +70 -70
- package/vendor/fusion/Colour/sRGB.luau +54 -54
- package/vendor/fusion/External.luau +167 -167
- package/vendor/fusion/ExternalDebug.luau +69 -69
- package/vendor/fusion/Graph/Observer.luau +113 -113
- package/vendor/fusion/Graph/castToGraph.luau +28 -28
- package/vendor/fusion/Graph/change.luau +80 -80
- package/vendor/fusion/Graph/depend.luau +32 -32
- package/vendor/fusion/Graph/evaluate.luau +55 -55
- package/vendor/fusion/Instances/Attribute.luau +57 -57
- package/vendor/fusion/Instances/AttributeChange.luau +46 -46
- package/vendor/fusion/Instances/AttributeOut.luau +63 -63
- package/vendor/fusion/Instances/Child.luau +21 -21
- package/vendor/fusion/Instances/Children.luau +147 -147
- package/vendor/fusion/Instances/Hydrate.luau +32 -32
- package/vendor/fusion/Instances/New.luau +52 -52
- package/vendor/fusion/Instances/OnChange.luau +49 -49
- package/vendor/fusion/Instances/OnEvent.luau +53 -53
- package/vendor/fusion/Instances/Out.luau +69 -69
- package/vendor/fusion/Instances/applyInstanceProps.luau +148 -148
- package/vendor/fusion/Instances/defaultProps.luau +194 -194
- package/vendor/fusion/LICENSE +21 -21
- package/vendor/fusion/Logging/formatError.luau +48 -48
- package/vendor/fusion/Logging/messages.luau +51 -51
- package/vendor/fusion/Logging/parseError.luau +24 -24
- package/vendor/fusion/Memory/checkLifetime.luau +133 -133
- package/vendor/fusion/Memory/deriveScope.luau +23 -23
- package/vendor/fusion/Memory/deriveScopeImpl.luau +44 -44
- package/vendor/fusion/Memory/doCleanup.luau +78 -78
- package/vendor/fusion/Memory/innerScope.luau +33 -33
- package/vendor/fusion/Memory/legacyCleanup.luau +17 -17
- package/vendor/fusion/Memory/needsDestruction.luau +16 -16
- package/vendor/fusion/Memory/poisonScope.luau +33 -33
- package/vendor/fusion/Memory/scopePool.luau +54 -54
- package/vendor/fusion/Memory/scoped.luau +26 -26
- package/vendor/fusion/Memory/whichLivesLonger.luau +74 -74
- package/vendor/fusion/RobloxExternal.luau +97 -97
- package/vendor/fusion/State/Computed.luau +138 -138
- package/vendor/fusion/State/For/Disassembly.luau +210 -210
- package/vendor/fusion/State/For/ForTypes.luau +30 -30
- package/vendor/fusion/State/For/init.luau +109 -109
- package/vendor/fusion/State/ForKeys.luau +93 -93
- package/vendor/fusion/State/ForPairs.luau +96 -96
- package/vendor/fusion/State/ForValues.luau +93 -93
- package/vendor/fusion/State/Value.luau +87 -87
- package/vendor/fusion/State/castToState.luau +25 -25
- package/vendor/fusion/State/peek.luau +30 -30
- package/vendor/fusion/Types.luau +314 -314
- package/vendor/fusion/Utility/Contextual.luau +90 -90
- package/vendor/fusion/Utility/Safe.luau +22 -22
- package/vendor/fusion/Utility/isSimilar.luau +29 -29
- package/vendor/fusion/Utility/merge.luau +35 -35
- package/vendor/fusion/Utility/nameOf.luau +34 -34
- package/vendor/fusion/Utility/never.luau +13 -13
- package/vendor/fusion/Utility/nicknames.luau +10 -10
- package/vendor/fusion/Utility/xtypeof.luau +26 -26
- package/vendor/fusion/init.luau +82 -82
- package/vendor/profilestore/init.luau +2242 -2242
- package/vendor/promise/init.luau +1982 -1982
- package/vendor/rbxutil/buffer-util/Buffer.test.luau +25 -25
- package/vendor/rbxutil/buffer-util/BufferReader.luau +228 -228
- package/vendor/rbxutil/buffer-util/BufferWriter.luau +269 -269
- package/vendor/rbxutil/buffer-util/DataTypeBuffer.luau +223 -223
- package/vendor/rbxutil/buffer-util/Types.luau +60 -60
- package/vendor/rbxutil/buffer-util/index.d.ts +153 -153
- package/vendor/rbxutil/buffer-util/init.luau +41 -41
- package/vendor/rbxutil/buffer-util/package.json +16 -16
- package/vendor/rbxutil/buffer-util/wally.toml +9 -9
- package/vendor/rbxutil/comm/Client/ClientComm.luau +232 -232
- package/vendor/rbxutil/comm/Client/ClientRemoteProperty.luau +156 -156
- package/vendor/rbxutil/comm/Client/ClientRemoteSignal.luau +109 -109
- package/vendor/rbxutil/comm/Client/init.luau +135 -135
- package/vendor/rbxutil/comm/Server/RemoteProperty.luau +295 -295
- package/vendor/rbxutil/comm/Server/RemoteSignal.luau +211 -211
- package/vendor/rbxutil/comm/Server/ServerComm.luau +211 -211
- package/vendor/rbxutil/comm/Server/init.luau +140 -140
- package/vendor/rbxutil/comm/Types.luau +18 -18
- package/vendor/rbxutil/comm/Util.luau +27 -27
- package/vendor/rbxutil/comm/init.luau +35 -35
- package/vendor/rbxutil/comm/wally.toml +13 -13
- package/vendor/rbxutil/component/init.luau +759 -759
- package/vendor/rbxutil/component/init.test.luau +311 -311
- package/vendor/rbxutil/component/wally.toml +14 -14
- package/vendor/rbxutil/concur/init.luau +542 -542
- package/vendor/rbxutil/concur/init.test.luau +364 -364
- package/vendor/rbxutil/concur/wally.toml +8 -8
- package/vendor/rbxutil/enum-list/init.luau +101 -101
- package/vendor/rbxutil/enum-list/init.test.luau +91 -91
- package/vendor/rbxutil/enum-list/wally.toml +8 -8
- package/vendor/rbxutil/find/index.d.ts +20 -20
- package/vendor/rbxutil/find/init.luau +44 -44
- package/vendor/rbxutil/find/package.json +17 -17
- package/vendor/rbxutil/find/wally.toml +8 -8
- package/vendor/rbxutil/input/Gamepad.luau +559 -559
- package/vendor/rbxutil/input/Keyboard.luau +124 -124
- package/vendor/rbxutil/input/Mouse.luau +278 -278
- package/vendor/rbxutil/input/PreferredInput.luau +91 -91
- package/vendor/rbxutil/input/Touch.luau +120 -120
- package/vendor/rbxutil/input/init.luau +33 -33
- package/vendor/rbxutil/input/wally.toml +12 -12
- package/vendor/rbxutil/loader/index.d.ts +15 -15
- package/vendor/rbxutil/loader/init.luau +137 -137
- package/vendor/rbxutil/loader/wally.toml +8 -8
- package/vendor/rbxutil/log/index.d.ts +38 -38
- package/vendor/rbxutil/log/init.luau +746 -746
- package/vendor/rbxutil/log/wally.toml +8 -8
- package/vendor/rbxutil/net/init.luau +190 -190
- package/vendor/rbxutil/net/wally.toml +8 -8
- package/vendor/rbxutil/option/index.d.ts +44 -44
- package/vendor/rbxutil/option/init.luau +489 -489
- package/vendor/rbxutil/option/init.test.luau +342 -342
- package/vendor/rbxutil/option/wally.toml +8 -8
- package/vendor/rbxutil/pid/index.d.ts +53 -53
- package/vendor/rbxutil/pid/init.luau +195 -195
- package/vendor/rbxutil/pid/package.json +16 -16
- package/vendor/rbxutil/pid/wally.toml +9 -9
- package/vendor/rbxutil/quaternion/index.d.ts +117 -117
- package/vendor/rbxutil/quaternion/init.luau +570 -570
- package/vendor/rbxutil/quaternion/package.json +16 -16
- package/vendor/rbxutil/quaternion/wally.toml +9 -9
- package/vendor/rbxutil/query/index.d.ts +43 -43
- package/vendor/rbxutil/query/init.luau +117 -117
- package/vendor/rbxutil/query/package.json +18 -18
- package/vendor/rbxutil/query/wally.toml +9 -9
- package/vendor/rbxutil/sequent/index.d.ts +28 -28
- package/vendor/rbxutil/sequent/init.luau +340 -340
- package/vendor/rbxutil/sequent/package.json +16 -16
- package/vendor/rbxutil/sequent/wally.toml +9 -9
- package/vendor/rbxutil/ser/init.luau +175 -175
- package/vendor/rbxutil/ser/init.test.luau +50 -50
- package/vendor/rbxutil/ser/wally.toml +11 -11
- package/vendor/rbxutil/shake/index.d.ts +36 -36
- package/vendor/rbxutil/shake/init.luau +532 -532
- package/vendor/rbxutil/shake/init.test.luau +267 -267
- package/vendor/rbxutil/shake/package.json +16 -16
- package/vendor/rbxutil/shake/wally.toml +9 -9
- package/vendor/rbxutil/signal/index.d.ts +100 -100
- package/vendor/rbxutil/signal/init.luau +432 -432
- package/vendor/rbxutil/signal/init.test.luau +190 -190
- package/vendor/rbxutil/signal/package.json +17 -17
- package/vendor/rbxutil/signal/wally.toml +9 -9
- package/vendor/rbxutil/silo/TableWatcher.luau +65 -65
- package/vendor/rbxutil/silo/Util.luau +55 -55
- package/vendor/rbxutil/silo/init.luau +338 -338
- package/vendor/rbxutil/silo/init.test.luau +215 -215
- package/vendor/rbxutil/silo/wally.toml +8 -8
- package/vendor/rbxutil/spring/index.d.ts +40 -40
- package/vendor/rbxutil/spring/init.luau +97 -97
- package/vendor/rbxutil/spring/package.json +17 -17
- package/vendor/rbxutil/spring/wally.toml +8 -8
- package/vendor/rbxutil/stream/index.d.ts +88 -88
- package/vendor/rbxutil/stream/init.luau +597 -597
- package/vendor/rbxutil/stream/package.json +18 -18
- package/vendor/rbxutil/stream/wally.toml +9 -9
- package/vendor/rbxutil/streamable/Streamable.luau +202 -202
- package/vendor/rbxutil/streamable/StreamableUtil.luau +80 -80
- package/vendor/rbxutil/streamable/init.luau +8 -8
- package/vendor/rbxutil/streamable/wally.toml +12 -12
- package/vendor/rbxutil/symbol/init.luau +56 -56
- package/vendor/rbxutil/symbol/init.test.luau +37 -37
- package/vendor/rbxutil/symbol/wally.toml +8 -8
- package/vendor/rbxutil/table-util/init.luau +938 -938
- package/vendor/rbxutil/table-util/init.test.luau +439 -439
- package/vendor/rbxutil/task-queue/index.d.ts +27 -27
- package/vendor/rbxutil/task-queue/init.luau +97 -97
- package/vendor/rbxutil/task-queue/wally.toml +8 -8
- package/vendor/rbxutil/timer/index.d.ts +81 -81
- package/vendor/rbxutil/timer/init.luau +249 -249
- package/vendor/rbxutil/timer/init.test.luau +73 -73
- package/vendor/rbxutil/timer/wally.toml +11 -11
- package/vendor/rbxutil/tree/index.d.ts +15 -15
- package/vendor/rbxutil/tree/init.luau +137 -137
- package/vendor/rbxutil/tree/wally.toml +8 -8
- package/vendor/rbxutil/trove/index.d.ts +46 -46
- package/vendor/rbxutil/trove/init.luau +787 -787
- package/vendor/rbxutil/trove/init.test.luau +203 -203
- package/vendor/rbxutil/trove/wally.toml +8 -8
- package/vendor/rbxutil/typed-remote/init.luau +196 -196
- package/vendor/rbxutil/typed-remote/wally.toml +8 -8
- package/vendor/rbxutil/wait-for/index.d.ts +17 -17
- package/vendor/rbxutil/wait-for/init.luau +257 -257
- package/vendor/rbxutil/wait-for/init.test.luau +182 -182
- package/vendor/rbxutil/wait-for/wally.toml +11 -11
- package/vendor/t/t.lua +1350 -1350
- package/vendor/testez/Context.lua +26 -26
- package/vendor/testez/Expectation.lua +311 -311
- package/vendor/testez/ExpectationContext.lua +38 -38
- package/vendor/testez/LifecycleHooks.lua +89 -89
- package/vendor/testez/Reporters/TeamCityReporter.lua +101 -101
- package/vendor/testez/Reporters/TextReporter.lua +105 -105
- package/vendor/testez/Reporters/TextReporterQuiet.lua +96 -96
- package/vendor/testez/TestBootstrap.lua +146 -146
- package/vendor/testez/TestEnum.lua +27 -27
- package/vendor/testez/TestPlan.lua +304 -304
- package/vendor/testez/TestPlanner.lua +39 -39
- package/vendor/testez/TestResults.lua +111 -111
- package/vendor/testez/TestRunner.lua +188 -188
- package/vendor/testez/TestSession.lua +243 -243
- package/vendor/testez/init.lua +39 -39
|
@@ -1,126 +1,126 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: roblox-sync
|
|
3
|
-
description: >
|
|
4
|
-
Studio Script Sync setup, troubleshooting, mode detection.
|
|
5
|
-
Canonical filesystem sync path for Roblox development.
|
|
6
|
-
last_reviewed: 2026-05-21
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
<!-- Source: Script Sync walkthrough compiled from Roblox DevForum + creator-docs (MIT) -->
|
|
10
|
-
|
|
11
|
-
# Studio Script Sync
|
|
12
|
-
|
|
13
|
-
## Why This Is the Canonical Sync Path
|
|
14
|
-
|
|
15
|
-
| Tool | Setup steps | TeamCreate | Project file required |
|
|
16
|
-
|------|-------------|------------|------------------------|
|
|
17
|
-
| Studio Script Sync | 2 (toggle + right-click) | Yes | No |
|
|
18
|
-
| Rojo | 6+ (install aftman, install Rojo, project.json, install plugin, serve, connect) | No | Yes |
|
|
19
|
-
| Argon | 5 (install CLI, install plugin, init project, serve, connect) | No | Yes |
|
|
20
|
-
| Pesto | 4 (install CLI, install plugin, init, sync) | Partial | Yes |
|
|
21
|
-
|
|
22
|
-
## Setup Walkthrough
|
|
23
|
-
|
|
24
|
-
1. In Roblox Studio, open **File → Beta Features**. Scroll to "Script Sync." Toggle it on. Restart Studio.
|
|
25
|
-
2. In Explorer, right-click the top-level container holding your scripts (commonly ServerScriptService, ReplicatedStorage, StarterPlayer → StarterPlayerScripts). Click **Start Sync**.
|
|
26
|
-
3. Pick a folder on disk. Suggested layout: `~/projects/<game-name>/src/<container-name>/`. Studio will mirror the script tree into that folder as `.luau` files.
|
|
27
|
-
4. Repeat for each top-level container that holds scripts. Sync auto-resumes when Studio restarts.
|
|
28
|
-
|
|
29
|
-
## Capacity
|
|
30
|
-
|
|
31
|
-
- Up to 10000 scripts per top-level instance
|
|
32
|
-
- Up to 128 top-level instances synced at once
|
|
33
|
-
- Two-way real-time sync. Edits in either direction propagate.
|
|
34
|
-
|
|
35
|
-
## What Sync Does and Doesn't
|
|
36
|
-
|
|
37
|
-
**Does:**
|
|
38
|
-
- Bidirectional `.luau` file mirror for scripts (Script, LocalScript, ModuleScript)
|
|
39
|
-
- Auto-resume on Studio restart
|
|
40
|
-
- Works with TeamCreate
|
|
41
|
-
- Surfaces errors in UI when sync fails
|
|
42
|
-
|
|
43
|
-
**Doesn't:**
|
|
44
|
-
- Sync non-script instances (Parts, Models, Folders without scripts)
|
|
45
|
-
- Sync empty folders (use `.gitkeep`)
|
|
46
|
-
- Sync PackageLink instance metadata (package script contents do sync)
|
|
47
|
-
- Provide sourcemaps (you still need Rojo for that)
|
|
48
|
-
|
|
49
|
-
## Mode Detection
|
|
50
|
-
|
|
51
|
-
Every session, the agent detects the active mode:
|
|
52
|
-
|
|
53
|
-
- **Sync Mode** (filesystem `.luau` files exist): read/write/edit via filesystem. MCP only for verification, playtest, scene ops, asset insertion. Never read a script via MCP if its file exists on disk.
|
|
54
|
-
- **MCP-Only Mode** (no `.luau` files on disk): minimize reads, prefer `run_code` for inspection, batch edits behind ChangeHistoryService Recording. Recommend enabling sync.
|
|
55
|
-
|
|
56
|
-
If MCP-only and project exceeds light-touch scope (>500 lines/module or >10 modules), proactively recommend Sync Mode before continuing.
|
|
57
|
-
|
|
58
|
-
## Common Issues
|
|
59
|
-
|
|
60
|
-
- **Sync silently stops after Studio update**: restart Studio + re-Start Sync.
|
|
61
|
-
- **Empty folders deleted on git pull**: add `.gitkeep`.
|
|
62
|
-
- **Sync errors not auto-detected**: restart Studio. Roblox is fixing this.
|
|
63
|
-
- **Duplicate-name hierarchy errors**: avoid duplicate names within a sync container.
|
|
64
|
-
|
|
65
|
-
## Version Control with Git
|
|
66
|
-
|
|
67
|
-
Script Sync puts `.luau` files on disk. Git works with files on disk. Use them together.
|
|
68
|
-
|
|
69
|
-
### Setup (after sync is confirmed)
|
|
70
|
-
|
|
71
|
-
```bash
|
|
72
|
-
cd ~/projects/<game-name>
|
|
73
|
-
git init
|
|
74
|
-
git add .
|
|
75
|
-
git commit -m "initial sync"
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
### .gitignore for Roblox projects
|
|
79
|
-
|
|
80
|
-
```gitignore
|
|
81
|
-
# OpenCode
|
|
82
|
-
.opencode/
|
|
83
|
-
|
|
84
|
-
# Roblox build files (binary, don't track)
|
|
85
|
-
*.rbxl
|
|
86
|
-
*.rbxlx
|
|
87
|
-
*.rbxm
|
|
88
|
-
*.rbxmx
|
|
89
|
-
|
|
90
|
-
# OS
|
|
91
|
-
.DS_Store
|
|
92
|
-
Thumbs.db
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
### Agent responsibilities
|
|
96
|
-
|
|
97
|
-
- **Suggest commits at natural breakpoints.** After completing a system, fixing a batch of bugs, or before a risky change: "Want to commit what we've built so far?"
|
|
98
|
-
- **Use git diff to review changes.** Before committing, `git diff` to show the user what changed. This is the review loop.
|
|
99
|
-
- **Commit messages should be descriptive.** "add DataService with ProfileStore session locking" not "update files."
|
|
100
|
-
- **Branch for risky work.** If the user wants to experiment (new architecture, major refactor), suggest a branch first: `git checkout -b refactor/combat-system`.
|
|
101
|
-
- **Don't auto-commit without asking.** Always confirm before `git commit`. The user should see what's being committed.
|
|
102
|
-
|
|
103
|
-
### Common git operations the agent should know
|
|
104
|
-
|
|
105
|
-
| Operation | Command | When |
|
|
106
|
-
|-----------|---------|------|
|
|
107
|
-
| See what changed | `git diff` | Before committing |
|
|
108
|
-
| Stage changes | `git add -A` or `git add <file>` | Before committing |
|
|
109
|
-
| Commit | `git commit -m "message"` | After staging |
|
|
110
|
-
| See history | `git log --oneline -10` | When user asks "what changed" |
|
|
111
|
-
| Undo last commit (keep changes) | `git reset --soft HEAD~1` | When user wants to redo commit |
|
|
112
|
-
| Create branch | `git checkout -b <name>` | Before risky/experimental work |
|
|
113
|
-
| Switch branch | `git checkout <name>` | When switching context |
|
|
114
|
-
| Merge branch | `git merge <name>` | When experimental work is ready |
|
|
115
|
-
|
|
116
|
-
### Conflict handling
|
|
117
|
-
|
|
118
|
-
If git merge conflicts occur in `.luau` files, the agent should:
|
|
119
|
-
1. Read the conflicting files
|
|
120
|
-
2. Show the user the conflict markers
|
|
121
|
-
3. Suggest a resolution based on what each side changed
|
|
122
|
-
4. Help resolve and commit
|
|
123
|
-
|
|
124
|
-
## If User Already Has Rojo/Argon
|
|
125
|
-
|
|
126
|
-
Detect presence of `default.project.json` (Rojo) or `*.project.json` with Argon-specific fields. If found: filesystem is already source of truth, operate normally on disk. Don't suggest switching to Script Sync.
|
|
1
|
+
---
|
|
2
|
+
name: roblox-sync
|
|
3
|
+
description: >
|
|
4
|
+
Studio Script Sync setup, troubleshooting, mode detection.
|
|
5
|
+
Canonical filesystem sync path for Roblox development.
|
|
6
|
+
last_reviewed: 2026-05-21
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
<!-- Source: Script Sync walkthrough compiled from Roblox DevForum + creator-docs (MIT) -->
|
|
10
|
+
|
|
11
|
+
# Studio Script Sync
|
|
12
|
+
|
|
13
|
+
## Why This Is the Canonical Sync Path
|
|
14
|
+
|
|
15
|
+
| Tool | Setup steps | TeamCreate | Project file required |
|
|
16
|
+
|------|-------------|------------|------------------------|
|
|
17
|
+
| Studio Script Sync | 2 (toggle + right-click) | Yes | No |
|
|
18
|
+
| Rojo | 6+ (install aftman, install Rojo, project.json, install plugin, serve, connect) | No | Yes |
|
|
19
|
+
| Argon | 5 (install CLI, install plugin, init project, serve, connect) | No | Yes |
|
|
20
|
+
| Pesto | 4 (install CLI, install plugin, init, sync) | Partial | Yes |
|
|
21
|
+
|
|
22
|
+
## Setup Walkthrough
|
|
23
|
+
|
|
24
|
+
1. In Roblox Studio, open **File → Beta Features**. Scroll to "Script Sync." Toggle it on. Restart Studio.
|
|
25
|
+
2. In Explorer, right-click the top-level container holding your scripts (commonly ServerScriptService, ReplicatedStorage, StarterPlayer → StarterPlayerScripts). Click **Start Sync**.
|
|
26
|
+
3. Pick a folder on disk. Suggested layout: `~/projects/<game-name>/src/<container-name>/`. Studio will mirror the script tree into that folder as `.luau` files.
|
|
27
|
+
4. Repeat for each top-level container that holds scripts. Sync auto-resumes when Studio restarts.
|
|
28
|
+
|
|
29
|
+
## Capacity
|
|
30
|
+
|
|
31
|
+
- Up to 10000 scripts per top-level instance
|
|
32
|
+
- Up to 128 top-level instances synced at once
|
|
33
|
+
- Two-way real-time sync. Edits in either direction propagate.
|
|
34
|
+
|
|
35
|
+
## What Sync Does and Doesn't
|
|
36
|
+
|
|
37
|
+
**Does:**
|
|
38
|
+
- Bidirectional `.luau` file mirror for scripts (Script, LocalScript, ModuleScript)
|
|
39
|
+
- Auto-resume on Studio restart
|
|
40
|
+
- Works with TeamCreate
|
|
41
|
+
- Surfaces errors in UI when sync fails
|
|
42
|
+
|
|
43
|
+
**Doesn't:**
|
|
44
|
+
- Sync non-script instances (Parts, Models, Folders without scripts)
|
|
45
|
+
- Sync empty folders (use `.gitkeep`)
|
|
46
|
+
- Sync PackageLink instance metadata (package script contents do sync)
|
|
47
|
+
- Provide sourcemaps (you still need Rojo for that)
|
|
48
|
+
|
|
49
|
+
## Mode Detection
|
|
50
|
+
|
|
51
|
+
Every session, the agent detects the active mode:
|
|
52
|
+
|
|
53
|
+
- **Sync Mode** (filesystem `.luau` files exist): read/write/edit via filesystem. MCP only for verification, playtest, scene ops, asset insertion. Never read a script via MCP if its file exists on disk.
|
|
54
|
+
- **MCP-Only Mode** (no `.luau` files on disk): minimize reads, prefer `run_code` for inspection, batch edits behind ChangeHistoryService Recording. Recommend enabling sync.
|
|
55
|
+
|
|
56
|
+
If MCP-only and project exceeds light-touch scope (>500 lines/module or >10 modules), proactively recommend Sync Mode before continuing.
|
|
57
|
+
|
|
58
|
+
## Common Issues
|
|
59
|
+
|
|
60
|
+
- **Sync silently stops after Studio update**: restart Studio + re-Start Sync.
|
|
61
|
+
- **Empty folders deleted on git pull**: add `.gitkeep`.
|
|
62
|
+
- **Sync errors not auto-detected**: restart Studio. Roblox is fixing this.
|
|
63
|
+
- **Duplicate-name hierarchy errors**: avoid duplicate names within a sync container.
|
|
64
|
+
|
|
65
|
+
## Version Control with Git
|
|
66
|
+
|
|
67
|
+
Script Sync puts `.luau` files on disk. Git works with files on disk. Use them together.
|
|
68
|
+
|
|
69
|
+
### Setup (after sync is confirmed)
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
cd ~/projects/<game-name>
|
|
73
|
+
git init
|
|
74
|
+
git add .
|
|
75
|
+
git commit -m "initial sync"
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### .gitignore for Roblox projects
|
|
79
|
+
|
|
80
|
+
```gitignore
|
|
81
|
+
# OpenCode
|
|
82
|
+
.opencode/
|
|
83
|
+
|
|
84
|
+
# Roblox build files (binary, don't track)
|
|
85
|
+
*.rbxl
|
|
86
|
+
*.rbxlx
|
|
87
|
+
*.rbxm
|
|
88
|
+
*.rbxmx
|
|
89
|
+
|
|
90
|
+
# OS
|
|
91
|
+
.DS_Store
|
|
92
|
+
Thumbs.db
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Agent responsibilities
|
|
96
|
+
|
|
97
|
+
- **Suggest commits at natural breakpoints.** After completing a system, fixing a batch of bugs, or before a risky change: "Want to commit what we've built so far?"
|
|
98
|
+
- **Use git diff to review changes.** Before committing, `git diff` to show the user what changed. This is the review loop.
|
|
99
|
+
- **Commit messages should be descriptive.** "add DataService with ProfileStore session locking" not "update files."
|
|
100
|
+
- **Branch for risky work.** If the user wants to experiment (new architecture, major refactor), suggest a branch first: `git checkout -b refactor/combat-system`.
|
|
101
|
+
- **Don't auto-commit without asking.** Always confirm before `git commit`. The user should see what's being committed.
|
|
102
|
+
|
|
103
|
+
### Common git operations the agent should know
|
|
104
|
+
|
|
105
|
+
| Operation | Command | When |
|
|
106
|
+
|-----------|---------|------|
|
|
107
|
+
| See what changed | `git diff` | Before committing |
|
|
108
|
+
| Stage changes | `git add -A` or `git add <file>` | Before committing |
|
|
109
|
+
| Commit | `git commit -m "message"` | After staging |
|
|
110
|
+
| See history | `git log --oneline -10` | When user asks "what changed" |
|
|
111
|
+
| Undo last commit (keep changes) | `git reset --soft HEAD~1` | When user wants to redo commit |
|
|
112
|
+
| Create branch | `git checkout -b <name>` | Before risky/experimental work |
|
|
113
|
+
| Switch branch | `git checkout <name>` | When switching context |
|
|
114
|
+
| Merge branch | `git merge <name>` | When experimental work is ready |
|
|
115
|
+
|
|
116
|
+
### Conflict handling
|
|
117
|
+
|
|
118
|
+
If git merge conflicts occur in `.luau` files, the agent should:
|
|
119
|
+
1. Read the conflicting files
|
|
120
|
+
2. Show the user the conflict markers
|
|
121
|
+
3. Suggest a resolution based on what each side changed
|
|
122
|
+
4. Help resolve and commit
|
|
123
|
+
|
|
124
|
+
## If User Already Has Rojo/Argon
|
|
125
|
+
|
|
126
|
+
Detect presence of `default.project.json` (Rojo) or `*.project.json` with Argon-specific fields. If found: filesystem is already source of truth, operate normally on disk. Don't suggest switching to Script Sync.
|