import { Agent } from " @schift-io/sdk " ;
new Agent (options: AgentOptions)
Option Type Default Required namestring— Yes instructionsstring— Yes modelModelId | string"gpt-4o-mini"No transportTransport— One of transport or baseUrl baseUrlstring— One of transport or baseUrl apiKeystring— No toolsAgentTool[][]No ragRAG— No memoryMemoryConfig— No maxStepsnumber10No toolTimeoutMsnumber30000No maxToolCallsnumbermaxSteps * 5No parallelToolExecutionbooleanfalseNo skillsSkillsConfig— No extensionsArray<ExtensionInitFn | string>— No mcpMCPServerConfig[]— No
Method Returns Description run(input, options?)Promise<AgentRunResult>Run the agent with a user message on(type, handler)() => voidSubscribe to events. Returns unsubscribe fn off(type, handler)voidUnsubscribe from events toolCountnumberNumber of registered tools (getter)
import { RAG } from " @schift-io/sdk " ;
new RAG (config: RAGConfig, transport: Transport)
Option Type Default bucketstringrequired topKnumber7
Property Type Value MAX_QUERY_LENGTHnumber8000
Method Returns Description search(query: string)Promise<SearchResultItem[]>Semantic search over bucket chat(query: string)Promise<ChatResult>Search + LLM answer asTool(name?: string)AgentToolConvert to agent tool
import { WebSearch } from " @schift-io/sdk " ;
new WebSearch (config ?: WebSearchConfig, transport ?: Transport)
Option Type Default maxResultsnumber5providerWebSearchProvider"schift"providerApiKeystring—
Method Returns Description search(query: string)Promise<WebSearchResultItem[]>Search the web asTool(name?: string)AgentToolConvert to agent tool
import { DeepResearch } from " @schift-io/sdk " ;
new DeepResearch (config ?: DeepResearchConfig, llm: LLMFn, transport ?: Transport)
Option Type Default maxIterationsnumber3resultsPerSearchnumber5queriesPerIterationnumber2queryModelModelId | string"gpt-4o-mini"synthesisModelModelId | string"gpt-4o-mini"webSearchWebSearchConfig—
Method Returns Description run(question: string)Promise<ResearchReport>Run deep research asTool(name?: string)AgentToolConvert to agent tool
import { ConversationMemory } from " @schift-io/sdk " ;
new ConversationMemory (config ?: MemoryConfig)
Option Type Default maxMessagesnumber50transformContext(messages: ChatMessage[]) => ChatMessage[]—
Method Returns Description add(message: ChatMessage)voidAdd message to history getMessages()ChatMessage[]Get all messages clear()voidClear non-system messages lengthnumberMessage count (getter)
import { ToolRegistry } from " @schift-io/sdk " ;
Method Returns Description register(tool: AgentTool)voidRegister a tool get(name: string)AgentTool | undefinedGet tool by name has(name: string)booleanCheck if tool exists list()AgentTool[]List all tools execute(name, args)Promise<ToolResult>Execute a tool by name filtered(allowedNames: Set<string>)ToolRegistryNew registry with only allowed tools without(blockedNames: Set<string>)ToolRegistryNew registry excluding blocked tools toOpenAI()ArrayGenerate OpenAI-compatible tool definitions toAnthropic()ArrayGenerate Anthropic-compatible tool definitions
import { AgentEventEmitter } from " @schift-io/sdk " ;
Method Returns Description on(type, handler)() => voidSubscribe to event. Returns unsubscribe fn on("*", handler)() => voidSubscribe to all events off(type, handler)voidUnsubscribe from event emit(event)voidEmit an event removeAll()voidRemove all handlers
import { SkillLoader, loadSkills } from " @schift-io/sdk " ;
new SkillLoader (skillsDir: string)
Method Returns Description loadAll(options?)Promise<SkillSummary[]>Load all skill files get(name: string)Promise<Skill | undefined>Get a skill by name getAll()Promise<Skill[]>Get all loaded skills reload(name: string)Promise<Skill | undefined>Reload a specific skill
const loader = await loadSkills ( " ./skills " );
// Equivalent to: new SkillLoader("./skills") + loadAll()
import { SkillResolver } from " @schift-io/sdk " ;
new SkillResolver (loader: SkillLoader)
Method Returns Description resolve(query)Promise<Skill[]>Get all skills resolvePrimary(query)Promise<ResolvedSkill | undefined>Best-matching skill for query buildPromptSection(skills){ promptText, allowedTools }Build prompt injection section
import { PolicyEngine, policyViolation } from " @schift-io/sdk " ;
new PolicyEngine (contract: SkillContract)
Method Returns Description beforeTool(input)PolicyDecisionCheck if tool call is allowed afterTool(input)PolicyDecisionValidate tool result
policyViolation (reason: string): ToolResult
// Returns { success: false, data: null, error: "POLICY_VIOLATION:reason" }
import { ExtensionHost } from " @schift-io/sdk " ;
Method Returns Description load(extension)Promise<void>Load an extension (function or module path)
Managed Agents, Agent Hub, and APM were retired on 2026-09-25. The SDK
compatibility types remain deprecated until the next major release; do not
start new integrations from this section. Use bucket search, Warehouse Data,
or Structify instead.
Server-side managed agents — create, configure, and run agents via the Schift Cloud API.
const client = schift . agents ;
Method Returns Description create(req: CreateAgentRequest)Promise<AgentResponse>Create a managed agent list()Promise<AgentResponse[]>List all agents get(id: string)Promise<AgentResponse>Get agent by ID update(id, req)Promise<AgentResponse>Update an agent delete(id: string)Promise<void>Delete an agent runs(agentId: string)RunsClientGet runs client for an agent
const runs = schift . agents . runs ( " agt_abc123 " );
Method Returns Description create(req: CreateRunRequest)Promise<RunResponse>Start a run list()Promise<RunResponse[]>List all runs get(runId: string)Promise<RunResponse>Get run by ID streamEvents(runId, afterSeq?)AsyncGenerator<RunEvent>Stream run events
import { WorkspaceClient } from " @schift-io/sdk " ;
new WorkspaceClient (config: SchiftConfig)
Option Type Default apiKeystringrequired (must start with sch_) baseUrlstringhosted API origin timeoutnumber60000
Property Type Description transportHttpTransportHTTP transport for Agent/RAG agentsAgentsClientManaged Agents sub-client modelsModelsClientModel catalog dbDBClientBucket/document management toolsSchiftToolsTool definition helpers
Method Returns Description embed(request)Promise<EmbedResponse>Generate embeddings embedBatch(request)Promise<EmbedBatchResponse>Batch embeddings search(request)Promise<SearchResult[]>Vector search chat(request)Promise<ChatResponse>RAG chat chatStream(request)AsyncGenerator<ChatStreamEvent>RAG chat with SSE streaming webSearch(query, maxResults?)Promise<WebSearchResultItem[]>Web search aggregate(request)Promise<AggregateResponse>Metadata aggregation rerank(request)Promise<RerankResult>Rerank documents similarity(request)Promise<{ score: number }>Text similarity score cluster(request)Promise<ClusterResult>Text clustering classify(request)Promise<ClassifyResult>Zero-shot classification
Method Returns Description listBuckets()Promise<Bucket[]>List all buckets createBucket(request)Promise<Bucket>Create a bucket deleteBucket(nameOrId)Promise<void>Delete a bucket bucketSearch(nameOrId, request)Promise<SearchResult>Search a bucket bucketGraph(nameOrId, query?, topK?)Promise<GraphResult>Graph query on a bucket db.upload(bucket, options)Promise<BucketUploadResult>Upload files to a bucket
Method Returns Description addEdges(nameOrId, edges)Promise<{ count: number }>Add graph edges listEdges(nameOrId, nodeId, options?)Promise<EdgeListResult>List edges for a node deleteEdge(nameOrId, source, target, relation?)Promise<void>Delete an edge
Method Returns Description listCollections()Promise<Collection[]>List collections getCollection(id)Promise<Collection>Get collection by ID createCollection(request)Promise<Collection>Create a collection deleteCollection(id)Promise<void>Delete a collection collectionStats(id)Promise<Stats>Get collection statistics collectionAdd(collection, request)Promise<Result>Add documents to collection collectionSearch(collection, request)Promise<SearchResult>Search a collection upsertVectors(collection, vectors)Promise<Result>Upsert raw vectors deleteVectors(collection, ids)Promise<Result>Delete vectors by ID upsertDocuments(collection, documents, model)Promise<Result>Upsert documents with embedding
Method Returns Description chatCompletion(request)Promise<ChatCompletionResult>OpenAI-compatible chat completions listModels()Promise<Model[]>List available LLM models getRouting()Promise<RoutingConfig>Get current routing config setRouting(request)Promise<RoutingConfig>Set routing config
Method Returns Description usage()Promise<Usage>Get current usage usageSummary()Promise<UsageSummary>Get usage summary getJob(jobId)Promise<Job>Get job status listJobs(options?)Promise<Job[]>List jobs cancelJob(jobId)Promise<Job>Cancel a job reprocessJob(jobId)Promise<Job>Reprocess a failed job
Tool calling helpers that generate provider-specific tool definitions. Automatically created on schift.tools.
const tools = schift . tools . openai ();
const tools = schift . tools . anthropic ();
const tools = schift . tools . vercelAI ();
// Handle any tool call (auto-detects format)
const result = await schift . tools . handle (toolCall);
Method Returns Description openai()object[]OpenAI-compatible tool definitions anthropic()object[]Anthropic-compatible tool definitions vercelAI()Record<string, object>Vercel AI SDK tool definitions handle(toolCall)Promise<string>Execute a tool call from any provider
name : string ; // Must match /^[a-zA-Z_][a-zA-Z0-9_]*$/
handler : ( args : Record < string , unknown > ) => Promise < ToolResult >;
maxCallsPerRun ?: number ; // Per-run call limit
interface AgentRunResult {
type : " think " | " tool_call " | " tool_result " | " final_answer " | " error " ;
toolArgs ?: Record < string , unknown >;
role : " system " | " user " | " assistant " | " tool " ;
autoResolve ?: boolean ; // Default: true
interface SkillContract {
interface SkillFrontmatter {
" allowed-tools " ?: string [];
" blocked-tools " ?: string [];
interface PolicyDecision {
stage : " before_tool " | " after_tool " | " procedure " | " constraint " ;
registerTool ( tool : AgentTool ) : void ;
on < K extends AgentEventType > ( type : K , handler : ( event : AgentEventMap [ K ] ) => void ) : () => void ;
off < K extends AgentEventType > ( type : K , handler : ( event : AgentEventMap [ K ] ) => void ) : void ;
readonly agentName : string ;
interface MCPServerConfig {
transport : " stdio " | " sse " ;
interface CreateAgentRequest {
metadata ?: Record < string , unknown >;
interface AgentResponse {
metadata : Record < string , unknown >;
status : " pending " | " running " | " success " | " error " | " timeout " ;
Each event includes type, runId, and timestamp. Additional fields vary by event type:
Event Additional Fields agent_startinputturn_startturnIndextool_calltoolName, toolArgs, callIdtool_resulttoolName, callId, result, durationMsmessage_deltacontentagent_endoutput, totalDurationMserrorerrorpolicy_violationskillName, stage, reason, toolName?
const WebSearchProvider = {
import { OpenAIModel, GeminiModel, ClaudeModel } from " @schift-io/sdk " ;
OpenAIModel . GPT_5_5_PRO // "gpt-5.5-pro"
OpenAIModel . GPT_5_5 // "gpt-5.5"
OpenAIModel . GPT_5_4 // "gpt-5.4"
OpenAIModel . GPT_5_4_MINI // "gpt-5.4-mini"
OpenAIModel . GPT_5_4_NANO // "gpt-5.4-nano"
OpenAIModel . GPT_4_1 // "gpt-4.1"
OpenAIModel . GPT_4_1_MINI // "gpt-4.1-mini"
OpenAIModel . GPT_4_1_NANO // "gpt-4.1-nano"
OpenAIModel . GPT_4O // "gpt-4o"
OpenAIModel . GPT_4O_MINI // "gpt-4o-mini"
OpenAIModel . O3_MINI // "o3-mini"
OpenAIModel . O3_PRO // "o3-pro"
OpenAIModel . O4_MINI // "o4-mini"
GeminiModel . GEMINI_3_1_PRO // "gemini-3.1-pro"
GeminiModel . GEMINI_3_1_FLASH // "gemini-3.1-flash"
GeminiModel . GEMINI_3_1_FLASH_LITE // "gemini-3.1-flash-lite"
GeminiModel . GEMINI_2_5_PRO // "gemini-2.5-pro"
GeminiModel . GEMINI_2_5_FLASH // "gemini-2.5-flash"
GeminiModel . GEMINI_2_5_FLASH_LITE // "gemini-2.5-flash-lite"
ClaudeModel . OPUS_4_8 // "claude-opus-4-8"
ClaudeModel . OPUS_4_6 // "claude-opus-4-6"
ClaudeModel . SONNET_4_6 // "claude-sonnet-4-6"
ClaudeModel . HAIKU_4_5 // "claude-haiku-4-5-20251001"
SchiftError, // Base error (status, code)
AuthError, // 401 - Invalid API key
QuotaError, // 402 - Quota exceeded
EntitlementError, // 403 - Upgrade required
AgentError, // Agent failure (stepId)
ToolError, // Tool execution failure (toolName)
MaxStepsError, // Max ReAct iterations reached