> ## Documentation Index
> Fetch the complete documentation index at: https://docs.agentium.in/llms.txt
> Use this file to discover all available pages before exploring further.

# Controllers and policies

> Step overrides, model roles, context projection, and completion decisions.

Step overrides, model roles, context projection, and completion decisions. Read the [controllers and policies guide](/harness/policies) for examples, defaults, and behavior.

These declarations cover every public export in this category. Import from `@agentium/harness`. Types such as `ChatMessage`, `RunContext`, and `ExecutionServices` come from [`@agentium/core`](/api-reference/core). A `?` marks an optional field.

## ReflectionPolicyOptions

```typescript theme={null}
export interface ReflectionPolicyOptions extends ControlOptions {
    id?: string;
    /** Host-authored acceptance criteria, not retrieved instructions. */
    criteria: string;
    /** Maximum critic output tokens; the host binding must allow maxTokens. Default: 1024. */
    maxTokens?: number;
}
```

## SummaryContextPolicyOptions

```typescript theme={null}
export interface SummaryContextPolicyOptions extends ControlOptions {
    id?: string;
    /** Request token estimate including instructions, retained turns and summary. */
    maxContextTokens: number;
    /** Latest complete turn groups kept unchanged, including the live turn. Default: 1. */
    keepRecentTurns?: number;
    /** Maximum summary output tokens; the host binding must allow maxTokens. Default: 1024. */
    summaryMaxTokens?: number;
}
```

## reflectionPolicy

```typescript theme={null}
/** A budgeted critic. Revisions and effect permissions remain owned by HarnessRuntime. */
export declare function reflectionPolicy(options: ReflectionPolicyOptions): CompletionPolicy;
```

## summaryContextPolicy

```typescript theme={null}
/** Summarize removable historical turns, preserving host instructions and the latest whole turns. */
export declare function summaryContextPolicy(options: SummaryContextPolicyOptions): ContextPolicy;
```

## CompletionDecision

```typescript theme={null}
export type CompletionDecision = {
    action: "accept";
    reason: string;
    evidence?: readonly string[];
} | {
    action: "revise";
    reason: string;
    instruction: string;
    evidence?: readonly string[];
} | {
    action: "await_input" | "stop";
    reason: string;
    evidence?: readonly string[];
};
```

## CompletionPolicy

```typescript theme={null}
export interface CompletionPolicy {
    id: string;
    evaluate: (response: {
        text: string;
        structured?: unknown;
        revision: number;
    }, ctx: RunContext) => Promise<CompletionDecision>;
}
```

## ContextPolicy

```typescript theme={null}
export interface ContextPolicy {
    id: string;
    project: (input: {
        history: readonly ChatMessage[];
        entries: readonly HarnessContextEntry[];
    }, ctx: RunContext) => Promise<ContextProjection>;
}
```

## ContextProjection

```typescript theme={null}
export interface ContextProjection {
    messages: ChatMessage[];
    provenance: readonly {
        sourceId: string;
        included: boolean;
        reason?: string;
    }[];
}
```

## ModelRoleBinding

```typescript theme={null}
export interface ModelRoleBinding {
    provider: import("@agentium/core").ModelProvider;
    /** Explicit allowlist of ModelConfig keys supported by this binding. */
    options?: readonly (keyof ModelConfig)[];
}
```

## StepController

```typescript theme={null}
export interface StepController {
    id: string;
    prepareRun?: (ctx: RunContext) => Promise<StepOverrides | undefined>;
    prepareStep?: (step: {
        index: number;
        tools: readonly ToolDefinition[];
    }, ctx: RunContext) => Promise<StepOverrides | undefined>;
}
```

## StepOverrides

```typescript theme={null}
export interface StepOverrides {
    activeToolIds?: readonly string[];
    modelRole?: string;
    options?: ModelConfig;
    contextPolicy?: ContextPolicy;
    stop?: {
        reason: string;
    };
}
```

## Supporting types

These shapes appear in the signatures above but are not named exports of the package entrypoint.

### ControlOptions

```typescript theme={null}
interface ControlOptions {
    /** Explicit role in HarnessRuntime.models and grants.modelRoles. */
    modelRole: string;
    /** Maximum serialized source bytes sent to the policy model. Default: 65536. */
    maxInputBytes?: number;
}
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.