技能创建器
skill-creator
创建、改进和评估自定义技能,把专业流程转化为可重复使用的 AI 能力。
competitor-alternatives【数据与研究】Plans, researches and writes comparison pages: "[rival] alternatives", "[product] vs [rival]", "[rival A] vs [rival B]" and switching guides. Builds each page from a ledger of sourced, dated facts and ends with an honest verdict on who should choose which product. Use when someone asks for an "alternative page", a "vs page", a "competitor comparison"…
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
Someone who searches "Brindle Support alternatives" or "Fernhill Desk vs Brindle Support" is close to buying and is checking facts. A comparison page earns that reader, and the ranking that comes with them, only when its facts survive the check. This skill treats the page as the last step: first a ledger of claims, each with a source and a date; then a verdict that admits where the rival is the better choice; then the page, generated from the ledger so it can be re-verified every quarter.
Comparative advertising that names a rival is encouraged by the US Federal Trade Commission and permitted under EU law when it is truthful, compares like with like on verifiable features, and does not denigrate. The procedure below keeps the page on the right side of that line; it is not legal advice.
Collect evidence of demand before choosing rivals:
vs, alternative, compared, instead of, switch from.Then match each query pattern to one page. Check the live results for the singular and plural forms; when they return the same pages, one page serves both.
| The searcher types | Where they are | Page to write |
|---|---|---|
[rival] alternatives / [rival] alternative | Unhappy with the rival or priced out; building a shortlist | A list of 4–7 real options, yours among them |
[product] vs [rival] | Down to two | Head-to-head, your product against one rival |
[rival A] vs [rival B] | Has not heard of you | A fair comparison of the two, with a marked section about your product |
switch from [rival], migrate from [rival] | Decided, worried about effort | A switching guide: what moves, what does not, how long it takes |
Skip a page when the two products do not serve the same need, when nothing about the rival can be verified from public sources or first-hand use, or when there is neither search demand nor a sales team asking for it.
Every statement about any product, including your own, becomes a row in comparison/claims.csv before it appears on a page.
id,product,attribute,value,source_url,checked_on,evidence
c01,Brindle Support,price per agent per month (annual),29 USD,https://brindlesupport.io/pricing,2026-09-28,vendor page
c03,Brindle Support,Shopify order lookup inside a ticket,paid add-on (12 USD per agent),https://brindlesupport.io/pricing,2026-06-11,vendor page
c05,Fernhill Desk,Shopify order lookup inside a ticket,included,https://fernhilldesk.com/docs/shopify,2026-09-28,own test
Sources, in order of strength:
What does not go in the ledger: rumours, a rival's unannounced plans, anything from a leaked or confidential document, and guesses about their internals.
Save this as check_claims.py. It fails when a row has no source or was last checked more than 90 days ago:
"""Flags comparison claims that are unsourced or older than the allowed age."""
import csv, sys
from datetime import date
MAX_AGE_DAYS = 90
path = sys.argv[1] if len(sys.argv) > 1 else "comparison/claims.csv"
today = date.fromisoformat(sys.argv[2]) if len(sys.argv) > 2 else date.today()
problems = 0
for row in csv.DictReader(open(path, newline="", encoding="utf-8")):
age = (today - date.fromisoformat(row["checked_on"])).days
if not row["source_url"].startswith("https://"):
print(f'{row["id"]} NO SOURCE {row["product"]}: {row["attribute"]}')
problems += 1
elif age > MAX_AGE_DAYS:
print(f'{row["id"]} STALE {age}d {row["product"]}: {row["attribute"]} -> recheck {row["source_url"]}')
problems += 1
print(f"{problems} claim(s) need attention" if problems else "all claims sourced and fresh")
sys.exit(1 if problems else 0)
From the ledger, write three short lists and show them to the user for confirmation:
If the first list is empty, the research is not finished. A page that finds no reason to pick the rival reads as an advertisement and is treated as one.
Order for a head-to-head page:
Variations: an alternatives list opens with the selection criteria and how the list was chosen, gives every option the same fields (suits, does not suit, price as of a date), and places your product where it honestly ranks for the reader named in the title. A rival-vs-rival page compares the two on their merits and keeps your product in one clearly labelled section. A switching guide is a how-to: steps, export formats, field mapping, time needed.
Page metadata: a title of about 60 characters that names both products and the reader; a meta description of up to about 160 characters that states the verdict; one H1; the rival's name in plain text only.
python3 check_claims.py exits 0.FAQPage markup adds nothing there.Run the checker monthly and before every edit. Recheck a rival's rows immediately when their changelog or pricing page changes. When a rival fixes the weakness your page leads with, rewrite the verdict; do not leave a claim standing because it used to be true.
Prompt: "We make Fernhill Desk, a help desk for Shopify stores, $24 per agent. Write a 'Fernhill Desk vs Brindle Support' page. They are bigger and have phone support; we include Shopify order lookup, which they charge extra for."
The agent fills the ledger from both pricing pages and a Brindle trial, runs the checker, and gets:
$ python3 check_claims.py comparison/claims.csv 2026-10-01
c03 STALE 112d Brindle Support: Shopify order lookup inside a ticket -> recheck https://brindlesupport.io/pricing
c06 NO SOURCE Brindle Support: median first-reply time in our trial
2 claim(s) need attention
It reopens the pricing page to confirm row c03 and updates the date, drops c06 because nothing was measured, and reruns until the script prints all claims sourced and fresh. The page it delivers starts like this:
---
title: "Fernhill Desk vs Brindle Support for Shopify stores"
description: "Brindle Support adds phone and WhatsApp. Fernhill Desk includes Shopify order lookup and costs $1,632 less a year for 8 agents. Checked 1 Oct 2026."
---
# Fernhill Desk vs Brindle Support
**Short answer.** Pick Brindle Support if your customers call you: it has a built-in phone
channel and WhatsApp, and Fernhill Desk has neither. Pick Fernhill Desk if you sell on Shopify
and answer by email and chat: order lookup inside the ticket is included, and the total is lower.
| | Fernhill Desk | Brindle Support |
|---|---|---|
| Price per agent, annual billing | $24 | $29 |
| Shopify order lookup in the ticket | Included | Add-on, $12 per agent |
| Channels | Email, chat | Email, chat, WhatsApp, phone |
| Cost for 8 agents, 12 months, with order lookup | $2,304 | $3,936 |
Prices checked on 1 October 2026 against each vendor's pricing page. Fernhill Desk is our product.
## Where Brindle Support is the better choice
## Where Fernhill Desk is the better choice
## What 8 agents pay over a year
8 × $24 × 12 = $2,304. Brindle: 8 × ($29 + $12) × 12 = $3,936. Difference: $1,632.
## Moving from Brindle Support: what imports and what does not
## Questions buyers ask
## Sources
Prompt: "People search 'Larchpost alternatives'. We are Postwren, a newsletter tool for writers who charge for subscriptions. Write the page."
The agent checks Search Console (larchpost alternatives 1,900 impressions in three months, larchpost alternative 260, both showing the same results) and decides on a single page. It proposes the selection rule to the user first: tools a solo writer can run without a developer, with paid subscriptions built in, priced publicly. Then the outline:
Title 7 Larchpost alternatives for paid newsletters, compared
H1 Larchpost alternatives for writers who charge for their newsletter
Why writers leave Larchpost (three reasons, each from the ledger)
How this list was chosen (the selection rule, and that Postwren publishes the page)
Summary table: fee on paid subscriptions, free-list limit, custom domain, import from Larchpost
The alternatives, one section each: suits / does not suit / price as of 1 Oct 2026
Postwren appears third: best for paid subscriptions, weak for ad-funded newsletters
Stay with Larchpost if… (two honest cases)
Moving your list and paying subscribers
Sources, checked on 1 Oct 2026
Each rival section is built from that tool's own pricing and documentation pages; where a tool's fee could not be confirmed, the table says "not published" instead of an estimate.
Prompt: "Recheck our vs pages, they are from spring."
The agent runs python3 check_claims.py, gets 14 stale rows across three rivals, opens each source_url, and finds that one rival moved order lookup into its base plan. It updates the row, removes that advantage from the verdict and the table, recomputes the yearly cost, changes the "checked on" date on the pages whose rows were re-verified, and lists the edits for review. Pages whose facts did not change keep their old publication date and get the new "checked on" date only.