Skip to content
LoopCodeDocs

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:

FileScope
~/.loopcode/settings.jsonYour preferences, in every project
.loopcode/settings.jsonThe project's, committed and shared with the team
.loopcode/settings.local.jsonYours, 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

.loopcode/settings.json
{
  "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

FieldTypeMeaning
allowstring[]Rules for actions that go ahead without asking
askstring[]Rules for actions that always ask
denystring[]Rules for actions that are refused
additionalDirectoriesstring[]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

FieldDefaultMeaning
enabledfalseRun shell commands in the OS sandbox
allowUnsandboxedCommandstrueLet 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.enabledfalseAllow network access from commands

See Permissions and safety.

autoReview

FieldMeaning
environmentHosts, buckets, organisations and services you trust beyond this repository
blockMore things auto-review should stop
allowExceptions to the blocks

A repository's committed settings may only add to block. loopcode auto-review defaults prints the baseline.

proof

FieldMeaning
enabledfalse turns proof of done off
test, typecheck, lintA command replaces the detected one; false drops that check
browserfalse drops the browser check; true requires it

lsp

Your own language servers, by name — read from ~/.loopcode/settings.json only:

json
{ "lsp": { "elixir": { "command": "elixir-ls", "extensions": [".ex", ".exs"], "rootMarkers": ["mix.exs"] } } }

Fields: command, args, extensions, env, rootMarkers. See Code intelligence.

Other configuration files

FileHoldsPage
.loopcode/mcp.json, ~/.loopcode/mcp.json, .mcp.jsonMCP serversMCP servers
LOOPCODE.md, AGENTS.md, CLAUDE.mdStanding instructionsInstructions and memory
.loopcode/memory.md, ~/.loopcode/memory.mdWhat LoopCode was asked to rememberInstructions and memory
.loopcode/skills/, ~/.loopcode/skills/SkillsSkills and commands
.loopcode/agents/, ~/.loopcode/agents/Custom subagentsSubagents
.worktreeincludeIgnored files to copy into new worktreesWorktrees

/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.