Transform CoinHunter from an over-engineered auto-trading system into a lightweight data-layer CLI paired with the coinbuddy AI Skill. Key changes: - Remove non-core commands: backtest, strategy, opportunity dataset/evaluate/optimize - Add scan: rule-based market screening (zero token cost) - Add analyze: multi-timeframe technical analysis for AI consumption - Add watch: lightweight portfolio anomaly monitoring (zero token cost) - Remove services: backtest, dataset, evaluation, research, strategy - Add analyze_service with RSI, key levels, alerts, and AI-friendly summaries - Add watch_portfolio with drawdown/spike/concentration/technical triggers - Simplify config: remove research/dataset settings, add watch thresholds - Update TUI rendering for analyze and watch outputs - Update tests and CLAUDE.md for new architecture Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
5.5 KiB
5.5 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Development commands
- Install (dev):
pip install -e ".[dev]"orconda env create -f environment.yml && conda activate coinhunter - Run CLI locally:
python -m coinhunter --help - Run tests:
pytestorpython -m pytest tests/ - Run single test file:
pytest tests/test_cli.py -v - Lint:
ruff check src tests - Format:
ruff format src tests - Type-check:
mypy src
Architecture
CoinHunter is a lightweight data-layer CLI designed to pair with the coinbuddy AI Skill for crypto trading on Binance. The philosophy is layered screening: the CLI handles cheap rule-based filtering and monitoring, while the AI Skill handles expensive deep analysis on a small set of curated candidates.
CLI layer (data + execution)
src/coinhunter/cli.py— Single entrypoint (main()). Usesargparseto parse commands and directly dispatches to service functions. Core commands:init,config,account,market,buy,sell,portfolio,scan,analyze,watch,upgrade,catlog,completion.src/coinhunter/services/— Domain logic:account_service.py— balances, positionsmarket_service.py— tickers, klines, scan universe, symbol normalizationsignal_service.py— shared market signal scoring (rule-based, zero token cost)portfolio_service.py— held-position review (analyze_portfolio) and lightweight anomaly monitoring (watch_portfolio)trade_service.py— spot order execution onlyopportunity_service.py— market scanning (scan_opportunities) returning top-N candidatesanalyze_service.py— multi-timeframe deep technical analysis for AI consumption
src/coinhunter/binance/spot_client.py— Thin wrapper aroundbinance.spot.Spot. Normalizes request errors intoRuntimeError.src/coinhunter/config.py—load_config(),get_binance_credentials(),ensure_init_files().src/coinhunter/runtime.py—RuntimePaths,get_runtime_paths(),print_json(), TUI rendering.src/coinhunter/audit.py— Writes JSONL audit events to dated files.
AI layer (decision)
coinbuddySkill — Lives at~/.claude/skills/coinbuddy/SKILL.md. Governs how the AI interacts with the CLI:- Discovery flow:
scan→analyze→ AI synthesis → user confirm →trade - Portfolio flow:
watch→ flag NEED_REVIEW →analyze→ AI synthesis → user confirm →trade - The Skill always uses
--agentfor structured JSON consumption.
- Discovery flow:
Runtime and environment
User data lives in ~/.coinhunter/ by default (override with COINHUNTER_HOME):
config.toml— runtime, binance, trading, signal, opportunity, portfolio, and watch settings.env—BINANCE_API_KEYandBINANCE_API_SECRETlogs/audit_YYYYMMDD.jsonl— structured audit loglogs/dry-run/audit_YYYYMMDD.jsonl— dry-run audit log
Run coinhunter init to generate the config and env templates.
Key conventions
- Symbol normalization:
market_service.normalize_symbol()strips/,-,_, and uppercases the symbol. CLI inputs likeETH/USDT,eth-usdt, andETHUSDTare all normalized toETHUSDT. - Dry-run behavior: Trade commands support
--dry-run. If omitted, the default falls back totrading.dry_run_defaultinconfig.toml. - Client injection: Service functions accept
spot_clientas a keyword argument for easy unit testing with mocks. - Error handling:
spot_client.pycatchesrequests.exceptions.SSLErrorandRequestExceptionand re-raises as human-readableRuntimeError. The CLI catches all exceptions inmain()and printserror: {message}to stderr with exit code 1. - Ticker API fallback:
spot_client.ticker_stats()usesrolling_window_tickerfor symbol-specific queries andticker_24hrfor full-market scans (no symbols). - Output modes: All commands support
--agentfor JSON output and--docto print the command's output schema. - Watch rules:
portfolio_service.watch_portfolio()monitors held positions for anomalies (1h/24h drawdowns, spikes, concentration risk, technical score deterioration). This is pure rule-based and costs zero tokens. - Analyze design:
analyze_service.analyze_symbols()fetches multi-timeframe klines (1h, 4h, 1d) and produces an AI-friendly output withsummary,timeframes,key_levels,alerts, andsignal_score. It is designed for LLM consumption.
CLI command reference
| Command | Purpose | Token cost |
|---|---|---|
coin scan |
Rule-based market scan, returns top-N candidates | 0 |
coin analyze <sym> |
Multi-timeframe deep technical analysis | 0 |
coin watch |
Portfolio anomaly monitoring | 0 |
coin portfolio |
Full portfolio scoring | 0 |
coin account |
Balances | 0 |
coin buy/sell |
Trade execution | 0 |
Testing
Tests live in tests/ and use unittest.TestCase with unittest.mock.patch. The test suite covers CLI parser smoke tests, config loading, service logic with mocked clients, and trade execution paths.
Notes
AGENTS.mdin this repo is stale and describes a prior V1 architecture (commands/, smart executor, precheck, review engine). Do not rely on it.- Removed in the V2 simplification:
backtest,strategy,opportunity dataset/evaluate/optimize,research_service(CoinGecko). These were over-engineered for the AI-assisted trading flow and have been archived out of the core codebase.