Verne in GitHub

用 Harbor 搭建私有 Docker Registry:从安装到日常使用的完整实践

我维护过几个跑在自己服务器上的小项目,构建出来的 [[Docker]] 镜像最早都是直接推到 [[Docker Hub]] 上的。用了一段时间之后开始觉得别扭:一些只在内网跑的服务镜像,没必要也不应该传到公开的仓库;Docker Hub 对匿名拉取做了限流之后,CI 流水线偶尔会因为触发了速率限制而失败;再加上想给不同的项目、不同的同事分配不同的访问权限时,公共仓库这套体系根本满足不了。折腾到后来我意识到,是时候在自己的机器上搭一个真正能用的私有镜像仓库了。 最朴素的做法当然是直接跑官方的 registry:2 镜像,几行命令就能起一个 [[Docke Read more ...


用 New API 打造个人 AI 网关:统一管理所有大语言模型接口

这段时间我同时用着好几个大语言模型服务:日常写作和代码靠 [[Claude]],轻量任务交给 [[Codex]],搜索增强用 [[Antigravity]],还有几个本地跑着 [[Ollama]] 的小模型供离线场景使用。每个平台各自的 API Key 散落在项目环境变量里,月底要去好几个后台分别对账,想横向对比两个模型的输出还得打开不同的网页或客户端来回切换,很费事。 用这种方式折腾了一段时间之后,我开始认真找一个能统一管理这些 API 的工具。最终落在了 [[New API]] 上,用下来解决了不少痛点,今天把使用心得记录一下。 什么是 Ne Read more ...

2026-06-09 ai , llm , api , new-api , open-source

Claude Code 的 Dynamic Workflows 让模型自己写编排脚本

最近 Anthropic 在五月底悄无声息地往 [[Claude Code]] 里塞了一个挺颠覆的功能,名字叫 Dynamic Workflows。我一开始没太当回事,以为又是某种新的 subagent 包装层,毕竟过去一年里这类”让多 agent 协同工作”的概念已经被各种框架翻来覆去地讲过。直到我看到 Bun 团队用它把整套代码从 [[Zig]] 移植到 [[Rust]] 的案例,11 天写了大约 75 万行代码,测试通过率 99.8%,才意识到这次的设计思路和之前的”agent 团队”完全不是一回事。 写这篇文章主要是把我这几天读官方文档、刷各种 Read more ...


Surfingkeys:比 Vimium 更强大的浏览器键盘控制扩展

最早接触 [[Vimium]] 是在学习 Vim 编辑器之后,那种能用键盘完全控制浏览器的感觉确实让人着迷。不用频繁移手到鼠标,链接跳转、页面滚动、标签切换全用键盘搞定,效率提升的体验是实实在在的。用了几年 Vimium 之后,我开始接触到 [[Surfingkeys]],起初以为不过是另一个同类扩展,但深入用下来才发现这两者的差距远比我想象的大。 为什么要用键盘控制浏览器 对于长期使用 [[Vim]] 的人来说,键盘操作的肌肉记忆已经根深蒂固。在编辑器里习惯了 hjkl 导航,切换到浏览器还要去抓鼠标总觉得很割裂。更重要的是,对于程序员、研究者 Read more ...


Denote 介绍 Emacs 下基于文件名的笔记系统

最近在 GitHub 上闲逛的时候,我发现了 [[李继刚]] 整理的一批 [[Claude Skills]],出于好奇就 clone 下来翻了翻仓库。打开目录一眼扫过去,几乎所有 Skill 输出的文档文件名都长得很特别,大致是这样的形式: 20260527162000==z--投资分析-ajinomoto-2802。这种带着长串数字时间戳、夹杂 == 和 – 分隔符的写法,一眼看上去既不像我熟悉的 [[Jekyll]] 那种 YYYY-MM-DD-title.md,也不像 [[Obsidian]] 里常见的中文标题直接做文件名,反而有种”工程化”过头的 Read more ...


Ghostty 和 xterm-ghostty 是什么

最近我在 macOS 上重新整理终端工具链的时候,又一次认真看了 [[Ghostty]]。很多人第一次接触 Ghostty,会先被它的界面、速度或者作者背景吸引,但只要打开 Shell 跑一个 echo $TERM,很快就会看到一个更陌生的名字:xterm-ghostty。这个名字看起来像是传统 xterm 的变种,实际上它背后代表的是 Ghostty 对终端兼容性的一整套设计思路。很多人把它当成一个无关紧要的环境变量,但如果你经常使用 [[SSH]]、[[tmux]]、[[Vim]]、[[Neovim]]、[[less]] 或者各种 TUI 工具,理解 Read more ...


终端开发的新范式:从 Gemini CLI 到 Antigravity CLI

终端智能体的新旅程 作为一个长期泡在终端里的开发者,我的工作流几乎完全是由命令行和各类快捷键支撑起来的。从早期的命令行自动补全,到后来各种基于大模型的命令行聊天助手,AI 在终端里的角色一直在发生改变。然而,大多数时候我依然觉得有些割裂。当我们需要 AI 帮我们重构一个复杂的跨文件模块、运行构建命令并根据报错自动迭代时,传统的聊天式工具就显得力不从心了。 我最近一直在深度使用 Google 推出的新一代命令行开发工具 [[Antigravity CLI]]。在实际体验了一段时间之后,我深刻地感受到,它不仅仅是又一个命令行 AI 助手,而是代表了一种全 Read more ...


Antigravity CLI:Google 推出的下一代终端 AI 编程智能体

最近在关注 Google I/O 2026 的动态时,看到了一个让我颇感兴趣的发布——[[Antigravity CLI]],Google 官方宣布用它来取代已经积累了超过 10 万 GitHub Stars 的 [[Gemini CLI]]。这个时机有点微妙:个人版 Gemini CLI 用户必须在 2026 年 6 月 18 日前完成迁移,否则将失去模型访问权限。作为一个长期在终端里工作、也在持续关注 AI 编程工具演进的开发者,我觉得有必要认真研究一下这个新工具到底带来了什么改变。 Gemini CLI 为什么需要被替代 要理解 Antig Read more ...

2026-05-22 ai , cli , terminal , google , gemini , antigravity , ai-agent

我购买了一台零刻 ME Pro 用来存放视频素材

随着我频道录制的视频越攒越多,加上平时用相机拍摄的原始素材,存储问题开始变得越来越头疼。一个 4K 视频的原始素材少则几个 GB,多则上百 GB,几次拍摄下来一块移动硬盘就见底了。而且随着视频数量的增加,想快速找到某段素材或者回翻旧成片的成本越来越高。这种情况下,我开始认真考虑搭建一套本地存储方案,于是目光落到了[[零刻]] ME Pro 这台小型 NAS 主机上。 为什么需要一台 NAS 说起来这个问题其实积累了很久。之前拍视频的素材都临时存在移动硬盘里,拍完一期就整理一次,但随着时间推移,手头的移动硬盘越来越多,哪块盘存了哪段素材根本理不清楚 Read more ...


试遍所有 Navidrome 客户端,我最终选择了 Narjo

我是一个对音乐播放体验有点执念的人。自从搭建了 [[Navidrome]] 自托管音乐服务器,我就开始了一段漫长的客户端寻觅之旅。在 iOS 上,我几乎把能找到的 [[Navidrome]] 客户端都试了一遍,甚至为了体验更好而付费购买了 [[音流]]。但最终,我还是删掉了它们,把 [[Narjo]] 固定在了屏幕上。 自托管音乐服务器的现状 在流媒体服务大行其道的今天,还在折腾自建音乐库的人,往往有些相似的执念:想要拥有自己的音乐,不依赖平台,不受版权下架的困扰,或者单纯就是喜欢把喜欢的 FLAC 文件存放在自己的硬盘上。[[Navidrome Read more ...


最近文章

  • 入手 GL.iNet Comet Pro(RM10):支持 Wi-Fi 6 的远程 IP KVM 家里的 [[Homelab]] 一直是一台 4 盘位的小主机跑 [[Proxmox VE]],上面跑着 Ubuntu 虚拟机、一堆 Docker 服务和下载机。平时远程管理全靠 SSH 加 [[Tailscale]],只要系统还活着基本没什么问题。真正让我不放心的是系统起不来的时候:升级内核后卡在启动界面、改网卡配置时手滑导致网络没起来、BIOS 被重置后不再从正确的硬盘启动,这时候 SSH 连不上,Tailscale 也不会在线,人不在家就只能干等。最近正好赶上一波促销,我入手了 [[GL.iNet]] 的 Comet Pro(型号 GL-RM10)远程 [[IP KVM]],叠加各种限时优惠之后实际支付 590.76 元,算是把 Homelab 远程管理的最后一块短板补上了。
  • 呆呆面板 MCP 配置教程:让 Claude、Cursor 用自然语言管理定时任务 前两天写了一篇 呆呆面板 daidai-panel:轻量级青龙面板替代品介绍与 Docker 部署教程,在那篇文章里我提到呆呆面板和 [[qinglong 青龙面板]] 最明显的代差是内置了 [[MCP]] 服务,但只是简单带过。面板搭起来、脚本陆续迁移进来之后,我每天早上要做的第一件事就变成了打开面板,挨个看昨晚哪些任务失败了、报的什么错、是 Cookie 过期还是网站改版。这种重复又琐碎的巡检,恰好是 AI 最擅长替人做的事情。所以这一篇就专门聊聊呆呆面板的 MCP 怎么配置、怎么接入不同的客户端,以及在权限上应该怎么取舍。
  • 呆呆面板 daidai-panel:轻量级青龙面板替代品介绍与 Docker 部署教程 Homelab 里跑久了,总会攒下一堆零散的小脚本:每天早上抓一次汇率发到 Telegram,定时检查几个网站的证书有没有快过期,隔一段时间把某个 API 的数据拉下来存一份,再加上各种网站的自动签到。最开始我都是直接写进服务器的 crontab,时间一长就发现问题很多,脚本散落在不同的机器上,日志不知道去哪看,失败了也没人通知,Python 依赖装在系统里还经常和别的东西打架。几年前我为此折腾过 [[qinglong 青龙面板]],最近在 GitHub 上又看到一个定位几乎一样、但更轻量的新项目,叫呆呆面板([[daidai-panel]])。
  • RAGFlow:以深度文档理解为核心的开源 RAG 引擎介绍与部署使用教程 这两年我陆陆续续接触过一些 RAG 小工具,从最早自己用 [[LangChain]] 拼一个 demo,到后来用 [[AnythingLLM]]、[[Dify]] 的知识库功能,有一个体验几乎每次都会重演:拿几篇 Markdown 测试的时候效果惊艳,一旦换成真实的业务材料,比如一份带合并单元格的财报 PDF、一份双栏排版的论文、几页扫描的合同,回答马上就开始胡说八道。追查下去会发现问题根本不在大模型,而在最前面的解析和切块环节,表格被拍平成一串没有表头的数字,左右两栏的文字被交错拼接在一起,模型拿到的上下文本身就是错的。也正是因为这个痛点,我在调查 ESP32 小智 AI 后端的时候发现了 [[RAGFlow]],一个可以「深度文档理解」的开源 RAG 引擎。
  • Git 本地忽略文件:.git/info/exclude 的作用与使用技巧 由于本地 IDE、插件、Agent 的差异,所以经常打开项目之后会出现一些只属于我自己的文件,AI Agent 和一些 MCP,Skill 也喜欢在项目根目录里面添加文件。每次 git status 都能看到这一串红色的 untracked 文件,看着很烦,又不太好意思为了自己的习惯去改项目的 .gitignore。这时候我想起了 .git 目录里一个存在感极低的文件 info/exclude,它刚好就是为这种场景设计的。