@@ -170,23 +170,38 @@ def _heartbeat_handler(args: argparse.Namespace) -> int:
170170 f" dream: { 'would fire' if result .dream_id else (result .dream_gated_reason or 'gated' )} "
171171 )
172172 else :
173+ verbose = getattr (args , "verbose" , False )
173174 print (f"Heartbeat tick complete ({ args .trigger } )." )
174175 print (f" elapsed: { result .elapsed_seconds / 3600 :.2f} h" )
175176 print (f" decayed: { result .memories_decayed } memories, pruned { result .edges_pruned } edges" )
177+
178+ # Dream: show fires + interesting gates. Suppress "not_due" by default.
176179 if result .dream_id :
177180 print (f" dream fired: { result .dream_id } " )
178- else :
181+ elif verbose or ( result . dream_gated_reason and result . dream_gated_reason != "not_due" ) :
179182 print (f" dream gated: { result .dream_gated_reason or 'gated' } " )
183+
184+ # Reflex: show fires. Suppress "evaluated, nothing fired" unless --verbose.
180185 if result .reflex_fired :
181186 print (f" reflex fired: { ', ' .join (result .reflex_fired )} " )
182- elif result .reflex_skipped_count > 0 :
187+ elif verbose and result .reflex_skipped_count > 0 :
183188 print (f" reflex evaluated ({ result .reflex_skipped_count } arc(s) skipped)" )
189+
190+ # Research: show fires + interesting gates (no_eligible_interest,
191+ # no_interests_defined, research_raised). Suppress not_due + reflex_won_tie
192+ # by default.
184193 if result .research_fired :
185194 print (f" research fired: { result .research_fired } " )
186- elif result .research_gated_reason and result .research_gated_reason != "not_due" :
195+ elif result .research_gated_reason and (
196+ verbose or result .research_gated_reason not in ("not_due" , "reflex_won_tie" )
197+ ):
187198 print (f" research gated: { result .research_gated_reason } " )
199+
200+ # Interest bumps: show only if > 0 (already compact). Verbose adds zero.
188201 if result .interests_bumped > 0 :
189202 print (f" interests bumped: { result .interests_bumped } " )
203+ elif verbose :
204+ print (" interests bumped: 0" )
190205 return 0
191206
192207
@@ -454,6 +469,12 @@ def _build_parser() -> argparse.ArgumentParser:
454469 help = "Web searcher for research engine: ddgs (default), noop, claude-tool." ,
455470 )
456471 hb_sub .add_argument ("--dry-run" , action = "store_true" )
472+ hb_sub .add_argument (
473+ "--verbose" ,
474+ action = "store_true" ,
475+ help = "Show all engine outcomes including gated reasons + zero-count engines. "
476+ "Default output is compact — events shown, non-events hidden." ,
477+ )
457478 hb_sub .set_defaults (func = _heartbeat_handler )
458479
459480 rf_sub = subparsers .add_parser (
0 commit comments