Official

codex

Codex agent provider: runs the Codex CLI's app-server for each account.

The app opens the listing; nothing installs until an agent in your Plugins workspace has read the files and you enable the plugin. In a terminal: cvg install convergence/codex@0.2.0

Permissions in 0.2.0

  • Provide agents agents.provideMediumAdds agents to the app.Provide the Codex agent and pass its tool calls to plugin tools
  • Run named programs processMediumStarts the listed programs.Run the Codex CLI, and ask or tell the installer that owns it (npm or Homebrew) about a newer versionPrograms: codexnpmbrew
  • Environment variables envMediumReads the listed environment variables.Find each account's Codex home, and pass extra app-server arguments set in CODEX_ARGSVariables: HOMECODEX_HOMECODEX_ARGS
  • Read files fs.readMediumReads files in the listed places.Read, once, the accounts the previous Codex provider keptPlaces: its own data folder

Files

types.ts2.9 KB
// Provider state and boundary schemas. Output types come directly from
// the Convergence agent protocol; app-server input types live in wire.ts.
import * as z from "zod";
import type * as Deferred from "effect/Deferred";
import type { Thread, Turn } from "./wire.ts";

export type {
  ConfigChoice as Choice,
  ConfigOption,
  ToolContent,
  ToolCall,
  QuestionOption,
  QuestionField,
  TaskInfo as Task,
  Usage,
  UsageWindow,
  UsageLimits,
  TranscriptItem,
  AgentInfo,
} from "convergence/protocol";
import type { TaskInfo as Task, Usage } from "convergence/protocol";
export const answerSchema = z.object({
  cancelled: z.boolean().optional(),
  values: z
    .record(z.string(), z.union([z.string(), z.boolean(), z.number(), z.array(z.string()), z.null()]))
    .optional(),
});
export type QuestionAnswer = z.infer<typeof answerSchema>;
export interface History {
  thread: Thread;
  turns: Turn[];
}
export interface Facts {
  toolCallId?: string | null;
  prompt?: string | null;
  model?: string | null;
  effort?: string | null;
  name?: string | null;
  taskName?: string | null;
  startedAt?: string | null;
}
export interface Session {
  workspace: string;
  options: Record<string, unknown>;
  run: string | null;
  turn: string | null;
  starting?: Deferred.Deferred<string | null>;
  inputs: Map<string, { inputId: string; attemptId: string; runId: string }>;
  endedTurns: Set<string>;
  turns: Map<string, string>;
  streamed: Set<string>;
  startedTools: Set<string>;
  held: Map<string, string>;
  unloaded?: boolean;
}
export interface Child {
  root: string;
  turn: string | null;
  endedTurns: Set<string>;
  task: Task;
  taskName: string | null;
  tools: Set<string>;
  streamed: Set<string>;
  held: Map<string, string>;
}
export type { AgentEvent as Event } from "convergence/protocol";
export const sessionSchema = z.looseObject({
  workspace: z.string().optional(),
  options: z.record(z.string(), z.unknown()).optional(),
  instructions: z.string().optional(),
  tools: z
    .array(z.object({ name: z.string(), description: z.string().nullish(), inputSchema: z.unknown().optional() }))
    .optional(),
});
export interface SessionOptions {
  workspace?: string;
  options?: Record<string, unknown>;
  instructions?: string;
  tools?: { name: string; description?: string | null; inputSchema?: unknown }[];
}
export const promptSchema = z.object({
  itemId: z.string().optional(),
  delivery: z
    .object({ inputId: z.string(), attemptId: z.string(), intent: z.enum(["send", "steer", "queue"]) })
    .optional(),
  blocks: z
    .array(
      z.looseObject({
        type: z.string().optional(),
        text: z.string().optional(),
        path: z.string().optional(),
        mimeType: z.string().optional(),
        data: z.string().optional(),
        name: z.string().optional(),
        input: z.string().optional(),
      }),
    )
    .optional(),
});
export type PromptInput = z.infer<typeof promptSchema>;

Versions

VersionPublishedPlugin APISizePermissionsStatus
0.2.0latestOct 5, 2026>=2 <378.1 KB4 permissionsListed

Reviews and comments

0 threads · 0 reviews

No comments yet.