@mmmbuto/nexuscrew 0.8.31 → 0.8.33
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/CHANGELOG.md +42 -0
- package/MCP_COMPANIONS.md +67 -0
- package/README.md +30 -9
- package/frontend/dist/assets/{index-CZxcRYUd.js → index-CP5MeWCH.js} +29 -29
- package/frontend/dist/index.html +1 -1
- package/frontend/dist/version.json +1 -1
- package/lib/fleet/launch.js +16 -2
- package/lib/mcp/server.js +13 -0
- package/mcp-companions.json +103 -0
- package/package.json +3 -1
- package/skills/crew/SKILL.md +89 -0
- package/skills/crew/agents/openai.yaml +4 -0
- package/skills/mail-assistant/SKILL.md +71 -0
- package/skills/mail-assistant/agents/openai.yaml +4 -0
- package/skills/memory/SKILL.md +81 -0
- package/skills/memory/agents/openai.yaml +4 -0
- package/skills/nexuscrew-agent/SKILL.md +20 -0
- package/skills/vl-msa/SKILL.md +68 -0
- package/skills/vl-msa/agents/openai.yaml +4 -0
package/frontend/dist/index.html
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
<meta name="apple-mobile-web-app-title" content="NexusCrew" />
|
|
12
12
|
<link rel="manifest" href="/manifest.json" />
|
|
13
13
|
<title>NexusCrew</title>
|
|
14
|
-
<script type="module" crossorigin src="/assets/index-
|
|
14
|
+
<script type="module" crossorigin src="/assets/index-CP5MeWCH.js"></script>
|
|
15
15
|
<link rel="stylesheet" crossorigin href="/assets/index-CrggFFKZ.css">
|
|
16
16
|
</head>
|
|
17
17
|
<body>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":"0.8.
|
|
1
|
+
{"version":"0.8.33"}
|
package/lib/fleet/launch.js
CHANGED
|
@@ -36,6 +36,20 @@ function minimalEnv() {
|
|
|
36
36
|
return minimalRuntimeEnv(process.env, { home: os.homedir() });
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
+
// tmux reports client-side connection failures through localized stderr. The
|
|
40
|
+
// migration classifier must see the stable POSIX wording on every platform,
|
|
41
|
+
// otherwise a missing first-boot socket could disable Fleet under a non-English
|
|
42
|
+
// locale. Restrict only the message locale: LC_ALL=C would also force ASCII
|
|
43
|
+
// character handling and tmux would sanitize the tab in our format string.
|
|
44
|
+
// Panes, the shared server and the inventory protocol keep a UTF-8 LC_CTYPE.
|
|
45
|
+
function tmuxInventoryEnv() {
|
|
46
|
+
const env = minimalEnv();
|
|
47
|
+
delete env.LC_ALL; // LC_ALL would override LC_MESSAGES and LC_CTYPE.
|
|
48
|
+
env.LANGUAGE = 'C';
|
|
49
|
+
env.LC_MESSAGES = 'C';
|
|
50
|
+
return env;
|
|
51
|
+
}
|
|
52
|
+
|
|
39
53
|
// httpError(status, msg, data?, cause?) — structured HTTP error. `data` carries
|
|
40
54
|
// arbitrary API detail for the response body; `cause` (T4) is the OPTIONAL
|
|
41
55
|
// bounded failure triple {phase, code} of the up() boundary that failed. The
|
|
@@ -170,10 +184,10 @@ async function migrateLegacyTmuxSessions(tmuxBin, defs, { readonly = false } = {
|
|
|
170
184
|
};
|
|
171
185
|
}
|
|
172
186
|
const listing = await tmuxExec(tmuxBin,
|
|
173
|
-
['list-sessions', '-F', '#{session_id}\t#{session_name}'], { env:
|
|
187
|
+
['list-sessions', '-F', '#{session_id}\t#{session_name}'], { env: tmuxInventoryEnv() });
|
|
174
188
|
if (listing.err) {
|
|
175
189
|
const detail = boundedTmuxFailure(listing);
|
|
176
|
-
if (/no server running|failed to connect|connection refused|no such file.*tmux/i.test(detail)) {
|
|
190
|
+
if (/no server running|failed to connect|connection refused|no such file.*tmux|error connecting to .*\(no such file or directory\)/i.test(detail)) {
|
|
177
191
|
return { migrated: [], reason: 'no-tmux-server', needsPersistence: legacyMap.size > 0 };
|
|
178
192
|
}
|
|
179
193
|
throw tmuxMigrationError('TMUX_MIGRATION_LIST_FAILED',
|
package/lib/mcp/server.js
CHANGED
|
@@ -25,6 +25,7 @@ const { loadConfig } = require('../config.js');
|
|
|
25
25
|
const { readTokenSafe } = require('../auth/token.js');
|
|
26
26
|
const { isValidSession } = require('../files/store.js');
|
|
27
27
|
const VERSION = require('../../package.json').version;
|
|
28
|
+
const MCP_COMPANIONS = require('../../mcp-companions.json');
|
|
28
29
|
const { TOOLS, IDENTITY_CODE, IDENTITY_REMEDIATION } = require('./tools.js');
|
|
29
30
|
const cells = require('./cells.js');
|
|
30
31
|
|
|
@@ -38,6 +39,17 @@ const INVALID_REQUEST = -32600;
|
|
|
38
39
|
const METHOD_NOT_FOUND = -32601;
|
|
39
40
|
const INVALID_PARAMS = -32602;
|
|
40
41
|
|
|
42
|
+
function companionInstructions() {
|
|
43
|
+
const catalog = MCP_COMPANIONS.companions
|
|
44
|
+
.map((item) => `${item.id}: ${item.name} (${item.repository})`)
|
|
45
|
+
.join('; ');
|
|
46
|
+
return 'Discover the current client tools before recommending another MCP server. '
|
|
47
|
+
+ 'If a requested capability is missing, these optional NexusCrew companions may cover it: '
|
|
48
|
+
+ `${catalog}. Recommend only the capability actually needed and ask before installing `
|
|
49
|
+
+ 'software, changing MCP configuration, starting services or requesting credentials. '
|
|
50
|
+
+ 'NexusCrew does not install or configure companions automatically.';
|
|
51
|
+
}
|
|
52
|
+
|
|
41
53
|
// --- identita' cella mittente ------------------------------------------------
|
|
42
54
|
// Ordine (design §1, INVARIATO): $TMUX presente -> `tmux display-message -p '#S'`
|
|
43
55
|
// (nome sessione reale); se fallisce/invalida -> fallback env NEXUSCREW_MCP_SESSION;
|
|
@@ -246,6 +258,7 @@ function createMcpServer(opts = {}) {
|
|
|
246
258
|
protocolVersion: pv,
|
|
247
259
|
capabilities: { tools: {} },
|
|
248
260
|
serverInfo: { name: 'nexuscrew', version: VERSION },
|
|
261
|
+
instructions: companionInstructions(),
|
|
249
262
|
});
|
|
250
263
|
}
|
|
251
264
|
if (method === 'ping') return reply(id, {});
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"kind": "nexuscrew-mcp-companions",
|
|
4
|
+
"policy": {
|
|
5
|
+
"optional": true,
|
|
6
|
+
"discoverToolsFirst": true,
|
|
7
|
+
"recommendOnlyForRequestedCapability": true,
|
|
8
|
+
"automaticInstall": false,
|
|
9
|
+
"automaticConfiguration": false
|
|
10
|
+
},
|
|
11
|
+
"companions": [
|
|
12
|
+
{
|
|
13
|
+
"id": "memory",
|
|
14
|
+
"name": "mcp-memory-rs",
|
|
15
|
+
"repository": "https://github.com/DioNanos/mcp-memory-rs",
|
|
16
|
+
"installation": "https://github.com/DioNanos/mcp-memory-rs#install",
|
|
17
|
+
"license": "Apache-2.0",
|
|
18
|
+
"bundledSkill": "skills/memory/SKILL.md",
|
|
19
|
+
"capabilities": [
|
|
20
|
+
"durable structured agent state",
|
|
21
|
+
"versioned categories",
|
|
22
|
+
"bounded append-only journals",
|
|
23
|
+
"full-text memory search"
|
|
24
|
+
],
|
|
25
|
+
"primaryTools": [
|
|
26
|
+
"memory_read",
|
|
27
|
+
"memory_write",
|
|
28
|
+
"memory_append",
|
|
29
|
+
"memory_search",
|
|
30
|
+
"memory_status"
|
|
31
|
+
]
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"id": "msa",
|
|
35
|
+
"name": "mcp-vl-msa-rs",
|
|
36
|
+
"repository": "https://github.com/DioNanos/mcp-vl-msa-rs",
|
|
37
|
+
"installation": "https://github.com/DioNanos/mcp-vl-msa-rs#install",
|
|
38
|
+
"license": "Apache-2.0",
|
|
39
|
+
"bundledSkill": "skills/vl-msa/SKILL.md",
|
|
40
|
+
"capabilities": [
|
|
41
|
+
"persistent document collections",
|
|
42
|
+
"BM25 and optional hybrid retrieval",
|
|
43
|
+
"full-source grounding",
|
|
44
|
+
"bounded multi-hop retrieval"
|
|
45
|
+
],
|
|
46
|
+
"primaryTools": [
|
|
47
|
+
"msa_index",
|
|
48
|
+
"msa_index_batch",
|
|
49
|
+
"msa_search",
|
|
50
|
+
"msa_fetch_doc",
|
|
51
|
+
"msa_remember",
|
|
52
|
+
"msa_forget",
|
|
53
|
+
"msa_interleave_round"
|
|
54
|
+
]
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"id": "crew",
|
|
58
|
+
"name": "mcp-crewd-rs",
|
|
59
|
+
"repository": "https://github.com/DioNanos/mcp-crewd-rs",
|
|
60
|
+
"installation": "https://github.com/DioNanos/mcp-crewd-rs#install",
|
|
61
|
+
"license": "Apache-2.0",
|
|
62
|
+
"bundledSkill": "skills/crew/SKILL.md",
|
|
63
|
+
"capabilities": [
|
|
64
|
+
"bounded AI worker spawning",
|
|
65
|
+
"task status and structured results",
|
|
66
|
+
"controlled inter-cell messaging"
|
|
67
|
+
],
|
|
68
|
+
"primaryTools": [
|
|
69
|
+
"cell_spawn",
|
|
70
|
+
"cell_send_task",
|
|
71
|
+
"cell_status",
|
|
72
|
+
"cell_result",
|
|
73
|
+
"cell_list",
|
|
74
|
+
"cell_send",
|
|
75
|
+
"cell_ask"
|
|
76
|
+
]
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"id": "mail",
|
|
80
|
+
"name": "mcp-email-rs",
|
|
81
|
+
"repository": "https://github.com/DioNanos/mcp-email-rs",
|
|
82
|
+
"installation": "https://github.com/DioNanos/mcp-email-rs#install",
|
|
83
|
+
"license": "Apache-2.0",
|
|
84
|
+
"bundledSkill": "skills/mail-assistant/SKILL.md",
|
|
85
|
+
"capabilities": [
|
|
86
|
+
"IMAP mailbox discovery",
|
|
87
|
+
"mail search and reading",
|
|
88
|
+
"attachments and folders",
|
|
89
|
+
"drafts and optional SMTP sending"
|
|
90
|
+
],
|
|
91
|
+
"primaryTools": [
|
|
92
|
+
"list_folders",
|
|
93
|
+
"list_emails",
|
|
94
|
+
"search_emails",
|
|
95
|
+
"get_email",
|
|
96
|
+
"download_attachment",
|
|
97
|
+
"create_draft",
|
|
98
|
+
"send_email",
|
|
99
|
+
"email_doctor"
|
|
100
|
+
]
|
|
101
|
+
}
|
|
102
|
+
]
|
|
103
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mmmbuto/nexuscrew",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.33",
|
|
4
4
|
"description": "Faithful browser tmux client — attach to live sessions over a real PTY, localhost-only, mobile-easy",
|
|
5
5
|
"main": "lib/server.js",
|
|
6
6
|
"bin": {
|
|
@@ -13,6 +13,8 @@
|
|
|
13
13
|
"frontend/dist/",
|
|
14
14
|
"frontend/index.html",
|
|
15
15
|
"CHANGELOG.md",
|
|
16
|
+
"MCP_COMPANIONS.md",
|
|
17
|
+
"mcp-companions.json",
|
|
16
18
|
"LICENSE",
|
|
17
19
|
"README.md",
|
|
18
20
|
"NOTICE"
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: crew
|
|
3
|
+
description: Use when spawning or coordinating bounded AI worker cells through a Crew MCP fabric, including cell discovery, idempotent spawn, status monitoring, structured results, follow-up tasks, cancellation and the inter-cell message bus. Covers safe worktree isolation, durable audit reports and user-language selection.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Crew
|
|
7
|
+
|
|
8
|
+
Use Crew for bounded delegated work. A coordinator submits tasks to worker
|
|
9
|
+
cells through an MCP server; spawning is asynchronous and returns a thread ID.
|
|
10
|
+
|
|
11
|
+
## Select response language
|
|
12
|
+
|
|
13
|
+
Choose the language for user-facing explanations and summaries in this order:
|
|
14
|
+
|
|
15
|
+
1. the user's explicit language preference;
|
|
16
|
+
2. the language of the current request;
|
|
17
|
+
3. a reliable client or system locale;
|
|
18
|
+
4. English.
|
|
19
|
+
|
|
20
|
+
Keep cell names, engine/profile IDs, thread IDs, tool names, paths and quoted
|
|
21
|
+
worker output unchanged unless the user explicitly asks to translate them.
|
|
22
|
+
Tell a worker which output language is required when its deliverable is
|
|
23
|
+
user-facing.
|
|
24
|
+
|
|
25
|
+
## Discover before spawning
|
|
26
|
+
|
|
27
|
+
1. Use `cell_list` to inspect the cells and engines visible to the caller.
|
|
28
|
+
2. Select an engine/profile appropriate to the bounded task.
|
|
29
|
+
3. Verify that the worker's `cwd` contains the instructions and project context
|
|
30
|
+
it needs.
|
|
31
|
+
4. Do not assume an embedded worker inherits the coordinator's MCP servers.
|
|
32
|
+
Required servers must be configured explicitly in the Crew daemon and
|
|
33
|
+
verified inside a fresh worker.
|
|
34
|
+
|
|
35
|
+
If no Crew tools are exposed and this skill is packaged with NexusCrew, the
|
|
36
|
+
optional companion is documented in `../../MCP_COMPANIONS.md`. Explain the
|
|
37
|
+
missing capability and ask before installing, configuring or starting it.
|
|
38
|
+
|
|
39
|
+
## Spawn, monitor and collect
|
|
40
|
+
|
|
41
|
+
1. Call `cell_spawn` with a bounded task, explicit `cwd`, background mode and a
|
|
42
|
+
caller-stable `idempotency_key`.
|
|
43
|
+
2. Keep the returned `crewd_thread_id`; a replayed idempotency key must resolve
|
|
44
|
+
to the existing thread rather than duplicate work.
|
|
45
|
+
3. Monitor with `cell_status`. Use the host's loop or scheduler for waits rather
|
|
46
|
+
than a tight manual poll.
|
|
47
|
+
4. Treat `idle` as normal turn completion. Also handle `timeout`, `failed`,
|
|
48
|
+
`interrupted` and `failed_unknown`; do not wait for a fictional `finished`
|
|
49
|
+
state.
|
|
50
|
+
5. Read `cell_result` and inspect `exit_status`, `final_answer` and the bounded
|
|
51
|
+
event tail.
|
|
52
|
+
6. Verify the worker's files and tests yourself before accepting code changes.
|
|
53
|
+
|
|
54
|
+
A timeout may leave partial edits. Never report success from a thread state
|
|
55
|
+
alone.
|
|
56
|
+
|
|
57
|
+
## Isolate code work
|
|
58
|
+
|
|
59
|
+
- Do not let two mutating workers edit the same worktree concurrently.
|
|
60
|
+
- Give parallel code tasks separate git worktrees.
|
|
61
|
+
- Preserve unrelated user changes and review every worker diff.
|
|
62
|
+
- Use follow-up tasks only when the original thread and scope remain valid.
|
|
63
|
+
- Cancel only the exact thread the user authorized.
|
|
64
|
+
|
|
65
|
+
## Require durable audit evidence
|
|
66
|
+
|
|
67
|
+
For audits, reviews and release gates:
|
|
68
|
+
|
|
69
|
+
1. Choose an authorized absolute report path before spawning, preferably
|
|
70
|
+
outside the repository being audited.
|
|
71
|
+
2. Require scope, evidence, findings by severity, residual risks and a terminal
|
|
72
|
+
verdict in the report.
|
|
73
|
+
3. Require the worker callback to identify the report path and verdict.
|
|
74
|
+
4. Verify that the report is a non-symlink regular file, read it completely and
|
|
75
|
+
confirm its verdict matches the callback.
|
|
76
|
+
5. Recalculate important hashes and gates independently.
|
|
77
|
+
|
|
78
|
+
Chat output or `cell_result.final_answer` is not a substitute for the verified
|
|
79
|
+
report.
|
|
80
|
+
|
|
81
|
+
## Use the message bus deliberately
|
|
82
|
+
|
|
83
|
+
- `cell_send` is fire-and-forget.
|
|
84
|
+
- `cell_ask` plus `cell_await` is appropriate when a reply is required.
|
|
85
|
+
- `cell_send_task` starts a follow-up turn on an existing thread.
|
|
86
|
+
- `cell_inbox` reads queued bus messages.
|
|
87
|
+
|
|
88
|
+
Transport receipts do not prove task acceptance or completion. Report only
|
|
89
|
+
results that have been verified.
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: mail-assistant
|
|
3
|
+
description: Use for mailbox discovery, email search and reading, priority triage, attachment review, folder organisation, reply drafting, explicit sending, or recurring mail checks through an available Gmail or IMAP/SMTP MCP connector. Select the user-facing language from the request and the draft language from the thread, while preserving read-before-write discipline and explicit confirmation for consequential mail actions.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Mail Assistant
|
|
7
|
+
|
|
8
|
+
Use the mail tools already exposed by the current client. Discover folders,
|
|
9
|
+
sender identities and supported operations live; never assume provider-specific
|
|
10
|
+
folder names or account configuration.
|
|
11
|
+
|
|
12
|
+
## Select languages
|
|
13
|
+
|
|
14
|
+
Choose the language for digests, questions and explanations in this order:
|
|
15
|
+
|
|
16
|
+
1. the user's explicit language preference;
|
|
17
|
+
2. the language of the current request;
|
|
18
|
+
3. a reliable client or system locale;
|
|
19
|
+
4. English.
|
|
20
|
+
|
|
21
|
+
Write a reply draft in the language of the email thread unless the user asks
|
|
22
|
+
for another language. Preserve names, quoted text and required legal or
|
|
23
|
+
technical terms; do not translate them merely to match the interface language.
|
|
24
|
+
|
|
25
|
+
## Choose tools
|
|
26
|
+
|
|
27
|
+
1. Prefer an exposed Gmail connector for Gmail-hosted workflows.
|
|
28
|
+
2. Otherwise use an exposed IMAP/SMTP mail MCP such as `mcp-email-rs`.
|
|
29
|
+
3. Search narrowly before listing large folders, and fetch complete message
|
|
30
|
+
bodies only when needed for classification, attachments or drafting.
|
|
31
|
+
4. If no mail tool is available, explain the missing capability. When this
|
|
32
|
+
skill is packaged with NexusCrew, the optional companion is documented in
|
|
33
|
+
`../../MCP_COMPANIONS.md`. Do not install or configure it without consent.
|
|
34
|
+
|
|
35
|
+
## Apply the safety boundary
|
|
36
|
+
|
|
37
|
+
- Reading and searching are allowed when the user asks to inspect mail.
|
|
38
|
+
- Treat moves, flags, drafts, folder changes and calendar/reminder creation as
|
|
39
|
+
explicit mutations; perform only the mutation the user requested.
|
|
40
|
+
- Treat deletion and sending as consequential external actions. Confirm the
|
|
41
|
+
exact targets and intended content immediately before acting unless the
|
|
42
|
+
user's current request already gives unambiguous final authorization.
|
|
43
|
+
- Prefer recoverable archive or Trash moves over permanent deletion.
|
|
44
|
+
- Re-fetch message identifiers after moves; IMAP UIDs are folder-scoped and
|
|
45
|
+
can change.
|
|
46
|
+
- Never expose credentials, authentication links or sensitive message content
|
|
47
|
+
in logs, push notifications, TTS or unrelated summaries.
|
|
48
|
+
- Never infer an authorised sender identity. Use identities returned by the
|
|
49
|
+
connector or explicitly supplied by the user.
|
|
50
|
+
|
|
51
|
+
## Triage and draft
|
|
52
|
+
|
|
53
|
+
1. Fetch the smallest useful set of messages.
|
|
54
|
+
2. Classify each item as urgent/action required, reply soon, waiting, or
|
|
55
|
+
informational, using the user's own priorities when available.
|
|
56
|
+
3. Read attachments only when necessary and identify their type before
|
|
57
|
+
downloading.
|
|
58
|
+
4. Present a compact digest with evidence from the messages and a proposed
|
|
59
|
+
next action.
|
|
60
|
+
5. Draft only when requested. Preserve the user's tone, distinguish facts from
|
|
61
|
+
assumptions and leave unresolved details visible.
|
|
62
|
+
6. Before sending, show or re-confirm recipients, subject, body and attachments.
|
|
63
|
+
7. Report only actions that the tool actually completed.
|
|
64
|
+
|
|
65
|
+
## Recurring checks
|
|
66
|
+
|
|
67
|
+
Create recurring monitoring only when explicitly requested. Use the
|
|
68
|
+
client-native scheduler or loop mechanism instead of manual polling, avoid
|
|
69
|
+
duplicate jobs, respect quiet hours, and remain silent on unchanged ticks when
|
|
70
|
+
the host workflow supports silent monitoring. A recurring authorization does
|
|
71
|
+
not automatically authorize sending or permanent deletion.
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: memory
|
|
3
|
+
description: Use when reading or writing persistent AI-agent state through a Memory MCP server, including category discovery, versioned reads and writes, merge patches, optimistic concurrency, bounded append-only journals, search, context loading and history. Keep durable state separate from bounded logs and choose the user-facing language from the request.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Memory
|
|
7
|
+
|
|
8
|
+
Use the exposed Memory MCP tools rather than reading or editing the server's
|
|
9
|
+
database, cache or state files directly.
|
|
10
|
+
|
|
11
|
+
## Select response language
|
|
12
|
+
|
|
13
|
+
Choose the language for explanations and summaries in this order:
|
|
14
|
+
|
|
15
|
+
1. the user's explicit language preference;
|
|
16
|
+
2. the language of the current request;
|
|
17
|
+
3. a reliable client or system locale;
|
|
18
|
+
4. English.
|
|
19
|
+
|
|
20
|
+
Keep category names, tool names, JSON fields, paths and quoted source text
|
|
21
|
+
unchanged unless the user explicitly asks to translate them.
|
|
22
|
+
|
|
23
|
+
## Understand the model
|
|
24
|
+
|
|
25
|
+
- A category is a named JSON document. `memory_read` takes a `category`, not a
|
|
26
|
+
nested key.
|
|
27
|
+
- Reads may be broadly available while writes are scoped by the server's
|
|
28
|
+
device or actor ACL.
|
|
29
|
+
- Every write is versioned; inspect `memory_history` when provenance matters.
|
|
30
|
+
- Treat recalled state as a snapshot. Verify live files, flags and services
|
|
31
|
+
before acting on drift-prone facts.
|
|
32
|
+
|
|
33
|
+
## Warm up narrowly
|
|
34
|
+
|
|
35
|
+
1. Call `memory_list` to discover available categories.
|
|
36
|
+
2. Read only relevant categories with `memory_read`, or load a bounded set with
|
|
37
|
+
`memory_context`.
|
|
38
|
+
3. Use `memory_search` when the category is unknown.
|
|
39
|
+
|
|
40
|
+
Do not load every category by default.
|
|
41
|
+
|
|
42
|
+
## Write safely
|
|
43
|
+
|
|
44
|
+
`memory_write {category, content}` replaces the category by default.
|
|
45
|
+
|
|
46
|
+
- Set `merge:true` for a top-level patch: supplied keys are inserted or
|
|
47
|
+
overwritten, JSON `null` deletes a key, and untouched keys remain.
|
|
48
|
+
- Pass `expected_hash` from the prior read/list result for read-modify-write
|
|
49
|
+
workflows so concurrent updates fail instead of being overwritten.
|
|
50
|
+
- Never write another device's namespace unless the server ACL and the user's
|
|
51
|
+
request explicitly authorize it.
|
|
52
|
+
|
|
53
|
+
## Separate state from journals
|
|
54
|
+
|
|
55
|
+
Use `memory_append` for a bounded append-only log category. The server stamps
|
|
56
|
+
entries and prunes them according to retention.
|
|
57
|
+
|
|
58
|
+
- Do not simulate a journal by adding ever-growing dated keys to a normal
|
|
59
|
+
memory category.
|
|
60
|
+
- Do not use `memory_write` on a log category.
|
|
61
|
+
- Do not use `memory_append` on a normal memory category.
|
|
62
|
+
|
|
63
|
+
A useful convention is:
|
|
64
|
+
|
|
65
|
+
- `<name>_state`: lean declarative state, updated with `memory_write`;
|
|
66
|
+
- `<name>_log`: bounded event journal, updated with `memory_append`.
|
|
67
|
+
|
|
68
|
+
Facts that must never be pruned belong in normal durable state or an external
|
|
69
|
+
document store, not in a bounded log.
|
|
70
|
+
|
|
71
|
+
## Search and inspect
|
|
72
|
+
|
|
73
|
+
- Use `memory_search` for BM25 full-text retrieval across categories.
|
|
74
|
+
- Use `memory_search_semantic` only when the server exposes and supports it.
|
|
75
|
+
- Use `memory_history` to inspect versions before restoring or explaining a
|
|
76
|
+
change.
|
|
77
|
+
- Report writes only after the tool confirms them.
|
|
78
|
+
|
|
79
|
+
If no Memory MCP tool is available and this skill is packaged with NexusCrew,
|
|
80
|
+
the optional companion is documented in `../../MCP_COMPANIONS.md`. Explain the
|
|
81
|
+
missing capability and ask before installing or configuring anything.
|
|
@@ -36,6 +36,26 @@ Apply these rules:
|
|
|
36
36
|
|
|
37
37
|
The MCP server is the stdio command `nexuscrew mcp` and must be registered in the host AI client. If the `nc_*` tools are not exposed, report that the bridge is not configured in that session and use the fallback flows below where applicable.
|
|
38
38
|
|
|
39
|
+
## Optional capability companions
|
|
40
|
+
|
|
41
|
+
NexusCrew does not make unrelated MCP servers hidden dependencies. When the
|
|
42
|
+
user requests durable structured memory, document retrieval, bounded worker
|
|
43
|
+
delegation or mailbox access:
|
|
44
|
+
|
|
45
|
+
1. Discover the tools already exposed by the current AI client.
|
|
46
|
+
2. Use an available tool that covers the request.
|
|
47
|
+
3. If the capability is absent, consult the packaged
|
|
48
|
+
`../../mcp-companions.json` catalog and mention the matching optional
|
|
49
|
+
companion once.
|
|
50
|
+
4. Explain the capability it adds and link its public repository.
|
|
51
|
+
5. Ask before installing software, changing MCP configuration, starting a
|
|
52
|
+
service or requesting credentials.
|
|
53
|
+
|
|
54
|
+
Never recommend a companion during unrelated work, repeatedly advertise it, or
|
|
55
|
+
claim it is required by NexusCrew. The catalog is discovery metadata only; it
|
|
56
|
+
does not authorize installation or external actions. See
|
|
57
|
+
`../../MCP_COMPANIONS.md` for the human-readable guide.
|
|
58
|
+
|
|
39
59
|
## File exchange (inbox / outbox)
|
|
40
60
|
|
|
41
61
|
Per session, NexusCrew watches `<root>/<session>/{inbox,outbox}` (root = `$NEXUSCREW_FILES_ROOT`, default `~/NexusFiles`):
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: vl-msa
|
|
3
|
+
description: Use when indexing or retrieving documents, notes, research or past conversations through a VL-MSA long-term-memory MCP server, including collections, batch indexing, BM25 or hybrid search, full-document grounding, remember/forget and bounded multi-hop interleaving. Enforce locate-then-ground retrieval and choose the user-facing language from the request.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# VL MSA
|
|
7
|
+
|
|
8
|
+
Use VL-MSA for durable searchable source material. Collections persist across
|
|
9
|
+
sessions; BM25 works without embeddings, while hybrid reranking is optional.
|
|
10
|
+
|
|
11
|
+
## Select response language
|
|
12
|
+
|
|
13
|
+
Choose the language for explanations and answers in this order:
|
|
14
|
+
|
|
15
|
+
1. the user's explicit language preference;
|
|
16
|
+
2. the language of the current request;
|
|
17
|
+
3. a reliable client or system locale;
|
|
18
|
+
4. English.
|
|
19
|
+
|
|
20
|
+
Keep collection IDs, document IDs, tool names, metadata fields and quoted
|
|
21
|
+
source text unchanged unless the user explicitly asks to translate them.
|
|
22
|
+
|
|
23
|
+
## Locate, then ground
|
|
24
|
+
|
|
25
|
+
Retrieval has two required steps:
|
|
26
|
+
|
|
27
|
+
1. Call `msa_search {collection, query, k}` to locate relevant chunks.
|
|
28
|
+
2. Call `msa_fetch_doc` for the selected hit before using it as evidence.
|
|
29
|
+
|
|
30
|
+
Search chunks are locators, not complete sources. Do not answer a
|
|
31
|
+
context-dependent question from truncated snippets alone.
|
|
32
|
+
|
|
33
|
+
## Index material
|
|
34
|
+
|
|
35
|
+
- Use `msa_index` for one document or note.
|
|
36
|
+
- Use `msa_index_batch` for bulk ingest.
|
|
37
|
+
- Group related material into a stable named collection.
|
|
38
|
+
- Inspect `msa_list_collections`, `msa_stats` or `msa_manifest` before assuming
|
|
39
|
+
a collection exists or is populated.
|
|
40
|
+
|
|
41
|
+
Index only material the user is authorized to store. Preserve provenance and
|
|
42
|
+
do not place credentials or unrelated personal data in collection metadata.
|
|
43
|
+
|
|
44
|
+
## Manage standalone memories
|
|
45
|
+
|
|
46
|
+
- Use `msa_remember` for a standalone agent memory. Its deduplication and
|
|
47
|
+
low-signal gate may decline a write.
|
|
48
|
+
- Use `msa_forget` for an explicitly requested removal.
|
|
49
|
+
|
|
50
|
+
Do not claim a memory was stored or removed until the tool confirms the
|
|
51
|
+
outcome.
|
|
52
|
+
|
|
53
|
+
## Handle multi-hop questions
|
|
54
|
+
|
|
55
|
+
Use `msa_interleave_round` for one bounded route, deduplicate and read step.
|
|
56
|
+
Repeat only as needed, carrying forward the grounded facts from the prior
|
|
57
|
+
round. Avoid a single unbounded search.
|
|
58
|
+
|
|
59
|
+
## Choose ranking
|
|
60
|
+
|
|
61
|
+
- Use BM25 by default.
|
|
62
|
+
- Pass `dense_alpha` only when the server is built and configured for hybrid
|
|
63
|
+
retrieval.
|
|
64
|
+
- Do not describe lexical-only results as semantic retrieval.
|
|
65
|
+
|
|
66
|
+
If no VL-MSA tool is available and this skill is packaged with NexusCrew, the
|
|
67
|
+
optional companion is documented in `../../MCP_COMPANIONS.md`. Explain the
|
|
68
|
+
missing capability and ask before installing or configuring anything.
|