Skip to content
woojubbPublic

About

TypeScript framework for building AI agents — multi-provider (Anthropic, OpenAI, Google), tool calling, permissions, hooks, streaming, and CLI coding assistant

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

19 stars

Watchers

1 watching

Forks

Latest commit

 

History

8,636 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Robota — An adaptable foundation for AI agents

Our agents develop and advance our agents. We are building toward agents that can carry their own development forward on a dependable, adaptable foundation. VISION.md defines this direction; reliable autonomous self-evolution remains an ambition to build and demonstrate.

Today, Robota provides composable TypeScript libraries with strict types, multi-provider support, tool calling and a plugin/event architecture. The SDK and maintained interfaces belong to the same environment. @robota-sdk/agent-cli delivers a terminal agent with coding capabilities, assembled from the same neutral building blocks you can embed in your own application.

Evaluating with an AI agent? Start at llms.txt — the consumer map (minimal package set, capabilities, behavior contracts).

Quick start: embed an agent

Install agent-core and a provider package to run an agent. This Node.js example requires Node.js 22.12 or later and an ANTHROPIC_API_KEY environment variable. Packages declare that minimum for Node installations; runtime requirements depend on the entry and host. See the providers guide for other providers and local model servers.

npm install @robota-sdk/agent-core @robota-sdk/agent-provider @anthropic-ai/sdk

Save this example as agent.mjs:

import { ConversationAgent } from '@robota-sdk/agent-core';
import { AnthropicProvider } from '@robota-sdk/agent-provider/anthropic';

const agent = new ConversationAgent({
  name: 'MyAgent',
  aiProviders: [new AnthropicProvider({ apiKey: process.env.ANTHROPIC_API_KEY })],
  defaultModel: {
    provider: 'anthropic',
    model: 'claude-sonnet-4-6',
  },
  systemMessage: 'You are a helpful assistant.',
});

const response = await agent.run('Hello!');
console.log(response);

Run node agent.mjs. The model's response appears in the console. The text depends on the model.

Runtime migration and compatibility

Add a tool

createZodFunctionTool validates the model's arguments against a zod schema before your function runs, and types the function's input from that schema. In addition to the packages above, install agent-tools and Zod 4:

npm install @robota-sdk/agent-tools zod@4

Save this example as weather.mjs:

import { ConversationAgent } from '@robota-sdk/agent-core';
import { AnthropicProvider } from '@robota-sdk/agent-provider/anthropic';
import { createZodFunctionTool } from '@robota-sdk/agent-tools';
import { z } from 'zod';

const getWeather = createZodFunctionTool(
  'getWeather',
  'Get the current weather for a city',
  z.object({ city: z.string() }),
  async ({ city }) => `It is sunny in ${city}.`,
);

const agent = new ConversationAgent({
  name: 'WeatherAgent',
  aiProviders: [new AnthropicProvider({ apiKey: process.env.ANTHROPIC_API_KEY })],
  defaultModel: { provider: 'anthropic', model: 'claude-sonnet-4-6' },
  tools: [getWeather],
});

const answer = await agent.run('What is the weather in Seoul?');
console.log(answer);

Run node weather.mjs to see the response.

Any OpenAI-compatible endpoint works too — AI gateways, Azure, vLLM, local servers — through the OpenAI provider's baseURL (see the providers guide).

Run a query with built-in tools

agent-framework provides createQuery with built-in tools and permission checks. Install it with the Anthropic provider:

npm install @robota-sdk/agent-framework @robota-sdk/agent-tools @robota-sdk/agent-provider @anthropic-ai/sdk

With ANTHROPIC_API_KEY set, save this example as query.mjs. It shuts down the session when the query finishes:

import { createQuery } from '@robota-sdk/agent-framework';
import { createNodeFrameworkHost } from '@robota-sdk/agent-framework/node';
import { AnthropicProvider } from '@robota-sdk/agent-provider/anthropic';
import { createDefaultTools } from '@robota-sdk/agent-tools/defaults';

const query = createQuery({
  host: createNodeFrameworkHost({ createDefaultTools }),
  cwd: process.cwd(),
  provider: new AnthropicProvider({ apiKey: process.env.ANTHROPIC_API_KEY }),
  model: 'claude-sonnet-4-6',
});
try {
  console.log(await query('List all TypeScript files in src/'));
} finally {
  await query.shutdown();
}

Run node query.mjs to see the response.

createQuery runs in the default permission mode: with nobody to approve, a tool call that would ask for permission is denied. Without projectAccess, a query runs Restricted: it uses its tools in cwd but loads no project context, settings, memory or session files. See the SDK guide for sessions, permission modes, and InteractiveSession.

Use the CLI coding assistant

# Try the CLI built from these libraries (no install needed)
npx @robota-sdk/agent-cli

# Or install globally
npm install -g @robota-sdk/agent-cli
robota

No Node.js? Install the standalone binary (macOS / Linux / Windows — nothing else required):

# macOS / Linux
curl -fsSL https://raw.githubusercontent.com/woojubb/robota/main/scripts/install.sh | bash
# Windows PowerShell
irm https://raw.githubusercontent.com/woojubb/robota/main/scripts/install.ps1 | iex

The installer detects your OS and CPU, downloads the matching binary from the latest GitHub release, verifies its SHA-256 checksum, and installs robota to ~/.robota/bin (on Windows, %LOCALAPPDATA%\robota\bin, which it adds to your user PATH; on macOS/Linux it prints the PATH line to add if needed). To install a specific release, set PROJECT_RELEASE_VERSION to its version or tag, e.g. curl -fsSL … | PROJECT_RELEASE_VERSION=<version> bash. The macOS binaries are signed and notarized; the Windows binary is unsigned, so Windows may warn.

APIs may change. See CHANGELOG.md for upgrade notes.

macOS users: Korean/CJK IME input may crash macOS Terminal.app. Use iTerm2 instead.

What You Can Build With It

  • Multi-provider agents with fallback — Anthropic, OpenAI, Google Gemini, DeepSeek, Qwen and Gemma, plus OpenRouter and any OpenAI-compatible endpoint. FallbackProvider (agent-framework) moves a turn to another model when the primary is overloaded or failing; the CLI exposes it as --fallback-model. Providers guide
  • Tools with runtime validation — zod-validated function tools, plus built-in coding tools (shell, read, write, edit, glob, grep and web fetch). Building agents
  • Permissions, hooks and sandboxing — permission modes (plan, default, acceptEdits, bypassPermissions, auto), allow/ask/deny rules, lifecycle hooks, and an OS-level sandbox for shell commands (bubblewrap on Linux/WSL2, Seatbelt on macOS). Permissions and hooks
  • Sessions and a workspace daemon — saved, resumable and forkable sessions; background sessions that outlive the terminal; and one long-lived runtime per workspace (robota daemon start) that the desktop app and the full terminal UI (robota --attach) connect to. Sessions and daemon
  • MCP, both directions — connect to MCP servers (stdio or remote, including OAuth sign-in) with agent-mcp, and serve a Robota session as an MCP server with agent-transport/mcp (robota mcp serve). MCP guide
  • Devices and remote control — link your own devices, send messages and files between sessions, hand a session off to another device, and co-drive a session from a browser over pairing-gated peer-to-peer WebRTC. Devices and remote
  • Plugins and events — lifecycle plugins for conversation history, logging, usage, limits, performance, error handling, execution analytics and webhooks, on the same plugin contract you can implement yourself. Plugins guide

Architecture

Libraries below, products on top. Everything under packages/ is universal and neutral; apps and the CLI are opinionated assemblies of the libraries. Each layer builds only on the layers below it — see ARCHITECTURE.md for the full picture.

agent-cli                              ← Product interface: terminal AI coding assistant
agent-product                          ← Product composition: profiles, capability packs, slash commands, presets, the coding pack
agent-ui-terminal · agent-ui-web       ← Terminal UI (React + Ink); browser session surface (React)
agent-transport                        ← Wire protocol and carriers: ws, http, mcp, acp, webrtc, link
  ↓
agent-framework                        ← Assembly: InteractiveSession, createQuery(), createAgentRuntime()
  ↓
agent-session · agent-executor         ← Session lifecycle; background tasks and subagents
agent-tools                            ← Tool factories and the default tool set
agent-mcp · agent-plugin               ← MCP client; lifecycle plugins
agent-provider                         ← One subpath per provider vendor
  ↓
agent-interface · agent-os               ← Type contracts shared across layers; Node host primitives
agent-core                             ← Foundation: ConversationAgent engine, provider/tool/plugin contracts, permissions

Packages

Every package below is published on npm under @robota-sdk/ and has its own version. The packages index on the docs site covers each one.

Start here (embedding):

Package Description
@robota-sdk/agent-core ConversationAgent: run/runStream, history, tool calling, structured output, plugins
@robota-sdk/agent-provider Anthropic, OpenAI, Gemini, DeepSeek, Qwen, Gemma and ByteDance providers, one subpath per vendor, the shared OpenAI-compatible protocol base, and the built-in provider definitions, including OpenRouter (./builtin)
@robota-sdk/agent-tools Zod-validated function tools, built-in tool factories, sandbox ports, and the default tool set (./defaults: createDefaultTools)

App assembly — sessions, permissions, runtime:

Package Description
@robota-sdk/agent-framework Assembly layer: InteractiveSession, createQuery(), createAgentRuntime(), config/context loading
@robota-sdk/agent-session Session: permission-gated tool execution, hooks, context tracking, compaction, persistence
@robota-sdk/agent-executor Background task lifecycle, queueing and cancellation; subagent job orchestration
@robota-sdk/agent-subagent-runner Optional runner that executes subagents in child processes
@robota-sdk/agent-mcp MCP client: server definitions, activation, connections, tool catalog, OAuth sign-in
@robota-sdk/agent-plugin Lifecycle plugins: history, logging, usage, limits, performance, errors, analytics, webhooks
@robota-sdk/agent-session-analytics Session-log timing and usage analysis and reports
@robota-sdk/agent-telemetry-otel OpenTelemetry spans and GenAI metrics for agent runs and live prompt traces, GenAI or agent.* names
@robota-sdk/agent-os Node host primitives, one subpath per primitive: bounded root-relative file reads (./file-authority), operation locks (./node-lock), child-process tree termination (./process)
@robota-sdk/agent-keyring Key custody and public-key sealing for secure conversations (node:crypto only)
@robota-sdk/agent-organization Dependency-free canonical JSON and organization resource budget contracts, with runtime validators

Multi-agent conversation — coordinate independent agents and people in a shared conversation:

Package Description
@robota-sdk/agent-roundtable Selects turns, runs parallel groups, publishes to a shared transcript; no model, no provider
@robota-sdk/agent-roundtable-robota Runs a Robota Session or plain Robota agent as a roundtable participant or selector

Product composition — build your own product on the same runtime:

Package Description
@robota-sdk/agent-product assembleProduct(profile): a product from a declarative profile; one subpath each for the ICapabilityPack contract, presets and output styles, slash-command modules and the coding pack (./capability-pack, ./preset, ./command, ./coding)
@robota-sdk/product-config Explicit product configuration contracts and host loading

Transports and UI — put a session behind a protocol or a screen:

Package Description
@robota-sdk/agent-transport Carrier-neutral wire protocol, session dispatch and delivery (./client, ./node), and one subpath per carrier: ./ws, ./http, ./mcp, ./acp, ./webrtc, ./link
@robota-sdk/agent-remote-pairing Pairing and DTLS-fingerprint channel binding for peer-to-peer connections
@robota-sdk/agent-ui-terminal Terminal UI (React + Ink)
@robota-sdk/agent-ui-web Browser-safe React session surface, wire reducer and WebSocket client for a consumer-owned agent renderer (./client, ./styles/theme.css, ./styles/surface.css)

Contracts — type contracts shared across layers:

Package Description
@robota-sdk/agent-interface Type contracts, one subpath per family: session, session-mobility, command, execution, analytics, transport, tui; test doubles under session/testing and transport/testing

Agent interface:

Package Description
@robota-sdk/agent-cli robota: interactive terminal AI coding assistant, published as a self-contained bundle

Documentation

Full documentation lives at docs.robota.io.

Repository Scope

This repository holds the Robota agent SDK, providers, transports, the CLI, and related apps (desktop app, browser remote client, docs site, marketing site, blog).

The /workflows command uses a separately maintained workflow library bundled into the CLI.

Some workspace packages are private and never published to npm on their own:

  • agent-gui-web, the GUI web app that the desktop app loads and robota --serve --open serves.
  • agent-local-host, Node host authority for owner-protected local runtime state.
  • agent-organization-host, an operator-owned organization broker with workload verification and durable hierarchical budgets.
  • agent-provider-replay, a provider that replays a recorded session for offline tests.

Contributing

pnpm install
pnpm build
pnpm test

Development needs Node.js 22 (22.14 or a later 22.x release) and pnpm 8.15.4. See CONTRIBUTING.md for the workflow, the checks a pull request must pass, and the commit format.

To package the built-in desktop app locally on Linux, install Bun and run these commands from a clean checkout:

pnpm install --frozen-lockfile
pnpm build
bun packages/agent-cli/scripts/build-bun.mjs linux-x64
pnpm --filter @robota-sdk/agent-app dist:app --linux AppImage

The AppImage is written to apps/agent-app/release/. A generated product uses the same build commands in its generated workspace. The Bun build also accepts --entry <compiled-host-entry> and --artifact-name <basename>; set PRODUCT_DESKTOP_BINARY=<compiled-binary-path> when running dist:app to bundle that binary in the desktop app.

License

Robota is dual-licensed under the GNU AGPL-3.0 or a commercial license. See LICENSING.md.

About

TypeScript framework for building AI agents — multi-provider (Anthropic, OpenAI, Google), tool calling, permissions, hooks, streaming, and CLI coding assistant

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

19 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages