Skip to content

feat: add desktop/system notification tool#320

Closed
teyrebaz33 wants to merge 1 commit into
NousResearch:mainfrom
teyrebaz33:feat/318-notification-tool
Closed

feat: add desktop/system notification tool#320
teyrebaz33 wants to merge 1 commit into
NousResearch:mainfrom
teyrebaz33:feat/318-notification-tool

Conversation

@teyrebaz33

Copy link
Copy Markdown
Contributor

Closes #318

Adds two new tools to the notification toolset:

  • notify — sends a native desktop notification (Linux: notify-send, macOS: osascript, Windows: PowerShell toast)
  • notify_sound — plays a system alert sound (Linux: paplay/aplay, macOS: afplay, Windows: SystemSounds)

Both tools fall back to terminal bell (\a) when running over SSH or in headless environments.

Security: no string interpolation into shell commands — title/message passed as list arguments or via environment variables.

Changes:

  • tools/notification_tool.py — new tool module
  • toolsets.py — added notification toolset
  • model_tools.py — registered notification_tool module

@teknium1

teknium1 commented Mar 9, 2026

Copy link
Copy Markdown
Contributor

Closing in favor of a simpler approach: a config-driven terminal bell that fires automatically when the agent finishes a response, rather than a tool the agent has to call.

Implementation: display.bell_on_complete: true in config.yaml — plays \a (terminal bell) after every agent response. Works over SSH, zero dependencies, every terminal supports it.

Thanks for the idea and the clean implementation — the platform detection and security patterns were well done.

@andrueandersoncs

Copy link
Copy Markdown

✅ Completed: Friction Button Visual State Differentiation

Changes Made

Added semantic color coding and improved visual state differentiation to all friction buttons on the Adjustments page.

Implementation Details

1. Semantic Color Coding (each friction type has its own color):

  • 🟡 low-energy: Amber tones for energy-related friction
  • 🔵 short-on-time: Blue tones for time constraints
  • 🟠 missed-meal-prep: Orange tones for meal prep issues
  • 🌸 off-plan: Rose tones for dietary deviations
  • 🔴 missed-workout: Red tones for missed training

2. Visual States (per acceptance criteria):

  • Default: Light tinted background with matching border
  • Hover: Darker border/background with subtle shadow
  • Active: Solid fill with white text, prominent shadow, "Active" indicator
  • Focus: 2px ring with offset for accessibility
  • Mobile: 44px minimum touch targets maintained

3. Accessibility Improvements:

  • aria-pressed attribute for screen readers
  • focus-visible rings for keyboard navigation
  • Clear "Active" label when friction is selected
  • Timestamp showing when reported

Verification

  • ✅ All 17 adjustments-screen tests pass
  • ✅ Build compiles cleanly (TypeScript + Next.js)
  • ✅ No new lint errors introduced
  • ✅ Deployment QA confirms buttons work correctly in production
  • ✅ Multiple friction buttons can be active simultaneously
  • ✅ Submit button enables when friction selected

Screenshot Evidence

MEDIA:/Users/andrue/.hermes/browser_screenshots/browser_screenshot_e1838ba814fb429fa8177f07e360ccdd.png

Commit: 5256288

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.

Feature: Desktop/system notification tool

3 participants