Reference
Settings
LoopCode's settings files — where they live, how they combine, and every field — for permissions, hooks, the sandbox, auto-review, language servers and proof of done.
Settings files
LoopCode reads settings from three JSON files, in the shape and order Claude Code uses:
| File | Scope |
|---|---|
~/.loopcode/settings.json | Your preferences, in every project |
.loopcode/settings.json | The project's, committed and shared with the team |
.loopcode/settings.local.json | Yours, for this project. Keep it out of git (your "always allow" answers are written here) |
How they combine. For single values, a later file wins. Permission rules and hooks accumulate instead of replacing each other, so a project's safety rules cannot be silently dropped by a personal file — and since deny is evaluated first, a project can forbid something a developer cannot allow back.
Example
{
"defaultMode": "auto",
"permissions": {
"allow": ["Bash(npm test:*)", "Bash(npm run lint)"],
"ask": ["Bash(git push:*)"],
"deny": ["Read(./.env)", "Read(./secrets/**)"]
},
"hooks": {
"PostToolUse": [{ "matcher": "Edit|Write", "hooks": [{ "type": "command", "command": "npx prettier --write \"$(jq -r .tool_input.path)\"" }] }]
},
"sandbox": { "enabled": true, "network": { "enabled": false } },
"proof": { "lint": false },
"autoReview": { "block": ["changing CI secrets"] }
}Fields
permissions
| Field | Type | Meaning |
|---|---|---|
allow | string[] | Rules for actions that go ahead without asking |
ask | string[] | Rules for actions that always ask |
deny | string[] | Rules for actions that are refused |
additionalDirectories | string[] | Folders outside the workspace the agent may work in |
Rule syntax — Bash(npm test:*), Read(./.env), Edit(src/**), WebFetch(domain:…) — is on Permissions and safety.
defaultMode
"auto", "acceptEdits", "default" or "plan": the approval mode new sessions start in.
hooks
Commands to run at points in the agent loop, by event: PreToolUse, PostToolUse, UserPromptSubmit, SessionStart, Stop, SubagentStop, PreCompact. See Hooks.
disableAllHooks
true turns every hook off.
env
An object of environment variables set for hook commands.
sandbox
| Field | Default | Meaning |
|---|---|---|
enabled | false | Run shell commands in the OS sandbox |
allowUnsandboxedCommands | true | Let a refused command be retried outside the sandbox, with approval |
filesystem.allowWrite | — | Extra paths commands may write to |
filesystem.denyRead | — | Paths commands may not read |
filesystem.disabled | — | Turn the filesystem restriction off |
network.enabled | false | Allow network access from commands |
autoReview
| Field | Meaning |
|---|---|
environment | Hosts, buckets, organisations and services you trust beyond this repository |
block | More things auto-review should stop |
allow | Exceptions to the blocks |
A repository's committed settings may only add to block. loopcode auto-review defaults prints the baseline.
proof
| Field | Meaning |
|---|---|
enabled | false turns proof of done off |
test, typecheck, lint | A command replaces the detected one; false drops that check |
browser | false drops the browser check; true requires it |
lsp
Your own language servers, by name — read from ~/.loopcode/settings.json only:
{ "lsp": { "elixir": { "command": "elixir-ls", "extensions": [".ex", ".exs"], "rootMarkers": ["mix.exs"] } } }Fields: command, args, extensions, env, rootMarkers. See Code intelligence.
Other configuration files
| File | Holds | Page |
|---|---|---|
.loopcode/mcp.json, ~/.loopcode/mcp.json, .mcp.json | MCP servers | MCP servers |
LOOPCODE.md, AGENTS.md, CLAUDE.md | Standing instructions | Instructions and memory |
.loopcode/memory.md, ~/.loopcode/memory.md | What LoopCode was asked to remember | Instructions and memory |
.loopcode/skills/, ~/.loopcode/skills/ | Skills | Skills and commands |
.loopcode/agents/, ~/.loopcode/agents/ | Custom subagents | Subagents |
.worktreeinclude | Ignored files to copy into new worktrees | Worktrees |
/permissions and /hooks in the terminal show what is in force and which files it came from. In the desktop app, Settings → Permissions shows your rules and what the project also configures.