Business-Use Core CLI
Project description
business-use-core
FastAPI backend for tracking and validating business event flows in production applications.
Quick Start
# Install dependencies
uv sync
# Initialize (creates config, generates API key, sets up database)
uv run business-use init
# Start development server
uv run business-use serve --reload
# Start production server (4 workers)
uv run business-use prod
What It Does
- Event Ingestion: Receives events from SDKs via
/v1/events-batch - Flow Evaluation: Validates event sequences against flow definitions
- Storage: SQLite (local) or PostgreSQL/Neon (cloud) with async queries
- CLI: Commands for evaluation, inspection, and management
Key Commands
# Execute flows with triggers (NEW!)
uv run business-use flow ensure # Run all flows with triggers
uv run business-use flow ensure payment_approval # Run specific flow
uv run business-use flow ensure --parallel 3 # Run 3 flows concurrently
uv run business-use flow ensure --live # Interactive display
# Evaluate a flow run
uv run business-use flow eval <run_id> <flow> --verbose
# Show flow graph structure
uv run business-use flow graph [flow]
# List recent runs
uv run business-use flow runs
# Manage flow definitions
uv run business-use nodes sync # Sync YAML flows to DB
uv run business-use nodes validate # Validate YAML files
# Workspace management
uv run business-use workspace init # Create .business-use/
# Database migrations
uv run business-use db migrate
# Format/lint
uv run ruff format src/
uv run ruff check src/ --fix
Architecture
Follows Hexagonal Architecture (Ports & Adapters):
domain/- Pure business logic (zero dependencies)execution/- Expression evaluation (Python/CEL/JS)adapters/- Storage implementations (SQLite)eval/- Orchestration layerapi/- FastAPI HTTP endpointsloaders/- YAML flow definitions
Configuration
Priority Order
- Environment variables (highest priority, production)
- YAML config files (local development)
- Defaults
Config File Locations
./.business-use/config.yaml(project-level)./config.yaml(legacy, deprecated)~/.business-use/config.yaml(global)
Local Development (SQLite)
# Interactive setup
business-use init # Choose SQLite
# Or manually create .business-use/config.yaml:
api_key: your_secret_key_here
database_path: ./.business-use/db.sqlite
log_level: info
Production Deployment (Environment Variables)
# Required
export BUSINESS_USE_API_KEY="your_secret_key"
# Optional: PostgreSQL (cloud database, e.g., Neon)
export BUSINESS_USE_DATABASE_URL="postgresql://user:pass@ep-xxx.us-east-2.aws.neon.tech/dbname"
# Optional: SQLite database path (used when DATABASE_URL is not set)
export BUSINESS_USE_DATABASE_PATH="/app/data/db.sqlite"
# Optional settings
export BUSINESS_USE_LOG_LEVEL="info"
export BUSINESS_USE_ENV="production"
PostgreSQL Setup with Neon (Optional)
Neon provides serverless PostgreSQL with autoscaling:
# Visit https://neon.tech and create a project
# Copy the connection string from the dashboard
# Use in production
export BUSINESS_USE_DATABASE_URL="postgresql://user:pass@ep-xxx.us-east-2.aws.neon.tech/dbname"
# Run migrations
uv run business-use db migrate
Note: For local development, omit BUSINESS_USE_DATABASE_URL to use SQLite automatically.
Available Environment Variables
All config values can be overridden via environment variables:
BUSINESS_USE_API_KEY- API authentication keyBUSINESS_USE_DATABASE_URL- PostgreSQL database URL (optional, e.g., Neon)BUSINESS_USE_DATABASE_PATH- Local SQLite file path (used when DATABASE_URL not set)BUSINESS_USE_LOG_LEVEL- Logging level (DEBUG, INFO, WARNING, ERROR)BUSINESS_USE_ENV- Environment name (local, dev, staging, prod)BUSINESS_USE_DEBUG- Enable debug mode (true/false)
Installation from PyPI
# Run without installing
uvx business-use-core init
uvx business-use-core serve
# Or install globally
pip install business-use-core
business-use init
business-use serve
Flow Ensure Command
The flow ensure command executes trigger nodes and polls evaluations until completion. Perfect for E2E testing and CI/CD pipelines.
How It Works
- Execute Trigger: Runs HTTP request or bash command defined in trigger node
- Extract Run ID: Uses Python expression to extract run_id from response
- Poll Evaluation: Continuously evaluates flow until passed/failed/timeout
- Report Results: Shows summary with passed/failed status
Example Flow with Trigger
.business-use/payment_approval.yaml:
flow: payment_approval
nodes:
- id: create_payment
type: trigger
handler: http_request
handler_input:
params:
url: "${API_BASE_URL}/payments"
method: POST
headers:
Authorization: "Bearer ${secret.PAYMENT_API_KEY}"
body: '{"amount": 100, "currency": "USD"}'
run_id_extractor:
engine: python
script: "output['data']['payment_id']"
- id: payment_confirmed
type: act
dep_ids: [create_payment]
conditions:
- timeout_ms: 30000
Secrets Management
Create .business-use/secrets.yaml (gitignored):
PAYMENT_API_KEY: "sk_test_your_key"
API_BASE_URL: "https://api.example.com"
Use in YAML with ${secret.KEY} or ${ENV_VAR} syntax.
Testing Locally
# 1. Sync flow definition to database
uv run business-use nodes sync
# 2. Start server
uv run business-use server dev --reload
# 3. Run ensure command (executes trigger + polls evaluation)
uv run business-use flow ensure payment_approval --live
# For dummy testing without real API:
# Send test events with the seed script
uv run python scripts/seed_test.py payment_12345
# Then evaluate manually
uv run business-use flow eval payment_12345 payment_approval --verbose
Documentation
- Full project overview:
../CLAUDE.md - Architecture details:
ARCHITECTURE.md - CLI reference:
CLI_REFERENCE.md - Graph examples:
GRAPH_EXAMPLES.md
API
All endpoints require X-Api-Key header:
POST /v1/events-batch- Ingest eventsPOST /v1/run-eval- Evaluate flow runGET /health- Health check (no auth)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file business_use_core-0.5.2.tar.gz.
File metadata
- Download URL: business_use_core-0.5.2.tar.gz
- Upload date:
- Size: 60.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0750ba7001cde8e76f3028757c1c0df5698d54554b9d2d320a12db5dc3e6b9d5
|
|
| MD5 |
4f3f4c66c32544edba1221c3306a3441
|
|
| BLAKE2b-256 |
ae4d7c1214aa1043c78e19ac1f361f30f01a5a1a93a9c8ac7c82213e6476d55e
|
Provenance
The following attestation bundles were made for business_use_core-0.5.2.tar.gz:
Publisher:
release-core.yaml on desplega-ai/business-use
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
business_use_core-0.5.2.tar.gz -
Subject digest:
0750ba7001cde8e76f3028757c1c0df5698d54554b9d2d320a12db5dc3e6b9d5 - Sigstore transparency entry: 1176154141
- Sigstore integration time:
-
Permalink:
desplega-ai/business-use@6b0ec87a85e657a70d92a7fa010a93ef3ed4d4ad -
Branch / Tag:
refs/tags/core-v0.5.2 - Owner: https://github.com/desplega-ai
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-core.yaml@6b0ec87a85e657a70d92a7fa010a93ef3ed4d4ad -
Trigger Event:
push
-
Statement type:
File details
Details for the file business_use_core-0.5.2-py3-none-any.whl.
File metadata
- Download URL: business_use_core-0.5.2-py3-none-any.whl
- Upload date:
- Size: 72.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e27c98c1691c1fb49ac2be973fa3da1506bbee636245608ef5bc7e6286790140
|
|
| MD5 |
c28fbfc11ac478f0f76a772b1b4aba6c
|
|
| BLAKE2b-256 |
b5e85d9dcf4a40b31d9668efef79b588f9ba2a199021dadce1241bd31dc063ec
|
Provenance
The following attestation bundles were made for business_use_core-0.5.2-py3-none-any.whl:
Publisher:
release-core.yaml on desplega-ai/business-use
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
business_use_core-0.5.2-py3-none-any.whl -
Subject digest:
e27c98c1691c1fb49ac2be973fa3da1506bbee636245608ef5bc7e6286790140 - Sigstore transparency entry: 1176154205
- Sigstore integration time:
-
Permalink:
desplega-ai/business-use@6b0ec87a85e657a70d92a7fa010a93ef3ed4d4ad -
Branch / Tag:
refs/tags/core-v0.5.2 - Owner: https://github.com/desplega-ai
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-core.yaml@6b0ec87a85e657a70d92a7fa010a93ef3ed4d4ad -
Trigger Event:
push
-
Statement type: