← Open source
Open sourceGoArjia Labs

yori

The home for everything you tell your AI. yori is a local, file-based library of reusable prompts, agents, slash-commands, and skills that you can list, edit, compose, and render into ready-to-pipe text. It's a pure renderer — text in, text out — so you own the model call.

yori

The problem it solves

Right now your prompts live everywhere and nowhere — half-buried in code, pasted into a dozen chat windows, screenshotted in a Slack thread, slightly reworded by everyone on the team. Nobody's sure which version is the good one.

yori gives all those words a single place to live: a local, file-based library of reusable AI building blocks — prompts, agents, slash-commands, skills, and rules — that you can list, edit, compose, and render into ready-to-pipe text. It's named after Tron's Yori, who ran the I/O Tower, the gateway where a user's words reached their program.

Crucially, it's a pure renderer: text in, text out. yori never calls a model — you own the invocation, piping the rendered prompt into claude, llm, or anything else.

cat bug.log | yori run triage --tone=blunt | claude

Plain files, unified artifacts

Every artifact is a single markdown file — YAML frontmatter plus a templated body — so it's greppable, $EDITOR-friendly, diffs cleanly, and is versioned with your own git. One library holds five types, each in its own folder: prompt, agent, command, skill, and rule.

---
name: triage
description: Triage a bug from a log
vars:
  tone:
    default: neutral
---
{% include 'house-style' %}

Analyze this log as a {{ tone }} engineer:

{{ input }}

Composition with Liquid

Bodies render with Liquid, so prompts compose like real templates rather than copy-paste. Variables fill at call time, {% include %} pulls in shared partials, conditionals and loops work, and template inheritance lets a base define overridable slots that a child fills via extends. Piped stdin lands in {{ input }}; if a template doesn't reference it, the text is appended rather than dropped — so a half-filled prompt never hard-fails mid-pipeline.

A layered store, with git as the registry

Artifacts resolve through layers, highest priority first: a project ./.yori store shadows your global ~/.yori, which is backed by installed packages — like a search path for prompts. Sharing reuses infrastructure everyone already has: a package is just a git repo whose root is a store.

yori install github.com/acme/prompts --name acme   # pull a team's shelf
yori run acme/review                               # address it explicitly
yori publish --remote github.com/me/prompts        # build + commit + push

A per-item install copies an item, the base it extends, and the partials it includes into your store as source you own — so a single registry can serve a Next.js app and a NestJS service differently, installing only what each project's dependencies imply.

Deploy once, everywhere

A skill or command only helps if your coding agent can find it. yori sync materializes your skills, commands, and subagents into the directories agents discover them from — Claude Code, Codex, Cursor — rendering templates on the way, so you compose once and deploy everywhere.

yori sync                       # render into ./.claude (Claude Code)
yori sync -a codex -a cursor    # target specific agents
yori sync --save                # record the chosen artifacts to sync.yaml

yori records what it wrote, so a re-sync prunes artifacts you've removed and refuses to clobber files it didn't create. The deployed skill is a rendered, parameterized copy of your source — the piece a plain file-copy installer can't do.

Design notes

yori is a sharp Unix filter, not a model client: no API keys, no SDKs, no opinions about which model you use. Files are the source of truth — no database, no lock-in, just a directory of markdown you can grep and commit. Git is the network. And for model-graded evaluation it hands off to promptfoo rather than reinventing it — yori export promptfoo turns a composed artifact and its test cases straight into a runnable config.