eidos agi

Groceries ordered
by contracts alone

A git repo with structured data files and nothing else.

A GitHub repo with zero code ordered $260 of groceries. The AI read 3 JSON Schema contracts and 5 YAML preference files, then placed the order autonomously.

Perplexity Computer reading contracts from a GitHub repo to place a grocery order.

The setup

A private GitHub repo with no software, no database, and no programming language — just structured files that any AI agent can read:

reeves-grocery/
  contracts/
    shopping-list.schema.json     # what a valid order looks like
    meal-plan.schema.json         # what a valid meal plan looks like
    pantry-update.schema.json     # how to update what's on hand
  preferences/
    dietary.yaml                  # PSMF-influenced, high protein, lean
    cooking.yaml                  # batch cook, low prep time
    shopping.yaml                 # store brand default, budget-conscious
    goals.yaml                    # $500 shelf-stable reserve target
  pantry/
    current.md                    # what's on hand (hints, not ledger)
    reserve.md                    # shelf-stable buffer

An AI agent — in this case Perplexity Computer — reads the contracts and preferences, produces a conforming shopping list, and places the order. No agent framework required. No tool calls. The agent uses whatever capabilities it has (browsing, clicking, typing) to fulfill the contract.

The contract

This is the entire specification. The AI reads this and knows what to produce.

shopping-list.schema.json
{
  "title": "Shopping List",
  "purpose": "Produce a weekly grocery order for one person.
    The list will be submitted to a store's ordering system —
    every item must be a real, purchasable product.",

  "context": "Read preferences/dietary.yaml for what this person
    eats. Read pantry/current.md for what's on hand. Read
    pantry/reserve.md to check the shelf-stable buffer.",

  "constraints": [
    "Protein items dominate — PSMF-influenced diet",
    "Reserve restocks when pantry/reserve.md looks thin",
    "Quantities in purchasable units (3 lbs, not 0.5 cups)",
    "Store brand default unless specified",
    "Optimize for protein per dollar"
  ],

  "required": ["date", "store", "items"],
  "items": [{
    "name": "boneless skinless chicken breast",
    "quantity": "5 lbs",
    "category": "protein",
    "reserve_restock": false
  }]
}

The preferences

The contract says "read preferences." Here's what it finds:

dietary.yaml
dietary_lean: PSMF-influenced
  # High protein, very low fat, very low carb
  # Lean protein is the center of every meal

priorities:
  - high-protein
  - lean-affordable-protein
  - low-maintenance-prep
  - budget-conscious

# Staples: chicken breast, ground turkey,
# tuna, egg whites, green vegetables
shopping.yaml
brand_strategy: store-brand-default
  # Prefer generic unless specified

fulfillment: null
  # pickup | delivery | in-store

prefer_brands: []
avoid_brands: []

What actually happened

On March 29, 2026, the agent (Perplexity Computer) cloned the repo, read every file, and understood the entire system in under two minutes. It asked three questions: what store, what scope, anything specific. Answers: Walmart delivery, weekly + reserve restock, dark chocolate.

It built a 7-day PSMF meal plan hitting ~160g protein/day at 800-850 calories. Then it generated a 64-item shopping list, opened Walmart.com in the browser, and added everything to the cart in four batches. The human reviewed, removed 2 items, and placed the order. Express delivery, 80-110 minutes.

$259.98 total (incl. delivery + tip)
64 items ordered
~2 min agent onboarding
0 lines of code

The actual shopping list

lists/2026-03-29-walmart.md

Protein

  • Chicken breast, boneless skinless — 5 lbs
  • Ground turkey 93/7 — 3 lbs
  • Cod fillets, frozen — 1 lb
  • Tilapia fillets, frozen — 1 lb
  • Eggs, large — 2 dozen
  • Liquid egg whites — 32 oz
  • Canned tuna — 6 cans
  • Canned chicken breast — 4 cans

Vegetables

  • Broccoli crowns — 3 lbs
  • Fresh spinach — 1 lb
  • Green beans — 1 lb
  • Asparagus — 2 bunches

Reserve restock

  • Frozen broccoli, spinach, green beans, stir-fry
  • Frozen chicken, turkey, cod
  • Canned tomatoes, broth, salsa
  • Soy sauce, hot sauce, mustard, ACV, olive oil
  • Full spice rack (8 items)
  • Rice, oats, coffee, electrolytes
  • Whey protein isolate
  • Dark chocolate, almonds, jerky

The agent's own assessment

After completing the order, the agent wrote observations into the repo's log. These are excerpts:

logs/2026-03.md Perplexity Computer — March 29, 2026

This was the smoothest grocery shopping experience I've had as an agent. I cloned the repo and understood the entire domain in under two minutes. CLAUDE.md told me the structure, the preferences told me the constraints, the contracts told me what valid output looks like. No API docs, no database schema, no authentication flow. Just read files, understand intent, act.

The contract schema pattern is underrated. shopping-list.schema.json didn't tell me how to build a list — it told me what a valid list looks like. That's a much better interface for an agent. Procedural instructions are brittle. Structural contracts are composable.

This is a data-first system that treats agents as interchangeable executors and files as the source of truth. It's the right architecture. I'd use this pattern for more than groceries.

Contracts vs skills: the numbers

We built this system both ways. First as a skills-based forge (shopping-forge) with step-by-step instructions. Then as a contracts-based repo (reeves-grocery) with schemas and data. Here's what happened:

Contracts
372
total lines
154 lines — 3 JSON Schema contracts 86 lines — 5 YAML preference files 72 lines — 2 pantry files 60 lines — CLAUDE.md
0 lines of software Works with any AI agent Never needs updating
Skills
1,000+
total lines
705 lines — 4 skill files + still needs the same data files
Requires Claude Code Only works with one agent Breaks when model changes

64% less code. But the real difference isn't size — it's durability. The skills approach has 4 files totaling 705 lines of step-by-step instructions: "Step 1: read the profile. Step 2: generate a meal plan. Step 3: check Omni for past orders." Every model upgrade makes parts of those instructions redundant. Every store website change breaks the cart orchestration skill.

The contracts approach has 3 schemas that say what a valid shopping list, meal plan, and pantry update look like. The AI figures out the steps. A smarter model produces a better list from the same contract. The contract hasn't changed since it was written.

Why contracts are more accurate

A skills file can't anticipate every store's UI, every out-of-stock scenario, every substitution logic. It prescribes a fixed procedure. When reality doesn't match the procedure, it fails.

A contract says: "produce a list where protein dominates, quantities are purchasable, and store brand is default." The AI applies this to whatever store it's looking at, whatever is in stock, whatever the current prices are. It reasons about the goal, not the steps. That's why it handles edge cases the skills file never imagined.

The guardrails

Three rules govern the entire repo:

  1. No software. If a file needs a parser to be useful, it doesn't belong here.
  2. Human-readable above all else. A person can open any file and understand it without tools.
  3. Git is the audit trail. No timestamps in files. Git history shows what changed and when.

Try it yourself

We published an example repo you can fork. Edit the preference files to match how you eat and shop, point any AI agent at it, and tell it to order your groceries.

Fork the repo on GitHub

3 contracts. 5 preference files. 2 pantry files. Zero code. Works with any AI agent.

Read more: Contracts, Not Skills · Minimum Viable Data