The trust question
The client asks Trust this repository? one round trip after it opens. It asks only when the directory carries something governed: an instruction file, a resource directory, or a
.narya/config.toml.
The question shows two disclosure lines: what reaches the model, and what runs on this machine.
You have four answers:
ytrusts this folder.ptrusts this folder and its parent. The host computes the parent, so no client can widen the scope past what it showed you.nis a durable no.esccontinues untrusted. Narya stores nothing and asks again at the next launch.
/trust to reopen the question.
What trust unlocks
Trust decides which rule set runs. A directory nobody trusts runs under a stricter set, and only where a person can answer. A one-shot run keeps the shipped set. Reads stay free. Shell, write, network and tool actions ask. Trust swaps in the shipped set. Trust also gates the repository’s own material: its instruction files, its
.claude/settings.json hooks, and its .claude and .narya commands, skills and agents. Narya ignores all of it in an untrusted repository, in any mode.
How a rule reads
A rule is a TOML table with three keys.
shell, read, write, network and tool. The action decides what Narya matches. A path glob matches read and write. Command text matches shell, after Narya decomposes the line into the commands it really runs. A host matches network. A tool name matches tool.
Three effects exist: allow, ask and deny.
There is no ordinal field. Position in the file is the precedence. Narya concatenates four scopes in this order: its shipped set, your global file, the project file, and the session. The last match wins.
Narya reads permissions.toml in your Narya home only when config.toml sets permission_mode = "custom". A repository you trust contributes [[rule]] blocks through its .narya/config.toml.
The shipped posture
Shell commands run. Tool calls run. More than forty shell rules ask first, among them
rm -r, sudo, git push --force, chmod, dd and kill -9. Writes inside the repository run, and writes outside it ask. Network actions ask, except the supplier’s own web search, which only deny network ** turns off.
The read tool refuses a .env file and reads everything else. That rule governs the read tool alone. A grep of the directory returns the file’s contents. A shell command reads it under the shell rules. A write to it is allowed.
Narya judges a shell line on the strictest verdict across everything it really runs. A line Narya cannot parse asks, and Narya remembers nothing from it.
Audit
Narya writes one row per ask and per refusal that belongs to a session, including refusals that reached no person. A refusal outside a session, or a row the store fails to write, leaves no row. The refusal still stands. Each row carries:
- the action and the resource
- which rules matched, and what a remembered allow would grant
- the status and who decided
- the reason
- the scope of the answer
narya permissions denied. Add --session <id>, --since <time> or --until <time> to narrow the range. One page holds 100 rows, and Narya says so when it truncates.
Retention is opt-in per class and keeps everything by default. The [retention] permission_asks setting sweeps decided rows and keeps the pending ones.
Attended and detached sessions
Every session records a posture,
attended or detached. A detached session refuses and records the next prompt rather than blocking forever. Run narya session promote <session-id> to mark a session attended. It repeats the client’s exit prompt, and a second run changes nothing.
A session recorded detached in a directory nobody trusts drops back to attended at its next gate check. The trust read fails closed.
