@everworker/oneringai

A unified AI agent library with multi-provider support for text generation, image/video generation, audio (TTS/STT), and agentic workflows.

License: MIT TypeScript Node.js

What's new in v1.0.0

Version 1.0.0 is the first major release of OneRingAI. It defines a stable connector-first API while bringing the first-party OpenAI, Anthropic, Google, and xAI integrations in line with their current text, image, video, embedding, speech, and realtime APIs.

Area 1.0.0 outcome
Model registry Schema v2 with lifecycle, availability, aliases, snapshots, endpoints, replacements, preferred choices, official sources, and current pricing dimensions
OpenAI GPT-5.6, GPT Image 2, current transcription and Sora metadata, plus complete GA Realtime voice/transcription/translation support
Anthropic Claude 5 family, current context/output limits, adaptive thinking/effort, fast mode, and portable structured output
Google Gemini 3.6/3.5, status-safe Interactions API streams by default for 3.5+, current native image, Veo/Omni, TTS/STT, and Gemini Embedding 2
xAI Grok 4.5/4.3/Build, current image/video, native REST/WebSocket TTS and STT, and Voice Agent Realtime/SIP support
Runtime Node.js 22+, OpenAI SDK 7.4, Anthropic SDK 0.116, and Google Gen AI SDK 2.16

Before upgrading

  • Upgrade every application, CI runner, container, and serverless runtime to Node.js 22 or newer.
  • Treat registry token limits as number | null; use resolveMaxContextTokens() when a numeric fallback is required.
  • Use lookup helpers for floating aliases. Direct registry indexing remains canonical-only.
  • Use isActive for callability and lifecycle for migration state.
  • Gemini 3.5+ now uses Google Interactions by default. Temporarily set vendorOptions.api = 'generateContent' only when legacy wire compatibility is required.

Read the complete 1.0.0 release notes, upgrade guide, and official-source model audit before deploying.

Built for coding agents

OneRingAI ships a canonical Agent Guide that gives Codex, Claude Code, and custom coding agents the complete mental model they need to work with the library: connector-first authentication, agents and execution modes, tools, context plugins, memory, multimodal APIs, orchestration, MCP, tenancy, persistence, documentation routing, and validation.

In this repository, AGENTS.md is the shared source of truth and CLAUDE.md directs Claude Code to it. When OneRingAI is installed from npm, both files—plus the public API reference and specialist memory/tool guides—are included in the package. If an agent does not discover the guide automatically, give it this one instruction:

Before writing OneRingAI code, read
node_modules/@everworker/oneringai/AGENTS.md in full. Follow its connector-first
patterns, use only public package exports, and consult the specialist document
it routes you to before guessing an API.

That is enough to orient an agent before asking it to build something:

Now create a TypeScript research agent that uses my named OpenAI connector,
Serper for search, ZenRows for scraping, and the tool catalog. Keep credentials
out of code and add a runnable smoke test.

Custom agents can load the same file into their system/developer context. The guide is deliberately concise enough to load as context while linking to the full User Guide, API reference, connector/tool catalog, memory documentation, and runnable examples when deeper work is required.

Meet AMOS: a terminal agent built with OneRingAI

Want to see the library running as a real application? AMOS is the terminal-based AI assistant in this repository, built entirely on OneRingAI.

AMOS turns the library's core capabilities into an interactive CLI: configure named connectors, switch vendors and models without restarting, use guarded filesystem and shell tools, search with Serper, scrape with ZenRows, inspect context usage, and save or resume working sessions.

Explore AMOS, its commands, and local setup →

Memory is a first-class subsystem

OneRingAI includes a complete, standalone MemorySystem—not just chat history and not a thin vector-store wrapper. It models knowledge as typed entities and provenance-aware facts, combines graph traversal with vector search, resolves repeated mentions to stable identities, and turns accumulated observations into evolving profiles. It is substantial enough to be its own package, but ships as part of OneRingAI so agents, connectors, embeddings, permissions, and context injection work together without integration glue.

Capability What the memory layer provides
Knowledge model Entities, atomic and relational facts, typed metadata, aliases, multiple identifiers, confidence, importance, provenance, contextIds, supersession, and archival history
Retrieval Ranked recall, semantic search over embedded facts and documents, N-hop graph traversal, related tasks/events, and bitemporal asOf queries
Ingestion Plain text, email, and calendar signal adapters; deterministic participant seeding; LLM extraction; entity resolution; and custom source/extractor interfaces
Learning Incremental user-profile generation, optional organization profiles, background conversation ingestion, and per-user-per-agent behavior rules
Storage and scale Zero-dependency in-memory storage plus Mongo adapters, native $graphLookup, Atlas Vector Search, index helpers, and pluggable IMemoryStore backends
Security Required ownership, owner/group/world permissions, optional principal ACLs, storage-level read filtering, write authorization, and LLM-safe scoped tools

Use it in three ways:

  1. Directly through MemorySystem in a server, worker, migration, or any non-agent application.
  2. Inside an agent with MemoryPluginNextGen (six read tools and profile injection) plus the optional MemoryWritePluginNextGen (six write tools).
  3. As an ingestion pipeline with SignalIngestor or SessionIngestorPluginNextGen, including retrieval-only agents that learn in the background without giving the LLM write access.

Start with the Memory Layer Guide. The specialist docs cover the API, permissions, predicate vocabulary, and signal ingestion.

Context plugins and tools are modular by design

AgentContextNextGen is the runtime composition layer around an agent. Its goal is to let each capability own its instructions, context content, tools, token accounting, compaction behavior, and persisted state while the context manager assembles one coherent model input. Compaction happens once before the LLM call, tool-call/result pairs stay together, and disabled features add no tools or prompt content.

Context feature Purpose
Working memory External, tiered scratch storage for raw notes, summaries, and findings
In-context memory Small high-value state kept directly in the prompt—no retrieval call required
Self-learning memory Profiles, graph/vector retrieval, document search, and optional controlled writes through memory_* tools
Tool catalog Lets agents discover and load only the tool categories needed for the current task
Shared workspace Versioned coordination board for multi-agent teams
Persistent instructions / user info Backward-compatible stores; new applications should generally prefer the self-learning memory system

Tools reach an agent from four explicit sources: application-supplied ToolFunctions, the 39 generated built-ins, feature plugins (store_*, memory_*, catalog tools, and others), and connector-generated tools. ConnectorTools.for(name) always adds a protected authenticated API tool when the connector has a baseURL, then adds a specialized pack where OneRingAI has one—for example Slack, GitHub, Microsoft, Google Workspace, Telegram, Twilio, Zoom, web search/scraping, and AI media connectors. Generated names are connector-prefixed, so multiple accounts and vendors can coexist safely.

See the Connector & Tool Catalog for the complete 50-template matrix, every first-party specialized pack, and discovery APIs. The Context Management guide covers plugin lifecycle, stores, compaction, persistence, and custom plugins.

Table of Contents

Documentation

Start here if you're looking for detailed docs or the full API reference.

Document Description
Agent Guide Canonical context file for Codex, Claude Code, and custom coding agents: architecture, recipes, capability routing, safety invariants, and documentation map
User Guide Comprehensive guide covering every feature with examples — connectors, agents, context, plugins, audio, video, search, MCP, OAuth, and more
API Reference Auto-generated reference for all public exports — classes, interfaces, types, and functions with signatures
Memory Layer Guide Standalone entity/fact memory system: graph and vector retrieval, ingestion, resolution, profiles, adapters, scaling, and agent integration
Memory API & Security Complete MemorySystem API, with dedicated permissions, predicates, and signals guides
Connector & Tool Catalog All 50 connector templates, generic authenticated API behavior, specialized tool packs, built-ins, plugin tools, and discovery APIs
Runnable Examples Every example program, what it demonstrates, required credentials, side effects, and exact run command
1.0.0 Upgrade Guide Breaking changes, compatibility guarantees, migration checklist, and before/after examples
Model Registry Audit Vendor-by-vendor gaps, implemented status, model snapshot, API boundaries, and official sources
CHANGELOG Full 1.0.0 release notes, breaking changes, validation, and version history

Tutorial / Architecture Series

Part 0. One Lib to Rule Them All: Why We Built OneRingAI: introduction and architecture overview

Part 1. Your AI Agent Forgets Everything. Here’s How We Fixed It.: context management plugins

YOUetal

Showcasing another amazing "built with oneringai": "no saas" agentic business team

Features

  • Unified API - One interface for 12 AI providers (OpenAI, Anthropic, Google, Vertex, Groq, Together, Perplexity, Grok, DeepSeek, Mistral, Ollama, Custom)
  • 🔑 Connector-First Architecture - Single auth system with support for multiple keys per vendor
  • 📊 Model Registry v2 - Lifecycle, aliases, endpoints, official sources, and modality-aware pricing for 88 text/realtime models plus dedicated image, video, voice, STT, and embedding registries
  • 🎤 Audio Capabilities - Text-to-Speech and Speech-to-Text with OpenAI, Google, and xAI, including xAI WebSocket streaming
  • ☎️ OpenAI Realtime API - GA voice agents, live transcription, and speech translation over WebSocket/WebRTC, plus SIP call control, tools, VAD, and Twilio bridging
  • 📞 xAI Voice Agent API - JSON or binary audio, browser credentials, conversation resumption, reasoning controls, and SIP refer/hangup
  • 🖼️ Image Generation - GPT Image 2, Gemini 3.1 native image models, Imagen, and Grok Imagine generation/editing
  • 🎬 Video Generation - Callable OpenAI Sora 2 (with published retirement metadata), Google Veo/Omni, and Grok Imagine Video 1.5
  • 🔢 Embeddings - Text and multimodal embedding generation, including Gemini Embedding 2 for text, image, audio, video, and documents
  • 🔍 Web Search - Connector-based search with Serper, Brave, Tavily, and RapidAPI providers
  • 🔌 NextGen Context - Clean, plugin-based context management with AgentContextNextGen
  • 🎛️ Dynamic Tool Management - Enable/disable tools at runtime, namespaces, priority-based selection
  • 🔌 Tool Execution Plugins - Pluggable pipeline for logging, analytics, UI updates, custom behavior
  • 💾 Session Persistence - Save and resume conversations with full state restoration
  • ⏸️ Long-Running Sessions - Suspend agent loops via SuspendSignal, resume hours/days later with Agent.hydrate()
  • 👤 Multi-User Support - Set userId once, flows automatically to all tool executions and session metadata
  • 🔒 Auth Identities - Restrict agents to specific connectors (and accounts), composable with access policies
  • 🤖 Universal Agent - ⚠️ Deprecated - Use Agent with plugins instead
  • 🤖 Task Agents - ⚠️ Deprecated - Use Agent with WorkingMemoryPluginNextGen
  • 🔬 Research Agent - ⚠️ Deprecated - Use Agent with search tools
  • 🎯 Context Management - Algorithmic compaction with tool-result-to-memory offloading
  • 📌 InContextMemory - Live key-value storage directly in LLM context with optional UI display (showInUI)
  • 📝 Persistent Instructions - ⚠️ Deprecated in favour of MemoryPluginNextGen (self-learning memory). Still works unchanged.
  • 👤 User Info Plugin - ⚠️ Deprecated in favour of MemoryPluginNextGen. Still works unchanged.
  • 🧠 Self-Learning Memory - MemoryPluginNextGen + MemoryWritePluginNextGen + 12 memory_* tools — brain-like entity/fact store with three-principal permissions, semantic search, graph queries, LLM-synthesised profiles that evolve from observations, user-driven behavior rules, optional background ingestion via SessionIngestorPluginNextGen
  • 🛠️ Agentic Workflows - Built-in tool calling and multi-turn conversations
  • 🔧 Developer Tools - Filesystem and shell tools for coding assistants (read, write, edit, grep, glob, bash)
  • 🧰 Custom Tool Generation - Let agents create, test, and persist their own reusable tools at runtime — complete meta-tool system with VM sandbox
  • 🖥️ Desktop Automation - OS-level computer use — screenshot, mouse, keyboard, and window control for vision-driven agent loops
  • 📄 Document Reader - Universal file-to-text converter — PDF, DOCX, XLSX, PPTX, CSV, HTML, images auto-converted to markdown
  • 🔌 MCP Integration - Model Context Protocol client for seamless tool discovery from local and remote servers
  • 👁️ Vision Support - Analyze images with AI across all providers
  • 📋 Clipboard Integration - Paste screenshots directly (like Claude Code!)
  • 🔐 Scoped Connector Registry - Pluggable access control for multi-tenant connector isolation
  • 💾 StorageRegistry - Centralized storage configuration — swap all backends (sessions, media, custom tools, etc.) with one configure() call
  • 🔐 OAuth 2.0 - Full OAuth support for external APIs with encrypted token storage
  • 📦 Vendor Templates - Pre-configured auth templates for 50 services (GitHub, Slack, Stripe, etc.)
  • 📧 Microsoft Graph Tools - Email, calendar, meetings, and Teams transcripts via Microsoft Graph API
  • 🔁 Routine Execution - Multi-step workflows with task dependencies, LLM validation, retry logic, and memory bridging between tasks
  • 📊 Execution Recording - Persist full routine execution history with createExecutionRecorder() — replaces manual hook wiring
  • Scheduling & Triggers - SimpleScheduler for interval/one-time schedules, EventEmitterTrigger for webhook/queue-driven execution
  • 📦 Tool Catalog - Dynamic tool loading/unloading — agents discover and load only the categories they need at runtime
  • Async Tools - Non-blocking tool execution — long-running tools run in background while the agent continues reasoning, with auto-continuation when results arrive
  • 📡 Agent Registry - Global tracking of all active agents — deep inspection, parent/child hierarchy, event fan-in, external control
  • 📱 Telegram Tools - 6 Telegram Bot API tools — send messages/photos, get updates, webhooks, chat info
  • 📞 Twilio Tools - 4 Twilio tools — SMS, WhatsApp messaging, message listing and details
  • 📧 Google Workspace Tools - 11 tools for Gmail, Calendar, Meet transcripts, and Drive (read, search, list files)
  • 🎥 Zoom Tools - 3 Zoom tools — create/update meetings, get cloud recording transcripts
  • 📅 Unified Calendar - Cross-provider meeting slot finder aggregating Google + Microsoft calendars
  • 👥 Multi-Account Connectors - Multiple accounts per vendor (e.g., work + personal) with automatic routing
  • 🧪 Integration Testing - Reusable test suite framework for connector tools with 10 built-in suites
  • 📝 Instruction Templates - {{DATE}}, {{AGENT_ID}}, {{RANDOM:1:10}} and custom {{COMMAND:arg}} in agent instructions — extensible registry with async support
  • 🔄 Streaming - Real-time responses with event streams
  • Advanced Inference - Provider-aware prompt caching, asynchronous text batches, provider-hosted tools, detailed usage telemetry, and explicit data-handling policy
  • 📝 TypeScript - Full type safety and IntelliSense support

Multi-User Support: Set userId once on an agent and it automatically flows to all tool executions, OAuth token retrieval, session metadata, and connector scoping. Combine with identities and access policies for complete multi-tenant isolation. See Multi-User Support and Auth Identities in the User Guide.

Quick Start

Installation

npm install @everworker/oneringai

Basic Usage

import { Connector, Agent, Vendor } from '@everworker/oneringai';

// 1. Create a connector (authentication)
Connector.create({
  name: 'openai',
  vendor: Vendor.OpenAI,
  auth: { type: 'api_key', apiKey: process.env.OPENAI_API_KEY! },
});

// 2. Create an agent
const agent = Agent.create({
  connector: 'openai',
  model: 'gpt-5.6-terra',
});

// 3. Run
const response = await agent.run('What is the capital of France?');
console.log(response.output_text);
// Output: "The capital of France is Paris."

With Tools

import { ToolFunction } from '@everworker/oneringai';

const weatherTool: ToolFunction = {
  definition: {
    type: 'function',
    function: {
      name: 'get_weather',
      description: 'Get current weather',
      parameters: {
        type: 'object',
        properties: {
          location: { type: 'string' },
        },
        required: ['location'],
      },
    },
  },
  execute: async (args) => {
    return { temp: 72, location: args.location };
  },
};

const agent = Agent.create({
  connector: 'openai',
  model: 'gpt-5.6-terra',
  tools: [weatherTool],
});

await agent.run('What is the weather in Paris?');

Vision

import { createMessageWithImages } from '@everworker/oneringai';

const agent = Agent.create({
  connector: 'openai',
  model: 'gpt-5.6-terra',
});

const response = await agent.run(
  createMessageWithImages('What is in this image?', ['./photo.jpg'])
);

Audio

import { TextToSpeech, SpeechToText } from '@everworker/oneringai';

// Text-to-Speech — built-in voice
const tts = TextToSpeech.create({
  connector: 'openai',
  model: 'tts-1-hd',
  voice: 'nova', // alloy | ash | ballad | coral | echo | fable | onyx | nova | sage | shimmer | verse | marin | cedar
});

await tts.toFile('Hello, world!', './output.mp3');

// Text-to-Speech — custom voice (OpenAI). Pass the `voice_…` id you got
// when registering the voice in the OpenAI dashboard; the SDK call is
// handled automatically.
const customTts = TextToSpeech.create({
  connector: 'openai',
  model: 'gpt-4o-mini-tts',
  voice: 'voice_1234abcd',
});
await customTts.toFile('Spoken in your bespoke voice.', './brand.mp3');

// Speech-to-Text
const stt = SpeechToText.create({
  connector: 'openai',
  model: 'gpt-transcribe',
});

const result = await stt.transcribeFile('./audio.mp3');
console.log(result.text);

// Headerless raw telephony PCM must identify its wire format.
const phoneResult = await stt.transcribe(pcm16le8kBuffer, {
  encoding: 'pcm',
  sampleRate: 8000,
});

Image Generation

import { ImageGeneration } from '@everworker/oneringai';

// OpenAI GPT Image
const imageGen = ImageGeneration.create({ connector: 'openai' });

const result = await imageGen.generate({
  prompt: 'A futuristic city at sunset',
  model: 'gpt-image-2',
  size: '1024x1024',
  quality: 'high',
});

// Save to file
const buffer = Buffer.from(result.data[0].b64_json!, 'base64');
await fs.writeFile('./output.png', buffer);

// Google Gemini native image
const googleGen = ImageGeneration.create({ connector: 'google' });

const googleResult = await googleGen.generate({
  prompt: 'A colorful butterfly in a garden',
  model: 'gemini-3.1-flash-image',
  size: '2048x2048',
  aspectRatio: '16:9',
  n: 2,
});

Video Generation

import { VideoGeneration } from '@everworker/oneringai';

// OpenAI Sora
const videoGen = VideoGeneration.create({ connector: 'openai' });

// Start video generation (async - returns a job)
const job = await videoGen.generate({
  prompt: 'A cinematic shot of a sunrise over mountains',
  model: 'sora-2',
  duration: 8,
  resolution: '1280x720',           // 720x1280 / 1280x720 / 1024x1792 / 1792x1024 (1.4× HD)
});

// Wait for completion
const result = await videoGen.waitForCompletion(job.jobId);

// Download the video
const videoBuffer = await videoGen.download(job.jobId);
await fs.writeFile('./output.mp4', videoBuffer);

// Google Veo
const googleVideo = VideoGeneration.create({ connector: 'google' });

const veoJob = await googleVideo.generate({
  prompt: 'A butterfly flying through a garden',
  model: 'veo-3.1-lite-generate-preview',
  duration: 8,
});

Sora 2/2 Pro are still callable but have published deprecation and retirement metadata. Production pickers should show lifecycle and retirementDate, not infer recommendation from isActive alone. Google Veo/Omni and xAI Grok Imagine Video 1.5 are covered in the User Guide.

Sora: extend, remix, edit (OpenAI only)

The Videos API references completed clips by id — pass the jobId returned by generate(), not a buffer or URL.

// Extend — generate an additional segment after the source clip.
const extension = await videoGen.extend({
  video: job.jobId,           // id of a completed video
  prompt: 'The camera pulls back to reveal a snow-covered valley',
  extendDuration: 8,          // length of the *new* segment, snapped to 4/8/12
});

// Remix — same length, prompt-steered re-generation.
const remix = await videoGen.remix({
  videoId: job.jobId,
  prompt: 'Same composition, but at golden hour',
});

// Edit — apply a prompt-described change to a completed clip.
const edited = await videoGen.edit({
  videoId: job.jobId,
  prompt: 'Add light snowfall throughout',
});

Sora: reusable characters (OpenAI only)

Upload a reference video to register a character. Note: the unified generate() does not yet apply the character id — reference the character in your prompt and use getCharacter() to look it up.

const character = await videoGen.createCharacter({
  name: 'Hero',
  video: './reference-shot.mp4', // Buffer | local path | URL
});
// → { id: 'char_…', name: 'Hero' }

const scene = await videoGen.generate({
  prompt: 'Hero walks across a windswept beach at dusk',
});

// Look up later
const same = await videoGen.getCharacter(character.id);

Embeddings

import { Embeddings } from '@everworker/oneringai';

// OpenAI embeddings
const embeddings = Embeddings.create({ connector: 'openai' });

const result = await embeddings.embed(['Hello world', 'How are you?'], {
  model: 'text-embedding-3-small',
  dimensions: 512,  // MRL: reduce dimensions for faster search
});

console.log(result.embeddings.length);     // 2
console.log(result.embeddings[0].length);  // 512

// Ollama (local, free)
const local = Embeddings.create({ connector: 'ollama-local' });
const localResult = await local.embed('search query');
// Uses qwen3-embedding (4096 dims, #1 on MTEB multilingual)

Document Reader

Read any document format — agents automatically get markdown text from PDFs, Word docs, spreadsheets, and more:

import { Agent, developerTools } from '@everworker/oneringai';

const agent = Agent.create({
  connector: 'openai',
  model: 'gpt-4.1',
  tools: developerTools,
});

// read_file auto-converts binary documents to markdown
await agent.run('Read /path/to/report.pdf and summarize the key findings');
await agent.run('Read /path/to/data.xlsx and describe the trends');
await agent.run('Read /path/to/presentation.pptx and list all slides');

Programmatic usage:

import { DocumentReader, readDocumentAsContent } from '@everworker/oneringai';

// Read any file to markdown pieces
const reader = DocumentReader.create();
const result = await reader.read('/path/to/report.pdf');
console.log(result.pieces); // DocumentPiece[] (text + images)

// One-call conversion to LLM Content[] (for multimodal input)
const content = await readDocumentAsContent('/path/to/slides.pptx', {
  imageFilter: { minWidth: 100, minHeight: 100 },
  imageDetail: 'auto',
});

const response = await agent.run([
  { type: 'input_text', text: 'Analyze this document:' },
  ...content,
]);

Supported Formats:

  • Office: DOCX, PPTX, ODT, ODP, ODS, RTF (via officeparser)
  • Spreadsheets: XLSX, CSV (via exceljs)
  • PDF (via unpdf)
  • HTML (via Readability + Turndown)
  • Text: TXT, MD, JSON, XML, YAML
  • Images: PNG, JPG, GIF, WEBP, SVG (pass-through as base64)

Web Search

Connector-based web search with multiple providers:

import { Connector, SearchProvider, ConnectorTools, Services, Agent, tools } from '@everworker/oneringai';

// Create search connector
Connector.create({
  name: 'serper-main',
  serviceType: Services.Serper,
  auth: { type: 'api_key', apiKey: process.env.SERPER_API_KEY! },
  baseURL: 'https://google.serper.dev',
});

// Option 1: Use SearchProvider directly
const search = SearchProvider.create({ connector: 'serper-main' });
const results = await search.search('latest AI developments 2026', {
  numResults: 10,
  country: 'us',
  language: 'en',
});

// Option 2: Use with Agent via ConnectorTools
const searchTools = ConnectorTools.for('serper-main');

const agent = Agent.create({
  connector: 'openai',
  model: 'gpt-4.1',
  tools: [...searchTools, tools.webFetch],
});

await agent.run('Search for quantum computing news and summarize');

Supported Search Providers:

  • Serper - Google search via Serper.dev (2,500 free queries)
  • Brave - Independent search index (privacy-focused)
  • Tavily - AI-optimized search with summaries
  • RapidAPI - Real-time web search (various pricing)

Web Scraping

Enterprise web scraping with automatic fallback and bot protection bypass:

import { Connector, ScrapeProvider, ConnectorTools, Services, Agent, tools } from '@everworker/oneringai';

// Create ZenRows connector for bot-protected sites
Connector.create({
  name: 'zenrows',
  serviceType: Services.Zenrows,
  auth: { type: 'api_key', apiKey: process.env.ZENROWS_API_KEY! },
  baseURL: 'https://api.zenrows.com/v1',
});

// Option 1: Use ScrapeProvider directly
const scraper = ScrapeProvider.create({ connector: 'zenrows' });
const result = await scraper.scrape('https://protected-site.com', {
  includeMarkdown: true,
  vendorOptions: {
    jsRender: true,        // JavaScript rendering
    premiumProxy: true,    // Residential IPs
  },
});

// Option 2: Use web_scrape tool with Agent via ConnectorTools
const scrapeTools = ConnectorTools.for('zenrows');

const agent = Agent.create({
  connector: 'openai',
  model: 'gpt-4.1',
  tools: [...scrapeTools, tools.webFetch],
});

// web_scrape auto-falls back: native → API
await agent.run('Scrape https://example.com and summarize');

Supported Scrape Providers:

  • ZenRows - Enterprise scraping with JS rendering, residential proxies, anti-bot bypass
  • Jina Reader - Clean content extraction with AI-powered readability
  • Firecrawl - Web scraping with JavaScript rendering
  • ScrapingBee - Headless browser scraping with proxy rotation

Supported Providers

Provider Text Vision TTS STT Image Video Tools Context
OpenAI 1.05M
Anthropic (Claude) 1M
Google (Gemini) 1M
Google Vertex AI 1M
Grok (xAI) 1M
Groq 128K
Together AI Some 128K
DeepSeek 64K
Mistral 32K
Perplexity 128K
Ollama Varies Varies
Custom Varies Varies

Key Features

1. Agent with Plugins

The Agent class is the primary agent type, supporting all features through composable plugins:

import { Agent, createFileContextStorage } from '@everworker/oneringai';

// Create storage for session persistence
const storage = createFileContextStorage('my-assistant');

const agent = Agent.create({
  connector: 'openai',
  model: 'gpt-4.1',
  userId: 'user-123',            // Flows to all tool executions automatically
  identities: [                   // Only these connectors visible to tools
    { connector: 'github' },
    { connector: 'slack' },
  ],
  tools: [weatherTool, emailTool],
  context: {
    features: {
      workingMemory: true,      // Store/retrieve data across turns
      inContextMemory: true,    // Key-value pairs directly in context
      persistentInstructions: true,  // Agent instructions that persist to disk
    },
    agentId: 'my-assistant',
    storage,
  },
});

// Run the agent
const response = await agent.run('Check weather and email me the report');
console.log(response.output_text);

// Save session for later
await agent.context.save('session-001');

Features:

  • 🔧 Plugin Architecture - Enable/disable features via context.features
  • 💾 Session Persistence - Save/load full state with ctx.save() and ctx.load()
  • 📝 Working Memory - Store findings with automatic eviction
  • 📌 InContextMemory - Key-value pairs visible directly to LLM
  • 🔄 Persistent Instructions - Agent instructions that persist across sessions

2. Dynamic Tool Management

Control tools at runtime. AgentContextNextGen is the single source of truth - agent.tools and agent.context.tools are the same ToolManager instance:

import { Agent } from '@everworker/oneringai';

const agent = Agent.create({
  connector: 'openai',
  model: 'gpt-4.1',
  tools: [weatherTool, emailTool, databaseTool],
});

// Disable tool temporarily
agent.tools.disable('database_tool');

// Enable later
agent.tools.enable('database_tool');

// UNIFIED ACCESS: Both paths access the same ToolManager
console.log(agent.tools === agent.context.tools);  // true

// Changes via either path are immediately reflected
agent.context.tools.disable('email_tool');
console.log(agent.tools.listEnabled().includes('email_tool'));  // false

// Context-aware selection
const selected = agent.tools.selectForContext({
  mode: 'interactive',
  currentTask: 'send-invoice',
});

// Backward compatible
agent.addTool(newTool);        // Still works!
agent.removeTool('old_tool');  // Still works!

3. Tool Execution Plugins

Extend tool execution with custom behavior through a pluggable pipeline architecture. Add logging, analytics, UI updates, permission prompts, or any custom logic:

import { Agent, LoggingPlugin, type IToolExecutionPlugin } from '@everworker/oneringai';

const agent = Agent.create({
  connector: 'openai',
  model: 'gpt-4.1',
  tools: [weatherTool],
});

// Add built-in logging plugin
agent.tools.executionPipeline.use(new LoggingPlugin());

// Create a custom plugin
const analyticsPlugin: IToolExecutionPlugin = {
  name: 'analytics',
  priority: 100,

  async beforeExecute(ctx) {
    console.log(`Starting ${ctx.toolName}`);
  },

  async afterExecute(ctx, result) {
    const duration = Date.now() - ctx.startTime;
    trackToolUsage(ctx.toolName, duration);
    return result; // Must