-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsector_pulse.py
More file actions
executable file
Β·522 lines (465 loc) Β· 20 KB
/
Copy pathsector_pulse.py
File metadata and controls
executable file
Β·522 lines (465 loc) Β· 20 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
#!/usr/bin/env python3
"""
sector-pulse β Multi-sector investment signal aggregator.
Tracks funding rounds, milestones, and key companies across:
TechBio/Biotech, Fusion Energy, Quantum Computing, AI Agents, Space Tech.
Pure Python 3 stdlib. No pip installs required.
"""
import argparse
import json
import sys
import textwrap
from datetime import datetime
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# DATA β Curated 2026-02-16
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
SECTORS = {
"fusion": {
"name": "Fusion Energy",
"emoji": "βοΈ",
"companies": [
{
"name": "Helion Energy",
"funding": "$425M+",
"status": "150 million Β°C plasma milestone achieved",
"stage": "Series E",
"signal": "π’ Strong",
},
{
"name": "Commonwealth Fusion Systems",
"funding": "$863M+",
"status": "Building SPARC tokamak; world-record HTS magnets",
"stage": "Series B",
"signal": "π’ Strong",
},
{
"name": "Type One Energy",
"funding": "$250M raising",
"status": "Stellarator approach; fundraising in progress",
"stage": "Series B",
"signal": "π‘ Watch",
},
{
"name": "Inertia Enterprises",
"funding": "$450M Series A",
"status": "Stealth-ish; massive Series A signals deep-tech bet",
"stage": "Series A",
"signal": "π’ Strong",
},
{
"name": "TAE Technologies",
"funding": "$1.2B+ total",
"status": "Exploring going public; beam-driven FRC approach",
"stage": "Late",
"signal": "π‘ Watch",
},
],
"thesis": (
"Fusion is transitioning from science project to engineering challenge. "
"Multiple companies have hit plasma milestones previously thought decades away. "
"Key catalysts: HTS magnet breakthroughs (CFS), record temperatures (Helion), "
"and massive private capital ($6B+ deployed sector-wide). "
"The 2028-2035 window is when net-energy demos should land. "
"Risk: physics works but engineering/economics may lag. "
"Opportunity: first-mover in baseload clean energy = generational company."
),
"search_queries": [
"fusion energy funding 2026",
"Helion Energy milestone 2026",
"Commonwealth Fusion SPARC update",
"fusion startup Series A B 2026",
],
},
"quantum": {
"name": "Quantum Computing",
"emoji": "βοΈ",
"companies": [
{
"name": "IBM",
"funding": "Public (NYSE: IBM)",
"status": "Unveiled 2 new quantum supercomputers; 1000+ qubit roadmap",
"stage": "Public",
"signal": "π’ Strong",
},
{
"name": "Google (Willow)",
"funding": "Public (NASDAQ: GOOGL)",
"status": "Willow chip: breakthrough in quantum error correction",
"stage": "Public",
"signal": "π’ Strong",
},
{
"name": "IonQ",
"funding": "Public (NYSE: IONQ)",
"status": "Trapped-ion approach; enterprise partnerships growing",
"stage": "Public",
"signal": "π‘ Watch",
},
{
"name": "Rigetti Computing",
"funding": "Public (NASDAQ: RGTI)",
"status": "Superconducting qubits; cloud-accessible QPUs",
"stage": "Public",
"signal": "π‘ Watch",
},
{
"name": "PsiQuantum",
"funding": "$700M+",
"status": "Photonic approach; GlobalFoundries manufacturing deal",
"stage": "Late Private",
"signal": "π‘ Watch",
},
],
"thesis": (
"Quantum computing hit an inflection point with Google's Willow demonstrating "
"real error correction and IBM pushing past 1000 logical qubits. "
"We're in the 'useful but not universal' phase β quantum advantage for specific "
"workloads (pharma simulation, optimization, crypto) is 2-4 years out. "
"Public plays (IBM, GOOGL) offer exposure with less risk. "
"Private bets (PsiQuantum) are higher-risk/higher-reward on alternative architectures. "
"Key risk: decoherence and error rates may plateau. "
"Key catalyst: first commercial quantum advantage demonstration."
),
"search_queries": [
"quantum computing funding 2026",
"IBM quantum supercomputer 2026",
"Google Willow quantum chip",
"quantum computing startup funding round",
],
},
"techbio": {
"name": "TechBio / Longevity",
"emoji": "π§¬",
"companies": [
{
"name": "Life Biosciences",
"funding": "$500M+",
"status": "FDA clinical trial for longevity-adjacent therapeutic",
"stage": "Clinical",
"signal": "π’ Strong",
},
{
"name": "Altos Labs",
"funding": "$3B",
"status": "Cellular reprogramming; Yamanaka factors research",
"stage": "Series A (mega)",
"signal": "π’ Strong",
},
{
"name": "NewLimit",
"funding": "$130M+",
"status": "Epigenetic reprogramming; Brian Armstrong-backed",
"stage": "Series A",
"signal": "π‘ Watch",
},
{
"name": "Retro Biosciences",
"funding": "$180M+",
"status": "Sam Altman-backed; autophagy, plasma, reprogramming",
"stage": "Early",
"signal": "π‘ Watch",
},
{
"name": "Recursion Pharmaceuticals",
"funding": "Public (NASDAQ: RXRX)",
"status": "AI-driven drug discovery; massive dataset moat",
"stage": "Public",
"signal": "π’ Strong",
},
{
"name": "Isomorphic Labs",
"funding": "Alphabet-backed",
"status": "DeepMind spinout; AlphaFold for drug design",
"stage": "Private (corporate)",
"signal": "π’ Strong",
},
],
"thesis": (
"TechBio is the convergence of AI/ML with biological research β and longevity is "
"its most ambitious frontier. Altos Labs ($3B!) and Isomorphic Labs represent "
"big-tech conviction that AI can crack biology. Life Biosciences entering FDA trials "
"is a major de-risking event. Recursion's AI-first approach is generating real pipeline. "
"Key risk: biology is still incredibly hard; 90%+ clinical failure rates persist. "
"Key catalyst: first AI-discovered drug approval, or reprogramming proof in humans. "
"This sector rewards patience β 5-10 year horizon for the biggest wins."
),
"search_queries": [
"techbio longevity funding 2026",
"Life Biosciences FDA trial",
"Altos Labs reprogramming update",
"AI drug discovery startup 2026",
],
},
"ai-agents": {
"name": "AI Agents",
"emoji": "π€",
"companies": [
{
"name": "OpenClaw / OpenAI Ecosystem",
"funding": "Open-source + Foundation",
"status": "180K GitHub stars; building agent infrastructure layer",
"stage": "Foundation/OSS",
"signal": "π’ Strong",
},
{
"name": "Manufact (MCP)",
"funding": "$6.3M",
"status": "Model Context Protocol tooling; early but strategic",
"stage": "Seed",
"signal": "π‘ Watch",
},
{
"name": "Cognition (Devin)",
"funding": "$175M+ (Series A)",
"status": "AI software engineer; polarizing but category-defining",
"stage": "Series A",
"signal": "π‘ Watch",
},
],
"thesis": (
"AI agents are the next platform shift after LLMs β from 'AI that answers' to "
"'AI that acts.' The MCP (Model Context Protocol) ecosystem is emerging as a "
"connective tissue standard. OpenClaw's 180K stars signal massive developer interest "
"in agent infrastructure. Cognition's Devin proved the category exists even if V1 "
"is rough. Key risk: reliability β agents that fail 20% of the time aren't useful. "
"Key catalyst: agents that reliably complete multi-step real-world tasks. "
"This is early innings β like web apps in 1996. Infrastructure plays > application plays."
),
"search_queries": [
"AI agent startup funding 2026",
"MCP model context protocol",
"AI coding agent startup",
"autonomous AI agent funding round",
],
},
"space": {
"name": "Space Tech",
"emoji": "π",
"companies": [
{
"name": "SpaceX",
"funding": "$10B+ (private, ~$210B valuation)",
"status": "Starship progress; Starlink dominant; Mars timeline",
"stage": "Late Private",
"signal": "π’ Strong",
},
{
"name": "Relativity Space",
"funding": "$1.3B+",
"status": "3D-printed rockets; Terran R in development",
"stage": "Late Private",
"signal": "π‘ Watch",
},
{
"name": "Rocket Lab",
"funding": "Public (NASDAQ: RKLB)",
"status": "Electron workhorse; Neutron medium-lift in dev",
"stage": "Public",
"signal": "π’ Strong",
},
{
"name": "Astra",
"funding": "Public (NASDAQ: ASTR)",
"status": "Pivoting to spacecraft/propulsion after launch struggles",
"stage": "Public",
"signal": "π΄ Caution",
},
],
"thesis": (
"Space is bifurcating: SpaceX dominates launch, everyone else fights for niches. "
"Rocket Lab is the best public pure-play β reliable Electron + Neutron upside. "
"Relativity's 3D-printing approach is either genius or a dead end (Terran R will tell). "
"The real opportunity may be in space infrastructure (comms, debris removal, "
"in-space manufacturing) rather than launch. "
"Key risk: SpaceX moat is enormous; commoditized launch kills margins. "
"Key catalyst: Starship fully operational changes the economics of everything in orbit."
),
"search_queries": [
"space tech startup funding 2026",
"SpaceX Starship update 2026",
"Rocket Lab Neutron progress",
"space startup Series A B 2026",
],
},
}
VALID_SECTORS = list(SECTORS.keys())
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# DISPLAY HELPERS
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
WIDTH = 72
DIVIDER = "β" * WIDTH
DOUBLE_DIVIDER = "β" * WIDTH
def header(text):
print(f"\n{DOUBLE_DIVIDER}")
print(f" {text}")
print(DOUBLE_DIVIDER)
def section(text):
print(f"\n{DIVIDER}")
print(f" {text}")
print(DIVIDER)
def wrap(text, indent=4):
wrapped = textwrap.fill(text, width=WIDTH - indent, initial_indent=" " * indent, subsequent_indent=" " * indent)
print(wrapped)
def company_card(c, index):
print(f"\n {index}. {c['name']} {c['signal']}")
print(f" Funding: {c['funding']} | Stage: {c['stage']}")
print(f" Status: {c['status']}")
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# COMMANDS
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
def cmd_companies(args):
"""Display curated watchlist of key companies per sector."""
sectors_to_show = VALID_SECTORS
if hasattr(args, "sector") and args.sector:
if args.sector not in SECTORS:
print(f"Unknown sector: {args.sector}")
print(f"Valid sectors: {', '.join(VALID_SECTORS)}")
sys.exit(1)
sectors_to_show = [args.sector]
header("π SECTOR PULSE β Company Watchlist")
print(f" Last updated: 2026-02-16 | {len(SECTORS)} sectors tracked")
for key in sectors_to_show:
s = SECTORS[key]
section(f"{s['emoji']} {s['name'].upper()} ({len(s['companies'])} companies)")
for i, c in enumerate(s["companies"], 1):
company_card(c, i)
print(f"\n{DIVIDER}")
print(" Signal legend: π’ Strong conviction π‘ Watch/monitor π΄ Caution")
print(DIVIDER)
print()
def cmd_thesis(args):
"""Print investment thesis summary per sector."""
sectors_to_show = VALID_SECTORS
if hasattr(args, "sector") and args.sector:
if args.sector not in SECTORS:
print(f"Unknown sector: {args.sector}")
print(f"Valid sectors: {', '.join(VALID_SECTORS)}")
sys.exit(1)
sectors_to_show = [args.sector]
header("π SECTOR PULSE β Investment Theses")
for key in sectors_to_show:
s = SECTORS[key]
section(f"{s['emoji']} {s['name'].upper()}")
print()
wrap(s["thesis"])
print(f"\n{DOUBLE_DIVIDER}")
print(" Disclaimer: Not financial advice. DYOR.")
print(DOUBLE_DIVIDER)
print()
def cmd_scan(args):
"""Show search queries for a sector (designed for web_search integration)."""
sector = args.sector
if sector not in SECTORS:
print(f"Unknown sector: {sector}")
print(f"Valid sectors: {', '.join(VALID_SECTORS)}")
sys.exit(1)
s = SECTORS[sector]
header(f"π SECTOR PULSE β Scan: {s['name']}")
print()
print(" Suggested search queries for latest signals:")
print()
for i, q in enumerate(s["search_queries"], 1):
print(f" {i}. {q}")
print()
print(" Companies to monitor:")
for c in s["companies"]:
print(f" β’ {c['name']}")
print()
print(f" π‘ Run these queries in your preferred search tool or use")
print(f" web_search for automated scanning.")
print()
def cmd_all(args):
"""Run all sectors and generate summary."""
header("π SECTOR PULSE β Full Report")
now = datetime.now().strftime("%Y-%m-%d %H:%M")
print(f" Generated: {now}")
# Summary table
section("SECTOR OVERVIEW")
print()
print(f" {'Sector':<25} {'Companies':>10} {'Strong':>8} {'Watch':>8} {'Caution':>8}")
print(f" {'β'*25} {'β'*10} {'β'*8} {'β'*8} {'β'*8}")
total_companies = 0
total_strong = 0
for key in VALID_SECTORS:
s = SECTORS[key]
companies = s["companies"]
strong = sum(1 for c in companies if "Strong" in c["signal"])
watch = sum(1 for c in companies if "Watch" in c["signal"])
caution = sum(1 for c in companies if "Caution" in c["signal"])
total_companies += len(companies)
total_strong += strong
print(f" {s['emoji']} {s['name']:<23} {len(companies):>10} {strong:>8} {watch:>8} {caution:>8}")
print(f" {'β'*25} {'β'*10} {'β'*8} {'β'*8} {'β'*8}")
print(f" {'TOTAL':<25} {total_companies:>10} {total_strong:>8}")
# Top signals
section("π₯ TOP SIGNALS")
print()
all_strong = []
for key in VALID_SECTORS:
s = SECTORS[key]
for c in s["companies"]:
if "Strong" in c["signal"]:
all_strong.append((s["emoji"], s["name"], c["name"], c["status"]))
for emoji, sector, name, status in all_strong:
print(f" {emoji} [{sector}] {name}")
print(f" β {status}")
print()
# Key themes
section("π KEY THEMES")
print()
themes = [
"Fusion energy hitting engineering milestones β multiple companies at plasma temperatures",
"Quantum error correction breakthroughs (Google Willow) shifting timeline left",
"AI agents emerging as next platform β infrastructure plays (MCP, OpenClaw) leading",
"TechBio convergence: AI + biology = accelerated drug discovery pipeline",
"Space bifurcation: SpaceX dominance vs. niche opportunity for others",
]
for i, t in enumerate(themes, 1):
wrap(f"{i}. {t}", indent=4)
print(f"\n{DOUBLE_DIVIDER}")
print(f" End of report | {total_companies} companies across {len(SECTORS)} sectors")
print(DOUBLE_DIVIDER)
print()
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# CLI
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
def main():
parser = argparse.ArgumentParser(
prog="sector-pulse",
description="Multi-sector investment signal aggregator",
formatter_class=argparse.RawDescriptionHelpFormatter,
epilog=textwrap.dedent("""\
sectors: fusion, quantum, techbio, ai-agents, space
examples:
sector-pulse companies Show all company watchlists
sector-pulse companies --sector fusion Show fusion companies only
sector-pulse thesis Investment theses for all sectors
sector-pulse scan fusion Search queries for fusion sector
sector-pulse all Full report across all sectors
"""),
)
subparsers = parser.add_subparsers(dest="command", help="Command to run")
# companies
p_companies = subparsers.add_parser("companies", help="Display curated company watchlist")
p_companies.add_argument("--sector", "-s", choices=VALID_SECTORS, help="Filter to a single sector")
# thesis
p_thesis = subparsers.add_parser("thesis", help="Print investment thesis per sector")
p_thesis.add_argument("--sector", "-s", choices=VALID_SECTORS, help="Filter to a single sector")
# scan
p_scan = subparsers.add_parser("scan", help="Show search queries for a sector")
p_scan.add_argument("sector", choices=VALID_SECTORS, help="Sector to scan")
# all
p_all = subparsers.add_parser("all", help="Full report across all sectors")
args = parser.parse_args()
if args.command is None:
parser.print_help()
sys.exit(0)
commands = {
"companies": cmd_companies,
"thesis": cmd_thesis,
"scan": cmd_scan,
"all": cmd_all,
}
commands[args.command](args)
if __name__ == "__main__":
main()