Skip to main content
GET
Read whether a repository's instruction files may be loaded

Query Parameters

repository
string
required

Absolute path of the repository to report on.

Maximum string length: 4096

Response

The repository's trust answer and the files it would load.

A repository's stored trust answer, with everything that answer governs: the instruction files that would reach the model, the repository's own command and skill directories, which the same answer loads and whose shell blocks it lets run, and its own .narya/config.toml, whose permission rules and hooks the same answer loads.

repository
string
required

The canonical repository path the answer is stored under — absolute, with symlinks resolved, which may differ from the path the request named.

Maximum string length: 4096
instructionRoot
string
required

The directory instructionFiles are named relative to: the nearest enclosing git repository root at or above repository, or repository itself when it sits inside no repository. It differs from repository whenever a session was opened in a subdirectory of a checkout — a component of a monorepo — and a surface that asks somebody to approve these files must name this directory, because it is where they will actually be read from. The answer is still stored under repository alone.

Maximum string length: 4096
decision
enum<string>
required

The EFFECTIVE answer for this directory: its own stored answer, or, when it has none, the nearest one stored above it — inheritedFrom says which. unknown when nobody has been asked for this directory or any ancestor, which is what makes an interactive client ask. trusted lets the instruction files below into the system prompt, loads the repository's own commands, skills, agent recipes and .narya/config.toml, and lifts the permission posture out of untrusted mode; refused keeps all of it out and stops the asking.

Available options:
unknown,
trusted,
refused
instructionFiles
string[]
required

The repository files the loader DISCOVERS by name, in prompt order, relative to the repository root, that would reach the model if this repository were trusted. Only files present on disk right now. An empty array does not mean nothing would reach the model: resourceDirs is governed by the same answer, and projectConfig can NAME further repository files that this array does not carry.

Maximum string length: 512
resourceDirs
string[]
required

The repository's own command, skill and agent directories and its Claude Code settings file, present on disk right now, relative to instructionRoot, in resolution order. The SAME answer governs them, and it grants more there than it grants over instruction files: a command file under .claude/commands becomes typeable, and its !cmd`` blocks run a shell on this machine, in this repository's directory, the instant somebody types the command's name; an agent recipe under .claude/agents supplies the system prompt, the tool allowlist and the model a delegated turn runs under; and .claude/settings.json's hook table runs shell with no trigger at all — once when the session starts, and again before every tool call, model request and tool result. A surface asking for the answer must name these too, and must ask about a repository that carries only these — no instruction files at all — because otherwise its commands, skills, recipes and hooks never load in any session.

Maximum string length: 512
inheritedFrom
string

The ancestor directory decision came from, when it did not come from repository itself. Absent means the answer is this directory's own, or that there is none. A client uses it to say WHY it is not asking — a worktree under a trusted parent is trusted without anybody being questioned about it.

Maximum string length: 4096
parent
string

The immediate parent of repository, which is the only other directory a client may offer to trust. The IMMEDIATE parent and never a grandparent, so nobody trusts their whole machine by misreading a dialogue. Absent when there is no such directory to offer: when repository IS the filesystem root, and when its parent WOULD BE the filesystem root — /workspace, /app, /srv, the usual repository mount in a container. A / row trusts every directory on the machine forever, so it is never one keypress away; a user who wants one writes it into the store by hand.

Maximum string length: 4096
projectConfig
string

The repository's own .narya/config.toml, when it is present on disk right now — the fourth thing this one answer settles, and the one a client is most likely to miss. It declares this repository's permission rules and its hook table, and a hook runs shell with no trigger at all, so it carries the weight of .claude/settings.json rather than of an instruction file. Its own text never reaches the model: its rules are evaluated and its hooks run, and neither the file nor what a hook prints enters a prompt. What it can do is NAME text that does — its instruction_files key lists repository paths whose contents are wrapped into every turn's prompt once this repository is trusted — and those names appear neither here nor in instructionFiles, which carries the discovered files alone. So a surface asking for the answer must name this file, and must ask about a repository that carries only this — no discovered instruction files, no resource directories — because otherwise its rules, its hooks and the files it names never load in any session and the only signal is one warning on the first gated effect. Relative to repository, NOT to instructionRoot, which is the one entry on this response that differs: a component of a monorepo loads its own .narya/config.toml rather than the one at the checkout root, and a consent surface naming a file its loader will not read is the one lie it cannot afford. Absent means this repository declares nothing of its own.

Maximum string length: 512