Atlas / MCP servers / sudhanshug16 / Neta

NetaBLOCK

mcp/sudhanshug16/neta

A leader agent that delegates to tiered worker agents behind the coding-agent CLI you already use — Claude Code, Codex, or OpenCode.

Verdict
BLOCK
Grade
D
Trust score
69 /100
Exposed tools
10 7r · 3w · 0d
Transport
—
License
MIT
Stars
3
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

[](https://github.com/sudhanshug16/neta/actions/workflows/ci.yml) [](https://www.npmjs.com/package/@intervene/neta)

Neta is the interface, engine, and machine service for running persistent agent teams across workspaces. You talk to the workspace leader for a workspace on a machine; sustained work becomes missions with mission leads and agents, isolated in worktrees, visible on a spine canvas.

v3 is in progress. This checkout is being rebuilt from scratch against MANIFESTO.md; the engineering plan is docs/plan/README.md. The last v2 release is 2.2.x on npm, and there is no migration: v2 sessions are not imported.

Install

npm install -g @intervene/neta

One bundled file, no runtime dependencies. Neta needs Node 22+.

Native terminal migration

The development TUI now uses our OpenCode fork with OpenTUI and SolidJS. See setup, controls and validation. Claude SDK integration is deferred. This development migration is not an npm release.

Documentation

  • MANIFESTO.md — the product: workspaces, leaders, missions,

agents, assigned access, the spine.

  • How it works — the architecture as it ships today.
  • Settings — providers, leader defaults, models.

Development

The toolchain is Bun:

bun install
bun test            # tests use fake providers and no paid APIs
bun run check       # biome + tsc --noEmit
bun run build       # dist/main.js — one file, targets Node

The supported interactive client is the OpenCode/OpenTUI terminal. Navigate its workspace leader, filter, coordinator and mission conversations from the left spine. Help · actions contains workspace, machine, archive, delivery, and reset actions. See model routing for Jev or fi

Read from source at commit 6f7415576af6OBSERVED · 2026-10-12
02

Exposed tools (10)

7 read · 3 write · 0 destructive.

ToolRiskDescription
artifactsreadInspect metadata or open a bounded text range for an artifact published for the workspace leader in this workspace. This does not publish or alter artifacts.
change_modelreadChange an existing mission lead or worker
dispatch_missionwriteCreate and start a mission with a separate mission lead. Supply the lead
list_modelsreadSearch connected models and supported thinking levels; results are paged.
missionreadRead one mission
mission_statereadCompact open-mission state, paged newest first. Supply missionId for one mission
missionsreadRead compact mission summaries in this workspace, newest number first. Use the cursor for more and mission for details.
send_messagewriteSend one useful update from the completed Coordinator reply to the Workspace leader.
setup_diagnosticreadRead a redacted page of a failed worktree setup diagnostic by mission number.
spawn_agentwriteAdd a worker to an existing mission. Coordinators pass its mission number; mission leads default to their own mission. For a new delegation, use dispatch_mission with a lead task instead.
03

Trust audit

BLOCKgrade D · trust 69/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (7 observation(s))
Network
declared (9 observation(s))
Shell
none-observed
Dependencies
pinned
Secrets in source
found

Findings (21)

HIGHFilesystem / path · fs.credential_store · CWE-22, CWE-59
src/me/artifacts.ts:61
/^(?:id_rsa|id_ed25519|credentials|secrets?)(?:\.|$)/i.test(part),
Why it matters. touches a credential store
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
prototypes/pi-rpc-proof/artifacts/first.rpc.jsonl:2
{"id":"state","type":"response","command":"get_state","success":true,"data":{"model":{"id":"proof-model","name":"proof-model","api":"openai-completions","provider":"proof","baseUrl":"http://127.0.0.1:
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
prototypes/pi-rpc-proof/artifacts/first.rpc.jsonl:39
{"id":"state","type":"response","command":"get_state","success":true,"data":{"model":{"id":"proof-model","name":"proof-model","api":"openai-completions","provider":"proof","baseUrl":"http://127.0.0.1:
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
prototypes/pi-rpc-proof/artifacts/reconnected.rpc.jsonl:2
{"id":"state","type":"response","command":"get_state","success":true,"data":{"model":{"id":"proof-model","name":"proof-model","api":"openai-completions","provider":"proof","baseUrl":"http://127.0.0.1:
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
prototypes/pi-rpc-proof/component-tui-proof.mjs:33
await writeFile(join(hostConfig,'models.json'),JSON.stringify({providers:{proof:{baseUrl:`http://127.0.0.1:${model.address().port}/v1`,api:'openai-completions',apiKey:'local-proof',models:[{id:'proof-
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
prototypes/pi-rpc-proof/experimental-tui-proof.mjs:40
await writeFile(join(agentDir, "models.json"), JSON.stringify({ providers: { proof: { baseUrl: `http://127.0.0.1:${port}/v1`, api: "openai-completions", apiKey: "local", models: [{ id: "proof-model",
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
test/cli-client.test.ts:24
const TOKEN = "cli-client-test-token";
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
test/routing-auth.test.ts:187
await expect(tools.request("routing.auth.save", { apiKey: "fixture-agent-secret" })).rejects.toThrow(
LOWInventory / provenance · inv.hidden_file · CWE-1104
.gitmodules
.gitmodules
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
docs/.nojekyll
.nojekyll
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWFilesystem / path · fs.credential_store · CWE-22, CWE-59
test/fixtures/remote-sshd/entrypoint.sh:4
install -m 600 /keys/authorized_keys /root/.ssh/authorized_keys
Why it matters. touches a credential store
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
prototypes/pi-rpc-proof/component-tui-proof.mjs:14
assert.equal(JSON.parse(await readFile(resolve(root,'../../node_modules/@earendil-works/pi-coding-agent/package.json'),'utf8')).version,'0.85.0');
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
prototypes/pi-rpc-proof/component-tui-proof.mjs:37
const cli = resolve(root,'../../node_modules/@earendil-works/pi-coding-agent/dist/bundle/cli.js');
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
prototypes/pi-rpc-proof/experimental-tui-proof.mjs:11
const cli = resolve(root, "../../node_modules/@earendil-works/pi-coding-agent/dist/bundle/cli.js");
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
prototypes/pi-rpc-proof/proof.mjs:12
const piCli = resolve(root, "../../node_modules/@earendil-works/pi-coding-agent/dist/bundle/cli.js");
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
prototypes/pi-rpc-proof/remote-chat.mjs:5
import { createInteractiveTui } from '../../node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/tui-renderer.js';
INFOInventory / provenance · inv.oversize · CWE-1104
design/canvas-directions/neta-desktop-canvas.html
design/canvas-directions/neta-desktop-canvas.html
Why it matters. 3481173 bytes not read
INFOInventory / provenance · inv.oversize · CWE-1104
docs/plan/shots/navigator-hidden.png
docs/plan/shots/navigator-hidden.png
Why it matters. 1208651 bytes not read
INFOInventory / provenance · inv.oversize · CWE-1104
docs/plan/shots/spine-closed-nodes.png
docs/plan/shots/spine-closed-nodes.png
Why it matters. 1200582 bytes not read
INFOInventory / provenance · inv.oversize · CWE-1104
docs/plan/shots/spine-now.png
docs/plan/shots/spine-now.png
Why it matters. 1228213 bytes not read
INFOPrompt injection · prompt.credential_read · CWE-94, CWE-1427
docs/model-routing.md:111
Open `/routing`, paste your TypeSafe/Jev API key into the masked field, and
Why it matters. asks the agent to read credentials

Gates applied: no_behavioural_pass.

Audited 2026-10-12 · audit v0.4.1 · source sha 6f7415576af6full audit observations/trust-audit/mcp-server/sudhanshug16__neta.json · Report an issue / request a re-scan
04

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-126f7415576af6BLOCKD69first audit
05

Questions

What is the @intervene/neta MCP server?

A leader agent that delegates to tiered worker agents behind the coding-agent CLI you already use — Claude Code, Codex, or OpenCode.

What tools does @intervene/neta expose?

10 in total: 7 read-only, 3 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.

Is @intervene/neta safe to connect to an agent?

No — not without reading the findings first. The audit graded it D (69/100) and found 1 critical or high issue in the source. Each one is listed on this page with the file and line it is on.

What credentials does @intervene/neta need?

It reads NETA_ACTOR_TOKEN, NETA_LEADER_TOKEN and TYPESAFE_API_KEY from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How current is this page?

The grade is for one exact copy of the source (6f7415576af6), read on 2026-10-12. The repository is watched and re-audited when it changes.

Advertisement