@rubytech/create-maxy-code 0.1.22 → 0.1.24

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.
Files changed (173) hide show
  1. package/dist/__tests__/samba-provision.test.js +202 -0
  2. package/dist/index.js +127 -73
  3. package/dist/samba-provision.js +215 -0
  4. package/dist/uninstall.js +160 -3
  5. package/package.json +1 -1
  6. package/payload/platform/plugins/admin/PLUGIN.md +4 -0
  7. package/payload/platform/plugins/admin/skills/admin-user-management/SKILL.md +47 -0
  8. package/payload/platform/plugins/admin/skills/commitment-followthrough/SKILL.md +60 -0
  9. package/payload/platform/plugins/admin/skills/file-presentation/SKILL.md +67 -0
  10. package/payload/platform/plugins/admin/skills/session-management/SKILL.md +62 -0
  11. package/payload/platform/plugins/deep-research/.claude-plugin/plugin.json +1 -1
  12. package/payload/platform/plugins/deep-research/PLUGIN.md +7 -1
  13. package/payload/platform/plugins/deep-research/recipes/README.md +36 -0
  14. package/payload/platform/plugins/deep-research/skills/academic-verify/SKILL.md +75 -0
  15. package/payload/platform/plugins/deep-research/skills/book-mirror/SKILL.md +68 -0
  16. package/payload/platform/plugins/deep-research/skills/data-research/SKILL.md +108 -0
  17. package/payload/platform/plugins/deep-research/skills/strategic-reading/SKILL.md +69 -0
  18. package/payload/platform/plugins/docs/references/deployment.md +23 -2
  19. package/payload/platform/plugins/email/mcp/dist/lib/imap.d.ts +1 -1
  20. package/payload/platform/plugins/email/mcp/dist/scripts/email-fetch.d.ts +7 -2
  21. package/payload/platform/plugins/email/mcp/dist/scripts/email-fetch.d.ts.map +1 -1
  22. package/payload/platform/plugins/email/mcp/dist/scripts/email-fetch.js +7 -2
  23. package/payload/platform/plugins/email/mcp/dist/scripts/email-fetch.js.map +1 -1
  24. package/payload/platform/plugins/email/references/email-reference.md +4 -4
  25. package/payload/platform/plugins/linkedin-import/skills/linkedin-import/SKILL.md +2 -0
  26. package/payload/platform/plugins/memory/PLUGIN.md +6 -0
  27. package/payload/platform/plugins/memory/skills/archive-crawler/SKILL.md +67 -0
  28. package/payload/platform/plugins/memory/skills/concept-synthesis/SKILL.md +80 -0
  29. package/payload/platform/plugins/memory/skills/conversation-archive/SKILL.md +2 -0
  30. package/payload/platform/plugins/memory/skills/document-ingest/SKILL.md +2 -0
  31. package/payload/platform/plugins/scheduling/PLUGIN.md +4 -1
  32. package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.d.ts +7 -3
  33. package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.d.ts.map +1 -1
  34. package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js +7 -3
  35. package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js.map +1 -1
  36. package/payload/platform/plugins/scheduling/skills/briefing/SKILL.md +75 -0
  37. package/payload/platform/plugins/scheduling/skills/daily-prep/SKILL.md +61 -0
  38. package/payload/platform/plugins/workflows/PLUGIN.md +2 -2
  39. package/payload/platform/plugins/workflows/skills/workflow-manager/SKILL.md +1 -1
  40. package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
  41. package/payload/platform/services/claude-session-manager/dist/http-server.js +14 -1
  42. package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
  43. package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts +14 -0
  44. package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts.map +1 -1
  45. package/payload/platform/services/claude-session-manager/dist/pty-spawner.js +9 -2
  46. package/payload/platform/services/claude-session-manager/dist/pty-spawner.js.map +1 -1
  47. package/payload/platform/services/claude-session-manager/dist/system-prompt.d.ts +25 -1
  48. package/payload/platform/services/claude-session-manager/dist/system-prompt.d.ts.map +1 -1
  49. package/payload/platform/services/claude-session-manager/dist/system-prompt.js +54 -3
  50. package/payload/platform/services/claude-session-manager/dist/system-prompt.js.map +1 -1
  51. package/payload/platform/templates/agents/admin/IDENTITY.md +39 -291
  52. package/payload/platform/templates/agents/admin/SOUL.md +4 -4
  53. package/payload/platform/templates/specialists/agents/content-producer.md +24 -69
  54. package/payload/platform/templates/specialists/agents/database-operator.md +49 -155
  55. package/payload/platform/templates/specialists/agents/personal-assistant.md +27 -177
  56. package/payload/platform/templates/specialists/agents/project-manager.md +29 -96
  57. package/payload/platform/templates/specialists/agents/research-assistant.md +36 -78
  58. package/payload/premium-plugins/real-agency/agents/compliance.md +14 -0
  59. package/payload/premium-plugins/real-agency/agents/negotiator.md +22 -0
  60. package/payload/premium-plugins/real-agency/agents/valuer.md +16 -0
  61. package/payload/premium-plugins/real-agency/plugins/estate-business/.claude-plugin/plugin.json +1 -1
  62. package/payload/premium-plugins/real-agency/plugins/estate-business/PLUGIN.md +29 -13
  63. package/payload/premium-plugins/real-agency/plugins/estate-business/skills/commission-calculator/SKILL.md +40 -0
  64. package/payload/premium-plugins/real-agency/plugins/estate-business/skills/month-end-close/SKILL.md +69 -0
  65. package/payload/premium-plugins/real-agency/plugins/estate-business/skills/payment-batch-stager/SKILL.md +42 -0
  66. package/payload/premium-plugins/real-agency/plugins/estate-business/skills/period-reconciler/SKILL.md +42 -0
  67. package/payload/premium-plugins/real-agency/plugins/estate-sales/.claude-plugin/plugin.json +1 -1
  68. package/payload/premium-plugins/real-agency/plugins/estate-sales/PLUGIN.md +27 -13
  69. package/payload/premium-plugins/real-agency/plugins/estate-sales/skills/chase-progression/SKILL.md +107 -0
  70. package/payload/premium-plugins/real-agency/plugins/estate-sales/skills/risk-scorer/SKILL.md +42 -0
  71. package/payload/premium-plugins/real-agency/plugins/leads/.claude-plugin/plugin.json +1 -1
  72. package/payload/premium-plugins/real-agency/plugins/leads/PLUGIN.md +24 -10
  73. package/payload/premium-plugins/real-agency/plugins/leads/skills/chain-progression-tracker/SKILL.md +51 -0
  74. package/payload/premium-plugins/real-agency/plugins/leads/skills/diary-builder/SKILL.md +38 -0
  75. package/payload/premium-plugins/real-agency/plugins/leads/skills/enquiry-triage/SKILL.md +36 -0
  76. package/payload/premium-plugins/real-agency/plugins/leads/skills/morning-round/SKILL.md +72 -0
  77. package/payload/premium-plugins/real-agency/plugins/listings/.claude-plugin/plugin.json +1 -1
  78. package/payload/premium-plugins/real-agency/plugins/listings/PLUGIN.md +43 -12
  79. package/payload/premium-plugins/real-agency/plugins/listings/skills/comparable-finder/SKILL.md +52 -0
  80. package/payload/premium-plugins/real-agency/plugins/listings/skills/epc-checker/SKILL.md +38 -0
  81. package/payload/premium-plugins/real-agency/plugins/listings/skills/listing-copy-writer/SKILL.md +55 -0
  82. package/payload/premium-plugins/real-agency/plugins/listings/skills/local-market-stats/SKILL.md +33 -0
  83. package/payload/premium-plugins/real-agency/plugins/listings/skills/new-instruction/SKILL.md +78 -0
  84. package/payload/premium-plugins/real-agency/plugins/listings/skills/particulars-builder/SKILL.md +48 -0
  85. package/payload/premium-plugins/real-agency/plugins/listings/skills/portal-launch-scheduler/SKILL.md +49 -0
  86. package/payload/premium-plugins/real-agency/plugins/listings/skills/pricing-scenario-builder/SKILL.md +35 -0
  87. package/payload/premium-plugins/real-agency/plugins/listings/skills/supplier-booker/SKILL.md +39 -0
  88. package/payload/premium-plugins/real-agency/plugins/listings/skills/talk-track-composer/SKILL.md +36 -0
  89. package/payload/premium-plugins/real-agency/plugins/listings/skills/terms-of-business-drafter/SKILL.md +54 -0
  90. package/payload/premium-plugins/real-agency/plugins/listings/skills/valuation-prep/SKILL.md +69 -0
  91. package/payload/premium-plugins/real-agency/plugins/loop/PLUGIN.md +20 -0
  92. package/payload/premium-plugins/real-agency/plugins/loop/skills/compliance-flag-checker/SKILL.md +53 -0
  93. package/payload/premium-plugins/real-agency/plugins/loop/skills/priority-ranker/SKILL.md +40 -0
  94. package/payload/premium-plugins/real-agency/plugins/loop/skills/tone-matched-drafter/SKILL.md +53 -0
  95. package/payload/premium-plugins/real-agency/plugins/loop/skills/variance-narrator/SKILL.md +50 -0
  96. package/payload/premium-plugins/real-agency/plugins/loop/skills/vendor-research/SKILL.md +54 -0
  97. package/payload/server/public/assets/{Checkbox-B79fVxpA.js → Checkbox-D1OQD43b.js} +1 -1
  98. package/payload/server/public/assets/admin-czNBxWor.js +216 -0
  99. package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-D8e59YJ0.js → architectureDiagram-Q4EWVU46-BcwgT80u.js} +1 -1
  100. package/payload/server/public/assets/{blockDiagram-DXYQGD6D-CxaDkc0A.js → blockDiagram-DXYQGD6D-BMSyZUQA.js} +1 -1
  101. package/payload/server/public/assets/{brand-Cg9t5U6J.css → brand-2cku8WFs.css} +1 -1
  102. package/payload/server/public/assets/{brand-jT16ErmC.js → brand-CSQuxS9w.js} +1 -1
  103. package/payload/server/public/assets/{c4Diagram-AHTNJAMY-D0PAvq-q.js → c4Diagram-AHTNJAMY-DPRGY1jJ.js} +1 -1
  104. package/payload/server/public/assets/channel-fxEghWew.js +1 -0
  105. package/payload/server/public/assets/{chunk-336JU56O-B-CXn-Et.js → chunk-336JU56O-B7oQ3g1c.js} +2 -2
  106. package/payload/server/public/assets/{chunk-426QAEUC-BLzCQHKA.js → chunk-426QAEUC-C1P0yFXw.js} +1 -1
  107. package/payload/server/public/assets/{chunk-4TB4RGXK-Bql1UwLT.js → chunk-4TB4RGXK-LI7kOJd0.js} +1 -1
  108. package/payload/server/public/assets/{chunk-5FUZZQ4R-CQK7jBtX.js → chunk-5FUZZQ4R-CXQRGTQE.js} +1 -1
  109. package/payload/server/public/assets/{chunk-5PVQY5BW-AJc1-lvX.js → chunk-5PVQY5BW-NSyzpXRy.js} +1 -1
  110. package/payload/server/public/assets/{chunk-EDXVE4YY-Cf3E3THL.js → chunk-EDXVE4YY-voNwxbDs.js} +1 -1
  111. package/payload/server/public/assets/{chunk-ENJZ2VHE-BNx6z6hJ.js → chunk-ENJZ2VHE-CMEMPzYY.js} +1 -1
  112. package/payload/server/public/assets/{chunk-ICPOFSXX-DBUEFs2-.js → chunk-ICPOFSXX-hEbwu-pe.js} +1 -1
  113. package/payload/server/public/assets/{chunk-OYMX7WX6-Csx2p315.js → chunk-OYMX7WX6-DxskDrLs.js} +1 -1
  114. package/payload/server/public/assets/{chunk-U2HBQHQK-x17h7UYW.js → chunk-U2HBQHQK-D7TKgUo0.js} +1 -1
  115. package/payload/server/public/assets/{chunk-X2U36JSP--Lkl5yjV.js → chunk-X2U36JSP-BvPUQEPm.js} +1 -1
  116. package/payload/server/public/assets/{chunk-YZCP3GAM-C4GsNX8A.js → chunk-YZCP3GAM-BY-RWQUW.js} +1 -1
  117. package/payload/server/public/assets/{chunk-ZZ45TVLE-YrhUPmZc.js → chunk-ZZ45TVLE-DZvOYDY6.js} +1 -1
  118. package/payload/server/public/assets/classDiagram-6PBFFD2Q-BsWzGW0N.js +1 -0
  119. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-BGVa3h90.js +1 -0
  120. package/payload/server/public/assets/clone-Khvocke2.js +1 -0
  121. package/payload/server/public/assets/{dagre-YVALPG-M.js → dagre-Bt-fpckL.js} +1 -1
  122. package/payload/server/public/assets/{dagre-KV5264BT-D6JU6DW_.js → dagre-KV5264BT-Cnj0mUZl.js} +1 -1
  123. package/payload/server/public/assets/data-DBd-Buhp.js +1 -0
  124. package/payload/server/public/assets/device-url-actions-Bjz3Xzbm.js +33 -0
  125. package/payload/server/public/assets/{diagram-5BDNPKRD-yeO06N5Q.js → diagram-5BDNPKRD-DjLzvOlx.js} +1 -1
  126. package/payload/server/public/assets/{diagram-G4DWMVQ6-DzbVT_BC.js → diagram-G4DWMVQ6-DTfuRd-T.js} +1 -1
  127. package/payload/server/public/assets/{diagram-MMDJMWI5-DwYO5VZF.js → diagram-MMDJMWI5-BaL2mCnx.js} +1 -1
  128. package/payload/server/public/assets/{diagram-TYMM5635-BLUcdkDS.js → diagram-TYMM5635-C5InWY5R.js} +1 -1
  129. package/payload/server/public/assets/{erDiagram-SMLLAGMA-BiEUB19e.js → erDiagram-SMLLAGMA-DO7BXTpn.js} +1 -1
  130. package/payload/server/public/assets/{flowDiagram-DWJPFMVM-TILIKxOp.js → flowDiagram-DWJPFMVM-DDdAKfLf.js} +1 -1
  131. package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-B7cGzYqT.js → ganttDiagram-T4ZO3ILL-arJD8Utm.js} +1 -1
  132. package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-DFOxN5bc.js → gitGraphDiagram-UUTBAWPF-C55GH-OS.js} +1 -1
  133. package/payload/server/public/assets/graph-DUtVdnZ6.js +1 -0
  134. package/payload/server/public/assets/graph-labels-Dxfue-fP.js +1 -0
  135. package/payload/server/public/assets/{graphlib-BBibixaA.js → graphlib-DL9PM7Ex.js} +1 -1
  136. package/payload/server/public/assets/{infoDiagram-42DDH7IO-nH2azhY8.js → infoDiagram-42DDH7IO-BMSGqUbG.js} +1 -1
  137. package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-WD3tfqFi.js → ishikawaDiagram-UXIWVN3A-Dw6BZ6BG.js} +1 -1
  138. package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-LUkaVSqw.js → journeyDiagram-VCZTEJTY-DrywUGXw.js} +1 -1
  139. package/payload/server/public/assets/{kanban-definition-6JOO6SKY-Dk-lYgpJ.js → kanban-definition-6JOO6SKY-DuwtVBBc.js} +1 -1
  140. package/payload/server/public/assets/{line-BDv6CEnp.js → line-JAksyKHj.js} +1 -1
  141. package/payload/server/public/assets/{mermaid-parser.core-D2XsSGgp.js → mermaid-parser.core-BMq-ApBW.js} +1 -1
  142. package/payload/server/public/assets/{mermaid.core-FyN-UmQV.js → mermaid.core-tH4oX0Kh.js} +3 -3
  143. package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-BRAHEUIS.js → mindmap-definition-QFDTVHPH-D1OiiJga.js} +1 -1
  144. package/payload/server/public/assets/page-BZpoS7iR.js +1 -0
  145. package/payload/server/public/assets/{page-CTbSJbem.js → page-CkvBvezS.js} +2 -2
  146. package/payload/server/public/assets/{pieDiagram-DEJITSTG-BqibVC2X.js → pieDiagram-DEJITSTG-Ckwm69PW.js} +1 -1
  147. package/payload/server/public/assets/{public-BDUZIabs.js → public-C-dTMgXu.js} +5 -5
  148. package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-DNuExGnr.js → quadrantDiagram-34T5L4WZ-COw3yZ1j.js} +1 -1
  149. package/payload/server/public/assets/{requirementDiagram-MS252O5E-5JXTdydh.js → requirementDiagram-MS252O5E-DqGzM4K-.js} +1 -1
  150. package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-B_8rhvcR.js → sankeyDiagram-XADWPNL6-D-l1c_Pl.js} +1 -1
  151. package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-BznkBgjf.js → sequenceDiagram-FGHM5R23-BeIi0DtJ.js} +1 -1
  152. package/payload/server/public/assets/{stateDiagram-FHFEXIEX-BeAZOQfs.js → stateDiagram-FHFEXIEX-C-jgegLk.js} +1 -1
  153. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-BaMs8Znv.js +1 -0
  154. package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-CpJAs-Vw.js → timeline-definition-GMOUNBTQ-BGFKkYmi.js} +1 -1
  155. package/payload/server/public/assets/{vennDiagram-DHZGUBPP-BzH3ItkG.js → vennDiagram-DHZGUBPP-5NuIhJLS.js} +1 -1
  156. package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-ax9AgwA1.js → wardleyDiagram-NUSXRM2D-Be9ytVut.js} +1 -1
  157. package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-CV6vt_tW.js → xychartDiagram-5P7HB3ND-DCyHg41R.js} +1 -1
  158. package/payload/server/public/data.html +5 -5
  159. package/payload/server/public/graph.html +6 -6
  160. package/payload/server/public/index.html +8 -8
  161. package/payload/server/public/public.html +5 -5
  162. package/payload/server/server.js +62 -101
  163. package/payload/server/public/assets/admin-CXLuiXFU.js +0 -216
  164. package/payload/server/public/assets/channel-BU_eIdRB.js +0 -1
  165. package/payload/server/public/assets/classDiagram-6PBFFD2Q-DMpM1d2b.js +0 -1
  166. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-D_XbuPVj.js +0 -1
  167. package/payload/server/public/assets/clone-BBT00JUO.js +0 -1
  168. package/payload/server/public/assets/data-BdwO_kv-.js +0 -1
  169. package/payload/server/public/assets/device-url-actions-C8dD0ydz.js +0 -33
  170. package/payload/server/public/assets/graph-DpgsOhUZ.js +0 -1
  171. package/payload/server/public/assets/graph-labels-DJ717p00.js +0 -1
  172. package/payload/server/public/assets/page-BWHYktEF.js +0 -1
  173. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-iVlXKz7S.js +0 -1
@@ -0,0 +1,55 @@
1
+ ---
2
+ name: listing-copy-writer
3
+ description: "Draft portal-optimised property descriptions for a new instruction. Produces headline, key features bullet list, full description, and location paragraph in the agent's voice. Built for use inside new-instruction."
4
+ ---
5
+
6
+ # Listing copy writer
7
+
8
+ A building-block skill called by `new-instruction`. Produces the listing copy the operator approves before any portal upload.
9
+
10
+ ## What it produces
11
+
12
+ Four parts, in order:
13
+
14
+ 1. **Headline.** One line, attention-getting, accurate. No exaggeration. ASA upheld complaints (shared driveway described as "private drive") show the cost of overstatement; the skill stays inside what the property survey or photographs can support.
15
+ 2. **Key features.** Four to eight bullet points covering the strongest selling features. Numbers where they help (bedroom count, garden length, square footage). One feature per bullet.
16
+ 3. **Full description.** Two to four paragraphs in the agent's voice, structured per the profile's preferred section order. Length target from the profile.
17
+ 4. **Location paragraph.** One paragraph on transport, schools, amenities. Sourced from area knowledge in the CRM and the agent's prior listings in the same area.
18
+
19
+ ## Material information
20
+
21
+ The Digital Markets, Competition and Consumers Act 2024 obligation to disclose material information bears on every listing. The draft includes:
22
+
23
+ - Council tax band
24
+ - Tenure (and ground rent and service charge if leasehold)
25
+ - Property type and construction materials
26
+ - Number of rooms, utilities (electricity, water, sewerage), heating type
27
+ - Broadband and mobile coverage where known
28
+ - Parking arrangement
29
+ - Building safety information, covenants, rights of way, easements, listed status, conservation area, tree preservation orders, flood risk, coastal erosion, planning permission, structural issues (subsidence, damp, asbestos, Japanese knotweed), mining or coalfield context, where applicable
30
+
31
+ Missing items are flagged at the top of the draft so the operator can fill them before approving. Rightmove now rejects listings without the mandatory fields.
32
+
33
+ `compliance-flag-checker` runs against the draft before the operator sees it.
34
+
35
+ ## Voice source
36
+
37
+ Reads the profile's voice samples and the operator's prior listing copy. Within a month of edit-before-send diffs, the drafts should need minimal editing.
38
+
39
+ ## What it does not do
40
+
41
+ - It does not upload to the portals. Portal upload is staged by `portal-launch-scheduler` and fired on the operator's approval.
42
+ - It does not produce the PDF brochure. That is `particulars-builder`.
43
+ - It does not commission the photography or floorplan; both must exist for the location paragraph to reference real images, and for the portal upload to be complete.
44
+
45
+ ## Connectors
46
+
47
+ Read: profile (voice samples, section order, length target), CRM (property details, area knowledge).
48
+ Write: none.
49
+
50
+ ## Profile keys
51
+
52
+ - `realagent.voice_samples`
53
+ - `realagent.listing_copy.section_order`
54
+ - `realagent.listing_copy.length_words`
55
+ - `realagent.listing_copy.headline_style` ("descriptive" | "feature-led" | "location-led", learned)
@@ -0,0 +1,33 @@
1
+ ---
2
+ name: local-market-stats
3
+ description: "Compute the three context numbers for the valuation prep pack: average days on market, asking-to-sold ratio, current stock count. Built for use inside valuation-prep; the operator does not invoke it directly."
4
+ ---
5
+
6
+ # Local market stats
7
+
8
+ A building-block skill called by `valuation-prep`. Returns three numbers, no more. This section is context, not headline; four numbers feels like a research paper, two feels thin.
9
+
10
+ ## What it produces
11
+
12
+ For the immediate area around the subject property (same postcode sector, or wider if the sector has fewer than 10 transactions in the lookback window):
13
+
14
+ 1. **Average days on market.** Median time from list to sold-subject-to-contract, over the last 90 days, for the property type that matches the subject.
15
+ 2. **Asking-to-sold ratio.** Median sold price as a percentage of original asking price, last 90 days, same property type. A number under 95% signals a soft market; over 100% signals competition.
16
+ 3. **Current stock count.** How many active listings of the matching type are on the portals right now.
17
+
18
+ Each number shows the lookback window and the property-type filter so the operator can challenge any of them in conversation with the vendor.
19
+
20
+ ## What it does not do
21
+
22
+ - It does not produce trend narratives. That is `variance-narrator`, called separately when the round needs a comparison sentence.
23
+ - It does not surface recent fall-throughs as a number; if the count is non-trivial it is flagged in one sentence under the stats.
24
+ - It does not write to anything.
25
+
26
+ ## Connectors
27
+
28
+ Read: Rightmove, Zoopla, OnTheMarket data feeds; Land Registry. No writes.
29
+
30
+ ## Profile keys
31
+
32
+ - `realagent.market_stats.lookback_days` (default 90)
33
+ - `realagent.market_stats.area_definition` ("postcode_sector" | "1_mile_radius" | "ward", default "postcode_sector")
@@ -0,0 +1,78 @@
1
+ ---
2
+ name: new-instruction
3
+ description: "Run the post-win onboarding sequence after a valuation is won. Drafts terms of business, checks the EPC, books photographer and floorplan supplier, drafts listing copy and PDF particulars, schedules portal launch, and drafts the vendor welcome. Each write action is individually gated. Triggers when the operator says 'set up <address>', 'I won <name>', 'I won the <address> val', 'instruction taken at <address>', 'get <address> on the market', 'kick off the <name> property'. Also offered proactively when the CRM marks a property as instructed."
4
+ ---
5
+
6
+ # New instruction
7
+
8
+ The master workflow that takes a property from "instruction won" to "on the portal" inside 72 hours. Owned jointly by the valuer (until terms are signed and the EPC is confirmed) and the negotiator (from photography onward).
9
+
10
+ Done well, this workflow is the second-highest-value moment in the agent's week after winning the instruction itself. The speed compounds: faster on-market means more viewings in the first weekend, which is when offers happen.
11
+
12
+ ## Inputs
13
+
14
+ - The property address.
15
+ - The vendor name and contact details (read from the CRM record created at the appointment).
16
+ - The fee structure agreed at the appointment, captured verbally by the operator or read from the diary notes.
17
+ - The customisation profile.
18
+
19
+ If any input is missing, the workflow asks once and then proceeds with the rest staged.
20
+
21
+ ## Architecture principles encoded here
22
+
23
+ - Read before write. The workflow opens by reading the property's CRM state, the EPC register, and the calendar. It writes nothing until the operator approves each individual stage.
24
+ - Stage, don't send. Every write action is staged, not fired. Eight gates in total, each individually approved.
25
+ - One screen of output. The sequenced checklist is one screen even when every item is staged. Each item collapses to a status line.
26
+ - Cite the source. Every populated field in the terms of business, the listing copy, and the particulars traces to a CRM record, a profile entry, or a connector read.
27
+ - Teach the profile. Learning hooks below.
28
+ - Reversible. Every staged item can be cancelled before approval. Approved items create CRM activity records the operator can rescind.
29
+
30
+ ## Sequence and approval gates
31
+
32
+ The workflow presents the eight steps in order. The operator can approve them one at a time, approve everything ("ship everything"), or pause and return later. State is preserved between sessions.
33
+
34
+ 1. **Terms of business.** Drafted by `terms-of-business-drafter` from the agency template, populated with property, vendor, fee structure, sole or multi agency, marketing period, withdrawal fee. Staged in DocuSign with the vendor as recipient. *Gate: approve before send.*
35
+ 2. **EPC check.** `epc-checker` looks up the EPC register. If a current EPC exists, the workflow records the expiry date and moves on, no gate needed. If not, an order is staged with the agent's preferred supplier from the profile. *Gate: approve order before send if no current EPC.*
36
+ 3. **Photographer booking.** `supplier-booker` drafts a booking request to the agent's preferred photographer with the property address, vendor contact, and the agent's standard brief. *Gate: approve before send.*
37
+ 4. **Floorplan booking.** Same as photography. Combined into a single booking request if the same supplier handles both. *Gate: approve before send.*
38
+ 5. **Listing copy.** Drafted by `listing-copy-writer` in the agent's voice, length, and structure from the profile. Headline, key features bullets, full description, location paragraph. Optimised for the profile's portals. *Gate: approve before any portal upload.*
39
+ 6. **Particulars.** PDF brochure built by `particulars-builder`. The skill chains into the Maxy `content-producer` for the PDF render so the agency brand is applied consistently. Staged for the agent's review and the vendor's review before any wider distribution. *Gate: approve distribution before send.*
40
+ 7. **Portal launch schedule.** `portal-launch-scheduler` proposes the launch sequence (Rightmove premium on a Friday by default; learns). Staged, not fired. *Gate: approve schedule before any portal upload happens.*
41
+ 8. **Vendor welcome email.** Drafted by `tone-matched-drafter` explaining what happens next, what to expect, when to expect photos, who will be in touch. *Gate: approve before send.*
42
+
43
+ ## AML and material information
44
+
45
+ AML on the vendor must be passed before any marketing goes live. The workflow does not run AML itself; it stages a request to the agent's preferred AML provider and blocks portal launch until the AML status is "passed". If the operator overrides ("I know this vendor, push it live now"), the override is logged with a compliance flag and the AML check is still queued.
46
+
47
+ Material information for portal listings (council tax band, tenure, ground rent if leasehold, and the rest of the DMCCA 2024 fields) is gathered into the listing copy. Missing items are flagged before the operator approves the copy. `compliance-flag-checker` runs against every output of this workflow before approval.
48
+
49
+ ## Continuous learning hooks
50
+
51
+ - Supplier preferences. If the operator routinely overrides the suggested photographer, EPC supplier, floorplan supplier, or AML provider, the new preferred supplier is learned.
52
+ - Copy voice and length. Edit-before-send diffs on the listing copy feed `listing-copy-writer`. Within a month, drafts should need minimal editing.
53
+ - Launch timing. Friday morning is a heuristic default. If the agent consistently launches on a different day, around school holidays, around area events, or around a sale calendar, the scheduler picks that up.
54
+ - Particulars structure. Section order, photo count, whether the floorplan goes early or late, whether the location paragraph leads or trails, all adapt.
55
+ - Fee structure drift. A single override is a one-off. Three same-direction overrides in a month update the profile's default fee logic.
56
+
57
+ All writes go through `profile-writer`.
58
+
59
+ ## Connectors
60
+
61
+ Read: CRM, EPC register, calendar, profile.
62
+ Write: DocuSign (terms), email (vendor welcome, supplier bookings), portal upload APIs (Rightmove, Zoopla, OnTheMarket, staged only).
63
+
64
+ ## Profile keys
65
+
66
+ - `realagent.fee_structure.default` (sole or multi, percentage, minimum)
67
+ - `realagent.fee_structure.withdrawal_fee`
68
+ - `realagent.fee_structure.marketing_period_weeks`
69
+ - `realagent.suppliers.photographer`
70
+ - `realagent.suppliers.floorplan`
71
+ - `realagent.suppliers.epc`
72
+ - `realagent.suppliers.aml_provider`
73
+ - `realagent.listing_copy.length_words` (target word count, learned)
74
+ - `realagent.listing_copy.section_order`
75
+ - `realagent.particulars.template_path`
76
+ - `realagent.portal_launch.preferred_day` (default Friday)
77
+ - `realagent.portal_launch.preferred_time`
78
+ - `realagent.portal_launch.rightmove_tier` ("standard" | "premium" | "premium_listing")
@@ -0,0 +1,48 @@
1
+ ---
2
+ name: particulars-builder
3
+ description: "Compose the PDF property brochure for a new instruction from the listing copy and the photography. Stages the brochure for the agent's review and the vendor's review before any wider distribution. Built for use inside new-instruction; chains into the Maxy content-producer skill for the PDF render."
4
+ ---
5
+
6
+ # Particulars builder
7
+
8
+ A building-block skill called by `new-instruction`. Composes the property brochure.
9
+
10
+ ## What it does
11
+
12
+ Reads the agency's brochure template path from the profile, then assembles the brochure content:
13
+
14
+ - Cover with headline, hero photograph, address, asking price
15
+ - Floorplan page
16
+ - Photography gallery in the profile's preferred order
17
+ - Description and key features, copied from the approved listing copy
18
+ - Location paragraph and a small location map
19
+ - Agency footer with branding, contact details, CMP and redress scheme markings
20
+
21
+ The skill hands the content to the Maxy `content-producer` skill for the PDF render. That step is where the agency brand is applied to a print-ready file. Particulars are A4, two-fold or three-fold depending on the profile.
22
+
23
+ ## Approval flow
24
+
25
+ The PDF is staged in two places at once:
26
+
27
+ 1. The agent's review surface, with one-click approve or "redraft with changes".
28
+ 2. A vendor-review draft email is prepared, ready to send when the agent approves.
29
+
30
+ The brochure is not distributed to portals or to the public until the agent and the vendor both approve.
31
+
32
+ ## What it does not do
33
+
34
+ - It does not generate brand assets. The agency template from onboarding is the source of brand styling.
35
+ - It does not write listing copy. That is `listing-copy-writer`.
36
+ - It does not commission photography.
37
+
38
+ ## Connectors
39
+
40
+ Read: profile (template path, photography order, agency branding), CRM (property, vendor, listing copy from step 5 of new-instruction).
41
+ Write: PDF artefact in the agent's Drive, draft email to vendor (staged only).
42
+
43
+ ## Profile keys
44
+
45
+ - `realagent.particulars.template_path`
46
+ - `realagent.particulars.photo_count` (target, default 12, learned)
47
+ - `realagent.particulars.section_order` (e.g. floorplan early or late, learned)
48
+ - `realagent.particulars.location_paragraph_position` ("lead" | "trail", learned)
@@ -0,0 +1,49 @@
1
+ ---
2
+ name: portal-launch-scheduler
3
+ description: "Propose a launch sequence for a new listing across Rightmove, Zoopla, and OnTheMarket, with viewings opened for the weekend. Stages the upload; nothing fires without the operator's approval. Built for use inside new-instruction."
4
+ ---
5
+
6
+ # Portal launch scheduler
7
+
8
+ A building-block skill called by `new-instruction`. Proposes the launch sequence and stages the portal uploads.
9
+
10
+ ## What it produces
11
+
12
+ A schedule, one row per portal, showing:
13
+
14
+ - Portal name (Rightmove, Zoopla, OnTheMarket)
15
+ - Listing tier (standard or premium where the profile names a tier)
16
+ - Go-live date and time
17
+ - Viewing slots opened for the weekend
18
+ - Any portal-specific fields that need confirmation before upload
19
+
20
+ The default sequence is Rightmove premium on a Friday morning, Zoopla and OnTheMarket simultaneously, viewings opened for the weekend. The schedule is the heuristic default; the scheduler learns the agent's preferred day and time over time.
21
+
22
+ ## Blocking conditions
23
+
24
+ The launch is blocked until:
25
+
26
+ 1. The AML status on the vendor is "passed" (or the operator explicitly overrides, in which case the override is logged with a compliance flag).
27
+ 2. The listing copy has been approved by the operator.
28
+ 3. The particulars have been approved by both the agent and the vendor.
29
+ 4. The EPC certificate is in hand and its rating is in the listing copy.
30
+
31
+ If any block applies, the schedule shows what is blocked and what the blocker is, so the operator knows exactly what to clear before approval.
32
+
33
+ ## What it does not do
34
+
35
+ - It does not fire the uploads on its own. Approval is required per the gate in `new-instruction` step 7.
36
+ - It does not produce the listing copy.
37
+ - It does not amend listings after launch. Post-launch edits are a separate flow.
38
+
39
+ ## Connectors
40
+
41
+ Read: profile (portal preferences, default day and time, Rightmove tier), CRM (property, listing copy, AML status, EPC).
42
+ Write (staged only): portal upload APIs (Rightmove, Zoopla, OnTheMarket).
43
+
44
+ ## Profile keys
45
+
46
+ - `realagent.portal_launch.preferred_day` (default Friday)
47
+ - `realagent.portal_launch.preferred_time` (default 09:00)
48
+ - `realagent.portal_launch.rightmove_tier`
49
+ - `realagent.portal_launch.viewing_slots_per_day` (default 8, learned)
@@ -0,0 +1,35 @@
1
+ ---
2
+ name: pricing-scenario-builder
3
+ description: "Generate the pricing scenarios block for the valuation prep pack. Default output is three numbers (quick-sale, market, aspirational) each with one sentence of reasoning. The format adapts to the profile's preference. Built for use inside valuation-prep."
4
+ ---
5
+
6
+ # Pricing scenario builder
7
+
8
+ A building-block skill called by `valuation-prep`. Reads the comparables and the local stats already gathered, then produces the pricing block in the format the profile names.
9
+
10
+ ## Three default scenarios
11
+
12
+ 1. **Quick-sale price.** What the property would likely sell for in under 30 days, priced to attract immediate offers. Anchored on the lower comparable cluster.
13
+ 2. **Market price.** The 30 to 60 day expectation, priced in line with the strongest comparables. The default headline number.
14
+ 3. **Aspirational price.** The 90 day plus number with a stretch caveat, priced to test the ceiling.
15
+
16
+ Each scenario has one sentence of reasoning naming the comparables or the stat that supports it. The reasoning is plain language, no jargon.
17
+
18
+ ## Format adaptation
19
+
20
+ If the profile records that the operator has corrected the output toward a single recommendation with a range, the skill outputs that shape instead: a single number with a low-to-high band. If the operator has corrected toward a single number with no range, that is the output. The default is three scenarios because vendors anchor on the spread before they anchor on the headline.
21
+
22
+ ## What it does not do
23
+
24
+ - It does not name a fee. Fee structure is in the terms of business produced by `terms-of-business-drafter`.
25
+ - It does not commit to a number with the vendor. The market appraisal is a professional opinion, not a guarantee. The agent does that in the room.
26
+ - It does not write to anything.
27
+
28
+ ## Connectors
29
+
30
+ Read: portal data and Land Registry through the comparables already passed in by `valuation-prep`. No direct connector calls. No writes.
31
+
32
+ ## Profile keys
33
+
34
+ - `realagent.pricing_format` ("three_scenarios" | "single_with_range" | "single_number")
35
+ - `realagent.pricing.aspirational_caveat_phrase` (learned)
@@ -0,0 +1,39 @@
1
+ ---
2
+ name: supplier-booker
3
+ description: "Draft and stage booking requests to photographer, floorplan supplier, and other property-prep suppliers from the agent's preferred-supplier list. Built for use inside new-instruction."
4
+ ---
5
+
6
+ # Supplier booker
7
+
8
+ A building-block skill called by `new-instruction`. Stages the booking emails that get the photographer and the floorplan supplier into the property in the first 48 hours after instruction.
9
+
10
+ ## What it does
11
+
12
+ For each supplier the workflow needs to book (photographer, floorplan, and optionally a combined supplier when one provider handles both), the skill drafts an email to the agent's preferred supplier from the profile. The draft includes:
13
+
14
+ - Property full address with postcode
15
+ - Access details (vendor contact, key location, lockbox code, alarm code) read from the CRM record
16
+ - The agent's standard brief for that supplier (photography style preferences, number of shots, floorplan format)
17
+ - Preferred date range
18
+ - Reply-to address
19
+
20
+ If the photographer and floorplan supplier are the same provider, the skill combines them into one booking request rather than sending two emails.
21
+
22
+ ## What it does not do
23
+
24
+ - It does not send. Sending requires the operator's approval.
25
+ - It does not book the supplier into the calendar. The supplier confirms back, then the calendar entry is created.
26
+ - It does not pay the supplier or set up an invoice. Supplier payment runs through `month-end-close`.
27
+
28
+ ## Connectors
29
+
30
+ Read: profile (preferred suppliers, briefs), CRM (vendor contact, access details).
31
+ Write (staged only): email to each supplier.
32
+
33
+ ## Profile keys
34
+
35
+ - `realagent.suppliers.photographer`
36
+ - `realagent.suppliers.floorplan`
37
+ - `realagent.suppliers.combined` (boolean, true if one provider handles both)
38
+ - `realagent.suppliers.brief.photography` (default brief, learned)
39
+ - `realagent.suppliers.brief.floorplan`
@@ -0,0 +1,36 @@
1
+ ---
2
+ name: talk-track-composer
3
+ description: "Draft the talk-track block for the valuation prep pack: three questions for the vendor, two likely objections, the agent's USP in the agent's voice. Built for use inside valuation-prep."
4
+ ---
5
+
6
+ # Talk-track composer
7
+
8
+ A building-block skill called by `valuation-prep`. Produces the prompt the agent uses in the room.
9
+
10
+ ## What it produces
11
+
12
+ Three sub-sections, in this order.
13
+
14
+ 1. **Questions to ask the vendor.** Three open questions tailored to the property and the vendor's situation. Examples vary with context: timeline pressure, chain position, prior agent contact, fee sensitivity.
15
+ 2. **Likely objections.** Two objections most likely to come up, given the comparables and the local stats. Each shown with a one-sentence acknowledgement and a one-sentence response in the agent's voice.
16
+ 3. **The USP.** The agent's USP framed in the agent's words, from the profile's voice samples. The phrasing tightens over time as the workflow watches which phrasings get used versus edited.
17
+
18
+ ## Voice source
19
+
20
+ The skill reads the profile's voice samples (three to five emails the agent has written) and prior successful talk-tracks. If voice samples are not yet seeded, the output uses a generic professional tone and flags the absence so the operator knows to add samples.
21
+
22
+ ## What it does not do
23
+
24
+ - It does not draft messages to send. That is `tone-matched-drafter`.
25
+ - It does not write to anything.
26
+ - It does not pretend to know the vendor when the CRM record has no prior contact. If the vendor is new, the questions are designed to learn rather than to anchor.
27
+
28
+ ## Connectors
29
+
30
+ Read: profile (voice samples), CRM (vendor history if any). No writes.
31
+
32
+ ## Profile keys
33
+
34
+ - `realagent.voice_samples` (list of email bodies, used for tone extraction)
35
+ - `realagent.usp_phrases` (list, learned)
36
+ - `realagent.objection_responses` (map of common objections to preferred responses, learned)
@@ -0,0 +1,54 @@
1
+ ---
2
+ name: terms-of-business-drafter
3
+ description: "Populate the agency's terms of business template with the deal specifics for a new instruction and stage it in DocuSign with the vendor as recipient. Built for use inside new-instruction; the operator does not invoke it directly. Owned by the compliance specialist."
4
+ ---
5
+
6
+ # Terms of business drafter
7
+
8
+ A building-block skill called by `new-instruction`. Produces the terms document the vendor signs before any marketing begins.
9
+
10
+ ## What it does
11
+
12
+ Reads the agency's terms-of-business template path from the profile, then populates it with:
13
+
14
+ - Property full address and tenure
15
+ - Vendor name(s) and contact details
16
+ - Fee structure (sole agency, multi agency, with-other-agents, or the agent's named variant)
17
+ - Fee amount or percentage
18
+ - Minimum fee where applicable
19
+ - Marketing period in weeks
20
+ - Withdrawal fee policy
21
+ - Notice period
22
+ - VAT inclusion and registration number
23
+ - CMP scheme membership, redress scheme membership, ICO registration (TPO code requires display)
24
+ - Effective date
25
+
26
+ The populated document is staged in DocuSign as a recipient envelope with the vendor as signatory. Nothing is sent until the operator approves.
27
+
28
+ ## Compliance ground
29
+
30
+ The terms of business is the document the Estate Agents Act 1979 s.18 requires to be in writing before instruction is accepted. Failure to comply makes the contract unenforceable except by court order. The Consumer Rights Act 2015 fee transparency obligations also bear on this document. `compliance-flag-checker` runs against the populated draft before the operator sees it.
31
+
32
+ If the populated draft is missing any of the mandatory fields, the missing fields are listed at the top of the staged output so the operator can fill them before approving.
33
+
34
+ ## What it does not do
35
+
36
+ - It does not send. Sending requires the operator's explicit approval.
37
+ - It does not amend the agency template. Template changes are made out-of-band.
38
+ - It does not negotiate fees with the vendor. The agreed fee is captured at the appointment.
39
+
40
+ ## Connectors
41
+
42
+ Read: profile (template path, fee defaults), CRM (vendor and property records).
43
+ Write (staged only): DocuSign envelope creation.
44
+
45
+ ## Profile keys
46
+
47
+ - `realagent.terms_template_path`
48
+ - `realagent.fee_structure.default`
49
+ - `realagent.fee_structure.minimum`
50
+ - `realagent.fee_structure.withdrawal_fee`
51
+ - `realagent.fee_structure.marketing_period_weeks`
52
+ - `realagent.compliance.cmp_scheme_membership`
53
+ - `realagent.compliance.redress_scheme`
54
+ - `realagent.compliance.ico_registration`
@@ -0,0 +1,69 @@
1
+ ---
2
+ name: valuation-prep
3
+ description: "Produce the pre-appointment pack the agent reads on the walk from the car to a valuation or market appraisal. Six sections: property, comparables, local stats, vendor, pricing scenarios, talk-track. Triggers when the operator says 'prep my val at <address>', 'valuation pack for <name>', 'what should I take to the <name> appointment', 'I'm at the Smiths tomorrow, get me ready', 'anything I should know about <address> before tomorrow'. Also fires automatically the evening before any appointment in the calendar tagged as a valuation."
4
+ ---
5
+
6
+ # Valuation prep
7
+
8
+ The master workflow owned by the valuer specialist. Turns a 90-minute prep into a 60-second read. This is the workflow most likely to win new instructions; vendors notice when an agent walks in knowing more than they do.
9
+
10
+ ## Inputs
11
+
12
+ - Address of the property to value, supplied by the operator or read from the calendar entry.
13
+ - The vendor's name if it is in the diary entry or the CRM.
14
+ - The customisation profile.
15
+
16
+ If the address is ambiguous, the workflow asks once for the postcode rather than guessing. Every other input is derived from connectors.
17
+
18
+ ## Architecture principles encoded here
19
+
20
+ - Read before write. Read-only output; the post-appointment instruction pack is a separate workflow.
21
+ - Stage, don't send. Nothing to send.
22
+ - One screen of output. Six short sections, readable in two minutes.
23
+ - Cite the source. Every comparable cites the portal or Land Registry. Every vendor signal cites Land Registry, the title, or the CRM. Every stat cites the area data feed.
24
+ - Teach the profile. Learning hooks documented below.
25
+ - Reversible. Read-only.
26
+
27
+ ## Output shape
28
+
29
+ Six sections in this order.
30
+
31
+ 1. **Property.** Address, type, beds, baths, last sold price and date if available, EPC if available, last listed price if previously marketed, planning history. Sourced from Land Registry, the EPC register, the council planning portal, and prior portal listings.
32
+ 2. **Comparables.** Three SSTC and three sold in the last 12 months within the profile's comparable radius (default 0.5 miles, learns). Each comparable: address, asking or sold price, beds, square footage, time on market, agent. Adds a price-per-square-foot column if at least four of the six have square footage. Built by `comparable-finder`.
33
+ 3. **Local stats.** Three numbers maximum: average days on market in the immediate area, asking-to-sold ratio, current stock count. Context, not headline. Built by `local-market-stats`.
34
+ 4. **Vendor.** How long they have owned, last purchase price, public signals worth knowing with the privacy line enforced. Built by `vendor-research`. Sensitive signals are flagged at the top of the section if suppressed, so the operator knows there is more if they want it.
35
+ 5. **Pricing scenarios.** Three numbers by default: quick-sale (sub-30-day expectation), market (30 to 60 days), aspirational (90 days plus, marked "stretch"). Each with one sentence of reasoning. If the profile has corrected toward a single recommendation with a range, the workflow learns and presents that format instead. Built by `pricing-scenario-builder`.
36
+ 6. **Talk-track.** Three questions to ask the vendor, two objections likely to come up, the agent's USP in the agent's voice. Built by `talk-track-composer` reading the profile's voice samples and prior successful talk-tracks.
37
+
38
+ ## The privacy line
39
+
40
+ `vendor-research` will surface ownership changes, joint owners who appear and disappear, deaths registered against the address, and planning disputes. The profile holds a privacy preference, default: surface ownership and planning, flag-but-suppress death and dispute signals. The operator can adjust by saying "show me everything you find" or "drop the sensitive stuff".
41
+
42
+ The default is conservative because the agent's reputation is on the line if Claude blurts something inappropriate and the agent quotes it.
43
+
44
+ ## Approval gates
45
+
46
+ None at the prep stage. The pack is information, not action. Approval gates appear in `new-instruction`, which runs after the appointment if the agent wins the business.
47
+
48
+ ## Continuous learning hooks
49
+
50
+ - Comparable radius. "Wider comps" or "tighter comps" updates the default radius.
51
+ - Pricing format. Three scenarios versus single-with-range versus a single number. Learned from which version the agent screenshots, copies, or refers to in the appointment notes.
52
+ - Comparable preferences. "Ignore that one, it was a probate sale" feeds the exclude filters: distressed sales, off-market, agent-bought.
53
+ - Talk-track effectiveness. Won appointments tag the talk-track as successful. Lost appointments do not blame the talk-track (too noisy) but ask the agent for one-line feedback if offered.
54
+ - USP drift. The USP tightens as the workflow watches which phrasings get used versus edited out before the appointment.
55
+
56
+ All writes go through `profile-writer`.
57
+
58
+ ## Connectors
59
+
60
+ Read: Rightmove, Zoopla, OnTheMarket data feeds; Land Registry; EPC register; council planning portal; CRM. No writes.
61
+
62
+ ## Profile keys
63
+
64
+ - `realagent.comparable_radius_miles` (default 0.5)
65
+ - `realagent.pricing_format` ("three_scenarios" | "single_with_range" | "single_number")
66
+ - `realagent.comparable_exclude_filters` (list, learned)
67
+ - `realagent.privacy_line.surface` (list)
68
+ - `realagent.privacy_line.suppress` (list)
69
+ - `realagent.usp_phrases` (list, learned)
@@ -25,6 +25,12 @@ tools:
25
25
  - loop-marketing-enquiry
26
26
  - loop-customer-preferences
27
27
  - loop-supplier
28
+ skills:
29
+ - skills/tone-matched-drafter/SKILL.md
30
+ - skills/priority-ranker/SKILL.md
31
+ - skills/compliance-flag-checker/SKILL.md
32
+ - skills/vendor-research/SKILL.md
33
+ - skills/variance-narrator/SKILL.md
28
34
  always: false
29
35
  metadata: {"platform":{"optional":true,"embed":["admin"]}}
30
36
  ---
@@ -71,3 +77,17 @@ Use Loop tools when the user asks about CRM data: properties, people, viewings,
71
77
  Default to writes when the user's intent is to *change* data in Loop, not just look it up. Reads return information; writes record the user's decision in Loop.
72
78
 
73
79
  Write operations require specifying which team to act through. If no teams are registered, suggest using `loop-key-register` to add team API keys. If a write fails with a permission error (`Team "X" does not have <group> permission`), the registered key was scoped to fewer than 8 endpoint groups — re-register with the full permissions array (`["properties","people","viewings","feedback","team","marketing","customer","supplier"]`).
80
+
81
+ ## Cross-cutting skills hosted here
82
+
83
+ This plugin also hosts the five cross-cutting skills that more than one Real Agent workflow composes. They live here rather than in a workflow-specific plugin because every workflow that produces a message, a ranking, a compliance check, a vendor lookup, or a narrative paragraph reuses them.
84
+
85
+ | Skill | Owner specialist | Purpose |
86
+ |-------|------------------|---------|
87
+ | `tone-matched-drafter` | negotiator | Drafts every outgoing message in the operator's voice per recipient type |
88
+ | `priority-ranker` | shared | Orders any list using the profile's urgency weights |
89
+ | `compliance-flag-checker` | compliance | Flags AML, GDPR, DMCCA material info, ASA standards, Equality Act risks |
90
+ | `vendor-research` | negotiator | Public-record and CRM-history lookup with the privacy line enforced |
91
+ | `variance-narrator` | compliance | Short prose summaries of numerical changes |
92
+
93
+ The cross-cutting skill `profile-writer` named in spec 00 §6 maps to the Maxy platform's existing `profile-update` tool; no new skill is shipped for it.
@@ -0,0 +1,53 @@
1
+ ---
2
+ name: compliance-flag-checker
3
+ description: "Flag AML, GDPR, DMCCA 2024 material information, ASA/CAP advertising standards, and Equality Act risks in any output before the operator approves it. Cross-cutting skill called by every workflow that produces an outbound message, a listing, terms of business, or a payment batch. Owned by the compliance specialist."
4
+ ---
5
+
6
+ # Compliance flag checker
7
+
8
+ A cross-cutting building-block skill. Runs against every output that touches a regulated surface (a portal listing, a terms-of-business document, an outgoing message to a buyer or vendor, a payment batch, the AML status on a deal). Returns a list of flags the operator should see before approval.
9
+
10
+ ## What it checks
11
+
12
+ - **Material information.** DMCCA 2024 disclosure requirements for property listings: council tax band, tenure, ground rent and service charge if leasehold, property type, construction, utilities, heating, broadband, parking, and the wider Part C signals (flood risk, listed status, structural issues, planning permission, mining, and the rest). Missing items are flagged with the specific legislative requirement.
13
+ - **Advertising standards.** ASA upheld-complaint patterns: fee transparency (VAT inclusion, mandatory surcharges disclosed), property descriptions accurate and substantiated, "local" claims supported, "leading" and "number one" claims substantiated.
14
+ - **EPC display.** Asset rating present in any commercial media for the listing.
15
+ - **AML state on the vendor.** Blocks a portal launch unless AML status is "passed" or the operator has explicitly overridden.
16
+ - **GDPR.** Marketing messages to non-existing-client contacts checked for PECR opt-in basis. Data-retention prompts surfaced on close files.
17
+ - **Equality Act.** Listing copy and outgoing messages checked for discriminatory phrasing (most commonly the "No DSS" pattern in lettings, court-declared as unlawful indirect discrimination).
18
+ - **EAA s.21 personal interest disclosure.** Flags any output where the agent has a personal interest in the property and the disclosure has not been made.
19
+ - **Renters' Rights Act 2025.** Where the workflow produces lettings output: bidding-ban compliance (must publish asking rent, must not request or accept above-advertised offers), discrimination ban (benefits, children), pet provisions, PRS database registration check, ombudsman membership display.
20
+ - **Client money handling.** EAA 1979 ss.12 to 17 obligations on prescribed accounts, interest, trust requirements.
21
+
22
+ ## Output
23
+
24
+ Each flag returns:
25
+
26
+ - The cited legislation (Act, SI, regulation, code provision), with format like `[DMCCA 2024, Part 4, s.237]`
27
+ - The specific issue
28
+ - The remediation required
29
+ - The penalty exposure for non-compliance
30
+
31
+ The calling workflow surfaces the flags at the top of the staged output. The operator clears the flags or accepts the residual risk before approving.
32
+
33
+ ## What it does not do
34
+
35
+ - It does not block approval. The operator decides; the skill informs.
36
+ - It does not provide legal advice. Use "the legislation requires", "the regulatory position is", "this appears to fall short of". Never "you should" or "my advice is".
37
+ - It does not certify a transaction or a listing as compliant. It flags gaps and cites requirements.
38
+ - It does not amend the output it checks. Remediation is for the calling workflow or the operator.
39
+
40
+ ## Connectors
41
+
42
+ Read: profile (compliance state, AML provider, scheme memberships), CRM (deal, vendor, listing), the deep-research tool when an unfamiliar provision needs verification.
43
+ Write: none.
44
+
45
+ ## Profile keys
46
+
47
+ - `realagent.compliance.cmp_scheme_membership`
48
+ - `realagent.compliance.redress_scheme`
49
+ - `realagent.compliance.ico_registration`
50
+ - `realagent.compliance.mlro_designation`
51
+ - `realagent.compliance.aml_provider`
52
+ - `realagent.compliance.tpo_membership`
53
+ - `realagent.compliance.propertymark_membership`
@@ -0,0 +1,40 @@
1
+ ---
2
+ name: priority-ranker
3
+ description: "Order any list of items using the profile's urgency weights. Cross-cutting skill used by the morning round's top three and chase-progression's stalled list."
4
+ ---
5
+
6
+ # Priority ranker
7
+
8
+ A cross-cutting building-block skill. Given a list of items with feature attributes, returns the same list ordered by relative urgency.
9
+
10
+ ## Inputs
11
+
12
+ The calling workflow passes:
13
+
14
+ - A list of items. Each item has a feature attribute map (for chase-progression, the features are risk score, fee value, days stalled, recipient type, and so on).
15
+ - An optional cap on how many top items to return (the morning round uses 3).
16
+
17
+ ## What it does
18
+
19
+ Reads the profile's weights for the relevant features. Returns the items in descending urgency order. If the cap is supplied, returns only the top N.
20
+
21
+ For the top-three case the skill also returns, alongside each item, the feature that contributed most to its rank. The calling workflow uses that feature to write the reason sentence the operator reads ("Mrs Patel, her buyer's mortgage offer expires in 9 days and the survey was booked but not done").
22
+
23
+ ## Learning
24
+
25
+ When the operator actions a different item than the top-ranked one within the same session, the weighting reweights toward whatever feature distinguished the actioned item. Slow signal, high quality. All writes go through `profile-writer`.
26
+
27
+ ## What it does not do
28
+
29
+ - It does not generate the reason sentence. That is `variance-narrator`.
30
+ - It does not decide what to do with the ranked items. The calling workflow owns that.
31
+ - It does not write to the CRM.
32
+
33
+ ## Connectors
34
+
35
+ Read: profile (weights). No writes.
36
+
37
+ ## Profile keys
38
+
39
+ - `realagent.priority_weights.*` (per feature, learned)
40
+ - `realagent.priority_weights.fee_multiplier`