Host-side netx__kb* tools jail create/update/delete under paths.local memories/drafts/suggestions; Netx Ops agent.cordis.yml now includes full standard capability rows plus ops tools. Co-authored-by: Cursor <cursoragent@cursor.com>
4 KiB
Knowledge base
Operator-subset knowledge packages are wired through netxops settings, not into the netx API or netx-ops skill text.
Role split
| Surface | Responsibility |
|---|---|
netx-ops |
Live netx evidence (alarms / inventory / CLI) — pure netx, no KB playbooks |
kb-context |
Identity annotation from MANIFEST (KB_*) |
_skills/kb-* |
Shared operator KB triage / ingest / retrieve / export / package |
paths.localSkills |
Operator-local skills (alongside _skills/; same toggles) |
Setup
- Settings → Plugins → Netx Ops → 知识库 / Knowledge base
- Browse (or paste) a folder that contains (or uniquely nests ≤3 levels) a
MANIFEST.json— browse auto-saves - Leave 知识库技能 → 在 Netx Ops 预设中启用 on (default) so
_skills/kb-*register into Netx Ops sessions - Optionally enable 对其他预设公开 to publish those pack skills on the host public skill layer
MANIFEST v1.0 (plugin checks)
| Field | Rule |
|---|---|
schemaVersion |
must be "1.0" |
packageType |
must be "operator-subset" |
operator.name / operator.country |
required non-empty strings |
version |
required non-empty string |
content.* |
booleans; contract keys hasRegions / hasTheory / hasPacket / hasCommon / hasSkills (missing → false). Legacy short keys regions/theory/packet/skills map to has* when the contract key is absent |
paths.* |
optional relative dirs under package root (packaging-generated). Plugin uses skills (default _skills) and localSkills; missing / blank values skipped |
Location: ${kbRoot}/MANIFEST.json, else recurse ≤3 levels and exactly one hit. Zero or multiple → error.
Authoritative packaging prose lives in the workspace contract notes (插件 / 契约); this doc only describes what the plugin enforces.
Injected context
| Channel | Fields |
|---|---|
process.env |
KB_ROOT, KB_LOCAL (when paths.local set), KB_OPERATOR, KB_COUNTRY, KB_VERSION, KB_CONTENT (JSON of has*), KB_STATUS |
Skill kb-context |
Same identity + kbLocal + local create/update/delete tool names |
| Skills from pack | Registered when configured and hasSkills and the inPreset/public toggle for that plane |
| Local FS tools | When configured + paths.local + same KB toggles: netx__kbWriteMemory / WriteDraft / WriteSuggestion / UpdateLocal / DeleteLocal / ListLocal — jail under memories|drafts|suggestions only (identity/ host persona, agent read-only) |
RPC (channel /netxops): kb.status (saved snapshot), kb.resolve with { path } (preview unsaved paths).
Pack skill registration
When KB_STATUS=configured and content.hasSkills=true, the plugin scans (same register rules / toggles / provider: netxops-kb-pack):
${realRoot}/${paths.skills || '_skills'}/*/SKILL.md
${realRoot}/${paths.localSkills}/*/SKILL.md # only when paths.localSkills is set
paths.localSkills missing, blank, or an empty/missing directory → skipped (ops continues). Invalid SKILL.md bundles are skipped the same way as under _skills/.
| Setting | Default | Plane |
|---|---|---|
groupKbInPreset |
true |
Netx Ops preset sessions |
groupKbPublic |
false |
Host public skills (other presets) |
Invalid or missing _skills directories are skipped (ops continues).
Degradation matrix
| Condition | KB_STATUS |
Behavior |
|---|---|---|
Empty kbRoot |
unconfigured |
Pure netx; no invented operator; no kb-* packs |
| Missing / ambiguous / invalid MANIFEST | error |
Pure netx; badge shows error detail |
Valid MANIFEST, hasSkills=false |
configured |
Identity only (kb-context + env) |
Valid + hasSkills + toggles |
configured |
Identity + pack skills (_skills / paths.skills) and optional paths.localSkills on the enabled plane(s) |
Never invent an operator when status is not configured.