Docs

Configuration

You never need a config file to start — setup writes one for you. Everything below lives in keepitmovin.config.json in your project directory and is optional, so keep your file to just the settings you actually change.

Your tools and fallback order

The config lists your enabled tools and the order keepitmovin falls back through them. Edit both interactively with movin providersrather than by hand.

Built-in and custom tools

For a built-in tool, only enabled and fallbackOnare yours — its command, arguments and limit banners come from keepitmovin and are re-applied on every load. Any other tool name is a custom tool: set command, args,handoffArgs and limitPatterns yourself. Because a custom tool runs an arbitrary command, keepitmovin asks once before trusting the config, and again whenever the file changes. Approvals live under ~/.keepitmovin/ (orKEEPITMOVIN_HOME).

Manual switch key

harness.manualSwitchKey is the key that hands off on demand:ctrl-] (default), ctrl-\, ctrl-gor ctrl-o. Any other value falls back to the default.

Usage probes

Keyword detection reacts after a tool prints a limit banner. When a tool records its own remaining usage on disk, keepitmovin can read it and switch before the wall — a usage probe. Today only Codex exposes this; probes are read-only and fail safe. Configure underharness.usageProbe:

FieldDefaultMeaning
enabledtrueMaster switch for all usage probes.
thresholdPercent95Switch when a tool's highest usage window reaches this percent.
pollIntervalMs30000How often to re-check while a tool runs.

Warning-only watchdog

Loop, abnormal Codex burn, and streaming-stall signals produce local warnings only. They never stop or switch a tool. Configure underharness.watchdog:

FieldDefaultMeaning
enabledtrueEnable conservative loop, burn, and stall warnings.

A single tool can override the threshold with its ownusageProbe.thresholdPercent. Run movin doctor to see current usage for probed tools.

Handoff refresh

keepitmovin keeps the mechanical sections of thehandoff file fresh on a timer and nudges the active tool if the narrative goes stale. Configure underharness.handoffRefresh:

FieldDefaultMeaning
enabledtrueMaster switch for the refresh/nudge system.
intervalMs60000How often the mechanical sections are refreshed.

Task routing

Off by default. When enabled, pass a task on the command line and keepitmovin picks a model and reasoning effort within your fallback order. It never changes that order. Plain movin still starts immediately without a prompt or routing. The default local classifier is deterministic, makes no network calls, and remains the default for old configs without a classifier field.

{
  "routing": {
    "enabled": true,
    "classifier": "local"
  }
}

Set classifier to "jev" and exportTYPESAFE_API_KEY to opt into TypeSafe's Jev classifier. Jev receives only sanitized task text: fenced code blocks, recognizable secrets, absolute paths (any leading-slash or Windows drive token), URLs, and email addresses are replaced, whitespace is collapsed, and the result is capped at 1,800 characters. The key is read only from the environment and is never saved or logged. Requests time out after 2.5 seconds; a missing key, timeout, rejected response, or any other failure silently falls back to the local classifier. An explicit--tier skips Jev entirely. Jev runs once at launch and again at each tool handoff.

export TYPESAFE_API_KEY="..."
movin "Investigate the intermittent auth failure"
movin --tier deep "Implement the approved plan"

Tiers are light, standard, deep, and max, mapped to appropriate models per tool.--tier is the only routing flag: it overrides the classifier for one run. Automatic routing never selects ultra effort.

Tool updates

Off by default, so starting movin never blocks. Turn it on and keepitmovin asks before running a tool's own verified updater. It never guesses an installer. Configure underupdates:

FieldDefaultMeaning
checkOnStartfalseCheck your tools for updates each time keepitmovin starts. Off by default.
mode"prompt""always" runs updates without asking; "off" skips the check.
includeDisabledProvidersfalseAlso check tools outside your fallback order.