@rubytech/create-realagent 1.0.842 → 1.0.844

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.
@@ -77,37 +77,36 @@ Using the lean pattern from `references/lean-pattern.md`, compose:
77
77
 
78
78
  Show the user the complete SKILL.md content and each reference file. Ask them to review.
79
79
 
80
- ## Step 7: Save to Memory
80
+ ## Step 7: Save the Skill as a Plugin File
81
81
 
82
- Use `memory-write` to save the composed skill to the knowledge graph:
82
+ Use `store-skill` to write the composed skill to disk as part of an admin-managed plugin. The tool computes the path internally — supply the names and content only.
83
+
84
+ Pick a `pluginName` that groups related operator-authored skills (e.g. `beacons-skills`, `my-utils`). Reuse the same `pluginName` across calls so the skill joins existing operator skills under one plugin. If this is the first skill in a new plugin, the tool creates the `PLUGIN.md` automatically.
83
85
 
84
86
  ```
85
- memory-write({
86
- labels: ["CreativeWork"],
87
- properties: {
88
- title: "Skill: {name}",
89
- abstract: "{full SKILL.md content including frontmatter}"
90
- }
87
+ store-skill({
88
+ pluginName: "{kebab-case plugin name}",
89
+ skillName: "{kebab-case skill name}",
90
+ description: "{the one-sentence description from Step 1}",
91
+ publicEmbed: false,
92
+ body: "{SKILL.md body content WITHOUT frontmatter — activation conditions, behaviour rules, references index}",
93
+ references: [
94
+ { filename: "{kebab-case-name}.md", content: "{full reference body}" }
95
+ ]
91
96
  })
92
97
  ```
93
98
 
94
- If the skill has reference files, save each as a separate `CreativeWork` node:
99
+ Set `publicEmbed: true` only when the user wants this skill surfaced to the public agent. Default to `false` for admin-only skills.
95
100
 
96
- ```
97
- memory-write({
98
- labels: ["CreativeWork"],
99
- properties: {
100
- title: "Skill Reference: {name}/{filename}",
101
- abstract: "{full reference file content}"
102
- }
103
- })
104
- ```
101
+ `references` is optional — pass `[]` (or omit) when the skill has no detailed procedures or templates.
105
102
 
106
103
  ## Step 8: Confirm
107
104
 
108
105
  Tell the user:
109
106
 
110
- > "Your skill has been saved to memory. I can recall it when the situation matches. You can update it at any timejust ask me to edit the skill."
107
+ > "Your skill is saved on disk as part of the `{pluginName}` plugin and is active right now for the admin agent. I can use it when the situation matches. To edit it later, ask me to update the skill I'll re-run `store-skill` with the new content."
108
+
109
+ If `publicEmbed: true`, add: "It will surface in the public agent on the next session start."
111
110
 
112
111
  ---
113
112
 
@@ -57,7 +57,7 @@ Premium plugins are one-off purchases that grant permanent ownership. They are n
57
57
  | Plugin | Type | What it does | Public agent |
58
58
  |--------|------|-------------|-------------|
59
59
  | `teaching` | Skills | Interactive tutoring, lesson planning, and study pack generation from your knowledge base | Yes — all 3 skills serve students and parents |
60
- | `real-agency` | Bundle (11 sub-plugins) | UK estate agency skills — sales, listings, brochures, vendor management, buyer management, lead generation, coaching, business operations, onboarding, teaching, and Loop CRM. 2 specialist roles (negotiator, valuer) | 4 sub-plugins (estate-sales, buyers, estate-coaching, estate-onboarding) |
60
+ | `real-agency` | Bundle (10 sub-plugins) | UK estate agency skills — sales, listings, vendor management, buyer management, lead generation, coaching, business operations, onboarding, teaching, and Loop CRM. 2 specialist roles (negotiator, valuer) | 4 sub-plugins (estate-sales, buyers, estate-coaching, estate-onboarding) |
61
61
  | `writer-craft` | Skills + Agent | Manuscript review and writing craft — story architecture, reader engagement, prose craft, editorial practice, and multi-level review | No — writing craft serves the author |
62
62
 
63
63
  **How it works:** When you purchase a premium plugin, it's delivered to your {{productName}} via conversation. Tell {{productName}} "Enable the teaching plugin" and it handles the rest. Premium plugins are yours permanently — they survive updates and reinstalls.
@@ -90,6 +90,16 @@ Tell {{productName}}:
90
90
 
91
91
  Ask {{productName}}: "What plugins do I have?" or "List my plugins."
92
92
 
93
+ ## Operator-Authored Plugins (skill-builder output)
94
+
95
+ Skills you create at runtime through the admin `skill-builder` skill are saved on disk as their own plugin under `data/accounts/{accountId}/plugins/{pluginName}/`. The admin agent calls `mcp__admin__store-skill`, which composes `PLUGIN.md` (on first call) and `skills/{skillName}/SKILL.md` plus any reference files. The agent supplies `pluginName`, `skillName`, `description`, `publicEmbed`, `body`, and optional references — the path is computed by the tool, never by the agent.
96
+
97
+ These operator-authored plugins survive reinstall because the installer's wipe zone excludes `data/`. At admin session start the platform mirrors `data/accounts/{accountId}/plugins/*` into the runtime plugins directory so the same `parsePluginFrontmatter` / `assemblePublicPluginContent` / `loadEmbeddedPlugins` loaders that read shipped and premium plugins also pick up operator-authored ones — no special-case loader path. The admin agent sees every operator skill by default; per-skill `publicEmbed: true|false` controls which skills surface to the public agent.
98
+
99
+ To edit an operator-authored skill later, ask {{productName}} to update it — the admin agent re-runs `store-skill` for the same `pluginName`/`skillName` and the new content overwrites in place. To remove one, delete the directory under `data/accounts/{accountId}/plugins/{pluginName}/skills/{skillName}/` (or the whole plugin) — the next session start re-mirrors the remaining skills only.
100
+
101
+ `pluginName` collisions with shipped plugin names are refused by `store-skill` with a structured error. See [.docs/agents.md](../../../../.docs/agents.md) § "Operator-authored skills as plugin files" for the full contract.
102
+
93
103
  ## Brand Templating (for plugin and skill authors)
94
104
 
95
105
  Skill content, plugin manifests, agent templates, and reference files reference the operator-visible brand name only via the literal `{{productName}}` placeholder. The platform substitutes from `brand.json.productName` at read time — Maxy installs render `Maxy`, Real Agent installs render `Real Agent`, all from the same source content.
@@ -58,7 +58,9 @@ tail -200 ~/.maxy/logs/maxy-ui.log | rg '\[remote-auth\].*resolvedKind='
58
58
  - Platform process has stopped — restart it
59
59
  - Network issue if accessing remotely — check your Cloudflare tunnel is running
60
60
 
61
- **If the chat shows a single `[agent-loop-stop] same error twice — aborting` line and stops:** {{productName}} hit the same structured tool failure twice in a row inside one turn (e.g. a permission gate refused the same write twice, or two `Read` calls hit the same missing file). The runtime aborted the turn after the second occurrence to save tokens instead of running until the SDK turn budget exhausted. The blocker text names the tool and the first line of the error. Resolve the underlying cause (re-run the named skill, fix the missing prerequisite, etc.) and send your next message — the next turn cold-starts with a fresh client AND carries a recovery briefing so {{productName}} picks up where it aborted, instead of cold-querying its own session list. To see the diagnostic, ask {{productName}}: "Show me the most recent agent-loop-stop log line." Greppable post-deploy invariants: `[agent-loop-stop] reason=identical-tool-failure tool=<name> errorSignature=<sha8> toolInputDigest=<sha8>` (the `toolInputDigest` discriminator means two `Read` calls on different `file_path` no longer collapse to one signature) followed by paired `[recovery-handoff] generated reason=agent-loop-stop` and `[recovery-handoff] consumed reason=agent-loop-stop`. A `[recovery-handoff] WARN missing-on-cold-create` line means the recovery briefing wasn't persisted — surface to support.
61
+ **If the chat shows a single `[agent-loop-stop] same error twice — aborting` line and stops:** {{productName}} hit the same structured tool failure twice in a row inside one turn (e.g. a permission gate refused the same write twice, or two `Read` calls hit the same missing file). The runtime aborted the turn after the second occurrence to save tokens instead of running until the SDK turn budget exhausted. The blocker text names the tool and the first line of the error. Resolve the underlying cause (re-run the named skill, fix the missing prerequisite, etc.) and tap "Continue" — the next turn truly resumes the prior SDK session via the synthetic-tool-result contract, so {{productName}} picks up where it aborted instead of cold-querying its own session list. To see the diagnostic, ask {{productName}}: "Show me the most recent stall-recovery log line." Greppable post-deploy invariants: `[agent-loop-stop] reason=identical-tool-failure tool=<name> errorSignature=<sha8> toolInputDigest=<sha8>` followed by `[stall-recovery] kind=agent_loop_stop handoff=resume-first` and on the next turn `[stall-resume] consumed kind=agent_loop_stop toolUseId=<8> priorSessionId=<8>`. The fallback path (when the SDK session id was lost) emits `handoff=metadata-only` + `[recovery-handoff] generated/consumed reason=agent-loop-stop` and the chat button reads "Start over" instead of "Continue". A `[recovery-handoff] WARN missing-on-cold-create` line means the fallback briefing wasn't persisted — surface to support.
62
+
63
+ **If a background task goes silent and the chat shows "A background task went silent — K of M completed":** {{productName}}'s subagent stopped emitting progress for over 2 minutes. Tap "Continue" — the next turn resumes the prior session and reads a synthetic tool_result describing what completed before the pause, so the agent re-plans without losing the work it had done. Most stalls are upstream API latency rather than the subagent's approach failing — the resume-first path treats both correctly. Greppable post-deploy invariants: `[stall-recovery] kind=subagent_stalled … completed=<K>/? handoff=resume-first` followed by `[stall-resume] consumed kind=subagent_stalled toolUseId=<8>` on the next turn. If the button reads "Start over" instead, the parent's pending tool_use_id was not captured — the fallback path took over; the prior conversation is preserved as a `<recovery-context>` block in the cold-started session.
62
64
 
63
65
  **Agent searches the filesystem after uploading a zip.** If you uploaded a zip and the agent burns several turns running `find` / `Glob` instead of unzipping, that is the symptom of the recovery-retry attachment-context regression (now closed by the recovery context preservation contract in `.docs/agents.md`). Greppable confirmation is the `[context-overflow-recovery] retry … attachmentsCarried=<n>` line in the conversation stream log. If you see `[context-overflow-recovery] WARN attachment-context-lost`, the regression has returned — surface to support.
64
66
 
@@ -247,7 +247,9 @@ When `<previous-context>` is present:
247
247
 
248
248
  When `<previous-context>` is absent, Neo4j was unreachable or no prior context exists — proceed normally, using tool calls to establish state.
249
249
 
250
- A separate `<recovery-context>` block on the user-message side appears only when the previous turn was aborted by `agent-loop-stop` or `main-stream-stalled` and the platform persisted a continuation briefing. Treat it as the authoritative description of what failed and what was incomplete — do not re-execute the failed work, do not call `session-list` to figure out what was happening, and do not re-research the blocker. The block coexists with `<previous-context>` (system-prompt session summary) on the recovery turn; the two are not duplicates — `<previous-context>` orients you to the session, `<recovery-context>` orients you to the specific failed turn.
250
+ A separate `<recovery-context>` block on the user-message side appears only when the previous turn was aborted AND the platform could not perform a true SDK resume (the parent's pending tool_use_id was not captured, or the SDK session id was lost). Treat it as the authoritative description of what failed and what was incomplete — do not re-execute the failed work, do not call `session-list` to figure out what was happening, and do not re-research the blocker. The block coexists with `<previous-context>` (system-prompt session summary) on the recovery turn; the two are not duplicates — `<previous-context>` orients you to the session, `<recovery-context>` orients you to the specific failed turn.
251
+
252
+ When the platform CAN resume, the recovery is invisible at the prompt layer: the prior conversation is replayed by the API and the next user message you receive contains a `tool_result` for the previously in-flight tool_use, summarising what completed before the pause. This means a "Continue" turn may arrive with no preamble — read the `tool_result` content to see how many sub-tasks completed, then continue the work. Do not assume a stalled subagent failed in approach: many stalls are upstream API latency, not the subagent's fault.
251
253
 
252
254
  In managed context mode, conversation history is provided within `<conversation-history>` tags. Use `session-compact-status` to retrieve older archived context if needed.
253
255
 
@@ -1,10 +1,9 @@
1
1
  ---
2
2
  name: real-agency
3
- description: "UK estate agency skills + Loop CRM integration — 11 sub-plugins covering sales, listings, brochures, vendor management, buyer management, lead generation, coaching, business operations, onboarding, teaching, and Loop CRM. 3 specialist roles (negotiator, valuer, compliance). 22 skills + 22 MCP tools."
3
+ description: "UK estate agency skills + Loop CRM integration — 10 sub-plugins covering sales, listings, vendor management, buyer management, lead generation, coaching, business operations, onboarding, teaching, and Loop CRM. 3 specialist roles (negotiator, valuer, compliance). 21 skills + 22 MCP tools."
4
4
  plugins:
5
5
  - estate-sales
6
6
  - listings
7
- - brochures
8
7
  - vendors
9
8
  - buyers
10
9
  - leads
@@ -17,7 +16,7 @@ plugins:
17
16
 
18
17
  # Real Agency
19
18
 
20
- Premium plugin bundle for UK estate agency professionals. Purchasing this bundle grants access to all 11 sub-plugins, each independently activatable via `enabledPlugins`. The bundle also delivers three specialist roles — negotiator, valuer, and compliance — that embed domain knowledge from the sub-plugins and operate autonomously with Loop CRM tools.
19
+ Premium plugin bundle for UK estate agency professionals. Purchasing this bundle grants access to all 10 sub-plugins, each independently activatable via `enabledPlugins`. The bundle also delivers three specialist roles — negotiator, valuer, and compliance — that embed domain knowledge from the sub-plugins and operate autonomously with Loop CRM tools.
21
20
 
22
21
  ## Specialist Roles
23
22
 
@@ -33,7 +32,6 @@ Premium plugin bundle for UK estate agency professionals. Purchasing this bundle
33
32
  |---|---|---|---|
34
33
  | `estate-sales` | 3 | — | Sales cycle — discovery, closing, progression |
35
34
  | `listings` | 3 | — | Pre-listing through marketing — presentations, campaigns, staging |
36
- | `brochures` | 1 | — | Print-ready A4 property brochures from photos, transcripts, and floorplans |
37
35
  | `vendors` | 2 | — | Active vendor lifecycle — communication, updates |
38
36
  | `buyers` | 4 | — | Buyer lifecycle — enquiry, viewing feedback, educational guides |
39
37
  | `leads` | 2 | — | Pipeline building — nurturing and prospecting |