OPS ► COMPETITORS — Intel Dashboard skill

OPS on-demand: This skill should be used when the user asks to "competitor intel", "what did they…

by Lifecycle-Innovations-Limited·MIT license·★ 543 Stars on the repo·GitHub ↗

Use now

Inside this skill

SKILL.md · the author's own words
## Runtime Context

Before rendering, load competitor context:

```bash
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"}')
```

# OPS ► COMPETITORS — Intel Dashboard

Load `ops-rules` before acting. Public repo (no personal data). Outbound: one draft → one approval → one send. If `AskUserQuestion` / `Work…

Parse `$ARGUMENTS` and dispatch to the matching mode below.

Word-for-word excerpt, not a result. Read the full SKILL.md ↓

Files of OPS ► COMPETITORS — Intel Dashboard

Lifecycle-Innovations-Limited/main1 file shown
SKILL.md
Show the full text182 lines

Runtime Context

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"}')

OPS ► COMPETITORS — Intel Dashboard

Load ops-rules before acting. Public repo (no personal data). Outbound: one draft → one approval → one send. If AskUserQuestion / Workflow are missing, follow Rule 10 in ops-rules (Hermes: numbered options / two-turn Telegram card; delegate_task).

Parse $ARGUMENTS and dispatch to the matching mode below.


Mode: No args — Dashboard

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_line

Mobile mode (Rule 7): one line per brand, no banner, no box-drawing.


Mode: <brand-name> — Drill-down

Full event timeline (last 30d), top competitors, latest report, per-competitor signal breakdown.

  1. Run competitor_context --brand "<brand>" --window-days 30
  2. Print brand metadata: category, competitor list, last_run, last_discovery
  3. Print per-competitor signal breakdown (group events by .competitor)
  4. Read latest report:
    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"
    
  5. Print full high-severity event timeline sorted newest-first

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…]
  ...

Mode: 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"
fi

Stream output. Inform the user when done and show updated competitor_briefing_line.


Mode: add-url <brand> <competitor> <kind> <url>

Add a page-diff monitored URL to preferences.json. Valid <kind> values: pricing, features, changelog, careers.

  1. Validate args — if any missing, explain usage and stop.
  2. Show the proposed change:
    Add URL for [brand] → [competitor] ([kind]):
      [url]
    
  3. AskUserQuestion: [Add] / [Cancel]
  4. On confirm, merge via jq:
    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"
    
  5. Confirm written.

Mode: alerts

Tail 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"
fi

Mode: help / unknown args

Print 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 message

Error states

  • configured == 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.
1---
2name: ops-competitors
3description: "OPS on-demand: This skill should be used when the user asks to \"competitor intel\", \"what did they…"
4argument-hint: '[brand-name|refresh [brand]|add-url <brand> <competitor> <kind> <url>|alerts|help]'
5allowed-tools:
6 - Bash
7 - Read
8 - Edit
9 - AskUserQuestion
10effort: low
11maxTurns: 15
12disallowedTools:
13 - Write
14 - NotebookEdit
15---
16 
17## Runtime Context
18 
19Before rendering, load competitor context:
20 
21```bash
22PLUGIN_ROOT="${CLAUDE_PLUGIN_ROOT:-$(dirname $(which ops-competitors 2>/dev/null) 2>/dev/null)/..}"
23OPS_DATA_DIR="${OPS_DATA_DIR:-$HOME/.claude/plugins/data/ops-ops-marketplace}"
24source "$PLUGIN_ROOT/scripts/lib/competitor/context.sh" 2>/dev/null || true
25CTX=$(competitor_context 2>/dev/null || echo '{"configured":false,"reason":"lib_not_found"}')
26```
27 
28# OPS ► COMPETITORS — Intel Dashboard
29 
30Load `ops-rules` before acting. Public repo (no personal data). Outbound: one draft → one approval → one send. If `AskUserQuestion` / `Workflow` are missing, follow Rule 10 in `ops-rules` (Hermes: numbered options / two-turn Telegram card; `delegate_task`).
31 
32Parse `$ARGUMENTS` and dispatch to the matching mode below.
33 
34---
35 
36## Mode: No args — Dashboard
37 
38Show all tracked brands with last_run, alert counts, and recent activity. Use `competitor_briefing_line` for each brand row.
39 
40```
41━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
42 OPS ► COMPETITORS — [date]
43━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
44 
45TRACKED BRANDS ([n] total)
46 [brand] last run [date] [n] alerts · [n] med · [n] low
47 ...
48 
49PENDING QUEUES
50 immediate: [n] daily: [n]
51 
52RECENT HIGH ALERTS (last 7d)
53 [timestamp] [brand] [competitor] [snippet…]
54 ...
55━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
56```
57 
58If `configured == false`: print setup hint and stop.
59 
60```bash
61# Load context
62source "$PLUGIN_ROOT/scripts/lib/competitor/context.sh"
63competitor_context --window-days 7
64competitor_briefing_line
65```
66 
67Mobile mode (Rule 7): one line per brand, no banner, no box-drawing.
68 
69---
70 
71## Mode: `<brand-name>` — Drill-down
72 
73Full event timeline (last 30d), top competitors, latest report, per-competitor signal breakdown.
74 
751. Run `competitor_context --brand "<brand>" --window-days 30`
762. Print brand metadata: category, competitor list, last_run, last_discovery
773. Print per-competitor signal breakdown (group events by `.competitor`)
784. Read latest report:
79 ```bash
80 SLUG=$(echo "<brand>" | tr '[:upper:] /' '[:lower:]--' | tr -cd 'a-z0-9-_.')
81 REPORT="$OPS_DATA_DIR/reports/competitor-intel/latest-${SLUG}.md"
82 [[ -f "$REPORT" ]] && head -80 "$REPORT"
83 ```
845. Print full high-severity event timeline sorted newest-first
85 
86Output format:
87 
88```
89BRAND: [name] category: [cat] last run: [date]
90competitors: [a, b, c, ...]
91 
92SIGNAL BREAKDOWN
93 [competitor] high: [n] med: [n] low: [n]
94 
95LATEST REPORT (excerpt)
96 [first 80 lines of report]
97 
98EVENT TIMELINE (30d — [n] total)
99 [timestamp] HIGH [competitor] [source] [snippet…]
100 ...
101```
102 
103---
104 
105## Mode: `refresh [brand]`
106 
107Manually triggers the weekly intel cron immediately.
108 
109```bash
110PLUGIN_ROOT="${CLAUDE_PLUGIN_ROOT:-...}"
111CRON_SCRIPT="$PLUGIN_ROOT/scripts/ops-cron-competitor-intel.sh"
112 
113# If a specific brand is given, pass it via env override
114if [[ -n "$BRAND_ARG" ]]; then
115 BRAND_NAME="$BRAND_ARG" bash "$CRON_SCRIPT"
116else
117 bash "$CRON_SCRIPT"
118fi
119```
120 
121Stream output. Inform the user when done and show updated `competitor_briefing_line`.
122 
123---
124 
125## Mode: `add-url <brand> <competitor> <kind> <url>`
126 
127Add a page-diff monitored URL to `preferences.json`. Valid `<kind>` values: `pricing`, `features`, `changelog`, `careers`.
128 
1291. Validate args — if any missing, explain usage and stop.
1302. Show the proposed change:
131 ```
132 Add URL for [brand] → [competitor] ([kind]):
133 [url]
134 ```
1353. AskUserQuestion: `[Add]` / `[Cancel]`
1364. On confirm, merge via jq:
137 ```bash
138 PREFS="$OPS_DATA_DIR/preferences.json"
139 jq --arg brand "$BRAND" --arg comp "$COMP" --arg kind "$KIND" --arg url "$URL" '
140 .competitor_intel.urls[$brand][$comp][$kind] = $url
141 ' "$PREFS" > /tmp/prefs-tmp.json && mv /tmp/prefs-tmp.json "$PREFS"
142 ```
1435. Confirm written.
144 
145---
146 
147## Mode: `alerts`
148 
149Tail the last 20 lines of the alerts log:
150 
151```bash
152ALERTS="$OPS_DATA_DIR/reports/competitor-intel/alerts.log"
153if [[ -f "$ALERTS" ]]; then
154 tail -20 "$ALERTS"
155else
156 echo "No alerts log found at $ALERTS"
157fi
158```
159 
160---
161 
162## Mode: `help` / unknown args
163 
164Print available subcommands:
165 
166```
167ops-competitors — dashboard (all brands)
168ops-competitors <brand> — drill-down: events, report, breakdown
169ops-competitors refresh [brand] — run intel cron now (optional brand filter)
170ops-competitors add-url <b> <c> <k> <url> — add page-diff URL to preferences.json
171ops-competitors alerts — tail alerts.log (last 20 lines)
172ops-competitors help — this message
173```
174 
175---
176 
177## Error states
178 
179- `configured == false` → print `"Competitor-intel not configured. Run /ops:setup competitor-intel to get started."` and stop.
180- `CRON_SCRIPT` not found → print path and stop.
181- `PREFS` not writable for `add-url` → surface error, do not silently fail.
182 

Discussion

Alternatives

/ar:ar-status — Experiment DashboardShow experiment dashboard with results, active loops, and progress. Use when the user runs /ar:ar-status or asks how an autoresearch experiment is going.Data & AI · MITAnalytics dashboardTurn a LinkedIn Analytics export into an interactive dark-themed React dashboard plus a written strategic analysis with 5 data-backed content recommendations. Reads every sheet in the export, builds charts for engagement trend, follower growth, post performance scatter, day-of-week heatmap, and audience breakdown. Use this skill whenever the user says "analyse my linkedin", "linkedin analytics", "build my dashboard", "review my performance", or uploads a LinkedIn Analytics export file. Requires the user's LinkedIn Analytics export (xlsx) as input.Creator · MITEarnings Preview SkillGenerate a pre-earnings briefing for any stock using Yahoo Finance data. Use this skill whenever the user wants to prepare for an upcoming earnings report, understand what analysts expect, review a company's beat/miss track record, or get a quick overview before an earnings call. Triggers include: "earnings preview for AAPL", "what to expect from TSLA earnings", MSFT reports next week", "earnings preview", "pre-earnings analysis", what are analysts expecting for NVDA", "earnings estimates for", will GOOGL beat earnings", "earnings beat/miss history", upcoming earnings", "before earnings", "earnings setup", consensus estimates", "earnings whisper", "EPS expectations", what's the street expecting", "earnings season preview", any mention of preparing for or previewing an earnings report, or any request to understand expectations ahead of a company's earnings date. Always use this skill when the user mentions a ticker in context of upcoming earnings, even if they don't say "preview" explicitly. · MITBenchmark checklistVet a perf measurement (limiter, tuning, limits, errors, repeatability, relevance, and whether the work happened) before you report or act on it. Use when you run a benchmark or report a speedup or regression you measured.Data & AI · MIT