Portable local policy agent runtime with Golden Fixture regression baseline.
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport stdio · 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 1795e99 · analyzer v33 · 6d ago
danger signals2
- suspicious endpoint 169.254.169.254 (cloud metadata) lingion-Nano-researcher-1795e99/__tests__/fetch-fusion/local-fetch-primary.test.ts :155
fetchWithLocalPrimary('http://169.254.169.254/latest/meta-data', 20000, { - suspicious endpoint 169.254.169.254 (cloud metadata) lingion-Nano-researcher-1795e99/vendor/search-mcp/test/ssrf.test.js :89
() => callTool({ name: 'fetch_url', arguments: { url: 'http://169.254.169.254/latest/meta-data' } }),
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 209
filesystem 38
- fs (weak) lingion-Nano-researcher-1795e99/__tests__/adapters/http.test.ts :2
import fs from 'node:fs/promises'; - fs (weak) lingion-Nano-researcher-1795e99/__tests__/app/default-entrypoint.test.ts :3
import { readFile } from 'node:fs/promises'; - fs (weak) lingion-Nano-researcher-1795e99/__tests__/app/run-live-audit.test.ts :3
import fs from 'node:fs'; - fs (weak) lingion-Nano-researcher-1795e99/__tests__/app/run-manager.test.ts :3
import fs from 'node:fs/promises'; - fs (weak) lingion-Nano-researcher-1795e99/__tests__/app/run-policy-task.test.ts :3
import fs from 'node:fs'; - fs (weak) lingion-Nano-researcher-1795e99/__tests__/artifacts/generic-report.test.ts :3
import fs from 'node:fs/promises'; - fs (weak) lingion-Nano-researcher-1795e99/__tests__/artifacts/write-json-artifacts.test.ts :3
import fs from 'node:fs/promises'; - fs (weak) lingion-Nano-researcher-1795e99/__tests__/artifacts/write-report-html.test.ts :5
import { mkdtemp, readFile } from 'node:fs/promises'; - fs (weak) lingion-Nano-researcher-1795e99/__tests__/artifacts/write-run-transcript.test.ts :3
import fs from 'node:fs'; - fs (weak) lingion-Nano-researcher-1795e99/__tests__/domain/resolver.test.ts :3
import { mkdtemp, mkdir, rm, writeFile } from 'node:fs/promises'; - fs (weak) lingion-Nano-researcher-1795e99/__tests__/fixtures/golden-live-audit.test.ts :3
import { readFileSync } from 'node:fs'; - fs (weak) lingion-Nano-researcher-1795e99/__tests__/nanoclaw-core/poll-loop.test.ts :3
import fs from 'node:fs'; - fs (weak) lingion-Nano-researcher-1795e99/__tests__/packaging.test.ts :4
import { existsSync, readFileSync } from 'node:fs'; - fs (weak) lingion-Nano-researcher-1795e99/__tests__/policy-scanner-cli.test.ts :4
import { mkdtemp, readFile } from 'node:fs/promises'; - fs (weak) lingion-Nano-researcher-1795e99/__tests__/policy-scanner/load-config.test.ts :3
import { mkdtemp, writeFile } from 'node:fs/promises'; - fs (weak) lingion-Nano-researcher-1795e99/__tests__/policy-scanner/write-scan-artifacts.test.ts :3
import { mkdtemp, readFile } from 'node:fs/promises'; - fs (weak) lingion-Nano-researcher-1795e99/__tests__/workspace/evidence-manager.test.ts :3
import fs from 'node:fs'; - fs (weak) lingion-Nano-researcher-1795e99/__tests__/workspace/run-policy-task.workspace.test.ts :3
import fs from 'node:fs'; - fs lingion-Nano-researcher-1795e99/src/adapters/http/server.ts :3
import { readFile, realpath } from 'node:fs/promises'; - fs lingion-Nano-researcher-1795e99/src/app/live-audit-runtime.ts :3
import { mkdirSync, appendFileSync, writeFileSync } from 'node:fs'; - fs lingion-Nano-researcher-1795e99/src/app/run-live-audit.ts :3
import { appendFileSync, readFileSync, writeFileSync } from 'node:fs'; - fs lingion-Nano-researcher-1795e99/src/app/run-manager.ts :2
import fs from 'node:fs/promises'; - fs lingion-Nano-researcher-1795e99/src/app/run-policy-task.ts :2
import { mkdir } from 'node:fs/promises'; - fs (weak) lingion-Nano-researcher-1795e99/src/app/run-policy-task.workspace.test.ts :3
import fs from 'node:fs'; - fs lingion-Nano-researcher-1795e99/src/artifacts/generic-report.ts :2
import fs from 'node:fs/promises'; - fs lingion-Nano-researcher-1795e99/src/artifacts/write-run-transcript.ts :1
import fs from 'node:fs'; - fs lingion-Nano-researcher-1795e99/src/domain/resolver.ts :1
import { readFile, readdir } from 'node:fs/promises'; - fs lingion-Nano-researcher-1795e99/src/evidence/file-store.ts :1
import fs from 'node:fs/promises'; - fs lingion-Nano-researcher-1795e99/src/nanoclaw-core/claude-provider.ts :1
import fs from 'fs'; - fs lingion-Nano-researcher-1795e99/src/nanoclaw-core/mcp-core-tools.ts :9
import fs from 'fs'; - fs lingion-Nano-researcher-1795e99/src/policy-scanner/load-config.ts :1
import { readFile } from 'node:fs/promises'; - fs lingion-Nano-researcher-1795e99/src/policy-scanner/reporter/write-scan-artifacts.ts :1
import { mkdir, writeFile } from 'node:fs/promises'; - fs lingion-Nano-researcher-1795e99/src/runtime/session-manager.ts :14
import fs from 'fs'; - fs lingion-Nano-researcher-1795e99/src/workspace/atomic-json.ts :1
import fs from 'node:fs'; - fs lingion-Nano-researcher-1795e99/src/workspace/evidence-manager.ts :1
import { readFile } from 'node:fs/promises'; - fs lingion-Nano-researcher-1795e99/src/workspace/evidence-store.ts :1
import { mkdir, readFile } from 'node:fs/promises'; - fs lingion-Nano-researcher-1795e99/src/workspace/report-manager.ts :2
import { mkdir } from 'node:fs/promises'; - fs lingion-Nano-researcher-1795e99/vendor/search-mcp/src/local/json-file-provider-config-store.js :1
import fs from 'node:fs';
shell / exec 2
- shell (weak) lingion-Nano-researcher-1795e99/__tests__/packaging.test.ts :1
import { execFileSync } from 'node:child_process'; - shell (weak) lingion-Nano-researcher-1795e99/__tests__/policy-scanner-cli.test.ts :3
import { spawnSync } from 'node:child_process';
network 20
- net (weak) lingion-Nano-researcher-1795e99/__tests__/adapters/http.test.ts :20
const health = await fetch(`http://127.0.0.1:${port}/v1/health`); - net (weak) lingion-Nano-researcher-1795e99/__tests__/adapters/mcp.test.ts :15
assert.equal((await handlers.fetch({ url: 'https://example.com' })).content, 'x'); - net (weak) lingion-Nano-researcher-1795e99/__tests__/app/generic-dependencies.test.ts :28
await assert.rejects(() => provider.fetch('https://example.com', { signal: controller.signal }), /cancelled by caller/); - net (weak) lingion-Nano-researcher-1795e99/__tests__/fetch/service.test.ts :9
]).fetch('https://example.com'); - net lingion-Nano-researcher-1795e99/src/adapters/http/monitor-page.ts :108
function apiFetch(url){return authToken?fetch(url,{headers:{Authorization:'Bearer '+authToken}}):fetch(url)} - net lingion-Nano-researcher-1795e99/src/adapters/http/server.ts :1
import { createServer, type IncomingMessage, type Server, type ServerResponse } from 'node:http'; - net lingion-Nano-researcher-1795e99/src/adapters/mcp/server.ts :53
else if (exposeAtomicTools && request.params.name === 'fetch') result = await handlers.fetch(args as any, { signal: extra.signal }); - net lingion-Nano-researcher-1795e99/src/adapters/mcp/tools.ts :25
return dependencies.fetch.fetch(input.url, { signal: options.signal }); - net lingion-Nano-researcher-1795e99/src/agent/action-executor.ts :113
response = await dependencies.fetch.fetch(action.url, { signal }); - net lingion-Nano-researcher-1795e99/src/app/create-generic-dependencies.ts :92
async fetch(url, options): Promise<FetchResponse> { - net lingion-Nano-researcher-1795e99/src/app/run-policy-task.ts :63
fetchImpl: async (targetUrl, init) => await fetch(targetUrl, init), - net lingion-Nano-researcher-1795e99/src/fetch-fusion/network-safety.ts :1
import { isIP } from 'node:net'; - net lingion-Nano-researcher-1795e99/src/fetch/provider.ts :5
fetch(url: string, options?: { signal?: AbortSignal }): Promise<FetchResponse>; - net lingion-Nano-researcher-1795e99/src/fetch/service.ts :9
async fetch(url: string, options: { signal?: AbortSignal } = {}): Promise<FetchResponse> { - net lingion-Nano-researcher-1795e99/src/runtime/local-session-loop.ts :158
const page = await deps.fetchTool.fetch(action.url, deps.signal); - net (weak) lingion-Nano-researcher-1795e99/src/runtime/search-mcp-tool-adapter.test.ts :179
await assert.rejects(() => toolset.fetchTool.fetch('http://127.0.0.1:8080/internal'), /blocked unsafe network target/i); - net lingion-Nano-researcher-1795e99/src/runtime/tool-registry.ts :9
fetch(url: string, signal?: AbortSignal): Promise<FetchedPageRecord>; - net lingion-Nano-researcher-1795e99/src/search/auto/providers/extra-domestic-accessible.js :66
const response = await fetch(url, { headers: { accept: 'text/html,*/*', 'user-agent': 'Mozilla/5.0', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8' }, signal: context.signal }); - net lingion-Nano-researcher-1795e99/src/workspace/persistent-fetch-tool.ts :12
const record = await fetchTool.fetch(url, signal); - net lingion-Nano-researcher-1795e99/vendor/search-mcp/src/index.js :549
async fetch(request) {
secrets 4
- secrets (weak) lingion-Nano-researcher-1795e99/__tests__/runtime/nanoclaw-bridge.test.ts :12
NANOCLAW_API_KEY: process.env.NANOCLAW_API_KEY, - secrets lingion-Nano-researcher-1795e99/src/adapters/http/start.ts :11
const authToken = process.env.RESEARCH_HTTP_AUTH_TOKEN; - secrets lingion-Nano-researcher-1795e99/src/runtime/ask-real-claude.ts :534
apiKey: process.env.ANTHROPIC_API_KEY, - secrets lingion-Nano-researcher-1795e99/src/runtime/nanoclaw-bridge.ts :110
const apiKey = process.env.NANOCLAW_API_KEY ?? process.env.ANTHROPIC_API_KEY;
database 3
- db lingion-Nano-researcher-1795e99/src/runtime/delivery.ts :10
import type Database from 'better-sqlite3'; - db lingion-Nano-researcher-1795e99/src/runtime/session-db.ts :8
import Database from 'better-sqlite3'; - db lingion-Nano-researcher-1795e99/src/runtime/session-manager.ts :13
import type Database from 'better-sqlite3';
declared dependencies 11
- @modelcontextprotocol/sdk@^1.29.0
- @anthropic-ai/claude-agent-sdk@^0.3.154
- @anthropic-ai/sdk@^0.100.1
- @mozilla/readability@^0.6.0
- better-sqlite3@^11.8.1
- dotenv@^16.4.7
- jsdom@^29.1.1
- @types/node@^22.10.7
- playwright@^1.55.0
- tsx@^4.20.3
- typescript@^5.7.3
perm:untrusted 1
- untrusted (weak) lingion-Nano-researcher-1795e99/__tests__/adapters/http.test.ts :111
const list = await (await fetch(`http://127.0.0.1:${port}/v1/research`)).json() as any;