Agent skill

Competitor Monitoring

by HybridAIOne in HybridAIOne/hybridclaw

Keep watch on competitors (and, where sources allow, industry people) on a schedule and report only real changes.

MITAuto-check passedProductivity & Automation

Install Competitor Monitoring

skills CLI
$ npx skills add HybridAIOne/hybridclaw --skill competitor-monitoring -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install HybridAIOne/hybridclaw competitor-monitoring --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/HybridAIOne/hybridclaw.git skills-src && mkdir -p .claude/skills && cp -r skills-src/community-skills/competitor-monitoring .claude/skills/competitor-monitoring && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
competitor-monitoring
GitHub stars
159
Token cost
~3.1k tokens
SKILL.md length
1,521 words
Files
1
Skills in repo
72
Repo updated
First seen
Licence
MIT

At a glance

Keep watch on competitors (and, where sources allow, industry people) on a schedule and report only real changes.

  • Works in 7 steps: Clarify who and what to look for. If the… → Derive a stable id from the name:… → Create the cron task → …
  • Someone wants a competitor monitored
  • SKILL.md covers The four stores, A. Set up a watch, B. A scheduled run and C. The result block, plus 2 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Competitor Monitoring is an agent skill from HybridAIOne/hybridclaw. Keep watch on competitors (and, where sources allow, industry people) on a schedule and report only real changes. Use when someone wants a competitor monitored, asks what a watched company has been doing, wants to change or stop a watch — and always when a scheduled run tells you to. Triggers include "watch", "keep an eye on", "monitor competitor", "what is the competition doing", "what changed at X", "stop watching", and their German equivalents ("beobachte", "behalte im Auge", "was macht der Wettbewerb").

Its SKILL.md is about 3.1k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Productivity & Automation. The repository describes itself as: Enterprise-ready self-hosted AI assistant runtime with sandboxed execution, secure credentials, approvals, and memory. The licence is MIT.

When your agent uses it

  • Someone wants a competitor monitored
  • Asks what a watched company has been doing
  • Wants to change
  • Stop a watch — and always when a scheduled run tells you to

Example prompts

  • “keep an eye on”
  • “monitor competitor”
  • “what is the competition doing”
  • “/competitor-monitoring”

Workflow steps

7 steps, taken from the first numbered list in SKILL.md.

  1. Clarify who and what to look for. If the focus is missing, ask
  2. Derive a stable id from the name: lowercase ASCII, hyphens, no
  3. Create the cron task
  4. Add the target with its task_id to watch/targets.json (create the file
  5. Do not create watch/.json. The first scheduled run records the
  6. Write the result block right away (section C) with the updated list and
  7. Confirm in one sentence: "I'm watching Allianz from tomorrow morning,

What it can do on your machine

Read from SKILL.md and the folder at commit 8162701. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are markdown).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • allianz.de

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Competitor Monitoring loads about 3.1k tokens when it runs. Until then it costs about 134 tokens; SKILL.md has 1,521 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~134
When it runs · the whole SKILL.md, loaded when a task matches
~3.1k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from HybridAIOne/hybridclaw at commit 8162701, republished under its MIT licence (© HybridAIOne). 1,521 words, ~3,071 tokens.

Download SKILL.mdSave it as .claude/skills/competitor-monitoring/SKILL.md (or your agent's skills folder).
name
competitor-monitoring
description
Keep watch on competitors (and, where sources allow, industry people) on a schedule and report only real changes. Use when someone wants a competitor monitored, asks what a watched company has been doing, wants to change or stop a watch — and always when a scheduled run tells you to. Triggers include "watch", "keep an eye on", "monitor competitor", "what is the competition doing", "what changed at X", "stop watching", and their German equivalents ("beobachte", "behalte im Auge", "was macht der Wettbewerb").
user-invocable
true

Competitor Monitoring

You watch competitors for a salesperson. They read the result in an app, not in the chat — the Sales Companion iOS app parses a fenced watch block from your daily memory note. Your job is not to write a nice report but to detect reliably what changed since the last run, and to leave out everything else.

Keep the tone factual. No "exciting", no "interestingly". A salesperson reads this in twenty seconds in the morning. Write names, titles and details in the user's language.

The four stores

WhatWhereHow
Scheduleone cron task per targetcron add / update / remove — chat only
Watchlistwatch/targets.json in the workspaceread / write
Comparison statewatch/<target-id>.json in the workspaceread / write
Result for the apptoday's daily notememory with action: "append", target: "daily"

watch/targets.json is the watchlist. Scheduled runs cannot call cron at all — the tool is blocked there — so they can only know the full list from this file. Change it in the same step as the cron task, every time:

{"targets": [
  {"id": "<target-id>", "name": "<display name>", "kind": "company",
   "focus": "<what to watch>", "schedule": "<e.g. täglich 07:30>",
   "url": "<website>", "task_id": <number from cron add>}
]}

This and every other <…> shape in this file is a template: fill in real values from the user's request, watch/targets.json or this run. Never write a template, or an example company name from this file, into any file.

task_id is the number cron add reports ("Scheduled … task #42 …"); pass it as taskId to update and remove.

Why these stores: the memory tool may only write today's daily note, and only memory files are synced to the platform, where the app reads them. A workspace file never reaches the app, so it holds your own state.

A. Set up a watch

This happens in a chat with the user, where cron is available.

  1. Clarify who and what to look for. If the focus is missing, ask exactly once ("What should I watch at Allianz — prices, products, people?"). If the website is missing, look it up yourself; do not ask.

  2. Derive a stable id from the name: lowercase ASCII, hyphens, no umlauts — allianz-de, barmenia, jane-doe. If watch/targets.json already has it, update that watch instead of adding a second one.

  3. Create the cron task:

    cron action=add
      cron="<minute> <hour> * * *"
      tz="<user's IANA time zone>"
      channel="<the user's email address>"
      prompt="Competitor monitoring: use the competitor-monitoring skill,
              read its SKILL.md and follow it. Target: <target-id>
              (<display name>, <website>), kind=<company|person>,
              focus: <what to watch>."
    • Pass tz with the user's IANA time zone so the run keeps its local time across daylight-saving changes. If you do not know it, ask; for a German-speaking user, Europe/Berlin is the usual answer.
    • channel is required when the request comes from a web chat session: the tool refuses to schedule there, because the output of a task created without a delivery channel would be discarded. Use the user's email address or another configured messaging target. If none is known, say so plainly instead of trying without one.
  4. Add the target with its task_id to watch/targets.json (create the file if it is missing).

  5. Do not create watch/<id>.json. The first scheduled run records the baseline; a file created now would only be empty.

  6. Write the result block right away (section C) with the updated list and "findings": []. Otherwise the new target only appears in the app after the first scheduled run.

  7. Confirm in one sentence: "I'm watching Allianz from tomorrow morning, focus pet insurance."

Changing a watch (time, focus): cron action=update taskId=<task_id> from watch/targets.json, then update the entry there. Never add a second task for the same target.

Removing a watch: cron action=remove taskId=<task_id>, remove the entry from watch/targets.json, delete watch/<id>.json, write the block again.

B. A scheduled run

You receive the task's prompt. cron is not available here; do not try it. Work strictly in this order:

  1. Read the watchlist and the previous state. read watch/targets.json and read watch/<id>.json. If the state file is missing or its snapshots are empty, this is a baseline run: fetch the sources, save them as the state (step 6) and report nothing as a finding — there is nothing to compare against yet. Still write the block with "findings": [].

  2. Fetch the current state. Use several sources, not just one:

    • web_search with freshness: "week" on company name plus focus
    • web_fetch on the pages that belong to the focus (pricing, product, press pages) — they are listed in the state under snapshots
    • for kind=person, also search name plus role. Social activity is only partly visible with the available tools, so rely on interviews, talks, press releases and job changes.
  3. Compare. For each source: did the substance change? Ignore counters, dates, cookie banners, ordering and rewording that does not change meaning.

  4. Judge. A finding only counts if it falls into one of these categories. Use the category names as given; the app shows them as labels.

    categoryExample
    Preis (price)plan more expensive, new discount, tiers changed
    Produkt (product)new product, benefit dropped, terms changed
    Partnerschaft (partnership)cooperation, reseller, integration
    Finanzierung (funding)funding round, acquisition, sale
    Personal (people)change in management or sales leadership
    Stellen (hiring)notable job ads that reveal a direction

    Everything else — guide articles, blog posts, social chatter, redesigns, anniversaries — is severity: "minor" or does not belong in the block at all. severity: "significant" is only for what the salesperson must know today because it changes a conversation; only significant triggers a notification on their phone. When in doubt, minor: a phone that buzzes too often gets muted.

  5. Deduplicate. Give every finding a fingerprint: category, source URL and the new value in a few words — Preis|https://allianz.de/preise|Premium 27,90 €. If the state's reported map already has that fingerprint, the change was reported before: drop it from this run. Otherwise assign a new id (see section C).

  6. Write the result block first (section C). Only if the memory append succeeded, go on to step 7. If it fails — for example because today's note is full — stop and leave the state untouched, so the next run finds the same changes again instead of losing them. Reply with the failure line (step 8).

  7. Then update the state. write watch/<id>.json:

    {"target": "<target-id>",
     "snapshots": {
       "<source url>": {"fetched_at": "<ISO time>", "summary": "<short>",
                        "key_facts": {"<fact>": "<value>"}}},
     "reported": {
       "<fingerprint>": {"id": "<finding id>", "first_seen": "<YYYY-MM-DD>"}}}

    Keep summary short — this file is your memory, not an archive. Drop reported entries older than 30 days; the app only sees about two weeks of notes anyway.

  8. Reply with a short digest. Your final reply is delivered to the task's channel — usually the user's inbox — after every run, so it must be readable at a glance. Plain text in the user's language, no preamble, no JSON, no tables, no sign-off. Exactly one of these shapes:

    • significant findings, one line each, at most five: <Name>: <finding title> — <source url>
    • only minor findings: <Name>: <n> kleinere Änderungen, Details in der App.
    • nothing new: <Name>: nichts Neues.
    • baseline run: <Name>: Beobachtung läuft, Ausgangsstand gespeichert.
    • the block could not be written: <Name>: Lauf fehlgeschlagen — <reason in a few words>.

If you find nothing, write the block anyway, with "findings": []. The app tells "nothing happened" apart from "the run did not take place".

Show full SKILL.md (397 more words)Show less

C. The result block

The app reads only this block. Append it with memory (action: "append", target: "daily") to the end of today's daily note.

The shape — a template, not data. Every <…> is replaced with real values; the block you write must be valid JSON with no < or > left in it:

markdown
```watch
{
  "targets": [
    {"id": "<target-id>", "name": "<display name>", "kind": "<company|person>",
     "focus": "<what is watched>", "schedule": "<human-readable, local time>",
     "url": "<website>"}
  ],
  "findings": [
    {"id": "<finding id>", "target": "<target-id>",
     "date": "<YYYY-MM-DD>", "severity": "<significant|minor>", "category": "<category>",
     "title": "<one line, user's language>",
     "detail": "<at most two sentences>",
     "source": "<page where you saw it>"}
  ]
}
```

Write only what is real. targets comes from watch/targets.json; findings only from changes you saw in this run (or []). A block that repeats this template's placeholders, or invents a company that is not on the watchlist, puts false alerts on the user's phone.

Rules that are not negotiable:

  • targets always holds the complete list from watch/targets.json — not just this run's target — without the internal task_id. The app takes the list from the newest note; an incomplete list makes targets disappear.
  • kind is company or person. schedule is a human-readable label in the user's language and local time ("täglich 07:30"), not the cron expression.
  • A finding's id is assigned once and never changes. Scheme: <target>-<first-seen date>-<running number>, recorded in the state's reported map under the finding's fingerprint. Never derive an id from today's date for a change that was already reported — the app remembers announced ids and would notify twice.
  • Valid JSON: double quotes, no comments, no trailing commas. The app discards a broken block — the whole run is then lost.
  • detail stays within two sentences. Daily notes are truncated at 20,000 characters when synced and the space is shared; long explanations belong in watch/<id>.json, not here.
  • source is the page where you saw it, not the homepage. No verifiable source, no finding.

What you do not do

  • Do not invent findings to make a run look successful. An empty run is a good result.
  • Do not estimate prices or figures. If it is not stated, it is not in there.
  • Do not report anything you only know from prior knowledge — only what you actually saw in this run.
  • Do not write anything beyond the digest in step 8. The report is the block; the digest only points at it.

Prerequisites

  • Cloud memory must be enabled for the agent instance. It is off by default; without it the daily notes never leave the sandbox and the app shows nothing. If a user asks why the app stays empty, point them to the HybridClaw settings in the web workspace.
  • A delivery channel for scheduled tasks (see step A.3).

© HybridAIOne, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in community-skills/competitor-monitoring of HybridAIOne/hybridclaw.

Open the folder on GitHubat commit 8162701

Compare with similar skills

Competitor Monitoring next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Competitor Monitoring compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Competitor Monitoring this skillHybridAIOne/hybridclaw159—~3.1kAutomated safety check: PassMIT
Agent Browserquran/quran.com-frontend-next1.9k40 repos~3.3kAutomated safety check: PassNone
Dependency Watchtelegramdesktop/tdesktop33k1 repos~2.2kAutomated safety check: PassGPL-3.0
Perform Tasktelegramdesktop/tdesktop33k2 repos~3kAutomated safety check: PassGPL-3.0
Brave Searchbadlogic/pi-skills2.6k5 repos~592Automated safety check: PassMIT
Garden Inboxpaperclipai/paperclip100k—~1.1kAutomated safety check: PassMIT

Similar skills

  • Agent Browser

    quran/quran.com-frontend-next

    Automates browser interactions for web testing, form filling, screenshots, and data extraction.

    1.9k GitHub starsUsed in 40 repos~3.3k tokens
    Productivity & AutomationAuto-check passed
  • Dependency Watch

    telegramdesktop/tdesktop

    Audit Telegram Desktop dependencies on freshly fetched origin/dev for releases and security fixes, including upstream lag and backport candidates in patched forks.

    33k GitHub starsUsed in 1 repo~2.2k tokens
    Productivity & AutomationAuto-check passed
  • Perform Task

    telegramdesktop/tdesktop

    Resolve, start or resume, implement, review, test, and publish exactly one existing ai-tdesktop task by short slug or full dated id, including rare blocked retries and split-required results.

    33k GitHub starsUsed in 2 repos~3k tokens
    Productivity & AutomationAuto-check passed
  • Brave Search

    badlogic/pi-skills

    Web search and content extraction via Brave Search API. An agent skill from badlogic/pi-skills.

    2.6k GitHub starsUsed in 5 repos~592 tokens
    Productivity & AutomationAuto-check passed
  • Garden Inbox

    paperclipai/paperclip

    Scan a Paperclip user's Mine inbox, classify reversible archive candidates, request checkbox confirmation, and archive only accepted selections.

    100k GitHub stars~1.1k tokensUpdated today
    Productivity & AutomationAuto-check passed
  • Continue

    telegramdesktop/tdesktop

    Continue autonomous Telegram Desktop development from the shared ai-tdesktop repository.

    33k GitHub starsUsed in 2 repos~9.4k tokens
    Productivity & AutomationAuto-check passed

More from HybridAIOne/hybridclaw

All 72 skills in this repo
  • Hermes3000 Writing

    HybridAIOne/hybridclaw

    Use Hermes3000 to plan, draft, revise, save, check consistency, and export long-form manuscripts through the Hermes3000 AI writing portal API.

    159 GitHub stars~2.7k tokensUpdated today
    Auto-check passed
  • Manim Video

    HybridAIOne/hybridclaw

    Plan, script, render, and stitch Manim Community Edition videos in Python.

    159 GitHub stars~4.7k tokensUpdated today
    Auto-check: notes
  • Skill Creator

    HybridAIOne/hybridclaw

    Create and update SKILL.md-based skills with strong trigger metadata, lean docs, and reliable init, validate, package, and publish workflows.

    159 GitHub stars~2k tokensUpdated today
    Auto-check passed
  • XLSX

    HybridAIOne/hybridclaw

    Create, edit, inspect, and analyze .xlsx spreadsheets and Excel workbooks.

    159 GitHub stars~1.7k tokensUpdated today
    Auto-check passed
  • Excalidraw

    HybridAIOne/hybridclaw

    Create and revise editable .excalidraw diagrams as Excalidraw JSON for architecture diagrams, flowcharts, sequence diagrams, concept maps, and other hand-drawn explainers.

    159 GitHub stars~1.2k tokensUpdated today
    Auto-check passed
  • Google Ads

    HybridAIOne/hybridclaw

    Manage Google Ads accounts with safe GAQL reporting, campaign planning, guarded mutations, and gateway-proxied REST API calls.

    159 GitHub stars~4k tokensUpdated today
    Auto-check passed

Questions about Competitor Monitoring

What does Competitor Monitoring do?

Keep watch on competitors (and, where sources allow, industry people) on a schedule and report only real changes. Competitor Monitoring is an agent skill from HybridAIOne/hybridclaw. Keep watch on competitors (and, where sources allow, industry people) on a schedule and report only real changes.

When should I use Competitor Monitoring?

Competitor Monitoring fits situations like: someone wants a competitor monitored; asks what a watched company has been doing; wants to change; stop a watch — and always when a scheduled run tells you to.

How do I install Competitor Monitoring in Claude Code?

Run `npx skills add HybridAIOne/hybridclaw --skill competitor-monitoring -a claude-code`. Or copy the skill folder (community-skills/competitor-monitoring in HybridAIOne/hybridclaw) into .claude/skills/competitor-monitoring in your project. Claude Code loads it when a task matches its description.

How do I install Competitor Monitoring in Codex?

Run `npx skills add HybridAIOne/hybridclaw --skill competitor-monitoring -a codex`. Or copy the skill folder (community-skills/competitor-monitoring in HybridAIOne/hybridclaw) into .agents/skills/competitor-monitoring in your project. Codex loads it when a task matches its description.

Can I use Competitor Monitoring in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add HybridAIOne/hybridclaw --skill competitor-monitoring -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/competitor-monitoring, .gemini/skills/competitor-monitoring, .github/skills/competitor-monitoring and .opencode/skills/competitor-monitoring in your project.

What does Competitor Monitoring need to run?

SKILL.md names no scripts, command-line tools or credentials: Competitor Monitoring is instructions for the agent only.

Does Competitor Monitoring access the network?

SKILL.md names 1 domain. As links in the text: allianz.de. This is read from the text; nothing was executed.

Is Competitor Monitoring safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Competitor Monitoring use?

Competitor Monitoring is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Competitor Monitoring use?

About 3.1k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Competitor Monitoring?

Skills that share tags, products or a category with Competitor Monitoring: Agent Browser (quran/quran.com-frontend-next, 1.9k stars), Dependency Watch (telegramdesktop/tdesktop, 33k stars), Perform Task (telegramdesktop/tdesktop, 33k stars) and Brave Search (badlogic/pi-skills, 2.6k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Competitor Monitoring?

HybridAIOne (a GitHub organization) maintains it in HybridAIOne/hybridclaw, which has 159 GitHub stars. The repository holds 72 skills in this directory. The repository was last updated on October 9, 2026.

Source: HybridAIOne/hybridclaw on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.