import type { EffortLevel } from "shared";
type MessageSender = (opts: {
    prompt: string | AsyncIterable<any>;
    chatId?: string;
    folder?: string;
    systemPrompt?: string;
    agentAlias?: string;
    maxTurns?: number;
    defaultPermissions?: any;
    triggered?: boolean;
    triggeredBy?: "cron" | "event" | "trigger" | "tool";
    provider?: "claude-code" | "openrouter";
    model?: string;
    effort?: EffortLevel;
    requireExplicitCompletion?: boolean;
}) => Promise<import("events").EventEmitter>;
/**
 * Register the sendMessage function. Called by claude.ts on module load
 * to break the circular dependency.
 */
export declare function setExecutorMessageSender(fn: MessageSender): void;
export interface ExecuteAgentOptions {
    agentAlias: string;
    prompt: string;
    triggeredBy: "cron" | "event" | "trigger" | "tool";
    metadata?: Record<string, unknown>;
    maxTurns?: number;
    provider?: "claude-code" | "openrouter";
    model?: string;
    /** OR-only reasoning effort. Ignored when provider is claude-code. */
    effort?: EffortLevel;
    /**
     * Require the session to call objective_complete before it counts as done
     * — ends-without-calling gets nudged to continue. Default: false.
     */
    requireExplicitCompletion?: boolean;
}
export interface ExecuteAgentResult {
    chatId: string;
}
/**
 * Execute an agent session.
 *
 * Loads agent config, compiles identity, starts a Claude Code session
 * with Callboard tools injected, and logs the activity.
 *
 * Returns the chatId of the new session, or null if it failed.
 */
export declare function executeAgent(opts: ExecuteAgentOptions): Promise<ExecuteAgentResult | null>;
export {};
//# sourceMappingURL=agent-executor.d.ts.map