easybooks
v0.5.23Bookkeeping for self-employed Canadians via the bundled EasyBooks CLI: drop a receipt, invoice, or scan Gmail and have it recorded into EasyBooks. The CLI is the only boundary for all EasyBooks reads and writes — record income/expenses, create and send invoices, and resolve clients/categories.
By Jacky ZhangLicense: MIT0 GitHub starsUpdated yesterday
Directory evidence
- Runtimes
- Codex and Claude Code
- Parsed components
- 1 skill or MCP entry
- Source updated
- Sep 22, 2026
- Manifest status
- Canonical path parsed
The directory validates manifest shape and source location. It does not execute the plugin or provide a security endorsement. Review the indexing methodology →
Install easybooks for Codex and Claude Code
codex plugin marketplace add jackyzhang69/plugins
codex plugin marketplace upgrade jacky-plugins
codex plugin add easybooks@jacky-pluginsPaste and run these commands in a terminal with Codex. They add and refresh the jacky-plugins catalog, then install this plugin.
Compatibility: the page URL and API slug “easybooks” remain stable.
- Codex:
easybooks@agent-plugin-marketplace→easybooks@jacky-plugins
The installer fetches third-party code from the source repository shown on this page. This directory validates manifest structure and source location, but does not perform a security audit; review the manifest, components, and source before installing.
Get the source manually
git clone https://github.com/jackyzhang69/pluginsClone the source repository, then follow its setup instructions to add the plugin to a compatible client. The plugin root is plugins/easybooks/.
Plugin files
├── .codex-plugin/plugin.json├── .claude-plugin/plugin.json└── skills/easybooks/SKILL.md
Included Skills1
READ THIS FIRST for EasyBooks. Bookkeeping for self-employed Canadians: record this receipt, log a $X expense/income, I dropped a file / invoice / screenshot, here's a receipt / supplier invoice / screenshot / scanned PDF — record it, import this spreadsheet / bank statement / CSV of expenses, what categories do I have, create an invoice, send invoice X, bill a client, scan my Gmail for receipts, find purchase receipts in my email, import my email receipts, go through my Gmail and log the expenses, list my categories/clients/invoices, connect EasyBooks, log in / save my jz_ platform token, tell Jacky, connect with Jacky, join code from Jacky, pair session. One discovery file; playbooks in references/. Ask the live CLI (`easybooks commands --json`), never from memory of an older release.
Plugin manifests2
{
"name": "easybooks",
"description": "Bookkeeping for self-employed Canadians via the bundled EasyBooks CLI: drop a receipt, invoice, or scan Gmail and have it recorded into EasyBooks. The CLI is the only boundary for all EasyBooks reads and writes — record income/expenses, create and send invoices, and resolve clients/categories.",
"version": "0.5.23",
"min_supported_version": "0.1.0",
"author": {
"name": "Jacky Zhang"
},
"homepage": "https://github.com/jackyzhang69/easybooks-plugin",
"repository": "https://github.com/jackyzhang69/easybooks-plugin",
"license": "MIT",
"keywords": [
"easybooks",
"bookkeeping",
"invoices",
"self-employed",
"canada"
],
"skills": "./skills/",
"interface": {
"displayName": "EasyBooks",
"shortDescription": "Bookkeeping for self-employed Canadians via the EasyBooks CLI.",
"longDescription": "Use the bundled EasyBooks Rust CLI as the only boundary for EasyBooks operations. The agent may parse a dropped receipt, invoice, image, PDF, or email locally to extract structured data, but the moment anything is recorded, listed, or mutated it goes through `easybooks ...` — never a direct database or backend call. Core value: drop a receipt or invoice (or scan your connected Gmail for receipts and invoices) and have it recorded straight into EasyBooks as income or expenses, idempotently keyed so re-scans never double-record. Also create and send invoices and resolve clients and expense/income categories by name. The CLI talks to the EasyBooks backend integration endpoints over HTTP. The only thing the user ever inputs is their platform Portal token (jz_…) — the same one every official Jacky plugin uses, captured once by the connect-easybooks skill and stored at ~/.jackyzhang.app/token/user.json. If the user has already connected any other official plugin, no token is needed. Retired eb_live_ product keys are rejected.",
"developerName": "Jacky Zhang",
"category": "Productivity",
"capabilities": [
"Read",
"Write"
],
"websiteURL": "https://easybooks.jackyzhang.app",
"privacyPolicyURL": "https://easybooks.jackyzhang.app/privacy",
"defaultPrompt": [
"Record this receipt into EasyBooks.",
"Log a $120 expense for software on 2026-05-01.",
"Create an invoice for <client> for <items>.",
"Scan my Gmail for receipts and record them."
]
}
}{
"name": "easybooks",
"description": "Bookkeeping for self-employed Canadians via the bundled EasyBooks CLI: drop a receipt, invoice, or scan Gmail and have it recorded into EasyBooks. The CLI is the only boundary for all EasyBooks reads and writes — record income/expenses, create and send invoices, and resolve clients/categories.",
"version": "0.5.23",
"author": {
"name": "Jacky Zhang"
},
"homepage": "https://github.com/jackyzhang69/easybooks-plugin",
"repository": "https://github.com/jackyzhang69/easybooks-plugin",
"license": "MIT",
"keywords": [
"easybooks",
"bookkeeping",
"invoices",
"self-employed",
"canada"
]
}For maintainers
If you maintain this plugin, link to this source-backed listing from your README so users can review its manifest and indexed components.
[easybooks on Agent Plugins Marketplace](https://pluginsmp.com/plugins/easybooks)