Skip to content

feat: /resume in a structured chat, and a loaded skill shows as a step - #117

Merged
sean-brydon merged 3 commits into
mainfrom
feat/resume-picker
Oct 15, 2026
Merged

sean-brydon merged 3 commits into
mainfrom
feat/resume-picker

Conversation

@sean-brydon

Copy link
Copy Markdown
Collaborator

Two fixes for structured (Labs) chats.

/resume works

Before, a structured agent had no screen for its own /resume picker, so typing it did nothing useful. Now the chat opens Shipyard's own list of the agent's past conversations in the folder, newest first:

  • Claude Code: read from Claude's own session files for the folder, so conversations you had in its terminal show up too. Titles are your /rename, else Claude's own title, else the first prompt.
  • ACP agents that offer session/list (OpenCode, for one): their list.
  • Codex: not yet. The list says to use its terminal.

Picking one carries it on in the same tab. For Claude, its transcript is copied into the new conversation's record, so the earlier turns show in the chat. ACP agents are loaded with session/load, and their replay shows once. The conversation you leave stays under Resume a conversation. The chat's current conversation is marked this chat, and one running in another tab is shown but can't be picked. /resume words opens the list filtered by those words.

Box API: GET /v1/sessions/{name}/past, and POST /v1/sessions/{name}/resume taking { agent_session_id }. The new capability is sessions.past; on an older berthd, /resume is sent to the agent as before.

Light Dark
resume picker, light resume picker, dark

A skill no longer shows as your message

In Claude Code's stream, a skill's instructions come back as a user line marked isSynthetic. Its terminal transcript marks the same line isMeta, which the chat already skipped. The chat drew the whole skill as a message from you (the berth-orchestrate screenshot). Now that line is skipped too, and the Skill call is a step of its own: Worked · used 1 skill › Used the acme-perf-budget skill. I confirmed the stream's format with a recorded claude -p stream-json run of a throwaway skill.

Light Dark
skill step, light skill step, dark

Screenshots are from the mock app (?structured makes search-perf's Claude structured, with synthetic acme data).

Checks

  • go vet ./... && go test -race ./...: all 36 packages ok. New tests: Claude's titles and ordering; a real berthd with the stand-in Claude listing and carrying on a terminal conversation (its history shows, the old one stays resumable, a bad id gives 400 and an unknown one 404); the same over ACP with session/list and session/load replay; the ACP replay shown only once; a synthetic skill line not shown.
  • App: typecheck:plugins, check:titles, check:csp, check:themes, pnpm test (498 pass), build, tsc -p e2e.
  • e2e/resume-picker.spec.ts: 3 pass.
  • Docs build.
  • cargo check not run: no Rust changes.

🤖 Generated with Claude Code

…ersations, and a loaded skill shows as a step

A structured agent has no screen for its own /resume, so the chat opens the
app's picker: Claude Code's conversations in the folder (those had in its
terminal too) or an ACP agent's session/list, newest first. Picking one
carries it on in the same tab, its earlier turns in the chat, and the
conversation it leaves stays resumable.

A skill's instructions come back in Claude Code's stream as a user line
marked isSynthetic, which the chat drew as the person's message. It is
skipped now, and the Skill call is a step of its own.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@vercel

vercel Bot commented Oct 15, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
berth Ready Ready Preview Oct 15, 2026 12:59pm UTC
berth-docs Ready Ready Preview Oct 15, 2026 12:59pm UTC

Request Review

…or never echoing again

The "noticed" case wrote right after removing the laptop, before the
daemon's next 50 ms look: on a slow runner the line echoed first and the
cut then ended the stream cleanly, which failed the test though the stream
was closed as it should be.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@sean-brydon
sean-brydon merged commit e089467 into main Oct 15, 2026
8 checks passed
@linear-code

linear-code Bot commented Oct 15, 2026

Copy link
Copy Markdown

ENG-6202

@sean-brydon sean-brydon mentioned this pull request Oct 15, 2026

This branch was successfully deployed

2 active deployments
Preview – berth-docs — 4f080d9c Deployed Oct 15, 2026 by vercel[bot]
Preview – berth — 4f080d9c Deployed Oct 15, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant