Dexter is an autonomous financial research agent that thinks, plans, and learns as it works. It performs analysis using task planning, self-reflection, and real-time market data. Think Claude Code, but built specifically for financial research.
- 👋 Overview
- 📚 Documentation
- ✅ Prerequisites
- 💻 How to Install
- 🚀 How to Run
- 📊 How to Evaluate
- 🐛 How to Debug
- 📱 How to Use with WhatsApp
- 🤝 How to Contribute
- 📄 License
Dexter takes complex financial questions and turns them into clear, step-by-step research plans. It runs those tasks using live market data, checks its own work, and refines the results until it has a confident, data-backed answer.
Key Capabilities:
- Intelligent Task Planning: Automatically decomposes complex queries into structured research steps
- Autonomous Execution: Selects and executes the right tools to gather financial, web, file, and automation data
- Self-Validation: Checks its own work and iterates until tasks are complete
- Persistent Memory and Skills: Supports reusable
SKILL.mdworkflows and long-term memory - Automation and Gateway Support: Can run heartbeat checks, scheduled jobs, and WhatsApp delivery flows
Dexter now includes a full Chinese documentation set covering onboarding, daily usage, automation, architecture, and contributor workflows.
- Chinese docs hub: docs/cn/README.md
- Learning paths: docs/cn/learning-paths.md
- Architecture overview: docs/cn/architecture/system-architecture.md
- Glossary: docs/cn/reference/glossary.md
Recommended entry point:
- New users: start with docs/cn/getting-started/quickstart.md
- Advanced users: read docs/cn/capabilities/models-and-tools.md
- Contributors: read docs/cn/development/development-and-evals.md
- Bun runtime (v1.0 or higher)
- One supported LLM API key:
- OpenAI (default)
- Anthropic
- xAI
- Moonshot
- DeepSeek
- OpenRouter
- or a local Ollama model
- Financial Datasets API key (get here) for financial research
- One web search provider key:
- Exa (preferred)
- Perplexity
- Tavily
If you don't have Bun installed, you can install it using curl:
macOS/Linux:
curl -fsSL https://bun.com/install | bashWindows:
powershell -c "irm bun.sh/install.ps1|iex"After installation, restart your terminal and verify Bun is installed:
bun --version- Clone the repository:
git clone https://github.com/virattt/dexter.git
cd dexter- Install dependencies with Bun:
bun install- Set up your environment variables:
# Copy the example environment file
cp env.example .env
# Edit .env and add your API keys (if using cloud providers)
# OPENAI_API_KEY=your-openai-api-key
# ANTHROPIC_API_KEY=your-anthropic-api-key (optional)
# GOOGLE_API_KEY=your-google-api-key (optional)
# XAI_API_KEY=your-xai-api-key (optional)
# MOONSHOT_API_KEY=your-moonshot-api-key (optional)
# DEEPSEEK_API_KEY=your-deepseek-api-key (optional)
# OPENROUTER_API_KEY=your-openrouter-api-key (optional)
# Institutional-grade market data for agents; AAPL, NVDA, MSFT are free
# FINANCIAL_DATASETS_API_KEY=your-financial-datasets-api-key
# (Optional) If using Ollama locally
# OLLAMA_BASE_URL=http://127.0.0.1:11434
# Web Search (Exa preferred, Perplexity fallback, Tavily fallback)
# EXASEARCH_API_KEY=your-exa-api-key
# PERPLEXITY_API_KEY=your-perplexity-api-key
# TAVILY_API_KEY=your-tavily-api-key
# Optional: X / Twitter public search
# X_BEARER_TOKEN=your-x-bearer-tokenRun Dexter in interactive mode:
bun run startOr with watch mode for development:
bun run devDexter includes an evaluation suite that tests the agent against a dataset of financial questions. Evals use LangSmith for tracking and an LLM-as-judge approach for scoring correctness.
Run on all questions:
bun run src/evals/run.tsRun on a random sample of data:
bun run src/evals/run.ts --sample 10The eval runner displays a real-time UI showing progress, current question, and running accuracy statistics. Results are logged to LangSmith for analysis.
Dexter is no longer just a single interactive CLI loop. The current codebase also includes:
- Persistent memory in
.dexter/memory/ SKILL.mddiscovery and execution- WhatsApp gateway support
- Heartbeat monitoring backed by
.dexter/HEARTBEAT.md - Scheduled jobs with the
crontool - Local filesystem tools for agent-assisted editing flows
Dexter logs all tool calls to a scratchpad file for debugging and history tracking. Each query creates a new JSONL file in .dexter/scratchpad/.
Scratchpad location:
.dexter/scratchpad/
├── 2026-01-30-111400_9a8f10723f79.jsonl
├── 2026-01-30-143022_a1b2c3d4e5f6.jsonl
└── ...
Each file contains newline-delimited JSON entries tracking:
- init: The original query
- tool_result: Each tool call with arguments and raw result
- thinking: Agent reasoning steps
Example scratchpad entry:
{"type":"tool_result","timestamp":"2026-01-30T11:14:05.123Z","toolName":"get_financials","args":{"query":"Compare Apple and Microsoft revenue growth over the last 5 years"},"result":{"data":{...},"sourceUrls":["https://financialdatasets.ai/..."]}}This makes it easy to inspect exactly what data the agent gathered during a run.
Chat with Dexter through WhatsApp by linking your phone to the gateway. Messages you send to yourself are processed by Dexter and responses are sent back to the same chat.
Quick start:
# Link your WhatsApp account (scan QR code)
bun run gateway:login
# Start the gateway
bun run gatewayThen open WhatsApp, go to your own chat (message yourself), and ask Dexter a question.
For detailed setup instructions, configuration options, and troubleshooting, see the WhatsApp Gateway README.
- Fork the repository
- Create a feature branch
- Commit your changes
- Push to the branch
- Create a Pull Request
Important: Please keep your pull requests small and focused. This will make it easier to review and merge.
This project is licensed under the MIT License.