Your AI Accountant

Amos AI does the accounting. You run the business.

Amos AI is an Enterprise Resource Agent—an AI agent that fully runs an ERP for you. Amos runs inside Zavora ERP. Voice or chat becomes a scoped accounting workflow: it reads the live ledger, follows an accounting playbook, asks before posting, and files evidence beside the conversation.

  • Records supplier bills and customer invoices from a request
  • Reconciles bank and M-Pesa transactions
  • Runs payroll and prepares Kenyan tax work
  • Schedules briefings, compliance checks, and month-end packs
  • Explains business performance in plain language

Amos

AI Accountant · online

Post a supplier bill
📎
Ask Amos or attach a document…

Why it is a super agent

Complete accounting workflows.

Amos is a standalone Rust and Axum service embedded in the ERP. ADK-Rust's RealtimeRunner keeps speech, text, transcripts, tool calls, and interruptions in one live session, so a user can speak naturally and type whenever precision matters.

When a request requires action, Amos loads a focused accounting skill and calls ERP tools through MCP. Each tool is wrapped with the user's role scopes and audit context. Ledger postings stop at an explicit approval gate enforced in Rust, then execute with the user's ERP token if approved.

The result stays visible. Amos maintains a workplan, drives the real ERP through a separate browser toolset, captures screenshot evidence, stores session history, recalls approved business context, and uses narrowly scoped background agents for scheduled accounting routines.

01

Realtime voice and chat

Mic audio enters as 16 kHz PCM. Gemini Live returns 24 kHz speech and live transcripts, while typed messages can join the same session.

02

70+ ERP operations

MCP connects Amos to reports, invoices, bills, payments, payroll, procurement, inventory, reconciliation, tax filings, and period close.

03

16 accounting skills

Drop-in SKILL.md playbooks define tool order, accounting checks, confirmation points, and the actions Amos must never take.

04

Visible execution

A workplan shows each step. Tool activity, posting badges, and completion state arrive over the session WebSocket.

05

Evidence from the real ERP

A Playwright MCP server navigates the product, verifies the result, and files screenshots beside the conversation.

06

Approval before posting

Role scopes are checked on every tool call. A ledger write pauses at a code-enforced confirmation gate before the tool executes.

07

Memory developers can correct

Postgres and pgvector retain business facts, lessons, and session summaries. Recall, deduplication, and forget paths keep that memory maintainable.

08

11 scheduled routines

Scoped one-shot agents prepare briefings, management accounts, reconciliations, tax work, payment proposals, and close packs on the business calendar.

Case study · management accounts

Generate management accounts from live ERP data.

The useful result is not a generic explanation. Amos queries the business ledger, compares periods and budget, calculates finance KPIs, names material drivers, and leaves the supporting workflow visible beside the answer.

Amos management accounts response with a comparison table, KPI commentary, stored memory, and scheduled accounting routines
Repository capture: management accounts in the conversation, with memory and the accounting routine calendar visible in the side panel.
  1. 01

    Understand the business date

    The session clock supplies the user’s timezone, fiscal context, and work-as-of date so ‘last month’ resolves consistently.

  2. 02

    Load the reporting playbook

    The use_skill tool brings the financial-reporting or management-accounts workflow into context only when it is needed.

  3. 03

    Query the live ledger

    Scoped MCP tools run the P&L, budget comparison, prior-period reports, balance sheet, invoices, bills, payroll, and tax status.

  4. 04

    Calculate and explain

    Amos derives margins, DSO, DPO, liquidity, cash cover, and material variances from tool results rather than inventing figures.

  5. 05

    Keep the execution visible

    The UI receives task progress, tool activity, the report, and suggested decisions through the current WebSocket session.

  6. 06

    Retain useful context

    The transcript is stored and durable business facts or workflow lessons can be recalled in a later session.

Architecture

How Amos connects a realtime conversation to a governed ERP.

The realtime model never receives an unrestricted connection to the ledger. ADK-Rust bridges a filtered toolset into the session, and each call passes through authorization, confirmation, and audit wrappers before it reaches the ERP or browser.

Amos realtime AI accountant architecturePeople use voice and chat through a WebSocket connected to the Rust Amos service. ADK-Rust runs Gemini Live, scoped tools, MCP connections, skills, routine agents, ERP services, browser evidence, memory, and session storage.Peoplevoice + chat + approvalWebSocketaudio + typed eventsAmos serviceRust + AxumRealtimeRunnerGemini LiveScoped toolsroles + confirm + auditMCP managerERP + browser toolsZavora ERA APIlive business ledgerBrowser evidencePlaywright + screenshotsSkills16 playbooksRoutine agents11 scheduled jobsPostgreSQLmemory + sessions + runs
Realtime sessionADK-Rust executionBusiness tools and evidenceState and background work

Evidence and control

The user can inspect what the agent changed.

Amos uses an isolated Playwright MCP server to open the ERP, navigate to the affected record or report, verify the visible state, and capture an evidence card. The browser is a verification surface; accounting actions still go through the scoped ERP tools.

Code-enforced boundary: read operations can run within the user's role. A tool requiring ledger:post sends a confirmation card and waits. Decline or timeout means the tool does not execute.
Zavora ERP trial balance report captured by Amos as evidence
Trial balance generated and visibly balanced.
Zavora ERP bills list captured by Amos showing draft, paid, and posted supplier bills
Supplier bills and their current posting state.

Composable accounting knowledge

Developers extend Amos with skills.

Each skill is a versionable SKILL.md playbook. The realtime prompt receives a short catalog, then use_skill loads the full workflow and its allowed MCP tools only when the job needs them.

bank reconciliationcash forecastCRMERP showcasefinancial reportingHR & payrollinventory operationsprocurementmanagement accountsmanual journalsmonth-end reviewpayment runscustomer invoicespaymentsvendor billstax filing

Proactive accounting

Scheduled jobs run as scoped sub-agents.

A routine declares its cron schedule, prompt, skill, exact tools, scopes, and notification behavior in TOML. ADK-Rust creates a short-lived LLM agent for that job, records the run, and sends the result to the ERP inbox.

Morning briefingAR chase listBank reconciliation checkMonthly management accountsWeekly payment proposaleTIMS compliance sweepPAYE preparationVAT preparationCIT installment checkMonth-end close packAnnual accounts pack
Amos embedded workspace showing the business snapshot and persistent memory panel
Repository capture: the live business snapshot and durable memory remain visible beside the agent workspace.

The Rust behind Amos

ADK-Rust composes the realtime runtime and its boundaries.

The repository builds a RealtimeRunner, bridges MCP tools into the live session, and wraps every tool before the model can call it. The approval path is application code, so changing a prompt cannot bypass it.

Read the complete Amos crate ↗
agent.rs · realtime runner and scoped MCP tools
let mut builder = RealtimeRunner::builder()
    .model(state.model.clone())
    .config(config);

for tool in mcp_tools {
    let scoped = ScopedTool::wrap(
        tool,
        granted_scopes.clone(),
        user_id.clone(),
        session_id.clone(),
        audit.clone(),
        Some(session.clone()),
    );

    builder = builder.tool_arc(
        definition,
        Arc::new(ToolBridgeAdapter::new(scoped, context_factory.clone())),
    );
}
scope.rs · confirmation before ledger posting
if required_scopes.contains(&"ledger:post") {
    if let Err(refusal) = self.confirm_with_user(&args).await {
        self.record(self.inner.name(), AuditOutcome::Denied).await;
        return Ok(json!({ "error": refusal }));
    }
}

self.record(self.inner.name(), AuditOutcome::Allowed).await;
let args = self.with_user_token(args).await;
self.inner.execute(ctx, args).await

Current deployment contract

What a developer needs to run Amos.

Implemented now

  • Gemini Live native audio and text
  • Filtered ERP and browser MCP toolsets
  • 16 skill playbooks and 11 routines
  • Role scopes, posting confirmation, and audit events
  • Pgvector memory and persisted transcripts
  • Evidence screenshots and live workplans

Deployment requirements

  • A running Zavora ERA API and web UI
  • Gemini credentials and an MCP ERP process
  • PostgreSQL with pgvector for durable memory
  • One configured tenant per Amos instance today
  • A shared JWT secret for ERP user identity
  • Node and Chromium for browser evidence

Build a complete agent product

Use realtime conversation without giving up software controls.

Amos shows how ADK-Rust can connect native audio, MCP tools, skills, memory, background agents, product UI, authorization, approval, and evidence around one production workflow.