You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Sharpen SKILL.md triggering and tighten Buffett defaults
- Rewrite description to cover all four workflows (digest, analytics, Xiaohongshu, research map) with both English and Chinese trigger phrases so the skill matches more user intents.
- Slim SKILL.md by ~24% (10KB → 7.6KB): extract the AI Analysis Framework into references/analysis-framework.md, dedupe sections that mirrored references/analytics.md and references/xhs-style.md.
- Replace hardcoded /Users/vincentlan/... report paths with $FOLLOW_ALEABITO_REPORTS_DIR so the skill is portable.
- Default every Buffett-style field (护城河, 赚钱能力, 客户替换风险, Buffett 式好公司, 当前结论) to unverified / insufficient evidence; escalation now requires cited evidence. A single tweet is explicitly not evidence for "strong" or "proven".
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
description: Track Serenity / @aleabitoreddit on X, turn new posts into concise Chinese market-aware digests, and optionally deliver them through macOS iMessage. Use when the user asks to follow aleabitoreddit, AleaBito, Serenity, or wants daily Chinese updates/reminders from that X account.
3
+
description: Track Serenity / @aleabitoreddit on X and turn the feed into (1) a beginner-friendly Chinese iMessage digest with first-principles + Buffett-style judgement, (2) cumulative 60-day ticker mention analytics CSVs for a website, (3) a Xiaohongshu writing brief, and (4) a durable private research map. Trigger on requests like "follow aleabitoreddit / AleaBito / Serenity", "daily Chinese updates from that X account", "60-day mention analytics", "ticker mention count", "写小红书 aleabito", "aleabito 研究地图 / research map", or any request for Chinese commentary derived from @aleabitoreddit posts.
4
4
---
5
5
6
6
# Follow AleaBito
7
7
8
8
## Purpose
9
9
10
-
Track `@aleabitoreddit` on X and produce a Chinese digest for the user. The digest must be grounded only in fetched posts and must include source URLs.
10
+
Track `@aleabitoreddit` on X and produce Chinese deliverables grounded only in fetched posts. Always include source URLs. Treat the content as market commentary, not investment advice.
11
11
12
-
This account discusses equities, AI infrastructure, semiconductors, neoclouds, and trading ideas. Treat the content as market commentary, not investment advice.
12
+
This skill handles four workflows. Pick the one(s) the user asked for and read the matching reference file only when needed:
| Xiaohongshu post | Xiaohongshu |[Xiaohongshu](#xiaohongshu-workflow) + `references/xhs-style.md`|
19
+
| Research map | Research map |[Research Map](#research-map-workflow)|
20
+
21
+
When producing any `AI 分析`, read `references/analysis-framework.md` first. **All Buffett-style fields default to `unverified`; escalation requires cited evidence.**
22
+
23
+
## Paths
24
+
25
+
Reports go under `$FOLLOW_ALEABITO_REPORTS_DIR`. If unset, default to `$HOME/Documents/aleabito-reports`. Treat all CSV / meta paths below as `$FOLLOW_ALEABITO_REPORTS_DIR/<filename>`.
13
26
14
27
## Data Sources
15
28
16
-
Use `scripts/fetch-updates.js` to fetch posts. It tries:
29
+
Use `scripts/fetch-updates.js`. It tries:
17
30
18
31
1. X API v2 when `X_BEARER_TOKEN` exists in `~/.follow-aleabito/.env`.
19
32
2. X public syndication fallback when no token is configured.
20
-
3. Logged-in Chrome/X page fallback on macOS when anonymous sources return no current posts.
33
+
3. Logged-in Chrome/X page fallback on macOS when anonymous sources return nothing.
21
34
22
-
The syndication fallback can miss the newest posts or truncate long posts. The Chrome fallback depends on the user being logged into X in Google Chrome and may open `https://x.com/aleabitoreddit` in the active Chrome tab. When Chrome shows`Show more`inside a post, expand it before extracting text so long posts and subscriber-visible posts are not summarized from previews. If the JSON output contains `warnings`, mention them briefly in the digest or setup guidance.
35
+
Caveats: the syndication fallback can miss the newest posts or truncate long ones. The Chrome fallback may open `https://x.com/aleabitoreddit` in the active Chrome tab — expand any`Show more` before extracting. If the JSON output contains `warnings`, mention them briefly in the digest or setup guidance.
23
36
24
37
Never invent posts, prices, positions, or links. If no fetched post has a URL, do not include it.
Read `/tmp/follow-aleabito-brief.md`before writing the digest. The brief contains ticker counts, theme groups, selected high-signal replies, and original source links. Use the raw JSON only when the brief is insufficient.
47
+
Read `/tmp/follow-aleabito-brief.md`(ticker counts, theme groups, high-signal replies, source links) before writing. Use the raw JSON only when the brief is insufficient.
37
48
38
49
If `tweets` is empty:
39
-
- If `config.notifyWhenEmpty` is true, send a short Chinese note: `今天 @aleabitoreddit 没有抓到新的可发送动态。`
40
-
- If false, stop without sending.
50
+
- If `config.notifyWhenEmpty` is true, send `今天 @aleabitoreddit 没有抓到新的可发送动态。`
51
+
- Otherwise stop without sending.
52
+
53
+
Digest structure (Chinese, iMessage-sized — signal over completeness):
41
54
42
-
If there are tweets, write a Chinese digest with:
43
-
- Title line: `Serenity / @aleabitoreddit 今日动态`
55
+
- Title: `Serenity / @aleabitoreddit 今日动态`
44
56
-`今天她重点看什么`
45
57
- 2-4 key takeaways grouped by theme.
46
-
- For each included post or theme: `她的观点`->`小白解释`->`第一性原理`->`Buffett 直接判断`.
47
-
-Include mentioned tickers/themes, original URL, and created time.
48
-
-A short caution line for market/trading content: `仅作信息跟踪,不构成投资建议。`
58
+
- For each included post/theme: `她的观点`→`小白解释`→`第一性原理`→`Buffett 直接判断`. Read `references/analysis-framework.md` for the judgement shape and default-unverified rules.
59
+
-Mentioned tickers/themes, original URL, created time.
60
+
-Footer: `仅作信息跟踪,不构成投资建议。`
49
61
50
-
Keep it concise enough for iMessage. Prefer signal over completeness.
51
-
52
-
Only after `send-imessage.js` returns `status: ok`, mark tweets as seen. If delivery fails, do not run `mark-seen.js`.
62
+
Send via [iMessage](#imessage-delivery). Run `mark-seen.js`**only after**`send-imessage.js` returns `status: ok`.
53
63
54
64
## Cumulative Mention Analytics
55
65
56
-
Use `scripts/analyze-mentions.js` when the user asks for 60-day mention analytics, a website-readable CSV, ongoing tracking, or ticker mention counts.
57
-
58
-
This workflow is cumulative, not rolling:
59
-
60
-
- The first run uses 60 days only as the initial backfill seed.
61
-
- Later runs fetch only new content with an overlap window and append by tweet id.
62
-
- Existing rows are deduped by `tweet_id`, so overlap fetches do not double-count.
63
-
- If the X API fails, keep the previous CSVs and write the failure to `.meta.json`.
66
+
Trigger when the user asks for 60-day analytics, ticker mention counts, website-readable CSVs, or ongoing tracking. The workflow is cumulative, not rolling — the 60-day backfill is a seed; later runs only append new events.
Use `--max-pages <n>` for cost-controlled tests. Use `--rebuild-only` to recompute summary/daily CSVs from existing events without calling the X API. Use `--output-dir <dir>` to write reports somewhere else. The script reads `X_BEARER_TOKEN` from `~/.follow-aleabito/.env` and never writes secrets into CSV output.
Read the generated brief and write the final post in Chinese. Default to both a full version and an under-1000-Chinese-character version unless the user asks for only one.
110
-
111
-
For Xiaohongshu copy:
104
+
Read the generated brief, then write in Chinese. Default to producing both a full version and an under-1000-Chinese-character version unless the user asks for only one.
112
105
113
-
- Make it beginner-friendly and concrete.
114
-
- Explain the table before interpreting it.
115
-
- Treat high mention count as a research-map signal, not a buy signal.
116
-
- Apply first principles and Buffett direct answers in plain language.
117
-
- Do not leave Buffett questions unanswered.
106
+
Read `references/xhs-style.md` for writing rules, required structure, and the default-unverified Buffett shape.
118
107
119
108
## Research Map Workflow
120
109
121
-
Use `scripts/update-research-map.js` after cumulative analytics when the user wants a durable research map.
122
-
123
-
Run:
110
+
Trigger when the user wants a durable research map after analytics.
The script also writes `~/.follow-aleabito/research-map.md`. Preserve existing manual notes and Buffett fields when refreshing the map. Do not invent financial facts in the deterministic script; if evidence is missing, keep fields as `unverified` or `research map`.
133
-
134
-
## AI Analysis Framework
135
-
136
-
When adding `AI 分析`, use both first-principles reasoning and the local `$buffett` skill if available at `${CODEX_HOME:-$HOME/.codex}/skills/buffett/SKILL.md`.
137
-
138
-
For daily digests, do not use the full Buffett output template unless the user asks for a deep dive on one company. Instead, read only the relevant Buffett references and compress the analysis into 1-3 paragraphs:
139
-
140
-
- Always apply first principles: value comes from future owner cash flows, durability of demand, supply bottlenecks, pricing power, capital intensity, and rule-of-law/property-rights stability.
141
-
- Always use beginner-friendly wording first. Explain terms such as CPO, photonics, 800VDC, P/B, TAM, ASP, margin, and cash flow when they first appear.
142
-
- For business quality or moat claims, read `$buffett/references/03-business-moat.md`.
143
-
- For management, acquisitions, buybacks, dilution, or capital allocation, read `$buffett/references/04-management-governance.md` and `$buffett/references/06-valuation-capital.md`.
144
-
- For China/regulatory/policy risk, leverage, value traps, or when to avoid/exit, read `$buffett/references/07-risk-behavior.md`.
145
-
- For technology/semiconductor/AI infrastructure themes, read the technology chapter in `$buffett/references/08-industry-playbooks.md` when needed.
146
-
147
-
Do not merely ask Buffett-style questions. Answer them directly from available evidence:
148
-
149
-
-`护城河`: strong / medium / weak / unproven, with one plain-language reason.
150
-
-`赚钱能力`: proven / improving / unproven, based on revenue, margin, cash flow, or lack of proof.
151
-
-`客户替换风险`: low / medium / high, based on certification, switching cost, second-source risk, and customer concentration.
152
-
-`Buffett 式好公司`: yes / not yet / no.
153
-
-`当前结论`: research map / investable conclusion / insufficient evidence.
154
-
155
-
The analysis must distinguish:
156
-
-`研究地图`: useful leads to investigate.
157
-
-`可投资结论`: only valid after moat, financials, valuation, and margin-of-safety work.
158
-
159
-
Never turn Serenity's posts into direct buy/sell instructions. Say when the evidence is insufficient for a Buffett-style decision.
119
+
Also writes `~/.follow-aleabito/research-map.md`. Preserve existing manual notes and Buffett fields when refreshing. If evidence is missing, keep fields as `unverified` or `research map` — the deterministic script must not invent financial facts.
160
120
161
121
## iMessage Delivery
162
122
163
-
The iMessage recipient lives in `~/.follow-aleabito/config.json`:
123
+
Recipient lives in `~/.follow-aleabito/config.json`:
164
124
165
125
```json
166
126
{
@@ -171,48 +131,27 @@ The iMessage recipient lives in `~/.follow-aleabito/config.json`:
Then edit `~/.follow-aleabito/.env` and set `X_BEARER_TOKEN`.
207
-
208
155
## Automation
209
156
210
-
For Codex Desktop recurring jobs, create a daily cron automation that:
211
-
212
-
1. Uses this skill.
213
-
2. Runs `fetch-updates.js`.
214
-
3. Writes the Chinese digest to `/tmp/follow-aleabito-digest.txt`.
215
-
4. Runs `send-imessage.js`.
216
-
5. Runs `mark-seen.js` only after successful send.
217
-
218
-
Recommended default time: 8:00 AM in the user's timezone unless they specify otherwise.
157
+
For a daily cron, run in order: `fetch-updates.js` → write Chinese digest to `/tmp/follow-aleabito-digest.txt` → `send-imessage.js` → `mark-seen.js` only after success. Default recommended time: 8:00 AM in the user's timezone.
This file defines how to add `AI 分析` to digests, Xiaohongshu posts, and research map entries. Read this only when you actually need to produce analysis output.
4
+
5
+
## Scope
6
+
7
+
For daily digests, do not use the full Buffett output template unless the user asks for a deep dive on one company. Compress the analysis into 1-3 paragraphs and reuse the shape below.
8
+
9
+
## First Principles
10
+
11
+
Value comes from future owner cash flows. Always reason from:
12
+
13
+
- Durability of demand.
14
+
- Supply bottlenecks.
15
+
- Pricing power.
16
+
- Capital intensity.
17
+
- Rule-of-law / property-rights stability.
18
+
19
+
## Beginner-Friendly Wording
20
+
21
+
Define terms the first time they appear, including but not limited to: CPO, photonics, 800VDC, P/B, TAM, ASP, margin, cash flow, customer switching cost, second source, certification cycle.
22
+
23
+
## Buffett References
24
+
25
+
Use the local `$buffett` skill if it exists at `${CODEX_HOME:-$HOME/.codex}/skills/buffett/SKILL.md`. Read only the chapters you need:
26
+
27
+
- Business quality / moat claims → `$buffett/references/03-business-moat.md`.
28
+
- Management, acquisitions, buybacks, dilution, capital allocation → `$buffett/references/04-management-governance.md` and `$buffett/references/06-valuation-capital.md`.
29
+
- China / regulatory / policy risk, leverage, value traps, exit timing → `$buffett/references/07-risk-behavior.md`.
30
+
- Technology / semiconductor / AI infrastructure themes → the technology chapter in `$buffett/references/08-industry-playbooks.md`.
31
+
32
+
If `$buffett` is not installed, proceed with first-principles reasoning only and mark Buffett fields as `unverified`.
33
+
34
+
## Required Output Shape
35
+
36
+
For each important ticker or theme:
37
+
38
+
1.`她的观点` — what Serenity said, grounded in the fetched post.
39
+
2.`小白解释` — plain-language reframing.
40
+
3.`第一性原理` — apply the first-principles list above.
41
+
4.`Buffett 直接判断` — answer the fields below.
42
+
43
+
## Buffett Direct Judgement — Default Unverified
44
+
45
+
Every field starts at `unverified` / `insufficient evidence`. Escalate only when you can cite specific evidence from the fetched post, the Buffett references, or verified public financials. A single tweet is not evidence for "strong" or "proven".
46
+
47
+
-`护城河`: `unverified` by default. Escalate to `weak` / `medium` / `strong` only with a one-sentence reason rooted in evidence (certifications, switching cost, network effect, regulatory barrier, unique IP, scale economics).
48
+
-`赚钱能力`: `unverified` by default. Escalate to `improving` or `proven` only when revenue, gross margin, operating margin, or cash flow numbers are cited.
49
+
-`客户替换风险`: `unverified` by default. Escalate to `low` / `medium` / `high` only with reasons (certification cycle, switching cost, second-source availability, customer concentration).
50
+
-`Buffett 式好公司`: `not yet` by default. `yes` requires moat + 赚钱能力 + reasonable capital allocation all rated above unverified. `no` requires explicit disqualifying evidence.
51
+
-`当前结论`: `insufficient evidence` by default. `research map` is acceptable when there is a lead worth tracking. `investable conclusion` requires moat, financials, valuation, and margin-of-safety work — never from tweets alone.
52
+
53
+
Do not ask Buffett-style questions in the final output. Answer them, even if the honest answer is `unverified`.
54
+
55
+
## Hard Rules
56
+
57
+
- Never turn Serenity's posts into direct buy/sell instructions.
58
+
- Distinguish `研究地图` (leads worth tracking) from `可投资结论` (only valid after moat, financials, valuation, and margin-of-safety work).
59
+
- If evidence is missing, say so. Do not invent moat, margins, customer lists, or valuation multiples.
0 commit comments