Personal Lab

What I build when nobody's paying me to.

Hermes — a self-hosted agent

$ hermes take "update the portfolio"

plan → edit → self-check → report

⏸ gate: human review before deploy

# it maintains this very site

Hermes Agent — Nous Research's open-source framework — running bare in WSL2 on my home server since May 2026, reachable through Telegram and WhatsApp gateways. Memory is layered: SOUL.md / MEMORY.md / USER.md carry identity and standing law (a fact must survive a 7-day admission test to get in), while Mnemosyne — vector memory on SQLite + embeddings — holds 3,700+ entries and counting for on-demand recall. 73 skills and 7 cron jobs do real work: a daily news brief, pre-market trading levels, a nightly memory digest, weekly memory consolidation, a monthly self-audit — and it built and maintains this very site. Same rule as at work: the agent does the miles, a human owns the gate.

73 skills 3.7k+ memories 7 cron jobs running since May 2026
  • Nous Hermes
  • Mnemosyne memory
  • Telegram + WhatsApp
  • 7 cron jobs

Scalp analyzer

A live US-stock scalping analyzer in Python, run against a local Moomoo OpenD instance with yfinance as the fallback feed. It pulls 1m/5m/15m candles, computes EMA/MACD/RSI and session-anchored VWAP with pandas + ta, and checks seven classic setups — opening-range breakout, VWAP bounce, bull flag — with a confluence checklist and a 0–10 safety score that penalizes lunch chop and fading momentum. Wired up as a Claude Code skill, so "check NVDA" returns an entry/target/stop card. The pipeline is deliberately linear — feed → candles → checks → score → card — so when a reading looks wrong there is exactly one stage to inspect. Analysis only — every order is placed by hand.

  • Python
  • pandas + ta
  • Moomoo OpenD
  • yfinance fallback
  • Claude Code Skill

Stock sentry

My biggest personal build: an AI trading assistant living in Telegram — python-telegram-bot at the front, the OpenAI API behind a multi-agent pipeline — analyzer, technical analyst, strategy generator, backtester, final decision — with Finnhub and yfinance for market data, a Streamlit backoffice, deployed on Zeabur. The agents run as a fixed chain — each one's output is the next one's input — so a verdict is traceable back through the backtest, strategy and analysis stages that produced it. Strategies live in a JSON skill library: the orchestrator matches them to market conditions, ranks them by tracked performance, and feeds trade outcomes back in. Every answer is forced into a tight format: verdict, entry, target, stop, one reason. About 8k lines of Python.

  • python-telegram-bot
  • OpenAI API
  • Finnhub
  • Streamlit · Zeabur

AI home server

No longer a blueprint — a Minisforum UM890 Pro (Ryzen 9 8945HS, 32GB) now runs 24/7 in my living room: Windows 11 with WSL2 Ubuntu, Hermes installed bare-metal inside, plus a FastAPI trading server and a static daily-news page. Access is Tailscale-only — zero open ports, with a Windows portproxy bridging into WSL. The honest lesson: local models were the plan, and they lost — Ollama running Qwen 2.5 7B and Llama 3.1 8B couldn't keep up with multi-round tool calling on CPU-only inference, so a tiered router now sends routine work to budget cloud models and reserves a heavyweight for deep reasoning. The security model survived contact intact: sandboxed agent, outbound allowlist, low-privilege accounts per service, and a green/yellow/red delegation table — banking credentials stay red, forever.

  • UM890 · WSL2
  • Tailscale-only
  • Ollama → tiered cloud
  • 24/7 since May 2026

Personal financial planning system

A bilingual (EN / 中文) financial-planning app I built this year to run my own numbers: long-term financial projections at three lifestyle levels, mortgage-acceleration math, portfolio allocation with ten-year projections, and a cash & position tracker. Everything persists in localStorage with JSON export — no accounts, no server. Vanilla JavaScript, no framework — a tool for one user should stay simple enough to maintain in one evening.

  • Vanilla JS
  • Tailwind
  • i18n