Structured how-to recipes for training agents 🤖 and robots 🦾, readable by humans 🧑
Why · What's inside · Quick start · Roadmap · Contributing · Citing
Easy:
- Open the fridge. 2. Put the elephant in. 3. Close the fridge.
That is how most datasets think tasks work. Here is how howto writes it:
## Steps
1. **Open the fridge.** → *Expect:* door open, shelves visible, light on.
2. **Insert the elephant.** [BRANCH: elephant does not fit → F1]
3. **Close the fridge.** → *Expect:* door latched; no trunk protruding.
## Failure modes & recovery
- **F1 Elephant exceeds fridge capacity:** acquire a larger fridge, or a smaller elephant.
## Verification
Opening the fridge reveals one chilled elephant.Things are always more complicated than "open, put, close", and the complications are exactly the knowledge agents are missing. Every human knows the real steps, the expected observations, the branches, the failure modes. No corpus writes them down. This one does.
And here is a real one, from transit/ride-a-subway.md:
3. **Obtain or validate fare.** [BRANCH: tap-to-pay bank card | transit card with
balance | ticket machine | transit app QR] At a machine: select destination or fare
type, pay, take the ticket. ⚠️ *Irreversible:* multi-day passes and non-refundable
tickets — confirm fare type before paying. → *Expect:* you hold a valid fare medium.
4. **Pass the fare gate.** Tap or insert; walk through on green/open. → *Expect:* gate
opens and (on card systems) displays balance or fare; if rejected, F1.
...
- **F2 Boarded the wrong direction:** exit at the next station, cross to the opposite
platform (may require staying inside the paid area), reverse.Web agents, computer-use agents, and household robots fail at everyday tasks less from weak reasoning than from missing grounded procedural knowledge: canonical step order, the observation that confirms each step worked, the decision branches, the recovery paths, and which steps are irreversible.
agency-agents (134k stars) covers who an agent is. howto is the complement: what an agent knows how to do. Ride a subway, buy and return a product, create an account, make coffee, load a dishwasher, wait in line, pay at a cashier.
The schema turns prose into training substrate. One corpus yields, simultaneously:
| Training product | Derived from |
|---|---|
| SFT / midtraining planning traces | Steps + expected observations |
| Agentic RL tasks with verifiable rewards | Goal + Preconditions + Verification |
| Curriculum / skill DAG | prerequisites links between recipes |
| Inference-time skill library (RAG) | Recipe chunks |
| Contamination-controlled evals | Held-out recipes and locale variants |
| Robot task plans & sim task generation | Embodied objects / affordances / workspace / safety |
git clone https://github.com/ShirleyHuang11/howto.git && cd howto
pip install pyyaml # the only dependency
./scripts/validate.sh # validate every recipe against the schema
python3 scripts/stats.py # per-domain coverage dashboard
python3 scripts/export.py --format sft # instruction-tuning pairs (JSONL)
python3 scripts/export.py --format eval # task specs with success criteria (JSONL)
python3 scripts/export.py --format json # full structured recipesOr just read one: transit/ride-a-subway.md · embodied/kitchen/load-a-dishwasher.md · daily/social/pay-at-a-cashier.md
One task = one markdown file, separated by domain (domains.json is the registry, INDEX.md is the full linked index, and the frontmatter is formally specified in schema/recipe.schema.json). Every recipe shares one skeleton:
Goal → Preconditions → Steps (every step ends with → *Expect:* …)
→ Decision points → Failure modes & recovery → Verification
→ Variations (locale/platform) → Safety & privacy (⚠️ irreversible steps inline)
🧠 Common sense — daily/ (the largest track: what everyone knows and no one wrote down)
| Subdomain | Recipes |
|---|---|
self-care/ |
brush your teeth · floss · shower · tie shoelaces · bedtime · trim nails · dress for the weather |
food/ |
boil water · make tea · cook rice · fry an egg · sandwich · cut an onion · microwave · instant noodles · pack a lunch · store leftovers · read food labels |
home/ |
do the laundry · make a bed · sweep & mop · vacuum · clean a bathroom · sort recycling · unclog a drain · change a lightbulb · change batteries |
social/ |
pay at a cashier · wait in line · order at a restaurant · split a bill · answer a phone call · greet a neighbor · give directions · ask for help in a store · small talk · borrow & return |
errands/ |
use an ATM · mail a letter · refuel a car · vending machine · self-checkout · buy groceries · get a haircut · public library |
🦾 Robot track — embodied/ (recipes that compile into simulator tasks)
| Subdomain | Recipes |
|---|---|
kitchen/ |
make drip coffee · load a dishwasher · set a table · store groceries · make toast |
household/ |
fold a t-shirt · water houseplants · take out the trash · tidy a room |
mobility/ |
open a door · use an elevator · carry & deliver · cross a street |
care/ |
fetch an item for a person |
Embodied frontmatter specifies the sim scene:
objects: [dishwasher, plates, cutlery, detergent-pod]
affordances: [door-open, rack-slide, grasp, place]
workspace: kitchen
safety: {sharp_objects: true, fragile: [glasses], human_proximity: pause}💻 Digital — accounts/ shopping/ digital/ finance/
create an account · log in · enable 2FA · recover a password · delete an account · security review · buy & return a product · track a delivery · compare before buying · install an app · unsubscribe · back up files · connect to wifi · update safely · pay a bill · dispute a charge · send money to a friend
🚇 Physical & services — transit/ travel/ communication/ government/ healthcare/ housing/
ride a subway · take a bus · hail a rideshare · navigate with maps · book a flight · check in · book a hotel · send a package · schedule a meeting · renew a passport · book a doctor's appointment · refill a prescription · set up utilities
📊 Live coverage anytime: python3 scripts/stats.py
- Every step states its expected observation. A step list without expectations is prose; the Expect: clause is what makes a recipe executable and trainable.
- Verification is a predicate, not a vibe. "You are done when…" must be checkable by a program or a stranger — it compiles into a reward function.
- Irreversible steps are marked
⚠️ inline — payments, deletions, hot liquids, handed-over packages. Agents must learn where to stop and confirm, and that signal lives in the data. - Failure modes are first-class. Real procedures go wrong in known ways; the recovery paths are half the knowledge.
- Generic first, locale variants second. The
genericrecipe stands alone;us-nyc/jp-tokyo/cn-beijingvariants layer on top. - Multimodal, with text as the floor. Recipes can attach diagrams, photos, and clips per step via the
mediafrontmatter (roles: action-demo, expected-observation, diagram, warning, overview), each with a full alt description so every recipe still trains text-only models. See the fare-gate diagram intransit/ride-a-subway.mdand the rack layout inembodied/kitchen/load-a-dishwasher.md.
The corpus spans 1137 recipes across all 12 domains and keeps growing. Where help lands hardest:
- Locale variant packs:
jp-tokyo,cn-beijing,de-berlin, and yours -
reviewedandverifiedpromotions (agent-executability evidence; see CONTRIBUTING) - Embodied recipes → simulator task compiler
- Multimodal coverage: a diagram for every embodied recipe
- Pre-built SFT/eval exports as tagged releases
One recipe = one markdown file = one PR.
- Copy
TEMPLATE.mdinto the right domain directory - Write the procedure you actually know (original content only)
./scripts/validate.shuntil green ✅- Open the PR
The short rules: every step needs an Expect: · verification must be checkable · irreversible steps get
🌍 Locale expertise is especially welcome. Recipes for how things work in your city make agents useful beyond the defaults.
Recipe content is CC-BY-4.0: training (including commercial) is fine with attribution; see LICENSE. Export formats are documented in scripts/export.py's header, and each JSONL record carries the recipe id for attribution. If you use the corpus in research:
@misc{howto2026,
title = {howto: an open library of everyday procedural knowledge for training agents and robots},
author = {{howto contributors}},
year = {2026},
url = {https://github.com/ShirleyHuang11/howto}
}