Mail attention summary
Use “Mail attention summary” in Recued. Answer 'is there anything to attend to in mail?' from limited local metadata before spending AI processing. It reads information without changing data in the connected service.
How it works
Inspect the data fetches, transforms, gates, and output this recipe runs.
Process (163 steps)
now_iso
date_add
Add 0 seconds to
now_ms
date_parse
Parse now iso as a date
exclusive_until
math
Calculate: {{step.now_ms}} + 1
bounded_lookback_hours
clamp
Clamp setting lookback hours between 1 and 720
bounded_history_days
clamp
Clamp setting history days between 1 and 3650
bounded_scan_limit
clamp
Clamp setting scan limit between 1 and 500
bounded_history_scan_limit
clamp
Clamp setting history scan limit between 1 and 1000
effective_history_scan_limit
math
Calculate: max({{step.bounded_scan_limit}}, {{step.bounded_history_scan_limit}})
bounded_relationship_sender_limit
clamp
Clamp setting relationship sender limit between 1 and 50
bounded_evaluation_thread_limit
clamp
Clamp setting evaluation thread limit between 1 and 50
bounded_row_limit
clamp
Clamp setting row limit between 1 and 100
bounded_business_start_hour
clamp
Clamp setting business start hour between 0 and 23
bounded_business_end_hour
clamp
Clamp setting business end hour between 1 and 24
business_window_valid
compare
Check if bounded business start hour is less than bounded business end hour
bounded_sender_burst_window_minutes
clamp
Clamp setting sender burst window minutes between 1 and 10080
bounded_sender_burst_count_threshold
clamp
Clamp setting sender burst count threshold between 2 and 500
bounded_thread_burst_window_hours
clamp
Clamp setting thread burst window hours between 1 and 8760
bounded_thread_burst_count_threshold
clamp
Clamp setting thread burst count threshold between 2 and 500
bounded_long_thread_count_threshold
clamp
Clamp setting long thread count threshold between 2 and 500
bounded_reply_silence_hours
clamp
Clamp setting reply silence hours between 1 and 8760
bounded_large_body_bytes_threshold
clamp
Clamp setting large body bytes threshold between 1024 and 1000000000
bounded_many_recipients_count_threshold
clamp
Clamp setting many recipients count threshold between 2 and 1000
lookback_since
math
Calculate: {{step.now_ms}} - {{step.bounded_lookback_hours}} * 3600000
history_since_raw
math
Calculate: {{step.now_ms}} - {{step.bounded_history_days}} * 86400000
history_since
math
Calculate: min({{step.lookback_since}}, {{step.history_since_raw}})
sender_burst_since
math
Calculate: {{step.now_ms}} - {{step.bounded_sender_burst_window_minutes}} * 60000
thread_burst_since
math
Calculate: {{step.now_ms}} - {{step.bounded_thread_burst_window_hours}} * 3600000
reply_silence_ms
math
Calculate: {{step.bounded_reply_silence_hours}} * 3600000
recent_raw
?
recent_messages
map
Extract from each item
recent_record_count
count
Count items in recent messages
recent_limit_reached
compare
Check if recent record count is at least bounded scan limit
recent_inbound
filter
Filter by condition
new_mail_count
count
Count items in recent inbound
new_inbound_threads
group_by
Group by thread_key
new_thread_count
count
Count items in new inbound threads
new_thread_keys
pluck
Extract thread_key from each item
history_raw
?
history_messages
map
Extract from each item
history_record_count
count
Count items in history messages
history_limit_reached
compare
Check if history record count is at least effective history scan limit
history_scan_complete
not
Apply not
history_latest_rows
unique
Remove duplicates from
current_inbound_latest
filter
Filter by condition
waiting_base
filter
Filter by condition
waiting_record_ids
pluck
Extract record_id from each item
waiting_messages
filter
Filter by condition
waiting_thread_count
count
Count items in waiting messages
evaluation_rows
slice
Take a subset of
evaluated_thread_count
count
Count items in evaluation rows
evaluation_record_ids
pluck
Extract record_id from each item
evaluation_raw_records
filter
Filter by condition
evaluation_messages
map
Extract from each item
unevaluated_thread_count
math
Calculate: max(0, {{step.waiting_thread_count}} - {{step.evaluated_thread_count}})
evaluation_limit_reached
compare
Check if unevaluated thread count is greater than 0
already_answered_count
math
Calculate: max(0, {{step.new_thread_count}} - {{step.waiting_thread_count}})
history_thread_rollup
group_by
Group by thread_key
history_outbound
filter
Filter by condition
outbound_thread_rollup
group_by
Group by thread_key
history_inbound
filter
Filter by condition
sender_history_rollup
group_by
Group by from
sender_burst_messages
filter
Filter by condition
sender_burst_rollup
group_by
Group by from
thread_burst_messages
filter
Filter by condition
thread_burst_rollup
group_by
Group by thread_key
waiting_with_new_count
enrich_by
Apply enrich_by
waiting_with_history
enrich_by
Apply enrich_by
waiting_with_outbound
enrich_by
Apply enrich_by
waiting_with_sender_history
enrich_by
Apply enrich_by
waiting_with_sender_burst
enrich_by
Apply enrich_by
waiting_with_thread_burst
enrich_by
Apply enrich_by
waiting_new_count_normalized
map
Extract from each item
waiting_history_count_normalized
map
Extract from each item
waiting_sender_history_normalized
map
Extract from each item
waiting_sender_burst_normalized
map
Extract from each item
waiting_thread_burst_normalized
map
Extract from each item
waiting_with_to_count
map
Extract to from each item
waiting_with_cc_count
map
Extract cc from each item
waiting_with_recipient_count
map
Extract from each item
waiting_with_reply_received
map
Extract last_outbound_at from each item
waiting_with_reply_lag
map
Extract from each item
waiting_with_reply_lag_boundary
map
Extract reply_lag_ms from each item
waiting_with_reply_after_silence
map
Extract from each item
waiting_with_sender_burst_flag
map
Extract sender_burst_count from each item
waiting_with_thread_burst_flag
map
Extract thread_burst_count from each item
waiting_with_long_thread
map
Extract history_message_count from each item
waiting_with_first_seen_raw
map
Extract sender_first_at from each item
waiting_with_first_seen
map
Extract from each item
waiting_with_unread
map
Extract is_read from each item
waiting_with_attachment
map
Extract has_attachments from each item
waiting_with_large_body
map
Extract size_bytes from each item
waiting_with_many_recipients
map
Extract recipient_count from each item
business_window_checks
time_within_window
Apply time_within_window
business_window_rows
map
Extract from each item
waiting_with_business_window
enrich_by
Apply enrich_by
waiting_with_outside_window
map
Extract within_business_hours from each item
waiting_with_after_hours
map
Extract from each item
senders_with_address
filter
Filter by condition
unique_senders
unique
Remove duplicates from
unique_sender_count
count
Count items in unique senders
relationship_senders
slice
Take a subset of
relationship_sender_query_count
count
Count items in relationship senders
business_context_checks
?
business_context_rows
map
Extract from each item
business_context_success_rows
filter
Filter by condition
business_context_success_count
count
Count items in business context success rows
business_context_coverage_events_nested
map
Extract from each item
business_context_coverage_events
flatten
Flatten nested lists in
business_context_coverage_event_count
count
Count items in business context coverage events
business_context_coverage_gap_rows
filter
Filter by condition
business_context_coverage_gap_count
count
Count items in business context coverage gap rows
business_context_failed_count
math
Calculate: max(0, {{step.relationship_sender_query_count}} - {{step.business_context_success_count}})
waiting_with_context
enrich_by
Apply enrich_by
waiting_with_relationship_level
map
Extract from each item
waiting_with_relationship_active
map
Extract relationship_level from each item
waiting_with_relationship_historical
map
Extract relationship_level from each item
waiting_with_relationship_known
map
Extract relationship_level from each item
strong_attention_checks
any
Check if any of the conditions are true
strong_attention_rows
map
Extract from each item
waiting_with_strong_attention
enrich_by
Apply enrich_by
review_checks
any
Check if any of the conditions are true
review_rows
map
Extract from each item
waiting_with_review
enrich_by
Apply enrich_by
classified_rows
map
Extract from each item
active_rows
filter
Filter by condition
active_count
count
Count items in active rows
review_state_rows
filter
Filter by condition
review_count
count
Count items in review state rows
quiet_rows
filter
Filter by condition
quiet_count
count
Count items in quiet rows
signal_events_nested
map
Extract from each item
signal_events
flatten
Flatten nested lists in
active_signal_events
filter
Filter by condition
signal_counts
group_by
Group by signal
signal_catalog
default
Apply default
signal_catalog_with_counts
enrich_by
Apply enrich_by
signal_rows
map
Extract from each item
signal_table
to_table
Format results as a data table
surfaced_rows
filter
Filter by condition
surfaced_with_priority
map
Extract from each item
surfaced_with_reason
map
Extract from each item
surfaced_with_subject_display
map
Extract subject from each item
surfaced_with_from_display
map
Extract from from each item
surfaced_with_thread_display
map
Extract thread_key from each item
surfaced_dated
map
Extract received_at from each item
surfaced_sorted
sort
Sort by
top_rows
slice
Take a subset of
attention_display_rows
map
Extract from each item
attention_table
to_table
Format results as a data table
evidence_rows
map
Extract from each item
business_context_shortfall
compare
Check if business context success count is less than unique sender count
missing_sender_rows
filter
Filter by condition
missing_sender_count
count
Count items in missing sender rows
missing_sender_present
compare
Check if missing sender count is greater than 0
context_incomplete
any
Check if any of the conditions are true
coverage_partial
any
Check if any of the conditions are true
coverage_state
ternary
Apply ternary
window_start_text
date_format
Format as a date
window_end_text
date_format
Format as a date
history_window_start_text
date_format
Format as a date
coverage_rows
default
Apply default
coverage_table
to_table
Format results as a data table
card
to_summary
Format results as a summary card
Settings
Configurable at install. Defaults shown — change them anytime in Recued.
mail slug
setting
=
primary
row limit
setting
=
20
scan limit
setting
=
500
history days
setting
=
90
lookback hours
setting
=
24
business end hour
setting
=
18
history scan limit
setting
=
1000
business start hour
setting
=
8
reply silence hours
setting
=
48
evaluation thread limit
setting
=
50
relationship sender limit
setting
=
50
thread burst window hours
setting
=
24
large body bytes threshold
setting
=
1048576
long thread count threshold
setting
=
12
sender burst window minutes
setting
=
60
sender burst count threshold
setting
=
3
thread burst count threshold
setting
=
4
many recipients count threshold
setting
=
5