A command-line FX rate tracker with alerting, built entirely by an AI agent from a written specification.
FinFlow fetches live exchange rates, stores them locally, and alerts you when a rate crosses a threshold you define. It was generated, tested, and delivered to this repository without a human writing a single line of application code.
- Fetches live exchange rates from frankfurter.app (European Central Bank data, no API key required)
- Stores each rate with a timestamp in a local SQLite database
- Alerts you in the terminal when a rate breaches a defined threshold
- Displays historical rates for any tracked currency pair
- Runs entirely from the command line
finflow/
├── finflow.py # CLI entry point
├── fetcher.py # API calls to frankfurter.app
├── storage.py # SQLite read/write
├── alerts.py # Threshold checking and alert output
├── config.py # Currency pairs and thresholds
├── tests/
│ ├── __init__.py
│ └── test_finflow.py # Full pytest test suite
└── requirements.txt
Requires Python 3.12.
git clone https://github.com/davidetfabbrica/finagent.git
cd finagent/finflow
pip install -r requirements.txtFetch and store the current GBP/USD rate:
python finflow.py fetch --pair GBP/USDSet an alert threshold:
python finflow.py alert --pair GBP/USD --below 1.25View stored history for a pair:
python finflow.py history --pair GBP/USDpytest tests/ -vAll tests run offline. API calls are mocked using unittest.mock so no network connection is required.
FinFlow was not written by hand. It was generated by an agentic Python script (agent.py) that:
- Read a Product Requirements Document (PRD) describing the software
- Called the Claude API and received the complete codebase in response
- Wrote the files to disk and ran pytest automatically
- Sent any test failures back to Claude for correction and retried
- Once all tests passed, committed the code, pushed a branch, and opened this Pull Request
The agent ran the full loop without human intervention between steps 1 and 5.
frankfurter.app — open, free, no authentication required. Backed by the European Central Bank's published exchange rate data.
MIT