(
inputPrompt: string | AsyncIterable<string>,
getAppState: () => AppState,
setAppState: (f: (prev: AppState) => AppState) => void,
commands: Command[],
tools: Tools,
sdkMcpConfigs: Record<string, McpSdkServerConfig>,
agents: AgentDefinition[],
options: {
continue: boolean | undefined
resume: string | boolean | undefined
resumeSessionAt: string | undefined
verbose: boolean | undefined
outputFormat: string | undefined
jsonSchema: Record<string, unknown> | undefined
permissionPromptToolName: string | undefined
allowedTools: string[] | undefined
thinkingConfig: ThinkingConfig | undefined
maxTurns: number | undefined
maxBudgetUsd: number | undefined
taskBudget: { total: number } | undefined
systemPrompt: string | undefined
appendSystemPrompt: string | undefined
userSpecifiedModel: string | undefined
fallbackModel: string | undefined
teleport: string | true | null | undefined
sdkUrl: string | undefined
replayUserMessages: boolean | undefined
includePartialMessages: boolean | undefined
forkSession: boolean | undefined
rewindFiles: string | undefined
enableAuthStatus: boolean | undefined
agent: string | undefined
workload: string | undefined
setupTrigger?: 'init' | 'maintenance' | undefined
sessionStartHooksPromise?: ReturnType<typeof processSessionStartHooks>
setSDKStatus?: (status: SDKStatus) => void
},
)
| 456 | } |
| 457 | |
| 458 | export async function runHeadless( |
| 459 | inputPrompt: string | AsyncIterable<string>, |
| 460 | getAppState: () => AppState, |
| 461 | setAppState: (f: (prev: AppState) => AppState) => void, |
| 462 | commands: Command[], |
| 463 | tools: Tools, |
| 464 | sdkMcpConfigs: Record<string, McpSdkServerConfig>, |
| 465 | agents: AgentDefinition[], |
| 466 | options: { |
| 467 | continue: boolean | undefined |
| 468 | resume: string | boolean | undefined |
| 469 | resumeSessionAt: string | undefined |
| 470 | verbose: boolean | undefined |
| 471 | outputFormat: string | undefined |
| 472 | jsonSchema: Record<string, unknown> | undefined |
| 473 | permissionPromptToolName: string | undefined |
| 474 | allowedTools: string[] | undefined |
| 475 | thinkingConfig: ThinkingConfig | undefined |
| 476 | maxTurns: number | undefined |
| 477 | maxBudgetUsd: number | undefined |
| 478 | taskBudget: { total: number } | undefined |
| 479 | systemPrompt: string | undefined |
| 480 | appendSystemPrompt: string | undefined |
| 481 | userSpecifiedModel: string | undefined |
| 482 | fallbackModel: string | undefined |
| 483 | teleport: string | true | null | undefined |
| 484 | sdkUrl: string | undefined |
| 485 | replayUserMessages: boolean | undefined |
| 486 | includePartialMessages: boolean | undefined |
| 487 | forkSession: boolean | undefined |
| 488 | rewindFiles: string | undefined |
| 489 | enableAuthStatus: boolean | undefined |
| 490 | agent: string | undefined |
| 491 | workload: string | undefined |
| 492 | setupTrigger?: 'init' | 'maintenance' | undefined |
| 493 | sessionStartHooksPromise?: ReturnType<typeof processSessionStartHooks> |
| 494 | setSDKStatus?: (status: SDKStatus) => void |
| 495 | }, |
| 496 | ): Promise<void> { |
| 497 | if ( |
| 498 | process.env.USER_TYPE === 'ant' && |
| 499 | isEnvTruthy(process.env.CLAUDE_CODE_EXIT_AFTER_FIRST_RENDER) |
| 500 | ) { |
| 501 | process.stderr.write( |
| 502 | `\nStartup time: ${Math.round(process.uptime() * 1000)}ms\n`, |
| 503 | ) |
| 504 | // eslint-disable-next-line custom-rules/no-process-exit |
| 505 | process.exit(0) |
| 506 | } |
| 507 | |
| 508 | // Fire user settings download now so it overlaps with the MCP/tool setup |
| 509 | // below. Managed settings already started in main.tsx preAction; this gives |
| 510 | // user settings a similar head start. The cached promise is joined in |
| 511 | // installPluginsAndApplyMcpInBackground before plugin install reads |
| 512 | // enabledPlugins. |
| 513 | if ( |
| 514 | feature('DOWNLOAD_USER_SETTINGS') && |
| 515 | (isEnvTruthy(process.env.CLAUDE_CODE_REMOTE) || getIsRemoteMode()) |
no test coverage detected