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
Copilot CLI panes currently fall back to terminal scrollback rather than a structured conversation. On main at ee2daec0, Copilot is absent from SUPPORTED_AGENT_KINDS and resolveTranscript has no Copilot reader, despite existing detection, icon and usage-meter support.
Proposal
Would you accept a narrowly scoped native Copilot CLI chat transcript adapter?
Read the pane's explicitly reported Copilot session from its native session-state/<session-id>/events.jsonl store, without guessing from cwd or modification time.
Map user/assistant messages and tool activity onto the existing conversation contract and chat UI.
Reuse the existing bounded history pagination, transcript monitoring and PTY message-send path.
Respect the pane's custom Copilot home, refuse ambiguous/missing bindings, and test resume/session switches and simultaneous panes.
Leave approvals, interactive menus, session browsing and new UI concepts out of this initial scope; users continue to handle those in Terminal.
The persisted event format and session binding need validation against an actual Copilot CLI version, not only SDK types. Parser, resolver, HTTP-contract and isolated browser tests would accompany the adapter.
Where it exists today
Copilot CLI already displays its own saved chat in its TUI. This proposal mirrors that history in the same Chat lens that Herdr Web UI uses for Claude Code, Codex and Hermes; it does not introduce a separate chat product or agent API.
Workarounds and alternatives
Use the Terminal view today. The usage meter and icon do not provide structured conversation history.
I am evaluating this in a personal fork for my own use. I understand upstream's feature-approval policy and will not open an upstream implementation PR without maintainer agreement on the scope above.
A runtime spike found an important dependency for the proposed exact session binding.
With Herdr 0.9.3 and Copilot CLI 1.0.102-1 in an isolated test daemon/home, the official SessionStart hook correctly reported the first session UUID. After interactive /new, /clear, and /resume, Copilot persisted the new/current UUID in successful hook.start/hook.end events, but both agent.get and the snapshot retained the first UUID. The process PID and launch argv stayed unchanged throughout.
The 0.9.3 hook emits a fresh seq but does not forward the hook input's lifecycle source. More importantly, session_report_allows_session_replacement in src/terminal/state.rs has no Copilot case. A separate owned API probe using a fresh greater sequence and session_start_source=new also returned success without replacing the session ID.
Consequently, checking that the reported file exists and its session.start.data.sessionId matches is insufficient: it still matches the old conversation after a switch. I am evaluating current-process held-file evidence as a read-only alternative; I will not use cwd/newest-session guessing or assume launch argv tracks interactive switches. No upstream implementation PR is being opened while approval and this binding question remain unresolved.
Both branches are independently based on upstream main at d5a35b7a, with current upstream conflicts resolved. The native reader remains narrowly scoped:
Linux only, with an exact hook-reported UUID, matching native header, and unambiguous current-process held-session evidence in that process's effective Copilot home.
No cwd/newest-file guessing. Ambiguous in-process session switches retain Terminal rather than displaying a guessed or stale history.
A fresh process holding exactly one session whose transcript does not yet exist can show an empty chat, including when started directly in Terminal. This exception never reads unreported existing history.
Existing bounded chat/pagination, tool presentation, and PTY sends; approvals, interactive menus, and session browsing remain out of scope.
The independent chat branch passes full fast checks (6,076 unit tests, 0 failed, 12 existing skips), its native HTTP contract, and an owned-fixture browser check covering native rendering, tool output, appended history, desktop/mobile layout, and composer-to-PTY delivery. The fixture does not invoke a real model and uses isolated configuration. Full integration/browser lanes and native Windows install checks have not been run locally.
Would you accept an upstream PR with this scope and the documented Linux/session-switch limitations? I will continue to wait for maintainer agreement before submitting the chat implementation upstream.
Update to my earlier plan to wait before submitting: I have now opened #1652 so the proposed scope can be evaluated against the working implementation.
The PR explicitly states that maintainer agreement on this issue is still pending, acknowledges CONTRIBUTING.md, and is fine to close if the feature or scope is not wanted. This supersedes my earlier statements that I would wait before opening the implementation PR; it does not imply that approval has been granted.
It also references #1442 as a similar native-transcript integration into the existing conversation contract and chat UI, not as an approved precedent or a dependency. The Copilot-specific session identity safeguards and Linux/session-switch limitations are documented in the PR.
The independent launcher-only fix remains #1650. No additional implementation changes were made for this submission; #1652 uses the same independently verified native-chat branch.
Closing: native Copilot CLI chat landed in #1652 (5254f26, thanks @YuuuXie). resolveTranscript in server/conversation.ts routes a Copilot pane to copilotTranscriptPath, and the reader is server/copilot-store.ts; #1650 (c952eb5) offers an installed Copilot in the new-session menus. Follow-ups are tracked on their own: command completion in #1953, and keeping the history on a failed refresh in #2066 (open PR #2068).
Activity
YuuuXie commentedon Oct 21, 2026
A runtime spike found an important dependency for the proposed exact session binding.
With Herdr 0.9.3 and Copilot CLI 1.0.102-1 in an isolated test daemon/home, the official
SessionStarthook correctly reported the first session UUID. After interactive/new,/clear, and/resume, Copilot persisted the new/current UUID in successfulhook.start/hook.endevents, but bothagent.getand the snapshot retained the first UUID. The process PID and launch argv stayed unchanged throughout.The 0.9.3 hook emits a fresh
seqbut does not forward the hook input's lifecyclesource. More importantly,session_report_allows_session_replacementinsrc/terminal/state.rshas no Copilot case. A separate owned API probe using a fresh greater sequence andsession_start_source=newalso returned success without replacing the session ID.References:
Consequently, checking that the reported file exists and its
session.start.data.sessionIdmatches is insufficient: it still matches the old conversation after a switch. I am evaluating current-process held-file evidence as a read-only alternative; I will not use cwd/newest-session guessing or assume launch argv tracks interactive switches. No upstream implementation PR is being opened while approval and this binding question remain unresolved.YuuuXie commentedon Oct 22, 2026
I have separated the small launcher bug fix from native transcript support:
Both branches are independently based on upstream
mainatd5a35b7a, with current upstream conflicts resolved. The native reader remains narrowly scoped:The independent chat branch passes full fast checks (6,076 unit tests, 0 failed, 12 existing skips), its native HTTP contract, and an owned-fixture browser check covering native rendering, tool output, appended history, desktop/mobile layout, and composer-to-PTY delivery. The fixture does not invoke a real model and uses isolated configuration. Full integration/browser lanes and native Windows install checks have not been run locally.
Would you accept an upstream PR with this scope and the documented Linux/session-switch limitations? I will continue to wait for maintainer agreement before submitting the chat implementation upstream.
YuuuXie commentedon Oct 22, 2026
Update to my earlier plan to wait before submitting: I have now opened #1652 so the proposed scope can be evaluated against the working implementation.
The PR explicitly states that maintainer agreement on this issue is still pending, acknowledges CONTRIBUTING.md, and is fine to close if the feature or scope is not wanted. This supersedes my earlier statements that I would wait before opening the implementation PR; it does not imply that approval has been granted.
It also references #1442 as a similar native-transcript integration into the existing conversation contract and chat UI, not as an approved precedent or a dependency. The Copilot-specific session identity safeguards and Linux/session-switch limitations are documented in the PR.
The independent launcher-only fix remains #1650. No additional implementation changes were made for this submission; #1652 uses the same independently verified native-chat branch.
fix(agents): offer installed Copilot in new-session menus (#1650)
feat(chat): read native Copilot CLI transcripts (#1652)
devswha commentedon Oct 27, 2026
Closing: native Copilot CLI chat landed in #1652 (5254f26, thanks @YuuuXie).
resolveTranscriptinserver/conversation.tsroutes a Copilot pane tocopilotTranscriptPath, and the reader isserver/copilot-store.ts; #1650 (c952eb5) offers an installed Copilot in the new-session menus. Follow-ups are tracked on their own: command completion in #1953, and keeping the history on a failed refresh in #2066 (open PR #2068).