这个项目能做什么

claude-print 是一个围绕 Claude Code 交互式终端 UI 的命令行包装器。其目的明确且狭窄:Anthropic 将无头模式(`claude -p`,即 SDK/管道路径)通过一个单独的 Agent SDK 信用池进行路由,而只有交互式 TUI 才按无限订阅计费。README 指出,计费路径由 `claude` 二进制文件内部的 `isatty` 检查决定 —— TTY 输出将会话标记为 `cc_entrypoint=cli`,而管道则标记为 `cc_entrypoint=sdk-cli`。claude-print 分配一个 PTY,通过它驱动 TUI,旨在保持与 `claude -p` 输出的线缆兼容,同时按订阅计费。 根据 README,其工作原理如下: - 在 PTY 下启动 `claude`,使 `isatty` 返回 true。 - 监听一次性的项目信任对话框并自动发送确认按键。 - 使用括号粘贴(bracketed-paste)转义序列注入提示词,使 TUI 将其视为用户输入而无需 shell 解析。 - 安装一个临时的 Claude Code Stop 钩子,该钩子写入 FIFO;进程在读取该 FIFO 时阻塞。 - 读取 JSONL 会话转录,提取助手轮次,并以请求的格式输出。 输入可以通过位置参数、`--input-file` 或非 TTY 标准输入提供;这些方式互斥。输出格式包括 `text`(默认)、`json`(包含 result、session_id、num_turns、duration_ms、cost_usd、claude_version 以及包含输入/输出/缓存 token 计数的 usage 对象的单行对象)和 `stream-json`(转录事件的实时 JSONL 重放)。文档记录的标志包括 `--model`、`--max-turns`、`--allowedTools`/`--disallowedTools`、`--dangerously-skip-permissions`、多个超时控制项(墙钟时间、首次输出、stream-json、Stop 钩子)、`--claude-binary`、`--config`、`--no-inherit-hooks`、`--verbose`、`--check`、`--version` 和 `--help`。退出代码定义为:成功 (0)、助手错误 (1)、内部错误 (2)、输入错误 (4)、超时 (124) 和 SIGINT (130)。 配置为可选的 TOML 文件,位于 `$XDG_CONFIG_HOME/claude-print/config.toml` 或 `~/.config/claude-print/config.toml`,可通过 `--config` 覆盖。记录的键包括 `model`、`inherit_hooks`、`max_turns` 和 `timeout_secs`,均为可选且经过验证:缺失文件将回退到默认值,但不可读、格式错误或超出范围的配置将以状态 2 退出,而不是发出警告并继续。 安装方式为 `sh install.sh`,该脚本从 GitHub Releases 下载预构建的静态 musl 二进制文件,运行 `--check`,并可选地将适配器 YAML 复制到 `~/.needle/agents/` 以用于 NEEDLE 舰队调度。文档中也记录了使用 Cargo 从源码构建的方法。仅支持 x86_64 Linux;aarch64/ARM 和 Windows ConPTY 明确不在支持范围内。README 还记录了检查最新转录中 `entrypoint` 字段的计费验证脚本以及每日金丝雀服务/定时器。 所述限制:仅限 Linux PTY 分配,`claude` 二进制文件必须已安装并完成身份验证,每次调用仅限一个提示词且无多轮会话模式,且与直接 HTTP 调用相比有大约 2-5 秒的启动延迟。一个重要的运行要求是 `HOME` 必须设置为一个非空、存在且可写的目录;该工具故意不猜测 `/root` 或查询 passwd 数据库,且当前构建在会话启动、`--check` 和 `--version` 之前强制执行此约定。故障排除说明涵盖了缺失 `/dev/ptmx`、Stop 钩子未触发以及转录竞态条件等问题。