ops-competitors — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited ops-competitors (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.
Before rendering, load competitor context:
PLUGIN_ROOT="${CLAUDE_PLUGIN_ROOT:-$(dirname $(which ops-competitors 2>/dev/null) 2>/dev/null)/..}"
OPS_DATA_DIR="${OPS_DATA_DIR:-$HOME/.claude/plugins/data/ops-ops-marketplace}"
source "$PLUGIN_ROOT/scripts/lib/competitor/context.sh" 2>/dev/null || true
CTX=$(competitor_context 2>/dev/null || echo '{"configured":false,"reason":"lib_not_found"}')Parse $ARGUMENTS and dispatch to the matching mode below.
Show all tracked brands with last_run, alert counts, and recent activity. Use competitor_briefing_line for each brand row.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
OPS ► COMPETITORS — [date]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
TRACKED BRANDS ([n] total)
[brand] last run [date] [n] alerts · [n] med · [n] low
...
PENDING QUEUES
immediate: [n] daily: [n]
RECENT HIGH ALERTS (last 7d)
[timestamp] [brand] [competitor] [snippet…]
...
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━If configured == false: print setup hint and stop.
# Load context
source "$PLUGIN_ROOT/scripts/lib/competitor/context.sh"
competitor_context --window-days 7
competitor_briefing_lineMobile mode (Rule 7): one line per brand, no banner, no box-drawing.
<brand-name> — Drill-downFull event timeline (last 30d), top competitors, latest report, per-competitor signal breakdown.
competitor_context --brand "<brand>" --window-days 30.competitor) SLUG=$(echo "<brand>" | tr '[:upper:] /' '[:lower:]--' | tr -cd 'a-z0-9-_.')
REPORT="$OPS_DATA_DIR/reports/competitor-intel/latest-${SLUG}.md"
[[ -f "$REPORT" ]] && head -80 "$REPORT"Output format:
BRAND: [name] category: [cat] last run: [date]
competitors: [a, b, c, ...]
SIGNAL BREAKDOWN
[competitor] high: [n] med: [n] low: [n]
LATEST REPORT (excerpt)
[first 80 lines of report]
EVENT TIMELINE (30d — [n] total)
[timestamp] HIGH [competitor] [source] [snippet…]
...refresh [brand]Manually triggers the weekly intel cron immediately.
PLUGIN_ROOT="${CLAUDE_PLUGIN_ROOT:-...}"
CRON_SCRIPT="$PLUGIN_ROOT/scripts/ops-cron-competitor-intel.sh"
# If a specific brand is given, pass it via env override
if [[ -n "$BRAND_ARG" ]]; then
BRAND_NAME="$BRAND_ARG" bash "$CRON_SCRIPT"
else
bash "$CRON_SCRIPT"
fiStream output. Inform the user when done and show updated competitor_briefing_line.
add-url <brand> <competitor> <kind> <url>Add a page-diff monitored URL to preferences.json. Valid <kind> values: pricing, features, changelog, careers.
Add URL for [brand] → [competitor] ([kind]):
[url][Add] / [Cancel] PREFS="$OPS_DATA_DIR/preferences.json"
jq --arg brand "$BRAND" --arg comp "$COMP" --arg kind "$KIND" --arg url "$URL" '
.competitor_intel.urls[$brand][$comp][$kind] = $url
' "$PREFS" > /tmp/prefs-tmp.json && mv /tmp/prefs-tmp.json "$PREFS"alertsTail the last 20 lines of the alerts log:
ALERTS="$OPS_DATA_DIR/reports/competitor-intel/alerts.log"
if [[ -f "$ALERTS" ]]; then
tail -20 "$ALERTS"
else
echo "No alerts log found at $ALERTS"
fihelp / unknown argsPrint available subcommands:
ops-competitors — dashboard (all brands)
ops-competitors <brand> — drill-down: events, report, breakdown
ops-competitors refresh [brand] — run intel cron now (optional brand filter)
ops-competitors add-url <b> <c> <k> <url> — add page-diff URL to preferences.json
ops-competitors alerts — tail alerts.log (last 20 lines)
ops-competitors help — this messageconfigured == false → print "Competitor-intel not configured. Run /ops:setup competitor-intel to get started." and stop.CRON_SCRIPT not found → print path and stop.PREFS not writable for add-url → surface error, do not silently fail.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.