Skip to content

feat(cli,desktop): persistent /goal indicator in status bar and above composer (salvage of #63527) - #72244

Merged
teknium1 merged 3 commits into
mainfrom
ux/goal-statusbar
Jul 27, 2026
Merged

feat(cli,desktop): persistent /goal indicator in status bar and above composer (salvage of #63527)#72244
teknium1 merged 3 commits into
mainfrom
ux/goal-statusbar

Conversation

@teknium1

Copy link
Copy Markdown
Contributor

Summary

An active /goal is now visible at a glance instead of only in the turn-by-turn scrollback: a goal 3/20 segment in the CLI status bar, and a progress row above the Desktop composer showing active / paused / achieved state. Salvage of #63527 by @wjj1872744570-source, extended with the CLI half and locale coverage.

ChatGPT Work shows a persistent goal progress row above its composer; Codex CLI keeps goal state in its status line. Hermes had /goal but no persistent indicator on any surface — once the glyph line scrolled away, the only way to check was /goal status.

How it works

Goal state stays backend-authoritative per apps/desktop/AGENTS.md — the renderer subscribes to it through the existing goal event path rather than polling, and the store treats it as a cache of backend truth. Display-only: no new gateway RPCs, no controls that don't already have a backend verb. The CLI segment renders inside the existing status-bar composer and honors /statusbar.

Changes

  • apps/desktop/src/store/goals.ts — goal state store + hydration on /goal set and controls
  • apps/desktop/src/store/composer-status.ts — progress row above the composer
  • apps/desktop/src/i18n/{en,zh,zh-hant}.ts — full locale copy
  • cli.pygoal N/M status-bar segment, active-goal-only
  • tests/cli/test_cli_status_bar_goal.py (8 tests) + apps/desktop/src/store/goals.test.ts (5 tests)

Validation

Result
scripts/run_tests.sh tests/cli/test_cli_status_bar_goal.py 8 passed, 0 failed
npx vitest run src/store/goals.test.ts 5 passed, 0 failed

Supersedes the 4-PR cluster: #63527 (base, credited), #55651, #48285, #43020 — to be closed with credit after merge.

Infographic

goal indicator

@github-actions

github-actions Bot commented Jul 26, 2026

Copy link
Copy Markdown
Contributor

૮ >ﻌ< ა ci review

ran on bf8b78d

ℹ️ Info

Desktop E2E visual evidence · View test artifacts · View job

1 visual diff.

inline evidence upload failed.

Failed to upload diff-665a0833239e-onboarding-overlay-diff.png with gh image (exit code 1): Error uploading /home/runner/work/_temp/e2e-evidence/diff-665a0833239e-onboarding-overlay-diff.png: step 0 (get upload token): uploadToken not found on repo page — do you have write access to NousResearch/hermes-agent? (or, if NousResearch enforces SAML SSO, authorize at https://github.com/orgs/NousResearch/sso)

@alt-glitch alt-glitch added type/feature New feature or request P3 Low — cosmetic, nice to have comp/desktop Electron desktop app (apps/desktop/*) comp/cli CLI entry point, hermes_cli/, setup wizard sweeper:risk-session-state Sweeper risk: may lose/corrupt/mis-associate session or context state labels Jul 26, 2026
@alt-glitch

Copy link
Copy Markdown
Collaborator

This was generated by AI during triage.

Supersedes #63527, #55651, #48285, and #43020 as the combined Desktop/CLI /goal-indicator salvage; those remain related pending maintainer consolidation.

wjj1872744570-source and others added 3 commits July 26, 2026 16:17
…locale copy

Follow-ups on the salvaged goal-status display (#63527):

- Seed the goal store from the /goal dispatch notice ("⊙ Goal set …") and
  from /goal status|pause|resume|clear exec output in slash.ts. The backend
  only emits status.update kind:"goal" after the first turn's post-turn
  judge, so without this the indicator stayed empty while the kickoff turn
  ran (sweeper review finding on #63527).
- Add the missing ja / zh-hant statusStack goal copy — desktop ships four
  locales, not two (sweeper review finding on #55651).
- Add a component-level vitest for the composer goal indicator rendering
  from store states: none / active / paused / detail line / other-session.

Co-authored-by: HaisamAbbas <95044189+HaisamAbbas@users.noreply.github.com>

Assisted-by: Claude Fable 5 via Hermes Agent
Append a "⊙ goal 3/20" segment (turns used / turn budget) to the CLI
status bar whenever a standing /goal is active. Mirrors the desktop
composer goal indicator: active-goal-only — paused/done goals stay out
of the bar since they already print their own glyph lines in-thread.

- Snapshot: goal_active / goal_turns_used / goal_max_turns from the
  cached GoalManager (in-memory attribute read, no DB hit per repaint).
- Rendered in all three width tiers of both _build_status_bar_text and
  _get_status_bar_fragments, and it respects the /statusbar toggle for
  free (the toggle gates _get_status_bar_fragments as a whole).
- Tests: segment composition, active-only contract, all width tiers.

Status-bar goal indicator concept from #43020.

Co-authored-by: Akshan Krithick <akshankrithick305@gmail.com>

Assisted-by: Claude Fable 5 via Hermes Agent
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

comp/cli CLI entry point, hermes_cli/, setup wizard comp/desktop Electron desktop app (apps/desktop/*) P3 Low — cosmetic, nice to have sweeper:risk-session-state Sweeper risk: may lose/corrupt/mis-associate session or context state type/feature New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants