Noeza — Think. Build. Secure.
The Noeza AI coding agent for VS Code, by NT-R LTD. Free.
Noeza brings an autonomous coding agent into a VS Code side panel — it reads your project, plans work, proposes reviewed diffs, and runs commands in your own visible terminal, only with your approval. You bring your own model; Noeza brings the agent, the safety, and the transparency.
Two things make Noeza different:
- Every command runs in your terminal, in the open. When the agent builds, tests, or runs a tool, it does so in your real, visible terminal — the same one you use — so you see the exact command and its output as they happen, and can interrupt it. Not a replay of a hidden process: the terminal doing the work.
- You bring your own model. Noeza runs none of its own, and NT-R runs no model in the path. Connect an external agent (Claude Code), a frontier provider under your own key, or any OpenAI-compatible endpoint you host — with one
/connect command. Your key and your code go to the model you chose; they never pass through NT-R.
Install
From your terminal:
curl -fsSL https://noeza.ntr-kenya.org/install.sh | sh
It downloads one signed .vsix, verifies its checksum, and installs it with your own code CLI — nothing hidden. Prefer to do it by hand:
curl -fsSL https://noeza.ntr-kenya.org/noeza.vsix -o noeza.vsix
code --install-extension noeza.vsix
Requires a VS Code-family editor (VS Code 1.93+, VSCodium, Cursor) with the code command on your PATH.
First run
Press Ctrl/Cmd + Shift + A to open the Noeza panel (or click the Noeza icon in the Activity Bar).
Connect a model you already trust:
/connect <base-url> <model> [api-key]
any OpenAI-compatible endpoint — a frontier provider under your own key, or a self-hosted one (vLLM, llama.cpp, LM Studio) — or run Claude Code inside the editor. Your API key is stored in the editor's secret storage, never in a settings file, and is only ever sent to the endpoint you set. /connect off disconnects and clears it.
Keys are stored one per provider in the OS keychain, so connecting to a
second provider never overwrites the first — switch back and forth without
re-pasting. /keys lists what is held and where each key came from.
To keep a key across reinstalls, set it in your shell profile. The
environment lives outside Noeza's install directory and profile, so an
upgrade cannot lose it:
export NOEZA_QWEN_API_KEY="sk-ws-..."
export NOEZA_OPENAI_API_KEY="sk-..."
export NOEZA_ANTHROPIC_API_KEY="sk-ant-..."
Noeza reads its own NOEZA_* variables rather than a provider's conventional
name (OPENAI_API_KEY): adopting a variable you set for something else would
send that credential to whatever endpoint Noeza happened to be pointed at. A
key in the keychain wins over one in the environment.
A key is only ever sent to the provider it was stored for. Two consequences
worth knowing:
- A local runtime never receives a key. Ollama and similar ignore the
value, so there is nothing to gain and a credential to lose.
- A self-hosted or unlisted endpoint keeps its key per host, set with
/connect <url> <model> <key>, and is never filled in from the
environment — nothing about such a URL can be verified, so the key has to
be one you typed for that exact endpoint.
Ask for something: /plan add rate limiting to the login route.
Two Noeza products, one free plan
They are independent — neither needs the other, both free:
|
|
| Noeza Extension (this) |
Adds the Noeza agent to the VS Code you already use. Your extensions, keybindings, and settings stay exactly as they are. |
| Noeza Editor |
A standalone desktop editor with the agent built into the application. Does not require VS Code or this extension. Signed installers in progress. |
See https://noeza.ntr-kenya.org/docs.
What that means for your code
The editor runs on your machine: editing, indexing, permissions, and the audit log all stay on-device. NT-R runs no model, so an agent request's code and context go only to the model you connect, under that destination's policy — never to NT-R. Point Noeza at a self-hosted or local endpoint and an agent request stays on your own machine too. NT-R never receives, stores, or proxies the API key you configure.
Commands
Type / in the panel for autocomplete. Highlights:
| Command |
What it does |
/connect <url> <model> [key] |
Connect any OpenAI-compatible model endpoint (/connect off to disconnect) |
/help |
List all commands |
/init |
Detect the stack and scaffold NOEZA.md + .noeza/ |
/plan <goal> |
Make an implementation plan before editing |
/edit <instruction> |
Edit the current file/selection with a reviewed diff |
/debug |
Structured debug loop (read → locate → patch → verify) |
/test |
Run the project's tests and repair failures |
/review |
Review the current git diff for bugs & quality |
/security-review |
Risk-ranked security findings on changed code |
/threatmodel · /harden · /secrets · /audit |
Security suite: threat model, hardening, secret scan, dependency audit |
/diff · /compact |
Show uncommitted changes / summarize the session to free context |
/keys |
Which provider keys are stored, and where each came from |
/context · /status |
Inspect loaded context / connection |
/permissions [mode] |
Show or switch permission mode |
You can also right-click a selection → Noeza: Explain / Edit Selection, or press Ctrl/Cmd+Shift+A to focus the panel.
Permission modes (security-first)
| Mode |
Behavior |
readonly |
Inspect & explain only — never writes or runs commands |
ask |
(default) Approve every file write and terminal command |
auto-edit |
Auto-write files, but still ask before running commands |
auto-all |
Act freely — but high-risk commands still ask (use in a trusted sandbox) |
Risky commands (rm -rf, git push, curl | sh, sudo, …) are flagged High and always require approval, even in auto-all. Every command runs in your visible terminal regardless of mode — you always see what ran.
How execution works
When the agent runs a command, Noeza runs it in the editor's real integrated terminal and reads its output and exit code from there — the same terminal you type into. There is no hidden subprocess: if shell integration is available it captures output directly; if not, the command still runs visibly (piped through tee) so you watch it live. A timeout or your stop sends the same Ctrl+C you would.
Architecture
src/
extension.ts Activation, commands, panel registration
panel/provider.ts WebviewViewProvider — bridges UI ↔ agent, routes slash commands, /connect
agent/
loop.ts Agent orchestration loop (model turns → tools → approvals)
tools.ts read/list/search/write/edit/run/git tools
terminal.ts Visible integrated-terminal runner (no hidden subprocess)
permissions.ts Permission engine + command risk assessment
prompts.ts System prompt + per-command prompts
audit.ts Append-only audit log (.noeza/audit/, secrets redacted)
model/
client.ts OpenAI-compatible streaming client (+ tool calls)
endpoint.ts Endpoint resolution — never invents a default (unconfigured → /connect)
context/
workspace.ts Safe paths, ignore rules, secret redaction
collector.ts Live editor + repo context
commands/registry.ts Slash-command registry + parser
media/ Webview UI (main.js, main.css, icons)
The agent loop mirrors the Claude Code / Codex pattern: the model streams text and tool calls; reads run automatically; writes and commands pass through the permission engine (auto-allow / ask / deny) before executing; results feed back until the model finishes or hits the step limit.
Security & robustness built in:
- Prompt-injection defense — all repo-derived content (file reads, search results, git diffs, selections) is wrapped as untrusted data so a hostile repo can't hijack the agent.
- Undoable edits — writes apply through VS Code
WorkspaceEdit, so every change is visible in the editor and reversible with Ctrl/Cmd+Z.
- Visible execution — commands run in your real terminal; nothing runs where you can't see it.
- Context budgeting — conversation is trimmed to a token budget;
/compact summarizes and resets. Auto-compaction keeps long sessions working.
- Audit + redaction — actions logged to
.noeza/audit/; secrets redacted from context and logs; .env/key files refused.
Build from source
cd extension
npm install
npm run compile # dev build
npm run typecheck # tsc --noEmit
npm test # unit tests
npm run package # vsce package → .vsix (then scan-package verifies the artifact)
A production build (npm run build) ships with no default endpoint — the user connects one with /connect. npm run package scans the built .vsix and refuses to produce one that carries a localhost default or a leaked secret.
License & attribution
© 2026 NT-R LTD. Noeza is proprietary, licensed under the Noeza Commercial Licence (see LICENSE). The bundled media/icon.png is a generated placeholder — replace with brand art before a marketplace listing.