Skip to main content

14. Extending it in Rust

To addTouch
a step typea module in app/src/kinds/ with a With struct (deny_unknown_fields), a build function that validates it, and a Task impl; plus one line in KindRegistry::builtin (mark it terminal, or as an approval point, if it is one)
a connector typean impl IntegrationConnector in crates/integrations and one arm in engine::adapters::build_connector
a model provider typean impl LlmProvider in crates/llm and one arm in engine::adapters::build_llms
a parser typean impl DocumentParser in crates/documents and one arm in engine::adapters::build_parsers
a tablea SQL migration in migration/ and a store method in app/src/stores/ (PostgreSQL and in-memory)

Each step is wrapped for you. Retries come from the node's retry, and every outcome is written to the audit trail; a step whose audit write fails does not proceed.

Checks​

cargo fmt --all --check
cargo clippy --workspace --all-targets -- -D warnings
cargo test --workspace # no database needed
cargo test -p bo-app --test http -- --ignored --test-threads=1 # needs PostgreSQL + pgvector (bo_test)
cargo deny check licenses bans advisories sources
cd web && bun run build && bun run type-check && bun run license:check

CI runs all of these on every change under agents/backoffice-agents/, license gate first (.github/workflows/backoffice-agents.yml).