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 the SDK from npm:
npm install @codeflow-ai/sdk
Create a client instance to connect to your codeflow server:
import { createcodeflowClient } from "@codeflow-ai/sdk"
const client = createcodeflowClient ({
baseUrl: "http://localhost:4096" ,
Option Type Description Default baseUrlstringURL of the codeflow server http://localhost:4096fetchfunctionCustom fetch implementation globalThis.fetchparseAsstringResponse parsing method autoresponseStylestringReturn style: data or fields fieldsthrowOnErrorbooleanThrow errors instead of returning false
You can also programmatically start an codeflow server:
import { createcodeflowServer } from "@codeflow-ai/sdk"
const server = await createcodeflowServer ({
console. log ( `Server running at ${ server . url }` )
Option Type Description Default hostnamestringServer hostname 127.0.0.1portnumberServer port 4096signalAbortSignalAbort signal for cancellation undefinedtimeoutnumberTimeout in ms for server start 5000
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.
The SDK throws typed errors that you can catch and handle:
const session = await client.session. get ({ id: "invalid-id" })
console. error ( "Failed to get session:" , error.message)
The SDK exposes all server APIs through a type-safe client interface.
Method Description Response app.log()Write a log entry booleanapp.agents()List all available agents Agent[]
message: "Operation completed" ,
const agents = await client.app. agents ()
Method Description Response project.list()List all projects Project[]project.current()Get current project Project
const projects = await client.project. list ()
const currentProject = await client.project. current ()
Method Description Response path.get()Get current path Path
// Get current path information
const pathInfo = await client.path. get ()
Method Description Response config.get()Get config info Configconfig.providers()List providers and default models { providers: Provider[], default: { [key: string]: string } }
const config = await client.config. get ()
const { providers , default : defaults } = await client.config. providers ()
Method Description Notes session.list()List sessions Returns Session[] session.get({ id })Get session Returns Session session.children({ id })List child sessions Returns Session[] session.create({ parentID?, title? })Create session Returns Session session.delete({ id })Delete session Returns boolean session.update({ id, title? })Update session properties Returns Session session.init({ id, messageID, providerID, modelID })Analyze app and create AGENTS.md Returns boolean session.abort({ id })Abort a running session Returns boolean session.share({ id })Share session Returns Session session.unshare({ id })Unshare session Returns Session session.summarize({ id, providerID, modelID })Summarize session Returns boolean session.messages({ id })List messages in a session Returns { info: Message, parts: Part[]}[] session.message({ id, messageID })Get message details Returns { info: Message, parts: Part[]} session.prompt({ id, ...promptInput })Send prompt message Returns Message session.shell({ id, agent, command })Run a shell command Returns Message session.revert({ id, messageID, partID? })Revert a message Returns Session session.unrevert({ id })Restore reverted messages Returns Session session.permissions.respond({ id, permissionID, response })Respond to a permission request Returns boolean
// Create and manage sessions
const session = await client.session. create ({ title: "My session" })
const sessions = await client.session. list ()
const message = await client.session. prompt ({
modelID: "claude-3-5-sonnet-20241022" ,
parts: [{ type: "text" , text: "Hello!" }],
Method Description Response find.text({ pattern })Search for text in files Array of match objects with path, lines, line_number, absolute_offset, submatches find.files({ query })Find files by name string[] (file paths)find.symbols({ query })Find workspace symbols Symbol[]file.read({ path })Read a file { type: "raw" | "patch", content: string }file.status()Get status for tracked files File[]
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" })
Method Description Response log.write({ service, level, message, extra? })Write log entry boolean
message: "Operation completed" ,
Method Description Response agent.list()List all available agents Agent[]
const agents = await client.agent. list ()
Method Description Response tui.appendPrompt({ text })Append text to the prompt booleantui.openHelp()Open the help dialog booleantui.openSessions()Open the session selector booleantui.openThemes()Open the theme selector booleantui.openModels()Open the model selector booleantui.submitPrompt()Submit the current prompt booleantui.clearPrompt()Clear the prompt booleantui.executeCommand({ command })Execute a command booleantui.showToast({ title?, message, variant })Show toast notification booleantui.control.next()Wait for the next control request Control request object tui.control.response({ body })Respond to a control request boolean
await client.tui. appendPrompt ({ text: "Add this to prompt" })
await client.tui. showToast ({
message: "Task completed" ,
Method Description Response auth.set({ id, ...authData })Set authentication credentials boolean
Method Description Response event.subscribe()Server-sent events stream Server-sent events stream
// 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)