roblox-npcs — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited roblox-npcs (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Official sources (always check these for the latest):
PathfindingService, Path, PathWaypoint, PathfindingModifier, PathfindingLink, HumanoidThis skill covers navigation mesh pathfinding and the AI patterns that use it. It does not cover custom A* implementations unless absolutely necessary — PathfindingService is the official, optimized solution.
Activate when:
PathfindingModifier regions/links for doors, traps, ladders, boats.Cross-reference:
Create a path:
local PathfindingService = game:GetService("PathfindingService")
local path = PathfindingService:CreatePath({
AgentRadius = 2,
AgentHeight = 5,
AgentCanJump = true,
AgentCanClimb = false,
WaypointSpacing = 4,
Costs = {
Water = 20,
DangerZone = math.huge,
}
})
path.CalculationSecondsTimeout = 1Compute and follow:
local humanoid = character:WaitForChild("Humanoid")
local rootPart = character:WaitForChild("HumanoidRootPart")
local success, err = pcall(function()
path:ComputeAsync(rootPart.Position, endPos)
end)
if success and path.Status == Enum.PathStatus.Success then
local waypoints = path:GetWaypoints()
-- follow waypoints with Humanoid:Move()
end| Parameter | Default | Purpose |
|---|---|---|
AgentRadius | 2 studs | Minimum clearance from obstacles |
AgentHeight | 5 studs | Vertical clearance |
AgentCanJump | true | Allows jump waypoints |
AgentCanClimb | false | Allows climbing truss parts |
WaypointSpacing | 4 studs | Distance between intermediate waypoints |
Costs | nil | Material/region/link traversal cost |
Path.CalculationSecondsTimeout limits how long the solver may run per ComputeAsync call. Set it after CreatePath and before computing.
Each waypoint has a Position and an Action:
Enum.PathWaypointAction.Walk — normal movement.Enum.PathWaypointAction.Jump — trigger jump."Climb" or "UseBoat" from PathfindingModifiers/Links.PathfindingModifier instances on anchored, non-colliding parts let you influence path cost:
Label — key used in Costs table.PassThrough — if true, the volume is ignored by the navmesh and treated as traversable empty space (e.g., zombies "hearing" through doors).Example:
local path = PathfindingService:CreatePath({
Costs = {
Water = 20,
DangerZone = math.huge,
UseBoat = 2,
}
})PathfindingLink connects two Attachments with a custom label and cost, allowing paths across normally untraversable gaps.
Use for:
Your movement code checks the waypoint label and runs the custom traversal logic.
Continuously recompute a path to a moving target. Throttle recomputation (e.g., every 0.5–1 s) and only recompute if the target moved far enough.
Cycle through a list of fixed points. Recompute when blocked.
Like follow, but validate line-of-sight and distance server-side. Don't trust client-reported positions for authoritative AI.
Common NPC states: Idle, Patrol, Chase, Attack, Return. Each state handles its own path computation and Humanoid control.
workspace.PersistentLoaded and persistent models for client path destinations.AgentCanJump = false to a jump-only destination) will fail.WaypointSpacing = math.huge to reduce intermediate waypoints for long straight runs.pcall around ComputeAsync.Costs (must match Enum.Material names as strings).scripts/NPCPathFollower.lua — Humanoid-based path follower with blocked-path recompute, custom-label support, and connection cleanup.scripts/PatrolBehavior.lua — state-driven patrol/chase behavior with spatial detection and throttled recomputation.scripts/PathfindingUtility.lua — helpers for throttled recomputation and waypoint formatting.Path.CalculationSecondsTimeout after CreatePath to cap solver time.Humanoid:MoveTo timeout and cancel it when the waypoint is reached or the follower is stopped.workspace:GetPartBoundsInRadius instead of scanning every player each frame.Heartbeat connections when the Humanoid dies or the NPC is destroyed.Destroy the old one.PathfindingLink labels to trigger custom traversal logic (boats, teleporters, ladders). The follower invokes a registered handler; if none exists, the waypoint falls back to normal movement.AgentCanClimb = true and provide TrussPart surfaces. Climb waypoints have the Label "Climb".PathfindingModifier parts must be Anchored = true and CanCollide = false.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.