hz-unity-tmp-resources — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited hz-unity-tmp-resources (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.
Use this skill automatically when any of the following are detected:
LiberationSans SDF, TMP Settings, or missing TMP materialsAssets/TextMesh Pro/Resources/ folder does not existBefore importing, check whether resources already exist using Unity_RunCommand:
using UnityEngine;
using UnityEditor;
using System.IO;
internal class CommandScript : IRunCommand
{
public void Execute(ExecutionResult result)
{
string resourcesPath = Path.Combine(Application.dataPath, "TextMesh Pro", "Resources");
bool imported = Directory.Exists(resourcesPath);
if (imported)
{
string fontPath = "Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF.asset";
var font = AssetDatabase.LoadAssetAtPath<Object>(fontPath);
result.Log("TMP Essential Resources: ALREADY IMPORTED. Default font present: {0}", font != null);
}
else
{
result.Log("TMP Essential Resources: NOT IMPORTED. Resources folder missing at {0}", resourcesPath);
}
}
}If already imported, stop here — no action needed.
IMPORTANT: The TMP import process opens a Unity dialog that requires manual user interaction. This cannot be fully automated via MCP.
Use Unity_RunCommand to trigger the import dialog:
using UnityEngine;
using UnityEditor;
internal class CommandScript : IRunCommand
{
public void Execute(ExecutionResult result)
{
EditorApplication.ExecuteMenuItem("Window/TextMeshPro/Import TMP Essential Resources");
result.Log("TMP Essential Resources import dialog opened. User must click Import in the Unity Editor.");
}
}After executing, you MUST:
After the user confirms, verify with Unity_RunCommand:
using UnityEngine;
using UnityEditor;
using System.IO;
internal class CommandScript : IRunCommand
{
public void Execute(ExecutionResult result)
{
string resourcesPath = Path.Combine(Application.dataPath, "TextMesh Pro", "Resources");
if (!Directory.Exists(resourcesPath))
{
result.LogError("Import failed: Resources folder not found at " + resourcesPath);
return;
}
string fontPath = "Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF.asset";
var font = AssetDatabase.LoadAssetAtPath<Object>(fontPath);
if (font == null)
{
result.LogError("Import incomplete: Default font asset not found at " + fontPath);
return;
}
var settingsGuids = AssetDatabase.FindAssets("t:TMP_Settings");
if (settingsGuids.Length == 0)
{
result.LogError("Import incomplete: TMP_Settings asset not found.");
return;
}
result.Log("TMP Essential Resources verified: folder exists, default font present, TMP_Settings found.");
}
}If text still appears pink after importing resources, force a shader recompilation via Unity_RunCommand:
using UnityEngine;
using UnityEditor;
internal class CommandScript : IRunCommand
{
public void Execute(ExecutionResult result)
{
var shaderGuids = AssetDatabase.FindAssets("t:Shader TextMeshPro");
int reimported = 0;
foreach (var guid in shaderGuids)
{
string path = AssetDatabase.GUIDToAssetPath(guid);
AssetDatabase.ImportAsset(path, ImportAssetOptions.ForceUpdate);
reimported++;
}
result.Log("Reimported {0} TMP shaders.", reimported);
}
}If Window/TextMeshPro/Import TMP Essential Resources is not available:
Unity_RunCommand:using UnityEngine;
using UnityEditor;
using UnityEditor.PackageManager;
internal class CommandScript : IRunCommand
{
public void Execute(ExecutionResult result)
{
var request = Client.Add("com.unity.textmeshpro");
// Busy-wait is required here because Unity_RunCommand scripts run synchronously.
// This will briefly block the editor (typically < 5 seconds).
while (!request.IsCompleted) { }
if (request.Status == StatusCode.Success)
result.Log("TextMesh Pro package installed: {0}", request.Result.version);
else
result.LogError("Failed to install TMP: " + request.Error.message);
}
}This skill handles importing TMP resources. For VR-specific UI configuration (canvas setup, text sizing, viewing distances), use the meta-quest-ui skill after TMP resources are imported.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.