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 AGENTS.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
ghCLI, driven byscan.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.shto read their forums/Reddit:unzoo.sh fetch-web <forum-url>andunzoo.sh search-web "<name> bug …".unzoo.sh discover-rss <site>can find a feed to poll.WebSearch/WebFetchare 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 whenghdoesn't. - Check it's up first:
unzoo.sh health→{"status":"ok"}. Endpoints accepturl/query/owner+repo; responses are{success, data}JSON.
Steps
Pick mode.
- Full scan (default):
bash .Codex/skills/competitor-feedback/scan.sh - Subscribe / incremental (only issues opened since last run):
bash .Codex/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-scanso the nextnewrun is truly incremental — that's the "subscribe" behaviour.- Full scan (default):
Web channel for closed-source competitors (via unzoo — the real browser).
unzoo.sh healthfirst. Then for each closed-source competitorscan.shlisted:unzoo.sh fetch-web <forum/reddit url from competitors.json>andunzoo.sh search-web "<name> bug OR missing feature OR complaint <year>". (WebSearch/WebFetchare fallbacks if unzoo is down.) Extract recurring themes — don't dump raw posts.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).
Cross-reference against SoloMD. Read
docs/roadmap.mdand 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).
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.shalready 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 newweekly; it stays incremental via.last-scan.