# Competitor Feedback

> Scan competing markdown editors' user feedback (GitHub issues/discussions/releases + closed-source forums) and synthesize themes cross-referenced against SoloMD's own gaps and roadmap. Surfaces unmet demand SoloMD could win on, and features competitors ship that SoloMD lacks. Supports a "subscribe" mode that reports only what's new since the last scan. Use when asked to "check competitor feedback", "what are users complaining about in Obsidian/Logseq/etc.", "competitor watch", or "subscribe to competitors' GitHub".

- Skill: `zhitongblog/competitor-feedback-2` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add zhitongblog/competitor-feedback-2`
- Raw SKILL.md: https://api.skillmd.com/api/skills/zhitongblog/competitor-feedback-2/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Product & Planning
- Author: zhitongblog (https://skillmd.com/u/zhitongblog)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/zhitongblog/competitor-feedback-2

---


# Competitor feedback watch

Pulls real user feedback from SoloMD's competitors and turns it into a product
signal: **what their users want that we could win on**, and **what they ship
that we lack**.

## Channels (which tools actually work)

The global CLAUDE.md mentions an `unzoo` browser. The `mcp__unzoo__*` **MCP tools
are not installed** — but unzoo IS available as a **local REST API at
`http://127.0.0.1:9399`** (a real headless Chromium: JS rendering, anti-bot,
cookies). Use it via the bundled `unzoo.sh` wrapper, not MCP calls.

- **GitHub (primary, structured):** the `gh` CLI, driven by `scan.sh` — gives
  reaction-sorted issue lists (best unmet-demand signal). This is the main channel.
- **Closed-source competitors (Typora, Obsidian, Bear, iA Writer, Tolaria…):** no
  public issue API → use **`unzoo.sh`** to read their forums/Reddit:
  `unzoo.sh fetch-web <forum-url>` and `unzoo.sh search-web "<name> bug …"`.
  `unzoo.sh discover-rss <site>` can find a feed to poll. `WebSearch`/`WebFetch`
  are fine fallbacks.
- **GitHub fallback:** if `gh`/the GitHub API is rate-limited or EOFs (CN network),
  `unzoo.sh search-github "<query>"` / `unzoo.sh fetch-github <owner> <repo>` reach
  GitHub through the browser backend and often succeed when `gh` doesn't.
- Check it's up first: `unzoo.sh health` → `{"status":"ok"}`. Endpoints accept
  `url` / `query` / `owner`+`repo`; responses are `{success, data}` JSON.

## Steps

1. **Pick mode.**
   - Full scan (default): `bash .claude/skills/competitor-feedback/scan.sh`
   - Subscribe / incremental (only issues opened since last run):
     `bash .claude/skills/competitor-feedback/scan.sh new`
   - Restrict to some competitors: `scan.sh full Logseq SiYuan`
   - Tune volume with `LIMIT=12 scan.sh`.

   The competitor registry is `competitors.json` (edit to add/remove). GitHub-hosted
   ones are fetched directly; the script prints the GitHub digest and then lists the
   closed-source competitors for you to handle in step 2. It also writes `.last-scan`
   so the next `new` run is truly incremental — that's the "subscribe" behaviour.

2. **Web channel for closed-source competitors** (via unzoo — the real browser).
   `unzoo.sh health` first. Then for each closed-source competitor `scan.sh` listed:
   `unzoo.sh fetch-web <forum/reddit url from competitors.json>` and
   `unzoo.sh search-web "<name> bug OR missing feature OR complaint <year>"`.
   (`WebSearch`/`WebFetch` are fallbacks if unzoo is down.) Extract recurring
   themes — don't dump raw posts.

3. **Synthesize — this is the point, not the raw list.** Group everything into
   recurring *themes* (e.g. "sync conflicts", "mobile parity", "large-vault perf",
   "plugin breakage"). For each theme note which competitors it hits and rough volume
   (top-voted issue = strong signal).

4. **Cross-reference against SoloMD.** Read `docs/roadmap.md` and recent SoloMD
   issues (`gh issue list --repo zhitongblog/solomd --state open`). Then output two
   ranked lists:
   - **Win-on:** pains competitors' users repeatedly hit that SoloMD already does
     better or could cheaply own (these are positioning/marketing + wedge opportunities).
   - **Gaps:** things competitors ship that SoloMD lacks and users clearly value
     (candidate roadmap items). Be honest about effort.
   - Flag any theme that overlaps SoloMD's *own* recent complaints (shared weak spot).

5. **Write the report** to `docs/competitor-feedback/YYYY-MM-DD.md` (create the dir).
   Structure: TL;DR (3-5 bullets) → themes table → Win-on → Gaps → raw per-competitor
   appendix (the scan.sh output + web findings, for traceability). Keep the synthesis
   tight and opinionated; the founder reads the TL;DR first.

## Notes
- CN network flakes on the GitHub API — `scan.sh` already retries; if a competitor
  shows "(fetch failed)", just re-run it for that one (`scan.sh full <name>`).
- This is a *read-only research* skill. It never posts to competitors' trackers.
- Cadence suggestion: run `scan.sh new` weekly; it stays incremental via `.last-scan`.

