# {{project_name}} — environment. Copy to .env and fill in.  cp env .env

# ── Tier 1 · Boot (required to start the mesh) ──
LEAFMESH_LICENSE_KEY=
LEAFMESH_ENV_TOKEN=development   # per-environment telemetry token (dev / staging / prod)
OPENAI_API_KEY=                  # all gpt-4o-mini agents (rfq_ingester, discount_policy, quote_drafter, bundle_recommender) + the manager
ANTHROPIC_API_KEY=               # deal_compliance_agent (claude-sonnet-4-6); optional BuiltIn Summarizer narration

# ── Tier 2 · State store (defaults work for local dev) ──
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=
# Approval thresholds are NOT env vars — they live as wire conditions
# on discount_policy_agent in configs/config.yaml. Edit them there.

# ── Tier 3 · Connectors (inert until set; system-of-record agents) ──
# cost_calculator_agent reads the SEEDED price book in agency/_shared/store.py
# so the chain runs day-0. To use your real CPQ/ERP price book, wire these
# into load_price_book() in agency/cost_calculator_agent.py — the env vars
# alone do nothing until you wire the call (the deterministic cost floor
# applies on top regardless).
CPQ_MCP_URL=                     # MCP server in front of your CPQ/ERP price book (Salesforce CPQ / NetSuite / SAP) — wire into load_price_book
CPQ_MCP_TOKEN=
CLM_MCP_URL=                     # MCP server in front of your CLM (Ironclad / DocuSign CLM / Conga) — powers contract_redline_tracker_agent
CLM_MCP_TOKEN=
N8N_COMPETITOR_WATCH_WEBHOOK_URL=   # n8n workflow sweeping your price-intelligence stack (Klue / Crayon / scraper) — powers competitor_watch_agent. Uncomment its wake_up cron in configs/config.yaml after wiring.
N8N_AUTH_TOKEN=
CPQ_WEBHOOK_URL=                 # your CPQ create-quote webhook (Salesforce CPQ / DealHub / Conga) — powers quote_issuer_agent's CPQ push. Inert until set; the issuer renders ./out/<quote>.pdf and records a dev-store fallback regardless.
CPQ_WEBHOOK_TOKEN=               # bearer token for the CPQ webhook (optional)

# ── Manager escalation (optional) ──
PAGER_WEBHOOK=                   # PagerDuty Events v2 endpoint for the manager webhook escalation target
# Slack escalation: the manager's `channel` escalation target names
# provider: slack with channel_id=${SLACK_PRICING_CHANNEL}. The SDK does
# NOT auto-send to Slack from these vars — you must wire a Slack sender
# (bot token + channel) in code/connector. Leave blank until you do.
SLACK_PRICING_CHANNEL=
SLACK_BOT_TOKEN=                 # wire it in code/connector — not auto-consumed by the SDK
SLACK_SIGNING_SECRET=            # wire it in code/connector — not auto-consumed by the SDK
