1. Goals and non-goals
Goal. Documents come in, structured data is extracted, records are matched in Postgres, a human approves, the result is posted to accounting, and every step is audited. Collections and claims follow-up come after invoices. Every component carries an OSI-approved license, with permissive licenses preferred.
Goals
- A Loco app plus library crates in which each external dependency sits behind a trait.
- Behaviour defined in YAML: a new workflow built from existing task kinds needs no Rust.
- Human approval through the AG-UI interrupt and resume lifecycle, with checkpoints in Postgres that survive restarts.
- Multi-tenant from day one: a tenant column on every table, Loco tenant helpers, and Postgres row-level security.
- License compliance and YAML validity enforced automatically in CI.
Non-goals (v1)
- No hosted SaaS control plane and no billing.
- No fine-tuning pipeline. The plan uses off-the-shelf open-weight models.
- No reliance on CopilotKit Intelligence, Activepieces EE, Langfuse EE or SigNoz EE.
- No visual workflow designer. Workflows are YAML files.
What "everything is YAML configurable" means
Configurable in YAML, no rebuild: server, logging, database, queue, workers, scheduler, auth, storage, LLM endpoints and models, the model license allow-list, prompts, extraction schemas, workflows (nodes, edges, conditions, retries, timeouts), approval policies, validation rules, connectors and their actions, tools, roles, rate limits, PII and retention rules, telemetry, per-tenant overrides, and the list of agents the web UI shows.
Still Rust code: the implementation of each task kind, connector adapter and port. YAML composes and parameterises them.
Not YAML because the tools require another format: Cargo.toml and deny.toml (TOML) and package.json (JSON). Docker Compose, the OpenTelemetry Collector and GitHub Actions are already YAML.