各种尝鲜体验
各种尝鲜体验
相对而言,我比较喜欢尝试新事物。这里记录一些我的尝试体验。
pi
由于 opencode 太难用太狗屎了,让我的怨气值积攒到了一定水平,然后根据一个契机[1]就换到了 pi。
oh-my-pi 东西太多,而且有些功能例如 memory 我确实不需要。所以遵循 pi 的哲学,想加啥插件自己加。
使用技巧:
- 两次 Ctrl + C 退出
/resume恢复之前的 session,而不是/session;/tree浏览对话并 revert 而不是/revert。
优点:
- 我比较偏向极简主义,挺喜欢 pi 的哲学。
- 默认展开 agnet 思考过程。
坑点:
- Windows 下我是 scoop 安装的 pi 和 git;这样的话 pi 调用 bash 工具的时候有 bug,会报错
No bash shell found(ref)。我已经把C:\Users\<username>\scoop\apps\git\current\bin加入了 PATH,但是没有任何作用。- 由于我的配置跨平台同步,我不能设置 shellPath(shellPath 必须是绝对路径而不能是
bash这种 command)。 - 最终的解法是创建一个 Junction:
New-Item -ItemType Junction -Path "C:\Program Files\Git" -Target "$env:USERPROFILE\scoop\apps\git\current"。
- 由于我的配置跨平台同步,我不能设置 shellPath(shellPath 必须是绝对路径而不能是
- 默认启动下,Page Up 和 Page Down 无法翻页!!必须用
--tui-mode fullscreen启动,或者 config 里配"tuiMode": "fullscreen"。 pi update --extensions过程中 Ctrl + C 无法中断。
插件相关:
- 我使用
npm:@gotgenes/pi-permission-system进行权限控制,但是这玩意不开 yolo mode 的话用起来手感稀烂。例如 flock、xargs 等实际执行另一个 command 的动作,都会匹配上 indirection-bash-wrapper rule,进入 ask 状态而不是根据实际执行的 command 判断权限。(有个尝试绕过的 issue,但是没有进展)。所以还是建议 yolo mode,也就是所有 ask 变成 allow。 npm:pi-web-access这个也是狗屎,如果你的 pi 设置了"npmCommand": ["pnpm"]则这个插件根本启动不了。这个插件早期还有 path traversal 安全问题。- 目前我还没有找到一个比较好用的 web search 工具——很多工具需要其他 AI 的 API,并且 vibe 到飞起用 emoji 让我感觉到生理不适;还有基于 searxng 的 websearch 工具,但是 searxng 本身也非常一般,庞大臃肿,要 uWSGI,甚至没有提供 Windows installation。
zcode
用 zcode 倒不是因为它好用,而是因为它给得太多了:
- 订阅消耗速度变为 0.66x
- 每天有三次闲时任务。虽然这个闲时任务是 oneshot 只能对话一轮,但是没有限制 context,我写个长任务至少薅它 500k token
- 周末还送用不完的 flash token(9 月更有夜间爽蹬活动,夜间全免费)
- 2026.09,每日非高峰期随机掉落神秘重置卡
简直是实现了 token 自由。
经验
有一些技巧,可以卡这个重置的掉落时间。重置每天最多掉落两次,限 2h 内使用,并且只会在 zcode 处于前台窗口的时候掉落。因此我可以不打开 zcode,大概到距离自然刷新还有 30min 的时候,打开 zcode 并获取重置卡。这样自然刷新后距离重置卡到期还会有 1.5h 的 gap,可以够我蹬完一管。
还有说说闲时任务的限制:
- 闲时任务限时,大约 4 小时,超时会爆 off-peak-ticket-expired: off-peak ticket is invalid or expired。
- 闲时任务限制不允许 spawn 后台 subagent,只能用前台 subagent。前台 subagent 的一个坏处是每一轮都必须等待所有 subagent 完成,主 agent 才能继续任务,如果一个 subagent 耗时过长会极大拖慢进度;还有如果被打断或者超时,subagent 的记忆可能就丢失了。(这里用「可能」,是因为 zcode 看 subagent 的思考过程,有时候能打开,但有时候又打不开)
- 嘛,有 subagent 用也已经很赚了,每次我开 3 个 subagent 一起干活可以产出远超一轮 500k token 的价值。
- 闲时任务不支持在 ssh 机器上跑,于是我还特地写了一个 shell-proxy 工具,以 MCP 的方式提供给 agent/subagent,这样就可以在闲时任务跑在远程 Linux 机器上了。
- 20260917 闲时任务改为了每日一次。
开喷
不过既然写在这里它就不可能只是赞美两句这么简单。zcode 仍然处于发展早期,现在给这么多福利也是为了让我们给使用数据和反馈的。那么我也就得开喷了:
- 代码安全问题:zcode 跟 grok 一样会把你的仓库加密上传云端。
- 给模型用的终端工具一坨。开个会话问问模型就知道,zcode 给 AI 的终端是“default shell”,这在 Windows 上还是 cmd 而不是 powershell。虽然 powershell 坑比较多,但是总比啥都没有的 cmd 好吧。给模型的系统提示词里也没有终端使用教程,只有一点 cli 规范。
- 有一堆无法关闭的内置 MCP。
- zcode 不读
~/.agents/AGENTS.md,全局提示要放在~/.zcode/AGENTS.md。由于我希望对 zcode 附加一些专用的约束,所以我不太想用 hardlink,直接在~/.zcode/AGENTS.md声明让 agent 去读~/.agents/AGENTS.md即可。 - 恶性 bug:zcode 给 agent 提供的「内置任务」功能(实际上是 Bash +
run_in_background: true实现的)非常难用,很多时候终端进程都已经 panic 了,但是任务本身不会结束,就一直挂着浪费时间等 timeout。所以全局提示里需要写一句“禁止使用 run_in_background”。
- 对于 agent 命令操作,zcode 其实是有沙盒的。但是 AI 不知道,有时候要试错多次,。
- 周末赠送的是试用装的 glm 5.3 flash,token 非常多。但是这个试用装不是直接加入你的帐号而是作为单独的一个试用帐号提供,我找了半天都没找到在哪里切换回我自己的帐号。实在是居心险恶。
- 独立试用帐号的缺点就是没法同时跑免费的 glm 5.3 flash 和付费的 glm 5.3。
- 这免费体验帐号开 subagent 的时候经常会有莫名其妙的失败,比如说有的报错信息是 captcha verify failed,我直接黑人问号??
- 免费帐号并发数非常少(大概 5 个),开不了多少 subagent。
- 不干活的主 agent 居然也占用一个并发数?
- 如果我正好在干其他工作,zcode 选择先杀我的 subagent。不是,subagent 是没法恢复的,普通会话还可以 continue,你告诉我把我跑了半个小时的 subagent 一把杀掉,已经跑的 token 全部作废?
- 内存占用仍然非常感人,开了几个会话(都跑完了,正在跑的只有一个),内存占用已经达到了 4.5GB。
- 性能很差。点一个历史对话,要过几秒钟才能加载出全部内容。就连退出软件也要等一阵。
- 恶性 bug:多个工作区通过 ssh 连接到同一台机器上,且每个工作区上都有 session 在跑。随机一段时间后,发生 CPU 飙高、所有 ssh 工作区全部断连 exitCode = 1,而点击重连后又可以正常连入,此时所有会话全部被中断。server 在内网,网络一直都非常稳定,基本可以排除网络问题。
- 恶性 bug:在发现了上述恶性 bug 之后我立刻提交了一个反馈,然而反馈提交卡在了日志上传步骤:正在导出完整日志(0%)。我觉得这真的非常抽象,反馈渠道自己不稳定。
- 恶性 bug:在我的 n 卡 3050 的笔记本上使用,有概率出现全窗口变为高斯模糊、无法再显示任何东西。
- ssh 机器不支持定时任务、不支持闲时任务。然而我有些性能优化必须在 linux 上测试,Windows 上漂移太高了而且没有很多 perf 工具用。另外 WSL 也不支持闲时任务。
- GLM 在 202609 推出了夜间爽蹬活动,zcode 无限用 GLM 5.3 flash;但是前提是你的帐号没用完额度。。。用完以后就没法蹬了。
- 闲时任务没有草稿:创建闲时任务里写了一堆东西,切出去看看其他会话进度,再切回来发现已经写的内容都没了。
- 我可以看到一个 agent 启动的“运行中的终端”,但是无法看到它输出的内容。。
- subagent 被中断即丢失所有上下文,且无法恢复:subagent 输出中,停止会话,则之后再开启会话时 subagent 已经输出的内容都不会再进入主 agent 的上下文。等于是 token 白烧了。
- 不像 opencode 给 AI 发消息可以“插队”在工具调用里;zcode 在 AI 输出时发送消息,必须排队到 AI 完成全部任务后才能被 AI 看到。
- 点击「立即」按钮(打断会话,发出消息),快速切到其他 session,再回来以后会看到消息并没有发出去(仍然留在队列里),但是会话的打断是实打实发生的。抽象啊。
- 脑残设计:如果文件没读过直接写就会报错
File has not been read yet. Read it first before writing to it.我实在想不明白,凭什么没读过就不让写?如果这文件很长,用这种傻逼理由打断首次写入,让我消耗了双倍输出 token,实在是有点蠢。- claude code 开的坏头。AI 完全可以在终端读到文件内容,然后进行一个 Write;这个规则把该正常行为给否定了。
- 会话不能导出导入,且没有同步;多设备开发堪比地狱。另外我设置的「命令」也不会同步,本来就难用的东西,现在我肯定不用了。
- 没法看 subagent 到底消耗了多少 token。
lazygit
由于我重新入坑了 neovim,为了使用与 vscode 类似的查看 diff 的功能,因此有一个 git 状态 TUI 查看器还是比较有必要的。生态里基本都是用的 lazygit:lazyvim 本身默认就绑定了 lazygit 的键位,因此我尝试使用 lazygit。但是用起来感觉真的非常不顺手。
- README 前面三个大广告,无语了。
- 配置居然是 yml,emmmm……没被 yml 毒打过。
- 在浏览 diff 时,没法使用
<Ctrl+d>/<Ctrl+u>半屏翻页。这两个键一次只能滚两行。已经违背了 vim user 的使用习惯了。 - 我在 neovim 里打开 lazygit 后,有时候想进入编辑状态,需要在当前 neovim 里打开变更的文件,并关闭 lazygit 窗口。直接按 e 会报错一堆乱码。然后我配置了
edit: 'nvim --server "$NVIM" --remote-send "<C-\><C-n>:close<CR>" && nvim --server "$NVIM" --remote "{{filename}}"'以后,再按 e,就报错了另一堆乱码,实在是没绷住。
但是 gitui 更是一坨原始大便,所以也是捏着鼻子也得用。
flyline
一个 bash 的提示 + 补全库。由于 bash 在这块确实很差(而且我用过 ble.sh,那个慢得一批),所以还是有一点尝试欲望的。
首先看到 Release 里没有 windows build,已经感觉不太对劲了。拉下来 install 一发,这个项目没有 bin target,问了下 AI 才知道这玩意是编译成 .so bash 插件。build 一发,报了一堆错,然后发现这个项目本身就没法在 windows 下 compile。
行吧,我尝试去 Release 里拉下 x86_64 linux 的 musl 构建呢?拉下来 enable -f,报错 bash: enable: dynamic loading not available。所以这 bash 插件的加载本来就没多少人用,这些 bash 的默认 build 都关闭了这个功能,结果这玩意还依赖这个?
直接抛弃。
hyperfine
命令行的 benchmark 比较工具。用来比较单个简单指令还好,当我想要测试一些耗时极长的操作时,这体验简直没法看。
- 首先被 shell 坑了,hyperfine 在 Windows 上一定用
cmd.exe /C启动子进程,导致我 nushell 语法的指令执行失败;而且由于把我;和之后的内容都当成 args 传到我的程序里,导致出现的报错非常恶心,排查半天。。 - 默认每个 case 至少跑 10 轮,实在有点慢。
- Ctrl + C 没法终止 benchmark?什么设计。
sem
尝试了 weave 后,我发现 Ataraxy-Labs universe 还有个 Ataraxy-Labs/sem,也就是基于 tree-sitter 的语义检测。
于是我也尝试了下 sem。
怎么说呢,sem 还是处在非常早期的阶段,问题比我想的要多。例如最简单的 sem diff,效果是这样的:
│ ⊕ method NeedsOrderServiceImpl::g… [added]
│ ∆ method NeedsOrderServiceImpl::b… [modified]
│ ∆ method NeedsOrderServiceImpl::r… [modified]显然这个长度根本不对劲,最关键的信息被省略了。(我的终端总宽度是这个片段的 3 倍多。)只能等 sem 再打磨优化了。
- 对于上面的这个问题我提了一个 issue。
- 此外,java 文件的 sem diff,class 变更居然用的 type 而不是实际字段名,有点把我无语到。
weave
一个基于 tree-sitter 代码理解的 git merge 辅助工具。
emmmm,虽然这个 claude 的大菊花排在 contributor 的靠前位置,比较渗人。但我还是想试试。
首先安装,scoop 没有,我用 bpm-rs 安装还给我测出两个 bug。
修好以后安装,我看 README 里写了可以 weave setup --local,但是执行并没有这个指令。然后发现这个 --local 是 15 hours ago 刚添加的。。。一般协作场景都不允许把 .gitattributes 上传到远端吧。不过还好有 core.attributesfile,我直接加到 global gitattributes 里就完事了。
第一次 merge 的时候报错 weave-driver 找不到,然后我才发现安装这东东需要在 release 里下载两个 binary,一个是 weave-cli,一个是 weave-driver。
不过合并的实测效果还是比我想的好一些的,最终 conflict 的文件数量确实更少了几个。不过 weave 解决的也都是些简单问题,难题都留给人类了说是。
carapace
这玩意大概一年多前就想试了,但是文档说的简直不是人话。
首先,Github 上 README 基本没有,就一句 Read, Try and Build. 然后如果你点进去 Read,就能看到这辈子见过的最抽象的文档(截取一部分目录展示😅):
1. In A Nutshell
2. Porcelain Shop
3. Hulk BASH!
4. Pandoras Box
5. Overly Attached Argument
6. Lights, Camera, Action!
7. Group Therapy
8. Spec-tacular Citizen
9. Running Man
10. Greenwashing
11. Wiretap
12. Sandcastle实际上对于 user 应该看的是 carapace-bin 的文档。但是即使是这份文档也是一坨大便,你安装并配置后也是不知道如何使用。比如我使用 nushell,我按照文档说的进行一个配置:
$env.CARAPACE_BRIDGES = 'zsh,fish,bash,inshellisense'
source $"($nu.cache-dir)/carapace.nu"然后重启 nushell,也没法进行补全。后来和 AI 摸索着发现还需要手动把 carapace 设为 external completer,并且一定要取消掉原先的 tab keybindings:
# 注释掉原先的 keybindings
# $env.config.keybindings ++= [
# {
# name: take_history_hint
# modifier: none
# keycode: tab
# mode: [emacs, vi_normal]
# event: {
# until: [
# { send: historyhintwordcomplete }
# ]
# }
# }
# ];
let carapace_completer = {|spans: list<string>|
carapace $spans.0 nushell ...$spans | from json
}
$env.config.completions.external = {
enable: true
max_results: 100
completer: $carapace_completer
}然后按 tab 才能出现补全候选结果。
但是我其实不喜欢这种下方展示候选,我的补全都希望是 inlay hints,并且希望是最符合的结果上屏,而不是出一堆结果让我自己选。
总之经过了一大堆事以后,我对 carapace 没有任何好感。
ast-outline
一个快速用来 parse 代码文件提取重要内容给 AI 用的工具。
首先提取本身没问题,但是只有一些签名和类型,没有注释。我比较怀疑是否真的可以给 AI 产生价值,很多时候一个函数签名的信息是远小于注释的。(当然注释也会有 example 等垃圾内容,这个价值判断标准不太好界定)
然后 ast-outline install --all --dry-run 只支持那些大公司出品的 AI agent,覆盖面还是太窄了。
最后,release binary 里没有其他系统的 releaes 也要扣一点分。
quien
一个 go 写的、TUI 的域名工具。
下载下来试用一下,随便查了一个内网解析的域名,结果:
quien xxx.xxx卡死在 TUI 首页,无法切换 tab。合着查询线程阻塞了 UI 线程是吧。quien dns xxx.xxx返回空记录,真的是全空的。。还不如我 nsloopup,至少能查到非权威应答。{ "A": null, "AAAA": null, "CNAME": null, ...
立刻卸载。
http client
详见 HTTP Client。
jujutsu
详见 jujutsu。
- 作为一个 git exp user,并且拥有一批 git scripts,jujutsu 对我的开发效率的提升比较有限。
- jujutsu 和我公司工作流的相性非常差。
- 比如我们提交前都要求用工具扫 commit 但是扫不到 jujutsu 的
@;比如我们不用本地创建分支而是在远端创建分支后拉下来开发;比如我们解决 conflicts 也用的另一套工作流。
- 比如我们提交前都要求用工具扫 commit 但是扫不到 jujutsu 的
- 我有一些私有 git hooks,jujutsu 没法执行。
- 要功能没功能,要生态没生态。
- jujutsu 虽然说兼容 git,但是跟 git 混用也会有一些问题。
- 最大的问题是 jj 会一直创建 empty commit,这些 empty commit 会随着你的 git merge 被一起合到 jj 的 worktree 里。虽然在 git 里这些都是不可见的,但是在 jj log 里就是纯纯的精神污染,让人不会再想回到 jj 里了。
opencode
现在 AI 时代 AI 相关的东西 100k star 真是随便拿啊。
朋友一直在推,用了一下。后来模型 agent 能力越来越强,用的频率也越来越高了。
首先请看 opencode 有多难用。高强度用了几个月后这是我对 opencode 的所有怒火。
下面就主要放一些心得吧。
- oepncode 的 permission 规则是最后优先,也就是具体规则放后面,感觉还是挺抽象的。例如:
{ "permission": { "bash": { "git *": "allow", "git push *": "deny" } } } - 可以使用
opencode models查看所有模型 code。这是为了编写下述的opencode.json。 - opencode 要让主 agent 使用特定模型的 subagent,这个需求应该非常常见(处于成本的考量),但是 opencode 的文档显然不够好。我是靠自己摸索才搞出能 work 的配置(我用 GLM 5.1 作为主 agent,用 deepseek v4 flash max thinking 作为子 agent):
{ "$schema": "https://opencode.ai/config.json", "model": "zai-coding-plan/glm-5.2", "agent": { "general": { "mode": "subagent", "model": "opencode/deepseek-v4-flash-free", "thinking": { "type": "enabled", "budgetTokens": 65536 } }, "explore": { "mode": "subagent", "model": "opencode/deepseek-v4-flash-free", "thinking": { "type": "enabled", "budgetTokens": 65536 } } } }
总的来说,opencode 作为一个 agent,只能算是达到 agent 的基本水平。在使用体验上,还有非常非常多要改进的地方。
然后用 agent 记得一定要找个有缓存的 API 提供方。
UniGetUI
- 为什么这玩意打开要让我下载 scoop-search 和 cargo-update,后者甚至是从源码编译。假设用户一定有 rust 工具链吗?看到源码编译我就要开始捂鼻了。
- 然后安装完 scoop-search 和 cargo-update 以后,重启软件居然没读到,还要我再安装一次?恶性 bug 直接卸载了。
Files
不懂只提供微软商店链接,没有离线安装包/压缩包的软件是什么毛病。被微软收购了?
InputTip
在 b 站看到宣传,感觉这个灵感挺不错的。试用了一下,感觉我不一定需要这个。
- 符号方案下有一些 bug,例如和光标位置有一点偏移、并且在我第二块缩放比例不同的屏幕上表现很差,坐标计算是错的。
- 光标方案倒是简单,但是实在是有点丑,我也懒得自己定义光标样式。
- 目标人群是那种不喜欢看右下角托盘,怕被打断注意力的。作为程序员而不是书记,我觉得偶尔看下右下角没什么负担。
UltraISO
根据此 POST,结果软件本身是 winxp 风格,mds/mdf 挂载挂不上,提取还直接崩溃了,还 tm 卖钱,什么脑残玩意。
用挂载而不是解压的唯一理由就是少一次写入,但是既然这玩意这么难用,还是 7-zip 解压一把梭吧。
直接契机是 https://t.me/withabsolutex/2841,opencode 对 kimi 模型提示词下毒;另外还有 X 上流传的评测,kimi 在各个 agent 上的跑分,opencode 是垫底,惨不忍睹。 ↩︎
