KrillFeature

@Serializable
data class KrillFeature(val category: String = "", val description: String = "", val llmActsOnExternalWorld: Boolean, val llmBehavior: List<String>, val llmCanCreateChildren: Boolean, val llmConnectionHints: LlmConnectionHints, val llmCreationHints: String, val llmExamples: List<String>, val llmExecutesChildren: Boolean, val llmInputs: List<String>, val llmOutputs: List<String>, val llmPromptHints: List<String>, val llmPurpose: String, val llmRepresentsPersistentState: Boolean, val llmRole: String, val llmSideEffectLevel: String, val llmTargetType: String? = null, val llmTypicalUseCases: List<String>, val name: String, val nodeClickBehavior: String, val nodeCommandBehavior: String, val requiresServer: Boolean, val shortDescription: String, val state: String, val subcategory: String, val title: String)(source)

Descriptor for a single Krill node type — UI metadata plus the prompt surface used by Krill's LLM tooling.

Loaded from a JSON resource named after the corresponding KrillApp subclass (e.g. KrillApp.Server.json). A missing field on the JSON side falls back to the default declared here; required fields will throw at deserialisation time, which is the desired fail-loud behaviour for a malformed bundle.

Constructors

Link copied to clipboard
constructor(category: String = "", description: String = "", llmActsOnExternalWorld: Boolean, llmBehavior: List<String>, llmCanCreateChildren: Boolean, llmConnectionHints: LlmConnectionHints, llmCreationHints: String, llmExamples: List<String>, llmExecutesChildren: Boolean, llmInputs: List<String>, llmOutputs: List<String>, llmPromptHints: List<String>, llmPurpose: String, llmRepresentsPersistentState: Boolean, llmRole: String, llmSideEffectLevel: String, llmTargetType: String? = null, llmTypicalUseCases: List<String>, name: String, nodeClickBehavior: String, nodeCommandBehavior: String, requiresServer: Boolean, shortDescription: String, state: String, subcategory: String, title: String)

Properties

Link copied to clipboard
@SerialName(value = "category")
val category: String

Top-level grouping in the palette ("Trigger", "Executor", ...).

Link copied to clipboard
@SerialName(value = "description")
val description: String

Long-form prose description shown in the editor's info panel.

Link copied to clipboard
@SerialName(value = "llmActsOnExternalWorld")
val llmActsOnExternalWorld: Boolean

true if this node type has side effects outside the swarm (sends email, calls an external API, toggles a relay) — used to prompt the user for confirmation before LLM-driven creation.

Link copied to clipboard
@SerialName(value = "llmBehavior")
val llmBehavior: List<String>

Bullet-list description of how this node behaves at runtime.

Link copied to clipboard
@SerialName(value = "llmCanCreateChildren")
val llmCanCreateChildren: Boolean

true if the LLM is allowed to add child nodes underneath this type.

Link copied to clipboard
@SerialName(value = "llmConnectionHints")
val llmConnectionHints: LlmConnectionHints

Connection-graph hints; see LlmConnectionHints.

Link copied to clipboard
@SerialName(value = "llmCreationHints")
val llmCreationHints: String

Free-form guidance for the LLM when it decides to instantiate this type.

Link copied to clipboard
@SerialName(value = "llmExamples")
val llmExamples: List<String>

Worked examples shown to the LLM as few-shot context.

Link copied to clipboard
@SerialName(value = "llmExecutesChildren")
val llmExecutesChildren: Boolean

true if this node type executes its children (e.g. a Project orchestrating its members).

Link copied to clipboard
@SerialName(value = "llmInputs")
val llmInputs: List<String>

Names of the values this node consumes from upstream sources.

Link copied to clipboard
@SerialName(value = "llmOutputs")
val llmOutputs: List<String>

Names of the values this node produces for downstream targets.

Link copied to clipboard
@SerialName(value = "llmPromptHints")
val llmPromptHints: List<String>

Phrases the LLM should look for in user requests as a hint to use this node.

Link copied to clipboard
@SerialName(value = "llmPurpose")
val llmPurpose: String

One-sentence summary of what this node type is for.

Link copied to clipboard
@SerialName(value = "llmRepresentsPersistentState")
val llmRepresentsPersistentState: Boolean

true if instances of this type carry persistent state between executions (e.g. a DataPoint's snapshot history).

Link copied to clipboard
@SerialName(value = "llmRole")
val llmRole: String

Coarse role label — "sensor", "actuator", "orchestrator", etc.

Link copied to clipboard
@SerialName(value = "llmSideEffectLevel")
val llmSideEffectLevel: String

Coarse risk classification of running this node — typically one of "none", "reversible", "observable", "irreversible". Used by the LLM safety layer to decide whether to ask before firing.

Link copied to clipboard
@SerialName(value = "llmTargetType")
val llmTargetType: String?

For executor / filter / trigger types, the canonical node type they typically write to. Optional and may be null for nodes that don't have a single dominant target.

Link copied to clipboard
@SerialName(value = "llmTypicalUseCases")
val llmTypicalUseCases: List<String>

Catalogue of typical use cases shown alongside llmExamples.

Link copied to clipboard
@SerialName(value = "name")
val name: String

Display name for the palette and editor.

Link copied to clipboard
@SerialName(value = "nodeClickBehavior")
val nodeClickBehavior: String

What happens when the user clicks the node chip in the swarm UI — "none", "execute", "toggle", etc.

Link copied to clipboard
@SerialName(value = "nodeCommandBehavior")
val nodeCommandBehavior: String

Description of what the node's right-click / command menu offers.

Link copied to clipboard
@SerialName(value = "requiresServer")
val requiresServer: Boolean

true if this node type depends on a Krill server runtime (DataPoint, Trigger, Executor, MQTT, Server.* …) — false for fully client-side types (Project, Project.Journal, Project.TaskList, Project.Diagram). Drives recipe gating and FTUE prompts.

Link copied to clipboard
@SerialName(value = "shortDescription")
val shortDescription: String

Short description used in the node palette tile.

Link copied to clipboard
@SerialName(value = "state")
val state: String

Default initial krill.zone.shared.node.NodeState for newly created instances.

Link copied to clipboard
@SerialName(value = "subcategory")
val subcategory: String

Optional sub-grouping under category in the palette.

Link copied to clipboard
@SerialName(value = "title")
val title: String

Marketing / docs title — usually the same as name but may be longer.