> ISPO SDK documentation. [HTML](https://ispo.ai/docs/types/core.Supporting_types.ProjectCommandDefinition.html) · [Documentation index](https://ispo.ai/docs/llms.txt)

# Type Alias ProjectCommandDefinition<InputSchema, ResultSchema, ResultChannels>

```typescript
ProjectCommandDefinition: Omit<
    ProjectCommandCatalogEntry,
    | "inputSchema"
    | "resultSchema"
    | "invocationMode"
    | "agent"
    | "resultChannels",
> & { inputSchema: InputSchema; resultSchema: ResultSchema } & (
    | {
        agent?: never;
        invocationMode: "iframe-action";
        resultChannels: ResultChannels & ProjectCommandIframeActionResultChannel[];
    }
    | {
        agent: AgentId;
        invocationMode: "agent-task";
        resultChannels: ResultChannels & ProjectCommandAgentTaskResultChannel[];
    }
)
```

Types: [ProjectCommandCatalogEntry](core.ProjectCommandCatalogEntry.md), [InputSchema](#inputschema), [ResultSchema](#resultschema), [ResultChannels](#resultchannels), [ProjectCommandIframeActionResultChannel](core.Supporting_types.ProjectCommandIframeActionResultChannel.md), [AgentId](core.AgentId.md), [ProjectCommandAgentTaskResultChannel](core.Supporting_types.ProjectCommandAgentTaskResultChannel.md)

Literal command metadata retained long enough for `define()` to infer the handler and local runner types from the command's authored schemas.

#### Type Parameters

*   <a id="inputschema"></a>InputSchema extends [JsonSchema](core.Supporting_types.JsonSchema.md)
*   <a id="resultschema"></a>ResultSchema extends [JsonSchema](core.Supporting_types.JsonSchema.md)
*   <a id="resultchannels"></a>ResultChannels extends [CapabilityResultChannel](core.CapabilityResultChannel.md)\[\]
