Native desktop app for loredex vaults — macOS · Windows · Linux: reader with working wikilinks, handoff inbox/outbox board, zoomable atlas, contract timeline, live git sync, and an in-app MCP server. Part of the loredex agent-knowledge ecosystem.
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport stdio · streamable-http · http counts 0 tools · 0 res
· 0 prompts
permission surface via code analysis
No tools enumerated yet for this server.
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit a6fc0f7 · analyzer v28 · 18h ago
skills & prompt files 3
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 485
filesystem 31
- fs ahmedtawfeeq1-loredex-desktop-a6fc0f7/electron.vite.config.ts :1
import { readFileSync } from 'node:fs' - fs ahmedtawfeeq1-loredex-desktop-a6fc0f7/src/core/acp-spawn.ts :9
import { existsSync } from 'node:fs' - fs ahmedtawfeeq1-loredex-desktop-a6fc0f7/src/core/acp.ts :12
import { statSync } from 'node:fs' - fs ahmedtawfeeq1-loredex-desktop-a6fc0f7/src/core/atlas.ts :13
import { existsSync } from 'node:fs' - fs ahmedtawfeeq1-loredex-desktop-a6fc0f7/src/core/auth.ts :20
import { chmodSync, existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs' - fs ahmedtawfeeq1-loredex-desktop-a6fc0f7/src/core/claude-plugins.ts :14
import { readFileSync } from 'node:fs' - fs ahmedtawfeeq1-loredex-desktop-a6fc0f7/src/core/client-tokens.ts :18
import { chmodSync, existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs' - fs ahmedtawfeeq1-loredex-desktop-a6fc0f7/src/core/contracts.ts :11
import { readdirSync } from 'node:fs' - fs ahmedtawfeeq1-loredex-desktop-a6fc0f7/src/core/db/index.ts :7
import { existsSync, renameSync } from 'node:fs' - fs ahmedtawfeeq1-loredex-desktop-a6fc0f7/src/core/db/native-binding.ts :14
import { existsSync } from 'node:fs' - fs ahmedtawfeeq1-loredex-desktop-a6fc0f7/src/core/discovery.ts :7
import { chmodSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs' - fs ahmedtawfeeq1-loredex-desktop-a6fc0f7/src/core/engine.ts :8
import { existsSync, mkdirSync, mkdtempSync, readFileSync, realpathSync, renameSync, rmSync, statSync, unlinkSync, writeFileSync } from 'node:fs' - fs ahmedtawfeeq1-loredex-desktop-a6fc0f7/src/core/facets.ts :8
import { statSync } from 'node:fs' - fs ahmedtawfeeq1-loredex-desktop-a6fc0f7/src/core/genudo-pull.ts :25
import { type Dirent, mkdirSync, readdirSync, rmSync, writeFileSync } from 'node:fs' - fs ahmedtawfeeq1-loredex-desktop-a6fc0f7/src/core/git.ts :15
import { chmodSync, mkdtempSync, writeFileSync } from 'node:fs' - fs ahmedtawfeeq1-loredex-desktop-a6fc0f7/src/core/kb-export.ts :13
import { existsSync, readFileSync, readdirSync } from 'node:fs' - fs ahmedtawfeeq1-loredex-desktop-a6fc0f7/src/core/langsmith-trace.ts :15
import { mkdirSync, writeFileSync } from 'node:fs' - fs ahmedtawfeeq1-loredex-desktop-a6fc0f7/src/core/n8n-install.ts :20
import { existsSync } from 'node:fs' - fs ahmedtawfeeq1-loredex-desktop-a6fc0f7/src/core/old-platform.ts :23
import { existsSync, readFileSync, writeFileSync } from 'node:fs' - fs ahmedtawfeeq1-loredex-desktop-a6fc0f7/src/core/session-media.ts :24
import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs' - fs ahmedtawfeeq1-loredex-desktop-a6fc0f7/src/core/settings.ts :11
import { existsSync, readFileSync, renameSync } from 'node:fs' - fs ahmedtawfeeq1-loredex-desktop-a6fc0f7/src/core/staged-edits.ts :17
import { type Dirent, existsSync, readFileSync, readdirSync, statSync } from 'node:fs' - fs ahmedtawfeeq1-loredex-desktop-a6fc0f7/src/core/terminals.ts :10
import { statSync } from 'node:fs' - fs ahmedtawfeeq1-loredex-desktop-a6fc0f7/src/core/tree.ts :9
import { readdirSync } from 'node:fs' - fs ahmedtawfeeq1-loredex-desktop-a6fc0f7/src/core/watcher.ts :7
import { realpathSync } from 'node:fs' - fs ahmedtawfeeq1-loredex-desktop-a6fc0f7/src/core/win-spawn.ts :23
import { existsSync, readdirSync } from 'node:fs' - fs ahmedtawfeeq1-loredex-desktop-a6fc0f7/src/core/wizard.ts :9
import { existsSync, mkdirSync, readdirSync } from 'node:fs' - fs ahmedtawfeeq1-loredex-desktop-a6fc0f7/src/main/dialogs.ts :7
import { mkdirSync, readFileSync, writeFileSync } from 'node:fs' - fs ahmedtawfeeq1-loredex-desktop-a6fc0f7/src/main/path-containment.ts :12
import { realpathSync } from 'node:fs' - fs ahmedtawfeeq1-loredex-desktop-a6fc0f7/src/main/shell-open.ts :8
import { statSync } from 'node:fs' - fs ahmedtawfeeq1-loredex-desktop-a6fc0f7/src/main/zoom.ts :20
import { existsSync, readFileSync, writeFileSync } from 'node:fs'
shell / exec 15
- shell ahmedtawfeeq1-loredex-desktop-a6fc0f7/src/core/acp-spawn.ts :8
import { spawn, type ChildProcessWithoutNullStreams } from 'node:child_process' - shell ahmedtawfeeq1-loredex-desktop-a6fc0f7/src/core/auth.ts :18
import { execFile } from 'node:child_process' - shell ahmedtawfeeq1-loredex-desktop-a6fc0f7/src/core/client-tokens.ts :17
import { execFile } from 'node:child_process' - shell ahmedtawfeeq1-loredex-desktop-a6fc0f7/src/core/contracts.ts :94
return new RegExp(`^${re}$`, 'i') - shell ahmedtawfeeq1-loredex-desktop-a6fc0f7/src/core/engine.ts :6
import { execFile } from 'node:child_process' - shell ahmedtawfeeq1-loredex-desktop-a6fc0f7/src/core/genudo-auth.ts :17
import { execFile } from 'node:child_process' - shell ahmedtawfeeq1-loredex-desktop-a6fc0f7/src/core/genudo-migrate.ts :18
// so it can't fire early at a blank line inside the block (unlike `$` with the `m` - shell ahmedtawfeeq1-loredex-desktop-a6fc0f7/src/core/git.ts :14
import { execFile, execFileSync, spawn } from 'node:child_process' - shell ahmedtawfeeq1-loredex-desktop-a6fc0f7/src/core/github.ts :16
import { execFile, execFileSync } from 'node:child_process' - shell ahmedtawfeeq1-loredex-desktop-a6fc0f7/src/core/handlers.ts :5
import { execFile } from 'node:child_process' - shell ahmedtawfeeq1-loredex-desktop-a6fc0f7/src/core/n8n-install.ts :19
import { execFile } from 'node:child_process' - shell ahmedtawfeeq1-loredex-desktop-a6fc0f7/src/core/terminals.ts :73
const pty = spawn(shell, process.platform === 'win32' ? [] : ['-l'], { - shell ahmedtawfeeq1-loredex-desktop-a6fc0f7/src/core/win-spawn.ts :9
* — so `execFile('npx', …)` fails with ENOENT even though Node is installed. - shell ahmedtawfeeq1-loredex-desktop-a6fc0f7/src/renderer/src/agent/slashCommands.ts :45
* `slashQuery` only matches while the draft is still one bare token (`^/(\S*)$`), - shell ahmedtawfeeq1-loredex-desktop-a6fc0f7/src/renderer/src/stores/agentPanel.ts :272
/** open/close + persist — no session spawn (unlike the terminal toggle) */
network 9
- net ahmedtawfeeq1-loredex-desktop-a6fc0f7/src/core/genudo-auth.ts :18
import { createServer } from 'node:http' - net ahmedtawfeeq1-loredex-desktop-a6fc0f7/src/core/genudo-http.ts :36
const res = await fetch(endpoint, { - net ahmedtawfeeq1-loredex-desktop-a6fc0f7/src/core/langsmith-config.ts :121
const res = await fetch(`${base}/api/v1/sessions?limit=1`, { - net ahmedtawfeeq1-loredex-desktop-a6fc0f7/src/core/langsmith-trace.ts :50
const res = await fetch(`${langsmithEndpoint()}/api/v1/runs/query`, { - net ahmedtawfeeq1-loredex-desktop-a6fc0f7/src/core/mcp-server.ts :11
import { createServer, type IncomingMessage, type Server, type ServerResponse } from 'node:http' - net ahmedtawfeeq1-loredex-desktop-a6fc0f7/src/core/n8n-config.ts :85
const res = await fetch(`${base}/api/v1/workflows?limit=1`, { - net ahmedtawfeeq1-loredex-desktop-a6fc0f7/src/core/poller.ts :214
/** fetch (outside the lock) + parse remote events + cursor discipline. */ - net ahmedtawfeeq1-loredex-desktop-a6fc0f7/src/renderer/src/stores/updateCheck.ts :66
const res = await fetch(RELEASES_API, { - net ahmedtawfeeq1-loredex-desktop-a6fc0f7/src/renderer/src/views/handoffs/InboxView.tsx :4
* company-wide fetch (lanes stay pure handoff-lanes derivations), a RowItem
database 1
- db ahmedtawfeeq1-loredex-desktop-a6fc0f7/src/core/db/index.ts :9
import Database from 'better-sqlite3'
install hooks 1
- postinstall ahmedtawfeeq1-loredex-desktop-a6fc0f7/package.json :15
node scripts/fix-pty-spawn-helper.mjs
declared dependencies 48
- @modelcontextprotocol/sdk@1.29.0
- @agentclientprotocol/claude-agent-acp@0.59.0
- @agentclientprotocol/codex-acp@1.1.4
- @agentclientprotocol/sdk@1.2.1
- @codemirror/commands@6.10.4
- @codemirror/lang-json@^6.0.2
- @codemirror/lang-markdown@6.5.0
- @codemirror/lang-yaml@^6.1.3
- @codemirror/language@6.12.4
- @codemirror/search@6.7.1
- @codemirror/state@6.7.1
- @codemirror/view@6.43.6
- @lezer/highlight@1.2.3
- @parcel/watcher@2.5.4
- @xterm/addon-fit@0.11.0
- @xterm/addon-search@0.16.0
- @xterm/addon-web-links@0.12.0
- @xterm/xterm@6.0.0
- better-sqlite3@12.11.1
- loredex@file:vendor/loredex-2.11.0-agentops.tgz
- mermaid@11.16.0
- node-pty@1.1.0
- react@19.2.7
- react-dom@19.2.7
- rehype-highlight@7.0.2
- rehype-react@8.0.0
- rehype-sanitize@6.0.0
- remark-gfm@4.0.1
- remark-parse@11.0.0
- remark-rehype@11.1.2
- unified@11.0.5
- unist-util-visit@5.0.0
- zod@^4.4.3
- zustand@5.0.8
- @testing-library/dom@^10.4.1
- @testing-library/react@^16.3.2
- @types/better-sqlite3@7.6.13
- @types/node@26.1.1
- @types/react@19.2.17
- @types/react-dom@19.2.3
- @vitejs/plugin-react@5.2.0
- electron@43.1.0
- electron-builder@26.15.3
- electron-vite@4.0.1
- jsdom@^27.4.0
- typescript@5.9.3
- vite@7.3.6
- vitest@4.1.10
cursor-plugin 1
- opaque (low) ahmedtawfeeq1-loredex-desktop-a6fc0f7/.cursor/rules/loredex.mdc
bundled .cursor/ plugin descriptor (ahmedtawfeeq1-loredex-desktop-a6fc0f7/.cursor/rules/loredex.mdc) — presence-detected; review the descriptor