🤲 hands for your LLM

An agent that reads, writes, and executes.

File editing, shell execution, context management, and sandboxing — any provider, any sandbox, one package.

AI Provider
Sandbox
LocalRemote
index.ts
import { Agent, AiSdkProvider } from "noumen";
import { createOpenAI } from "@ai-sdk/openai";
import { LocalSandbox } from "noumen/local";

const agent = new Agent({
  provider: new AiSdkProvider({ model: createOpenAI({ apiKey: process.env.OPENAI_API_KEY }).chat("gpt-5") }),
  sandbox: LocalSandbox({ cwd: "/my/project" }),
});

const thread = agent.createThread();
for await (const event of thread.run("Fix the auth bug")) {
  // ...
}

The agent loop is identical. Only the adapters change.

Zero config to a coding agent.

npx noumen starts an interactive agent in your terminal. No config, no signup.

noumen
>npx noumen
> Add input validation to the signup handler
[ReadFile] src/handlers/signup.ts
[EditFile] src/handlers/signup.ts +14 lines
[Bash] npm test -- signup
All 9 tests passed
turn_complete tokens: 2,847 calls: 3

Everything between the LLM and the computer

Other SDKs lock you to one model or make you build the tools yourself. Noumen ships the full stack so you ship the agent.

01

Seven providers, one interface

Switch models by changing one string. Same streaming, same tool dispatch.

index.ts
// swap the string — nothing else changes
const agent = LocalAgent({ provider: "anthropic", cwd: "." });

// or use any of the 7 providers:
// "openai" | "anthropic" | "gemini" | "openrouter"
// | "bedrock" | "vertex" | "ollama"
02

Seven sandbox backends

Swap one line to change the isolation boundary — local to cloud to SSH.

index.ts
import { Agent } from "noumen";
import { LocalSandbox } from "noumen/local";
import { SshSandbox } from "noumen/ssh";

// local development
const agent = new Agent({ provider, sandbox: LocalSandbox({ cwd: "." }) });

// production — same agent, remote sandbox over SSH
const agent = new Agent({ provider, sandbox: SshSandbox({ host: "dev.example.com", cwd: "/workspace" }) });
03

Nine built-in tools

The same tools inside production coding agents, wired up and ready to go.

terminal
$ npx noumen "Add input validation to signup"

  [ReadFile]   src/handlers/signup.ts
  [EditFile]   src/handlers/signup.ts  +14 lines
  [Bash]       npm test -- signup
  ✓ All 9 tests passed
  turn_complete  tokens: 2,847  cost: $0.03
04

Resume, compact, persist

Conversations save as JSONL. Resume any thread by ID.

resume.ts
const thread = agent.createThread({ threadId: "feature-auth" });

// picks up exactly where it left off
for await (const ev of thread.run("Continue from the last change")) {
  // ...
}
05

Multi-agent orchestration

Spawn isolated subagents for focused subtasks with configurable concurrency.

swarm.ts
const thread = agent.createThread();

for await (const ev of thread.run("Refactor auth and add tests")) {
  if (ev.type === "subagent_start") {
    console.log(`  spawned: ${ev.name}`); // "test-writer"
  }
}
06

MCP, LSP, hooks, and more

Connect external tools, query language servers, intercept everything.

config.ts
const agent = LocalAgent({
  provider: "anthropic",
  options: {
    mcpServers: {
      filesystem: { command: "npx", args: ["-y", "@mcp/server-fs", "/tmp"] },
    },
    lsp: {
      typescript: { command: "typescript-language-server", args: ["--stdio"] },
    },
  },
});

Get started in four steps.

From install to running agent in under a minute.

01

Install

One package. No peer dependencies.

$npm install noumen
02

Configure

Pick a provider and a sandbox.

configure.ts
import { Agent } from "noumen";
import { LocalSandbox } from "noumen/local";

const agent = new Agent({
  provider: "anthropic",
  sandbox: LocalSandbox({ cwd: "." }),
});
03

Run

Stream events from the agent loop.

run.ts
const thread = agent.createThread();

for await (const event of thread.run("Fix the auth bug")) {
  if (event.type === "text_delta") process.stdout.write(event.text);
}
04

Ship

Embed in your app, or run the CLI.

$# zero-config interactive agent $ npx noumen

Three imports to a coding agent.

Read the quickstart, browse the docs, or just run npx noumen and go.