feat(detect): add muse agent with generic Pick blocked detection - #2489
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:
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (16)
🚧 Files skipped from review as they are similar to previous changes (3)
Included review availability: Your plan provides up to 10 included reviews per hour; 9 remain after this review. 📝 WalkthroughWalkthroughThe change adds Muse as a supported agent, detects its terminal states through a bundled manifest, adds Muse sound overrides, updates canonical-agent coverage, and documents Muse support in English, Japanese, and Chinese. ChangesMuse detection integration
Estimated code review effort: 3 (Moderate) | ~20 minutes Merge Risk: ⚪ Minimal · up to This PR adds Muse detection and broadens Pick-blocked detection to use the generic selection prompt; no actionable merge-blocking risk remains after normal checks and review. Sequence Diagram(s)sequenceDiagram
participant DetectionEngine
participant MuseManifest
participant TerminalPane
DetectionEngine->>MuseManifest: Evaluate Muse detection rules
MuseManifest->>TerminalPane: Inspect terminal evidence
TerminalPane-->>MuseManifest: Return state evidence
MuseManifest-->>DetectionEngine: Return Muse state and visibility flags
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
Full details: Docstring CoverageExplanation Docstring coverage is 60.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 15 functions across 5 files. (11 skipped: 11 unsupported.) ✨ Finishing Touches 💡 1🛠️ Fix failing CI checks 💡
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. 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 supported agent, including executable identification, screen-state detection, per-agent sound configuration, tests, and user documentation.
Confidence Score: 5/5The PR appears safe to merge. No blocking failure remains.
|
| Filename | Overview |
|---|---|
| src/detect/mod.rs | Adds Muse identity, executable mapping, exact aliases, and path-aware recognition of versioned Muse binaries; the previously reported path and prefix issues are addressed. |
| src/detect/manifests/muse.toml | Defines scoped and prioritized Muse state rules; the previously reported stale-picker negative gate is now aligned with the live bottom-screen region. |
| src/detect/manifest/tests.rs | Covers representative Muse working, picker, approval, menu, and idle states. |
| src/config/sound.rs | Adds a defaulted Muse-specific sound override and maps detected Muse agents to it. |
| src/config/sidebar.rs | Replaces a manually maintained test list with the canonical Agent::ALL registry. |
| src/detect/manifest.rs | Registers the bundled Muse screen manifest. |
| docs/next/website/src/data/config-reference.json | Documents the Muse per-agent sound configuration key. |
Flowchart
%%{init: {'theme': 'neutral'}}%%
flowchart LR
P[Foreground process or argv0] --> N[Normalize extension and basename]
N --> I{Muse executable or alias?}
I -->|No| U[Unknown or another agent]
I -->|Yes| M[Load Muse manifest]
M --> S[Evaluate bottom-screen rules]
S --> O[Idle, Working, Blocked, or Unknown]
O --> A[Pane state and sound policy]
Reviews (10): Last reviewed commit: "fix(detect): prevent false muse blocked ..." | 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
c79c502 to
6240e1b
Compare
- 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
|
@ohk this is still useful and the implementation review is clean. the vendor captures cover the required idle, working, picker, trust, menu, and approval states, and the final rules keep those controls in bounded bottom regions. please rebase onto current master, add the feature entry to |
- 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
Agent::ALL and SCREEN_MANIFEST_AGENTS gained an entry from master but kept stale size annotations, breaking compilation after rebase. refs herdrdev#2489
541fc30 to
380087c
Compare
|
@ogulcancelik done — rebased onto current master, added the changelog entry, and fixed two small things the sync surfaced (stale agent array sizes, missing ui.sound.agents.muse in the config reference). all checks pass and the state cycle looks good against the current muse build. bots are running on the new head. |
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
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.
Agent::ALL and SCREEN_MANIFEST_AGENTS gained an entry from master but kept stale size annotations, breaking compilation after rebase. refs herdrdev#2489
380087c to
14d158d
Compare
|
@coderabbitai review |
✅ Action performedReview finished.
|
|
Note GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer. |
|
@ohk i've simplified some stuff, could you verify if this branch works with muse before i merge? |
|
@ogulcancelik approved. All changes working. You can merge it. Thanks for simplification. |
The muse manifest shipped without its website/agent-detection mirror, so agent_detection_manifest_check.py --require-website failed with a missing bundled agent. Copy the bundled manifest byte-identically and list it in the catalog. Also ignore the local /.omp/ agent harness directory. refs herdrdev#2489
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).