compare-tools
Use whenever the user needs to *choose* a technology, library or tool for this project: "which library should I use", "help me pick a tool", "what's the best X for this", "compare these technologies", "should I use X or Y", "what are my options for Z". Trigger even when it isn't phrased as a comparison. Explores the codebase, aligns on priorities (community support, maintenance, lock-in, extensibility), researches the market, and writes a report to ./ideas/ with every viable option, doc links, a comparison table, and a ranked list scored out of 100 against the user's own priorities.
- License 许可
- MIT
- 最近更新
- 2026-11-11
- Stars
- ★ 0
- Forks
- 0
01 前言 Front Matter
- name
- compare-tools
- description
- Use whenever the user needs to *choose* a technology, library or tool for this project: "which library should I use", "help me pick a tool", "what's the best X for this", "compare these technologies", "should I use X or Y", "what are my options for Z". Trigger even when it isn't phrased as a comparison. Explores the codebase, aligns on priorities (community support, maintenance, lock-in, extensibility), researches the market, and writes a report to ./ideas/ with every viable option, doc links, a comparison table, and a ranked list scored out of 100 against the user's own priorities.
02 资源文件 4
- 参考文档evals/evals.json3.3 KB
- 参考文档references/priority-catalogue.md4.9 KB
- 参考文档references/report-template.md3.3 KB
- 参考文档references/rubric.md5.9 KB
03 SKILL.md 正文
Compare Tools
Help the user pick the right technology for a specific use case. The output is a grounded, auditable recommendation — not a generic listicle, but a score derived from this codebase's shape and this user's stated priorities.
Operating principles
- Codebase first. Technology decisions are context-dependent. Understand what's already here before evaluating what might be added.
- Priorities are the rubric. Don't rank tools on your own taste. Derive the ranking from the user's stated priorities weighted against observed options. Show the arithmetic.
- Push back when it matters. If a stated priority contradicts the observed codebase (e.g. "avoid vendor lock-in" in a repo already deep in AWS), name that tension and ask them to reconcile. Don't push back reflexively — only when the conflict is real and material.
- Research, don't invent. Don't claim a tool has a feature unless you can verify it. If unsure, say so or omit the claim.
- One question at a time. Use
AskUserQuestionfor every clarification. Never batch questions — each answer may change what you ask next.
Phase 1 — Alignment
1a. Explore the codebase
Read the following in order, stopping when you have enough to write a one-paragraph characterisation:
README.mdandCLAUDE.md(orCLAUDE.local.md) — project intent and conventions- Top-level
docs/if it exists - Dependency manifests — whichever of these exist:
package.json/package-lock.json(Node/TS)pyproject.toml/requirements.txt(Python)go.mod(Go)Cargo.toml(Rust)Gemfile(Ruby)
- Recent git log:
git log --oneline -20
Characterise the codebase in one paragraph: type of project, primary language/runtime, what's already installed, who it's for, what it does. Surface this so the user can correct a wrong framing before the research phase.
1b. Confirm the use case
State your understanding of what the user wants to choose a tool for and ask them to confirm
or correct it. If the use case is under-specified — "I need a database", "pick a queue",
"something for caching" — invoke the grilling skill to resolve the decision tree:
scale, read/write mix, latency, hosting constraints, team familiarity, existing
infrastructure, etc. Skip grilling if the use case is already crisp.
1c. Elicit priorities
Present a short list of common high-level priorities from references/priority-catalogue.md
and ask the user to pick 3–5 that matter most to them, then rank them. Use AskUserQuestion
— one question at a time. Rankings become the rubric weights in Phase 3.
Good default priorities to offer:
- Community support
- Maintenance activity
- Avoiding vendor lock-in
- Extensibility / composability
- Ecosystem fit (language + framework)
- License
- Performance
- Learning curve
- Cost
- Operational burden
1d. Sensible push-back
After the priorities are in, check them against what you observed in Phase 1a. If a stated priority contradicts the codebase:
- Real conflict: "You said 'avoid vendor lock-in', but the repo already uses AWS Secrets
Manager, CloudWatch, and S3. Adding a vendor-neutral queue would be swimming upstream — is
that still the goal, or should we score SQS more favorably?" Ask via
AskUserQuestion. - No conflict: say nothing. Don't manufacture friction.
Phase 2 — Research
Use WebSearch to survey the market. Aim for 4–7 candidates covering:
- The mature/default choice (the boring, safe option)
- 1–2 newer or popular challengers
- At least one left-field option that could win on the user's specific priorities
- Any option already in the dependency manifests (it may already be installed)
For each candidate, record:
| Field | What to capture |
|---|---|
| One-liner | What it is in one sentence |
| Strengths | Primary advantages, typical use cases |
| Weaknesses | Known pain points, limitations |
| Maintenance | Last release date, release cadence, # of active maintainers |
| License | MIT / Apache / GPL / commercial / etc. |
| Doc URL | Canonical documentation URL |
Don't invent features or claims. If you can't verify something, note "unverified" or omit it.
Phase 3 — Output
Resolve the output path
mkdir -p ./ideas
DATE=$(date -u +%Y-%m-%d)
SLUG="<short-kebab-case-topic>" # e.g. "job-queue", "vector-db", "state-manager"
BASE="./ideas/${DATE}-tech-${SLUG}"
OUT="${BASE}.md"; N=2
while [ -e "$OUT" ]; do OUT="${BASE}-${N}.md"; N=$((N+1)); done
echo "$OUT"
Write the report to the echoed path using references/report-template.md.
Report structure
The report must contain exactly these five sections in order:
-
Context — one paragraph: codebase characterisation + the confirmed use case. If
grillingran, summarise the key answers that shaped the shortlist. -
Priorities & rubric — the ranked priorities, their weights (must sum to 100), and scoring anchors for each priority (what 0 / 50 / 100 looks like). See
references/rubric.mdfor how to derive weights and write anchors. -
Options — one sub-section per candidate:
### [Tool name] [One-liner] - **Strengths**: ... - **Weaknesses**: ... - **License**: ... | **Last release**: ... | **Docs**: [url] -
Comparison table — rows = tools, columns = each priority + a final "Score /100" column. Show the raw score per priority (0–100), then the weighted total. This lets the user audit your arithmetic.
Tool Priority 1 (W%) Priority 2 (W%) ... Score /100 A 80 60 ... 72 -
Ranked recommendations — tools sorted descending by compatibility score. For each:
- Score /100
- 2–3 sentences tying the score back to observed codebase facts and the aligned priorities
- Flag the top recommendation prominently
End with: "Next step: feed this decision into
to-prdor open a design doc."
Quality bar (self-check before writing)
- [ ] Characterisation is grounded in files actually read, not assumed
- [ ] Use case was confirmed or clarified (via
grillingif fuzzy) - [ ] Priorities were user-stated, not inferred from your own preferences
- [ ] Rubric weights sum to 100
- [ ] All scores are derivable from the stated anchors — no magic numbers
- [ ] Every option has a verified doc URL
- [ ] No invented features or unverified claims
- [ ] Push-back was offered only when a real conflict existed
- [ ] The report can be scanned in under 5 minutes
04 同仓库更多 Skills
vault-recall
Answer the user's conceptual or technical question using their Obsidian vault as well as general knowledge. Use when the user asks a question (not a task) whose topic appears in the vault MOC digest from session start. Not for task instructions, not mid-task, and not for writing to the vault (that is to-vault).
ingest
Ingest one external source (an article, course lesson, doc, PDF or URL) into the user's Obsidian vault: save the original to raw/, then build wiki/ pages per the vault's § Ingest. Use when the user types /ingest, or says "ingest this", "add this source to my wiki", "put this article/lesson in the vault as a wiki page". Works from any repo. Routing rule: someone else's words go to wiki/ (this skill); the user's own learnings and decisions go to notes/ (/to-vault).
to-tickets
Breaks a source into independently-grabbable GitHub tickets. For a code feature the source is the plan (`docs/plans/<feature>.md`, from /to-plan) and every new or changed symbol lands in exactly one ticket, its signatures copied into the ticket body; a non-code feature is cut from the PRD's slices. Cuts tickets for one feature per run. If a code feature has no approved plan, offers /to-plan instead of cutting from prose. In a repo that runs command-centre, also emits `[[task]]` blocks into its config; in a plain treepad repo, emits a Batch Manifest instead so the tickets materialise as stacked worktrees.
to-seams
Records an agreed-but-unlanded cross-repo interface as a seam: the file a consumer's agent gets pasted into its prompt as ground truth, plus the `[[seam]]` block command-centre reads for the retirement pointer. Use when two repos need to build against an interface neither has landed yet — "record a seam for X", "we agreed on this schema, seam it", "add a seam so Y can build against Z's new field". Halts for approval before writing either file.
to-roadmap
Prioritises settled features into a Now / Next / Later kanban board, rendered as a self-contained ./ideas/roadmap.html. Each card is a feature, not a ticket — one card later becomes several tickets via /to-prd -> /to-plan -> /to-tickets. Boards the features in ./docs/approach.md, or the "## Accepted ideas" in ./ideas/CONTEXT.md when there is no approach doc. The approach doc is settled truth: this assigns tiers and reasons about ordering, it never re-litigates what was decided.
to-prd
Turns one feature idea into a PRD built on journeys: a one-line problem, journeys (each ending in an observable state) and delivery slices that say what is usable after each. Interviews, explores the codebase, and saves to docs/prds/<feature>.md. Covers exactly one feature: given a multi-feature source, ask which one. Reads any approach doc or ideate report as priors so it doesn't re-ask what's settled, but needs none. Starts the per-feature spine (/to-prd -> /to-plan -> /to-tickets).