ferret
工欲善其事必先利其器论语 · 卫灵公

FERRETGEEK · 开源作品集FERRETGEEK · OPEN-SOURCE PORTFOLIO

ferret

为真实需求,造趁手之器Well-made tools for real needs.

专注 AI 应用、自动化服务与桌面 / 移动端开发,重视可恢复、可验证、边界清晰的工程实现。AI applications, automation services, and desktop & mobile software — built to recover, verify, and respect boundaries.

  • AI 应用AI apps
  • 自动化服务Automation
  • 桌面与移动端Desktop & mobile
  • 本地优先Local-first

代表作品Selected WorksSELECTED WORKS代表作品

六个项目,覆盖服务运维、性能评测、授权维护、本地数据、移动媒体与路线求解。每个都写清楚:做了什么、怎样实现、为什么这样设计。Six projects across service operations, performance measurement, authorization upkeep, local data, mobile media, and route solving — each told as what it does, how it works, and why it is built that way.

CPA-X 界面截图CPA-X 界面截图
01AI 与开发工具AI & Dev Tools

CPA-XCPA-XAI 接口服务管理AI service management

github.com/ferretgeek/cliproxyapi-dashboard

为自行部署的 CLIProxyAPI 提供网页管理:服务状态、请求日志与历史用量一目了然;在 Linux / systemd 下可完成带校验与回滚的升级。A web console for self-hosted CLIProxyAPI: service status, request logs, and usage history at a glance, plus verified, rollback-safe upgrades on Linux / systemd.

设计考虑Why进程启动不等于服务可用。把“更新成功”建立在接口验证上,并为失败准备恢复路径。A running process is not necessarily a working service. Verify the real endpoint before reporting success, and keep a way back when it fails.

  • 升级经 SHA-256 校验与原子替换,失败自动回滚SHA-256 checks and atomic replacement, with rollback on failure
  • 重启后调用带认证的管理接口,确认服务可用An upgrade succeeds only when the authenticated API answers
  • 日志增量解析,每轮扫描设字节与时间预算Incremental log parsing with per-scan byte and time budgets
  • Python
  • Flask
  • JavaScript
  • systemd
  • Docker

源码部署:Linux 安装脚本注册 systemd 服务;Windows 脚本与 Docker 仅用于监控查看Deploy from source: Linux script with systemd; Windows script and Docker for monitoring only

大模型接口测速 界面截图
02AI 与开发工具AI & Dev Tools

大模型接口测速LLM API Benchmark

github.com/ferretgeek/llm-api-benchmark

用统一口径比较模型接口:锁定场景逐条请求,分别记录首字延迟、输出速度与 Token 用量,并换算估算成本。Compares model APIs on equal terms: fixed scenarios, one request at a time, with time to first text, output speed, token usage, and estimated cost kept apart.

设计考虑Why不把并发吞吐当成单请求速度,也不把估算当成账单,让结果有明确口径、便于复测。Concurrent throughput is not single-request speed, and an estimate is not a bill. Explicit rules make results easy to read and reproduce.

  • 单流逐条测量,不把并发吞吐当成单请求速度Single-stream runs; concurrent throughput is never called speed
  • 预热计入用量,但不进入正式速度样本Warm-ups count toward usage but stay out of speed samples
  • 完整 usage 与中断估算分开记录并标注Complete usage and interrupted estimates are kept apart
  • Python
  • FastAPI
  • WebSocket
  • Streaming
  • Docker

源码运行:Windows 一键脚本、本地 Python 或 Docker;在线演示使用模拟数据Run from source via Windows script, Python, or Docker; the online demo uses simulated data

Outlook 授权维护 界面截图
03邮件与账号Mail & Accounts

Outlook 授权维护Outlook Token Keeper

github.com/ferretgeek/outlook-token-keeper

集中维护已授权的 Outlook 邮箱:定时刷新令牌、只读检查连接,并记录需要人工处理的异常;不读取邮件正文,也不保存密码。Keeps authorized Outlook mailboxes healthy: scheduled token refresh, read-only connection checks, and a clear list of what needs attention. No message bodies, no passwords.

设计考虑Why批量操作不依赖网页一直开着;敏感字段不仅要加密,还要校验它属于哪个账号,防止密文被错位替换。Batch work should not depend on an open browser tab. Encryption should also prove which account a secret belongs to, rejecting ciphertext moved elsewhere.

  • Web 与后台 Worker 分离,批量任务不依赖网页Web app and background Worker run separately
  • 任务进度存入 PostgreSQL,单 Worker 重启续跑Jobs persist in PostgreSQL; a single Worker resumes on restart
  • 凭据以 AES-256-GCM 加密并绑定账号与字段AES-256-GCM credentials bound to their account and field
  • Python
  • FastAPI
  • PostgreSQL
  • SQLAlchemy
  • OAuth 2.0
  • Docker

自行部署:Docker Compose(Web + Worker + PostgreSQL)或 Ubuntu systemd;在线演示为合成数据Self-host with Docker Compose (Web + Worker + PostgreSQL) or systemd; the demo uses synthetic data

提示词手账 界面截图
04AI 与开发工具AI & Dev Tools

提示词手账Prompt Journal

github.com/ferretgeek/prompt-journal

按项目和轮次记录与 AI 协作的提示词,自动保存、搜索、导出与备份;没有账号、云同步和遥测,数据只在自己的电脑上。Records AI prompts by project and revision, with autosave, search, export, and backups. No accounts, cloud sync, or telemetry: the data stays on your computer.

设计考虑Why自动保存之外,还要处理同时修改、意外退出和数据迁移,减少静默覆盖与数据丢失的风险。Autosave is only part of persistence. Concurrent edits, crashes, and data migration need explicit handling to reduce silent overwrites and loss.

  • React 界面配合 Rust / Tauri 2 本地逻辑React interface backed by Rust application logic on Tauri 2
  • SQLite WAL 与事务,版本检查识别编辑冲突SQLite WAL, transactions, and revision checks for edit conflicts
  • 原子写入、关闭保护与恢复流程,降低丢失风险Atomic writes, close protection, and recovery reduce data loss
  • TypeScript
  • React
  • Rust
  • Tauri 2
  • SQLite

仅提供源码:需在 Windows 10 / 11 上用 Node.js 22、pnpm 10、Rust 与 Tauri 2 自行构建Source only: build on Windows 10/11 with Node.js 22, pnpm 10, Rust, and Tauri 2

Windows · Desktop查看仓库Repository
局域网视频播放器 界面截图
05影音与网络Media & Network

局域网视频播放器LAN Video Player

github.com/ferretgeek/android-smb-player

手机和平板通过 SMB 直接浏览、播放电脑或 NAS 上的影片,支持字幕、续播与观看记录;无需拷贝,也无需转码服务。Browse and play videos from a PC or NAS over SMB on phones and tablets, with subtitles, resume, and watch history. No copying, no transcoding server.

设计考虑Why将网络读取、播放控制和本地数据管理拆开,应对不同媒体格式与使用环境,而不只是播放一个示例视频。Network access, playback control, and local data are kept apart to cope with varied formats and conditions, not just a sample video.

  • 基于 smbj 访问 SMB 2/3 共享,电脑端无需伴生服务SMB 2/3 access via smbj, with no companion service on the PC
  • Media3 为主内核,无法解码时自动回退 libVLCMedia3 by default, falling back to libVLC when it cannot decode
  • 共享凭据在设备端加密保存,日志输出前脱敏Share credentials encrypted on device; logs redacted before output
  • Kotlin
  • Jetpack Compose
  • Media3
  • libVLC
  • SMB
  • Room

仅提供源码:需用 JDK 21 与 Android SDK 自行构建 APK,暂无签名安装包Source only: build the APK yourself with JDK 21 and the Android SDK; no signed APK yet

帕鲁配种规划 界面截图
06幻兽帕鲁Palworld

帕鲁配种规划Palworld Breeding Planner

github.com/ferretgeek/palworld-breeding-atlas

选定目标帕鲁,从手上已有的帕鲁出发,比较不同配种路线的步骤与需要补充的帕鲁;也可只读解析存档辅助规划。Pick a target Pal and compare breeding routes from the ones you already own, steps and missing Pals side by side, with optional read-only save parsing.

设计考虑Why把静态配方查询推进为带约束的路线规划,同时处理数据来源、异常输入和算法验证。Moves beyond static recipe lookup to constrained planning, while handling data provenance, malformed input, and algorithm checks.

  • 四种策略求解路线,兼顾库存与亲本性别约束Four route strategies under inventory and parent-gender limits
  • 存档只读解析,输入与各层解压体积先设上限Read-only save parsing with input and decompression caps
  • 求解器可由 Node.js 独立运行回归测试Solver regression tests run standalone on Node.js
  • Python
  • JavaScript
  • Web Worker
  • Tkinter

仅提供源码:Windows 11 + Python 3.10+ 本机运行,或把存档发布为自托管静态站点Source only: run on Windows 11 with Python 3.10+, or publish a self-hosted static site

作品索引More WorksMORE WORKS作品索引

其余十二个开源项目,按用途分类。点开卡片即可前往仓库,查看安装与使用说明。Twelve more open-source projects, grouped by purpose. Each card opens the repository with setup and usage notes.

obsidian-ai-writerObsidian DesktopObsidian Desktop

Obsidian 写作助手Obsidian AI Writer

参考所选笔记写作,修改先预览差异、确认后写回;基于 grok-obsidian 衍生开发。Writes with your chosen notes as context; edits are diff-previewed and confirmed. Derived from grok-obsidian.

TypeScript · Obsidian API · esbuild
codex-quota-widgetWindows 10/11 x64Windows 10/11 x64

Codex 额度悬浮窗Codex Quota Widget

在 Windows 桌面悬浮显示 Codex 剩余额度与重置时间A Windows overlay for remaining Codex quota and reset time

C# · WPF · .NET 4.8
codex-quota-overviewWindows · WebWindows · Web

Codex 多账号额度Codex Quota Overview

导入多个 Codex 登录文件,在一张表中查看额度Check quota for many Codex sign-in files in one table, then export CSV

Go · React · TypeScript · Vite
cliproxyapi-credential-checkWindows · Linux · WebWindows · Linux · Web

凭据状态检查Credential Check

汇总 CLIProxyAPI 账号凭据状态,可选检查可用性与额度Review CLIProxyAPI credential status, with optional health and quota probes

Python · JavaScript · Docker
domain-mail-inboxLinux · WebLinux · Web

域名收件服务Domain Mail Inbox

用自己的域名收信,在网页中读信、取验证码和附件Receive-only mail for your own domains, with a web inbox for codes and files

Python · SMTP · SQLite · systemd
outlook-batch-inboxWindows · Linux · WebWindows · Linux · Web

Outlook 批量收件Outlook Batch Inbox

在一个页面查看最多 50 个已授权 Outlook 邮箱的新邮件Recent mail and verification codes from up to 50 authorized Outlook mailboxes

Python · IMAP · JavaScript · Docker
imap-pickup-links跨平台 · WebCross-platform · Web

邮件取件链接IMAP Pickup Links

为邮箱收件地址生成可单独撤销的网页取件链接Revocable web links for viewing recent mail from an existing mailbox

Python · IMAP · SQLite · systemd
icloud-code-finder跨平台 · WebCross-platform · Web

iCloud 验证码检索iCloud Code Finder

从 iCloud 近期邮件中找出验证码,可按时间和收件地址筛选Find verification codes in recent iCloud mail, filtered by time and recipient

Python · IMAP · JavaScript
hide-my-email-manager跨平台 · WebCross-platform · Web

隐藏邮件地址管理Hide My Email Manager

整理已创建的 Apple 隐藏邮件地址:标签、备注、搜索与导出Organize existing Hide My Email addresses with labels, notes, and search

Python · SQLite · JavaScript · Docker
email-alias-generatorBrowser · WebBrowser · Web

邮箱标签地址生成Email Alias Generator

在浏览器本地批量生成带标签的收件地址并导出Generate tagged plus-address lists locally in the browser and export them

JavaScript · HTML · Python · Docker
proxy-uptime-monitorLinux · Windows · WebLinux · Windows · Web

代理节点监测Proxy Uptime Monitor

检查代理节点能否真正打开目标网站,并定位失败环节Check whether proxy nodes actually reach target sites, and where they fail

Python · FastAPI · sing-box · SQLite
palworld-server-panelLinux · WebLinux · Web

帕鲁服务器面板Palworld Server Panel

在网页中管理已搭建的帕鲁服务器:状态、设置、备份与更新Manage an existing Linux Palworld server: status, settings, backups, updates

Python · JavaScript · SQLite · systemd

工程理念PrinciplesPRINCIPLES工程理念

比起堆叠功能,我更在意功能背后的工程问题:AI 的表现如何客观衡量?后台任务中断后怎样继续?升级失败后如何恢复?敏感数据应该放在哪里?Beyond adding features, I care about the engineering questions behind them: How should AI performance be measured? How can interrupted jobs resume? What happens when an upgrade fails? Where should sensitive data live?

为失败设计Design for failure

健康检查、事务、任务续跑与备份恢复,让异常始终有路可退。Health checks, transactions, resumable jobs, and backups give every failure a way back.

边界清晰Clear boundaries

凭据加密、日志脱敏、只读访问与写入确认,数据去向说得清。Encrypted secrets, redacted logs, read-only access, and confirmed writes keep data flows explainable.

交付可验证Verifiable delivery

类型检查、回归测试与 CI,配齐部署和恢复说明,结果可复核。Type checks, regression tests, and CI, with deployment and recovery notes anyone can follow.

语言Languages
PythonTypeScriptJavaScriptKotlinRustGoC#
客户端Clients
ReactTauri 2Jetpack ComposeWPFMedia3libVLC
服务端Services
FastAPIFlaskWebSocketOAuth 2.0IMAPSMTP
数据与运维Data & Ops
SQLitePostgreSQLDockersystemd

足迹ActivityACTIVITY足迹

数据来自 GitHub 公开信息,由 GitHub Actions 每日自动更新。Public GitHub data, refreshed daily by GitHub Actions.

墨迹Ink trail近一年的每日贡献Daily contributions, past year 清Less焦More

语言Languages按代码量统计By code size

    来信ContactCONTACT来信

    有问题、建议或合作想法,都欢迎写信。Questions, suggestions, or ideas for working together are all welcome.

    邮箱 · EMAILEMAIL · 邮箱

    ferretgeek@vip.qq.com

    欢迎来信交流实现细节、反馈问题,或者聊聊合作;也可以在对应仓库的 Issues 留言。Happy to talk implementation details, feedback, or collaboration — or open an issue on the relevant repository.

    写一封信Write to me