Talk to a session: a page you hold a conversation with #67
No reviewers
Labels
No labels
bug
documentation
duplicate
enhancement
good first issue
help wanted
invalid
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
iterative-works/claude-code-query!67
Loading…
Reference in a new issue
No description provided.
Delete branch "cc-chat"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Slice — Talk to a session (cc-chat/04)
Goal. I can hold a conversation with an agent from a browser page: I type, it answers, I watch
it work, and I stop it when it goes the wrong way. The page is where the conversation happens, not
a window onto one happening somewhere else.
Fit test — passed on Michal's own read (2026-08-28). He asked a real question about real code
through the page, interrupted and redirected it, and acted on the answer. Nothing typed was lost,
the page never looked frozen, and stop stopped the agent rather than the page's reading of it.
What ships
/v1/sessions/{session}, withmarkup,follow,artifact,sendandinterruptbeneath it— and a version marker opens every address.
TranscriptEndpoint/TranscriptApibecameSessionEndpoint/SessionApi: the transcript is one part of a session, not the other way round.The rendering path's refusal is typed as what the wire actually carries (a status and the page
the host rendered), where it had been typed as a failure whose reading direction was a constant.
Sessions(zio). The live sessions one host holds, each under the id the CLI named it with,each bounded by its own scope: let go of when its process ends, and all of them when the host
stops. It holds a process, never a conversation — the transcript stays the CLI's own file.
refuse in their own vocabulary (
SessionFailure), because a transcript that cannot be read isnot a session that will not take what was typed.
nobody has sent yet. One control beside the box — Send while there is nothing to stop, Stop while
the agent is working — and what a person had typed survives stopping, because stopping is how a
turn that went the wrong way is redirected.
message on the follow (not started here / ready / working). Three things turn on it — whether
there is a box at all, whether it is shut, and what the page says for itself.
DontAskwith a read-only allow-listand a deny-list for the tools that leave marks.
Two findings worth reading
dontAskthe CLI reads each Bash command and permits theones it judges harmless: the agent ran
fd -e scala . ui/src | sortthough Bash was in noallow-list, while a writing command was refused and no file appeared. The host now names the
mark-making tools in
disallowedTools, where a refusal outranks every permission.circe decoders took the bundle to 196 245 bytes gzipped — worse than before CC-D3. It reads them
with the platform's parser now (98 758), and
BundleWeightTestweighs the shipped bundle onevery
ui.testrun.Follow-ups (parked, not deferred work from this card)
--restrictedas a session option in the SDK — the construction the card's invariant describes.Every operation now hangs under the session it is about — /v1/sessions/{session}, and markup, follow and artifact beneath it — instead of asking for the session as a parameter beside a flat path. The version opens every address, so a later shape can be served beside this one. A refusal on the rendering path is typed as what the wire carries: a status and the page the host rendered. It was typed as a TranscriptFailure whose reading direction was a constant, which would have told a client the wrong case for every failure. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DS9XLuXRvpbEuV9ZE3Whn1