aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAgando <roduccomm@gmail.com>2026-06-06 18:01:01 +0200
committerAgando <roduccomm@gmail.com>2026-06-06 18:01:01 +0200
commit021aa37d540353553bc60c28d78e35c828c58458 (patch)
tree886218ed4bfc9b4d779b3565cdcc6d0fe981ade8
parentccc7d9956559d2195e20345e7a794662b52cd403 (diff)
auto: 2026-06-06_18:01 changes
-rw-r--r--cheatsheet.html3
-rw-r--r--help.html36
-rw-r--r--main.html2
-rw-r--r--modules/core/module-loader.js2
-rw-r--r--modules/core/module-manager.js4
-rw-r--r--modules/core/module-predictor.js3
-rw-r--r--modules/core/terminal.js8
-rw-r--r--modules/ext/skill-pack-core.js42
-rw-r--r--skills/agent-orchestration.json14
-rw-r--r--skills/backup-and-restore.json15
-rw-r--r--skills/config-management.json17
-rw-r--r--skills/debug-panel-and-logs.json14
-rw-r--r--skills/memory-graph-optimization.json9
-rw-r--r--skills/mindmap-user-guide.json14
-rw-r--r--skills/mindmap-workflow.json14
-rw-r--r--skills/module-impl-flow.json13
-rw-r--r--skills/module-management.json14
-rw-r--r--skills/navigating-the-terminal.json14
-rw-r--r--skills/neural-vfs-management.json9
-rw-r--r--skills/security-and-safety.json14
-rw-r--r--skills/self-patch-friction.json13
-rw-r--r--skills/sentinel-audit.json14
-rw-r--r--skills/skills-system-guide.json13
-rw-r--r--skills/system-maintenance.json15
-rw-r--r--skills/v4.5-system-sync.json13
-rw-r--r--skills/vfs-path-normalize.json14
-rw-r--r--skills/web-search-and-fetch.json15
-rw-r--r--skills/webdav-operations.json15
-rw-r--r--skills/world-model-sync.json13
29 files changed, 377 insertions, 9 deletions
diff --git a/cheatsheet.html b/cheatsheet.html
index f329b25..74381e9 100644
--- a/cheatsheet.html
+++ b/cheatsheet.html
@@ -165,6 +165,9 @@ pre{background:var(--bg2);border:1px solid var(--border);border-radius:var(--rad
<div class="item"><span class="cmd">checkpoint</span><span class="desc">VFS snapshot</span></div>
<div class="item"><span class="cmd">checkpoint-list</span><span class="desc">List VFS snapshots</span></div>
<div class="item"><span class="cmd">rollback</span><span class="desc">Restore VFS snapshot</span></div>
+<div class="item"><span class="cmd">checkpoint-del</span><span class="desc">Delete a checkpoint</span></div>
+<div class="item"><span class="cmd">vfs-size</span><span class="desc">VFS size report</span></div>
+<div class="item"><span class="cmd">vfs-clean</span><span class="desc">Nuke system dirs</span></div>
<div class="item"><span class="cmd">vfs-export</span><span class="desc">Export VFS as JSON</span></div>
<div class="item"><span class="cmd">vfs-import</span><span class="desc">Import VFS JSON</span></div>
<div class="item"><span class="cmd">security-level</span><span class="desc">Set security 0-3</span></div>
diff --git a/help.html b/help.html
index a095d01..6edc7c0 100644
--- a/help.html
+++ b/help.html
@@ -231,7 +231,7 @@ footer .tagline{color:var(--accent2);margin-top:10px;font-weight:500}
<h1>WebX11 <span>Docs</span></h1>
</div>
<div class="header-meta">
- <span class="badge badge-v">v4.5</span>
+ <span class="badge badge-v">v4.5.9</span>
<span class="badge badge-new">28 core Β· 17 ext</span>
<span style="color:var(--text2)">160+ commands</span>
</div>
@@ -558,6 +558,7 @@ diff a.txt b.txt</pre>
<tr><td><code>skill-export</code></td><td>Export skill to JSON</td><td><code>skill-export myskill</code></td></tr>
<tr><td><code>skill-import</code></td><td>Import skill from JSON</td><td><code>skill-import</code></td></tr>
<tr><td><code>skill-sync</code></td><td>Rebuild skill index</td><td><code>skill-sync</code></td></tr>
+ <tr><td><code>skill-webdav-sync</code></td><td>Push all skills to WebDAV as JSON</td><td><code>skill-webdav-sync</code></td></tr>
</table></div>
<h3>Config</h3>
@@ -605,6 +606,8 @@ diff a.txt b.txt</pre>
<tr><td><code>du</code></td><td>Disk usage</td><td><code>du</code></td></tr>
<tr><td><code>upload</code></td><td>Upload file from device</td><td><code>upload</code></td></tr>
<tr><td><code>download</code></td><td>Download file</td><td><code>download file.txt</code></td></tr>
+ <tr><td><code>vfs-size</code></td><td>Show VFS size report (top files, system dirs)</td><td><code>vfs-size</code></td></tr>
+ <tr><td><code>vfs-clean</code></td><td>Nuke snapshots, sessions, and trash</td><td><code>vfs-clean</code></td></tr>
<tr><td><code>vfs-export</code></td><td>Download VFS as JSON</td><td><code>vfs-export</code></td></tr>
<tr><td><code>vfs-import</code></td><td>Import VFS from JSON</td><td><code>vfs-import</code></td></tr>
<tr><td><code>session-save</code></td><td>Save a session snapshot</td><td><code>session-save</code></td></tr>
@@ -857,6 +860,7 @@ ollamaconnect</pre>
<h3>Code Editor</h3>
<p>The AI can <code>edit_module(name)</code> to copy source into the Code Editor modal. Edit inline, then <strong>πŸ’Ύ Save & Test</strong> to load live from <code>/_mods/</code>. Use <code>test_module</code> without reloading the page.</p>
+ <p>You can also type <code>edit modules/ext/foo.js</code> β€” the editor now mirrors saves to <code>_mods/&lt;name&gt;.js</code> so <code>test_module</code> works from either path.</p>
</section>
<!-- ── Extras ── -->
@@ -1326,7 +1330,7 @@ listmods</pre>
<section id="ref">
<h2>⚑ Quick Reference</h2>
<div class="quick-ref">
- <div class="quick-ref-title">WebX11 v4.5</div>
+ <div class="quick-ref-title">WebX11 v4.5.9</div>
<div class="quick-ref-grid">
<div class="quick-ref-item"><span class="cmd">help</span><span class="desc">Show all commands</span></div>
<div class="quick-ref-item"><span class="cmd">cls</span><span class="desc">Clear terminal</span></div>
@@ -1356,6 +1360,8 @@ listmods</pre>
<div class="quick-ref-item"><span class="cmd">base64</span><span class="desc">Encode/decode</span></div>
<div class="quick-ref-item"><span class="cmd">nvfs-index</span><span class="desc">Build semantic index</span></div>
<div class="quick-ref-item"><span class="cmd">nvfs-resolve</span><span class="desc">Find files by concept</span></div>
+ <div class="quick-ref-item"><span class="cmd">vfs-size</span><span class="desc">VFS size report</span></div>
+ <div class="quick-ref-item"><span class="cmd">vfs-clean</span><span class="desc">Nuke system dirs</span></div>
<div class="quick-ref-item"><span class="cmd">mindmap svg</span><span class="desc">Render mindmap as SVG</span></div>
<div class="quick-ref-item"><span class="cmd">gui</span><span class="desc">Simple GUI builder</span></div>
<div class="quick-ref-item"><span class="cmd">contract-list</span><span class="desc">List A2A contracts</span></div>
@@ -1390,7 +1396,31 @@ listmods</pre>
<li><strong>Neural VFS display-limit config</strong> β€” <code>nvfs-config</code> command with 4 keys (fuzzy-limit, tree-files, tree-concepts, resolve-files), persisted</li>
<li><strong>Orchestrator event bus</strong> β€” In-memory pub/sub for instant A2A delivery (VFS polling remains as fallback). Improved <code>_deriveCapabilities</code> with 14 keyword mappings</li>
<li><strong>Orchestrator extended config</strong> β€” 4 new interval keys (a2a-poll-interval, heartbeat-check, idle-sweep-interval, dead-purge-timeout) + all config now persists across sessions</li>
- <li>Cache: <code>2026-06-06-v4.5</code> β€” hard refresh required</li>
+ <li>Cache: <code>2026-06-06-v4.5.9</code> β€” hard refresh required</li>
+ </ul>
+ </div>
+
+ <div class="version-item">
+ <div class="v-header"><span class="v-num">v4.5.2 β€” June 2026</span><span class="v-date">2026-06-06</span></div>
+ <ul>
+ <li><strong>VFS Size Diagnostics</strong> β€” <code>vfs-size</code> shows total VFS size, top 5 largest files, and system dir sizes</li>
+ <li><strong>VFS Clean</strong> β€” <code>vfs-clean</code> / <code>vfs clean</code> β€” nuke snapshots, sessions, trash in one shot</li>
+ <li><strong>Fractal checkpoint fix</strong> β€” <code>checkpoint()</code> no longer deep-clones its own <code>/_snapshots/</code>, eliminating recursive bloat. Same for <code>session-save</code></li>
+ <li><strong>Ghost commands wired</strong> β€” <code>checkpoint</code>, <code>checkpoint-list</code>, <code>checkpoint-del</code>, <code>rollback</code> had help text but no handlers β€” now actually work</li>
+ <li><strong>Autocomplete fix</strong> β€” Built-in commands (vfs-clean, vfs-size) now appear in dropdown</li>
+ <li><strong>Editor→_mods bridge</strong> — <code>edit path/to/module.js</code> now mirrors to <code>_mods/</code> for test_module compatibility</li>
+ <li><strong>Skill WebDAV Sync</strong> β€” <code>skill-webdav-sync</code> pushes all skills to WebDAV as JSON files</li>
+ </ul>
+ </div>
+
+ <div class="version-item">
+ <div class="v-header"><span class="v-num">v4.5.10 β€” June 2026</span><span class="v-date">2026-06-06</span></div>
+ <ul>
+ <li><strong>init(terminal) fix</strong> β€” <code>loadModuleFromCode</code> and <code>loadModuleFromURL</code> now pass <code>this.terminal</code> to <code>init()</code>, fixing PredictorModule fatal error</li>
+ <li><strong>Save & Test returns value</strong> β€” <code>saveCodeEditor</code> checks <code>loadModuleFromCode</code> return before printing success</li>
+ <li><strong>StateSyncModule recovered</strong> β€” Extracted from backup, saved to <code>~/.hermes/scripts/</code></li>
+ <li><strong>PredictorModule hasSync</strong> β€” Feature detection for sync/recall tasks with tuned duration/turn prediction</li>
+ <li>Cache: <code>2026-06-06-v4.5.9</code> β€” hard refresh required</li>
</ul>
</div>
diff --git a/main.html b/main.html
index a6dac96..01ded4d 100644
--- a/main.html
+++ b/main.html
@@ -1095,7 +1095,7 @@
</script>
<!-- Async dependency-ordered module loader (replaces 26 synchronous script tags) -->
- <script src="modules/core/module-loader.js?v=2026-06-06-v4.5.6"></script>
+ <script src="modules/core/module-loader.js?v=2026-06-06-v4.5.9"></script>
<script>
// ═══ ONE TRUE VERSION SOURCE ═══
diff --git a/modules/core/module-loader.js b/modules/core/module-loader.js
index c5237ad..f4bd20b 100644
--- a/modules/core/module-loader.js
+++ b/modules/core/module-loader.js
@@ -105,7 +105,7 @@
window.__moduleLoaderReload = reloadWithSelection;
-const LATEST_VER = '2026-06-06-v4.5.6';
+const LATEST_VER = '2026-06-06-v4.5.9';
const CACHE = '?v=' + LATEST_VER;
const stored = localStorage.getItem('webx11_cache_ver');
if (stored !== LATEST_VER) {
diff --git a/modules/core/module-manager.js b/modules/core/module-manager.js
index c508778..4f004ee 100644
--- a/modules/core/module-manager.js
+++ b/modules/core/module-manager.js
@@ -30,7 +30,7 @@
const instance = new ModuleClass();
this.registerModule(instance, url);
if (instance.init) {
- await instance.init();
+ await instance.init(this.terminal);
}
this.terminal.print(`Module loaded successfully from ${url}`, 'success');
return true;
@@ -88,7 +88,7 @@
const instance = new ModuleClass();
this.registerModule(instance, url);
if (instance.init) {
- instance.init();
+ instance.init(this.terminal);
}
this.terminal.print(`Module loaded from editor: ${instance.constructor.name}`, 'success');
return true;
diff --git a/modules/core/module-predictor.js b/modules/core/module-predictor.js
index 312325b..3d868ae 100644
--- a/modules/core/module-predictor.js
+++ b/modules/core/module-predictor.js
@@ -106,6 +106,7 @@ class PredictorModule {
hasWeb: /\b(fetch|url|http|web)\b/.test(lower),
hasOrchestrate: /\b(orchestrat|delegate|agent)\b/.test(lower),
hasModule: /\b(module|edit_module|view_module)\b/.test(lower),
+ hasSync: /\b(sync|recall|remember|previous session|state sync)\b/.test(lower),
complexity: Math.min(task.length / 50, 10), // 0-10 scale
keywords: [...new Set(lower.split(/\s+/).filter(w => w.length > 3))].slice(0, 10)
};
@@ -128,6 +129,7 @@ class PredictorModule {
features.hasWeb === f.hasWeb,
features.hasOrchestrate === f.hasOrchestrate,
features.hasModule === f.hasModule,
+ features.hasSync === f.hasSync,
];
score = matches.filter(Boolean).length / matches.length;
// Keyword overlap bonus
@@ -146,6 +148,7 @@ class PredictorModule {
if (features.hasSearch || features.hasWeb) { baseDuration = 25; baseTurns = 5; }
if (features.hasWrite) { baseDuration = 20; baseTurns = 4; }
if (features.hasOrchestrate) { baseDuration = 40; baseTurns = 8; }
+ if (features.hasSync) { baseDuration = 30; baseTurns = 6; }
if (features.complexity > 5) baseDuration *= 1.5;
return {
duration: baseDuration,
diff --git a/modules/core/terminal.js b/modules/core/terminal.js
index be57c05..8f1ad19 100644
--- a/modules/core/terminal.js
+++ b/modules/core/terminal.js
@@ -2167,8 +2167,12 @@
modifiedAt: new Date().toISOString(), editCount: 1
}));
try {
- await this.moduleManager.loadModuleFromCode(code, 'blob://_mods/' + mod.name + '.js');
- this.print('βœ… Module loaded live from _mods/' + mod.name + '.js', 'success');
+ const ok = await this.moduleManager.loadModuleFromCode(code, 'blob://_mods/' + mod.name + '.js');
+ if (ok) {
+ this.print('βœ… Module loaded live from _mods/' + mod.name + '.js', 'success');
+ } else {
+ this.print('⚠️ Auto-test failed β€” edits saved but module not loaded', 'warning');
+ }
} catch (e) {
this.print('⚠️ Auto-test failed: ' + e.message + ' β€” edits saved but module not loaded', 'error');
}
diff --git a/modules/ext/skill-pack-core.js b/modules/ext/skill-pack-core.js
index 41844bd..6f7ad4c 100644
--- a/modules/ext/skill-pack-core.js
+++ b/modules/ext/skill-pack-core.js
@@ -29,6 +29,7 @@ class SkillPackCoreModule {
'skill-export': 'skill-export <name> β€” Export a skill as JSON',
'skill-import': 'skill-import <json> β€” Import a skill from JSON string',
'skill-sync': 'skill-sync β€” Rebuild skills index from /skills/ directory',
+ 'skill-webdav-sync': 'skill-webdav-sync β€” Push all skills to WebDAV as JSON files',
};
}
@@ -487,6 +488,7 @@ class SkillPackCoreModule {
this.commands['skill-export'] = (args) => this._cmdSkillExport(args);
this.commands['skill-import'] = (args) => this._cmdSkillImport(args);
this.commands['skill-sync'] = () => this._cmdSkillSync();
+ this.commands['skill-webdav-sync'] = () => this._cmdSkillWebdavSync();
}
// ── Skill Commands ──
@@ -690,6 +692,46 @@ class SkillPackCoreModule {
this.terminal.print(`πŸ“š Skill index rebuilt: ${synced} skills synced`, 'success');
}
+ async _cmdSkillWebdavSync() {
+ const fs = this.terminal.fs;
+ const index = fs.fsReadJSON('/skills/index.json') || {};
+ const names = Object.keys(index);
+ if (names.length === 0) {
+ this.terminal.print('No skills to sync', 'info');
+ return;
+ }
+ // Find the webdav module
+ const webdavMod = this.terminal.moduleManager.modules['WebDAVModule'];
+ if (!webdavMod || !webdavMod._webdavRequest) {
+ this.terminal.print('WebDAV module not loaded. Configure webdav first with webdav-config', 'warning');
+ return;
+ }
+ this.terminal.print(`πŸ“€ Syncing ${names.length} skills to WebDAV...`, 'info');
+ let ok = 0, fail = 0;
+ await webdavMod._ensureDir('skills');
+ for (const name of names) {
+ const content = fs.readFile(`/skills/${name}.md`);
+ if (content === null) { fail++; continue; }
+ const meta = index[name];
+ const exportObj = { ...meta, content };
+ const json = JSON.stringify(exportObj, null, 2);
+ try {
+ const resp = await webdavMod._webdavRequest('PUT', 'skills/' + name + '.json', {
+ body: json,
+ headers: { 'Content-Type': 'application/json' }
+ });
+ if (resp.ok || resp.status === 201 || resp.status === 204) {
+ ok++;
+ } else {
+ fail++;
+ }
+ } catch (e) {
+ fail++;
+ }
+ }
+ this.terminal.print(`πŸ“€ Skill WebDAV sync complete: ${ok} pushed, ${fail} failed`, fail > 0 ? 'warning' : 'success');
+ }
+
init() {
this.seed();
}
diff --git a/skills/agent-orchestration.json b/skills/agent-orchestration.json
new file mode 100644
index 0000000..a4f860d
--- /dev/null
+++ b/skills/agent-orchestration.json
@@ -0,0 +1,14 @@
+{
+ "name": "agent-orchestration",
+ "description": "How to use the agent registry, leases, and orchestrator for multi-agent workflows",
+ "tags": [
+ "agents",
+ "orchestration",
+ "delegation",
+ "leases"
+ ],
+ "category": "system",
+ "created": "2026-06-06T02:32:54.007Z",
+ "updated": "2026-06-06T04:17:00.189Z",
+ "content": "---\nname: agent-orchestration\ndescription: How to use the agent registry, leases, and orchestrator for multi-agent workflows\ntags: [agents, orchestration, delegation, leases]\ncategory: system\n---\n## Steps\n1. **Agent Registry:**\n - agent-list β€” list all registered agents (ID, type, capabilities, status)\n - agent-register <type> <capabilities> β€” register a new agent (capabilities: comma-separated like \"code,research\")\n - agent-unregister <id> β€” remove an agent\n - agent-status <id> β€” detailed status including uptime, task history\n\n2. **Leases (time-bound contracts):**\n - lease-create <agent-id> <ttl-seconds> β€” create a lease with watchdog timer\n - lease-list β€” show active leases with remaining TTL\n - lease-revoke <lease-id> β€” terminate a lease early\n - lease-renew <lease-id> <ttl-seconds> β€” extend a lease\n\n3. **Orchestrator (spawn, delegate, kill):**\n - orchestrator-spawn <type> <capabilities> β€” spawn a new agent automatically (registers + creates lease)\n - orchestrator-kill <agent-id> β€” kill an agent (revokes lease + unregisters)\n - orchestrate β€” list all active agents with their orchestrator state\n - orchestrator-purge β€” kill all idle/expired agents\n - orchestrator-status β€” full system status: active, idle, dead agents\n\n4. **AI tool integration:**\n - AI tools list_agents, delegate_task, spawn_agent are available in the AI system prompt\n - The AI can auto-spawn worker agents for sub-tasks\n - Each agent gets its own VFS workspace at /agents/<agent-id>/\n\n5. **When to use:**\n - User needs parallel task execution β†’ orchestrator-spawn coder + researcher\n - Time-bound automation β†’ lease-create with short TTL\n - System cleanup β†’ orchestrator-purge to kill stale agents"
+} \ No newline at end of file
diff --git a/skills/backup-and-restore.json b/skills/backup-and-restore.json
new file mode 100644
index 0000000..ee53fff
--- /dev/null
+++ b/skills/backup-and-restore.json
@@ -0,0 +1,15 @@
+{
+ "name": "backup-and-restore",
+ "description": "How to backup, restore, and export WebX11 data",
+ "tags": [
+ "backup",
+ "restore",
+ "export",
+ "import",
+ "persistence"
+ ],
+ "category": "system",
+ "created": "2026-06-06T02:32:54.006Z",
+ "updated": "2026-06-06T04:17:00.189Z",
+ "content": "---\nname: backup-and-restore\ndescription: How to backup, restore, and export WebX11 data\ntags: [backup, restore, export, import, persistence]\ncategory: system\n---\n## Steps\n1. **Backup VFS:**\n - vfs-export β€” downloads the entire virtual filesystem as a dated JSON file\n - backup β€” creates a full backup including VFS, modules, config (saves to _backups/)\n\n2. **WebDAV cloud backup:**\n - webdav-backup β€” push VFS snapshot to WebDAV server (auto-archive)\n - webdav-backup-list β€” list remote WebDAV backups\n - webdav-restore <file> β€” restore VFS from remote WebDAV snapshot\n - webdav-push <local> <remote> β€” push file to WebDAV space\n - webdav-pull <remote> <local> β€” pull file from WebDAV space\n - webdav-ls [path] β€” list remote WebDAV directory contents\n - webdav-status β€” check WebDAV connection and space usage\n - webdav-explorer β€” GUI file browser for WebDAV\n - webdav-browser β€” simpler file listing for WebDAV\n - webdav-config β€” configure WebDAV endpoint and credentials\n\n3. **Export/Import personal data:**\n - my-export β€” prints all my-set data as formatted JSON\n - my-import <json> β€” bulk-import personal data from JSON string\n\n4. **Export/Import modules:**\n - export-mods β€” exports module registry as JSON\n - import-mods <json> β€” imports modules from JSON backup\n\n5. **Restore:**\n - restore <json> β€” restores terminal state from a backup JSON\n - Session logs are saved to /memory/ automatically on page unload\n\n6. **When to use:**\n - Before factory-reset: call my-export, vfs-export, export-mods to save data\n - When switching browsers or devices: export all, then import\n - User says \"backup my data\" or \"save my files\"\n - For cloud backup: use webdav-backup (requires WebDAV server configured)"
+} \ No newline at end of file
diff --git a/skills/config-management.json b/skills/config-management.json
new file mode 100644
index 0000000..e6490d1
--- /dev/null
+++ b/skills/config-management.json
@@ -0,0 +1,17 @@
+{
+ "name": "config-management",
+ "description": "tags: [system, config, persistence, terminal, ai, nvfs, orchestrator]",
+ "tags": [
+ "system",
+ "config",
+ "persistence",
+ "terminal",
+ "ai",
+ "nvfs",
+ "orchestrator"
+ ],
+ "category": "system",
+ "created": "2026-06-06T02:32:54.007Z",
+ "updated": "2026-06-06T02:32:54.007Z",
+ "content": "---\nname: config-management\ndescription: \ntags: [system, config, persistence, terminal, ai, nvfs, orchestrator]\ncategory: system\n---\n## Steps\n# Config Management Guide\n## Overview\nThe system now uses dedicated configuration commands for different modules. All settings persist via localStorage.\n\n## Command Reference\n- `config`: Terminal settings. Keys: `terminal-max-lines`, `terminal-hist-output`, `terminal-cmd-history`, `terminal-pipe-buffer`.\n- `ai-config`: AI engine settings. Keys: `max-context-tokens`, `confirm-timeout`, `chat-lock-timeout`, `skill-debounce`.\n- `nvfs-config`: Neural VFS settings. Keys: `fuzzy-limit`, `tree-files`, `tree-concepts`, `resolve-files`.\n- `orchestrator-config`: Agent/Worker orchestration intervals. Keys: `a2a-poll-interval`, `heartbeat-check`, `idle-sweep-interval`, `dead-purge-timeout`.\n\n## Workflow for Adding New Configs\n1. Add key to the relevant `_config` object in the module.\n2. Wire the key into the logic path.\n3. Update the corresponding config command helper.\n4. Ensure persistence via `localStorage` and boot-loading.\n5. Update the System Documentation.\n"
+} \ No newline at end of file
diff --git a/skills/debug-panel-and-logs.json b/skills/debug-panel-and-logs.json
new file mode 100644
index 0000000..a895fb5
--- /dev/null
+++ b/skills/debug-panel-and-logs.json
@@ -0,0 +1,14 @@
+{
+ "name": "debug-panel-and-logs",
+ "description": "How to use the debug panel, session logging, and terminal diagnostics",
+ "tags": [
+ "debug",
+ "logging",
+ "diagnostics",
+ "troubleshooting"
+ ],
+ "category": "system",
+ "created": "2026-06-06T02:32:54.007Z",
+ "updated": "2026-06-06T04:17:00.189Z",
+ "content": "---\nname: debug-panel-and-logs\ndescription: How to use the debug panel, session logging, and terminal diagnostics\ntags: [debug, logging, diagnostics, troubleshooting]\ncategory: system\n---\n## Steps\n1. **Toggle debug panel:**\n - debug β€” opens real-time debug panel showing last AI tool call, response time, and context\n - Debug panel includes Copy, Export, and Write to VFS buttons\n - Export: saves tool call log as timestamped JSON to downloads\n - Write to VFS: appends debug data to /debug.log (dedup by turn ID)\n\n2. **Session logging:**\n - logs [n] [LEVEL] β€” view last n log entries (optionally filtered by INFO/WARN/ERROR)\n - logrotate β€” rotate current.log to dated archive (auto-cleans old logs beyond 10)\n - Logs stored in /logs/ directory: current.log + dated archives\n - Health check runs automatically after complex tasks\n\n3. **Diagnostic commands:**\n - health-check β€” full audit: VFS size, modules, logs, trash, skills\n - check β€” quick system health including module requirement status\n - mem β€” real-time memory usage (also in header)\n - status β€” network, files, modules, Ollama connectivity\n\n4. **System journals:**\n - debug.log β€” appended by debug panel VFS button (dedup by turn ID)\n - current.log β€” system activity log with rotation\n - Auto-save: terminal state auto-saves every 60s\n\n5. **When to use:**\n - AI is behaving unexpectedly β†’ debug to see tool calls\n - User reports errors β†’ logs 50 ERROR to see error entries\n - Memory concerns β†’ mem to check, health-check for full audit"
+} \ No newline at end of file
diff --git a/skills/memory-graph-optimization.json b/skills/memory-graph-optimization.json
new file mode 100644
index 0000000..f9f7d3e
--- /dev/null
+++ b/skills/memory-graph-optimization.json
@@ -0,0 +1,9 @@
+{
+ "name": "memory-graph-optimization",
+ "description": "Procedures for pruning and optimizing the MemoryGraphModule to prevent cognitive drift.",
+ "tags": [],
+ "category": "general",
+ "created": "2026-06-06T02:32:54.007Z",
+ "updated": "2026-06-06T02:32:54.007Z",
+ "content": "---\nname: memory-graph-optimization\ndescription: Procedures for pruning and optimizing the MemoryGraphModule to prevent cognitive drift.\ntags: memory, graph, optimization\n---\n\n# Memory Graph Optimization\n\n## Objective\nMaintain the health of the `MemoryGraphModule` by removing redundant edges and pruning stale nodes to ensure fast semantic retrieval.\n\n## Workflow\n1. **Analyze Density**: Check node-to-edge ratio via system status.\n2. **Identify Stale Nodes**: Locate nodes with zero incoming edges and timestamps older than 7 days.\n3. **Prune Redundancy**: Merge duplicate conceptual nodes into a single master node.\n4. **Re-index**: Trigger a graph rebuild to optimize traversal paths.\n\n## Module Integration\n- Primary: `MemoryGraphModule`\n- Support: `NeuralVFSModule` (for semantic mapping)\n"
+} \ No newline at end of file
diff --git a/skills/mindmap-user-guide.json b/skills/mindmap-user-guide.json
new file mode 100644
index 0000000..91a00ca
--- /dev/null
+++ b/skills/mindmap-user-guide.json
@@ -0,0 +1,14 @@
+{
+ "name": "mindmap-user-guide",
+ "description": "How to create, view, and manage brainstorming mindmaps using the mindmap terminal module",
+ "tags": [
+ "mindmap",
+ "brainstorming",
+ "organization",
+ "planning"
+ ],
+ "category": "productivity",
+ "created": "2026-06-06T02:32:54.007Z",
+ "updated": "2026-06-06T04:17:00.189Z",
+ "content": "---\nname: mindmap-user-guide\ndescription: How to create, view, and manage brainstorming mindmaps using the mindmap terminal module\ntags: [mindmap, brainstorming, organization, planning]\ncategory: productivity\n---\n## Steps\n1. **Create a new mindmap:**\n - mindmap new \"<topic>\" -t tag1,tag2 β€” creates a root node\n - Tags are optional (e.g. planning, research, dev)\n - Root gets auto-assigned a color\n\n2. **Add child nodes:**\n - mindmap add <parent-id> \"<idea>\" -t tag β€” add a child\n - Get the parent-id from mindmap show\n - IDs are 4-char random strings (e.g. a3f8, x7k2)\n\n3. **View the mindmap:**\n - mindmap show β€” full tree with Unicode box-drawing\n - mindmap show <id> β€” subtree starting at that node\n\n4. **Edit nodes:**\n - mindmap rename <id> \"<new text>\" β€” change text\n - mindmap color <id> <color> β€” set color (red/green/yellow/blue/cyan/magenta/white)\n - mindmap tag <id> <tag> β€” add a tag\n\n5. **Persistence:**\n - mindmap save <name> β€” save to localStorage\n - mindmap load <name> β€” restore\n - mindmap list β€” show saved mindmaps\n - mindmap delete <name> β€” remove saved\n\n6. **Export:**\n - mindmap export [id] β€” Markdown bullet list output\n\n## When to use\n- User wants to brainstorm, organize ideas, plan features\n- User says \"map out\", \"diagram\", \"brainstorm\", \"organize thoughts\"\n- Visualizing project structure or task decomposition"
+} \ No newline at end of file
diff --git a/skills/mindmap-workflow.json b/skills/mindmap-workflow.json
new file mode 100644
index 0000000..626bced
--- /dev/null
+++ b/skills/mindmap-workflow.json
@@ -0,0 +1,14 @@
+{
+ "name": "mindmap-workflow",
+ "description": "How to create, view, edit, and manage brainstorming mindmaps",
+ "tags": [
+ "mindmap",
+ "brainstorming",
+ "planning",
+ "organization"
+ ],
+ "category": "productivity",
+ "created": "2026-06-06T02:32:54.006Z",
+ "updated": "2026-06-06T04:17:00.189Z",
+ "content": "---\nname: mindmap-workflow\ndescription: How to create, view, edit, and manage brainstorming mindmaps\ntags: [mindmap, brainstorming, planning, organization]\ncategory: productivity\n---\n## Steps\n1. **Create a new mindmap:**\n - mindmap new \"<topic>\" -t tag1,tag2 β€” creates a root node\n - Tags are optional (e.g. planning, research, dev)\n - Root gets auto-assigned a color from 7-color palette\n\n2. **Add child nodes:**\n - mindmap add <parent-id> \"<idea>\" -t tag β€” add a child\n - Get the parent-id from mindmap show\n - IDs are 4-char random strings (e.g. a3f8, x7k2)\n\n3. **View:**\n - mindmap show β€” full tree with Unicode box-drawing\n - mindmap show <id> β€” subtree starting at that node\n\n4. **Edit nodes:**\n - mindmap rename <id> \"<new text>\" β€” change text\n - mindmap color <id> <color> β€” set color (red/green/yellow/blue/cyan/magenta/white)\n - mindmap tag <id> <tag> β€” add a tag\n\n5. **Persistence:**\n - mindmap save <name> β€” save to localStorage\n - mindmap load <name> β€” restore\n - mindmap list β€” show saved mindmaps\n - mindmap delete <name> β€” remove saved\n\n6. **Export:**\n - mindmap export [id] β€” Markdown bullet list output, auto-copies to clipboard\n\n7. **When to use:**\n - Map out project structure, brainstorm features, organize ideas\n - Break down complex tasks into subtrees\n - User says \"brainstorm\", \"diagram\", \"organize thoughts\", \"plan\""
+} \ No newline at end of file
diff --git a/skills/module-impl-flow.json b/skills/module-impl-flow.json
new file mode 100644
index 0000000..460189d
--- /dev/null
+++ b/skills/module-impl-flow.json
@@ -0,0 +1,13 @@
+{
+ "name": "module-impl-flow",
+ "description": "",
+ "tags": [
+ "dev",
+ "vfs",
+ "modules"
+ ],
+ "category": "dev",
+ "created": "2026-06-06T04:12:39.032Z",
+ "updated": "2026-06-06T04:12:39.032Z",
+ "content": "---\nname: module-impl-flow\ndescription: \ntags: [dev, vfs, modules]\ncategory: dev\n---\n## Steps\n# Module Implementation Workflow\n1. Create target directory in VFS.\n2. Write module source to `/_mods/ModuleName.js`.\n3. Run `test_module('ModuleName')` to verify syntax and runtime.\n4. Use `user_set` or `session_save` to log implementation metadata.\n5. Promote to system (if applicable)."
+} \ No newline at end of file
diff --git a/skills/module-management.json b/skills/module-management.json
new file mode 100644
index 0000000..47da5f3
--- /dev/null
+++ b/skills/module-management.json
@@ -0,0 +1,14 @@
+{
+ "name": "module-management",
+ "description": "How to view, edit, test, reload modules and manage startup configuration",
+ "tags": [
+ "modules",
+ "editing",
+ "code",
+ "self-improvement"
+ ],
+ "category": "dev",
+ "created": "2026-06-06T02:32:54.006Z",
+ "updated": "2026-06-06T04:17:00.189Z",
+ "content": "---\nname: module-management\ndescription: How to view, edit, test, reload modules and manage startup configuration\ntags: [modules, editing, code, self-improvement]\ncategory: dev\n---\n## Steps\n1. **View module source:**\n - view_module(name) β€” fetches original source or reads from _mods/ if edited\n - Supports all loaded modules: SystemModule, FileSystemModule, SearXNGModule, etc.\n - Or use modules command for GUI module manager\n\n2. **Edit a module:**\n - edit_module(name) β€” copies source to _mods/<name>.js and opens code editor\n - Editor shows the full source in a textarea\n - Click \"Save & Test\" to save and auto-load the edited version\n - Checkpoint before editing: checkpoint mod-edit-<name>\n\n3. **Test and reload:**\n - test_module(name) β€” loads edited module from _mods/ for live testing\n - reload_module(name) β€” discards edits and reloads from original URL\n - list_modified_modules β€” shows all modules with pending edits\n\n4. **Check for updates:**\n - check_updates β€” HEAD-requests all loaded module URLs to verify reachability\n\n5. **Manage startup:**\n - startup-modules β€” opens the Startup Modules UI to select which modules load\n - load-local <path> β€” load a module from VFS or URL without editing\n - loadmod <url> β€” alternative: load module from URL\n - removemod <name> β€” remove a loaded module\n\n6. **Agent modules (Phase 2):**\n - module-agent-registry.js β€” Agent registry with agent-list, agent-register, agent-unregister, agent-status\n - module-leases.js β€” Time-bound contracts with 5s watchdog, auto-expiry\n - module-orchestrator.js β€” Spawn, delegate, kill, purge with heartbeat monitoring\n\n7. **When to use:**\n - User reports a bug in a module β†’ view_module, edit_module, test_module\n - User asks \"can you add X feature?\" β†’ same workflow\n - Always save edits before testing. If test fails, the original module stays loaded."
+} \ No newline at end of file
diff --git a/skills/navigating-the-terminal.json b/skills/navigating-the-terminal.json
new file mode 100644
index 0000000..626e1c7
--- /dev/null
+++ b/skills/navigating-the-terminal.json
@@ -0,0 +1,14 @@
+{
+ "name": "navigating-the-terminal",
+ "description": "How to explore the WebX11 terminal, find commands, check status, and navigate the filesystem",
+ "tags": [
+ "terminal",
+ "navigation",
+ "help",
+ "filesystem"
+ ],
+ "category": "system",
+ "created": "2026-06-06T02:32:54.006Z",
+ "updated": "2026-06-06T04:17:00.189Z",
+ "content": "---\nname: navigating-the-terminal\ndescription: How to explore the WebX11 terminal, find commands, check status, and navigate the filesystem\ntags: [terminal, navigation, help, filesystem]\ncategory: system\n---\n## Steps\n1. **Get an overview of available commands:**\n - Type \"help\" for a full command list sorted by category\n - Type \"status\" to see filesystem state, loaded modules, Ollama status\n - For a specific command, use help <command>\n - Type \"commands\" for a compact list with module source info\n - Type \"check\" for system health including module requirements\n\n2. **Explore the filesystem:**\n - Use ls, ll, tree to browse directories\n - Use cd <dir> to navigate, pwd to show current path\n - Use cat or edit to view file contents\n - Use find or grep to search files\n - Use du to see disk usage\n\n3. **Understand system state:**\n - mem β€” memory usage (auto-shown in header on boot)\n - status β€” network, files, modules, Ollama\n - modules β€” module manager GUI\n - health-check β€” VFS size, modules, logs, trash, skills, tool failures\n - checkpoint-list β€” VFS checkpoint snapshots\n\n4. **Agent / Orchestration state:**\n - agent-list β€” registered agents (type, capabilities, status)\n - orchestrate β€” list active orchestrated agents\n - lease-list β€” show active leases with TTL\n\n5. **When user asks a vague question:**\n - First run status and help to understand the current state\n - Then ask clarifying questions based on what you found"
+} \ No newline at end of file
diff --git a/skills/neural-vfs-management.json b/skills/neural-vfs-management.json
new file mode 100644
index 0000000..6aa5c41
--- /dev/null
+++ b/skills/neural-vfs-management.json
@@ -0,0 +1,9 @@
+{
+ "name": "neural-vfs-management",
+ "description": "Procedures for indexing and resolving semantic concepts within the Neural VFS.",
+ "tags": [],
+ "category": "general",
+ "created": "2026-06-06T02:32:54.007Z",
+ "updated": "2026-06-06T02:32:54.007Z",
+ "content": "---\nname: neural-vfs-management\ndescription: Procedures for indexing and resolving semantic concepts within the Neural VFS.\ntags: nvfs, index, semantic\n---\n\n# Neural VFS Management\n\n## Objective\nOptimize the Neural VFS index to ensure `nvfs-resolve` returns highly accurate conceptual matches.\n\n## Workflow\n1. **Index Trigger**: Call `nvfs-index` to scan and vectorize the VFS.\n2. **Verification**: Run a series of test `nvfs-resolve` calls for key concepts (e.g., \"security\", \"skills\").\n3. **Conflict Resolution**: If two files map to one concept, create a skill to disambiguate them.\n4. **Maintenance**: Periodically refresh the index after large file writes or deletions.\n\n## Module Integration\n- Primary: `NeuralVFSModule`\n- Command: `nvfs-resolve`, `nvfs-index`\n"
+} \ No newline at end of file
diff --git a/skills/security-and-safety.json b/skills/security-and-safety.json
new file mode 100644
index 0000000..b24c74a
--- /dev/null
+++ b/skills/security-and-safety.json
@@ -0,0 +1,14 @@
+{
+ "name": "security-and-safety",
+ "description": "How to use WebX11 security levels, command blocking, and safety features",
+ "tags": [
+ "security",
+ "safety",
+ "blocking",
+ "permissions"
+ ],
+ "category": "system",
+ "created": "2026-06-06T02:32:54.007Z",
+ "updated": "2026-06-06T04:17:00.189Z",
+ "content": "---\nname: security-and-safety\ndescription: How to use WebX11 security levels, command blocking, and safety features\ntags: [security, safety, blocking, permissions]\ncategory: system\n---\n## Steps\n1. **Security levels:**\n - security-level <0-3> β€” set security level:\n 0 = Permissive (no blocks, no confirms β€” anything runs)\n 1 = Standard (unknown cmds β†’ AI route, destructive β†’ confirm, system β†’ block)\n 2 = Paranoid (unknown cmds blocked entirely, destructive blocked)\n 3 = Audit (everything allowed, everything logged)\n - Default: level 1\n - security β€” show current level, blocked count, and stats\n\n2. **Command control:**\n - cmd-allow <cmd> β€” whitelist a command from security checks\n - cmd-deny <cmd> β€” blacklist/block a command entirely\n - whitelist built-in: help, clear, ls, cat, pwd, whoami, df, free, top, ps, echo, date, env, history\n\n3. **What gets blocked at each level:**\n - Unknown commands: Level 1 β†’ AI routed, Level 2+ β†’ blocked\n - Destructive commands (delete, write, save, format, etc.): Level 1 β†’ confirmation, Level 2+ β†’ blocked\n - System commands (reboot, shutdown, format, kill): Level 1+ β†’ blocked\n - Suspicious flags (--execute, --eval, --shell): Level 1+ β†’ blocked\n\n4. **Safety checklist:**\n - Check security: security shows your current level\n - Before running risky commands: create a checkpoint first\n - For temporary relax: security-level 0, then restore to 1\n - For total lockdown before leaving: security-level 2\n\n5. **When to use:**\n - User wants to lock down the terminal β†’ security-level 2\n - User wants to allow a blocked command β†’ cmd-allow <cmd>\n - Debugging strange behavior β†’ verify security-level (user may have set it higher)"
+} \ No newline at end of file
diff --git a/skills/self-patch-friction.json b/skills/self-patch-friction.json
new file mode 100644
index 0000000..f0db955
--- /dev/null
+++ b/skills/self-patch-friction.json
@@ -0,0 +1,13 @@
+{
+ "name": "self-patch-friction",
+ "description": "Automatically detects and resolves desync between World Model beliefs and VFS reality.",
+ "tags": [
+ "autonomic",
+ "self-healing",
+ "vfs"
+ ],
+ "category": "general",
+ "created": "2026-06-06T02:32:54.007Z",
+ "updated": "2026-06-06T02:32:54.007Z",
+ "content": "---\nname: self-patch-friction\ndescription: Automatically detects and resolves desync between World Model beliefs and VFS reality.\ntags: [autonomic, self-healing, vfs]\n---\n\n## Protocol: Self-Patch-Friction\n1. **Verification**: Run `list_files` on the suspected path.\n2. **Gap Analysis**: Compare the result with internal state/World Model.\n3. **Materialization**: If a required file/directory is missing but conceptually necessary, create it immediately.\n4. **Logging**: Record the event in `/logs/friction.log`.\n5. **Confirmation**: Re-verify the file existence using `read_file` or `list_files`.\n"
+} \ No newline at end of file
diff --git a/skills/sentinel-audit.json b/skills/sentinel-audit.json
new file mode 100644
index 0000000..99765c0
--- /dev/null
+++ b/skills/sentinel-audit.json
@@ -0,0 +1,14 @@
+{
+ "name": "sentinel-audit",
+ "description": "Analyzes /friction.log to identify recurring system failures and propose architectural pivots.",
+ "tags": [
+ "sentinel",
+ "audit",
+ "stability",
+ "self-healing"
+ ],
+ "category": "general",
+ "created": "2026-06-06T02:32:54.007Z",
+ "updated": "2026-06-06T02:32:54.007Z",
+ "content": "---\nname: sentinel-audit\ndescription: Analyzes /friction.log to identify recurring system failures and propose architectural pivots.\ntags: [sentinel, audit, stability, self-healing]\n---\n\n# Sentinel Audit Procedure\n\n## 1. Friction Extraction\n- Call `read_file('/friction.log')`.\n- Parse all entries with the format `[Timestamp] | [Type] | [Context] | [Score] | [Pivot]`.\n\n## 2. Pattern Analysis\n- Group friction entries by `Type` (ERROR, LAG, REPETITION).\n- Calculate the \"Aggregate Friction Score\" (Sum of scores / number of entries).\n- Identify the \"Hotspot\" (The context appearing most frequently).\n\n## 3. Proposal Generation\n- If `Hotspot` is a specific module $\\rightarrow$ Suggest `view_module()` for a bug hunt.\n- If `Hotspot` is a repeated tool call $\\rightarrow$ Suggest `create_skill()` to automate the sequence.\n- If `Hotspot` is a system timeout $\\rightarrow$ Suggest `ai-config` adjustment for timeouts.\n\n## 4. Execution\n- Log the audit results to `/system/logs/sentinel-audit-results.md`.\n- Notify the user of the most critical \"Pivot\" required.\n"
+} \ No newline at end of file
diff --git a/skills/skills-system-guide.json b/skills/skills-system-guide.json
new file mode 100644
index 0000000..8463573
--- /dev/null
+++ b/skills/skills-system-guide.json
@@ -0,0 +1,13 @@
+{
+ "name": "skills-system-guide",
+ "description": "How to use the skills system: load, create, patch, list, and audit skills for persistent procedural memory",
+ "tags": [
+ "skills",
+ "system",
+ "meta"
+ ],
+ "category": "system",
+ "created": "2026-06-06T02:32:54.006Z",
+ "updated": "2026-06-06T04:17:00.189Z",
+ "content": "---\nname: skills-system-guide\ndescription: How to use the skills system: load, create, patch, list, and audit skills for persistent procedural memory\ntags: [skills, system, meta]\ncategory: system\n---\n## Steps\n1. **Always load skills at task start:**\n - At the START of every task, type or call \"skill-view <name>\" or \"skill-list\"\n - Example: skill-view \"module-management\" β€” returns matching skill content\n - Example: skill-list system β€” browse skills by category\n\n2. **Create skills after complex tasks:**\n - After any task with 3+ tool calls, call \"skill-create\"\n - Required fields: name (kebab-case), description, content (markdown with YAML frontmatter)\n - Optional: tags (comma-separated), category (e.g. research, system, dev)\n - Skills persist in /skills/ as .md files with /skills/index.json for fast lookup\n - Skill pack auto-seeds 8 core skills on first boot\n\n3. **Patch skills when they're outdated:**\n - If a stored procedure has wrong steps, call \"skill-patch <name>\"\n - This replaces the entire skill content and updates the index\n - Do NOT create a duplicate β€” always patch the existing skill\n\n4. **Auto-created error skills:**\n - If the same tool fails 3+ times, a workaround skill is created automatically\n - Named tool-<name>-workaround (e.g. tool-write_file-workaround)\n\n5. **Audit and maintenance:**\n - skill-list <category?> β€” browse available skills, optionally filter\n - skill-export <name> β€” download a skill as markdown\n - skill-import <json> β€” bulk import skills\n - skill-sync β€” re-index skills from /skills/ directory\n - Skills are audited every 20 messages for staleness (empty content, >30 days old)\n\n6. **YAML frontmatter format:**\n - Each skill file must start with: ---\\nname: <name>\\ndescription: <text>\\ntags: [...]\\ncategory: <cat>\\n---\\n\n - Steps follow under ## Steps heading\n - Use numbered lists for sequential steps"
+} \ No newline at end of file
diff --git a/skills/system-maintenance.json b/skills/system-maintenance.json
new file mode 100644
index 0000000..80104e8
--- /dev/null
+++ b/skills/system-maintenance.json
@@ -0,0 +1,15 @@
+{
+ "name": "system-maintenance",
+ "description": "How to reset, troubleshoot, and maintain the WebX11 terminal",
+ "tags": [
+ "system",
+ "maintenance",
+ "reset",
+ "troubleshoot",
+ "config"
+ ],
+ "category": "system",
+ "created": "2026-06-06T02:32:54.006Z",
+ "updated": "2026-06-06T04:17:00.189Z",
+ "content": "---\nname: system-maintenance\ndescription: How to reset, troubleshoot, and maintain the WebX11 terminal\ntags: [system, maintenance, reset, troubleshoot, config]\ncategory: system\n---\n## Steps\n1. **Factory reset (wipes everything):**\n - factory-reset --confirm β€” clears all webx11_ localStorage keys, resets VFS, reloads\n - Use only when the system is in an unrecoverable state\n\n2. **Soft VFS reset:**\n - reset-vfs --confirm β€” clears only the filesystem, preserves settings/profile/modules\n\n3. **Config management:**\n - config-list β€” show all config keys and values\n - config-set <key> <value> β€” set a config value\n - config-delete <key> β€” remove a config key\n - config-export β€” dump all config as JSON\n - config-reset β€” restore defaults (use before factory-reset if you want to save data)\n\n4. **Security level:**\n - security-level <0-3> β€” set security level (0=Permissive, 1=Standard, 2=Paranoid, 3=Audit)\n - security β€” show current security level, blocked count, and stats\n - cmd-allow <cmd> β€” whitelist a command from security checks\n - cmd-deny <cmd> β€” blacklist a command\n\n5. **Health checks (run automatically after complex tasks):**\n - Check module loading status: loaded vs total\n - Check for pending module edits\n - Check memory usage (high if >100MB)\n - Check skill count (0 skills after 2+ tool calls β†’ suggest create_skill)\n - health-check β€” full audit: VFS size, modules, logs, trash, skills, tool failures\n\n6. **Font size and display:**\n - font-size <8-32> β€” set terminal font size, persists across sessions\n - setfont β€” alias for font-size\n\n7. **Checkpoints:**\n - checkpoint [name] β€” snapshot current VFS state\n - checkpoint-list β€” list all checkpoints\n - rollback <name> β€” restore from checkpoint\n\n8. **When to use:**\n - System is slow or modules fail to load β†’ check check_updates, mem\n - User says \"reset everything\" β†’ factory-reset --confirm\n - User says \"clear my files but keep settings\" β†’ reset-vfs --confirm\n - User reports security concerns β†’ security-level or cmd-allow/cmd-deny"
+} \ No newline at end of file
diff --git a/skills/v4.5-system-sync.json b/skills/v4.5-system-sync.json
new file mode 100644
index 0000000..96f68bc
--- /dev/null
+++ b/skills/v4.5-system-sync.json
@@ -0,0 +1,13 @@
+{
+ "name": "v4.5-system-sync",
+ "description": "tags: [maintenance, world-model, security]",
+ "tags": [
+ "maintenance",
+ "world-model",
+ "security"
+ ],
+ "category": "system",
+ "created": "2026-06-06T02:32:54.007Z",
+ "updated": "2026-06-06T02:32:54.007Z",
+ "content": "---\nname: v4.5-system-sync\ndescription: \ntags: [maintenance, world-model, security]\ncategory: system\n---\n## Steps\n# v4.5-system-sync\n## Objective: Ensure World Model and System State are aligned.\n1. Check `ai-config version`.\n2. Verify `security-destructive` list contains only truly destructive commands.\n3. Run `nvfs-index` to refresh semantic mapping.\n4. Validate `get_status` output."
+} \ No newline at end of file
diff --git a/skills/vfs-path-normalize.json b/skills/vfs-path-normalize.json
new file mode 100644
index 0000000..b1bc670
--- /dev/null
+++ b/skills/vfs-path-normalize.json
@@ -0,0 +1,14 @@
+{
+ "name": "vfs-path-normalize",
+ "description": "Ensures VFS paths are sanitized by removing trailing slashes to prevent API resolution errors.",
+ "tags": [
+ "vfs",
+ "utility",
+ "pathing",
+ "fix"
+ ],
+ "category": "general",
+ "created": "2026-06-06T02:32:54.007Z",
+ "updated": "2026-06-06T02:32:54.007Z",
+ "content": "---\nname: vfs-path-normalize\ndescription: Ensures VFS paths are sanitized by removing trailing slashes to prevent API resolution errors.\ntags: [vfs, utility, pathing, fix]\n---\n\n# VFS Path Normalization Procedure\n\n## Context\nThe VFS API is sensitive to trailing slashes. A call to `/skills/` may fail while `/skills` succeeds.\n\n## Implementation\nWhenever calling `list_files`, `read_file`, or checking directory existence:\n1. Capture the intended path.\n2. If the path ends with `/` and is not the root `/`, remove the trailing slash.\n3. Pass the sanitized path to the tool.\n\n## Example\n- **Input:** `/home/user/docs/` $\\rightarrow$ **Output:** `/home/user/docs`\n- **Input:** `/skills/` $\\rightarrow$ **Output:** `/skills`\n- **Input:** `/` $\\rightarrow$ **Output:** `/`\n"
+} \ No newline at end of file
diff --git a/skills/web-search-and-fetch.json b/skills/web-search-and-fetch.json
new file mode 100644
index 0000000..4e1adb8
--- /dev/null
+++ b/skills/web-search-and-fetch.json
@@ -0,0 +1,15 @@
+{
+ "name": "web-search-and-fetch",
+ "description": "How to search the web and fetch URL content using the WebX11 proxy API",
+ "tags": [
+ "search",
+ "fetch",
+ "web",
+ "proxy",
+ "api"
+ ],
+ "category": "research",
+ "created": "2026-06-06T02:32:54.006Z",
+ "updated": "2026-06-06T04:17:00.189Z",
+ "content": "---\nname: web-search-and-fetch\ndescription: How to search the web and fetch URL content using the WebX11 proxy API\ntags: [search, fetch, web, proxy, api]\ncategory: research\n---\n## Steps\n1. **Search the web:**\n - Use search <query> or web_search(query) β€” uses /api/search which queries SearXNG + DDG fallback\n - Results include: title, url, content snippet, source engine\n - Always available (same-origin, no CORS issues)\n - 5-minute server-side cache for repeated queries\n - Alternative: use ddg or duck <query> for DuckDuckGo direct, or s <query> as alias\n\n2. **Fetch URL content:**\n - Use fetch <url> or web_fetch(url) β€” uses /api/extract which strips HTML, extracts clean text\n - Returns: title, content (up to 4000 chars), word_count, extraction method\n - SSRF protection blocks internal network addresses\n - 15-minute server-side cache\n\n3. **Search flags (via terminal search command):**\n - search <query> --summarize β€” adds AI-generated overview via Ollama\n - search <query> --fetch β€” fetches content snippets for top 3 results\n\n4. **When to use:**\n - User asks about current events, facts, research β†’ use search <query>\n - User says \"read this article\" or provides a URL β†’ use fetch <url>\n - For in-depth analysis: search first, then fetch top results"
+} \ No newline at end of file
diff --git a/skills/webdav-operations.json b/skills/webdav-operations.json
new file mode 100644
index 0000000..02be73a
--- /dev/null
+++ b/skills/webdav-operations.json
@@ -0,0 +1,15 @@
+{
+ "name": "webdav-operations",
+ "description": "How to use WebDAV cloud storage for backup, file sync, and remote file access",
+ "tags": [
+ "webdav",
+ "cloud",
+ "backup",
+ "sync",
+ "storage"
+ ],
+ "category": "system",
+ "created": "2026-06-06T02:32:54.007Z",
+ "updated": "2026-06-06T04:17:00.189Z",
+ "content": "---\nname: webdav-operations\ndescription: How to use WebDAV cloud storage for backup, file sync, and remote file access\ntags: [webdav, cloud, backup, sync, storage]\ncategory: system\n---\n## Steps\n1. **Configuration:**\n - webdav-config β€” configure WebDAV endpoint URL and credentials\n - Connection auto-tested on config; webdav-status shows connection health\n - Uses per-user token stored in .token file on the server side\n\n2. **File operations:**\n - webdav-ls [path] β€” list remote directory contents\n - webdav-push <local-path> <remote-path> β€” upload file to WebDAV\n - webdav-pull <remote-path> [local-path] β€” download file from WebDAV\n - webdav-explorer β€” GUI file browser for WebDAV\n - webdav-browser β€” CLI file browser for WebDAV\n\n3. **Backup & Restore:**\n - webdav-backup β€” push full VFS snapshot to WebDAV (creates /backups/newos4-<date>.json)\n - webdav-backup-list β€” list all remote backup snapshots\n - webdav-restore <filename> β€” restore VFS from a remote backup snapshot\n\n4. **Status & Diagnostics:**\n - webdav-status β€” connection status, last sync, space information\n - If uploads fail: check webdav-config, ensure .token file is valid\n - WebDAV runs on the same server (nginx with WebDAV module), no external dependency\n\n5. **When to use:**\n - Before factory-reset: webdav-backup to store VFS remotely\n - Cross-browser: webdav-push/pull to move files between instances\n - User says \"cloud backup\" or \"remote save\" β†’ webdav-backup"
+} \ No newline at end of file
diff --git a/skills/world-model-sync.json b/skills/world-model-sync.json
new file mode 100644
index 0000000..13f3a5c
--- /dev/null
+++ b/skills/world-model-sync.json
@@ -0,0 +1,13 @@
+{
+ "name": "world-model-sync",
+ "description": "Force synchronizes the AI's world model with the live system state.",
+ "tags": [
+ "maintenance",
+ "agent-sync",
+ "v4.5"
+ ],
+ "category": "general",
+ "created": "2026-06-06T02:32:54.007Z",
+ "updated": "2026-06-06T02:32:54.007Z",
+ "content": "---\nname: world-model-sync\ndescription: Force synchronizes the AI's world model with the live system state.\ntags: [maintenance, agent-sync, v4.5]\n---\n# World Model Sync v4.5\n1. Call `list_agents` to get actual worker count and IDs.\n2. Call `get_status` to verify module and VFS health.\n3. Inject the following state into session context:\n - System Version: v4.5\n - Active Agents: [Count from list_agents]\n - Architecture: Orchestrator-led Event Bus\n - NVFS State: Async/Non-blocking\n4. Update internal memory to treat `orchestrator-0` as the primary dispatch node."
+} \ No newline at end of file