1. 长对话里输入框被顶走,到底卡在哪
如果你经常在远程服务器上跑 Codex CLI,大概率遇到过这个场景:让 Codex 分析一个项目结构,它哗哗输出几百行日志、Git Diff、编译报错,你想往上翻两屏看看它前面提到的文件路径,结果一翻上去,底部那个输入框就跟着历史内容一起滚走了。想继续追问,只能再一路滚回最底部,或者按快捷键跳转。一次两次还好,长会话里这个动作每天要重复几十次,节奏被打断得很碎。
这个问题的本质是终端 TUI 的渲染方式。Codex CLI 的界面是「历史输出 + 底部输入区」拼在一个可滚动缓冲区里的,输入框并不是独立固定在视口底部的层,而是跟着内容一起滚。在本地桌面终端里,鼠标滚轮和滚动条还能帮你快速定位;但一旦进了 SSH + tmux 的组合,鼠标事件归属就变得模糊——滚轮到底是在滚 tmux 的 pane,还是滚 Codex 内部的 transcript,经常要试一下才知道。
Codex Sticky 就是冲着这个高频小痛点来的。它是基于 OpenAI Codex CLI 的非官方社区增强版,核心只做一件事:让你在回看历史内容时,底部输入区域仍然可达。它不重做 Codex,不覆盖官方命令,安装成独立的codex-sticky,你可以随时在官方版和 Sticky 版之间切换。适合谁?经常 SSH 连远程 Linux、习惯 tmux 里开多个会话、需要 Codex 辅助长任务的开发者。如果你只是偶尔用一下、会话都很短,官方版其实够用。
我试过在 tmux 里跑一个多文件重构任务,Codex 连续输出了十几屏的修改计划,中途想插一句「先只改 config 那个文件」,以前得滚半天,现在输入框一直在底部等着,直接敲就行。下面把配置骨架和接入通道一起拆开讲。
2. TaoToken 前置:统一 Key 与 API 通道
在讲 Sticky 的配置之前,先把模型接入这条链路理清楚。Codex CLI 本身是个客户端,它需要连到一个兼容 OpenAI 接口的服务端点才能跑起来。很多人的痛点是:本地一套 Key、服务器一套 Key、不同项目又各配各的,环境变量散落在各个 shell 配置里,换台机器就要重新翻一遍。
TaoToken 在这里的角色是提供一个统一的 API 通道和 Key 管理入口。你可以在官网注册后拿到一个 Key,然后在 Codex CLI 的配置里把 base_url 指向 TaoToken 的 API 地址,模型请求就走这条通道出去。这样无论你是在本地、SSH 远程服务器还是 tmux 会话里,只要环境变量指向同一个 Key,行为就是一致的。
具体来说,你需要准备两样东西:
一是 API Key。登录后在控制台的 API Keys 页面创建,格式通常是一串以特定前缀开头的字符串。创建后立刻复制保存,页面刷新后一般不再完整显示。
二是 API 端点地址。TaoToken 的 API 基础地址是https://taotoken.net/api,注意这个地址不带任何查询参数,直接作为 base_url 使用。Codex CLI 会在这个地址后面拼接/v1/chat/completions之类的路径。
如果你还没创建 Key,可以先去控制台把 Key 建好:
控制台入口:https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite
创建完 Key 之后,建议先在本地用 curl 验证一下通道是否通,再往 Codex 配置里写。这样出问题的时候能快速定位是 Key 的问题还是客户端配置的问题。
3. 可复制配置:config.toml 与 Sticky 骨架
Codex CLI 的配置分两层:一层是模型接入相关的config.toml,一层是 Sticky 自身的开关。先把接入层配好,再叠加 Sticky。
3.1 安装 Codex Sticky
官方 Codex CLI 先确认能正常跑,再装 Sticky。当前正式版本是0.138.0-sticky.1,预编译包面向 Linux x86_64 GNU。最省事的方式是让 Codex 自己装,把下面这段 Prompt 丢给它:
请帮我安装 codex-sticky。要求: 1. 不要覆盖或卸载现有官方 codex。 2. 从 Jurio0304/codex-sticky 最新正式 GitHub Release 下载 Linux x86_64 GNU 压缩包和 SHA256SUMS。 3. 校验 SHA256。 4. 解压并安装为 ~/.local/bin/codex-sticky。 5. 如 ~/.local/bin 尚未加入 PATH,告诉我应该如何配置,但不要未经确认修改 shell 配置。 6. 执行 codex-sticky --version 验证安装。 7. 最后报告官方 codex 与 codex-sticky 是否可以并存运行。如果你想自己控制每一步,用安装脚本更稳妥,先下载再检查再执行:
curl -fsSL https://raw.githubusercontent.com/Jurio0304/codex-sticky/main/scripts/install.sh \ -o install-codex-sticky.sh less install-codex-sticky.sh bash install-codex-sticky.sh装完检查版本和路径:
codex-sticky --version which codex which codex-sticky两个命令指向不同位置就说明并存成功,官方codex没被动过。
3.2 配置 config.toml 接入 TaoToken
Codex CLI 的配置文件默认在~/.codex/config.toml。如果你用的是 Sticky 版,它读取的是同一份配置,所以接入层只需要配一次。下面是一个可复制的骨架:
# ~/.codex/config.toml model = "gpt-4o" model_provider = "taotoken" [model_providers.taotoken] name = "TaoToken" base_url = "https://taotoken.net/api" env_key = "TAOTOKEN_API_KEY" wire_api = "chat"这里几个字段的作用:
model指定默认模型,你可以按需换成其他支持的模型名。model_provider指向下面定义的 provider 块。base_url就是 TaoToken 的 API 地址,注意不要加/v1后缀,Codex 会自己拼。env_key告诉 Codex 从哪个环境变量读 Key,这样 Key 不落在配置文件里,更安全。wire_api用chat表示走 Chat Completions 协议。
然后在 shell 配置里导出 Key。如果你用 bash:
echo 'export TAOTOKEN_API_KEY="你的Key"' >> ~/.bashrc source ~/.bashrc用 zsh 就写进~/.zshrc。远程服务器上同样操作,这样 SSH 进去后环境变量自动生效。
3.3 启用 Sticky Transcript
启动 Sticky 版:
codex-sticky进入 TUI 后,用斜杠命令控制 Sticky 模式:
/sticky status /sticky on /sticky off /sticky/sticky status查看当前状态,/sticky on强制开启,/sticky off关闭,单独一个/sticky是快速切换。第一次用建议先跑/sticky status确认模式生效。
如果你想让 Sticky 默认开启,可以在config.toml里加一段:
[sticky] enabled = true不同版本的字段名可能有细微差异,以你安装的 release 说明为准。如果加了不生效,先用/sticky on手动开,再回头核对字段。
4. 验证请求:滚动长对话确认输入框固定
配置写完,得实际验证两件事:模型通道通不通,Sticky 有没有真的把输入框钉住。
4.1 先验证 API 通道
在启动 CLI 之前,用 curl 直接打一次接口,确认 Key 和端点没问题:
curl -s https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer $TAOTOKEN_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "gpt-4o", "messages": [{"role": "user", "content": "回复两个字:通了"}], "max_tokens": 16 }'如果返回里有正常的choices结构,说明通道没问题。如果返回 401,检查 Key 是否导出成功;返回 404,检查 base_url 有没有多写或少写路径。
4.2 再验证 Sticky 固定效果
启动codex-sticky,然后故意制造一段长输出。最简单的办法是让它分析一个目录:
请列出当前项目所有文件,并对每个文件用三句话说明用途。等它输出十几屏之后,用鼠标滚轮或 PageUp 往上翻。观察底部输入框:如果它始终停在视口底部,你往上翻的时候输入区还在,那就说明 Sticky 生效了。再敲一句新指令,比如「只保留 config 相关的文件」,确认能正常提交。
在 tmux 里验证时,注意 tmux 自身的鼠标模式。如果滚轮被 tmux 拦截,可以按Ctrl+b再按[进入 copy-mode 翻页,退出按q。Sticky 优化的是 Codex 内部的鼠标事件分发,tmux 层的拦截需要你在 tmux 配置里调mouse on或mouse off来配合。
4.3 确认官方版和 Sticky 版并存
分别跑一下两个命令的版本,确认互不影响:
codex --version codex-sticky --version如果两个版本号不同,说明 Sticky 是独立安装的,官方版没被覆盖。哪天不想用 Sticky 了,直接跑codex就回到原版。
5. 本篇常见错排查
配置过程中容易踩的坑集中在几个地方,逐个说。
Key 读不到,报 401。最常见的原因是环境变量没导出到当前 shell。SSH 进去后~/.bashrc不一定自动 source,可以先echo $TAOTOKEN_API_KEY看看有没有值。没有的话手动export一次,或者检查是不是写进了~/.bash_profile而当前用的是 bash。tmux 会话里环境变量是启动时继承的,如果你在 tmux 外面改了.bashrc,已经开着的 tmux 会话不会自动更新,需要tmux kill-server重开或者手动 export。
base_url 写错导致 404。TaoToken 的 API 地址是https://taotoken.net/api,不要写成https://taotoken.net/api/v1,也不要漏掉/api。Codex 会自己在后面拼/v1/chat/completions,你多写一层就变成/api/v1/v1/...,直接 404。
Sticky 模式没生效。先/sticky status看状态。如果是 off,/sticky on打开。如果 on 了但输入框还是被顶走,检查你启动的是不是codex-sticky而不是codex——两个命令长得像,很容易敲错。另外确认安装的版本是0.138.0-sticky.1或更新,早期版本可能没有完整的 Sticky 支持。
tmux 里鼠标拖选复制异常。Sticky 在 0.138.0-sticky.1 里修了拖选复制遗漏最后一个字符的问题。如果你还在旧版,先升级。tmux 层面,如果mouse on导致拖选被 tmux 接管,可以按住 Shift 再用鼠标拖选,绕过 tmux 的鼠标捕获,这是终端层面的通用技巧。
安装脚本执行后codex-sticky找不到。大概率是~/.local/bin不在 PATH 里。检查echo $PATH,如果没有这个路径,在 shell 配置里加一行export PATH="$HOME/.local/bin:$PATH",然后 source 一下。别直接改系统级 PATH,用户级就够了。
想卸载。Sticky 是独立安装的,删掉二进制就行:
rm ~/.local/bin/codex-sticky如果你之前配过 alias,从 shell 配置里删掉对应行。卸载 Sticky 不会动官方codex。
6. 接入与排障的下一步
把通道和 Sticky 都跑通之后,日常使用基本就顺了。如果你在排障过程中需要重新生成或管理 Key,去 API Keys 页面操作:
API Keys 管理:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite
接入细节和参数说明可以对照文档:
接入文档:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite
如果你想先在网页里验证某个模型能不能正常对话,不想每次都启动 CLI,可以用模型对话页面快速试:
模型对话:https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_content=chat&utm_campaign=rewrite
对于长期在终端里跑编码任务、经常开 Agent 会话的场景,Coding Plan 会更合适,Key 和额度管理集中在一处:
Coding Plan:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite
如果你用的是 Claude Code 那套 Anthropic 协议的工具链,接入方式略有不同,可以参考这个入口:
ClaudeCodeAnthropic:https://taotoken.net/claude-code-anthropic?utm_source=taotoken_aicg_blog_end&utm_content=claude-code-anthropic&utm_campaign=rewrite
最后提醒一句:Codex Sticky 是社区 fork,不是 OpenAI 官方产品。它的价值在于把「输入框始终可达」这件小事做扎实,配合 TaoToken 的统一通道,你在 SSH + tmux 的长会话里能少很多来回滚动的动作。装完之后先跑/sticky status,再故意制造一段长输出翻上去看看,确认输入框还在底部,这套配置就算落地了。