Skip to content

feat: add hermes-status plugin#898

Open
Mel-SRK wants to merge 6 commits into
noctalia-dev:mainfrom
Mel-SRK:add-hermes-status
Open

feat: add hermes-status plugin#898
Mel-SRK wants to merge 6 commits into
noctalia-dev:mainfrom
Mel-SRK:add-hermes-status

Conversation

@Mel-SRK

@Mel-SRK Mel-SRK commented May 29, 2026

Copy link
Copy Markdown

Hermes Agent Status Plugin

Traffic-light status indicator for Hermes Agent (CLI + Gateway) in Noctalia Shell.

What it does

Shows real-time Hermes Agent status in the status bar:

Icon Color Status Trigger
Green Online Gateway running, idle
Blue Busy Thinking, tool call, processing
🔔 Amber Needs You Awaiting user approval
Orange Degraded Platform connection issue
Red Offline Gateway not running

Architecture

hermes hooks → hermes-status-hook → signal file → noctalia plugin (QML)
  • Hook writes are sub-second; UI refreshes on signal file change
  • Fallback polling every 30s for gateway/platform status
  • Busy signals auto-revert after 30s stale timeout

Features

  • Real-time hook-based status updates
  • Click-to-expand detail panel (Gateway PID, session state, tokens, platform connections)
  • Settings UI (script path, poll interval, signal file path, hide when idle)
  • Supports Niri compositor

Preview

preview

Source

Full source and installation guide: https://github.com/Mel-SRK/noctalia-hermes

Traffic-light status indicator for Hermes Agent (CLI + Gateway).
Shows online/busy/attention/degraded/offline states in the status bar
with real-time hook-based updates via hermes shell hooks.

Features:
- Real-time status via hook signal file (sub-second latency)
- Fallback polling with configurable interval
- Click-to-expand detail panel (Gateway PID, session, tokens, platforms)
- Settings UI for script path, poll interval, signal file
- Supports Niri compositor
@github-actions

This comment was marked as resolved.

@github-actions

This comment was marked as resolved.

… defaults

- Remove unnecessary 'official' property from manifest.json
- Add sectionWidgetIndex/sectionWidgetsCount defaults per AGENTS.md
- Remove translation fallbacks (tr() handles missing keys)
- Replace hardcoded text in Panel.qml with pluginApi?.tr() calls
- Replace hardcoded spacing: 4 with Style.marginS
- Add i18n/en.json and i18n/zh-CN.json translations
@Mel-SRK Mel-SRK force-pushed the add-hermes-status branch from 8b86860 to 264002e Compare May 30, 2026 08:18

@spiros132 spiros132 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some feedback about the PR! :D

Comment thread hermes-status/Main.qml Outdated
readonly property string scriptPath: {
var cfg = pluginApi?.pluginSettings || {};
var defaults = pluginApi?.manifest?.metadata?.defaultSettings || {};
return cfg.statusScript ?? defaults.statusScript ?? "~/.config/noctalia/hermes-status-check";

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would suggest changing this path so that it doesn't point to the root folder of the noctalia config folder. For example maybe it would be better if you used the cache folder, ~/.cache/noctalia/plugins/hermes-status/hermes-status-check

Comment thread hermes-status/manifest.json Outdated
@@ -0,0 +1,34 @@
{
"id": "hermes-status",
"name": "Hermes Agent",

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hermes Agent or Hermes Agent Status?

Comment thread hermes-status/manifest.json Outdated
"Panel",
"AI",
"Indicator",
"Niri"

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this plugin only for niri or would it also work on the other compositors as well?

Comment thread hermes-status/README.md

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe the README file needs to be in English.

Comment thread hermes-status/README.md Outdated
## 效果
![](README_20260529162507901.png)

![](README_20260529154926688.png)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't see where these pictures exist.

Comment thread hermes-status/Settings.qml Outdated
NTextInput {
Layout.fillWidth: true
text: cfg.statusScript ?? pluginApi?.manifest?.metadata?.defaultSettings?.statusScript ?? ""
placeholderText: "~/.config/noctalia/hermes-status-check"

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As before this file shouldn't be in the noctalia config root folder.

Comment thread hermes-status/manifest.json Outdated
},
"metadata": {
"defaultSettings": {
"statusScript": "~/.config/noctalia/hermes-status-check",

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As the above comment, this shouldn't be in the noctalias root config.

- Move config path from ~/.config/noctalia/ to ~/.cache/noctalia/plugins/hermes-status/
- Rename plugin to 'Hermes Agent Status'
- Remove Niri tag (no niri-specific APIs used)
- Translate README to English
- Fix image references
@github-actions

This comment was marked as resolved.

@github-actions

This comment was marked as resolved.

Mel-SRK added 3 commits June 3, 2026 10:35
- Add multi-process tracking: per-session process list with ListModel,
  activeCliCount, process state icons, source labels (GW/CLI/Cron)
- Fix pendingRefresh: rapid hook updates no longer dropped when a
  status check is already in-flight
- Fix clearAttention: only clear needsAttention after rm succeeds
  (onExited callback instead of optimistic clear)
- Add missing i18n keys: event.finalizing, event.reset, panel.gw,
  panel.cli, panel.cron, panel.dead
- Bump version to 2.0.0
- Panel: increase size to fit process list, add process helpers
- Add fetchWatchdog (15s): force-resets fetchState if statusProcess
  onExited never fires (process crash, QML engine bug)
- IPC refresh now uses force=true to bypass stuck loading guard
- Downgrade stale busy signals for live processes after 180s
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.

2 participants