Threat model
August 15, 2026 ยท View on GitHub
Assets
- confirmed user preferences and boundaries;
- workspace-specific decisions and procedures;
- source references and revision history;
- the integrity of user source repositories;
- local credentials and private session content.
Trust boundaries
- model-produced tool arguments are untrusted;
- workspace files and fetched content are untrusted;
- model-inferred memories are untrusted proposals;
- human-confirmed onboarding and review actions are authoritative only within their declared scope;
- a configured Git remote is an external disclosure boundary.
Primary threats and required mitigations
Path escape
Threats include traversal, absolute paths, symlinks, junctions, reparse points, case-folding bypasses, UNC paths, and Windows alternate data streams.
Mitigation: resolve canonical roots and existing ancestors, reject escapes and reparse traversal, normalize before policy evaluation, and keep model tools path-free.
Secret persistence
Threat: a prompt, file, or tool result contains a credential that reaches Git history.
Mitigation: hard-deny sensitive paths and patterns, limit source material, classify before commit, show review previews, and test negative controls.
Prompt injection becoming policy
Threat: untrusted content is stored as a global instruction.
Mitigation: preserve authority; only direct human confirmation may create
global boundaries or preferences. Workspace evidence remains informational.
Git code execution
Threat: repository hooks or shell interpolation execute attacker-controlled commands.
Mitigation: invoke Git with argument arrays, disable hooks in managed repositories, sanitize commit summaries, and never use a shell command string.
Concurrent or interrupted writes
Threat: two DSH processes or a crash leave mixed records, catalog drift, or an unknown dirty state.
Mitigation: repository-level exclusive lock, transaction journal, atomic file replacement, explicit staging, staged-diff validation, and fail-closed recovery.
Unsafe rollback
Threat: revert touches non-plugin data or conflicts silently.
Mitigation: accept plugin-owned commits only, require a clean managed
repository, use git revert --no-edit, abort conflicts, and return
needs_attention.
Remote disclosure
Threat: personal memory is pushed to a public or unintended remote.
Mitigation: no remote or push by default. Remote configuration is human-only, requires an explicit warning, and remains outside model-callable tools.