Official integrations never report pane titles — task-based renaming is missing and crucial #1725
Replies: 5 comments 4 replies
Implementation path (ready for review / maintainer direction)Negotiated split so title/rename work does not fork into conflicting PRs: Primary (this discussion)Official integrations report short task titles via existing
Explicitly out of scope for this branch
Happy to open a PR once a maintainer accepts this idea (or converts this discussion to an issue) per CONTRIBUTING. |
Related reproducible bugs found while re-checking this ideaLeaving this Ideas discussion open for the product ask (official integrations should report task titles). Separately, the metadata CLI currently has real bugs that block reliable title reporting from hooks/integrations:
These are filed as template-compliant bug reports. The original feature request remains here in Discussions. |
|
Opened as issue for tracking: #1775 Related reproducible metadata CLI bugs: |
|
Hey, Mario here, creator of pi. I was just trying out herdr today and fixed up the herdr pi extension to report metadata correctly: https://gist.github.com/badlogic/d201ca89b3af03d974961f64607739f6 Happy to send a PR! |
A narrower path that needs no integration changesComplementary to the integration-reported metadata ask above, not a replacement: there is a subset of this problem Herdr can already solve on its own, because the data is already in the runtime and simply unused by the tab bar. The data already arrivesClaude Code (and several other agents) broadcast their session name over OSC 0/2. Herdr already captures this: So when a user runs The gap
tab.custom_name.clone().unwrap_or_else(|| (tab_idx + 1).to_string())No terminal-title term. A tab running an agent with a meaningful session name still renders as What a third resolution step looks like
Repaint is the one non-obvious piece: the existing full-render trigger for title changes is gated on a sidebar token being configured, so it has to widen to "a derived tab name actually changed" or the tab bar goes stale until unrelated input arrives. Why this is worth separating from the integration ask#1775 was closed It does not cover what #1725 asks for. Pane-level metadata titles, non-focused panes, and agents that set no terminal title all remain unsolved, and a first-prompt-derived title is strictly better than a session name. But it turns the most common case — one agent per tab, user renames the session — into something that works without ecosystem coordination. I have this implemented and running locally against 0.7.5 (config flag, agent/focus gating, API and persistence boundary, width clamp, repaint trigger, tests). Happy to open a PR if this direction is wanted; equally happy to leave it if the tab bar is deliberately explicit-rename-only. |
Uh oh!
There was an error while loading. Please reload this page.
Summary
Pane renaming / task-title metadata is missing from Herdr's official integrations, and that gap is crucial.
Herdr already has the right primitives:
herdr pane report-metadata --title ... --display-agent ...herdr pane renameherdr agent renameBut the shipped integrations (Pi, OMP, Claude Code, Codex, OpenCode, Cursor, Factory, etc.) only call:
pane.report_agent_sessionpane.report_agentpane.release_agentThey never call
pane.report_metadatawith a useful--title/--display-agentderived from the user's task.Result: a herd of panes all labeled
pi,claude,codex,opencode— useless when you have 5–15 agents running.Why this is crucial
Herdr's value proposition is seeing the whole herd at a glance. Without task-derived pane titles:
herdr agent focusrequires guessing which pane is which.rjyo/herdr-window-title-syncexplicitly prefer Herdr pane metadata title first, then fall back to scraping session files. When integrations don't report titles, the ecosystem has to reverse-engineer prompts from disk.herdr-auto-namer,herdr-plugin-renamer, terminal-title hooks per agent) because the core loop doesn't do the obvious thing.This is not a nice-to-have cosmetic. Task identity is the primary UX surface of an agent multiplexer.
Current state (reproduced on herdr 0.7.5)
Installed official integrations checked — none report metadata titles:
report_metadata/ title?~/.pi/agent/extensions/herdr-agent-state.ts~/.omp/agent/extensions/herdr-omp-agent-state.ts~/.claude/hooks/herdr-agent-state.sh~/.codex/herdr-agent-state.sh~/.config/opencode/plugins/herdr-agent-state.jsDocs already show the intended pattern (
website/src/content/docs/integrations.mdx):…but that is left as a user hook exercise instead of being built into the integrations that already observe prompts/sessions.
Proposed fix (core + integrations)
1. Official integrations should report titles by default
On first user prompt (and on meaningful task changes), each integration should:
Sources of title, in priority order:
claude2. Keep lifecycle and presentation separated (already designed)
Continue using
report_agentfor idle/working/blocked only.Use
report_metadatafor title/display-agent/state-label.This matches the existing architecture from #36 / 0.6.3.
3. Optional: auto-title helper in Herdr core
A small shared helper used by all integrations:
summarize_title(prompt) -> string(local heuristic first; optional model later)4. Document as a first-class integration requirement
In integration authoring docs, mark task title reporting as required, not optional:
Acceptance criteria
herdr-window-title-synccan prefer integration-reported metadata without scraping JSONLRelated ecosystem pressure (symptoms of this gap)
These exist because pane renaming is missing from the default loop. Closing this in core integrations would collapse a lot of fragile per-agent glue.
Environment
herdr integration install …Thanks — happy to test a PR against Pi + Claude integrations first.
All reactions