Project Health & Integrity for Unity — find issues, clean garbage, track references, and guard your builds.
After importing from the Asset Store, Sentinel lives at Assets/Sentinel/. Unity will compile the YourStudio.Sentinel.Editor assembly automatically. No setup required.
Go to Window > Sentinel > Open Window or press Ctrl+Shift+Alt+S.
The main window has a toolbar and four tabs: Issues, Cleaner, References, and Trends.
The Issues tab scans your entire project — including closed scenes (via YAML parsing, without opening them) — and reports problems organized by severity.
| Detector | Default Severity | What It Finds |
|---|---|---|
| Missing Script | Error | GameObjects with deleted/renamed MonoBehaviour scripts |
| Missing Reference | Error | Serialized fields pointing to destroyed/missing assets |
| Missing Material | Error | Renderers with null material slots |
| Shader Error | Error | Shaders that fail to compile |
| Empty UnityEvent | Warning | UnityEvent fields with zero persistent listeners |
| Invalid Layer | Warning | GameObjects assigned to undefined layer indices |
| Invalid Tag | Warning | GameObjects with tags that don't exist in the Tag Manager |
| Unused Component | Warning | Lone MonoBehaviours on childless leaf GameObjects |
| Empty GameObject | Info | GameObjects with only a Transform and no children |
| Duplicate Name | Info | Multiple assets sharing the same filename |
| Column | Description |
|---|---|
| Type | The issue detector name (e.g., MissingScript, MissingRef) |
| Asset Path | Full project path to the asset (e.g., Assets/Scenes/Level1.unity) |
| Object Type | The Unity asset type (e.g., SceneAsset, GameObject, MonoScript) |
| Message | Human-readable description of the issue |
Click any column header to sort by that column. Click again to reverse the sort order.
The left panel provides filters:
Issues that have automatic fixes show a "Fix:" option when right-clicked:
All fixes support Undo (Ctrl+Z). After any fix is applied, Sentinel automatically rescans the project and shows a popup confirming how many issues were resolved.
The "Fix All Auto-Fixable" button in the left panel applies the first available fix for every fixable issue at once.
Right-click any issue and select "Suppress Issue" to hide it from future scans. Suppressions are saved to Assets/SentinelData/SentinelSuppressions.json (version-controlled, shared with your team).
To remove a suppression, enable the "Suppressed" filter, find the issue, right-click, and select "Remove Suppression."
Right-click any issue row for:
Clicking any row pings the asset in the Project window.
The Cleaner tab finds unreferenced assets — files that are not reachable from any build scene, Resources folder, or other root — and are safe to delete.
Sentinel uses a root-tracing algorithm:
AssetDatabase.GetDependenciesResources/ folders and their dependenciesStreamingAssets/, Editor/, Plugins/, Gizmos/.cs, .asmdef, .asmref)When you click "Delete Selected," a confirmation dialog appears with two options:
Assets are moved to Assets/SentinelTrash/ where you can review them. To restore, simply move them back. To permanently delete later, remove the folder manually.
Assets are deleted from the project. A backup ZIP is automatically created at Library/SentinelBackups/ before deletion.
Click "Open Full Preview Window" for a larger, dedicated window with:
The References tab answers: "Where is this asset used?"
Sentinel rebuilds the dependency map fresh each time you search, so it always reflects the current project state. It also performs a supplementary YAML search across all scene and prefab files to catch references that the map might miss.
The Trends tab tracks your project's health over time.
A score from 0 to 100 calculated after each scan:
Score = 100 - (Errors × 5) - (Warnings × 1) - (Infos × 0.2) clamped to [0, 100]
Project is in good shape. Few or no critical issues.
Some issues accumulating. Schedule cleanup time.
Significant issues. Address errors before shipping.
Shows whether issues increased or decreased since the previous scan.
After 2+ scans, a line chart shows errors (red), warnings (yellow), and total issues (white) over time. Sentinel stores up to 60 scan snapshots.
Lock a baseline to establish "known issues." Future scans will report how many new issues appeared since the baseline was locked. This is especially useful for CI pipelines: allow existing tech debt but block new regressions.
Assets/SentinelData/sentinel.baseline.json (version-controlled)Go to Edit > Project Settings > Sentinel to configure.
Assets)Assets/ThirdParty)Override the default severity for each issue type. For example, change "Empty UnityEvent" from Warning to Info if your project uses event-driven patterns where empty events are intentional.
| Option | Default | Description |
|---|---|---|
| Scan Open Scenes | On | Include currently open scenes in the scan |
| Scan Closed Scenes | On | Scan .unity files via YAML (without opening them) |
| Auto Scan on Compile | Off | Trigger a scan after every script compilation |
| Fail Build on Errors | Off | Block player builds if Error-severity issues exist |
Paste a Slack or Discord webhook URL to receive scan result notifications. Click "Test Webhook" to verify.
When "Fail Build on Errors" is enabled, Sentinel runs a fast pre-build scan (Missing Scripts + Missing References only) before every player build. If errors are found, the build is blocked with a summary of issues.
Add the [SentinelIgnore] attribute to fields, properties, or entire classes to suppress issue detection:
[SentinelIgnore("Intentionally null during async loading")]
public GameObject optionalReference;
Right-click assets or folders in the Project window:
Run Sentinel in headless mode for CI pipelines:
Unity.exe -batchmode -quit -projectPath /path/to/project \ -executeMethod YourStudio.Sentinel.Editor.SentinelCLI.RunScan \ -sentinelOutput Reports/sentinel-report.json \ -sentinelFailOn Error
| Argument | Default | Description |
|---|---|---|
-sentinelOutput | sentinel-report.json | Output path for the JSON report |
-sentinelFailOn | Error | Minimum severity to fail (Error, Warning, Info) |
-sentinelProfile | (none) | Named scan profile from Project Settings |
| Code | Meaning |
|---|---|
0 | Scan passed — no issues at or above the fail threshold |
1 | Scan failed — issues found at or above the fail threshold |
2 | Scan error — crash, missing profile, or configuration problem |
Two reports are generated side by side:
Machine-readable. Contains scan date, Unity version, duration, issue summary (errors/warnings/infos/suppressed), new-since-baseline count, and the full issues array.
Standard test result format. Compatible with GitHub Actions (dorny/test-reporter), Jenkins, GitLab CI. Includes file attributes for inline PR annotations and a <properties> block with scan metadata.
A ready-to-use workflow is included at Assets/Sentinel/GitHubActions/sentinel.yml. Copy it to .github/workflows/sentinel.yml in your repository. It uses Game CI (game-ci/unity-builder@v4).
Unity.exe -batchmode -quit -projectPath /path/to/project \ -executeMethod YourStudio.Sentinel.Editor.SentinelCLI.LockBaseline
Sentinel can install a git hook that automatically runs a health scan after every git pull / git merge. Call SentinelGitHook.InstallPostMergeHook() from code or a menu item.
| Shortcut | Action |
|---|---|
| Ctrl+Shift+Alt+S | Open Sentinel window |
| Menu Path | Action |
|---|---|
| Window > Sentinel > Open Window | Opens the main Sentinel window |
| Window > Sentinel > Run Scan (CLI) | Runs a scan and writes reports (same as CLI) |
| Window > Sentinel > Lock Baseline (CLI) | Locks the current issue state as baseline |
| Edit > Project Settings > Sentinel | Opens Sentinel settings |
| Assets > Sentinel > Exclude Folder from Scans | Right-click context menu on folders |
| Assets > Sentinel > Suppress All Issues in This Asset | Right-click context menu on assets |
| File | Location | Version Controlled? | Purpose |
|---|---|---|---|
SentinelMap.dat | Library/ | No | Binary dependency graph cache |
SentinelProjectSettings.asset | ProjectSettings/ | Yes | Shared scan configuration |
SentinelSuppressions.json | Assets/SentinelData/ | Yes | Shared issue suppressions |
sentinel.baseline.json | Assets/SentinelData/ | Yes | Shared issue baseline |
SentinelTrends.asset | UserSettings/ | No | Per-developer scan history |
SentinelUserSettings.asset | UserSettings/ | No | Per-developer UI preferences |
SentinelBackups/*.zip | Library/ | No | Pre-deletion backup archives |
SentinelTrash/ | Assets/ | Optional | Reversible trash folder |
No. Sentinel is entirely editor-only. The assembly definition restricts it to the Editor platform. Nothing is included in player builds.
Only when you explicitly use a fix action (e.g., "Remove Missing Script" or "Clear Reference"). All fixes support Undo. The cleaner only deletes assets you manually select and confirm.
Sentinel reads .unity files as raw YAML text and uses regex patterns to extract missing script GUIDs and broken references. It never calls EditorSceneManager.OpenScene(), so it's fast (50+ scenes per second) and doesn't disrupt your current scene.
Yes. Create a class that extends SentinelExtensionBase, override the DetectorName property and whichever On*Scanned methods you need, and call AddIssue(). Sentinel discovers it automatically via TypeCache — no registration needed.
Make sure the scene or prefab using that asset is saved. The dependency tracer reads files on disk, not unsaved in-memory state. Also check that the using scene is in your Build Settings.
If you used "Move to Trash," the assets are in Assets/SentinelTrash/ — move them back manually. If you used "Delete Permanently," a backup ZIP exists at Library/SentinelBackups/.
Contact us at ragendom@gmail.com
Please include: