Agent skill · Audited from source
godot-multiplayer
skill · gamedev-skills/awesome-gamedev-agent-skillsApache-2.0 licenceAudited 31 Oct 2026 · source 77df9453bb1b
Is it safe? Yes — SAFE, grade B (89/100). We read this skill's source at commit 77df9453bb1b and found no filesystem, network or shell access and no hard-coded secrets. What it does: Build networked games with Godot 4.7 high-level multiplayer: set up an ENetMultiplayerPeer server/client, define RPCs with the @rpc annotation (call via rpc()/rpc_id()), set per-node multiplayer authority, and replicate…
Cite
Cite this page
ModelsAtlas. “godot-multiplayer (gamedev-skills/awesome-gamedev-agent-skills)”. Retrieved 31 Oct 2026. https://modelsatlas.com/skills/gamedev-skills/godot-multiplayer
Trust audit
Audit 0.4.1 · source read 31 Oct 2026
SAFE means nothing in the source contradicts what the skill says it does. Grade B is shared by 16,667 of 17,602 audited skills.
What the source does
- FilesystemNone observedNo reads or writes in the source
- NetworkNone observedNo outbound calls in the source
- ShellNone observedNo commands run in the source
- DependenciesPinnedNothing floats
- SecretsNone foundNo keys in source
Five audit layers
| Layer | What we check | Result | Findings |
|---|---|---|---|
L0 Provenance | Repo owner, licence, archive status, activity | PASS | 0 |
L1 Static source | Secrets, path traversal, supply chain, hidden code | NA | 0 |
L2 Instructions | Prompt injection, authority framing, hidden directives | PASS | 0 |
L3 Inventory | The files and declarations match the source | PASS | 0 |
L4 Sandbox | Run in isolation and watch behaviour | SKIPPED why | 0 |
Gates applied: no behavioural pass.
Findings (0)
No findings at any severity. We re-audit when the source changes.
Audit 0.4.1 · source sha 77df9453bb1b · 31 Oct 2026Report an issue or request a re-scan
Provenance
Who published it, and what the verdict is pinned to
- Publishergamedev-skills GitHub organizationOwner of the repository this skill is read from
- Source foldergamedev-skills/awesome-gamedev-agent-skills/skills/godot/godot-multiplayerThe exact folder we audited
- LicenceApache-2.0As the repository states it
- Commit pinned for this verdict77df9453bb1bA new audit runs when the source changes
- Repository statusNot archivedLast push 3 days ago
- Sandboxed runNot runSkills are read, not executed; layer L4 is skipped
What it tells the agent
Full source on GitHub ↗Its description: Build networked games with Godot 4.7 high-level multiplayer: set up an ENetMultiplayerPeer server/client, define RPCs with the @rpc annotation (call via rpc()/rpc_id()), set per-node multiplayer authority, and replicate…
---
name: godot-multiplayer
description: >
Build networked games with Godot 4.7 high-level multiplayer: set up an
ENetMultiplayerPeer server/client, define RPCs with the @rpc annotation
(call via rpc()/rpc_id()), set per-node multiplayer authority, and replicate
state with MultiplayerSpawner and MultiplayerSynchronizer. Use when adding
multiplayer/networking to a Godot project, writing @rpc functions, or syncing
player/world state across peers.
---
# Godot Multiplayer (4.x high-level)
Connect peers, call functions remotely with `@rpc`, assign authority, and replicate state
with `MultiplayerSpawner`/`MultiplayerSynchronizer`. Targets **Godot 4.7** (ENet). Treat
all client input as untrusted; keep the server authoritative.
## When to use
- Use when adding networked multiplayer: hosting/joining over ENet, calling RPCs,
assigning per-node authority, or auto-spawning/syncing nodes across peers.
**When *not* to use:** local split-screen (no networking); raw TCP/UDP/WebSocket protocol
work (low-level `PacketPeer`); HTTP requests. For save/persistence → `save-systems`.
## Core workflow
1. **Create a peer** (`ENetMultiplayerPeer`), call `create_server(port, max)` or
`create_client(ip, port)`, and assign it to `multiplayer.multiplayer_peer`. The
server's unique ID is always `1`; clients get random positive IDs.
2. **Handle connection signals** on `multiplayer`: `peer_connected(id)`,
`peer_disconnected(id)`, `connected_to_server`, `connection_failed`,
`server_disconnected`.
3. **Define RPCs** with `@rpc(...)`. Call them on a `Callable` via `rpc()` (all peers) or
`rpc_id(peer_id)` (one peer). Inside, `multiplayer.get_remote_sender_id()` tells you who
sent it.
4. **Keep RPC signatures identical** on every peer that runs the script — Godot checksums
all `@rpc` methods in a script; a mismatch prints errors that can name an unrelated RPC.
5. **Assign authority** per node with `set_multiplayer_authority(id)`; gate input/RPCs by
`is_multiplayer_authority()`.
6. **Replicate state** with `MultiplayerSpawner` (auto-instances scenes on clients) and
`MultiplayerSynchronizer` (auto-syncs selected properties).
7. **Validate on the server.** Don't trust client-reported positions/results.
## Patterns
### 1. Host or join (ENet)
```gdscript
const PORT := 7000
const MAX_PLAYERS := 8
func host() -> void:
var peer := ENetMultiplayerPeer.new()
var err := peer.create_server(PORT, MAX_PLAYERS)
if err != OK:
push_error("Cannot host: %s" % err); return
multiplayer.multiplayer_peer = peer
multiplayer.peer_connected.connect(_on_peer_connected)
func join(ip := "127.0.0.1") -> void:
var peer := ENetMultiplayerPeer.new()
peer.create_client(ip, PORT)
multiplayer.multiplayer_peer = peer
multiplayer.connected_to_server.connect(func(): print("connected"))
func leave() -> void:
multiplayer.multiplayer_peer = OfflineMultiplayerPeer.new()
```
### 2. RPCs: client sends input to the server (any_peer, call_local)
This script sits on a player avatar whose authority is the owning client (Pattern 3), so
the server is *not* the node's authority. A server→clients RPC on such a node must be
`"any_peer"` and check that the sender is the server.
```gdscript
func _unhandled_input(event: InputEvent) -> void:
if event.is_action_pressed("fire") and is_multiplayer_authority():
request_fire.rpc_id(1) # send only to the server (id 1)
# Clients may call this; it runs on the server (and locally if server is a player).
@rpc("any_peer", "call_local", "reliable")
func request_fire() -> void:
if not multiplayer.is_server(): # ignore copies relayed to other clients
return
var sender := multiplayer.get_remote_sender_id()
if not _can_fire(sender): # server-side validation
return
spawn_projectile.rpc(sender) # tell everyone to spawn it
# "authority" here would make clients reject the server's call (the client is the
# authority), so accept any peer and keep only calls that come from the server.
@rpc("any_peer", "call_local", "reliable")
func spawn_projectile(owner_id: int) -> void:
if multiplayer.get_remote_sender_id() != 1:
return
_do_spawn(owner_id)
```
### 3. Per-node authority (each player controls their own avatar)
```gdscript
extends CharacterBody2D
func _ready() -> void:
# The node name is the owning peer's id; that peer is the authority.
set_multiplayer_authority(name.to_int())
func _physics_process(delta: float) -> void:
if not is_multiplayer_authority():
return # only the owner reads input & moves
velocity = Input.get_vector("left", "right", "up", "down") * 200.0
move_and_slide()
```
### 4. MultiplayerSynchronizer config (editor + replication)
```gdscript
# Add a MultiplayerSynchronizer child; in its Replication editor add the properties to
# sync (e.g. position, velocity). Set "Sync"/"Spawn" flags per property. From code you
# can scope visibility:
@onready var sync: MultiplayerSynchronizer = $MultiplayerSynchronizer
func _ready() -> void:
# Only replicate this node to a specific peer (e.g. private info). Per-peer visibility
# matters only once public_visibility is off; by default every peer receives it.
sync.public_visibility = false
sync.set_visibility_for(target_peer_id, true)
```
## Pitfalls
- **RPC signature checksum.** Every `@rpc` method in a script must exist with the same
declaration on both client and server builds — *even unused ones*. A mismatch causes
errors that may point at the wrong function. Argument names/count are not checked, but
the set of RPCs and their annotations are.
- **Default `@rpc` is `"authority"`.** Clients calling it are ignored unless you set
`"any_peer"`. Use `"call_local"` so the host (also a player) runs it too.
- **`RPC 'x' is not allowed on node ... from: 1. Mode is "authority"`** → the server called
an `"authority"` RPC on a node a clExcerpt, first 6,000 characters of SKILL.md, verbatim from the audited commit. It is text from someone else’s repository, quoted so you can judge it before your agent reads it.
Install
Pinned to the audited commit 77df945
git clone https://github.com/gamedev-skills/awesome-gamedev-agent-skills git -C awesome-gamedev-agent-skills checkout 77df9453bb1b
The author documents no install command, so this uses the repository directly. Our verdict covers commit 77df9453bb1b only.
Works in
The author has not said which agents this skill supports, and we have not tested it in any.
Audit history
Every audit, every source change
- ✓SAFE B 89 / 100
first audit · source
77df9453bb1b
README badge
For maintainers · shows the latest audit
[](https://modelsatlas.com/skills/gamedev-skills/godot-multiplayer/)
The badge shows our verdict and grade for this skill, and links back to this page. It changes when the audit does.
Similar skills
gamedev-skills/awesome-gamedev-agent-skills
Structure a Godot 4.7 project with the scene tree and node composition: build reusable scenes, instance PackedScenes at runtime, navigate the tree safely, and register autoload singletons. Use when designing .tscn…
gamedev-skills/awesome-gamedev-agent-skills
Export and build a Godot 4.7 project for distribution: install export templates, define export presets (Windows/macOS/Linux/Web/Android), run headless command-line exports for CI, and handle web (HTML5) COOP/COEP and…
gamedev-skills/awesome-gamedev-agent-skills
Write idiomatic GDScript for Godot 4.7: static typing, the node lifecycle (_ready/_process/_physics_process), @export/@onready/@tool annotations, signals, and await for asynchronous flow. Use when editing .gd scripts in…
gamedev-skills/awesome-gamedev-agent-skills
Play and mix audio in Godot 4.7: AudioStreamPlayer (2D/3D variants), audio buses with volume/mute and effects, music vs SFX routing, db/linear volume, and precise sync-to-beat playback timing. Use when playing sounds or…
gamedev-skills/awesome-gamedev-agent-skills
Use C#/.NET in Godot 4.7: partial classes extending nodes, the PascalCase lifecycle (_Ready/_Process/_PhysicsProcess), [Export] fields, [Signal] delegates as C# events, type-safe node lookup, and calling between C# and…
gamedev-skills/awesome-gamedev-agent-skills
Animate in Godot 4.7 three ways: AnimationPlayer for keyframed clips (incl. Call Method tracks), AnimationTree with state machines and blend spaces for character animation, and Tween for short procedural/UI tweens via…
Add this badge to your README
[](https://modelsatlas.com/skills/gamedev-skills/godot-multiplayer/)
<a href="https://modelsatlas.com/skills/gamedev-skills/godot-multiplayer/"><img src="https://modelsatlas.com/skills/gamedev-skills/godot-multiplayer/badge.svg" alt="ModelsAtlas: SAFE B"></a>
Questions about godot-multiplayer
What does the godot-multiplayer skill do?
Is godot-multiplayer safe to install?
What can godot-multiplayer access on my machine?
How current is this page?
Sources
- github.com/gamedev-skills/awesome-gamedev-agent-skills/tree/main — the audited source at commit 77df9453bb1b and every finding aboveObserved · 31 Oct 2026
Spotted something wrong? Report a correction · Methodology
Keep going in your AI
Opens with this page as the source. We add nothing else to the prompt.
- What does the godot-multiplayer skill do?
- Is godot-multiplayer safe to install?
- What can godot-multiplayer access on my machine?