The boundary
An agent gets near everything I know, but it cannot see what it must not.
Problem
I run agent sessions every day, near a knowledge base that holds information that is not mine to leak. By default, a coding agent can read the full directory in which you open it. A credential, a price, or a private note can go into a session transcript, a commit, or a model’s context. The words “be careful” are not a control.
I spent eight years in behavioral-health operations. In that field, a record in the wrong place causes serious harm. I do not run my own work on good intentions.
System
The knowledge base is an Obsidian vault in one git repository. It is the knowledge layer for each other system here: strategy, projects, people, commercial terms, credentials, synthesis. It keeps me organized, and it gives each agent session its context.
Agent sessions in other repositories never get that repository. They mount exactly two directories: a shared context layer and the single slice for their scope. All other paths are unreachable by construction, not by permission. A session that works on the tool directory cannot address a client folder. The path is not in its world.
A pre-commit hook controls what can enter those mountable directories. It is not a rule that I must remember. The hook fails the commit on money, compensation, credentials, and infrastructure resource IDs. It also makes sure that the mountable set is self-contained, so a mounted file cannot point to a file that the session cannot open. If a machine cannot make sure that content is safe, I delete the content and do not keep it on trust.
The trade is real. The mounted slice is smaller than what I know, so a session sometimes lacks context that I have. That is the correct direction for a failure.
What runs today
Each agent session in each other repository runs against a mounted slice. That includes client builds, the NoCodeWorkflows content pipeline, and this site. The hook became the pre-commit gate in June 2026, and no session bypassed it since then. When the hook fires, the commit fails until the file changes.
The artifact
The gate is a hook, not a checklist. The commit is what fails, not me.
$ cat .claude/settings.json{ "permissions": { "additionalDirectories": [ "/Users/mattbastar/Developer/vault-hub/context", "/Users/mattbastar/Developer/vault-hub/company/initiatives/clipbase/context" ] }} what the session cannot see$ ls -F ~/Developer/vault-hub_archive/_meta/2026-06-11-operating-model.canvasAGENTS.mdCLAUDE.mdclients/company/context/CONVENTIONS.mdinternal-systems/knowledge/people/personal/skills-lock.jsonUSER.mdWORKSPACE.md $ find ~/Developer/vault-hub -type d -not -path '*/.*' | wc -l 402
The session's whole world is two paths. The repository behind them holds 402 directories: clients, commercial terms, people. None of them is addressable from inside the session. They are not blocked. They are absent.
$ git add company/initiatives/main-site/context/STATUS.md$ .git/hooks/pre-commit; echo "EXIT: $?"27:- **Sponsor placement inquiry (2026-08-13):** first slot quoted at $750/mo — awaiting reply.context-lint: company/initiatives/main-site/context/STATUS.md: currency amount in mountable treeEXIT: 1 same file — value moved to company/offers.md (unmounted)27:- **Sponsor placement inquiry (2026-08-13):** first slot quoted — terms operator-side in company/offers.md; awaiting reply.$ git add company/initiatives/main-site/context/STATUS.md company/offers.md$ .git/hooks/pre-commit; echo "EXIT: $?"EXIT: 0
A commercial value in a mountable file causes the commit to fail. The commit succeeds only after the value moves to a path that no session mounts.
I captured this output live on 2026-08-13. The $750/mo is an invented value, staged for this shot. The hook, the rule, and the rejection are real.