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
Split content-ideas SKILL.md: extract Step 0 first-run setup to references/
Token-cache optimization. SKILL.md was 29.4KB; Step 0 (7 substeps for
install-path + slug + API key + brand-profile + competitor seeding) is
~7.5KB of bootstrap content that only fires on the first run per
project, not on the daily-feed common path.
New: references/first-run-setup.md — full 0a-0g flow.
SKILL.md: 29.4KB → 22.5KB. Saves ~7KB per daily-run fire after first
run.
Copy file name to clipboardExpand all lines: skills/content-ideas/SKILL.md
+2-166Lines changed: 2 additions & 166 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -155,173 +155,9 @@ themselves, so a relative `research/{today}` passed to them resolves here too.
155
155
156
156
**Run this before anything else, even if the user gave a topic.**
157
157
158
-
### 0a. First-ever install — choose where files live
158
+
This step has 7 substeps (0a–0g) covering: install-path choice, project-slug naming, existing-install detection, API-key collection, manual-config alternative, brand-profile bootstrap from the user's own channels, and competitor-tracker seeding.
159
159
160
-
If this is a **truly fresh install** — `~/.config/content/.env` doesn't
161
-
exist, no `<slug>.env` files exist in that dir, and `$CONTENT_IDEAS_HOME`
162
-
isn't set anywhere — ask the user where they'd like content-ideas to
163
-
store the brand profile, tracked accounts, and dated research history.
164
-
Otherwise skip this step (an existing install already picked a path).
165
-
166
-
Show a short note about why this matters, then `AskUserQuestion`:
167
-
168
-
> Before anything else: where should content-ideas store your files?
169
-
> Brand profile, tracked competitors, and the daily research/feed
170
-
> outputs live here. Pick somewhere durable — this is the home for
171
-
> everything the skill writes, across all projects and all daily runs.
172
-
173
-
Offer these options:
174
-
-`~/Documents/Content/` (default, no decision needed)
175
-
-`~/Content/` (top-of-home, shorter path)
176
-
-`~/.local/share/content-ideas/` (XDG-compliant, hidden by default)
177
-
- Other — paste a path (e.g. inside an Obsidian vault, iCloud Drive,
178
-
Dropbox; great for users who already have a "second-brain" tree)
179
-
180
-
Expand `~` and create the dir. Write `CONTENT_IDEAS_HOME=<absolute-path>`
181
-
to `~/.config/content/.env` (create the dir + file if missing). All
182
-
future invocations read this; `env.py:content_ideas_home()` is the
183
-
resolver.
184
-
185
-
This is the install-root. The skill always operates in multi-project mode
186
-
from here — even users who'll only ever have one project get a clean
187
-
`<install-root>/projects/<slug>/` layout that's trivial to extend later.
188
-
189
-
### 0b. Name the first project (slug)
190
-
191
-
After the path is chosen (or on any later invocation against an unknown
192
-
slug), prompt for the project slug. `AskUserQuestion`:
193
-
194
-
> What should we call this project? Pick a short slug — lowercase,
195
-
> dashes-not-spaces. This becomes the project identifier you'll pass
196
-
> as `/content-ideas <slug>` to invoke this feed specifically. For a
197
-
> "just one feed" install, pick whatever fits your brand/persona
198
-
> ("my-brand", "my-channel", etc.) — you can rename later by moving
-**Content Pillars** — the 3–5 themes their posts actually cluster into. These
291
-
drive `--pillars` on every future run, so get them right.
292
-
-**My Social Profiles** — handle, follower count, bio, and a one-line content-
293
-
style note per platform, taken from the scrape.
294
-
-**Target Platforms / Research Channels** — the platforms they're active on.
295
-
-**Search Terms** — concrete keywords from their top topics.
296
-
297
-
Two things you can't scrape — **ask** (`AskUserQuestion`), then fold the answers in:
298
-
-**Content Goal** — why they post (lead gen / awareness / growth / thought
299
-
leadership / selling…), where they drive traffic, and what they're promoting.
300
-
-**Pillar confirmation** — show the 3–5 pillars you inferred and let them
301
-
edit or confirm before writing.
302
-
303
-
Write `brand/profile.md` per the schema in `FILE-SCHEMAS.md`. If the scrape
304
-
returned enough of their own posts, also write an initial `brand/my-content.md`
305
-
(performance summary, what's working, topics covered, and audience requests
306
-
distilled from their comments) — this powers anti-cannibalization and the "your
307
-
audience is asking for" banner from day one.
308
-
309
-
**If they skipped** (or there's no API key yet to scrape with), don't block:
310
-
build a minimal `brand/profile.md` from a 2–3 question Q&A (niche, rough
311
-
pillars, goal), note that re-running setup with a key auto-enriches it, and move
312
-
on.
313
-
314
-
### 0g. Track competitors
315
-
316
-
Ask who they want to track (`AskUserQuestion`: list them now / skip and use an
317
-
example). If they list handles, create `brand/tracked-accounts/{platform}.md`
318
-
files per the schema in the plugin's `FILE-SCHEMAS.md`. If they skip, run a
319
-
small example so they see the shape, and tell them they can add real
320
-
competitors later.
321
-
322
-
**End of first-run setup.** Then continue with the user's original request.
323
-
324
-
---
160
+
Detection — if `~/.config/content/.env` exists AND `<slug>.env` exists for the resolved project AND `SETUP_COMPLETE=true`, skip Step 0 entirely and go to Step 1. Otherwise, **see `references/first-run-setup.md` for the full setup flow** (substeps 0a–0g + the `AskUserQuestion` prompts, slug-validation rules, and brand-profile scrape pattern).
0 commit comments