You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Make PickForge chat titles follow the work as it evolves instead of naming only the first prompt.
Current behavior already provides a strong base: chatAutoName.ts derives a title from the first meaningful prompt, accepts OSC 2 terminal titles, and stops after a manual rename. The missing piece is durable title ownership plus controlled refreshes later in the conversation.
Product decision
This is PickForge-owned behavior, not a required skill or MCP tool.
Skills can improve wording but cannot reliably mutate host UI.
MCP is the wrong default direction: title updates are host/session metadata, not a work tool the model should remember to call.
Provider integrations may emit title suggestions (OSC, ACP/session metadata, native events), but PickForge owns precedence, persistence, throttling, and manual override.
v1 makes no hidden background LLM call and adds no title-generation cost. It derives from user-owned task text and provider title signals. A tiny/hosted semantic title generator can be evaluated later.
Feature flag
Ship behind dynamicChatTitles, default off. Flag-off builds preserve the current title behavior and storage semantics.
merged behind flag dynamicChatTitles
tested on main with flag on
enabled in the target release
flag removed after shipping enabled
Title policy
Precedence:
User rename — locks the title.
Provider/session title signal — accepted only while auto-owned.
PickForge local auto-title — fallback.
Refresh triggers:
first meaningful user prompt;
a provider plan/replan/title event;
every 3 completed meaningful user turns, using the latest task-defining user text;
never during streaming; commit at a stable turn boundary.
Guardrails:
Persist title source: default | auto | user, plus title_updated_at.
Do not rename when the normalized candidate is unchanged or generic.
Preserve existing title limits and casing/acronym behavior.
Summary
Make PickForge chat titles follow the work as it evolves instead of naming only the first prompt.
Current behavior already provides a strong base:
chatAutoName.tsderives a title from the first meaningful prompt, accepts OSC 2 terminal titles, and stops after a manual rename. The missing piece is durable title ownership plus controlled refreshes later in the conversation.Product decision
This is PickForge-owned behavior, not a required skill or MCP tool.
Feature flag
Ship behind
dynamicChatTitles, default off. Flag-off builds preserve the current title behavior and storage semantics.dynamicChatTitlesTitle policy
Precedence:
Refresh triggers:
Guardrails:
default | auto | user, plustitle_updated_at.Implementation plan
Keep this as one reviewable PR; migration and behavior are tightly coupled.
docs/releases/UNRELEASED.mdafter behavior is proven.Acceptance
Validation
bun run test:unit -- chatAutoNamebun run buildbun run vrtwhen rendered controls change