setuplisted
Install: claude install-skill jjanczur/tyran
# Setup
Configure Tyran for the repository you are in. One pass, then a short list of
questions — never an interrogation.
## 1. Scan what can be established without asking
```bash
node "${CLAUDE_PLUGIN_ROOT}/scripts/scan-repo.mjs" --dir . \
--write .tyran/config.yaml
```
This is deterministic on purpose. It reports the package manager, the
validation commands the repo actually declares, the languages by weight, and
an autonomy class inferred from how the repository is really worked. Every
value carries the fact that produced it and a confidence, so months later
"why does this repo think it is P2" has an answer in the file itself.
**It writes two files, and the second one is why this command is not
optional.** Before the config, it installs `.tyran/policies/autonomy.yaml`
from the shipped template. The policy gate is silent in a repository with no
`.tyran/` directory and refuses every write in a repository that has one
without a policy under it — so creating the config alone moves the repo from
"unmanaged" to "refuses everything", including the write that would have
fixed it. Setup did exactly that once, and the session ended with a `mkdir`
and a `cp` handed to the operator.
Installing it is bootstrap, not an agent granting itself permission: it only
ever creates, never overwrites, and what it writes is the strictest template
Tyran ships. Editing that file afterwards is human-only and stays so — the
gate refuses `Write`, `Edit`, and any shell command that names the pat