com um clique
comp-scout-compose
Generate authentic, memorable competition entries (25 words or less) and auto-persist to GitHub issue. Creates multiple variations with different arcs and tones.
Menu
Generate authentic, memorable competition entries (25 words or less) and auto-persist to GitHub issue. Creates multiple variations with different arcs and tones.
End-to-end automated daily competition workflow. Orchestrates scrape, analyze, compose, and notify skills - all unattended for cron execution.
Scrape competition websites, extract structured data, and auto-persist to GitHub issues. Creates issues for new competitions, adds comments for duplicates.
Generate strategic analysis for competition entries and auto-persist to GitHub issue. Identifies winning tone, themes, and angles based on sponsor type and brand voice.
[DEPRECATED] Persistence logic has been merged into comp-scout-scrape. This skill remains for reference only.
Send beautifully formatted HTML digest emails summarizing open competitions, their status, and strategy. Supports dark mode, closing soon highlights, and multiple recipients.
| name | comp-scout-compose |
| description | Generate authentic, memorable competition entries (25 words or less) and auto-persist to GitHub issue. Creates multiple variations with different arcs and tones. |
Generate authentic, memorable "25 words or less" competition entries and automatically save to GitHub issue.
| 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.
When run interactively, this skill asks:
When invoked with --unattended or by comp-scout-daily:
entry-drafted label to the issueNo manual "please save entries" step required.
comp-scout-analyze (recommended)Optional flags:
--unattended - Skip all interactive prompts, use saved stories or generic approachBefore asking for new context, check if saved stories from the data repo match this competition.
gh api repos/$TARGET_REPO/contents/CLAUDE.md -H "Accept: application/vnd.github.raw" 2>/dev/null
Parse the Saved Stories section for story entries
For each story, calculate relevance by matching story keywords against:
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?
If user selects a story, use its details for entry composition (skip Step 1)
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.
Before drafting, ask clarifying questions:
Essential:
Helpful:
If user has no connection:
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:
Choose the arc that best fits the tone and content:
Sincere Arc (wellness, luxury, emotional prizes)
Structure:
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:
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:
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:
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:
Example (early holiday memory):
"Ulladulla at four. Dad handed me my first oyster. Too slimy to chew. Swallowed it whole like a little pelican."
Generate 3-5 entries with different approaches:
For each entry, provide:
After user selects a direction:
Tighten word economy:
Strengthen the landing:
Check rhythm:
Verify compliance:
Before delivering final entry:
Add entries as comment and add label:
# 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: {notes}
### Option 2 ({word_count} words) ⭐⭐⭐⭐
> {entry_text}
Arc: {arc_type}
Notes: {notes}
### Option 3 ({word_count} words) ⭐⭐⭐
> {entry_text}
Arc: {arc_type}
Notes: {notes}
**Recommendation:** Option {n} - {reason}
---
*Generated: {date}*
EOF
)"
# Add label to indicate entries are drafted
gh issue edit $ISSUE_NUMBER -R "$TARGET_REPO" --add-label "entry-drafted"
✅ Entries saved to issue #42!
**3 entry options drafted:**
- Option 1 (24 words) ⭐⭐⭐⭐⭐ - Self-deprecating list
- Option 2 (25 words) ⭐⭐⭐⭐ - Confession
- Option 3 (23 words) ⭐⭐⭐ - Practical humour
**Recommendation:** Option 1
**Label added:** `entry-drafted`
(In interactive mode: "Which option do you want to submit?")
Tone:
Content:
Structure:
entries:
- text: "The actual entry text goes here, exactly as it should be submitted."
word_count: 24
arc_type: "self_deprecating"
approach: "Confession → resolution with self-aware undercut"
landing_strength: 4
notes: "Relatable summer hosting struggle, personality in the undercut"
- text: "Second variation with different approach..."
word_count: 23
arc_type: "sincere"
approach: "Problem → vivid consequence → hopeful resolution"
landing_strength: 5
notes: "Strongest landing, 'dignity melts' is memorable"
- text: "Third variation..."
word_count: 25
arc_type: "comedic_list"
approach: "Establish credentials → pivot to weakness"
landing_strength: 3
notes: "Solid structure but landing could be stronger"
recommendation: 1 # 0-indexed
recommendation_reason: "Best balance of specificity, personality, and strong landing"
issue_number: 42
persisted: true
User: Write entries for issue #42
Claude: I'll write entries for this competition.
[Reads issue #42]
Competition: Win a $500 Coles Gift Card
Prompt: "Tell us in 25 words or less what you'd buy"
First, a few questions to find your authentic angle:
1. What do you typically buy at Coles?
2. Any specific situation where $500 would help?
3. Tone preference: practical/sincere or humorous?
User: We do our weekly shop there. Always buying for the kids. Would love to
just buy nice things for once instead of bulk snacks and school lunch stuff.
Claude: That's a great angle - the "finally treating yourself" vs endless kid supplies.
## Entry Drafts
### Option 1: Self-Deprecating List (24 words) ⭐⭐⭐⭐⭐
> "Tiny teddies. Zooper doopers. Le Snaks. Cheese stringers. For once, I'd
> fill a trolley with things that aren't in a lunchbox."
Arc: List of kid stuff → pivot to self
Landing: 5/5 - "aren't in a lunchbox" is specific and relatable
### Option 2: Confession (25 words) ⭐⭐⭐⭐
> "I know every lunchbox snack by heart but forgot what cheese I actually
> like. Five hundred dollars of rediscovering my own taste buds."
Arc: Confession → resolution
Landing: 4/5 - "own taste buds" works but slightly abstract
### Option 3: Practical Humour (23 words) ⭐⭐⭐
> "School lunches sorted for a term. Then with whatever's left—maybe
> $4.50—something from the fancy cheese section. Just for me."
Arc: Practical → undercut → treat
Landing: 3/5 - Good but "$4.50" joke might not land for everyone
**Recommendation:** Option 1 - The specific snack names are immediately
recognisable to any parent, and the landing is both relatable and punchy.
[Runs: gh issue comment 42 --body "..."]
[Runs: gh issue edit 42 --add-label "entry-drafted"]
✅ Entries saved to issue #42!
- Added 3 entry options as comment
- Added `entry-drafted` label
Note: When run in unattended mode (via comp-scout-daily), do NOT ask "Which option do you want to submit?" - the workflow will report all results at the end.
When running in unattended mode (e.g., via comp-scout-daily), the skill:
The skill reads saved stories from the target repo's CLAUDE.md and matches by:
If no story matches (score = 0), use generic approach based on:
| Arc Type | Pattern | Example |
|---|---|---|
| Sincere | Honest need → aspiration | "My kitchen sees more takeaway containers than..." |
| Self-deprecating | Confession → resolution | "I've tried every [X], but this is the one..." |
| Sensory | Scene → vivid detail | "The moment when [specific sensory detail]..." |
| List-pivot | Credentials → gap | "I've done X, Y, Z. But never [this prize]." |
| Comedic | Setup → pivot | "My partner says I [quirk]. [Prize] would..." |
The daily workflow invokes this skill as:
For each new competition issue (after analyze):
1. Read issue details + strategy comment
2. Load saved stories from CLAUDE.md
3. Run comp-scout-compose with --unattended
4. Entries are auto-persisted as comment
5. entry-drafted label added
This skill:
comp-scout-analyze (optional but recommended)entry-drafted label for trackingentry-submitted label)comp-scout-daily in unattended mode