Catalog / LLM routing & guardrails
jeffrey: a coding-agent CLI where Jev or Laya decides and your LLM executes
The decision model never writes code; each step it picks the next tool, scores progress, estimates risk and says if the goal is reached. Any OpenAI-compatible LLM executes.
# jeffrey
A coding-agent CLI that splits the work between two models:
- A **decision model** decides. It never writes prose or code; it only answers closed questions. On
every step it picks the next tool, scores how much progress was made, estimates risk, and says
whether the goal is reached. Jev ([TypeSafe System One](https://docs.typesafe.ai/introduction))
is the default; [Laya](https://github.com/NandhaKishorM/laya), which you host yourself, is the
other one shipped — see [docs/deciders.md](docs/deciders.md).
- Your LLM (any OpenAI-compatible server, local by default) executes. It fills in the tool
arguments, which is where the actual code comes from, for whatever tool the decider chose.
The loop is `decide → tool → decide → tool → …` until the goal is scored as reached, or escalates.
```
goal
│
▼
┌───────────────────┐ questions: which tool? which file? scores
│ Decider (Jev/Laya)│◀──────────────────────────────────────────┐
└─────────┬─────────┘ │
│ tool + confidence + risk + progress │
▼ │
┌───────────────────┐ "call read_file, here are the args" │
│ Executor LLM │───────────────────────────────────────────┤
└─────────┬─────────┘ │
▼ │
┌───────────────────┐ observation (stdout / diff / file list) │
│ Tool runtime │───────────────────────────────────────────┘
└───────────────────┘
```
## Install
```bash
npm install -g @thomasbrueggemann/jeffrey
jeffrey --help
```
Or without installing anything:
```bash
npx @thomasbrueggemann/jeffre