Claude
Skills
Sign in
Back

comp-scout-compose

Included with Lifetime
$97 forever

Generate authentic, memorable competition entries (25 words or less) and auto-persist to GitHub issue. Creates multiple variations with different arcs and tones.

General

What this skill does


# Competition Entry Composer

Generate authentic, memorable "25 words or less" competition entries and **automatically save to GitHub issue**.

## Execution Modes

| Mode | Behavior |
|------|----------|
| **Interactive** (default) | Ask for user context, stories, tone preferences |
| **Unattended** | Use saved stories or generic approach, no prompts |

The `comp-scout-daily` workflow always invokes this skill in **unattended mode**.

### Interactive Mode

When run interactively, this skill asks:
- "What genuine experience do you have with this brand/product?"
- "Any specific memory or story that relates to the prompt?"
- "Tone preference: funny, sincere, or mix?"

### Unattended Mode

When invoked with `--unattended` or by `comp-scout-daily`:
- Checks saved stories from CLAUDE.md for keyword matches
- Uses best-matching story, or generic approach if none match
- Generates 3-5 entries with varied arcs
- Auto-persists with recommendation highlighted
- No user prompts - runs end-to-end automatically

## What This Skill Does

1. Gathers user context to find authentic angles (interactive) or uses saved stories (unattended)
2. Generates 3-5 entry variations with different arcs
3. Rates and recommends the strongest entries
4. **Auto-persists entries as comment on GitHub issue**
5. **Adds `entry-drafted` label to the issue**

**No manual "please save entries" step required.**

## Input

- Strategy from `comp-scout-analyze` (recommended)
- OR competition details (prompt, word_limit, brand)
- User context (personal connection, preferences) - interactive mode
- **issue_number** (for auto-persist)

Optional flags:
- `--unattended` - Skip all interactive prompts, use saved stories or generic approach

## Workflow

### Step 0: Check for Matching Saved Stories

Before asking for new context, check if saved stories from the data repo match this competition.

1. Fetch saved stories from the data repo's CLAUDE.md:
```bash
gh api repos/$TARGET_REPO/contents/CLAUDE.md -H "Accept: application/vnd.github.raw" 2>/dev/null
```

2. Parse the Saved Stories section for story entries

3. For each story, calculate relevance by matching story keywords against:
   - Competition prompt
   - Brand/sponsor name
   - Prize description
   - Strategy themes (if available from comp-scout-analyze)

4. If matching stories found, present them:
```
I found saved stories that might work for this competition:

1. **Opa's German Christmas** (3 keyword matches: christmas, chocolate, family)
   Theme: Nostalgia, heritage, German traditions

2. **Teaching Daughter to Cook** (1 keyword match: kitchen)
   Theme: Family moments, passing on traditions

Would you like to use one of these, or provide new context?
```

5. If user selects a story, use its details for entry composition (skip Step 1)

6. If user provides new context AND it's rich enough to reuse, offer to save:
```
That's great context! Would you like me to save this as a story for future competitions?

Suggested name: "Sunday BBQ Traditions"
Themes: barbecue, summer, Australian lifestyle
Keywords: bbq, summer, meat, outdoor, gathering
```

To save a new story, update the data repo's CLAUDE.md with the new story entry.

### Step 1: Gather User Context

Before drafting, ask clarifying questions:

**Essential:**
- What genuine experience or connection do you have with this brand/product?
- Any specific memory or story that relates to the prompt?

**Helpful:**
- Tone preference: funny, sincere, or mix?
- Anyone you'd nominate instead of yourself? (partner, family member)
- Any personal details that might be relevant? (job, hobby, family situation)

**If user has no connection:**
- What's generally true for you that could relate?
- What would you actually do with this prize?
- What's the honest version of your situation?

### Step 2: Find the Authentic Hook

Generic entries lose. The goal is specificity that makes judges smile in recognition.

**Transformation examples:**

| Generic | Specific |
|---------|----------|
| "I love cooking" | "Sunday arvo freezer audit before the weekly shop" |
| "I want to relax" | "Like my shoulders have dropped from my ears" |
| "I like Japan" | "Horseback archery champs, bonsai masters, noodle competitions" |
| "I need ice" | "The person who forgot to refill the ice tray mid-barbecue" |
| "I love coffee" | "The only five minutes that's mine before school run chaos" |
| "I want to travel" | "We've done Japan at full speed. Time to walk it slowly." |

**Questions to surface hooks:**
- What's actually true for you?
- What's the embarrassing/honest version?
- What specific detail would make a judge smile in recognition?
- What do you already do that relates to this prize/brand?

### Step 3: Select Entry Arc Structure

Choose the arc that best fits the tone and content:

---

**Sincere Arc** (wellness, luxury, emotional prizes)

Structure:
1. Honest admission of current state
2. Aspiration or need
3. Warm landing

Example (wellness retreat):
> "My partner nurtures everyone else first. Always. Her mind, body, and soul have been running on empty. She's earned this."

---

**Comedic Arc** (setup → pivot → callback)

Structure:
1. Setup (unexpected angle or joke)
2. Pivot to genuine substance
3. Callback that recontextualises the setup

Example (solar panels):
> "Befriend a neighbour with a pool. Run the laundry while the sun shines. I can watch my panels work, while I float!"

---

**Self-Deprecating Arc** (relatable failure → redemption)

Structure:
1. Confession (the annual shame)
2. Constraint (why it persists)
3. Resolution (this fixes it)
4. Optional undercut (but there's always something else)

Example (ice maker):
> "Every summer barbecue I realise I'm the person who forgot to refill the ice tray, and I can't do a servo run mid-barbecue. Finally, I become the host who is prepared for everything—except an empty gas bottle."

---

**List → Pivot Arc** (travel, experience prizes)

Structure:
1. Quick list establishing credentials ("Done X, Y, Z")
2. Identify the gap ("But we've never...")
3. Land on the aspiration

Example (Japan walking tour):
> "Horseback archery world champs. World's best bonsai. Noodle-making competitions. We've done Japan at full speed. Time to finally walk it slowly."

---

**Sensory Arc** (food, beverage, experiential)

Structure:
1. Scene-setting
2. Vivid sensory detail
3. Emotional resonance

Example (early holiday memory):
> "Ulladulla at four. Dad handed me my first oyster. Too slimy to chew. Swallowed it whole like a little pelican."

---

### Step 4: Draft Multiple Versions

Generate 3-5 entries with different approaches:

For each entry, provide:
- The entry text
- Word count (must be ≤ word_limit)
- Arc type used
- Approach description
- Landing strength (1-5)
- Notes on why it works

### Step 5: Refine Based on Feedback

After user selects a direction:

**Tighten word economy:**
- Remove redundant words
- Combine phrases
- Use stronger single words instead of phrases

**Strengthen the landing:**
- Last line should resonate
- Consider callbacks to earlier elements
- Avoid trailing off

**Check rhythm:**
- Short sentences for punch
- Longer sentences for warmth
- Vary sentence length for flow

**Verify compliance:**
- Word count within limit
- Addresses the actual prompt
- Authentic to user's voice

### Step 6: Final Quality Check

Before delivering final entry:

- [ ] Meets word limit exactly or under
- [ ] Contains specific detail (not generic)
- [ ] Has clear structure/arc
- [ ] Landing line is strong
- [ ] Authentic to user's voice
- [ ] Appropriate tone for sponsor/audience
- [ ] No repeated words doing the same job
- [ ] No clichés or overused phrases
- [ ] Would make a judge smile or nod

### Step 7: Auto-Persist to GitHub Issue

Add entries as comment and add label:

```bash
# Add entry drafts as comment
gh issue comment $ISSUE_NUMBER -R "$TARGET_REPO" --body "$(cat <<'EOF'
## Entry Drafts

### Option 1 ({word_count} words) ⭐⭐⭐⭐⭐
> {entry_text}

Arc: {arc_type}
Notes: {not

Related in General