{"repo":"NousResearch/hermes-agent","public_id":"10318","display_label":"Adding --check flag to hermes update command","summary":"These issues and pull requests concern a documented but missing --check flag for the hermes update command. The work involves reporting the bug and implementing the flag in the CLI.","subsystem":null,"counts":{"members":4,"open_issues":0,"open_issues_distinct":0,"open_prs":0,"closed_issues":1,"merged_prs":1,"attempt_prs":2},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":15841,"merged_at":"2026-04-26T01:39:55+00:00"},"resolution":{"state":"resolved","by":"pr-15841"},"freshness":{"state":"stale","last_verified_at":"2026-04-26T01:39:55+00:00","is_stale":true},"grouping":{"backbone":"STRUCTURAL_SPANNING","link_density":0.5},"fix_edges":[{"issue_number":10318,"pr_number":15841,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-04-26T01:39:55+00:00"}],"members":[{"kind":"issue","number":10318,"title":"[Bug]: hermes update --check not recognized — documented but not implemented","url":null,"state":"closed"},{"kind":"pr","number":10627,"title":"fix: add --check flag to hermes update command","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"dc5e02ea7","number":0},{"kind":"pr","value":"#15589","number":15589},{"kind":"pr","value":"#10318","number":10318}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false},{"kind":"pr","number":15589,"title":"feat(cli): implement hermes update --check flag","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#15841","number":15841}],"category":"merged_via","implication":"superseded"},"merged":false},{"kind":"pr","number":15841,"title":"feat(cli): implement hermes update --check flag","url":null,"state":"merged","close_reason":{"category":"merged"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["hermes_cli/main.py","scripts/release.py"],"fix_hunks":[{"file":"hermes_cli/main.py","hunks":["@@ -5678,6 +5678,54 @@ def _finalize_update_output(state):\n             pass\n \n \n+def _cmd_update_check():\n+    \"\"\"Implement ``hermes update --check``: fetch and report without installing.\"\"\"\n+    git_dir = PROJECT_ROOT / \".git\"\n+    if not git_dir.exists():\n+        print(\"✗ Not a git repository — cannot check for updates.\")\n+        sys.exit(1)\n+\n+    git_cmd = [\"git\"]\n+    if sys.platform == \"win32\":\n+        git_cmd = [\"git\", \"-c\", \"windows.appendAtomically=false\"]\n+\n+    print(\"→ Fetching from origin...\")\n+    fetch_result = subprocess.run(\n+        git_cmd + [\"fetch\", \"origin\"],\n+        cwd=PROJECT_ROOT,\n+        capture_output=True,\n+        text=True,\n+    )\n+    if fetch_result.returncode != 0:\n+        stderr = fetch_result.stderr.strip()\n+        if \"Could not resolve host\" in stderr or \"unable to access\" in stderr:\n+            print(\"✗ Network error — cannot reach the remote repository.\")\n+        elif \"Authentication failed\" in stderr or \"could not read Username\" in stderr:\n+            print(\"✗ Authentication failed — check your git credentials or SSH key.\")\n+        else:\n+            print(\"✗ Failed to fetch from origin.\")\n+            if stderr:\n+                print(f\"  {stderr.splitlines()[0]}\")\n+        sys.exit(1)\n+\n+    rev_result = subprocess.run(\n+        git_cmd + [\"rev-list\", \"HEAD..origin/main\", \"--count\"],\n+        cwd=PROJECT_ROOT,\n+        capture_output=True,\n+        text=True,\n+        check=True,\n+    )\n+    behind = int(rev_result.stdout.strip())\n+\n+    if behind == 0:\n+        print(\"✓ Already up to date.\")\n+    else:\n+        commits_word = \"commit\" if behind == 1 else \"commits\"\n+        print(f\"⚕ Update available: {behind} {commits_word} behind origin/main.\")\n+        from hermes_cli.config import recommended_update_command\n+        print(f\"  Run '{recommended_update_command()}' to install.\")\n+\n+\n def cmd_update(args):\n     \"\"\"Update Hermes Agent to the latest version.\n ","@@ -5691,6 +5739,10 @@ def cmd_update(args):\n         managed_error(\"update Hermes Agent\")\n         return\n \n+    if getattr(args, \"check\", False):\n+        _cmd_update_check()\n+        return\n+\n     gateway_mode = getattr(args, \"gateway\", False)\n \n     # Protect against mid-update terminal disconnects (SIGHUP) and tolerate","@@ -8965,6 +9017,12 @@ def cmd_claw(args):\n         default=False,\n         help=\"Gateway mode: use file-based IPC for prompts instead of stdin (used internally by /update)\",\n     )\n+    update_parser.add_argument(\n+        \"--check\",\n+        action=\"store_true\",\n+        default=False,\n+        help=\"Check whether an update is available without installing anything\",\n+    )\n     update_parser.set_defaults(func=cmd_update)\n \n     # ========================================================================="]},{"file":"scripts/release.py","hunks":["@@ -413,6 +413,7 @@\n     \"105142614+VTRiot@users.noreply.github.com\": \"VTRiot\",\n     \"[redacted:email]\": \"iamagenius00\",\n     \"89228157+Feranmi10@users.noreply.github.com\": \"Feranmi10\",\n+    \"[redacted:email]\": \"Feranmi10\",\n     \"[redacted:email]\": \"simon-gtcl\",\n     \"[redacted:email]\": \"houko\",\n     \"[redacted:email]\": \"cgarwood82\",\n"]}]}],"trust":{"default_tier":"verified","includes_suggested":false}}