Skip to content

feat(chat): support native Muse Code conversations #1702

Closed

Description

@jpcarranza94

Problem

Muse Code panes have no Chat. herdr labels them muse (process detection), and Ovis already draws the Muse mark, but nothing reads Muse's session log, so Chat answers "Conversation unavailable" and the phone falls back to Terminal.

herdr has no Muse integration, so a Muse pane carries no agent_session. Choosing a log by working directory or by newest file is unsafe: on my machine five Muse panes run in one repository, and three of them were started without a session id in argv.

Proposal

Read the Muse session log (${XDG_DATA_HOME:-~/.local/share}/muse/sessions/YYYY/MM/DD/<uuid>/session.jsonl) through the existing conversation API, pager and Chat view. Reading makes no model call and needs no Muse configuration.

Binding. Each session directory holds a .session.lock with pid=<pid> and, on recent builds, host=<host>. Take the pane's one Muse foreground process, then the top-level locks that name its pid (and this host, when a host is written) and were written at or after the process started. Drop sessions whose log ends with session.end: Muse writes it when the TUI switches to another session. Bind only when exactly one session is left; otherwise keep Terminal.

Muse never deletes these locks, so the start-time check excludes a pid the OS reused, and the session.end check follows an in-TUI /resume. On my machine all seven live Muse processes map to exactly one session this way, including the four that argv alone cannot name.

First scope. User prompts (runtime.user_intent.accepted), assistant text, reasoning summaries, tool calls with their results (error, denied and exit-code state), compaction summaries, the model label, and history paging. Each would follow later in its own PR, one at a time: prompt cards (Muse logs approval/requested and run/user_input_prompt_requested), send verification, Earlier sessions and resume (muse resume <id>, session-index.db), the command catalog, todos and plan, subagents, and images.

The record types that carry the transcript are the same from Muse 1.4.2 to 1.4.12 (checked against local logs; 1.4.12 only adds bookkeeping records).

Where

Chat and prompt cards

Where it exists today

Ovis reads native transcripts for Claude Code, Codex, Grok, Antigravity and the other agents in Supported agents; this adds Muse to that list. For Muse itself, Collie, another herdr web client (MIT), reads Muse session logs for its History and Chat. Its record mapping informed this proposal. Collie binds a pane by argv and working directory; the lock-based binding above is new.

Workarounds and alternatives

Terminal works today. Binding by working directory and newest file mixes up panes in one folder. Binding only by muse resume <uuid> in argv misses a plain muse launch and an in-TUI switch. Muse's session-index.db lists sessions, but not the process that holds each one.

Activity

  1. added a commit that references this issue on Oct 26, 2026
    e32df98
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions