Standalone mixdog coding-agent CLI/TUI workspace.
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 v0.9.135 · analyzer v33 · 4w ago
skills & prompt files 5
- agent-rules package/src/agents/heavy-worker/AGENT.md
- agent-rules package/src/agents/maintainer/AGENT.md
- agent-rules package/src/agents/reviewer/AGENT.md
- agent-rules package/src/agents/worker/AGENT.md
- skill package/src/defaults/skills/setup/SKILL.md
danger signals1
- suspicious endpoint api.telegram.org package/src/runtime/channels/providers/telegram.mjs :11
const API_BASE = "https://api.telegram.org";
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 1028
filesystem 250
- fs (weak) package/scripts/.tmp-coverage-report.mjs :4
import { readFileSync, existsSync } from 'node:fs'; - fs (weak) package/scripts/agent-lead-e2e-probe.mjs :13
import { copyFileSync, existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs'; - fs (weak) package/scripts/agent-long-prompt-repro.mjs :4
import { copyFileSync, existsSync, mkdirSync, mkdtempSync, rmSync } from 'node:fs'; - fs (weak) package/scripts/agent-shard-spread-perf.mjs :13
import { copyFileSync, existsSync, mkdtempSync, mkdirSync, rmSync } from 'node:fs'; - fs (weak) package/scripts/agent-turn-trace-probe.mjs :12
import { copyFileSync, existsSync, mkdtempSync, mkdirSync, readFileSync, rmSync } from 'node:fs'; - fs (weak) package/scripts/build-token-addon.mjs :1
import { copyFile, mkdir } from 'node:fs/promises'; - fs (weak) package/scripts/daemon-stub.mjs :11
import { rmSync, writeFileSync } from 'node:fs'; - fs (weak) package/scripts/dependency-lock-cache-key.mjs :4
import { readFile } from 'node:fs/promises' - fs (weak) package/scripts/fixtures/spawn-lease-fixture-worker.mjs :5
import { writeFileSync } from 'node:fs'; - fs (weak) package/scripts/generate-runtime-manifest.mjs :15
import { mkdirSync, readFileSync, writeFileSync } from 'node:fs'; - fs (weak) package/scripts/llm-trace-summary.mjs :2
import { existsSync, readFileSync } from 'node:fs'; - fs (weak) package/scripts/native-spawn-test-runtime.mjs :1
import { existsSync } from 'node:fs';
show 28 more
- fs (weak) package/scripts/patch-replay.mjs :9
import { existsSync, readFileSync, readdirSync, mkdtempSync, mkdirSync, writeFileSync, rmSync } from 'node:fs'; - fs (weak) package/scripts/patch-replay.test.mjs :2
import { existsSync, mkdtempSync, mkdirSync, readFileSync, readdirSync, rmSync, writeFileSync } from 'node:fs'; - fs (weak) package/scripts/prepare-native-assets.mjs :10
} from 'node:fs/promises'; - fs (weak) package/scripts/prune-embedding-runtime.mjs :3
import { access, readdir, readFile, rm } from 'node:fs/promises' - fs (weak) package/scripts/reduction-trace-report.mjs :2
import { readFileSync } from 'node:fs'; - fs (weak) package/scripts/release-timing-report.mjs :3
import { appendFile, readFile } from 'node:fs/promises'; - fs (weak) package/scripts/routing-corpus.mjs :6
import { existsSync, readFileSync, writeFileSync } from 'node:fs'; - fs (weak) package/scripts/runtime-dependency-cache-key.mjs :4
import { readFile } from 'node:fs/promises' - fs (weak) package/scripts/session-diag.mjs :2
import { existsSync, readFileSync } from 'node:fs'; - fs (weak) package/scripts/session-sweep.mjs :25
import { existsSync, readdirSync, statSync } from 'fs'; - fs (weak) package/scripts/tool-efficiency-diag.mjs :4
import { readFileSync, existsSync } from 'node:fs'; - fs (weak) package/scripts/tool-failures.mjs :2
import { existsSync, readFileSync } from 'node:fs'; - fs (weak) package/scripts/tool-stress.mjs :8
import { mkdtempSync, rmSync } from 'node:fs'; - fs (weak) package/scripts/tui-transcript-jitter-harness.mjs :3
import { rm } from 'node:fs/promises'; - fs (weak) package/scripts/verify-release-assets.mjs :2
import { readFile } from 'node:fs/promises'; - fs package/src/app.mjs :1
import { existsSync } from 'node:fs'; - fs package/src/headless-exec.mjs :6
} from 'node:fs'; - fs (weak) package/src/headless-exec.test.mjs :2
import { mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs'; - fs package/src/lib/keychain-cjs.cjs :6
const fs = require('fs'); - fs package/src/lib/mixdog-debug.cjs :3
const fs = require('fs'); - fs package/src/lib/rules-builder.cjs :34
const fs = require('fs'); - fs package/src/runtime/agent/orchestrator/agent-trace-io.mjs :1
import { readFileSync, existsSync, mkdirSync, appendFileSync, statSync, renameSync } from 'fs'; - fs package/src/runtime/agent/orchestrator/cache-mtime.mjs :1
import { statSync, readdirSync } from 'fs'; - fs package/src/runtime/agent/orchestrator/context/collect.mjs :1
import { readFileSync, existsSync, readdirSync } from 'fs'; - fs package/src/runtime/agent/orchestrator/dispatch-persist.mjs :21
import fs from 'fs'; - fs package/src/runtime/agent/orchestrator/internal-agents.mjs :38
import { readFileSync, statSync } from 'fs' - fs package/src/runtime/agent/orchestrator/mcp/client.mjs :1
import { readFileSync, existsSync, mkdirSync } from 'fs'; - fs (weak) package/src/runtime/agent/orchestrator/mcp/security.test.mjs :2
import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs';
210 more not shown — this panel samples each group; the count above is the real total.
shell / exec 52
- shell (weak) package/scripts/agent-shard-spread-perf.mjs :14
import { execFileSync } from 'node:child_process'; - shell (weak) package/scripts/build-token-addon.mjs :2
import { spawn } from 'node:child_process'; - shell (weak) package/scripts/generate-runtime-manifest.mjs :14
import { execSync } from 'node:child_process'; - shell (weak) package/scripts/lib/isolated-root-cleanup.mjs :5
import { spawnSync } from 'node:child_process'; - shell (weak) package/scripts/smoke.mjs :1
import { spawnSync } from 'node:child_process'; - shell (weak) package/scripts/tool-overhead-microbench.mjs :5
import { spawn } from 'node:child_process'; - shell package/src/cli.mjs :57
const { spawnSync } = await import('node:child_process'); - shell package/src/lib/keychain-cjs.cjs :3
const { spawn, spawnSync } = require('child_process'); - shell package/src/runtime/agent/orchestrator/mcp/child-tree.mjs :11
import { spawn } from 'node:child_process'; - shell package/src/runtime/agent/orchestrator/session/manager/session-lifecycle.mjs :93
// --- agent spawn (createSession) --- - shell (weak) package/src/runtime/agent/orchestrator/tools/builtin/git-command-tool.test.mjs :2
import { spawnSync } from 'node:child_process'; - shell package/src/runtime/agent/orchestrator/tools/builtin/native-search-client.mjs :7
import { spawn } from 'node:child_process';
show 28 more
- shell package/src/runtime/agent/orchestrator/tools/code-graph/graph-binary.mjs :61
const { spawn } = await import('node:child_process'); - shell package/src/runtime/agent/orchestrator/tools/lib/native-spawn-client.mjs :1
import { spawn } from 'node:child_process'; - shell package/src/runtime/agent/orchestrator/tools/patch/native-server.mjs :10
import { spawn } from 'node:child_process'; - shell package/src/runtime/agent/orchestrator/tools/shell-command.mjs :188
// note). The failure is at spawn() time — before any stdio/side effect — so a - shell package/src/runtime/channels/lib/executor.mjs :1
import { spawn } from "child_process"; - shell package/src/runtime/channels/lib/runtime-paths.mjs :2
import { execFileSync } from "child_process"; - shell package/src/runtime/channels/lib/session-discovery.mjs :2
import { execFileSync } from "child_process"; - shell package/src/runtime/channels/lib/voice-runtime-fetcher.mjs :38
import { spawnSync } from 'child_process' - shell package/src/runtime/channels/lib/voice-transcription.mjs :1
import { spawn } from "child_process"; - shell package/src/runtime/channels/lib/whisper-server.mjs :39
import { spawn, spawnSync } from 'node:child_process'; - shell package/src/runtime/media/renditions.mjs :16
import { spawn } from 'child_process'; - shell package/src/runtime/media/store.mjs :12
import { spawn } from 'child_process'; - shell package/src/runtime/memory/lib/embedding-worker.mjs :8
import { execFile } from 'child_process' - shell package/src/runtime/memory/lib/llm-worker-host.mjs :2
* llm-worker-host.mjs — LLM worker host using direct spawn (no fork). - shell package/src/runtime/memory/lib/memory-process-lock.mjs :4
import { execFileSync } from 'node:child_process' - shell package/src/runtime/memory/lib/pg/adapter.mjs :205
// Not retried — same rationale as exec(): a COMMIT that fails with - shell package/src/runtime/memory/lib/pg/process.mjs :14
import { spawn, spawnSync } from 'child_process' - shell package/src/runtime/memory/lib/pg/supervisor.mjs :374
const { spawnSync } = await import('node:child_process'); - shell package/src/runtime/memory/lib/runtime-fetcher.mjs :27
import { spawnSync } from 'child_process' - shell package/src/runtime/shared/atomic-file.mjs :25
import { execFile, execFileSync } from 'child_process'; - shell package/src/runtime/shared/child-guardian.mjs :3
import { spawn } from 'node:child_process'; - shell package/src/runtime/shared/memory-snapshot.mjs :1
import { execFile } from 'node:child_process'; - shell package/src/runtime/shared/open-url.mjs :1
import { spawn } from 'child_process'; - shell package/src/runtime/shared/process-lifecycle.mjs :18
import { execFile } from 'node:child_process'; - shell package/src/runtime/shared/staged-update.mjs :37
import { spawn } from 'node:child_process'; - shell package/src/runtime/shared/turn-worktree-snapshot.mjs :1
import { spawn } from 'node:child_process'; - shell package/src/runtime/shared/update-checker.mjs :19
import { spawn } from 'node:child_process'; - shell package/src/session-runtime/workflow-agents-api.mjs :372
// spawn (the spawn path rejects unknown agent ids).
12 more not shown — this panel samples each group; the count above is the real total.
network 48
- net package/src/runtime/agent/orchestrator/agent-trace-io.mjs :259
const resp = await fetch(`${url}/admin/trace-record`, { - net package/src/runtime/agent/orchestrator/providers/anthropic-oauth-credentials.mjs :11
import { createServer } from 'http'; - net package/src/runtime/agent/orchestrator/providers/anthropic-oauth.mjs :680
const sendAttempt = (gz) => fetch(API_URL, { - net package/src/runtime/agent/orchestrator/providers/anthropic.mjs :689
const res = await fetch(`${base}/v1/models`, { - net package/src/runtime/agent/orchestrator/providers/api-usage.mjs :89
const res = await fetch(url, { headers, signal: controller.signal }); - net package/src/runtime/agent/orchestrator/providers/codex-client-meta.mjs :27
const res = await fetch('https://registry.npmjs.org/@openai/codex/latest', { - net package/src/runtime/agent/orchestrator/providers/grok-oauth-login.mjs :17
import { createServer } from 'http'; - net package/src/runtime/agent/orchestrator/providers/grok-oauth-tokens.mjs :17
import { createServer } from 'http'; - net package/src/runtime/agent/orchestrator/providers/grok-oauth.mjs :16
import { createServer } from 'http'; - net package/src/runtime/agent/orchestrator/providers/oauth-usage.mjs :315
const response = await fetch(CODEX_RESET_CREDITS_URL, fetchOptions(codexHeaders(auth))); - net package/src/runtime/agent/orchestrator/providers/openai-compat.mjs :1072
const res = await fetch(`${String(this.baseURL || '').replace(/\/+$/, '')}/models`, { - net package/src/runtime/agent/orchestrator/providers/openai-oauth-login.mjs :11
import { createServer } from 'http';
show 28 more
- net package/src/runtime/agent/orchestrator/providers/openai-oauth.mjs :315
const res = await fetch(TOKEN_URL, { - net package/src/runtime/agent/orchestrator/providers/openai-ws.mjs :282
const res = await fetch('https://api.openai.com/v1/models', { - net package/src/runtime/agent/orchestrator/providers/opencode-go-usage.mjs :52
// per successful fetch (TTL-gated, at most once per LIVE_TTL_MS), so the - net package/src/runtime/agent/orchestrator/tools/graph-binary-fetcher.mjs :89
const res = await fetch(url, { signal: AbortSignal.timeout(180_000) }); - net package/src/runtime/agent/orchestrator/tools/patch-binary-fetcher.mjs :116
const res = await fetch(url, { signal: AbortSignal.timeout(180_000) }); - net package/src/runtime/agent/orchestrator/tools/spawn-binary-fetcher.mjs :65
const response = await fetch(url, { signal: AbortSignal.timeout(180_000) }); - net package/src/runtime/agent/orchestrator/tools/token-addon-fetcher.mjs :103
const res = await fetch(url, { signal: AbortSignal.timeout(180_000) }); - net package/src/runtime/channels/lib/voice-runtime-fetcher.mjs :249
const res = await fetch(MANIFEST_URL, { signal: AbortSignal.timeout(30_000) }) - net package/src/runtime/channels/lib/webhook.mjs :1
import * as http from "http"; - net package/src/runtime/channels/lib/webhook/relay-tunnel.mjs :10
import * as http from "http"; - net package/src/runtime/channels/lib/whisper-server.mjs :36
import net from 'node:net'; - net package/src/runtime/channels/providers/discord-attachments.mjs :18
const res = await fetch(att.url, { signal: AbortSignal.timeout(timeoutMs) }); - net package/src/runtime/channels/providers/discord.mjs :374
const msgs = await ch.messages.fetch({ limit: capped }); - net package/src/runtime/channels/providers/telegram.mjs :213
res = await fetch(url, { - net package/src/runtime/media/adapters/codex-image.mjs :67
const res = await fetch(CODEX_RESPONSES_URL, { - net package/src/runtime/media/adapters/gemini-image.mjs :37
return await fetch(`${BASE_URL}/${encodeURIComponent(model)}:generateContent`, { - net package/src/runtime/media/adapters/gemini-video.mjs :38
const res = await fetch(`${BASE_URL}/interactions`, { - net package/src/runtime/media/adapters/xai-media.mjs :51
const res = await fetch(`${baseURL}/${route}`, { - net package/src/runtime/memory/index.mjs :11
import http from 'node:http' - net package/src/runtime/memory/lib/agent-ipc.mjs :9
import http from 'node:http' - net package/src/runtime/memory/lib/ko-morph.mjs :174
const res = await fetch(KIWI_MODEL_URL, { - net package/src/runtime/memory/lib/pg/process.mjs :15
import { createConnection } from 'net' - net package/src/runtime/memory/lib/pg/supervisor.mjs :20
import { createServer } from 'node:net'; - net package/src/runtime/memory/lib/runtime-fetcher.mjs :86
const res = await fetch(MANIFEST_URL, { signal: AbortSignal.timeout(30_000) }) - net package/src/runtime/search/lib/http-fetch.mjs :3
import { Agent, fetch as undiciFetch } from 'undici' - net package/src/runtime/search/lib/ssrf-guard.mjs :2
import net from 'net' - net package/src/runtime/shared/llm/http-agent.mjs :5
* call the global `fetch()` with no dispatcher, so they ride Node's default - net package/src/runtime/shared/update-checker.mjs :126
const res = await fetch(REGISTRY_URL, { signal: controller.signal });
8 more not shown — this panel samples each group; the count above is the real total.
secrets 9
- secrets package/src/runtime/agent/orchestrator/agent-runtime/cache-strategy.mjs :289
&& process.env.MIXDOG_OAI_CODEX_THREAD_CACHE_KEY !== '0' - secrets package/src/runtime/agent/orchestrator/providers/anthropic.mjs :75
this.apiKey = this.config.apiKey || (this.name === 'anthropic' ? process.env.ANTHROPIC_API_KEY : null); - secrets package/src/runtime/agent/orchestrator/providers/api-usage.mjs :361
process.env.ANTHROPIC_ADMIN_API_KEY, - secrets package/src/runtime/agent/orchestrator/providers/cursor-auth.mjs :37
if (process.env.CURSOR_ACCESS_TOKEN) { - secrets package/src/runtime/agent/orchestrator/providers/gemini.mjs :136
const apiKey = config.apiKey || process.env.GEMINI_API_KEY || ''; - secrets package/src/runtime/agent/orchestrator/providers/oauth-credential-probes.mjs :92
if (process.env.CURSOR_ACCESS_TOKEN) { - secrets package/src/runtime/agent/orchestrator/providers/openai-compat.mjs :895
const apiKey = this.config?.apiKey || process.env.XAI_API_KEY; - secrets package/src/runtime/agent/orchestrator/providers/openai-oauth.mjs :801
const threadKeyGate = String(process.env.MIXDOG_OAI_CODEX_THREAD_CACHE_KEY || '').toLowerCase(); - secrets package/src/runtime/shared/config.mjs :539
return process.env.OPENAI_USAGE_SESSION_KEY
install hooks 4
- postinstall package/package.json :46
node scripts/prune-embedding-runtime.mjs && node scripts/prepare-native-assets.mjs - prepack package/package.json :47
npm run build:tui - prepublishOnly (suspicious) package/package.json :48
node -e "if(!process.env.CI){console.error('local npm publish is disabled — run npm run release:patch');process.exit(1)}" - prepare package/vendor/ink/package.json :23
npm run build
declared dependencies 31
- @modelcontextprotocol/sdk@^1.29.0
- @anthropic-ai/sdk@^0.105.0
- @google/generative-ai@^0.24.1
- @huggingface/transformers@^3.8.1
- @mozilla/readability@^0.6.0
- chalk@^5.6.2
- cli-highlight@^2.1.11
- diff@^9.0.0
- discord.js@^14.26.4
- ink@^7.1.0
- jsdom@^27.0.0
- kiwi-nlp@^0.21.0
show 19 more
- marked@^14.1.4
- node-cron@^4.5.0
- openai@^6.44.0
- pg@^8.22.0
- puppeteer-core@^25.2.0
- react@^19.2.7
- sharp@^0.35.3
- string-width@^8.2.1
- strip-ansi@^7.2.0
- tiktoken@^1.0.22
- unpdf@^1.8.0
- undici@^8.5.0
- wrap-ansi@^10.0.0
- ws@^8.21.0
- zod@^3.25.76
- acorn@^8.17.0
- esbuild@^0.28.1
- eslint-scope@^9.1.2
- @vscode/ripgrep@^1.18.0
clipboard 3
- clipboard shell call package/src/tui/app/clipboard.mjs :54
cmd: 'clip.exe', - clipboard shell call package/src/tui/dist/index.mjs :438
const wl = await execFileBuffer("wl-paste", ["--type", "image/png"], { timeout: 3e3 }); - clipboard shell call package/src/tui/paste-attachments.mjs :214
const wl = await execFileBuffer('wl-paste', ['--type', 'image/png'], { timeout: 3000 });
obfuscation 3
- dynamic require()/import() package/scripts/tui-transcript-jitter-harness.mjs :37
await import(`${pathToFileURL(outfile).href}?run=${Date.now()}`); - dynamic require()/import() package/src/runtime/attachments/store.test.mjs :122
const freshStore = await import(`./store.mjs?integrity=${Date.now()}`); - dynamic require()/import() package/src/runtime/media/store.test.mjs :54
const store = await import(`./store.mjs?test=${Date.now()}`);