felo-ai 0.2.31 → 0.2.34

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/README.md CHANGED
@@ -116,7 +116,7 @@ felo livedoc retrieve SHORT_ID --query "search query"
116
116
 
117
117
  ## Skills Overview
118
118
 
119
- 5 skills across search, content generation, web scraping, and social media:
119
+ 7 skills across search, content generation, web scraping, social media, knowledge base, and shopping advice:
120
120
 
121
121
  | Skill | Description | Docs |
122
122
  | --------------------------- | ------------------------------------------------------------- | ------------------------------- |
@@ -126,6 +126,7 @@ felo livedoc retrieve SHORT_ID --query "search query"
126
126
  | **felo-youtube-subtitling** | Fetch YouTube video subtitles | [→](./felo-youtube-subtitling/) |
127
127
  | **felo-x-search** | Search X (Twitter) tweets, users, replies | [→](./felo-x-search/SKILL.md) |
128
128
  | **felo-livedoc** | Manage knowledge bases and semantic retrieval | [→](./felo-livedoc/) |
129
+ | **apple-buy-advisor** | Research and compare Apple products before you buy | [→](./apple-buy-advisor/) |
129
130
 
130
131
  ---
131
132
 
@@ -144,6 +145,7 @@ felo livedoc retrieve SHORT_ID --query "search query"
144
145
  /plugin install felo-youtube-subtitling@felo-ai
145
146
  /plugin install felo-x-search@felo-ai
146
147
  /plugin install felo-livedoc@felo-ai
148
+ /plugin install apple-buy-advisor@felo-ai
147
149
  ```
148
150
 
149
151
  ### ClawHub
@@ -157,6 +159,7 @@ clawhub install felo-web-fetch
157
159
  clawhub install felo-youtube-subtitling
158
160
  clawhub install felo-x-search
159
161
  clawhub install felo-livedoc
162
+ clawhub install apple-buy-advisor
160
163
  ```
161
164
 
162
165
  ### Gemini CLI
@@ -168,6 +171,7 @@ cd felo-skills
168
171
  # Copy skill folders to Gemini CLI skills directory
169
172
  cp -r felo-search ~/.gemini/skills/
170
173
  cp -r felo-slides ~/.gemini/skills/
174
+ cp -r apple-buy-advisor ~/.gemini/skills/
171
175
  ```
172
176
 
173
177
  ### OpenAI Codex
@@ -176,6 +180,7 @@ cp -r felo-slides ~/.gemini/skills/
176
180
  git clone https://github.com/Felo-Inc/felo-skills.git
177
181
  # Copy any skill folder to ~/.codex/skills/
178
182
  cp -r felo-search ~/.codex/skills/
183
+ cp -r apple-buy-advisor ~/.codex/skills/
179
184
  ```
180
185
 
181
186
  ### OpenClaw
@@ -193,6 +198,7 @@ git clone https://github.com/Felo-Inc/felo-skills.git
193
198
  # Gemini CLI: ~/.gemini/skills/
194
199
  # Codex: ~/.codex/skills/
195
200
  cp -r felo-search ~/.claude/skills/
201
+ cp -r apple-buy-advisor ~/.claude/skills/
196
202
  ```
197
203
 
198
204
  ---
@@ -0,0 +1,283 @@
1
+ # Apple Buy Advisor Skill
2
+
3
+ Research and compare Apple products to help users make informed buying decisions.
4
+
5
+ ## Directory Structure
6
+
7
+ ```
8
+ apple-buy-advisor/
9
+ ├── SKILL.md # Main skill definition
10
+ └── README.md # This file
11
+ ```
12
+
13
+ ## What It Does
14
+
15
+ When a user asks about buying or comparing Apple products, this skill:
16
+
17
+ 1. **Fetches official specs** from Apple.com via `felo-web-fetch`
18
+ 2. **Searches user opinions** on X (Twitter) via `felo-x-search`
19
+ 3. **Researches community & professional reviews** via `felo-search`
20
+ 4. **Produces a structured report** — single product or head-to-head comparison
21
+ 5. **Saves the report automatically** to a local `.md` file and, when available, to Felo LiveDoc
22
+
23
+ ## Trigger Conditions
24
+
25
+ Activates when users:
26
+ - Mention an Apple product model by name (e.g. "iPhone 17", "MacBook Pro M4", "iPad Air 13")
27
+ - Use a comparison pattern: `[Model A] vs [Model B]` (e.g. "iPhone 17 vs iPhone 17e")
28
+ - Ask about buying, upgrading, or choosing between Apple products
29
+ - Ask "Should I buy a MacBook Pro?", "Is iPhone 16 Pro worth it?", "Which Apple Watch should I get?"
30
+
31
+ ## Key Features
32
+
33
+ ✅ **Fresh data** — All specs fetched live from Apple.com via `felo-web-fetch`; never from training knowledge
34
+ ✅ **felo-web-fetch enforced** — All URL content retrieval goes through `felo-web-fetch` exclusively
35
+ ✅ **Multiple sources** — X, Reddit, MacRumors forums (personal) + 9to5Mac, The Verge, CNET (professional)
36
+ ✅ **Two report modes** — Single product analysis or A vs B head-to-head comparison
37
+ ✅ **Balanced** — Separates personal user feedback from professional reviews
38
+ ✅ **Clear recommendations** — Specific buying conditions with overall rating
39
+ ✅ **Multilingual** — Responds in the user's input language
40
+ ✅ **Auto-save workflow** — Always writes a local markdown report; also saves to Felo LiveDoc when configured
41
+
42
+ ## Report Formats
43
+
44
+ **Single product:** Product Positioning → Specs Comparison → Real User Feedback → Professional Reviews → Buying Recommendation
45
+
46
+ **A vs B comparison:** Head-to-Head Specs → User Feedback per product → Professional Verdict → Who Should Buy Which
47
+
48
+ ## Tools Used
49
+
50
+ | Tool | Purpose |
51
+ |------|---------|
52
+ | `felo-web-fetch` | Fetch all URLs (Apple specs pages, review sites) |
53
+ | `felo-x-search` | Real-time user reactions on X/Twitter |
54
+ | `felo-search` | Reddit, MacRumors forums, professional review sites |
55
+ | `felo-livedoc` | Create a LiveDoc and save the final report for sharing/reference |
56
+
57
+ ## Save Behavior
58
+
59
+ After generating the report, the skill must complete a save step before ending:
60
+
61
+ - Always save the full report to a local file named `apple-buy-advisor-<product-slug>-<YYYY-MM-DD>.md`
62
+ - If `FELO_API_KEY` is configured, also create a Felo LiveDoc entry and save the report there
63
+ - If LiveDoc save succeeds, the user is reminded they can open it at `https://felo.ai/livedoc/<short_id>`
64
+ - If `FELO_API_KEY` is missing, LiveDoc save is skipped and the user is told why
65
+
66
+ ## Trusted Sources
67
+
68
+ | Category | Sources |
69
+ |----------|---------|
70
+ | Personal reviews | X/Twitter, Reddit (r/apple, r/[product]), MacRumors Forums |
71
+ | Professional reviews | 9to5Mac, The Verge, CNET, Tom's Guide, Engadget |
72
+
73
+ ## Quick Setup
74
+
75
+ ### Step 1: Install
76
+
77
+ ```bash
78
+ npx skills add Felo-Inc/felo-skills --skill apple-buy-advisor
79
+ ```
80
+
81
+ Or manually copy to your skills directory:
82
+
83
+ ```bash
84
+ # Linux/macOS
85
+ cp -r apple-buy-advisor ~/.claude/skills/
86
+
87
+ # Windows (PowerShell)
88
+ Copy-Item -Recurse apple-buy-advisor "$env:USERPROFILE\.claude\skills\"
89
+ ```
90
+
91
+ ### Step 2: Install required skills
92
+
93
+ This skill depends on four other Felo skills. Install them all:
94
+
95
+ ```bash
96
+ npx skills add Felo-Inc/felo-skills --skill felo-web-fetch
97
+ npx skills add Felo-Inc/felo-skills --skill felo-search
98
+ npx skills add Felo-Inc/felo-skills --skill felo-x-search
99
+ npx skills add Felo-Inc/felo-skills --skill felo-livedoc
100
+ ```
101
+
102
+ ### Step 3: Get API Key
103
+
104
+ 1. Visit [felo.ai](https://felo.ai) and log in
105
+ 2. Click your avatar → **Settings** → **API Keys**
106
+ 3. Click **Create New Key** and copy it
107
+
108
+ ### Step 4: Configure
109
+
110
+ ```bash
111
+ # Linux/macOS
112
+ export FELO_API_KEY="your-api-key-here"
113
+
114
+ # Make it permanent
115
+ echo 'export FELO_API_KEY="your-api-key-here"' >> ~/.zshrc
116
+ ```
117
+
118
+ ```powershell
119
+ # Windows PowerShell
120
+ $env:FELO_API_KEY="your-api-key-here"
121
+ ```
122
+
123
+ Restart Claude Code to load the environment variable.
124
+
125
+ `FELO_API_KEY` is also used for the optional Felo LiveDoc auto-save step.
126
+
127
+ ### Step 5: Test
128
+
129
+ ```
130
+ Should I buy the iPhone 17?
131
+ ```
132
+
133
+ If you get a structured report with specs and reviews, plus a saved local `.md` file, you're all set.
134
+
135
+ ---
136
+
137
+ ## Usage Examples
138
+
139
+ ### Single Product
140
+
141
+ **Is it worth buying?**
142
+ ```
143
+ You: Is the iPhone 17e worth buying?
144
+ Claude: ## iPhone 17e — Worth Buying?
145
+
146
+ ### Product Positioning
147
+ Apple's most affordable iPhone with A16 chip, targeting budget-conscious users.
148
+
149
+ ### Specs Comparison
150
+ | Spec | iPhone 17e | iPhone 16 | Samsung S24 |
151
+ |------------|------------|------------|-------------|
152
+ | Processor | A16 Bionic | A16 Bionic | Snapdragon 8 Gen 3 |
153
+ | RAM | 6GB | 6GB | 12GB |
154
+ | Capacity | 128GB | 128GB | 128GB |
155
+ | Battery | 26h video | 22h video | 27h video |
156
+ | Price | $599 | $699 | $799 |
157
+
158
+ ### Real User Feedback
159
+ **Common Praise:**
160
+ - Performance: "Handles everything I throw at it" (Reddit r/apple)
161
+ - Value: "Best bang for buck in the iPhone lineup" (MacRumors forums)
162
+
163
+ **Common Complaints:**
164
+ - No ProMotion display: "60Hz feels dated at this price" (Reddit)
165
+ - Single camera: "Miss the ultrawide from my old phone" (X)
166
+
167
+ ### Buying Recommendation
168
+ **Buy if:** You want iPhone reliability without the Pro price tag
169
+ **Skip if:** You care about camera versatility or high refresh rate
170
+
171
+ **Overall Rating:** ⭐⭐⭐⭐☆ (4/5)
172
+ ```
173
+
174
+ **Upgrade decision**
175
+ ```
176
+ You: Should I upgrade from iPhone 14 to iPhone 17?
177
+ Claude: For iPhone 14 → 17 upgrade:
178
+
179
+ Key gains: A18 chip (40% faster), 48MP camera, Action Button
180
+ Battery: +4h video playback
181
+ Price difference: ~$200 with trade-in
182
+
183
+ Worth it if: You use the camera heavily or notice slowdowns
184
+ Skip if: Your 14 still feels fast and camera is good enough
185
+
186
+ Verdict: Meaningful upgrade, but not urgent unless camera matters to you.
187
+ ```
188
+
189
+ ### Comparison (A vs B)
190
+
191
+ **Model comparison**
192
+ ```
193
+ You: iPhone 17 vs iPhone 17e
194
+ Claude: ## iPhone 17 vs iPhone 17e — Which Should You Buy?
195
+
196
+ ### Head-to-Head Specs
197
+ | Spec | iPhone 17 | iPhone 17e | Winner |
198
+ |-----------|-------------|-------------|------------|
199
+ | Processor | A18 | A16 Bionic | iPhone 17 |
200
+ | RAM | 8GB | 6GB | iPhone 17 |
201
+ | Display | 6.1" OLED 60Hz | 6.1" OLED 60Hz | Tie |
202
+ | Camera | 48MP + 12MP | 48MP | iPhone 17 |
203
+ | Battery | 22h video | 26h video | iPhone 17e |
204
+ | Price | $799 | $599 | iPhone 17e |
205
+
206
+ ### Who Should Buy Which
207
+ **Choose iPhone 17 if:** You want the latest chip and dual cameras
208
+ **Choose iPhone 17e if:** Budget is the priority and you don't need ultrawide
209
+
210
+ **Overall Verdict:** Pay the extra $200 for iPhone 17 if you use the camera daily.
211
+ Otherwise, 17e is excellent value.
212
+ ```
213
+
214
+ **Mac comparison**
215
+ ```
216
+ You: MacBook Air M3 vs MacBook Pro M4
217
+ Claude: ## MacBook Air M3 vs MacBook Pro M4 — Which Should You Buy?
218
+
219
+ | Spec | MacBook Air M3 | MacBook Pro M4 |
220
+ |-------------|----------------|----------------|
221
+ | Chip | M3 | M4 |
222
+ | RAM (base) | 8GB | 16GB |
223
+ | Display | 13.6" Liquid Retina | 14.2" Liquid Retina XDR |
224
+ | Fan | Fanless | Active cooling |
225
+ | Battery | 18h | 24h |
226
+ | Price | $1,099 | $1,599 |
227
+
228
+ **Choose Air M3 if:** Light tasks, portability, budget-conscious
229
+ **Choose Pro M4 if:** Video editing, sustained workloads, need more RAM headroom
230
+ ```
231
+
232
+ ### Chinese input
233
+
234
+ ```
235
+ You: iPhone 17 值得买吗?
236
+ Claude: ## iPhone 17 — 值得购买吗?
237
+
238
+ ### 产品定位
239
+ 苹果主力旗舰,搭载 A18 芯片,面向追求性能与相机体验的用户。
240
+
241
+ ### 规格对比
242
+ | 规格 | iPhone 17 | iPhone 16 | 三星 S25 |
243
+ |--------|-----------|-----------|---------|
244
+ | 处理器 | A18 | A16 | 骁龙 8 Elite |
245
+ | 内存 | 8GB | 6GB | 12GB |
246
+ | 起售价 | ¥5,999 | ¥4,999 | ¥5,499 |
247
+
248
+ ### 购买建议
249
+ **适合购买:** 重度相机用户、从 iPhone 14 及更早机型升级
250
+ **不建议购买:** 已有 iPhone 16,提升有限
251
+
252
+ **综合评分:** ⭐⭐⭐⭐☆ (4/5)
253
+ ```
254
+
255
+ ### Common questions
256
+
257
+ ```
258
+ You: Buy now or wait for iPhone 18?
259
+ Claude: iPhone 18 is expected September 2026 (~6 months away.
260
+ Current deals on iPhone 17 are strong.
261
+
262
+ Buy now if: You need a phone today or find a good trade-in deal
263
+ Wait if: You can hold out 6 months and want the latest
264
+
265
+ You: Is AirPods Pro 2 worth it over regular AirPods?
266
+ Claude: AirPods Pro 2 vs AirPods 4:
267
+
268
+ ANC: Pro 2 significantly better (industry-leading)
269
+ Sound: Pro 2 wins, especially bass
270
+ Fit: Pro 2 with ear tips seals better
271
+ Price gap: ~$80
272
+
273
+ Worth it if: You commute, travel, or work in noisy environments
274
+ Skip if: You mostly use them at home or don't need ANC
275
+ ```
276
+
277
+ ---
278
+
279
+ ## Version
280
+
281
+ - **Version:** 4.0
282
+ - **Status:** Production Ready
283
+ - **Last Updated:** March 2026
@@ -0,0 +1,323 @@
1
+ ---
2
+ name: apple-buy-advisor
3
+ description: Research and compare Apple products to help decide if they're worth buying. Use when the user: (1) asks whether to buy a Mac, iPhone, iPad, Apple Watch, or AirPods; (2) wants to compare models; (3) seeks a buying recommendation; (4) mentions an Apple product model name or number (e.g. "iPhone 17", "MacBook Pro M4", "iPad Air 13"); (5) uses a comparison pattern like "X vs Y" where X or Y is an Apple product (e.g. "iPhone 17 vs iPhone 17e", "MacBook Air vs MacBook Pro"); (6) asks about upgrading, waiting, or which model to choose.
4
+ allowed-tools: Bash(node:*) Bash(bash:*) Bash(curl:*) Bash(echo:*) Fetch(*) Write(*)
5
+ metadata:
6
+ requires:
7
+ - felo-web-fetch
8
+ - felo-search
9
+ - felo-x-search
10
+ - felo-livedoc
11
+ ---
12
+
13
+ # Apple Buy Advisor
14
+
15
+ Research Apple products and produce a structured buying recommendation based on official specs, professional reviews, and real user feedback.
16
+
17
+ **Language:** Detect the user's input language and respond entirely in that language. If the user writes in Chinese, respond in Chinese. If in English, respond in English. Apply this to all sections of the report.
18
+
19
+ **Input Detection:** This skill activates when the user:
20
+
21
+ - Mentions an Apple product model by name or number (e.g. "iPhone 17", "M4 MacBook Pro", "Apple Watch Series 10")
22
+ - Uses a comparison pattern: `[Model A] vs [Model B]` (e.g. "iPhone 17 vs iPhone 17e")
23
+ - Asks about buying, upgrading, or choosing between Apple products
24
+
25
+ ## Steps to Execute
26
+
27
+ > **Completion rule:** The task is not complete after Step 5. You must execute Step 6 before ending the turn. Never stop at "I now have all the data needed. Let me compile the full report." or after showing the markdown report alone.
28
+
29
+ ### 0. Tool Usage Rule
30
+
31
+ > **CRITICAL: Always use `felo-web-fetch` to retrieve any URL content.** Never use built-in WebFetch, curl, or any other tool to fetch web pages. All HTTP requests to external URLs — Apple specs pages, review sites, or any other URL — must go through `felo-web-fetch`.
32
+
33
+ ### 1. Fetch Official Specs
34
+
35
+ Use `felo-web-fetch` in two steps:
36
+
37
+ **Step 1a — Get model names from compare page** (to identify which models exist):
38
+
39
+ - Mac: `https://www.apple.com/mac/compare/`
40
+ - iPhone: `https://www.apple.com/iphone/compare/`
41
+ - iPad: `https://www.apple.com/ipad/compare/`
42
+ - Apple Watch: `https://www.apple.com/watch/compare/`
43
+ - AirPods: `https://www.apple.com/airpods/compare/`
44
+
45
+ Use this page only to identify the current model lineup. Do not extract specs from here.
46
+
47
+ **Step 1b — Get full specs from the product specs page** (required for all spec values):
48
+
49
+ - `https://www.apple.com/[product-model]/specs/`
50
+ - Example: `https://www.apple.com/iphone-17e/specs/`, `https://www.apple.com/macbook-pro/specs/`
51
+
52
+ Extract all specs exclusively from this page: processor, RAM, storage options (starting capacity), battery life, display specs, and pricing.
53
+
54
+ > **CRITICAL:** Storage, RAM, and all other specs must come from the `/specs/` page only. Never use the compare page or training knowledge for spec values. If the specs page fails to load, explicitly state: "Unable to fetch current specs from Apple.com — specs may be inaccurate." Do not silently substitute any remembered values. **Always fetch via `felo-web-fetch`.**
55
+
56
+ > **REQUIRED FIELDS for Mac / iPad / iPhone:** RAM (unified memory / memory) is a mandatory spec. It must always appear in the Specs Comparison table. If the `/specs/` page does not list RAM explicitly, state "RAM: not listed on specs page" — never omit the field or leave it blank.
57
+
58
+ ### 2. Search Personal User Reviews & Professional Reviews (run in parallel)
59
+
60
+ Run all queries simultaneously to save time.
61
+
62
+ **Personal user reviews** — `felo-x-search` (1 query):
63
+
64
+ - `"[product]" review OR experience OR problem`
65
+
66
+ **Personal user reviews** — `felo-search` (2 queries, run in parallel):
67
+
68
+ - `site:reddit.com "[product]" review OR experience`
69
+ - `site:forums.macrumors.com "[product]" review`
70
+
71
+ **Professional reviews** — `felo-search` (1 query):
72
+
73
+ - `site:9to5mac.com OR site:theverge.com OR site:cnet.com "[product]" review`
74
+
75
+ > **Source filter — personal:** Only extract content from individual users (posts, comments, threads). Discard media articles.
76
+ > **Source filter — professional:** Only extract editorial content. Discard user comments.
77
+
78
+ ### 3. Generate User Feedback Section (from personal sources in Step 2 only)
79
+
80
+ Using **only** the personal user data from Step 2 (X, Reddit, MacRumors forums):
81
+
82
+ - Extract recurring themes from individual user posts and comments
83
+ - Group by sentiment: praise vs. complaints
84
+ - Quote specific user language where possible
85
+ - Apply frequency indicators based on how often a theme appears across sources
86
+ - Attribute each point to its source platform
87
+
88
+ ### 4. Generate Professional Review Section (from professional sources in Step 2 only)
89
+
90
+ Using **only** the professional review data from Step 2 (9to5Mac, The Verge, CNET):
91
+
92
+ - Summarize each publication's key findings
93
+ - Note where professional assessments agree or diverge
94
+ - Highlight benchmark data or lab-tested metrics separately from subjective opinions
95
+
96
+ ### 5. Produce Report
97
+
98
+ **If single product query:**
99
+
100
+ ```
101
+ ## [Product Name] — Worth Buying?
102
+
103
+ ### Product Positioning
104
+ [One sentence: where this product sits in Apple's lineup]
105
+
106
+ ### Specs Comparison
107
+ (Data source: Apple.com — Step 1)
108
+ | Spec | This Product | Previous Gen | Competitor |
109
+ |------|---|---|---|
110
+ | Processor | ... | ... | ... |
111
+ | RAM | ... | ... | ... |
112
+ | Capacity | ... | ... | ... |
113
+ | Battery | ... | ... | ... |
114
+ | Price | ... | ... | ... |
115
+
116
+ ### Real User Feedback
117
+ (Data source: X, Reddit, MacRumors forums — personal sources from Step 2)
118
+
119
+ **Common Praise:**
120
+ - [Theme]: [Specific quote or paraphrase — source: X / Reddit r/apple / MacRumors forums]
121
+
122
+ **Common Complaints:**
123
+ - [Theme]: [Specific quote or paraphrase — source: X / Reddit r/[product] / MacRumors forums]
124
+
125
+ **Community Consensus:**
126
+ [1-2 sentences synthesizing overall user sentiment, based on frequency across sources]
127
+
128
+ ### Professional Review Summary
129
+ (Data source: 9to5Mac, The Verge, CNET — professional sources from Step 2)
130
+
131
+ - **[Publication name]:** [Key finding or verdict]
132
+ - **[Publication name]:** [Key finding or verdict]
133
+ - **[Publication name]:** [Benchmark result or lab-tested metric]
134
+
135
+ **Where pros agree:** [Common conclusion across publications]
136
+ **Where pros diverge:** [Any notable disagreements, e.g. battery life estimates]
137
+
138
+ ### Buying Recommendation
139
+
140
+ **Buy if:** [specific use case]
141
+ **Skip if:** [specific concern]
142
+
143
+ **Overall Rating:** ⭐⭐⭐⭐☆ (4/5)
144
+
145
+ **Conclusion:** [Clear answer to user's question]
146
+ ```
147
+
148
+ **If comparison query (A vs B):**
149
+
150
+ ```
151
+ ## [Product A] vs [Product B] — Which Should You Buy?
152
+
153
+ ### Head-to-Head Specs
154
+ (Data source: Apple.com — Step 1)
155
+ | Spec | [Product A] | [Product B] | Winner |
156
+ |------|---|---|---|
157
+ | Processor | ... | ... | ... |
158
+ | RAM | ... | ... | ... |
159
+ | Capacity | ... | ... | ... |
160
+ | Battery | ... | ... | ... |
161
+ | Price | ... | ... | ... |
162
+
163
+ ### Real User Feedback
164
+ **[Product A] users say:**
165
+ - Praise: ...
166
+ - Complaints: ...
167
+
168
+ **[Product B] users say:**
169
+ - Praise: ...
170
+ - Complaints: ...
171
+
172
+ ### Professional Review Summary
173
+ - **[Publication]:** [Verdict on A vs B]
174
+
175
+ ### Who Should Buy Which
176
+
177
+ **Choose [Product A] if:** [specific use case]
178
+ **Choose [Product B] if:** [specific use case]
179
+
180
+ **Overall Verdict:** [Clear recommendation with reasoning]
181
+ ```
182
+
183
+ #### Key Principles
184
+
185
+ - **Fresh data only** — Never rely on training knowledge for specs or prices
186
+ - **Personal reviews first** — Show community feedback before professional reviews
187
+ - **Source attribution** — Always cite where feedback comes from
188
+ - **Frequency matters** — "Many users report..." vs "One user mentioned..."
189
+ - **Balanced** — Include both praise and complaints
190
+ - **User-focused** — Tailor to their specific needs
191
+
192
+ #### Trusted Sources
193
+
194
+ **Community (personal reviews):**
195
+
196
+ - X/Twitter: Real-time reactions
197
+ - Reddit: r/apple, r/[product]
198
+ - MacRumors Forums: enthusiast depth
199
+
200
+ **Professional reviews:**
201
+
202
+ - Apple-focused: 9to5Mac, MacRumors
203
+ - Tech media: The Verge, CNET, Tom's Guide, Engadget
204
+
205
+ #### Display Strategy for Personal Reviews
206
+
207
+ 1. **Extract themes** from X, Reddit, MacRumors forums
208
+ 2. **Group by sentiment** — praise vs complaints
209
+ 3. **Quote specifically** — "Battery lasts 8-10 hours" beats "battery is good"
210
+ 4. **Show frequency** — note if an issue appears across multiple sources
211
+ 5. **Attribute sources** — "(Reddit, MacRumors forums)"
212
+
213
+ Frequency language:
214
+
215
+ - "Many users report..." (50%+)
216
+ - "Some users report..." (20–50%)
217
+ - "A few users report..." (5–20%)
218
+ - "One user mentioned..." (<5%)
219
+
220
+ #### Product Category Focus
221
+
222
+ | Product | Key Focus | Common Concerns |
223
+ | ----------- | ------------------------------------ | ------------------------------------- |
224
+ | Mac | Performance, thermals, compatibility | Throttling, RAM/storage limits, ports |
225
+ | iPhone | Camera, battery, durability | Battery degradation, heat |
226
+ | iPad | Display, stylus, keyboard | Software limits, value vs MacBook |
227
+ | Apple Watch | Battery, health tracking | Battery claims vs reality |
228
+ | AirPods | Sound, ANC, battery | Fit, durability, repairability |
229
+
230
+ #### Common User Questions
231
+
232
+ **"Worth the upgrade?"** — Compare gains, cite user feedback on value, suggest who should/shouldn't upgrade.
233
+
234
+ **"Buy now or wait?"** — Check upcoming releases, current deals, known issues with current gen.
235
+
236
+ **"vs [competitor]?"** — Side-by-side table, user feedback on both, ecosystem considerations.
237
+
238
+ **"Reliable/durable?"** — Search long-term reports, failure modes, user durability experiences.
239
+
240
+ **"Good for [use case]?"** — Find users with same use case, highlight relevant specs and limitations.
241
+
242
+ #### Handling Edge Cases
243
+
244
+ **New product (<1 month):** Limited data — focus on early adopters, compare to previous gen, flag unknown long-term reliability.
245
+
246
+ **Mature product (>1 year):** Rich data — look for retrospective reviews, known issues, upcoming replacements.
247
+
248
+ **Discontinued:** Focus on retrospectives, compare to current alternatives, note support/repair considerations.
249
+
250
+ **Conflicting sources:** Identify what they disagree on, look for patterns, present both sides with context (e.g. "Pro reviews show 12h; real-world Reddit reports 8–10h under typical load").
251
+
252
+ ## Step 6. Save Report (Mandatory)
253
+
254
+ Step 6 is required. After generating the report in Step 5, immediately save it before ending the response. A report that is only displayed but not saved is incomplete. Execute the save steps sequentially.
255
+
256
+ **6a — Save report to local `.md` file:**
257
+
258
+ Write the full markdown report to a local file using the filename format:
259
+
260
+ ```
261
+ apple-buy-advisor-<product-slug>-<YYYY-MM-DD>.md
262
+ ```
263
+
264
+ Example: `apple-buy-advisor-iphone-17e-2026-03-20.md`
265
+
266
+ Save the file in the current working directory. After writing, confirm to the user: "Report saved locally: `<filename>` ✓"
267
+
268
+ > **Required behavior:** Do not ask the user whether to save. Perform the local save automatically every time. The final answer must not be sent until the file write succeeds or an explicit file-write failure is reported.
269
+
270
+ **6b — Create a LiveDoc** (invoke `felo-livedoc` skill):
271
+
272
+ ```
273
+ felo-livedoc create --name "Apple Buy Advisor" --description "Apple product research reports and buying recommendations"
274
+ ```
275
+
276
+ Extract the `short_id` from the response.
277
+
278
+ **6c — Add a text document** (invoke `felo-livedoc` skill with the `short_id` from 6b):
279
+
280
+ ```
281
+ felo-livedoc add-doc <short_id> --title "<Product Name> — <YYYY-MM-DD>" --content "<full markdown report from Step 5>"
282
+ ```
283
+
284
+ After success, confirm to the user:
285
+
286
+ - "Report saved to Felo LiveDoc ✓"
287
+ - "View it at: `https://felo.ai/livedoc/<short_id>`"
288
+
289
+ > If `FELO_API_KEY` is not set, skip and inform the user: "Set FELO_API_KEY to enable auto-saving reports to LiveDoc."
290
+ >
291
+ > If LiveDoc save is skipped, local `.md` save is still mandatory and must already be completed.
292
+
293
+ ## Final Response Requirements
294
+
295
+ - First show the full report from Step 5
296
+ - Then confirm the local save result with the exact filename
297
+ - Then confirm the LiveDoc save result, or explicitly state that it was skipped because `FELO_API_KEY` is missing
298
+ - Never end with only the report body
299
+ - Never claim completion unless Step 6 has been attempted
300
+
301
+ ## Checklist Before Delivery
302
+
303
+ - [ ] Step 1: Specs fetched from Apple.com specs page (not from memory)
304
+ - [ ] Step 1: RAM field included in Specs Comparison table for Mac / iPad / iPhone (mandatory)
305
+ - [ ] Step 2: Personal user reviews collected from X + Reddit + forums (parallel queries)
306
+ - [ ] Step 2: Professional reviews collected from 3+ media publications (parallel queries)
307
+ - [ ] Step 3: User feedback section built exclusively from personal sources — no media mixed in
308
+ - [ ] Step 4: Professional review section built exclusively from media sources — no user posts mixed in
309
+ - [ ] Recurring themes identified and grouped by sentiment
310
+ - [ ] Every claim attributed to its source
311
+ - [ ] Frequency indicators used appropriately
312
+ - [ ] User's specific needs addressed
313
+ - [ ] Clear, direct answer to their question
314
+ - [ ] Step 6: Report saved to local `.md` file in current working directory
315
+ - [ ] Step 6: Report saved to Felo LiveDoc (or user notified if API key missing)
316
+
317
+ ## Do's and Don'ts
318
+
319
+ ✅ Always fetch fresh specs | ❌ Never use training knowledge for specs/prices
320
+ ✅ Multiple sources | ❌ Never rely on a single source
321
+ ✅ Cite sources | ❌ Never present opinions as facts
322
+ ✅ Show both sides | ❌ Never ignore negative feedback
323
+ ✅ Mention alternatives | ❌ Never over-weight isolated complaints
@@ -177,7 +177,7 @@ function usage() {
177
177
  ' append-readme <short_id> Append to README (--content required)',
178
178
  ' delete-readme <short_id> Delete README',
179
179
  ' tasks <short_id> List tasks (--status, --labels optional)',
180
- ' create-task <short_id> Create a task (--title, --status, --sort required)',
180
+ ' create-task <short_id> Create a task (--title required; --status default 0, --sort default 0)',
181
181
  ' update-task <short_id> <task_id> Partially update a task',
182
182
  ' delete-task <short_id> <task_id> Delete a task',
183
183
  ' task-records <short_id> <task_id> List task records (comments + history)',
@@ -609,12 +609,12 @@ async function main() {
609
609
  case 'create-task': {
610
610
  if (!shortId) { console.error('ERROR: short_id is required'); break; }
611
611
  if (!args.title) { console.error('ERROR: --title is required'); break; }
612
- if (args.status === '') { console.error('ERROR: --status is required'); break; }
613
- if (args.sort === '') { console.error('ERROR: --sort is required'); break; }
614
612
  spinnerId = startSpinner('Creating task');
615
- const body = { title: args.title, status: parseInt(args.status, 10), sort: parseInt(args.sort, 10) };
613
+ const status = (args.status !== '') ? parseInt(args.status, 10) : 0;
614
+ const sort = (args.sort !== '') ? parseInt(args.sort, 10) : 0;
615
+ const body = { title: args.title, status, sort };
616
616
  if (args.description) body.description = args.description;
617
- if (args.labels) body.labels = args.labels.split(',').map(l => l.trim()).filter(Boolean);
617
+ body.labels = args.labels ? args.labels.split(',').map(l => l.trim()).filter(Boolean) : [];
618
618
  const payload = await apiRequest('POST', `/livedocs/${shortId}/tasks`, body, apiKey, apiBase, timeoutMs);
619
619
  if (json) { console.log(JSON.stringify(payload, null, 2)); }
620
620
  else { process.stdout.write('Task created!\n\n'); process.stdout.write(formatTask(payload?.data)); }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "felo-ai",
3
- "version": "0.2.31",
3
+ "version": "0.2.34",
4
4
  "description": "Felo AI CLI - real-time search, PPT generation, SuperAgent conversation, LiveDoc management, web fetch, YouTube subtitles, LiveDoc knowledge base, and X (Twitter) search from the terminal",
5
5
  "type": "module",
6
6
  "main": "src/cli.js",
package/src/cli.js CHANGED
@@ -882,8 +882,8 @@ livedocCmd
882
882
  .command("create-task <short_id>")
883
883
  .description("Create a task in a LiveDoc")
884
884
  .requiredOption("--title <title>", "task title")
885
- .requiredOption("--status <n>", "task status: 0=TODO, 1=IN_PROGRESS, 2=DONE")
886
- .requiredOption("--sort <n>", "sort order (non-negative integer)")
885
+ .option("--status <n>", "task status: 0=TODO, 1=IN_PROGRESS, 2=DONE (default: 0)")
886
+ .option("--sort <n>", "sort order (non-negative integer, default: 0)")
887
887
  .option("--description <desc>", "task description")
888
888
  .option("--labels <labels>", "comma-separated labels (max 10)")
889
889
  .option("-j, --json", "output raw JSON")
package/src/livedoc.js CHANGED
@@ -700,17 +700,17 @@ export async function createTask(shortId, opts = {}) {
700
700
  if (!apiKey) { console.error(NO_KEY_MESSAGE.trim()); return 1; }
701
701
  if (!shortId) { process.stderr.write('ERROR: short_id is required.\n'); return 1; }
702
702
  if (!opts.title) { process.stderr.write('ERROR: --title is required.\n'); return 1; }
703
- if (opts.status === undefined || opts.status === '') { process.stderr.write('ERROR: --status is required.\n'); return 1; }
704
- if (opts.sort === undefined || opts.sort === '') { process.stderr.write('ERROR: --sort is required.\n'); return 1; }
705
703
 
706
704
  const apiBase = await getApiBase();
707
705
  const timeoutMs = opts.timeoutMs || DEFAULT_TIMEOUT_MS;
708
706
  const spinnerId = startSpinner('Creating task');
709
707
 
710
708
  try {
711
- const body = { title: opts.title, status: parseInt(opts.status, 10), sort: parseInt(opts.sort, 10) };
709
+ const status = (opts.status !== undefined && opts.status !== '') ? parseInt(opts.status, 10) : 0;
710
+ const sort = (opts.sort !== undefined && opts.sort !== '') ? parseInt(opts.sort, 10) : 0;
711
+ const body = { title: opts.title, status, sort };
712
712
  if (opts.description) body.description = opts.description;
713
- if (opts.labels) body.labels = opts.labels.split(',').map(l => l.trim()).filter(Boolean);
713
+ body.labels = opts.labels ? opts.labels.split(',').map(l => l.trim()).filter(Boolean) : [];
714
714
  const payload = await apiRequest('POST', `/livedocs/${shortId}/tasks`, body, apiKey, apiBase, timeoutMs);
715
715
  if (opts.json) { console.log(JSON.stringify(payload, null, 2)); return 0; }
716
716
  process.stdout.write('Task created!\n\n');