Browse / Invoicing and finance
Ledger CLI
Plain-text double-entry accounting from the command line; the CLI is the whole interface.
Ledger reads a text journal of transactions and produces balance, register, budget and forecast reports with no database. It has been the reference plain-text accounting tool since 2003 and is scriptable by construction: an agent appends to the journal and runs reports. BSD-3-Clause, actively maintained.
- I keep my books in a text file in git and want reports without a GUI
- I want my agent to append transactions and run balance checks in a script
- No invoicing, no bank sync; you supply the journal
- Python features (--import) need a Python-enabled build, which is off by default
- Community Windows support is weaker than macOS and Linux
Last activity Aug 28, 2026. Fit: adaptable 1, operable 3.
Operable: what an agent can drive
Interface
OfficialCLIpublished by the builderlocal
How an agent can drive an Operable Listing, in five levels: native (built for the agent as the primary interface), official (the Builder ships an agent interface), wrapped (a third party wraps the software's API), config (an agent can only drive it by editing files), gui (screen control only). An interface is official only when it is published by the same organization that ships the software. GUI-level Listings are allowed and sorted last.
Reach
Partial coverage. 8 of 9 jobs reachable through the stated interface.
| Job | Through the interface | Evidence |
|---|---|---|
| Balance reports by account | Reachable | ledger balance (manual ch. 'Reports') |
| Register of transactions with filters | Reachable | ledger register with account, payee and date expressions |
| Budgeting against periodic transactions | Reachable | --budget and --unbudgeted flags |
| Forecasting | Reachable | --forecast option with periodic entries |
| Multi-commodity and price valuation | Reachable | price database, --market and --exchange |
| Periodic and custom-formatted reports | Reachable | --period, --format, csv and xml commands |
| Enter new transactions | Reachable | ledger xact drafts a transaction from a payee; or append to the journal file |
| Import bank data | Undetermined | convert command exists; --import needs a Python-enabled build |
| Close books and equity | Reachable | equity command for opening balances |
Code stack
- Languages
- C++Python
- Frameworks
- Boost
- Package manager
- cmake
- Database
- none
- Hosting target
- local machineDocker
- Built
- Human-written (recorded, never ranked)
Evidence and confidence
| Field | Where it was seen | Confidence |
|---|---|---|
| formFactor | UNIX command-line tool (README) | 95% |
| executionModel | no model at runtime | 95% |
| operability | the CLI is the product; docs at ledger-cli.org by the Builder | 95% |
| effort | no Customization surface beyond the journal and ~/.ledgerrc defaults; adapting means C++ fork | 70% |
| editions | BSD-3-Clause per LICENSE.md; free | 95% |
| active | GitHub pushedAt 2026-08-28; CLAUDE.md in repo | – |
| reach | 85% |
Open questions
- Whether ~/.ledgerrc should count as a config file that makes this Adaptable at config-only; this analysis kept it Operable only
Sources
- github.com/ledger/ledger sourcing:invoicing-finance:community
- www.ledger-cli.org/docs.html sourcing:invoicing-finance:community