$npx -y skills add mphinance/alpha-skills --skill edge-signal-aggregatorAggregate and rank signals from multiple edge-finding skills (edge-candidate-agent, theme-detector, sector-analyst, institutional-flow-tracker) into a prioritized conviction dashboard with weighted scoring, deduplication, and contradiction detection.
| 1 | # Edge Signal Aggregator |
| 2 | |
| 3 | ## Overview |
| 4 | |
| 5 | Combine outputs from multiple upstream edge-finding skills into a single weighted conviction dashboard. This skill applies configurable signal weights, deduplicates overlapping themes, flags contradictions between skills, and ranks composite edge ideas by aggregate confidence score. The result is a prioritized edge shortlist with provenance links to each contributing skill. |
| 6 | |
| 7 | ## When to Use |
| 8 | |
| 9 | - After running multiple edge-finding skills and wanting a unified view |
| 10 | - When consolidating signals from edge-candidate-agent, theme-detector, sector-analyst, and institutional-flow-tracker |
| 11 | - Before making portfolio allocation decisions based on multiple signal sources |
| 12 | - To identify contradictions between different analysis approaches |
| 13 | - When prioritizing which edge ideas deserve deeper research |
| 14 | |
| 15 | ## Prerequisites |
| 16 | |
| 17 | - Python 3.9+ |
| 18 | - No API keys required (processes local JSON/YAML files from other skills) |
| 19 | - Dependencies: `pyyaml` (standard in most environments) |
| 20 | |
| 21 | ## Workflow |
| 22 | |
| 23 | ### Step 1: Gather Upstream Skill Outputs |
| 24 | |
| 25 | Collect output files from the upstream skills you want to aggregate: |
| 26 | - `reports/edge_candidate_*.json` from edge-candidate-agent |
| 27 | - `reports/edge_concepts_*.yaml` from edge-concept-synthesizer |
| 28 | - `reports/theme_detector_*.json` from theme-detector |
| 29 | - `reports/sector_analyst_*.json` from sector-analyst |
| 30 | - `reports/institutional_flow_*.json` from institutional-flow-tracker |
| 31 | - `reports/edge_hints_*.yaml` from edge-hint-extractor |
| 32 | |
| 33 | ### Step 2: Run Signal Aggregation |
| 34 | |
| 35 | Execute the aggregator script with paths to upstream outputs: |
| 36 | |
| 37 | ```bash |
| 38 | python3 skills/edge-signal-aggregator/scripts/aggregate_signals.py \ |
| 39 | --edge-candidates reports/edge_candidate_agent_*.json \ |
| 40 | --edge-concepts reports/edge_concepts_*.yaml \ |
| 41 | --themes reports/theme_detector_*.json \ |
| 42 | --sectors reports/sector_analyst_*.json \ |
| 43 | --institutional reports/institutional_flow_*.json \ |
| 44 | --hints reports/edge_hints_*.yaml \ |
| 45 | --output-dir reports/ |
| 46 | ``` |
| 47 | |
| 48 | Optional: Use a custom weights configuration: |
| 49 | |
| 50 | ```bash |
| 51 | python3 skills/edge-signal-aggregator/scripts/aggregate_signals.py \ |
| 52 | --edge-candidates reports/edge_candidate_agent_*.json \ |
| 53 | --weights-config skills/edge-signal-aggregator/assets/custom_weights.yaml \ |
| 54 | --output-dir reports/ |
| 55 | ``` |
| 56 | |
| 57 | ### Step 3: Review Aggregated Dashboard |
| 58 | |
| 59 | Open the generated report to review: |
| 60 | 1. **Ranked Edge Ideas** - Sorted by composite conviction score |
| 61 | 2. **Signal Provenance** - Which skills contributed to each idea |
| 62 | 3. **Contradictions** - Conflicting signals flagged for manual review |
| 63 | 4. **Deduplication Log** - Merged overlapping themes |
| 64 | |
| 65 | ### Step 4: Act on High-Conviction Signals |
| 66 | |
| 67 | Filter the shortlist by minimum conviction threshold: |
| 68 | |
| 69 | ```bash |
| 70 | python3 skills/edge-signal-aggregator/scripts/aggregate_signals.py \ |
| 71 | --edge-candidates reports/edge_candidate_agent_*.json \ |
| 72 | --min-conviction 0.7 \ |
| 73 | --output-dir reports/ |
| 74 | ``` |
| 75 | |
| 76 | ## Output Format |
| 77 | |
| 78 | ### JSON Report |
| 79 | |
| 80 | ```json |
| 81 | { |
| 82 | "schema_version": "1.0", |
| 83 | "generated_at": "2026-03-02T07:00:00Z", |
| 84 | "config": { |
| 85 | "weights": { |
| 86 | "edge_candidate_agent": 0.25, |
| 87 | "edge_concept_synthesizer": 0.20, |
| 88 | "theme_detector": 0.15, |
| 89 | "sector_analyst": 0.15, |
| 90 | "institutional_flow_tracker": 0.15, |
| 91 | "edge_hint_extractor": 0.10 |
| 92 | }, |
| 93 | "min_conviction": 0.5, |
| 94 | "dedup_similarity_threshold": 0.8 |
| 95 | }, |
| 96 | "summary": { |
| 97 | "total_input_signals": 42, |
| 98 | "unique_signals_after_dedup": 28, |
| 99 | "contradictions_found": 3, |
| 100 | "signals_above_threshold": 12 |
| 101 | }, |
| 102 | "ranked_signals": [ |
| 103 | { |
| 104 | "rank": 1, |
| 105 | "signal_id": "sig_001", |
| 106 | "title": "AI Infrastructure Capex Acceleration", |
| 107 | "composite_score": 0.87, |
| 108 | "contributing_skills": [ |
| 109 | { |
| 110 | "skill": "edge_candidate_agent", |
| 111 | "signal_ref": "ticket_2026-03-01_001", |
| 112 | "raw_score": 0.92, |
| 113 | "weighted_contribution": 0.23 |
| 114 | }, |
| 115 | { |
| 116 | "skill": "theme_detector", |
| 117 | "signal_ref": "theme_ai_infra", |
| 118 | "raw_score": 0.85, |
| 119 | "weighted_contribution": 0.13 |
| 120 | } |
| 121 | ], |
| 122 | "tickers": ["NVDA", "AMD", "AVGO"], |
| 123 | "direction": "LONG", |
| 124 | "time_horizon": "3-6 months", |
| 125 | "confidence_breakdown": { |
| 126 | "multi_skill_agreement": 0.30, |
| 127 | "signal_strength": 0.35, |
| 128 | "recency": 0.22 |
| 129 | } |
| 130 | } |
| 131 | ], |
| 132 | "contradictions": [ |
| 133 | { |
| 134 | "contradiction_id": "contra_001", |
| 135 | "description": "Conflicting sector view on Energy", |
| 136 | "skill_a": { |
| 137 | "skill": "sector_analyst", |
| 138 | "signal": "Energy sector bearish rotation", |
| 139 | "direction": "SHORT" |
| 140 | }, |
| 141 | "skill_b": { |
| 142 | "skill": "institutional_flow_tracker", |
| 143 | "signal": "Heavy institutional buying in XLE", |
| 144 | "direction": "LONG" |
| 145 | }, |