Signal Forge is a lightweight web app for researching stocks and crypto with:
- free market-data integrations for stocks and digital assets
- a multi-analyst debate panel that argues the bull, bear, and quant case
- an optional AI counsel mode with 2 to 5 web-enabled agents, rotating models, and a visible discussion log
- ranked ideas for a quarter, six months, and one year
- direct analysis of a ticker, company name, coin, or token symbol
- an explicit "why this is recommended" explanation for every analysis
- Python 3.13+
- standard-library HTTP server
- static HTML, CSS, and vanilla JavaScript frontend
- free market data from Yahoo Finance and CoinGecko
- optional OpenAI-compatible chat endpoint for LLM-backed debate and AI counsel
stock_analyser/app.py: entrypointstock_analyser/server.py: web server and JSON API routesstock_analyser/providers.py: free data-provider integrationsstock_analyser/analysis.py: scoring, horizon ranking, and recommendation explanationsstock_analyser/debate.py: rules-based and optional LLM-backed debate orchestrationstatic/index.html: web interfacestatic/styles.css: UI stylingstatic/app.js: client-side interactions
- Create and activate a virtual environment:
python3 -m venv .venv
source .venv/bin/activate- Install project requirements:
python -m pip install --upgrade pip
python -m pip install -r requirements.txt- Copy the sample environment file:
cp .env.example .env- Optional: add
OPENAI_API_KEYandOPENAI_MODELto.envif you want real LLM-backed analyst debate.
Optional AI counsel configuration:
OPENAI_API_KEY=...
OPENAI_MODEL=gpt-4.1-mini
OPENAI_COUNSEL_MODELS=gpt-5,gpt-5-mini,gpt-4.1-mini
OPENAI_COUNSEL_MAX_MEMBERS=5
OPENAI_COUNSEL_TIMEOUT_SECONDS=90The standard debate uses OPENAI_MODEL. The optional AI counsel can reuse that model or randomly draw from the comma-separated OPENAI_COUNSEL_MODELS pool. OPENAI_COUNSEL_TIMEOUT_SECONDS gives the web-enabled counsel extra time for slower search-heavy runs. The UI keeps AI counsel off by default and lets you pick 2 to 5 agents when you enable it.
- Start the app:
python -m stock_analyser.app- Open:
http://127.0.0.1:8000
GET /api/healthGET /api/lookup?query=MSFT&assetType=autoPOST /api/analyzeGET /api/suggestions?assetType=stockGET /api/suggestions?assetType=crypto
Example analyze payload:
{
"query": "MSFT",
"assetType": "stock",
"horizon": "quarter",
"aiCounselEnabled": true,
"counselMembers": 4
}- Stock lookups and charts use free Yahoo Finance endpoints.
- Crypto lookups and analytics use CoinGecko.
- The stock fundamentals feed is intentionally lightweight because the app prefers free, low-friction sources over paid APIs.
- The AI counsel path calls the OpenAI Responses API with web search enabled, so it is slower and more expensive than the standard debate.
requirements.txtis intentionally minimal right now because the app runs on the standard library.- This app is for research support and education, not personal financial advice.
Run the small offline test suite with:
python -m unittest discover -s tests