Skip to content

Quickstart: Your First Memo

This is the shortest path from a folder of deal documents to a cited draft memo in Canvas. The primary way in is Slack; a web-chat alternative inside Canvas is covered at the end.

  • An offering memorandum (PDF) and an underwriting model (Excel .xlsx/.xls).
  • Optionally, one or more CoStar market exports (PDF). CSV files are also accepted.
  • A name for the deal.

Mention the bot and upload only in an approved channel. In production, the bot (@memobot) operates in #memosa-main and #initiative-memosa. If you upload somewhere it doesn’t listen, it quietly ignores the files — so make sure you’re in an allowed channel first.

Attach your PDF, Excel model, and any CoStar reports to a message in the channel. You can drag them all in at once.

Memosa confirms what it received and tells you which document types it classified each file as (PDF, Excel, CoStar).

If Memosa doesn’t already have a deal name, it asks for one. Reply in the thread with the deal’s name. Setting the name is also what creates the deal’s isolated evidence namespace — so this step matters.

When the required documents and the deal name are all present, Memosa tells you you’re ready and asks you to start generation explicitly. Reply in the thread:

@memobot generate

Generation does not start automatically — you trigger it. This is deliberate: you stay in control of when the analysis run begins.

Memosa processes the documents, then runs its multi-agent analysis. Document ingestion typically takes a few minutes; the full memo generation that follows is a longer run. When it finishes, your cited draft memo is waiting in Canvas, the web editor — that’s where you’ll edit, collaborate, and eventually approve and export.

Prefer not to use Slack? Canvas has a guided intake flow that runs the identical pipeline.

  1. Start a conversation. Open the intake flow in Canvas. A new conversation is created for you.
  2. Upload documents. Drag in your PDF, Excel model, and any CoStar reports. Each file can be up to 50 MB , and accepted types are .pdf, .xlsx, .xls, and .csv. You’ll see live progress as each file is validated and processed.
  3. Confirm the deal name. Memosa often suggests one from your documents — accept it or type your own.
  4. Generate. Click generate (or send a message like generate). A live progress stream shows the analysis as it runs, and you can reconnect without losing your place if your connection drops.
  5. Open the memo. When generation completes, the finished memo opens in Canvas.

The web-chat flow caps how many conversations you can have active at once — currently 15 per user. Finished deals (completed, errored, or cancelled) don’t count against this and are cleared automatically, so the cap only ever reflects deals genuinely in flight. If you hit it, complete or close an existing conversation to free a slot.

Memosa generation is a substantive analysis run, not an instant response. As a rough mental model:

  • Document processing (parsing, chunking, FormulaGraph) usually finishes in a few minutes.
  • Memo generation (the multi-agent analysis and synthesis) runs longer — on the order of tens of minutes for a full memo.

Exact timing depends on the deal: how large the model is, how many documents you uploaded, and current load. Both paths give you live progress so you’re never guessing whether something is still running.

Once your draft is in Canvas:

  • src/slack/handlers/file_handler.pyFILE_BATCH_DEBOUNCE_SECS = 3.0; the file-batch debounce buffer for simultaneous Slack uploads.
  • src/slack/handlers/base_handler.pyis_channel_allowed(); channel allow-list enforcement.
  • src/slack/handlers/mention_handler.py — the explicit @memobot generate trigger and the “all required documents present” readiness prompt.
  • src/services/intake_coordinator.py — readiness gating: PDF + Excel + deal name required; deal name creates the Pinecone namespace.
  • src/canvas/services/web_intake_config.pymax_file_size_bytes (50 MB), allowed_extensions (.pdf/.xlsx/.xls/.csv), max_active_conversations (15), and the stale-reclaim thresholds.
  • src/canvas/routes/web_chat_routes.py — the web intake endpoints (create conversation, upload files, set deal name, generate, SSE progress) and the per-user active-conversation cap surfaced as max_active.
  • src/canvas/services/web_intake_service.py — web conversation lifecycle, deal-name suggestion from document content, zombie-conversation reclamation.
  • Native memory feedback_web_chat_has_excel.md — web-chat deals always include an Excel model, same as Slack.