Safety and limits
The local model never runs anything. It only returns edit blocks, and localexec decides whether they are allowed to touch your files.
Paths
- Every path is resolved and must stay inside the project root. Symlinks that escape it are rejected.
allowed_pathslimits what can be edited.ignorehides paths such asnode_modules,.venv, build output, lockfiles and.envfiles: they cannot be read or edited.- Windows device names such as
NULandCONare rejected as task ids on every operating system, so behaviour is the same everywhere.
Files
- Nothing is deleted except files a task created, and only by
revert_task. - If a file changes on disk while the model is working, the write is refused with
changed on disk while the model was workingand nothing is overwritten. - A failed multi-file write is rolled back, including directories it created. File permissions are kept.
- Text goes through one reader: a BOM is stripped and restored, line endings are kept, and files that are not valid UTF-8 are refused rather than rewritten.
- Task ids are limited to
[A-Za-z0-9._-], 64 characters, so they cannot escape the state directory.
Commands
- Only checks from your config run. They are argument lists with no shell, a timeout and stdin closed.
- Treat
.localexec.jsonlike code you trust: its checks run on your machine. For that reason the project file cannot point at a non-local Ollama server.
Process
implement_task,run_checksandrevert_taskare serialised by a lock. Read-only tools never wait.- Logs go to stderr, never stdout, which carries the MCP protocol.
- A crashing tool returns a short JSON error, not a traceback.
- The server never commits, amends or pushes. It reads
git statusand committed file contents only.
Known limits
- JavaScript and TypeScript line counting does not understand comment markers inside template literals.
- Reverting a task that created a file leaves empty directories behind.
- Task ids that differ only by case, such as
T1andt1, depend on whether the filesystem is case-sensitive.