Skip to content

SDK

JS SDK for the codeflow server.

The codeflow JS/TS SDK provides a type-safe client for interacting with the codeflow server. You can use it to build custom integrations and control codeflow programmatically.

Learn more about how the codeflow server works.

Note: Many API endpoints now require a directory query parameter to specify the working directory context.


Install

Install the SDK from npm:

Terminal window
npm install @codeflow-ai/sdk

Create client

Create a client instance to connect to your codeflow server:

import { createcodeflowClient } from "@codeflow-ai/sdk"
const client = createcodeflowClient({
baseUrl: "http://localhost:4096",
})

Options

OptionTypeDescriptionDefault
baseUrlstringURL of the codeflow serverhttp://localhost:4096
fetchfunctionCustom fetch implementationglobalThis.fetch
parseAsstringResponse parsing methodauto
responseStylestringReturn style: data or fieldsfields
throwOnErrorbooleanThrow errors instead of returningfalse

Start server

You can also programmatically start an codeflow server:

import { createcodeflowServer } from "@codeflow-ai/sdk"
const server = await createcodeflowServer({
hostname: "127.0.0.1",
port: 4096,
})
console.log(`Server running at ${server.url}`)
server.close()

Options

OptionTypeDescriptionDefault
hostnamestringServer hostname127.0.0.1
portnumberServer port4096
signalAbortSignalAbort signal for cancellationundefined
timeoutnumberTimeout in ms for server start5000

Types

The SDK includes TypeScript definitions for all API types. Import them directly:

import type { Session, Message, Part } from "@codeflow-ai/sdk"

All types are generated from the server’s OpenAPI specification and available in the types file.


Errors

The SDK throws typed errors that you can catch and handle:

try {
const session = await client.session.get({ id: "invalid-id" })
} catch (error) {
console.error("Failed to get session:", error.message)
}

APIs

The SDK exposes all server APIs through a type-safe client interface.


App

MethodDescriptionResponse
app.log()Write a log entryboolean
app.agents()List all available agentsAgent[]

Examples

// Log an entry
await client.app.log({
service: "my-app",
level: "info",
message: "Operation completed",
})
// List available agents
const agents = await client.app.agents()

Project

MethodDescriptionResponse
project.list()List all projectsProject[]
project.current()Get current projectProject

Examples

// List all projects
const projects = await client.project.list()
// Get current project
const currentProject = await client.project.current()

Path

MethodDescriptionResponse
path.get()Get current pathPath

Examples

// Get current path information
const pathInfo = await client.path.get()

Config

MethodDescriptionResponse
config.get()Get config infoConfig
config.providers()List providers and default models{ providers: Provider[], default: { [key: string]: string } }

Examples

const config = await client.config.get()
const { providers, default: defaults } = await client.config.providers()

Sessions

MethodDescriptionNotes
session.list()List sessionsReturns Session[]
session.get({ id })Get sessionReturns Session
session.children({ id })List child sessionsReturns Session[]
session.create({ parentID?, title? })Create sessionReturns Session
session.delete({ id })Delete sessionReturns boolean
session.update({ id, title? })Update session propertiesReturns Session
session.init({ id, messageID, providerID, modelID })Analyze app and create AGENTS.mdReturns boolean
session.abort({ id })Abort a running sessionReturns boolean
session.share({ id })Share sessionReturns Session
session.unshare({ id })Unshare sessionReturns Session
session.summarize({ id, providerID, modelID })Summarize sessionReturns boolean
session.messages({ id })List messages in a sessionReturns { info: Message, parts: Part[]}[]
session.message({ id, messageID })Get message detailsReturns { info: Message, parts: Part[]}
session.prompt({ id, ...promptInput })Send prompt messageReturns Message
session.shell({ id, agent, command })Run a shell commandReturns Message
session.revert({ id, messageID, partID? })Revert a messageReturns Session
session.unrevert({ id })Restore reverted messagesReturns Session
session.permissions.respond({ id, permissionID, response })Respond to a permission requestReturns boolean

Examples

// Create and manage sessions
const session = await client.session.create({ title: "My session" })
const sessions = await client.session.list()
// Send messages
const message = await client.session.prompt({
id: session.id,
model: {
providerID: "anthropic",
modelID: "claude-3-5-sonnet-20241022",
},
parts: [{ type: "text", text: "Hello!" }],
})

Files

MethodDescriptionResponse
find.text({ pattern })Search for text in filesArray of match objects with path, lines, line_number, absolute_offset, submatches
find.files({ query })Find files by namestring[] (file paths)
find.symbols({ query })Find workspace symbolsSymbol[]
file.read({ path })Read a file{ type: "raw" | "patch", content: string }
file.status()Get status for tracked filesFile[]

Examples

// Search and read files
const textResults = await client.find.text({ pattern: "function.*codeflow" })
const files = await client.find.files({ query: "*.ts" })
const content = await client.file.read({ path: "src/index.ts" })

Logging

MethodDescriptionResponse
log.write({ service, level, message, extra? })Write log entryboolean

Examples

await client.log.write({
service: "my-app",
level: "info",
message: "Operation completed",
})

Agents

MethodDescriptionResponse
agent.list()List all available agentsAgent[]

Examples

const agents = await client.agent.list()

TUI

MethodDescriptionResponse
tui.appendPrompt({ text })Append text to the promptboolean
tui.openHelp()Open the help dialogboolean
tui.openSessions()Open the session selectorboolean
tui.openThemes()Open the theme selectorboolean
tui.openModels()Open the model selectorboolean
tui.submitPrompt()Submit the current promptboolean
tui.clearPrompt()Clear the promptboolean
tui.executeCommand({ command })Execute a commandboolean
tui.showToast({ title?, message, variant })Show toast notificationboolean
tui.control.next()Wait for the next control requestControl request object
tui.control.response({ body })Respond to a control requestboolean

Examples

// Control TUI interface
await client.tui.appendPrompt({ text: "Add this to prompt" })
await client.tui.showToast({
message: "Task completed",
variant: "success",
})

Auth

MethodDescriptionResponse
auth.set({ id, ...authData })Set authentication credentialsboolean

Examples

await client.auth.set({
id: "anthropic",
type: "api",
key: "your-api-key",
})

Events

MethodDescriptionResponse
event.subscribe()Server-sent events streamServer-sent events stream

Examples

// Listen to real-time events
const events = await client.event.subscribe()
for await (const event of events.stream) {
console.log("Event:", event.type, event.properties)
}