The installer
No account. No telemetry. The vault stays on this machine.
Installer temporarily unavailable.
Windows first. One MCP snippet. You approve. The agent receives a result, never the secret.
No account. No telemetry. The vault stays on this machine.
Installer temporarily unavailable.
git clone https://github.com/0xm0w/noenv cd noenv npm ci npx tsc -p tsconfig.json --outDir dist
The default warden is TypeSafe Jev 1.14 via the TypeSafe API; nothing to download. To keep the decision on your machine, point Settings at a local agent over ACP. It sees the request, never the key.
Get OllamaLocal-hardening candidate, not a new release: deliberate uninstall warns then wipes the fixed app profile; Cancel preserves it and in-place updates retain it. Shared legacy keys or linked profiles block cleanup. Back up the matching stopped DB and key together. Windows Hello screen lock is not passkey-backed encryption; PRF custody and remote Connections are not included in this candidate.
AES-256-GCM. The installed Windows app has a password setup/unlock screen. The master key is password-wrapped (scrypt by default) and later daemon starts are locked. Run noenv unlock; it auto-locks after 15 idle minutes.
Add a TypeSafe API key for Jev, or set a local agent over ACP. Skip this and policy still holds the ceiling; anything that needs judgement comes to you.
noenv add stripe --scope charges.read reads a hidden prompt. The agent learns the alias and the ceiling.
Installed Windows candidate: use Settings > Daemon > Agent Integration & MCP to generate/rotate a private token and copy the installed-runtime config. No separate Node or source checkout is needed. Raw tokens are shown once; rotate after losing the config. The examples below are source-development examples only: replace <noenv> with your checkout. Full host notes live in docs/MCP.md.
{
"mcpServers": {
"noenv": {
"command": "node",
"args": ["<noenv>/dist/packages/mcp/src/server.js"],
"env": {
"NOENV_AGENT_ID": "cursor",
"NOENV_AGENT_TOKEN": "<generated-private-agent-token>",
"NOENV_IDE": "Cursor"
}
}
}
}{
"mcpServers": {
"noenv": {
"command": "node",
"args": ["<noenv>/dist/packages/mcp/src/server.js"],
"env": {
"NOENV_AGENT_ID": "claude-code",
"NOENV_AGENT_TOKEN": "<generated-private-agent-token>",
"NOENV_IDE": "Claude Code"
}
}
}
}VS Code uses servers, not mcpServers.
{
"servers": {
"noenv": {
"type": "stdio",
"command": "node",
"args": ["<noenv>/dist/packages/mcp/src/server.js"],
"env": {
"NOENV_AGENT_ID": "vscode",
"NOENV_AGENT_TOKEN": "<generated-private-agent-token>",
"NOENV_IDE": "VS Code"
}
}
}
}[mcp_servers.noenv] command = "node" args = ["<noenv>/dist/packages/mcp/src/server.js"] [mcp_servers.noenv.env] NOENV_AGENT_ID = "codex" NOENV_AGENT_TOKEN = "<generated-private-agent-token>" NOENV_IDE = "Codex"
{
"mcp": {
"noenv": {
"type": "local",
"command": ["node", "<noenv>/dist/packages/mcp/src/server.js"],
"environment": {
"NOENV_AGENT_ID": "opencode",
"NOENV_AGENT_TOKEN": "<generated-private-agent-token>",
"NOENV_IDE": "OpenCode"
}
}
}
}Five tools. There is no approve tool. An agent that calls the approve route itself gets 401.
Real screenshots. The credential in them is a test value.
The policy floor holds whatever the model does: ceilings, expiry and your approval still apply with the warden off, down, or wrong.
Rules and ceilings. No model.
Metadata only, via the TypeSafe API. The key stays in the daemon.
Your installed agent CLI, over the Agent Client Protocol. No key. It fails closed.
Effort: Fast, Standard or Deep. Deep runs two passes; if they disagree, the narrower scope and higher risk win and you approve. Why the floor holds: architecture.
The grant expires when that call returns.
A pending approval that you ignore is gone.
App, CLI, or the MCP revoke tool. Pending and future grants for that agent stop.
Who asked, which IDE, the scope, the warden line, your decision, execution, expiry, revocation.
No key, fragment, or hash. Same ban on MCP responses and the settings screen. The check is the 27-surface canary.
stripe → charges.read means a write never runs, even if a model recommends it.
Always-allow is only for a low, read-only repeat.
Those standing approvals live in memory and clear on restart.
Apache-2.0. Windows is the supported platform today. macOS packaging is parked.