x-pack/solutions/security/.agents/skills/entity-store/references/maintainers.md
Recurring background tasks operating on entity data. Used by automated resolution and entity relationships maintainers.
Register at consuming plugin's setup():
interface RegisterEntityMaintainerConfig {
id: string;
description?: string;
interval: string; // e.g. '5m', '1h'
initialState: EntityMaintainerState;
run: EntityMaintainerTaskMethod; // Called every interval
setup?: EntityMaintainerTaskMethod; // Optional one-time init (first run only)
}
Example:
// In your plugin's setup():
entityStore.registerEntityMaintainer({
id: 'my_maintainer',
description: 'Computes relationships',
interval: '5m',
initialState: { lastProcessedTimestamp: null },
setup: async (ctx) => { /* one-time init */ },
run: async (ctx) => { /* called every 5m */ },
});
interface EntityMaintainerTaskMethodContext {
status: EntityMaintainerStatus; // { metadata: { namespace, runs, lastSuccessTimestamp, lastErrorTimestamp }, state }
abortController: AbortController;
logger: Logger;
fakeRequest: KibanaRequest; // For creating scoped clients
esClient: ElasticsearchClient; // Scoped to installing user's permissions
crudClient: EntityUpdateClient; // For updating entity documents
}
entity_store:v2:entity_maintainer_task:{id}setup() runs once: When status.metadata.runs === 0entity_maintainer eventminLicenseLevel on registrationThe crudClient: EntityUpdateClient gives maintainers write access to entity documents. The esClient provides raw ES access scoped to the installing user's permissions. Use fakeRequest when you need to create additional scoped Kibana clients.