The bench is up: one customized erpnext v16 site, seats open to anyone building Agents

the site is live: https://erpnext.anytimecomm.com

a while back i said the argument about governed agents on frappe should be settled on one site
with receipts in the open instead of in threads. so i built the site.

what it is. a throwaway erpnext v16 site, built today from blank, synthetic data only. one fictional company, a handful of customers and items, and it is customized on purpose: five custom fields on standard doctypes and two doctypes that exist nowhere but this site, with submitted documents in both. a stock demo site tells us nothing, so i did not build one.

seats. say the word and i mint you a dedicated api key, read-only, scoped, with an expiry. your own key, not a shared one, not borrowed. one per architecture, minted separately, attribution never shared. that goes for anyone building on frappe, not just the two or three of us who have been going back and forth.

the one rule. a read-only run proves discovery reads a customized site correctly. discovery is worth testing and this site will test it hard. it is not the write path, so what comes out of a read-only run gets called discovery. not governance. i hold my own side to that same line and i will not post the word governed over a read-only result either.

the floor is the write path, and i am not waiting on anyone to prove mine.

starting now i run the write cases against pacioli on this site and post the receipts in this thread: create, update, submit, and the ones that actually decide it. a borrowed over-broad key. a shared token nobody can attribute afterward. a direct rest call that walks around the agent layer entirely. that baseline goes up whether or not anyone else runs anything.

receipts here, not in dms.

the site stays up 30 days from first connection, longer if we are still learning something.

This is perfect, John. The custom fields and site-specific DocTypes are exactly what I wanted to test against. Please mint a dedicated read-only key for AgentReady and I’ll connect it, run discovery, and post the results and diagnostics here in the thread. Really appreciate you putting this together.

1 Like

AgentReady is now connected to the customized v16 bench through a dedicated read-only runtime identity.

I tested it with a natural-language request that did not provide the custom DocType names. The agent:

  • discovered Frame Build Ticket and Wheel Truing Record through the generated capability catalog;
  • loaded their installation-specific action schemas;
  • queried real synthetic records;
  • opened individual records with their custom fields;
  • performed the entire run under an attributed Agent principal with runtime:read only.

No connector code or object-specific mapping was added for this site. The schemas and tools were generated from the installation during discovery.

This is the part we specifically wanted to validate: AgentReady does not normalize the customer’s ERP into a predefined universal model. It discovers the actual customized installation and makes that exact surface agent-queryable.

I’ll attach the prompt and result screenshots below.

TEST PROMPT:

Using the connected ERPNext system, find the custom business objects related to bicycle frame building and wheel truing.

Do not assume their DocType names: discover them through AgentReady capabilities.

For each relevant object:

  1. Load its action schema.
  2. Explain its important fields.
  3. List up to three records.
  4. Open one record and show its full details.

Finally, summarize what these custom objects add to this ERPNext installation.

Read-only. Do not create or modify anything.

AGENT RESULT:

Found two custom ERPNext business objects through the live AgentReady capability catalog:

  1. Frame Build Ticket

  2. Wheel Truing Record

Both expose read-only search and get action schemas. No data was created or modified.

Frame Build Ticket

Action schema: reference/search and reference/get, low-risk read operations, no approval required, no child tables.

Important fields:

  • customer — required link to the standard Customer object.

  • frame_serial — required unique workshop frame identifier.

  • frame_size — selected frame size.

  • builder — person responsible for fabrication.

  • build_hours — labor time spent building the frame.

  • notes — free-form workshop notes.

  • amended_from — read-only self-reference to an earlier ticket revision.

Records:

Record Customer Serial Size Builder Hours
FBT-00001 Ridgeline Cyclery HBW-2026-0041 56cm A. Sandoval 11.5
FBT-00002 Two Rivers Bike Co HBW-2026-0042 52cm M. Okafor 9
FBT-00003 Fenwick Velo Club HBW-2026-0043 56cm A. Sandoval 12.25

Full record FBT-00001:

{
  "name": "FBT-00001",
  "owner": "Administrator",
  "creation": "2026-07-25 15:01:16.439582",
  "modified": "2026-07-25 15:01:16.446931",
  "modified_by": "Administrator",
  "docstatus": 1,
  "idx": 0,
  "customer": "Ridgeline Cyclery",
  "frame_serial": "HBW-2026-0041",
  "frame_size": "56cm",
  "builder": "A. Sandoval",
  "build_hours": 11.5,
  "notes": "Synthetic bench data.",
  "doctype": "Frame Build Ticket"
}

docstatus: 1 means this ticket is submitted.

Wheel Truing Record

Action schema: reference/search and reference/get, low-risk read operations, no approval required, no child tables.

Important fields:

  • build_ticket — link to the associated Frame Build Ticket.

  • wheel_position — front or rear wheel.

  • lateral_runout_mm — measured sideways deviation of the rim in millimetres.

  • spoke_tension_kgf — measured spoke tension in kilogram-force.

  • passed — pass/fail checkbox, represented as 1 or 0.

Records:

Record Build ticket Position Runout Tension Passed
WTR-00004 FBT-00001 Front 0.18 mm 108 kgf Yes
WTR-00005 FBT-00001 Rear 0.24 mm 116 kgf Yes
WTR-00006 FBT-00002 Front 0.18 mm 108 kgf Yes

Full record WTR-00004:

{
  "name": "WTR-00004",
  "owner": "Administrator",
  "creation": "2026-07-25 15:01:16.462582",
  "modified": "2026-07-25 15:01:16.462582",
  "modified_by": "Administrator",
  "docstatus": 0,
  "idx": 0,
  "build_ticket": "FBT-00001",
  "wheel_position": "Front",
  "lateral_runout_mm": 0.18,
  "spoke_tension_kgf": 108,
  "passed": 1,
  "doctype": "Wheel Truing Record"
}

docstatus: 0 means the record is stored but unsubmitted.

Together, these objects add a bicycle-workshop production and quality-control layer to ERPNext:

  • Customer-specific frame fabrication traceability.

  • Frame serial, size, builder, and labor-hour tracking.

  • Per-wheel truing measurements and pass/fail inspection.

  • Direct linkage between wheel QC results and their originating frame build ticket.

They complement ERPNext’s standard customer, manufacturing, inventory, and accounting objects with workshop-specific operational data. AgentReady exposes them as custom reference objects using generic audited search/get capabilities, rather than as published custom actions.

1 Like