I studied materials, where metals don't break all at once: they give way one row of atoms at a time. I build software the same way, in small verified steps.
- Building CommerceAgent, a self-hosted Claude Code workbench reachable from the browser and seven messaging channels.
- Building 康养日记, a WeChat Mini Program that keeps elderly patients on their medication schedule and tells their family when they fall off it.
- Building Growth OS, a self-hosted personal growth workbench that keeps focus time, study plans, workouts, meditation, expenses, and the daily review in one place.
- Exploring agent systems, MCP apps, developer tooling, and self-hosted software. Open to thoughtful collaboration on useful open-source projects.
Projects I started and maintain myself, the work I would want you to read first.
CommerceAgent, 面向电商场景的智能运营工作台
A self-hosted, multi-user, agent-first Claude Code workbench: one agent, workspace, and automation set, reachable from the browser and seven messaging channels.
- Wraps the Claude Agent SDK for TypeScript into a long-running service shared across Feishu, Telegram, QQ, DingTalk, WeChat, Discord, and WhatsApp.
- Tasks execute on the host or inside Docker sandboxes, with an explicit ACL matrix and CI on every push.
- Desktop builds bundle the backend, the web UI, and a Node runtime into a single Electron app, so installing it needs neither Node nor a database.
康养日记, medication care for elderly patients
Scheduled reminders, automatic missed-dose records, and a family alert after three missed doses in a row.
- Two scheduled cloud functions carry the whole reminder pipeline, a 5-minute reminder pass and a 10-minute missed-dose pass. Each is idempotent through its own log collection, so a retry never double-notifies a family.
- The "three missed doses in a row" streak is computed over a total order (business time, then
create_time, then_id), so the verdict cannot flip with the database's return order. - Timezone-safe by construction: the cloud runs on UTC and the client derives "today" in Asia/Shanghai, so the task list and the reminders cannot disagree by a day.
- Every query is owner-scoped and paged past the platform caps (100 documents per cloud query, 20 per client query); the naive version quietly read other patients' plans and truncated at 100 records.
- Ships a dependency-free suite:
node tests/regression.test.jsruns 11 invariants across three timezones, and each one goes red if the corresponding fix is reverted.
Growth OS, 个人成长工作台
Focus timer, study plan, workouts, meditation, bookkeeping, and the daily review in one self-hosted app, stored in SQLite.
- A study planner built on the LeetCode Hot 100 with spaced repetition, a daily quota of new problems, and a progress forecast.
- Multi-account by isolation: every account's personal data lives in its own SQLite file; only the opt-in "一起" pairing between two named accounts shares a database.
- The daily review records mood, energy, sleep, wins, and open problems, with an optional AI review against any OpenAI-compatible endpoint, kept off by default and server-side only.
- Self-hosts with Docker Compose and Caddy (IP or domain mode), with daily automatic backups that keep the latest 14; ships unit tests and Playwright end-to-end tests.
Every upstream project that has merged one of my pull requests, whatever its size, refreshed automatically. Individual pull requests are not listed here.
| Project | ★ | Language | Merged |
|---|---|---|---|
bytedance/deer-flow |
84.2k | 9 | |
crewAIInc/crewAI |
59.9k | 1 | |
agno-agi/agno |
42.8k | 1 | |
PrefectHQ/fastmcp |
28.1k | 2 | |
deepset-ai/haystack |
26.8k | 1 | |
TencentCloud/Octop |
10.3k | 8 | |
VRSEN/agency-swarm |
4.6k | 1 | |
apache/burr |
2.6k | 1 | |
llm-d/llm-d-inference-sim |
216 | 1 |
Merges only; every upstream project that merged a pull request is listed, whatever its size. Checked automatically by .github/workflows/refresh.yml; last change 2026-10-19 23:57 UTC.
Generated daily from my contribution graph by .github/workflows/snake.yml. Artwork above is built by design/build.py.
If one of my projects is useful to you, a star or issue is always appreciated.


