primer — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited primer (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.
Copy a pre-defined rules file into the current project's .claude/rules/ directory. The bundled rules teach Claude to re-read its own instruction files after structural changes so it stops generating stale path references.
This skill ships ONE file. It does not author new rules (use /rulesense:forge), audit existing rules (use /rulesense:assay), or reformat rule files for readability (use /rulesense:file).
The bundled rules file lives at ${CLAUDE_SKILL_DIR}/assets/recommendation-files.md inside the plugin install. The skill reads it and writes it into the project at .claude/rules/recommendation-files.md.
AskUserQuestion shape constraints — apply to every invocation in this skillEvery decision point with a fixed, enumerable answer space MUST use AskUserQuestion — plain-text questions break the button-driven flow and users may not notice them.
{ questions: [{ question, header, multiSelect, options }] }. The questions: [...] array wrapper is required.
header MUST be ≤12 characters (tool-enforced; longer values truncatesilently).
options MUST contain 2–4 entries. The harness auto-injects an "Other"escape when needed — do NOT add a 5th option manually.
label and description. Omitting descriptionproduces bare buttons with no guidance.
multiSelect: true ONLY when selections are logically independent. Forevery decision in this skill, multiSelect: false.
Bash invocation MUST include a short description field (5–10words) naming its purpose.
MUST invoke TaskCreate for each task below before any other work, capturing each returned taskId. In non-interactive / SDK sessions, fall back to TodoWrite. Every task MUST carry paired content (imperative) and activeForm (progressive) fields — they are NOT interchangeable. content renders when pending or completed; activeForm renders while in_progress.
Initial tasks (create all up front, with both forms):
{ content: "Load the bundled rules file", activeForm: "Loading the bundled rules file" } — Phase 1{ content: "Detect destination conflict", activeForm: "Detecting destination conflict" } — Phase 2{ content: "Apply the user's chosen action", activeForm: "Applying the user's chosen action" } — Phase 3{ content: "Confirm and report", activeForm: "Confirming and reporting" } — Phase 4MUST invoke TaskUpdate with the captured taskId immediately before starting each task (status in_progress) and immediately upon finishing (status completed). Never batch completions. Never leave multiple tasks in_progress simultaneously. Never start a new task before marking the prior one completed.
Invoke Read with file_path: "${CLAUDE_SKILL_DIR}/assets/recommendation-files.md". Hold the full content in memory for use in Phase 3.
If Read fails, stop the skill and tell the user verbatim: "I couldn't load the bundled rules file. Reinstall the rulesense plugin and try again." Do not attempt to fall back to inline content — the canonical text lives in the bundled file.
Mark task 1 completed and proceed to Phase 2.
The destination is always .claude/rules/recommendation-files.md relative to the current project root. The destination is fixed; the user does not pick a custom path.
Invoke Glob with pattern: ".claude/rules/recommendation-files.md" to check whether the file already exists.
If the file does NOT exist: skip the conflict question and proceed to Phase 3 with action write-fresh.
If the file DOES exist: MUST invoke AskUserQuestion:
".claude/rules/recommendation-files.md already exists. How should I handle it?""Conflict"false{ label: "Overwrite", description: "Replace the existing file with the bundled rules. Loses any edits you made — git history can recover them." }{ label: "Merge", description: "Keep your file and append the bundled rules under a new heading. Duplicates may appear; run /rulesense:assay afterwards to deduplicate." }{ label: "Cancel", description: "Leave the file as-is. Nothing is written." }Carry the user's choice into Phase 3 as the action label.
Mark task 2 completed and proceed to Phase 3.
Branch on the action determined in Phase 2.
write-fresh (file did not exist)MUST invoke Bash with:
mkdir -p .claude/rules"Ensure .claude/rules/ directory exists"Then invoke Write with file_path: ".claude/rules/recommendation-files.md" and content set to the bundled rules content captured in Phase 1.
OverwriteMUST invoke Bash with:
mkdir -p .claude/rules"Ensure .claude/rules/ directory exists"Then invoke Write with file_path: ".claude/rules/recommendation-files.md" and content set to the bundled rules content captured in Phase 1. The existing file is replaced atomically.
MergeInvoke Read on .claude/rules/recommendation-files.md to capture the current content. Build the merged content as:
## Recommendation File Hygiene (rulesense:primer).top-level # ... title stripped (keep only the prose paragraphs and bullet rules below the title).
Then invoke Write with file_path: ".claude/rules/recommendation-files.md" and content set to the merged content built above.
Do NOT attempt rule-by-rule deduplication. The user can run /rulesense:assay afterwards to surface duplicates structurally — that is the deduplication step, not this one.
CancelDo nothing. Skip directly to Phase 4 with the cancellation report.
Mark task 3 completed and proceed to Phase 4.
Tell the user what happened in plain language. Pick the message matching the action taken in Phase 3 and send it verbatim.
If `write-fresh`:
Installed the recommended rules at .claude/rules/recommendation-files.md. Claude will now re-read your instruction files after renames, moves, and deletions, and verify cited paths before stating them as fact.If `Overwrite`:
Replaced .claude/rules/recommendation-files.md with the bundled rules. Any edits you had in that file are gone — git history can recover them if you need.If `Merge`:
Appended the bundled rules to.claude/rules/recommendation-files.mdunder a new heading. Run/rulesense:assayto check for duplicates between your existing rules and the bundled set.
If `Cancel`:
No changes made. Your existing .claude/rules/recommendation-files.md is untouched.Mark task 4 completed.
/rulesense:forge./rulesense:assay./rulesense:file.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.