feat(detect): add muse agent with generic Pick blocked detection - #2489
feat(detect): add muse agent with generic Pick blocked detection#2489ohk wants to merge 6 commits into
Conversation
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughAdds Muse as a supported agent. The change defines Muse aliases and executable mappings, adds bundled and website detection manifests for terminal states, and adds Muse sound override configuration. ChangesMuse detection integration
Estimated code review effort: 3 (Moderate) | ~20 minutes Sequence Diagram(s)sequenceDiagram
participant DetectionEngine
participant MuseManifest
participant TerminalPane
DetectionEngine->>MuseManifest: evaluate Muse detection rules
MuseManifest->>TerminalPane: inspect terminal evidence
TerminalPane-->>MuseManifest: provide blocked, working, or idle evidence
MuseManifest-->>DetectionEngine: return Muse state
Possibly related PRs
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
|
Hi @ohk, thanks for your interest in contributing. Herdr does not accept unsolicited implementation pull requests from contributors who are not listed in The pull request author is not an approved contributor. If you encountered a reproducible bug, report the observed behavior through the bug issue template. A report does not reserve the work or authorize a pull request; accepted fixes are normally implemented by Herdr’s maintainer-controlled agents. Feature requests, behavior changes, and other proposals belong in GitHub Discussions. Do not open an issue merely to justify an implementation that was already written. If a maintainer explicitly wants this implementation, they can reopen the pull request. Reopening by anyone else will be closed again automatically. See https://github.com/herdrdev/herdr/blob/master/CONTRIBUTING.md for the contribution policy. |
There was a problem hiding this comment.
Actionable comments posted: 3
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro Plus
Run ID: 79b2bc5b-5e09-4326-8058-6f7f02062b92
📒 Files selected for processing (6)
src/config/sound.rssrc/detect/manifest.rssrc/detect/manifests/muse.tomlsrc/detect/mod.rswebsite/agent-detection/index.tomlwebsite/agent-detection/muse.toml
Greptile SummaryThe PR adds Muse as a screen-detected agent, including process identification, state manifests, sound configuration, catalog publication, and documentation.
Confidence Score: 4/5The PR should not merge until stale picker chrome can no longer override a current Muse working indicator. The prior stale-picker defect remains: within the shared bottom-eight-line region, the higher-priority picker rule reports blocked and the working rule explicitly rejects the same stale anchor, so current activity can still be hidden. Files Needing Attention: src/detect/manifests/muse.toml and website/agent-detection/muse.toml
|
| Filename | Overview |
|---|---|
| src/detect/mod.rs | Adds Muse to the agent registry and safely narrows executable recognition while supporting path-qualified versioned launchers. |
| src/detect/manifests/muse.toml | Adds comprehensive Muse screen-state rules, but the previously reported stale-picker transition remains unresolved. |
| website/agent-detection/muse.toml | Publishes the synchronized Muse manifest and therefore carries the same outstanding stale-picker behavior. |
| src/config/sound.rs | Adds a defaulted Muse sound override and maps it to the new agent variant. |
| src/detect/manifest.rs | Registers the bundled Muse manifest without changing rule-engine semantics. |
| website/agent-detection/index.toml | Adds Muse to the remote manifest catalog. |
Flowchart
%%{init: {'theme': 'neutral'}}%%
flowchart LR
PROC[Foreground process] --> LOOKUP[Normalize basename and identify Muse]
LOOKUP --> MANIFEST[Muse screen manifest]
SCREEN[Bottom-buffer screen text] --> MANIFEST
MANIFEST --> STATE[Idle / Working / Blocked]
STATE --> UI[Pane and workspace status]
STATE --> SOUND[Muse sound override]
Reviews (7): Last reviewed commit: "docs: add Muse to supported agents table" | Re-trigger Greptile
- manifests: change working_esc_interrupt and blocked_approval
from whole_recent to bottom_non_empty_lines(8) to use captured
bottom-buffer controls instead of incidental whole-pane text
- manifests: anchor idle_prompt line_regex to ^\s*⟩\s*$ so working
chrome "⟩ ..." does not match idle
- runtime: restrict muse lookup to explicit aliases
(muse|muse-bin|muse-code|muse-cli), remove starts_with("muse")
fallback that misclassified museum/muse-helper/muser; add
positive/negative identification tests
- keep website mirror identical; verified with agent_detection
manifest check --require-website
refs herdrdev#2489
refs herdrdev#2456
ef121fd to
4320fe1
Compare
|
Muse Code team member here — glad to see this. I've been validating Muse detection against the live UI from the vendor side ( 1. 2. 3. The startup workspace-trust dialog reads as idle. One smaller note: Happy to share the raw captures for any of these. Separately, #2588 proposes the session-identity + resume half ( |
|
@ohk following up on the edge-case question — a few more, all from live captures on the vendor side, roughly by impact:
Raw captures available for any of these. |
- manifests: widen pick_request_blocked to bottom_non_empty_lines(8) and add Enter to toggle for multi-select; add menu_request_blocked for user-opened pickers (enter confirm/esc go back/esc close/space toggle); add workspace_trust_blocked for Do you trust dialog; tighten blocked_approval to footer chrome Allow once/Always allow/Yes proceed; split idle_prompt into any gate for empty and typed draft and not-gate pick/menu anchors; change idle_status_fallback from YOLO to model \u00b7 effort \u00b7 cwd shape - runtime: replace bare muse-bin alias with muse-bin-<version> digit check to match versioned launcher binary and avoid museum/muse-binary false positives - cross-checked with vendor-side captures reported on PR herdrdev#2489 against strings in shipped muse-bin binary refs herdrdev#2489
|
@mjdouglas Thanks for the detailed vendor-side captures — cross-checked against strings in the shipped Your 3 findings (2026-08-10 17:08):
Your 8 edge cases (20:54):
Also: Verified: #2588 Raw captures appreciated — happy to adjust if you see more menu verbs. |
There was a problem hiding this comment.
Actionable comments posted: 1
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro Plus
Run ID: 4cae02a1-d896-4afc-a3af-164bad20ed45
📒 Files selected for processing (3)
src/detect/manifests/muse.tomlsrc/detect/mod.rswebsite/agent-detection/muse.toml
🚧 Files skipped from review as they are similar to previous changes (1)
- src/detect/mod.rs
lookup_agent now uses path_basename before matching so a launcher exec with absolute argv0 like /usr/local/lib/muse/muse-bin-0.1.0-R708.1 is correctly identified. is_muse_versioned_binary also checks basename so direct path-qualified names succeed without relying on the argv0_argv fallback path. Prevents missed Muse detection when screen state and sound overrides are not applied. refs herdrdev#2489
Evidence documents /theme with enter save footer which was not matched. Add enter save to menu_request_blocked any list and to idle_prompt not-gate (highlighted row ⟩ <choice> shares glyph) and keep website mirror in sync. Update evidence comment counts from four to five. refs herdrdev#2489
Add Muse agent manifests and runtime detection for idle/working/blocked states. Blocked Pick is generic on footer 'Enter to select' so any question title/message triggers, fixing missed waiting answer where previous AND-gated rule required specific hint combos. Cover process names muse, muse-bin, muse-code variants and YOLO footer. refs #herdr
- manifests: change working_esc_interrupt and blocked_approval
from whole_recent to bottom_non_empty_lines(8) to use captured
bottom-buffer controls instead of incidental whole-pane text
- manifests: anchor idle_prompt line_regex to ^\s*⟩\s*$ so working
chrome "⟩ ..." does not match idle
- runtime: restrict muse lookup to explicit aliases
(muse|muse-bin|muse-code|muse-cli), remove starts_with("muse")
fallback that misclassified museum/muse-helper/muser; add
positive/negative identification tests
- keep website mirror identical; verified with agent_detection
manifest check --require-website
refs herdrdev#2489
refs herdrdev#2456
- manifests: widen pick_request_blocked to bottom_non_empty_lines(8) and add Enter to toggle for multi-select; add menu_request_blocked for user-opened pickers (enter confirm/esc go back/esc close/space toggle); add workspace_trust_blocked for Do you trust dialog; tighten blocked_approval to footer chrome Allow once/Always allow/Yes proceed; split idle_prompt into any gate for empty and typed draft and not-gate pick/menu anchors; change idle_status_fallback from YOLO to model \u00b7 effort \u00b7 cwd shape - runtime: replace bare muse-bin alias with muse-bin-<version> digit check to match versioned launcher binary and avoid museum/muse-binary false positives - cross-checked with vendor-side captures reported on PR herdrdev#2489 against strings in shipped muse-bin binary refs herdrdev#2489
lookup_agent now uses path_basename before matching so a launcher exec with absolute argv0 like /usr/local/lib/muse/muse-bin-0.1.0-R708.1 is correctly identified. is_muse_versioned_binary also checks basename so direct path-qualified names succeed without relying on the argv0_argv fallback path. Prevents missed Muse detection when screen state and sound overrides are not applied. refs herdrdev#2489
Evidence documents /theme with enter save footer which was not matched. Add enter save to menu_request_blocked any list and to idle_prompt not-gate (highlighted row ⟩ <choice> shares glyph) and keep website mirror in sync. Update evidence comment counts from four to five. refs herdrdev#2489
c79c502 to
6240e1b
Compare
Muse detection (manifest, process identification, sound) was added earlier but docs/next agents table omitted the row. Add Muse as screen manifest / none (no integration hook, consistent with Amp/Kiro/Maki) to en/ja/zh-cn translations.
Add Muse agent detection.
Evidence: herdr pane read --source detection (muse-spark-1.2-contributor 0.1.0) – idle YOLO/⟩, working esc to interrupt.
Replaces #2456 (closed by bot) with sidebar revert (6 files).