Recued
Menu
← Back to recipes

Prepare the next meeting from its minutes

by recued-core v2 29 views

Use “Prepare the next meeting from its minutes” in Recued. Starts from the last minutes you recorded and current project progress, adds what is new since, and prepares the project portion: what is still open, decisions for the room, and new topics.

Complete workflow

Meeting Secretary 4 pinned recipes

Use Meeting Secretary in Recued. One person keeps the meeting loop: upload the minutes you wrote and AI turns them into tasks in the federated projects you share, mail the minutes out, then brief the next meeting from the last minutes, current progress and what is new.

You are viewing one recipe in this workflow. Installing it opens the complete pack so its other recipes and background automations arrive together.

Use “Prepare the next meeting from its minutes” in Recued. Starts from the last minutes you recorded and current project progress, adds what is new since, and prepares the project portion: what is still open, decisions for the room, and new topics.

pack:meeting-secretarymeeting-prepproject-contextproject-management
by recued-core pinned v2

Use “Turn a minutes file into project work” in Recued. Upload the minutes you wrote, then review supported progress and task changes in the projects you share, plus an index of what you promised. The next briefing starts from these minutes.

pack:meeting-secretarymeeting-outcomesproject-managementfederated-project
by recued-core pinned v2

Use “Mail the minutes and who does what” in Recued. Send the last minutes you recorded for a project to the people who were there, each with the tasks the meeting assigned. From your own mail account, one message per person, never twice.

pack:meeting-secretarymeeting-secretarymailfederated-project
by recued-core pinned v1

Use “Mail the briefing before the meeting” in Recued. Send the briefing prepared for a project’s next meeting to the people who were at the last one. From your own mail account, one message per person, never twice.

pack:meeting-secretarymeeting-secretarymailfederated-project
by recued-core pinned v1
View pack details, dependencies, and permissions →

Prepare the next meeting from its minutes

This is the second half of Meeting Secretary. After each meeting, record the minutes with Turn a minutes file into project work. Before the next one, run this.

It starts from three things and asks you for only one of them:

  • The last minutes you recorded for these projects — found by itself, and read again for what is still open.
  • Current progress on the projects’ tasks — what people already recorded, so nobody reports it twice.
  • New things — anything that has come up since, or that the last meeting missed. This is the one box you fill in, and changing it is how you change the direction of the next meeting.

What it prepares

Progress already covered by the project updates, what is still open since the last minutes, decisions that need the room, and what is new since last time. Coverage and omissions say what Recued could not prepare, including a project whose last minutes could not be read.

The briefing that is mailed

From that preparation, Recued writes the briefing the people in the meeting will read: tasks and projects by name, no Recued ids, plain text, in the meeting’s own language. Say how you want it under How to write it — another language, bullet points only, a formal tone, a length — and save it in this recipe’s settings to use it every time. It changes how the briefing reads, never what it says.

The briefing is kept with each project, so Mail the briefing can send it to the people who were at the last meeting. Keeping it is the only thing this writes, and nothing is sent: Mail the briefing asks you before anything leaves.

Federated projects

A selected federated project is included only when one of the people in the meeting matches exactly one active participant in it. Missing or ambiguous matches are reported under omissions instead of exposing that project’s tasks.

Inputs and limits

  • Projects — up to eight. Required; save them in this recipe’s settings to use them every time.
  • Meeting and When it starts — optional. Blank uses the name of the last minutes, and a briefing with no time says when it was prepared instead of inventing one.
  • Who is in it — optional. Blank uses the attendees of the last minutes.
  • New things — optional, plain text, used for this briefing.
  • How to write it — optional: the language, layout, tone or length of the briefing that is mailed.

With no minutes recorded yet there is no activity window: every current row is in scope, which is right for a first meeting, and coverage says so. Task reads are capped at 50 per included project and report any remaining count.

How it works 281 steps

Inspect the data fetches, transforms, gates, and output this recipe runs.

Process (281 steps)
■ config_project_refs default
Apply default
■ has_config_projects compare
Check if config project refs has data
⚠ manual_project_selection_guard guard
Stop if config project refs is empty
■ secretary_rows_raw map
Extract from each item
■ secretary_rows_keyed map
Extract from each item
■ secretary_rows map
Extract key_source from each item
◆ secretary_reads core.storage.shared.read
Read storage shared
■ secretary_minutes_rows map
Extract from each item
■ secretary_minutes_found filter
Filter by condition
■ secretary_minutes_newest_first sort
Sort by held_at
■ last_minutes find
Find first match in
■ has_last_minutes compare
Check if last minutes exists
■ meeting_title_input trim
Trim whitespace from setting meeting title
■ meeting_title_or_last default
Apply default
■ meeting_title default
Apply default
■ meeting_key default
Apply default
■ meeting_at_text trim
Trim whitespace from setting meeting at
■ meeting_at_supplied compare
Check if meeting at text has data
■ meeting_at_parsed date_parse
Parse meeting at text as a date
■ meeting_at_unreadable all
Check if all conditions are true
⚠ meeting_at_guard guard
Stop if meeting at unreadable equals
■ secretary_now_iso date_add
Add 0 seconds to
■ secretary_now_ms date_parse
Parse secretary now iso as a date
■ booking_start_at default
Apply default
■ booking_start_iso date_format
Format as a date
■ booking default
Apply default
■ has_config_attendees compare
Check if setting attendee emails has data
■ attendee_emails_raw ternary
Apply ternary
■ attendee_emails_joined join
Join items with " "
■ attendee_emails_lowercase lowercase
Convert attendee emails joined to lowercase
■ attendee_emails_despaced replace
Replace text in attendee emails lowercase
■ attendee_emails_split split
Split attendee emails despaced into parts
■ meeting_emails unique
Remove duplicates from
■ meeting_names_raw default
Apply default
■ meeting_phone_numbers default
Apply default
■ previous_meeting_at default
Apply default
■ window_floor default
Apply default
■ has_previous_booking default
Apply default
■ last_minutes_when date_format
Format as a date
■ last_minutes_text ternary
Apply ternary
■ previous_meeting_window_source ternary
Apply ternary
■ previous_meeting_selection ternary
Apply ternary
■ window_precedes_meeting any
Check if any of the conditions are true
⚠ window_order_guard guard
Stop if window precedes meeting equals
■ window_card_text ternary
Apply ternary
■ booking_intake default
Apply default
■ booking_intake_json json_stringify
Apply json_stringify
■ has_booking_intake compare
Check if booking intake json does not equal {}
■ previous_minutes_file_id default
Apply default
■ previous_minutes_files ternary
Apply ternary
◆ previous_minutes_reads core.storage.data-file-read
Data file read storage
■ previous_minutes_ok filter
Filter by condition
■ previous_minutes_b64 pluck
Extract result.bytes_b64 from each item
■ previous_minutes_b64_text join
Join items with ""
■ previous_minutes_decoded decode_base64
Apply decode_base64
■ previous_minutes_text trim
Trim whitespace from previous minutes decoded
■ has_previous_minutes_text compare
Check if previous minutes text has data
■ previous_minutes_account ternary
Apply ternary
■ previous_notes_sources_raw default
Apply default
■ previous_notes_sources filter
Filter by condition
■ previous_notes_source_names pluck
Extract source from each item
■ previous_notes_count count
Count items in previous notes sources
■ has_previous_notes compare
Check if previous notes count is greater than 0
■ previous_notes_source join
Join items with " + "
■ new_things_text trim
Trim whitespace from setting new things
■ has_upcoming_brief compare
Check if new things text has data
■ new_things_length string_length
Apply string_length
■ new_things_too_long compare
Check if new things length is greater than 200000
⚠ new_things_size_guard guard
Stop if new things too long equals
■ writing_text trim
Trim whitespace from setting writing instructions
■ writing_given compare
Check if writing text has data
■ writing_length string_length
Apply string_length
■ writing_too_long compare
Check if writing length is greater than 2000
⚠ writing_instructions_size_guard guard
Stop if writing too long equals
■ writing_for_model ternary
Apply ternary
■ new_things_lines split
Split new things text into parts
■ new_things_rows map
Extract from each item
■ new_things_rows_trimmed map
Extract text from each item
■ new_things_rows_kept filter
Filter by condition
■ new_things_items pluck
Extract text from each item
■ upcoming_brief_extract ternary
Apply ternary
■ upcoming_brief_context default
Apply default
■ metadata_project_refs default
Apply default
■ resolved_project_refs ternary
Apply ternary
■ project_selection_source switch
Map has config projects to one of: true
■ requested_project_refs_unique unique
Remove duplicates from
■ requested_project_count count
Count items in requested project refs unique
⚠ requested_project_guard guard
Stop if requested project refs unique is empty
■ requested_project_refs slice
Take a subset of
■ capped_project_count count
Count items in requested project refs
■ project_cap_omissions math
Calculate: {{step.requested_project_count}} - {{step.capped_project_count}}
◆ project_reads core.work-entity.get
Get work entity
■ found_project_reads filter
Filter by condition
■ candidate_projects map
Extract from each item
■ found_project_refs pluck
Extract id from each item
■ missing_project_reads filter
Filter by condition
■ missing_project_refs pluck
Extract item from each item
◆ federation_reads recued-core.federated-projects.federation.search
Search federation on federated projects
■ federation_groups map
Extract from each item
■ federations flatten
Flatten nested lists in
■ federated_project_refs_raw pluck
Extract project_ref from each item
■ federated_project_refs unique
Remove duplicates from
◆ participant_reads recued-core.federated-projects.participant.search
Search participant on federated projects
■ participant_groups map
Extract from each item
■ participants_raw flatten
Flatten nested lists in
■ participant_page_rows map
Extract from each item
■ truncated_participant_pages filter
Filter by condition
■ truncated_participant_project_refs pluck
Extract project_id from each item
■ participant_index_raw map
Extract from each item
■ participant_index_trimmed map
Extract email from each item
■ participant_index map
Extract email_trimmed from each item
■ matched_participants filter
Filter by condition
■ participant_match_rows map
Extract from each item
■ participant_match_groups group_by
Group by pair_key
■ exact_participant_match_groups filter
Filter by condition
■ exact_participant_match_keys pluck
Extract pair_key from each item
■ exact_participant_matches filter
Filter by condition
■ eligible_federated_project_refs_raw pluck
Extract project_id from each item
■ eligible_federated_project_refs unique
Remove duplicates from
■ eligible_projects filter
Filter by condition
■ eligible_projects_with_updated_at map
Extract updated_at from each item
■ eligible_projects_timestamped map
Extract last_activity_at from each item
■ eligible_project_refs pluck
Extract id from each item
■ unshared_prepared_projects filter
Filter by condition
■ unshared_prepared_project_refs pluck
Extract id from each item
■ omitted_federated_projects filter
Filter by condition
■ omitted_federated_project_refs pluck
Extract id from each item
◆ task_reads core.work-entity.list
List work entity
■ task_groups map
Extract from each item
■ candidate_tasks flatten
Flatten nested lists in
■ overdue_day date_format
Format as a date
■ overdue_day_iso template
Generate text from a template
■ overdue_day_ms date_parse
Parse overdue day iso as a date
■ task_due_day_rows map
Extract from each item
■ task_due_day_iso map
Extract at from each item
■ task_due_day_is_day map
Extract iso from each item
■ task_due_day_date map
Extract iso from each item
■ task_due_day_time map
Extract at from each item
■ task_due_day_values map
Extract from each item
■ task_due_day_local map
Extract at from each item
■ task_due_day_calendar map
Extract from each item
■ task_due_day_calendar_iso map
Extract from each item
■ task_due_day_calendar_ms map
Extract calendar_iso from each item
■ task_due_day_has map
Extract at from each item
■ task_due_day_before map
Extract calendar_ms from each item
■ task_due_day_same map
Extract calendar_ms from each item
■ task_due_days map
Extract from each item
■ candidate_tasks_dated enrich_by
Apply enrich_by
■ candidate_tasks_timestamped map
Extract updated_at from each item
■ task_totals pluck
Extract result.total from each item
■ task_total reduce
Reduce with sum
■ task_fetched_count count
Count items in candidate tasks
■ task_page_omissions math
Calculate: {{step.task_total}} - {{step.task_fetched_count}}
■ recent_tasks filter
Filter by condition
■ recent_projects filter
Filter by condition
◆ commitment_reads core.work-entity.list
List work entity
skip: step.eligible_project_refs is_empty
■ commitment_rows default
Apply default
■ promise_day_rows map
Extract from each item
■ promise_day_iso map
Extract at from each item
■ promise_day_is_day map
Extract iso from each item
■ promise_day_date map
Extract iso from each item
■ promise_day_time map
Extract at from each item
■ promise_day_values map
Extract from each item
■ promise_day_local map
Extract at from each item
■ promise_day_calendar map
Extract from each item
■ promise_day_calendar_iso map
Extract from each item
■ promise_day_calendar_ms map
Extract calendar_iso from each item
■ promise_day_has map
Extract at from each item
■ promise_day_before map
Extract calendar_ms from each item
■ promise_day_same map
Extract calendar_ms from each item
■ promise_days map
Extract from each item
■ commitment_rows_dated enrich_by
Apply enrich_by
■ commitment_index map
Extract from each item
■ open_commitments filter
Filter by condition
■ open_commitment_count count
Count items in open commitments
■ recent_task_count count
Count items in recent tasks
■ recent_project_count count
Count items in recent projects
■ eligible_project_count count
Count items in eligible projects
■ meeting_person_count count
Count items in meeting emails
■ coverage_and_omissions default
Apply default
■ participant_display_names_raw pluck
Extract display_name from each item
■ people_names_raw flatten
Flatten nested lists in
■ people_names unique
Remove duplicates from
■ context_pii_protect pii-protect
Apply pii-protect
■ booking_intake_prompt_json json_stringify
Apply json_stringify
■ previous_notes_json json_stringify
Apply json_stringify
■ upcoming_brief_json json_stringify
Apply json_stringify
■ projects_json json_stringify
Apply json_stringify
■ recent_projects_json json_stringify
Apply json_stringify
■ tasks_json json_stringify
Apply json_stringify
■ recent_tasks_json json_stringify
Apply json_stringify
■ participant_matches_json json_stringify
Apply json_stringify
■ open_commitments_json json_stringify
Apply json_stringify
■ coverage_json json_stringify
Apply json_stringify
■ meeting_start_for_model ternary
Apply ternary
✦ synthesize_project_context core.ai.extract
AI extracts structured fields from data
■ context_pii_restore pii-restore
Apply pii-restore
■ prepared_from_progress default
Apply default
■ unresolved_since_previous_meeting default
Apply default
■ decisions_needed default
Apply default
■ optional_new_brief_context default
Apply default
■ booking_start_text date_format
Format as a date
■ briefing_prepared_text date_format
Format as a date
■ briefing_when_card ternary
Apply ternary
■ writing_card_text ternary
Apply ternary
■ compose_tasks map
Extract from each item
■ compose_projects map
Extract from each item
■ language_sample truncate
Truncate previous minutes text to a max length
■ compose_pii_protect pii-protect
Apply pii-protect
■ compose_analysis_json json_stringify
Apply json_stringify
■ compose_tasks_json json_stringify
Apply json_stringify
■ compose_projects_json json_stringify
Apply json_stringify
✦ compose_briefing core.ai.extract
AI extracts structured fields from data
■ compose_pii_restore pii-restore
Apply pii-restore
■ max_lines default
Apply default
■ max_words default
Apply default
■ composed_lines_raw default
Apply default
■ composed_lines_trimmed map
Extract text from each item
■ composed_lines filter
Filter by condition
⚠ stop_the_briefing_came_back_empty guard
Stop if composed lines is empty
■ composed_lines_split map
Extract text from each item
■ composed_lines_counted map
Extract word_list from each item
■ tier_1_lines filter
Filter by condition
■ tier_2_lines filter
Filter by condition
■ all_line_count count
Count items in composed lines counted
■ all_word_count reduce
Reduce with sum
■ all_fits_lines any
Check if any of the conditions are true
■ all_fits_words any
Check if any of the conditions are true
■ all_fits all
Check if all conditions are true
■ tier_2_line_count count
Count items in tier 2 lines
■ tier_2_word_count reduce
Reduce with sum
■ tier_2_fits_lines any
Check if any of the conditions are true
■ tier_2_fits_words any
Check if any of the conditions are true
■ tier_2_fits all
Check if all conditions are true
■ tier_1_line_count count
Count items in tier 1 lines
■ tier_1_word_count reduce
Reduce with sum
■ tier_1_fits_lines any
Check if any of the conditions are true
■ tier_1_fits_words any
Check if any of the conditions are true
■ tier_1_fits all
Check if all conditions are true
■ line_cap default
Apply default
■ tier_1_capped slice
Take a subset of
■ kept_from_tier_1 ternary
Apply ternary
■ kept_from_tier_2 ternary
Apply ternary
■ kept_lines ternary
Apply ternary
■ lines_left_out compare
Check if all fits equals false
■ kept_lines_rendered map
Extract from each item
■ kept_line_texts pluck
Extract line from each item
■ kept_lines_joined join
Join items with " "
■ briefing_text trim
Trim whitespace from kept lines joined
■ limit_lines_given compare
Check if max lines exists
■ limit_words_given compare
Check if max words exists
■ limit_both_given all
Check if all conditions are true
■ limit_lines_desc ternary
Apply ternary
■ briefing_limit_desc ternary
Apply ternary
■ briefing_line_list split
Split briefing text into parts
■ briefing_line_rows map
Extract from each item
■ briefing_line_rows_trimmed map
Extract text from each item
■ briefing_lines_kept filter
Filter by condition
■ briefing_line_count count
Count items in briefing lines kept
■ briefing_spaced replace
Replace text in briefing text
■ briefing_word_list split
Split briefing spaced into parts
■ briefing_word_rows map
Extract from each item
■ briefing_words_kept filter
Filter by condition
■ briefing_word_count count
Count items in briefing words kept
■ briefing_over_lines all
Check if all conditions are true
■ briefing_over_words all
Check if all conditions are true
■ briefing_over any
Check if any of the conditions are true
■ limit_given any
Check if any of the conditions are true
■ limit_within ternary
Apply ternary
■ limit_verdict ternary
Apply ternary
■ limit_suffix ternary
Apply ternary
■ briefing_lines_said pluralize
Apply pluralize
■ briefing_words_said pluralize
Apply pluralize
■ briefing_length_card template
Generate text from a template
■ briefing_rows map
Extract from each item
◆ briefing_record_write core.storage.shared.write
Write storage shared
■ briefing_record_results default
Apply default
■ briefing_records_kept filter
Filter by condition
■ briefing_record_count count
Count items in briefing records kept
■ changed_tasks_table to_table
Format results as a data table
■ card to_summary
Format results as a summary card
▼
Output
summary card
text briefing_text
text prepared_from_progress
json unresolved_since_previous_meeting
json decisions_needed
text optional_new_brief_context
json coverage_and_omissions
table changed_tasks_table
Settings 6 configurable

Configurable at install. Defaults shown — change them anytime in Recued.

meeting at setting =
new things setting =
project refs setting = [object Object]
meeting title setting =
attendee emails setting =
writing instructions setting =

Uses (8 operations)

Shared store Read storage shared core.storage.shared.read
Files Data file read storage core.storage.data-file-read
Tasks & notes Get work entity core.work-entity.get
Pack operation Search federation on federated projects recued-core.federated-projects.federation.search
Pack operation Search participant on federated projects recued-core.federated-projects.participant.search
Tasks & notes List work entity core.work-entity.list
AI models AI extracts structured fields from data core.ai.extract
Shared store Write storage shared core.storage.shared.write

Trust & control

What installing this recipe would let it do. Recued grants these permissions at install — review them there before approving.

What it's allowed to do

Read Shared store core.storage.shared.read read-only
Read Files core.storage.data-file-read read-only
Read Tasks & notes core.work-entity.get read-only
Read Tasks & notes core.work-entity.list read-only
Read AI models core.ai.extract read-only
Write Shared store core.storage.shared.write external change

2 more aren't listed here. You'll see them at install.

Data it touches

SurfacesShared storeFilesTasks & notesAI models
Warehousedata.shared

About

Tags

pack:meeting-secretarymeeting-prepproject-contextproject-managementfederated-projectsecretaryminutes-fileai_surface

Details

281 steps 6 configurable settings recipe_id: prepare-project-context-secretary