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 5 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 recognized agent, supplies bundled and published screen-state detection rules, and exposes per-agent sound configuration.
Confidence Score: 5/5The PR appears safe to merge. No blocking failure remains.
|
| Filename | Overview |
|---|---|
| src/detect/mod.rs | Adds Muse identity, aliases, executable metadata, and constrained matching for versioned Muse binaries while addressing prior basename and overbroad-prefix findings. |
| src/detect/manifests/muse.toml | Adds prioritized Muse screen-state rules and aligns picker and working regions to resolve the previously reported stale-picker suppression. |
| website/agent-detection/muse.toml | Publishes a synchronized copy of the bundled Muse detection manifest. |
| src/config/sound.rs | Adds a defaulted Muse-specific sound setting and maps it from Agent::Muse. |
| src/detect/manifest.rs | Registers the Muse manifest in the bundled manifest catalog. |
| website/agent-detection/index.toml | Adds Muse to the published agent-detection index. |
Flowchart
%%{init: {'theme': 'neutral'}}%%
flowchart LR
PROC[Foreground process name or argv0] --> NORMALIZE[Normalize suffix and basename]
NORMALIZE --> IDENTIFY[Identify Agent::Muse]
SCREEN[Rendered pane text] --> RULES[Muse manifest rules]
IDENTIFY --> RULES
RULES --> STATE[Idle / Working / Blocked / Unknown]
STATE --> UI[Pane state and Muse sound override]
Reviews (6): Last reviewed commit: "fix(detect): add enter save to muse menu..." | 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
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).