backend-conventions — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited backend-conventions (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.
worclaude is a CLI tool, not a backend service. This skill covers the patterns that serve a similar role to backend conventions: data access (filesystem), external service interaction (npm registry), configuration management, and data format handling (JSON).
All file operations use fs-extra (not raw fs):
fs.ensureDir() for creating directories (idempotent)fs.copy() for template-to-project file copyingfs.readJson() / fs.writeJson() for JSON filesfs.pathExists() for existence checks before operationsCross-platform rules:
path.join() — never concatenate with /content.replace(/\r\n/g, '\n'))os.platform() for OS-specific behavior (notification commands)File utilities live in src/utils/file.js: copyDirectory(), removeDirectory().
Single external dependency: https://registry.npmjs.org/worclaude
// Shared utility: src/utils/npm.js — getLatestNpmVersion()
// - 5-second timeout (AbortController)
// - Returns null on any error (offline, timeout, 404)
// - Used by: upgrade command (self-update check), status command (version display)No auth tokens. No environment variables. Plain HTTPS fetch. Graceful degradation — every caller handles null return.
Read template JSON → JSON.parse() → merge objects → replaceHookCommands() → JSON.stringify()Critical: replaceHookCommands() operates on the parsed object's string values, not on the full JSON string. The formatter command and notification command are replaced inside individual hook command strings after parsing.
mergeSettingsPermissionsAndHooks():
Pass 1: JSON.parse(raw) — handles well-formed JSON
Pass 2: JSON.parse(raw.replace(/\\{/g, '{').replace(/\\}/g, '}')) — handles zsh artifacts
Fail: throw Error('Could not parse JSON: clear message')Template files use {variable_name} placeholders (single braces). These are replaced in the parsed object, not in raw JSON strings. Variables: {project_name}, {description}, {tech_stack}, {formatter_command}, {notification_command}.
The project's state tracker. Created during init, updated during upgrade.
{
"version": "1.3.4",
"installedAt": "ISO timestamp",
"lastUpdated": "ISO timestamp",
"projectTypes": ["cli"],
"techStack": ["node"],
"useDocker": false,
"universalAgents": ["plan-reviewer", ...],
"optionalAgents": ["bug-fixer", ...],
"fileHashes": { "agents/plan-reviewer.md": "sha256", ... }
}Hash computation: SHA-256 of CRLF-normalized file content. Used by upgrade and diff commands to detect which files the user has customized vs which are unchanged from install.
useDocker field: Added for settings rebuild during upgrade — determines whether docker.json permissions are included.
No .claude/ AND no CLAUDE.md → Scenario A (fresh)
.claude/ OR CLAUDE.md exists, but no .claude/workflow-meta.json → Scenario B (existing)
.claude/workflow-meta.json exists → Scenario C (upgrade)CLI-specific error patterns:
parseUserJson() throws with clear message naming the filenull, caller shows "(offline)" or skips version checksudo npm install -g worclaudeAll errors surface through display.error() (Chalk-styled red output), never raw console.error.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.