SuperOps Runbooks — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited SuperOps Runbooks (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.
SuperOps.ai provides automation through scripts (runbooks) that execute on managed assets — maintenance tasks, remediation actions, data collection, and custom automation. This skill covers script discovery, execution, scheduling, and result monitoring.
executable scripts, not documentation. Prose runbooks live in hudu-articles or itglue-documents.
script on this device" matches five other plugins here just as well. Confirm which RMM owns the endpoint, then use atera-agents, syncro-assets, immybot-script-execution, ncentral-monitoring-tasks, connectwise-automate-scripts, or datto-rmm-jobs.
software is the anti-pattern immybot-software-deployment exists to replace when the fleet is on ImmyBot.
superops-assets.
A script is a stored definition (scriptId, type, content, parameters, timeout, osType). Executing it creates an execution instance identified by actionConfigId; running it across multiple assets creates a batch identified by batchId. Scheduling produces a scheduleId.
| Script type | Target OS |
|---|---|
| PowerShell | Windows automation |
| Batch | Simple Windows tasks |
| Bash | macOS/Linux automation |
| Python | Cross-platform automation |
| Run As | When to use |
|---|---|
| System | Admin tasks, service management |
| Logged-in User | User-specific tasks |
| Specific User | Specific permission needs |
| Priority | Behavior |
|---|---|
| Immediate | Execute as soon as possible |
| Normal | Standard queue priority |
| Low | Execute during low activity |
See references/fields.md for the complete script and execution field reference.
getAsset) and confirm status is Online — a script queued to anoffline asset stays Pending until it checks in.
runScriptOnAsset with priority: "Immediate" and the required arguments.actionConfigId.getScriptExecution until status reaches a terminal value, then read exitCode,output, and error.
Use runScriptOnAssets with an assetIds array, a future scheduledTime (UTC ISO 8601), and priority: "Low". Track the returned batchId with getBatchExecution, which reports successCount / failedCount alongside per-asset results.
getAssetList filtered by client and status: "Online" to build the asset list.assetId values into runScriptOnAssets with the collection script.getBatchExecution.scheduleScript accepts a recurrence object (type, interval, daysOfWeek) alongside scheduledTime. Omit recurrence for a one-time run.
| Operation | GraphQL |
|---|---|
| List scripts | getScriptList(input: ListInfoInput!) |
| List by OS | getScriptListByType(input: ScriptListByTypeInput!) |
| Get script | getScript(input: ScriptIdentifierInput!) |
| Run on one asset | runScriptOnAsset(input: RunScriptInput!) |
| Run on many assets | runScriptOnAssets(input: RunScriptOnAssetsInput!) |
| Schedule | scheduleScript(input: ScheduleScriptInput!) |
| Execution status | getScriptExecution(input: ScriptExecutionInput!) |
| Batch results | getBatchExecution(input: BatchExecutionInput!) |
| Execution history | getScriptExecutionHistory(input: ScriptExecutionHistoryInput!) |
Arguments are passed as an array of { name, value } objects — values are strings even for numeric parameters. runAs must be supplied per execution; it is not inherited from the script definition's runAs default unless omitted.
See references/api.md for the complete operation catalog with request/response examples and end-to-end workflow queries.
| Error | Cause | Resolution |
|---|---|---|
| Script not found | Invalid script ID | Verify script exists |
| Asset offline | Cannot reach asset | Wait for asset to come online |
| Timeout exceeded | Script ran too long | Increase timeout or optimize script |
| Permission denied | Insufficient RunAs rights | Check execution context |
| Parameter missing | Required param not provided | Add required arguments |
| Rate limit exceeded | Over 800 req/min | Implement backoff |
Exit code 137 means the agent killed the script on timeout, not that the script failed on its own — check the script's timeout before assuming a logic error.
// Common exit codes
const EXIT_CODES = {
0: 'Success',
1: 'General error',
2: 'Misuse of command',
126: 'Permission denied',
127: 'Command not found',
128: 'Invalid exit argument',
130: 'Script terminated (Ctrl+C)',
137: 'Script killed (timeout)',
255: 'Exit status out of range'
};
function interpretExitCode(code) {
return EXIT_CODES[code] || `Unknown exit code: ${code}`;
}Execution is asynchronous — the mutation returns before the script runs. Poll until the status is one of Success, Failed, Timeout, or Cancelled.
// Poll for execution completion
async function waitForExecution(actionConfigId, maxWaitMs = 300000) {
const startTime = Date.now();
const pollInterval = 5000;
while (Date.now() - startTime < maxWaitMs) {
const result = await getScriptExecution({ actionConfigId });
if (['Success', 'Failed', 'Timeout', 'Cancelled'].includes(result.status)) {
return result;
}
await sleep(pollInterval);
}
throw new Error('Execution timed out waiting for completion');
}~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.