TIP
Schwierigkeit: ★★☆☆☆ | Dauer: 15 Minuten | Ertrag: Beherrschung der Bereitstellung eines lokalen Finanzforschungs-Agents, Verständnis von Tool-Aufrufen und DCF-Skill-Erweiterungsmechanismen
Einführung
Dexter ist ein autonomer Finanzforschungs-Agent, der im Terminal läuft. Sie stellen ihm eine komplexe Frage, und er zerlegt die Aufgabe automatisch, ruft mehrere Datentools auf und verifiziert die Ergebnisse kreuzweise, bis er eine datengestützte Schlussfolgerung liefert – als hätten Sie einen unermüdlichen Senior-Analysten an Ihrer Seite.
Seine Kernkompetenzen umfassen:
- SEC-Dokumentenanalyse: Automatisches Abrufen von Offenlegungsdokumenten wie 10-K, 10-Q, 8-K usw.
- Echtzeit-Marktabfrage: Aktienkurse, Finanzkennzahlen, Cashflow, Bilanzen.
- DCF-Intrinsische Wertermittlung: Integrierter, durch SKILL.md gesteuerter DCF-Skill zur eigenständigen Durchführung von Discounted Cashflow-Berechnungen.
- Selbstverifizierungsschleife: Überprüfung der eigenen Zwischenergebnisse und Iteration, bis die Schlussfolgerung schlüssig ist.
- Loop-Schutz: Integrierte Schrittbegrenzung, um ein unkontrolliertes Verhalten des Agents zu verhindern.
Das gesamte Projekt ist in TypeScript geschrieben. Der Kern besteht aus LangChain + Ink (React für CLI) und läuft in einer Bun 1.0+ Umgebung. Wenn Sie diese Funktionen kostengünstiger nutzen möchten, können Sie den LLM-Anbieter auf Defapi umstellen, wo die API-Preise nur etwa die Hälfte der offiziellen Gebühren betragen.
Zielgruppenprofil
- Entwickler mit 1–5 Jahren Erfahrung, die ein grundlegendes Verständnis von KI-Agent-Architekturen (Tool Calling, Agentic Loop) haben.
- Unabhängige Investoren oder Fintech-Experten, die KI-Tools zur Unterstützung der Fundamentalanalyse nutzen möchten.
- Ingenieure, die wissen wollen, wie man mehrere Datenquellen (SEC, Financial Datasets, Exa) in realen Projekten integriert.
- Nutzer mit Interesse an quantitativer Finanzforschung, die eine lokale Forschungs-Pipeline aufbauen möchten.
Kernabhängigkeiten und Umgebung
| Abhängigkeit | Beschreibung | Bezugsquelle |
|---|---|---|
| Bun 1.0+ | JavaScript/TypeScript Laufzeitumgebung | bun.sh |
| Financial Datasets API Key | Marktdaten auf Institutionsebene (einige Aktien kostenlos) | financialdatasets.ai |
| OpenAI API Key | Standard-LLM-Anbieter | platform.openai.com |
| Exa API Key | Websuche (optional, Tavily als Backup) | exa.ai |
| Defapi API Key | Kostensenkung für OpenAI (optional) | defapi.org |
WARNING
Die Daten für AAPL, NVDA und MSFT bei Financial Datasets sind kostenlos, für andere Aktien ist ein Abonnement erforderlich. Es wird empfohlen, den Prozess zunächst mit den kostenlosen Werten zu verifizieren.
Vollständige Projektstruktur
dexter/
├── .dexter/
│ └── settings.json # Agent-Konfiguration (Modell-/Anbieterwahl)
├── src/
│ ├── agent/ # Agent-Kern: Loop-Logik, Prompts, Scratchpad
│ │ ├── agent.ts # Agentic Loop Hauptschleife
│ │ ├── prompts.ts # System-Prompts
│ │ └── scratchpad.ts # Historie der Tool-Aufrufe
│ ├── cli.tsx # Ink/React CLI Rendering-Einstiegspunkt
│ ├── index.tsx # Programm-Einstiegspunkt
│ ├── components/ # CLI UI Komponenten (Ink)
│ ├── hooks/ # React Hooks (AgentRunner, ModelSelector)
│ ├── model/
│ │ └── llm.ts # LLM-Abstraktionsschicht für mehrere Anbieter
│ ├── tools/
│ │ ├── registry.ts # Tool-Register
│ │ ├── finance/ # Finanz-Tools: Kurse, Finanzen, Berichte, Insiderhandel
│ │ ├── search/ # Websuch-Tools (Exa / Tavily)
│ │ ├── browser/ # Playwright Browser-Automatisierung
│ │ └── descriptions/ # Tool-Beschreibungen (für System-Prompts)
│ ├── skills/ # SKILL.md Skill-Verzeichnis
│ │ └── dcf/
│ │ └── SKILL.md # Skill zur DCF-Wertermittlung
│ ├── evals/ # LangSmith Evaluierungs-Framework
│ └── utils/ # Umgebungsvariablen, Konfiguration, Cache
├── scripts/
│ └── release.sh
├── .env # API-Keys (gitignored)
└── package.json
Schritt-für-Schritt-Anleitung
Schritt 1: Bun installieren und Projekt klonen
Falls Bun noch nicht auf Ihrem System installiert ist, installieren Sie es zuerst. Funktioniert auf Windows/macOS/Linux:
# macOS / Linux
curl -fsSL https://bun.com/install | bash
# Windows
powershell -c "irm bun.sh/install.ps1|iex"
Installation verifizieren:
bun --version
# Ausgabe ähnlich wie: Bun v1.2.x
Anschließend das Dexter-Repository klonen:
git clone https://github.com/virattt/dexter.git
cd dexter
Schritt 2: .env Umgebungsvariablen konfigurieren
Kopieren Sie die Vorlage für die Umgebungsvariablen:
cp env.example .env
Öffnen Sie .env mit einem Editor und tragen Sie Ihre Keys ein. Besonderer Hinweis zur Defapi-Anbindung – wenn Sie Defapi anstelle von OpenAI nutzen möchten (50 % Ersparnis), konfigurieren Sie es wie folgt:
# .env
# ── LLM-Anbieter ──────────────────────────────────────
# Option A: Direkt über OpenAI (Standard)
OPENAI_API_KEY=sk-ihr-openai-key
# Option B: Über Defapi zu OpenAI (empfohlen, 50 % Ersparnis)
# OPENAI_API_KEY=sk-ihr-defapi-key
# OPENAI_BASE_URL=https://api.defapi.com/v1
# Weitere optionale LLM-Anbieter
ANTHROPIC_API_KEY=sk-ant-ihr-anthropic-key
GOOGLE_API_KEY=ihr-google-key
XAI_API_KEY=ihr-xai-key
OPENROUTER_API_KEY=ihr-openrouter-key
# Lokale Modelle (OLLAMA)
OLLAMA_BASE_URL=http://127.0.0.1:11434
# ── Finanzdaten ───────────────────────────────────────
# Marktdaten auf Institutionsebene, AAPL/NVDA/MSFT kostenlos
FINANCIAL_DATASETS_API_KEY=ihr-financial-datasets-key
# ── Websuche ───────────────────────────────────────
# Exa bevorzugt, Tavily als Backup
EXASEARCH_API_KEY=ihr-exa-key
TAVILY_API_KEY=ihr-tavily-key
TIP
Alle Modelle von Defapi sind mit den Schnittstellen v1/chat/completions und v1/messages kompatibel. Bei Dexter ist keine Code-Änderung erforderlich; ersetzen Sie einfach den OPENAI_API_KEY durch den Defapi-Key und setzen Sie die OPENAI_BASE_URL auf https://api.defapi.com/v1.
Abhängigkeiten installieren:
bun install
Schritt 3: Dexter im interaktiven Modus ausführen
Starten Sie die interaktive CLI:
bun start
Sie sehen im Terminal eine farbige, auf Ink basierende Oberfläche. Geben Sie direkt Ihre Finanzfrage ein, zum Beispiel:
Wie hat sich der Umsatz von AAPL in den letzten 5 Jahren entwickelt? Was ist der aktuelle intrinsische DCF-Wert?
Dexter beginnt automatisch mit der Arbeit: Aufgabe zerlegen → Finanzdaten abrufen → SEC-Filings lesen → DCF-Skill ausführen → Fazit zusammenfassen. Jede Runde der Tool-Aufrufe wird in Echtzeit auf der Oberfläche angezeigt.
Falls Sie den Code während des Debuggens ändern möchten, nutzen Sie den Watch-Modus:
bun dev
Schritt 4: Modell / Anbieter wechseln
Innerhalb der CLI können Sie mit dem Befehl /model den LLM-Anbieter und das Modell wechseln. Dexter unterstützt die automatische Erkennung durch folgende Präfixe:
| Präfix | Anbieter | Beispielmodell |
|---|---|---|
| Kein Präfix | OpenAI (Standard) | gpt-5.4 |
claude- | Anthropic | claude-sonnet-4-7 |
gemini- | gemini-2.5-pro | |
ollama: | Ollama (lokal) | ollama:qwen2.5 |
deepseek: | DeepSeek | deepseek-chat |
Zum Beispiel Wechsel zu Claude:
/model claude-sonnet-4-7
TIP
Wenn Sie Defapi angebunden haben, verwenden Sie einfach das Standardmodell gpt-5.4. Der Datenverkehr wird automatisch über Defapi weitergeleitet, ohne das offizielle OpenAI-Kontingent zu verbrauchen.
Schritt 5: Finanz-Tools zur Aktienabfrage nutzen
Das Herzstück von Dexter ist das financial_search Tool, das Ihre Frage automatisch an das am besten geeignete Unter-Tool delegiert. Hier sind einige typische Abfragebeispiele:
Umsatz und Gewinn abfragen:
Zeig mir Umsatz, Nettogewinn und freien Cashflow von TSLA für die letzten 3 Jahre.
Dexter ruft get_income_statements (Gewinn- und Verlustrechnung) und get_cash_flow_statements (Cashflow-Rechnung) auf und bereitet die Ergebnisse tabellarisch auf.
Bilanz abfragen:
Wie hoch ist die aktuelle Eigenkapitalquote von NVDA? Wie viel Cash und Äquivalente sind vorhanden?
SEC-Filings lesen:
Hilf mir, den Abschnitt "Risk Factors" im neuesten 10-K von AAPL zu lesen.
Dexter nutzt das read_filings Tool, um den Inhalt des 10-K abzurufen und zum entsprechenden Abschnitt zu springen.
Insiderhandel prüfen:
Wie sahen die Insider-Transaktionen bei FAANG-Aktien im letzten Quartal aus?
Alle Rohdaten der Tool-Aufrufe werden im Verzeichnis .dexter/scratchpad/ in JSONL-Dateien protokolliert, was eine nachträgliche Überprüfung ermöglicht.
Schritt 6: DCF-Bewertungs-Skill auslösen
Die DCF-Bewertung (Discounted Cashflow) ist einer der integrierten Skills von Dexter. Wenn Ihre Frage "intrinsischer Wert" oder "Bewertung" enthält, lädt der Agent automatisch über das skill Tool die Datei src/skills/dcf/SKILL.md und führt folgende Schritte aus:
- Abruf des historischen freien Cashflows (FCF) des Unternehmens.
- Schätzung der Wachstumsraten für die nächsten 5–10 Jahre.
- Berechnung der gewichteten durchschnittlichen Kapitalkosten (WACC).
- Abzinsung auf den aktuellen Zeitpunkt.
- Ausgabe der finalen Bewertungsspanne + Sensitivitätsanalyse.
Beispielabfrage:
Was ist der intrinsische DCF-Wert von MSFT? Bitte gib Ergebnisse für konservative, Basis- und optimistische Annahmen an.
WARNING
Die DCF-Ausgabe stellt eine Referenzspanne dar, keine Anlageberatung. Dexter kennzeichnet das Konfidenzniveau jeder Annahme deutlich, was seiner Designphilosophie entspricht: Keine falsche Gewissheit vorspiegeln und Unsicherheiten offenlegen.
Schritt 7: Debugging und Scratchpad-Logs einsehen
Jede Abfrage in Dexter generiert eine JSONL-Datei in .dexter/scratchpad/ mit folgendem Namensformat:
YYYY-MM-DD-HHMMSS_<session_id>.jsonl
Jede Zeile ist ein strukturierter Datensatz:
{"type":"init","timestamp":"2026-03-27T10:00:00.000Z","query":"Was ist der intrinsische DCF-Wert von AAPL?"}
{"type":"tool_start","timestamp":"2026-03-27T10:00:01.000Z","toolName":"get_cash_flow_statements","args":{"ticker":"AAPL","period":"annual","limit":5}}
{"type":"tool_result","timestamp":"2026-03-27T10:00:03.000Z","toolName":"get_cash_flow_statements","result":{"freeCashFlow":[67800000000, 73000000000, ...]},"llmSummary":"Der freie Cashflow von AAPL ist in den letzten 5 Jahren stetig gewachsen, mit einer durchschnittlichen Rate von ca. 9,2 %."}
{"type":"thinking","timestamp":"2026-03-27T10:00:05.000Z","content":"FCF-Daten erhalten, benötige nun Analystenschätzungen für Wachstum und WACC-Parameter..."}
Wenn ein Tool-Aufruf fehlerhaft erscheint, können Sie das Problem direkt in dieser Datei lokalisieren. Alternativ nutzen Sie jq für eine schnelle Filterung:
# Nur Tool-Ergebnisse anzeigen
cat .dexter/scratchpad/2026-03-27-*.jsonl | jq 'select(.type == "tool_result")'
# Den Denkprozess des Agents anzeigen
cat .dexter/scratchpad/2026-03-27-*.jsonl | jq 'select(.type == "thinking")'
Fehlerbehebung (FAQ)
1. Fehlermeldung OPENAI_API_KEY not found
Dies ist der häufigste Fehler. Überprüfen Sie, ob die .env-Datei existiert und der Pfad korrekt ist:
ls -la .env
Stellen Sie sicher, dass entweder OPENAI_API_KEY=... oder die Kombination aus OPENAI_API_KEY + OPENAI_BASE_URL enthalten ist. Bei Nutzung von Defapi müssen beide vorhanden sein.
2. Finanzdaten liefern leere Ergebnisse
Die kostenlosen Daten von Financial Datasets sind auf AAPL, NVDA und MSFT begrenzt. Bei anderen Aktien werden leere Ergebnisse geliefert. Sie können:
- Ihren Abonnement-Status auf financialdatasets.ai prüfen.
- Sicherstellen, dass der
FINANCIAL_DATASETS_API_KEYkorrekt in der.enveingetragen ist.
3. Zeitüberschreitung (Timeout) beim Modellaufruf
Die Standard-Timeouts für Anthropic und Google APIs liegen bei 60 Sekunden. Bei instabilen Verbindungen können Sie in src/model/llm.ts die Parameter maxAttempts und die Wartezeit für Wiederholungsversuche anpassen. Für eine dauerhafte Nutzung wird die Anbindung über Defapi empfohlen, da diese über optimierte Routen stabiler läuft.
4. Agent in einer Endlosschleife
Dexter verfügt über einen Schutzmechanismus maxIterations (Standard: 10 Schritte). Wenn eine Aufgabe mehr Schritte benötigt, können Sie diesen Parameter in src/agent/agent.ts anpassen. Wenn die Schritte aufgebraucht sind, gibt der Agent das aktuelle Zwischenfazit als Endergebnis aus, anstatt endlos weiterzulaufen.
5. Unvollständige Daten bei Tool-Aufrufen
Der Parameter limit bei Financial Datasets steuert die Anzahl der zurückgegebenen Jahre (Standard oft nur 1 Jahr). Sie können Dexter anweisen, explizit limit=5 oder limit=10 zu verwenden.
6. Scratchpad-Dateien sind leer oder werden nicht generiert
Das Scratchpad wird von src/agent/scratchpad.ts verwaltet. Wenn die Umgebungsvariable SKIP_SCRATCHPAD=true gesetzt ist, werden keine Dateien geschrieben. Stellen Sie sicher, dass diese Variable nicht in der .env aktiv ist. Beachten Sie, dass für jede neue Abfrage eine neue Datei erstellt wird.
Weiterführende Themen / Fortgeschrittene Richtungen
WhatsApp-Anbindung als mobiler Forschungsassistent
Dexter unterstützt den Nachrichtenempfang über ein WhatsApp-Gateway. Sofern Ihr Handy und Dexter im selben Netzwerk sind:
# WhatsApp-Account per QR-Code koppeln
bun run gateway:login
# Gateway starten
bun run gateway
Schicken Sie sich dann selbst eine Nachricht auf WhatsApp, und Dexter wird antworten. So können Sie unterwegs aktuelle Finanzdaten abfragen.
Details finden Sie unter src/gateway/channels/whatsapp/README.md.
Evaluierungs-Suite zur Überprüfung der Genauigkeit
Dexter enthält ein LangSmith-gestütztes Evaluierungs-Framework:
# Alle Testfragen evaluieren
bun run src/evals/run.ts
# 10 zufällige Fragen testen
bun run src/evals/run.ts --sample 10
Die Bewertung erfolgt nach dem Prinzip "LLM-as-Judge", die Ergebnisse werden ins LangSmith Dashboard hochgeladen. Wenn Sie Änderungen an Berechnungslogiken vornehmen, können Sie so die Qualität sichern.
Nutzung lokaler Modelle mit Ollama
Wenn Sie völlig unabhängig von externen APIs agieren möchten:
# Ollama starten (muss vorinstalliert sein)
ollama serve
# In .env konfigurieren
OLLAMA_BASE_URL=http://127.0.0.1:11434
Wechseln Sie dann in der CLI zu ollama:qwen2.5 oder einem anderen Modell. Hinweis: Lokale Modelle rufen Tools oft weniger stabil auf als GPT-5.4 oder Claude Sonnet. Empfohlen für Szenarien mit Fokus auf Latenz und Kosten.
Neue Skills mit eigenen SKILL.md-Dateien erstellen
Skills werden in Dexter über SKILL.md definiert. Jeder Skill enthält YAML-Frontmatter (Name, Beschreibung) und Anweisungen im Markdown-Format. So erstellen Sie einen neuen Skill:
- Neues Verzeichnis unter
src/skills/anlegen, z. B.src/skills/dupont/. SKILL.mdschreiben:
---
name: dupont-analysis
description: DuPont-Analyse - Zerlegung der Eigenkapitalrendite (ROE) in Nettomarge, Kapitalumschlag und Hebel.
---
# DuPont-Analyse Skill
Du bist ein Finanzanalyst. Bitte führe für den Ticker folgende Schritte aus:
1. Rufe Nettogewinn, Umsatz, Gesamtvermögen und Eigenkapital ab.
2. Berechne die drei Komponenten:
- Nettomarge = Nettogewinn / Umsatz
- Kapitalumschlag = Umsatz / Gesamtvermögen
- Eigenkapitalmultiplikator = Gesamtvermögen / Eigenkapital
3. Berechne ROE = Produkt der drei Komponenten.
4. Vergleiche mit dem Branchendurchschnitt und gib eine Bewertung (1-10) ab.
- Dexter neu starten; der neue Skill wird automatisch erkannt und in den System-Prompt injiziert.
API-Kosten senken mit Defapi
Bei intensiver Nutzung (automatisches Monitoring, Berichterstellung) sind API-Kosten ein Faktor. Über Defapi lassen sich diese um ca. 50 % reduzieren:
# .env
OPENAI_API_KEY=ihr-defapi-api-key
OPENAI_BASE_URL=https://api.defapi.com/v1
Da Defapi mit allen v1/chat/completions Schnittstellen kompatibel ist, muss am Code von Dexter nichts geändert werden.