Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add commands/rahmanef63/control-room/vps-actiongit clone --depth 1 https://github.com/rahmanef63/control-roomWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/commands/rahmanef63/control-room/vps-action)<a href="https://agentmods.dev/commands/rahmanef63/control-room/vps-action"><img src="https://agentmods.dev/badge/commands/rahmanef63/control-room/vps-action.svg" alt="Measured on agentmods" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.00000 | $0.01576 |
| Opus 5 | $0.00000 | $0.00788 |
| Sonnet 5 | $0.00000 | $0.00315 |
| Haiku 4.5 | $0.00000 | $0.00158 |
Grade B, and why
vps-action scanned grade B with 2 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 4d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Asks for rootmediumPrivilege escalation
A mod that escalates privileges can change anything on the machine, not only the project.
command_template: "sudo systemctl restart {target_id}", Runs shell commandslowCapability
Expected in a hook, worth knowing in a rule or an instructions file.
import { exec } from "child_process"; How it starts
The opening of the file, as written. The whole thing — 201 lines — stays where its author put it; the contents beside it link to each section on GitHub.
VPS Control Room — Action Pipeline Pattern
Gunakan skill ini saat menambahkan action baru ke pipeline executor.
Menambah Action Baru — 4 Langkah
1. Daftarkan di Allowlist
// agent/src/executor/allowlist.ts
export interface ActionDefinition {
command_template: string; // {target_id} dan {payload.*} akan di-replace
target_type: "container" | "service" | "agent" | "dokploy-app" | "fail2ban";
sensitive: boolean; // true = butuh confirm dialog di frontend
timeout_ms: number;
validate_payload?: (payload: any) => boolean;
}
export const ALLOWLIST: Record<string, ActionDefinition> = {
"container.restart": {
command_template: "docker container restart {target_id}",
target_type: "container",
sensitive: false,
timeout_ms: 30000,
},
"container.stop": {
command_template: "docker container stop {target_id}",
target_type: "container",
sensitive: true, // <-- sensitive, butuh konfirmasi
timeout_ms: 30000,
},
"container.logs": {
command_template: "docker logs --tail {payload.lines} {target_id}",
target_type: "container",
sensitive: false,
timeout_ms: 10000,
validate_payload: (p) => typeof p?.lines === "number" && p.lines > 0 && p.lines <= 500,
},
"service.restart": {
command_template: "sudo systemctl restart {target_id}",
target_type: "service",
sensitive: true,
timeout_ms: 30000,
},
"fail2ban.unban": {
command_template: "sudo fail2ban-client set sshd unbanip {target_id}",
target_type: "fail2ban",
sensitive: true,
timeout_ms: 10000,
validate_payload: (p) => true, // target_id divalidasi sebagai IP di validator
},
// Dokploy redeploy = HTTP call, bukan shell command
"dokploy.redeploy": {
command_template: "__HTTP__", // marker bahwa ini bukan shell command
target_type: "dokploy-app",
sensitive: true,
timeout_ms: 60000,
},
};
2. Tambah Validator
// agent/src/executor/validators.ts
import { ALLOWLIST } from "./allowlist";
interface ValidationResult {
valid: boolean;
reason?: string;
}
// knownTargets di-maintain dari collector results
export function validateCommand(
action: string,
targetType: string,
targetId: string,
payload: any,
knownTargets: Map<string, Set<string>> // target_type → Set<target_id>
): ValidationResult {
// 1. Action ada di allowlist?
const def = ALLOWLIST[action];
if (!def) return { valid: false, reason: `unknown action: ${action}` };
// 2. Target type cocok?
if (def.target_type !== targetType) {
return { valid: false, reason: `action ${action} expects target_type ${def.target_type}, got ${targetType}` };
}
// 3. Target ID dikenali? (dari collector)
const targets = knownTargets.get(targetType);
if (!targets?.has(targetId)) {
return { valid: false, reason: `unknown target: ${targetType}/${targetId}` };
}
// 4. Validasi IP format untuk fail2ban
if (targetType === "fail2ban") {
const ipRegex = /^(\d{1,3}\.){3}\d{1,3}$/;
if (!ipRegex.test(targetId)) {
return { valid: false, reason: `invalid IP format: ${targetId}` };
}
}
// 5. Payload valid?
if (def.validate_payload && !def.validate_payload(payload)) {
return { valid: false, reason: `invalid payload for action ${action}` };
}
return { valid: true };
}
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 4d ago First seen · 201 lines · 0 tokens per session scan B 709242b5d176
vps-action is a command published in the GitHub repository rahmanef63/control-room (19 stars, last pushed 4d ago), licensed MIT. It costs nothing until one of its globs matches a file; then it loads 1,576 tokens. A static security scan graded it B with 2 findings (asks for root, runs shell commands). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other commands, from other repositories
portaljs-architect
Recommend a data-portal architecture (storage, compute, catalog, access, hosting, metadata) from your needs, then hand off to the build skills. The advisory entry point.
portaljs-check-data-quality
Audit a local or remote tabular file (CSV/TSV) for common data quality issues. Read-only. Use only when the user explicitly asks to check or audit data quality.
upgrade-webkit
Upgrade Bun's WebKit fork to the latest upstream version of WebKit.
dedupe
Find duplicate GitHub issues.
memory-store
Store an insight, decision, or pattern to memory.
dev
Runs Vendure in development mode. By default it starts three processes: the GraphQL server (ts-node ./src/index.ts), the worker (ts-node ./src/index-worker.ts), and the dashboard (a Vite dev server).