A project's documentation as a wiki your AI agent already has open. Sources keep their original bytes; the agent reads them and writes pages through a gate that validates the schema, the wikilinks and the provenance. Windows desktop app, CLI and read-only MCP. No backend, your own key.
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport stdio · http counts 4 tools · 0 res
· 0 prompts
permission surface via code analysis
tools
-
ow_index
-
ow_read_page
-
ow_read_source
-
ow_sources
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit 7727eab · analyzer v33 · 2w ago
skills & prompt files 17
- agent-rules protonspy-open-wiki-7727eab/.claude/agents/code-review.md
- agent-rules protonspy-open-wiki-7727eab/.claude/agents/security-review.md
- agent-rules protonspy-open-wiki-7727eab/.claude/commands/scc-adr.md
- agent-rules protonspy-open-wiki-7727eab/.claude/commands/scc-codewiki.md
- agent-rules protonspy-open-wiki-7727eab/.claude/commands/scc-glossary.md
- agent-rules protonspy-open-wiki-7727eab/.claude/commands/scc-plan-run.md
- agent-rules protonspy-open-wiki-7727eab/.claude/commands/scc-prd.md
- agent-rules protonspy-open-wiki-7727eab/.claude/commands/scc-stack.md
- agent-rules protonspy-open-wiki-7727eab/.claude/commands/scc-wiki.md
- skill protonspy-open-wiki-7727eab/.claude/skills/adr/SKILL.md
- skill protonspy-open-wiki-7727eab/.claude/skills/codewiki/SKILL.md
- skill protonspy-open-wiki-7727eab/.claude/skills/glossary/SKILL.md
- skill protonspy-open-wiki-7727eab/.claude/skills/plan-run/SKILL.md
- skill protonspy-open-wiki-7727eab/.claude/skills/prd/SKILL.md
- skill protonspy-open-wiki-7727eab/.claude/skills/stack/SKILL.md
- skill protonspy-open-wiki-7727eab/.claude/skills/wiki/SKILL.md
- agent-rules protonspy-open-wiki-7727eab/CLAUDE.md
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 334
filesystem 158
- fs protonspy-open-wiki-7727eab/apps/desktop/src/main/agent/agent-prefs.ts :1
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs"; - fs protonspy-open-wiki-7727eab/apps/desktop/src/main/agent/agent.ts :2
import { existsSync, readFileSync } from "node:fs"; - fs protonspy-open-wiki-7727eab/apps/desktop/src/main/agent/edit-preview.ts :1
import { existsSync, readFileSync, statSync } from "node:fs"; - fs protonspy-open-wiki-7727eab/apps/desktop/src/main/agent/page-guard.ts :3
import { existsSync, readFileSync } from "node:fs"; - fs protonspy-open-wiki-7727eab/apps/desktop/src/main/agent/wiki-gate-backend.ts :1
import { existsSync, globSync, readFileSync, readdirSync, statSync } from "node:fs"; - fs protonspy-open-wiki-7727eab/apps/desktop/src/main/api.ts :1
import { existsSync, readFileSync } from "node:fs"; - fs protonspy-open-wiki-7727eab/apps/desktop/src/main/edit.ts :1
import { existsSync, readFileSync, realpathSync, rmSync } from "node:fs"; - fs protonspy-open-wiki-7727eab/apps/desktop/src/main/ingest.ts :2
import { readFile } from "node:fs/promises"; - fs protonspy-open-wiki-7727eab/apps/desktop/src/main/project.ts :1
import { existsSync, statSync } from "node:fs"; - fs protonspy-open-wiki-7727eab/apps/desktop/src/main/recorder.ts :2
import { existsSync } from "node:fs"; - fs protonspy-open-wiki-7727eab/apps/desktop/src/main/settings.ts :1
import { existsSync, readdirSync, readFileSync } from "node:fs"; - fs protonspy-open-wiki-7727eab/apps/desktop/src/main/sources.ts :1
import { existsSync, lstatSync, readFileSync, readdirSync, statSync } from "node:fs";
show 28 more
- fs protonspy-open-wiki-7727eab/apps/desktop/src/main/transcribe-run.ts :1
import { existsSync } from "node:fs"; - fs (weak) protonspy-open-wiki-7727eab/apps/desktop/tests/agent-loop.spec.ts :2
import { existsSync, mkdtempSync, mkdirSync, rmSync, writeFileSync, readFileSync } from "node:fs"; - fs (weak) protonspy-open-wiki-7727eab/apps/desktop/tests/agent-prefs.spec.ts :1
import { existsSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs"; - fs (weak) protonspy-open-wiki-7727eab/apps/desktop/tests/agent.spec.ts :10
} from "node:fs"; - fs (weak) protonspy-open-wiki-7727eab/apps/desktop/tests/announcements.spec.ts :1
import { readFileSync } from "node:fs"; - fs (weak) protonspy-open-wiki-7727eab/apps/desktop/tests/chat-pane.spec.ts :1
import { readFileSync } from "node:fs"; - fs (weak) protonspy-open-wiki-7727eab/apps/desktop/tests/chat.spec.ts :1
import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs"; - fs (weak) protonspy-open-wiki-7727eab/apps/desktop/tests/checks-pane.spec.ts :2
import { readFileSync } from "node:fs"; - fs (weak) protonspy-open-wiki-7727eab/apps/desktop/tests/design-system.spec.ts :1
import { existsSync, readdirSync, readFileSync } from "node:fs"; - fs (weak) protonspy-open-wiki-7727eab/apps/desktop/tests/edit-preview.spec.ts :1
import { mkdtempSync, mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs"; - fs (weak) protonspy-open-wiki-7727eab/apps/desktop/tests/edit.spec.ts :1
import { existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs"; - fs (weak) protonspy-open-wiki-7727eab/apps/desktop/tests/editor-ui.spec.ts :1
import { readFileSync } from "node:fs"; - fs (weak) protonspy-open-wiki-7727eab/apps/desktop/tests/empty-states.spec.ts :1
import { readFileSync } from "node:fs"; - fs (weak) protonspy-open-wiki-7727eab/apps/desktop/tests/export.spec.ts :2
import { existsSync, mkdirSync, mkdtempSync, realpathSync, rmSync, writeFileSync } from "node:fs"; - fs (weak) protonspy-open-wiki-7727eab/apps/desktop/tests/first-run.spec.ts :1
import { readFileSync } from "node:fs"; - fs (weak) protonspy-open-wiki-7727eab/apps/desktop/tests/harness-form.spec.ts :1
import { existsSync, mkdtempSync, readFileSync, rmSync } from "node:fs"; - fs (weak) protonspy-open-wiki-7727eab/apps/desktop/tests/honest-counts.spec.ts :1
import { readFileSync } from "node:fs"; - fs (weak) protonspy-open-wiki-7727eab/apps/desktop/tests/keyboard.spec.ts :1
import { readFileSync } from "node:fs"; - fs (weak) protonspy-open-wiki-7727eab/apps/desktop/tests/layout.spec.ts :1
import { readFileSync } from "node:fs"; - fs (weak) protonspy-open-wiki-7727eab/apps/desktop/tests/loaded.spec.ts :1
import { readFileSync } from "node:fs"; - fs (weak) protonspy-open-wiki-7727eab/apps/desktop/tests/open-existing.spec.ts :1
import { readFileSync } from "node:fs"; - fs (weak) protonspy-open-wiki-7727eab/apps/desktop/tests/page-guard.spec.ts :2
import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs"; - fs (weak) protonspy-open-wiki-7727eab/apps/desktop/tests/reader-keyboard.spec.ts :1
import { readFileSync } from "node:fs"; - fs (weak) protonspy-open-wiki-7727eab/apps/desktop/tests/reading-surface.spec.ts :1
import { readFileSync } from "node:fs"; - fs (weak) protonspy-open-wiki-7727eab/apps/desktop/tests/settings-pane.spec.ts :1
import { existsSync, readFileSync } from "node:fs"; - fs (weak) protonspy-open-wiki-7727eab/apps/desktop/tests/settings.spec.ts :1
import { existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs"; - fs (weak) protonspy-open-wiki-7727eab/apps/desktop/tests/shell.spec.ts :1
import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs"; - fs (weak) protonspy-open-wiki-7727eab/apps/desktop/tests/sources.spec.ts :9
} from "node:fs";
118 more not shown — this panel samples each group; the count above is the real total.
shell / exec 5
- shell protonspy-open-wiki-7727eab/apps/desktop/src/main/recorder.ts :1
import { spawn, type ChildProcessWithoutNullStreams } from "node:child_process"; - shell protonspy-open-wiki-7727eab/packages/audio/src/ffmpeg.ts :1
import { spawn } from "node:child_process"; - shell protonspy-open-wiki-7727eab/packages/audio/src/stt/index.ts :1
import { spawn } from "node:child_process"; - shell (weak) protonspy-open-wiki-7727eab/scripts/dev-desktop.mjs :20
import { spawn } from "node:child_process"; - shell (weak) protonspy-open-wiki-7727eab/scripts/fetch-ffmpeg.mjs :29
import { spawnSync } from "node:child_process";
network 5
- net protonspy-open-wiki-7727eab/apps/desktop/src/main/settings.ts :70
* The credential check doubles as the model-list fetch (R2.5, 5.4): a successful - net protonspy-open-wiki-7727eab/packages/access/src/socket.ts :2
import { createConnection, createServer, type Server } from "node:net"; - net (weak) protonspy-open-wiki-7727eab/packages/access/tests/socket.spec.ts :1
import { createConnection, createServer, type Server } from "node:net"; - net protonspy-open-wiki-7727eab/packages/audio/src/stt/groq.ts :75
const doFetch = options.fetch ?? ((url, init) => fetch(url, init)); - net (weak) protonspy-open-wiki-7727eab/scripts/fetch-ffmpeg.mjs :52
const res = await fetch(url);
secrets 1
- secrets (weak) protonspy-open-wiki-7727eab/apps/desktop/tests/agent.spec.ts :38
process.env.LANGSMITH_API_KEY = "leak";
tool registrations 4
- ow_index protonspy-open-wiki-7727eab/packages/mcp/src/index.ts :41
- ow_read_page protonspy-open-wiki-7727eab/packages/mcp/src/index.ts :48
- ow_sources protonspy-open-wiki-7727eab/packages/mcp/src/index.ts :55
- ow_read_source protonspy-open-wiki-7727eab/packages/mcp/src/index.ts :62
install hooks 1
- prepack protonspy-open-wiki-7727eab/packages/cli/package.json :15
pnpm run build
declared dependencies 11
- @eslint/js@^9.20.0
- @types/node@^22.15.3
- @vitest/coverage-v8@^3.2.4
- esbuild@^0.24.0
- eslint@^9.20.0
- eslint-config-prettier@^10.0.1
- globals@^16.0.0
- prettier@^3.5.0
- typescript@^5.9.2
- typescript-eslint@^8.24.0
- vitest@^3.2.4
obfuscation 1
- dynamic require()/import() protonspy-open-wiki-7727eab/packages/cli/tests/harness-gate.spec.ts :131
const mod = (await import(`${pathToFileURL(file).href}?v=${counter++}`)) as {