Repository navigation
v0.1.0
ynf 0.1.0
The first release of ynf, your named factory: the outer loop around agent runs. ynf watches tickets and pull requests, decides what to do with each one, runs an agent (through ynh) or a command in containment on a fresh checkout, proposes the change as a draft pull request, and follows it through CI and review. A human always merges. What keeps going wrong is remembered in ynm.
Docs: https://eyelock.github.io/ynf/, with two tutorial tracks: ynf on its own, and the factory with ynh, ynm and ynf together.
What's in it
The loop
- Work items with a durable state machine, and a pure decider: every decision is recorded and
ynf replayrecomputes it, under the recorded lanes or a changed lanes file. - Lanes in versioned YAML with CEL guards. A configuration repository's lanes lie under each repository's own, merged key by key.
ynf lanes validate --repochecks a repository's lanes merged as ynf would. - One claim at a time: leases with heartbeats and fencing, over SQLite or S3. A crashed run is restarted, not resumed.
- Stop conditions: yield floors, pausing a lane with a reason, and
ynf statsper lane.
Starting work
- From a search (
sweep,serve), a GitHub webhook (serve --listen), a CI event (handle, with--lane), or by instruction:ynf start <ticket>orynf start --prompt … --label …. - Trackers besides GitHub, through their MCP server, such as JIRA. ynf calls the tools itself, with no model.
- GitHub.com and GitHub Enterprise Server as forges, with host-qualified item keys.
Running it
- Runners: ynh, for an agent with its harness, sensors and budgets, or any command.
- A lane may pin the agent's model (
run.ynh.model) and effort (run.ynh.effort), tighten its budgets and scope its sensors. It never loosens or redefines them. - Executors: docker, with an egress proxy and an allow list; process, attended only; and inline, inside the factory image under the job runner's containment.
- Each run gets a self-contained checkout, so git works inside the container.
--auto-approveonly inside containment.
Seeing what happened
- Every run records the model, effort, turns, tokens (input, output and cache reads), cost, the cap that bound it, and the harness version.
ynf statsbreaks every lane down by model and effort.- Failure signatures name what failed: the sensor, the budget cap, the CI check that diverged from the loop's sensors. Each occurrence is written to ynm, tagged
occurrence, locally or over HTTP to a hosted ynm with a machine token. ynf doctor,forges,trackers,ticketandharnesscheck a factory before it's relied on.
The factory image
ghcr.io/eyelock/ynf-factory:0.1.0, for amd64 and arm64: ynh 0.10.0's image with ynf and ynm 0.3.0. Build your harness on it with ynh image … --base, and run it as a job (Run the factory image).
Install
brew install eyelock/tap/ynfynf pairs with ynh 0.10.0 and ynm 0.3.0. Both are optional: ynf detects them, and runs commands without them.