Skip to main content

Files and settings

Everything Kule keeps lives in Kule's home, ~/.kule by default. Set KULE_HOME (or pass --home) to use another one; see Environment variables. No sandbox can see Kule's home: a task's commands and agents cannot read or write anything on this page except their own copy and temporary files.

A few things live outside it: the packages Kule installs for agents, the agents' own homes, and a repository's own rules. They are listed at the end.

Editing by hand

The files marked edit: yes are meant for you to write: policy.cedar, agents.toml and a repository's .kule/policy.cedar. Everything else is Kule's own state. Change it through the app or the kule commands; a file edited by hand while the daemon runs may be written over, and a broken one can make Kule refuse to work until it is fixed or removed.

Kule's home​

PathWhat it holdsEdit
tasks/<id>/One folder per task. See A task's folder.no
trash/Deleted tasks, on their way out. Kule empties it in the background right away and whenever the daemon starts.no
policy.cedarThe policy for every task when it is not Kule's balanced one: either Kule's careful policy, written by kule policy careful, or your own. Kule never overwrites a policy you wrote. See Policy rules.yes
group-policies/<id>.cedarA group's own policy, kept by kule group policy ID own --file PATH after it was checked.no: set it again with the command
groups.jsonGroups: id, name, colour, policy choice, budgets and limits.no
order.jsonThe order of tasks in the app and in kule list.no
limits.jsonThe limits for every task (kule limits).no
budget.jsonThe daily budget for every task (kule daily-budget).no
remembered.jsonWhat you told Kule not to ask about again (kule rules).no
beside.jsonProjects beside a folder that its tasks may read (kule reveal).no
isolation.jsonWhether you accepted weaker isolation (kule isolation).no
secrets.jsonKept secrets: names, hosts, folders, and values sealed (encrypted). Readable by you alone.no
secrets.keyThe key that seals the secrets, only when the system does not keep it: a Kule home other than ~/.kule, or a computer without a keychain or Secret Service. For ~/.kule the key is in the macOS keychain (item Kule secrets) or Secret Service on Linux.no
kule.keyThe key that signs every task's history (kule history).no
agents.tomlYour agent profiles. Each runs only once approved, and again after any change. Format: kule agents show claude-code; fields: Agents.yes
agents-approved.jsonWhich profile, exactly as it was, you approved.no
registry.jsonThe last copy of the ACP registry (kule agents registry).no: a cache
extensions/Extensions. See below.no
shortcuts.jsonYour keyboard shortcuts (Settings → Shortcuts).no
themes.jsonThe theme in use and the themes you made (Settings → Appearance).no
layout.jsonWhere the window's panels are. Reset the layout goes back to Kule's own.no
editors.jsonThe editor you last opened a copy in, and the editors whose first-time note you have seen.no
kept/Linux: what Kule moved aside when it put an agent's settings back after a run (kept/replaced/…). Never deleted by Kule.you may delete old entries
kuled.sockThe daemon's socket. Only its owner can connect.no
kuled.lockHeld by the running daemon, so only one runs per home.no
kuled.tokenThe token every request to the daemon carries; made fresh at each start.no
kuled.logOutput of a daemon the app started.read only

Extensions​

Under extensions/:

PathWhat it holds
installed.jsonEach installed extension: version, digest, on or off, and the folder of one under development.
approved.jsonFor each, the digest, permissions and hosts you approved.
mcp-approved.jsonThe MCP servers you let agents use, by digest.
packages/<id>-<digest>.kulextThe packages, kept as they are, never unpacked.
data/<id>/What the extension stores (storage.json) and its settings (config.json).

See Extensions.

A task's folder​

Each task lives in tasks/<id>/, where <id> is the 8-character id kule list prints.

PathWhat it holds
task.jsonThe task's id, the workspace (your folder), when it was made, and the copy's folder name.
settings.jsonThe task's name and colour, its group, its budget, its own limits, how long questions wait, and what the copy took when it was made (disk limits count from there).
w/<folder name>/The copy: where the agent works. kule path TASK prints it. Beside it are links to projects you opened with kule reveal.
base/The folder as it was at the last sync, for three-way merges.
baseline.jsonWhere the workspace and the copy last agreed, file by file: Kule compares both with it to find what each changed.
tmp/The task's TMPDIR. Inside: caches/ (its own package caches: npm, cargo, pip, uv, Go, NuGet, Yarn, pnpm, …), kule-ca.pem and kule-ca-bundle.pem (the proxy's certificate authority for this task), .kule-loopback/ (what holds servers to loopback).
home/The home layer: what the task's commands see as your home. See Home layer.
home.jsonWhat the home layer was made from, to tell what the task changed.
home-kept/What kule home TASK apply replaced in your real home, one folder per apply, for kule home TASK undo.
steps.jsonl, steps-mark.json, steps-store/The uncommitted steps (each tool call's changes) and what going back to a step needs.
checkpoints/One numbered folder per commit (000001/checkpoint.json, …), and store.git: the Lonca store with what each commit replaced, and the signed history (refs/kule/log).
network.jsonlEvery connection the task's commands made through the proxy, refused ones included.
sandbox.jsonlWhat the sandbox refused (macOS reports it; Linux does not).
usage.jsonlWhat each agent run used, as the agent reported it: tokens, context, cost.
secrets.jsonThe values Kule masked in the copy's .env files, sealed like kept secrets.
synced.jsonWhat the last kule sync brought in, for the agent to hear at its next turn.
refused-hints.jsonWhich "why a tool failed" notes the agent was already told.

None of these are for editing by hand. Delete a task with kule rm TASK, never by removing its folder.

Why ~/.kule looks large​

On macOS (APFS), and on Linux with Btrfs or XFS, the copy, base/ and the cached packages are clones that share disk blocks with your files. Finder and du count them at full size anyway; look at the free space (df -h) to see what is really used.

Outside Kule's home​

PathWhat it holds
~/Library/Application Support/Kule/packages (macOS), ~/.local/share/kule/packages (Linux)Agents that Kule installs with npm (Claude Code's and Codex's ACP adapters), one folder per exact version, installed without running install scripts. No sandbox can write here.
~/Library/Application Support/Kule/agents/<name> (macOS), ~/.local/share/kule/agents/<name> (Linux)A home of its own for an agent whose profile sets own_home. The agent signs in here once.
<workspace>/.kule/policy.cedarA repository's own forbid rules. It may only tighten the policy. Kule reads it from your real folder, never from a task's copy, and every change to anything under .kule/ waits for a person. Edit: yes.

Files you move between computers​

FileWhat it is
*.kule-profile.jsonYour choices in one file (Settings → Profile): themes, shortcuts, the balanced or careful choice, the daily budget, limits and your agent profiles. Never secrets, remembered approvals, or a policy you wrote. On import Kule shows what it holds and you pick the parts; its agents wait for your approval.
*.kule-theme.jsonOne theme: a #rrggbb colour for each named part of the window, and nothing else. Checked on the way in.
*.kulextAn extension package. See Extensions.

See also​