Skip to content

fix(terminal): name the stray args when refusing a foreground notify/… - #132043

Closed
ljluestc wants to merge 1 commit into
NousResearch:mainfrom
ljluestc:fix/terminal-foreground-notify-error-121634
Closed

ljluestc wants to merge 1 commit into
NousResearch:mainfrom
ljluestc:fix/terminal-foreground-notify-error-121634

Conversation

@ljluestc

@ljluestc ljluestc commented Oct 3, 2026

Copy link
Copy Markdown

…heartbeat call

The refusal for background-only arguments on a foreground terminal call was generic and led with background=true. Models re-sent the identical call (8x retry loops reported on #119196) or moved short commands into the background and flooded completion notices. 4317ed0 stopped schema-materialized providers from sending heartbeat=60, but callers that still send it explicitly hit the same loop (#125303 shows kanban workers doing this).

The refusal is kept, as intended. It now names the exact offending arguments as sent (heartbeat=60), says the command did not run, and puts the foreground retry (same call without those args) before the background option.

Closes #121634

What does this PR do?

Related Issue

Fixes #

Type of Change

  • 🐛 Bug fix (non-breaking change that fixes an issue)
  • ✨ New feature (non-breaking change that adds functionality)
  • 🔒 Security fix (undisclosed vulnerabilities in SECURITY.md §3.1 scope go to Security Advisories first, not a public PR)
  • 📝 Documentation update
  • ✅ Tests (adding or improving test coverage)
  • ♻️ Refactor (no behavior change)
  • 🎯 New skill (bundled or hub)

Changes Made

How to Test

Checklist

Code

  • I've read the Contributing Guide
  • My commit messages follow Conventional Commits (fix(scope):, feat(scope):, etc.)
  • I searched for existing PRs to make sure this isn't a duplicate
  • My PR contains only changes related to this fix/feature (no unrelated commits)
  • I've run pytest tests/ -q and all tests pass
  • I've added tests for my changes (required for bug fixes, strongly encouraged for features)
  • I've tested on my platform:

Documentation & Housekeeping

  • I've updated relevant documentation (README, docs/, docstrings) — or N/A
  • I've updated cli-config.yaml.example if I added/changed config keys — or N/A
  • I've updated CONTRIBUTING.md or AGENTS.md if I changed architecture or workflows — or N/A
  • I've considered cross-platform impact (Windows, macOS) per the compatibility guide — or N/A
  • I've updated tool descriptions/schemas if I changed tool behavior — or N/A

For New Skills

  • This skill is broadly useful to most users (if bundled) — see Contributing Guide
  • SKILL.md follows the standard format (frontmatter, trigger conditions, steps, pitfalls)
  • No external dependencies that aren't already available (prefer stdlib, curl, existing Hermes tools)
  • I've tested the skill end-to-end: hermes --toolsets skills -q "Use the X skill to do Y"

Screenshots / Logs

…heartbeat call

The refusal for background-only arguments on a foreground terminal call
was generic and led with `background=true`. Models re-sent the identical
call (8x retry loops reported on NousResearch#119196) or moved short commands into
the background and flooded completion notices. 4317ed0 stopped
schema-materialized providers from sending heartbeat=60, but callers that
still send it explicitly hit the same loop (NousResearch#125303 shows kanban workers
doing this).

The refusal is kept, as intended. It now names the exact offending
arguments as sent (`heartbeat=60`), says the command did not run, and
puts the foreground retry (same call without those args) before the
background option.

Closes NousResearch#121634
@alt-glitch alt-glitch added type/bug Something isn't working P3 Low — cosmetic, nice to have tool/terminal Terminal execution and process management labels Oct 3, 2026
@teknium1

teknium1 commented Oct 6, 2026

Copy link
Copy Markdown
Collaborator

Heads-up: #133793 lands this class at the dispatcher instead — a foreground terminal call that carries a positive heartbeat runs once with the heartbeat dropped (cherry-pick of #119201 with authorship kept, plus the test/schema follow-up), while a foreground notify=true stays refused. Live repro in that PR body uses the exact argument shapes recorded from 173 production refusals this week. If it merges, this PR becomes unnecessary and will be closed as superseded with credit; leaving it open until then.

@teknium1 teknium1 added the needs-decision Awaiting maintainer decision before any implementation label Oct 6, 2026
@teknium1

teknium1 commented Oct 7, 2026

Copy link
Copy Markdown
Collaborator

Superseded by #133793 (landed as cb6ffe6): the foreground heartbeat case this error message named is now dropped instead of refused, and notify=true keeps its existing refusal. Thanks @ljluestc for the fix and the clearer wording.

@teknium1 teknium1 closed this Oct 7, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

needs-decision Awaiting maintainer decision before any implementation P3 Low — cosmetic, nice to have tool/terminal Terminal execution and process management type/bug Something isn't working

Projects

None yet

3 participants