freibergergarcia/phone-a-friend/tree/main/mods/paf-tasks
paf-tasks
一个 Claude Code mod,将 phone-a-friend 评审呈现为带有判定和发现的轮次线程、实时进度,以及列出需要关注的代理会话的面板。
关于这个 mod
paf-tasks 是 phone-a-friend 市场中的可选插件,会把外部模型评审显示在 Claude Code 内。在对话中,phone-a-friend 调用会以调用形式显示轮次、耗时和发现;ctrl+o 仍然可以查看原始输出。/paf 面板会把针对某个分支提出的所有内容归为一个线程,显示每轮轨迹、判定、带严重性和位置的发现、运行中的步骤以及其他分支。Agents 标签页(带 herdr)会按需要你做什么对会话分组,并跳转到对应会话。评审工作期间,提示符上方会显示一行状态,完成时还会弹出提示。选项包括面板模式、自动打开、状态带和转录绘制。它只通过 git worktree list 以及 phone-a-friend task list/show 读取会话的储存库,在列出前后确认仓库路径,不会在 Claude Code 状态之外写入任何内容;只有 Send to Claude 路径会把文字插入对话。
安装
请先查看作者 README 确认 marketplace 和插件名称;命令可能随仓库结构改变。
claude plugin marketplace add freibergergarcia/phone-a-friend claude plugin install paf-tasks
原文 / README
paf-tasks: phone-a-friend, made legible
A Claude Code mod. When Claude asks another model for a second opinion through phone-a-friend, this shows what was asked, what the reviewer is doing, and what it said, in the reviewer's own words.
Install
It is a separate, optional plugin in the phone-a-friend marketplace:
/plugin marketplace add freibergergarcia/phone-a-friend # skip if already added
/plugin install paf-tasks@phone-a-friend-marketplace
/reload-plugins
Requirements:
| Needs | Why |
|---|---|
| Claude Code 2.1.287 or newer | mods are on by default from that version (claude --version) |
| phone-a-friend 4.5.0 or newer on PATH | the panel reads phone-a-friend task list --json --repo <worktree> |
| herdr (optional) | the Agents tab lists herdr's agent sessions; without herdr the tab is hidden |
On a Claude Code without mods, this plugin fails to load (Claude Code reports
an invalid manifest) and the phone-a-friend plugin keeps working. A
phone-a-friend CLI that is missing or too old is named in the panel, with the
command that fixes it.
Update: /plugin marketplace update phone-a-friend-marketplace, then
/plugin update paf-tasks@phone-a-friend-marketplace. Its version follows
phone-a-friend releases. Remove: /plugin uninstall paf-tasks@phone-a-friend-marketplace,
or disable it in /plugin (Installed tab).
If /plugin install cannot find paf-tasks, the marketplace is probably
registered from an old folder: Claude Code keeps the first source of a
marketplace name. phone-a-friend doctor says so, and
phone-a-friend plugin update --claude (add --force-marketplace-sync when
doctor asks for it) repoints it and reinstalls what you had.
When phone-a-friend plugin install --claude registered the marketplace,
phone-a-friend plugin uninstall --claude removes the panel with it; a
marketplace you added yourself is left alone, panel included, unless you add
--purge-marketplace.
What you see
In the conversation. A phone-a-friend call is drawn as a call instead of "Ran 1 shell command":
⠹ codex · Round 3 · 00:42 · usually 1m 54s · git show 4f2a91c
✗ codex · Round 3 · 1 blocker · 1 important · 1m 52s
blocker README.md:600 The recovery note is wrong for pi. ...
important src/cli.ts:344 installPath() still documents copy mode ...
ctrl+o still shows the command and its raw output, with the same line under
it. While the turn waits, its spinner says Waiting on codex….
In the panel (/paf). Everything asked about one branch is one thread:
- the trail, one mark per round, oldest to newest (
✗ ✓ ✗ ✗ ✓): whether the review is converging; - the rounds, newest first, each with its verdict;
- the open round: what was asked, the findings with severity and location, or for a round still running, its steps and how long this usually takes;
- other branches of the same repository.
2 switches to Agents (with herdr): the sessions herdr runs, grouped by
what needs you, with what each one's reviewer last said. Enter jumps to a session.
Above the prompt, one line while a reviewer works and the panel is not on screen. A toast when a round finishes.
The panel opens by itself once the repository has reviews to show, and stays
closed once you close it, until you type /paf.
Keys (panel focused: /paf, a click, or ctrl+x tab)
| Key | Does |
|---|---|
| j / k | older / newer round |
| m | more / fewer rounds |
| f | full answer / less |
| s | send the round's findings to Claude |
| c | copy the reviewer's answer |
| b | next branch |
| w | this worktree only / all worktrees |
| r | refresh now |
| 1 / 2 | Reviews / Agents |
/paf agents, /paf reviews, /paf close.
Marks
| Mark | Means |
|---|---|
| ✓ green | ship: the reviewer said so, or had nothing to fix |
| ✗ red | findings, at least one blocker |
| ✗ yellow | findings, none a blocker |
| · gray | an answer that is not a review |
| ! red | the call failed (the row says why, the round says what to do) |
| spinner | still running |
A verdict the reviewer declared ("VERDICT: ship", "Ship.") is shown in its word.
One read off the answer is shown as the facts: 3 findings, no findings.
Options (/plugin → paf-tasks, or /config)
| Option | Values | Default |
|---|---|---|
| panel | both, calls, agents | both |
| auto_open | open the panel once there are reviews to show | true |
| band | auto (only while the panel is hidden), always, never | auto |
| transcript | draw calls in the conversation | true |
What it reads
git worktree listfor the session's repository, thenphone-a-friend task list --json --repo <worktree>for each worktree, andtask show <id> --jsonfor a running task. It never lists the whole task store, so another repository's records are not read. Before and after each listing,git rev-parse --git-common-dirconfirms the path still belongs to this repository; outside git, or when that cannot be confirmed, nothing is listed and the panel is cleared.herdr agent listandherdr workspace listfor the Agents tab (once a minute when herdr is not installed). Session titles are drawn on screen only; nothing from them is sent to Claude.
It writes nothing outside Claude Code's own state, and "Send to Claude" is the only thing that puts text into the conversation.
Development
claude --plugin-dir mods/paf-tasks # load this checkout's copy for one session
claude plugin validate --strict mods/paf-tasks
claude plugin test mods/paf-tasks
Loading the folder makes Claude Code write its type declarations to
.claude-plugin/types/ here (ignored by git); tsc -p mods/paf-tasks then
type-checks the mod. CI runs the validate and test commands with a pinned
Claude Code version.
