social-autoposter 1.0.6 → 1.0.8
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/package.json +1 -1
- package/setup/SKILL.md +64 -11
- package/skill/SKILL.md +83 -70
package/package.json
CHANGED
package/setup/SKILL.md
CHANGED
|
@@ -91,20 +91,73 @@ Ask the user for each platform they want to use:
|
|
|
91
91
|
|
|
92
92
|
### Step 4: Configure content
|
|
93
93
|
|
|
94
|
-
|
|
94
|
+
This step is the most important one. Take your time. The quality of every future post depends on it.
|
|
95
95
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
**4a. Subreddits**
|
|
99
|
+
|
|
100
|
+
Ask: "Which subreddits do you want to post in? (comma-separated, or press enter for defaults)"
|
|
101
|
+
|
|
102
|
+
Default suggestion: `ClaudeAI, ClaudeCode, programming, webdev, devops`
|
|
103
|
+
|
|
104
|
+
Write the list to `config.json` under `subreddits`.
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
**4b. Content angle — interview the user**
|
|
109
|
+
|
|
110
|
+
Don't just ask for a one-liner. Run a short interview to understand who they are, then write the angle for them.
|
|
111
|
+
|
|
112
|
+
Ask these questions one at a time. Wait for each answer before asking the next.
|
|
113
|
+
|
|
114
|
+
**Question 1:** "What are you currently working on or building? Be specific — what does it actually do?"
|
|
115
|
+
|
|
116
|
+
**Question 2:** "What's your technical background? What languages, tools, or domains do you know well?"
|
|
117
|
+
|
|
118
|
+
**Question 3:** "What's something you've learned recently from your work that most people in your field don't know yet — or that surprised you?"
|
|
119
|
+
|
|
120
|
+
**Question 4:** "What's a recurring frustration or problem you've run into that you think others in your community also face?"
|
|
121
|
+
|
|
122
|
+
**Question 5:** "Do you have any unusual setup or workflow? (e.g. running multiple AI agents, building on niche platforms, working solo on something usually done by teams)"
|
|
123
|
+
|
|
124
|
+
After collecting all answers, synthesize them into a `content_angle` that:
|
|
125
|
+
- Is 2-4 sentences
|
|
126
|
+
- Is written in first person
|
|
127
|
+
- Names specific tools, numbers, and experiences (not generic claims)
|
|
128
|
+
- Captures what makes their perspective genuinely different from a typical developer
|
|
129
|
+
|
|
130
|
+
Show the draft to the user:
|
|
131
|
+
> "Here's the content angle I'll use to write comments in your voice:
|
|
132
|
+
> [DRAFT]
|
|
133
|
+
> Does this sound like you? Want to change anything?"
|
|
134
|
+
|
|
135
|
+
Refine based on their feedback. Only save to `config.json` when they confirm it.
|
|
136
|
+
|
|
137
|
+
**Example of a weak angle** (don't write like this):
|
|
138
|
+
> "Software developer with experience in AI and web development."
|
|
139
|
+
|
|
140
|
+
**Example of a strong angle** (aim for this):
|
|
141
|
+
> "Building a macOS desktop AI agent that controls the browser and writes code via voice. Running 5 Claude agents in parallel on the same codebase — learned the hard way that they need zero file overlap or everything breaks. API costs hit $800/month before I got aggressive about caching."
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
**4c. Projects**
|
|
146
|
+
|
|
147
|
+
Ask: "Do you have any open source projects or products you'd want to mention naturally when the topic comes up? (y/n)"
|
|
148
|
+
|
|
149
|
+
If yes, for each project run through:
|
|
150
|
+
- "What's the name?"
|
|
151
|
+
- "One sentence: what does it do?"
|
|
152
|
+
- "Website URL? (or leave blank)"
|
|
153
|
+
- "GitHub URL? (or leave blank)"
|
|
154
|
+
- "What topics or keywords would make it relevant to mention? (e.g. 'desktop automation, macOS, accessibility APIs')"
|
|
155
|
+
|
|
156
|
+
After each project, ask: "Any more projects to add? (y/n)"
|
|
99
157
|
|
|
100
|
-
|
|
101
|
-
- "Describe your unique experience/perspective in 1-2 sentences. This helps the agent write authentic comments from your point of view."
|
|
102
|
-
- Example: "Building a macOS desktop AI agent. Experience with Swift, Claude API, and browser automation."
|
|
158
|
+
Store each under `config.json` → `projects` array with fields: `name`, `description`, `website`, `github`, `topics` (array of strings).
|
|
103
159
|
|
|
104
|
-
|
|
105
|
-
- "Do you have open source projects or products to mention when relevant? (y/n)"
|
|
106
|
-
- If yes, for each project ask: name, description, website URL, GitHub URL, topic keywords
|
|
107
|
-
- Store in `config.json` under `projects` array
|
|
160
|
+
The `topics` keywords are what trigger natural mentions — when someone in a thread mentions one of these topics, the agent knows this project is relevant to bring up.
|
|
108
161
|
|
|
109
162
|
### Step 5: Verify browser logins
|
|
110
163
|
|
package/skill/SKILL.md
CHANGED
|
@@ -18,36 +18,37 @@ Automates finding, posting, and tracking social media comments and original post
|
|
|
18
18
|
| `/social-autoposter engage` | Scan and reply to responses on our posts |
|
|
19
19
|
| `/social-autoposter audit` | Full browser audit of all posts |
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
---
|
|
22
22
|
|
|
23
|
-
|
|
24
|
-
- **X/Twitter**: @m13v_
|
|
25
|
-
- **LinkedIn**: Matthew Diakonov
|
|
26
|
-
- **Moltbook**: matthew-autoposter (API key in `~/social-autoposter/.env`)
|
|
23
|
+
## FIRST: Read config
|
|
27
24
|
|
|
28
|
-
|
|
25
|
+
Before doing anything, read `~/social-autoposter/config.json`. Everything — accounts, projects, subreddits, content angle — comes from there.
|
|
29
26
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
| Terminator | Desktop automation framework | https://t8r.tech | https://github.com/mediar-ai/terminator |
|
|
34
|
-
| macOS MCP | MCP server for macOS automation | — | https://github.com/mediar-ai/mcp-server-macos-use |
|
|
35
|
-
| Vipassana | Resource site for meditators | https://vipassana.cool | https://github.com/m13v/vipassana-cool |
|
|
36
|
-
| S4L | Social media autoposter (this tool) | https://s4l.ai | https://github.com/m13v/social-autoposter |
|
|
27
|
+
```bash
|
|
28
|
+
cat ~/social-autoposter/config.json
|
|
29
|
+
```
|
|
37
30
|
|
|
38
|
-
|
|
31
|
+
Key fields you'll use throughout every workflow:
|
|
39
32
|
|
|
40
|
-
|
|
33
|
+
- `accounts.reddit.username` — Reddit handle to post as
|
|
34
|
+
- `accounts.twitter.handle` — X/Twitter handle
|
|
35
|
+
- `accounts.linkedin.name` — LinkedIn display name
|
|
36
|
+
- `accounts.moltbook.username` — Moltbook username
|
|
37
|
+
- `subreddits` — list of subreddits to monitor and post in
|
|
38
|
+
- `content_angle` — the user's unique perspective for writing authentic comments
|
|
39
|
+
- `projects` — products/repos to mention naturally when relevant (each has `name`, `description`, `website`, `github`, `topics`)
|
|
40
|
+
- `database` — path to SQLite DB (default: `~/social-autoposter/social_posts.db`)
|
|
41
41
|
|
|
42
|
-
|
|
43
|
-
|
|
42
|
+
Use these values everywhere below instead of any hardcoded names or links.
|
|
43
|
+
|
|
44
|
+
---
|
|
44
45
|
|
|
45
46
|
## Helper Scripts
|
|
46
47
|
|
|
47
48
|
Standalone Python scripts — no LLM needed.
|
|
48
49
|
|
|
49
50
|
```bash
|
|
50
|
-
python3 ~/social-autoposter/scripts/find_threads.py --
|
|
51
|
+
python3 ~/social-autoposter/scripts/find_threads.py --include-moltbook
|
|
51
52
|
python3 ~/social-autoposter/scripts/scan_replies.py
|
|
52
53
|
python3 ~/social-autoposter/scripts/update_stats.py --quiet
|
|
53
54
|
```
|
|
@@ -71,30 +72,42 @@ python3 ~/social-autoposter/scripts/find_threads.py --include-moltbook
|
|
|
71
72
|
```
|
|
72
73
|
|
|
73
74
|
**Option B — Browse manually:**
|
|
74
|
-
Browse `/new` and `/hot` on
|
|
75
|
-
Also check Moltbook via API.
|
|
75
|
+
Browse `/new` and `/hot` on the subreddits from `config.json`. Also check Moltbook via API.
|
|
76
76
|
|
|
77
77
|
### 3. Pick the best thread
|
|
78
78
|
|
|
79
|
-
-
|
|
79
|
+
- You have a genuine angle from `content_angle` in config.json
|
|
80
80
|
- Not already posted in: `SELECT thread_url FROM posts`
|
|
81
|
-
- Last 5 comments don't repeat
|
|
82
|
-
|
|
81
|
+
- Last 5 comments don't repeat the same talking points:
|
|
82
|
+
```sql
|
|
83
|
+
SELECT our_content FROM posts ORDER BY id DESC LIMIT 5
|
|
84
|
+
```
|
|
85
|
+
- If nothing fits naturally, **stop**. Better to skip than force a bad comment.
|
|
83
86
|
|
|
84
87
|
### 4. Read the thread + top comments
|
|
85
88
|
|
|
86
|
-
Check tone, length cues, thread age. Find best comment to reply to (
|
|
89
|
+
Check tone, length cues, thread age. Find best comment to reply to (high-upvote comments get more visibility).
|
|
87
90
|
|
|
88
91
|
### 5. Draft the comment
|
|
89
92
|
|
|
90
|
-
Follow Content Rules below. 2-3 sentences, first person, specific
|
|
93
|
+
Follow Content Rules below. 2-3 sentences, first person, specific details from `content_angle`. No product links in top-level comments.
|
|
91
94
|
|
|
92
95
|
### 6. Post it
|
|
93
96
|
|
|
94
|
-
**Reddit
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
97
|
+
**Reddit** (browser automation):
|
|
98
|
+
- Navigate to `old.reddit.com` thread URL
|
|
99
|
+
- Reply box → type comment → submit → wait 2-3s → verify comment appeared → capture permalink → close tab
|
|
100
|
+
- Post as the username in `config.json → accounts.reddit.username`
|
|
101
|
+
|
|
102
|
+
**X/Twitter** (browser automation):
|
|
103
|
+
- Navigate to tweet → reply box → type → Reply → verify → capture URL
|
|
104
|
+
- Post as the handle in `config.json → accounts.twitter.handle`
|
|
105
|
+
|
|
106
|
+
**LinkedIn** (browser automation):
|
|
107
|
+
- Navigate to post → comment box → type → Post → close tab
|
|
108
|
+
- Post as the name in `config.json → accounts.linkedin.name`
|
|
109
|
+
|
|
110
|
+
**Moltbook** (API — no browser needed):
|
|
98
111
|
```bash
|
|
99
112
|
source ~/social-autoposter/.env
|
|
100
113
|
curl -s -X POST -H "Authorization: Bearer $MOLTBOOK_API_KEY" -H "Content-Type: application/json" \
|
|
@@ -102,6 +115,7 @@ curl -s -X POST -H "Authorization: Bearer $MOLTBOOK_API_KEY" -H "Content-Type: a
|
|
|
102
115
|
"https://www.moltbook.com/api/v1/posts"
|
|
103
116
|
```
|
|
104
117
|
On Moltbook: write as agent ("my human" not "I"). Max 1 post per 30 min.
|
|
118
|
+
Verify: fetch post by UUID, check `verification_status` is `"verified"`.
|
|
105
119
|
|
|
106
120
|
### 7. Log + sync
|
|
107
121
|
|
|
@@ -112,7 +126,9 @@ INSERT INTO posts (platform, thread_url, thread_author, thread_author_handle,
|
|
|
112
126
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'active', datetime('now'));
|
|
113
127
|
```
|
|
114
128
|
|
|
115
|
-
|
|
129
|
+
Use the account value from `config.json` for `our_account`.
|
|
130
|
+
|
|
131
|
+
If `sync_script` is set in config.json, run it after logging.
|
|
116
132
|
|
|
117
133
|
---
|
|
118
134
|
|
|
@@ -122,9 +138,6 @@ Then sync: `bash ~/social-autoposter/syncfield.sh`
|
|
|
122
138
|
|
|
123
139
|
### 1. Rate limit check
|
|
124
140
|
|
|
125
|
-
```sql
|
|
126
|
-
SELECT COUNT(*) FROM posts WHERE posted_at >= datetime('now', '-24 hours') AND thread_author = 'Deep_Ad1959';
|
|
127
|
-
```
|
|
128
141
|
Max 1 original post per 24 hours. Max 3 per week.
|
|
129
142
|
|
|
130
143
|
### 2. Cross-posting check
|
|
@@ -134,32 +147,25 @@ SELECT platform, thread_title, posted_at FROM posts
|
|
|
134
147
|
WHERE source_summary LIKE '%' || ? || '%' AND posted_at >= datetime('now', '-30 days')
|
|
135
148
|
ORDER BY posted_at DESC;
|
|
136
149
|
```
|
|
137
|
-
**NEVER post the same or similar content to multiple subreddits.** This is the #1 AI detection red flag. Each post must be unique to its community. If you posted about vipassana in r/vipassana this week, do NOT post about vipassana in r/meditation or r/streamentry.
|
|
138
150
|
|
|
139
|
-
|
|
151
|
+
**NEVER post the same or similar content to multiple subreddits.** This is the #1 AI detection red flag. Each post must be unique to its community.
|
|
140
152
|
|
|
141
|
-
|
|
153
|
+
### 3. Pick one target community
|
|
142
154
|
|
|
143
|
-
|
|
144
|
-
|-----------|------|------------|
|
|
145
|
-
| r/vipassana | Earnest, practical | Course experiences, daily practice struggles, specific technique questions |
|
|
146
|
-
| r/meditation | Casual, broad | General insights, beginner-friendly, "what worked for me" |
|
|
147
|
-
| r/streamentry | Technical, experienced | Practice milestones, specific meditation phenomena, dharma discussion |
|
|
148
|
-
| r/TheMindIlluminated | Structured, stage-based | TMI stage references, attention/awareness balance |
|
|
149
|
-
| r/ClaudeAI, r/ClaudeCode | Dev-casual, memes OK | Tool tips, workflow hacks, cost/rate-limit gripes |
|
|
155
|
+
Choose the single best subreddit from `config.json → subreddits` for this topic. Tailor the post to that community's culture and tone.
|
|
150
156
|
|
|
151
157
|
### 4. Draft the post
|
|
152
158
|
|
|
153
159
|
**Anti-AI-detection checklist** (must pass ALL before posting):
|
|
154
160
|
|
|
155
161
|
- [ ] No em dashes (—). Use regular dashes (-) or commas instead
|
|
156
|
-
- [ ] No markdown headers (##) or bold (**) in Reddit posts
|
|
157
|
-
- [ ] No numbered/bulleted lists — write in paragraphs
|
|
162
|
+
- [ ] No markdown headers (##) or bold (**) in Reddit posts
|
|
163
|
+
- [ ] No numbered/bulleted lists — write in paragraphs
|
|
158
164
|
- [ ] No "Hi everyone" or "Hey r/subreddit" openings
|
|
159
|
-
- [ ] Title doesn't use clickbait patterns ("What I wish I'd known", "
|
|
160
|
-
- [ ] Contains at least one imperfection: incomplete thought, casual aside,
|
|
165
|
+
- [ ] Title doesn't use clickbait patterns ("What I wish I'd known", "A guide to")
|
|
166
|
+
- [ ] Contains at least one imperfection: incomplete thought, casual aside, informality
|
|
161
167
|
- [ ] Reads like a real person writing on their phone, not an essay
|
|
162
|
-
- [ ] Does NOT link to
|
|
168
|
+
- [ ] Does NOT link to any project in the post body — earn attention first
|
|
163
169
|
- [ ] Not too long — 2-4 short paragraphs max for Reddit
|
|
164
170
|
|
|
165
171
|
**Read it out loud.** If it sounds like a blog post or a ChatGPT response, rewrite it.
|
|
@@ -174,10 +180,10 @@ Choose the single best subreddit for this topic. Tailor the post to that communi
|
|
|
174
180
|
INSERT INTO posts (platform, thread_url, thread_author, thread_author_handle,
|
|
175
181
|
thread_title, thread_content, our_url, our_content, our_account,
|
|
176
182
|
source_summary, status, posted_at)
|
|
177
|
-
VALUES (?, ?,
|
|
183
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'active', datetime('now'));
|
|
178
184
|
```
|
|
179
185
|
|
|
180
|
-
For original posts: `thread_url` = `our_url
|
|
186
|
+
For original posts: `thread_url` = `our_url`, `thread_author` = our account from config.json.
|
|
181
187
|
|
|
182
188
|
### 7. Mandatory engagement plan
|
|
183
189
|
|
|
@@ -185,7 +191,7 @@ After posting, you MUST:
|
|
|
185
191
|
- Check for comments within 2-4 hours
|
|
186
192
|
- Reply to every substantive comment within 24 hours
|
|
187
193
|
- Replies should be casual, conversational, expand the topic — NOT polished paragraphs
|
|
188
|
-
- If someone accuses the post of being AI: respond genuinely,
|
|
194
|
+
- If someone accuses the post of being AI: respond genuinely, mention a specific personal detail
|
|
189
195
|
|
|
190
196
|
---
|
|
191
197
|
|
|
@@ -195,8 +201,6 @@ After posting, you MUST:
|
|
|
195
201
|
python3 ~/social-autoposter/scripts/update_stats.py
|
|
196
202
|
```
|
|
197
203
|
|
|
198
|
-
Or the legacy bash version: `bash ~/social-autoposter/skill/stats.sh`
|
|
199
|
-
|
|
200
204
|
---
|
|
201
205
|
|
|
202
206
|
## Workflow: Engage (`/social-autoposter engage`)
|
|
@@ -208,21 +212,30 @@ python3 ~/social-autoposter/scripts/scan_replies.py
|
|
|
208
212
|
|
|
209
213
|
### Phase B: Respond to pending replies
|
|
210
214
|
|
|
211
|
-
|
|
215
|
+
```sql
|
|
216
|
+
SELECT r.id, r.platform, r.their_author, r.their_content, r.their_comment_url,
|
|
217
|
+
r.depth, p.thread_title, p.our_content
|
|
218
|
+
FROM replies r JOIN posts p ON r.post_id = p.id
|
|
219
|
+
WHERE r.status='pending' ORDER BY r.discovered_at ASC LIMIT 10
|
|
220
|
+
```
|
|
212
221
|
|
|
213
|
-
Draft replies: 2-4 sentences, casual, expand the topic. Apply Tiered Reply Strategy.
|
|
222
|
+
Draft replies: 2-4 sentences, casual, expand the topic. Apply Tiered Reply Strategy. Max 5 replies per run.
|
|
214
223
|
|
|
215
|
-
Post via browser (Reddit) or API (Moltbook). Update:
|
|
224
|
+
Post via browser (Reddit/X) or API (Moltbook). Update:
|
|
225
|
+
```sql
|
|
226
|
+
UPDATE replies SET status='replied', our_reply_content=?, our_reply_url=?,
|
|
227
|
+
replied_at=datetime('now') WHERE id=?
|
|
228
|
+
```
|
|
216
229
|
|
|
217
230
|
### Phase C: X/Twitter replies (browser required)
|
|
218
231
|
|
|
219
|
-
Navigate to `https://x.com/notifications/mentions`.
|
|
232
|
+
Navigate to `https://x.com/notifications/mentions`. Find replies to the handle in config.json. Respond to substantive ones (max 5). Log to `replies` table.
|
|
220
233
|
|
|
221
234
|
---
|
|
222
235
|
|
|
223
236
|
## Workflow: Audit (`/social-autoposter audit`)
|
|
224
237
|
|
|
225
|
-
Visit each post URL via browser. Check status (active/deleted/removed/inactive). Update engagement metrics.
|
|
238
|
+
Visit each post URL via browser. Check status (active/deleted/removed/inactive). Update engagement metrics. Report summary.
|
|
226
239
|
|
|
227
240
|
---
|
|
228
241
|
|
|
@@ -231,9 +244,9 @@ Visit each post URL via browser. Check status (active/deleted/removed/inactive).
|
|
|
231
244
|
### Tone & Voice
|
|
232
245
|
|
|
233
246
|
1. **Write like you're texting a coworker.** Lowercase fine. Sentence fragments fine. Never start with "Makes sense" or "The nuance here is." If it sounds like a blog post, rewrite it.
|
|
234
|
-
2. **First person, specific.**
|
|
247
|
+
2. **First person, specific.** Use concrete details from `content_angle` in config.json. Real numbers, real experiences, not generalizations.
|
|
235
248
|
3. **Reply to top comments, not just OP.**
|
|
236
|
-
4. **Only comment when
|
|
249
|
+
4. **Only comment when there's a genuine angle from the user's work.** Use `content_angle` from config.json. If the thread doesn't connect, skip it.
|
|
237
250
|
5. **No product links in top-level comments or original posts.** Earn attention first. Only link in deeper replies when someone asks.
|
|
238
251
|
6. **On Moltbook, write as an agent.** "my human" not "I".
|
|
239
252
|
7. **Log everything.**
|
|
@@ -241,16 +254,16 @@ Visit each post URL via browser. Check status (active/deleted/removed/inactive).
|
|
|
241
254
|
### Anti-AI-Detection (applies to ALL content)
|
|
242
255
|
|
|
243
256
|
8. **No em dashes (—).** Use commas, periods, or regular dashes (-) instead. Em dashes are the #1 "ChatGPT tell."
|
|
244
|
-
9. **No markdown formatting in Reddit.** No headers (##), no bold (**text**), no numbered lists. Write in plain paragraphs.
|
|
245
|
-
10. **Never cross-post.** One post per topic per community.
|
|
257
|
+
9. **No markdown formatting in Reddit.** No headers (##), no bold (**text**), no numbered lists. Write in plain paragraphs.
|
|
258
|
+
10. **Never cross-post.** One post per topic per community.
|
|
246
259
|
11. **Space posts out.** Max 1 original post per day, max 3 per week. Don't spam.
|
|
247
|
-
12. **Include imperfections.** Contractions, sentence fragments, casual asides, occasional lowercase.
|
|
248
|
-
13. **Vary your openings.** Don't always start with credentials
|
|
260
|
+
12. **Include imperfections.** Contractions, sentence fragments, casual asides, occasional lowercase.
|
|
261
|
+
13. **Vary your openings.** Don't always start with credentials. Sometimes just jump into the topic.
|
|
249
262
|
14. **Reply to comments on your posts.** Zero engagement on your own post = bot signal. Reply within 24h.
|
|
250
263
|
|
|
251
264
|
### Bad vs Good (Comments)
|
|
252
265
|
|
|
253
|
-
BAD: "Makes sense — Claude already tries to
|
|
266
|
+
BAD: "Makes sense — Claude already tries to tail the output on its own but by then the tokens are already in context."
|
|
254
267
|
GOOD: "gonna try this, I run 5 agents in parallel and my API bill is becoming a second rent payment"
|
|
255
268
|
|
|
256
269
|
BAD: "What everyone here is describing is basically specification-driven development."
|
|
@@ -259,10 +272,10 @@ GOOD: "I spend more time writing CLAUDE.md specs than I ever spent writing code.
|
|
|
259
272
|
### Bad vs Good (Original Posts)
|
|
260
273
|
|
|
261
274
|
BAD title: "What I Wish I'd Known Before My First Vipassana Retreat: A Complete Guide"
|
|
262
|
-
GOOD title: "just did my 7th
|
|
275
|
+
GOOD title: "just did my 7th course, some things that surprised me"
|
|
263
276
|
|
|
264
|
-
BAD body:
|
|
265
|
-
GOOD body:
|
|
277
|
+
BAD body: Structured with headers, bold, numbered lists, "As a tech founder..."
|
|
278
|
+
GOOD body: Paragraphs, incomplete thoughts, personal details, casual tone, ends with a genuine question
|
|
266
279
|
|
|
267
280
|
---
|
|
268
281
|
|
|
@@ -270,9 +283,9 @@ GOOD body: "got back from dhamma mahavana last week. 7th course total. every tim
|
|
|
270
283
|
|
|
271
284
|
**Tier 1 — Default (no link):** Genuine engagement. Expand topic, ask follow-ups. Most replies.
|
|
272
285
|
|
|
273
|
-
**Tier 2 — Natural mention:** Conversation touches
|
|
286
|
+
**Tier 2 — Natural mention:** Conversation touches a topic matching one of the user's projects (from `config.json → projects[].topics`). Mention casually, link only if it adds value. Triggers: "what tool do you use", problem matches a project topic, 2+ replies deep.
|
|
274
287
|
|
|
275
|
-
**Tier 3 — Direct ask:** They ask for link/try/source. Give it immediately.
|
|
288
|
+
**Tier 3 — Direct ask:** They ask for link/try/source. Give it immediately using `projects[].website` or `projects[].github` from config.json.
|
|
276
289
|
|
|
277
290
|
---
|
|
278
291
|
|