@rubytech/create-maxy-code 0.1.3 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/index.js +0 -1
- package/payload/platform/plugins/outlook/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/replicate/mcp/dist/index.js +0 -2
- package/payload/platform/plugins/replicate/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/whatsapp/mcp/dist/index.js +0 -3
- package/payload/platform/plugins/whatsapp/mcp/dist/index.js.map +1 -1
- package/payload/premium-plugins/real-agency/specs/00-architecture-and-customization.md +122 -0
- package/payload/premium-plugins/real-agency/specs/01-morning-round.md +76 -0
- package/payload/premium-plugins/real-agency/specs/02-valuation-prep.md +81 -0
- package/payload/premium-plugins/real-agency/specs/03-new-instruction.md +100 -0
- package/payload/premium-plugins/real-agency/specs/04-chase-progression.md +120 -0
- package/payload/premium-plugins/real-agency/specs/05-month-end-close.md +79 -0
- package/payload/server/chunk-IDKWGLM5.js +4662 -0
- package/payload/server/maxy-edge.js +1 -1
- package/payload/server/public/assets/{Checkbox-BrPG-Fgq.js → Checkbox-D5bsL5IO.js} +1 -1
- package/payload/server/public/assets/admin-C4dXUYsD.js +1 -0
- package/payload/server/public/assets/{arc-C9u-CrEW.js → arc-DMDAZHAN.js} +1 -1
- package/payload/server/public/assets/architecture-YZFGNWBL-COhEvUpo.js +1 -0
- package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-BooXjv3F.js → architectureDiagram-Q4EWVU46-Bct4jG1j.js} +1 -1
- package/payload/server/public/assets/{blockDiagram-DXYQGD6D-B5GHrpLd.js → blockDiagram-DXYQGD6D-zn8ue3S2.js} +1 -1
- package/payload/server/public/assets/brand-eKOaukUx.js +1 -0
- package/payload/server/public/assets/{c4Diagram-AHTNJAMY-eXQAoR5a.js → c4Diagram-AHTNJAMY-C3MR7lY8.js} +1 -1
- package/payload/server/public/assets/channel-BfWGDvqg.js +1 -0
- package/payload/server/public/assets/{chunk-2KRD3SAO-75R2-SDF.js → chunk-2KRD3SAO-Di4bO8ir.js} +1 -1
- package/payload/server/public/assets/{chunk-336JU56O-GySBYrl6.js → chunk-336JU56O-BviPC2ns.js} +2 -2
- package/payload/server/public/assets/chunk-426QAEUC-B5AP0lw3.js +1 -0
- package/payload/server/public/assets/{chunk-4BX2VUAB-B10q15Ts.js → chunk-4BX2VUAB-DyEhFk-Z.js} +1 -1
- package/payload/server/public/assets/{chunk-4TB4RGXK-BDXQVqGZ.js → chunk-4TB4RGXK-D_5yEpyI.js} +1 -1
- package/payload/server/public/assets/{chunk-55IACEB6-tUgjyGfy.js → chunk-55IACEB6-BRJOZLpU.js} +1 -1
- package/payload/server/public/assets/{chunk-5FUZZQ4R-HVWREFz7.js → chunk-5FUZZQ4R-DtQgWry8.js} +1 -1
- package/payload/server/public/assets/{chunk-5PVQY5BW-Dgl976ld.js → chunk-5PVQY5BW-0iB7BcQs.js} +1 -1
- package/payload/server/public/assets/{chunk-67CJDMHE-Dj_RkE2f.js → chunk-67CJDMHE-BG6-9r6c.js} +1 -1
- package/payload/server/public/assets/{chunk-7N4EOEYR-Bs2lGb7Q.js → chunk-7N4EOEYR-BvMbitX7.js} +1 -1
- package/payload/server/public/assets/{chunk-AA7GKIK3-DJI-TMPT.js → chunk-AA7GKIK3-CE8mGBD5.js} +1 -1
- package/payload/server/public/assets/{chunk-BSJP7CBP-C9TjI4Er.js → chunk-BSJP7CBP-DP7LTBll.js} +1 -1
- package/payload/server/public/assets/{chunk-CIAEETIT-eBald2BJ.js → chunk-CIAEETIT-VfnIdN-h.js} +1 -1
- package/payload/server/public/assets/{chunk-EDXVE4YY-DpTl27Yd.js → chunk-EDXVE4YY-By_SKftv.js} +1 -1
- package/payload/server/public/assets/{chunk-ENJZ2VHE-DJGq6woI.js → chunk-ENJZ2VHE-B6eXRLp_.js} +1 -1
- package/payload/server/public/assets/{chunk-FMBD7UC4-DKTZWvJz.js → chunk-FMBD7UC4-w-yBZsN2.js} +1 -1
- package/payload/server/public/assets/{chunk-FOC6F5B3-CbHCoFyE.js → chunk-FOC6F5B3-f9cFywhd.js} +1 -1
- package/payload/server/public/assets/{chunk-ICPOFSXX-Dln9omeA.js → chunk-ICPOFSXX-D3mu_QMP.js} +2 -2
- package/payload/server/public/assets/{chunk-K5T4RW27-30_QsjXN.js → chunk-K5T4RW27-B_ZUrFUq.js} +1 -1
- package/payload/server/public/assets/{chunk-KGLVRYIC-BUS2gcID.js → chunk-KGLVRYIC-CcWTvRlI.js} +1 -1
- package/payload/server/public/assets/{chunk-LIHQZDEY-C2HjIkJB.js → chunk-LIHQZDEY-D-5-peQw.js} +1 -1
- package/payload/server/public/assets/{chunk-ORNJ4GCN-CwA3Q479.js → chunk-ORNJ4GCN-B4Z5L25I.js} +1 -1
- package/payload/server/public/assets/{chunk-OYMX7WX6-DPrVxnka.js → chunk-OYMX7WX6-BhEkA_9E.js} +1 -1
- package/payload/server/public/assets/chunk-QZHKN3VN-CWh_0JsP.js +1 -0
- package/payload/server/public/assets/{chunk-U2HBQHQK-Cd2aGywh.js → chunk-U2HBQHQK-hKMtiQdr.js} +1 -1
- package/payload/server/public/assets/{chunk-X2U36JSP-CySpNDse.js → chunk-X2U36JSP-D4tzeDCu.js} +1 -1
- package/payload/server/public/assets/{chunk-XPW4576I-CuqzW_VX.js → chunk-XPW4576I-m1Y_r88I.js} +1 -1
- package/payload/server/public/assets/{chunk-YZCP3GAM-B6eSTXCC.js → chunk-YZCP3GAM-u59SS2iO.js} +1 -1
- package/payload/server/public/assets/{chunk-ZZ45TVLE-C5i92syj.js → chunk-ZZ45TVLE-DzWH1kRx.js} +1 -1
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-DpaYsOs7.js +1 -0
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-CSgnTKWr.js +1 -0
- package/payload/server/public/assets/clone-3gLZvp8K.js +1 -0
- package/payload/server/public/assets/{cose-bilkent-S5V4N54A-DSJTw8hO.js → cose-bilkent-S5V4N54A-BhtgY3T7.js} +1 -1
- package/payload/server/public/assets/{dagre-Ykmdx4AE.js → dagre-Dnic0bkL.js} +1 -1
- package/payload/server/public/assets/{dagre-KV5264BT-mCwx14h2.js → dagre-KV5264BT-B4IIvQKL.js} +1 -1
- package/payload/server/public/assets/data-DDIV_NMI.js +1 -0
- package/payload/server/public/assets/{diagram-5BDNPKRD-DH0W-eTb.js → diagram-5BDNPKRD-DV8xzt2c.js} +1 -1
- package/payload/server/public/assets/{diagram-G4DWMVQ6-Cd_sgSXx.js → diagram-G4DWMVQ6-ol2ugyvp.js} +1 -1
- package/payload/server/public/assets/{diagram-MMDJMWI5-BcT7JzKU.js → diagram-MMDJMWI5-BGPFvycg.js} +1 -1
- package/payload/server/public/assets/{diagram-TYMM5635-DEjln4Jb.js → diagram-TYMM5635-UOVJvvup.js} +1 -1
- package/payload/server/public/assets/{dist-BBhnzu00.js → dist-Bd4S37oi.js} +1 -1
- package/payload/server/public/assets/{erDiagram-SMLLAGMA-gtN2yXeP.js → erDiagram-SMLLAGMA-EpVFi5BM.js} +1 -1
- package/payload/server/public/assets/{flatten-ya0TqRLc.js → flatten-BsWEYbBB.js} +1 -1
- package/payload/server/public/assets/{flowDiagram-DWJPFMVM-BqgxFwJq.js → flowDiagram-DWJPFMVM-Dc7biN5E.js} +1 -1
- package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-EYVeDMXV.js → ganttDiagram-T4ZO3ILL-CQmqgZrP.js} +1 -1
- package/payload/server/public/assets/gitGraph-7Q5UKJZL-DeTNsAO0.js +1 -0
- package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-iblTrLqH.js → gitGraphDiagram-UUTBAWPF-CX4B3k7d.js} +1 -1
- package/payload/server/public/assets/{graph-8jKRpn3c.js → graph-BhRpEpY1.js} +3 -3
- package/payload/server/public/assets/graph-labels-CRmMK2-3.js +1 -0
- package/payload/server/public/assets/{graphlib-BgFkKlbk.js → graphlib-BViaSCgs.js} +1 -1
- package/payload/server/public/assets/info-OMHHGYJF-DJJ9GlS6.js +1 -0
- package/payload/server/public/assets/infoDiagram-42DDH7IO-Bye6A9W0.js +2 -0
- package/payload/server/public/assets/{isEmpty-h-wRi_o9.js → isEmpty-BWl67LAZ.js} +1 -1
- package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-DgrkutFt.js → ishikawaDiagram-UXIWVN3A-DUexMULN.js} +1 -1
- package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-DGizbS8f.js → journeyDiagram-VCZTEJTY-B5gJvZif.js} +1 -1
- package/payload/server/public/assets/{jsx-runtime-CmmnCqXp.js → jsx-runtime-LncohCxF.js} +3 -3
- package/payload/server/public/assets/{kanban-definition-6JOO6SKY-BkYR69Ja.js → kanban-definition-6JOO6SKY-CRxTppRU.js} +1 -1
- package/payload/server/public/assets/{line-BaucLmOb.js → line-DrHsVsTS.js} +1 -1
- package/payload/server/public/assets/{linear-CS8PzrHa.js → linear-0O14Y6uf.js} +1 -1
- package/payload/server/public/assets/loader-circle-DwwVih2K.js +1 -0
- package/payload/server/public/assets/{mermaid-parser.core-8sx3hdsI.js → mermaid-parser.core-BKA2PkI8.js} +2 -2
- package/payload/server/public/assets/{mermaid.core-B-32OOlU.js → mermaid.core-BweQYenk.js} +3 -3
- package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-iTSFlPIc.js → mindmap-definition-QFDTVHPH-DnorSK3z.js} +1 -1
- package/payload/server/public/assets/{ordinal-Dwxksj1B.js → ordinal-krseTxxN.js} +1 -1
- package/payload/server/public/assets/packet-4T2RLAQJ-CGbvGkvF.js +1 -0
- package/payload/server/public/assets/pie-ZZUOXDRM-BZy8rjFn.js +1 -0
- package/payload/server/public/assets/{pieDiagram-DEJITSTG-BlZOGDNX.js → pieDiagram-DEJITSTG-Cb0U7ZMW.js} +1 -1
- package/payload/server/public/assets/public-BcEj4U-E.js +40 -0
- package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-ZSVHg7pj.js → quadrantDiagram-34T5L4WZ-BCf2q9mu.js} +1 -1
- package/payload/server/public/assets/radar-PYXPWWZC-DcfWIVXr.js +1 -0
- package/payload/server/public/assets/{reduce-BUuWaDl2.js → reduce-tk-xY6Fv.js} +1 -1
- package/payload/server/public/assets/refresh-cw-Ho-xY4LQ.js +1 -0
- package/payload/server/public/assets/{requirementDiagram-MS252O5E-Cxb4Jv3Q.js → requirementDiagram-MS252O5E-BIsATw3M.js} +1 -1
- package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-7EL65dY-.js → sankeyDiagram-XADWPNL6-DS8Zhosk.js} +1 -1
- package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-BJE5BqGe.js → sequenceDiagram-FGHM5R23-BQlmzAZo.js} +1 -1
- package/payload/server/public/assets/{src-DTePbsFa.js → src-B6XdH6xq.js} +1 -1
- package/payload/server/public/assets/{stateDiagram-FHFEXIEX-BBMbfWt9.js → stateDiagram-FHFEXIEX-BULCX0Yb.js} +1 -1
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-Biwe3nrz.js +1 -0
- package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-JysSNFcS.js → timeline-definition-GMOUNBTQ-_1Lzf2Mm.js} +1 -1
- package/payload/server/public/assets/treeView-SZITEDCU-3WugwVdj.js +1 -0
- package/payload/server/public/assets/treemap-W4RFUUIX-Cf5mDLlu.js +1 -0
- package/payload/server/public/assets/{vennDiagram-DHZGUBPP-ltq0TV6S.js → vennDiagram-DHZGUBPP-BWcKQUi7.js} +1 -1
- package/payload/server/public/assets/wardley-RL74JXVD-Bv4md4b3.js +1 -0
- package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-De3cnthF.js → wardleyDiagram-NUSXRM2D-DTqDWD4P.js} +1 -1
- package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-Cbfc0iyL.js → xychartDiagram-5P7HB3ND-B369c_63.js} +1 -1
- package/payload/server/public/data.html +5 -6
- package/payload/server/public/graph.html +7 -8
- package/payload/server/public/index.html +7 -3
- package/payload/server/public/public.html +5 -5
- package/payload/server/server.js +84 -248
- package/payload/server/public/assets/admin-CaEYW_v7.js +0 -1
- package/payload/server/public/assets/architecture-YZFGNWBL-og13Jg1G.js +0 -1
- package/payload/server/public/assets/channel-DR1gdekz.js +0 -1
- package/payload/server/public/assets/chunk-426QAEUC-CCFqnG66.js +0 -1
- package/payload/server/public/assets/chunk-QZHKN3VN-BdI-DXAU.js +0 -1
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-b6O2Jlw4.js +0 -1
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-Dr7VLce4.js +0 -1
- package/payload/server/public/assets/clone-Bvn1oZoA.js +0 -1
- package/payload/server/public/assets/data-Dhy5Dw4q.js +0 -1
- package/payload/server/public/assets/gitGraph-7Q5UKJZL-PtrjxbML.js +0 -1
- package/payload/server/public/assets/graph-labels-BUpD-jL0.js +0 -1
- package/payload/server/public/assets/info-OMHHGYJF-DEhq3YzA.js +0 -1
- package/payload/server/public/assets/infoDiagram-42DDH7IO-BCLX5hbl.js +0 -2
- package/payload/server/public/assets/packet-4T2RLAQJ-DFimW-1i.js +0 -1
- package/payload/server/public/assets/pie-ZZUOXDRM-Caot2ufI.js +0 -1
- package/payload/server/public/assets/public-wmRSocaM.js +0 -40
- package/payload/server/public/assets/radar-PYXPWWZC-D2R3_64J.js +0 -1
- package/payload/server/public/assets/refresh-cw-BecrQYNq.js +0 -1
- package/payload/server/public/assets/sessions-X_HcFYei.js +0 -1
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-DlgZJJNV.js +0 -1
- package/payload/server/public/assets/trash-2-7zXqPxDD.js +0 -1
- package/payload/server/public/assets/treeView-SZITEDCU-CUD4juo5.js +0 -1
- package/payload/server/public/assets/treemap-W4RFUUIX-BvKmTD-b.js +0 -1
- package/payload/server/public/assets/useAdminFetch-DQ7drtM0.js +0 -1
- package/payload/server/public/assets/wardley-RL74JXVD-C9_PZY_R.js +0 -1
- package/payload/server/public/sessions.html +0 -19
- /package/payload/server/public/assets/{_baseFor-Dn4GSmI6.js → _baseFor-BHtDrjIo.js} +0 -0
- /package/payload/server/public/assets/{array-DJN9YAVf.js → array-DetWRiSa.js} +0 -0
- /package/payload/server/public/assets/{chunk-CnGqDkHZ.js → chunk-DD-I1_y5.js} +0 -0
- /package/payload/server/public/assets/{cytoscape.esm-BcJTl1re.js → cytoscape.esm-C9yNhe1u.js} +0 -0
- /package/payload/server/public/assets/{defaultLocale-B4F_XsBB.js → defaultLocale-_WRwicXn.js} +0 -0
- /package/payload/server/public/assets/{init-DX0Y1qU4.js → init-sTEcj9YX.js} +0 -0
- /package/payload/server/public/assets/{katex-CjHJ1D7d.js → katex-s61Rgv6l.js} +0 -0
- /package/payload/server/public/assets/{path-7vUsG-o2.js → path-B0Ik7Tu9.js} +0 -0
- /package/payload/server/public/assets/{rough.esm-NLRoWnq-.js → rough.esm-DKRO8IF-.js} +0 -0
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# 04 — Chase Progression
|
|
2
|
+
|
|
3
|
+
**Cadence:** Daily (auto, part of morning round) and on-demand
|
|
4
|
+
**Default delivery:** Surfaced in morning round; expanded on request
|
|
5
|
+
**Risk level:** Multiple outbound messages, each individually gated
|
|
6
|
+
**Pre-req reading:** `00-architecture-and-customization.md`
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 1. Purpose
|
|
11
|
+
|
|
12
|
+
This is the headline workflow. Sales agents lose more fee income to stalled chains than to any other single cause, and chain progression is exhausting, repetitive, emotionally draining work that an agent should not be doing manually. Done well, this workflow protects every pipeline fee the agent has worked to earn.
|
|
13
|
+
|
|
14
|
+
Anthropic's invoice-chaser is the closest pattern in the SMB plugin. This is the same pattern, applied to the highest-value cash conversion problem in estate agency: turning sale-agreed into completed.
|
|
15
|
+
|
|
16
|
+
## 2. Trigger recognition
|
|
17
|
+
|
|
18
|
+
The router invokes this workflow when the operator says any variant of:
|
|
19
|
+
|
|
20
|
+
- "chase the chain" / "chase progression"
|
|
21
|
+
- "where is everyone on [address]"
|
|
22
|
+
- "push [name]'s deal" / "push the chain on [address]"
|
|
23
|
+
- "follow up on the [name] solicitors"
|
|
24
|
+
- "what's stalled" / "stalled deals"
|
|
25
|
+
- "any updates on [address]"
|
|
26
|
+
|
|
27
|
+
Also runs automatically as a sub-flow of the morning round, surfacing stalled items there. Expanding any stalled item from the morning round (the operator says "show me what's holding up [address]") brings the full workflow into focus on that deal.
|
|
28
|
+
|
|
29
|
+
## 3. What it produces
|
|
30
|
+
|
|
31
|
+
A ranked list of stalled deals with drafted, tone-matched messages per stakeholder. Two views:
|
|
32
|
+
|
|
33
|
+
**Across the pipeline.** Every sale-agreed deal that has stalled past its threshold (default 7 days; learns per stakeholder type), ranked by fall-through risk × fee value. Each deal shows: property, days since last contact, last contact summary, fall-through risk score, what is most likely holding it up, who to chase, draft message ready.
|
|
34
|
+
|
|
35
|
+
**Single deal deep-dive.** When the operator names a property, the workflow produces the full state of that chain: every party, every last-known status, every outstanding action, every risk flag. Draft messages for every stakeholder who needs chasing, each in the right tone.
|
|
36
|
+
|
|
37
|
+
Each draft message identifies recipient, channel (email vs WhatsApp vs SMS), and is written in the agent's voice for that recipient type. The operator can approve all, approve some, edit any, or skip.
|
|
38
|
+
|
|
39
|
+
## 4. Fall-through risk scoring
|
|
40
|
+
|
|
41
|
+
The workflow computes a risk score per deal from observable signals:
|
|
42
|
+
|
|
43
|
+
- Days since last contact (any party)
|
|
44
|
+
- Days since last positive progress event
|
|
45
|
+
- Mortgage offer expiry approaching (offers usually valid 3–6 months)
|
|
46
|
+
- Searches outstanding past day 21
|
|
47
|
+
- Survey booked but not done past day 14
|
|
48
|
+
- Vendor or buyer disengagement signals (slow replies, terse messages)
|
|
49
|
+
- Chain complexity (number of linked transactions)
|
|
50
|
+
- Onward-purchase status if known
|
|
51
|
+
|
|
52
|
+
Scores are not shown as numbers to the operator — they drive the ranking and a one-line cause description. "Mortgage offer expires in 9 days and survey is booked but not done" is the surface; the score is underneath.
|
|
53
|
+
|
|
54
|
+
The scoring weights are profile-learned. If the operator routinely deprioritises deals that the workflow flagged as high risk, the weighting shifts. If they routinely action deals the workflow flagged as low risk, the weighting shifts the other way.
|
|
55
|
+
|
|
56
|
+
## 5. Tone matching per recipient type
|
|
57
|
+
|
|
58
|
+
Different stakeholders get different voices. The profile carries a tone preference per type, calibrated from the agent's voice samples and from edit-before-send diffs over time.
|
|
59
|
+
|
|
60
|
+
| Recipient type | Default tone | Channel default |
|
|
61
|
+
|---|---|---|
|
|
62
|
+
| Vendor (familiar) | Conversational, first-name | WhatsApp / mobile |
|
|
63
|
+
| Vendor (formal) | Polite, surname | Email |
|
|
64
|
+
| Buyer (familiar) | Conversational, first-name | WhatsApp / mobile |
|
|
65
|
+
| Buyer (formal) | Polite, surname | Email |
|
|
66
|
+
| Vendor solicitor | Formal, surname, references file | Email |
|
|
67
|
+
| Buyer solicitor | Formal, surname, references file | Email |
|
|
68
|
+
| Mortgage broker | Polite, first-name, references buyer | Email or phone |
|
|
69
|
+
| Surveyor | Brief, polite, references property | Email |
|
|
70
|
+
|
|
71
|
+
The defaults are starting points. Within a month of use, each agent's tone profile is distinct.
|
|
72
|
+
|
|
73
|
+
## 6. Skills composed
|
|
74
|
+
|
|
75
|
+
| Skill | Purpose |
|
|
76
|
+
|---|---|
|
|
77
|
+
| `chain-progression-tracker` | Builds the state-of-the-chain view per deal |
|
|
78
|
+
| `risk-scorer` | Computes fall-through risk from observable signals |
|
|
79
|
+
| `priority-ranker` (cross-cutting) | Orders the stalled list by risk × fee |
|
|
80
|
+
| `tone-matched-drafter` (cross-cutting) | Drafts each message in the right voice |
|
|
81
|
+
| `compliance-flag-checker` (cross-cutting) | Flags anything that should not be said by an agent (GDPR, advertising standards, AML disclosures) |
|
|
82
|
+
|
|
83
|
+
## 7. Connectors
|
|
84
|
+
|
|
85
|
+
Read: CRM, email, WhatsApp, calendar, mortgage offer expiry data if held in CRM.
|
|
86
|
+
Write: Email, WhatsApp Business, SMS — each on explicit per-message approval.
|
|
87
|
+
|
|
88
|
+
## 8. Approval gates
|
|
89
|
+
|
|
90
|
+
Per-message. The workflow presents drafts in a batch (typically 5–15 messages for a normal stalled list) and the operator can:
|
|
91
|
+
|
|
92
|
+
- **Approve all** — fires every message as drafted
|
|
93
|
+
- **Approve, edit some** — operator edits inline; edits are captured for learning; remaining approved messages fire as drafted
|
|
94
|
+
- **Approve some, skip some** — fires only approved ones; skipped ones are dropped from the run and the recipient is excluded from chase for 24 hours
|
|
95
|
+
- **Pause** — saves the batch; returns to it later
|
|
96
|
+
|
|
97
|
+
The workflow never fires a message that has been edited but not re-approved. Edit-then-fire requires a second approval click.
|
|
98
|
+
|
|
99
|
+
## 9. The "spoke to them" override
|
|
100
|
+
|
|
101
|
+
The most frequent operator action with this workflow is "don't chase [name], I spoke to them yesterday." The workflow recognises this phrasing, removes the recipient from the current batch, and records the verbal contact in the CRM with timestamp and a note "operator confirms verbal contact, no chase needed."
|
|
102
|
+
|
|
103
|
+
This is a learning signal: that recipient now has a logged interaction, and the stalled-threshold clock resets for them.
|
|
104
|
+
|
|
105
|
+
## 10. Continuous learning hooks
|
|
106
|
+
|
|
107
|
+
- **Cadence per stakeholder type.** "I chase solicitors at 5 days, brokers at 3, vendors weekly." Learned from explicit corrections and from edit-frequency patterns.
|
|
108
|
+
- **Tone profile.** The deepest learning hook in the whole product. Every edit-before-send diff is gold here. Within a quarter, the workflow should be drafting messages the agent sends without editing 80% of the time.
|
|
109
|
+
- **Risk weights.** Reweighted by which deals actually fall through (negative outcome) and which complete (positive outcome). Slow signal, high quality.
|
|
110
|
+
- **Skip patterns.** Recipients the agent never chases (a friend, a regular client they handle in person) get excluded automatically once a pattern is recognised.
|
|
111
|
+
- **Channel preferences per recipient.** If the operator always changes the drafted email to a WhatsApp, the channel preference for that recipient is updated.
|
|
112
|
+
- **Phrasing pet-peeves.** The agent edits out "I hope this finds you well" every single time → the workflow stops using it. Within weeks, the drafts read as the agent's writing, not Claude's.
|
|
113
|
+
|
|
114
|
+
## 11. Build notes
|
|
115
|
+
|
|
116
|
+
- This is workflow two by build order, after morning round. The morning round earns the right to look; chase-progression earns the right to act.
|
|
117
|
+
- Pilot with Muvin (Amelia, Alison) as the existing live deployment. They will tolerate the early iteration and the edit-feedback they generate is exactly the signal `tone-matched-drafter` needs.
|
|
118
|
+
- The risk scorer should be opaque to the operator. Showing a number invites debate; showing a one-line cause invites action.
|
|
119
|
+
- WhatsApp Business API is rate-limited and template-restricted for the first interaction with a recipient. The workflow needs to know when a recipient is on an open 24-hour conversation window and when a template message is required. This is a routine integration detail but trips up most builds at first.
|
|
120
|
+
- Keep the maximum batch size capped (suggest 15 messages). If the operator has 30 stalled deals, surfacing them all at once invites approve-all-and-regret. Two batches of 15 with a pause between is safer.
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# 05 — Month-End Close
|
|
2
|
+
|
|
3
|
+
**Cadence:** Monthly (typically first working day after period end)
|
|
4
|
+
**Default delivery:** On request or auto-staged on the first of the month
|
|
5
|
+
**Risk level:** Read-mostly, with payment-batch staging gated for approval
|
|
6
|
+
**Pre-req reading:** `00-architecture-and-customization.md`
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 1. Purpose
|
|
11
|
+
|
|
12
|
+
Compress a half-day to a full day of month-end admin into a 20-minute review. Reconcile completions against fees received, compute the commission run, surface variances against last month and same-month-last-year, and produce a clean pack for the accountant.
|
|
13
|
+
|
|
14
|
+
This is the workflow that earns back the subscription. A solo agent who would otherwise spend half a Saturday on this should feel that Real Agent paid for itself in the time saved on month-end alone.
|
|
15
|
+
|
|
16
|
+
## 2. Trigger recognition
|
|
17
|
+
|
|
18
|
+
The router invokes this workflow when the operator says any variant of:
|
|
19
|
+
|
|
20
|
+
- "close out [month]" / "close [month]" / "month end"
|
|
21
|
+
- "do my commission" / "commission run"
|
|
22
|
+
- "reconcile [month]"
|
|
23
|
+
- "ready for the accountant"
|
|
24
|
+
- "what did I do last month"
|
|
25
|
+
|
|
26
|
+
Also fires automatically on the first working day of the month, staged for the operator to open when ready. Auto-staged runs surface in the morning round with a "month-end close is ready" note.
|
|
27
|
+
|
|
28
|
+
## 3. What it produces
|
|
29
|
+
|
|
30
|
+
A five-section pack, presented in Claude UI and stored as a markdown + spreadsheet bundle in the agent's Drive.
|
|
31
|
+
|
|
32
|
+
**Completions.** Every property that exchanged or completed in the period, with: address, vendor, buyer, fee value, fee structure (sole/multi/withdrawal/sliding), completion date, expected receipt date. Highlights anything that exchanged but is still awaiting completion.
|
|
33
|
+
|
|
34
|
+
**Reconciliation.** Fees expected vs. fees received, matched on completion date and amount. Three flag categories: matched (no action), pending (expected but not yet received, with age), variance (received differs from expected — fee adjustment, referral deduction, fee dispute). Variances get a one-line cause and a draft email to the accountant or solicitor if appropriate.
|
|
35
|
+
|
|
36
|
+
**Commission run.** For office tiers with multiple agents: each agent's earned commission for the period, including referral fees passed through, franchise levies deducted, and any pre-agreed adjustments. Presented as a payable schedule with totals.
|
|
37
|
+
|
|
38
|
+
**Pipeline carry-forward.** Sale-agreed but not yet exchanged, with expected exchange/completion month, fee value, and current fall-through risk (pulled from chase-progression). A one-line narrative of "next month should look like X based on what's in the pipeline."
|
|
39
|
+
|
|
40
|
+
**Variance narrative.** Two paragraphs comparing the period to the previous month and to the same period last year. Plain language, no jargon — "April was £8,400 down on March because three completions slipped into May, all expected to land. Year-on-year April is 15% up." Suitable to paste into a board update, a tax return cover note, or a conversation with a partner.
|
|
41
|
+
|
|
42
|
+
## 4. Skills composed
|
|
43
|
+
|
|
44
|
+
| Skill | Purpose |
|
|
45
|
+
|---|---|
|
|
46
|
+
| `period-reconciler` | Matches completions to fees received, surfaces variances |
|
|
47
|
+
| `commission-calculator` | Computes agent commission per the splits table |
|
|
48
|
+
| `payment-batch-stager` | Builds payable schedules ready for approval |
|
|
49
|
+
| `variance-narrator` (cross-cutting) | Writes the comparison paragraphs |
|
|
50
|
+
| `compliance-flag-checker` (cross-cutting) | AML refresh on any unusual fee patterns; data retention prompts on closed files |
|
|
51
|
+
|
|
52
|
+
## 5. Connectors
|
|
53
|
+
|
|
54
|
+
Read: Accounting (Xero / FreeAgent / QuickBooks / Sage), bank feed via the accounting connector, CRM, prior month's close pack.
|
|
55
|
+
Write: Accounting (post journal entries on approval), payment batch staging for the agent's bank or for a payroll-style export, Drive (close pack storage), email (accountant pack).
|
|
56
|
+
|
|
57
|
+
## 6. Approval gates
|
|
58
|
+
|
|
59
|
+
- **Variance writeoffs.** Any fee variance the workflow proposes to write off (FX, small reconciliation differences) requires per-item approval.
|
|
60
|
+
- **Commission payment batch.** The agent commission run is staged as a payment batch but does not initiate any actual transfer. The operator either approves the batch for export to their bank, or makes payments manually with the schedule as reference.
|
|
61
|
+
- **Journal entries.** Any postings to the accounting system require approval. The default behaviour is to *propose* postings, show what they would do, and let the operator approve before they hit the books.
|
|
62
|
+
- **Accountant pack send.** The drafted email to the accountant with the pack attached requires explicit approval before send.
|
|
63
|
+
|
|
64
|
+
## 7. Continuous learning hooks
|
|
65
|
+
|
|
66
|
+
- **Categorisation conventions.** The accountant prefers a specific chart-of-accounts mapping (e.g. "referral fees go to 4501, not 4500"). Corrected once, learned for every subsequent close.
|
|
67
|
+
- **Variance tolerance.** Default writeoff threshold (e.g. under £5) tightens or loosens based on the operator's overrides.
|
|
68
|
+
- **Narrative tone.** The variance narrative should sound like the agent wrote it for their accountant or their partner. Voice learned from edit-before-approve diffs on the narrative paragraphs.
|
|
69
|
+
- **What to flag.** "I always want to know about completions over £5k fee value" → the close pack leads with those. "Don't bother flagging multi-agency fee splits separately" → suppressed.
|
|
70
|
+
- **Pipeline narrative confidence.** Over time, the workflow learns how accurate its "next month should look like X" predictions are, and adjusts confidence language accordingly.
|
|
71
|
+
|
|
72
|
+
## 8. Build notes
|
|
73
|
+
|
|
74
|
+
- This is workflow five by build order. It depends on the accounting connector, which is more involved than the CRM/comms connectors needed for workflows one through three.
|
|
75
|
+
- Xero and FreeAgent are the right starting accounting connectors for solo and small-office UK agents. QuickBooks Online is third priority; Sage Business Cloud Accounting is fourth.
|
|
76
|
+
- Bank-feed access through the accounting platform avoids needing a separate Open Banking integration. Sufficient for month-end reconciliation; not sufficient if the agent later wants live cash visibility (a future extension).
|
|
77
|
+
- The accountant pack is a meaningful deliverable in itself. Get the format right — a markdown summary, an Excel reconciliation, and a PDF P&L narrative — and accountants become a soft channel for referring more agencies to Real Agent.
|
|
78
|
+
- The commission run is the feature that justifies this workflow for the office tier. Solo agents care less about the commission split logic but still get value from the reconciliation and the accountant pack.
|
|
79
|
+
- The proactive auto-staged run on the first of the month is the moment Real Agent feels indispensable. An operator who walks into their office on the first and finds "your month-end is ready to review" already done is unlikely to churn.
|