@rubytech/create-realagent-code 0.1.212 → 0.1.216
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/payload/platform/plugins/admin/.claude-plugin/plugin.json +1 -1
- package/payload/platform/plugins/admin/PLUGIN.md +5 -1
- package/payload/platform/plugins/admin/hooks/__tests__/hook-emit.test.sh +75 -0
- package/payload/platform/plugins/admin/hooks/__tests__/post-tool-use-agent.test.sh +173 -0
- package/payload/platform/plugins/admin/hooks/__tests__/pre-tool-use-admin-tool-gate.test.sh +107 -40
- package/payload/platform/plugins/admin/hooks/__tests__/pre-tool-use-base64-guard.test.sh +4 -4
- package/payload/platform/plugins/admin/hooks/lib/hook-emit.sh +114 -0
- package/payload/platform/plugins/admin/hooks/post-tool-use-agent.sh +136 -0
- package/payload/platform/plugins/admin/hooks/pre-tool-use.sh +127 -68
- package/payload/platform/plugins/admin/mcp/dist/__tests__/capabilities-here.test.d.ts +2 -0
- package/payload/platform/plugins/admin/mcp/dist/__tests__/capabilities-here.test.d.ts.map +1 -0
- package/payload/platform/plugins/admin/mcp/dist/__tests__/capabilities-here.test.js +130 -0
- package/payload/platform/plugins/admin/mcp/dist/__tests__/capabilities-here.test.js.map +1 -0
- package/payload/platform/plugins/admin/mcp/dist/index.js +63 -0
- package/payload/platform/plugins/admin/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/admin/mcp/dist/lib/catalogue-census.d.ts +14 -0
- package/payload/platform/plugins/admin/mcp/dist/lib/catalogue-census.d.ts.map +1 -0
- package/payload/platform/plugins/admin/mcp/dist/lib/catalogue-census.js +50 -0
- package/payload/platform/plugins/admin/mcp/dist/lib/catalogue-census.js.map +1 -0
- package/payload/platform/plugins/admin/mcp/dist/tools/capabilities-here.d.ts +28 -0
- package/payload/platform/plugins/admin/mcp/dist/tools/capabilities-here.d.ts.map +1 -0
- package/payload/platform/plugins/admin/mcp/dist/tools/capabilities-here.js +68 -0
- package/payload/platform/plugins/admin/mcp/dist/tools/capabilities-here.js.map +1 -0
- package/payload/platform/plugins/admin/skills/capabilities-here/SKILL.md +31 -0
- package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +170 -16
- package/payload/platform/plugins/docs/references/platform.md +19 -9
- package/payload/platform/plugins/docs/references/plugins-guide.md +2 -0
- package/payload/platform/scripts/check-architecture-skill-no-drift.mjs +89 -42
- package/payload/platform/scripts/check-roles-doc-completeness.mjs +96 -0
- package/payload/platform/scripts/check-specialist-tool-surface.mjs +1 -1
- package/payload/platform/scripts/setup-account.sh +6 -0
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js +1 -0
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/http-server.js +77 -0
- package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/index.js +30 -0
- package/payload/platform/services/claude-session-manager/dist/index.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/jsonl-tail.d.ts +18 -0
- package/payload/platform/services/claude-session-manager/dist/jsonl-tail.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/jsonl-tail.js +63 -0
- package/payload/platform/services/claude-session-manager/dist/jsonl-tail.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/rc-daemon.d.ts +5 -0
- package/payload/platform/services/claude-session-manager/dist/rc-daemon.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/rc-daemon.js +29 -0
- package/payload/platform/services/claude-session-manager/dist/rc-daemon.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/rc-script-spawn.d.ts +80 -0
- package/payload/platform/services/claude-session-manager/dist/rc-script-spawn.d.ts.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/rc-script-spawn.js +306 -0
- package/payload/platform/services/claude-session-manager/dist/rc-script-spawn.js.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/specialist-drift.d.ts +9 -0
- package/payload/platform/services/claude-session-manager/dist/specialist-drift.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/specialist-drift.js +6 -2
- package/payload/platform/services/claude-session-manager/dist/specialist-drift.js.map +1 -1
- package/payload/platform/templates/agents/admin/IDENTITY.md +3 -1
- package/payload/platform/templates/specialists/agents/content-producer.md +1 -1
- package/payload/premium-plugins/real-agent/BUNDLE.md +7 -0
- package/payload/premium-plugins/real-agent/PLUGIN.md +6 -0
- package/payload/premium-plugins/real-agent/docs/nav.json +35 -0
- package/payload/premium-plugins/real-agent/docs/references/real-agent-architecture.md +39 -0
- package/payload/premium-plugins/real-agent/docs/references/real-agent-plugins.md +22 -0
- package/payload/premium-plugins/real-agent/docs/references/real-agent-roles.md +15 -0
- package/payload/premium-plugins/real-agent/docs/references/real-agent-workflows.md +42 -0
- package/payload/server/public/assets/AdminShell-CPWbJ_I8.js +1 -0
- package/payload/server/public/assets/{admin-DMo5DWKH.js → admin-DjGGOx2K.js} +1 -1
- package/payload/server/public/assets/{data-D6IQdm0R.js → data-WBEvtRV-.js} +1 -1
- package/payload/server/public/assets/{graph-PkZKVkWD.js → graph-DsOLsIPf.js} +1 -1
- package/payload/server/public/data.html +2 -2
- package/payload/server/public/graph.html +2 -2
- package/payload/server/public/index.html +2 -2
- package/payload/server/server.js +6 -0
- package/payload/server/public/assets/AdminShell-BcxEZnpu.js +0 -1
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { existsSync, readdirSync, readFileSync, statSync } from "node:fs";
|
|
2
|
+
import { resolve, join } from "node:path";
|
|
3
|
+
function listSpecialists(dir) {
|
|
4
|
+
if (!existsSync(dir))
|
|
5
|
+
return [];
|
|
6
|
+
const out = [];
|
|
7
|
+
for (const entry of readdirSync(dir)) {
|
|
8
|
+
const full = join(dir, entry);
|
|
9
|
+
const st = statSync(full);
|
|
10
|
+
if (st.isFile() && entry.endsWith(".md"))
|
|
11
|
+
out.push(entry.replace(/\.md$/, ""));
|
|
12
|
+
else if (st.isDirectory() && existsSync(join(full, "IDENTITY.md")))
|
|
13
|
+
out.push(entry);
|
|
14
|
+
}
|
|
15
|
+
return out;
|
|
16
|
+
}
|
|
17
|
+
function slugify(s) {
|
|
18
|
+
return s.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "");
|
|
19
|
+
}
|
|
20
|
+
export function runCatalogueCensus(input) {
|
|
21
|
+
const platformSpecs = listSpecialists(resolve(input.platformRoot, "templates", "specialists", "agents"));
|
|
22
|
+
const premiumSpecs = [];
|
|
23
|
+
for (const bundle of input.enabledBundles) {
|
|
24
|
+
const dir = resolve(input.premiumPluginsRoot, bundle, "agents");
|
|
25
|
+
premiumSpecs.push(...listSpecialists(dir));
|
|
26
|
+
}
|
|
27
|
+
const disk = [...platformSpecs, ...premiumSpecs];
|
|
28
|
+
const body = existsSync(input.shippedSkillPath)
|
|
29
|
+
? readFileSync(input.shippedSkillPath, "utf8")
|
|
30
|
+
: "";
|
|
31
|
+
const bodySlugs = new Set();
|
|
32
|
+
for (const match of body.matchAll(/^\|\s*([^|]+)\s*\|/gm)) {
|
|
33
|
+
const cell = match[1].trim();
|
|
34
|
+
if (!cell || cell.startsWith("---") || cell === "Role" || cell === "Plugin")
|
|
35
|
+
continue;
|
|
36
|
+
bodySlugs.add(slugify(cell));
|
|
37
|
+
}
|
|
38
|
+
const missing = disk.filter((s) => !bodySlugs.has(slugify(s)));
|
|
39
|
+
// Stale signal arrives via the per-brand drift gate and the
|
|
40
|
+
// check-roles-doc-completeness gate; this census closes the F5 leak —
|
|
41
|
+
// disk-but-undocumented — which the drift gates cannot see.
|
|
42
|
+
const stale = [];
|
|
43
|
+
return {
|
|
44
|
+
diskCount: disk.length,
|
|
45
|
+
documentedCount: bodySlugs.size,
|
|
46
|
+
missing,
|
|
47
|
+
stale,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=catalogue-census.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalogue-census.js","sourceRoot":"","sources":["../../src/lib/catalogue-census.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export interface CapabilitiesHereInput {
|
|
2
|
+
accountId: string;
|
|
3
|
+
accountConfigPath: string;
|
|
4
|
+
brandConfigPath: string;
|
|
5
|
+
platformRoot: string;
|
|
6
|
+
premiumPluginsRoot: string;
|
|
7
|
+
claudeConfigDir: string;
|
|
8
|
+
}
|
|
9
|
+
export interface CapabilitiesHereResult {
|
|
10
|
+
accountId: string;
|
|
11
|
+
tier: string | null;
|
|
12
|
+
adminModel: string | null;
|
|
13
|
+
publicModel: string | null;
|
|
14
|
+
enabledPlugins: string[];
|
|
15
|
+
installedPlatformSpecialists: string[];
|
|
16
|
+
installedPremiumSpecialists: Array<{
|
|
17
|
+
bundle: string;
|
|
18
|
+
name: string;
|
|
19
|
+
}>;
|
|
20
|
+
registeredAgentTypes: string[];
|
|
21
|
+
brand: {
|
|
22
|
+
productName: string | null;
|
|
23
|
+
shipsPremiumBundles: string[];
|
|
24
|
+
};
|
|
25
|
+
capturedAt: string;
|
|
26
|
+
}
|
|
27
|
+
export declare function resolveCapabilitiesHere(input: CapabilitiesHereInput, nowIso: string): Promise<CapabilitiesHereResult>;
|
|
28
|
+
//# sourceMappingURL=capabilities-here.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities-here.d.ts","sourceRoot":"","sources":["../../src/tools/capabilities-here.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,4BAA4B,EAAE,MAAM,EAAE,CAAC;IACvC,2BAA2B,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrE,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,KAAK,EAAE;QACL,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3B,mBAAmB,EAAE,MAAM,EAAE,CAAC;KAC/B,CAAC;IACF,UAAU,EAAE,MAAM,CAAC;CACpB;AA0BD,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,qBAAqB,EAC5B,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,sBAAsB,CAAC,CAgDjC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import { existsSync, readdirSync, statSync } from "node:fs";
|
|
3
|
+
import { resolve, join } from "node:path";
|
|
4
|
+
function listSpecialistFiles(dir) {
|
|
5
|
+
if (!existsSync(dir))
|
|
6
|
+
return [];
|
|
7
|
+
const out = [];
|
|
8
|
+
for (const entry of readdirSync(dir)) {
|
|
9
|
+
const full = join(dir, entry);
|
|
10
|
+
const st = statSync(full);
|
|
11
|
+
if (st.isFile() && entry.endsWith(".md")) {
|
|
12
|
+
out.push(entry.replace(/\.md$/, ""));
|
|
13
|
+
}
|
|
14
|
+
else if (st.isDirectory() && existsSync(join(full, "IDENTITY.md"))) {
|
|
15
|
+
out.push(entry);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
return out.sort();
|
|
19
|
+
}
|
|
20
|
+
function listAgentRegistry(dir) {
|
|
21
|
+
if (!existsSync(dir))
|
|
22
|
+
return [];
|
|
23
|
+
const out = [];
|
|
24
|
+
for (const entry of readdirSync(dir)) {
|
|
25
|
+
if (entry.endsWith(".md"))
|
|
26
|
+
out.push(entry.replace(/\.md$/, ""));
|
|
27
|
+
}
|
|
28
|
+
return out.sort();
|
|
29
|
+
}
|
|
30
|
+
export async function resolveCapabilitiesHere(input, nowIso) {
|
|
31
|
+
const accountRaw = await readFile(input.accountConfigPath, "utf-8");
|
|
32
|
+
const account = JSON.parse(accountRaw);
|
|
33
|
+
const brandRaw = await readFile(input.brandConfigPath, "utf-8");
|
|
34
|
+
const brand = JSON.parse(brandRaw);
|
|
35
|
+
const enabledPlugins = Array.isArray(account.enabledPlugins)
|
|
36
|
+
? account.enabledPlugins.slice().sort()
|
|
37
|
+
: [];
|
|
38
|
+
const tier = typeof account.tier === "string" ? account.tier : null;
|
|
39
|
+
const adminModel = typeof account.adminModel === "string" ? account.adminModel : null;
|
|
40
|
+
const publicModel = typeof account.publicModel === "string" ? account.publicModel : null;
|
|
41
|
+
const productName = typeof brand.productName === "string" ? brand.productName : null;
|
|
42
|
+
const shipsPremiumBundles = Array.isArray(brand.shipsPremiumBundles)
|
|
43
|
+
? brand.shipsPremiumBundles.slice().sort()
|
|
44
|
+
: [];
|
|
45
|
+
const platformSpecialistsDir = resolve(input.platformRoot, "templates", "specialists", "agents");
|
|
46
|
+
const installedPlatformSpecialists = listSpecialistFiles(platformSpecialistsDir);
|
|
47
|
+
const installedPremiumSpecialists = [];
|
|
48
|
+
for (const bundle of shipsPremiumBundles) {
|
|
49
|
+
const bundleAgentsDir = resolve(input.premiumPluginsRoot, bundle, "agents");
|
|
50
|
+
const names = listSpecialistFiles(bundleAgentsDir);
|
|
51
|
+
for (const name of names)
|
|
52
|
+
installedPremiumSpecialists.push({ bundle, name });
|
|
53
|
+
}
|
|
54
|
+
const registeredAgentTypes = listAgentRegistry(resolve(input.claudeConfigDir, "agents"));
|
|
55
|
+
return {
|
|
56
|
+
accountId: input.accountId,
|
|
57
|
+
tier,
|
|
58
|
+
adminModel,
|
|
59
|
+
publicModel,
|
|
60
|
+
enabledPlugins,
|
|
61
|
+
installedPlatformSpecialists,
|
|
62
|
+
installedPremiumSpecialists,
|
|
63
|
+
registeredAgentTypes,
|
|
64
|
+
brand: { productName, shipsPremiumBundles },
|
|
65
|
+
capturedAt: nowIso,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=capabilities-here.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities-here.js","sourceRoot":"","sources":["../../src/tools/capabilities-here.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: capabilities-here
|
|
3
|
+
description: Use when grounding any claim about what is installed on the current account — enabled plugins, available specialists, registered Claude Code agent types, brand, tier, models. Call the `capabilities-here` tool; the JSON it returns is the authoritative install snapshot. Never infer install state from the platform-architecture skill (that skill is the install catalogue, not evidence of what is enabled here).
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# capabilities-here
|
|
7
|
+
|
|
8
|
+
The `capabilities-here` admin MCP tool returns a single JSON object describing the live install state on the current account. Call it whenever you are about to:
|
|
9
|
+
|
|
10
|
+
- Tell the operator what you can or cannot do here.
|
|
11
|
+
- Decide whether a specialist exists before dispatching it.
|
|
12
|
+
- Say which plugins are available on this account.
|
|
13
|
+
- Compare the install against a catalogue claim from `platform-architecture`.
|
|
14
|
+
|
|
15
|
+
## How to use
|
|
16
|
+
|
|
17
|
+
Call `mcp__plugin_admin_admin__capabilities-here` with no arguments. The tool reads:
|
|
18
|
+
|
|
19
|
+
- `account.json` for `enabledPlugins`, `tier`, `adminModel`, `publicModel`.
|
|
20
|
+
- `brand.json` for `productName` and `shipsPremiumBundles`.
|
|
21
|
+
- `platform/templates/specialists/agents/` for `installedPlatformSpecialists`.
|
|
22
|
+
- Each enabled premium bundle's `agents/` for `installedPremiumSpecialists`.
|
|
23
|
+
- `$CLAUDE_CONFIG_DIR/agents/` for `registeredAgentTypes` (the same registry the Agent tool resolves against).
|
|
24
|
+
|
|
25
|
+
Returns one JSON object with those fields plus `accountId`, `capturedAt`, and the `brand` block. No LLM in the resolution path; pure disk + JSON reads.
|
|
26
|
+
|
|
27
|
+
## Boundary against `platform-architecture`
|
|
28
|
+
|
|
29
|
+
`platform-architecture` is the install catalogue — every plugin, skill, and specialist the platform can ship. It is not evidence that any of them is enabled here. For documented surface (how a plugin works, what a role is for) cite `platform-architecture` with the `Source:` URL. For what is actually installed on this account, cite `capabilities-here`.
|
|
30
|
+
|
|
31
|
+
When the operator asks "what can you do" or "what plugins are enabled" or "do you have X", the answer comes from `capabilities-here`, not from this skill or from `platform-architecture`.
|
|
@@ -1,19 +1,23 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: platform-architecture
|
|
3
|
-
description: Use when grounding any claim about what
|
|
4
|
-
content-hash: sha256:
|
|
3
|
+
description: Use when grounding any documented-surface claim about what Real Agent ships — plugins, skills, specialists, install/deploy flows, internals. This is the install catalogue, not evidence of what is enabled on the current account. For install state on this account, call `capabilities-here`; for documented surface, cite the `Source:` URL inline.
|
|
4
|
+
content-hash: sha256:1eb912d1c7250242bb34abd40af8f18566779e7d6457baf8383d2410d5e702cf
|
|
5
|
+
brand: realagent-code
|
|
6
|
+
product-name: Real Agent
|
|
5
7
|
---
|
|
6
8
|
|
|
7
|
-
#
|
|
9
|
+
# Real Agent platform architecture (catalogue)
|
|
8
10
|
|
|
9
|
-
This skill is
|
|
11
|
+
This skill is the install catalogue — every surface the platform can ship. It is not evidence of what is installed on the current account. Cite for documented surface. For 'what is installed here' / 'what can you do', call `capabilities-here` and read `account-manage`; do not infer install state from this body.
|
|
10
12
|
|
|
11
|
-
|
|
13
|
+
This skill is generated. Its body is the concatenated source markdown for every public Real Agent docs page, emitted by `docs/scripts/copy-docs.mjs` as `docs/public/llms-full.realagent-code.txt` and assembled here by `maxy-code/scripts/assemble-architecture-skill.mjs`. Do not hand-edit — the drift gate in `platform/scripts/check-architecture-skill-no-drift.mjs` will fail CI.
|
|
14
|
+
|
|
15
|
+
When you load this skill to ground a factual claim, cite the `Source:` URL printed above the block you drew from. The URL is the canonical public docs page (https://docs.realagent.network); relay it as a markdown link in your reply. Training-data recall is not a permitted source — the body below is.
|
|
12
16
|
|
|
13
17
|
---
|
|
14
|
-
#
|
|
18
|
+
# Real Agent Documentation — full corpus
|
|
15
19
|
|
|
16
|
-
Concatenated source markdown for every public
|
|
20
|
+
Concatenated source markdown for every public Real Agent docs page. Pages are separated by `---` and labelled with their canonical URL.
|
|
17
21
|
|
|
18
22
|
---
|
|
19
23
|
# Getting Started
|
|
@@ -145,18 +149,26 @@ Plugins are installed and managed through conversation. You can add marketplace
|
|
|
145
149
|
|
|
146
150
|
## Roles
|
|
147
151
|
|
|
148
|
-
Maxy
|
|
152
|
+
Maxy ships twelve roles it can dispatch for specific tasks — like members of your team. You don't need to configure or manage them — Maxy decides when to use each role and handles everything automatically. You may see activity like "Dispatching personal-assistant..." in the chat timeline when this happens.
|
|
153
|
+
|
|
154
|
+
The catalogue below is what the platform ships. It is not evidence of what is installed on the current account. For the live install set on this account, ask Maxy to call `capabilities-here`.
|
|
149
155
|
|
|
150
156
|
| Role | What it does |
|
|
151
157
|
|------|-------------|
|
|
152
|
-
|
|
|
153
|
-
|
|
|
154
|
-
|
|
|
155
|
-
|
|
|
156
|
-
|
|
|
157
|
-
| Database Operator |
|
|
158
|
-
|
|
159
|
-
|
|
158
|
+
| Archive Ingest Operator | Ingests bulk external archives — Obsidian, ICS, X, Notion — and surfaces schema-mapping ambiguity rather than catching all unmapped relations as :MENTIONS. |
|
|
159
|
+
| Citation Auditor | Audits :TimelineEvent rows for missing citations and writes either citations directly or a CitationProposal stub. |
|
|
160
|
+
| Coding Assistant | Runs shell commands, drives git repositories, and reads or edits code on your behalf — the specialist you reach for when the work belongs in a developer terminal. |
|
|
161
|
+
| Compiled Truth Rewriter | Recomputes a node's compiledTruth (and public twin where applicable) from its 90-day timeline plus optional operator hints. |
|
|
162
|
+
| Content Producer | Produces visual output from your graph: generates images, renders pages to PDF, and hosts static websites you upload as a zip. |
|
|
163
|
+
| Database Operator | Executes graph writes on admin's behalf when delegated via the Task tool — admin names each write, the specialist runs it. |
|
|
164
|
+
| Librarian | Owns foreground ingest of documents, conversation transcripts, and external archives into the memory graph. |
|
|
165
|
+
| Personal Assistant | Handles the operational tasks you'd give a personal assistant: scheduling meetings, managing your platform settings, connecting messaging channels, and completing browser-based tasks on your behalf. |
|
|
166
|
+
| Project Manager | Manages your tasks, projects, sessions, and workflows: linking work to people and goals, and keeping everything organised. |
|
|
167
|
+
| Public Session Reviewer | Reads a gated public-agent transcript and dispatches database-operator for each per-visitor memory write. |
|
|
168
|
+
| Research Assistant | Researches topics online, manages your knowledge graph, and produces supporting visuals. |
|
|
169
|
+
| Typed Edge Classifier | Reads recently-written prose nodes and writes typed edges from a closed allowlist. |
|
|
170
|
+
|
|
171
|
+
Roles are installed during setup and listed when Maxy introduces itself. Some premium bundles add their own specialists (e.g. the `real-agent` bundle adds a listing curator, negotiator, valuer, compliance officer, and buyer-enquiry public agent). Roles installed mid-session become active from the next session.
|
|
160
172
|
|
|
161
173
|
## Memory
|
|
162
174
|
|
|
@@ -230,6 +242,8 @@ Each session row also carries a small muted timestamp crumb under the name showi
|
|
|
230
242
|
|
|
231
243
|
`verified=true` requires `master-fd=closed` AND `fdDelta>=1` AND `trackerRemoved=true`. `master-fd=close-failed` is logged at error level (`[rc-spawn-error]` prefix) — never swallowed; the next post-archive sweep is the catch-net.
|
|
232
244
|
|
|
245
|
+
**Cross-arm `[rc-life]` schema (Task 562).** Both rc-spawn arms (the legacy node-pty one above and a new isolated `script-scope` arm exposed via the dashboard A/B toggle next to "New session") plus the rc-daemon emit a shared log shape so the populations can be compared from `server.log` alone. One spawn's full lifeline is `grep <unitToken>`; one arm's signature is `grep 'source=<arm>'`. The new `script-scope` arm spawns via the daemon's mechanism — `systemdSpawn` + the same `script(1)` wrap — and the manager holds zero fds. Capture files are retained at `~/.<brand>/logs/spawn-<unitToken>.log` for post-mortem. Full schema and operator runbook in [`.docs/rc-life-observability.md`](../../../.docs/rc-life-observability.md).
|
|
246
|
+
|
|
233
247
|
**Post-archive fd sweep (Task 558).** Independent of spawn/archive request traffic, the manager runs a 60 s sweep that walks both directions of the master-fd invariant:
|
|
234
248
|
|
|
235
249
|
- `[fd-audit] op=orphan-master sessionId=<8> pid=<n> archivedAt=<ms> heldSinceArchiveMs=<n> fd=<n|unknown>` — fires per tracker whose row is archived (the leak).
|
|
@@ -305,6 +319,8 @@ A plugin extends what Maxy can do. Each plugin adds a focused capability — con
|
|
|
305
319
|
|
|
306
320
|
Maxy's own capabilities are plugins too. Marketplace plugins (like Stripe) work the same way — Maxy manages all of them through conversation.
|
|
307
321
|
|
|
322
|
+
The tables below are the install catalogue — every plugin the platform can ship. They are not evidence of what is enabled on the current account. For the live install set, ask Maxy to call `capabilities-here`.
|
|
323
|
+
|
|
308
324
|
## Plugin Groups
|
|
309
325
|
|
|
310
326
|
### Core (always active)
|
|
@@ -3780,3 +3796,141 @@ sudo systemctl --user start maxy-ui
|
|
|
3780
3796
|
- `grep -c '\[admin-ui\] sidebar-meta-pane-reconcile' ~/.maxy/logs/admin-ui-console.log` should equal the count of End / Resume / Purge clicks while the metadata pane was open. A `to=gone` line without a paired Close click means the pane's auto-close logic regressed.
|
|
3781
3797
|
|
|
3782
3798
|
**Why this matters.** The render-body log was misleading: it read as "the admin agent is checking onboarding state continuously", when in fact `onboardingComplete` had not changed at all. The fix moved the log into `useEffect(…, [])` then dropped the per-tick poll entirely, so a quiet console is now the steady state. With both fixes in place, console output is a faithful record of what the page actually did each operator click.
|
|
3799
|
+
|
|
3800
|
+
---
|
|
3801
|
+
# Real Agent Roles
|
|
3802
|
+
Source: https://docs.realagent.network/real-agent/roles.md
|
|
3803
|
+
|
|
3804
|
+
# Real Agent Roles
|
|
3805
|
+
|
|
3806
|
+
The `real-agent` premium bundle ships five additional roles on top of the Real Agent core specialists. Real Agent dispatches them by intent — you do not name them.
|
|
3807
|
+
|
|
3808
|
+
The table below is the install catalogue for the `real-agent` bundle. It is not evidence of what is enabled on the current account. For the live install set on this account, ask Real Agent to call `capabilities-here`.
|
|
3809
|
+
|
|
3810
|
+
| Role | What it does |
|
|
3811
|
+
|------|-------------|
|
|
3812
|
+
| Buyer Enquiry | Public-facing buyer enquiry agent — answers visitor questions about properties, viewings, and the buying process from the agency knowledge base. Operates inside UK property conventions, never gives financial or legal advice, and collects contact details only when the visitor asks to book a viewing. |
|
|
3813
|
+
| Compliance | Your compliance officer — advises on UK estate agency law, audits listings against regulatory requirements, and cites current legislation. |
|
|
3814
|
+
| Listing Curator | Your listing curator — maps property inputs to typed :Listing nodes that visitor-facing chat can render. |
|
|
3815
|
+
| Negotiator | Your negotiator — manages buyer pipeline, viewings, feedback, offers, and deal progression using Loop CRM. |
|
|
3816
|
+
| Valuer | Your valuer — prepares market appraisals, assembles comparable evidence, and analyses local market conditions using Loop CRM. |
|
|
3817
|
+
|
|
3818
|
+
The four sales-side roles (Compliance, Listing Curator, Negotiator, Valuer) are admin-side specialists dispatched from your operator session. Buyer Enquiry is a public-facing agent the visitor-side chat surfaces on your domain.
|
|
3819
|
+
|
|
3820
|
+
---
|
|
3821
|
+
# Real Agent Plugins
|
|
3822
|
+
Source: https://docs.realagent.network/real-agent/plugins.md
|
|
3823
|
+
|
|
3824
|
+
# Real Agent Plugins
|
|
3825
|
+
|
|
3826
|
+
The `real-agent` premium bundle ships twelve sub-plugins. Each is independently activatable via `enabledPlugins`; the bundle auto-stamps every sub on first boot after install. Disable an individual sub with `plugin-toggle-enabled`.
|
|
3827
|
+
|
|
3828
|
+
The table below is the install catalogue for the bundle. It is not evidence of what is enabled on the current account. For the live install set, ask Real Agent to call `capabilities-here`.
|
|
3829
|
+
|
|
3830
|
+
| Plugin | What it does |
|
|
3831
|
+
|--------|-------------|
|
|
3832
|
+
| `brochures` | End-to-end pipeline for producing print-ready A4 estate-agent property brochures. Single-entry orchestrator that skips upstream steps whose outputs already exist: extracts brand from the agent's website, extracts property assets from the listing URL, lays out the brochure, and satisfies print constraints for pixel-perfect PDF. |
|
|
3833
|
+
| `buyers` | Full buyer lifecycle — enquiry handling, qualification, viewing management, feedback collection, educational guides, the public-chat property recommender, and the visitor-graph analytics that link page behaviour to known :Person contacts. |
|
|
3834
|
+
| `estate-business` | Monthly close, commission, payments, and business operations for UK residential estate agencies. Includes month-end-close (period-reconciler, commission-calculator, payment-batch-stager) plus business-growth, business-operations, personal-branding, and exp-partnership. |
|
|
3835
|
+
| `estate-coaching` | Coaching, training, and performance management for estate agency teams — personalised feedback, goal-setting frameworks, and sales methodology training. |
|
|
3836
|
+
| `estate-sales` | Sale-agreed to completion progression for UK residential sales agents. Headline workflow is chase-progression: daily ranked stalled-deal surfacing with tone-matched draft messages and per-message approval gates. Includes risk-scorer (fall-through risk scoring) plus sales-discovery, sales-closer, sales-negotiation, and sales-progression. |
|
|
3837
|
+
| `estate-teaching` | Structured education module browsing and delivery — curriculum navigation, module teaching, and learning progress tracking. |
|
|
3838
|
+
| `leads` | Daily morning round and lead-pipeline skills. Composes diary, awaiting-reply, overnight-enquiry triage, and stalled-deal surfacing into one snapshot, plus the chain-progression-tracker shared with chase-progression. |
|
|
3839
|
+
| `listings` | Valuation prep and new-instruction onboarding. Includes valuation-prep (comparable-finder, local-market-stats, pricing-scenario-builder, talk-track-composer) plus new-instruction (terms-of-business-drafter, supplier-booker, listing-copy-writer, particulars-builder, portal-launch-scheduler) and listing-presentation, property-marketing, home-preparation. |
|
|
3840
|
+
| `loop` | Loop CRM integration — full read/write access to all 8 resource groups: properties, people, viewings, feedback, team, marketing, customer preferences, and supplier operations. Cross-team aggregation with encrypted key storage. |
|
|
3841
|
+
| `preval` | Single-address pre-valuation pitch pack. One full UK address in, 5-page A4 PDF out (cover, subject valuation, market context, comparables, recently with brand). Consumes the `real-agent-property-data` MCP — no MCP tools of its own. |
|
|
3842
|
+
| `property-data` | PropertyData UK market analytics — postcode-keyed valuation, asking prices, sold prices, £/sqft baselines and growth, demand (sales + rent), yields, area risk (crime, flood), council tax, planning precedent, UPRN resolution, property-type mix, national HPI. One encrypted API key per account. |
|
|
3843
|
+
| `vendors` | Active vendor lifecycle management — communication, updates, valuation booking, and offer negotiation. |
|
|
3844
|
+
|
|
3845
|
+
All twelve subs are bundle members: they live at `premium-plugins/real-agent/plugins/<sub>/` and register via the resolver's bundle-descent walk. None of them is flat-copied into `platform/plugins/`.
|
|
3846
|
+
|
|
3847
|
+
---
|
|
3848
|
+
# Real Agent Architecture
|
|
3849
|
+
Source: https://docs.realagent.network/real-agent/architecture.md
|
|
3850
|
+
|
|
3851
|
+
# Real Agent Architecture
|
|
3852
|
+
|
|
3853
|
+
Real Agent runs on the Real Agent platform — same Pi-on-premise spawn model, same Neo4j graph, same admin/public agent split, same Claude native surface. The `real-agent` premium bundle layers UK estate-agency-specific workflows and connectors on top.
|
|
3854
|
+
|
|
3855
|
+
## Three-layer composition
|
|
3856
|
+
|
|
3857
|
+
```
|
|
3858
|
+
Plain-English request
|
|
3859
|
+
│
|
|
3860
|
+
▼
|
|
3861
|
+
Intent router (recognises the workflow)
|
|
3862
|
+
│
|
|
3863
|
+
▼
|
|
3864
|
+
Master workflow (one of five named jobs)
|
|
3865
|
+
│
|
|
3866
|
+
▼
|
|
3867
|
+
Building-block skills (auto-activated, never named to the operator)
|
|
3868
|
+
│
|
|
3869
|
+
▼
|
|
3870
|
+
Connectors (Loop CRM, PropertyData, portals, comms)
|
|
3871
|
+
```
|
|
3872
|
+
|
|
3873
|
+
The operator never picks a skill, never picks a connector, and never invokes a slash command. They describe what they need; the router finds the workflow; the workflow composes the skills; the skills read and write through the connectors.
|
|
3874
|
+
|
|
3875
|
+
## Approval gating
|
|
3876
|
+
|
|
3877
|
+
Every write action — message send, document e-sign, payment instruction, listing publication — pauses for explicit operator approval before it fires. The pause is presented as a chat-native prompt ("send these three reminders?" with yes/edit/skip per item). No write action ever runs unattended.
|
|
3878
|
+
|
|
3879
|
+
Read actions do not pause. The morning round produces a snapshot without asking permission to look.
|
|
3880
|
+
|
|
3881
|
+
## Specialist split
|
|
3882
|
+
|
|
3883
|
+
Five specialists ship with the bundle. Four (Negotiator, Valuer, Compliance, Listing Curator) are admin-side: they run inside the operator's session and are dispatched by intent. One (Buyer Enquiry) is public-side: it runs in the visitor-facing chat on the agency's published domain.
|
|
3884
|
+
|
|
3885
|
+
The admin-side specialists embed domain knowledge from the sub-plugins and operate against Loop CRM, the memory graph, and (for Compliance) live web search for current legislation. The public-side specialist runs on a restricted tool surface and answers only from the agency knowledge base.
|
|
3886
|
+
|
|
3887
|
+
## Per-account customization
|
|
3888
|
+
|
|
3889
|
+
Each Real Agent install carries its own customization profile: brand voice, knowledge-base spine, Loop CRM credentials, PropertyData API key, and the agent's territory. Profile changes happen through conversation with the admin agent, not through a settings UI.
|
|
3890
|
+
|
|
3891
|
+
---
|
|
3892
|
+
# Real Agent Workflows
|
|
3893
|
+
Source: https://docs.realagent.network/real-agent/workflows.md
|
|
3894
|
+
|
|
3895
|
+
# Real Agent Workflows
|
|
3896
|
+
|
|
3897
|
+
Five named workflows ship with the `real-agent` bundle. Each is invoked by intent — the operator describes what they need and the router selects the workflow.
|
|
3898
|
+
|
|
3899
|
+
## Morning Round
|
|
3900
|
+
|
|
3901
|
+
**Cadence:** Daily, Monday to Saturday.
|
|
3902
|
+
**Default delivery:** 07:30, channel per profile (Telegram, web, email).
|
|
3903
|
+
|
|
3904
|
+
A daily snapshot composing the diary for the day, awaiting-reply items, overnight enquiry triage, and stalled-deal surfacing — all in one ranked feed. The morning round also includes the chain-progression-tracker output for any deals with active chains.
|
|
3905
|
+
|
|
3906
|
+
## Valuation Prep
|
|
3907
|
+
|
|
3908
|
+
**Cadence:** Per appointment — a valuation or market appraisal is in the diary.
|
|
3909
|
+
**Default delivery:** On request, or auto-staged the evening before the appointment.
|
|
3910
|
+
|
|
3911
|
+
Comparable-finder, local-market-stats, pricing-scenario-builder, and talk-track-composer compose into a single brief the agent walks into the appointment with. Uses Loop CRM history, PropertyData postcode analytics, and recent sold-prices.
|
|
3912
|
+
|
|
3913
|
+
## New Instruction
|
|
3914
|
+
|
|
3915
|
+
**Cadence:** Per win — the agent has taken an instruction at a valuation.
|
|
3916
|
+
**Default delivery:** On request, within 24 hours of the appointment.
|
|
3917
|
+
|
|
3918
|
+
Five building blocks turn a verbal instruction into a fully-staged listing: terms-of-business-drafter, supplier-booker, listing-copy-writer, particulars-builder, portal-launch-scheduler. Each write step pauses for operator approval.
|
|
3919
|
+
|
|
3920
|
+
## Chase Progression
|
|
3921
|
+
|
|
3922
|
+
**Cadence:** Daily (auto, surfaced in morning round) and on-demand.
|
|
3923
|
+
**Default delivery:** Surfaced in morning round; expanded on request.
|
|
3924
|
+
|
|
3925
|
+
Ranks every stalled sale-agreed deal by fall-through risk (risk-scorer), surfaces the next action per deal, drafts tone-matched messages, and pauses on each one for per-message approval. Reuses chain-progression-tracker from the leads sub-plugin.
|
|
3926
|
+
|
|
3927
|
+
## Month-End Close
|
|
3928
|
+
|
|
3929
|
+
**Cadence:** Monthly — typically first working day after period end.
|
|
3930
|
+
**Default delivery:** On request or auto-staged on the first of the month.
|
|
3931
|
+
|
|
3932
|
+
Period-reconciler reconciles Loop CRM and accounting; commission-calculator runs the splits; payment-batch-stager queues the payments. Operator approves the batch before it fires.
|
|
3933
|
+
|
|
3934
|
+
## Single-address pitch pack
|
|
3935
|
+
|
|
3936
|
+
Outside the five master workflows, the `preval` sub-plugin produces a 5-page A4 PDF for any UK address (cover, subject valuation, market context, comparables, recently-with-brand). Used as a vendor pitch leave-behind. Consumes the `real-agent-property-data` MCP; no MCP tools of its own.
|
|
@@ -37,18 +37,26 @@ Plugins are installed and managed through conversation. You can add marketplace
|
|
|
37
37
|
|
|
38
38
|
## Roles
|
|
39
39
|
|
|
40
|
-
{{productName}}
|
|
40
|
+
{{productName}} ships twelve roles it can dispatch for specific tasks — like members of your team. You don't need to configure or manage them — {{productName}} decides when to use each role and handles everything automatically. You may see activity like "Dispatching personal-assistant..." in the chat timeline when this happens.
|
|
41
|
+
|
|
42
|
+
The catalogue below is what the platform ships. It is not evidence of what is installed on the current account. For the live install set on this account, ask {{productName}} to call `capabilities-here`.
|
|
41
43
|
|
|
42
44
|
| Role | What it does |
|
|
43
45
|
|------|-------------|
|
|
44
|
-
|
|
|
45
|
-
|
|
|
46
|
-
|
|
|
47
|
-
|
|
|
48
|
-
|
|
|
49
|
-
| Database Operator |
|
|
50
|
-
|
|
51
|
-
|
|
46
|
+
| Archive Ingest Operator | Ingests bulk external archives — Obsidian, ICS, X, Notion — and surfaces schema-mapping ambiguity rather than catching all unmapped relations as :MENTIONS. |
|
|
47
|
+
| Citation Auditor | Audits :TimelineEvent rows for missing citations and writes either citations directly or a CitationProposal stub. |
|
|
48
|
+
| Coding Assistant | Runs shell commands, drives git repositories, and reads or edits code on your behalf — the specialist you reach for when the work belongs in a developer terminal. |
|
|
49
|
+
| Compiled Truth Rewriter | Recomputes a node's compiledTruth (and public twin where applicable) from its 90-day timeline plus optional operator hints. |
|
|
50
|
+
| Content Producer | Produces visual output from your graph: generates images, renders pages to PDF, and hosts static websites you upload as a zip. |
|
|
51
|
+
| Database Operator | Executes graph writes on admin's behalf when delegated via the Task tool — admin names each write, the specialist runs it. |
|
|
52
|
+
| Librarian | Owns foreground ingest of documents, conversation transcripts, and external archives into the memory graph. |
|
|
53
|
+
| Personal Assistant | Handles the operational tasks you'd give a personal assistant: scheduling meetings, managing your platform settings, connecting messaging channels, and completing browser-based tasks on your behalf. |
|
|
54
|
+
| Project Manager | Manages your tasks, projects, sessions, and workflows: linking work to people and goals, and keeping everything organised. |
|
|
55
|
+
| Public Session Reviewer | Reads a gated public-agent transcript and dispatches database-operator for each per-visitor memory write. |
|
|
56
|
+
| Research Assistant | Researches topics online, manages your knowledge graph, and produces supporting visuals. |
|
|
57
|
+
| Typed Edge Classifier | Reads recently-written prose nodes and writes typed edges from a closed allowlist. |
|
|
58
|
+
|
|
59
|
+
Roles are installed during setup and listed when {{productName}} introduces itself. Some premium bundles add their own specialists (e.g. the `real-agent` bundle adds a listing curator, negotiator, valuer, compliance officer, and buyer-enquiry public agent). Roles installed mid-session become active from the next session.
|
|
52
60
|
|
|
53
61
|
## Memory
|
|
54
62
|
|
|
@@ -122,6 +130,8 @@ Each session row also carries a small muted timestamp crumb under the name showi
|
|
|
122
130
|
|
|
123
131
|
`verified=true` requires `master-fd=closed` AND `fdDelta>=1` AND `trackerRemoved=true`. `master-fd=close-failed` is logged at error level (`[rc-spawn-error]` prefix) — never swallowed; the next post-archive sweep is the catch-net.
|
|
124
132
|
|
|
133
|
+
**Cross-arm `[rc-life]` schema (Task 562).** Both rc-spawn arms (the legacy node-pty one above and a new isolated `script-scope` arm exposed via the dashboard A/B toggle next to "New session") plus the rc-daemon emit a shared log shape so the populations can be compared from `server.log` alone. One spawn's full lifeline is `grep <unitToken>`; one arm's signature is `grep 'source=<arm>'`. The new `script-scope` arm spawns via the daemon's mechanism — `systemdSpawn` + the same `script(1)` wrap — and the manager holds zero fds. Capture files are retained at `~/.<brand>/logs/spawn-<unitToken>.log` for post-mortem. Full schema and operator runbook in [`.docs/rc-life-observability.md`](../../../.docs/rc-life-observability.md).
|
|
134
|
+
|
|
125
135
|
**Post-archive fd sweep (Task 558).** Independent of spawn/archive request traffic, the manager runs a 60 s sweep that walks both directions of the master-fd invariant:
|
|
126
136
|
|
|
127
137
|
- `[fd-audit] op=orphan-master sessionId=<8> pid=<n> archivedAt=<ms> heldSinceArchiveMs=<n> fd=<n|unknown>` — fires per tracker whose row is archived (the leak).
|
|
@@ -6,6 +6,8 @@ A plugin extends what {{productName}} can do. Each plugin adds a focused capabil
|
|
|
6
6
|
|
|
7
7
|
{{productName}}'s own capabilities are plugins too. Marketplace plugins (like Stripe) work the same way — {{productName}} manages all of them through conversation.
|
|
8
8
|
|
|
9
|
+
The tables below are the install catalogue — every plugin the platform can ship. They are not evidence of what is enabled on the current account. For the live install set, ask {{productName}} to call `capabilities-here`.
|
|
10
|
+
|
|
9
11
|
## Plugin Groups
|
|
10
12
|
|
|
11
13
|
### Core (always active)
|