.agents/skills/forbotsake-content-plan/SKILL.md
Turns your marketing strategy into an executable content calendar. Reads strategy.md, asks about your capacity (hours/week), then produces content-calendar.md with weekly themes, channel-specific content types, cadence, and format templates for 4 weeks. Use when: "content calendar", "what should I post", "content plan", "how often should I post", "weekly content", "marketing calendar", "what to write", "content cadence". Proactively invoke when the user has a strategy.md and asks about what content to create or how to organize their marketing output.
npx skillsauth add forbotsake/forbotsake forbotsake-content-planInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
From strategy to a 4-week content calendar you can actually execute on.
FORBOTSAKE_HOME="${FORBOTSAKE_HOME:-$HOME/.forbotsake}"
mkdir -p "$FORBOTSAKE_HOME"
# Discover forbotsake install directory
_FBS_ROOT=""
for _FBS_CANDIDATE in "$HOME/.codex/skills/forbotsake" "$HOME/.agents/skills/forbotsake"; do
[ -d "$_FBS_CANDIDATE" ] && _FBS_ROOT="$_FBS_CANDIDATE" && break
done
if [ -z "$_FBS_ROOT" ]; then
echo "WARNING: forbotsake not found. Install: bash <(curl -fsSL https://raw.githubusercontent.com/forbotsake/forbotsake/main/bin/install.sh)"
fi
# Check for updates
_UPD=""
[ -n "$_FBS_ROOT" ] && [ -x "$_FBS_ROOT/bin/forbotsake-update-check" ] && _UPD=$("$_FBS_ROOT/bin/forbotsake-update-check" 2>/dev/null || true)
[ -n "$_UPD" ] && echo "$_UPD" || true
_BRANCH=$(git branch --show-current 2>/dev/null || echo "unknown")
echo "BRANCH: $_BRANCH"
# Check for strategy.md
if [ -f strategy.md ]; then
echo "STRATEGY_EXISTS: yes"
head -20 strategy.md
elif [ -f forbotsake-strategy.md ]; then
echo "STRATEGY_EXISTS: yes"
echo "STRATEGY_FILE: forbotsake-strategy.md"
head -20 forbotsake-strategy.md
else
echo "STRATEGY_EXISTS: no"
fi
# Check for existing content-calendar.md
if [ -f content-calendar.md ]; then
echo "EXISTING_CALENDAR: yes"
head -5 content-calendar.md
else
echo "EXISTING_CALENDAR: no"
fi
# Check for session resume file
_SESSION_FILE="$FORBOTSAKE_HOME/session-content-plan-$(basename "$(git rev-parse --show-toplevel 2>/dev/null || pwd)").json"
if [ -f "$_SESSION_FILE" ]; then
echo "RESUME_AVAILABLE: yes"
echo "SESSION_FILE: $_SESSION_FILE"
else
echo "RESUME_AVAILABLE: no"
fi
If output shows UPGRADE_AVAILABLE <old> <new>: read the forbotsake-upgrade SKILL.md
at $_FBS_ROOT/forbotsake-upgrade/SKILL.md (where _FBS_ROOT is the variable already
resolved in the preamble bash above) and follow the "Inline upgrade flow" section Step 1
only. If Step 1 results in "Yes" or "Always" (proceed with upgrade), continue through
Steps 2-7 of the inline flow. If Step 1 results in "Not now" or "Never" (declined),
skip Steps 2-7 entirely and continue with this skill immediately.
If output shows JUST_UPGRADED <old> <new>: tell user
"Running forbotsake v{new} (just updated from v{old})!" and continue.
If STRATEGY_EXISTS is no:
"No strategy.md found. You need a strategy before building a content calendar. Run
/forbotsake-marketing-startfirst to define your positioning, ICP, and channels."
Stop here. Do NOT proceed without a strategy.
If EXISTING_CALENDAR is yes, check frontmatter for generated_by: forbotsake.
Ask the user directly in conversation. Do NOT overwrite without asking.
If RESUME_AVAILABLE is yes: "Found a previous session in progress. Resume where you left off?"
Ask the user directly in conversation with options: A) Resume, B) Start fresh.
Read strategy.md (or forbotsake-strategy.md) completely. Extract and internalize:
Present a summary back to the user:
"From your strategy, I see:
- ICP: {person description}
- Top channels: {channel 1} (score {X}), {channel 2} (score {Y})
- Messaging pillars: {pillar 1}, {pillar 2}, {pillar 3}
- Planned experiment: {first experiment description}
I'll build your calendar around these. First, I need to know your capacity."
Ask via direct conversation with the user:
"How many hours per week can you realistically spend on marketing content? Be honest -- overcommitting leads to burnout and abandoned calendars.
A) 1-2 hours/week (minimal: 1 channel, 2-3 pieces/week) B) 3-5 hours/week (moderate: 1-2 channels, 4-6 pieces/week) C) 6-10 hours/week (serious: 2-3 channels, 7-10 pieces/week) D) 10+ hours/week (full commitment: 3+ channels, daily content) E) Custom -- tell me your exact number"
Session save after answer:
echo '{"phase": "capacity", "answer": "USER_ANSWER"}' >> "$_SESSION_FILE"
Map capacity to a cadence tier:
| Tier | Hours | Channels | Pieces/week | Content types | |------|-------|----------|-------------|---------------| | Minimal | 1-2 | 1 | 2-3 | Short-form only (tweets, short posts) | | Moderate | 3-5 | 1-2 | 4-6 | Short-form + 1 long-form | | Serious | 6-10 | 2-3 | 7-10 | Short-form + long-form + email | | Full | 10+ | 3+ | 10+ | All formats |
Follow-up question via direct conversation with the user:
"Any content types you absolutely want to include or exclude? For example: 'I love writing threads but hate video' or 'I want to try a newsletter.'
If no preference, just say 'no preference' and I'll optimize for your channels."
Session save after answer:
echo '{"phase": "content_prefs", "answer": "USER_ANSWER"}' >> "$_SESSION_FILE"
Read knowledge frameworks first:
_SKILL_DIR=$(dirname "$(find $HOME/.codex/skills -path "*/forbotsake-content-plan/SKILL.md" -type f 2>/dev/null | head -1)")
echo "SKILL_DIR: $_SKILL_DIR"
Read $_SKILL_DIR/../knowledge/frameworks/channel-selection.md if it exists, for channel-specific content format guidance.
Build the calendar by:
Select channels from strategy.md, filtered by capacity tier. If capacity is minimal, use only the #1 channel. If moderate, top 2. And so on.
Assign weekly themes derived from the 3 messaging pillars. Rotate pillars across weeks:
Map content types to channels using channel norms:
Set cadence per channel respecting capacity constraints. Always leave 20% buffer -- if someone says 5 hours, plan for 4 hours of content.
Flag high-value targets for /forbotsake-sharpen: While building the calendar, identify any content slots that involve a specific person or organization (e.g., "X thread mentioning @garrytan about gstack", "PR to gstack repo", "outreach to community leader"). For the top 1-2 highest-value targets, add a note in the calendar:
"🎯 High-value target — run
/forbotsake-sharpenbefore creating this content. Sharpen will research [target], map your connections, and produce a multi-touch execution plan so this content is part of a coordinated approach, not a one-off."
A target qualifies for flagging only if (a) the content slot is specifically about engaging that person/org, not just mentioning them, and (b) the desired outcome requires a response from them (not just awareness). Don't flag every proper noun.
Create format templates for each content type in the calendar. These are structural templates, not content:
Example thread template:
Tweet 1: Hook -- surprising claim or question related to {pillar}
Tweet 2: Context -- why this matters to {ICP}
Tweet 3-5: The insight/walkthrough/proof
Tweet 6: CTA -- what to do next
Write content-calendar.md to the project root with this schema:
---
schema_version: 1
generated_by: forbotsake
generated_at: {ISO timestamp}
capacity_hours_per_week: {number}
capacity_tier: {minimal|moderate|serious|full}
channels: [{channel1}, {channel2}]
---
# Content Calendar: {product name}
Generated by /forbotsake-content-plan on {date}
Strategy source: strategy.md
Status: ACTIVE
## Capacity
- **Hours/week:** {capacity}
- **Tier:** {tier}
- **Active channels:** {channels}
- **Buffer:** 20% of capacity reserved for engagement and ad-hoc
## Content Types by Channel
### {Channel 1}
| Type | Format | Time to create | Cadence |
|------|--------|---------------|---------|
{content types for this channel}
### {Channel 2}
(repeat as needed)
## Week 1: {Theme from Pillar 1}
**Focus:** {messaging pillar 1 description}
| Day | Channel | Type | Topic idea | Visual | Est. time |
|-----|---------|------|-----------|--------|-----------|
{specific content slots for the week, with visual treatment recommendation}
**Visual column guidelines:**
- `none` for hot takes, HN posts, Reddit comments, quick replies
- `text-card` for stat highlights, quote cards, key takeaways
- `ai-image` for launch posts, storytelling, blog headers, Product Hunt
- `video` for product demos, launch teasers, explainer shorts
- Default by channel: X thread → `ai-image` (hero), LinkedIn → `ai-image`, Blog → `ai-image`, Email → `none`, HN/Reddit → `none`
**Week 1 total:** {estimated hours}
## Week 2: {Theme from Pillar 2}
{same structure}
## Week 3: {Theme from Pillar 3}
{same structure}
## Week 4: Community & Engagement
**Focus:** Respond, remix, and amplify. Engage with replies, share user stories, remix top-performing content from weeks 1-3.
{same structure, with engagement-focused content}
## Format Templates
### {Content Type 1}: {Channel}
{structural template with placeholders}
### {Content Type 2}: {Channel}
{structural template with placeholders}
(one template per content type used in the calendar)
## Metrics to Track
| Channel | Metric | Tool | Check frequency |
|---------|--------|------|----------------|
{metrics per channel -- engagement rate, clicks, replies, signups, etc.}
## Monthly Review Prompts
After 4 weeks, answer these:
1. Which content type got the most engagement?
2. Which channel drove actual signups/conversions (not just views)?
3. What took longer than expected to create?
4. What should you double down on? What should you drop?
After writing content-calendar.md, read it back and check:
If any check fails, fix it and tell the user what you adjusted.
Tell the user:
"Your content-calendar.md is ready. 4 weeks of content planned for {channels}.
What's in it:
- {N} content pieces per week across {M} channel(s)
- Weekly themes rotating through your messaging pillars
- Format templates for each content type
- Estimated {X} hours/week (within your {Y} hour budget)
Next step:
/forbotsake-createto write your first piece of content. Start with Week 1, Day 1 -- the calendar tells you exactly what to make.Or if you want to challenge this plan first, run
/forbotsake-cmo-checkto stress-test your channel choices and cadence."
Remove the session file on successful completion:
rm -f "$_SESSION_FILE" 2>/dev/null
testing
Upgrade forbotsake to the latest version. Detects install type (git clone vs vendored), runs the upgrade, and shows what's new. Use when: "upgrade forbotsake", "update forbotsake", "get latest version", "forbotsake update".
research
Stage 3: RESEARCH (competitors). Analyzes 3-5 competitors to find messaging whitespace and positioning gaps. Produces competitor-analysis.md with a messaging matrix showing what each competitor says, what's missing, and where you can win. Use when: "competitor analysis", "competitive research", "what are others doing", "market landscape", "who am I competing with", "spy on competitors", "messaging whitespace", "differentiation research". Proactively invoke when the user mentions competitors or asks how to differentiate.
development
Stage 4.5: SHARPEN. Takes a specific outreach target (person or organization) and produces a deep execution plan with contextual research, relationship mapping, angle selection, and a multi-touch sequence. Reads your founder profile and strategy to leverage warm paths and unfair advantages. Use when: "refine this plan", "go deeper on this", "sharpen execution", "how do I approach [person]", "outreach to [person]", "target [person/org]", "approach [person]", "engage [org]". Proactively invoke when the user mentions approaching a specific person or organization as part of their marketing strategy. Requires: strategy.md (from /forbotsake-marketing-start).
data-ai
Stage 9: MEASURE. Reviews what you published, analyzes performance data, and produces a retro report with evidence-based recommendations. Tells you what to double down on, what to drop, and what to try next. Use when: "what worked", "marketing retro", "measure results", "review performance", "which content performed best", "should I keep doing this". Proactively invoke one week after /forbotsake-publish was last run.