Kumbatio
Concepts

Strategies

The AdaptationStrategy model and the built-in strategies - UI visibility, notifications, task complexity, interaction forgiveness, deferral, autonomy, and demand admission.

A strategy is a pure mapping from energy level to behavior configuration. The SDK doesn't dictate what happens at each level - it provides the state, and strategies decide what to do with it.

The model

interface AdaptationStrategy<TConfig> {
  name: string
  describe(level: EnergyLevel): string // human-readable summary
  resolve(level: EnergyLevel): TConfig // compute the config for a level
}

Strategies are pure functions with no side effects, so they're trivially composable - an app resolves several at once:

const ui = engine.resolve(uiVisibilityStrategy)
const notifications = engine.resolve(notificationStrategy)

In React, useStrategy(strategy) resolves against the current level and re-renders on change. To write your own, see Authoring strategies.

The built-ins

uiVisibilityStrategy

Progressively simplifies interface chrome as energy drops. Resolves to a UIVisibilityConfig:

LevelsidebartabBarstatusBartoolbarchrome opacitycontent widthfont scale
1001none1
750.7none1
500.490ch1
25---0.180ch1.05
0----0.0575ch1.1

At 0 the config also sets readOnlyCursor: true - rest mode is for consuming, not producing. The reference stylesheet implements this same table in CSS.

notificationStrategy

Reduces interruptions as energy drops. Resolves to a NotificationConfig:

Levelvisualsoundvibrationbatch intervalpriority threshold
100immediateall
75-immediateall
50--5 minhigh
25--15 mincritical
0----none

This config is guidance on its own. The notification gate is the runtime that enforces it - including the guarantee that nothing below the threshold is dropped, only deferred.

taskComplexityStrategy

Caps the complexity of work worth surfacing, and suggests break cadence:

LevelmaxComplexitysuggestBreaksbreak interval
100complex--
75moderate--
50routine45 min
25simple25 min
0consumption--

Rest gets no break suggestions on purpose: prompting someone at 0 to take a break from resting is noise.

interactionForgivenessStrategy

Lower energy means slower error detection, so forgiveness scales inversely with capacity - longer undo windows, confirmation on destructive actions, more frequent autosave:

Levelundo windowconfirm destructiveautosave every
1005s-60s
758s-45s
5010s30s
2515s20s
020s15s

deferralStrategy

Orders the "not now" presets by level so a one-tap defer matches capacity. Resolves to { orderedPresetIds, defaultPresetId }:

Leveldefault deferral
100in 1 hour
75in 1 hour
50this evening
25tomorrow morning
0tomorrow morning

At low energy the default is "tomorrow morning", not "in 1 hour" - items should resurface when capacity has plausibly recovered.

autonomyStrategy

How much latitude automation has to act without asking. The mirror of interactionForgivenessStrategy: forgiveness protects against the user's mistakes at low energy, autonomy against the agent's. Resolves to an AutonomyConfig:

Levelconfidence thresholdgenerated contentmax unattended steps
1000.68
750.75
500.83
250.9templates only1
01.0templates only1

What narrows as energy falls is discretion, not action. At rest the automation may still take a single, certain, template-only step - the system acts on the user's behalf precisely when they are least able to supervise it, so the worst day is the wrong day for it to improvise.

demandAdmissionStrategy

Who gets through to the user, and what happens to everyone else. Resolves to a DemandAdmissionConfig; the full model, including acknowledgments, lives in Inbound demand.

Leveloriginator thresholdacknowledge the restdetail
100all-full
75knownfull
50exemptfull
25exemptbrief
0exemptminimal

Nothing is dropped at any level. What changes is whether demand reaches the inbox now or is acknowledged and queued - and how much the acknowledgment says.

createPresenceStrategy is an eighth export in this family, but it is a factory: you hand it a presence map and it returns a strategy for that map. See Presence.

describe() - explaining behavior to users

Every strategy can explain itself at any level, which is useful for settings screens and onboarding:

notificationStrategy.describe(50)
// "Steady: Only high priority, batched every 5min"

Full strategy reference: /docs/api/core.