Entropic 2.14.3
Local-first agentic inference engine
Loading...
Searching...
No Matches
entropic::FilesystemConfig Struct Reference

Filesystem MCP server configuration. More...

#include <entropic/types/config.h>

Public Attributes

bool diagnostics_on_edit = true
 Proactive diagnostics on edit/write.
 
bool fail_on_errors = true
 Rollback edit if it introduces errors.
 
float diagnostics_timeout = 1.0f
 Diagnostics timeout (0.1–5.0)
 
OutsideRootAccess allow_outside_root = OutsideRootAccess::optional
 Paths OUTSIDE the root: refuse, allow, or ask (v2.13.0).
 
std::vector< std::filesystem::path > outside_root_allow
 Pre-approved subtrees outside the root — no prompt (v2.13.0).
 
std::vector< std::filesystem::path > outside_root_deny
 Subtrees outside the root that are ALWAYS refused (v2.13.0).
 
std::optional< int > max_read_bytes
 Byte budget of ONE read_file window (nullopt = derive from context).
 
float max_read_context_pct = 0.25f
 Context share for one read_file window (when max_read_bytes is unset)
 
int max_walk_entries = 250000
 Hard cap on directory entries visited by ONE glob or grep walk; <= 0 disables the cap (gh#161).
 

Detailed Description

Filesystem MCP server configuration.

Version
2.13.0

Definition at line 781 of file config.h.

Member Data Documentation

◆ allow_outside_root

OutsideRootAccess entropic::FilesystemConfig::allow_outside_root = OutsideRootAccess::optional

Paths OUTSIDE the root: refuse, allow, or ask (v2.13.0).

Defaults to optional. Until v2.13.0 this was a bool and data/default_config.yaml shipped it true, so every consumer on the bundled defaults gave the model unconfined READ and WRITE of the whole filesystem — through read_file, write_file, edit_file and list_directory — without anyone having chosen that. optional sends each escaping path to the host's path approver (entropic_set_path_approval_callback) with the resolved path and read/write; with no approver registered the call is REFUSED with a typed outside_root_approval_required message. It never fails open.

Precedence, highest first: outside_root_deny (always refused), outside_root_allow (served, no prompt), then this setting. A path inside the root is always served. permissions.auto_approve does NOT approve an escape: it skips per-TOOL prompts, it does not widen the filesystem boundary. A named workspace's own servers are forced to refuse with an empty allow list and no approver (gh#166).

Version
2.13.0

Definition at line 806 of file config.h.

◆ diagnostics_on_edit

bool entropic::FilesystemConfig::diagnostics_on_edit = true

Proactive diagnostics on edit/write.

Definition at line 782 of file config.h.

◆ diagnostics_timeout

float entropic::FilesystemConfig::diagnostics_timeout = 1.0f

Diagnostics timeout (0.1–5.0)

Definition at line 784 of file config.h.

◆ fail_on_errors

bool entropic::FilesystemConfig::fail_on_errors = true

Rollback edit if it introduces errors.

Definition at line 783 of file config.h.

◆ max_read_bytes

std::optional<int> entropic::FilesystemConfig::max_read_bytes

Byte budget of ONE read_file window (nullopt = derive from context).

v2.14.0 (gh#201): a longer file is paged, not refused; only a single line larger than the budget is size_exceeded.

Definition at line 827 of file config.h.

◆ max_read_context_pct

float entropic::FilesystemConfig::max_read_context_pct = 0.25f

Context share for one read_file window (when max_read_bytes is unset)

Definition at line 828 of file config.h.

◆ max_walk_entries

int entropic::FilesystemConfig::max_walk_entries = 250000

Hard cap on directory entries visited by ONE glob or grep walk; <= 0 disables the cap (gh#161).

The pre-2.13.0 caps were on MATCHES only (500 for glob, 100 for grep), so a pattern that matched almost nothing still walked the whole tree — 187,855 entries on the repository that reported gh#161, where a single glob **&zwj;/*.hpp took 87 seconds. A tool call that blocks the agent loop for a minute and a half is a hang from the model's point of view: it cannot see that it is waiting, and a consumer with a request timeout drops the turn.

250,000 is deliberately generous — larger than any first-party checkout, so it never fires on a normal workspace and is not a silent result filter. It is a CEILING that converts an open-ended stall into a bounded, ANNOUNCED result: hitting it appends an explicit truncation notice to the tool result (and a warning to the log), because a silently short answer would be worse than the hang it replaces.

Version
2.13.0

Definition at line 849 of file config.h.

◆ outside_root_allow

std::vector<std::filesystem::path> entropic::FilesystemConfig::outside_root_allow

Pre-approved subtrees outside the root — no prompt (v2.13.0).

Absolute paths (~ expanded at load). Matching is by canonical SUBTREE: /opt/data covers /opt/data/x, never /opt/database.

Version
2.13.0

Definition at line 813 of file config.h.

◆ outside_root_deny

std::vector<std::filesystem::path> entropic::FilesystemConfig::outside_root_deny

Subtrees outside the root that are ALWAYS refused (v2.13.0).

Beats outside_root_allow and allow_outside_root: true. Same subtree matching. Governs outside-root paths only — a deny entry inside the root has no effect there and is warned about.

Version
2.13.0

Definition at line 821 of file config.h.


The documentation for this struct was generated from the following file: