@seanyao/roll 0.5.0 → 2.602.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +717 -0
- package/LICENSE +21 -0
- package/README.md +65 -165
- package/bin/dream-test-quality-scan +110 -0
- package/bin/roll +14897 -815
- package/conventions/config.yaml +17 -1
- package/conventions/global/AGENTS.md +146 -100
- package/conventions/global/CLAUDE.md +1 -21
- package/conventions/global/GEMINI.md +8 -22
- package/conventions/global/project_rules.md +9 -0
- package/conventions/templates/backend-service/AGENTS.md +30 -81
- package/conventions/templates/backend-service/GEMINI.md +3 -3
- package/conventions/templates/backend-service/project_rules.md +16 -0
- package/conventions/templates/cli/AGENTS.md +31 -58
- package/conventions/templates/cli/CLAUDE.md +3 -5
- package/conventions/templates/cli/GEMINI.md +3 -3
- package/conventions/templates/cli/project_rules.md +16 -0
- package/conventions/templates/frontend-only/AGENTS.md +29 -64
- package/conventions/templates/frontend-only/GEMINI.md +3 -3
- package/conventions/templates/frontend-only/project_rules.md +14 -0
- package/conventions/templates/fullstack/AGENTS.md +31 -79
- package/conventions/templates/fullstack/CLAUDE.md +1 -1
- package/conventions/templates/fullstack/GEMINI.md +3 -3
- package/conventions/templates/fullstack/project_rules.md +15 -0
- package/lib/README.md +42 -0
- package/lib/__pycache__/github_sync.cpython-314.pyc +0 -0
- package/lib/__pycache__/loop-fmt.cpython-314.pyc +0 -0
- package/lib/__pycache__/loop_result_eval.cpython-314.pyc +0 -0
- package/lib/__pycache__/loop_unstick.cpython-314.pyc +0 -0
- package/lib/__pycache__/model_prices.cpython-314.pyc +0 -0
- package/lib/__pycache__/prices_fetcher.cpython-314.pyc +0 -0
- package/lib/__pycache__/roll-home.cpython-314.pyc +0 -0
- package/lib/__pycache__/roll-loop-status.cpython-314.pyc +0 -0
- package/lib/__pycache__/roll_git.cpython-314.pyc +0 -0
- package/lib/__pycache__/roll_render.cpython-314.pyc +0 -0
- package/lib/__pycache__/slides-render.cpython-314.pyc +0 -0
- package/lib/agent_usage/README.md +49 -0
- package/lib/agent_usage/__init__.py +108 -0
- package/lib/agent_usage/__pycache__/__init__.cpython-314.pyc +0 -0
- package/lib/agent_usage/__pycache__/gemini.cpython-314.pyc +0 -0
- package/lib/agent_usage/__pycache__/kimi.cpython-314.pyc +0 -0
- package/lib/agent_usage/__pycache__/openai.cpython-314.pyc +0 -0
- package/lib/agent_usage/__pycache__/pi.cpython-314.pyc +0 -0
- package/lib/agent_usage/__pycache__/pi_emit.cpython-314.pyc +0 -0
- package/lib/agent_usage/__pycache__/qwen.cpython-314.pyc +0 -0
- package/lib/agent_usage/gemini.py +127 -0
- package/lib/agent_usage/kimi.py +278 -0
- package/lib/agent_usage/kimi_emit.py +123 -0
- package/lib/agent_usage/openai.py +126 -0
- package/lib/agent_usage/pi.py +200 -0
- package/lib/agent_usage/pi_emit.py +135 -0
- package/lib/agent_usage/qwen.py +128 -0
- package/lib/backfill-pi-usage.py +243 -0
- package/lib/changelog_audit.py +155 -0
- package/lib/changelog_generate.py +263 -0
- package/lib/context_feed_budget.sh +194 -0
- package/lib/github_sync.py +876 -0
- package/lib/i18n/README.md +54 -0
- package/lib/i18n/agent.sh +75 -0
- package/lib/i18n/alert.sh +20 -0
- package/lib/i18n/backlog.sh +96 -0
- package/lib/i18n/brief.sh +5 -0
- package/lib/i18n/changelog.sh +5 -0
- package/lib/i18n/ci.sh +15 -0
- package/lib/i18n/debug.sh +0 -0
- package/lib/i18n/doctor.sh +44 -0
- package/lib/i18n/dream.sh +0 -0
- package/lib/i18n/init.sh +91 -0
- package/lib/i18n/lang.sh +10 -0
- package/lib/i18n/loop.sh +140 -0
- package/lib/i18n/migrate.sh +74 -0
- package/lib/i18n/offboard.sh +31 -0
- package/lib/i18n/onboard.sh +0 -0
- package/lib/i18n/peer.sh +41 -0
- package/lib/i18n/peer_help.sh +25 -0
- package/lib/i18n/peer_reset.sh +7 -0
- package/lib/i18n/peer_status.sh +5 -0
- package/lib/i18n/prices.sh +3 -0
- package/lib/i18n/prices_refresh.sh +17 -0
- package/lib/i18n/prices_show.sh +7 -0
- package/lib/i18n/propose.sh +0 -0
- package/lib/i18n/release.sh +0 -0
- package/lib/i18n/research.sh +0 -0
- package/lib/i18n/review_pr.sh +0 -0
- package/lib/i18n/sentinel.sh +0 -0
- package/lib/i18n/setup.sh +3 -0
- package/lib/i18n/shared.sh +157 -0
- package/lib/i18n/skills/roll-brief.sh +47 -0
- package/lib/i18n/skills/roll-build.sh +97 -0
- package/lib/i18n/skills/roll-design.sh +18 -0
- package/lib/i18n/skills/roll-fix.sh +53 -0
- package/lib/i18n/skills/roll-loop.sh +28 -0
- package/lib/i18n/skills/roll-onboard.sh +33 -0
- package/lib/i18n/skills_catalog.sh +30 -0
- package/lib/i18n/slides.sh +3 -0
- package/lib/i18n/slides_build.sh +38 -0
- package/lib/i18n/slides_delete.sh +19 -0
- package/lib/i18n/slides_list.sh +14 -0
- package/lib/i18n/slides_logs.sh +12 -0
- package/lib/i18n/slides_new.sh +15 -0
- package/lib/i18n/slides_preview.sh +14 -0
- package/lib/i18n/slides_templates.sh +7 -0
- package/lib/i18n/status.sh +21 -0
- package/lib/i18n/update.sh +24 -0
- package/lib/i18n.sh +211 -0
- package/lib/loop-exit-summary.py +393 -0
- package/lib/loop-fmt.py +589 -0
- package/lib/loop_pick_agent.py +316 -0
- package/lib/loop_result_eval.py +469 -0
- package/lib/loop_unstick.py +180 -0
- package/lib/model_prices.py +186 -0
- package/lib/prices/README.md +35 -0
- package/lib/prices/snapshot-2026-05-22.json +22 -0
- package/lib/prices/snapshot-2026-05-23-deepseek.json +15 -0
- package/lib/prices/snapshot-2026-05-23-kimi.json +14 -0
- package/lib/prices_fetcher.py +285 -0
- package/lib/roll-backlog.py +225 -0
- package/lib/roll-brief.py +286 -0
- package/lib/roll-help.py +158 -0
- package/lib/roll-home.py +556 -0
- package/lib/roll-init.py +156 -0
- package/lib/roll-loop-status.py +1683 -0
- package/lib/roll-loop-story.py +191 -0
- package/lib/roll-onboard-render.py +378 -0
- package/lib/roll-peer.py +252 -0
- package/lib/roll-plan-validate.py +386 -0
- package/lib/roll-setup.py +102 -0
- package/lib/roll-status.py +367 -0
- package/lib/roll_git.py +41 -0
- package/lib/roll_render.py +414 -0
- package/lib/slides/components/README.md +123 -0
- package/lib/slides/components/cards-2.html +9 -0
- package/lib/slides/components/cards-3.html +9 -0
- package/lib/slides/components/cards-4.html +9 -0
- package/lib/slides/components/compare.html +22 -0
- package/lib/slides/components/highlight.html +9 -0
- package/lib/slides/components/pipeline.html +12 -0
- package/lib/slides/components/plain.html +7 -0
- package/lib/slides/components/quote.html +4 -0
- package/lib/slides/components/timeline.html +9 -0
- package/lib/slides/templates/introduction-v3.html +571 -0
- package/lib/slides/templates/pitch.html +0 -0
- package/lib/slides-render.py +778 -0
- package/lib/slides-validate.py +357 -0
- package/lib/test_quality_gate.py +143 -0
- package/package.json +8 -7
- package/skills/roll-.changelog/SKILL.md +406 -33
- package/skills/roll-.clarify/SKILL.md +5 -2
- package/skills/roll-.dream/SKILL.md +374 -0
- package/skills/roll-.echo/SKILL.md +5 -2
- package/skills/roll-.qa/SKILL.md +57 -3
- package/skills/roll-.review/SKILL.md +42 -3
- package/skills/roll-brief/SKILL.md +209 -0
- package/skills/roll-build/SKILL.md +308 -63
- package/skills/roll-debug/SKILL.md +341 -162
- package/skills/roll-debug/injectable-bb.js +263 -0
- package/skills/roll-deck/SKILL.md +296 -0
- package/skills/roll-design/ENGINEERING_CHECKLIST.md +1 -1
- package/skills/roll-design/SKILL.md +727 -94
- package/skills/roll-doc/SKILL.md +595 -0
- package/skills/roll-doctor/SKILL.md +192 -0
- package/skills/roll-fix/SKILL.md +149 -32
- package/skills/{roll-jot → roll-idea}/SKILL.md +18 -10
- package/skills/roll-loop/SKILL.md +578 -0
- package/skills/roll-notes/SKILL.md +103 -0
- package/skills/roll-onboard/SKILL.md +234 -0
- package/skills/roll-peer/SKILL.md +336 -0
- package/skills/roll-propose/SKILL.md +157 -0
- package/skills/roll-review-pr/SKILL.md +58 -0
- package/skills/roll-sentinel/SKILL.md +11 -2
- package/skills/roll-spar/SKILL.md +8 -6
- package/template/.github/workflows/ci.yml +5 -2
- package/template/AGENTS.md +20 -74
- package/skills/roll-research/SKILL.md +0 -307
- package/skills/roll-research/references/schema.json +0 -162
- package/skills/roll-research/scripts/md_to_pdf.py +0 -289
- package/tools/roll-fetch/SKILL.md +0 -182
- package/tools/roll-fetch/package.json +0 -15
- package/tools/roll-fetch/smart-web-fetch.js +0 -558
- package/tools/roll-probe/SKILL.md +0 -84
- /package/template/{BACKLOG.md → .roll/backlog.md} +0 -0
|
@@ -1,307 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: roll-research
|
|
3
|
-
description: |
|
|
4
|
-
HV (Horizontal-Vertical) Analysis deep research skill for products, companies, concepts, technologies, or people. Dual-axis: vertical traces full lifecycle narrative from origin to present; horizontal compares against competitors at current time; cross-axis produces new insights. Output: professionally formatted PDF report.
|
|
5
|
-
Trigger: "deep research", "research this", "competitive analysis", "help me understand", "what's the deal with", "deep dive", "HV analysis", or any request implying systematic research (not a simple lookup).
|
|
6
|
-
Do not use for: simple definitions, short-form content writing, or pure title/summary generation.
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# Deep Research (HV Analysis)
|
|
10
|
-
|
|
11
|
-
> Follows the Architecture Constraints, Development Discipline, and Engineering Common Sense defined in the project AGENTS.md.
|
|
12
|
-
|
|
13
|
-
You are executing an HV Analysis deep research session. The final deliverable is a **professionally formatted PDF research report**.
|
|
14
|
-
|
|
15
|
-
## Prerequisites
|
|
16
|
-
|
|
17
|
-
### Environment Setup
|
|
18
|
-
|
|
19
|
-
1. **Confirm PDF conversion script is available**: This skill includes `scripts/md_to_pdf.py` (based on WeasyPrint). See Step 5 for installation and usage.
|
|
20
|
-
2. **Writing style**: This skill includes a complete writing style guide (see "Writing Style" section below).
|
|
21
|
-
|
|
22
|
-
### Define the Research Subject
|
|
23
|
-
|
|
24
|
-
After receiving user input, confirm the following. If the user has already been specific enough (e.g., "do a deep research on Hermes Agent"), start directly without asking:
|
|
25
|
-
|
|
26
|
-
1. **Research subject**: Specific product name / company name / concept name / person name
|
|
27
|
-
2. **Type**: Product, company, concept, person, or other?
|
|
28
|
-
3. **Research motivation** (optional): Why research this? What recently happened?
|
|
29
|
-
4. **Special focus** (optional): Any particular direction to dive deeper into?
|
|
30
|
-
|
|
31
|
-
---
|
|
32
|
-
|
|
33
|
-
## Step 1: Online Information Gathering
|
|
34
|
-
|
|
35
|
-
The quality of this methodology depends entirely on the richness and accuracy of the information collected. **Online search is mandatory** — do not rely solely on existing knowledge. The value of a research report lies in its depth and completeness, so gather more rather than less during this phase.
|
|
36
|
-
|
|
37
|
-
### Parallel Search Strategy
|
|
38
|
-
|
|
39
|
-
Use sub-agents to search in parallel for efficiency. Suggested division of labor:
|
|
40
|
-
|
|
41
|
-
- **Sub-Agent 1 — Vertical info**: Origin of the research subject, founder background, development history, key events, version iterations, funding, strategic pivots, crises
|
|
42
|
-
- **Sub-Agent 2 — Horizontal info**: Competitor identification, each competitor's characteristics and user reputation, industry comparison reviews, market share
|
|
43
|
-
- **Sub-Agent 3** (only for complex subjects): Supplementary info such as founder deep background, industry environment changes, user community discussions (GitHub issues, Reddit, Twitter/X, HackerNews, etc.)
|
|
44
|
-
|
|
45
|
-
**Sub-Agent web tool usage guide** (include directly in each sub-agent's prompt):
|
|
46
|
-
|
|
47
|
-
Each sub-agent's prompt must include the following web access instructions:
|
|
48
|
-
|
|
49
|
-
> You need to gather information from the web. Use the following tools:
|
|
50
|
-
> - **WebSearch**: For discovering information sources, getting summaries and keyword results
|
|
51
|
-
> - **WebFetch**: When a specific URL is known, for targeted content extraction from pages
|
|
52
|
-
> - Search strategy: First use WebSearch to discover sources and leads, then use WebFetch to extract details from specific URLs
|
|
53
|
-
> - Multiple searches with multiple keyword combinations — don't give up after one search
|
|
54
|
-
> - Primary sources over secondary: official blogs > authoritative original media reports > reposts/aggregators
|
|
55
|
-
> - **Academic subjects must check arXiv**: If the subject involves academic concepts, algorithms, AI models, or technical paradigms, query arXiv API for relevant papers: `curl -s "https://export.arxiv.org/api/query?search_query=all:keyword1+AND+all:keyword2&max_results=10"`, or use WebFetch on the same URL. Returns XML with titles, authors, abstracts, dates, PDF links. After finding key papers, use WebFetch on `https://arxiv.org/abs/PAPER_ID` for more details.
|
|
56
|
-
|
|
57
|
-
Prompt descriptions should use goal-oriented verbs ("gather", "investigate", "understand"), not method-specific verbs ("search", "crawl"), letting sub-agents determine the best approach.
|
|
58
|
-
|
|
59
|
-
### Source Priority
|
|
60
|
-
|
|
61
|
-
Primary sources over secondary — multiple outlets citing the same error creates a false corroboration illusion:
|
|
62
|
-
|
|
63
|
-
| Information Type | Primary Sources |
|
|
64
|
-
|-----------------|----------------|
|
|
65
|
-
| Product updates / technical decisions | Official blog, GitHub Release Notes, founder tweets |
|
|
66
|
-
| Funding / business data | Official company announcements, SEC/regulatory filings |
|
|
67
|
-
| User reputation | GitHub Issues, Reddit discussions, Twitter/X, HackerNews |
|
|
68
|
-
| Industry analysis | Authoritative original media reports (not reposts) |
|
|
69
|
-
| Academic / technical principles | arXiv papers (`export.arxiv.org/api/query`), Google Scholar, conference proceedings |
|
|
70
|
-
|
|
71
|
-
### Information Sufficiency Self-Check
|
|
72
|
-
|
|
73
|
-
After searching, verify:
|
|
74
|
-
- Vertical: Can you tell a complete story? Are there obvious information gaps?
|
|
75
|
-
- Horizontal: Is the competitor list complete? Are any major players missing? Is there enough info on each competitor for comparison?
|
|
76
|
-
- Sources: Are key facts supported by reliable sources? Are any judgments based on a single source?
|
|
77
|
-
|
|
78
|
-
If information is insufficient, search more. Don't settle.
|
|
79
|
-
|
|
80
|
-
---
|
|
81
|
-
|
|
82
|
-
## Step 2: Vertical Analysis (Diachronic / Longitudinal)
|
|
83
|
-
|
|
84
|
-
Trace the complete timeline, fully reconstructing the research subject's journey from birth to present. This is the main body of the report and should be the longest section.
|
|
85
|
-
|
|
86
|
-
### Content Requirements
|
|
87
|
-
|
|
88
|
-
**Origin tracing**: What was the background when it was born? What technology/philosophy/need was it based on? Who were the founding team or core drivers? What had these people done before, and why were they the ones to do this? What was the industry environment like? Was there a key event or inspiration that directly prompted its creation?
|
|
89
|
-
|
|
90
|
-
**Birth node**: Exact first release/founding/proposal date, initial form and positioning, how it differs from today.
|
|
91
|
-
|
|
92
|
-
**Evolution trajectory**: From birth to present, organize all key milestones chronologically. Including but not limited to: major version updates, funding events, team changes, strategic pivots, technical architecture changes, user scale milestones, major partnerships or acquisitions, PR crises or controversies.
|
|
93
|
-
|
|
94
|
-
**Decision logic**: At each key node, reconstruct the reasoning behind decisions as much as possible. Why choose A over B? What were the constraints at the time? Which early decisions "locked in" later development directions and became irreversible? What mechanisms deepened the path (network effects, ecosystem lock-in, tech stack choices, etc.)?
|
|
95
|
-
|
|
96
|
-
**Phase segmentation**: Naturally divide the entire journey into phases (inception, rapid growth, transformation, etc.), each with core characteristics and core tensions.
|
|
97
|
-
|
|
98
|
-
### Length
|
|
99
|
-
|
|
100
|
-
6,000–15,000 words. Subjects with longer histories and more milestones should be near the upper limit; newer subjects near the lower. The core principle is to tell the story completely and thoroughly — every key milestone deserves expansion. Don't skip important details for brevity. Better to write long and detailed than to skim the surface.
|
|
101
|
-
|
|
102
|
-
---
|
|
103
|
-
|
|
104
|
-
## Step 3: Horizontal Analysis (Synchronic / Cross-sectional)
|
|
105
|
-
|
|
106
|
-
Using the current point in time as the cross-section, comprehensively compare the research subject with competitors/peers in the same space.
|
|
107
|
-
|
|
108
|
-
### First, Assess the Competitive Landscape
|
|
109
|
-
|
|
110
|
-
Handle three scenarios:
|
|
111
|
-
|
|
112
|
-
**Scenario A: No direct competitors.** If the subject is an entirely new category or an extremely dominant field, skip individual comparisons. Instead analyze: Why are there no competitors? Is the category too new, barriers too high, or market too small? Where are competitors most likely to emerge from? Are there indirect alternatives or previous-generation solutions for reference?
|
|
113
|
-
|
|
114
|
-
**Scenario B: Few competitors (1–2).** Deep-dive comparison of each, with detailed analysis per competitor.
|
|
115
|
-
|
|
116
|
-
**Scenario C: Sufficient competitors (3+).** Select the 3–5 most representative for comparison, briefly mention the rest.
|
|
117
|
-
|
|
118
|
-
### Comparison Dimensions
|
|
119
|
-
|
|
120
|
-
Flexibly adjust based on the research subject's type, but cover at least:
|
|
121
|
-
|
|
122
|
-
**Core difference comparison**: Technical approach / core methodology / underlying logic, product form / business model / organizational structure, target users / audience / applicable scenarios, core strengths and obvious weaknesses, pricing strategy / resource investment / scale.
|
|
123
|
-
|
|
124
|
-
**User perspective**: What is each competitor's real user reputation? What are the most frequently mentioned pros and cons in community reviews and usage experience? Is there a gap between how users actually use it and the official positioning? Don't write comparisons as a text version of a spec sheet — explain what each competitor "actually became" and the real reasons users choose it.
|
|
125
|
-
|
|
126
|
-
**Ecosystem niche analysis**: In the overall landscape, what position does the research subject occupy? What gap does it fill, or whom is it competing head-to-head with? Is the current landscape a hundred flowers blooming, a duopoly, or a monopoly?
|
|
127
|
-
|
|
128
|
-
**Trend judgment**: Based on horizontal comparison, what is the research subject's trajectory in the competitive landscape? What are the opportunities and risks?
|
|
129
|
-
|
|
130
|
-
### Length
|
|
131
|
-
|
|
132
|
-
3,000–10,000 words. Scenario A should be around 3,000 words. Scenario C requires at least 1,500 words of independent analysis per major competitor — don't brush over them.
|
|
133
|
-
|
|
134
|
-
---
|
|
135
|
-
|
|
136
|
-
## Step 4: Cross-Axis Insights
|
|
137
|
-
|
|
138
|
-
This is the crown jewel of the entire report. Combine the vertical development trajectory and horizontal competitive landscape to produce comprehensive, new judgments. Do not write this as an abbreviated version of the previous sections.
|
|
139
|
-
|
|
140
|
-
Core questions to answer:
|
|
141
|
-
|
|
142
|
-
1. **How history shaped the current competitive position**: Which decisions and events from the vertical trajectory determined where it stands in today's horizontal comparison?
|
|
143
|
-
2. **Longitudinal comparison of competitors**: If major competitors are also placed on the timeline, how do their origins and evolution paths differ? How did these differences lead to their current characteristics?
|
|
144
|
-
3. **Historical roots of current advantages**: Each core advantage today — which historical node or decision can it be traced back to?
|
|
145
|
-
4. **Historical roots of current disadvantages**: Each core weakness today — which historical decision can it be traced back to? Did any "good decisions" from the past become today's burden?
|
|
146
|
-
5. **Future projection**: Based on vertical trends and horizontal competitive landscape, provide three scenarios — most likely, most dangerous, most optimistic — each with logical support.
|
|
147
|
-
|
|
148
|
-
### Length
|
|
149
|
-
|
|
150
|
-
1,500–3,000 words.
|
|
151
|
-
|
|
152
|
-
---
|
|
153
|
-
|
|
154
|
-
## Writing Style
|
|
155
|
-
|
|
156
|
-
This is not a cold consulting report, but a deep research piece that people can read from start to finish. The writing style needs to balance "research report rigor" with "readability and narrative engagement."
|
|
157
|
-
|
|
158
|
-
### Core Style Elements
|
|
159
|
-
|
|
160
|
-
**Rhythm**: Vary sentence lengths, with natural jumps between paragraphs. Don't make every paragraph the same length. A single sentence forming its own paragraph creates weight. Good rhythm is like a wave — each time it drifts slightly from the main thread, then a "hook-back sentence" pulls it back.
|
|
161
|
-
|
|
162
|
-
**Narrative-driven, not list-driven**: The vertical section should have a story arc with setup, development, twist, and resolution. For example, why a product suddenly exploded at a certain point — what was the groundwork, what was the turning point. Don't write "in January 2023 they released A, in March 2023 they released B" — that's a timeline, not a story.
|
|
163
|
-
|
|
164
|
-
**Knowledge emerges naturally**: Weave background knowledge into the narrative naturally, don't announce "now let me explain this concept."
|
|
165
|
-
|
|
166
|
-
**Bold judgments**: Offer opinions and insights, but every opinion must be backed by facts. Present facts first, then judgment. Mark speculation explicitly. Use "I believe" or "my assessment is" — acknowledging subjectivity rather than delivering pronouncements from on high.
|
|
167
|
-
|
|
168
|
-
**Layered revelation**: Don't jump to conclusions. Use the pattern: phenomenon → surface explanation → deeper questioning → core insight. Let the reader participate in the thinking process.
|
|
169
|
-
|
|
170
|
-
**Cultural elevation**: In the cross-axis insights section, connect to larger cultural/philosophical/historical reference points. Not forced elevation, but "naturally came to mind while discussing."
|
|
171
|
-
|
|
172
|
-
**Callback structure**: Details and hooks planted in the opening or vertical section should callback in the cross-axis insights or conclusion. This sense of causal closure is what transforms a report from an "information stream" into a "work."
|
|
173
|
-
|
|
174
|
-
### Absolute Prohibitions
|
|
175
|
-
|
|
176
|
-
These AI-flavor markers must be avoided regardless of format:
|
|
177
|
-
- Cliches: "First... Second... Finally", "In summary", "It's worth noting", "It's not hard to see"
|
|
178
|
-
- Empty adjectives: "empower", "leverage", "build a closed loop"
|
|
179
|
-
- Textbook openings: "In today's era of rapid AI development", "As technology continues to advance"
|
|
180
|
-
- Generic tool names: don't say "an AI tool" or "a certain model" — use specific names
|
|
181
|
-
- Fabricated scenarios: If information can't be found, honestly mark "information unavailable" — never fabricate
|
|
182
|
-
|
|
183
|
-
### Write Like a Human
|
|
184
|
-
|
|
185
|
-
Avoid consulting-firm-style cliches and empty generalizations. Replace summary statements with specific details and examples. Don't write "the company achieved rapid growth during this period" — write "from $10M ARR in mid-2024 to $1B by end of 2025, the growth curve was nearly vertical."
|
|
186
|
-
|
|
187
|
-
---
|
|
188
|
-
|
|
189
|
-
## Step 5: Generate PDF Report
|
|
190
|
-
|
|
191
|
-
After the report is complete, use this skill's included `scripts/md_to_pdf.py` to convert Markdown to a professionally formatted PDF.
|
|
192
|
-
|
|
193
|
-
### Conversion Process
|
|
194
|
-
|
|
195
|
-
1. **Complete the Markdown draft first**: Write the full report in standard Markdown, save as `{subject}_research_report.md`
|
|
196
|
-
2. **Install dependencies** (if not installed): `pip install weasyprint markdown --break-system-packages`
|
|
197
|
-
3. **Run the conversion script**:
|
|
198
|
-
```bash
|
|
199
|
-
python [skill_directory]/scripts/md_to_pdf.py input.md output.pdf --title "Subject Name" --author "wukong"
|
|
200
|
-
```
|
|
201
|
-
4. The script automatically generates an intermediate HTML file (for debugging) and the final PDF
|
|
202
|
-
|
|
203
|
-
### Built-in Layout Specifications
|
|
204
|
-
|
|
205
|
-
`md_to_pdf.py` includes a complete CSS layout — no manual adjustment needed:
|
|
206
|
-
|
|
207
|
-
- **Page**: A4, margins top 25mm / left-right 20mm / bottom 20mm
|
|
208
|
-
- **Cover page**: Auto-generated with title (28pt dark blue), subtitle "Let's roll", author info, decorative divider
|
|
209
|
-
- **Colors**: H1=#1a5276 dark blue, H2=#1e8449 green, H3=#2e86c1 light blue, H4=#5b2c6f purple, body=#2c3e50 dark gray
|
|
210
|
-
- **Fonts**: CSS fallback chain `"Droid Sans Fallback", Helvetica, Arial, sans-serif`, handles mixed-language text
|
|
211
|
-
- **Body**: 10.5pt, line-height 1.75, justified, orphan/widow control
|
|
212
|
-
- **Blockquotes**: 3pt dark blue left border + light gray background
|
|
213
|
-
- **Tables**: Full width, dark blue header with white text, zebra-striped rows
|
|
214
|
-
- **Header**: "{Report Title} | Deep Research Report" (not on first page)
|
|
215
|
-
- **Footer**: "Page X" (not on first page)
|
|
216
|
-
- The first H1 in Markdown is auto-extracted as the cover title and not repeated in the body
|
|
217
|
-
|
|
218
|
-
### Markdown Writing Notes
|
|
219
|
-
|
|
220
|
-
For the script to parse correctly and produce optimal PDF output:
|
|
221
|
-
|
|
222
|
-
- Use `# Title` on the first line as the report title (auto-used for cover)
|
|
223
|
-
- Immediately after the title, optionally use `> Research date: ... | Field: ... | Subject type: ...` for metadata (extracted to cover)
|
|
224
|
-
- Use `##` for main chapter headings (Vertical Analysis, Horizontal Analysis, Cross-Axis Insights, etc.)
|
|
225
|
-
- Use `###` and `####` for subchapters
|
|
226
|
-
- Tables use standard Markdown table syntax
|
|
227
|
-
- Quotes use `>` syntax
|
|
228
|
-
- Bold uses `**text**`
|
|
229
|
-
|
|
230
|
-
### Closing Content
|
|
231
|
-
|
|
232
|
-
At the end of the Markdown draft, include:
|
|
233
|
-
- **Sources**: List of all cited sources with URLs and access dates
|
|
234
|
-
- **Methodology note**: Brief note on the HV Analysis framework (1–2 sentences)
|
|
235
|
-
|
|
236
|
-
### Report Structure Template
|
|
237
|
-
|
|
238
|
-
```
|
|
239
|
-
Cover Page
|
|
240
|
-
|
|
241
|
-
Table of Contents
|
|
242
|
-
|
|
243
|
-
I. One-Sentence Definition
|
|
244
|
-
[Clearly define what this thing is in one sentence]
|
|
245
|
-
|
|
246
|
-
II. Vertical Analysis: From Origin to Present
|
|
247
|
-
[Complete vertical narrative, 6,000–15,000 words]
|
|
248
|
-
|
|
249
|
-
III. Horizontal Analysis: Competitive Landscape
|
|
250
|
-
[Horizontal comparison analysis, 3,000–10,000 words]
|
|
251
|
-
|
|
252
|
-
IV. Cross-Axis Insights
|
|
253
|
-
[Cross analysis and future projection, 1,500–3,000 words]
|
|
254
|
-
|
|
255
|
-
V. Sources
|
|
256
|
-
[List of all cited sources]
|
|
257
|
-
```
|
|
258
|
-
|
|
259
|
-
### File Naming and Delivery
|
|
260
|
-
|
|
261
|
-
Name the PDF `{subject_name}_research_report.pdf` and save it to the user's working directory.
|
|
262
|
-
|
|
263
|
-
---
|
|
264
|
-
|
|
265
|
-
## Adapting to Different Subject Types
|
|
266
|
-
|
|
267
|
-
Core principles remain the same (vertical traces depth through time, horizontal traces breadth across peers), but emphasis differs:
|
|
268
|
-
|
|
269
|
-
**Researching a product**: Vertical axis focuses on version iterations, technical roadmap evolution, user growth curves, key product decisions; horizontal axis focuses on feature comparison, performance comparison, user experience, pricing.
|
|
270
|
-
|
|
271
|
-
**Researching a company**: Vertical axis focuses on founding team, funding history, strategic pivots, organizational changes, key personnel moves; horizontal axis focuses on business model differences, market share, revenue comparison, organizational structure differences.
|
|
272
|
-
|
|
273
|
-
**Researching a concept** (technical paradigm, business model, cultural phenomenon): Vertical axis focuses on the concept's origin (who proposed it, based on what theory/need), how it became popular, what debates and evolution it went through; horizontal axis focuses on distinctions from similar concepts, respective applicable scenarios, different camps' arguments.
|
|
274
|
-
|
|
275
|
-
**Researching a person**: Vertical axis focuses on personal experience, career trajectory, key decisions, growth curve, evolution of public statements; horizontal axis focuses on comparison with others in the same field (working style, achievements, influence, strategic choices).
|
|
276
|
-
|
|
277
|
-
---
|
|
278
|
-
|
|
279
|
-
## Length Overview
|
|
280
|
-
|
|
281
|
-
| Section | Word Count | Notes |
|
|
282
|
-
|---------|-----------|-------|
|
|
283
|
-
| Vertical Analysis | 6,000–15,000 | Report body — don't skim the surface |
|
|
284
|
-
| Horizontal Analysis | 3,000–10,000 | Adjust based on number of competitors |
|
|
285
|
-
| Cross-Axis Insights | 1,500–3,000 | Crown jewel — produce new judgments |
|
|
286
|
-
| **Total** | **10,000–30,000** | Don't fear length — depth and completeness are the value |
|
|
287
|
-
|
|
288
|
-
---
|
|
289
|
-
|
|
290
|
-
## Quality Checklist
|
|
291
|
-
|
|
292
|
-
Self-check before delivery:
|
|
293
|
-
|
|
294
|
-
- [ ] Vertical axis reads as a narrative story? Has causal logic and contextual flow? Not a dry chronological list?
|
|
295
|
-
- [ ] Founder/initiator background and motivation have sufficient depth?
|
|
296
|
-
- [ ] Every key milestone is expanded — no important details skipped for brevity?
|
|
297
|
-
- [ ] Decision logic is reconstructed? Not just "what happened" but also "why this choice"?
|
|
298
|
-
- [ ] Horizontal competitor scenario judgment is correct (A/B/C)? Competitor analysis has sufficient depth?
|
|
299
|
-
- [ ] User reputation section cites real user voices? Not just official marketing?
|
|
300
|
-
- [ ] Cross-axis insights produce new judgments, not an abbreviated version of previous sections?
|
|
301
|
-
- [ ] Three future scenarios all have logical support?
|
|
302
|
-
- [ ] Writing style has rhythm and readability? Not a cold consulting report?
|
|
303
|
-
- [ ] None of the absolute prohibitions are violated?
|
|
304
|
-
- [ ] All key facts cite information sources?
|
|
305
|
-
- [ ] Information that can't be found is honestly marked "unavailable" — nothing fabricated?
|
|
306
|
-
- [ ] PDF layout is clean, well-structured, and readable?
|
|
307
|
-
- [ ] Total word count is within the 10,000–30,000 range?
|
|
@@ -1,162 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "Horizontal-Vertical Analysis Framework",
|
|
3
|
-
"version": "1.0",
|
|
4
|
-
"description": "A dual-axis analysis framework for systematically researching products, companies, concepts, or people. The vertical axis traces the complete lifecycle, the horizontal axis expands into current competitive comparison.",
|
|
5
|
-
|
|
6
|
-
"meta": {
|
|
7
|
-
"subject": {
|
|
8
|
-
"name": "string — Name of the research subject",
|
|
9
|
-
"type": "enum: product | company | concept | person | other",
|
|
10
|
-
"one_line_definition": "string — Define what this thing is in one sentence",
|
|
11
|
-
"field": "string — Industry / discipline / domain",
|
|
12
|
-
"research_start_date": "date — When the research began",
|
|
13
|
-
"researcher": "string — Who is conducting this research",
|
|
14
|
-
"research_motivation": "string — Why research this, what was the trigger"
|
|
15
|
-
}
|
|
16
|
-
},
|
|
17
|
-
|
|
18
|
-
"vertical_axis_lifecycle": {
|
|
19
|
-
"description": "Complete timeline from origin to present, presented as narrative — the more detailed and multifaceted, the better",
|
|
20
|
-
|
|
21
|
-
"origin": {
|
|
22
|
-
"birth_context": "string — The era, industry state, and technological environment when it was born",
|
|
23
|
-
"birth_motivation": "string — Why did it appear? What problem did it solve? What gap did it fill?",
|
|
24
|
-
"founders_or_initiators": {
|
|
25
|
-
"who": "string",
|
|
26
|
-
"background": "string — What had these people done before, why were they the ones to do this",
|
|
27
|
-
"initial_vision": "string — What they originally wanted to build"
|
|
28
|
-
},
|
|
29
|
-
"birth_date": "date",
|
|
30
|
-
"birth_location_or_environment": "string",
|
|
31
|
-
"early_form": "string — What it looked like initially, how it differs from today",
|
|
32
|
-
"seed_event": "string — Was there a key event or inspiration that directly prompted its creation"
|
|
33
|
-
},
|
|
34
|
-
|
|
35
|
-
"key_milestone_timeline": [
|
|
36
|
-
{
|
|
37
|
-
"date": "date",
|
|
38
|
-
"event_name": "string",
|
|
39
|
-
"event_description": "string — What happened",
|
|
40
|
-
"why_important": "string — How this event changed the subsequent trajectory",
|
|
41
|
-
"decisions_and_choices": "string — What choices were made at this node, what was abandoned",
|
|
42
|
-
"external_trigger": "string | null — Was it triggered by external events (policy, competitor moves, market changes)",
|
|
43
|
-
"results_and_impact": "string — Direct and indirect consequences of this event"
|
|
44
|
-
}
|
|
45
|
-
],
|
|
46
|
-
|
|
47
|
-
"phase_segmentation": [
|
|
48
|
-
{
|
|
49
|
-
"phase_name": "string — e.g.: inception, rapid growth, transformation, maturity",
|
|
50
|
-
"time_span": "string — Start to end dates",
|
|
51
|
-
"core_characteristics": "string — The most prominent features of this phase",
|
|
52
|
-
"core_tensions": "string — The biggest challenge or internal tension during this phase",
|
|
53
|
-
"key_figures": ["string — People who played key roles during this phase"],
|
|
54
|
-
"key_decisions": ["string — Major decisions made during this phase"],
|
|
55
|
-
"phase_outcomes": "string — What results were delivered by the end of this phase"
|
|
56
|
-
}
|
|
57
|
-
],
|
|
58
|
-
|
|
59
|
-
"path_dependency_analysis": {
|
|
60
|
-
"lock_in_decisions": ["string — Which early decisions locked in later development direction, becoming irreversible"],
|
|
61
|
-
"missed_forks": ["string — Which key moments could have gone a different way"],
|
|
62
|
-
"self_reinforcing_mechanisms": "string — What mechanisms deepened the path (network effects, ecosystem lock-in, user habits, etc.)"
|
|
63
|
-
},
|
|
64
|
-
|
|
65
|
-
"narrative_threads": {
|
|
66
|
-
"main_story": "string — If the entire journey could be summarized in one story, what would it be",
|
|
67
|
-
"recurring_themes": ["string — Patterns, tensions, or themes that appear repeatedly across different phases"],
|
|
68
|
-
"turning_points": ["string — The most dramatic turns"],
|
|
69
|
-
"unresolved_mysteries": ["string — What information is still missing and needs further investigation"]
|
|
70
|
-
}
|
|
71
|
-
},
|
|
72
|
-
|
|
73
|
-
"horizontal_axis_competitive_comparison": {
|
|
74
|
-
"description": "At the current point in time, systematic horizontal comparison with competitors/peers",
|
|
75
|
-
|
|
76
|
-
"analysis_time_snapshot": "date — The baseline point in time for horizontal comparison",
|
|
77
|
-
|
|
78
|
-
"subject_profile": {
|
|
79
|
-
"current_positioning": "string — How it currently defines itself",
|
|
80
|
-
"core_strengths": ["string — Its strongest points"],
|
|
81
|
-
"core_weaknesses": ["string — Its weakest points"],
|
|
82
|
-
"target_users": "string — Who it serves",
|
|
83
|
-
"business_model": "string — How it makes money / sustains operations",
|
|
84
|
-
"technical_approach": "string — Underlying technology choices",
|
|
85
|
-
"user_scale_and_growth": "string — Current scale and growth trend",
|
|
86
|
-
"user_reputation": {
|
|
87
|
-
"positive_feedback": ["string — Most frequently praised points"],
|
|
88
|
-
"negative_feedback": ["string — Most frequently criticized points"],
|
|
89
|
-
"typical_use_cases": ["string — Main scenarios where users use it"]
|
|
90
|
-
}
|
|
91
|
-
},
|
|
92
|
-
|
|
93
|
-
"competitor_list": [
|
|
94
|
-
{
|
|
95
|
-
"competitor_name": "string",
|
|
96
|
-
"competitor_type": "enum: direct | indirect | potential | alternative",
|
|
97
|
-
"one_line_definition": "string",
|
|
98
|
-
"current_positioning": "string",
|
|
99
|
-
"core_strengths": ["string"],
|
|
100
|
-
"core_weaknesses": ["string"],
|
|
101
|
-
"target_users": "string",
|
|
102
|
-
"business_model": "string",
|
|
103
|
-
"technical_approach": "string",
|
|
104
|
-
"user_scale_and_growth": "string",
|
|
105
|
-
"user_reputation": {
|
|
106
|
-
"positive_feedback": ["string"],
|
|
107
|
-
"negative_feedback": ["string"],
|
|
108
|
-
"typical_use_cases": ["string"]
|
|
109
|
-
},
|
|
110
|
-
"key_difference_from_subject": "string — Compared to the research subject, what is the most fundamental difference",
|
|
111
|
-
"threat_level": "enum: high | medium | low",
|
|
112
|
-
"threat_analysis": "string — Why it constitutes this level of threat"
|
|
113
|
-
}
|
|
114
|
-
],
|
|
115
|
-
|
|
116
|
-
"dimensional_comparison_matrix": {
|
|
117
|
-
"description": "Select the most critical dimensions and compare the subject against all competitors",
|
|
118
|
-
"comparison_dimensions": [
|
|
119
|
-
{
|
|
120
|
-
"dimension_name": "string — e.g.: performance, pricing, usability, ecosystem, community activity",
|
|
121
|
-
"why_this_dimension": "string — Why this dimension matters",
|
|
122
|
-
"performance_by_player": {
|
|
123
|
-
"subject": "string",
|
|
124
|
-
"competitor_a": "string",
|
|
125
|
-
"competitor_b": "string"
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
]
|
|
129
|
-
},
|
|
130
|
-
|
|
131
|
-
"competitive_landscape_assessment": {
|
|
132
|
-
"current_landscape": "string — Is it a hundred flowers blooming, a duopoly, a monopoly, or something else",
|
|
133
|
-
"landscape_formation_reasons": "string — Why is it this landscape",
|
|
134
|
-
"landscape_evolution_trend": "string — Where might it head next",
|
|
135
|
-
"subject_position": "string — Where does the subject sit in this landscape"
|
|
136
|
-
}
|
|
137
|
-
},
|
|
138
|
-
|
|
139
|
-
"cross_axis_insights": {
|
|
140
|
-
"description": "Cross-analysis of vertical and horizontal axes — the most valuable part of HV Analysis",
|
|
141
|
-
|
|
142
|
-
"how_history_shaped_current_position": "string — Which decisions and events from the vertical trajectory determined its position in today's horizontal comparison",
|
|
143
|
-
"longitudinal_comparison_of_competitors": "string — If competitors are also placed on the timeline, how do their origins and evolutions differ",
|
|
144
|
-
"historical_roots_of_current_advantages": ["string — Each current advantage traced back to which historical node"],
|
|
145
|
-
"historical_roots_of_current_disadvantages": ["string — Each current weakness traced back to which historical decision"],
|
|
146
|
-
"future_projection": {
|
|
147
|
-
"based_on_vertical_trends": "string — If the current trajectory continues, what happens next",
|
|
148
|
-
"based_on_horizontal_competition": "string — How will changes in the competitive landscape affect it",
|
|
149
|
-
"most_likely_scenario": "string",
|
|
150
|
-
"most_dangerous_scenario": "string",
|
|
151
|
-
"most_optimistic_scenario": "string"
|
|
152
|
-
}
|
|
153
|
-
},
|
|
154
|
-
|
|
155
|
-
"output_requirements": {
|
|
156
|
-
"vertical_output": "Presented as narrative/story, not a timeline list. Must have causal logic, details, people — let readers feel 'why it arrived where it is today step by step'",
|
|
157
|
-
"horizontal_output": "Presented as comparative analysis, with both structured dimensional comparison and qualitative judgments and insights",
|
|
158
|
-
"cross_axis_output": "Presented as analytical commentary, weaving information from both axes to produce original judgments",
|
|
159
|
-
"suggested_word_count": "Vertical 3,000–8,000 words, Horizontal 2,000–5,000 words, Cross-axis 1,000–2,000 words",
|
|
160
|
-
"source_attribution": "All key facts must cite information sources (links, documents, interviews, etc.)"
|
|
161
|
-
}
|
|
162
|
-
}
|