Electron desktop automation worker — 100+ system tools (Chrome/CDP, JS exec, screenshots, file/shell ops) over MCP & HTTP, with a homepage UI for managing local & remote AI teams.
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport stdio · http · sse counts 0 tools · 0 res
· 0 prompts
permission surface via code analysis
No tools enumerated yet for this server.
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 126
filesystem 50
- fs cicy-ai-cicy-desktop-eb5c073/src/app-updater.js :19
const fs = require("fs"); - fs cicy-ai-cicy-desktop-eb5c073/src/backends/auth-loopback.js :24
const fs = require("fs"); - fs cicy-ai-cicy-desktop-eb5c073/src/backends/ipc.js :9
const fs = require("fs"); - fs cicy-ai-cicy-desktop-eb5c073/src/backends/local-teams.js :17
const fs = require("fs"); - fs cicy-ai-cicy-desktop-eb5c073/src/backends/registry.js :10
const fs = require("fs"); - fs cicy-ai-cicy-desktop-eb5c073/src/backends/sidecar-ipc.js :19
const fs = require("fs"); - fs cicy-ai-cicy-desktop-eb5c073/src/backends/window-manager.js :10
const fs = require("fs"); - fs cicy-ai-cicy-desktop-eb5c073/src/chrome/chrome-launcher.js :4
const fs = require("fs"); - fs cicy-ai-cicy-desktop-eb5c073/src/chrome/debugger-port-resolver.js :4
const fs = require("fs"); - fs cicy-ai-cicy-desktop-eb5c073/src/cloud/cloud-client.js :97
const fs = require("fs"); - fs cicy-ai-cicy-desktop-eb5c073/src/i18n/index.js :10
const fs = require("fs"); - fs cicy-ai-cicy-desktop-eb5c073/src/main-old.js :5
const fs = require("fs"); - fs cicy-ai-cicy-desktop-eb5c073/src/main.js :6
const fs = require("fs"); - fs cicy-ai-cicy-desktop-eb5c073/src/master/chrome-config.js :4
const fs = require("fs"); - fs cicy-ai-cicy-desktop-eb5c073/src/master/master-token-manager.js :4
const fs = require("fs"); - fs cicy-ai-cicy-desktop-eb5c073/src/master/worker-inventory.js :4
const fs = require("fs"); - fs cicy-ai-cicy-desktop-eb5c073/src/profiles/profile-store.js :24
const fs = require("fs"); - fs cicy-ai-cicy-desktop-eb5c073/src/profiles/trusted-origins-store.js :17
const fs = require("fs"); - fs cicy-ai-cicy-desktop-eb5c073/src/server/logging.js :6
const fs = require("fs"); - fs cicy-ai-cicy-desktop-eb5c073/src/sidecar/cicy-code.js :19
const fs = require("fs"); - fs cicy-ai-cicy-desktop-eb5c073/src/sidecar/colima-docker.js :30
const fs = require("fs"); - fs cicy-ai-cicy-desktop-eb5c073/src/sidecar/docker.js :17
const fs = require("fs"); - fs cicy-ai-cicy-desktop-eb5c073/src/sidecar/host-mihomo.js :22
const fs = require("fs"); - fs cicy-ai-cicy-desktop-eb5c073/src/sidecar/localbin.js :35
const fs = require("fs"); - fs cicy-ai-cicy-desktop-eb5c073/src/sidecar/native.js :17
const fs = require("fs"); - fs cicy-ai-cicy-desktop-eb5c073/src/sidecar/runtime.js :31
const fs = require("fs"); - fs cicy-ai-cicy-desktop-eb5c073/src/sidecar/wsl-docker.js :20
const fs = require("fs"); - fs cicy-ai-cicy-desktop-eb5c073/src/tabbrowser/newtab-protocol.js :15
const fs = require("fs"); - fs cicy-ai-cicy-desktop-eb5c073/src/tabbrowser/panel-cells.js :16
const fs = require("fs"); - fs cicy-ai-cicy-desktop-eb5c073/src/tools/account-tools.js :4
const fs = require("fs"); - fs cicy-ai-cicy-desktop-eb5c073/src/tools/chrome-tools.js :5
const fs = require("fs"); - fs cicy-ai-cicy-desktop-eb5c073/src/tools/desktop-snapshot-tools.js :5
const fs = require("fs"); - fs cicy-ai-cicy-desktop-eb5c073/src/tools/exec-js.js :63
const fs = require("fs"); - fs cicy-ai-cicy-desktop-eb5c073/src/tools/exec-tools.js :8
const fs = require("fs"); - fs cicy-ai-cicy-desktop-eb5c073/src/tools/file-tools.js :5
const fs = require("fs"); - fs cicy-ai-cicy-desktop-eb5c073/src/tools/hook-gemini.js :392
const fs = require('fs'); - fs cicy-ai-cicy-desktop-eb5c073/src/tools/system-tools.js :16
const fs = require("fs"); - fs cicy-ai-cicy-desktop-eb5c073/src/tools/tab-browser-tools.js :19
const fs = require("fs"); - fs cicy-ai-cicy-desktop-eb5c073/src/tools/window-tools.js :583
const fs = require("fs"); - fs cicy-ai-cicy-desktop-eb5c073/src/tray.js :12
const fs = require("fs"); - fs cicy-ai-cicy-desktop-eb5c073/src/utils/auth.js :4
const fs = require("fs"); - fs cicy-ai-cicy-desktop-eb5c073/src/utils/brand-host-electron.js :28
const fs = require("fs"); - fs cicy-ai-cicy-desktop-eb5c073/src/utils/desktop-snapshot.js :24
const fs = require("fs"); - fs cicy-ai-cicy-desktop-eb5c073/src/utils/global-json.js :4
const fs = require("fs"); - fs cicy-ai-cicy-desktop-eb5c073/src/utils/rpc-audit.js :14
const fs = require("fs"); - fs cicy-ai-cicy-desktop-eb5c073/src/utils/window-monitor.js :4
const fs = require("fs"); - fs cicy-ai-cicy-desktop-eb5c073/src/utils/window-registry.js :23
const fs = require("fs"); - fs cicy-ai-cicy-desktop-eb5c073/src/utils/window-state.js :4
const fs = require("fs"); - fs cicy-ai-cicy-desktop-eb5c073/src/utils/window-thumbnails.js :18
const fs = require("fs"); - fs cicy-ai-cicy-desktop-eb5c073/src/utils/window-utils.js :8
const fs = require("fs");
shell / exec 25
- shell cicy-ai-cicy-desktop-eb5c073/src/backends/ipc.js :118
const { execFile } = require("child_process"); - shell cicy-ai-cicy-desktop-eb5c073/src/backends/local-teams.js :23
const { execFile } = require("child_process"); - shell cicy-ai-cicy-desktop-eb5c073/src/backends/open-external.js :14
const { spawn } = require("child_process"); - shell cicy-ai-cicy-desktop-eb5c073/src/backends/sidecar-ipc.js :12
// sidecar:restart → { ok, ... } — stop + fresh spawn (same version) - shell cicy-ai-cicy-desktop-eb5c073/src/backends/window-manager.js :13
const { execFile } = require("child_process"); - shell cicy-ai-cicy-desktop-eb5c073/src/chrome/chrome-launcher.js :7
const { spawn, execFileSync } = require("child_process"); - shell cicy-ai-cicy-desktop-eb5c073/src/cloud/cloud-client.js :96
const cp = require("child_process"); - shell cicy-ai-cicy-desktop-eb5c073/src/main-old.js :641
const { exec } = require("child_process"); - shell cicy-ai-cicy-desktop-eb5c073/src/main.js :780
const { execFileSync } = require("child_process"); - shell cicy-ai-cicy-desktop-eb5c073/src/sidecar/cicy-code.js :24
const { spawn, execFileSync, execFile } = require("child_process"); - shell cicy-ai-cicy-desktop-eb5c073/src/sidecar/colima-docker.js :27
const { execFile, spawn } = require("child_process"); - shell cicy-ai-cicy-desktop-eb5c073/src/sidecar/docker.js :14
const { execFile, execFileSync, spawn } = require("child_process"); - shell cicy-ai-cicy-desktop-eb5c073/src/sidecar/host-mihomo.js :21
const { spawn, execFile } = require("child_process"); - shell cicy-ai-cicy-desktop-eb5c073/src/sidecar/localbin.js :38
const { execFile, execFileSync } = require("child_process"); - shell cicy-ai-cicy-desktop-eb5c073/src/sidecar/native.js :16
const { spawn, execFile } = require("child_process"); - shell cicy-ai-cicy-desktop-eb5c073/src/sidecar/runtime.js :30
const { execFile } = require("child_process"); - shell cicy-ai-cicy-desktop-eb5c073/src/sidecar/wsl-docker.js :17
const { execFile, execFileSync, spawn } = require("child_process"); - shell cicy-ai-cicy-desktop-eb5c073/src/tools/chrome-tools.js :8
const { execFileSync } = require("child_process"); - shell cicy-ai-cicy-desktop-eb5c073/src/tools/exec-tools.js :5
const { exec } = require("child_process"); - shell cicy-ai-cicy-desktop-eb5c073/src/tools/system-tools.js :5
const { execSync } = require("child_process"); - shell cicy-ai-cicy-desktop-eb5c073/src/utils/brand-host-electron.js :29
const cp = require("child_process"); - shell cicy-ai-cicy-desktop-eb5c073/src/utils/desktop-snapshot.js :27
const { execFileSync, spawn } = require("child_process"); - shell cicy-ai-cicy-desktop-eb5c073/src/utils/process-utils.js :4
const { exec } = require("child_process"); - shell cicy-ai-cicy-desktop-eb5c073/src/utils/rpc-guard.js :19
// child_process directly and bypass any IPC gate; closing that requires dropping - shell cicy-ai-cicy-desktop-eb5c073/src/utils/window-utils.js :72
// XSS can't `require('child_process')` to bypass the rpc:guarded gate.
network 29
- net cicy-ai-cicy-desktop-eb5c073/src/app-updater.js :20
const https = require("https"); - net cicy-ai-cicy-desktop-eb5c073/src/backends/auth-email.js :63
const res = await fetch(REQUEST_URL, { - net cicy-ai-cicy-desktop-eb5c073/src/backends/auth-loopback.js :21
const http = require("http"); - net cicy-ai-cicy-desktop-eb5c073/src/backends/homepage-react/assets/index-BdDyCznZ.js :1
(function(){const v=document.createElement("link").relList;if(v&&v.supports&&v.supports("modulepreload"))return;for(const p of document.querySelectorAll('link[rel="modulepreload"]'))o(p);new MutationO - net cicy-ai-cicy-desktop-eb5c073/src/backends/ipc.js :10
const http = require("http"); - net cicy-ai-cicy-desktop-eb5c073/src/backends/local-teams.js :20
const http = require("http"); - net cicy-ai-cicy-desktop-eb5c073/src/backends/poller.js :8
const http = require("http"); - net cicy-ai-cicy-desktop-eb5c073/src/backends/updater.js :11
const https = require("https"); - net cicy-ai-cicy-desktop-eb5c073/src/chrome/chrome-cdp-client.js :7
const response = await fetch(url); - net cicy-ai-cicy-desktop-eb5c073/src/cloud/cloud-client.js :147
const r = await fetch(url, { signal: ctrl.signal, cache: "no-store" }); - net cicy-ai-cicy-desktop-eb5c073/src/cluster/remote-executor.js :5
const response = await fetch(new URL(requestPath, baseUrl), { - net cicy-ai-cicy-desktop-eb5c073/src/cluster/worker-client.js :32
const response = await this.fetch(new URL(path, this.masterUrl), { - net cicy-ai-cicy-desktop-eb5c073/src/main-old.js :10
const http = require("http"); - net cicy-ai-cicy-desktop-eb5c073/src/main.js :80
const http = require("http"); - net cicy-ai-cicy-desktop-eb5c073/src/sidecar/cicy-code.js :21
const http = require("http"); - net cicy-ai-cicy-desktop-eb5c073/src/sidecar/docker.js :15
const https = require("https"); - net cicy-ai-cicy-desktop-eb5c073/src/sidecar/host-mihomo.js :25
const https = require("https"); - net cicy-ai-cicy-desktop-eb5c073/src/sidecar/localbin.js :57
const req = require("https").get("https://www.gstatic.com/generate_204", { timeout: 2000 }, (res) => { - net cicy-ai-cicy-desktop-eb5c073/src/sidecar/mirrors.js :58
const https = require("https"); - net cicy-ai-cicy-desktop-eb5c073/src/sidecar/net-detect.js :15
const https = require("https"); - net cicy-ai-cicy-desktop-eb5c073/src/sidecar/version.js :9
const http = require("http"); - net cicy-ai-cicy-desktop-eb5c073/src/sidecar/wsl-docker.js :1021
const https = require("https"); - net cicy-ai-cicy-desktop-eb5c073/src/tabbrowser/newtab-protocol.js :81
const up = await fetch(`http://127.0.0.1:${CICY_PORT}/newtab?profile=${encodeURIComponent(profile)}`); - net cicy-ai-cicy-desktop-eb5c073/src/tabbrowser/panel-cells.js :274
const r = await fetch("http://127.0.0.1:8008/api/tmux/panes", { - net cicy-ai-cicy-desktop-eb5c073/src/tools/cdp-tools.js :265
const blob = await fetch('data:image/png;base64,' + base64).then(r => r.blob()); - net cicy-ai-cicy-desktop-eb5c073/src/tools/exec-js.js :10
"在窗口中执行JS代码并返回结果,支持async/await。示例: document.title 或 return document.title 或 await fetch('/api').then(r=>r.json())", - net cicy-ai-cicy-desktop-eb5c073/src/tools/hook-gemini.js :393
const https = require('https'); - net cicy-ai-cicy-desktop-eb5c073/src/utils/process-utils.js :5
const net = require("net"); - net cicy-ai-cicy-desktop-eb5c073/workers/render/src/App.jsx :445
const r = await window.cicy.cloud.fetch(`${base}/_agents`, { headers: hub.token ? { Authorization: `Bearer ${hub.token}` } : {} });
secrets 2
- secrets cicy-ai-cicy-desktop-eb5c073/src/main.js :488
const workerToken = process.env.CICY_MASTER_TOKEN; - secrets cicy-ai-cicy-desktop-eb5c073/src/master/master-main.js :36
function startMasterServer({ port = 8100, masterToken = process.env.CICY_MASTER_TOKEN } = {}) {
install hooks 1
- prepublishOnly cicy-ai-cicy-desktop-eb5c073/package.json :19
node scripts/build-homepage.cjs
declared dependencies 29
- @modelcontextprotocol/sdk@^1.25.3
- chrome-remote-interface@^0.33.0
- cors@^2.8.5
- electron-context-menu@^4.0.4
- electron-log@^5.2.4
- electron-updater@6.6.2
- express@^4.18.2
- i18next@^26.2.0
- js-beautify@^1.15.4
- js-yaml@^4.1.1
- serve-index@^1.9.2
- swagger-jsdoc@^6.2.8
- swagger-ui-express@^5.0.1
- zod@3.25
- electron@41.0.3
- electron-builder@^26.7.0
- javascript-obfuscator@^5.4.7
- prettier@^3.8.1
- cicy-code-darwin-arm64@2.3.22
- cicy-code-darwin-x64@2.3.22
- cicy-code-linux-arm64@2.3.22
- cicy-code-linux-x64@2.3.22
- cicy-code-windows-x64@2.3.22
- cicy-mihomo-darwin-arm64@1.10.4
- cicy-mihomo-darwin-x64@1.10.4
- cicy-mihomo-linux-arm64@1.10.4
- cicy-mihomo-linux-x64@1.10.4
- cicy-mihomo-windows-arm64@1.10.4
- cicy-mihomo-windows-x64@1.10.4
clipboard 1
- clipboard shell call cicy-ai-cicy-desktop-eb5c073/src/tools/system-tools.js :348
execSync(`xclip -selection clipboard -t image/jpeg -i ${jpegFile}`);
perm:untrusted 1
- untrusted cicy-ai-cicy-desktop-eb5c073/src/tools/cdp-tools.js :265
const blob = await fetch('data:image/png;base64,' + base64).then(r => r.blob());