promote — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited promote (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.
<objective> Elevate project-scoped instincts that have proven themselves reliable across many opportunities into the global instinct pool, generalizing their operational rules and maintaining a full lineage trail so the origin is traceable. </objective>
You are promoting instincts from project scope to global scope. Promotion means the rule is now applied universally, not just in one project context. Be conservative — only promote instincts that are genuinely universal.
An instinct is eligible for promotion only if all of the following are true:
status == "proven"confidence >= 0.85evidence array length >= 15 (total opportunity count)If any criterion fails, the instinct is ineligible and must appear in the "Ineligible" section of the report with the specific reason.
Parse the arguments passed to this skill:
/promote INS-XXXXXXXX-XXXX — promote exactly one instinct./promote --scan — find all eligible instincts across all project scopes and prompt before each./promote --scan --project <slug> — only scan ~/.claude/instincts/projects/<slug>/.Single ID mode:
find "$HOME/.claude/instincts/projects/" -name "<instinct-id>.md" 2>/dev/nullIf found, read the file. If not found, check global scope (already promoted — skip with a note).
Scan mode:
# List all project-scoped instinct files
if [ -n "$PROJECT_SLUG" ]; then
find "$HOME/.claude/instincts/projects/$PROJECT_SLUG/" -name "INS-*.md" 2>/dev/null
else
find "$HOME/.claude/instincts/projects/" -name "INS-*.md" 2>/dev/null
fiRead each file found. Parse the YAML frontmatter to extract:
id, name, status, confidence, scopeevidence (list)lineage.promoted_to (if set, already promoted — skip)## Operational RuleFor each candidate, apply the four criteria:
Token specificity check — to measure project-specificity of the operational rule:
python3 -c "
import re, sys
rule_text = '''<PASTE_RULE_TEXT>'''
project_slug = '<PROJECT_SLUG>'
# Tokenize (split on whitespace + punctuation)
tokens = re.findall(r'[a-zA-Z0-9_\-/\.]+', rule_text)
total = len(tokens)
if total == 0:
print('0.00')
sys.exit()
# Count tokens that reference the project
project_terms = set()
project_terms.add(project_slug.lower())
# Also count path segments that contain the slug
specific = sum(1 for t in tokens if project_slug.lower() in t.lower())
ratio = specific / total
print(f'{ratio:.2f}')
"Build a verdict for each instinct:
lineage.promoted_to is setScan mode: After computing verdicts, print the list and ask:
Found N eligible instincts for promotion:
1. INS-XXX | "name" | confidence: 0.XX | evidence: N
2. ...
Promote all? [y/N] or enter numbers (e.g. 1,3):Wait for the user's response before proceeding.
For each instinct approved for promotion:
3a. Generate new global ID:
SUFFIX=$(python3 -c "import secrets; print(secrets.token_hex(2))")
NEW_ID="INS-$(date +%Y%m%d)-${SUFFIX}"
echo "$NEW_ID"3b. Generalize the operational rule.
Read the ## Operational Rule body. Rewrite it to be project-agnostic:
mb-mgmt, backend, content-assistant)team_roster.json in this project → the project's team roster file)3c. Write the new global instinct file:
mkdir -p "$HOME/.claude/instincts/global"
DEST="$HOME/.claude/instincts/global/${NEW_ID}.md"The new file uses this format (match exactly):
---
id: <NEW_ID>
name: "<same name>"
description: "<same description, generalized>"
type: feedback
scope: global
status: proven
confidence: <same confidence>
score:
successes: <copy from source>
failures: <copy from source>
confirmations: <copy from source>
corrections: <copy from source>
last_applied_at: "<copy from source>"
half_life_days: 21
decay_floor: 0.30
signals:
trigger_patterns:
- "<copy from source>"
anti_patterns: []
evidence:
<copy all evidence entries verbatim>
lineage:
parent_ids: []
cluster_id: null
promoted_from: "<ORIGINAL_ID>"
version: 1
created_at: "<ISO-8601 UTC now>"
updated_at: "<ISO-8601 UTC now>"
---
## Operational Rule
<generalized rule body>3d. Update the source instinct file.
Add promoted_to: <NEW_GLOBAL_ID> inside the lineage: block. Use the confidence library's update_instinct_file helper, or use the Edit tool for targeted replacement:
python3 -c "
import sys
sys.path.insert(0, '$HOME/.claude/instincts/lib')
from confidence import update_instinct_file
update_instinct_file('SOURCE_PATH', {
'lineage.promoted_to': 'NEW_GLOBAL_ID',
'updated_at': 'ISO_NOW',
})
"If the lineage block does not have a promoted_to field yet, add it manually after promoted_from:.
3e. Update the project INSTINCTS.md index.
Find the line for this instinct's ID and append → promoted to <NEW_GLOBAL_ID> to it. If the line does not exist, add it.
3f. Update the global INSTINCTS.md index.
File: ~/.claude/instincts/global/INSTINCTS.md
Append a new line under the ## Proven Instincts section:
- <NEW_ID> | proven | <confidence> | "<name>" | promoted <YYYY-MM-DD>If the section does not exist yet, create it.
Output a structured promotion report:
## Promotion Report
### Promoted (N)
- INS-XXX (project/<slug>) → INS-YYY (global) | "<name>" | confidence: 0.XX
→ Lineage tracked, rule generalized
### Ineligible (N)
- INS-XXX | "<name>" | reason: <confidence too low (0.XX < 0.85) | not enough evidence (N < 15) | too project-specific (N% tokens)>
### Already Global (N)
- INS-XXX | "<name>" — already in global scope, skippedIf nothing was promoted, explain clearly. If there are no project-scope instincts at all, say so.
$HOME/.claude/instincts/global/${NEW_ID}.md already exists (collision), generate a new suffix and try again.evidence list verbatim to the promoted file.promoted_from in the new global file and promoted_to in the source file. Without lineage, the promotion is incomplete.mkdir -p).scope: global, skip it with "Already Global" status.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.