Claude Code Plugins

Community-maintained marketplace

Feedback

ceo-speech-agent

@psh355q-ui/szdi57465yt
0
0

CEO statement tone shift analyzer for /ceo-analysis page. Analyzes CEO quotes from SEC filings, earnings calls to detect tone changes (positive→cautious, cautious→aggressive) and finds historical similar patterns. Generates news articles when significant shifts detected.

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name ceo-speech-agent
description CEO statement tone shift analyzer for /ceo-analysis page. Analyzes CEO quotes from SEC filings, earnings calls to detect tone changes (positive→cautious, cautious→aggressive) and finds historical similar patterns. Generates news articles when significant shifts detected.
license Proprietary
compatibility Requires SEC filings, earnings transcripts, NLP tone analysis, historical pattern database
metadata [object Object]

CEO Speech Agent - CEO 발언 Tone Shift 분석

Role

/ceo-analysis 페이지에서 CEO 발언의 Tone Shift(어조 변화)를 감지하여 숨겨진 trading signals를 찾습니다.

Core Capabilities

1. Tone Detection

Tone Levels

TONE_LEVELS = {
    "VERY_POSITIVE": 2,      # 매우 자신감, aggressive 투자
    "POSITIVE": 1,           # 긍정적, 안정적
    "NEUTRAL": 0,            # 중립, 사실 나열
    "CAUTIOUS": -1,          # 신중, 보수적, hedging
    "NEGATIVE": -2           # 부정적, 우려 표명
}

Key Indicators

VERY_POSITIVE Signals:

  • "record", "unprecedented", "exceptional"
  • "doubling down", "aggressive expansion"
  • "confident", "optimistic outlook"
  • Specific numbers (positive guidance)

CAUTIOUS Signals:

  • "uncertain environment", "challenging"
  • "monitoring closely", "prudent approach"
  • "headwinds", "macro pressures"
  • Vague guidance, hedging language

NEGATIVE Signals:

  • "disappointed", "below expectations"
  • "restructuring", "cost-cutting"
  • "difficult decisions ahead"
  • Guidance cuts

2. Tone Shift Detection

def detect_tone_shift(
    previous_tone: int,
    current_tone: int
) -> Dict:
    """Detect significant tone changes"""
    
    shift = current_tone - previous_tone
    
    if abs(shift) >= 2:
        significance = "MAJOR"
    elif abs(shift) == 1:
        significance = "MODERATE"
    else:
        significance = "NONE"
    
    if shift > 0:
        direction = "UPGRADE"
        signal = "BULLISH"
    elif shift < 0:
        direction = "DOWNGRADE"
        signal = "BEARISH"
    else:
        direction = "STABLE"
        signal = "NEUTRAL"
    
    return {
        "shift_magnitude": abs(shift),
        "significance": significance,
        "direction": direction,
        "trading_signal": signal,
        "confidence": min(0.9, 0.5 + abs(shift) * 0.2)
    }

Example:

Previous (Q3): POSITIVE (+1)
  "We're seeing steady growth..."

Current (Q4): VERY_POSITIVE (+2)
  "Record demand! Doubling capex for aggressive expansion!"

Shift: +1 (UPGRADE)
→ Significance: MODERATE
→ Signal: BULLISH
→ Confidence: 0.7

3. Historical Pattern Matching

def find_similar_patterns(
    ticker: str,
    current_tone_shift: Dict,
    lookback_years: int = 5
) -> List[Dict]:
    """Find past instances of similar tone shifts"""
    
    # Query historical filings
    past_filings = db.query(CEOAnalysis).filter(
        CEOAnalysis.ticker == ticker,
        CEOAnalysis.created_at >= datetime.now() - timedelta(days=365*lookback_years)
    ).all()
    
    similar_patterns = []
    
    for filing in past_filings:
        if filing.shift_direction == current_tone_shift['direction']:
            if filing.shift_magnitude >= current_tone_shift['shift_magnitude']:
                # Calculate subsequent price change
                price_change = get_price_change(
                    ticker,
                    filing.date,
                    filing.date + timedelta(days=90)
                )
                
                similar_patterns.append({
                    "date": filing.date,
                    "quarter": filing.quarter,
                    "shift": filing.shift_magnitude,
                    "subsequent_price_change_3m": price_change,
                    "quote": filing.ceo_quote
                })
    
    return similar_patterns

Example Output:

{
  "similar_past_instances": [
    {
      "date": "2022-Q2",
      "shift": "UPGRADE (+1)",
      "ceo_quote": "Doubling R&D investment...",
      "subsequent_price_change_3m": "+12.5%"
    },
    {
      "date": "2020-Q4",
      "shift": "UPGRADE (+1)",
      "ceo_quote": "Record pipeline, aggressive hiring...",
      "subsequent_price_change_3m": "+18.2%"
    }
  ],
  "average_price_change": "+15.4%",
  "pattern_reliability": 0.75
}

4. News Article Generation

When significant tone shift detected:

async def generate_news_article(
    ticker: str,
    ceo_analysis: Dict
) -> int:
    """Generate news article for tone shift"""
    
    if ceo_analysis['shift']['significance'] in ['MAJOR', 'MODERATE']:
        # Create article
        article = NewsArticle(
            ticker=ticker,
            article_type='ceo_speech',
            headline=f"{ticker} CEO Tone Shift: {ceo_analysis['shift']['direction']}",
            content=format_ceo_analysis_article(ceo_analysis),
            sentiment_score=calculate_sentiment(ceo_analysis),
            source='ceo_analysis_agent',
            created_at=datetime.now()
        )
        
        db.add(article)
        db.commit()
        
        # Trigger trading signal
        create_trading_signal(
            ticker=ticker,
            action=derive_action(ceo_analysis['shift']['trading_signal']),
            source='ceo_analysis',
            confidence=ceo_analysis['shift']['confidence'],
            reasoning=ceo_analysis['summary']
        )
        
        return article.id

Decision Framework

Step 1: Extract CEO Quotes
  sources = [
    "10-K", "10-Q" SEC filings,
    "Earnings Call Transcripts",
    "Shareholder Letters",
    "Conference Presentations"
  ]
  
  FOR each source:
    extract_ceo_statements()

Step 2: Analyze Current Tone
  current_tone = analyze_tone(current_quotes)
  
  indicators = {
    "positive_words": count(["record", "strong", "confident"]),
    "cautious_words": count(["uncertain", "challenging"]),
    "specific_numbers": extract_guidance(),
    "hedging_language": detect_hedges()
  }
  
  current_tone_level = calculate_tone_level(indicators)

Step 3: Compare to Previous Tone
  previous_tone = get_previous_quarter_tone(ticker)
  
  tone_shift = detect_tone_shift(previous_tone, current_tone)

Step 4: IF Significant Shift:
  # Find historical patterns
  similar_patterns = find_similar_patterns(ticker, tone_shift)
  
  # Estimate impact
  expected_price_impact = average(similar_patterns.price_changes)
  
  # Generate news article
  IF tone_shift.significance in ['MAJOR', 'MODERATE']:
    article_id = generate_news_article(ticker, analysis)

Step 5: Generate Trading Signal
  action = derive_action_from_shift(tone_shift)
  
  create_trading_signal(
    ticker=ticker,
    action=action,
    source='ceo_analysis',
    confidence=tone_shift.confidence,
    metadata={
      "tone_shift": tone_shift,
      "historical_patterns": similar_patterns,
      "article_id": article_id
    }
  )

Output Format

{
  "ticker": "AAPL",
  "ceo_name": "Tim Cook",
  "filing_type": "10-Q",
  "filing_date": "2025-10-31",
  "quarter": "2025-Q3",
  "analysis_timestamp": "2025-12-21T13:00:00Z",
  
  "current_quarter_analysis": {
    "ceo_quotes": [
      {
        "quote": "We are doubling down on AI investments and see unprecedented demand",
        "source": "Earnings Call",
        "timestamp": "2025-11-01 16:00",
        "tone": "VERY_POSITIVE",
        "key_phrases": ["doubling down", "unprecedented demand"]
      },
      {
        "quote": "iPhone sales exceeded our most optimistic projections",
        "source": "10-Q Filing",
        "tone": "VERY_POSITIVE",
        "key_phrases": ["exceeded", "optimistic"]
      }
    ],
    "aggregated_tone": "VERY_POSITIVE",
    "tone_level": 2,
    "confidence": 0.90
  },
  
  "previous_quarter_analysis": {
    "quarter": "2025-Q2",
    "aggregated_tone": "POSITIVE",
    "tone_level": 1
  },
  
  "tone_shift": {
    "shift_magnitude": 1,
    "significance": "MODERATE",
    "direction": "UPGRADE",
    "trading_signal": "BULLISH",
    "confidence": 0.70,
    "interpretation": "CEO 어조가 긍정에서 매우 긍정으로 상향. 공격적 투자 시사."
  },
  
  "historical_pattern_analysis": {
    "similar_past_instances": [
      {
        "date": "2022-02-01",
        "quarter": "2022-Q1",
        "shift": "UPGRADE",
        "ceo_quote": "Aggressive R&D expansion...",
        "subsequent_price_change_3m": "+12.5%",
        "subsequent_price_change_6m": "+18.2%"
      },
      {
        "date": "2020-11-01",
        "quarter": "2020-Q4",
        "shift": "UPGRADE",
        "ceo_quote": "Record pipeline...",
        "subsequent_price_change_3m": "+15.8%",
        "subsequent_price_change_6m": "+22.1%"
      }
    ],
    "pattern_count": 2,
    "average_price_change_3m": "+14.2%",
    "average_price_change_6m": "+20.2%",
    "pattern_reliability": 0.75,
    "interpretation": "과거 유사 패턴에서 평균 3개월 +14% 상승"
  },
  
  "trading_recommendation": {
    "action": "BUY",
    "confidence": 0.75,
    "reasoning": "CEO tone upgrade (POSITIVE → VERY_POSITIVE) + 과거 패턴 평균 +14% (3M)",
    "target_price_3m": 205.00,
    "expected_return_3m": 0.14,
    "stop_loss": 185.00
  },
  
  "news_article_generated": {
    "article_id": 789,
    "headline": "AAPL CEO Tone Shift: 공격적 AI 투자 암시",
    "summary": "Tim Cook CEO가 실적 발표에서 '전례 없는 수요'와 'AI 투자 배가' 언급. 과거 유사 패턴 분석 시 평균 +14% 상승.",
    "sentiment_score": 0.8
  },
  
  "key_risks": [
    "과거 패턴이 반복되지 않을 수 있음",
    "거시경제 환경 변화",
    "경쟁사 동향"
  ]
}

Examples

Example 1: Major Upgrade (CAUTIOUS → VERY_POSITIVE)

Previous Q: "Uncertain macro environment, prudent approach..."
  Tone: CAUTIOUS (-1)

Current Q: "Record demand! Doubling capex, aggressive hiring!"
  Tone: VERY_POSITIVE (+2)

Shift: +3 (MAJOR UPGRADE)
→ Signal: STRONG_BUY
→ Confidence: 0.90
→ Expected: +20% (based on 2018 similar pattern)

Example 2: Moderate Downgrade

Previous Q: "Strong performance, confident outlook..."
  Tone: POSITIVE (+1)

Current Q: "Monitoring headwinds closely, cautious on guidance..."
  Tone: CAUTIOUS (-1)

Shift: -2 (MODERATE DOWNGRADE)
→ Signal: BEARISH
→ Confidence: 0.75
→ Expected: -8% (based on 2019, 2021 patterns)

Guidelines

Do's ✅

  • Context 중시: 동일 단어도 문맥에 따라 다름
  • Historical Pattern 확인: 과거 유사 사례 필수
  • Quote 원문 보존: 해석 편향 방지
  • News Article 생성: 중요한 shift는 기사화

Don'ts ❌

  • 단일 문장으로 판단 금지
  • 과거 패턴 무시 금지
  • CEO 개인 성향 고려 안 함 금지 (Musk vs Cook)
  • Pattern reliability < 60% 시 과신 금지

Integration

SEC Filings Extraction

from backend.data.sec_client import SECClient

sec = SECClient()

# Get latest 10-Q
filing = sec.get_latest_filing(ticker='AAPL', form_type='10-Q')

# Extract MD&A section (Management Discussion & Analysis)
mda_section = sec.extract_section(filing, section='MDNA')

# Extract CEO quotes
ceo_quotes = extract_ceo_statements(mda_section)

Earnings Call Transcripts

from backend.data.earnings_call_client import EarningsCallClient

earnings = EarningsCallClient()

# Get latest transcript
transcript = earnings.get_latest_transcript(ticker='AAPL')

# Extract CEO portion
ceo_remarks = transcript.get_executive_remarks(executive='CEO')

Performance Metrics

  • Tone Detection Accuracy: > 85%
  • Pattern Matching Recall: > 80% (주요 패턴 포착)
  • Generated Signal Accuracy: > 70%
  • News Article Usefulness: > 4/5

Version History

  • v1.0 (2025-12-21): Initial release with tone shift detection and historical pattern matching