I’ve been working on and off on frappe-cli. This is a CLI tool to access any frappe site and do anything on the user’s behalf. The idea is simple: LLM models are capable enough and don’t nearly need as much instruction to automate things. Just let them discover schema and endpoints.
The CLI follows basic principles:
ghlike<noun> <verb>pattern.- Self-discovery for agents using
--help,guideand schema exploration usingdoctype list/doctype <show>. - No explicit instructions for anything else. No tool definitions, nothing. Frappe framework is already in training data of LLMs

- Specify a local skill file for anything complex like end-to-end ticket handling workflow.
The interface is very basic and wraps REST API v2.
| Command | What it does |
|---|---|
frappe-cli doc list <DocType> |
List documents. -f filters, --fields, --limit, --all. |
frappe-cli doc get <DocType> <name> |
Fetch one document. |
frappe-cli doc create <DocType> |
Create from --set scalars and/or piped/--input JSON. |
frappe-cli doc update <DocType> <name> |
Update; optimistic by default, --force to override. |
frappe-cli doc delete <DocType> <name> |
Delete (confirms / --yes). |
frappe-cli doc submit|cancel|amend |
Document lifecycle. |
frappe-cli doctype list / frappe-cli doctype show <name> |
Introspection / meta. |
frappe-cli report run <name> |
Run a report with the same filter UX as list. |
frappe-cli file upload|download |
Files, with --doctype/--name attach and --private. |
frappe-cli api <path> |
Raw v2 access: frappe-cli api method/<path> -F key=value. |
frappe-cli guide |
Print a short, self-contained usage primer (no site/auth needed). |
This mostly works… to prove it, here is the most generic workflow automation that you see in “AI integration” demos → Submitting expense claims:
❯ Use `frappe-cli` to access frappe.io and create expense claim for me for
openai subscription. Invoice is present in this folder.
● I'll start by exploring the folder for the invoice and checking out the
frappe-cli tool.
Ran 1 shell command (ctrl+o to expand)
● I found the invoice (openapi-july-26.pdf). Let me read it and check the CLI's
guide and auth status.
Read 1 file, ran 1 shell command (ctrl+o to expand)
● Invoice details captured:
- Invoice: Z3U*****-*****, dated July 5, 2026
- Description: ChatGPT Pro Subscription (per seat), Jul 5–Aug 5, 2026
- Total: ₹10,699.00 (₹9,066.95 + ₹1,632.05 IGST 18%)
Let me confirm auth and inspect the Expense Claim DocType.
Ran 2 shell commands (ctrl+o to expand)
● Authenticated on frappe.io. Let me find my Employee record and inspect the
child table + remaining required fields.
Ran 3 shell commands (ctrl+o to expand)
● Employee: EMP/00***, Frappe Technologies Private Limited. Now let me find the
appropriate Expense Claim Type and the taxes child table structure.
Ran 2 shell commands (ctrl+o to expand)
● There's an "LLM Subscription" expense type — a perfect match. Let me check how
previous LLM Subscription / similar claims were filed to mirror the
established pattern (especially the GST tax handling).
Ran 1 shell command (ctrl+o to expand)
● The user's own pattern is consistent: no separate tax line — full amount
claimed as a single expense line. Let me examine the most recent claim in
detail to mirror its structure exactly.
Ran 1 shell command (ctrl+o to expand)
● I have the full pattern. Let me check the "LLM Subscription" expense type's
default account for this company.
Ran 1 shell command (ctrl+o to expand)
● I have everything needed. I'll create the Expense Claim as a draft (mirroring
the user's established pattern: full amount ₹10,699 as a single line, no
separate tax breakout), then attach the invoice PDF. Leaving it as draft so
you can review before submitting.
● Write(/tmp/claude-1000/-home-ankush-scratchpad/e5b900df-61f1-40f1-bde0-11f45cb
65ec0/scratchpad/expense_claim.json)
⎿ Wrote 23 lines (ctrl+o to expand)
Ran 1 shell command (ctrl+o to expand)
● Draft EXP0**** created (₹10,699.00). Now let me attach the invoice PDF.
Ran 1 shell command (ctrl+o to expand)
● Done. Created the expense claim on frappe.io and attached the invoice.
What else you can do:
- Reproduce bug described in this ticket #xyz.
- I was away for a week; summarize last week’s gameplan post.
Roadmap:
- First-class bot user in Framework: feat: Bot user type by ankush · Pull Request #40578 · frappe/frappe · GitHub
- First-class support for API endpoint exploration. feat: add v2 discovery API by ankush · Pull Request #40600 · frappe/frappe · GitHub
- v1 stable release. This is fully vibe-coded
I’ve only worked on specs/design.
Try it out using:
uv tool install git+https://github.com/frappe/frappe-cli # recommended
# or: pip install git+https://github.com/frappe/frappe-cli