Recued
Menu
← Back to recipes

Prepare a meeting from project updates

by recued-core v3 36 views

Use “Prepare a meeting from project updates” in Recued. Name the meeting and who is in it, and reuse current project and task progress to prepare the project portion, then show only unresolved decisions, new topics, and uncovered context.

Complete workflow

Use Meeting Prep from Project Updates in Recued. Name any meeting yourself, from any calendar or none, and reuse current work so the project portion is prepared before you walk in.

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 a meeting from project updates” in Recued. Name the meeting and who is in it, and reuse current project and task progress to prepare the project portion, then show only unresolved decisions, new topics, and uncovered context.

pack:meeting-prep-project-context-manualmeeting-prepproject-contextproject-management
by recued-core pinned v3
View pack details, dependencies, and permissions →

Update once, prepare from progress

Keep projects and tasks current as work happens. This recipe reuses those updates to prepare the project portion of a meeting you are about to have, so the people in it do not have to report the same progress again. The more current the work is, the less separate preparation remains.

No calendar involved

You name the meeting: what it is, when it starts, and who is in it. Nothing is read from a calendar and nothing is written to one, so this works for a meeting in any calendar Recued does not speak to, or one that was never in a calendar at all — a call that got scheduled in a chat thread, a conversation you know is coming this afternoon.

Because you name it, it only runs when you ask. There is no scheduled check: a calendar can be swept for meetings that are coming up, and a meeting only you know about cannot.

What is ready and what still needs attention

The result separates progress already prepared from project updates, unresolved items carried from the last time you met, decisions that still need the room, and new context from an optional brief. Coverage and omissions show what Recued could not prepare.

This is a project-context supplement, not the whole meeting brief. It stays temporary: nothing is saved as a note, meeting record, or project record, and topics outside the supplied files and selected projects remain outside its claims.

Promises still owed

When an earlier meeting recorded something you promised, it is carried into this preparation as an open item with its own id — read back from what was recorded, not re-read out of anyone’s notes. Only promises still outstanding on the projects in scope appear; anything already settled stays out, so a meeting does not reopen a closed decision.

What “updated” means

Recued reads each selected project and up to 50 current tasks per included project. A task is in the update window when its current updated_at falls on or after Previous meeting time. A project is in the window when its updated_at or last_activity_at does. These timestamps prove only that a row was touched during the window. They are not an audit log and cannot prove which field changed or what its old value was.

Federated projects

A selected local project is eligible directly. A selected federated project is eligible only when one of the attendee emails you entered matches exactly one active participant in that project. Missing or ambiguous matches are reported under omissions instead of exposing that project’s tasks.

Inputs and limits

Required: what the meeting is, when it starts, and at least one project. Everything else is optional.

  • Previous meeting time — when you last met about this. Leave it blank and there is no activity window at all: every current row is in scope, which is the right answer for a first meeting, and coverage says so. A value that is not a real date is refused rather than quietly treated as blank.
  • Previous meeting notes — attach notes from last time if you have them. Nothing from the past is read unless you attach it. The parsed result stays temporary.
  • Existing brief or agenda — optional, and best used for genuinely new topics. Current project progress is reused automatically and does not need repeating here.
  • Meeting reference — optional. A calendar event id or any stable string, kept with the preparation so you can line it up with whatever calendar you actually use.

Choose at most eight project IDs; extra selections are reported as omitted. With none chosen the run stops — there is no calendar to take them from. Task reads are capped at 50 per included project and report any remaining count. The recipe performs no durable writes.

How it works 171 steps

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

Process (171 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
■ meeting_title trim
Trim whitespace from setting meeting title
⚠ meeting_title_guard guard
Stop if meeting title is empty
■ meeting_key trim
Trim whitespace from setting meeting key
■ booking_start_at date_parse
Parse setting meeting at as a date
⚠ meeting_at_guard guard
Stop if booking start at is missing
■ booking_start_iso date_format
Format as a date
■ booking default
Apply default
■ attendee_emails_raw default
Apply default
■ 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_text trim
Trim whitespace from setting previous meeting at
■ previous_meeting_at date_parse
Parse previous meeting text as a date
■ window_from_supplied compare
Check if previous meeting text has data
■ previous_meeting_unparseable all
Check if all conditions are true
⚠ previous_meeting_parse_guard guard
Stop if previous meeting unparseable equals
■ window_floor default
Apply default
■ has_previous_booking default
Apply default
■ 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 {}
■ notes_file_supplied compare
Check if setting previous notes has data
◆ previous_notes_markdown recued-core.docling.document.to_markdown
To markdown document on docling
skip: step.notes_file_supplied equal false
■ previous_notes_ref default
Apply default
■ has_previous_notes_file compare
Check if previous notes ref has data
✦ previous_notes_extract_file core.ai.extract
AI extracts structured fields from data
skip: step.has_previous_notes_file equal false
■ 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 " + "
■ has_upcoming_brief compare
Check if setting upcoming brief has data
◆ upcoming_brief_markdown recued-core.docling.document.to_markdown
To markdown document on docling
skip: step.has_upcoming_brief equal false
■ upcoming_brief_ref default
Apply default
✦ upcoming_brief_extract core.ai.extract
AI extracts structured fields from data
skip: step.has_upcoming_brief equal false
■ 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 default
Apply default
✦ 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
■ changed_tasks_table to_table
Format results as a data table
■ card to_summary
Format results as a summary card
▼
Output
summary card
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 8 configurable

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

meeting at setting = [object Object]
meeting key setting =
project refs setting =
meeting title setting = [object Object]
previous notes setting = [object Object]
upcoming brief setting = [object Object]
attendee emails setting =
previous meeting at setting =

Uses (6 operations)

Pack operation To markdown document on docling recued-core.docling.document.to_markdown
AI models AI extracts structured fields from data core.ai.extract
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

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 AI models core.ai.extract read-only
Read Tasks & notes core.work-entity.get read-only
Read Tasks & notes core.work-entity.list read-only

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

Data it touches

SurfacesAI modelsTasks & notes

About

Tags

pack:meeting-prep-project-context-manualmeeting-prepproject-contextproject-managementfederated-projectdoclingmanualai_surfaceread-onlytransient

Details

171 steps 8 configurable settings recipe_id: prepare-project-context-manual