Files
firefly/agent

firefly-agent

Worker container for the personal accounting agent. See the architecture spec: docs/superpowers/specs/2026-08-23-accounting-agent-architecture-design.md.

What it does (Phase 1)

On startup: creates agentdb in the stack's Postgres if missing, applies SQL migrations from src/agent/migrations/, runs one heartbeat, then schedules the heartbeat every HEARTBEAT_INTERVAL_MINUTES. The heartbeat calls Firefly's /api/v1/about and records the outcome in sync_runs.

Development

python3 -m venv .venv && source .venv/bin/activate
pip install -e './agent[dev]'
cd agent && pytest          # needs Docker running (testcontainers)

Configuration

All via environment variables (see .env.example, "Accounting Agent" section): FIREFLY_API_URL, AGENT_FIREFLY_TOKEN (required), AGENT_DB_NAME, HEARTBEAT_INTERVAL_MINUTES, plus the existing DB_HOST/DB_PORT/ POSTGRES_USER/POSTGRES_PASSWORD.

Deploy & verify

# on the host, in the repo directory
git pull
docker compose build agent
docker compose up -d agent
docker compose exec agent python -m agent.verify

Expected verify output: agentdb OK with migrations applied, recent heartbeat runs, Firefly version, and your asset accounts listed.

Inspect heartbeats directly:

docker compose exec db psql -U firefly -d agentdb \
  -c "SELECT connector, status, finished_at FROM sync_runs ORDER BY id DESC LIMIT 5;"