No description
  • Scheme 51.5%
  • Tree-sitter Query 36.1%
  • Shell 7.5%
  • Python 3.7%
  • M4 0.7%
  • Other 0.5%
Find a file
Hugo O'Connor 969d7e9685
fix(rdti): TOOLS_ONLY spindle source path — home-based default, writable-parent check
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 16:34:45 +10:00
.claude/skills/rdti refactor(rdti): renumber SPEC-005/IMPL-005 -> SPEC-006/IMPL-006 2026-07-03 16:28:21 +10:00
anuna fix: suppress fibers module warnings 2026-01-01 23:00:49 +11:00
bin fix(install): properly handle CLI arguments and guix shell 2026-01-01 22:54:39 +11:00
build-aux refactor: rename project from Anuna to Heeler 2026-01-01 22:24:18 +11:00
docs refactor(rdti): renumber SPEC-005/IMPL-005 -> SPEC-006/IMPL-006 2026-07-03 16:28:21 +10:00
examples refactor(rdti): renumber SPEC-005/IMPL-005 -> SPEC-006/IMPL-006 2026-07-03 16:28:21 +10:00
m4 Implement Phase 1-2: Foundation + Payroll in GNU Guile 2025-12-31 16:54:04 +11:00
rules refactor(rdti): renumber SPEC-005/IMPL-005 -> SPEC-006/IMPL-006 2026-07-03 16:28:21 +10:00
specs refactor(rdti): renumber SPEC-005/IMPL-005 -> SPEC-006/IMPL-006 2026-07-03 16:28:21 +10:00
tests refactor: rename project to Anuna Books 2026-01-01 22:41:37 +11:00
users/founder refactor(rdti): renumber SPEC-005/IMPL-005 -> SPEC-006/IMPL-006 2026-07-03 16:28:21 +10:00
.gitignore feat(rdti): add R&D Tax Incentive helper — SPEC-005, spindle rulebase, Claude Code skill 2026-07-03 11:13:55 +10:00
anuna.scm refactor: rename project to Anuna Books 2026-01-01 22:41:37 +11:00
bootstrap.sh refactor: rename project to Anuna Books 2026-01-01 22:41:37 +11:00
configure.ac refactor: rename project to Anuna Books 2026-01-01 22:41:37 +11:00
guile.am Implement Phase 1-2: Foundation + Payroll in GNU Guile 2025-12-31 16:54:04 +11:00
guix.scm refactor: rename project to Anuna Books 2026-01-01 22:41:37 +11:00
install-rdti.sh fix(rdti): TOOLS_ONLY spindle source path — home-based default, writable-parent check 2026-07-03 16:34:45 +10:00
install.sh fix: suppress Guile locale warning in installed CLI 2026-01-01 23:02:27 +11:00
LICENSE Add AGPL-3.0 license 2025-12-31 14:26:26 +11:00
Makefile.am refactor: rename project to Anuna Books 2026-01-01 22:41:37 +11:00
manifest.scm refactor: rename project to Anuna Books 2026-01-01 22:41:37 +11:00
pre-inst-env.in refactor: rename project to Anuna Books 2026-01-01 22:41:37 +11:00
README.md feat(rdti): TOOLS_ONLY mode — installer doubles as pure toolchain provisioner 2026-07-03 16:34:10 +10:00
TODO refactor: rename project to Anuna Books 2026-01-01 22:41:37 +11:00
xero-features-analysis.md refactor(rdti): renumber SPEC-005/IMPL-005 -> SPEC-006/IMPL-006 2026-07-03 16:28:21 +10:00

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

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 .onion hidden 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 module
  • specs/features/SPEC-002-bas-annual-returns.md - BAS & tax returns module
  • specs/features/SPEC-003-bank-transaction-classifier.md - Bank import & classification
  • specs/features/SPEC-004-award-compliance-engine.md - Award interpretation & compliance
  • docs/unified-specification-driven-development.md - Development methodology
  • docs/foss-stp-feasibility-report.md - Feasibility analysis
  • docs/lisp-accounting-projects.md - Technology research

License

AGPL-3.0 - Because if you improve it, everyone should benefit.