- Scheme 51.5%
- Tree-sitter Query 36.1%
- Shell 7.5%
- Python 3.7%
- M4 0.7%
- Other 0.5%
|
|
||
|---|---|---|
| .claude/skills/rdti | ||
| anuna | ||
| bin | ||
| build-aux | ||
| docs | ||
| examples | ||
| m4 | ||
| rules | ||
| specs | ||
| tests | ||
| users/founder | ||
| .gitignore | ||
| anuna.scm | ||
| bootstrap.sh | ||
| configure.ac | ||
| guile.am | ||
| guix.scm | ||
| install-rdti.sh | ||
| install.sh | ||
| LICENSE | ||
| Makefile.am | ||
| manifest.scm | ||
| pre-inst-env.in | ||
| README.md | ||
| TODO | ||
| xero-features-analysis.md | ||
Anuna Books
Free and open-source accounting for Australian businesses. Because $100/month for basic bookkeeping is absurd.
The Problem with Xero
This all started when my Xero account had a show-stopping, unexplained bug and I couldn't get any customer support to help me. I wondered, could I make a better replacement at less than my current annual subscription cost?
Xero has become the default accounting software for Australian small businesses. It's also become a case study in enshittification.
Relentless Price Increases
- 40-54% price increases since 2021 across all plans
- Two price hikes in under 12 months (2024-2025)
- Want to pay yourself from your small business? That jumped from $32/month to $70/month—a 119% increase overnight
- From July 2025, plans range from $35 to $198/month
As one user put it: "I've been a loyal user of Xero since 2014, but I've seen minimal, if any, enhancements to the platform. How on earth can you rationalise another increase in price?"
Broken Features, Terrible Support
- 1,805+ outages recorded over the past 4 years
- Bank feeds constantly breaking—users report being locked out for entire days and spending hours cleaning up duplicate transactions that "appeared from nowhere"
- New invoicing system broke multi-currency handling, delivery tracking, and made the UI harder to navigate
- No phone support. You schedule a call within a "four-hour window" and hope someone calls back. Many don't.
One verified reviewer: "Moronic bugs happening frequently... the company only works on things that look good to attract new users."
Features Removed, Interface Degraded
- "With each upgrade, the system deteriorates"
- "Familiar interfaces get killed off 'just because' and replaced with ones that are way less intuitive"
- "Terrible software, new releases removed key functions, clunky, too many mouse clicks to do anything"
- Reports that worked fine for years suddenly became "very terrible" after forced updates
The Real Cost
At $70-198/month, you're paying $840-2,376/year for software that:
- Locks your data in proprietary formats
- Requires constant internet connectivity
- Breaks features you relied on
- Offers no real support when things go wrong
- Raises prices whenever shareholders demand it
Meanwhile, plain text accounting tools like hledger and Beancount have proven that double-entry bookkeeping can be done with simple text files—auditable, version-controlled, and yours forever.
What's missing? Australian tax compliance. Payroll. Single Touch Payroll. BAS lodgment. The boring-but-essential stuff that keeps the ATO happy.
That's what Anuna Books will fix.
The Vision
A complete, free, open-source accounting system for Australian businesses that:
- Owns your data: Plain text journals you can read, diff, and version control
- Handles compliance: PAYG withholding, superannuation, STP, BAS, annual returns
- Works offline: Your books shouldn't require an internet connection
- Integrates smartly: Leverages existing tools (hledger, Beancount) instead of reinventing them
- Respects privacy: Optional LLM features run locally or with data redaction
Planned Modules
| Module | Description | Status |
|---|---|---|
| Payroll & STP | Employee management, PAYG withholding, super, leave tracking, Single Touch Payroll submission | Specified |
| BAS & Tax Returns | GST tracking, BAS preparation, PAYG instalments, annual return generation | Specified |
| Bank Classifier | Import bank transactions, auto-categorize with rules + optional LLM, generate journal entries | Specified |
| Award Compliance Engine | LLM-parsed industrial awards encoded as executable logic. Automatic penalty rates, allowances, overtime. No other software does this. | Specified |
| R&D Tax Incentive Helper | Turn bank/Xero dumps into contemporaneous R&D records and RDTI schedule numbers — every claimed dollar backed by a defeasible-logic proof tree. Usable today as a Claude Code skill. | Specified + skill |
Architecture
┌─────────────────────────────────────────────────────────┐
│ Anuna Books │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────┐ │
│ │ Payroll │ │ BAS/Tax │ │ Bank Classifier │ │
│ │ + STP │ │ Returns │ │ (LLM-powered) │ │
│ └──────┬──────┘ └──────┬──────┘ └────────┬────────┘ │
│ │ │ │ │
│ └────────────────┼──────────────────┘ │
│ ▼ │
│ Plain Text Journals (.journal) │
│ (git-tracked) │
└─────────────────────────────────────────────────────────┘
│
┌────────────────┼────────────────┐
▼ ▼ ▼
┌──────────┐ ┌────────────┐ ┌──────────┐
│ hledger/ │ │ SSP APIs │ │ Export │
│ Beancount│ │ (ATO STP) │ │ (PDF, │
│ (reports)│ │ │ │ CSV) │
└──────────┘ └────────────┘ └──────────┘
Key insight: We don't need to build everything. Existing plain text accounting tools handle queries and reports beautifully. SSPs (Sending Service Providers) handle ATO protocol complexity. We just need to bridge them with Australian tax logic.
Project Status
Phase: Core Implementation Complete (Phases 1-8)
The foundation is built and working:
| Phase | Status | Description |
|---|---|---|
| 1-2 | Done | Core data structures, PAYG withholding, super, leave tracking, payroll engine |
| 3 | Done | STP payload generation, gateway integration |
| 4 | Done | BAS calculator, hledger integration |
| 5 | Done | Full CLI with all commands |
| 6 | Done | Multi-user OCapN networking, employee/accountant portals, revocation |
| 7 | Done | State persistence, offline queue, sync-on-reconnect |
| 8 | Done | TLS encryption, audit logging, Tor hidden service support |
Technology: GNU Guile + Spritely Goblins for object-capability security.
See /specs for detailed specifications and /docs for background research.
Why Plain Text?
2024-12-15 * "Monthly salary - Jane Smith"
expenses:salaries:gross 5000.00 AUD
liabilities:payg-withholding -867.00 AUD
liabilities:super-payable -575.00 AUD
expenses:salaries:super 575.00 AUD
liabilities:wages-payable -4133.00 AUD
; employee: jane-smith
; pay-period: 2024-12-01 to 2024-12-15
Things hledger can do that Xero can't
| Capability | hledger | Xero |
|---|---|---|
| Version control | git diff to see exactly what changed, when, and why. Roll back mistakes instantly. |
Hope you catch errors before they propagate. |
| Offline access | Works anywhere, no internet required. Your data is always available. | "Xero is down" = your business stops. |
| grep your books | grep "Officeworks" *.journal |
Export to CSV, open Excel, squint. |
| Custom queries | Any report you can imagine, in seconds. | Limited to Xero's canned reports. |
| Automate anything | Bash, Python, cron jobs—your books are just text files. | Pray there's a Zapier integration. |
| Track anything | Money, stocks, crypto, inventory, billable hours—all in one system. | Money only. Stocks? That's an add-on. |
| LLM-friendly | Feed your journals to Claude/GPT for analysis. | Copy-paste from PDFs. |
| True audit trail | Every commit is signed, timestamped, immutable. | Xero's audit log is whatever Xero says it is. |
| Survive the vendor | Plain text is forever. | Xero gets acquired? Pivots? Shuts down? Good luck. |
| No price increases | Free. Forever. | See above. |
Technology
Built with GNU Guile and Spritely Goblins:
- GNU Guile 3.0.10 - Scheme implementation, the extension language of the GNU project
- Spritely Goblins 0.17 - Object-capability (ocap) actor model with network transparency
- OCapN - Open Capability Network protocol for secure distributed computing
- Autotools - Standard GNU build system
- GNU Guix - Reproducible development environment
Why Goblins?
Object-capability security means employees can only access what they're explicitly granted. No ambient authority, no privilege escalation. The same code runs locally or across the network with the same security guarantees.
;; Employee portal - can only see their own data
($ my-portal 'get-my-timesheets) ; Works
($ my-portal 'get-all-employees) ; No such method - capability not granted
Installation
Quick Install (Mac & Linux)
git clone https://github.com/anuna/anuna
cd anuna
./install.sh
The install script will:
- Detect your OS (Mac/Linux)
- Install dependencies via Homebrew (Mac) or apt/dnf/pacman (Linux)
- Build and install to
~/.local/bin - Add to your PATH
With GNU Guix (Recommended)
For reproducible builds with all dependencies:
git clone https://github.com/anuna/anuna
cd anuna
# Enter development environment (installs all dependencies)
guix shell -m manifest.scm
# Build and test
./bootstrap.sh && ./configure && make check
# Run directly
./pre-inst-env bin/anuna --help
One-liner
guix shell -m manifest.scm -- bash -c './bootstrap.sh && ./configure && make check'
R&D Tax Incentive Skill (usable today)
While the Guile implementation matures, the RDTI Helper ships as a
Claude Code agent skill in this repo
(.claude/skills/rdti/). It turns unstructured financial dumps into
(a) contemporaneous R&D activity records and (b) draft R&D Tax Incentive
schedule numbers, where every included or excluded dollar carries a
machine-generated proof tree citing the statute.
How it works: hledger holds the amounts, spindle holds the law, your
vault holds the narrative. Bank/Xero CSV → hledger import → classified
journal (GST split into its own posting, R&D tags) → SPL facts projected
from the journal → the SPINdle
defeasible-logic rulebase (rules/rdti-rules.spl, every rule citing
Division 355 ITAA 1997) concludes what is claimable, with
explain/why-not proofs. Git history is harvested as hash-verifiable
contemporaneous evidence. Full design:
specs/features/SPEC-006-rdti-tax-incentive.md;
runnable example: examples/rdti/.
Install the skill
Prerequisites: Claude Code,
hledger (brew install hledger or your package
manager), and the spindle CLI:
git clone https://codeberg.org/anuna/spindle-rust
cargo install --path spindle-rust/crates/spindle-cli
Then set up a private vault — your books never go in this (public) repository, and the skill refuses to run inside it. One-liner, from the directory you want as your vault:
mkdir my-tax-vault && cd my-tax-vault # PRIVATE — never push to a public remote
curl -fsSL https://codeberg.org/anuna/anuna-accounts/raw/branch/main/install-rdti.sh | bash
(It clones/updates anuna-accounts as a sibling, symlinks the skill into
./.claude/skills/rdti, initialises git, and installs the associated
tools where it safely can: hledger via brew, spindle via cargo, zetl and
ar-crawl via their own installers — set SKIP_TOOLS=1 to skip, or run
with TOOLS_ONLY=1 from anywhere to provision just the toolchain.
Manual equivalent: clone the repo beside your vault and
ln -s ../../../anuna-accounts/.claude/skills/rdti .claude/skills/rdti.)
Use it
cd my-tax-vault
claude
# then: /rdti → pipeline status and next steps
# drop bank/Xero CSV exports into inbox/<FY>/ and say "ingest"
# ingest → classify → reason → numbers → audit
Try the worked example without any of your own data:
cd anuna-accounts
cat rules/rdti-rules.spl examples/rdti/facts-example.spl > /tmp/rdti.spl
spindle reason /tmp/rdti.spl --positive
spindle why-not "(claimable t-0044)" /tmp/rdti.spl # why a grant-funded expense is excluded
Status: draft specification. Outputs are drafts for professional review — not tax advice; have an accountant review before lodging anything.
Usage
Basic CLI Commands
# Add employees
anuna employee add --id jane --name "Jane Smith" --tfn 123456789 \
--dob 1990-01-15 --start 2024-01-01 --type full-time --salary 75000
# Run payroll
anuna pay run --employee jane --period 2024-12-01/2024-12-15
# Check leave balances
anuna leave balance --employee jane
# Generate BAS from hledger file
anuna bas calculate --file company.journal --quarter Q2
# View STP queue
anuna stp status
Multi-User Server (OCapN)
# Start server with TLS (auto-generated cert)
anuna serve --host 0.0.0.0 --port 8989
# Or with Tor hidden service
anuna serve --tor
# Issue portal access to employee
anuna portal issue --employee jane
anuna portal token --employee jane
# Share the token and bootstrap URI with the employee
# Employees connect with their token
anuna connect --uri "ocapn://..." --token "abc123"
Data Management
# Save current state
anuna data save
# Export to hledger format
anuna data export --format hledger --output payroll.journal
# Create backup
anuna data backup create
# List backups
anuna data backup list
Interactive REPL
# Start Scheme REPL with system loaded
anuna repl
Contributing
This project needs:
- Developers familiar with Australian tax/payroll (or willing to learn)
- Accountants/Bookkeepers to validate calculations and workflows
- Beta testers willing to run it alongside their existing software
- Feedback on the specifications before implementation begins
If you're tired of paying Xero tax and want to help build the alternative, open an issue or reach out.
Security
Object-Capability Model
Anuna Books uses the Goblins object-capability model for security:
- No ambient authority - Code can only access objects it has explicit references to
- Principle of least privilege - Employees get portals with only the methods they need
- Revocable access - Admin can revoke any portal instantly
- Audit logging - All capability usage is logged
Network Security
- TLS by default - All OCapN connections encrypted (auto-generated or custom certs)
- Tor support - Optional
.onionhidden service for anonymous access - Token authentication - Employees authenticate with one-time tokens
Data Protection
- TFN sealing - Tax file numbers encrypted with capability-based sealer/unsealer
- Local storage - All data stored locally, you control it
- Offline operation - Queue operations when disconnected, sync when reconnected
FAQ
Is there a way to short Xero's stock price?
Xero (ASX: XRO) is publicly traded on the ASX and NZX. Different brokers offer different mechanisms for short selling. This is not financial advice, and this project has no official position on Xero's stock price. We just think their software is bad and getting worse.
Why not just use MYOB/QuickBooks/Reckon?
Same problem, different logo. They're all racing to extract maximum rent from small businesses while providing the minimum viable product. The only way out is software you actually own.
Is this ready to use?
The core is implemented and tested. Payroll calculations, PAYG withholding, super, leave tracking, STP payload generation, BAS calculations, and multi-user networking all work. What's still needed: more real-world testing, UI polish, and the Award Compliance Engine.
Will this ever support [country other than Australia]?
The architecture is modular—tax engines are separate from the core journal system. But we're starting with Australia because that's where we are and what we know. Once the patterns are proven, adapting for other jurisdictions becomes much easier.
Why plain text instead of a database?
Your books are too important to lock in a proprietary format. Plain text means you can read them in 50 years with any text editor. You can grep them, diff them, version them in git, and write scripts against them. Try doing that with a SQLite blob or a cloud-only SaaS.
What about the ATO filing costs? Don't you need to pay for API gateways?
Yes—but it's dirt cheap. The ATO requires STP submissions go through a certified Sending Service Provider (SSP). We don't try to become one ourselves (that's a certification nightmare). Instead, we integrate with existing SSPs via their REST APIs.
Single Touch offers:
- $5/month per ABN — includes first 50 employee transmissions
- $0.10 per employee for additional transmissions
- Free API integration with full documentation
- No lock-in contracts
Compare that to Xero:
| Employees | Xero Plan Required | Xero Cost | Anuna Books + SSP Cost |
|---|---|---|---|
| 1 | Ignite | $35/month | ~$5/month |
| 2 | Grow | $70/month | ~$5/month |
| 5 | Grow | $70/month | ~$5/month |
| 10 | Ultimate 10 | $115/month | ~$6/month |
| 20 | Comprehensive | $90/month | ~$7/month |
That's $780-1,320/year you keep in your pocket instead of sending to Xero.
The SSPs handle all the ebMS3/AS4 protocol complexity and ATO certification. We just generate the payroll data and call their API. The ATO also maintains a list of free and low-cost solutions for micro employers (1-4 employees).
Documentation
specs/features/SPEC-001-pta-payroll-stp-extension.md- Payroll & STP modulespecs/features/SPEC-002-bas-annual-returns.md- BAS & tax returns modulespecs/features/SPEC-003-bank-transaction-classifier.md- Bank import & classificationspecs/features/SPEC-004-award-compliance-engine.md- Award interpretation & compliancedocs/unified-specification-driven-development.md- Development methodologydocs/foss-stp-feasibility-report.md- Feasibility analysisdocs/lisp-accounting-projects.md- Technology research
License
AGPL-3.0 - Because if you improve it, everyone should benefit.