Official
claude
Claude Code agent provider: runs the Claude Code CLI headless 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/claude@0.2.0
Permissions in 0.2.0
Files
wire.ts6.2 KB
// The CLI fields used by streams, stored records and workflow snapshots.
// Loose objects preserve fields passed back to Claude without interpreting them.
import * as z from "zod";
const text = z.string().nullish();
const number = z.number().nullish();
const boolean = z.boolean().nullish();
export const object = z.record(z.string(), z.unknown());
export const toolInput = z.looseObject({
to: text,
subagent_type: text,
prompt: text,
description: text,
run_in_background: boolean,
offset: number,
edits: z.array(object).nullish(),
todos: z.array(z.looseObject({ content: text, activeForm: text, status: text })).nullish(),
questions: z
.array(
z.looseObject({
question: text,
header: text,
multiSelect: boolean,
options: z.array(z.looseObject({ label: text, description: text })).nullish(),
}),
)
.nullish(),
});
export const block = z.looseObject({
type: text,
id: text,
name: text,
text: text,
thinking: text,
input: toolInput.nullish(),
tool_use_id: text,
is_error: boolean,
content: z.unknown().optional(),
});
const content = z.union([z.string(), z.array(block)]).nullish();
export const usage = z.looseObject({
total_tokens: number,
input_tokens: number,
cache_read_input_tokens: number,
cache_creation_input_tokens: number,
output_tokens: number,
tool_uses: number,
output_tokens_details: z.object({ thinking_tokens: number }).nullish(),
});
export const progress = z.looseObject({
type: text,
index: number,
title: text,
label: text,
agentId: text,
model: text,
state: text,
startedAt: number,
lastProgressAt: number,
durationMs: number,
lastToolName: text,
lastToolSummary: text,
error: text,
resultPreview: text,
agentType: text,
promptPreview: text,
tokens: number,
toolCalls: number,
phaseTitle: text,
});
export const structured = z.looseObject({
taskType: text,
taskId: text,
runId: text,
workflowName: text,
summary: text,
transcriptDir: text,
agentId: text,
isAsync: boolean,
status: text,
content: z.unknown().optional(),
totalTokens: number,
totalToolCalls: number,
totalToolUseCount: number,
});
export const record = z.looseObject({
type: text,
subtype: text,
uuid: text,
user_message_uuid: text,
user_message_uuids: z.array(z.string()).nullish(),
num_turns: number,
request_sent_wall_ms: number,
error: text,
parentUuid: text,
timestamp: text,
customTitle: text,
aiTitle: text,
isSidechain: boolean,
parent_tool_use_id: text,
task_id: text,
tool_use_id: text,
task_type: text,
description: text,
subagent_type: text,
prompt: text,
is_backgrounded: boolean,
workflow_name: text,
summary: text,
last_tool_name: text,
status: text,
output_file: text,
agent_id: text,
tool_name: text,
state: text,
usage: usage.nullish(),
modelUsage: z.record(z.string(), z.looseObject({ contextWindow: number, thinkingTokens: number })).nullish(),
total_cost_usd: number,
is_error: boolean,
errors: z.array(z.unknown()).nullish(),
result: z.unknown().optional(),
message: z.looseObject({ id: text, model: text, role: text, content, usage: usage.nullish() }).nullish(),
tool_use_result: structured.nullish(),
toolUseResult: structured.nullish(),
origin: z.object({ kind: text }).nullish(),
attachment: z.object({ prompt: text }).nullish(),
operation: text,
content: z.unknown().optional(),
workflow_progress: z.array(progress).nullish(),
patch: z.looseObject({ status: text, is_backgrounded: boolean, error: text }).nullish(),
compact_result: text,
compact_error: text,
isCompactSummary: boolean,
level: text,
compact_metadata: z.unknown().optional(),
event: z
.looseObject({
type: text,
index: number,
message: z.object({ id: text, model: text }).nullish(),
content_block: block.nullish(),
delta: z.object({ type: text, text: text, thinking: text, partial_json: text }).nullish(),
})
.nullish(),
request_id: text,
request: z
.looseObject({
subtype: text,
server_name: text,
message: z.unknown().optional(),
tool_name: text,
tool_use_id: text,
input: toolInput.nullish(),
title: text,
display_name: text,
agent_id: text,
permission_suggestions: z.unknown().optional(),
})
.nullish(),
response: z.looseObject({ subtype: text, request_id: text, error: text, response: z.unknown().optional() }).nullish(),
rate_limit_info: z.unknown().optional(),
});
export const workflowOutput = z.looseObject({
result: z.unknown().optional(),
logs: z.array(z.unknown()).nullish(),
phases: z.array(z.object({ title: text })).nullish(),
workflowProgress: z.array(progress).nullish(),
totalTokens: number,
totalToolCalls: number,
startTime: number,
durationMs: number,
status: text,
summary: text,
workflowName: text,
script: text,
error: text,
});
export const metadata = z.looseObject({
toolUseId: text,
model: text,
description: text,
requestShape: text,
agentType: text,
parentAgentId: text,
workflowPhase: text,
});
export const model = z.looseObject({
value: text,
resolvedModel: text,
supportsAdaptiveThinking: boolean,
supportsFastMode: boolean,
});
export const command = z.looseObject({ name: text, description: text, argumentHint: text });
export const catalog = z.looseObject({
models: z.array(model).nullish(),
commands: z.array(command).nullish(),
fast_mode_state: text,
fast_mode_disabled_reason: text,
});
export type CatalogResponse = z.infer<typeof catalog>;
export type Record = z.infer<typeof record>;
export type Input = z.infer<typeof toolInput>;
export type Progress = z.infer<typeof progress>;
export type Structured = z.infer<typeof structured>;
export type Output = z.infer<typeof workflowOutput>;
export type Metadata = z.infer<typeof metadata>;
export type Command = z.infer<typeof command>;
export type Model = z.infer<typeof model>;
export type ControlRequest = NonNullable<Record["request"]>;
export type StreamEvent = NonNullable<Record["event"]>;
export function objectOf(value: unknown) {
const parsed = object.safeParse(value);
return parsed.success ? parsed.data : {};
}
export function inputOf(value: unknown) {
const parsed = toolInput.safeParse(value);
return parsed.success ? parsed.data : {};
}Versions
| Version | Published | Plugin API | Size | Permissions | Status |
|---|---|---|---|---|---|
| 0.2.0latest | Oct 5, 2026 | >=2 <3 | 128.7 KB | 4 permissions | Listed |
No comments yet.