Codex SDK, with some useful tools for building AI applications.
Dependencies
pnpm install -g @openai/codex@0.79.0///|
#skip
async test {
let codex = @codex.Codex::new()
let thread = codex.start_thread()
let turn = thread.run("Hello, what model are you using?")
// Iām `GPT-5.2`, running inside the Codex CLI harness in your repo (`/Users/../codex-sdk`).
println(turn.final_response)
println(turn.items.to_json().stringify())
println(turn.usage.to_json().stringify())
}///|
#skip
async test {
let codex = @codex.Codex::new(
options=@codex.CodexOptions::new(base_url="https://openrouter.ai/api/v1"),
)
let thread = codex.start_thread(
options=@codex.ThreadOptions::new(model="anthropic/claude-sonnet-4.5"),
)
let turn = thread.run("Hello?")
println(turn.final_response)
println(turn.items.to_json().stringify())
println(turn.usage.to_json().stringify())
}///|
#skip
async test {
let codex = @codex.Codex::new(
options=@codex.CodexOptions::new(base_url="https://openrouter.ai/api/v1"),
)
let thread = codex.start_thread(
options=@codex.ThreadOptions::new(model="anthropic/claude-sonnet-4.5"),
)
@async.with_task_group(tg => {
let streamed_turn = thread.run_streamed("Hello?", tg)
while streamed_turn.events.next() is Some(event) {
println(event.to_json().stringify())
}
}) catch {
e => println(e)
}
}///|
#skip
async test {
let codex = @codex.Codex::new()
let thread = codex.start_thread()
@async.with_task_group(tg => {
let turn = thread.run_streamed("Summarize today's commits", tg)
while turn.events.next() is Some(event) {
match event {
ItemStarted(item) => println("started: \{item.to_json().stringify()}")
ItemCompleted(AgentMessageItem(text~, ..)) =>
println("assistant: \{text}")
TurnCompleted(usage) =>
println("tokens in/out: \{usage.input_tokens}/\{usage.output_tokens}")
TurnFailed(error) => fail("codex turn failed: \{error.message}")
_ => ()
}
}
})
}///|
#skip
async test {
let codex = @codex.Codex::new()
let thread = codex.start_thread()
let turn = thread.run(
"Plan the next refactor as JSON",
turn_options=@codex.TurnOptions::new(output_schema={
"type": "object",
"properties": {
"summary": { "type": "string" },
"files_to_touch": { "type": "array", "items": { "type": "string" } },
},
"required": ["summary", "files_to_touch"],
"additionalProperties": false, // required to be supplied as valid schema
}),
)
println(turn.final_response)
let plan_json = @json.parse(turn.final_response)
println(plan_json.stringify(indent=2))
}pub(all) enum ApprovalMode {
Never
OnRequest
OnFailure
Untrusted
}impl Show for ApprovalModetype Codextype CodexOptionsimpl Default for CodexOptionsfn CodexOptions::new(codex_path_override? : String, base_url? : String, api_key? : String, env? : Map[String, String]) -> CodexOptionspub enum CommandExecutionStatus {
InProgress
Completed
Failed
}impl Show for CommandExecutionStatusimpl ToJson for CommandExecutionStatusimpl FromJson for CommandExecutionStatuspub enum Event {
ThreadStarted(String)
TurnStarted
TurnCompleted(Usage)
TurnFailed(ThreadError)
ItemStarted(ThreadItem)
ItemUpdated(ThreadItem)
ItemCompleted(ThreadItem)
ThreadErrorEvent(String)
}impl Show for FileUpdateChangeimpl ToJson for FileUpdateChangeimpl FromJson for FileUpdateChangepub enum McpToolCallStatus {
InProgress
Completed
Failed
}impl Show for McpToolCallStatusimpl ToJson for McpToolCallStatusimpl FromJson for McpToolCallStatuspub(all) enum ModelReasoningEffort {
Minimal
Low
High
Xhigh
}impl Show for ModelReasoningEffortpub enum PatchApplyStatus {
Completed
Failed
}impl Show for PatchApplyStatusimpl ToJson for PatchApplyStatusimpl FromJson for PatchApplyStatuspub enum PatchChangeKind {
Add
Delete
Update
}impl Show for PatchChangeKindimpl ToJson for PatchChangeKindimpl FromJson for PatchChangeKindpub(all) enum SandboxMode {
ReadOnly
WorkspaceWrite
DangerFullAccess
}impl Show for SandboxModetype Threadasync fn[G] Thread::run_streamed(self : Thread, prompt : String, extra_input? : Array[UserInput], turn_options? : TurnOptions, taskgroup : TaskGroup[G]) -> StreamedTurnpub struct ThreadError {
message : String
}pub enum ThreadItem {
AgentMessageItem(String, String)
ReasoningItem(String, String)
CommandExecutionItem(String, String, String, Int?, CommandExecutionStatus)
FileChangeItem(String, Array[FileUpdateChange], PatchApplyStatus)
McpToolCallItem(String, String, String, McpToolCallStatus, Json?, Result[McpToolCallResult, String]?)
WebSearchItem(String, String)
TodoListItem(String, Array[TodoItem])
ErrorItem(String, String)
}type ThreadOptionsimpl Default for ThreadOptionsfn ThreadOptions::new(model? : String, sandbox_mode? : SandboxMode, working_directory? : String, skip_git_repo_check? : Bool, model_reasoning_effort? : ModelReasoningEffort, network_access_enabled? : Bool, web_search_enabled? : Bool, approval_policy? : ApprovalMode, additional_directories? : Array[String]) -> ThreadOptionspub struct TodoItem {
text : String
completed : Bool
}#alias(RunResult)
pub struct Turn {
items : Array[ThreadItem]
final_response : String
usage : Usage?
}type TurnOptionsimpl Default for TurnOptionspub struct Usage {
input_tokens : Int
cached_input_tokens : Int
output_tokens : Int
}Codex SDK, with some useful tools for building AI applications.
Dependencies