Skip to content

fix(pi): stop posting replies the agent did not send - #1758

Merged
wpfleger96 merged 4 commits into
mainfrom
duncan/pi-stop-posting-unsent-text
Oct 27, 2026
Merged

wpfleger96 merged 4 commits into
mainfrom
duncan/pi-stop-posting-unsent-text

Conversation

@wpfleger96

Copy link
Copy Markdown
Member

Pi no longer posts the final assistant text of a run in which the agent never called send. That text now stays in the agent's local activity, as it already does for Goose, Claude Code and Codex.

Before: when a run ended without a send, Pi posted its last assistant text into the thread, in reply to the latest request that run took, so the thread wasn't left waiting.

Why it changes: every agent's instructions say its assistant text is not published to Buzz and it must use send. Agents therefore write that text as private narration ("I've replied to Will") or reason about why no reply is needed, and Pi then posted it, including over a deliberate decision to stay silent. Goose stopped doing this, and Claude Code and Codex never did, so the same agent behaved differently depending on its harness.

After: a failed run still posts the same ⚠️ I couldn't finish that: … report to the owner in its thread; only the unsent-text fallback is removed, together with the per-conversation send counter, the receipts' placed snapshot and the posted-answer marker that existed only to feed it. send's final: true handling is unchanged. src/bundled/pi/runtime.test.ts checks that unsent text is posted nowhere, and the tests that used a posted answer to check where a run's result lands now check its failure report instead.

Duncan and others added 4 commits October 27, 2026 16:30
Pi posted a run's final assistant text when the agent never called send. That text is private narration by design, and Goose, Claude Code and Codex never post it, so Pi now leaves it in local activity. Failed runs are still reported in the thread.

Co-authored-by: Will Pfleger <pfleger.will@gmail.com>
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
…answers

Co-authored-by: Will Pfleger <pfleger.will@gmail.com>
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
Co-authored-by: Will Pfleger <pfleger.will@gmail.com>
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
Co-authored-by: Will Pfleger <pfleger.will@gmail.com>
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>

@salman1993 salman1993 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 Reviewed by Sol on Salman’s behalf at 724000c6.

No blocking findings. This follows #1359: Pi leaves unsent assistant text in local activity for both normal and recovered runs. Explicit sends, final: true, and owner-tagged failure reports keep their existing behavior. Removing the fallback’s send counters and posted-answer bookkeeping keeps the change small.

Validation: the full Vitest suite passed locally (12,022 passed, 16 skipped); git diff --check passed; hosted CI required and DCO passed at this head. No live Pi/desktop conversation was exercised.

@wpfleger96
wpfleger96 marked this pull request as ready for review October 27, 2026 21:16
@wpfleger96
wpfleger96 requested a review from a team as a code owner October 27, 2026 21:16
@wpfleger96
wpfleger96 merged commit 9a01fd4 into main Oct 27, 2026
37 checks passed
@wpfleger96
wpfleger96 deleted the duncan/pi-stop-posting-unsent-text branch October 27, 2026 21:17
rileycrane added a commit that referenced this pull request Oct 28, 2026
…ted-setup

* origin/main: (24 commits)
  feat(agents): share agents to the community catalog and export snapshots (#1649)
  feat(navigation): dialogs never become Back/Forward destinations (#1696)
  fix(builderlab): sign in when finishing a hosted agent's setup (#1768)
  fix(messages): link #name prose to open channels the directory has named (#1706)
  feat(agents): keep the Mac awake while agents work (#1718)
  perf(panels): skip layout for covered workspace tabs (#1542)
  feat(composer): offer model and effort in a DM with an agent without a mention (#1621)
  test(workflows): wait for dialog initial focus before pasting YAML in WorkflowEditor test (#1705)
  fix(builderlab): show all captured activity without a conversation toggle (#1764)
  feat(agents): add a UI for Attention watches (#1663)
  Keep thread reply branches one level deep (#1751)
  fix(messages): keep table scrollbars inside webkit message rows (#1677)
  feat(agents): sync agent config through config channels (#1226)
  fix(agents): offer a new hosted agent in Solo chats right away (#1759)
  test(usage): make UsagePage read-window test DST-safe (#1668)
  fix(panels): scope split motion selectors to layout owners (#1681)
  feat(agents): simplify imports and clarify community scope (#1660)
  fix(pi): stop posting replies the agent did not send (#1758)
  feat(identity): support a local debug restore helper (#1517)
  test(perf): cover rich thread open close and reopen (#1683)
  ...

Signed-off-by: Riley Crane <rileycrane@squareup.com>
rileycrane added a commit that referenced this pull request Oct 28, 2026
…into rileycrane/bestie-hourly-wake

* origin/rileycrane/bestie-hosted-setup: (25 commits)
  Give Bestie's test fixture the native keepAwake that main now requires
  feat(agents): share agents to the community catalog and export snapshots (#1649)
  feat(navigation): dialogs never become Back/Forward destinations (#1696)
  fix(builderlab): sign in when finishing a hosted agent's setup (#1768)
  fix(messages): link #name prose to open channels the directory has named (#1706)
  feat(agents): keep the Mac awake while agents work (#1718)
  perf(panels): skip layout for covered workspace tabs (#1542)
  feat(composer): offer model and effort in a DM with an agent without a mention (#1621)
  test(workflows): wait for dialog initial focus before pasting YAML in WorkflowEditor test (#1705)
  fix(builderlab): show all captured activity without a conversation toggle (#1764)
  feat(agents): add a UI for Attention watches (#1663)
  Keep thread reply branches one level deep (#1751)
  fix(messages): keep table scrollbars inside webkit message rows (#1677)
  feat(agents): sync agent config through config channels (#1226)
  fix(agents): offer a new hosted agent in Solo chats right away (#1759)
  test(usage): make UsagePage read-window test DST-safe (#1668)
  fix(panels): scope split motion selectors to layout owners (#1681)
  feat(agents): simplify imports and clarify community scope (#1660)
  fix(pi): stop posting replies the agent did not send (#1758)
  feat(identity): support a local debug restore helper (#1517)
  ...

Signed-off-by: Riley Crane <rileycrane@squareup.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants