@rubytech/create-realagent-code 0.1.23 → 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 (90) hide show
  1. package/package.json +1 -1
  2. package/payload/platform/plugins/admin/PLUGIN.md +4 -0
  3. package/payload/platform/plugins/admin/skills/admin-user-management/SKILL.md +47 -0
  4. package/payload/platform/plugins/admin/skills/commitment-followthrough/SKILL.md +60 -0
  5. package/payload/platform/plugins/admin/skills/file-presentation/SKILL.md +67 -0
  6. package/payload/platform/plugins/admin/skills/session-management/SKILL.md +62 -0
  7. package/payload/platform/plugins/deep-research/.claude-plugin/plugin.json +1 -1
  8. package/payload/platform/plugins/deep-research/PLUGIN.md +7 -1
  9. package/payload/platform/plugins/deep-research/recipes/README.md +36 -0
  10. package/payload/platform/plugins/deep-research/skills/academic-verify/SKILL.md +75 -0
  11. package/payload/platform/plugins/deep-research/skills/book-mirror/SKILL.md +68 -0
  12. package/payload/platform/plugins/deep-research/skills/data-research/SKILL.md +108 -0
  13. package/payload/platform/plugins/deep-research/skills/strategic-reading/SKILL.md +69 -0
  14. package/payload/platform/plugins/docs/references/deployment.md +3 -2
  15. package/payload/platform/plugins/email/mcp/dist/lib/imap.d.ts +1 -1
  16. package/payload/platform/plugins/email/mcp/dist/scripts/email-fetch.d.ts +7 -2
  17. package/payload/platform/plugins/email/mcp/dist/scripts/email-fetch.d.ts.map +1 -1
  18. package/payload/platform/plugins/email/mcp/dist/scripts/email-fetch.js +7 -2
  19. package/payload/platform/plugins/email/mcp/dist/scripts/email-fetch.js.map +1 -1
  20. package/payload/platform/plugins/linkedin-import/skills/linkedin-import/SKILL.md +2 -0
  21. package/payload/platform/plugins/memory/PLUGIN.md +6 -0
  22. package/payload/platform/plugins/memory/skills/archive-crawler/SKILL.md +67 -0
  23. package/payload/platform/plugins/memory/skills/concept-synthesis/SKILL.md +80 -0
  24. package/payload/platform/plugins/memory/skills/conversation-archive/SKILL.md +2 -0
  25. package/payload/platform/plugins/memory/skills/document-ingest/SKILL.md +2 -0
  26. package/payload/platform/plugins/scheduling/PLUGIN.md +3 -0
  27. package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.d.ts +7 -3
  28. package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.d.ts.map +1 -1
  29. package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js +7 -3
  30. package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js.map +1 -1
  31. package/payload/platform/plugins/scheduling/skills/briefing/SKILL.md +75 -0
  32. package/payload/platform/plugins/scheduling/skills/daily-prep/SKILL.md +61 -0
  33. package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
  34. package/payload/platform/services/claude-session-manager/dist/http-server.js +14 -1
  35. package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
  36. package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts +14 -0
  37. package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts.map +1 -1
  38. package/payload/platform/services/claude-session-manager/dist/pty-spawner.js +9 -2
  39. package/payload/platform/services/claude-session-manager/dist/pty-spawner.js.map +1 -1
  40. package/payload/platform/services/claude-session-manager/dist/system-prompt.d.ts +25 -1
  41. package/payload/platform/services/claude-session-manager/dist/system-prompt.d.ts.map +1 -1
  42. package/payload/platform/services/claude-session-manager/dist/system-prompt.js +54 -3
  43. package/payload/platform/services/claude-session-manager/dist/system-prompt.js.map +1 -1
  44. package/payload/platform/templates/agents/admin/IDENTITY.md +38 -284
  45. package/payload/platform/templates/agents/admin/SOUL.md +4 -4
  46. package/payload/platform/templates/specialists/agents/content-producer.md +24 -69
  47. package/payload/platform/templates/specialists/agents/database-operator.md +49 -155
  48. package/payload/platform/templates/specialists/agents/personal-assistant.md +27 -177
  49. package/payload/platform/templates/specialists/agents/project-manager.md +29 -96
  50. package/payload/platform/templates/specialists/agents/research-assistant.md +36 -78
  51. package/payload/premium-plugins/real-agency/agents/compliance.md +14 -0
  52. package/payload/premium-plugins/real-agency/agents/negotiator.md +22 -0
  53. package/payload/premium-plugins/real-agency/agents/valuer.md +16 -0
  54. package/payload/premium-plugins/real-agency/plugins/estate-business/.claude-plugin/plugin.json +1 -1
  55. package/payload/premium-plugins/real-agency/plugins/estate-business/PLUGIN.md +29 -13
  56. package/payload/premium-plugins/real-agency/plugins/estate-business/skills/commission-calculator/SKILL.md +40 -0
  57. package/payload/premium-plugins/real-agency/plugins/estate-business/skills/month-end-close/SKILL.md +69 -0
  58. package/payload/premium-plugins/real-agency/plugins/estate-business/skills/payment-batch-stager/SKILL.md +42 -0
  59. package/payload/premium-plugins/real-agency/plugins/estate-business/skills/period-reconciler/SKILL.md +42 -0
  60. package/payload/premium-plugins/real-agency/plugins/estate-sales/.claude-plugin/plugin.json +1 -1
  61. package/payload/premium-plugins/real-agency/plugins/estate-sales/PLUGIN.md +27 -13
  62. package/payload/premium-plugins/real-agency/plugins/estate-sales/skills/chase-progression/SKILL.md +107 -0
  63. package/payload/premium-plugins/real-agency/plugins/estate-sales/skills/risk-scorer/SKILL.md +42 -0
  64. package/payload/premium-plugins/real-agency/plugins/leads/.claude-plugin/plugin.json +1 -1
  65. package/payload/premium-plugins/real-agency/plugins/leads/PLUGIN.md +24 -10
  66. package/payload/premium-plugins/real-agency/plugins/leads/skills/chain-progression-tracker/SKILL.md +51 -0
  67. package/payload/premium-plugins/real-agency/plugins/leads/skills/diary-builder/SKILL.md +38 -0
  68. package/payload/premium-plugins/real-agency/plugins/leads/skills/enquiry-triage/SKILL.md +36 -0
  69. package/payload/premium-plugins/real-agency/plugins/leads/skills/morning-round/SKILL.md +72 -0
  70. package/payload/premium-plugins/real-agency/plugins/listings/.claude-plugin/plugin.json +1 -1
  71. package/payload/premium-plugins/real-agency/plugins/listings/PLUGIN.md +43 -12
  72. package/payload/premium-plugins/real-agency/plugins/listings/skills/comparable-finder/SKILL.md +52 -0
  73. package/payload/premium-plugins/real-agency/plugins/listings/skills/epc-checker/SKILL.md +38 -0
  74. package/payload/premium-plugins/real-agency/plugins/listings/skills/listing-copy-writer/SKILL.md +55 -0
  75. package/payload/premium-plugins/real-agency/plugins/listings/skills/local-market-stats/SKILL.md +33 -0
  76. package/payload/premium-plugins/real-agency/plugins/listings/skills/new-instruction/SKILL.md +78 -0
  77. package/payload/premium-plugins/real-agency/plugins/listings/skills/particulars-builder/SKILL.md +48 -0
  78. package/payload/premium-plugins/real-agency/plugins/listings/skills/portal-launch-scheduler/SKILL.md +49 -0
  79. package/payload/premium-plugins/real-agency/plugins/listings/skills/pricing-scenario-builder/SKILL.md +35 -0
  80. package/payload/premium-plugins/real-agency/plugins/listings/skills/supplier-booker/SKILL.md +39 -0
  81. package/payload/premium-plugins/real-agency/plugins/listings/skills/talk-track-composer/SKILL.md +36 -0
  82. package/payload/premium-plugins/real-agency/plugins/listings/skills/terms-of-business-drafter/SKILL.md +54 -0
  83. package/payload/premium-plugins/real-agency/plugins/listings/skills/valuation-prep/SKILL.md +69 -0
  84. package/payload/premium-plugins/real-agency/plugins/loop/PLUGIN.md +20 -0
  85. package/payload/premium-plugins/real-agency/plugins/loop/skills/compliance-flag-checker/SKILL.md +53 -0
  86. package/payload/premium-plugins/real-agency/plugins/loop/skills/priority-ranker/SKILL.md +40 -0
  87. package/payload/premium-plugins/real-agency/plugins/loop/skills/tone-matched-drafter/SKILL.md +53 -0
  88. package/payload/premium-plugins/real-agency/plugins/loop/skills/variance-narrator/SKILL.md +50 -0
  89. package/payload/premium-plugins/real-agency/plugins/loop/skills/vendor-research/SKILL.md +54 -0
  90. package/payload/server/server.js +73 -162
@@ -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`
@@ -0,0 +1,53 @@
1
+ ---
2
+ name: tone-matched-drafter
3
+ description: "Draft a message in the operator's voice for a specific recipient type and channel. Cross-cutting skill used by chase-progression, new-instruction (vendor welcome), and any other workflow that needs an outgoing message. Never sends; the calling workflow owns the send gate."
4
+ ---
5
+
6
+ # Tone-matched drafter
7
+
8
+ The cross-cutting skill that produces every outgoing message in Real Agent. The deepest learning hook in the product: edit-before-send diffs feed back here.
9
+
10
+ ## Inputs
11
+
12
+ The calling workflow passes:
13
+
14
+ - Recipient type (vendor familiar, vendor formal, buyer familiar, buyer formal, vendor solicitor, buyer solicitor, mortgage broker, surveyor, photographer, EPC supplier, floorplan supplier, accountant, other)
15
+ - Channel (WhatsApp, email, SMS, or "infer from recipient")
16
+ - Intent (chase the solicitor on searches, welcome a new vendor, request a viewing, confirm a meeting, and so on)
17
+ - Reference data (the deal record, the property record, the contact's prior messages)
18
+
19
+ ## What it does
20
+
21
+ Reads the profile's tone preference for the recipient type and the agent's voice samples. Drafts a message that matches:
22
+
23
+ - The agent's vocabulary (the words they actually use)
24
+ - The agent's sentence length and rhythm
25
+ - The agent's preferred greeting and sign-off for the recipient type
26
+ - The phrases the agent has previously edited out (the pet-peeve list), which are never included
27
+ - The channel's constraints (WhatsApp templating for first contact, email subject lines, SMS character limits)
28
+
29
+ The draft is returned to the calling workflow with the channel decision attached. The workflow decides when to surface the draft to the operator and when to fire on approval.
30
+
31
+ ## What it does not do
32
+
33
+ - It never sends. The calling workflow owns the send gate.
34
+ - It does not negotiate. Drafts are messages the operator would send; negotiating substance is the operator's decision.
35
+ - It does not invent facts. Every reference to a number, name, or date is read from the deal record or the connector. If a field is missing, the draft says so explicitly and the operator fills it.
36
+
37
+ ## Learning
38
+
39
+ Every time the operator edits a draft before approval, the diff is captured and weighted into the profile's tone preference and pet-peeve list. Within a quarter, the workflow should produce drafts the agent sends without editing 80% of the time on the common recipient types.
40
+
41
+ ## Connectors
42
+
43
+ Read: profile (tone, voice samples, pet peeves, channel preferences), CRM (deal and contact records).
44
+ Write: none. The calling workflow handles sends.
45
+
46
+ ## Profile keys
47
+
48
+ - `realagent.tone_profile.*` (per recipient type)
49
+ - `realagent.voice_samples`
50
+ - `realagent.phrasing_pet_peeves`
51
+ - `realagent.channel_preference.<recipient_id>`
52
+ - `realagent.tone_profile.greetings.*`
53
+ - `realagent.tone_profile.signoffs.*`
@@ -0,0 +1,50 @@
1
+ ---
2
+ name: variance-narrator
3
+ description: "Write short prose summaries of numerical changes. Used by the morning round to write the cause sentence under each stalled deal, and by month-end-close to write the two paragraphs comparing the period to the prior month and the same period last year."
4
+ ---
5
+
6
+ # Variance narrator
7
+
8
+ A cross-cutting building-block skill. Turns a set of numbers and structured events into a sentence or short paragraph in plain English, in the agent's voice.
9
+
10
+ ## Two output shapes
11
+
12
+ ### Cause sentence (used by morning round and chase-progression)
13
+
14
+ Given a deal's state, produces one short sentence that names the most likely cause of the stall. The skill picks the pattern that fits the observable signals, not the one that sounds most dramatic. Examples:
15
+
16
+ - "Mortgage offer expires in 9 days and the survey was booked but not done."
17
+ - "Searches outstanding at day 28; solicitor last contacted day 14."
18
+ - "Vendor unresponsive since day 12; buyer's broker has chased twice."
19
+
20
+ If no pattern fits, the sentence reads "no clear cause from connectors, manual check recommended". The skill never invents a cause it cannot trace to data.
21
+
22
+ ### Variance paragraphs (used by month-end-close)
23
+
24
+ Given the period's reconciliation totals and the two comparison periods (prior month, same month last year), produces two paragraphs in plain language with no jargon. Example:
25
+
26
+ > April was GBP 8,400 down on March because three completions slipped into May, all expected to land. The reconciliation matched cleanly otherwise; the only variance was a GBP 120 referral deduction on the Norton sale.
27
+ >
28
+ > Year-on-year April is 15% up on the same month last year. The increase came from two completions over GBP 8,000 fee value, both new instructions taken in February.
29
+
30
+ The paragraphs are suitable to paste into a board update, a tax-return cover note, or a conversation with a partner.
31
+
32
+ ## Voice source
33
+
34
+ Reads the profile's voice samples and the operator's prior narrative paragraphs. Learns from edit-before-approve diffs.
35
+
36
+ ## What it does not do
37
+
38
+ - It does not write outgoing messages. That is `tone-matched-drafter`.
39
+ - It does not produce numerical totals. The calling workflow passes the numbers in; this skill writes the prose around them.
40
+ - It does not write to the CRM or the accounting platform.
41
+
42
+ ## Connectors
43
+
44
+ Read: profile (voice samples, narrative voice). No writes.
45
+
46
+ ## Profile keys
47
+
48
+ - `realagent.voice_samples`
49
+ - `realagent.close.narrative_voice_samples`
50
+ - `realagent.cause_phrases`
@@ -0,0 +1,54 @@
1
+ ---
2
+ name: vendor-research
3
+ description: "Public-record and CRM-history lookup on a vendor, with the profile's privacy line enforced. Used in valuation-prep, in new-instruction AML staging, and in chase-progression when a vendor goes silent. Surfaces useful context; flags sensitive signals separately."
4
+ ---
5
+
6
+ # Vendor research
7
+
8
+ A cross-cutting building-block skill. Looks the vendor up across the sources the platform has access to and returns a structured summary with the privacy line applied.
9
+
10
+ ## What it looks at
11
+
12
+ - Land Registry: ownership history, joint owners, transactions
13
+ - The agency's CRM history with this vendor and with the property
14
+ - Council planning portal: planning applications and decisions for the property
15
+ - The portal record if the property has been listed before
16
+ - Public probate registry where relevant
17
+ - Public news sources via the deep-research tool when the brief warrants it
18
+
19
+ ## The privacy line
20
+
21
+ The profile holds a privacy preference. Default behaviour:
22
+
23
+ - **Surface.** Ownership and planning history.
24
+ - **Flag-but-suppress.** Deaths registered against the address, ownership changes that correlate with bereavement, planning disputes, anything that the agent could not quote in the appointment without harming their reputation.
25
+
26
+ The flag-but-suppress signals are not deleted; they are summarised at the top of the output as "n suppressed signals exist on this address, available on request". The operator can say "show me everything you find" to see them, or "drop the sensitive stuff" to remove the heading entirely.
27
+
28
+ ## Output shape
29
+
30
+ A structured summary with:
31
+
32
+ - How long the vendor has owned
33
+ - Last purchase price
34
+ - Joint owners on the title
35
+ - Planning history (one-line per material event)
36
+ - Prior listings (agent, asking price, sold or withdrawn)
37
+ - CRM history with this agent
38
+
39
+ Plus the suppressed-signal heading if any apply.
40
+
41
+ ## What it does not do
42
+
43
+ - It does not draft anything to send to the vendor. That is `tone-matched-drafter`.
44
+ - It does not produce a valuation. That is `pricing-scenario-builder`.
45
+ - It does not write to the CRM. The calling workflow stores anything it wants kept.
46
+
47
+ ## Connectors
48
+
49
+ Read: Land Registry, planning portal, CRM, portal data, probate registry, deep-research tool. No writes.
50
+
51
+ ## Profile keys
52
+
53
+ - `realagent.privacy_line.surface` (list of signal types)
54
+ - `realagent.privacy_line.suppress` (list of signal types)