
Security News
arXiv Is Rate Limiting Authors Following a Flood of AI Slop Submissions
arXiv now limits authors to two submissions a month as AI slop overwhelms moderators, delays good papers, and sparks debate over applying the limit to everyone.
@node9/proxy
Advanced tools
Node9 is the execution security layer for the Agentic Era. It encases autonomous AI Agents (Claude Code, Gemini CLI, Cursor, MCP Servers) in a deterministic security wrapper, intercepting dangerous shell commands and tool calls before they execute.
While others try to guess if a prompt is malicious (Semantic Security), Node9 governs the actual action (Execution Security).
AIs are literal. When you ask an agent to "Fix my disk space," it might decide to run docker system prune -af.
With Node9, the interaction looks like this:
Bash("docker system prune -af --volumes")Node9 initiates a Concurrent Race across all enabled channels. The first channel to receive a human signature wins and instantly cancels the others:
[Y/n] prompt for manual proxy usage and SSH sessions.Node9 doesn't just "cut the wire." When a command is blocked, it injects a Structured Negotiation Prompt back into the AI's context window. This teaches the AI why it was stopped and instructs it to pivot to a safer alternative.
Node9 takes a silent, lightweight Git snapshot before every AI file edit. If the AI hallucinates and breaks your code, run node9 undo to instantly revert โ with a full diff preview before anything changes.
# Undo the last AI action (shows diff + asks confirmation)
node9 undo
# Go back N actions at once
node9 undo --steps 3
No install needed โ test Node9's policy engine against real commands in the browser:
# Recommended โ via Homebrew (macOS / Linux)
brew tap node9-ai/node9
brew install node9
# Or via npm
npm install -g @node9/proxy
# 1. Wire Node9 to your agent
node9 setup # interactive menu โ picks the right agent for you
node9 addto claude # or wire directly
node9 addto gemini
# 2. Enable shields for the services you use
node9 shield enable postgres
node9 shield enable aws
# 3. Verify everything is wired correctly
node9 doctor
Node9 has two layers of protection. You get Layer 1 automatically. Layer 2 is one command per service.
Built into the binary. Zero configuration required. Protects the tools every developer uses.
| What it protects | Example blocked action |
|---|---|
| Git | git push --force, git reset --hard, git clean -fd |
| Shell | curl ... | bash, sudo commands |
| SQL | DELETE / UPDATE without a WHERE clause |
| Filesystem | rm -rf targeting home directory |
Shields add protection for specific infrastructure and services โ only relevant if you actually use them.
| Shield | What it protects |
|---|---|
postgres | Blocks DROP TABLE, TRUNCATE, DROP COLUMN; reviews GRANT/REVOKE |
github | Blocks gh repo delete; reviews remote branch deletion |
aws | Blocks S3 bucket deletion, EC2 termination; reviews IAM changes, RDS deletion |
filesystem | Reviews chmod 777, writes to /etc/ |
node9 shield enable postgres # protect your database
node9 shield enable aws # protect your cloud infrastructure
node9 shield list # see all available shields
node9 shield status # see what's currently active
| Mode | Target | How it works |
|---|---|---|
| Hook Mode | Claude, Gemini, Cursor | node9 addto <agent> wires native pre-execution hooks. |
| Proxy Mode | MCP Servers, Shell | node9 "npx <server>" intercepts JSON-RPC traffic. |
| Manual Mode | You | node9 rm -rf / protects you from your own typos. |
Node9 merges configuration from multiple sources in priority order. Higher tiers win:
| Tier | Source | Notes |
|---|---|---|
| 1 | Environment variables | NODE9_MODE=strict overrides everything |
| 2 | Cloud / Org policy | Set in the Node9 dashboard โ cannot be overridden locally |
| 3 | Project config | node9.config.json in the working directory |
| 4 | Global config | ~/.node9/config.json |
| 5 | Built-in defaults | Always active, no config needed |
Settings (mode, approvers, timeouts) follow the table above โ higher tier wins. A project config overrides a global config.
Smart rules work differently. All layers are concatenated into a single ordered list and evaluated first-match-wins:
built-in defaults โ global config โ project config โ shields โ advisory defaults
Because built-in block rules sit at the front of this list, they always fire before any user-defined allow rule. A project or global config cannot bypass Layer 1 protection. Within the user layers, a project block rule fires before a shield block rule โ so project policy can tighten or selectively override a shield.
Most users never need this. If you need protection beyond Layer 1 and the available shields, add Smart Rules to node9.config.json in your project root or ~/.node9/config.json globally.
Smart Rules match on raw tool arguments using structured conditions:
{
"policy": {
"smartRules": [
{
"name": "block-prod-deploy",
"tool": "bash",
"conditions": [
{ "field": "command", "op": "matches", "value": "kubectl.*--namespace=production" }
],
"verdict": "block",
"reason": "Deploying to production requires a manual release process"
}
]
}
}
Smart Rule fields:
| Field | Description |
|---|---|
tool | Tool name or glob ("bash", "mcp__postgres__*", "*") |
conditions | Array of conditions evaluated against the raw args object |
conditionMode | "all" (AND, default) or "any" (OR) |
verdict | "review" (approval prompt) | "block" (hard deny) | "allow" (skip all checks) |
reason | Human-readable explanation shown in the approval prompt and audit log |
Condition operators:
op | Meaning |
|---|---|
matches | Field value matches regex (value = pattern, flags = e.g. "i") |
notMatches | Field value does not match regex (value = pattern, flags optional) |
contains | Field value contains substring |
notContains | Field value does not contain substring |
exists | Field is present and non-empty |
notExists | Field is absent or empty |
matchesGlob | Field value matches a glob pattern (value = e.g. "**/node_modules/**") |
notMatchesGlob | Field value does not match a glob pattern |
The field key supports dot-notation for nested args: "params.query.sql".
Use node9 explain <tool> <args> to dry-run any tool call and see exactly which rule would trigger.
{
"settings": {
"mode": "standard",
"enableUndo": true,
"approvalTimeoutMs": 30000,
"approvers": {
"native": true,
"browser": true,
"cloud": true,
"terminal": true
}
}
}
| Key | Default | Description |
|---|---|---|
mode | "standard" | standard | strict | audit |
enableUndo | true | Take git snapshots before every AI file edit |
approvalTimeoutMs | 0 | Auto-deny after N ms if no human responds (0 = wait forever) |
approvers.native | true | OS-native popup |
approvers.browser | true | Browser dashboard (node9 daemon) |
approvers.cloud | true | Slack / SaaS approval |
approvers.terminal | true | [Y/n] prompt in terminal |
| Command | Description |
|---|---|
node9 setup | Interactive menu โ detects installed agents and wires hooks for you |
node9 addto <agent> | Wire hooks for a specific agent (claude, gemini, cursor) |
node9 init | Create default ~/.node9/config.json |
node9 status | Show current protection status and active rules |
node9 doctor | Health check โ verifies binaries, config, credentials, and all agent hooks |
node9 shield <cmd> | Manage shields (enable, disable, list, status) |
node9 explain <tool> [args] | Trace the policy waterfall for a given tool call (dry-run, no approval prompt) |
node9 undo [--steps N] | Revert the last N AI file edits using shadow Git snapshots |
node9 check | Called by agent hooks; evaluates a pending tool call and exits 0 (allow) or 1 (block) |
node9 doctorNode9 Doctor v1.2.0
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Binaries
โ
Node.js v20.11.0
โ
git version 2.43.0
Configuration
โ
~/.node9/config.json found and valid
โ
~/.node9/credentials.json โ cloud credentials found
Agent Hooks
โ
Claude Code โ PreToolUse hook active
โ ๏ธ Gemini CLI โ not configured (optional)
โ ๏ธ Cursor โ not configured (optional)
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
All checks passed โ
node9 explainDry-runs the policy engine and prints exactly which rule would fire โ useful for debugging:
node9 explain bash '{"command":"rm -rf /tmp/build"}'
Policy Waterfall for: bash
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Tier 1 ยท Cloud Org Policy SKIP (no org policy loaded)
Tier 2 ยท Dangerous Words BLOCK โ matched "rm -rf"
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Verdict: BLOCK (dangerous word: rm -rf)
node9 check exits immediately / Claude is never blocked
Node9 fails open by design to prevent breaking your agent. Check debug logs: NODE9_DEBUG=1 claude.
Terminal prompt never appears during Claude/Gemini sessions
Interactive agents run hooks in a "Headless" subprocess. You must enable native: true or browser: true in your config to see approval prompts.
"Blocked by Organization (SaaS)" A corporate policy has locked this action. You must click the "Approve" button in your company's Slack channel to proceed.
node9 shield enable <service> โ one-click protection for Postgres, GitHub, AWS)Node9 Pro provides Governance Locking, SAML/SSO, and VPC Deployment. Visit node9.ai
FAQs
Access control for AI agents. Set what Claude Code, Codex, Gemini, Cursor and any MCP server are allowed to do, review risky actions before they run, and keep every action on the record.
The npm package @node9/proxy receives a total of 841 weekly downloads. As such, @node9/proxy popularity was classified as not popular.
We found that @node9/proxy demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago.ย It has 1 open source maintainer collaborating on the project.

Security News
arXiv now limits authors to two submissions a month as AI slop overwhelms moderators, delays good papers, and sparks debate over applying the limit to everyone.

Research
/Security News
A new GhostAction wave hits hundreds of GitHub repos, expanding CI/CD secret theft to cloud and AI credentials in source code and git history.

Research
/Security News
Tensorlake npm SDK version 0.5.144 was compromised in a ChainDrop / Shai-Hulud attack, delivering credential-stealing malware.