Projects

36 projects

To open a live page, go to Sites.

AI Agents & Orchestration

Dispatch

A voice console for running several coding agents at once. The problem it solves is narrow: past three or four parallel agents, the human becomes the bottleneck, because every step wants a glance. Dispatch lets the agents carry the work forward and stop only where a real decision is needed. The hard part isn't the model. It's keeping a dozen parallel agents from wrecking the same repository, which takes branch protection, required checks, a merge queue and CODEOWNERS underneath, plus a conflict triage step: anything mechanical gets merged automatically, anything that touches design intent goes to a person. All 24 integration tests pass.

Tower

Named after a control tower: the planes fly themselves, the tower only issues clearance. It sits upstream of Dispatch and decides which agent gets which job and how much authority it carries. An R×A routing model does the assignment, a workflow spec lets agents advance on their own, and every judgment call is appended to a replayable decision log.

Hermes

The deploy end of Dispatch. Releases aren't pushed by CI; a poke over SSH tells the server to go pull the build from GitHub Releases itself. Running it twice does the same thing as running it once, and a new version lands by flipping a symlink after a health check, so a bad build just leaves the old one serving. Every result is written back to the GitHub Deployments ledger.

Claude Cockpit

AI coding CLIs live in a terminal, which makes going back through old sessions miserable. Cockpit takes the CLI over and puts it behind a web UI: browsable sessions, chat rendered as Markdown, a real embedded terminal when you need one, and SSH for remote boxes. Resuming a session goes through the stream-json streaming protocol. It binds to localhost and listens nowhere else.

LooperAgent

A multi-step reasoning system I wrote in eleventh grade, on top of GLM-4. The idea was to stop the model from answering in one breath: it proposes one step, an independent verifier judges it and hands back a correction hint, and the loop runs until things converge. I wired in iFLYTEK speech recognition and ByteDance TTS to make it fully voice-driven, and added a Markov chain that estimates emotional state transitions from the conversation history so it sounds less flat. The multi-agent part was built on OpenAI Swarm. Everything I've done with agents since started here.

Persona Engine

Another high-school project, this one trying to pull characters out of full-length novels. An LLM reads the text incrementally and keeps revising each character's personality tags; those persona memories are embedded with GLM Embedding into a 1024-dimensional Zilliz store, so a line of dialogue starts by retrieving similar memories. Emotional state is a random walk over the persona representation, via a Markov chain and MCMC. It didn't work especially well, but treating personality as retrievable, updatable state is an idea I've kept using.

Philosophers' Arena

Five AI agents, each locked to one philosophical position: rationalism, existentialism, idealism, materialism, skepticism. Every agent keeps its own memory of beliefs, experiences and relationships, and those shift as the debate runs. A metacognition layer lets them assess what they just said, with recursive introspection configurable up to five levels, and output is parsed as structured XML. I built it in high school for fun, but that introspection layer is where the verifier in Verdict came from.

Automation & RPA

Mobile GUI Agent

A GUI agent driving a real Android handset over adb and scrcpy. No private APIs and no injected protocol packets, which is why it still works on apps like WeChat that have shut down accessibility access. Almost every problem turned out to be a perception problem: scrolling has to be slow or frames get dropped, every tap has to be preceded by recognizing which screen you're actually on rather than trusting stored coordinates, and startup has to heal itself back to a known anchor screen from whatever state the phone was left in. Two production lines run on it now, Moments archiving and RedNote collection.

WeChat Export

In October 2025 the popular decrypt-the-database exporters were pulled offline over compliance. I wanted a route that would still stand up, so I wrote one: a native Swift menu-bar app for macOS that captures with ScreenCaptureKit, scrolls on its own, de-duplicates, and writes out JSONL, CSV or TXT. It never touches the encrypted database, never reads process memory and never goes online. The cost is that it's slow, and you can't minimize the window while it runs.

RedNote Growth Line

A line that runs from collection to finished post: search and harvest notes on a real phone, extract and analyze them, then compose drafts across six layout skeletons and six palettes. There's a numeric-attribution gate in the middle, aimed at the two failures that actually happened: a claim pointing the opposite way from the data, and a number that appears nowhere in the source.

Campus Wall

Automated Moments publishing for campus community accounts. Submissions get pooled, laid out and rendered once, then derived per account so a few dozen accounts don't all post an identical image, and pushed out on a daily batch schedule.

CampusNote Ops

An internal workbench for a RedNote account matrix aimed at incoming university freshmen. What the operators need daily is narrow: which school an account belongs to, what role it plays, and how far along today's posting is. So the main screen is one table filtered on exactly those three, with batch generation, publishing review and acquisition numbers hanging off it.

bili

A Bilibili downloader and creator auto-follow tool, yt-dlp and ffmpeg underneath, paste-a-link web UI on top. Two things cost me time: getting a creator's full catalogue means going through the most-played tab, and the response has to be intercepted as text rather than JSON. The rate limiting is intermittent, and there's no way around it other than retrying.

meshgate

A self-hosted multi-egress gateway. A small box sits behind your own home broadband and joins a pool of your own exit nodes, so upstream traffic leaves through several genuine residential lines instead of one. It exists to serve the publishing side of the phone farm. The scope is written into the README and stays there: self-use, or licensing the technology to a licensed operator. No crowdsourced bandwidth network, and no paying individuals for their connections.

hkmail

My university mailbox refuses ordinary IMAP clients, and I didn't want to open the webmail every time. So it authenticates with OAuth2 XOAUTH2 using Thunderbird's client id and the ROPC flow, caches the refresh token, and now sends, searches and reads mail straight from the command line.

HKUST(GZ) Faculty Directory

I built this to find an advisor: profiles for all 435 faculty at HKUST(GZ), turned into a searchable directory, plus a match report across seven research directions. 260 of the Scholar profiles were verified by cross-checking official pages against personal sites; where no reliable match existed I left it blank rather than guess. Google's rate limiting came down to rotating proxy nodes. Switching networks did nothing.

View Project →

Deck Factory

A deck production line that treats slides as web pages: a 17-page HTML template system, headless screenshots, then pixel-faithful assembly into PPTX. The detour exists because I wanted two things at once, hand-tuned editorial typography and output that stays reproducible and data-driven. The craft was reverse-engineered from one hand-made consulting report and then industrialized. The first batch shipped complete decks for eight products at an AI company.

Unattended Newsroom

The news section of a software company's corporate site, running with no human between the source and production: multi-source ingestion, a staged LLM layer that selects, briefs, translates and scrubs compliance-sensitive terms, then automatic generation and publication of detail pages and indexes. Built during my AI trainee stint at Juzi Interactive, so the site would keep accumulating content that search engines and AI assistants can find and cite.

Quant & Finance

Verdict

It started as a question about the people who post market opinions all day: how often do they turn out to be right? A crawler pulls around 6,000 posts a day from X and Xueqiu, an LLM extracts falsifiable positions from them (instrument, condition, horizon, and a position missing any of the three doesn't count), and those positions settle automatically against market data into a calibration profile for each author. The production database currently holds 150,000+ raw posts, 33,000+ extracted positions and 3,400+ settled verdicts. At that size real patterns show up, including self-reported confidence running inverse to actual hit rate.

View Project →

PerpetualQuant

It goes from an academic paper to a runnable strategy without a person in the middle. Three agents split the work: one sweeps arXiv and Semantic Scholar and ranks papers on six dimensions, keeping the top 10%; one reads the factor definitions out of a paper into a structured spec; one turns that spec into strategy code and runs it through a single backtest engine across crypto, A-shares and US equities in parallel, with a quality gate that drops whatever doesn't clear it. Two days of continuous running processed 900+ papers and validated 70+ strategies. The best was a cross-sectional momentum strategy, Sharpe 2.57 across markets.

freqtrade-stable

An OKX perpetuals setup built on Freqtrade: 15+ custom strategies (CTA momentum, MA diff, sniper, KAMA, ClucHAnix and others), the FreqAI adaptive prediction module, Hyperopt parameter search, full backtests, and day-to-day management through a Telegram bot.

Research & Evaluation

GEO-Scope

When someone asks an AI a question, does a given brand come up at all, and how? There's no standard way to answer that yet. GEO-Scope proposes one that's reproducible: organic mention rate, sentiment score, query-level mindshare, intent slices, and four terminal outcomes. Client-facing evaluation reports have shipped on it. Alongside it runs a post-training line I built myself. SFT and RFT are working (+9.6% on the key metric), DPO was cut after a controlled experiment showed it wasn't helping, and the GRPO code is written and waiting on GPUs.

Capability Engineering

The question sitting underneath most of my other projects: how does AI capability actually get acquired and retained by a person or an organization? I'm modeling it as a resource-metabolism system, with a five-stage pipeline, the KPARI metric set and active hit rate as the measures. The related-work map is still being assembled and the paper is in progress.

Streaming ASR

Choosing the architecture for the voice front end of the dispatch console. I compared the AED, LLM-ASR and transducer families for streaming, and concluded that transducers fit streaming and parallel decoding natively. Training hooks now run on Kyutai's delayed-streams-modeling; next is transferring Fun-ASR's Chinese capability across and fine-tuning in the DSM style. I took this route because I didn't want to build one more wrapper around somebody else's API.

Knowledge Engineering Report Library

Knowledge engineering has fifty years of accumulated method behind it, and I wanted to know how much of it still applies. The approach is to read and write up one topic at a time. There are 13 reports so far, 56 concrete extension points pulled out of them, and measured baselines to check against. The bar is deliberately strict: a literature summary doesn't count, it has to be something I can point at while changing Lode's code.

Multi-Agent Campus Arbitration

My research project during Beijing's reserve-talent program, supervised by Prof. Lu Yu, Associate Dean of the Faculty of Artificial Intelligence at Beijing Normal University, designed and built alone and written up as a paper. Hygiene arbitration involves several parties negotiating, so I used chain-of-thought to build a four-role multi-agent discussion framework that simulates it. Retrieval over past cases runs on LangChain and ChatGLM-4, with Embedding-3 vectors in Milvus surfacing similar precedents. I hand-labeled 317 examples to LoRA-fine-tune ChatGLM-4 9B for generating the arbitration report itself. The arbitration group put it into daily use.

Products & Tools

On-device Live Captioning

The live captions at my university's launch event kept mangling campus-specific names, so I pulled the speech input layer out of Dispatch and spent an afternoon and an evening turning it into a tool for exactly that situation. The screen renders in two passes: raw recognition appears within a second, then an LLM works through the speaker's uploaded script and replaces each segment in place, so the audience never waits on anything. The script doubles as a hotword list and, through 2-gram matching, tells the system where in the talk the speaker currently is. VAD adapts to the noise floor of an actual hall. Measured on the university's own vocabulary under hall noise, character error rate was 5.8%, dropping to zero once the host's script was loaded. It ships as two double-clickable macOS apps, a control console and a transparent always-on-top caption window. Recognition runs entirely on the machine (Fun-ASR-Nano on MLX) and the audio never leaves it.

Lode

A knowledge tool built so that every conclusion the AI hands you can be traced back to the sentence it came from. Plenty of products in this space claim attribution and most of it stops at the claim. What I care about is the measured extraction coverage, because that number decides whether the attribution actually holds. It isn't high enough yet, and it's the main thing blocking the product right now.

Dance Factory

An automated production line for AI dance video, split into three layers (asset generation, video synthesis, post-production) with a web workbench on top. The image generation layer is a swappable provider interface, so changing models doesn't mean changing code. A wallpaper sub-line rides on the same pipeline and deliberately shoots empty scenes with no people in them, which avoids portrait-rights problems entirely.

View Project →

KZJ AI Study Assistant

The first product of the company I co-founded in my final year of high school, where I'm CEO. It's for students in Sino-foreign joint programs, whose courseware is in English and whose problems are concrete: they can't follow the lectures, concepts don't connect across sessions, and they don't know what to practice before an exam. The product works off their actual courseware to handle those three. Five days from nothing to a working demo, positive cash flow within two months, distribution grown through campus events and word of mouth. The team itself runs AI-native: know-how, experiment logs, code and docs are all structured as context an agent can read.

View Project →

clipkit

The existing editing skill is a well-written prompt: it explains how to cut, but apart from a script that makes folders it executes almost nothing. clipkit supplies the execution layer, on the rule that anything a computer can judge right or wrong is taken away from the model. The first closed loop passed frame-level acceptance 12 out of 12. What became clear while building it is that the bottleneck is the design of the intermediate representation, not the model.

imagen

A local text-to-image station. Prompt in, image out, saved to outputs/ automatically. Providers and keys are set from the web admin rather than in code. No dependencies beyond the Python standard library.

roommate-match

A login-free, shareable, abuse-resistant roommate matching site. It doubles as a test of Dispatch: the whole thing was built from me talking, one continuous stretch of speech with background noise, slips and self-corrections in it, which the system judged, accumulated into a spec, and shipped.

View Project →

LooperFlow

An English vocabulary platform I built in high school, on the premise that the articles have to be worth reading in the first place. A collection pipeline turns serious journalism into a structured corpus, an LLM extracts key vocabulary with definitions through XML-structured prompts, and spaced repetition (0–5 familiarity scoring with scheduled review) pushes up to 20 words a day. There's a chat assistant for speaking practice. Flask and SQLAlchemy.

Election Lottery

The draw system used on stage for my high school's 27th and 28th student council elections. Grouping uses a Fisher–Yates shuffle so fairness can be checked afterwards, and the rounds alternate with live Q&A. The reveal is a 229-person ASCII art panel where @/#/= characters get replaced by real names, one every 50 milliseconds on the big screen, with the whole hall watching them surface. Next.js 14 and Framer Motion.

CyberSchedule

A study-management SPA I built for myself in high school, cyberpunk dark theme: calendar scheduling, a pomodoro timer, recurring task generation, a template library, journaling, Recharts dashboards, and an AI assistant whose output is parsed from XML. Multi-user auth and per-user data isolation are done entirely on localStorage, across 20-plus custom components. Next.js 15 and React 19.