Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 10 additions & 1 deletion src/Conclave.App/Claude/ClaudeService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -364,6 +364,16 @@ private void AppendAssistantMessage(
break;
case ToolUseContent tu:
hasToolUse = true;
// TodoWrite is mirrored into the right-hand plan panel — rendering a
// pill in the transcript too is just noise, so update the plan and skip.
if (tu.Name == "TodoWrite")
{
UpdatePlanFromTodoWrite(session, tu.InputJson);
break;
}
// Task (subagent) calls don't carry useful per-pill state — the agent's
// summary lands in the next assistant message anyway. Skip the pill.
if (tu.Name == "Task") break;
var vm = new ToolCallVm
{
Tokens = session.Tokens,
Expand All @@ -380,7 +390,6 @@ private void AppendAssistantMessage(
// permission_prompt for this tool_use_id, the handler knows which
// pill to flip to PendingApproval.
permHandler?.NoteToolUse(tu.Id, vm);
if (tu.Name == "TodoWrite") UpdatePlanFromTodoWrite(session, tu.InputJson);
// AskUserQuestion + ExitPlanMode are interactive — claude is waiting on
// the user. EnterPlanMode is just claude announcing it switched modes,
// not a question, so it stays out of this branch. Fire both a native
Expand Down
3 changes: 3 additions & 0 deletions src/Conclave.App/Sessions/SessionManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -406,6 +406,9 @@ private IEnumerable<ToolCallVm> DeserializeTools(string json)
?? Array.Empty<ToolCallRow>();
foreach (var r in rows)
{
// Older sessions persisted TodoWrite/Task pills before we started hiding them —
// drop them on load so historical transcripts match the current rendering rules.
if (r.Kind is "TODO" or "TASK") continue;
yield return new ToolCallVm
{
Tokens = _tokens,
Expand Down
Loading