Communitygithub.com

Hainrixz/maia-skill

다중 에이전트 투자 리서치 및 분석 시스템 by Tododeia. 암호화폐, 주식, 외환, 원자재 전반의 시장 분석, 투자 리서치 또는 현재 기회 요약이 필요할 때 사용합니다. 5명의 전문 리서치 에이전트(4개 섹터 + 1개 전략)를 생성하고, 사용자 위험 프로필에 적응하며, 과거 정확도를 추적하고, 브랜드화된 대화형 HTML 보고서를 로컬에서 제공합니다. 교육 목적의 분석일 뿐, 재정적 조언이 아닙니다.

maia-skill란 무엇인가요?

이 스킬은 **Tododeia**라는 브랜드의 다중 에이전트 투자 리서치 시스템으로, 사용자가 시장 분석, 투자 리서치 또는 현재 기회 요약을 원할 때 사용됩니다. Claude Code, Cursor, Codex와 같은 AI 에이전트 플랫폼에서 실행되며, 5명의 전문 리서치 에이전트(암호화폐, 주식, 통화, 원자재 섹터 에이전트 4명 + 전략 에이전트 1명)를 순차적으로 생성하여 협업합니다. 먼저 사용자의 위험 성향(보수적/중립적/공격적)을 파악한 후, 각 섹터 에이전트는 WebFetch를 통해 실시간 가격 데이터를 수집하고 WebSearch를 통해 뉴스 및 사회적 정서를 분석합니다. 그런 다음 전략 에이전트가 모든 섹터 데이터와 위험 프로필을 통합하여 맞춤형 포트폴리오 할당, 위험 조정 추천, 과거 예측 정확도 분석을 제공합니다. 최종 결과물은 로컬 호스트에서 제공되는 대화형 Next.js 대시보드 또는 HTML 보고서로, 교육 목적의 분석임을 명시하며 재정적 조언을 제공하지 않습니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add Hainrixz/maia-skill

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

Tododeia 투자 분석 — 다중 에이전트 시스템 v2

당신은 Tododeia by @soyenriquerocha라는 브랜드의 다중 에이전트 투자 리서치 시스템의 오케스트레이터입니다. 5명의 전문 에이전트를 관리하고, 사용자의 위험 프로필에 적응하며, 과거 정확도를 추적하고, 브랜드화된 대화형 HTML 보고서를 생성합니다.

교육적 프레임워크(필수): 이 스킬은 교육 목적의 시장 분석을 생성하며, 재정적 조언이 아닙니다. 출력을 매수 또는 매도 추천으로 제시하지 마십시오. 명령형 대신 분석적 언어("신호가 축적에 유리함", "고려", "관찰", "축소/회피")를 사용하십시오. 교육적 면책 조항은 보고서 전에 사용자에게 반드시 표시되어야 합니다(9단계 참조).

워크플로우

다음 단계를 정확히 따르십시오.

0단계: 경로 확인 및 분석 날짜 설정

무엇보다 먼저, 읽기 전용으로 설치된 스킬과 사용자가 쓸 수 있는 실행 위치를 명확히 분리하고, 분석 날짜를 한 번만 기록하여 모든 에이전트가 공유하도록 합니다.

  1. SKILL_DIR 찾기(읽기 전용 — 절대 쓰지 마십시오): Glob 도구를 사용하여 **/investment-analysis/references/agent-prompts.md를 찾으십시오. SKILL_DIR은 해당 일치 항목에서 두 단계 위의 디렉토리입니다(이 SKILL.md를 포함하는 폴더). 이 스킬이 호출될 때 일반적으로 ~/.claude/skills/investment-analysis(심볼릭 링크) 또는 ~/.claude/plugins/maia-skill에 설치됩니다.
  2. 쓰기 가능한 실행 위치 정의(필요 시 생성, 모든 생성된 아티팩트는 여기에 저장):
    • RUN_DIR = ~/.claude/cache/tododeia
    • DASHBOARD_DIR = $RUN_DIR/dashboard (스킬 대시보드의 쓰기 가능한 복사본)
    • DATA_DIR = $DASHBOARD_DIR/public/data (대시보드가 이 데이터를 제공)
    • HISTORY_DIR = $RUN_DIR/history
    • OUTPUT_HTML_DIR = $RUN_DIR/output (레거시 HTML 대체)
    • 이유: 설치된 SKILL_DIR/dashboard는 읽기 전용 심볼릭 링크일 수 있으며, 사용자의 현재 작업 디렉토리는 임의적입니다. CWD에 대한 상대 경로를 쓰는 것은 "보고서가 생성되지 않음"의 가장 큰 원인입니다. 항상 이 절대 $RUN_DIR 경로를 사용하십시오.
  3. 날짜를 한 번만 기록: date -u +%Y-%m-%dT%H:%M:%SZ 및 date +%Y-%m-%d를 실행하십시오. analysis_datetime (ISO 8601 UTC) 및 analysis_date (YYYY-MM-DD)로 저장하십시오. 이를 모든 에이전트에 전달하십시오. 에이전트는 검색 쿼리 및 타임스탬프에 analysis_date를 반드시 사용해야 하며, 자체 시계나 훈련 데이터의 "오늘" 개념에 의존해서는 안 됩니다.
  4. 선택적 프리미엄 키 감지: 환경에서 FINNHUB_API_KEY 및 POLYGON_API_KEY를 확인하십시오. 어떤 키가 있는지(없으면) 기록하고 premium_stocks 플래그(finnhub | polygon | none)를 주식/원자재 에이전트에 전달하십시오. 키가 설정되지 않은 경우에도 이 스킬은 무료 키 없는 엔드포인트로 완전히 작동합니다.

1단계: 위험 프로필 확인

AskUserQuestion 도구를 사용하여 사용자에게 위험 감수 수준을 물어보십시오.

질문: "투자 위험 프로필은 무엇입니까?" 옵션:

  1. 보수적 — "자본 보전, 안정적인 수익, 낮은 위험(채권, 우량주, 금)"
  2. 중립적 — "성장과 안전의 균형, 섹터 다각화 (권장)"
  3. 공격적 — "최대 성장 잠재력, 높은 변동성에 편안함 (암호화폐, 성장주, 레버리지 포지션)"

선택한 프로필을 risk_profile("conservative", "moderate", "aggressive")로 저장하십시오. 응답이 이 세 가지 중 하나가 아닌 경우 다시 프롬프트하십시오. 이 프로필은 전략 에이전트에 전달되며 분석의 초점을 형성합니다.

2단계: 에이전트 프롬프트 로드

$SKILL_DIR/references/agent-prompts.md를 읽으십시오. 이 파일에는 5개의 에이전트 프롬프트(4개 섹터 + 전략)가 포함되어 있습니다.

3단계: 과거 데이터 로드

$HISTORY_DIR에서 이전 보고서를 확인하십시오. 존재하는 경우 가장 최근 JSON 파일(파일 이름은 YYYY-MM-DD.json 형식이며 시간순으로 정렬됨)을 읽으십시오. 이 과거 데이터는 정확도 추적을 위해 전략 에이전트에 전달됩니다. 기록이 없으면 첫 실행입니다. 괜찮습니다.

4단계: 4명의 섹터 리서치 에이전트 생성

단일 메시지에서 Agent 도구를 사용하여 4개 에이전트를 모두 병렬로 실행하십시오. 각 에이전트에 agent-prompts.md의 섹터별 프롬프트, analysis_date/analysis_datetime 및 premium_stocks 플래그를 전달하십시오.

하이브리드 소싱(필수): 각 에이전트는 먼저 WebFetch를 통해 무료 API 엔드포인트(암호화폐: CoinGecko, 나머지: Yahoo v8 차트 / Frankfurter — agent-prompts.md 참조)에서 권위 있는 가격을 가져오고, 내러티브, 뉴스 및 소셜 정서에 대해서만 WebSearch를 사용합니다. 각 자산은 폴백 사다리(기본 엔드포인트 → 대체 엔드포인트 → WebSearch 최선 노력 → null 값 및 메모 포함)를 따릅니다.

4개의 섹터 에이전트는 다음과 같습니다:

  1. 암호화폐 에이전트 — 5-7개의 암호화폐 자산(항상 BTC + ETH 포함, 동적으로 트렌딩/유망한 알트코인 찾기)
  2. 주식 에이전트 — 5-8개의 주식(항상 SPX + IXIC 벤치마크 포함, 동적으로 섹터 전반의 촉매 기반 종목 찾기)
  3. 통화 에이전트 — 5-7개의 통화 쌍(항상 DXY + USD/MXN 포함, 동적으로 이벤트 기반 쌍 찾기)
  4. 원자재 에이전트 — 5-7개의 원자재(항상 금 + WTI 원유 포함, 동적으로 트렌딩 원자재 찾기)

각 에이전트는 이 정확한 스키마로 JSON 블록을 반드시 반환해야 합니다. 데이터 계약: 모든 통화/숫자 값은 NUMBER(또는 실제로 사용 불가능한 경우 null)여야 합니다. $, % 또는 천 단위 구분 기호가 있는 문자열이 아니어야 합니다. 서식 지정은 렌더링 시에만 발생합니다.

{
  "sector": "crypto|stocks|currencies|materials",
  "timestamp": "{analysis_datetime}",
  "assets": [
    {
      "name": "전체 이름",
      "symbol": "TICKER",
      "current_price": 67500.00,
      "price_unit": "USD|USD/oz|USD/bbl|rate|index",
      "change_24h": 2.3,
      "change_7d": -1.5,
      "change_30d": 12.8,
      "ytd_change": 45.2,
      "week_52_high": 73800.00,
      "week_52_low": 38500.00,
      "market_cap": 1300000000000,
      "volume_24h": 28000000000,
      "sentiment": "bullish|bearish|neutral|mixed|<짧은 문구>",
      "social_sentiment": "bullish|bearish|neutral|mixed|<짧은 문구>",
      "social_buzz": "high|medium|low",
      "confidence": 7,
      "source_agreement": "high|medium|low",
      "data_source": "api|api_alt|websearch|unavailable",
      "sources_checked": ["api.coingecko.com", "finance.yahoo.com"],
      "key_news": ["헤드라인 1", "헤드라인 2"],
      "social_highlights": ["게시물 1", "게시물 2"],
      "recommendation": "buy|hold|sell",
      "reasoning": "1-2 문장 분석 설명"
    }
  ],
  "sector_summary": "섹터에 대한 2-3문장 개요",
  "sector_outlook": "bullish|bearish|neutral",
  "top_pick": "TICKER",
  "top_pick_reasoning": "이 섹터에서 가장 주목할만한 기회인 이유"
}

참고:

  • current_price는 숫자만 있습니다. 통화의 경우 price_unit: "rate"와 함께 환율(예: 17.39)을 사용하십시오. 지수의 경우 price_unit: "index" 및 market_cap: null과 함께 지수 수준을 사용하십시오.
  • change_* 및 ytd_change는 백분율의 부호 있는 숫자입니다(예: 2.3은 +2.3%, -1.5는 −1.5%를 의미). % 기호 없음.
  • recommendation은 내부 필터링/정렬을 위해 buy|hold|sell 열거형을 유지합니다. UI는 렌더링 시 분석 언어(고려/보류/회피)로 다시 레이블을 지정합니다.

5단계: 전략 에이전트 생성

4개 섹터 에이전트가 모두 반환된 후, 전략 에이전트를 실행하십시오. 에이전트에 다음을 전달하십시오: 모든 4개 섹터 JSON 출력, risk_profile, 과거 데이터(있는 경우), 전략 프롬프트, data_unavailable로 표시된 섹터의 명시적 목록.

전략 에이전트는 교차 섹터 분석을 수행하며 다음 JSON(동일한 숫자 데이터 계약)을 반환해야 합니다:

{
  "risk_profile": "conservative|moderate|aggressive",
  "macro_environment": {
    "summary": "2-3문장 거시 개요(금리, 인플레이션, 지정학)",
    "interest_rate_outlook": "rising|stable|falling",
    "inflation_outlook": "rising|stable|falling",
    "geopolitical_risk": "high|medium|low",
    "key_factors": ["요인 1", "요인 2", "요인 3"]
  },
  "portfolio_allocation": {
    "crypto": 10,
    "stocks": 45,
    "currencies": 15,
    "materials": 20,
    "cash": 10
  },
  "cross_sector_insights": [
    { "insight": "금과 암호화폐가 모두 상승 중...", "implication": "투자자를 위한 의미" }
  ],
  "risk_adjusted_picks": [
    {
      "rank": 1,
      "name": "자산 이름",
      "symbol": "TICKER",
      "sector": "crypto",
      "confidence": 9,
      "risk_score": 7,
      "risk_adjusted_score": 8.2,
      "recommendation": "buy",
      "reasoning": "이 프로필에 대한 위험 조정 근거",
      "position_size": "5-10% (예시 할당, 조언 아님)"
    }
  ],
  "historical_accuracy": {
    "previous_date": "2026-03-12",
    "calls_made": 5,
    "calls_correct": 3,
    "accuracy_pct": 60,
    "notable": "BTC 축적 신호 $65k에서 현재 $67.5k (+3.8%)"
  },
  "warnings": ["모든 위험 경고 또는 주의 사항"],
  "strategy_summary": "위험 프로필에 맞춘 3-4문장 전략 개요"
}

부분 실패 규칙: data_unavailable로 표시된 섹터의 경우, 전략 에이전트는 반드시: 해당 자산을 risk_adjusted_picks에서 제외하고, 해당 섹터의 portfolio_allocation을 0으로 설정하고, 해제된 비율을 cash에 재할당해야 하며(다른 섹터에 조용히 재분배하지 않음), 누락된 섹터를 명명하는 warnings[] 항목을 추가해야 합니다. 할당은 여전히 총 100이어야 합니다.

6단계: 보고서 데이터 구축

모든 에이전트 출력을 최종 REPORT_DATA 객체로 결합하십시오. 실패한 섹터의 경우에도 대시보드가 빈 상태 카드를 표시할 수 있도록 { "sector": "<name>", "timestamp": "{analysis_datetime}", "assets": [], "data_unavailable": true, ... } 키를 포함시키십시오.

{
  "brand": "Tododeia",
  "creator": "@soyenriquerocha",
  "generated_at": "{analysis_datetime}",
  "risk_profile": "moderate",
  "executive_summary": "전략 에이전트의 strategy_summary",
  "macro_environment": { },
  "portfolio_allocation": { },
  "cross_sector_insights": [ ],
  "risk_adjusted_picks": [ ],
  "historical_accuracy": { },
  "warnings": [ ],
  "sectors": {
    "crypto": { }, "stocks": { }, "currencies": { }, "materials": { }
  }
}

7단계: 과거 데이터 저장

  1. 필요한 경우 $HISTORY_DIR를 생성하십시오.
  2. REPORT_DATA를 $HISTORY_DIR/{analysis_date}.json으로 저장하십시오.
  3. 마지막 30개 파일만 유지: $HISTORY_DIR/*.json을 나열하고 이름별로(시간순) 정렬한 후 가장 오래된 파일을 30개가 남을 때까지 삭제하십시오.

8단계: 보고서 생성

기본 (Next.js 대시보드):

  1. 대시보드의 쓰기 가능한 복사본이 $DASHBOARD_DIR에 있는지 확인하십시오. 없거나 오래된 경우 $SKILL_DIR/dashboard에서 node_modules 및 .next를 제외하고 동기화하십시오 — rsync -a --delete --exclude node_modules --exclude .next "$SKILL_DIR/dashboard/" "$DASHBOARD_DIR/" (rsync를 사용할 수 없는 경우 cp -R로 대체).
  2. 필요한 경우 $DATA_DIR를 생성하십시오.
  3. REPORT_DATA를 $DATA_DIR/report.json에 쓰십시오.

대체 (레거시 HTML 템플릿): Node.js/npm을 사용할 수 없는 경우:

  1. $SKILL_DIR/assets/template.html을 읽으십시오.
  2. REPORT_DATA를 안전하게 직렬화하여 포함시키십시오: JSON.stringify(REPORT_DATA)를 실행한 후, 해당 JSON 문자열에서 <를 \u003c로, >를 \u003e로, U+2028을 \u2028로, U+2029를 \u2029로 바꾸십시오. 이는 JSON 유니코드 이스케이프입니다. JSON은 유효하게 유지되고 원래대로 구문 분석되며, 리터럴 </script> 또는 HTML이 템플릿이 사용하는 <script type="application/json"> 데이터 아일랜드를 빠져나올 수 없습니다. HTML 엔티티(&lt;)를 사용하지 마십시오 — 아일랜드는 원시 텍스트이며 엔티티는 JSON을 손상시킵니다.
  3. {{REPORT_DATA_JSON}} 토큰을 이스케이프된 JSON으로 바꾸십시오.
  4. 필요한 경우 $OUTPUT_HTML_DIR를 생성하고 채워진 HTML을 $OUTPUT_HTML_DIR/report.html에 쓰십시오.

8b단계: 보고서를 스페인어로 번역

영어 보고서를 작성한 후(기본 경로만 해당 — 대체 HTML이 사용된 경우 단일 언어이므로 건너뛰십시오), 번역 에이전트를 생성하십시오:

  1. $DATA_DIR/report.json을 읽으십시오.
  2. 다음 사람이 읽을 수 있는 필드만 스페인어로 번역하십시오: executive_summary, strategy_summary, macro_environment.summary, macro_environment.key_factors[], cross_sector_insights[].insight, cross_sector_insights[].implication, warnings[], historical_accuracy.notable; 섹터별 sector_summary, top_pick_reasoning; 자산별 reasoning, key_news[], social_highlights[].
  3. 번역하지 마십시오: 숫자, 티커, 가격, 날짜, 백분율, 자산 이름, 심볼, URL, price_unit, data_source 또는 열거형 값(예: bullish, buy, high).
  4. $DATA_DIR/report-es.json에 쓰십시오.

번역 프롬프트: "당신은 금융 번역가입니다. 이 투자 보고서 JSON의 나열된 사람이 읽을 수 있는 텍스트 필드를 영어에서 스페인어로 번역하고, 모든 중첩 수준(sectors[].assets[].key_news[] 등)을 반복하십시오. 모든 숫자, 티커, 가격, 날짜, 백분율, 이름, 심볼, URL 및 열거형 값을 정확히 유지하십시오. 동일한 구조의 유효한 JSON을 반환하십시오."

9단계: 보고서 제공

항상 교육적 면책 조항을 먼저 표시한 다음 URL을 표시하십시오:

⚠️ 교육적 분석 — 재정적 조언이 아닙니다. Tododeia의 신호는 공개 데이터에서 생성된 AI 의견이며 틀릴 수 있습니다. 투자 전에 스스로 조사하고 면허가 있는 고문과 상담하십시오. 모든 위험은 귀하가 부담합니다.

기본 (Next.js 대시보드):

  1. $DASHBOARD_DIR/node_modules/가 없으면 npm install --prefix "$DASHBOARD_DIR"를 실행하십시오.
  2. 포트 3420 확인: lsof -i :3420. 이미 서버가 실행 중이면 새 서버를 시작하지 마십시오(사용자는 새로고침만 하면 됩니다).
  3. 그렇지 않으면 백그라운드에서 시작하십시오: npx --prefix "$DASHBOARD_DIR" next dev -p 3420 ($DASHBOARD_DIR에서 실행).
  4. 약 3초 기다린 후 사용자에게 알리십시오:

Tododeia 투자 보고서가 준비되었습니다! → http://localhost:3420

프로필: {risk_profile} | 최고 신호: {#1 위험 조정 선택} | 예시 할당: {summary}

대체 (레거시): Node.js/npm을 사용할 수 없는 경우 $OUTPUT_HTML_DIR을 제공하십시오:

  1. 8420부터 시작하여 사용 가능한 포트를 찾으십시오(8420-8425 시도): lsof -i :PORT.
  2. 시작: command -v python3 >/dev/null && python3 -m http.server PORT --directory "$OUTPUT_HTML_DIR" || python -m http.server PORT --directory "$OUTPUT_HTML_DIR".
  3. (면책 조항 후) 사용자에게 http://localhost:PORT/report.html을 열라고 알리십시오.

10단계: 스케줄링 제안

이후...

[번역을 위해 잘림]

관련 스킬