Ironhack Berlin · AI Integration Bootcamp · Week 3 Project
Your market intelligence
agent. Running 24/7.
HERMES watches 590 suppliers across 17 categories, classifies every signal with Claude Haiku,
stores everything in two purpose-built databases, and answers natural language questions —
including semantic topic search powered by RAG.
His partner ICARUS relays everything to you on Telegram.
Built by a procurement professional with 10+ years at TeamViewer, Scout24, and Delivery Hero —
to automate what used to take hours of manual research. Two AI agents. Two databases. One natural language interface.
Eugen Mueller · eugnmueller@googlemail.com
Agent Architecture
Two agents with strict roles. Icarus is master — Hermes never pushes, never accesses personal data.
ICARUS
Master Agent — Telegram Interface
Hermes tools available
hermes_greet
hermes_query
hermes_briefing
hermes_search ✦ RAG
hermes_crawl
build_miro_board
Also manages: Gmail · Calendar · Tasks · GitHub · LinkedIn · Shopping
HERMES
Sub-Agent — Market Intelligence
HTTP endpoints
GET /health · GET /greet
GET /query/{company}
GET /briefing
GET /search?q= ← RAG
POST /crawl/rss · /crawl/edgar · /crawl/tavily
POST /miro/landscape · /miro/signals
POST /flush
Upstash Redis
Key-value store — all crawled items, supplier lists, dedup flags. Primary query database.
Upstash Vector
Vector embeddings — BAAI/bge-large-en-v1.5, 1024 dimensions. Powers semantic RAG search.
Database Layer
Two databases, two purposes — every crawled item lands in both simultaneously.
hermes:item:{md5} ← full JSON, 7-day TTL
hermes:supplier:{slug} ← item ID list, max 3000
hermes:seen:{md5} ← dedup flag, 30-day TTL
"What does Hermes have on TSMC?" — slug lookup, returns last N items in milliseconds
Deduplication — URL hash stored before processing; never crawls the same article twice
Auto-expiry — 7-day TTL keeps storage lean; rolling window of fresh intelligence
id: item MD5 hash
data: "{supplier} ({category}): {title}. {reason}"
metadata: supplier, category, urgency, date
model: BAAI/bge-large-en-v1.5 · 1024-dim
Text → embedding on write — Upstash hosts the model; no OpenAI key needed
Topic queries — "chip export controls" returns ASML + NVIDIA + Applied Materials without naming them
10,000 vectors free — cosine similarity, EU region, zero config
Crawler → Signal Detection (Claude Haiku)
→ Redis write (key-value)
→ Vector upsert (embed text)
→ Both databases updated in one store_item() call
RAG — Semantic Search Across All Suppliers
Retrieval-Augmented Generation: retrieve relevant items by meaning, not by company name.
Before RAG — keyword lookup
"What does Hermes have on NVIDIA?"
Returns NVIDIA-specific items only.
Fails for: "what's happening with chip supply?", "export control signals", "AI compute capacity" — no company name, no results.
After RAG — semantic retrieval
"What are chip suppliers signaling about export controls?"
Returns relevant items from ASML, NVIDIA, Applied Materials, KLA, TSMC — based on semantic similarity, not name matching.
User never mentioned any of these companies.
💬
User query
Natural language topic or theme
→
🔢
Embed query
Upstash Vector embeds query text with BAAI model
→
🔍
Vector search
top-K by cosine similarity across all stored items
→
📦
Redis fetch
Retrieve full item JSON by ID from Redis
→
🤖
LLM synthesis
Claude formats results into a natural response
"any signals about supply chain disruptions this week?"
"what are cloud providers saying about pricing?"
"AI compute capacity news across all suppliers"
Uniqueness Demonstration
Same topic. Two approaches. The difference is live data, two databases, and semantic retrieval.
| Dimension |
Generic ChatGPT |
Hermes + Icarus |
| Data freshness |
Training cutoff — no live data |
RSS 6h · EDGAR daily · Tavily weekly · 18 industry feeds |
| Supplier coverage |
Generic industry knowledge |
590 companies, 17 categories, per-supplier signal history |
| Query type |
Keyword search or name lookup only |
RAG: topic/theme queries across all suppliers semantically |
| Databases |
None — stateless per-session |
Redis (exact lookup) + Vector (semantic search) — always on |
| Agent interaction |
Single model, single context |
Icarus (master) ↔ Hermes (sub-agent) via authenticated HTTP API |
| Cost |
$0 + hours of manual research |
~$7/month total — monitoring + RAG runs 24/7 |
What's live today
Live — Hermes FastAPI on Railway, 7 endpoints, API key auth
Live — RSS · EDGAR · Tavily + 18 industry feeds
Live — Upstash Redis + Upstash Vector (RAG)
Live — 5 Hermes tools in Icarus Telegram bot
Live — Miro board builder (landscape + signals)
Cost breakdown
Railway hosting — ~$5
Claude Haiku (signals) — ~$1–2
Upstash Redis + Vector — $0
Tavily + EDGAR + RSS — $0
Total — ~$7 / month