Community写作与编辑github.com

xuyanwen2012/humanize

通过 humanize (hmz) 运行编码或研究任务,这是一个代理流编排器,能够以 actor + reviewer 等循环模式驱动 Claude Code、Codex 及其他代理 CLI。当用户要求 '使用 humanize'、'使用 hmz'、'在 hmz 中运行'、'用 rlar 处理此任务',或者需要一个由独立审查代理检查的实施代理完成、需要长时间无人值守的代理循环(数小时到数天),或者 Claude 实现而 Codex 审查时使用。不用于将文本改写得更像人类。

humanize 是什么?

humanize (hmz) 是一个基于 PyPI 的 uv 工具,用于编排编码代理 CLI(如 claude、codex、agy)在定义好的工作流(流)中执行任务。它支持多种循环模式,例如 rlar 流(actor 实现,reviewer 审查),可用于长时间无人值守的复杂开发任务。hmz 拥有 TUI、headless 模式和 Web 界面,支持预算控制、断点续传和远程环境。用户需编写包含目标、阅读清单、完成条件、范围和约定的任务文件,然后启动后台运行,最后检查结果和仓库差异以确认完成。

兼容平台✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/xuyanwen2012/claude-skills/tree/HEAD/humanize

Installed? Explore more 写作与编辑 skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

humanize (hmz)

humanize (hmz,https://github.com/humanfia/humanize,文档 https://docs.humanfia.ai/humanize/) 在流内部运行编码代理 CLI(claude、codex、agy……):这些流是决定谁工作、谁审查以及何时停止的循环。它是一个来自 PyPI 的 uv 工具(uv tool install hmz,~/.local/bin/hmz);hmz update 可升级它。裸 hmz 为当前目录打开一个 TUI,hmz exec 无头运行流,hmz web 在浏览器中提供所有工作空间的运行情况。本文档基于 0.2.2 版本编写;此 alpha 版本经常变化,因此请优先信任 hmz exec --help。

用户默认设置(请根据您的配置编辑)

设置默认值
流rlar:Claude 实现,Codex 审查
执行者claude/claude-opus-5-5:high
审查者codex/gpt-6.1-sol:high(有时为 :ultra)
预算budget.duration=1d,无成本或令牌上限

除非用户另有说明,或工作空间已保存默认值(见下文),否则使用这些设置。不要询问预算。

hmz exec -f rlar \
  -a actor=claude/claude-opus-5-5:high \
  -a reviewer=codex/gpt-6.1-sol:high \
  -p budget.duration=1d \
  --json "$(cat "$TASK")" > "$LOG" 2>&1

工作流程

  1. 预检。
    • 在 ~/.hmz/settings.yaml 的 workspaces: 下查找目录。如果有条目,则优先使用其流、代理、环境和预算,而非上述默认值。
    • 检查您传递的每个模型和努力级别是否存在于 ~/.hmz/models/<cli>.json 中。hmz 不会预先验证规范:错误的规范仅在首次使用时失败,因此在 rlar 中,错误的审查者模型会在执行者完成整个首次轮次后才暴露。
    • 检查 git status。hmz 代理在绕过审批的情况下运行。如果仓库包含非您创建的未提交工作,或者可能更改实时系统(基础设施、部署脚本、凭据),请说明情况并建议在开始前使用 git worktree。
  2. 编写任务文件(下一节),将其放在 scratchpad 中,如果任务非平凡或给定得很宽松,则展示给用户。
  3. 在后台启动,使用 run_in_background 并将 --json 重定向到 scratchpad 中的日志。运行时间从数小时到数天不等。报告命令、任务文件、日志路径以及如何查看:在该目录下运行 hmz 可在 TUI 中打开该运行,或运行 hmz web。
  4. 读取结果(见结果部分),然后自行检查仓库差异并运行项目的检查,之后再宣布完成。审查者的“完成”是证据,而非证明。
  5. 停止。 停止您启动的后台任务。切勿仅使用 pkill hmz,因为用户通常有其他正在进行的运行。检查 pgrep -af hmz 并仅停止您的 PID。
  6. 恢复。 在同一目录中使用相同的 -f 和 --resume(限制见下文)。

编写任务

执行者仅能看到任务,在 rlar 中审查者根据任务判断仓库,因此模糊的任务会导致无休止的审查轮次或过早“完成”。包括:

  • 目标:用一两句话描述结果,而非步骤。
  • 优先阅读:定义工作的文件、规范或文档(例如 OpenSpec 更改、问题、设计说明),以便代理无需重新发现它们。
  • 完成条件:审查者可以检查的具体验收标准:必须通过的命令、必须保持的行为、要达到的数字。
  • 范围外:不应触及的内容,以及任何需要人类操作的行为(部署、推送、删除、付费服务、实时系统更改)。
  • 约定:提交策略(提交或保持未提交、消息风格)、日志和工件的存放位置。

将其写入文件并传递 "$(cat "$TASK")",或告诉代理首先读取该文件。以 - 开头的任务放在 -- 之后。

命令格式

hmz exec -f FLOW -a ROLE=SPEC[,...] [-e ROLE=SPEC[,...]] -p KEY=VALUE[,...] [opts] task

  • -f:流名称。内建流是裸名称(rlar);用户自定义流为 @user/NAME(来自 ~/.hmz/flows/NAME/),项目内流为 @local/NAME。也可以是路径(以 .、/ 或 ~ 开头)、git+URL#subdir,或 NAME:OTHER(用于同一模块中的另一个流)。裸名称按最近优先解析,因此用户流可以覆盖内建流。
  • -a:ROLE=CLI[@PROVIDER]/MODEL[:EFFORT],每个流定义的代理角色一个。重复标志或用逗号分隔。
  • -e:ROLE=BACKEND[@PROVIDER][/WORKDIR],用于具有环境角色的流。PROVIDER 是保存在设置中的运行时,或对于仅 ssh 的情况,是括号中的主机:box=ssh@[user@host:22]/abs/path。没有提供者则使用本机。
  • -p:流参数,按参数类型或 JSON 解析。除了 chat 之外的每个流都需要预算:budget.duration(1d、2h30m、PT1H)、budget.cost(美元)、budget.output_tokens。budget.graceful=true 让最后一轮完成(或对单个限制使用 budget.graceful.<limit>)。
  • --json:向标准输出输出 NDJSON 事件。在需要读取结果时使用。
  • --resume:如果该流可恢复(ralph_loop 和 continue_loop 不可恢复),则在此处拾取该流的最新运行。恢复 rlar 会将全新的执行者仅交给上次审查,而非旧的执行者会话。
  • --backup NAME:将史诗备份到设置中保存的备份目标(none 关闭它)。
  • --profile-flow / --profile-environment:向运行跟踪添加采样。仅在诊断慢速运行时使用。
  • 失败的轮次在每个内建循环流中终止运行,因此不要指望循环重试。

选择流

流角色使用时机
rlaractor、reviewer默认。需要单独检查的工作。执行者在一个会话中工作,新的审查者每轮根据仓库检查执行者的声明,当审查者说完成时结束。
chatassistant一个代理、单次、无循环和无预算。用于问题和小的编辑。
goalworker一个 /goal <task> 会话,运行直到模型说满足条件。适用于具有明确标准的自检工作。
continue_loopagent发送任务一次,然后持续发送“继续”。适用于长时间在单一上下文中处理的任务。
ralph_loopagent每轮使用相同任务的全新会话。进度存在于仓库中,而非上下文中。
stateful_ralphagent一个会话,每轮重新发送任务。
flame_chasefirst_chaser、second_chaser两个代理在全新会话中轮流执行。

用户流位于 ~/.hmz/flows/<name>/__init__.py。使用 ls ~/.hmz/flows/ 列出,并在使用前阅读文档字符串以了解角色和参数。要获取任何流的完整合约: ~/.local/share/uv/tools/hmz/bin/python -c "import hmz.flows.builtin.rlar as m; print(m.__doc__)"。

结果

  • 每次运行都是位于 ~/.hmz/epics/<斜杠替换为短横线的当前工作目录>/<时间戳>/ 下的史诗,epic.jsonl 包含摘要事件:began(流、任务)、opened(每个代理会话)、usage(成本、输出令牌、秒数)和带有 how 字段的 ended:当满足流自身的停止条件时为 done,否则为 stopped(可能还有其他值)。
  • --json 日志包含完整的事件流,包括错误(例如轮次失败时的 HarnessUnrecoverable)。阅读日志尾部以了解运行结束的原因。
  • 报告结果、来自 usage 的成本和持续时间,以及您自己的差异检查。

设置说明

  • 保存的运行时指明了代理 CLI 运行的位置,使用 harness:(affinity: 是旧名称,但仍可读取)。如果另一台机器上没有设置 harness 的运行时,则不会回退到在此处运行 CLI,因此当远程主机没有 CLI 时,请设置 harness: local。
  • 只有 btw 设置命名了一个代理后,对史诗的侧边问题(/btw)才有效(设置 > 通用)。
  • hmz web 运行页面位于 #/epics/ 下。

相关技能