Reference
The system.yaml design record, the Faur CLI, and project setup checks.
system.yaml#
The last design agreed with Faur; native Pi files govern execution. Every agent names its own model and the skills it receives:
schema: 1
name: research-desk
orchestrator:
name: lead
model: openai-codex/gpt-6-sol
thinking: medium
tools: [read, grep, subagent]
agents:
- name: researcher
model: deepseek/deepseek-flash
thinking: high
tools: [read, grep]
skills: [notes, house-style]
skills:
- name: notes
source: ../my-skills/notes # vendored into .pi/skills/notes/ once
- name: house-style
source: npm:@acme/house-style@1.2.0 # pinned package
- name: seo-audit # from skills.sh, pinned to a commit
source: skills:coreyhaines31/marketingskills/skills/seo-audit@17772c7a80b7b8c7a47af30f648374cd8bd8adc5
Plain Pi loads its applicable context files, including parent AGENTS.md
files. Review untrusted instructions before a run.
Every field, validation rule and the file-ownership contract are in
schema.md.
Faur CLI#
The deterministic tool behind /faur, run from a Faur checkout as
node src/faur.mjs <command>:
| Command | |
|---|---|
discover [dir] [--cli <name>]… | Models, your skills, MCP servers and the CLIs you name |
fetch <url> [--offset <n>] | Read a public https:// page as untrusted text (a GitHub repo URL returns its README) |
validate <dir> | Validate a project’s system.yaml |
generate <dir> [--dry-run] [--yes] | Preview, then write, the generated files |
modify <dir> [--dry-run] [--yes] | Reconcile the project with its design |
change <dir> --operations <file> [--dry-run] [--yes] | Preview or apply a structured change |
check-agent <project> [--connect] | Check capabilities without a model call; --connect starts MCP servers |
search-skills <words…> | Search skills.sh |
preview-skill <owner/repo@skill> | Show a skill’s files before installing |
import <dir> | Reconstruct system.yaml from an existing Pi project |
For example: node src/faur.mjs generate ./my-agent --dry-run.
Setup checks#
A trusted project can declare setup steps, at project level or on an MCP or CLI integration:
setup:
- description: Install the browser
check: { file: ./browser }
install: npm run install-browser
/faur check reports unmet steps, and /faur setup previews installs and asks
first. Command checks run shell code with your permissions, so use only
declarations you trust. Steps marked needsRoot are printed, not run.
Tests#
bash test/test.sh
Opt-in gates: RUN_FAUR_DELEGATION_TEST=1 (real Pi with a local fake model),
RUN_FAUR_LIVE_TESTS=1 and RUN_CLEAN_ENV_TEST=1 (real providers; they cost
tokens).